1 |
heimbach |
1.1 |
c $Header: /u/gcmpack/development/heimbach/ecco_env/pkg/exf/README,v 1.4 2001/02/02 19:43:45 heimbach Exp $ |
2 |
|
|
c |
3 |
|
|
c |
4 |
|
|
c ========================================= |
5 |
|
|
c External Forcing Package for the MITgcmUV |
6 |
|
|
c ========================================= |
7 |
|
|
c |
8 |
|
|
c Current Version: 0.2.0 (20-Jun-2000) |
9 |
|
|
c |
10 |
|
|
c |
11 |
|
|
c General Outline: |
12 |
|
|
c ---------------- |
13 |
|
|
c |
14 |
|
|
c This package contains routines to handle external forcing of the |
15 |
|
|
c MITgcmUV general circulation model. The following features are |
16 |
|
|
c available: |
17 |
|
|
c |
18 |
|
|
c (a) Surface flux forcing by: |
19 |
|
|
c |
20 |
|
|
c surface heat flux --> qnet |
21 |
|
|
c fresh water flux --> empmr |
22 |
|
|
c zonal wind stress --> fu |
23 |
|
|
c meridional wind stress --> fv |
24 |
|
|
c |
25 |
|
|
c In order to get the appropriate fluxes users can either use |
26 |
|
|
c flux data directly or they can provide atmospheric states |
27 |
|
|
c (atmospheric temperature, atmospheric specific humidity, etc.) |
28 |
|
|
c which are subsequently used to estimate the fluxes by using |
29 |
|
|
c bulk parameterizations. |
30 |
|
|
c |
31 |
|
|
c (b) Relaxation to monthly climatologies of: |
32 |
|
|
c |
33 |
|
|
c potential temperature --> theta( k = 1,nr ) |
34 |
|
|
c salinity --> salt ( k = 1,nr ) |
35 |
|
|
c sea surface temperature --> theta( k = 1 ) |
36 |
|
|
c sea surface salinity --> salt ( k = 1 ) |
37 |
|
|
c |
38 |
|
|
c The relaxation can be done with relaxation coefficients |
39 |
|
|
c that vary spatially. The corresponding routines will have |
40 |
|
|
c to be customized. |
41 |
|
|
c |
42 |
|
|
c (c) Generic Routine prefix for this package: |
43 |
|
|
c |
44 |
|
|
c exf_<RoutineName> |
45 |
|
|
c |
46 |
|
|
c |
47 |
|
|
c Modifying the MITgcmUV: |
48 |
|
|
c ----------------------- |
49 |
|
|
c |
50 |
|
|
c The package is set up such that it can be easily added to the |
51 |
|
|
c MITgcmUV standard distribution. The following MITgcmUV files |
52 |
|
|
c have to be modified: |
53 |
|
|
c |
54 |
|
|
c EXF_CPPOPTIONS.h - Append this file at of the MITgcmUV's |
55 |
|
|
c "CPP_OPTIONS.h" file: |
56 |
|
|
c |
57 |
|
|
c #include "EXF_CPPOPTIONS.h" |
58 |
|
|
c |
59 |
|
|
c the_model_main.F - Replace the call to initialise by two |
60 |
|
|
c calls ( see below) and replace the call |
61 |
|
|
c of load_external_fields by get_forcing. |
62 |
|
|
c |
63 |
|
|
c |
64 |
|
|
c Modifications in subroutine |
65 |
|
|
c THE_MODEL_MAIN (before c27): |
66 |
|
|
c ---------------------------- |
67 |
|
|
c . |
68 |
|
|
c . |
69 |
|
|
c . |
70 |
|
|
c CALL TIMER_START('SPIN-UP',myThid) |
71 |
|
|
c |
72 |
|
|
c C-- Set model initial conditions |
73 |
|
|
c CALL TIMER_START('INITIALISE [SPIN-UP]',myThid) |
74 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
75 |
|
|
c call exf_InitialiseFixed( mythid ) |
76 |
|
|
c call exf_InitialiseVaria( mythid ) |
77 |
|
|
c #else |
78 |
|
|
c CALL INITIALISE( myThid ) |
79 |
|
|
c #endif |
80 |
|
|
c . |
81 |
|
|
c . |
82 |
|
|
c . |
83 |
|
|
c C-- Begin time stepping loop |
84 |
|
|
c CALL TIMER_START('MAIN LOOP',myThid) |
85 |
|
|
c DO I=1, nTimeSteps |
86 |
|
|
c |
87 |
|
|
c C-- Load forcing/external data fields |
88 |
|
|
c CALL TIMER_START('I/O (READ) [MAIN LOOP]',myThid) |
89 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
90 |
|
|
c call exf_GetForcing( |
91 |
|
|
c I mycurrenttime, |
92 |
|
|
c I mycurrentiter, |
93 |
|
|
c I mythid |
94 |
|
|
c & ) |
95 |
|
|
c #else |
96 |
|
|
c CALL LOAD_EXTERNAL_FIELDS( myCurrentTime, myCurrentIter, myThid ) |
97 |
|
|
c #endif |
98 |
|
|
c CALL TIMER_STOP ('I/O (READ) [MAIN LOOP]',myThid) |
99 |
|
|
c . |
100 |
|
|
c . |
101 |
|
|
c . |
102 |
|
|
c |
103 |
|
|
c |
104 |
|
|
c Modifications in subroutine |
105 |
|
|
c THE_MODEL_MAIN (from c27 on): |
106 |
|
|
c ----------------------------- |
107 |
|
|
c . |
108 |
|
|
c . |
109 |
|
|
c . |
110 |
|
|
c |
111 |
|
|
c |
112 |
|
|
c Modifications in subroutine |
113 |
|
|
c FORWARD_STEP (from c27 on): |
114 |
|
|
c --------------------------- |
115 |
|
|
c . |
116 |
|
|
c . |
117 |
|
|
c . |
118 |
|
|
c C-- Load forcing/external data fields |
119 |
|
|
c CALL TIMER_START('I/O (READ) [MAIN LOOP]',myThid) |
120 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
121 |
|
|
c call exf_GetForcing( |
122 |
|
|
c I myCurrentTime, |
123 |
|
|
c I myCurrentIter, |
124 |
|
|
c I myThid |
125 |
|
|
c & ) |
126 |
|
|
c #else |
127 |
|
|
c CALL LOAD_EXTERNAL_FIELDS( myCurrentTime, myCurrentIter, myThid ) |
128 |
|
|
c #endif |
129 |
|
|
c CALL TIMER_STOP ('I/O (READ) [MAIN LOOP]',myThid) |
130 |
|
|
c . |
131 |
|
|
c . |
132 |
|
|
c . |
133 |
|
|
c |
134 |
|
|
c |
135 |
|
|
c Modifications in subroutine |
136 |
|
|
c INITIALISE_FIXED (from c27 on): |
137 |
|
|
c ------------------------------- |
138 |
|
|
c . |
139 |
|
|
c . |
140 |
|
|
c . |
141 |
|
|
c C-- Set coriolis operators |
142 |
|
|
c CALL INI_CORI( myThid ) |
143 |
|
|
c |
144 |
|
|
c#ifdef INCLUDE_LAT_CIRC_FFT_FILTER_CODE |
145 |
|
|
cC-- Latitude circle filter initialisation |
146 |
|
|
c CALL FILTER_LATCIRC_FFT_INIT(myThid) |
147 |
|
|
c _BARRIER |
148 |
|
|
c#endif |
149 |
|
|
c |
150 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
151 |
|
|
c |
152 |
|
|
c call exf_Init( mythid ) |
153 |
|
|
c |
154 |
|
|
c #ifdef ALLOW_CLIMTEMP_RELAXATION |
155 |
|
|
c c-- Set the relaxation coefficient to the temperature climatology. |
156 |
|
|
c call exf_GetTempClimLambda( |
157 |
|
|
c I mythid |
158 |
|
|
c & ) |
159 |
|
|
c _BARRIER |
160 |
|
|
c #endif |
161 |
|
|
c #ifdef ALLOW_CLIMSALT_RELAXATION |
162 |
|
|
c c-- Set the relaxation coefficient to the salinity climatology. |
163 |
|
|
c call exf_GetSaltClimLambda( |
164 |
|
|
c I mythid |
165 |
|
|
c & ) |
166 |
|
|
c _BARRIER |
167 |
|
|
c #endif |
168 |
|
|
c #ifdef ALLOW_CLIMSST_RELAXATION |
169 |
|
|
c c-- Set the relaxation coefficient to the sst climatology. |
170 |
|
|
c call exf_GetSSTClimLambda( |
171 |
|
|
c I mythid |
172 |
|
|
c & ) |
173 |
|
|
c _BARRIER |
174 |
|
|
c #endif |
175 |
|
|
c #ifdef ALLOW_CLIMSSS_RELAXATION |
176 |
|
|
c c-- Set the relaxation coefficient to the sss climatology. |
177 |
|
|
c call exf_GetSSSClimLambda( |
178 |
|
|
c I mythid |
179 |
|
|
c & ) |
180 |
|
|
c _BARRIER |
181 |
|
|
c #endif |
182 |
|
|
c #endif |
183 |
|
|
c |
184 |
|
|
c c-- Finally, summarise the model cofiguration. |
185 |
|
|
c CALL CONFIG_SUMMARY( myThid ) |
186 |
|
|
c . |
187 |
|
|
c . |
188 |
|
|
c . |
189 |
|
|
c |
190 |
|
|
c |
191 |
|
|
c external_forcing.F - Add relaxation to climatological fields. |
192 |
|
|
c |
193 |
|
|
c |
194 |
|
|
c Modifications in subroutine |
195 |
|
|
c EXTERNAL_FORCING_T (taken from c25): |
196 |
|
|
c ------------------------------------ |
197 |
|
|
c . |
198 |
|
|
c . |
199 |
|
|
c . |
200 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
201 |
|
|
c #include "exf_clim.h" |
202 |
|
|
c #endif |
203 |
|
|
c . |
204 |
|
|
c . |
205 |
|
|
c . |
206 |
|
|
c C-- Forcing term |
207 |
|
|
c C Add heat in top-layer |
208 |
|
|
c IF ( kLev .EQ. 1 ) THEN |
209 |
|
|
c DO j=jMin,jMax |
210 |
|
|
c DO i=iMin,iMax |
211 |
|
|
c gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj) |
212 |
|
|
c & +maskC(i,j)*( |
213 |
|
|
c & -lambdaThetaClimRelax*(theta(i,j,kLev,bi,bj)-SST(i,j,bi,bj)) |
214 |
|
|
c & -Qnet(i,j,bi,bj)*recip_Cp*recip_rhoNil*recip_dRf(kLev) ) |
215 |
|
|
c |
216 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
217 |
|
|
c #ifdef ALLOW_CLIMSST_RELAXATION |
218 |
|
|
c gt(i,j,klev,bi,bj) = gt(i,j,klev,bi,bj) - |
219 |
|
|
c & maskc(i,j)*lambda_climsst(i,j,bi,bj)* |
220 |
|
|
c & ( theta(i,j,klev,bi,bj) - |
221 |
|
|
c & climsst(i,j,bi,bj) ) |
222 |
|
|
c #endif |
223 |
|
|
c #endif |
224 |
|
|
c |
225 |
|
|
c ENDDO |
226 |
|
|
c ENDDO |
227 |
|
|
c ENDIF |
228 |
|
|
c |
229 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
230 |
|
|
c #ifdef ALLOW_CLIMTEMP_RELAXATION |
231 |
|
|
c do j=jmin,jmax |
232 |
|
|
c do i=imin,imax |
233 |
|
|
c gt(i,j,klev,bi,bj) = gt(i,j,klev,bi,bj) - |
234 |
|
|
c & maskc(i,j)*lambda_climtemp(i,j,klev,bi,bj)* |
235 |
|
|
c & ( theta(i,j,klev,bi,bj) - |
236 |
|
|
c & climtemp(i,j,klev,bi,bj) ) |
237 |
|
|
c enddo |
238 |
|
|
c enddo |
239 |
|
|
c #endif |
240 |
|
|
c #endif |
241 |
|
|
c . |
242 |
|
|
c . |
243 |
|
|
c . |
244 |
|
|
c |
245 |
|
|
c |
246 |
|
|
c Modifications in subroutine |
247 |
|
|
c EXTERNAL_FORCING_S (taken from c25): |
248 |
|
|
c ------------------------------------ |
249 |
|
|
c . |
250 |
|
|
c . |
251 |
|
|
c . |
252 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
253 |
|
|
c #include "exf_clim.h" |
254 |
|
|
c #endif |
255 |
|
|
c . |
256 |
|
|
c . |
257 |
|
|
c . |
258 |
|
|
c C-- Forcing term |
259 |
|
|
c C Add fresh-water in top-layer |
260 |
|
|
c IF ( kLev .EQ. 1 ) THEN |
261 |
|
|
c DO j=jMin,jMax |
262 |
|
|
c DO i=iMin,iMax |
263 |
|
|
c gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj) |
264 |
|
|
c & +maskC(i,j)*( |
265 |
|
|
c & -lambdaSaltClimRelax*(salt(i,j,kLev,bi,bj)-SSS(i,j,bi,bj)) |
266 |
|
|
c #ifdef ALLOW_NATURAL_BCS |
267 |
|
|
c & +EmPmR(i,j,bi,bj)*recip_dRf(1)*salt(i,j,kLev,bi,bj) |
268 |
|
|
c #else |
269 |
|
|
c & +EmPmR(i,j,bi,bj)*recip_dRf(1)*35. |
270 |
|
|
c #endif |
271 |
|
|
c & ) |
272 |
|
|
c |
273 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
274 |
|
|
c #ifdef ALLOW_CLIMSSS_RELAXATION |
275 |
|
|
c gs(i,j,kLev,bi,bj) = gs(i,j,kLev,bi,bj) - |
276 |
|
|
c & maskc(i,j)*lambda_climsss(i,j,bi,bj)* |
277 |
|
|
c & ( salt(i,j,kLev,bi,bj) - |
278 |
|
|
c & climsss(i,j,bi,bj) ) |
279 |
|
|
c #endif |
280 |
|
|
c #endif |
281 |
|
|
c |
282 |
|
|
c ENDDO |
283 |
|
|
c ENDDO |
284 |
|
|
c ENDIF |
285 |
|
|
c |
286 |
|
|
c #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE |
287 |
|
|
c #ifdef ALLOW_CLIMSALT_RELAXATION |
288 |
|
|
c do j=jmin,jmax |
289 |
|
|
c do i=imin,imax |
290 |
|
|
c gs(i,j,klev,bi,bj) = gs(i,j,klev,bi,bj) - |
291 |
|
|
c & maskc(i,j)*lambda_climsalt(i,j,klev,bi,bj)* |
292 |
|
|
c & ( salt(i,j,klev,bi,bj) - |
293 |
|
|
c & climsalt(i,j,klev,bi,bj) ) |
294 |
|
|
c enddo |
295 |
|
|
c enddo |
296 |
|
|
c #endif |
297 |
|
|
c #endif |
298 |
|
|
c . |
299 |
|
|
c . |
300 |
|
|
c . |
301 |
|
|
c |
302 |
|
|
c |
303 |
|
|
c CPP options: |
304 |
|
|
c ------------ |
305 |
|
|
c |
306 |
|
|
c The following CPP options are available for this package: |
307 |
|
|
c |
308 |
|
|
c >>> INCLUDE_EXTERNAL_FORCING_PACKAGE <<< |
309 |
|
|
c Include this package into the setup. |
310 |
|
|
c |
311 |
|
|
c >>> EXTERNAL_FORCING_VERBOSE <<< |
312 |
|
|
c Do a bit more printout for the log file than usual. |
313 |
|
|
c |
314 |
|
|
c >>> ALLOW_BULKFORMULAE <<< |
315 |
|
|
c Use bulk formulae to in order to estimate the turbulent |
316 |
|
|
c fluxes at the ocean's surface. |
317 |
|
|
c |
318 |
|
|
c >>> ALLOW_ATM_TEMP <<< |
319 |
|
|
c If defined use the atmospheric temperature and specific |
320 |
|
|
c humidity to estimate the sensible and latent heat fluxes. |
321 |
|
|
c |
322 |
|
|
c >>> ALLOW_ATM_WIND <<< |
323 |
|
|
c If defined use the atmospheric wind field to estimate the |
324 |
|
|
c wind stress at the ocean's surface. |
325 |
|
|
c |
326 |
|
|
c >>> ALLOW_CLIMTEMP_RELAXATION <<< |
327 |
|
|
c Allow the relaxation to a monthly climatology of potential |
328 |
|
|
c temperature, e.g. the Levitus climatology. |
329 |
|
|
c |
330 |
|
|
c >>> ALLOW_CLIMSALT_RELAXATION <<< |
331 |
|
|
c Allow the relaxation to a monthly climatology of salinity, |
332 |
|
|
c e.g. the Levitus climatology. |
333 |
|
|
c |
334 |
|
|
c >>> ALLOW_CLIMSST_RELAXATION <<< |
335 |
|
|
c Allow the relaxation to a monthly climatology of sea surface |
336 |
|
|
c temperature, e.g. the Reynolds climatology. |
337 |
|
|
c |
338 |
|
|
c >>> ALLOW_CLIMSSS_RELAXATION <<< |
339 |
|
|
c Allow the relaxation to a monthly climatology of sea surface |
340 |
|
|
c salinity, e.g. the Levitus climatology. |
341 |
|
|
c |
342 |
|
|
c |
343 |
|
|
c |
344 |
|
|
c Unit and sign conventions for forcing fields (valid for c28 !) |
345 |
|
|
c -------------------------------------------------------------- |
346 |
|
|
|
347 |
|
|
- tflux/qnet: net heat flux (ATTENTION: distinguish qnet vs. qnet-sw) |
348 |
|
|
--------------------------- |
349 |
|
|
-> read in as tflux: W/m**2 = kg/s**3 (>0 for oceanic cooling) |
350 |
|
|
-> scaled to qnet: scal_hfl = +1 |
351 |
|
|
-> transformed to gT: Qnet -> Qnet/(rhonil*Cp*dR) |
352 |
|
|
W/m**2 -> K/s |
353 |
|
|
-> usage in gT: gT = gT - qnet[K/s] |
354 |
|
|
|
355 |
|
|
- swflux/qsw: shortwave flux |
356 |
|
|
---------------------------- |
357 |
|
|
-> read in as swflux: W/m**2 = kg/s**3 (>0 for oceanic cooling) |
358 |
|
|
-> for bulk forcing: swflux ADDED to hfl = tflux |
359 |
|
|
-> scaled to qsw: scal_swf = +1 |
360 |
|
|
-> transformed to gT: only for #ifdef SHORTWAVE_HEATING |
361 |
|
|
(currently not used) |
362 |
|
|
|
363 |
|
|
- lwflux/qlw: longwave flux |
364 |
|
|
--------------------------- |
365 |
|
|
-> read in as lwflux: m/s (>0 for oceanic cooling) |
366 |
|
|
-> for bulk forcing: lwflux ADDED to hfl = tflux |
367 |
|
|
-> scaled to qlw: not used. |
368 |
|
|
-> transformed to gT: not used. |
369 |
|
|
|
370 |
|
|
- sflux/empmr: freshwater flux (Evap. minus precip. minus runoff) |
371 |
|
|
------------------------------ |
372 |
|
|
-> read in as tflux: m/s (>0 for ocean salting) |
373 |
|
|
-> scaled to empmr: scal_hfl = +1 |
374 |
|
|
-> transformed to gS: empmr -> empmr*35./*dR |
375 |
|
|
m/s -> psu/s |
376 |
|
|
-> usage in gS: gS = gS + empmr[psu/s] |
377 |
|
|
|
378 |
|
|
- ustress/fu: zonal wind stress (West/East) |
379 |
|
|
------------------------------- |
380 |
|
|
-> read in as ustress: N/m**2 (>0 from West to East) |
381 |
|
|
-> scaled to fu : scal_ust = -1 |
382 |
|
|
-> transformed to gU: fu -> fu/(rhoNil*dR) |
383 |
|
|
N/m**2 -> m/s**2 |
384 |
|
|
-> usage in gU: gU = gU + fu[m/s**2] |
385 |
|
|
|
386 |
|
|
- vstress/fv: meridional wind stress (South/North) |
387 |
|
|
------------------------------------ |
388 |
|
|
-> read in as vstress: N/m**2 (>0 from South to North) |
389 |
|
|
-> scaled to fv : scal_vst = -1 |
390 |
|
|
-> transformed to gV: fv -> fv/(rhoNil*dR) |
391 |
|
|
N/m**2 -> m/s**2 |
392 |
|
|
-> usage in gV: gV = gV + fv[m/s**2] |
393 |
|
|
c |
394 |
|
|
c |
395 |
|
|
c Data files: |
396 |
|
|
c ----------- |
397 |
|
|
c |
398 |
|
|
c There are 10 possible setups that can be covered by the external |
399 |
|
|
c forcing package. For each of these setups a data file is available. |
400 |
|
|
c |
401 |
|
|
c data.forcing__blk__uat__uaw__kpp |
402 |
|
|
c data.forcing__blk__uat__uaw_nkpp |
403 |
|
|
c data.forcing__blk__uat_nuaw__kpp |
404 |
|
|
c data.forcing__blk__uat_nuaw_nkpp |
405 |
|
|
c data.forcing__blk_nuat__uaw__kpp |
406 |
|
|
c data.forcing__blk_nuat__uaw_nkpp |
407 |
|
|
c data.forcing__blk_nuat_nuaw__kpp |
408 |
|
|
c data.forcing__blk_nuat_nuaw_nkpp |
409 |
|
|
c data.forcing_nblk_nuat_nuaw__kpp |
410 |
|
|
c data.forcing_nblk_nuat_nuaw_nkpp |
411 |
|
|
c |
412 |
|
|
c The naming convention is self-explanatory (hopefully). |
413 |
|
|
c |
414 |
|
|
c Once a specified setup is decided upon use the corresponding data |
415 |
|
|
c file in order to set the file names for the individual variables and |
416 |
|
|
c provide the necessary calendar information. |
417 |
|
|
c |
418 |
|
|
c Copy the appropriate data file to .../exe/data.exf . |
419 |
|
|
c |
420 |
|
|
c |
421 |
|
|
c Routines: |
422 |
|
|
c ---------- |
423 |
|
|
c |
424 |
|
|
c The package consists of two sets of routines. The first set is |
425 |
|
|
c related to surface fluxes, the second set allows one to include |
426 |
|
|
c relaxation to climatological fields. |
427 |
|
|
c |
428 |
|
|
c Call trees: |
429 |
|
|
c ----------- |
430 |
|
|
c |
431 |
|
|
c |
432 |
|
|
c exf_Init |
433 |
|
|
c | |
434 |
|
|
c |---- exf_Summary |
435 |
|
|
c |---- exf_InitSurfaceFluxes |
436 |
|
|
c |---- exf_InitClimatology |
437 |
|
|
c |
438 |
|
|
c |
439 |
|
|
c exf_GetForcing |
440 |
|
|
c | |
441 |
|
|
c |---- exf_GetTempClim |
442 |
|
|
c |---- exf_GetSaltClim |
443 |
|
|
c |---- exf_GetSSTClim |
444 |
|
|
c |---- exf_GetSSSClim |
445 |
|
|
c |---- exf_GetSurfaceFluxes |
446 |
|
|
c |---- exf_MapFields |
447 |
|
|
c |
448 |
|
|
c |
449 |
|
|
c =============== |
450 |
|
|
c Surface fluxes: |
451 |
|
|
c =============== |
452 |
|
|
c |
453 |
|
|
c Getting the forcing fields: |
454 |
|
|
c |
455 |
|
|
c o exf_InitSurfaceFluxes - Initialise the external forcing fields. |
456 |
|
|
c |
457 |
|
|
c o exf_GetsurfaceFluxes - Mid-level routine for adding fluxes as |
458 |
|
|
c control variables. |
459 |
|
|
c |
460 |
|
|
c o exf_GetFFields - Get the current field values. |
461 |
|
|
c |
462 |
|
|
c o exf_SwapFFields - Swap data fields. |
463 |
|
|
c |
464 |
|
|
c Routines specific to bulk formulae: |
465 |
|
|
c |
466 |
|
|
c o exf_qSat - Compute the saturation specific humidity. |
467 |
|
|
c |
468 |
|
|
c o exf_Cdn - Evaluate the neutral drag coefficient as a |
469 |
|
|
c function of the mean wind speed at a given |
470 |
|
|
c height. |
471 |
|
|
c |
472 |
|
|
c o exf_Rhn - Evaluate the Stanton number. |
473 |
|
|
c |
474 |
|
|
c Getting the time data (calendar): |
475 |
|
|
c |
476 |
|
|
c o exf_GetFFieldsRec - Get the record number for the current |
477 |
|
|
c timestep of a given field, some flags, |
478 |
|
|
c and the linear interpolation factor. |
479 |
|
|
c |
480 |
|
|
c Reading the forcing data: |
481 |
|
|
c |
482 |
|
|
c o exf_ReadAtmTemp - Read an atmospheric temperature record. |
483 |
|
|
c |
484 |
|
|
c o exf_ReadAtmQh - Read an atmospheric humidity record. |
485 |
|
|
c |
486 |
|
|
c o exf_ReadHeatFlux - Read an atmospheric heat flux record. |
487 |
|
|
c |
488 |
|
|
c o exf_ReadZonStress - Read an atmospheric zonal wind stress record. |
489 |
|
|
c |
490 |
|
|
c o exf_ReadMerStress - Read an atmospheric meridional wind stress |
491 |
|
|
c record. |
492 |
|
|
c |
493 |
|
|
c o exf_ReadZonWind - Read an atmospheric zonal wind record. |
494 |
|
|
c |
495 |
|
|
c o exf_ReadMerWind - Read an atmospheric meridional wind record. |
496 |
|
|
c |
497 |
|
|
c o exf_ReadAtmPrecip - Read a precipitation record. |
498 |
|
|
c |
499 |
|
|
c o exf_ReadSaltFlux - Read a salt flux record. |
500 |
|
|
c |
501 |
|
|
c o exf_ReadLwFlux - Read a long wave radiative flux record. |
502 |
|
|
c |
503 |
|
|
c o exf_ReadSwFlux - Read a short wave radiative flux record. |
504 |
|
|
c |
505 |
|
|
c |
506 |
|
|
c At the moment, a basic premise of this package is that the external |
507 |
|
|
c forcing fields are available as data sets that are regularly spaced |
508 |
|
|
c in time and space. In later versions this assumption will be relaxed |
509 |
|
|
c for time as well as for space. |
510 |
|
|
c |
511 |
|
|
c |
512 |
|
|
c ============ |
513 |
|
|
c Climatology: |
514 |
|
|
c ============ |
515 |
|
|
c |
516 |
|
|
c o exf_InitClimatology - Initialise the climatology code. |
517 |
|
|
c |
518 |
|
|
c o exf_GetMonthsRec - Get the record number of a monthly |
519 |
|
|
c climatology data set for a given model |
520 |
|
|
c timestep. |
521 |
|
|
c |
522 |
|
|
c Temperature climatology: |
523 |
|
|
c |
524 |
|
|
c o exf_GetTempClim - Get the temperature climatology's |
525 |
|
|
c value for a given model timestep. |
526 |
|
|
c |
527 |
|
|
c o exf_GetTempClimRec - Get the record number, the linear |
528 |
|
|
c interpolation factor, and some flags |
529 |
|
|
c for the temperature climatology. |
530 |
|
|
c |
531 |
|
|
c o exf_ReadTempClim - Read a temperature climatology's |
532 |
|
|
c data record. |
533 |
|
|
c |
534 |
|
|
c o exf_GetTempClimLambda - Calculate the relaxation coefficient |
535 |
|
|
c for the temperature climatology. |
536 |
|
|
c |
537 |
|
|
c Salinity climatology. |
538 |
|
|
c |
539 |
|
|
c o exf_GetSaltClim - Get the salinity climatology's |
540 |
|
|
c value for a given model timestep. |
541 |
|
|
c |
542 |
|
|
c o exf_GetSaltClimRec - Get the record number, the linear |
543 |
|
|
c interpolation factor, and some flags |
544 |
|
|
c for the salinity climatology. |
545 |
|
|
c |
546 |
|
|
c o exf_ReadSaltClim - Read a salinity climatology's |
547 |
|
|
c data record. |
548 |
|
|
c |
549 |
|
|
c o exf_GetSaltClimLambda - Calculate the relaxation coefficient |
550 |
|
|
c for salinity climatology. |
551 |
|
|
c |
552 |
|
|
c Sea surface temperature climatology. |
553 |
|
|
c |
554 |
|
|
c o exf_GetSSTClim - Get the sea surface temp. climatology's |
555 |
|
|
c value for a given model timestep. |
556 |
|
|
c |
557 |
|
|
c o exf_GetSSTClimRec - Get the record number, the linear |
558 |
|
|
c interpolation factor, and some flags |
559 |
|
|
c for the sea surface temp. climatology. |
560 |
|
|
c |
561 |
|
|
c o exf_ReadSSTClim - Read a sea surface temp. climatology's |
562 |
|
|
c data record. |
563 |
|
|
c |
564 |
|
|
c o exf_GetSSTClimLambda - Calculate the relaxation coefficient |
565 |
|
|
c for the sea surface temperature |
566 |
|
|
c climatology. |
567 |
|
|
c |
568 |
|
|
c Sea surface salinity climatology: |
569 |
|
|
c |
570 |
|
|
c o exf_GetSSSClim - Get the sea surface salin. climatology's |
571 |
|
|
c value for a given model timestep. |
572 |
|
|
c |
573 |
|
|
c o exf_GetSSSClimRec - Get the record number, the linear |
574 |
|
|
c interpolation factor, and some flags |
575 |
|
|
c for the sea surface salin. climatology. |
576 |
|
|
c |
577 |
|
|
c o exf_ReadSSSClim - Read a sea surface salin. climatology's |
578 |
|
|
c data record. |
579 |
|
|
c |
580 |
|
|
c o exf_GetSSSClimLambda - Calculate the relaxation coefficient |
581 |
|
|
c for the sea surface salinity |
582 |
|
|
c climatology. |
583 |
|
|
c |
584 |
|
|
c |
585 |
|
|
c HOW TO GET STARTED? |
586 |
|
|
c |
587 |
|
|
c Copy the routines and headers to the distribution after you have |
588 |
|
|
c installed the latter. Next, install the calendar tool, which is |
589 |
|
|
c quite extenisvely used by the external forcing package. |
590 |
|
|
c |
591 |
|
|
c http://mitgcm.lcs.mit.edu/cgi-bin/cvsweb/packages/calendar_tool/ |
592 |
|
|
c |
593 |
|
|
c |
594 |
|
|
c ATTENTION: |
595 |
|
|
c ========== |
596 |
|
|
c |
597 |
|
|
c Users of this package are urged to CHECK THE SIGNS AND UNITS of |
598 |
|
|
c their data sets, especially in relation to the sign conventions |
599 |
|
|
c of the MITgcmUV! |
600 |
|
|
c |
601 |
|
|
c Relevant MITgcmUV routines are: |
602 |
|
|
c |
603 |
|
|
c calc_gt.F |
604 |
|
|
c calc_gs.F |
605 |
|
|
c calc_mom_rhs.F |
606 |
|
|
c external_forcing.F |
607 |
|
|
c |
608 |
|
|
c Relevant external forcing package routines are: |
609 |
|
|
c |
610 |
|
|
c exf_ReadHeatFlux |
611 |
|
|
c . |
612 |
|
|
c . |
613 |
|
|
c exf_ReadZonWind |
614 |
|
|
c exf_MapFields |
615 |
|
|
c |
616 |
|
|
c All adaptations of signs and units to specific data sets should be |
617 |
|
|
c done in the routines that read the respective data. Users should |
618 |
|
|
c neither modify "external_forcing" nor "exf_MapFields" for this |
619 |
|
|
c purpose.Each data set has its own read routine. This eases customi- |
620 |
|
|
c zation (signs and units etc.). |
621 |
|
|
c |
622 |
|
|
c Some routines have to be customized for the current specific |
623 |
|
|
c application: |
624 |
|
|
c |
625 |
|
|
c e.g. exf_GetClimTempLambda |
626 |
|
|
c exf_GetClimSaltLambda |
627 |
|
|
c exf_GetClimSSTLambda |
628 |
|
|
c exf_GetClimSSSLambda |
629 |
|
|
c |
630 |
|
|
c |
631 |
|
|
c |
632 |
|
|
c To Do: |
633 |
|
|
c ------ |
634 |
|
|
c |
635 |
|
|
c Many assumptions that are made in the current version should, and |
636 |
|
|
c can, be relaxed in later versions: |
637 |
|
|
c |
638 |
|
|
c - gridded data sets --> general data set (other grids, inter- |
639 |
|
|
c polation in space) |
640 |
|
|
c |
641 |
|
|
c - equidistancy in time --> general data set (non-equidistant in |
642 |
|
|
c time) |
643 |
|
|
c |
644 |
|
|
c - climatologies --> arbitrary subinterval of a year, not |
645 |
|
|
c just monthly values. |
646 |
|
|
c |
647 |
|
|
c - relaxation --> relaxation could be done to a given |
648 |
|
|
c data set over the model's integration |
649 |
|
|
c time. This would generalise the clima- |
650 |
|
|
c tology block. One could have 'cyclic' |
651 |
|
|
c and 'non-cyclic' fields. In the first |
652 |
|
|
c case, the cycle length has to be spe- |
653 |
|
|
c cified ('monthly','yearly','period') as |
654 |
|
|
c well as the start of the cycle ( irec=1 |
655 |
|
|
c corresponds to a certain calendar date). |
656 |
|
|
c The second case can be treated analog- |
657 |
|
|
c ously. |
658 |
|
|
c |
659 |
|
|
c - There is an inconsistency in the formulation of frocing variables |
660 |
|
|
c defined on southern and western points on the C-grid, since the |
661 |
|
|
c the atmospheric stability is calculated on center points of the |
662 |
|
|
c C-grid. |
663 |
|
|
c |
664 |
|
|
c ======== |
665 |
|
|
c HISTORY: |
666 |
|
|
c ======== |
667 |
|
|
c |
668 |
|
|
c |
669 |
|
|
c started: Christian Eckert eckert@mit.edu 30-Jun-1999 |
670 |
|
|
c |
671 |
|
|
c changed: Christian Eckert eckert@mit.edu 11-Jan-2000 |
672 |
|
|
c |
673 |
|
|
c - Restructured the code in order to create a package |
674 |
|
|
c for the MITgcmUV. |
675 |
|
|
c |
676 |
|
|
c Christian Eckert eckert@mit.edu 12-Feb-2000 |
677 |
|
|
c |
678 |
|
|
c - Changed Routine names (package prefix: exf_) |
679 |
|
|
c |
680 |
|
|
c Christian Eckert eckert@mit.edu 02-May-2000 |
681 |
|
|
c |
682 |
|
|
c - CVS version of the package. |
683 |
|
|
c |
684 |
|
|
c Patrick Heimbach, heimbach@mit.edu 04-May-2000 |
685 |
|
|
c |
686 |
|
|
c - Added computation of evaporation rate for |
687 |
|
|
c ALLOW_ATM_TEMP case |
688 |
|
|
c |
689 |
|
|
c - changed the handling of precip and sflux with respect |
690 |
|
|
c to CPP options ALLOW_BULKFORMULAE and ALLOW_ATM_TEMP |
691 |
|
|
c |
692 |
|
|
c - included some CPP flags ALLOW_BULKFORMULAE to make |
693 |
|
|
c sure ALLOW_ATM_TEMP, ALLOW_ATM_WIND are used only in |
694 |
|
|
c conjunction with defined ALLOW_BULKFORMULAE |
695 |
|
|
c |
696 |
|
|
c - statement functions discarded and external functions |
697 |
|
|
c initialised. |
698 |
|
|
c |
699 |
|
|
c - file precision and field type are now prescribed in |
700 |
|
|
c data.exf; |
701 |
|
|
c separately possible for exf_sflx.h and exf_clim.h |
702 |
|
|
c related fields. |
703 |
|
|
c |
704 |
|
|
c - created exf_constants.h that contains |
705 |
|
|
c 1. numbers |
706 |
|
|
c 2. physical constants |
707 |
|
|
c 3. empirical parameters |
708 |
|
|
c 4. control parameters |
709 |
|
|
c |
710 |
|
|
c Ralf Giering ralf.giering@fastopt.de 18-Jun-2000 |
711 |
|
|
c |
712 |
|
|
c - exf_getffields.F: |
713 |
|
|
c Swapping of forcing fields has to be switched off |
714 |
|
|
c if TAMC is used, because of generation of spurious |
715 |
|
|
c dependencies. (P.H.) |
716 |
|
|
c |
717 |
|
|
c Patrick Heimbach heimbach@mit.edu 20-Jun-2000 |
718 |
|
|
c |
719 |
|
|
c - sign change of ustress/vstress incorporated into |
720 |
|
|
c scaling factors scal_ust, scal_vst in exf_mapfields.F |
721 |
|
|
c |
722 |
|
|
c - Corrected description on how to implement exf package |
723 |
|
|
c for c27 onwards. |
724 |
|
|
c |
725 |
|
|
c - Included unit and sign conventions valid for c28 |
726 |
|
|
c in README. |
727 |
|
|
c |
728 |
|
|
c ================================================================== |