Back to home page

darwin3

 
 

    


Warning, /doc/phys_pkgs/bulk_force.rst is written in an unsupported language. File is not indexed.

view on githubraw file Latest commit 0bad585a on 2022-02-16 18:55:09 UTC
8679f9097b Jeff*0001 .. _sub_phys_pkg_bulk_force:
                0002 
                0003 BULK_FORCE: Bulk Formula Package
                0004 ---------------------------------
                0005 
                0006 
                0007 author: Stephanie Dutkiewicz
                0008 
                0009 
                0010 Instead of forcing the model with heat and fresh water flux data, this
                0011 package calculates these fluxes using the changing sea surface
                0012 temperature. We need to read in some atmospheric data: **air
                0013 temperature, air humidity, down shortwave radiation, down longwave
                0014 radiation, precipitation, wind speed**. The current setup also reads in
                0015 **wind stress**, but this can be changed so that the stresses are
                0016 calculated from the wind speed.
                0017 
                0018 The current setup requires that there is the thermodynamic-seaice
                0019 package (*pkg/thsice*, also refered below as seaice) is also used. It
                0020 would be useful though to have it also setup to run with some very
                0021 simple parametrization of the sea ice.
                0022 
                0023 The heat and fresh water fluxes are calculated in *bulkf\_forcing.F*
                0024 called from *forward\_step.F*. These fluxes are used over open water,
                0025 fluxes over seaice are recalculated in the sea-ice package. Before the
                0026 call to *bulkf\_forcing.F* we call *bulkf\_fields\_load.F* to find the
                0027 current atmospheric conditions. The only other changes to the model code
                0028 come from the initializing and writing diagnostics of these fluxes.
                0029 
                0030 
                0031 subroutine BULKF_FIELDS_LOAD
                0032 ++++++++++++++++++++++++++++
                0033 
                0034 Here we find the atmospheric data needed for the bulk formula
                0035 calculations. These are read in at periodic intervals and values are
                0036 interpolated to the current time. The data file names come from
                0037 **data.blk**. The values that can be read in are: air temperature, air
                0038 humidity, precipitation, down solar radiation, down long wave radiation,
                0039 zonal and meridional wind speeds, total wind speed, net heat flux, net
                0040 freshwater forcing, cloud cover, snow fall, zonal and meridional wind
                0041 stresses, and SST and SSS used for relaxation terms. Not all these files
                0042 are necessary or used. For instance cloud cover and snow fall are not
                0043 used in the current bulk formula calculation. If total wind speed is not
                0044 supplied, wind speed is calculate from the zonal and meridional
                0045 components. If wind stresses are not read in, then the stresses are
                0046 calculated from the wind speed. Net heat flux and net freshwater can be
                0047 read in and used over open ocean instead of the bulk formula
                0048 calculations (but over seaice the bulkf formula is always used). This is
                

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 50.

0049 “hardwired” into *bulkf\_forcing* and the “ch” in the variable names

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 51.

0050 suggests that this is “cheating”. SST and SSS need to be read in if 0051 there is any relaxation used. 0052 0053 subroutine BULKF_FORCING 0054 ++++++++++++++++++++++++ 0055 0056 In *bulkf\_forcing.F*, we calculate heat and fresh water fluxes (and 0057 wind stress, if necessary) for each grid cell. First we determine if the 0058 grid cell is open water or seaice and this information is carried by 0059 **iceornot**. There is a provision here for a different designation if 0060 there is snow cover (but currently this does not make any difference). 0061 We then call *bulkf\_formula\_lanl.F* which provides values for: up long 0062 wave radiation, latent and sensible heat fluxes, the derivative of these 0063 three with respect to surface temperature, wind stress, evaporation. Net 0064 long wave radiation is calculated from the combination of the down long 0065 wave read in and the up long wave calculated. 0066 0067 We then find the albedo of the surface - with a call to *sfc\_albedo* if 0068 there is sea-ice (see the seaice package for information on the 0069 subroutine). If the grid cell is open ocean the albedo is set as 0.1. 0070 Note that this is a parameter that can be used to tune the results. The 0071 net short wave radiation is then the down shortwave radiation minus the 0072 amount reflected. 0073 0074 If the wind stress needed to be calculated in *bulkf\_formula\_lanl.F*, 0075 it was calculated to grid cell center points, so in *bulkf\_forcing.F* 0076 we regrid to **u** and **v** points. We let the model know if it has 0077 read in stresses or calculated stresses by the switch **readwindstress** 0078 which is can be set in data.blk, and defaults to **.TRUE.**. 0079 0080 We then calculate **Qnet** and **EmPmR** that will be used as the fluxes 0081 over the open ocean. There is a provision for using runoff. If we are

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 83.

0082 “cheating” and using observed fluxes over the open ocean, then there is 0083 a provision here to use read in **Qnet** and **EmPmR**. 0084 0085 The final call is to calculate averages of the terms found in this 0086 subroutine. 0087 0088 subroutine BULKF_FORMULA_LANL 0089 +++++++++++++++++++++++++++++ 0090 0091 This is the main program of the package where the heat fluxes and 0092 freshwater fluxes over ice and open water are calculated. Note that this 0093 subroutine is also called from the seaice package during the iterations 0094 to find the ice surface temperature. 0095 0096 Latent heat (:math:`L`) used in this subroutine depends on the state of 0097 the surface: vaporization for open water, fusion and vaporization for 0098 ice surfaces. Air temperature is converted from Celsius to Kelvin. If 0099 there is no wind speed (:math:`u_s`) given, then the wind speed is 0100 calculated from the zonal and meridional components. 0101 0102 We calculate the virtual temperature: 0103 0bad585a21 Navi*0104 .. math:: T_o = T_{\rm air} (1 + \gamma q_{\rm air}), 8679f9097b Jeff*0105 0bad585a21 Navi*0106 where :math:`T_{\rm air}` is the air temperature at :math:`h_T`, 0107 :math:`q_{\rm air}` is humidity at :math:`h_q` and :math:`\gamma` is a 8679f9097b Jeff*0108 constant. 0109 0110 The saturated vapor pressure is calculate (QQ ref): 0111 0bad585a21 Navi*0112 .. math:: q_{\rm sat} = \frac{a}{p_o} \exp{\left[ L \left(b-\frac{c}{T_{\rm srf}}\right)\right]}, 8679f9097b Jeff*0113 0bad585a21 Navi*0114 where :math:`a,b,c` are constants, :math:`T_{\rm srf}` is surface 8679f9097b Jeff*0115 temperature and :math:`p_o` is the surface pressure. 0116 0117 The two values crucial for the bulk formula calculations are the 0118 difference between air at sea surface and sea surface temperature: 0119 0bad585a21 Navi*0120 .. math:: \Delta T = T_{\rm air} - T_{\rm srf} +\alpha h_T, 8679f9097b Jeff*0121 0122 where :math:`\alpha` is adiabatic lapse rate and :math:`h_T` is the 0123 height where the air temperature was taken; and the difference between 0124 the air humidity and the saturated humidity 0125 0bad585a21 Navi*0126 .. math:: \Delta q = q_{\rm air} - q_{\rm sat}. 8679f9097b Jeff*0127 0128 We then calculate the turbulent exchange coefficients following Bryan et 0129 al (1996) and the numerical scheme of Hunke and Lipscombe (1998). We 0130 estimate initial values for the exchange coefficients, :math:`c_u`, 0131 :math:`c_T` and :math:`c_q` as 0132 0bad585a21 Navi*0133 .. math:: \frac{\kappa}{\ln\left(z_{\rm ref}/z_{\rm rou}\right)}, 8679f9097b Jeff*0134 0bad585a21 Navi*0135 where :math:`\kappa` is the Von Karman constant, :math:`z_{\rm ref}` is a 0136 reference height and :math:`z_{\rm rou}` is a roughness length scale which 8679f9097b Jeff*0137 could be a function of type of surface, but is here set as a constant. 0138 Turbulent scales are: 0139 0140 .. math:: 0141 0142 \begin{aligned} 0bad585a21 Navi*0143 u^* & = c_u u_s \nonumber\\ 0144 T^* & = c_T \Delta T \nonumber\\ 0145 q^* & = c_q \Delta q \nonumber 0146 \end{aligned} 8679f9097b Jeff*0147

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 149.

0148 We find the “integrated flux profile” for momentum and stability if 0bad585a21 Navi*0149 there are stable QQ conditions (:math:`\Upsilon>0`): 8679f9097b Jeff*0150 0bad585a21 Navi*0151 .. math:: \psi_m = \psi_s = -5 \Upsilon, 8679f9097b Jeff*0152 0153 and for unstable QQ conditions (:math:`\Upsilon<0`): 0154 0155 .. math:: 0156 0157 \begin{aligned} 0bad585a21 Navi*0158 \psi_m & = 2 \ln\left[\frac1{2}(1+\chi)\right] + \ln\left[\frac1{2}(1+\chi^2)\right] - 2 \tan^{-1} \chi + \pi/2 8679f9097b Jeff*0159 \nonumber \\ 0bad585a21 Navi*0160 \psi_s & = 2 \ln\left[\frac1{2}(1+\chi^2)\right] \nonumber\end{aligned} 8679f9097b Jeff*0161 0162 where 0163 0164 .. math:: 0bad585a21 Navi*0165 \Upsilon = \frac{\kappa g z_{\rm ref}}{u^{*2}} (\frac{T^*}{T_o} + 8679f9097b Jeff*0166 \frac{q^*}{1/\gamma + q_a}) 0167 0168 and :math:`\chi=(1-16\Upsilon)^{1/2}`. 0169 0170 The coefficients are updated through 5 iterations as: 0171 0172 .. math:: 0173 0174 \begin{aligned} 0bad585a21 Navi*0175 c_u & = \frac {\hat{c_u}}{1+\hat{c_u}(\lambda - \psi_m)/\kappa} \nonumber \\ 0176 c_T & = \frac {\hat{c_T}}{1+\hat{c_T}(\lambda - \psi_s)/\kappa} \nonumber \\ 0177 c_q & = c'_T\end{aligned} 8679f9097b Jeff*0178 0bad585a21 Navi*0179 where :math:`\lambda = \ln\left(h_T/z_{\rm ref}\right)`. 8679f9097b Jeff*0180 0181 We can then find the bulk formula heat fluxes: 0182 0183 Sensible heat flux: 0184 0bad585a21 Navi*0185 .. math:: Q_{\rm sh} = \rho_{\rm air} c_{p_{\rm air}} u_s c_u c_T \Delta T 8679f9097b Jeff*0186 0187 Latent heat flux: 0188 0bad585a21 Navi*0189 .. math:: Q_{\rm lh} = \rho_{\rm air} L u_s c_u c_q \Delta q 8679f9097b Jeff*0190 0191 Up long wave radiation 0192 0bad585a21 Navi*0193 .. math:: Q_{\rm lw \uparrow}=\epsilon \sigma T_{\rm srf}^4 8679f9097b Jeff*0194 0195 where :math:`\epsilon` is emissivity (which can be different for open 0196 ocean, ice and snow), :math:`\sigma` is Stefan-Boltzman constant. 0197 0198 We calculate the derivatives of the three above functions with respect 0199 to surface temperature 0200 0201 .. math:: 0202 0203 \begin{aligned} 0bad585a21 Navi*0204 \frac{dQ_{\rm sh}}{d_T} & = \rho_{\rm air} c_{p_{\rm air}} u_s c_u c_T, \nonumber \\ 0205 \frac{dQ_{\rm lh}}{d_T} & = \frac{\rho_{\rm air} L^2 u_s c_u c_q c}{T_{\rm srf}^2}, \nonumber \\ 0206 \frac{dQ_{\rm lw \uparrow}}{d_T} & = 4 \epsilon \sigma T_{\rm srf}^3, \nonumber 0207 \end{aligned} 8679f9097b Jeff*0208 0bad585a21 Navi*0209 and total derivative :math:`dQ_o/dT = dQ_{\rm sh}/dT + dQ_{\rm lh}/dT + dQ_{\rm lw \uparrow}/dT`. 8679f9097b Jeff*0210 0211 If we do not read in the wind stress, it is calculated here. 0212 0213 Initializing subroutines 0214 ++++++++++++++++++++++++ 0215 0216 :code:`bulkf_init.F`: Set bulkf variables to zero. 0217 0218 :code:`bulkf_readparms.F`: Reads **data.blk** 0219 0220 0221 Diagnostic subroutines 0222 ++++++++++++++++++++++ 0223 0224 :code:`bulkf_ave.F`: Keeps track of means of the bulkf variables 0225 0226 :code:`bulkf_diags.F`: Finds averages and writes out diagnostics 0227 0228 0229 Common Blocks 0230 +++++++++++++ 0231 0232 :code:`BULKF.h`: BULKF Variables, data file names, and logicals **readwindstress** and 0233 **readsurface** 0234 0235 :code:`BULKF_DIAGS.h`: matrices for diagnostics: averages of fields from *bulkf_diags.F* 0236 0237 :code:`BULKF_ICE_CONSTANTS.h`: all the parameters needed by the ice model and in the bulkf formula 0238 calculations. 0239 0240 0241 Input file DATA.ICE 0242 +++++++++++++++++++ 0243 0244 We read in the file names of atmospheric data used in the bulk formula 0245 calculations. Here we can also set the logicals: **readwindstress** if 0246 we read in the wind stress rather than calculate it from the wind speed; 0247 and **readsurface** to read in the surface temperature and salinity if 0248 these will be used as part of a relaxing term. 0249 0250 Important Notes 0251 +++++++++++++++ 0252 0253 #. heat fluxes have different signs in the ocean and ice models. 0254 0255 #. **StartIceModel** must be changed in **data.ice**: 1 (if starting from no ice), 0 (if using pickup.ic file). 0256 0257 0258 References 0259 ++++++++++ 0260 0261 Bryan F.O., B.G Kauffman, W.G. Large, P.R. Gent, 1996: The NCAR CSM flux 0262 coupler. Technical note TN-425+STR, NCAR. 0263 0264 Hunke, E.C and W.H. Lipscomb, circa 2001: CICE: the Los Alamos Sea Ice

** Warning **

Wide character in print at /usr/local/share/lxr/source line 1030, <$git> line 266.

0265 Model Documentation and Software User’s Manual. LACC-98-16v.2. 0266 (note: this documentation is no longer available as CICE has 0267 progressed to a very different version 3) 0268 0269 0270 Experiments and tutorials that use bulk\_force 0271 ++++++++++++++++++++++++++++++++++++++++++++++ 0272 0273 - Global ocean experiment in global\_ocean.cs32x15 verification 0274 directory, input from input.thsice directory. 0275 0276