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

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

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


Revision 1.2 - (show annotations) (download)
Mon Mar 2 18:16:02 2015 UTC (9 years, 3 months ago) by dgoldberg
Branch: MAIN
Changes since 1.1: +49 -17 lines
add files to allow residual-based fwd loop termination

1 #include "STREAMICE_OPTIONS.h"
2
3 subroutine template()
4 use OAD_cp
5 use OAD_tape
6 use OAD_rev
7
8 !$TEMPLATE_PRAGMA_DECLARATIONS
9
10 integer myi
11 ! Temporaries to hold the stack pointers
12 integer temp_double_tape_pointer, temp_integer_tape_pointer, temp_logical_tape_pointer, temp_character_tape_pointer, temp_string_tape_pointer
13 type(modeType) :: our_orig_mode
14
15 integer iaddr
16 external iaddr
17 _RL err_max
18 !<------------------Begin user declarations ---------------------->!
19 ! Insert declarations of dummy variables for calling adjoint computation
20 ! without side effects, and storing adjoint variable iterates
21
22 #if (defined (ALLOW_OPENAD) && defined (ALLOW_STREAMICE_OAD_FP))
23
24 #ifdef STREAMICE_ALLOW_FRIC_CONTROL
25 Real*8 C_basal_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
26 #endif
27 #ifdef STREAMICE_ALLOW_BGLEN_CONTROL
28 Real*8 B_glen_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
29 #endif
30 Real*8 H_streamice_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
31 Real*8 taudx_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
32 Real*8 taudy_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
33 Real*8 u_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
34 Real*8 v_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
35 Real*8 u_new_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
36 Real*8 v_new_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
37 #ifdef STREAMICE_HYBRID_STRESS
38 Real*8 taubx_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
39 Real*8 tauby_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
40 Real*8 visc_full_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
41 Real*8 taubx_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
42 Real*8 tauby_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43 Real*8 visc_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
44 #endif
45
46 !<------------------End user declarations ------------------------>!
47 if (our_rev_mode%plain) then
48 our_orig_mode=our_rev_mode
49 IF(ISINLOOP .eq. 0) THEN
50 CONVERGED = .FALSE.
51 ADJ_CONVERGED = .FALSE.
52 ERR_LAST_CHANGE = 10.
53 end if
54 IF(ISINLOOP .ne. 0) THEN
55 IF(.NOT. CONVERGED) THEN
56 NL_ITER = (NL_ITER + 1)
57 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
58 +,CG_ITERS)
59
60 WRITE(MSGBUF,'(A,I5,A,I4,A)') 'streamice linear solve number',
61 +NL_ITER,' ',CG_ITERS,' iterations '
62
63 CALL print_message(MSGBUF,STANDARDMESSAGEUNIT,'R',1)
64
65 !!!!!!!!!!!! conv check
66
67 if (STREAMICE_chkresidconvergence) then
68
69 CALL openad_STREAMICE_GET_VEL_RESID_ERR_OAD (err_max,myThid)
70
71 WRITE(msgBuf,'(A,E15.7)') 'err/err_init',
72 & err_max/err_init
73 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
74 & SQUEEZE_RIGHT , 1)
75
76 IF (err_max .LE. streamice_nonlin_tol * err_init) THEN
77 CONVERGED = .true.
78 ENDIF
79
80 IF (err_max<err_last_change*1.e-2 .and.
81 & STREAMICE_lower_cg_tol) THEN
82 cgtol = cgtol * 5.e-2
83 err_last_change = err_max
84 WRITE(msgBuf,'(A,E15.7)') 'new cg tol: ',
85 & cgtol
86 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
87 & SQUEEZE_RIGHT , 1)
88 ENDIF
89
90 endif
91
92 if (STREAMICE_chkfixedptconvergence) then
93
94 CALL openad_STREAMICE_GET_FP_ERR_OAD ( err_max_fp, myThid )
95
96 WRITE(msgBuf,'(A,1PE22.14)') 'STREAMICE_FP_ERROR =',
97 & err_max_fp
98 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
99 & SQUEEZE_RIGHT , 1)
100
101 IF (err_max_fp .LE. streamice_nonlin_tol_fp) THEN
102 CONVERGED = .true.
103 ENDIF
104
105
106 endif
107
108 !!!!!!!!!!!! end conv check
109
110 DO bj = myByLo(myThid), myByHi(myThid)
111 DO bi = myBxLo(myThid), myBxHi(myThid)
112 DO j=1-OLy,sNy+OLy
113 DO i=1-OLx,sNx+OLx
114 U_streamice (i,j,bi,bj)=u_new_SI (i,j,bi,bj)
115 V_streamice (i,j,bi,bj)=v_new_SI (i,j,bi,bj)
116 #ifdef STREAMICE_HYBRID_STRESS
117 streamice_taubx(i,j,bi,bj)=taubx_new_si(i,j,bi,bj)
118 streamice_tauby(i,j,bi,bj)=tauby_new_si(i,j,bi,bj)
119 DO m=Nr,1,-1
120 visc_streamice_full(i,j,m,bi,bj)=
121 & visc_full_new_si(i,j,m,bi,bj)
122 ENDDO
123 #endif
124 ENDDO
125 ENDDO
126 ENDDO
127 ENDDO
128
129 end if
130 end if
131
132 our_rev_mode=our_orig_mode
133 end if
134
135
136 !!!!!!!!!!!! TAPE MODE !!!!!!!!!!!!!!
137
138
139
140
141
142 if (our_rev_mode%tape) then
143 our_orig_mode=our_rev_mode
144 if(isinloop.eq.0) then
145 CONVERGED = .false.
146 nl_iter = 0
147 end if
148
149 if(isinloop.eq.1) then
150 IF (.not. (CONVERGED).AND. nl_iter.lt.MAXNLITER) THEN
151 NL_ITER = (NL_ITER+1)
152 !Run in plain mode while not converged
153 our_rev_mode%plain=.true.
154 our_rev_mode%tape=.false.
155 our_rev_mode%adjoint=.false.
156 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
157 +,CG_ITERS)
158
159 !---- write out number of cg iters
160
161 WRITE(MSGBUF,'(A,I5,A,I4,A)') 'streamice linear solve number',
162 +NL_ITER,' ',CG_ITERS,' iterations '
163 OAD_CTMP0 = 1
164 CALL print_message(MSGBUF,STANDARDMESSAGEUNIT,'R',OAD_CTMP0)
165
166 !---- conv check
167
168 if (STREAMICE_chkresidconvergence) then
169
170 CALL openad_STREAMICE_GET_VEL_RESID_ERR_OAD (err_max,myThid)
171
172 WRITE(msgBuf,'(A,E15.7)') 'err/err_init',
173 & err_max/err_init
174 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
175 & SQUEEZE_RIGHT , 1)
176
177 IF (err_max .LE. streamice_nonlin_tol * err_init) THEN
178 CONVERGED = .true.
179 ENDIF
180
181 IF (err_max<err_last_change*1.e-2 .and.
182 & STREAMICE_lower_cg_tol) THEN
183 cgtol = cgtol * 5.e-2
184 err_last_change = err_max
185 WRITE(msgBuf,'(A,E15.7)') 'new cg tol: ',
186 & cgtol
187 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
188 & SQUEEZE_RIGHT , 1)
189 ENDIF
190
191 endif
192
193 if (STREAMICE_chkfixedptconvergence) then
194
195 CALL openad_STREAMICE_GET_FP_ERR_OAD ( err_max_fp, myThid )
196
197 WRITE(msgBuf,'(A,1PE22.14)') 'STREAMICE_FP_ERROR =',
198 & err_max_fp
199 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
200 & SQUEEZE_RIGHT , 1)
201
202 IF (err_max_fp .LE. streamice_nonlin_tol_fp) THEN
203 CONVERGED = .true.
204 ENDIF
205
206 endif
207
208 !--------conv check done
209
210 DO bj = myByLo(myThid), myByHi(myThid)
211 DO bi = myBxLo(myThid), myBxHi(myThid)
212 DO j=1-OLy,sNy+OLy
213 DO i=1-OLx,sNx+OLx
214 U_streamice (i,j,bi,bj)%v=u_new_SI (i,j,bi,bj)%v
215 V_streamice (i,j,bi,bj)%v=v_new_SI (i,j,bi,bj)%v
216 #ifdef STREAMICE_HYBRID_STRESS
217 streamice_taubx(i,j,bi,bj)%v=
218 & taubx_new_si(i,j,bi,bj)%v
219 streamice_tauby(i,j,bi,bj)%v=
220 & tauby_new_si(i,j,bi,bj)%v
221 DO m=Nr,1,-1
222 visc_streamice_full(i,j,m,bi,bj)%v=
223 & visc_full_new_si(i,j,m,bi,bj)%v
224 ENDDO
225 #endif
226 ENDDO
227 ENDDO
228 ENDDO
229 ENDDO
230 if (converged .OR. nl_iter.eq.MAXNLITER) then
231 !Run once in tape mode if this is the last time
232 our_rev_mode%plain=.false.
233 our_rev_mode%tape=.true.
234 our_rev_mode%adjoint=.false.
235 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CG
236 +TOL,CG_ITERS)
237 end if
238 end if
239 end if
240 if(isinloop.eq.2 ) then
241
242 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
243 +,CG_ITERS)
244
245 DO bj = myByLo(myThid), myByHi(myThid)
246 DO bi = myBxLo(myThid), myBxHi(myThid)
247 DO j=1-OLy,sNy+OLy
248 DO i=1-OLx,sNx+OLx
249 U_streamice (i,j,bi,bj)%v=u_new_SI (i,j,bi,bj)%v
250 V_streamice (i,j,bi,bj)%v=v_new_SI (i,j,bi,bj)%v
251 #ifdef STREAMICE_HYBRID_STRESS
252 streamice_taubx(i,j,bi,bj)%v=
253 & taubx_new_si(i,j,bi,bj)%v
254 streamice_tauby(i,j,bi,bj)%v=
255 & tauby_new_si(i,j,bi,bj)%v
256 DO m=Nr,1,-1
257 visc_streamice_full(i,j,m,bi,bj)%v=
258 & visc_full_new_si(i,j,m,bi,bj)%v
259 ENDDO
260 #endif
261 ENDDO
262 ENDDO
263 ENDDO
264 ENDDO
265 end if
266 our_rev_mode=our_orig_mode
267 end if
268
269
270 !!!!!!!!!!!! ADJOINT MODE !!!!!!!!!!!!!!
271
272
273
274 if (our_rev_mode%adjoint) then
275 our_orig_mode=our_rev_mode
276
277 if(isinloop.eq.2) then
278
279 ADJ_CONVERGED = .false.
280 adj_iter = 0
281
282 DO bj = myByLo(myThid), myByHi(myThid)
283 DO bi = myBxLo(myThid), myBxHi(myThid)
284 DO j=1-OLy,sNy+OLy
285 DO i=1-OLx,sNx+OLx
286 v_new_SI (i,j,bi,bj)%d= V_streamice(i,j,bi,bj)%d
287 V_streamice (i,j,bi,bj)%d = 0.0
288 u_new_SI (i,j,bi,bj)%d= U_streamice(i,j,bi,bj)%d
289 U_streamice (i,j,bi,bj)%d = 0.0
290 #ifdef STREAMICE_HYBRID_STRESS
291 taubx_new_si(i,j,bi,bj)%d=
292 & streamice_taubx(i,j,bi,bj)%d
293 streamice_taubx(i,j,bi,bj)%d = 0.0
294 tauby_new_si(i,j,bi,bj)%d=
295 & streamice_tauby(i,j,bi,bj)%d
296 streamice_tauby(i,j,bi,bj)%d = 0.0
297 DO m=Nr,1,-1
298 visc_full_new_si(i,j,m,bi,bj)%d=
299 & visc_streamice_full(i,j,m,bi,bj)%d
300 visc_streamice_full(i,j,m,bi,bj)%d = 0.0
301 ENDDO
302 #endif
303 ENDDO
304 ENDDO
305 ENDDO
306 ENDDO
307
308 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
309 +,CG_ITERS)
310
311 DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1
312 DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1
313 DO J = 1-OLy,sNy+OLy
314 DO I = 1-OLx,sNx+OLx
315
316 U_streamice_dvals(I,J,BI,BJ) =
317 +U_STREAMICE(INT(I),INT(J),INT(BI),INT(BJ))%d
318 V_streamice_dvals(I,J,BI,BJ) =
319 +V_STREAMICE(INT(I),INT(J),INT(BI),INT(BJ))%d
320 #ifdef STREAMICE_HYBRID_STRESS
321 taubx_dvals(I,J,BI,BJ) =
322 +streamice_taubx(INT(I),INT(J),INT(BI),INT(BJ))%d
323 tauby_dvals(I,J,BI,BJ) =
324 +streamice_tauby(INT(I),INT(J),INT(BI),INT(BJ))%d
325 DO m=Nr,1,-1
326 visc_full_dvals(I,J,m,BI,BJ) =
327 +VISC_STREAMICE_FULL(INT(I),INT(J),m,INT(BI),INT(BJ))%d
328 ENDDO
329 #endif
330
331 U_new_si(I,J,BI,BJ)%d =
332 +U_STREAMICE(INT(I),INT(J),INT(BI),INT(BJ))%d
333 V_new_si(I,J,BI,BJ)%d =
334 +V_STREAMICE(INT(I),INT(J),INT(BI),INT(BJ))%d
335 #ifdef STREAMICE_HYBRID_STRESS
336 taubx_new_si(I,J,BI,BJ)%d =
337 +streamice_taubx(INT(I),INT(J),INT(BI),INT(BJ))%d
338 tauby_new_si(I,J,BI,BJ)%d =
339 +streamice_tauby(INT(I),INT(J),INT(BI),INT(BJ))%d
340 DO m=Nr,1,-1
341 visc_full_new_si(I,J,m,BI,BJ)%d =
342 +VISC_STREAMICE_FULL(INT(I),INT(J),m,INT(BI),INT(BJ))%d
343 ENDDO
344 #endif
345
346 END DO
347 END DO
348 END DO
349 END DO
350
351 end if
352
353
354
355 if(isinloop.eq.1) then
356 if((.NOT.ADJ_CONVERGED).AND.(adj_iter.lt.MAXNLITER)) then
357
358 adj_iter = adj_iter + 1
359
360 DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1
361 DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1
362 DO J = 1-OLy,sNy+OLy
363 DO I = 1-OLx,sNx+OLx
364
365 ! Real*8 1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
366 ! Real*8 tauby_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
367 ! Real*8 visc_full_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
368 ! Real*8 taubx_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
369 ! Real*8 tauby_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
370 ! Real*8 visc_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
371
372
373 U_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ)) =
374 +U_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d
375 V_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ)) =
376 +V_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d
377 #ifdef STREAMICE_HYBRID_STRESS
378 TAUBX_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ)) =
379 +streamice_taubx(INT(I),INT(J),INT(BI),INT(BJ))%d
380 TAUBY_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ)) =
381 +streamice_tauby(INT(I),INT(J),INT(BI),INT(BJ))%d
382 DO m=Nr,1,-1
383 VISC_FULL_DUMMY_D(INT(I),INT(J),m,INT(BI),INT(BJ))=
384 +VISC_STREAMICE_FULL(INT(I),INT(J),m,INT(BI),INT(BJ))%d
385 ENDDO
386 #endif
387
388
389 U_NEW_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ)) =
390 +U_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d
391 V_NEW_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ)) =
392 +V_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d
393 #ifdef STREAMICE_HYBRID_STRESS
394 TAUBX_new_DUMMY(INT(I),INT(J),INT(BI),INT(BJ)) =
395 +TAUBX_new_si(INT(I),INT(J),INT(BI),INT(BJ))%d
396 TAUBY_new_DUMMY(INT(I),INT(J),INT(BI),INT(BJ)) =
397 +TAUBY_new_si(INT(I),INT(J),INT(BI),INT(BJ))%d
398 DO m=Nr,1,-1
399 VISC_new_DUMMY(INT(I),INT(J),m,INT(BI),INT(BJ))=
400 +visc_full_new_si(INT(I),INT(J),m,INT(BI),INT(BJ))%d
401 ENDDO
402 #endif
403
404
405
406 U_STREAMICE(INT(I),INT(J),INT(BI),INT(BJ))%d =
407 +U_streamice_dvals(I,J,BI,BJ)
408 V_STREAMICE(INT(I),INT(J),INT(BI),INT(BJ))%d =
409 +V_STREAMICE_dvals(I,J,BI,BJ)
410 #ifdef STREAMICE_HYBRID_STRESS
411 streamice_taubx(INT(I),INT(J),INT(BI),INT(BJ))%d =
412 +taubx_dvals(I,J,BI,BJ)
413 streamice_tauby(INT(I),INT(J),INT(BI),INT(BJ))%d =
414 +tauby_dvals(I,J,BI,BJ)
415 DO m=Nr,1,-1
416 VISC_STREAMICE_FULL(INT(I),INT(J),m,INT(BI),INT(BJ))%d
417 +=visc_full_dvals(I,J,m,BI,BJ)
418 ENDDO
419 #endif
420
421
422
423 #ifdef STREAMICE_ALLOW_FRIC_CONTROL
424 C_basal_dummy_d(INT(I),INT(J),INT(BI),INT(BJ)) =
425 +C_basal_friction(INT(I),INT(J),INT(BI),INT(BJ))%d
426 #endif
427 #ifdef STREAMICE_ALLOW_BGLEN_CONTROL
428 b_glen_dummy_d(INT(I),INT(J),INT(BI),INT(BJ)) =
429 +B_glen(INT(I),INT(J),INT(BI),INT(BJ))%d
430 #endif
431 H_streamice_dummy_d(INT(I),INT(J),INT(BI),INT(BJ)) =
432 +H_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d
433 taudx_dummy_d(INT(I),INT(J),INT(BI),INT(BJ)) =
434 +taudx_si(INT(I),INT(J),INT(BI),INT(BJ))%d
435 taudy_dummy_d(INT(I),INT(J),INT(BI),INT(BJ)) =
436 +taudy_si(INT(I),INT(J),INT(BI),INT(BJ))%d
437
438 END DO
439 END DO
440 END DO
441 END DO
442
443 !Store the stack pointers
444 temp_double_tape_pointer = oad_dt_ptr
445 temp_integer_tape_pointer = oad_it_ptr
446 temp_logical_tape_pointer = oad_lt_ptr
447 temp_string_tape_pointer = oad_st_ptr
448
449
450
451 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
452 +,CG_ITERS)
453
454 DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1
455 DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1
456 DO J = 1-OLy,sNy+OLy
457 DO I = 1-OLx,sNx+OLx
458
459 U_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d =
460 +U_NEW_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ))
461 V_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d =
462 +V_NEW_DUMMY_D(INT(I),INT(J),INT(BI),INT(BJ))
463 #ifdef STREAMICE_HYBRID_STRESS
464 TAUBX_new_si(INT(I),INT(J),INT(BI),INT(BJ))%d =
465 +TAUBX_new_DUMMY(INT(I),INT(J),INT(BI),INT(BJ))
466 TAUBY_new_si(INT(I),INT(J),INT(BI),INT(BJ))%d =
467 +TAUBY_new_DUMMY(INT(I),INT(J),INT(BI),INT(BJ))
468 DO m=Nr,1,-1
469 visc_full_new_si(INT(I),INT(J),m,INT(BI),INT(BJ))%d=
470 +VISC_new_DUMMY(INT(I),INT(J),m,INT(BI),INT(BJ))
471 ENDDO
472 #endif
473
474 END DO
475 END DO
476 END DO
477 END DO
478
479 !---- write out number of cg iters
480
481 WRITE(MSGBUF,'(A,I5)') 'streamice adjoint solve number'
482 +,ADJ_ITER
483 OAD_CTMP0 = 1
484 CALL print_message(MSGBUF,STANDARDMESSAGEUNIT,'R',OAD_CTMP0)
485
486 !---- end write out number of cg iters
487
488 !---- conv check
489
490 if (STREAMICE_chkfixedptconvergence) then
491
492 CALL openad_STREAMICE_GET_FP_ERR_OAD ( err_max_fp, myThid )
493
494 WRITE(msgBuf,'(A,1PE22.14)') 'STREAMICE_FP_ADJ_ERROR =',
495 & err_max_fp
496 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
497 & SQUEEZE_RIGHT , 1)
498
499 IF (err_max_fp .LE. streamice_nonlin_tol_adjoint) THEN
500 ADJ_CONVERGED = .true.
501 ENDIF
502
503 endif
504
505 !--------conv check done
506
507 DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1
508 DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1
509 DO J = 1-OLy,sNy+OLy
510 DO I = 1-OLx,sNx+OLx
511
512 U_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d = U_STREAMICE(
513 +I,J,BI,BJ)%d
514 V_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d = V_STREAMICE(
515 +I,J,BI,BJ)%d
516 #ifdef STREAMICE_HYBRID_STRESS
517 TAUBX_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d = STREAMIC
518 +E_TAUBX(I,J,BI,BJ)%d
519 TAUBY_NEW_SI(INT(I),INT(J),INT(BI),INT(BJ))%d = STREAMIC
520 +E_TAUBY(I,J,BI,BJ)%d
521 DO m=Nr,1,-1
522 VISC_FULL_NEW_SI(INT(I),INT(J),m,INT(BI),INT(BJ))%d =
523 +VISC_STREAMICE_FULL(I,J,m,BI,BJ)%d
524 ENDDO
525 #endif
526
527 U_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d =
528 +U_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
529 V_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d =
530 +V_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
531 #ifdef STREAMICE_HYBRID_STRESS
532 streamice_taubx(INT(I),INT(J),INT(BI),INT(BJ))%d =
533 +taubx_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
534 streamice_tauby(INT(I),INT(J),INT(BI),INT(BJ))%d =
535 +tauby_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
536 DO m=Nr,1,-1
537 visc_streamice_full(I,J,m,BI,BJ)%d =
538 +visc_full_dummy_d(I,J,m,BI,BJ)
539 ENDDO
540 #endif
541
542 #ifdef STREAMICE_ALLOW_FRIC_CONTROL
543 C_basal_friction(INT(I),INT(J),INT(BI),INT(BJ))%d =
544 +C_basal_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
545 #endif
546 #ifdef STREAMICE_ALLOW_BGLEN_CONTROL
547 b_glen(INT(I),INT(J),INT(BI),INT(BJ))%d =
548 +B_glen_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
549 #endif
550 H_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d =
551 +H_streamice_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
552 taudx_si(INT(I),INT(J),INT(BI),INT(BJ))%d =
553 +taudx_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
554 taudy_si(INT(I),INT(J),INT(BI),INT(BJ))%d =
555 +taudy_dummy_d(INT(I),INT(J),INT(BI),INT(BJ))
556
557 END DO
558 END DO
559 END DO
560 END DO
561
562 oad_dt_ptr = temp_double_tape_pointer
563 oad_it_ptr = temp_integer_tape_pointer
564 oad_lt_ptr = temp_logical_tape_pointer
565 oad_st_ptr = temp_string_tape_pointer
566
567 end if
568 end if
569
570 if(isinloop.eq.0) then
571
572 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL,CG_ITERS)
573
574 DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1
575 DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1
576 DO J = 1-OLy,sNy+OLy
577 DO I = 1-OLx,sNx+OLx
578
579 U_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d = 0. _d 0
580 V_streamice(INT(I),INT(J),INT(BI),INT(BJ))%d = 0. _d 0
581 #ifdef STREAMICE_HYBRID_STRESS
582 streamice_taubx(INT(I),INT(J),INT(BI),INT(BJ))%d = 0. _d 0
583 streamice_tauby(INT(I),INT(J),INT(BI),INT(BJ))%d = 0. _d 0
584 DO m=Nr,1,-1
585 visc_streamice_full(INT(I),INT(J),m,INT(BI),INT(BJ))%d = 0. _d 0
586 ENDDO
587 #endif
588
589 END DO
590 END DO
591 END DO
592 END DO
593
594 end if
595
596
597 our_rev_mode=our_orig_mode
598 end if
599
600 #endif
601
602 end subroutine template
603

  ViewVC Help
Powered by ViewVC 1.1.22