Back to home page

MITgcm

 
 

    


File indexing completed on 2025-11-22 06:08:58 UTC

view on githubraw file Latest commit feb7fa5d on 2025-11-21 15:45:20 UTC
eec2e0d4b3 Dani*0001 #include "STREAMICE_OPTIONS.h"
                0002 
                0003       SUBROUTINE template()
                0004       use OAD_cp
                0005       use OAD_tape
                0006       use OAD_rev
                0007 
c16ce71885 Dani*0008 !$TEMPLATE_PRAGMA_DECLARATIONS
eec2e0d4b3 Dani*0009 
c16ce71885 Dani*0010       integer testTape
feb7fa5d1e dngo*0011       !logical isTape
eec2e0d4b3 Dani*0012       !type(modeType) :: our_orig_mode
                0013 
feb7fa5d1e dngo*0014 #if (defined(ALLOW_STREAMICE_FP_ADJ) && defined(ALLOW_OPENAD))
b11fa21b0e Dani*0015 
c16ce71885 Dani*0016       if (our_rev_mode%plain .or. our_rev_mode%tape) then
                0017 !      if (our_rev_mode%plain) then
feb7fa5d1e dngo*0018 
c16ce71885 Dani*0019        if (our_rev_mode%tape) then
                0020         testTape=1
                0021         our_rev_mode%plain=.true.
                0022         our_rev_mode%tape=.false.
                0023         our_rev_mode%adjoint=.false.
                0024        else
                0025         testTape=0
                0026        endif
eec2e0d4b3 Dani*0027 
feb7fa5d1e dngo*0028        err_max = 0. _d 0
e17e409e24 Dani*0029        err_sum = 0. _d 0
                0030 
                0031        DO bj = myByLo(myThid), myByHi(myThid)
                0032         DO bi = myBxLo(myThid), myBxHi(myThid)
feb7fa5d1e dngo*0033          err_sum_tile(bi,bj) = 0. _d 0
e17e409e24 Dani*0034         ENDDO
                0035        ENDDO
eec2e0d4b3 Dani*0036 
                0037         DO bj = myByLo(myThid), myByHi(myThid)
                0038          DO bi = myBxLo(myThid), myBxHi(myThid)
feb7fa5d1e dngo*0039           DO j=1-OLy,sNy+OLy
                0040            DO i=1-OLx,sNx+OLx
eec2e0d4b3 Dani*0041             Au_SI (i,j,bi,bj) = 0. _d 0
                0042             Av_SI (i,j,bi,bj) = 0. _d 0
e167b91851 Dani*0043             u_dummy (i,j,bi,bj) = u_streamice(i,j,bi,bj)%v
                0044             v_dummy (i,j,bi,bj) = v_streamice(i,j,bi,bj)%v
eec2e0d4b3 Dani*0045             ubd_SI (i,j,bi,bj)%v = 0. _d 0
                0046             vbd_SI (i,j,bi,bj)%v = 0. _d 0
                0047            ENDDO
                0048           ENDDO
                0049          ENDDO
                0050         ENDDO
                0051 
                0052         CALL openad_STREAMICE_CG_BOUND_VALS( myThid,
                0053      O    ubd_SI,
                0054      O    vbd_SI)
                0055 
                0056         CALL openad_STREAMICE_CG_ACTION( myThid,
                0057      O    Au_SI,
                0058      O    Av_SI,
e167b91851 Dani*0059      I    U_dummy,
                0060      I    V_dummy,
eec2e0d4b3 Dani*0061      I    0, sNx+1, 0, sNy+1 )
                0062 
feb7fa5d1e dngo*0063        IF (streamice_err_norm .LT. 1.0) then
e17e409e24 Dani*0064 
eec2e0d4b3 Dani*0065         DO bj = myByLo(myThid), myByHi(myThid)
                0066          DO bi = myBxLo(myThid), myBxHi(myThid)
                0067           DO j=1,sNy
                0068            DO i=1,sNx
                0069             err_tempu = 0. _d 0
                0070             err_tempv = 0. _d 0
                0071             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
                0072              err_tempu =
                0073      &        ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj)%v -
                0074      &            taudx_SI(i,j,bi,bj)%v)
                0075             ENDIF
                0076             IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
                0077              err_tempv = MAX( err_tempu,
                0078      &        ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj)%v -
                0079      &            taudy_SI(i,j,bi,bj)%v))
                0080             ENDIF
                0081             IF (err_tempv .ge. err_max) THEN
                0082              err_max = err_tempv
                0083             ENDIF
                0084            ENDDO
                0085           ENDDO
                0086          ENDDO
                0087         ENDDO
                0088 
                0089         CALL GLOBAL_MAX_R8 (err_max, myThid)
                0090 
e17e409e24 Dani*0091        ELSE
                0092 
                0093         DO bj = myByLo(myThid), myByHi(myThid)
                0094          DO bi = myBxLo(myThid), myBxHi(myThid)
                0095           DO j=1,sNy
                0096            DO i=1,sNx
                0097 
                0098             IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0099              err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0100      &        (ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj)%v -
                0101      &            taudx_SI(i,j,bi,bj)%v)) ** streamice_err_norm
                0102             ENDIF
                0103             IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0104              err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0105      &        (ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj)%v -
                0106      &            taudy_SI(i,j,bi,bj)%v)) ** streamice_err_norm
                0107             ENDIF
feb7fa5d1e dngo*0108 
e17e409e24 Dani*0109            ENDDO
                0110           ENDDO
                0111          ENDDO
                0112         ENDDO
                0113 
                0114         CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
                0115 
                0116         err_max = err_sum ** (1./streamice_err_norm)
                0117 
                0118        ENDIF
                0119 
c16ce71885 Dani*0120        if (testTape.eq.1) then
                0121         our_rev_mode%plain=.false.
                0122         our_rev_mode%tape=.true.
                0123         our_rev_mode%adjoint=.false.
                0124        endif
eec2e0d4b3 Dani*0125 
                0126       end if
                0127 
b11fa21b0e Dani*0128 #endif
eec2e0d4b3 Dani*0129       end subroutine template