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