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

Annotation 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.4 - (hide annotations) (download)
Fri Dec 12 13:47:58 2014 UTC (10 years, 7 months ago) by dgoldberg
Branch: MAIN
Changes since 1.3: +20 -30 lines
continued changes to template -- fixed scheme, reorganized cases, removed unnecessary commented lines

1 dgoldberg 1.4 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 dgoldberg 1.1 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 dgoldberg 1.2 INTEGER NL_iter
48 dgoldberg 1.1 _RL err_last_change, cgtol
49     LOGICAL CONVERGED
50    
51 dgoldberg 1.2 #ifdef ALLOW_OPENAD
52     INTEGER ADJ_ITER
53     LOGICAL ADJ_CONVERGED
54     #endif
55    
56    
57 dgoldberg 1.1
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 dgoldberg 1.4 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     ENDDO
96 dgoldberg 1.3 ENDDO
97     ENDDO
98     ENDDO
99 dgoldberg 1.2 #ifndef ALLOW_OPENAD
100 dgoldberg 1.1 CALL STREAMICE_VEL_PHISTAGE (
101     I myThid,
102     I maxNLIter,
103     I maxCGiter,
104     O cgtol,
105     O nL_iter,
106     O CONVERGED,
107     O err_last_change,
108     I isinloop0)
109 dgoldberg 1.2 #else
110     CALL STREAMICE_VEL_PHISTAGE (
111     I myThid,
112     I maxNLIter,
113     I maxCGiter,
114     O cgtol,
115     O nL_iter,
116     O adj_iter,
117     O CONVERGED,
118     O ADJ_CONVERGED,
119     O err_last_change,
120     I isinloop0)
121     #endif
122 dgoldberg 1.1
123     DO loopiter=1,maxNLIter
124    
125     C To avoid using "exit", loop goes through all iterations
126     C but after convergence loop does nothing
127    
128     ! IF (.not.CONVERGED) THEN
129    
130 dgoldberg 1.2 #ifndef ALLOW_OPENAD
131     CALL STREAMICE_VEL_PHISTAGE (
132     I myThid,
133     I maxNLIter,
134     I maxCGiter,
135     O cgtol,
136     O nL_iter,
137     O CONVERGED,
138     O err_last_change,
139     I isinloop1)
140     #else
141     CALL STREAMICE_VEL_PHISTAGE (
142 dgoldberg 1.1 I myThid,
143     I maxNLIter,
144     I maxCGiter,
145     O cgtol,
146     O nL_iter,
147 dgoldberg 1.2 O adj_iter,
148 dgoldberg 1.1 O CONVERGED,
149 dgoldberg 1.2 O ADJ_CONVERGED,
150 dgoldberg 1.1 O err_last_change,
151     I isinloop1)
152 dgoldberg 1.2 #endif
153    
154 dgoldberg 1.4 !DO bj = myByLo(myThid), myByHi(myThid)
155     ! DO bi = myBxLo(myThid), myBxHi(myThid)
156     ! DO j=1-OLy,sNy+OLy
157     ! DO i=1-OLx,sNx+OLx
158     ! U_streamice (i,j,bi,bj)=u_new_SI (i,j,bi,bj)
159     ! V_streamice (i,j,bi,bj)=v_new_SI (i,j,bi,bj)
160     ! ENDDO
161     ! ENDDO
162     ! ENDDO
163     !ENDDO
164 dgoldberg 1.1
165    
166     ENDDO
167    
168 dgoldberg 1.2 #ifndef ALLOW_OPENAD
169 dgoldberg 1.1 CALL STREAMICE_VEL_PHISTAGE (
170     I myThid,
171     I maxNLIter,
172     I maxCGiter,
173     O cgtol,
174     O nL_iter,
175     O CONVERGED,
176     O err_last_change,
177     I isinloop2)
178 dgoldberg 1.2 #else
179     CALL STREAMICE_VEL_PHISTAGE (
180     I myThid,
181     I maxNLIter,
182     I maxCGiter,
183     O cgtol,
184     O nL_iter,
185     O adj_iter,
186     O CONVERGED,
187     O ADJ_CONVERGED,
188     O err_last_change,
189     I isinloop2)
190     #endif
191    
192 dgoldberg 1.1
193    
194     C END NL ITER. LOOP
195     C-------------------------------------------------------------------
196    
197     if (nl_iter .lt. streamice_max_nl_iter) then
198     WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE CONVERGED, ',
199     & nl_iter, ' iterations'
200     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
201     & SQUEEZE_RIGHT , 1)
202     else
203     WRITE(msgBuf,'(A,I5,A)') 'VELOCITY SOLVE NOT CONVERGED IN ',
204     & nl_iter, ' iterations'
205     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
206     & SQUEEZE_RIGHT , 1)
207     endif
208    
209     _EXCH_XY_RL(U_streamice, myThid)
210     _EXCH_XY_RL(V_streamice, myThid)
211    
212     CALL TIMER_STOP ('STREAMICE_VEL_SOLVE',myThid)
213    
214     #endif
215     RETURN
216     END

  ViewVC Help
Powered by ViewVC 1.1.22