/[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.3 - (show annotations) (download)
Mon Mar 23 14:08:18 2015 UTC (9 years, 2 months ago) by dgoldberg
Branch: MAIN
Changes since 1.2: +20 -15 lines
further changes to allow for residual convergence check with christianson f.p. algorithm

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

  ViewVC Help
Powered by ViewVC 1.1.22