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
b2f1d2f236 Dani*0001 #include "STREAMICE_OPTIONS.h"
847eec441b Dani*0002
0003 SUBROUTINE template()
0004 use OAD_cp
0005 use OAD_tape
0006 use OAD_rev
0007
0008
0009
0010
0011
0012
0013
0014
feb7fa5d1e dngo*0015 #if (defined(ALLOW_STREAMICE_FP_ADJ) && defined(ALLOW_OPENAD))
847eec441b Dani*0016
feb7fa5d1e dngo*0017 err_max = 0. _d 0
e17e409e24 Dani*0018 err_sum = 0. _d 0
0019 if (streamice_err_norm .lt. 1. _d 0) conj_norm = 1.0
0020 if (streamice_err_norm .eq. 1. _d 0) conj_norm = 0.0
feb7fa5d1e dngo*0021 if (streamice_err_norm .gt. 1. _d 0) conj_norm =
0022 & streamice_err_norm / (streamice_err_norm - 1.0)
e17e409e24 Dani*0023
0024 DO bj = myByLo(myThid), myByHi(myThid)
0025 DO bi = myBxLo(myThid), myBxHi(myThid)
feb7fa5d1e dngo*0026 err_sum_tile(bi,bj) = 0. _d 0
e17e409e24 Dani*0027 ENDDO
0028 ENDDO
0029
847eec441b Dani*0030 if (our_rev_mode%plain) then
feb7fa5d1e dngo*0031
e17e409e24 Dani*0032 if (streamice_err_norm .lt. 1.0) then
847eec441b Dani*0033
0034 DO bj = myByLo(myThid), myByHi(myThid)
0035 DO bi = myBxLo(myThid), myBxHi(myThid)
0036 DO j=1,sNy
0037 DO i=1,sNx
0038 err_tempu = 0. _d 0
0039 err_tempv = 0. _d 0
0040 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
0041 err_tempu =
0042 & ABS (U_streamice(i,j,bi,bj)%v-u_new_SI(i,j,bi,bj)%v)
0043 ENDIF
0044 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
0045 err_tempv = MAX( err_tempu,
0046 & ABS (V_streamice(i,j,bi,bj)%v-v_new_SI(i,j,bi,bj)%v))
0047 ENDIF
0048 IF (err_tempv .ge. err_max) err_max = err_tempv
0049 ENDDO
0050 ENDDO
0051 ENDDO
0052 ENDDO
0053
0054 CALL GLOBAL_MAX_R8 (err_max, myThid)
e17e409e24 Dani*0055
0056 ELSE
0057
0058 DO bj = myByLo(myThid), myByHi(myThid)
0059 DO bi = myBxLo(myThid), myBxHi(myThid)
0060 DO j=1,sNy
0061 DO i=1,sNx
0062 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0063 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0064 & (ABS(U_streamice(i,j,bi,bj)%v-
0065 & u_new_SI(i,j,bi,bj)%v))**streamice_err_norm
0066 ENDIF
0067 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0068 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0069 & (ABS(v_streamice(i,j,bi,bj)%v-
0070 & v_new_SI(i,j,bi,bj)%v))**streamice_err_norm
0071 ENDIF
0072 ENDDO
0073 ENDDO
0074 ENDDO
0075 ENDDO
0076
0077 CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
0078
0079 err_max = err_sum ** (1./streamice_err_norm)
0080
0081 ENDIF
0082
847eec441b Dani*0083 end if
0084
0085 if (our_rev_mode%tape) then
feb7fa5d1e dngo*0086
e17e409e24 Dani*0087 IF (streamice_err_norm .lt. 1.0) then
847eec441b Dani*0088
0089 DO bj = myByLo(myThid), myByHi(myThid)
0090 DO bi = myBxLo(myThid), myBxHi(myThid)
0091 DO j=1,sNy
0092 DO i=1,sNx
0093 err_tempu = 0. _d 0
0094 err_tempv = 0. _d 0
0095 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
0096 err_tempu =
0097 & ABS (U_streamice(i,j,bi,bj)%v-u_new_SI(i,j,bi,bj)%v)
0098 ENDIF
0099 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
0100 err_tempv = MAX( err_tempu,
0101 & ABS (V_streamice(i,j,bi,bj)%v-v_new_SI(i,j,bi,bj)%v))
0102 ENDIF
0103 IF (err_tempv .ge. err_max) err_max = err_tempv
0104 ENDDO
0105 ENDDO
0106 ENDDO
0107 ENDDO
0108
0109 CALL GLOBAL_MAX_R8 (err_max, myThid)
e17e409e24 Dani*0110
0111 ELSE
0112
0113 DO bj = myByLo(myThid), myByHi(myThid)
0114 DO bi = myBxLo(myThid), myBxHi(myThid)
0115 DO j=1,sNy
0116 DO i=1,sNx
0117 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0118 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0119 & (ABS(U_streamice(i,j,bi,bj)%v-
0120 & u_new_SI(i,j,bi,bj)%v))**streamice_err_norm
0121 ENDIF
0122 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0123 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0124 & (ABS(v_streamice(i,j,bi,bj)%v-
0125 & v_new_SI(i,j,bi,bj)%v))**streamice_err_norm
0126 ENDIF
0127 ENDDO
0128 ENDDO
0129 ENDDO
0130 ENDDO
0131
0132 CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
0133
0134 err_max = err_sum ** (1./streamice_err_norm)
0135
0136 ENDIF
feb7fa5d1e dngo*0137
847eec441b Dani*0138 end if
0139
0140 if (our_rev_mode%adjoint) then
0141
e17e409e24 Dani*0142 if (conj_norm .lt. 1.0) then
847eec441b Dani*0143
0144 DO bj = myByLo(myThid), myByHi(myThid)
0145 DO bi = myBxLo(myThid), myBxHi(myThid)
0146 DO j=1,sNy
0147 DO i=1,sNx
0148 err_tempu = 0. _d 0
0149 err_tempv = 0. _d 0
0150 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
0151 err_tempu =
0152 & ABS (U_streamice(i,j,bi,bj)%d-u_new_SI(i,j,bi,bj)%d)
0153 ENDIF
0154 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
0155 err_tempv = MAX( err_tempu,
0156 & ABS (V_streamice(i,j,bi,bj)%d-v_new_SI(i,j,bi,bj)%d))
0157 ENDIF
0158 IF (err_tempv .ge. err_max) err_max = err_tempv
0159 ENDDO
0160 ENDDO
0161 ENDDO
0162 ENDDO
0163
0164 CALL GLOBAL_MAX_R8 (err_max, myThid)
0165
e17e409e24 Dani*0166 ELSE
0167
0168 DO bj = myByLo(myThid), myByHi(myThid)
0169 DO bi = myBxLo(myThid), myBxHi(myThid)
0170 DO j=1,sNy
0171 DO i=1,sNx
0172 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0173 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0174 & (ABS(U_streamice(i,j,bi,bj)%d-
0175 & u_new_SI(i,j,bi,bj)%d))**conj_norm
0176 ENDIF
0177 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
feb7fa5d1e dngo*0178 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
e17e409e24 Dani*0179 & (ABS(v_streamice(i,j,bi,bj)%d-
0180 & v_new_SI(i,j,bi,bj)%d))**conj_norm
0181 ENDIF
0182 ENDDO
0183 ENDDO
0184 ENDDO
0185 ENDDO
0186
0187 CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
0188
0189 err_max = err_sum ** (1./conj_norm)
0190
0191 ENDIF
0192
847eec441b Dani*0193 end if
b11fa21b0e Dani*0194 #endif
847eec441b Dani*0195 end subroutine template