Canoe
Comprehensive Atmosphere N' Ocean Engine
absorption_function_cloud.cpp
Go to the documentation of this file.
1 /**************************************************************************
2 
3  ===== JUNO codes =====
4 
5  Copyright (C) 2019 California Institute of Technology (Caltech)
6  All rights reserved.
7 
8  Written by Fabiano Oyafuso (fabiano@jpl.nasa.gov)
9  Adapted by Cheng Li (cli@gps.caltech.edu) to SNAP structure
10 
11 **************************************************************************/
12 
13 // C/C++ headers
14 #include <cmath>
15 
16 // cli, 190801
17 inline double SQUARE(double x) { return x * x; }
18 // end
19 
20 double absorption_coefficient_cloud(double freq, double P, double T,
21  double rho_NH3_H2O, double rho_H2O,
22  double rho_NH4SH, double rho_NH3,
23  double cfliq, double cfwice,
24  double cfaice) {
25  // calculate absorption by clouds
26  //
27  // Unless otherwise stated, equations are from:
28  // Atmospheric Remote Sensing by Microwave Radiometer, Ed. Michael A.
29  // Janssen, Wiley, Page 332. 1993.
30 
31  // liquid cloud (assumed pure H2O, ref: Grody, N.C.):
32  // (valid for FREQ < 100 GHz)
33  double nu0 = 160.0 * exp(7.21 * (1.0 - 287. / T));
34  double acldl = 1.24e-1 * freq * freq * nu0 / (freq * freq + nu0 * nu0);
35 
36  // H2O ice cloud (ref: Gasiewski, A.J.):
37  double tt = 300.0 / T - 1.0;
38  double tt1 = 1.0 + tt;
39  double tt2 = 0.0073 + tt;
40  double aa = (0.00504 + 0.0062 * tt) * exp(-22.1 * tt);
41  double bb =
42  1.0e-4 * (0.502 - 0.131 * tt) / tt1 + 0.542e-6 * tt1 * tt1 / (tt2 * tt2);
43  double ei = aa / freq + bb * freq;
44  double er = 3.1884 + 9.1e-4 * (T - 273.0) + 2.0;
45 
46  double acldw = 1.885e0 * freq * ei / (er * er + ei * ei);
47 
48  // NH3 ice cloud (approximation by S.Gulkis, private notes, 2007):
49  // (for simplicity, NH4SH is lumped together with this, for now)
50  double aclda = 1.13e-4 * SQUARE(freq) / (42.25 + SQUARE(6e-5 * freq));
51  // old expression:
52  // double aclda = 0.27 * freq * freq;
53 
54  // total cloud absorption:
55  return cfliq * acldl * rho_NH3_H2O + cfwice * acldw * rho_H2O +
56  cfaice * aclda * (rho_NH4SH + rho_NH3);
57 }
double absorption_coefficient_cloud(double freq, double P, double T, double rho_NH3_H2O, double rho_H2O, double rho_NH4SH, double rho_NH3, double cfliq, double cfwice, double cfaice)
double SQUARE(double x)