1 |
molod |
1.4 |
\subsection{EXF: The external forcing package |
2 |
heimbach |
1.1 |
\label{sec:pkg:exf}} |
3 |
|
|
\begin{rawhtml} |
4 |
|
|
<!-- CMIREDIR:sectionexf: --> |
5 |
|
|
\end{rawhtml} |
6 |
|
|
|
7 |
heimbach |
1.5 |
Authors: Patrick Heimbach and Dimitris Menemenlis |
8 |
heimbach |
1.1 |
|
9 |
molod |
1.4 |
\subsubsection{Introduction |
10 |
heimbach |
1.1 |
\label{sec:pkg:exf:intro}} |
11 |
|
|
|
12 |
|
|
The external forcing package, in conjunction with the |
13 |
|
|
calendar package (cal), enables the handling of real-time |
14 |
|
|
(or ``model-time'') forcing |
15 |
|
|
fields of differing temporal forcing patterns. |
16 |
|
|
It comprises climatological restoring and relaxation. |
17 |
|
|
Bulk formulae are implemented to convert atmospheric fields |
18 |
|
|
to surface fluxes. |
19 |
|
|
An interpolation routine provides on-the-fly interpolation of |
20 |
|
|
forcing fields an arbitrary grid onto the model grid. |
21 |
|
|
|
22 |
|
|
CPP options enable or disable different aspects of the package |
23 |
|
|
(Section \ref{sec:pkg:exf:config}). |
24 |
|
|
Runtime options, flags, filenames and field-related dates/times are |
25 |
heimbach |
1.11 |
set in \texttt{data.exf} |
26 |
heimbach |
1.1 |
(Section \ref{sec:pkg:exf:runtime}). |
27 |
|
|
A description of key subroutines is given in Section |
28 |
|
|
\ref{sec:pkg:exf:subroutines}. |
29 |
|
|
Input fields, units and sign conventions are summarized in |
30 |
|
|
Section \ref{sec:pkg:exf:fields_units}, and available diagnostics |
31 |
|
|
output is listed in Section \ref{sec:pkg:exf:fields_diagnostics}. |
32 |
|
|
|
33 |
|
|
%---------------------------------------------------------------------- |
34 |
|
|
|
35 |
molod |
1.4 |
\subsubsection{EXF configuration, compiling \& running} |
36 |
heimbach |
1.2 |
|
37 |
molod |
1.4 |
\paragraph{Compile-time options |
38 |
heimbach |
1.1 |
\label{sec:pkg:exf:config}} |
39 |
heimbach |
1.5 |
~ |
40 |
heimbach |
1.1 |
|
41 |
|
|
As with all MITgcm packages, EXF can be turned on or off at compile time |
42 |
heimbach |
1.5 |
% |
43 |
|
|
\begin{itemize} |
44 |
|
|
% |
45 |
|
|
\item |
46 |
|
|
using the \texttt{packages.conf} file by adding \texttt{exf} to it, |
47 |
|
|
% |
48 |
|
|
\item |
49 |
|
|
or using \texttt{genmake2} adding |
50 |
|
|
\texttt{-enable=exf} or \texttt{-disable=exf} switches |
51 |
|
|
% |
52 |
heimbach |
1.6 |
\item |
53 |
|
|
\textit{required packages and CPP options}: \\ |
54 |
|
|
EXF requires the calendar package \texttt{cal} to be enabled; |
55 |
|
|
no additional CPP options are required. |
56 |
|
|
% |
57 |
heimbach |
1.5 |
\end{itemize} |
58 |
|
|
(see Section \ref{sect:buildingCode}). |
59 |
heimbach |
1.1 |
|
60 |
heimbach |
1.5 |
Parts of the EXF code can be enabled or disabled at compile time |
61 |
heimbach |
1.1 |
via CPP preprocessor flags. These options are set in either |
62 |
|
|
\texttt{EXF\_OPTIONS.h} or in \texttt{ECCO\_CPPOPTIONS.h}. |
63 |
|
|
Table \ref{tab:pkg:exf:cpp} summarizes these options. |
64 |
|
|
|
65 |
|
|
\begin{table}[b!] |
66 |
heimbach |
1.7 |
\centering |
67 |
heimbach |
1.1 |
\label{tab:pkg:exf:cpp} |
68 |
|
|
{\footnotesize |
69 |
|
|
\begin{tabular}{|l|l|} |
70 |
heimbach |
1.2 |
\hline |
71 |
heimbach |
1.1 |
\textbf{CPP option} & \textbf{Description} \\ |
72 |
heimbach |
1.2 |
\hline \hline |
73 |
heimbach |
1.1 |
\texttt{EXF\_VERBOSE} & |
74 |
|
|
verbose mode (recommended only for testing) \\ |
75 |
|
|
\texttt{ALLOW\_ATM\_TEMP} & |
76 |
|
|
compute heat/freshwater fluxes from atmos. state input \\ |
77 |
|
|
\texttt{ALLOW\_ATM\_WIND} & |
78 |
|
|
compute wind stress from wind speed input\\ |
79 |
|
|
\texttt{ALLOW\_BULKFORMULAE} & |
80 |
heimbach |
1.3 |
is used if \texttt{ALLOW\_ATM\_TEMP} or |
81 |
|
|
\texttt{ALLOW\_ATM\_WIND} is enabled \\ |
82 |
heimbach |
1.1 |
\texttt{EXF\_READ\_EVAP} & read evaporation instead of computing it \\ |
83 |
|
|
\texttt{ALLOW\_RUNOFF} & read time-constant river/glacier run-off field \\ |
84 |
|
|
\texttt{ALLOW\_DOWNWARD\_RADIATION} & compute net from downward or downward from net radiation \\ |
85 |
|
|
\texttt{USE\_EXF\_INTERPOLATION} & enable on-the-fly bilinear or bicubic interpolation of input fields \\ |
86 |
|
|
\hline |
87 |
heimbach |
1.3 |
\multicolumn{2}{|c|}{\textit{used in conjunction with relaxation to prescribed (climatological) fields}} \\ |
88 |
|
|
\hline |
89 |
heimbach |
1.1 |
\texttt{ALLOW\_CLIMSST\_RELAXATION} & |
90 |
heimbach |
1.2 |
relaxation to 2-D SST climatology \\ |
91 |
heimbach |
1.1 |
\texttt{ALLOW\_CLIMSSS\_RELAXATION} & |
92 |
heimbach |
1.2 |
relaxation to 2-D SSS climatology \\ |
93 |
heimbach |
1.1 |
\hline |
94 |
heimbach |
1.3 |
\multicolumn{2}{|c|}{\textit{these are set outside of EXF in} \texttt{CPP\_OPTIONS.h}} \\ |
95 |
|
|
\hline |
96 |
|
|
\texttt{SHORTWAVE\_HEATING} & enable shortwave radiation \\ |
97 |
|
|
\texttt{ATMOSPHERIC\_LOADING} & enable surface pressure forcing \\ |
98 |
heimbach |
1.1 |
\hline |
99 |
|
|
\end{tabular} |
100 |
|
|
} |
101 |
|
|
\caption{~} |
102 |
|
|
\end{table} |
103 |
|
|
|
104 |
|
|
|
105 |
|
|
%---------------------------------------------------------------------- |
106 |
|
|
|
107 |
heimbach |
1.2 |
\subsubsection{Run-time parameters |
108 |
heimbach |
1.1 |
\label{sec:pkg:exf:runtime}} |
109 |
|
|
|
110 |
heimbach |
1.5 |
Run-time parameters are set in files |
111 |
|
|
\texttt{data.pkg}, \texttt{data.exf}, and |
112 |
|
|
\texttt{data.exf\_clim} (for relaxation/climatological fields) |
113 |
heimbach |
1.3 |
which are read in \texttt{exf\_readparms.F}. |
114 |
heimbach |
1.5 |
Run-time parameters may be broken into 3 categories: |
115 |
|
|
(i) switching on/off the package at runtime, |
116 |
|
|
(ii) general flags and parameters, and |
117 |
|
|
(iii) attributes for each forcing and climatological field. |
118 |
|
|
|
119 |
|
|
\paragraph{Enabling the package} |
120 |
|
|
~ \\ |
121 |
|
|
% |
122 |
heimbach |
1.11 |
A package is switched on/off at runtime by setting |
123 |
heimbach |
1.5 |
(e.g. for EXF) \texttt{useEXF = .TRUE.} in \texttt{data.pkg}. |
124 |
heimbach |
1.2 |
|
125 |
|
|
\paragraph{General flags and parameters} |
126 |
heimbach |
1.5 |
~ \\ |
127 |
|
|
% |
128 |
heimbach |
1.2 |
\begin{table}[h!] |
129 |
heimbach |
1.7 |
\centering |
130 |
heimbach |
1.2 |
\label{tab:pkg:exf:runtime_flags} |
131 |
|
|
{\footnotesize |
132 |
heimbach |
1.3 |
\begin{tabular}{|l|c|l|} |
133 |
heimbach |
1.2 |
\hline |
134 |
|
|
\textbf{Flag/parameter} & \textbf{default} & \textbf{Description} \\ |
135 |
|
|
\hline \hline |
136 |
heimbach |
1.3 |
useExfCheckRange & \texttt{.TRUE.} & |
137 |
|
|
check range of input fields and stop if out of range \\ |
138 |
|
|
useExfYearlyFields & \texttt{.FALSE.} & |
139 |
|
|
append current year postfix of form \texttt{\_YYYY} on filename \\ |
140 |
|
|
twoDigitYear & \texttt{.FALSE.} & |
141 |
|
|
instead of appending \texttt{\_YYYY} append \texttt{YY} \\ |
142 |
|
|
repeatPeriod & \texttt{0.0} & $ > 0 $ : |
143 |
|
|
cycle through all input fields at the same period (in seconds) \\ |
144 |
|
|
~ & ~ & $ = 0 $ : |
145 |
|
|
use period assigned to each field \\ |
146 |
|
|
exf\_offset\_atemp & \texttt{0.0} & set to 273.16 to convert from deg. Kelvin (assumed input) to Celsius \\ |
147 |
|
|
windstressmax & \texttt{2.0} & |
148 |
|
|
max. allowed wind stress $N/m^2$ \\ |
149 |
|
|
exf\_albedo & \texttt{0.1} & |
150 |
|
|
surface albedo used to compute downward vs. net radiative fluxes \\ |
151 |
heimbach |
1.10 |
climtempfreeze & \texttt{-1.9} & |
152 |
|
|
??? \\ |
153 |
|
|
ocean\_emissivity & \texttt{} & |
154 |
|
|
longwave ocean-surface emissivity \\ |
155 |
|
|
ice\_emissivity & \texttt{} & |
156 |
|
|
longwave seaice emissivity \\ |
157 |
|
|
snow\_emissivity & \texttt{} & |
158 |
|
|
longwave snow emissivity \\ |
159 |
|
|
exf\_iceCd & \texttt{1.63E-3} & |
160 |
|
|
drag coefficient over sea-ice \\ |
161 |
|
|
exf\_iceCe & \texttt{1.63E-3} & |
162 |
|
|
evaporation transfer coeff. over sea-ice \\ |
163 |
|
|
exf\_iceCh & \texttt{1.63E-3} & |
164 |
|
|
sensible heat transfer coeff. over sea-ice \\ |
165 |
|
|
exf\_scal\_BulkCdn & \texttt{1.} & |
166 |
|
|
overall scaling of neutral drag coeff. \\ |
167 |
|
|
useStabilityFct\_overIce & \texttt{.FALSE.} & |
168 |
|
|
compute turbulent transfer coeff. over sea-ice \\ |
169 |
|
|
readStressOnAgrid & \texttt{.FALSE.} & |
170 |
|
|
read wind-streess located on model-grid, A-grid point \\ |
171 |
|
|
readStressOnCgrid & \texttt{.FALSE.} & |
172 |
|
|
read wind-streess located on model-grid, C-grid point \\ |
173 |
|
|
useRelativeWind & \texttt{.FALSE.} & |
174 |
|
|
subtract [U/V]VEL or [U/VICE from U/V]WIND before \\ |
175 |
|
|
~ & ~ & computing [U/V]STRESS \\ |
176 |
|
|
zref & \texttt{10.} & |
177 |
|
|
reference height \\ |
178 |
|
|
hu & \texttt{10.} & |
179 |
|
|
height of mean wind \\ |
180 |
|
|
ht & \texttt{2.} & |
181 |
|
|
height of mean temperature and rel. humidity \\ |
182 |
|
|
umin & \texttt{0.5} & |
183 |
|
|
minimum absolute wind speed for computing Cd \\ |
184 |
|
|
atmrho & \texttt{1.2} & |
185 |
|
|
mean atmospheric density [kg/m\^3] \\ |
186 |
|
|
atmcp & \texttt{1005.} & |
187 |
|
|
mean atmospheric specific heat [J/kg/K] \\ |
188 |
|
|
cdrag\_[n] & \texttt{???} & |
189 |
|
|
n = 1,2,3; parameters for drag coeff. function \\ |
190 |
|
|
cstanton\_[n] & \texttt{???} & |
191 |
|
|
n = 1,2; parameters for Stanton number function \\ |
192 |
|
|
cdalton & \texttt{???} & |
193 |
|
|
parameter for Dalton number function \\ |
194 |
|
|
flamb & \texttt{2500000.} & |
195 |
|
|
latent heat of evaporation [J/kg] \\ |
196 |
|
|
flami & \texttt{334000.} & |
197 |
|
|
latent heat of melting of pure ice [J/kg] \\ |
198 |
|
|
zolmin & \texttt{-100.} & |
199 |
|
|
minimum stability parameter \\ |
200 |
|
|
cvapor\_fac & \texttt{640380.} & |
201 |
|
|
~ \\ |
202 |
|
|
cvapor\_exp & \texttt{5107.4} & |
203 |
|
|
~ \\ |
204 |
|
|
cvapor\_fac\_ice & \texttt{11637800.} & |
205 |
|
|
~ \\ |
206 |
|
|
cvapor\_fac\_ice & \texttt{5897.8} & |
207 |
|
|
~ \\ |
208 |
|
|
humid\_fac & \texttt{0.606} & |
209 |
|
|
parameter for virtual temperature calculation \\ |
210 |
|
|
gamma\_blk & \texttt{0.010} & |
211 |
|
|
adiabatic lapse rate \\ |
212 |
|
|
saltsat & \texttt{0.980} & |
213 |
|
|
reduction of saturation vapor pressure over salt-water \\ |
214 |
|
|
psim\_fac & \texttt{5.} & |
215 |
|
|
~ \\ |
216 |
|
|
exf\_monFreq & \texttt{monitorFreq} & |
217 |
|
|
output frequency [s] \\ |
218 |
heimbach |
1.3 |
exf\_iprec & \texttt{32} & |
219 |
|
|
precision of input fields (32-bit or 64-bit) \\ |
220 |
|
|
exf\_yftype & \texttt{'RL'} & |
221 |
|
|
precision of arrays ('RL' vs. 'RS') \\ |
222 |
heimbach |
1.2 |
\hline |
223 |
|
|
\end{tabular} |
224 |
|
|
} |
225 |
|
|
\caption{~} |
226 |
|
|
\end{table} |
227 |
|
|
|
228 |
|
|
|
229 |
heimbach |
1.5 |
\paragraph{Field attributes} |
230 |
|
|
~ \\ |
231 |
heimbach |
1.3 |
% |
232 |
|
|
All EXF fields are listed in Section \ref{sec:pkg:exf:fields_units}. |
233 |
|
|
Each field has a number of attributes which can be customized. |
234 |
|
|
They are summarized in |
235 |
|
|
Table \ref{tab:pkg:exf:runtime_attributes}. |
236 |
|
|
To obtain an attribute for a specific field, e.g. \texttt{uwind} |
237 |
|
|
prepend the field name to the listed attribute, e.g. for attribute |
238 |
|
|
\texttt{period} this yields \texttt{uwindperiod}: |
239 |
|
|
% |
240 |
|
|
\begin{eqnarray*} |
241 |
|
|
\begin{array}{cccccc} |
242 |
|
|
~ & \texttt{field} & \& & \texttt{attribute} & \longrightarrow & \texttt{parameter} \\ |
243 |
|
|
\text{e.g.} & \text{uwind} & \& & \text{period} & \longrightarrow & \text{uwindperiod} \\ |
244 |
|
|
\end{array} |
245 |
|
|
\end{eqnarray*} |
246 |
|
|
% |
247 |
heimbach |
1.2 |
|
248 |
heimbach |
1.3 |
\begin{table}[h!] |
249 |
heimbach |
1.7 |
\centering |
250 |
heimbach |
1.3 |
\label{tab:pkg:exf:runtime_attributes} |
251 |
|
|
{\footnotesize |
252 |
|
|
\begin{tabular}{|l|c|l|} |
253 |
|
|
\hline |
254 |
|
|
\textbf{attribute} & \textbf{Default} & \textbf{Description} \\ |
255 |
|
|
\hline \hline |
256 |
|
|
\textit{field}\texttt{file} & ' ' & |
257 |
|
|
filename; if left empty no file will be read; \texttt{const} will be used instead \\ |
258 |
|
|
\textit{field}\texttt{const} & 0. & |
259 |
|
|
constant that will be used if no file is read \\ |
260 |
|
|
\textit{field}\texttt{startdate1} & 0. & |
261 |
|
|
format: \texttt{YYYYMMDD}; start year (YYYY), month (MM), day (YY) \\ |
262 |
|
|
~&~& of field to determine record number \\ |
263 |
|
|
\textit{field}\texttt{startdate2} & 0. & |
264 |
|
|
format: \texttt{HHMMSS}; start hour (HH), minute (MM), second(SS) \\ |
265 |
|
|
~&~& of field to determine record number\\ |
266 |
|
|
\textit{field}\texttt{period} & 0. & |
267 |
|
|
interval in seconds between two records \\ |
268 |
|
|
\texttt{exf\_inscal\_}\textit{field}& ~ & |
269 |
|
|
optional rescaling of input fields to comply with EXF units \\ |
270 |
|
|
\texttt{exf\_outscal\_}\textit{field}& ~ & |
271 |
|
|
optional rescaling of EXF fields when mapped onto MITgcm fields \\ |
272 |
|
|
\hline |
273 |
|
|
\multicolumn{3}{|c|}{\textit{used in conjunction with} |
274 |
|
|
\texttt{EXF\_USE\_INTERPOLATION}} \\ |
275 |
|
|
\hline |
276 |
|
|
\textit{field}\texttt{\_lon0} & $thetaMin+delX/2$ & |
277 |
|
|
starting longitude of input \\ |
278 |
|
|
\textit{field}\texttt{\_lon\_inc} & $delX$ & |
279 |
|
|
increment in longitude of input \\ |
280 |
|
|
\textit{field}\texttt{\_lat0} & $phiMin+delY/2$ & |
281 |
|
|
starting latitude of input \\ |
282 |
|
|
\textit{field}\texttt{\_lat\_inc} & $delY$ & |
283 |
|
|
increment in latitude of input \\ |
284 |
|
|
\textit{field}\texttt{\_nlon} & $Nx$ & |
285 |
|
|
number of grid points in longitude of input \\ |
286 |
|
|
\textit{field}\texttt{\_nlat} & $Ny$ & |
287 |
|
|
number of grid points in longitude of input \\ |
288 |
|
|
\hline |
289 |
|
|
\end{tabular} |
290 |
|
|
} |
291 |
|
|
\caption{\newline |
292 |
|
|
Note one exception for the default of |
293 |
|
|
\texttt{atempconst} = celsius2K = 273.16} |
294 |
|
|
\end{table} |
295 |
heimbach |
1.2 |
|
296 |
heimbach |
1.3 |
\paragraph{Example configuration} ~ \\ |
297 |
|
|
% |
298 |
|
|
The following block is taken from the \texttt{data.exf} file |
299 |
|
|
of the veification experiment \texttt{global\_with\_exf/}. |
300 |
|
|
It defines attributes for the heat flux variable \texttt{hflux}: |
301 |
|
|
|
302 |
|
|
\begin{verbatim} |
303 |
|
|
hfluxfile = 'ncep_qnet.bin', |
304 |
|
|
hfluxstartdate1 = 19920101, |
305 |
|
|
hfluxstartdate2 = 000000, |
306 |
|
|
hfluxperiod = 2592000.0, |
307 |
|
|
hflux_lon0 = 2 |
308 |
|
|
hflux_lon_inc = 4 |
309 |
|
|
hflux_lat0 = -78 |
310 |
|
|
hflux_lat_inc = 39*4 |
311 |
|
|
hflux_nlon = 90 |
312 |
|
|
hflux_nlat = 40 |
313 |
|
|
\end{verbatim} |
314 |
|
|
|
315 |
|
|
EXF will read a file of name 'ncep\_qnet.bin'. |
316 |
|
|
Its first record represents January 1st, 1991 at 00:00 UTC. |
317 |
|
|
Next record is 2592000 seconds (or 30 days) later. |
318 |
|
|
Interpolation on-the-fly is used (in the present case trivially |
319 |
|
|
on the same grid, but included nevertheless for illustration), |
320 |
|
|
and input field grid starting coordinates and increments are |
321 |
|
|
supplied as well. |
322 |
heimbach |
1.2 |
|
323 |
heimbach |
1.1 |
%---------------------------------------------------------------------- |
324 |
|
|
|
325 |
heimbach |
1.10 |
\subsubsection{EXF bulk formulae |
326 |
|
|
\label{sec:pkg:exf:bulk_formulae}} |
327 |
|
|
|
328 |
|
|
T.B.D. (cross-ref. to parameter list table) |
329 |
|
|
|
330 |
|
|
%---------------------------------------------------------------------- |
331 |
|
|
|
332 |
molod |
1.4 |
\subsubsection{EXF input fields and units |
333 |
heimbach |
1.1 |
\label{sec:pkg:exf:fields_units}} |
334 |
|
|
|
335 |
|
|
The following list is taken from the header file \texttt{exf\_fields.h}. |
336 |
heimbach |
1.3 |
It comprises all EXF input fields. |
337 |
|
|
|
338 |
|
|
Output fields which EXF provides to the MITgcm are fields |
339 |
|
|
\textbf{fu}, \textbf{fv}, \textbf{Qnet}, \textbf{Qsw}, \textbf{EmPmR}, |
340 |
|
|
and \textbf{pload}. They are defined in \texttt{FFIELDS.h}. |
341 |
heimbach |
1.1 |
|
342 |
heimbach |
1.5 |
{\footnotesize |
343 |
heimbach |
1.1 |
\begin{verbatim} |
344 |
|
|
|
345 |
heimbach |
1.3 |
c---------------------------------------------------------------------- |
346 |
|
|
c | |
347 |
|
|
c field :: Description |
348 |
|
|
c | |
349 |
|
|
c---------------------------------------------------------------------- |
350 |
heimbach |
1.1 |
c ustress :: Zonal surface wind stress in N/m^2 |
351 |
heimbach |
1.3 |
c | > 0 for increase in uVel, which is west to |
352 |
|
|
c | east for cartesian and spherical polar grids |
353 |
|
|
c | Typical range: -0.5 < ustress < 0.5 |
354 |
|
|
c | Southwest C-grid U point |
355 |
|
|
c | Input field |
356 |
|
|
c---------------------------------------------------------------------- |
357 |
heimbach |
1.1 |
c vstress :: Meridional surface wind stress in N/m^2 |
358 |
heimbach |
1.3 |
c | > 0 for increase in vVel, which is south to |
359 |
|
|
c | north for cartesian and spherical polar grids |
360 |
|
|
c | Typical range: -0.5 < vstress < 0.5 |
361 |
|
|
c | Southwest C-grid V point |
362 |
|
|
c | Input field |
363 |
|
|
c---------------------------------------------------------------------- |
364 |
heimbach |
1.8 |
c hs :: sensible heat flux into ocean in W/m^2 |
365 |
|
|
c | > 0 for increase in theta (ocean warming) |
366 |
|
|
c---------------------------------------------------------------------- |
367 |
|
|
c hl :: latent heat flux into ocean in W/m^2 |
368 |
|
|
c | > 0 for increase in theta (ocean warming) |
369 |
|
|
c---------------------------------------------------------------------- |
370 |
heimbach |
1.1 |
c hflux :: Net upward surface heat flux in W/m^2 |
371 |
heimbach |
1.3 |
c | excluding shortwave (on input) |
372 |
|
|
c | hflux = latent + sensible + lwflux |
373 |
|
|
c | > 0 for decrease in theta (ocean cooling) |
374 |
|
|
c | Typical range: -250 < hflux < 600 |
375 |
|
|
c | Southwest C-grid tracer point |
376 |
|
|
c | Input field |
377 |
|
|
c---------------------------------------------------------------------- |
378 |
heimbach |
1.1 |
c sflux :: Net upward freshwater flux in m/s |
379 |
heimbach |
1.3 |
c | sflux = evap - precip - runoff |
380 |
|
|
c | > 0 for increase in salt (ocean salinity) |
381 |
|
|
c | Typical range: -1e-7 < sflux < 1e-7 |
382 |
|
|
c | Southwest C-grid tracer point |
383 |
|
|
c | Input field |
384 |
|
|
c---------------------------------------------------------------------- |
385 |
heimbach |
1.1 |
c swflux :: Net upward shortwave radiation in W/m^2 |
386 |
heimbach |
1.3 |
c | swflux = - ( swdown - ice and snow absorption - reflected ) |
387 |
|
|
c | > 0 for decrease in theta (ocean cooling) |
388 |
|
|
c | Typical range: -350 < swflux < 0 |
389 |
|
|
c | Southwest C-grid tracer point |
390 |
|
|
c | Input field |
391 |
|
|
c---------------------------------------------------------------------- |
392 |
heimbach |
1.1 |
c uwind :: Surface (10-m) zonal wind velocity in m/s |
393 |
heimbach |
1.3 |
c | > 0 for increase in uVel, which is west to |
394 |
|
|
c | east for cartesian and spherical polar grids |
395 |
|
|
c | Typical range: -10 < uwind < 10 |
396 |
|
|
c | Southwest C-grid U point |
397 |
|
|
c | Input or input/output field |
398 |
|
|
c---------------------------------------------------------------------- |
399 |
heimbach |
1.1 |
c vwind :: Surface (10-m) meridional wind velocity in m/s |
400 |
heimbach |
1.3 |
c | > 0 for increase in vVel, which is south to |
401 |
|
|
c | north for cartesian and spherical polar grids |
402 |
|
|
c | Typical range: -10 < vwind < 10 |
403 |
|
|
c | Southwest C-grid V point |
404 |
|
|
c | Input or input/output field |
405 |
|
|
c---------------------------------------------------------------------- |
406 |
heimbach |
1.8 |
c wspeed :: Surface (10-m) wind speed in m/s |
407 |
|
|
c | >= 0 sqrt(u^2+v^2) |
408 |
|
|
c | Typical range: 0 < wspeed < 10 |
409 |
|
|
c | Input or input/output field |
410 |
|
|
c---------------------------------------------------------------------- |
411 |
heimbach |
1.1 |
c atemp :: Surface (2-m) air temperature in deg K |
412 |
heimbach |
1.3 |
c | Typical range: 200 < atemp < 300 |
413 |
|
|
c | Southwest C-grid tracer point |
414 |
|
|
c | Input or input/output field |
415 |
|
|
c---------------------------------------------------------------------- |
416 |
heimbach |
1.1 |
c aqh :: Surface (2m) specific humidity in kg/kg |
417 |
heimbach |
1.3 |
c | Typical range: 0 < aqh < 0.02 |
418 |
|
|
c | Southwest C-grid tracer point |
419 |
|
|
c | Input or input/output field |
420 |
|
|
c---------------------------------------------------------------------- |
421 |
heimbach |
1.1 |
c lwflux :: Net upward longwave radiation in W/m^2 |
422 |
heimbach |
1.3 |
c | lwflux = - ( lwdown - ice and snow absorption - emitted ) |
423 |
|
|
c | > 0 for decrease in theta (ocean cooling) |
424 |
|
|
c | Typical range: -20 < lwflux < 170 |
425 |
|
|
c | Southwest C-grid tracer point |
426 |
|
|
c | Input field |
427 |
|
|
c---------------------------------------------------------------------- |
428 |
heimbach |
1.1 |
c evap :: Evaporation in m/s |
429 |
heimbach |
1.3 |
c | > 0 for increase in salt (ocean salinity) |
430 |
|
|
c | Typical range: 0 < evap < 2.5e-7 |
431 |
|
|
c | Southwest C-grid tracer point |
432 |
|
|
c | Input, input/output, or output field |
433 |
|
|
c---------------------------------------------------------------------- |
434 |
heimbach |
1.1 |
c precip :: Precipitation in m/s |
435 |
heimbach |
1.3 |
c | > 0 for decrease in salt (ocean salinity) |
436 |
|
|
c | Typical range: 0 < precip < 5e-7 |
437 |
|
|
c | Southwest C-grid tracer point |
438 |
|
|
c | Input or input/output field |
439 |
|
|
c---------------------------------------------------------------------- |
440 |
heimbach |
1.8 |
c snowprecip :: snow in m/s |
441 |
|
|
c | > 0 for decrease in salt (ocean salinity) |
442 |
|
|
c | Typical range: 0 < precip < 5e-7 |
443 |
|
|
c | Input or input/output field |
444 |
|
|
c---------------------------------------------------------------------- |
445 |
heimbach |
1.1 |
c runoff :: River and glacier runoff in m/s |
446 |
heimbach |
1.3 |
c | > 0 for decrease in salt (ocean salinity) |
447 |
|
|
c | Typical range: 0 < runoff < ???? |
448 |
|
|
c | Southwest C-grid tracer point |
449 |
|
|
c | Input or input/output field |
450 |
|
|
c | !!! WATCH OUT: Default exf_inscal_runoff !!! |
451 |
|
|
c | !!! in exf_readparms.F is not 1.0 !!! |
452 |
|
|
c---------------------------------------------------------------------- |
453 |
heimbach |
1.1 |
c swdown :: Downward shortwave radiation in W/m^2 |
454 |
heimbach |
1.3 |
c | > 0 for increase in theta (ocean warming) |
455 |
|
|
c | Typical range: 0 < swdown < 450 |
456 |
|
|
c | Southwest C-grid tracer point |
457 |
|
|
c | Input/output field |
458 |
|
|
c---------------------------------------------------------------------- |
459 |
heimbach |
1.1 |
c lwdown :: Downward longwave radiation in W/m^2 |
460 |
heimbach |
1.3 |
c | > 0 for increase in theta (ocean warming) |
461 |
|
|
c | Typical range: 50 < lwdown < 450 |
462 |
|
|
c | Southwest C-grid tracer point |
463 |
|
|
c | Input/output field |
464 |
|
|
c---------------------------------------------------------------------- |
465 |
heimbach |
1.1 |
c apressure :: Atmospheric pressure field in N/m^2 |
466 |
heimbach |
1.3 |
c | > 0 for ???? |
467 |
|
|
c | Typical range: ???? < apressure < ???? |
468 |
|
|
c | Southwest C-grid tracer point |
469 |
|
|
c | Input field |
470 |
|
|
c---------------------------------------------------------------------- |
471 |
|
|
|
472 |
heimbach |
1.1 |
\end{verbatim} |
473 |
|
|
} |
474 |
|
|
|
475 |
|
|
%---------------------------------------------------------------------- |
476 |
|
|
|
477 |
molod |
1.4 |
\subsubsection{Key subroutines |
478 |
heimbach |
1.1 |
\label{sec:pkg:exf:subroutines}} |
479 |
|
|
|
480 |
molod |
1.4 |
Top-level routine: \texttt{exf\_getforcing.F} |
481 |
heimbach |
1.3 |
|
482 |
heimbach |
1.5 |
{\footnotesize |
483 |
heimbach |
1.3 |
\begin{verbatim} |
484 |
|
|
|
485 |
|
|
C !CALLING SEQUENCE: |
486 |
|
|
c ... |
487 |
|
|
c exf_getforcing (TOP LEVEL ROUTINE) |
488 |
|
|
c | |
489 |
|
|
c |-- exf_getclim (get climatological fields used e.g. for relax.) |
490 |
|
|
c | |--- exf_set_climsst (relax. to 2-D SST field) |
491 |
|
|
c | |--- exf_set_climsss (relax. to 2-D SSS field) |
492 |
|
|
c | o |
493 |
|
|
c | |
494 |
|
|
c |-- exf_getffields <- this one does almost everything |
495 |
|
|
c | | 1. reads in fields, either flux or atmos. state, |
496 |
|
|
c | | depending on CPP options (for each variable two fields |
497 |
|
|
c | | consecutive in time are read in and interpolated onto |
498 |
|
|
c | | current time step). |
499 |
|
|
c | | 2. If forcing is atmos. state and control is atmos. state, |
500 |
heimbach |
1.8 |
c | | then the control variable anomalies are read here via ctrl_get_gen |
501 |
|
|
c | | (atemp, aqh, precip, swflux, swdown, uwind, vwind). |
502 |
heimbach |
1.3 |
c | | If forcing and control are fluxes, then |
503 |
|
|
c | | controls are added later. |
504 |
|
|
c | o |
505 |
|
|
c | |
506 |
heimbach |
1.8 |
c |-- exf_radiation |
507 |
|
|
c | | Compute net or downwelling radiative fluxes via |
508 |
|
|
c | | Stefan-Boltzmann law in case only one is known. |
509 |
|
|
c | o |
510 |
|
|
c |-- exf_wind |
511 |
|
|
c | | Computes wind speed and stresses, if required. |
512 |
heimbach |
1.3 |
c | o |
513 |
|
|
c | |
514 |
|
|
c |-- exf_bulkformulae |
515 |
heimbach |
1.8 |
c | | Compute air-sea buoyancy fluxes from |
516 |
|
|
c | | atmospheric state following Large and Pond, JPO, 1981/82 |
517 |
heimbach |
1.3 |
c | o |
518 |
|
|
c | |
519 |
heimbach |
1.8 |
c |-- < hflux is sum of sensible, latent, longwave rad. > |
520 |
|
|
c |-- < sflux is sum of evap. minus precip. minus runoff > |
521 |
|
|
c | |
522 |
|
|
c |-- exf_getsurfacefluxes |
523 |
|
|
c | If forcing and control is flux, then the |
524 |
|
|
c | control vector anomalies are read here via ctrl_get_gen |
525 |
|
|
c | (hflux, sflux, ustress, vstress) |
526 |
heimbach |
1.3 |
c | |
527 |
|
|
c |-- < update tile edges here > |
528 |
|
|
c | |
529 |
heimbach |
1.8 |
c |-- exf_check_range |
530 |
|
|
c | | Check whether read fields are within assumed range |
531 |
|
|
c | | (may capture mismatches in units) |
532 |
heimbach |
1.3 |
c | o |
533 |
|
|
c | |
534 |
heimbach |
1.8 |
c |-- < add shortwave to hflux for diagnostics > |
535 |
heimbach |
1.3 |
c | |
536 |
|
|
c |-- exf_diagnostics_fill |
537 |
heimbach |
1.8 |
c | | Do EXF-related diagnostics output here. |
538 |
heimbach |
1.3 |
c | o |
539 |
|
|
c | |
540 |
|
|
c |-- exf_mapfields |
541 |
heimbach |
1.8 |
c | | Forcing fields from exf package are mapped onto |
542 |
|
|
c | | mitgcm forcing arrays. |
543 |
|
|
c | | Mapping enables a runtime rescaling of fields |
544 |
heimbach |
1.3 |
c | o |
545 |
heimbach |
1.8 |
C o |
546 |
heimbach |
1.3 |
\end{verbatim} |
547 |
|
|
} |
548 |
|
|
|
549 |
heimbach |
1.8 |
Radiation calculation: \texttt{exf\_radiation.F} |
550 |
|
|
|
551 |
|
|
Wind speed and stress calculation: \texttt{exf\_wind.F} |
552 |
|
|
|
553 |
|
|
Bulk formula: \texttt{exf\_bulkformulae.F} |
554 |
heimbach |
1.3 |
|
555 |
heimbach |
1.8 |
Generic I/O: \texttt{exf\_set\_gen.F} |
556 |
heimbach |
1.3 |
|
557 |
heimbach |
1.8 |
Interpolation: \texttt{exf\_interp.F} |
558 |
heimbach |
1.3 |
|
559 |
molod |
1.4 |
Header routines |
560 |
heimbach |
1.3 |
|
561 |
heimbach |
1.1 |
%---------------------------------------------------------------------- |
562 |
|
|
|
563 |
molod |
1.4 |
\subsubsection{EXF diagnostics |
564 |
heimbach |
1.1 |
\label{sec:pkg:exf:diagnostics}} |
565 |
|
|
|
566 |
|
|
Diagnostics output is available via the diagnostics package |
567 |
|
|
(see Section \ref{sec:pkg:diagnostics}). |
568 |
|
|
Available output fields are summarized in |
569 |
|
|
Table \ref{tab:pkg:exf:diagnostics}. |
570 |
|
|
|
571 |
heimbach |
1.3 |
\begin{table}[h!] |
572 |
heimbach |
1.7 |
\centering |
573 |
heimbach |
1.1 |
\label{tab:pkg:exf:diagnostics} |
574 |
|
|
{\footnotesize |
575 |
|
|
\begin{verbatim} |
576 |
heimbach |
1.11 |
---------+----+----+----------------+----------------- |
577 |
heimbach |
1.1 |
<-Name->|Levs|grid|<-- Units -->|<- Tile (max=80c) |
578 |
heimbach |
1.11 |
---------+----+----+----------------+----------------- |
579 |
heimbach |
1.8 |
EXFhs | 1 | SM | W/m^2 | Sensible heat flux into ocean, >0 increases theta |
580 |
|
|
EXFhl | 1 | SM | W/m^2 | Latent heat flux into ocean, >0 increases theta |
581 |
|
|
EXFlwnet| 1 | SM | W/m^2 | Net upward longwave radiation, >0 decreases theta |
582 |
|
|
EXFswnet| 1 | SM | W/m^2 | Net upward shortwave radiation, >0 decreases theta |
583 |
heimbach |
1.3 |
EXFlwdn | 1 | SM | W/m^2 | Downward longwave radiation, >0 increases theta |
584 |
|
|
EXFswdn | 1 | SM | W/m^2 | Downward shortwave radiation, >0 increases theta |
585 |
|
|
EXFqnet | 1 | SM | W/m^2 | Net upward heat flux (turb+rad), >0 decreases theta |
586 |
|
|
EXFtaux | 1 | SU | N/m^2 | zonal surface wind stress, >0 increases uVel |
587 |
|
|
EXFtauy | 1 | SV | N/m^2 | meridional surface wind stress, >0 increases vVel |
588 |
|
|
EXFuwind| 1 | SM | m/s | zonal 10-m wind speed, >0 increases uVel |
589 |
|
|
EXFvwind| 1 | SM | m/s | meridional 10-m wind speed, >0 increases uVel |
590 |
heimbach |
1.8 |
EXFwspee| 1 | SM | m/s | 10-m wind speed modulus ( >= 0 ) |
591 |
heimbach |
1.3 |
EXFatemp| 1 | SM | degK | surface (2-m) air temperature |
592 |
|
|
EXFaqh | 1 | SM | kg/kg | surface (2-m) specific humidity |
593 |
|
|
EXFevap | 1 | SM | m/s | evaporation, > 0 increases salinity |
594 |
|
|
EXFpreci| 1 | SM | m/s | evaporation, > 0 decreases salinity |
595 |
heimbach |
1.8 |
EXFsnow | 1 | SM | m/s | snow precipitation, > 0 decreases salinity |
596 |
heimbach |
1.3 |
EXFempmr| 1 | SM | m/s | net upward freshwater flux, > 0 increases salinity |
597 |
|
|
EXFpress| 1 | SM | N/m^2 | atmospheric pressure field |
598 |
heimbach |
1.1 |
\end{verbatim} |
599 |
|
|
} |
600 |
heimbach |
1.3 |
\caption{~} |
601 |
heimbach |
1.1 |
\end{table} |
602 |
|
|
|
603 |
|
|
%---------------------------------------------------------------------- |
604 |
|
|
|
605 |
molod |
1.9 |
\subsubsection{Experiments and tutorials that use exf} |
606 |
|
|
\label{sec:pkg:exf:experiments} |
607 |
heimbach |
1.1 |
|
608 |
molod |
1.9 |
\begin{itemize} |
609 |
|
|
\item{Global Ocean experiment, in global\_with\_exf verification directory } |
610 |
|
|
\item{Labrador Sea experiment, in lab\_sea verification directory } |
611 |
|
|
\end{itemize} |
612 |
heimbach |
1.3 |
|
613 |
heimbach |
1.1 |
%---------------------------------------------------------------------- |
614 |
|
|
|
615 |
molod |
1.4 |
\subsubsection{References} |