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
eec2e0d4b3 Dani*0010
c16ce71885 Dani*0011 integer testTape
eec2e0d4b3 Dani*0012
0013
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
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