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