/[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.2 - (hide annotations) (download)
Tue Nov 25 18:29:18 2014 UTC (10 years, 7 months ago) by dgoldberg
Branch: MAIN
Changes since 1.1: +73 -4 lines
changes for fixed point template

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

  ViewVC Help
Powered by ViewVC 1.1.22