mp_thompson General Algorithm
- Initialize Source/sink terms. First 2 chars: "pr" represents source/sink of mass while "pn" represents source/sink of number. Next char is one of "v" for water vapor, "r" for rain, "i" for cloud ice, "w" for cloud water, "s" for snow, and "g" for graupel. Next chars represent processes: "de" for sublimation/deposition, "ev" for evaporation, "fz" for freezing, "ml" for melting, "au" for autoconversion, "nu" for ice nucleation, "hm" for Hallet/Mossop secondary ice production, and "c" for collection followed by the character for the species being collected. ALL of these terms are positive (except for deposition/sublimation terms which can switch signs based on super/subsaturation) and are treated as negatives where necessary in the tendency equations.
- Put column of data into local arrays.
- Derive various thermodynamic variables frequently used. Saturation vapor pressure (mixing ratio) over liquid/ice comes from Flatau et al. 1992; enthalpy (latent heat) of vaporization from Bohren & Albrecht 1998; others from Pruppacher & Klett 1978.
- If no existing hydrometeor species and no chance to initiate ice or condense cloud water, just exit quickly!
- Calculate y-intercept, slope, and useful moments for snow.
- All other moments based on reference, 2nd moment. If bm_s.ne.2, then we must compute actual 2nd moment and use as reference.
- Calculate 0th moment. Represents snow number concentration.
- Calculate 1st moment. Useful for depositional growth and melting.
- Calculate bm_s+1 (th) moment. Useful for diameter calcs.
- Calculate bv_s+2 (th) moment. Useful for riming.
- Calculate 1+(bv_s+1)/2 (th) moment. Useful for depositional growth.
- Calculate y-intercept, slope values for graupel.
- Calculate y-intercept, slope values for rain.
- Compute warm-rain process terms (except evap done later).
- Rain self-collection follows Seifert, 1994 and drop break-up follows Verlinde and Cotton, 1993. RAIN2M
- Autoconversion follows Berry & Reinhardt (1974) with characteristic diameters correctly computed from gamma distrib of cloud droplets.
- Rain collecting cloud water. In CE, assume Dc<<Dr and vtc=~0.
- Rain collecting aerosols, wet scavenging.
- Compute all frozen hydrometeor species' process terms.
- Temperature lookup table indexes.
- Cloud water lookup table index.
- Cloud droplet number lookup table index.
- Cloud ice lookup table indexes.
- Rain lookup table indexes.
- Snow lookup table index.
- Graupel lookup table index.
- Deposition/sublimation prefactor (from Srivastava & Coen 1992).
- Snow collecting cloud water. In CE, assume Dc<<Ds and vtc=~0.
- Graupel collecting cloud water. In CE, assume Dc<<Dg and vtc=~0.
- Snow and graupel collecting aerosols, wet scavenging.
- Rain collecting snow. Cannot assume Wisner (1972) approximation or Mizuno (1990) approach so we solve the CE explicitly and store results in lookup table.
- Rain collecting graupel. Cannot assume Wisner (1972) approximation or Mizuno (1990) approach so we solve the CE explicitly and store results in lookup table.
- Put in explicit drop break-up due to collisions.
- Next IF block handles only those processes below 0C.
- Begin NEW ICE NUCLEATION: Freezing of supercooled water (rain or cloud) is influenced by dust but still using Bigg 1953 with a temperature adjustment of a few degrees depending on dust concentration. A default value by way of idx_IN is 1.0 per Liter of air is used when dustyIce flag is false. Next, a combination of deposition/condensation freezing using DeMott et al (2010) dust nucleation when water saturated or Phillips et al (2008) when below water saturation; else, without dustyIce flag, use the previous Cooper (1986) temperature-dependent value. Lastly, allow homogeneous freezing of deliquesced aerosols following Koop et al. (2001, Nature). Implemented by T. Eidhammer and G. Thompson 2012Dec18
- Ice nuclei lookup table index.
- Freezing of water drops into graupel/cloud ice (Bigg 1953).
- Deposition nucleation of dust/mineral from DeMott et al (2010) we may need to relax the temperature and ssati constraints.
- Freezing of aqueous aerosols based on Koop et al (2001, Nature)
- Deposition/sublimation of cloud ice (Srivastava & Coen 1992).
- Some cloud ice needs to move into the snow category. Use lookup table that resulted from explicit bin representation of distrib.
- Deposition/sublimation of snow/graupel follows Srivastava & Coen (1992).
- Snow collecting cloud ice. In CE, assume Di<<Ds and vti=~0.
- Rain collecting cloud ice. In CE, assume Di<<Dr and vti=~0.
- Ice multiplication from rime-splinters (Hallet & Mossop 1974).
- A portion of rimed snow converts to graupel but some remains snow. Interp from 15 to 95% as riming factor increases from 2.0 to 30.0 0.028 came from (.95-.15)/(30.-2.). This remains ad-hoc and should be revisited.
- Melt snow and graupel and enhance from collisions with liquid. We also need to sublimate snow and graupel if subsaturated.
- This change will be required if users run adaptive time step that results in delta-t that is generally too long to allow cloud water collection by snow/graupel above melting temperature. Credit to Bjorn-Egil Nygaard for discovering.
- Ensure we do not deplete more hydrometeor species than exists.
- If ice supersaturated, ensure sum of depos growth terms does not deplete more vapor than possibly exists. If subsaturated, limit sum of sublimation terms such that vapor does not reproduce ice supersat again.
- Cloud water conservation.
- Cloud ice conservation.
- Rain conservation.
- Snow conservation.
- Graupel conservation.
- Re-enforce proper mass conservation for subsequent elements in case any of the above terms were altered. Thanks P. Blossey. 2009Sep28
- Calculate tendencies of all species but constrain the number of ice to reasonable values.
- Aerosol number tendency
- Water vapor tendency
- Cloud water tendency
- Cloud water number tendency
- Cloud water mass/number balance; keep mass-wt mean size between 1 and 50 microns. Also no more than Nt_c_max drops total.
- Cloud ice mixing ratio tendency
- Cloud ice number tendency.
- Cloud ice mass/number balance; keep mass-wt mean size between 5 and 300 microns. Also no more than 500 xtals per liter.
- Rain tendency
- Rain number tendency
- Rain mass/number balance; keep median volume diameter between 37 microns (D0r*0.75) and 2.5 mm.
- Snow tendency
- Graupel tendency
- Temperature tendency
- Update variables for TAU+1 before condensation & sedimention.
- With tendency-updated mixing ratios, recalculate snow moments and intercepts/slopes of graupel and rain.
- All other moments based on reference, 2nd moment. If bm_s.ne.2, then we must compute actual 2nd moment and use as reference.
- Calculate bm_s+1 (th) moment. Useful for diameter calcs.
- Calculate bm_s+bv_s (th) moment. Useful for sedimentation.
- Calculate y-intercept, slope values for graupel.
- Calculate y-intercept, slope values for rain.
- Cloud water condensation and evaporation. Nucleate cloud droplets using explicit CCN aerosols with hygroscopicity like sulfates using parcel model lookup table results provided by T. Eidhammer. Evap drops using calculation of max drop size capable of evaporating in single timestep and explicit number of drops smaller than Dc_star from lookup table.
- Cloud water lookup table index.
- If still subsaturated, allow rain to evaporate, following Srivastava & Coen (1992).
- Rapidly eliminate near zero values when low humidity (<95%)
- Reduce the rain evaporation in same places as melting graupel occurs.
- Find max terminal fallspeed (distribution mass-weighted mean velocity) and use it to determine if we need to split the timestep (var nstep>1). Either way, only bother to do sedimentation below 1st level that contains any sedimenting particles (k=ksed1 on down). New in v3.0+ is computing separate for rain, ice, snow, and graupel species thus making code faster with credit to J. Schmidt.
- Sedimentation of mixing ratio is the integral of v(D)*m(D)*N(D)*dD, whereas neglect m(D) term for number concentration. Therefore, cloud ice has proper differential sedimentation.
- Instantly melt any cloud ice into cloud water if above 0C and instantly freeze any cloud water found below HGFR.
- All tendencies computed, apply and pass back final values to parent.
References activ_ncloud(), am_g, am_i, am_r, ato, av_c, av_g, av_i, av_r, av_s, bm_g, bm_i, bm_r, bm_s, bv_c, bv_g, bv_i, c_cube, c_sqrd, cce, ccg, cge, cgg, cie, cig, cp, cre, crg, cse, csg, d0c, d0g, d0i, d0r, d0s, dr, ds, dustyice, ef_ri, ef_si, eff_aero(), eps, fv_r, fv_s, gonv_max, gonv_min, hgfr, homogice, icedemott(), icekoop(), ifdry, iiwarm, is_aerosol_aware, kap0, kap1, lam0, lam1, lfus, lsub, lvap0, mu_g, mu_i, mu_r, mu_s, nain1, nbc, nbr, nbs, nic1, nic2, nig2, nig3, nii2, nii3, niin2, nir2, nir3, nis2, nt_c, nt_c_max, nt_i, nt_in, ntb_c, ntb_g, ntb_g1, ntb_i, ntb_i1, ntb_in, ntb_r, ntb_r1, ntb_s, ntb_t, oams, obmg, obmi, obmr, ocg1, ocg2, oge1, ogg1, ogg2, ogg3, oig1, oig2, olfus, org1, org2, org3, orv, pi, r, r1, r2, r_c, r_g, r_i, r_r, r_s, rho_not, rho_w, rsif(), rslf(), sa, sb, t1_qg_me, t1_qg_qc, t1_qg_sd, t1_qr_ev, t1_qr_qc, t1_qr_qi, t1_qs_me, t1_qs_qc, t1_qs_qi, t1_qs_sd, t2_qg_me, t2_qg_sd, t2_qr_ev, t2_qr_qi, t2_qs_me, t2_qs_sd, t_0, t_efrw, t_efsw, t_nc, tcg_racg, tcr_gacr, tcr_sacr1, tcr_sacr2, tcs_racs1, tmr_racg, tmr_racs1, tmr_racs2, tms_sacr1, tnc_wev, tni_iaus, tni_qcfz, tni_qrfz, tno, tnr_gacr, tnr_qrfz, tnr_racg, tnr_racs1, tnr_racs2, tnr_sacr1, tnr_sacr2, tpg_qrfz, tpi_ide, tpi_qcfz, tpi_qrfz, tps_iaus, and xm0i.