3. CMEPS fractions module¶
The component fractions on their corresponding meshes are defined and
updated in med_fractions_mod.F90.
CMEPS component fractions are defined as follows:
- An array of field bundles,
Frac(:)
is created, where the size ofFrac
corresponds to the number of active components. - For each active component, a fraction field bundle is created,
Frac(comp_index)
, where the fields in the field bundle are unique. Below,Frac(comp_index)[fieldname]
refers to the field in theFrac(comp_index)
field bundle that has the namefieldname
.
Note
comp_index can be any of [compatm, compice, compglc, complnd, compocn, comprof, compwav].
The following are the field names for each component of FBFrac:
Frac(compatm) = afrac,ifrac,ofrac,lfrac,lfrin Frac(compocn) = afrac,ifrac,ofrac,ifrad,ofrad Frac(compice) = afrac,ifrac,ofrac Frac(complnd) = afrac,lfrac,lfrin Frac(compglc) = gfrac,lfrac Frac(comprof) = lfrac,rfrac Frac(compwav) = wfrac
where:
afrac = fraction of atm on a grid
lfrac = fraction of lnd on a grid
ifrac = fraction of ice on a grid
ofrac = fraction of ocn on a grid
lfrin = land fraction defined by the land model
rfrac = fraction of rof on a grid
wfrac = fraction of wav on a grid
ifrad = fraction of ocn on a grid at last radiation time
ofrad = fraction of ice on a grid at last radiation time
As an example, ``Frac(compatm)[lfrac]`` is the land fraction on
the atmosphere mesh.
lfrin
andlfrac
can be different fromlfrac
when the atmosphere and land meshes are different.lfrac
is the land fraction consistent with the ocean mask wherelfrin
is the land fraction in the land component.ifrad
andofrad
are fractions at the last radiation timestep. These fractions preserve conservation of heat in the net shortwave calculation because the net shortwave calculation is one timestep behind the ice fraction evolution in the system.
The following assumptions are made regarding fractions:
- The ocean and ice are on the same meshes with same masks
- The ice fraction can evolve in time
- The land fraction does not evolve in time
- the ocean fraction is just the complement of the ice fraction over the region of the ocean/ice mask.
- The component fractions are always the relative fraction covered.
For example, if an ice cell can be up to 50% covered in
ice and 50% land, then the ice domain should have a fraction
value of 0.5 at that grid cell. At run time though, the ice
fraction will be between 0.0 and 1.0 meaning that grid cells
is covered with between 0.0 and 0.5 by ice. The “relative” fractions
sent at run-time are corrected by the model to be total fractions
such that in general, on every mesh cell:
Frac(:)[afrac]
= 1.0Frac(:)[ifrac]
+Frac(:)[ofrac]
+Frac(:)[lfrac]
= 1.0
Initialization of the fractions occurs as follows (note that all mapping is first order conservative):
Frac(compatm)[afrac]
= 1.0Frac(compocn)[afrac]
= map atm -> ocnFrac(compatm)[afrac]
Frac(compice)[afrac]
= map atm -> iceFrac(compatm)[afrac]
Frac(complnd)[afrac]
= map atm -> lndFrac(compatm)[afrac]
FBfrac(:)[ifrac]
= 0.0Frac(compocn)[ofrac]
= ocean mask provided by oceanFrac(complnd)[lfrin]
= land fraction provided by landFrac(compatm)[ofrac]
= map ocn -> atmFrac(compocn)[ofrac]
Frac(compatm)[lfrin]
= map lnd -> atmFrac(complnd)[lfrin]
Frac(compatm)[lfrac]
= 1.0 -Frac(compatm)[ofrac]
(this is truncated to zero for very small values (< 0.001) to attempt to preserve non-land gridcells.)Frac(complnd)[lfrac]
= map atm -> lndFrac(compatm)[lfrac]
Frac(comprof)[lfrac]
= map lnd -> rofFrac(complnd)[lfrac]
Frac(compglc)[lfrac]
= map lnd -> glcFrac(complnd)[lfrac]
Run time calculation of fractions is as follows:
Frac(compice)[ofrac]
= 1.0 -Frac(compice)[ifrac]
(Note: the relative fractions are corrected to total fractions)Frac(compocn)[ifrac]
= map ice -> ocnFrac(compice)[ifrac]
Frac(compocn)[ofrac]
= map ice -> ocnFrac(compice)[ofrac]
Frac(compatm)[ifrac]
= map ice -> atmFrac(compice)[ifrac]
Frac(compatm)[ofrac]
= map ice -> atmFrac(compice)[ofrac]
Frac(compatm)[lfrac]
+Frac(compatm)[ofrac]
+Frac(compatm)[ifrac]
~ 1.0 (0.0-eps < Frac(:)[*] < 1.0+eps)