14 |
|
|
15 |
integer iaddr |
integer iaddr |
16 |
external iaddr |
external iaddr |
|
_RL err_max |
|
17 |
!<------------------Begin user declarations ---------------------->! |
!<------------------Begin user declarations ---------------------->! |
18 |
! Insert declarations of dummy variables for calling adjoint computation |
! Insert declarations of dummy variables for calling adjoint computation |
19 |
! without side effects, and storing adjoint variable iterates |
! without side effects, and storing adjoint variable iterates |
48 |
IF(ISINLOOP .eq. 0) THEN |
IF(ISINLOOP .eq. 0) THEN |
49 |
CONVERGED = .FALSE. |
CONVERGED = .FALSE. |
50 |
ADJ_CONVERGED = .FALSE. |
ADJ_CONVERGED = .FALSE. |
51 |
ERR_LAST_CHANGE = 10. |
!ERR_LAST_CHANGE = 10. |
52 |
end if |
end if |
53 |
IF(ISINLOOP .ne. 0) THEN |
IF(ISINLOOP .ne. 0) THEN |
54 |
IF(.NOT. CONVERGED) THEN |
IF(.NOT. CONVERGED) THEN |
55 |
NL_ITER = (NL_ITER + 1) |
NL_ITER = (NL_ITER + 1) |
56 |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
57 |
+,CG_ITERS) |
+,CG_ITERS,err_max) |
58 |
|
|
59 |
WRITE(MSGBUF,'(A,I5,A,I4,A)') 'streamice linear solve number', |
WRITE(MSGBUF,'(A,I5,A,I4,A)') 'streamice linear solve number', |
60 |
+NL_ITER,' ',CG_ITERS,' iterations ' |
+NL_ITER,' ',CG_ITERS,' iterations ' |
65 |
|
|
66 |
if (STREAMICE_chkresidconvergence) then |
if (STREAMICE_chkresidconvergence) then |
67 |
|
|
|
CALL openad_STREAMICE_GET_VEL_RESID_ERR_OAD (err_max,myThid) |
|
68 |
|
|
69 |
WRITE(msgBuf,'(A,E15.7)') 'err/err_init', |
WRITE(msgBuf,'(A,E15.7)') 'err/err_init', |
70 |
& err_max/err_init |
& err_max/err_init |
86 |
ENDIF |
ENDIF |
87 |
|
|
88 |
endif |
endif |
89 |
|
|
90 |
if (STREAMICE_chkfixedptconvergence) then |
if (STREAMICE_chkfixedptconvergence) then |
91 |
|
|
92 |
CALL openad_STREAMICE_GET_FP_ERR_OAD ( err_max_fp, myThid ) |
CALL openad_STREAMICE_GET_FP_ERR_OAD ( err_max_fp, myThid ) |
103 |
|
|
104 |
endif |
endif |
105 |
|
|
|
!!!!!!!!!!!! end conv check |
|
106 |
|
|
107 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
108 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
123 |
ENDDO |
ENDDO |
124 |
ENDDO |
ENDDO |
125 |
|
|
126 |
|
!!!!!!!!!!!! end conv check |
127 |
|
|
128 |
|
|
129 |
end if |
end if |
130 |
end if |
end if |
131 |
|
|
154 |
our_rev_mode%tape=.false. |
our_rev_mode%tape=.false. |
155 |
our_rev_mode%adjoint=.false. |
our_rev_mode%adjoint=.false. |
156 |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
157 |
+,CG_ITERS) |
+,CG_ITERS,err_max) |
158 |
|
|
159 |
!---- write out number of cg iters |
!---- write out number of cg iters |
160 |
|
|
167 |
|
|
168 |
if (STREAMICE_chkresidconvergence) then |
if (STREAMICE_chkresidconvergence) then |
169 |
|
|
|
CALL openad_STREAMICE_GET_VEL_RESID_ERR_OAD (err_max,myThid) |
|
170 |
|
|
171 |
WRITE(msgBuf,'(A,E15.7)') 'err/err_init', |
WRITE(msgBuf,'(A,E15.7)') 'err/err_init', |
172 |
& err_max/err_init |
& err_max/err_init |
204 |
|
|
205 |
endif |
endif |
206 |
|
|
|
!--------conv check done |
|
|
|
|
207 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
208 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
209 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
224 |
ENDDO |
ENDDO |
225 |
ENDDO |
ENDDO |
226 |
ENDDO |
ENDDO |
227 |
|
|
228 |
|
|
229 |
|
|
230 |
|
|
231 |
|
|
232 |
|
!--------conv check done |
233 |
|
|
234 |
if (converged .OR. nl_iter.eq.MAXNLITER) then |
if (converged .OR. nl_iter.eq.MAXNLITER) then |
235 |
!Run once in tape mode if this is the last time |
!Run once in tape mode if this is the last time |
236 |
our_rev_mode%plain=.false. |
our_rev_mode%plain=.false. |
237 |
our_rev_mode%tape=.true. |
our_rev_mode%tape=.true. |
238 |
our_rev_mode%adjoint=.false. |
our_rev_mode%adjoint=.false. |
239 |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CG |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CG |
240 |
+TOL,CG_ITERS) |
+TOL,CG_ITERS,err_max) |
241 |
end if |
end if |
242 |
end if |
end if |
243 |
end if |
end if |
244 |
if(isinloop.eq.2 ) then |
if(isinloop.eq.2 ) then |
245 |
|
|
246 |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
247 |
+,CG_ITERS) |
+,CG_ITERS,err_max) |
248 |
|
|
249 |
DO bj = myByLo(myThid), myByHi(myThid) |
DO bj = myByLo(myThid), myByHi(myThid) |
250 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
DO bi = myBxLo(myThid), myBxHi(myThid) |
310 |
ENDDO |
ENDDO |
311 |
|
|
312 |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
313 |
+,CG_ITERS) |
+,CG_ITERS,err_max) |
314 |
|
|
315 |
DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1 |
DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1 |
316 |
DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1 |
DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1 |
453 |
|
|
454 |
|
|
455 |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
456 |
+,CG_ITERS) |
+,CG_ITERS,err_max) |
457 |
|
|
458 |
DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1 |
DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1 |
459 |
DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1 |
DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1 |
573 |
|
|
574 |
if(isinloop.eq.0) then |
if(isinloop.eq.0) then |
575 |
|
|
576 |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL,CG_ITERS) |
CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL |
577 |
|
+,CG_ITERS,err_max) |
578 |
|
|
579 |
DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1 |
DO BJ = MYBYLO(MYTHID), MYBYHI(MYTHID), 1 |
580 |
DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1 |
DO BI = MYBXLO(MYTHID), MYBXHI(MYTHID), 1 |