Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:45:05 UTC

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