/[MITgcm]/MITgcm/tools/OAD_support/ad_template.streamice_get_fp_err_oad.F
ViewVC logotype

Contents of /MITgcm/tools/OAD_support/ad_template.streamice_get_fp_err_oad.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download)
Fri Mar 18 19:17:35 2016 UTC (8 years, 1 month ago) by dgoldberg
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65v, checkpoint65w, HEAD
Changes since 1.3: +99 -4 lines
allow for different error norms in iteration

1 #include "STREAMICE_OPTIONS.h"
2
3 SUBROUTINE template()
4 use OAD_cp
5 use OAD_tape
6 use OAD_rev
7
8 C
9 C **** Global Variables & Derived Type Definitions ****
10 C
11
12 C
13 C **** Parameters and Result ****
14 C
15 #if (defined (ALLOW_STREAMICE_OAD_FP))
16
17 err_max = 0. _d 0
18 err_sum = 0. _d 0
19 if (streamice_err_norm .lt. 1. _d 0) conj_norm = 1.0
20 if (streamice_err_norm .eq. 1. _d 0) conj_norm = 0.0
21 if (streamice_err_norm .gt. 1. _d 0) conj_norm =
22 & streamice_err_norm / (streamice_err_norm - 1.0)
23
24 DO bj = myByLo(myThid), myByHi(myThid)
25 DO bi = myBxLo(myThid), myBxHi(myThid)
26 err_sum_tile(bi,bj) = 0. _d 0
27 ENDDO
28 ENDDO
29
30
31 if (our_rev_mode%plain) then
32
33 if (streamice_err_norm .lt. 1.0) then
34
35 DO bj = myByLo(myThid), myByHi(myThid)
36 DO bi = myBxLo(myThid), myBxHi(myThid)
37 DO j=1,sNy
38 DO i=1,sNx
39 err_tempu = 0. _d 0
40 err_tempv = 0. _d 0
41 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
42 err_tempu =
43 & ABS (U_streamice(i,j,bi,bj)%v-u_new_SI(i,j,bi,bj)%v)
44 ENDIF
45 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
46 err_tempv = MAX( err_tempu,
47 & ABS (V_streamice(i,j,bi,bj)%v-v_new_SI(i,j,bi,bj)%v))
48 ENDIF
49 IF (err_tempv .ge. err_max) err_max = err_tempv
50 ENDDO
51 ENDDO
52 ENDDO
53 ENDDO
54
55 CALL GLOBAL_MAX_R8 (err_max, myThid)
56
57 ELSE
58
59 DO bj = myByLo(myThid), myByHi(myThid)
60 DO bi = myBxLo(myThid), myBxHi(myThid)
61 DO j=1,sNy
62 DO i=1,sNx
63 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
64 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
65 & (ABS(U_streamice(i,j,bi,bj)%v-
66 & u_new_SI(i,j,bi,bj)%v))**streamice_err_norm
67 ENDIF
68 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
69 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
70 & (ABS(v_streamice(i,j,bi,bj)%v-
71 & v_new_SI(i,j,bi,bj)%v))**streamice_err_norm
72 ENDIF
73 ENDDO
74 ENDDO
75 ENDDO
76 ENDDO
77
78 CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
79
80 err_max = err_sum ** (1./streamice_err_norm)
81
82 ENDIF
83
84 end if
85
86
87 if (our_rev_mode%tape) then
88
89 IF (streamice_err_norm .lt. 1.0) then
90
91 DO bj = myByLo(myThid), myByHi(myThid)
92 DO bi = myBxLo(myThid), myBxHi(myThid)
93 DO j=1,sNy
94 DO i=1,sNx
95 err_tempu = 0. _d 0
96 err_tempv = 0. _d 0
97 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
98 err_tempu =
99 & ABS (U_streamice(i,j,bi,bj)%v-u_new_SI(i,j,bi,bj)%v)
100 ENDIF
101 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
102 err_tempv = MAX( err_tempu,
103 & ABS (V_streamice(i,j,bi,bj)%v-v_new_SI(i,j,bi,bj)%v))
104 ENDIF
105 IF (err_tempv .ge. err_max) err_max = err_tempv
106 ENDDO
107 ENDDO
108 ENDDO
109 ENDDO
110
111 CALL GLOBAL_MAX_R8 (err_max, myThid)
112
113 ELSE
114
115 DO bj = myByLo(myThid), myByHi(myThid)
116 DO bi = myBxLo(myThid), myBxHi(myThid)
117 DO j=1,sNy
118 DO i=1,sNx
119 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
120 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
121 & (ABS(U_streamice(i,j,bi,bj)%v-
122 & u_new_SI(i,j,bi,bj)%v))**streamice_err_norm
123 ENDIF
124 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
125 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
126 & (ABS(v_streamice(i,j,bi,bj)%v-
127 & v_new_SI(i,j,bi,bj)%v))**streamice_err_norm
128 ENDIF
129 ENDDO
130 ENDDO
131 ENDDO
132 ENDDO
133
134 CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
135
136 err_max = err_sum ** (1./streamice_err_norm)
137
138 ENDIF
139
140 end if
141
142 if (our_rev_mode%adjoint) then
143
144 if (conj_norm .lt. 1.0) then
145
146 DO bj = myByLo(myThid), myByHi(myThid)
147 DO bi = myBxLo(myThid), myBxHi(myThid)
148 DO j=1,sNy
149 DO i=1,sNx
150 err_tempu = 0. _d 0
151 err_tempv = 0. _d 0
152 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
153 err_tempu =
154 & ABS (U_streamice(i,j,bi,bj)%d-u_new_SI(i,j,bi,bj)%d)
155 ENDIF
156 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
157 err_tempv = MAX( err_tempu,
158 & ABS (V_streamice(i,j,bi,bj)%d-v_new_SI(i,j,bi,bj)%d))
159 ENDIF
160 IF (err_tempv .ge. err_max) err_max = err_tempv
161 ENDDO
162 ENDDO
163 ENDDO
164 ENDDO
165
166 CALL GLOBAL_MAX_R8 (err_max, myThid)
167
168 ELSE
169
170 DO bj = myByLo(myThid), myByHi(myThid)
171 DO bi = myBxLo(myThid), myBxHi(myThid)
172 DO j=1,sNy
173 DO i=1,sNx
174 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
175 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
176 & (ABS(U_streamice(i,j,bi,bj)%d-
177 & u_new_SI(i,j,bi,bj)%d))**conj_norm
178 ENDIF
179 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
180 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
181 & (ABS(v_streamice(i,j,bi,bj)%d-
182 & v_new_SI(i,j,bi,bj)%d))**conj_norm
183 ENDIF
184 ENDDO
185 ENDDO
186 ENDDO
187 ENDDO
188
189 CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
190
191 err_max = err_sum ** (1./conj_norm)
192
193 ENDIF
194
195 end if
196 #endif
197 end subroutine template

  ViewVC Help
Powered by ViewVC 1.1.22