1 |
cnh |
1.1 |
C $Id: set_defaults.F,v 1.16 1997/06/24 16:50:47 cnh Exp $ |
2 |
|
|
#include "CPP_OPTIONS.h" |
3 |
|
|
#include "CPP_MACROS.h" |
4 |
|
|
C================================================================================ |
5 |
|
|
C Procedure name: SET_DEFAULTS | |
6 |
|
|
C Function: Assign default values to model parameters. | |
7 |
|
|
C Comments: | |
8 |
|
|
C================================================================================ |
9 |
|
|
|
10 |
|
|
CStartofinterface |
11 |
|
|
SUBROUTINE SET_DEFAULTS ( |
12 |
|
|
O U, V, W, T, S, PH, PS ) |
13 |
|
|
IMPLICIT NONE |
14 |
|
|
C /-------------------------------------------------------------------------\ |
15 |
|
|
C | Global variable declarations | |
16 |
|
|
C \-------------------------------------------------------------------------/ |
17 |
|
|
#include "SIZE.h" |
18 |
|
|
#include "PARAMS.h" |
19 |
|
|
#include "STRINGS.h" |
20 |
|
|
#include "OPERATORS.h" |
21 |
|
|
#include "GRID.h" |
22 |
|
|
#include "OLDG.h" |
23 |
|
|
#include "MASKS.h" |
24 |
|
|
#include "CG2DA.h" |
25 |
|
|
#include "CG2DZ.h" |
26 |
|
|
#include "AJAINF.h" |
27 |
|
|
#include "EPARAM.h" |
28 |
|
|
#include "FORCING.h" |
29 |
|
|
C /-------------------------------------------------------------------------\ |
30 |
|
|
C | Routine argument declarations | |
31 |
|
|
C |=========================================================================| |
32 |
|
|
C | U, V, W - X,Y,Z Velocity ( m/s, m/s, Pa/s ). | |
33 |
|
|
C | T - Potential temperature (oC). | |
34 |
|
|
C | S - Salinity (ppt). | |
35 |
|
|
C | PH - Hydrostatic pressure perturbation (m). | |
36 |
|
|
C | PS - Surface pressure (m). | |
37 |
|
|
C \-------------------------------------------------------------------------/ |
38 |
|
|
REAL U (_I3(nz,nx,ny)) |
39 |
|
|
REAL V (_I3(nz,nx,ny)) |
40 |
|
|
REAL W (_I3(nz,nx,ny)) |
41 |
|
|
REAL T (_I3(nz,nx,ny)) |
42 |
|
|
REAL S (_I3(nz,nx,ny)) |
43 |
|
|
REAL PH(_I3(nz,nx,ny)) |
44 |
|
|
REAL PS(nx, ny ) |
45 |
|
|
|
46 |
|
|
CEndofinteface |
47 |
|
|
|
48 |
|
|
C /-------------------------------------------------------------------------\ |
49 |
|
|
C | Local variable declarations | |
50 |
|
|
C |=========================================================================| |
51 |
|
|
C | DELTAZ - Layer thickness (m). | |
52 |
|
|
C | torry - Reference wind stress (N). | |
53 |
|
|
C | y - Distance accumulator (m). | |
54 |
|
|
C | ySize - Basin extent in y (m). | |
55 |
|
|
C | pBeta - Planetary beta (s^-1.m^-1). | |
56 |
|
|
C | I,J,K - Loop counters. | |
57 |
|
|
C \-------------------------------------------------------------------------/ |
58 |
|
|
REAL DELTAZ(nz) |
59 |
|
|
REAL torry |
60 |
|
|
REAL y |
61 |
|
|
REAL ySize |
62 |
|
|
REAL pBeta |
63 |
|
|
REAL Q |
64 |
|
|
REAL DELTAF |
65 |
|
|
REAL Fref |
66 |
|
|
REAL fWall |
67 |
|
|
REAL Beta |
68 |
|
|
REAL r |
69 |
|
|
REAL Kz |
70 |
|
|
REAL Dep |
71 |
|
|
REAL Rho0 |
72 |
|
|
REAL dist |
73 |
|
|
REAL RMAX |
74 |
|
|
REAL RSQ |
75 |
|
|
REAL tau |
76 |
|
|
REAL XCENTER |
77 |
|
|
REAL YCENTER |
78 |
|
|
REAL mx |
79 |
|
|
REAL mn |
80 |
|
|
REAL HEATFLAG |
81 |
|
|
REAL HEATSUM |
82 |
|
|
REAL RANDN |
83 |
|
|
INTEGER I |
84 |
|
|
INTEGER J |
85 |
|
|
INTEGER K |
86 |
|
|
|
87 |
|
|
REAL TAUMAX, DISTY, LY |
88 |
|
|
C |
89 |
|
|
C /-------------------------------------------------------------------------\ |
90 |
|
|
C | Parameter settings for small double gyre beta-plane experiment. | |
91 |
|
|
C \=========================================================================| |
92 |
|
|
C |
93 |
|
|
G = 9.81D0 |
94 |
|
|
RONIL = 999.8D0 |
95 |
|
|
CP = 3900.D0 |
96 |
|
|
CENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNORE |
97 |
|
|
|
98 |
|
|
delT = 1200.D0 |
99 |
|
|
freeSurfFac = 1.D0 |
100 |
|
|
startTime = 0. |
101 |
|
|
endTime = startTime+10.*delT |
102 |
|
|
dPUFreq = 300.*delT |
103 |
|
|
|
104 |
|
|
|
105 |
|
|
CSTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORE |
106 |
|
|
phiMin = 0. |
107 |
|
|
dPhi = 4.0 |
108 |
|
|
dTheta = 4.0 |
109 |
|
|
CENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNORE |
110 |
|
|
|
111 |
|
|
|
112 |
|
|
a2MomXY = 4.D2 |
113 |
|
|
a2MomZ = 1.D-2*G*RONIL*G*RONIL |
114 |
|
|
a4MomXY = 0.D0 |
115 |
|
|
a2TempXY = 4.D2 |
116 |
|
|
a2TempZ = 1.D-2*G*RONIL*G*RONIL |
117 |
|
|
C a2TempZ = 1.D-5*G*RONIL*G*RONIL |
118 |
|
|
a4TempXy = 0.D0 |
119 |
|
|
|
120 |
|
|
|
121 |
|
|
CSTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORESTARTIGNORE |
122 |
|
|
WRITE(20,*) ' delT',delT |
123 |
|
|
WRITE(20,*) ' startTime',startTime |
124 |
|
|
WRITE(20,*) ' endTime',endTime |
125 |
|
|
WRITE(20,*) ' dPUFreq',dPUFreq |
126 |
|
|
WRITE(20,*) ' a2MomXY',a2MomXY |
127 |
|
|
WRITE(20,*) ' a2MomZ',a2MomZ |
128 |
|
|
WRITE(20,*) ' a2TempXY',a2TempXY |
129 |
|
|
WRITE(20,*) ' a2TempZ',a2TempZ |
130 |
|
|
C********* GMGS ******************* |
131 |
|
|
C Ratio of time step |
132 |
|
|
asyncfac = 1.0 |
133 |
|
|
C Scale dependent mixing scheme parameters |
134 |
|
|
difref = a2tempXY |
135 |
|
|
difmin = 0.1 * a2tempXY |
136 |
|
|
difhmx = 2.5 * a2tempXY |
137 |
|
|
coef = 1.8E9 |
138 |
|
|
dbotm = 1000. |
139 |
|
|
C NOTE: MOD( INT(dslpcalcfreq), INT(dkcalcfreq) ) must = 0 |
140 |
|
|
dslpcalcfreq = 2. * delT |
141 |
|
|
dkcalcfreq = 12. * delT |
142 |
|
|
C Threashold for mix layer base |
143 |
|
|
MixLayrDensGrad = 0.05 |
144 |
|
|
C Slope factors |
145 |
|
|
slpmax1=5.e-3 |
146 |
|
|
slpmax2=1.e-2 |
147 |
|
|
slpmax3=1.e-3 |
148 |
|
|
small=1.e-30 |
149 |
|
|
dthin=50. |
150 |
|
|
C Minimum density stratification |
151 |
|
|
MinSigStrat= -1.e-8 |
152 |
|
|
c epsl = Av/Ah in Redis scheme |
153 |
|
|
epsl = 0. |
154 |
|
|
trDifScheme = gmconKh |
155 |
|
|
verticalProfKh = .FALSE. |
156 |
|
|
|
157 |
|
|
divHmax = 1.D+300 |
158 |
|
|
divHMin = 0. |
159 |
|
|
rDelt = 1./DELT |
160 |
|
|
numberOfTimeSteps = NINT((endTime-startTime)/delT) |
161 |
|
|
WRITE(20,*) ' numberOfTimeSteps',numberOfTimeSteps |
162 |
|
|
currentTime = startTime |
163 |
|
|
nIter = NINT(startTime/delt) |
164 |
|
|
WRITE(20,*) ' nIter',nIter |
165 |
|
|
WRITE(puSuffix,'(I10.10)') nIter |
166 |
|
|
PickupRun = .FALSE. |
167 |
|
|
IF ( startTime .NE. 0. ) pickupRun = .TRUE. |
168 |
|
|
C State variables |
169 |
|
|
gsNM1 = 0. |
170 |
|
|
gtNM1 = 0. |
171 |
|
|
guNM1 = 0. |
172 |
|
|
gvNM1 = 0. |
173 |
|
|
U = 0. |
174 |
|
|
V = 0. |
175 |
|
|
W = 0. |
176 |
|
|
S = 0. |
177 |
|
|
PH = 0. |
178 |
|
|
PS = 0. |
179 |
|
|
PSNM1 = 0. |
180 |
|
|
PHNM1 = 0. |
181 |
|
|
uAja = 0. |
182 |
|
|
vAja = 0. |
183 |
|
|
CENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNORE |
184 |
|
|
|
185 |
|
|
|
186 |
|
|
THS(1) = 20.D0 |
187 |
|
|
THS(2) = 10.D0 |
188 |
|
|
C THS(3) = 10.D0 |
189 |
|
|
C THS(4) = 6.D0 |
190 |
|
|
SSPPT = 10.D0 |
191 |
|
|
T(_I3(1,:,:)) = 20.0D0 |
192 |
|
|
T(_I3(2,:,:)) = 10.0D0 |
193 |
|
|
C T(_I3(3,:,:)) = 10.0D0 |
194 |
|
|
C T(_I3(4,:,:)) = 6.0D0 |
195 |
|
|
C T(_I3(1,:,:)) = 1.D-12 |
196 |
|
|
C T(_I3(2,:,:)) = 0. |
197 |
|
|
C T(_I3(3,:,:)) = 0. |
198 |
|
|
C T(_I3(4,:,:)) = 0. |
199 |
|
|
C T(_I3(1,:,:)) = 23.0D0 |
200 |
|
|
C T(_I3(2,:,:)) = 22.0D0 |
201 |
|
|
C T(_I3(3,:,:)) = 21.0D0 |
202 |
|
|
C T(_I3(4,:,:)) = 20.0D0 |
203 |
|
|
S = 10.0D0 |
204 |
|
|
DELTAZ(1) = 500.0D0 |
205 |
|
|
DELTAZ(2) = 500.0D0 |
206 |
|
|
C DELTAZ(3) = 1500.0D0 |
207 |
|
|
C DELTAZ(4) = 2500.0D0 |
208 |
|
|
|
209 |
|
|
C Geometry |
210 |
|
|
DM = 20. D3 |
211 |
|
|
WRITE(20,*) ' DM',DM |
212 |
|
|
|
213 |
|
|
|
214 |
|
|
CBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNORE |
215 |
|
|
rPvolHat = 0. |
216 |
|
|
DO K = 1, nz |
217 |
|
|
DELPS(K) = G*RONIL*DELTAZ(K) |
218 |
|
|
XA(_I3(K,:,:)) = DELPS(K)*DM |
219 |
|
|
YA(_I3(K,:,:)) = DELPS(K)*DM |
220 |
|
|
rUVol(_I3(K,:,:)) = 1.D0/DM/DM/DELPS(K) |
221 |
|
|
rVVol(_I3(K,:,:)) = 1.D0/DM/DM/DELPS(K) |
222 |
|
|
rPVol(_I3(K,:,:)) = 1.D0/DM/DM/DELPS(K) |
223 |
|
|
rPvolHat = rPvolHat+DM*DM*DELPS(K) |
224 |
|
|
IF ( K .EQ. 1 ) THEN |
225 |
|
|
uDdzOp(_I3(K,:,:)) = 1.D0/DELPS(K) |
226 |
|
|
vDdzOp(_I3(K,:,:)) = 1.D0/DELPS(K) |
227 |
|
|
pDdzOp(_I3(K,:,:)) = 1.D0/DELPS(K) |
228 |
|
|
ELSE |
229 |
|
|
uDdzOp(_I3(K,:,:)) = 2.D0/(DELPS(K)+DELPS(K-1)) |
230 |
|
|
vDdzOp(_I3(K,:,:)) = 2.D0/(DELPS(K)+DELPS(K-1)) |
231 |
|
|
pDdzOp(_I3(K,:,:)) = 2.D0/(DELPS(K)+DELPS(K-1)) |
232 |
|
|
ENDIF |
233 |
|
|
! begin *** Redi Operators |
234 |
|
|
rDZatP(K)=1.D0/DELPS(K) |
235 |
|
|
if (K.eq.1) then |
236 |
|
|
rDZatW(K)=1.D0/(DELPS(K)) |
237 |
|
|
else |
238 |
|
|
rDZatW(K)=2.D0/(DELPS(K)+DELPS(K-1)) |
239 |
|
|
endif |
240 |
|
|
! end ***** Redi Operators |
241 |
|
|
ENDDO |
242 |
|
|
! begin *** Redi Operators |
243 |
|
|
rDXatU=1.d0/DM |
244 |
|
|
rDYatV=1.d0/DM |
245 |
|
|
! end ***** Redi Operators |
246 |
|
|
|
247 |
|
|
ZA = DM*DM |
248 |
|
|
rPVolHat = 1.D0/rPvolHat |
249 |
|
|
uDdxOp = 1.D0/DM |
250 |
|
|
uDdyOp = 1.D0/DM |
251 |
|
|
vDdxOp = uDdxOp |
252 |
|
|
vDdyOp = uDdyOp |
253 |
|
|
pDdxOp = uDdxOp |
254 |
|
|
pDdyOp = uDdyOp |
255 |
|
|
C Physical parameters |
256 |
|
|
uTphiOp = 0. |
257 |
|
|
vTphiOp = 0. |
258 |
|
|
fCorW = 0. |
259 |
|
|
pBeta = 1.D-11 |
260 |
|
|
CENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNOREENDIGNORE |
261 |
|
|
|
262 |
|
|
|
263 |
|
|
C radial BETA code begins - to use comment out 'NOBETA CODE' following |
264 |
|
|
XCENTER = (Nx + 1)/2 |
265 |
|
|
WRITE(0,*) ' XCENTER: ', XCENTER |
266 |
|
|
YCENTER = (Ny + 1)/2 |
267 |
|
|
WRITE(0,*) ' YCENTER: ', YCENTER |
268 |
|
|
RMAX = 54.0 |
269 |
|
|
WRITE(20,*) ' RMAX: ',RMAX |
270 |
|
|
WRITE(20,*) ' actual radius (m): ',(RMAX*DM) |
271 |
|
|
fRef = 4.0 |
272 |
|
|
WRITE(20,*) ' fRef: ',fRef |
273 |
|
|
fWall = 4.0 |
274 |
|
|
WRITE(20,*) ' fWall: ',fWall |
275 |
|
|
Beta = (fWall - fRef)/(RMAX) |
276 |
|
|
WRITE(20,*) ' Beta(s-1/gridpoint): ',Beta |
277 |
|
|
WRITE(20,*) ' Beta(s-1/m): ',Beta/DM |
278 |
|
|
|
279 |
|
|
|
280 |
|
|
|
281 |
|
|
C start NOBETACODE |
282 |
|
|
|
283 |
|
|
fCorV(_I3(:,:,1)) = 1.D-4 |
284 |
|
|
Cd2 |
285 |
|
|
C pBeta = 0. |
286 |
|
|
Cd2 |
287 |
|
|
write(20,*) 'NO RADIAL BETA' |
288 |
|
|
|
289 |
|
|
fCorU(_I3(:,:,1)) = fCorV(_I3(:,:,1))+0.5*DM*pBeta |
290 |
|
|
DO J = 2, ny |
291 |
|
|
fCorV(_I3(:,:,J)) = fCorV(_I3(:,:,J-1))+DM*pBeta |
292 |
|
|
fCorU(_I3(:,:,J)) = fCorU(_I3(:,:,J-1))+DM*pBeta |
293 |
|
|
ENDDO |
294 |
|
|
|
295 |
|
|
C end NOBETACODE |
296 |
|
|
|
297 |
|
|
|
298 |
|
|
CBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNOREBEGINIGNORE |
299 |
|
|
sBeta = 0. |
300 |
|
|
WRITE(20,*) ' sBeta',sBeta |
301 |
|
|
tAlpha = 2.D-4 |
302 |
|
|
C tAlpha = 0.D-4 |
303 |
|
|
WRITE(20,*) ' tAlpha',tAlpha |
304 |
|
|
|
305 |
|
|
|
306 |
|
|
C Numerics parameters |
307 |
|
|
abEps = 0.1 |
308 |
|
|
rAja = 0.0D0 |
309 |
|
|
dUnit = 10 |
310 |
|
|
scrUnit1 = 11 |
311 |
|
|
scrUnit2 = 12 |
312 |
|
|
scrUnitError = 13 |
313 |
|
|
InitialisationError = .FALSE. |
314 |
|
|
IntegrationError = .FALSE. |
315 |
|
|
|
316 |
|
|
C Topography |
317 |
|
|
PMASK = WATER |
318 |
|
|
C Enclose in a box |
319 |
|
|
C Wall at X = Lx |
320 |
|
|
PMASK(_I3(:,nx,:)) = LAND ! Land in east most cell |
321 |
|
|
C Wall at Y = Ly |
322 |
|
|
PMASK(_I3(:,:,ny)) = LAND ! Land in northern most cell |
323 |
|
|
C bathySource = textBathymetry |
324 |
|
|
C Island |
325 |
|
|
C PMASK(_I3(:,1,24)) = LAND |
326 |
|
|
|
327 |
|
|
C |
328 |
|
|
|
329 |
|
|
MAX2DIT = 1000 |
330 |
|
|
TOLER2D = 1.D-13 |
331 |
|
|
freqCheckToler2d = 1 |
332 |
|
|
|
333 |
|
|
C-- Momentum equation forcing terms |
334 |
|
|
tauMax = 0.1D0 |
335 |
|
|
lY = 0. |
336 |
|
|
DO j=1,nY-1 |
337 |
|
|
lY = lY + DM |
338 |
|
|
ENDDO |
339 |
|
|
distY = 0. |
340 |
|
|
DO j=1,nY |
341 |
|
|
distY = distY+DM*0.5D0 |
342 |
|
|
DO i=1,nX |
343 |
|
|
fv(i,j) = 0.D0 |
344 |
|
|
fu(i,j) = -tauMax*cos(2.D0*PI*distY/lY) |
345 |
|
|
C fu(i,j) = -tauMax |
346 |
|
|
fu(i,j) = tauMax*sin(PI*distY/lY) |
347 |
|
|
fu(i,j) = fu(i,j)/(deltaZ(1)*ronil) |
348 |
|
|
ENDDO |
349 |
|
|
distY = distY+DM*0.5D0 |
350 |
|
|
ENDDO |
351 |
|
|
fu(4,4) = fu(4,4)*0.917D0 |
352 |
|
|
|
353 |
|
|
C |
354 |
|
|
CcnhDebugStarts |
355 |
|
|
Cdbg WRITE(0,*) ' lY = ', lY |
356 |
|
|
Cdbg WRITE(0,*) ' distY = ', distY |
357 |
|
|
Cdbg WRITE(0,*) ' tauMax = ', tauMax |
358 |
|
|
Cdbg WRITE(0,*) ' fu ' |
359 |
|
|
Cdbg CALL PLOT_FIELD(fu,Nx,Ny) |
360 |
|
|
Cdbg STOP |
361 |
|
|
CcnhDebugEnds |
362 |
|
|
C |
363 |
|
|
END |