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 ================================================================== |