1 |
dimitri |
1.2 |
c $Header: /u/gcmpack/MITgcm/pkg/exf/README,v 1.1 2001/05/14 22:08:40 heimbach Exp $ |
2 |
heimbach |
1.1 |
c |
3 |
|
|
c |
4 |
|
|
c ========================================= |
5 |
|
|
c External Forcing Package for the MITgcmUV |
6 |
|
|
c ========================================= |
7 |
|
|
c |
8 |
dimitri |
1.2 |
c Current Version: 0.2.1 (20-Dec-2002) |
9 |
heimbach |
1.1 |
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 |
dimitri |
1.2 |
c (a) Reading-in atmospheric state and/or surface fluxes from files |
19 |
|
|
c and bi-linear interpolation in time. |
20 |
|
|
c |
21 |
|
|
c (b) Surface flux forcing by: |
22 |
heimbach |
1.1 |
c |
23 |
|
|
c surface heat flux --> qnet |
24 |
dimitri |
1.2 |
c short wave radiation --> qsw (optional) |
25 |
heimbach |
1.1 |
c fresh water flux --> empmr |
26 |
|
|
c zonal wind stress --> fu |
27 |
|
|
c meridional wind stress --> fv |
28 |
|
|
c |
29 |
|
|
c In order to get the appropriate fluxes users can either use |
30 |
dimitri |
1.2 |
c flux data directly or they can provide atmospheric state |
31 |
heimbach |
1.1 |
c (atmospheric temperature, atmospheric specific humidity, etc.) |
32 |
dimitri |
1.2 |
c which is subsequently used to estimate the fluxes by using |
33 |
heimbach |
1.1 |
c bulk parameterizations. |
34 |
|
|
c |
35 |
dimitri |
1.2 |
c (c) Relaxation to monthly climatologies of: |
36 |
heimbach |
1.1 |
c |
37 |
dimitri |
1.2 |
c sea surface temperature --> theta( k = 1 ) |
38 |
|
|
c sea surface salinity --> salt ( k = 1 ) |
39 |
heimbach |
1.1 |
c potential temperature --> theta( k = 1,nr ) |
40 |
|
|
c salinity --> salt ( k = 1,nr ) |
41 |
|
|
c |
42 |
dimitri |
1.2 |
c As of version 0.2.1, pkg/exf only supports the reading-in |
43 |
|
|
c of the relaxation fields. See TODO.txt for suggestions on |
44 |
|
|
c completing the relaxation package. |
45 |
heimbach |
1.1 |
c |
46 |
|
|
c |
47 |
dimitri |
1.2 |
c Interface to MITgcm release1: |
48 |
heimbach |
1.1 |
c ----------------------------- |
49 |
dimitri |
1.2 |
c |
50 |
|
|
c The following MITgcm files are affected by pkg/exf: |
51 |
|
|
c |
52 |
|
|
c CPPOPTIONS.h - Define INCLUDE_EXTERNAL_FORCING_PACKAGE |
53 |
|
|
c and append desired pkg/exf CPP options. |
54 |
|
|
c |
55 |
|
|
c packages_readparms.F - EXF_READPARMS |
56 |
|
|
c |
57 |
|
|
c packages_init_variables.F - EXF_INIT |
58 |
|
|
c |
59 |
|
|
c the_main_loop.F - Adjoint compiler directives. |
60 |
|
|
c |
61 |
|
|
c forward_step.F - EXF_GETFORCING |
62 |
heimbach |
1.1 |
c |
63 |
|
|
c |
64 |
|
|
c CPP options: |
65 |
|
|
c ------------ |
66 |
|
|
c |
67 |
|
|
c The following CPP options are available for this package: |
68 |
|
|
c |
69 |
|
|
c >>> INCLUDE_EXTERNAL_FORCING_PACKAGE <<< |
70 |
|
|
c Include this package into the setup. |
71 |
|
|
c |
72 |
dimitri |
1.2 |
c >>> EXF_VERBOSE <<< |
73 |
heimbach |
1.1 |
c Do a bit more printout for the log file than usual. |
74 |
|
|
c |
75 |
|
|
c >>> ALLOW_BULKFORMULAE <<< |
76 |
dimitri |
1.2 |
c Allows the use of bulk formulae in order to estimate |
77 |
|
|
c the turbulent fluxes at the ocean's surface. |
78 |
heimbach |
1.1 |
c |
79 |
|
|
c >>> ALLOW_ATM_TEMP <<< |
80 |
dimitri |
1.2 |
c Allows the use the atmospheric temperature and specific |
81 |
heimbach |
1.1 |
c humidity to estimate the sensible and latent heat fluxes. |
82 |
|
|
c |
83 |
|
|
c >>> ALLOW_ATM_WIND <<< |
84 |
dimitri |
1.2 |
c Allows the use the atmospheric wind field to estimate the |
85 |
heimbach |
1.1 |
c wind stress at the ocean's surface. |
86 |
|
|
c |
87 |
dimitri |
1.2 |
c >>> EXF_NO_BULK_COMPUTATIONS <<< |
88 |
|
|
c If defined, no bulk formulae computations are carried out |
89 |
|
|
c within pkg/exf. This option, in combination with |
90 |
|
|
c ALLOW_BULKFORMULAE, ALLOW_ATM_TEMP, and ALLOW_ATM_WIND |
91 |
|
|
c can be used to read-in the atmospheric state and pass it |
92 |
|
|
c on to a separate package for bulk formulae computations. |
93 |
|
|
c |
94 |
|
|
c >>> EXF_READ_EVAP <<< |
95 |
|
|
c If defined, evaporation is read-in from a file, rather than |
96 |
|
|
c computed from atmospheric state. |
97 |
|
|
c |
98 |
|
|
c >>> ALLOW_CLIM_CYCLIC <<< |
99 |
|
|
c If defined, relaxation file record numbers are assumed 1 to |
100 |
|
|
c 12 corresponding to Jan. through Dec. Otherwise relaxation |
101 |
|
|
c file record numbers are specified in data.exf_clim |
102 |
|
|
c |
103 |
heimbach |
1.1 |
c >>> ALLOW_CLIMTEMP_RELAXATION <<< |
104 |
|
|
c Allow the relaxation to a monthly climatology of potential |
105 |
|
|
c temperature, e.g. the Levitus climatology. |
106 |
|
|
c |
107 |
|
|
c >>> ALLOW_CLIMSALT_RELAXATION <<< |
108 |
|
|
c Allow the relaxation to a monthly climatology of salinity, |
109 |
|
|
c e.g. the Levitus climatology. |
110 |
|
|
c |
111 |
|
|
c >>> ALLOW_CLIMSST_RELAXATION <<< |
112 |
|
|
c Allow the relaxation to a monthly climatology of sea surface |
113 |
|
|
c temperature, e.g. the Reynolds climatology. |
114 |
|
|
c |
115 |
|
|
c >>> ALLOW_CLIMSSS_RELAXATION <<< |
116 |
|
|
c Allow the relaxation to a monthly climatology of sea surface |
117 |
|
|
c salinity, e.g. the Levitus climatology. |
118 |
|
|
c |
119 |
|
|
c |
120 |
|
|
c |
121 |
|
|
c Unit and sign conventions for forcing fields (valid for c28 !) |
122 |
|
|
c -------------------------------------------------------------- |
123 |
|
|
|
124 |
|
|
- tflux/qnet: net heat flux (ATTENTION: distinguish qnet vs. qnet-sw) |
125 |
|
|
--------------------------- |
126 |
|
|
-> read in as tflux: W/m**2 = kg/s**3 (>0 for oceanic cooling) |
127 |
|
|
-> scaled to qnet: scal_hfl = +1 |
128 |
|
|
-> transformed to gT: Qnet -> Qnet/(rhonil*Cp*dR) |
129 |
|
|
W/m**2 -> K/s |
130 |
|
|
-> usage in gT: gT = gT - qnet[K/s] |
131 |
|
|
|
132 |
|
|
- swflux/qsw: shortwave flux |
133 |
|
|
---------------------------- |
134 |
|
|
-> read in as swflux: W/m**2 = kg/s**3 (>0 for oceanic cooling) |
135 |
|
|
-> for bulk forcing: swflux ADDED to hfl = tflux |
136 |
|
|
-> scaled to qsw: scal_swf = +1 |
137 |
|
|
-> transformed to gT: only for #ifdef SHORTWAVE_HEATING |
138 |
|
|
(currently not used) |
139 |
|
|
|
140 |
|
|
- lwflux/qlw: longwave flux |
141 |
|
|
--------------------------- |
142 |
|
|
-> read in as lwflux: m/s (>0 for oceanic cooling) |
143 |
|
|
-> for bulk forcing: lwflux ADDED to hfl = tflux |
144 |
|
|
-> scaled to qlw: not used. |
145 |
|
|
-> transformed to gT: not used. |
146 |
|
|
|
147 |
|
|
- sflux/empmr: freshwater flux (Evap. minus precip. minus runoff) |
148 |
|
|
------------------------------ |
149 |
|
|
-> read in as tflux: m/s (>0 for ocean salting) |
150 |
|
|
-> scaled to empmr: scal_hfl = +1 |
151 |
|
|
-> transformed to gS: empmr -> empmr*35./*dR |
152 |
|
|
m/s -> psu/s |
153 |
|
|
-> usage in gS: gS = gS + empmr[psu/s] |
154 |
|
|
|
155 |
|
|
- ustress/fu: zonal wind stress (West/East) |
156 |
|
|
------------------------------- |
157 |
|
|
-> read in as ustress: N/m**2 (>0 from West to East) |
158 |
|
|
-> scaled to fu : scal_ust = -1 |
159 |
|
|
-> transformed to gU: fu -> fu/(rhoNil*dR) |
160 |
|
|
N/m**2 -> m/s**2 |
161 |
|
|
-> usage in gU: gU = gU + fu[m/s**2] |
162 |
|
|
|
163 |
|
|
- vstress/fv: meridional wind stress (South/North) |
164 |
|
|
------------------------------------ |
165 |
|
|
-> read in as vstress: N/m**2 (>0 from South to North) |
166 |
|
|
-> scaled to fv : scal_vst = -1 |
167 |
|
|
-> transformed to gV: fv -> fv/(rhoNil*dR) |
168 |
|
|
N/m**2 -> m/s**2 |
169 |
|
|
-> usage in gV: gV = gV + fv[m/s**2] |
170 |
|
|
c |
171 |
|
|
c |
172 |
|
|
c Data files: |
173 |
|
|
c ----------- |
174 |
|
|
c |
175 |
dimitri |
1.2 |
c data.exf :: variables related to surface fluxes |
176 |
|
|
c data.exf_clim :: variables for relaxation to climatological fields |
177 |
heimbach |
1.1 |
c |
178 |
|
|
c Routines: |
179 |
|
|
c ---------- |
180 |
|
|
c |
181 |
|
|
c The package consists of two sets of routines. The first set is |
182 |
|
|
c related to surface fluxes, the second set allows one to include |
183 |
|
|
c relaxation to climatological fields. |
184 |
|
|
c |
185 |
|
|
c Call trees: |
186 |
|
|
c ----------- |
187 |
|
|
c |
188 |
dimitri |
1.2 |
c exf_readparms |
189 |
|
|
c | |
190 |
|
|
c |---- exf_summary |
191 |
|
|
c |---- exf_clim_readparms |
192 |
|
|
c |---- exf_clim_summary |
193 |
|
|
c |
194 |
heimbach |
1.1 |
c |
195 |
|
|
c exf_Init |
196 |
|
|
c | |
197 |
dimitri |
1.2 |
c |---- exf_init_hflux |
198 |
|
|
c |---- exf_init_sflux |
199 |
|
|
c |---- exf_init_ustress |
200 |
|
|
c |---- exf_init_vstress |
201 |
|
|
c |---- exf_init_evap |
202 |
|
|
c |---- exf_init_runoff |
203 |
|
|
c |---- exf_init_atemp |
204 |
|
|
c |---- exf_init_aqh |
205 |
|
|
c |---- exf_init_lwflux |
206 |
|
|
c |---- exf_init_swflux |
207 |
|
|
c |---- exf_init_precip |
208 |
|
|
c |---- exf_init_uwind |
209 |
|
|
c |---- exf_init_vwind |
210 |
|
|
c |---- exf_clim_init |
211 |
heimbach |
1.1 |
c |
212 |
|
|
c |
213 |
|
|
c exf_GetForcing |
214 |
|
|
c | |
215 |
dimitri |
1.2 |
c |---- exf_getclim |
216 |
|
|
c |---- exf_getffields |
217 |
heimbach |
1.1 |
c |---- exf_GetSurfaceFluxes |
218 |
|
|
c |---- exf_MapFields |
219 |
|
|
c |
220 |
|
|
c |
221 |
|
|
c =============== |
222 |
|
|
c Surface fluxes: |
223 |
|
|
c =============== |
224 |
|
|
c |
225 |
|
|
c Getting the forcing fields: |
226 |
|
|
c |
227 |
dimitri |
1.2 |
c o exf_init_??? - Initialise external forcing fields ???. |
228 |
heimbach |
1.1 |
c |
229 |
|
|
c o exf_GetsurfaceFluxes - Mid-level routine for adding fluxes as |
230 |
|
|
c control variables. |
231 |
|
|
c |
232 |
|
|
c o exf_GetFFields - Get the current field values. |
233 |
|
|
c |
234 |
|
|
c o exf_SwapFFields - Swap data fields. |
235 |
|
|
c |
236 |
|
|
c Routines specific to bulk formulae: |
237 |
|
|
c |
238 |
dimitri |
1.2 |
c o exf_bulkqsat - Compute the saturation specific humidity. |
239 |
heimbach |
1.1 |
c |
240 |
dimitri |
1.2 |
c o exf_bulkcdn - Evaluate the neutral drag coefficient as a |
241 |
heimbach |
1.1 |
c function of the mean wind speed at a given |
242 |
|
|
c height. |
243 |
|
|
c |
244 |
dimitri |
1.2 |
c o exf_bulkrhn - Evaluate the Stanton number. |
245 |
heimbach |
1.1 |
c |
246 |
|
|
c Getting the time data (calendar): |
247 |
|
|
c |
248 |
|
|
c o exf_GetFFieldsRec - Get the record number for the current |
249 |
|
|
c timestep of a given field, some flags, |
250 |
|
|
c and the linear interpolation factor. |
251 |
|
|
c |
252 |
|
|
c Reading the forcing data: |
253 |
|
|
c |
254 |
dimitri |
1.2 |
c o exf_set_atemp - Read an atmospheric temperature record. |
255 |
heimbach |
1.1 |
c |
256 |
dimitri |
1.2 |
c o exf_set_aqh - Read an atmospheric humidity record. |
257 |
heimbach |
1.1 |
c |
258 |
dimitri |
1.2 |
c o exf_set_hflux - Read an atmospheric heat flux record. |
259 |
heimbach |
1.1 |
c |
260 |
dimitri |
1.2 |
c o exf_set_ustress - Read an atmospheric zonal wind stress record. |
261 |
heimbach |
1.1 |
c |
262 |
dimitri |
1.2 |
c o exf_set_vstress - Read an atmospheric meridional wind stress |
263 |
heimbach |
1.1 |
c record. |
264 |
|
|
c |
265 |
dimitri |
1.2 |
c o exf_set_uwind - Read an atmospheric zonal wind record. |
266 |
heimbach |
1.1 |
c |
267 |
dimitri |
1.2 |
c o exf_set_vwind - Read an atmospheric meridional wind record. |
268 |
heimbach |
1.1 |
c |
269 |
dimitri |
1.2 |
c o exf_set_precip - Read a precipitation record. |
270 |
heimbach |
1.1 |
c |
271 |
dimitri |
1.2 |
c o exf_set_sflux - Read a salt flux record. |
272 |
heimbach |
1.1 |
c |
273 |
dimitri |
1.2 |
c o exf_set_lwflux - Read a long wave radiative flux record. |
274 |
heimbach |
1.1 |
c |
275 |
dimitri |
1.2 |
c o exf_set_swflux - Read a short wave radiative flux record. |
276 |
heimbach |
1.1 |
c |
277 |
|
|
c |
278 |
|
|
c At the moment, a basic premise of this package is that the external |
279 |
|
|
c forcing fields are available as data sets that are regularly spaced |
280 |
|
|
c in time and space. In later versions this assumption will be relaxed |
281 |
|
|
c for time as well as for space. |
282 |
|
|
c |
283 |
|
|
c |
284 |
|
|
c ============ |
285 |
|
|
c Climatology: |
286 |
|
|
c ============ |
287 |
|
|
c |
288 |
dimitri |
1.2 |
c o exf_clim_init - Initialise the climatology code. |
289 |
heimbach |
1.1 |
c |
290 |
dimitri |
1.2 |
c o exf_set_climtemp - Get the temperature climatology's |
291 |
heimbach |
1.1 |
c value for a given model timestep. |
292 |
|
|
c |
293 |
dimitri |
1.2 |
c o exf_set_climsalt - Get the salinity climatology's |
294 |
heimbach |
1.1 |
c value for a given model timestep. |
295 |
|
|
c |
296 |
dimitri |
1.2 |
c o exf_set_climsst - Get the sea surface temp. climatology's |
297 |
heimbach |
1.1 |
c value for a given model timestep. |
298 |
|
|
c |
299 |
dimitri |
1.2 |
c o exf_set_climsss - Get the sea surface salin. climatology's |
300 |
heimbach |
1.1 |
c value for a given model timestep. |
301 |
|
|
c |
302 |
|
|
c |
303 |
|
|
c HOW TO GET STARTED? |
304 |
|
|
c |
305 |
dimitri |
1.2 |
c There are two verification experiments, global_with_exf and |
306 |
|
|
c lab_sea that use pkg/exf. Experiment verification/global_with_exf |
307 |
|
|
c is a repeat of verification/global_ocean.90x40x15, except that it |
308 |
|
|
c uses the pkg/exf and pkg/cal instead of the external_fields_load |
309 |
|
|
c routine. Experiment verification/lab_sea gives exaples of using |
310 |
|
|
c pkg/exf in conjunction with pkg/seaice. |
311 |
heimbach |
1.1 |
c |
312 |
|
|
c |
313 |
|
|
c ATTENTION: |
314 |
|
|
c ========== |
315 |
|
|
c |
316 |
|
|
c Users of this package are urged to CHECK THE SIGNS AND UNITS of |
317 |
|
|
c their data sets, especially in relation to the sign conventions |
318 |
|
|
c of the MITgcmUV! |
319 |
|
|
c |
320 |
|
|
c Relevant MITgcmUV routines are: |
321 |
|
|
c |
322 |
|
|
c calc_gt.F |
323 |
|
|
c calc_gs.F |
324 |
|
|
c calc_mom_rhs.F |
325 |
|
|
c external_forcing.F |
326 |
|
|
c |
327 |
|
|
c Relevant external forcing package routines are: |
328 |
|
|
c |
329 |
dimitri |
1.2 |
c exf_set_hflux |
330 |
heimbach |
1.1 |
c . |
331 |
|
|
c . |
332 |
dimitri |
1.2 |
c exf_set_vwind |
333 |
heimbach |
1.1 |
c exf_MapFields |
334 |
|
|
c |
335 |
|
|
c All adaptations of signs and units to specific data sets should be |
336 |
|
|
c done in the routines that read the respective data. Users should |
337 |
|
|
c neither modify "external_forcing" nor "exf_MapFields" for this |
338 |
|
|
c purpose.Each data set has its own read routine. This eases customi- |
339 |
|
|
c zation (signs and units etc.). |
340 |
|
|
c |
341 |
|
|
c Some routines have to be customized for the current specific |
342 |
|
|
c application: |
343 |
|
|
c |
344 |
dimitri |
1.2 |
c e.g. exf_set_climtemp |
345 |
|
|
c exf_set_climsalt |
346 |
|
|
c exf_set_climsst |
347 |
|
|
c exf_set_climsss |
348 |
heimbach |
1.1 |
c |
349 |
|
|
c |
350 |
|
|
c ======== |
351 |
|
|
c HISTORY: |
352 |
|
|
c ======== |
353 |
|
|
c |
354 |
|
|
c started: Christian Eckert eckert@mit.edu 30-Jun-1999 |
355 |
|
|
c |
356 |
|
|
c changed: Christian Eckert eckert@mit.edu 11-Jan-2000 |
357 |
|
|
c |
358 |
|
|
c - Restructured the code in order to create a package |
359 |
|
|
c for the MITgcmUV. |
360 |
|
|
c |
361 |
|
|
c Christian Eckert eckert@mit.edu 12-Feb-2000 |
362 |
|
|
c |
363 |
|
|
c - Changed Routine names (package prefix: exf_) |
364 |
|
|
c |
365 |
|
|
c Christian Eckert eckert@mit.edu 02-May-2000 |
366 |
|
|
c |
367 |
|
|
c - CVS version of the package. |
368 |
|
|
c |
369 |
|
|
c Patrick Heimbach, heimbach@mit.edu 04-May-2000 |
370 |
|
|
c |
371 |
|
|
c - Added computation of evaporation rate for |
372 |
|
|
c ALLOW_ATM_TEMP case |
373 |
|
|
c |
374 |
|
|
c - changed the handling of precip and sflux with respect |
375 |
|
|
c to CPP options ALLOW_BULKFORMULAE and ALLOW_ATM_TEMP |
376 |
|
|
c |
377 |
|
|
c - included some CPP flags ALLOW_BULKFORMULAE to make |
378 |
|
|
c sure ALLOW_ATM_TEMP, ALLOW_ATM_WIND are used only in |
379 |
|
|
c conjunction with defined ALLOW_BULKFORMULAE |
380 |
|
|
c |
381 |
|
|
c - statement functions discarded and external functions |
382 |
|
|
c initialised. |
383 |
|
|
c |
384 |
|
|
c - file precision and field type are now prescribed in |
385 |
|
|
c data.exf; |
386 |
|
|
c separately possible for exf_sflx.h and exf_clim.h |
387 |
|
|
c related fields. |
388 |
|
|
c |
389 |
|
|
c - created exf_constants.h that contains |
390 |
|
|
c 1. numbers |
391 |
|
|
c 2. physical constants |
392 |
|
|
c 3. empirical parameters |
393 |
|
|
c 4. control parameters |
394 |
|
|
c |
395 |
|
|
c Ralf Giering ralf.giering@fastopt.de 18-Jun-2000 |
396 |
|
|
c |
397 |
|
|
c - exf_getffields.F: |
398 |
|
|
c Swapping of forcing fields has to be switched off |
399 |
|
|
c if TAMC is used, because of generation of spurious |
400 |
|
|
c dependencies. (P.H.) |
401 |
|
|
c |
402 |
|
|
c Patrick Heimbach heimbach@mit.edu 20-Jun-2000 |
403 |
|
|
c |
404 |
|
|
c - sign change of ustress/vstress incorporated into |
405 |
|
|
c scaling factors scal_ust, scal_vst in exf_mapfields.F |
406 |
|
|
c |
407 |
|
|
c - Corrected description on how to implement exf package |
408 |
|
|
c for c27 onwards. |
409 |
|
|
c |
410 |
|
|
c - Included unit and sign conventions valid for c28 |
411 |
|
|
c in README. |
412 |
dimitri |
1.2 |
c |
413 |
|
|
c Dimitris Menemenlis menemenlis@jpl.nasa.gov 20-Dec-2002 |
414 |
|
|
c |
415 |
|
|
c - Modifications for using pkg/exf with pkg/seaice. |
416 |
heimbach |
1.1 |
c |
417 |
|
|
c ================================================================== |