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

Annotation 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.4 - (hide annotations) (download)
Wed Mar 25 17:35:29 2015 UTC (9 years, 1 month ago) by dgoldberg
Branch: MAIN
CVS Tags: checkpoint65k, checkpoint65l, checkpoint65m
Changes since 1.3: +4 -4 lines
allow mechanical adjoint with OAD

1 dgoldberg 1.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 dgoldberg 1.3 !ERR_LAST_CHANGE = 10.
52 dgoldberg 1.1 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 dgoldberg 1.3 +,CG_ITERS,err_max)
58 dgoldberg 1.1
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 dgoldberg 1.2 if (STREAMICE_chkresidconvergence) then
67    
68 dgoldberg 1.1
69 dgoldberg 1.2 WRITE(msgBuf,'(A,E15.7)') 'err/err_init',
70     & err_max/err_init
71 dgoldberg 1.1 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
72     & SQUEEZE_RIGHT , 1)
73    
74 dgoldberg 1.2 IF (err_max .LE. streamice_nonlin_tol * err_init) THEN
75 dgoldberg 1.1 CONVERGED = .true.
76     ENDIF
77    
78 dgoldberg 1.2 IF (err_max<err_last_change*1.e-2 .and.
79 dgoldberg 1.1 & STREAMICE_lower_cg_tol) THEN
80     cgtol = cgtol * 5.e-2
81 dgoldberg 1.2 err_last_change = err_max
82 dgoldberg 1.1 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 dgoldberg 1.3
90 dgoldberg 1.2 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 dgoldberg 1.1
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 dgoldberg 1.3 !!!!!!!!!!!! end conv check
127    
128    
129 dgoldberg 1.1 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 dgoldberg 1.3 +,CG_ITERS,err_max)
158 dgoldberg 1.1
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 dgoldberg 1.4 ! OAD_CTMP0 = 1
164     CALL print_message(MSGBUF,STANDARDMESSAGEUNIT,'R',1)
165 dgoldberg 1.1
166     !---- conv check
167    
168 dgoldberg 1.2 if (STREAMICE_chkresidconvergence) then
169 dgoldberg 1.1
170    
171 dgoldberg 1.2 WRITE(msgBuf,'(A,E15.7)') 'err/err_init',
172     & err_max/err_init
173 dgoldberg 1.1 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
174     & SQUEEZE_RIGHT , 1)
175    
176 dgoldberg 1.2 IF (err_max .LE. streamice_nonlin_tol * err_init) THEN
177 dgoldberg 1.1 CONVERGED = .true.
178     ENDIF
179    
180 dgoldberg 1.2 IF (err_max<err_last_change*1.e-2 .and.
181 dgoldberg 1.1 & STREAMICE_lower_cg_tol) THEN
182     cgtol = cgtol * 5.e-2
183 dgoldberg 1.2 err_last_change = err_max
184 dgoldberg 1.1 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 dgoldberg 1.2 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 dgoldberg 1.1 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 dgoldberg 1.3
228    
229    
230    
231    
232     !--------conv check done
233    
234 dgoldberg 1.1 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 dgoldberg 1.2 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CG
240 dgoldberg 1.3 +TOL,CG_ITERS,err_max)
241 dgoldberg 1.1 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 dgoldberg 1.3 +,CG_ITERS,err_max)
248 dgoldberg 1.1
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 dgoldberg 1.3 +,CG_ITERS,err_max)
314 dgoldberg 1.1
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 dgoldberg 1.3 +,CG_ITERS,err_max)
457 dgoldberg 1.1
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 dgoldberg 1.4 ! OAD_CTMP0 = 1
488     CALL print_message(MSGBUF,STANDARDMESSAGEUNIT,'R',1)
489 dgoldberg 1.1
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 dgoldberg 1.3 CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
577     +,CG_ITERS,err_max)
578 dgoldberg 1.1
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