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