/[MITgcm]/MITgcm_contrib/dgoldberg/streamice_oad_files/streamice_vel_solve_openad.F
ViewVC logotype

Contents of /MITgcm_contrib/dgoldberg/streamice_oad_files/streamice_vel_solve_openad.F

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


Revision 1.5 - (show annotations) (download)
Sat Dec 13 14:22:53 2014 UTC (10 years, 7 months ago) by dgoldberg
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +6 -12 lines
changes for accuracy testing

1 C $Header: /u/gcmpack/MITgcm_contrib/snarayan/streamice_oad_files/streamice_vel_solve_openad.F,v 1.2 2014/12/03 20:11:19 snarayan Exp $
2 C $Name: $
3
4 #include "STREAMICE_OPTIONS.h"
5 #ifdef ALLOW_AUTODIFF
6 # include "AUTODIFF_OPTIONS.h"
7 #endif
8
9 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
10
11 CBOP
12 SUBROUTINE STREAMICE_VEL_SOLVE_OPENAD ( myThid, maxNLIter,
13 & maxCGiter, myiter )
14 C /============================================================\
15 C | SUBROUTINE |
16 C | o |
17 C |============================================================|
18 C | |
19 C \============================================================/
20 IMPLICIT NONE
21
22 C === Global variables ===
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "STREAMICE.h"
27 #include "STREAMICE_CG.h"
28
29
30 #ifdef ALLOW_AUTODIFF_TAMC
31 # include "tamc.h"
32 #endif
33
34 C !INPUT/OUTPUT ARGUMENTS
35 INTEGER myThid
36 INTEGER maxNLIter
37 INTEGER maxCGIter
38 INTEGER myIter
39
40 #ifdef ALLOW_STREAMICE
41
42 C LOCAL VARIABLES
43
44 INTEGER i, j, k, l, bi, bj, loopiter
45 CHARACTER*(MAX_LEN_MBUF) msgBuf
46
47 INTEGER NL_iter
48 _RL err_last_change, cgtol
49 LOGICAL CONVERGED
50
51 #ifdef ALLOW_OPENAD
52 INTEGER ADJ_ITER
53 LOGICAL ADJ_CONVERGED
54 #endif
55
56
57
58 #ifdef ALLOW_OPENAD
59 isinloop0 =0
60 isinloop1 =1
61 isinloop2 =2
62 #endif
63
64
65 IF (STREAMICE_ppm_driving_stress) THEN
66 CALL STREAMICE_DRIVING_STRESS_PPM (myThid)
67 ELSE
68 CALL STREAMICE_DRIVING_STRESS (myThid)
69 ENDIF
70
71 #ifdef STREAMICE_STRESS_BOUNDARY_CONTROL
72 _EXCH_XY_RL( taudx_SI , myThid )
73 _EXCH_XY_RL( taudy_SI , myThid )
74 CALL STREAMICE_FORCED_BUTTRESS (myThid)
75 #endif
76
77 CALL TIMER_START ('STREAMICE_VEL_SOLVE',myThid)
78
79 cgtol = streamice_cg_tol
80 nl_iter = 0
81 CONVERGED = .false.
82 err_last_change = 1 _d 1
83
84 _EXCH_XY_RL( taudx_SI , myThid )
85 _EXCH_XY_RL( taudy_SI , myThid )
86
87 DO bj = myByLo(myThid), myByHi(myThid)
88 DO bi = myBxLo(myThid), myBxHi(myThid)
89 DO j=1-OLy,sNy+OLy
90 DO i=1-OLx,sNx+OLx
91 ! U_streamice (i,j,bi,bj)=U_streamice (i,j,bi,bj)+
92 ! & 0.0*u_new_SI (i,j,bi,bj)
93 ! V_streamice (i,j,bi,bj)=V_streamice (i,j,bi,bj)+
94 ! & 0.0*v_new_SI (i,j,bi,bj)
95 U_streamice (i,j,bi,bj)=0.0*U_streamice (i,j,bi,bj)+
96 & 0.0*u_new_SI (i,j,bi,bj)
97 V_streamice (i,j,bi,bj)=0.0*V_streamice (i,j,bi,bj)+
98 & 0.0*v_new_SI (i,j,bi,bj)
99 ENDDO
100 ENDDO
101 ENDDO
102 ENDDO
103 #ifndef ALLOW_OPENAD
104 CALL STREAMICE_VEL_PHISTAGE (
105 I myThid,
106 I maxNLIter,
107 I maxCGiter,
108 O cgtol,
109 O nL_iter,
110 O CONVERGED,
111 O err_last_change,
112 I isinloop0)
113 #else
114 CALL STREAMICE_VEL_PHISTAGE (
115 I myThid,
116 I maxNLIter,
117 I maxCGiter,
118 O cgtol,
119 O nL_iter,
120 O adj_iter,
121 O CONVERGED,
122 O ADJ_CONVERGED,
123 O err_last_change,
124 I isinloop0)
125 #endif
126
127 DO loopiter=1,maxNLIter
128
129 C To avoid using "exit", loop goes through all iterations
130 C but after convergence loop does nothing
131
132 ! IF (.not.CONVERGED) THEN
133
134 #ifndef ALLOW_OPENAD
135 CALL STREAMICE_VEL_PHISTAGE (
136 I myThid,
137 I maxNLIter,
138 I maxCGiter,
139 O cgtol,
140 O nL_iter,
141 O CONVERGED,
142 O err_last_change,
143 I isinloop1)
144 #else
145 CALL STREAMICE_VEL_PHISTAGE (
146 I myThid,
147 I maxNLIter,
148 I maxCGiter,
149 O cgtol,
150 O nL_iter,
151 O adj_iter,
152 O CONVERGED,
153 O ADJ_CONVERGED,
154 O err_last_change,
155 I isinloop1)
156 #endif
157
158
159
160 ENDDO
161
162 #ifndef ALLOW_OPENAD
163 CALL STREAMICE_VEL_PHISTAGE (
164 I myThid,
165 I maxNLIter,
166 I maxCGiter,
167 O cgtol,
168 O nL_iter,
169 O CONVERGED,
170 O err_last_change,
171 I isinloop2)
172 #else
173 CALL STREAMICE_VEL_PHISTAGE (
174 I myThid,
175 I maxNLIter,
176 I maxCGiter,
177 O cgtol,
178 O nL_iter,
179 O adj_iter,
180 O CONVERGED,
181 O ADJ_CONVERGED,
182 O err_last_change,
183 I isinloop2)
184 #endif
185
186
187
188 C END NL ITER. LOOP
189 C-------------------------------------------------------------------
190
191 if (nl_iter .lt. streamice_max_nl_iter) then
192 WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE CONVERGED, ',
193 & nl_iter, ' iterations'
194 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
195 & SQUEEZE_RIGHT , 1)
196 else
197 WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE NOT CONVERGED IN ',
198 & nl_iter, ' iterations'
199 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
200 & SQUEEZE_RIGHT , 1)
201 endif
202
203 _EXCH_XY_RL(U_streamice, myThid)
204 _EXCH_XY_RL(V_streamice, myThid)
205
206 CALL TIMER_STOP ('STREAMICE_VEL_SOLVE',myThid)
207
208 #endif
209 RETURN
210 END

  ViewVC Help
Powered by ViewVC 1.1.22