/[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.1 - (hide annotations) (download)
Sat Feb 21 19:07:27 2015 UTC (9 years, 2 months ago) by dgoldberg
Branch: MAIN
CVS Tags: checkpoint65j
template for christianson fixed-point treatment of streamice vel solve

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

  ViewVC Help
Powered by ViewVC 1.1.22