1 |
heimbach |
1.9 |
C $Header: /u/gcmpack/MITgcm/pkg/openad/externalDummies.F,v 1.8 2015/02/18 20:24:14 heimbach Exp $ |
2 |
heimbach |
1.1 |
C $Name: $ |
3 |
heimbach |
1.4 |
|
4 |
|
|
#include "OPENAD_OPTIONS.h" |
5 |
|
|
|
6 |
heimbach |
1.1 |
C ########################################################### |
7 |
heimbach |
1.9 |
SUBROUTINE DUMMY_IN_STEPPING( myTime, myIter, myThid ) |
8 |
|
|
|
9 |
|
|
IMPLICIT NONE |
10 |
|
|
#include "SIZE.h" |
11 |
|
|
#include "EEPARAMS.h" |
12 |
|
|
#include "PARAMS.h" |
13 |
|
|
#include "DYNVARS.h" |
14 |
|
|
_RL myTime |
15 |
|
|
INTEGER myIter |
16 |
|
|
INTEGER myThid |
17 |
|
|
C dummy self dependence (nontrivial so mfef90 doesn't kill it) |
18 |
|
|
theta(1,1,1,1,1)=2*theta(1,1,1,1,1) |
19 |
|
|
end subroutine |
20 |
|
|
C ########################################################### |
21 |
heimbach |
1.1 |
SUBROUTINE EXCH1_RL( |
22 |
|
|
U array, |
23 |
|
|
I myOLw, myOLe, myOLs, myOLn, myNz, |
24 |
|
|
I exchWidthX, exchWidthY, |
25 |
|
|
I cornerMode, myThid ) |
26 |
|
|
|
27 |
|
|
IMPLICIT NONE |
28 |
|
|
#include "SIZE.h" |
29 |
|
|
#include "EEPARAMS.h" |
30 |
|
|
#include "EXCH.h" |
31 |
|
|
INTEGER myOLw, myOLe, myOLs, myOLn, myNz |
32 |
|
|
_RL array( 1-myOLw:sNx+myOLe, |
33 |
|
|
& 1-myOLs:sNy+myOLn, |
34 |
|
|
& myNz, nSx, nSy ) |
35 |
|
|
INTEGER exchWidthX |
36 |
|
|
INTEGER exchWidthY |
37 |
|
|
INTEGER cornerMode |
38 |
|
|
INTEGER myThid |
39 |
|
|
C dummy self dependence (nontrivial so mfef90 doesn't kill it) |
40 |
|
|
array(1,1,1,1,1)=2*array(1,1,1,1,1) |
41 |
|
|
end subroutine |
42 |
|
|
C ########################################################### |
43 |
|
|
C SUBROUTINE EXCH1_RS( |
44 |
|
|
C U array, |
45 |
|
|
C I myOLw, myOLe, myOLs, myOLn, myNz, |
46 |
|
|
C I exchWidthX, exchWidthY, |
47 |
|
|
C I cornerMode, myThid ) |
48 |
|
|
C |
49 |
|
|
C IMPLICIT NONE |
50 |
|
|
C#include "SIZE.h" |
51 |
|
|
C#include "EEPARAMS.h" |
52 |
|
|
C#include "EXCH.h" |
53 |
|
|
C INTEGER myOLw, myOLe, myOLs, myOLn, myNz |
54 |
|
|
C _RS array( 1-myOLw:sNx+myOLe, |
55 |
|
|
C & 1-myOLs:sNy+myOLn, |
56 |
|
|
C & myNz, nSx, nSy ) |
57 |
|
|
C INTEGER exchWidthX |
58 |
|
|
C INTEGER exchWidthY |
59 |
|
|
C INTEGER cornerMode |
60 |
|
|
C INTEGER myThid |
61 |
|
|
C end subroutine |
62 |
|
|
C ########################################################### |
63 |
|
|
C SUBROUTINE GLOBAL_MAX_R8( |
64 |
|
|
C U maxphi, |
65 |
|
|
C I myThid ) |
66 |
|
|
C IMPLICIT NONE |
67 |
|
|
C#include "SIZE.h" |
68 |
|
|
C#include "EEPARAMS.h" |
69 |
|
|
C#include "EESUPPORT.h" |
70 |
|
|
C#include "EXCH.h" |
71 |
|
|
C Real*8 maxPhi |
72 |
|
|
C INTEGER myThid |
73 |
|
|
C maxPhi=2*maxPhi |
74 |
|
|
C end subroutine |
75 |
|
|
C ########################################################### |
76 |
|
|
C SUBROUTINE GLOBAL_SUM_R8( |
77 |
|
|
C U sumphi, |
78 |
|
|
C I myThid ) |
79 |
|
|
C IMPLICIT NONE |
80 |
|
|
C#include "SIZE.h" |
81 |
|
|
C#include "EEPARAMS.h" |
82 |
|
|
C#include "EESUPPORT.h" |
83 |
|
|
C#include "EXCH.h" |
84 |
|
|
C Real*8 sumPhi |
85 |
|
|
C INTEGER myThid |
86 |
|
|
CC dummy self dependence (nontrivial so mfef90 doesn't kill it) |
87 |
|
|
C sumPhi=2*sumPhi |
88 |
|
|
C end subroutine |
89 |
|
|
C ########################################################### |
90 |
|
|
SUBROUTINE GLOBAL_SUM_TILE_RL( |
91 |
|
|
U phiTile, |
92 |
|
|
U sumphi, |
93 |
|
|
I myThid ) |
94 |
|
|
IMPLICIT NONE |
95 |
|
|
#include "SIZE.h" |
96 |
|
|
#include "EEPARAMS.h" |
97 |
|
|
#include "EESUPPORT.h" |
98 |
|
|
#include "EXCH.h" |
99 |
|
|
_RL phiTile(nSx,nSy) |
100 |
|
|
_RL sumPhi |
101 |
|
|
INTEGER myThid |
102 |
|
|
C dummy self dependence (nontrivial so mfef90 doesn't kill it) |
103 |
|
|
sumPhi=2*phiTile(1,1) |
104 |
|
|
end subroutine |
105 |
|
|
C ########################################################### |
106 |
heimbach |
1.5 |
#ifndef ALLOW_STREAMICE |
107 |
heimbach |
1.1 |
SUBROUTINE CG2D( |
108 |
|
|
I cg2d_b, |
109 |
|
|
U cg2d_x, |
110 |
|
|
O firstResidual, |
111 |
|
|
O minResidualSq, |
112 |
|
|
O lastResidual, |
113 |
|
|
U numIters, |
114 |
|
|
O nIterMin, |
115 |
|
|
I myThid ) |
116 |
|
|
IMPLICIT NONE |
117 |
|
|
#include "SIZE.h" |
118 |
|
|
#include "EEPARAMS.h" |
119 |
|
|
#include "PARAMS.h" |
120 |
|
|
#include "CG2D.h" |
121 |
|
|
Real*8 cg2d_b(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
122 |
|
|
Real*8 cg2d_x(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
123 |
|
|
Real*8 firstResidual |
124 |
|
|
Real*8 minResidualSq |
125 |
|
|
Real*8 lastResidual |
126 |
|
|
INTEGER numIters |
127 |
|
|
INTEGER nIterMin |
128 |
|
|
INTEGER myThid |
129 |
|
|
C dummy self dependence (nontrivial so mfef90 doesn't kill it) |
130 |
|
|
cg2d_x(1,1,1,1)=2*cg2d_b(1,1,1,1) |
131 |
|
|
end subroutine |
132 |
heimbach |
1.5 |
#endif |
133 |
|
|
C ########################################################### |
134 |
|
|
#ifdef ALLOW_STREAMICE |
135 |
|
|
SUBROUTINE STREAMICE_CG_SOLVE( |
136 |
|
|
U cg_Uin, ! x-velocities |
137 |
|
|
U cg_Vin, ! y-velocities |
138 |
|
|
I cg_Bu, ! force in x dir |
139 |
|
|
I cg_Bv, ! force in y dir |
140 |
|
|
I A_uu, ! section of matrix that multiplies u and projects on u |
141 |
|
|
I A_uv, ! section of matrix that multiplies v and projects on u |
142 |
|
|
I A_vu, ! section of matrix that multiplies u and projects on v |
143 |
|
|
I A_vv, ! section of matrix that multiplies v and projects on v |
144 |
|
|
I tolerance, |
145 |
|
|
O iters, |
146 |
|
|
I maxiter, |
147 |
|
|
I myThid ) |
148 |
|
|
IMPLICIT NONE |
149 |
|
|
|
150 |
|
|
#include "SIZE.h" |
151 |
|
|
#include "EEPARAMS.h" |
152 |
|
|
#include "PARAMS.h" |
153 |
|
|
#include "STREAMICE.h" |
154 |
|
|
#include "STREAMICE_CG.h" |
155 |
|
|
INTEGER myThid |
156 |
|
|
INTEGER iters |
157 |
|
|
INTEGER maxiter |
158 |
|
|
_RL tolerance |
159 |
|
|
_RL cg_Uin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
160 |
|
|
_RL cg_Vin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
161 |
|
|
_RL cg_Bu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
162 |
|
|
_RL cg_Bv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
163 |
|
|
_RL |
164 |
|
|
& A_uu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1), |
165 |
|
|
& A_vu (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1), |
166 |
|
|
& A_uv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1), |
167 |
|
|
& A_vv (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy,-1:1,-1:1) |
168 |
|
|
|
169 |
|
|
cg_Uin(1,1,1,1) = A_uu(1,1,1,1,1,1) + A_uv(1,1,1,1,1,1) + |
170 |
|
|
& A_vu(1,1,1,1,1,1) + A_vv(1,1,1,1,1,1) + cg_Bu(1,1,1,1) |
171 |
|
|
|
172 |
|
|
cg_Vin(1,1,1,1) = A_uu(1,1,1,1,1,1) + A_uv(1,1,1,1,1,1) + |
173 |
|
|
& A_vu(1,1,1,1,1,1) + A_vv(1,1,1,1,1,1) + cg_Bv(1,1,1,1) |
174 |
|
|
|
175 |
|
|
end subroutine |
176 |
|
|
#endif /* ALLOW_STREAMICE */ |
177 |
heimbach |
1.2 |
C ########################################################### |
178 |
heimbach |
1.7 |
subroutine active_read_xyz( |
179 |
|
|
I active_var_file, |
180 |
|
|
O active_var, |
181 |
|
|
I iRec, |
182 |
|
|
I doglobalread, |
183 |
|
|
I lAdInit, |
184 |
|
|
I myOptimIter, |
185 |
|
|
I myThid, |
186 |
|
|
I dummy |
187 |
|
|
& ) |
188 |
|
|
! xxx template ad_template.active_read_xyz.f90 |
189 |
|
|
implicit none |
190 |
|
|
! == global variables == |
191 |
|
|
#include "EEPARAMS.h" |
192 |
|
|
#include "SIZE.h" |
193 |
|
|
CHARACTER*(80) active_var_file |
194 |
|
|
_RL active_var(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
195 |
|
|
INTEGER iRec |
196 |
|
|
INTEGER myOptimIter |
197 |
|
|
INTEGER myThid |
198 |
|
|
LOGICAL doglobalread |
199 |
|
|
LOGICAL lAdInit |
200 |
|
|
_RL dummy |
201 |
|
|
#ifdef ALLOW_OPENAD_ACTIVE_READ_XYZ |
202 |
|
|
active_var = dummy + active_var |
203 |
|
|
dummy = active_var(1,1,1,1,1) + dummy |
204 |
heimbach |
1.8 |
#endif /* ALLOW_OPENAD_ACTIVE_READ_XYZ */ |
205 |
heimbach |
1.7 |
end subroutine |
206 |
|
|
C ########################################################### |
207 |
heimbach |
1.3 |
subroutine active_read_xy( |
208 |
heimbach |
1.2 |
I active_var_file, |
209 |
|
|
O active_var, |
210 |
|
|
I iRec, |
211 |
|
|
I doglobalread, |
212 |
|
|
I lAdInit, |
213 |
|
|
I myOptimIter, |
214 |
|
|
I myThid, |
215 |
|
|
I dummy |
216 |
|
|
& ) |
217 |
heimbach |
1.7 |
! xxx template ad_template.active_read_xy.f90 |
218 |
heimbach |
1.2 |
implicit none |
219 |
|
|
! == global variables == |
220 |
|
|
#include "EEPARAMS.h" |
221 |
|
|
#include "SIZE.h" |
222 |
heimbach |
1.3 |
CHARACTER*(80) active_var_file |
223 |
heimbach |
1.2 |
_RL active_var(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
224 |
|
|
INTEGER iRec |
225 |
|
|
INTEGER myOptimIter |
226 |
|
|
INTEGER myThid |
227 |
|
|
LOGICAL doglobalread |
228 |
|
|
LOGICAL lAdInit |
229 |
|
|
_RL dummy |
230 |
heimbach |
1.7 |
#ifdef ALLOW_OPENAD_ACTIVE_READ_XY |
231 |
heimbach |
1.2 |
active_var = dummy + active_var |
232 |
|
|
dummy = active_var(1,1,1,1) + dummy |
233 |
heimbach |
1.7 |
#endif /* ALLOW_OPENAD_ACTIVE_READ_XY */ |
234 |
heimbach |
1.2 |
end subroutine |
235 |
heimbach |
1.5 |
C ########################################################### |
236 |
heimbach |
1.6 |
subroutine active_write_xy( |
237 |
|
|
I active_var_file, |
238 |
|
|
I active_var, |
239 |
|
|
I iRec, |
240 |
|
|
I myOptimIter, |
241 |
|
|
I myThid, |
242 |
|
|
I dummy |
243 |
|
|
& ) |
244 |
|
|
! xxx template ad_template.active_write_xy.f90 |
245 |
|
|
implicit none |
246 |
|
|
! == global variables == |
247 |
|
|
#include "EEPARAMS.h" |
248 |
|
|
#include "SIZE.h" |
249 |
|
|
CHARACTER*(80) active_var_file |
250 |
|
|
_RL active_var(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
251 |
|
|
INTEGER iRec |
252 |
|
|
INTEGER myOptimIter |
253 |
|
|
INTEGER myThid |
254 |
|
|
_RL dummy |
255 |
|
|
#ifdef ALLOW_OPENAD_ACTIVE_WRITE |
256 |
|
|
active_var = dummy + active_var |
257 |
|
|
dummy = active_var(1,1,1,1) + dummy |
258 |
|
|
#endif /* ALLOW_OPENAD_ACTIVE_WRITE */ |
259 |
|
|
end subroutine |
260 |
|
|
C ########################################################### |
261 |
heimbach |
1.5 |
|