/[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.5 - (hide 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 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 dgoldberg 1.5 ! 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 dgoldberg 1.4 & 0.0*u_new_SI (i,j,bi,bj)
97 dgoldberg 1.5 V_streamice (i,j,bi,bj)=0.0*V_streamice (i,j,bi,bj)+
98 dgoldberg 1.4 & 0.0*v_new_SI (i,j,bi,bj)
99     ENDDO
100 dgoldberg 1.3 ENDDO
101     ENDDO
102     ENDDO
103 dgoldberg 1.2 #ifndef ALLOW_OPENAD
104 dgoldberg 1.1 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 dgoldberg 1.2 #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 dgoldberg 1.1
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 dgoldberg 1.2 #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 dgoldberg 1.1 I myThid,
147     I maxNLIter,
148     I maxCGiter,
149     O cgtol,
150     O nL_iter,
151 dgoldberg 1.2 O adj_iter,
152 dgoldberg 1.1 O CONVERGED,
153 dgoldberg 1.2 O ADJ_CONVERGED,
154 dgoldberg 1.1 O err_last_change,
155     I isinloop1)
156 dgoldberg 1.2 #endif
157    
158 dgoldberg 1.1
159    
160     ENDDO
161    
162 dgoldberg 1.2 #ifndef ALLOW_OPENAD
163 dgoldberg 1.1 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 dgoldberg 1.2 #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 dgoldberg 1.1
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