JURASSIC
Data Structures | Macros | Functions
jurassic.h File Reference

JURASSIC library declarations. More...

#include <errno.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_blas.h>
#include <gsl/gsl_linalg.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_statistics.h>
#include <math.h>
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

Go to the source code of this file.

Data Structures

struct  atm_t
 Atmospheric data. More...
 
struct  ctl_t
 Forward model control parameters. More...
 
struct  los_t
 Line-of-sight data. More...
 
struct  obs_t
 Observation geometry and radiance data. More...
 
struct  tbl_t
 Emissivity look-up tables. More...
 

Macros

#define ALLOC(ptr, type, n)
 Allocate memory. More...
 
#define BRIGHT(rad, nu)    (C2 * (nu) / gsl_log1p(C1 * POW3(nu) / (rad)))
 Compute brightness temperature. More...
 
#define DEG2RAD(deg)    ((deg) * (M_PI / 180.0))
 Convert degrees to radians. More...
 
#define DIST(a, b)   sqrt(DIST2(a, b))
 Compute Cartesian distance between two vectors. More...
 
#define DIST2(a, b)    ((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])+(a[2]-b[2])*(a[2]-b[2]))
 Compute squared distance between two vectors. More...
 
#define DOTP(a, b)   (a[0]*b[0]+a[1]*b[1]+a[2]*b[2])
 Compute dot product of two vectors. More...
 
#define FREAD(ptr, type, size, out)
 Read binary data. More...
 
#define FWRITE(ptr, type, size, out)
 Write binary data. More...
 
#define MAX(a, b)    (((a)>(b))?(a):(b))
 Macro to determine the maximum of two values. More...
 
#define MIN(a, b)    (((a)<(b))?(a):(b))
 Macro to determine the minimum of two values. More...
 
#define LIN(x0, y0, x1, y1, x)    ((y0)+((y1)-(y0))/((x1)-(x0))*((x)-(x0)))
 Compute linear interpolation. More...
 
#define LOGX(x0, y0, x1, y1, x)
 Compute logarithmic interpolation in x. More...
 
#define LOGY(x0, y0, x1, y1, x)
 Compute logarithmic interpolation in y. More...
 
#define NORM(a)   sqrt(DOTP(a, a))
 Compute norm of a vector. More...
 
#define PLANCK(T, nu)    (C1 * POW3(nu) / gsl_expm1(C2 * (nu) / (T)))
 Compute Planck function. More...
 
#define POW2(x)   ((x)*(x))
 Compute x^2. More...
 
#define POW3(x)   ((x)*(x)*(x))
 Compute x^3. More...
 
#define RAD2DEG(rad)    ((rad) * (180.0 / M_PI))
 Convert radians to degrees. More...
 
#define REFRAC(p, T)    (7.753e-05 * (p) / (T))
 Compute refractivity (return value is n - 1). More...
 
#define TIMER(name, mode)    {timer(name, __FILE__, __func__, __LINE__, mode);}
 Start or stop a timer. More...
 
#define TOK(line, tok, format, var)
 Read string tokens. More...
 
#define LOGLEV   2
 Level of log messages (0=none, 1=basic, 2=detailed, 3=debug). More...
 
#define LOG(level, ...)
 Print log message. More...
 
#define WARN(...)
 Print warning message. More...
 
#define ERRMSG(...)
 Print error message and quit program. More...
 
#define PRINT(format, var)
 Print macro for debugging. More...
 
#define C1   1.19104259e-8
 First spectroscopic constant (c_1 = 2 h c^2) [W/(m^2 sr cm^-4)]. More...
 
#define C2   1.43877506
 Second spectroscopic constant (c_2 = h c / k) [K/cm^-1]. More...
 
#define EPSMIN   0
 Minimum emissivity. More...
 
#define EPSMAX   1
 Maximum emissivity. More...
 
#define G0   9.80665
 Standard gravity [m/s^2]. More...
 
#define H0   7.0
 Standard scale height [km]. More...
 
#define KB   1.3806504e-23
 Boltzmann constant [kg m^2/(K s^2)]. More...
 
#define ME   5.976e24
 Mass of Earth [kg]. More...
 
#define NA   6.02214199e23
 Avogadro's number. More...
 
#define N2   0.78084
 Nitrogen concentration. More...
 
#define O2   0.20946
 Oxygen concentration. More...
 
#define P0   1013.25
 Standard pressure [hPa]. More...
 
#define RE   6367.421
 Mean radius of Earth [km]. More...
 
#define RI   8.3144598
 Ideal gas constant [J/(mol K)]. More...
 
#define T0   273.15
 Standard temperature [K]. More...
 
#define TMIN   100.
 Minimum temperature for source function [K]. More...
 
#define TMAX   400.
 Maximum temperature for source function [K]. More...
 
#define TSUN   5780.
 Effective temperature of the sun [K]. More...
 
#define UMIN   0
 Minimum column density [molecules/cm^2]. More...
 
#define UMAX   1e30
 Maximum column density [molecules/cm^2]. More...
 
#define NCL   8
 Maximum number of cloud layer spectral grid points. More...
 
#define ND   128
 Maximum number of radiance channels. More...
 
#define NG   8
 Maximum number of emitters. More...
 
#define NP   256
 Maximum number of atmospheric data points. More...
 
#define NR   256
 Maximum number of ray paths. More...
 
#define NSF   8
 Maximum number of surface layer spectral grid points. More...
 
#define NW   4
 Maximum number of spectral windows. More...
 
#define LEN   10000
 Maximum length of ASCII data lines. More...
 
#define M   (NR*ND)
 Maximum size of measurement vector. More...
 
#define N   ((2+NG+NW)*NP+NCL+NSF+5)
 Maximum size of state vector. More...
 
#define NQ   (7+NG+NW+NCL+NSF)
 Maximum number of quantities. More...
 
#define NLOS   4096
 Maximum number of LOS points. More...
 
#define NSHAPE   20000
 Maximum number of shape function grid points. More...
 
#define NFOV   5
 Number of ray paths used for FOV calculations. More...
 
#define TBLNP   41
 Maximum number of pressure levels in emissivity tables. More...
 
#define TBLNT   30
 Maximum number of temperatures in emissivity tables. More...
 
#define TBLNU   320
 Maximum number of column densities in emissivity tables. More...
 
#define TBLNS   1200
 Maximum number of source function temperature levels. More...
 
#define RFMNPTS   10000000
 Maximum number of RFM spectral grid points. More...
 
#define IDXP   0
 Index for pressure. More...
 
#define IDXT   1
 Index for temperature. More...
 
#define IDXQ(ig)   (2+ig)
 Indices for volume mixing ratios. More...
 
#define IDXK(iw)   (2+ctl->ng+iw)
 Indices for extinction. More...
 
#define IDXCLZ   (2+ctl->ng+ctl->nw)
 Index for cloud layer height. More...
 
#define IDXCLDZ   (3+ctl->ng+ctl->nw)
 Index for cloud layer depth. More...
 
#define IDXCLK(icl)   (4+ctl->ng+ctl->nw+icl)
 Indices for cloud layer extinction. More...
 
#define IDXSFZ   (4+ctl->ng+ctl->nw+ctl->ncl)
 Index for surface layer height. More...
 
#define IDXSFP   (5+ctl->ng+ctl->nw+ctl->ncl)
 Index for surface layer pressure. More...
 
#define IDXSFT   (6+ctl->ng+ctl->nw+ctl->ncl)
 Index for surface layer temperature. More...
 
#define IDXSFEPS(isf)   (7+ctl->ng+ctl->nw+ctl->ncl+isf)
 Indices for surface layer emissivity. More...
 

Functions

size_t atm2x (const ctl_t *ctl, const atm_t *atm, gsl_vector *x, int *iqa, int *ipa)
 Compose state vector or parameter vector. More...
 
void atm2x_help (const double value, const int value_iqa, const int value_ip, gsl_vector *x, int *iqa, int *ipa, size_t *n)
 Add element to state vector. More...
 
void cart2geo (const double *x, double *z, double *lon, double *lat)
 Convert Cartesian coordinates to geolocation. More...
 
void climatology (const ctl_t *ctl, atm_t *atm_mean)
 Interpolate climatological data. More...
 
double ctmco2 (const double nu, const double p, const double t, const double u)
 Compute carbon dioxide continuum (optical depth). More...
 
double ctmh2o (const double nu, const double p, const double t, const double q, const double u)
 Compute water vapor continuum (optical depth). More...
 
double ctmn2 (const double nu, const double p, const double t)
 Compute nitrogen continuum (absorption coefficient). More...
 
double ctmo2 (const double nu, const double p, const double t)
 Compute oxygen continuum (absorption coefficient). More...
 
void copy_atm (const ctl_t *ctl, atm_t *atm_dest, const atm_t *atm_src, const int init)
 Copy and initialize atmospheric data. More...
 
void copy_obs (const ctl_t *ctl, obs_t *obs_dest, const obs_t *obs_src, const int init)
 Copy and initialize observation data. More...
 
int find_emitter (const ctl_t *ctl, const char *emitter)
 Find index of an emitter. More...
 
void formod (const ctl_t *ctl, const tbl_t *tbl, atm_t *atm, obs_t *obs)
 Determine ray paths and compute radiative transfer. More...
 
void formod_continua (const ctl_t *ctl, const los_t *los, const int ip, double *beta)
 Compute absorption coefficient of continua. More...
 
void formod_fov (const ctl_t *ctl, obs_t *obs)
 Apply field of view convolution. More...
 
void formod_pencil (const ctl_t *ctl, const tbl_t *tbl, const atm_t *atm, obs_t *obs, const int ir)
 Compute radiative transfer for a pencil beam. More...
 
void formod_rfm (const ctl_t *ctl, const atm_t *atm, obs_t *obs)
 Apply RFM for radiative transfer calculations. More...
 
void formod_srcfunc (const ctl_t *ctl, const tbl_t *tbl, const double t, double *src)
 Compute Planck source function. More...
 
void geo2cart (const double z, const double lon, const double lat, double *x)
 Convert geolocation to Cartesian coordinates. More...
 
void hydrostatic (const ctl_t *ctl, atm_t *atm)
 Set hydrostatic equilibrium. More...
 
void idx2name (const ctl_t *ctl, const int idx, char *quantity)
 Determine name of state vector quantity for given index. More...
 
void init_srcfunc (const ctl_t *ctl, tbl_t *tbl)
 Initialize source function table. More...
 
void intpol_atm (const ctl_t *ctl, const atm_t *atm, const double z, double *p, double *t, double *q, double *k)
 Interpolate atmospheric data. More...
 
void intpol_tbl_cga (const ctl_t *ctl, const tbl_t *tbl, const los_t *los, const int ip, double tau_path[ND][NG], double tau_seg[ND])
 Get transmittance from look-up tables (CGA method). More...
 
void intpol_tbl_ega (const ctl_t *ctl, const tbl_t *tbl, const los_t *los, const int ip, double tau_path[ND][NG], double tau_seg[ND])
 Get transmittance from look-up tables (EGA method). More...
 
double intpol_tbl_eps (const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double u)
 Interpolate emissivity from look-up tables. More...
 
double intpol_tbl_u (const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double eps)
 Interpolate column density from look-up tables. More...
 
void jsec2time (const double jsec, int *year, int *mon, int *day, int *hour, int *min, int *sec, double *remain)
 Convert seconds to date. More...
 
void kernel (const ctl_t *ctl, const tbl_t *tbl, atm_t *atm, obs_t *obs, gsl_matrix *k)
 Compute Jacobians. More...
 
int locate_irr (const double *xx, const int n, const double x)
 Find array index for irregular grid. More...
 
int locate_reg (const double *xx, const int n, const double x)
 Find array index for regular grid. More...
 
int locate_tbl (const float *xx, const int n, const double x)
 Find array index in float array. More...
 
size_t obs2y (const ctl_t *ctl, const obs_t *obs, gsl_vector *y, int *ida, int *ira)
 Compose measurement vector. More...
 
void raytrace (const ctl_t *ctl, const atm_t *atm, obs_t *obs, los_t *los, const int ir)
 Do ray-tracing to determine LOS. More...
 
void read_atm (const char *dirname, const char *filename, const ctl_t *ctl, atm_t *atm)
 Read atmospheric data. More...
 
void read_ctl (int argc, char *argv[], ctl_t *ctl)
 Read forward model control parameters. More...
 
void read_matrix (const char *dirname, const char *filename, gsl_matrix *matrix)
 Read matrix. More...
 
void read_obs (const char *dirname, const char *filename, const ctl_t *ctl, obs_t *obs)
 Read observation data. More...
 
double read_obs_rfm (const char *basename, const double z, double *nu, double *f, int n)
 Read observation data in RFM format. More...
 
void read_rfm_spec (const char *filename, double *nu, double *rad, int *npts)
 Read RFM spectrum. More...
 
void read_shape (const char *filename, double *x, double *y, int *n)
 Read shape function. More...
 
tbl_tread_tbl (const ctl_t *ctl)
 Read look-up table data. More...
 
double scan_ctl (int argc, char *argv[], const char *varname, const int arridx, const char *defvalue, char *value)
 Search control parameter file for variable entry. More...
 
double sza (double sec, double lon, double lat)
 Calculate solar zenith angle. More...
 
void tangent_point (const los_t *los, double *tpz, double *tplon, double *tplat)
 Find tangent point of a given LOS. More...
 
void time2jsec (const int year, const int mon, const int day, const int hour, const int min, const int sec, const double remain, double *jsec)
 Convert date to seconds. More...
 
void timer (const char *name, const char *file, const char *func, int line, int mode)
 Measure wall-clock time. More...
 
void write_atm (const char *dirname, const char *filename, const ctl_t *ctl, const atm_t *atm)
 Write atmospheric data. More...
 
void write_atm_rfm (const char *filename, const ctl_t *ctl, const atm_t *atm)
 Write atmospheric data in RFM format. More...
 
void write_matrix (const char *dirname, const char *filename, const ctl_t *ctl, const gsl_matrix *matrix, const atm_t *atm, const obs_t *obs, const char *rowspace, const char *colspace, const char *sort)
 Write matrix. More...
 
void write_obs (const char *dirname, const char *filename, const ctl_t *ctl, const obs_t *obs)
 Write observation data. More...
 
void write_shape (const char *filename, const double *x, const double *y, const int n)
 Write shape function. More...
 
void write_tbl (const ctl_t *ctl, const tbl_t *tbl)
 Write look-up table data. More...
 
void x2atm (const ctl_t *ctl, const gsl_vector *x, atm_t *atm)
 Decompose parameter vector or state vector. More...
 
void x2atm_help (double *value, const gsl_vector *x, size_t *n)
 Get element from state vector. More...
 
void y2obs (const ctl_t *ctl, const gsl_vector *y, obs_t *obs)
 Decompose measurement vector. More...
 

Detailed Description

JURASSIC library declarations.

Definition in file jurassic.h.

Macro Definition Documentation

◆ ALLOC

#define ALLOC (   ptr,
  type,
 
)
Value:
if((ptr=malloc((size_t)(n)*sizeof(type)))==NULL) \
ERRMSG("Out of memory!");

Allocate memory.

Definition at line 122 of file jurassic.h.

◆ BRIGHT

#define BRIGHT (   rad,
  nu 
)     (C2 * (nu) / gsl_log1p(C1 * POW3(nu) / (rad)))

Compute brightness temperature.

Definition at line 127 of file jurassic.h.

◆ DEG2RAD

#define DEG2RAD (   deg)     ((deg) * (M_PI / 180.0))

Convert degrees to radians.

Definition at line 131 of file jurassic.h.

◆ DIST

#define DIST (   a,
 
)    sqrt(DIST2(a, b))

Compute Cartesian distance between two vectors.

Definition at line 135 of file jurassic.h.

◆ DIST2

#define DIST2 (   a,
 
)     ((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])+(a[2]-b[2])*(a[2]-b[2]))

Compute squared distance between two vectors.

Definition at line 138 of file jurassic.h.

◆ DOTP

#define DOTP (   a,
 
)    (a[0]*b[0]+a[1]*b[1]+a[2]*b[2])

Compute dot product of two vectors.

Definition at line 142 of file jurassic.h.

◆ FREAD

#define FREAD (   ptr,
  type,
  size,
  out 
)
Value:
{ \
if(fread(ptr, sizeof(type), size, out)!=size) \
ERRMSG("Error while reading!"); \
}

Read binary data.

Definition at line 145 of file jurassic.h.

◆ FWRITE

#define FWRITE (   ptr,
  type,
  size,
  out 
)
Value:
{ \
if(fwrite(ptr, sizeof(type), size, out)!=size) \
ERRMSG("Error while writing!"); \
}

Write binary data.

Definition at line 151 of file jurassic.h.

◆ MAX

#define MAX (   a,
 
)     (((a)>(b))?(a):(b))

Macro to determine the maximum of two values.

Definition at line 157 of file jurassic.h.

◆ MIN

#define MIN (   a,
 
)     (((a)<(b))?(a):(b))

Macro to determine the minimum of two values.

Definition at line 161 of file jurassic.h.

◆ LIN

#define LIN (   x0,
  y0,
  x1,
  y1,
 
)     ((y0)+((y1)-(y0))/((x1)-(x0))*((x)-(x0)))

Compute linear interpolation.

Definition at line 165 of file jurassic.h.

◆ LOGX

#define LOGX (   x0,
  y0,
  x1,
  y1,
 
)
Value:
(((x)/(x0)>0 && (x1)/(x0)>0) \
? ((y0)+((y1)-(y0))*log((x)/(x0))/log((x1)/(x0))) \
: LIN(x0, y0, x1, y1, x))
#define LIN(x0, y0, x1, y1, x)
Compute linear interpolation.
Definition: jurassic.h:165

Compute logarithmic interpolation in x.

Definition at line 169 of file jurassic.h.

◆ LOGY

#define LOGY (   x0,
  y0,
  x1,
  y1,
 
)
Value:
(((y1)/(y0)>0) \
? ((y0)*exp(log((y1)/(y0))/((x1)-(x0))*((x)-(x0)))) \
: LIN(x0, y0, x1, y1, x))

Compute logarithmic interpolation in y.

Definition at line 175 of file jurassic.h.

◆ NORM

#define NORM (   a)    sqrt(DOTP(a, a))

Compute norm of a vector.

Definition at line 181 of file jurassic.h.

◆ PLANCK

#define PLANCK (   T,
  nu 
)     (C1 * POW3(nu) / gsl_expm1(C2 * (nu) / (T)))

Compute Planck function.

Definition at line 184 of file jurassic.h.

◆ POW2

#define POW2 (   x)    ((x)*(x))

Compute x^2.

Definition at line 188 of file jurassic.h.

◆ POW3

#define POW3 (   x)    ((x)*(x)*(x))

Compute x^3.

Definition at line 191 of file jurassic.h.

◆ RAD2DEG

#define RAD2DEG (   rad)     ((rad) * (180.0 / M_PI))

Convert radians to degrees.

Definition at line 194 of file jurassic.h.

◆ REFRAC

#define REFRAC (   p,
 
)     (7.753e-05 * (p) / (T))

Compute refractivity (return value is n - 1).

Definition at line 198 of file jurassic.h.

◆ TIMER

#define TIMER (   name,
  mode 
)     {timer(name, __FILE__, __func__, __LINE__, mode);}

Start or stop a timer.

Definition at line 202 of file jurassic.h.

◆ TOK

#define TOK (   line,
  tok,
  format,
  var 
)
Value:
{ \
if(((tok)=strtok((line), " \t"))) { \
if(sscanf(tok, format, &(var))!=1) continue; \
} else ERRMSG("Error while reading!"); \
}
#define ERRMSG(...)
Print error message and quit program.
Definition: jurassic.h:238

Read string tokens.

Definition at line 206 of file jurassic.h.

◆ LOGLEV

#define LOGLEV   2

Level of log messages (0=none, 1=basic, 2=detailed, 3=debug).

Definition at line 218 of file jurassic.h.

◆ LOG

#define LOG (   level,
  ... 
)
Value:
{ \
if(level >= 2) \
printf(" "); \
if(level <= LOGLEV) { \
printf(__VA_ARGS__); \
printf("\n"); \
} \
}
#define LOGLEV
Level of log messages (0=none, 1=basic, 2=detailed, 3=debug).
Definition: jurassic.h:218

Print log message.

Definition at line 222 of file jurassic.h.

◆ WARN

#define WARN (   ...)
Value:
{ \
printf("\nWarning (%s, %s, l%d): ", __FILE__, __func__, __LINE__); \
LOG(0, __VA_ARGS__); \
}

Print warning message.

Definition at line 232 of file jurassic.h.

◆ ERRMSG

#define ERRMSG (   ...)
Value:
{ \
printf("\nError (%s, %s, l%d): ", __FILE__, __func__, __LINE__); \
LOG(0, __VA_ARGS__); \
exit(EXIT_FAILURE); \
}

Print error message and quit program.

Definition at line 238 of file jurassic.h.

◆ PRINT

#define PRINT (   format,
  var 
)
Value:
printf("Print (%s, %s, l%d): %s= "format"\n", \
__FILE__, __func__, __LINE__, #var, var);

Print macro for debugging.

Definition at line 245 of file jurassic.h.

◆ C1

#define C1   1.19104259e-8

First spectroscopic constant (c_1 = 2 h c^2) [W/(m^2 sr cm^-4)].

Definition at line 255 of file jurassic.h.

◆ C2

#define C2   1.43877506

Second spectroscopic constant (c_2 = h c / k) [K/cm^-1].

Definition at line 260 of file jurassic.h.

◆ EPSMIN

#define EPSMIN   0

Minimum emissivity.

Definition at line 265 of file jurassic.h.

◆ EPSMAX

#define EPSMAX   1

Maximum emissivity.

Definition at line 270 of file jurassic.h.

◆ G0

#define G0   9.80665

Standard gravity [m/s^2].

Definition at line 275 of file jurassic.h.

◆ H0

#define H0   7.0

Standard scale height [km].

Definition at line 280 of file jurassic.h.

◆ KB

#define KB   1.3806504e-23

Boltzmann constant [kg m^2/(K s^2)].

Definition at line 285 of file jurassic.h.

◆ ME

#define ME   5.976e24

Mass of Earth [kg].

Definition at line 290 of file jurassic.h.

◆ NA

#define NA   6.02214199e23

Avogadro's number.

Definition at line 295 of file jurassic.h.

◆ N2

#define N2   0.78084

Nitrogen concentration.

Definition at line 300 of file jurassic.h.

◆ O2

#define O2   0.20946

Oxygen concentration.

Definition at line 305 of file jurassic.h.

◆ P0

#define P0   1013.25

Standard pressure [hPa].

Definition at line 310 of file jurassic.h.

◆ RE

#define RE   6367.421

Mean radius of Earth [km].

Definition at line 315 of file jurassic.h.

◆ RI

#define RI   8.3144598

Ideal gas constant [J/(mol K)].

Definition at line 320 of file jurassic.h.

◆ T0

#define T0   273.15

Standard temperature [K].

Definition at line 325 of file jurassic.h.

◆ TMIN

#define TMIN   100.

Minimum temperature for source function [K].

Definition at line 330 of file jurassic.h.

◆ TMAX

#define TMAX   400.

Maximum temperature for source function [K].

Definition at line 335 of file jurassic.h.

◆ TSUN

#define TSUN   5780.

Effective temperature of the sun [K].

Definition at line 340 of file jurassic.h.

◆ UMIN

#define UMIN   0

Minimum column density [molecules/cm^2].

Definition at line 345 of file jurassic.h.

◆ UMAX

#define UMAX   1e30

Maximum column density [molecules/cm^2].

Definition at line 350 of file jurassic.h.

◆ NCL

#define NCL   8

Maximum number of cloud layer spectral grid points.

Definition at line 359 of file jurassic.h.

◆ ND

#define ND   128

Maximum number of radiance channels.

Definition at line 364 of file jurassic.h.

◆ NG

#define NG   8

Maximum number of emitters.

Definition at line 369 of file jurassic.h.

◆ NP

#define NP   256

Maximum number of atmospheric data points.

Definition at line 374 of file jurassic.h.

◆ NR

#define NR   256

Maximum number of ray paths.

Definition at line 379 of file jurassic.h.

◆ NSF

#define NSF   8

Maximum number of surface layer spectral grid points.

Definition at line 384 of file jurassic.h.

◆ NW

#define NW   4

Maximum number of spectral windows.

Definition at line 389 of file jurassic.h.

◆ LEN

#define LEN   10000

Maximum length of ASCII data lines.

Definition at line 394 of file jurassic.h.

◆ M

#define M   (NR*ND)

Maximum size of measurement vector.

Definition at line 399 of file jurassic.h.

◆ N

#define N   ((2+NG+NW)*NP+NCL+NSF+5)

Maximum size of state vector.

Definition at line 404 of file jurassic.h.

◆ NQ

#define NQ   (7+NG+NW+NCL+NSF)

Maximum number of quantities.

Definition at line 409 of file jurassic.h.

◆ NLOS

#define NLOS   4096

Maximum number of LOS points.

Definition at line 414 of file jurassic.h.

◆ NSHAPE

#define NSHAPE   20000

Maximum number of shape function grid points.

Definition at line 419 of file jurassic.h.

◆ NFOV

#define NFOV   5

Number of ray paths used for FOV calculations.

Definition at line 424 of file jurassic.h.

◆ TBLNP

#define TBLNP   41

Maximum number of pressure levels in emissivity tables.

Definition at line 429 of file jurassic.h.

◆ TBLNT

#define TBLNT   30

Maximum number of temperatures in emissivity tables.

Definition at line 434 of file jurassic.h.

◆ TBLNU

#define TBLNU   320

Maximum number of column densities in emissivity tables.

Definition at line 439 of file jurassic.h.

◆ TBLNS

#define TBLNS   1200

Maximum number of source function temperature levels.

Definition at line 444 of file jurassic.h.

◆ RFMNPTS

#define RFMNPTS   10000000

Maximum number of RFM spectral grid points.

Definition at line 449 of file jurassic.h.

◆ IDXP

#define IDXP   0

Index for pressure.

Definition at line 457 of file jurassic.h.

◆ IDXT

#define IDXT   1

Index for temperature.

Definition at line 460 of file jurassic.h.

◆ IDXQ

#define IDXQ (   ig)    (2+ig)

Indices for volume mixing ratios.

Definition at line 463 of file jurassic.h.

◆ IDXK

#define IDXK (   iw)    (2+ctl->ng+iw)

Indices for extinction.

Definition at line 466 of file jurassic.h.

◆ IDXCLZ

#define IDXCLZ   (2+ctl->ng+ctl->nw)

Index for cloud layer height.

Definition at line 469 of file jurassic.h.

◆ IDXCLDZ

#define IDXCLDZ   (3+ctl->ng+ctl->nw)

Index for cloud layer depth.

Definition at line 472 of file jurassic.h.

◆ IDXCLK

#define IDXCLK (   icl)    (4+ctl->ng+ctl->nw+icl)

Indices for cloud layer extinction.

Definition at line 475 of file jurassic.h.

◆ IDXSFZ

#define IDXSFZ   (4+ctl->ng+ctl->nw+ctl->ncl)

Index for surface layer height.

Definition at line 478 of file jurassic.h.

◆ IDXSFP

#define IDXSFP   (5+ctl->ng+ctl->nw+ctl->ncl)

Index for surface layer pressure.

Definition at line 481 of file jurassic.h.

◆ IDXSFT

#define IDXSFT   (6+ctl->ng+ctl->nw+ctl->ncl)

Index for surface layer temperature.

Definition at line 484 of file jurassic.h.

◆ IDXSFEPS

#define IDXSFEPS (   isf)    (7+ctl->ng+ctl->nw+ctl->ncl+isf)

Indices for surface layer emissivity.

Definition at line 487 of file jurassic.h.

Function Documentation

◆ atm2x()

size_t atm2x ( const ctl_t ctl,
const atm_t atm,
gsl_vector *  x,
int *  iqa,
int *  ipa 
)

Compose state vector or parameter vector.

Definition at line 29 of file jurassic.c.

34 {
35
36 size_t n = 0;
37
38 /* Add pressure... */
39 for (int ip = 0; ip < atm->np; ip++)
40 if (atm->z[ip] >= ctl->retp_zmin && atm->z[ip] <= ctl->retp_zmax)
41 atm2x_help(atm->p[ip], IDXP, ip, x, iqa, ipa, &n);
42
43 /* Add temperature... */
44 for (int ip = 0; ip < atm->np; ip++)
45 if (atm->z[ip] >= ctl->rett_zmin && atm->z[ip] <= ctl->rett_zmax)
46 atm2x_help(atm->t[ip], IDXT, ip, x, iqa, ipa, &n);
47
48 /* Add volume mixing ratios... */
49 for (int ig = 0; ig < ctl->ng; ig++)
50 for (int ip = 0; ip < atm->np; ip++)
51 if (atm->z[ip] >= ctl->retq_zmin[ig]
52 && atm->z[ip] <= ctl->retq_zmax[ig])
53 atm2x_help(atm->q[ig][ip], IDXQ(ig), ip, x, iqa, ipa, &n);
54
55 /* Add extinction... */
56 for (int iw = 0; iw < ctl->nw; iw++)
57 for (int ip = 0; ip < atm->np; ip++)
58 if (atm->z[ip] >= ctl->retk_zmin[iw]
59 && atm->z[ip] <= ctl->retk_zmax[iw])
60 atm2x_help(atm->k[iw][ip], IDXK(iw), ip, x, iqa, ipa, &n);
61
62 /* Add cloud parameters... */
63 if (ctl->ret_clz)
64 atm2x_help(atm->clz, IDXCLZ, 0, x, iqa, ipa, &n);
65 if (ctl->ret_cldz)
66 atm2x_help(atm->cldz, IDXCLDZ, 0, x, iqa, ipa, &n);
67 if (ctl->ret_clk)
68 for (int icl = 0; icl < ctl->ncl; icl++)
69 atm2x_help(atm->clk[icl], IDXCLK(icl), 0, x, iqa, ipa, &n);
70
71 /* Add surface parameters... */
72 if (ctl->ret_sfz)
73 atm2x_help(atm->sfz, IDXSFZ, 0, x, iqa, ipa, &n);
74 if (ctl->ret_sfp)
75 atm2x_help(atm->sfp, IDXSFP, 0, x, iqa, ipa, &n);
76 if (ctl->ret_sft)
77 atm2x_help(atm->sft, IDXSFT, 0, x, iqa, ipa, &n);
78 if (ctl->ret_sfeps)
79 for (int isf = 0; isf < ctl->nsf; isf++)
80 atm2x_help(atm->sfeps[isf], IDXSFEPS(isf), 0, x, iqa, ipa, &n);
81
82 return n;
83}
void atm2x_help(const double value, const int value_iqa, const int value_ip, gsl_vector *x, int *iqa, int *ipa, size_t *n)
Add element to state vector.
Definition: jurassic.c:87
#define IDXCLZ
Index for cloud layer height.
Definition: jurassic.h:469
#define IDXCLDZ
Index for cloud layer depth.
Definition: jurassic.h:472
#define IDXK(iw)
Indices for extinction.
Definition: jurassic.h:466
#define IDXSFT
Index for surface layer temperature.
Definition: jurassic.h:484
#define IDXSFEPS(isf)
Indices for surface layer emissivity.
Definition: jurassic.h:487
#define IDXCLK(icl)
Indices for cloud layer extinction.
Definition: jurassic.h:475
#define IDXP
Index for pressure.
Definition: jurassic.h:457
#define IDXSFP
Index for surface layer pressure.
Definition: jurassic.h:481
#define IDXQ(ig)
Indices for volume mixing ratios.
Definition: jurassic.h:463
#define IDXT
Index for temperature.
Definition: jurassic.h:460
#define IDXSFZ
Index for surface layer height.
Definition: jurassic.h:478
double sfeps[NSF]
Surface emissivity.
Definition: jurassic.h:542
double k[NW][NP]
Extinction [km^-1].
Definition: jurassic.h:521
double sfz
Surface height [km].
Definition: jurassic.h:533
double t[NP]
Temperature [K].
Definition: jurassic.h:515
double sfp
Surface pressure [hPa].
Definition: jurassic.h:536
double clz
Cloud layer height [km].
Definition: jurassic.h:524
int np
Number of data points.
Definition: jurassic.h:497
double cldz
Cloud layer depth [km].
Definition: jurassic.h:527
double sft
Surface temperature [K].
Definition: jurassic.h:539
double z[NP]
Altitude [km].
Definition: jurassic.h:503
double clk[NCL]
Cloud layer extinction [km^-1].
Definition: jurassic.h:530
double q[NG][NP]
Volume mixing ratio [ppv].
Definition: jurassic.h:518
double p[NP]
Pressure [hPa].
Definition: jurassic.h:512
int nw
Number of spectral windows.
Definition: jurassic.h:574
double retp_zmin
Minimum altitude for pressure retrieval [km].
Definition: jurassic.h:640
double retk_zmax[NW]
Maximum altitude for extinction retrieval [km].
Definition: jurassic.h:661
int ret_sfz
Retrieve surface layer height (0=no, 1=yes).
Definition: jurassic.h:673
double rett_zmax
Maximum altitude for temperature retrieval [km].
Definition: jurassic.h:649
int ret_sfeps
Retrieve surface layer emissivity (0=no, 1=yes).
Definition: jurassic.h:682
int ret_sft
Retrieve surface layer temperature (0=no, 1=yes).
Definition: jurassic.h:679
int ret_clz
Retrieve cloud layer height (0=no, 1=yes).
Definition: jurassic.h:664
double retq_zmax[NG]
Maximum altitude for volume mixing ratio retrieval [km].
Definition: jurassic.h:655
double retq_zmin[NG]
Minimum altitude for volume mixing ratio retrieval [km].
Definition: jurassic.h:652
int ng
Number of emitters.
Definition: jurassic.h:550
double rett_zmin
Minimum altitude for temperature retrieval [km].
Definition: jurassic.h:646
int ret_sfp
Retrieve surface layer pressure (0=no, 1=yes).
Definition: jurassic.h:676
double retk_zmin[NW]
Minimum altitude for extinction retrieval [km].
Definition: jurassic.h:658
int ncl
Number of cloud layer spectral grid points.
Definition: jurassic.h:580
int ret_clk
Retrieve cloud layer extinction (0=no, 1=yes).
Definition: jurassic.h:670
int nsf
Number of surface layer spectral grid points.
Definition: jurassic.h:586
int ret_cldz
Retrieve cloud layer depth (0=no, 1=yes).
Definition: jurassic.h:667
double retp_zmax
Maximum altitude for pressure retrieval [km].
Definition: jurassic.h:643
Here is the call graph for this function:

◆ atm2x_help()

void atm2x_help ( const double  value,
const int  value_iqa,
const int  value_ip,
gsl_vector *  x,
int *  iqa,
int *  ipa,
size_t *  n 
)

Add element to state vector.

Definition at line 87 of file jurassic.c.

94 {
95
96 /* Add element to state vector... */
97 if (x != NULL)
98 gsl_vector_set(x, *n, value);
99 if (iqa != NULL)
100 iqa[*n] = value_iqa;
101 if (ipa != NULL)
102 ipa[*n] = value_ip;
103 (*n)++;
104}

◆ cart2geo()

void cart2geo ( const double *  x,
double *  z,
double *  lon,
double *  lat 
)

Convert Cartesian coordinates to geolocation.

Definition at line 108 of file jurassic.c.

112 {
113
114 const double radius = NORM(x);
115
116 *lat = RAD2DEG(asin(x[2] / radius));
117 *lon = RAD2DEG(atan2(x[1], x[0]));
118 *z = radius - RE;
119}
#define RE
Mean radius of Earth [km].
Definition: jurassic.h:315
#define NORM(a)
Compute norm of a vector.
Definition: jurassic.h:181
#define RAD2DEG(rad)
Convert radians to degrees.
Definition: jurassic.h:194

◆ climatology()

void climatology ( const ctl_t ctl,
atm_t atm_mean 
)

Interpolate climatological data.

Definition at line 123 of file jurassic.c.

125 {
126
127 static const double z[121] = {
128 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
129 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
130 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
131 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
132 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
133 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
134 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
135 };
136
137 static const double pre[121] = {
138 1017, 901.083, 796.45, 702.227, 617.614, 541.644, 473.437, 412.288,
139 357.603, 308.96, 265.994, 228.348, 195.619, 167.351, 143.039, 122.198,
140 104.369, 89.141, 76.1528, 65.0804, 55.641, 47.591, 40.7233, 34.8637,
141 29.8633, 25.5956, 21.9534, 18.8445, 16.1909, 13.9258, 11.9913,
142 10.34, 8.92988, 7.72454, 6.6924, 5.80701, 5.04654, 4.39238, 3.82902,
143 3.34337, 2.92413, 2.56128, 2.2464, 1.97258, 1.73384, 1.52519, 1.34242,
144 1.18197, 1.04086, 0.916546, 0.806832, 0.709875, 0.624101, 0.548176,
145 0.480974, 0.421507, 0.368904, 0.322408, 0.281386, 0.245249, 0.213465,
146 0.185549, 0.161072, 0.139644, 0.120913, 0.104568, 0.0903249, 0.0779269,
147 0.0671493, 0.0577962, 0.0496902, 0.0426736, 0.0366093, 0.0313743,
148 0.0268598, 0.0229699, 0.0196206, 0.0167399, 0.0142646, 0.0121397,
149 0.0103181, 0.00875775, 0.00742226, 0.00628076, 0.00530519, 0.00447183,
150 0.00376124, 0.00315632, 0.00264248, 0.00220738, 0.00184003, 0.00153095,
151 0.00127204, 0.00105608, 0.000876652, 0.00072798, 0.00060492,
152 0.000503201, 0.000419226, 0.000349896, 0.000292659, 0.000245421,
153 0.000206394, 0.000174125, 0.000147441, 0.000125333, 0.000106985,
154 9.173e-05, 7.90172e-05, 6.84172e-05, 5.95574e-05, 5.21183e-05,
155 4.58348e-05, 4.05127e-05, 3.59987e-05, 3.21583e-05, 2.88718e-05,
156 2.60322e-05, 2.35687e-05, 2.14263e-05, 1.95489e-05
157 };
158
159 static const double tem[121] = {
160 285.14, 279.34, 273.91, 268.3, 263.24, 256.55, 250.2, 242.82, 236.17,
161 229.87, 225.04, 221.19, 218.85, 217.19, 216.2, 215.68, 215.42, 215.55,
162 215.92, 216.4, 216.93, 217.45, 218, 218.68, 219.39, 220.25, 221.3,
163 222.41, 223.88, 225.42, 227.2, 229.52, 231.89, 234.51, 236.85, 239.42,
164 241.94, 244.57, 247.36, 250.32, 253.34, 255.82, 258.27, 260.39,
165 262.03, 263.45, 264.2, 264.78, 264.67, 264.38, 263.24, 262.03, 260.02,
166 258.09, 255.63, 253.28, 250.43, 247.81, 245.26, 242.77, 240.38,
167 237.94, 235.79, 233.53, 231.5, 229.53, 227.6, 225.62, 223.77, 222.06,
168 220.33, 218.69, 217.18, 215.64, 214.13, 212.52, 210.86, 209.25,
169 207.49, 205.81, 204.11, 202.22, 200.32, 198.39, 195.92, 193.46,
170 190.94, 188.31, 185.82, 183.57, 181.43, 179.74, 178.64, 178.1, 178.25,
171 178.7, 179.41, 180.67, 182.31, 184.18, 186.6, 189.53, 192.66, 196.54,
172 201.13, 205.93, 211.73, 217.86, 225, 233.53, 242.57, 252.14, 261.48,
173 272.97, 285.26, 299.12, 312.2, 324.17, 338.34, 352.56, 365.28
174 };
175
176 static const double c2h2[121] = {
177 1.352e-09, 2.83e-10, 1.269e-10, 6.926e-11, 4.346e-11, 2.909e-11,
178 2.014e-11, 1.363e-11, 8.71e-12, 5.237e-12, 2.718e-12, 1.375e-12,
179 5.786e-13, 2.16e-13, 7.317e-14, 2.551e-14, 1.055e-14, 4.758e-15,
180 2.056e-15, 7.703e-16, 2.82e-16, 1.035e-16, 4.382e-17, 1.946e-17,
181 9.638e-18, 5.2e-18, 2.811e-18, 1.494e-18, 7.925e-19, 4.213e-19,
182 1.998e-19, 8.78e-20, 3.877e-20, 1.728e-20, 7.743e-21, 3.536e-21,
183 1.623e-21, 7.508e-22, 3.508e-22, 1.65e-22, 7.837e-23, 3.733e-23,
184 1.808e-23, 8.77e-24, 4.285e-24, 2.095e-24, 1.032e-24, 5.082e-25,
185 2.506e-25, 1.236e-25, 6.088e-26, 2.996e-26, 1.465e-26, 0, 0, 0,
186 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
187 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
188 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
189 };
190
191 static const double c2h6[121] = {
192 2.667e-09, 2.02e-09, 1.658e-09, 1.404e-09, 1.234e-09, 1.109e-09,
193 1.012e-09, 9.262e-10, 8.472e-10, 7.71e-10, 6.932e-10, 6.216e-10,
194 5.503e-10, 4.87e-10, 4.342e-10, 3.861e-10, 3.347e-10, 2.772e-10,
195 2.209e-10, 1.672e-10, 1.197e-10, 8.536e-11, 5.783e-11, 3.846e-11,
196 2.495e-11, 1.592e-11, 1.017e-11, 6.327e-12, 3.895e-12, 2.403e-12,
197 1.416e-12, 8.101e-13, 4.649e-13, 2.686e-13, 1.557e-13, 9.14e-14,
198 5.386e-14, 3.19e-14, 1.903e-14, 1.14e-14, 6.875e-15, 4.154e-15,
199 2.538e-15, 1.553e-15, 9.548e-16, 5.872e-16, 3.63e-16, 2.244e-16,
200 1.388e-16, 8.587e-17, 5.308e-17, 3.279e-17, 2.017e-17, 1.238e-17,
201 7.542e-18, 4.585e-18, 2.776e-18, 1.671e-18, 9.985e-19, 5.937e-19,
202 3.518e-19, 2.07e-19, 1.215e-19, 7.06e-20, 4.097e-20, 2.37e-20,
203 1.363e-20, 7.802e-21, 4.441e-21, 2.523e-21, 1.424e-21, 8.015e-22,
204 4.497e-22, 2.505e-22, 1.391e-22, 7.691e-23, 4.238e-23, 2.331e-23,
205 1.274e-23, 6.929e-24, 3.752e-24, 2.02e-24, 1.083e-24, 5.774e-25,
206 3.041e-25, 1.593e-25, 8.308e-26, 4.299e-26, 2.195e-26, 1.112e-26,
207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208 0, 0, 0, 0, 0, 0, 0, 0, 0
209 };
210
211 static const double ccl4[121] = {
212 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10, 1.075e-10,
213 1.075e-10, 1.075e-10, 1.075e-10, 1.06e-10, 1.024e-10, 9.69e-11,
214 8.93e-11, 8.078e-11, 7.213e-11, 6.307e-11, 5.383e-11, 4.49e-11,
215 3.609e-11, 2.705e-11, 1.935e-11, 1.385e-11, 8.35e-12, 5.485e-12,
216 3.853e-12, 2.22e-12, 5.875e-13, 3.445e-13, 1.015e-13, 6.075e-14,
217 4.383e-14, 2.692e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
218 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
219 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
220 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
221 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
222 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
223 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
224 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
225 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14, 1e-14,
226 1e-14, 1e-14, 1e-14
227 };
228
229 static const double ch3oh[121] = {
230 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10, 5.01099e-10,
231 5.01099e-10, 5.50999e-10, 5.7313e-10, 5.75638e-10, 5.4086e-10,
232 4.77601e-10, 4.12907e-10, 3.6274e-10, 3.26448e-10, 2.9706e-10,
233 2.27698e-10, 1.96999e-10, 1.66212e-10, 1.17941e-10, 1.19844e-10,
234 1.11211e-10, 1.02714e-10, 9.86138e-11, 9.45133e-11, 9.04127e-11,
235 8.05243e-11, 6.3678e-11, 4.68317e-11, 4.00618e-11, 3.95786e-11,
236 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
237 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
238 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
239 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
240 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
241 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
242 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
243 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
244 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
245 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
246 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
247 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
248 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
249 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
250 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
251 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
252 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
253 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11, 3.95786e-11,
254 3.95786e-11
255 };
256
257 static const double ch4[121] = {
258 1.864e-06, 1.835e-06, 1.819e-06, 1.805e-06, 1.796e-06, 1.788e-06,
259 1.782e-06, 1.776e-06, 1.769e-06, 1.761e-06, 1.749e-06, 1.734e-06,
260 1.716e-06, 1.692e-06, 1.654e-06, 1.61e-06, 1.567e-06, 1.502e-06,
261 1.433e-06, 1.371e-06, 1.323e-06, 1.277e-06, 1.232e-06, 1.188e-06,
262 1.147e-06, 1.108e-06, 1.07e-06, 1.027e-06, 9.854e-07, 9.416e-07,
263 8.933e-07, 8.478e-07, 7.988e-07, 7.515e-07, 7.07e-07, 6.64e-07,
264 6.239e-07, 5.864e-07, 5.512e-07, 5.184e-07, 4.87e-07, 4.571e-07,
265 4.296e-07, 4.04e-07, 3.802e-07, 3.578e-07, 3.383e-07, 3.203e-07,
266 3.032e-07, 2.889e-07, 2.76e-07, 2.635e-07, 2.519e-07, 2.409e-07,
267 2.302e-07, 2.219e-07, 2.144e-07, 2.071e-07, 1.999e-07, 1.93e-07,
268 1.862e-07, 1.795e-07, 1.731e-07, 1.668e-07, 1.607e-07, 1.548e-07,
269 1.49e-07, 1.434e-07, 1.38e-07, 1.328e-07, 1.277e-07, 1.227e-07,
270 1.18e-07, 1.134e-07, 1.089e-07, 1.046e-07, 1.004e-07, 9.635e-08,
271 9.245e-08, 8.867e-08, 8.502e-08, 8.15e-08, 7.809e-08, 7.48e-08,
272 7.159e-08, 6.849e-08, 6.55e-08, 6.262e-08, 5.98e-08, 5.708e-08,
273 5.448e-08, 5.194e-08, 4.951e-08, 4.72e-08, 4.5e-08, 4.291e-08,
274 4.093e-08, 3.905e-08, 3.729e-08, 3.563e-08, 3.408e-08, 3.265e-08,
275 3.128e-08, 2.996e-08, 2.87e-08, 2.76e-08, 2.657e-08, 2.558e-08,
276 2.467e-08, 2.385e-08, 2.307e-08, 2.234e-08, 2.168e-08, 2.108e-08,
277 2.05e-08, 1.998e-08, 1.947e-08, 1.902e-08, 1.86e-08, 1.819e-08,
278 1.782e-08
279 };
280
281 static const double clo[121] = {
282 7.419e-15, 1.061e-14, 1.518e-14, 2.195e-14, 3.175e-14, 4.666e-14,
283 6.872e-14, 1.03e-13, 1.553e-13, 2.375e-13, 3.664e-13, 5.684e-13,
284 8.915e-13, 1.402e-12, 2.269e-12, 4.125e-12, 7.501e-12, 1.257e-11,
285 2.048e-11, 3.338e-11, 5.44e-11, 8.846e-11, 1.008e-10, 1.082e-10,
286 1.157e-10, 1.232e-10, 1.312e-10, 1.539e-10, 1.822e-10, 2.118e-10,
287 2.387e-10, 2.687e-10, 2.875e-10, 3.031e-10, 3.23e-10, 3.648e-10,
288 4.117e-10, 4.477e-10, 4.633e-10, 4.794e-10, 4.95e-10, 5.104e-10,
289 5.259e-10, 5.062e-10, 4.742e-10, 4.443e-10, 4.051e-10, 3.659e-10,
290 3.305e-10, 2.911e-10, 2.54e-10, 2.215e-10, 1.927e-10, 1.675e-10,
291 1.452e-10, 1.259e-10, 1.09e-10, 9.416e-11, 8.119e-11, 6.991e-11,
292 6.015e-11, 5.163e-11, 4.43e-11, 3.789e-11, 3.24e-11, 2.769e-11,
293 2.361e-11, 2.011e-11, 1.71e-11, 1.453e-11, 1.233e-11, 1.045e-11,
294 8.851e-12, 7.48e-12, 6.316e-12, 5.326e-12, 4.487e-12, 3.778e-12,
295 3.176e-12, 2.665e-12, 2.234e-12, 1.87e-12, 1.563e-12, 1.304e-12,
296 1.085e-12, 9.007e-13, 7.468e-13, 6.179e-13, 5.092e-13, 4.188e-13,
297 3.442e-13, 2.816e-13, 2.304e-13, 1.885e-13, 1.542e-13, 1.263e-13,
298 1.035e-13, 8.5e-14, 7.004e-14, 5.783e-14, 4.795e-14, 4.007e-14,
299 3.345e-14, 2.792e-14, 2.33e-14, 1.978e-14, 1.686e-14, 1.438e-14,
300 1.234e-14, 1.07e-14, 9.312e-15, 8.131e-15, 7.164e-15, 6.367e-15,
301 5.67e-15, 5.088e-15, 4.565e-15, 4.138e-15, 3.769e-15, 3.432e-15,
302 3.148e-15
303 };
304
305 static const double clono2[121] = {
306 1.011e-13, 1.515e-13, 2.272e-13, 3.446e-13, 5.231e-13, 8.085e-13,
307 1.253e-12, 1.979e-12, 3.149e-12, 5.092e-12, 8.312e-12, 1.366e-11,
308 2.272e-11, 3.791e-11, 6.209e-11, 9.101e-11, 1.334e-10, 1.951e-10,
309 2.853e-10, 3.94e-10, 4.771e-10, 5.771e-10, 6.675e-10, 7.665e-10,
310 8.504e-10, 8.924e-10, 9.363e-10, 8.923e-10, 8.411e-10, 7.646e-10,
311 6.525e-10, 5.576e-10, 4.398e-10, 3.403e-10, 2.612e-10, 1.915e-10,
312 1.407e-10, 1.028e-10, 7.455e-11, 5.42e-11, 3.708e-11, 2.438e-11,
313 1.618e-11, 1.075e-11, 7.17e-12, 4.784e-12, 3.205e-12, 2.147e-12,
314 1.44e-12, 9.654e-13, 6.469e-13, 4.332e-13, 2.891e-13, 1.926e-13,
315 1.274e-13, 8.422e-14, 5.547e-14, 3.636e-14, 2.368e-14, 1.536e-14,
316 9.937e-15, 6.39e-15, 4.101e-15, 2.61e-15, 1.659e-15, 1.052e-15,
317 6.638e-16, 4.172e-16, 2.61e-16, 1.63e-16, 1.013e-16, 6.275e-17,
318 3.879e-17, 2.383e-17, 1.461e-17, 8.918e-18, 5.43e-18, 3.301e-18,
319 1.997e-18, 1.203e-18, 7.216e-19, 4.311e-19, 2.564e-19, 1.519e-19,
320 8.911e-20, 5.203e-20, 3.026e-20, 1.748e-20, 9.99e-21, 5.673e-21,
321 3.215e-21, 1.799e-21, 1.006e-21, 5.628e-22, 3.146e-22, 1.766e-22,
322 9.94e-23, 5.614e-23, 3.206e-23, 1.841e-23, 1.071e-23, 6.366e-24,
323 3.776e-24, 2.238e-24, 1.326e-24, 8.253e-25, 5.201e-25, 3.279e-25,
324 2.108e-25, 1.395e-25, 9.326e-26, 6.299e-26, 4.365e-26, 3.104e-26,
325 2.219e-26, 1.621e-26, 1.185e-26, 8.92e-27, 6.804e-27, 5.191e-27,
326 4.041e-27
327 };
328
329 static const double co[121] = {
330 1.907e-07, 1.553e-07, 1.362e-07, 1.216e-07, 1.114e-07, 1.036e-07,
331 9.737e-08, 9.152e-08, 8.559e-08, 7.966e-08, 7.277e-08, 6.615e-08,
332 5.884e-08, 5.22e-08, 4.699e-08, 4.284e-08, 3.776e-08, 3.274e-08,
333 2.845e-08, 2.479e-08, 2.246e-08, 2.054e-08, 1.991e-08, 1.951e-08,
334 1.94e-08, 2.009e-08, 2.1e-08, 2.201e-08, 2.322e-08, 2.45e-08,
335 2.602e-08, 2.73e-08, 2.867e-08, 2.998e-08, 3.135e-08, 3.255e-08,
336 3.352e-08, 3.426e-08, 3.484e-08, 3.53e-08, 3.593e-08, 3.671e-08,
337 3.759e-08, 3.945e-08, 4.192e-08, 4.49e-08, 5.03e-08, 5.703e-08,
338 6.538e-08, 7.878e-08, 9.644e-08, 1.196e-07, 1.498e-07, 1.904e-07,
339 2.422e-07, 3.055e-07, 3.804e-07, 4.747e-07, 5.899e-07, 7.272e-07,
340 8.91e-07, 1.071e-06, 1.296e-06, 1.546e-06, 1.823e-06, 2.135e-06,
341 2.44e-06, 2.714e-06, 2.967e-06, 3.189e-06, 3.391e-06, 3.58e-06,
342 3.773e-06, 4.022e-06, 4.346e-06, 4.749e-06, 5.199e-06, 5.668e-06,
343 6.157e-06, 6.688e-06, 7.254e-06, 7.867e-06, 8.539e-06, 9.26e-06,
344 1.009e-05, 1.119e-05, 1.228e-05, 1.365e-05, 1.506e-05, 1.641e-05,
345 1.784e-05, 1.952e-05, 2.132e-05, 2.323e-05, 2.531e-05, 2.754e-05,
346 3.047e-05, 3.459e-05, 3.922e-05, 4.439e-05, 4.825e-05, 5.077e-05,
347 5.34e-05, 5.618e-05, 5.909e-05, 6.207e-05, 6.519e-05, 6.845e-05,
348 6.819e-05, 6.726e-05, 6.622e-05, 6.512e-05, 6.671e-05, 6.862e-05,
349 7.048e-05, 7.264e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05, 7.3e-05
350 };
351
352 static const double cof2[121] = {
353 7.5e-14, 1.055e-13, 1.485e-13, 2.111e-13, 3.001e-13, 4.333e-13,
354 6.269e-13, 9.221e-13, 1.364e-12, 2.046e-12, 3.093e-12, 4.703e-12,
355 7.225e-12, 1.113e-11, 1.66e-11, 2.088e-11, 2.626e-11, 3.433e-11,
356 4.549e-11, 5.886e-11, 7.21e-11, 8.824e-11, 1.015e-10, 1.155e-10,
357 1.288e-10, 1.388e-10, 1.497e-10, 1.554e-10, 1.606e-10, 1.639e-10,
358 1.64e-10, 1.64e-10, 1.596e-10, 1.542e-10, 1.482e-10, 1.382e-10,
359 1.289e-10, 1.198e-10, 1.109e-10, 1.026e-10, 9.484e-11, 8.75e-11,
360 8.086e-11, 7.49e-11, 6.948e-11, 6.446e-11, 5.961e-11, 5.505e-11,
361 5.085e-11, 4.586e-11, 4.1e-11, 3.665e-11, 3.235e-11, 2.842e-11,
362 2.491e-11, 2.11e-11, 1.769e-11, 1.479e-11, 1.197e-11, 9.631e-12,
363 7.74e-12, 6.201e-12, 4.963e-12, 3.956e-12, 3.151e-12, 2.507e-12,
364 1.99e-12, 1.576e-12, 1.245e-12, 9.83e-13, 7.742e-13, 6.088e-13,
365 4.782e-13, 3.745e-13, 2.929e-13, 2.286e-13, 1.782e-13, 1.388e-13,
366 1.079e-13, 8.362e-14, 6.471e-14, 4.996e-14, 3.85e-14, 2.96e-14,
367 2.265e-14, 1.729e-14, 1.317e-14, 9.998e-15, 7.549e-15, 5.683e-15,
368 4.273e-15, 3.193e-15, 2.385e-15, 1.782e-15, 1.331e-15, 9.957e-16,
369 7.461e-16, 5.601e-16, 4.228e-16, 3.201e-16, 2.438e-16, 1.878e-16,
370 1.445e-16, 1.111e-16, 8.544e-17, 6.734e-17, 5.341e-17, 4.237e-17,
371 3.394e-17, 2.759e-17, 2.254e-17, 1.851e-17, 1.54e-17, 1.297e-17,
372 1.096e-17, 9.365e-18, 8e-18, 6.938e-18, 6.056e-18, 5.287e-18,
373 4.662e-18
374 };
375
376 static const double f11[121] = {
377 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10,
378 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.65e-10, 2.635e-10, 2.536e-10,
379 2.44e-10, 2.348e-10, 2.258e-10, 2.153e-10, 2.046e-10, 1.929e-10,
380 1.782e-10, 1.648e-10, 1.463e-10, 1.291e-10, 1.1e-10, 8.874e-11,
381 7.165e-11, 5.201e-11, 3.744e-11, 2.577e-11, 1.64e-11, 1.048e-11,
382 5.993e-12, 3.345e-12, 1.839e-12, 9.264e-13, 4.688e-13, 2.329e-13,
383 1.129e-13, 5.505e-14, 2.825e-14, 1.492e-14, 7.997e-15, 5.384e-15,
384 3.988e-15, 2.955e-15, 2.196e-15, 1.632e-15, 1.214e-15, 9.025e-16,
385 6.708e-16, 4.984e-16, 3.693e-16, 2.733e-16, 2.013e-16, 1.481e-16,
386 1.087e-16, 7.945e-17, 5.782e-17, 4.195e-17, 3.038e-17, 2.19e-17,
387 1.577e-17, 1.128e-17, 8.063e-18, 5.753e-18, 4.09e-18, 2.899e-18,
388 2.048e-18, 1.444e-18, 1.015e-18, 7.12e-19, 4.985e-19, 3.474e-19,
389 2.417e-19, 1.677e-19, 1.161e-19, 8.029e-20, 5.533e-20, 3.799e-20,
390 2.602e-20, 1.776e-20, 1.209e-20, 8.202e-21, 5.522e-21, 3.707e-21,
391 2.48e-21, 1.652e-21, 1.091e-21, 7.174e-22, 4.709e-22, 3.063e-22,
392 1.991e-22, 1.294e-22, 8.412e-23, 5.483e-23, 3.581e-23, 2.345e-23,
393 1.548e-23, 1.027e-23, 6.869e-24, 4.673e-24, 3.173e-24, 2.153e-24,
394 1.461e-24, 1.028e-24, 7.302e-25, 5.188e-25, 3.739e-25, 2.753e-25,
395 2.043e-25, 1.528e-25, 1.164e-25, 9.041e-26, 7.051e-26, 5.587e-26,
396 4.428e-26, 3.588e-26, 2.936e-26, 2.402e-26, 1.995e-26
397 };
398
399 static const double f113[121] = {
400 1.9e-11, 1.9e-11, 1.899e-11, 1.899e-11, 1.898e-11, 1.898e-11,
401 1.897e-11, 1.896e-11, 1.895e-11, 1.894e-11, 1.893e-11, 1.89e-11,
402 1.887e-11, 1.871e-11, 1.854e-11, 1.803e-11, 1.751e-11, 1.664e-11,
403 1.576e-11, 1.466e-11, 1.356e-11, 1.236e-11, 1.116e-11, 9.931e-12,
404 8.702e-12, 7.515e-12, 6.4238e-12, 5.3326e-12, 4.3652e-12, 3.5216e-12,
405 2.678e-12, 2.1532e-12, 1.6284e-12, 1.2202e-12, 9.286e-13, 6.37e-13,
406 4.95e-13, 3.53e-13, 2.5004e-13, 1.8612e-13, 1.222e-13, 9.704e-14,
407 7.188e-14, 5.3338e-14, 4.1414e-14, 2.949e-14, 2.3722e-14, 1.7954e-14,
408 1.37794e-14, 1.11982e-14, 8.617e-15, 7.6036e-15, 6.5902e-15,
409 5.5768e-15, 4.5634e-15, 3.55e-15, 3.1008e-15, 2.6516e-15, 2.2024e-15,
410 1.7532e-15, 1.304e-15, 1.1354e-15, 9.668e-16, 7.982e-16, 6.296e-16,
411 4.61e-16, 3.9734e-16, 3.3368e-16, 2.7002e-16, 2.0636e-16, 1.427e-16,
412 1.22804e-16, 1.02908e-16, 8.3012e-17, 6.3116e-17, 4.322e-17,
413 3.6838e-17, 3.0456e-17, 2.4074e-17, 1.7692e-17, 1.131e-17,
414 9.6202e-18, 7.9304e-18, 6.2406e-18, 4.5508e-18, 2.861e-18,
415 2.40476e-18, 1.94852e-18, 1.49228e-18, 1.03604e-18, 5.798e-19,
416 4.8502e-19, 3.9024e-19, 2.9546e-19, 2.0068e-19, 1.059e-19,
417 8.7084e-20, 6.8268e-20, 4.9452e-20, 3.0636e-20, 1.182e-20,
418 9.64344e-21, 7.46688e-21, 5.29032e-21, 3.11376e-21, 9.372e-22,
419 7.5685e-22, 5.765e-22, 3.9615e-22, 2.158e-22, 3.545e-23,
420 2.86046e-23, 2.17592e-23, 1.49138e-23, 8.0684e-24, 1.223e-24,
421 9.92358e-25, 7.61716e-25, 5.31074e-25, 3.00432e-25, 6.979e-26
422 };
423
424 static const double f114[121] = {
425 1.2e-11, 1.2e-11, 1.2e-11, 1.2e-11, 1.199e-11, 1.199e-11,
426 1.199e-11, 1.199e-11, 1.198e-11, 1.198e-11, 1.198e-11, 1.197e-11,
427 1.196e-11, 1.191e-11, 1.185e-11, 1.167e-11, 1.149e-11, 1.12e-11,
428 1.09e-11, 1.053e-11, 1.015e-11, 9.731e-12, 9.311e-12, 8.865e-12,
429 8.419e-12, 7.949e-12, 7.4774e-12, 7.0058e-12, 6.54e-12, 6.08e-12,
430 5.62e-12, 5.1908e-12, 4.7616e-12, 4.3622e-12, 3.9926e-12, 3.623e-12,
431 3.3274e-12, 3.0318e-12, 2.7702e-12, 2.5426e-12, 2.315e-12, 2.1514e-12,
432 1.9878e-12, 1.8448e-12, 1.7224e-12, 1.6e-12, 1.51e-12, 1.42e-12,
433 1.3462e-12, 1.2886e-12, 1.231e-12, 1.1922e-12, 1.1534e-12, 1.1146e-12,
434 1.0758e-12, 1.037e-12, 1.0025e-12, 9.68e-13, 9.335e-13, 8.99e-13,
435 8.645e-13, 8.344e-13, 8.043e-13, 7.742e-13, 7.441e-13, 7.14e-13,
436 6.8718e-13, 6.6036e-13, 6.3354e-13, 6.0672e-13, 5.799e-13, 5.5612e-13,
437 5.3234e-13, 5.0856e-13, 4.8478e-13, 4.61e-13, 4.394e-13, 4.178e-13,
438 3.962e-13, 3.746e-13, 3.53e-13, 3.3288e-13, 3.1276e-13, 2.9264e-13,
439 2.7252e-13, 2.524e-13, 2.3368e-13, 2.1496e-13, 1.9624e-13, 1.7752e-13,
440 1.588e-13, 1.4221e-13, 1.2562e-13, 1.0903e-13, 9.244e-14, 7.585e-14,
441 6.4942e-14, 5.4034e-14, 4.3126e-14, 3.2218e-14, 2.131e-14, 1.76694e-14,
442 1.40288e-14, 1.03882e-14, 6.7476e-15, 3.107e-15, 2.52738e-15,
443 1.94776e-15, 1.36814e-15, 7.8852e-16, 2.089e-16, 1.69288e-16,
444 1.29676e-16, 9.0064e-17, 5.0452e-17, 1.084e-17, 8.85136e-18,
445 6.86272e-18, 4.87408e-18, 2.88544e-18, 8.968e-19
446 };
447
448 static const double f12[121] = {
449 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10,
450 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.45e-10, 5.429e-10, 5.291e-10,
451 5.155e-10, 5.022e-10, 4.893e-10, 4.772e-10, 4.655e-10, 4.497e-10,
452 4.249e-10, 4.015e-10, 3.632e-10, 3.261e-10, 2.858e-10, 2.408e-10,
453 2.03e-10, 1.685e-10, 1.4e-10, 1.163e-10, 9.65e-11, 8.02e-11, 6.705e-11,
454 5.624e-11, 4.764e-11, 4.249e-11, 3.792e-11, 3.315e-11, 2.819e-11,
455 2.4e-11, 1.999e-11, 1.64e-11, 1.352e-11, 1.14e-11, 9.714e-12,
456 8.28e-12, 7.176e-12, 6.251e-12, 5.446e-12, 4.72e-12, 4.081e-12,
457 3.528e-12, 3.08e-12, 2.699e-12, 2.359e-12, 2.111e-12, 1.901e-12,
458 1.709e-12, 1.534e-12, 1.376e-12, 1.233e-12, 1.103e-12, 9.869e-13,
459 8.808e-13, 7.859e-13, 7.008e-13, 6.241e-13, 5.553e-13, 4.935e-13,
460 4.383e-13, 3.889e-13, 3.447e-13, 3.054e-13, 2.702e-13, 2.389e-13,
461 2.11e-13, 1.862e-13, 1.643e-13, 1.448e-13, 1.274e-13, 1.121e-13,
462 9.844e-14, 8.638e-14, 7.572e-14, 6.62e-14, 5.782e-14, 5.045e-14,
463 4.394e-14, 3.817e-14, 3.311e-14, 2.87e-14, 2.48e-14, 2.142e-14,
464 1.851e-14, 1.599e-14, 1.383e-14, 1.196e-14, 1.036e-14, 9e-15,
465 7.828e-15, 6.829e-15, 5.992e-15, 5.254e-15, 4.606e-15, 4.037e-15,
466 3.583e-15, 3.19e-15, 2.841e-15, 2.542e-15, 2.291e-15, 2.07e-15,
467 1.875e-15, 1.71e-15, 1.57e-15, 1.442e-15, 1.333e-15, 1.232e-15,
468 1.147e-15, 1.071e-15, 1.001e-15, 9.396e-16
469 };
470
471 static const double f14[121] = {
472 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 9e-11,
473 9e-11, 9e-11, 9e-11, 9e-11, 9e-11, 8.91e-11, 8.73e-11, 8.46e-11,
474 8.19e-11, 7.92e-11, 7.74e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
475 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
476 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
477 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
478 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
479 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
480 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
481 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
482 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
483 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
484 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
485 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
486 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
487 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11,
488 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11, 7.65e-11
489 };
490
491 static const double f22[121] = {
492 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10, 1.4e-10,
493 1.4e-10, 1.4e-10, 1.4e-10, 1.372e-10, 1.317e-10, 1.235e-10, 1.153e-10,
494 1.075e-10, 1.002e-10, 9.332e-11, 8.738e-11, 8.194e-11, 7.7e-11,
495 7.165e-11, 6.753e-11, 6.341e-11, 5.971e-11, 5.6e-11, 5.229e-11,
496 4.859e-11, 4.488e-11, 4.118e-11, 3.83e-11, 3.568e-11, 3.308e-11,
497 3.047e-11, 2.82e-11, 2.594e-11, 2.409e-11, 2.237e-11, 2.065e-11,
498 1.894e-11, 1.771e-11, 1.647e-11, 1.532e-11, 1.416e-11, 1.332e-11,
499 1.246e-11, 1.161e-11, 1.087e-11, 1.017e-11, 9.471e-12, 8.853e-12,
500 8.235e-12, 7.741e-12, 7.247e-12, 6.836e-12, 6.506e-12, 6.176e-12,
501 5.913e-12, 5.65e-12, 5.419e-12, 5.221e-12, 5.024e-12, 4.859e-12,
502 4.694e-12, 4.546e-12, 4.414e-12, 4.282e-12, 4.15e-12, 4.019e-12,
503 3.903e-12, 3.805e-12, 3.706e-12, 3.607e-12, 3.508e-12, 3.41e-12,
504 3.31e-12, 3.212e-12, 3.129e-12, 3.047e-12, 2.964e-12, 2.882e-12,
505 2.8e-12, 2.734e-12, 2.668e-12, 2.602e-12, 2.537e-12, 2.471e-12,
506 2.421e-12, 2.372e-12, 2.322e-12, 2.273e-12, 2.224e-12, 2.182e-12,
507 2.141e-12, 2.1e-12, 2.059e-12, 2.018e-12, 1.977e-12, 1.935e-12,
508 1.894e-12, 1.853e-12, 1.812e-12, 1.77e-12, 1.73e-12, 1.688e-12,
509 1.647e-12, 1.606e-12, 1.565e-12, 1.524e-12, 1.483e-12, 1.441e-12,
510 1.4e-12, 1.359e-12, 1.317e-12, 1.276e-12, 1.235e-12, 1.194e-12,
511 1.153e-12, 1.112e-12, 1.071e-12, 1.029e-12, 9.883e-13
512 };
513
514 static const double h2co[121] = {
515 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11, 8.71857e-11,
516 8.71857e-11, 7.72315e-11, 6.85464e-11, 6.0758e-11, 5.32087e-11,
517 4.5719e-11, 3.79458e-11, 3.07607e-11, 2.46025e-11, 1.94038e-11,
518 1.40882e-11, 1.0623e-11, 8.35457e-12, 6.87427e-12, 7.09071e-12,
519 8.96183e-12, 1.09012e-11, 1.50545e-11, 1.92077e-11, 2.3361e-11,
520 2.7054e-11, 3.01936e-11, 3.33333e-11, 3.69281e-11, 4.08069e-11,
521 4.57318e-11, 5.1348e-11, 5.69642e-11, 6.33173e-11, 6.98984e-11,
522 7.63144e-11, 8.22774e-11, 8.82405e-11, 9.3746e-11, 9.92074e-11,
523 1.04669e-10, 1.10055e-10, 1.15293e-10, 1.20531e-10, 1.26293e-10,
524 1.32585e-10, 1.35966e-10, 1.36242e-10, 1.36519e-10, 1.61155e-10,
525 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
526 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
527 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
528 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
529 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
530 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
531 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
532 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
533 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
534 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
535 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
536 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
537 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
538 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10, 1.99157e-10,
539 1.99157e-10
540 };
541
542 static const double h2o[121] = {
543 0.01166, 0.008269, 0.005742, 0.003845, 0.00277, 0.001897, 0.001272,
544 0.000827, 0.000539, 0.0003469, 0.0001579, 3.134e-05, 1.341e-05,
545 6.764e-06, 4.498e-06, 3.703e-06, 3.724e-06, 3.899e-06, 4.002e-06,
546 4.122e-06, 4.277e-06, 4.438e-06, 4.558e-06, 4.673e-06, 4.763e-06,
547 4.809e-06, 4.856e-06, 4.936e-06, 5.021e-06, 5.114e-06, 5.222e-06,
548 5.331e-06, 5.414e-06, 5.488e-06, 5.563e-06, 5.633e-06, 5.704e-06,
549 5.767e-06, 5.819e-06, 5.872e-06, 5.914e-06, 5.949e-06, 5.984e-06,
550 6.015e-06, 6.044e-06, 6.073e-06, 6.104e-06, 6.136e-06, 6.167e-06,
551 6.189e-06, 6.208e-06, 6.226e-06, 6.212e-06, 6.185e-06, 6.158e-06,
552 6.114e-06, 6.066e-06, 6.018e-06, 5.877e-06, 5.728e-06, 5.582e-06,
553 5.437e-06, 5.296e-06, 5.156e-06, 5.02e-06, 4.886e-06, 4.754e-06,
554 4.625e-06, 4.498e-06, 4.374e-06, 4.242e-06, 4.096e-06, 3.955e-06,
555 3.817e-06, 3.683e-06, 3.491e-06, 3.204e-06, 2.94e-06, 2.696e-06,
556 2.47e-06, 2.252e-06, 2.019e-06, 1.808e-06, 1.618e-06, 1.445e-06,
557 1.285e-06, 1.105e-06, 9.489e-07, 8.121e-07, 6.938e-07, 5.924e-07,
558 5.04e-07, 4.288e-07, 3.648e-07, 3.103e-07, 2.642e-07, 2.252e-07,
559 1.921e-07, 1.643e-07, 1.408e-07, 1.211e-07, 1.048e-07, 9.063e-08,
560 7.835e-08, 6.774e-08, 5.936e-08, 5.221e-08, 4.592e-08, 4.061e-08,
561 3.62e-08, 3.236e-08, 2.902e-08, 2.62e-08, 2.383e-08, 2.171e-08,
562 1.989e-08, 1.823e-08, 1.684e-08, 1.562e-08, 1.449e-08, 1.351e-08
563 };
564
565 static const double h2o2[121] = {
566 1.779e-10, 7.938e-10, 8.953e-10, 8.032e-10, 6.564e-10, 5.159e-10,
567 4.003e-10, 3.026e-10, 2.222e-10, 1.58e-10, 1.044e-10, 6.605e-11,
568 3.413e-11, 1.453e-11, 1.062e-11, 1.009e-11, 9.597e-12, 1.175e-11,
569 1.572e-11, 2.091e-11, 2.746e-11, 3.603e-11, 4.791e-11, 6.387e-11,
570 8.239e-11, 1.007e-10, 1.23e-10, 1.363e-10, 1.489e-10, 1.585e-10,
571 1.608e-10, 1.632e-10, 1.576e-10, 1.502e-10, 1.423e-10, 1.302e-10,
572 1.192e-10, 1.085e-10, 9.795e-11, 8.854e-11, 8.057e-11, 7.36e-11,
573 6.736e-11, 6.362e-11, 6.087e-11, 5.825e-11, 5.623e-11, 5.443e-11,
574 5.27e-11, 5.098e-11, 4.931e-11, 4.769e-11, 4.611e-11, 4.458e-11,
575 4.308e-11, 4.102e-11, 3.887e-11, 3.682e-11, 3.521e-11, 3.369e-11,
576 3.224e-11, 3.082e-11, 2.946e-11, 2.814e-11, 2.687e-11, 2.566e-11,
577 2.449e-11, 2.336e-11, 2.227e-11, 2.123e-11, 2.023e-11, 1.927e-11,
578 1.835e-11, 1.746e-11, 1.661e-11, 1.58e-11, 1.502e-11, 1.428e-11,
579 1.357e-11, 1.289e-11, 1.224e-11, 1.161e-11, 1.102e-11, 1.045e-11,
580 9.895e-12, 9.369e-12, 8.866e-12, 8.386e-12, 7.922e-12, 7.479e-12,
581 7.06e-12, 6.656e-12, 6.274e-12, 5.914e-12, 5.575e-12, 5.257e-12,
582 4.959e-12, 4.679e-12, 4.42e-12, 4.178e-12, 3.954e-12, 3.75e-12,
583 3.557e-12, 3.372e-12, 3.198e-12, 3.047e-12, 2.908e-12, 2.775e-12,
584 2.653e-12, 2.544e-12, 2.442e-12, 2.346e-12, 2.26e-12, 2.183e-12,
585 2.11e-12, 2.044e-12, 1.98e-12, 1.924e-12, 1.871e-12, 1.821e-12,
586 1.775e-12
587 };
588
589 static const double hcl[121] = {
590 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11, 3.70385e-11,
591 3.70385e-11, 2.21247e-11, 1.88117e-11, 2.36957e-11, 3.72192e-11,
592 5.79399e-11, 8.04158e-11, 1.01779e-10, 1.2301e-10, 1.53924e-10,
593 1.93737e-10, 2.5561e-10, 3.84228e-10, 6.18248e-10, 6.31222e-10,
594 7.84907e-10, 9.36932e-10, 1.03508e-09, 1.13323e-09, 1.23138e-09,
595 1.31985e-09, 1.39669e-09, 1.47352e-09, 1.56375e-09, 1.66234e-09,
596 1.78086e-09, 1.91256e-09, 2.04425e-09, 2.16629e-09, 2.28535e-09,
597 2.39439e-09, 2.47597e-09, 2.55755e-09, 2.60873e-09, 2.65696e-09,
598 2.70519e-09, 2.75658e-09, 2.81422e-09, 2.87187e-09, 2.94013e-09,
599 3.01911e-09, 3.09497e-09, 3.16749e-09, 3.24001e-09, 3.30525e-09,
600 3.3665e-09, 3.42424e-09, 3.4619e-09, 3.49956e-09, 3.52273e-09,
601 3.54214e-09, 3.56154e-09, 3.57918e-09, 3.59049e-09, 3.6018e-09,
602 3.6132e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
603 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
604 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
605 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
606 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
607 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
608 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
609 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
610 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
611 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
612 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
613 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09, 3.62476e-09,
614 3.62476e-09
615 };
616
617 static const double hcn[121] = {
618 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10,
619 5.5e-10, 5.5e-10, 5.5e-10, 5.5e-10, 5.498e-10, 5.495e-10, 5.493e-10,
620 5.49e-10, 5.488e-10, 4.717e-10, 3.946e-10, 3.174e-10, 2.4e-10,
621 1.626e-10, 1.619e-10, 1.612e-10, 1.602e-10, 1.593e-10, 1.582e-10,
622 1.572e-10, 1.56e-10, 1.549e-10, 1.539e-10, 1.53e-10, 1.519e-10,
623 1.506e-10, 1.487e-10, 1.467e-10, 1.449e-10, 1.43e-10, 1.413e-10,
624 1.397e-10, 1.382e-10, 1.368e-10, 1.354e-10, 1.337e-10, 1.315e-10,
625 1.292e-10, 1.267e-10, 1.241e-10, 1.215e-10, 1.19e-10, 1.165e-10,
626 1.141e-10, 1.118e-10, 1.096e-10, 1.072e-10, 1.047e-10, 1.021e-10,
627 9.968e-11, 9.739e-11, 9.539e-11, 9.339e-11, 9.135e-11, 8.898e-11,
628 8.664e-11, 8.439e-11, 8.249e-11, 8.075e-11, 7.904e-11, 7.735e-11,
629 7.565e-11, 7.399e-11, 7.245e-11, 7.109e-11, 6.982e-11, 6.863e-11,
630 6.755e-11, 6.657e-11, 6.587e-11, 6.527e-11, 6.476e-11, 6.428e-11,
631 6.382e-11, 6.343e-11, 6.307e-11, 6.272e-11, 6.238e-11, 6.205e-11,
632 6.17e-11, 6.137e-11, 6.102e-11, 6.072e-11, 6.046e-11, 6.03e-11,
633 6.018e-11, 6.01e-11, 6.001e-11, 5.992e-11, 5.984e-11, 5.975e-11,
634 5.967e-11, 5.958e-11, 5.95e-11, 5.941e-11, 5.933e-11, 5.925e-11,
635 5.916e-11, 5.908e-11, 5.899e-11, 5.891e-11, 5.883e-11, 5.874e-11,
636 5.866e-11, 5.858e-11, 5.85e-11, 5.841e-11, 5.833e-11, 5.825e-11,
637 5.817e-11, 5.808e-11, 5.8e-11, 5.792e-11, 5.784e-11
638 };
639
640 static const double hf[121] = {
641 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
642 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11, 2.64279e-11,
643 2.64279e-11, 2.64279e-11, 2.64279e-11, 3.86691e-11, 5.22002e-11,
644 6.92471e-11, 9.13979e-11, 1.37918e-10, 2.24918e-10, 2.29824e-10,
645 2.94241e-10, 3.58363e-10, 4.12881e-10, 4.67399e-10, 5.21917e-10,
646 5.74229e-10, 6.23889e-10, 6.73549e-10, 7.24119e-10, 7.75256e-10,
647 8.319e-10, 8.92185e-10, 9.52469e-10, 1.01325e-09, 1.07419e-09,
648 1.13565e-09, 1.19856e-09, 1.26146e-09, 1.31439e-09, 1.36635e-09,
649 1.41831e-09, 1.46549e-09, 1.50321e-09, 1.54093e-09, 1.57986e-09,
650 1.62e-09, 1.66286e-09, 1.70863e-09, 1.75439e-09, 1.79827e-09,
651 1.84111e-09, 1.88125e-09, 1.90603e-09, 1.93081e-09, 1.9413e-09,
652 1.94807e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
653 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
654 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
655 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
656 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
657 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
658 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
659 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
660 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
661 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
662 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
663 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
664 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09, 1.95485e-09,
665 1.95485e-09
666 };
667
668 static const double hno3[121] = {
669 1.809e-10, 7.234e-10, 5.899e-10, 4.342e-10, 3.277e-10, 2.661e-10,
670 2.35e-10, 2.267e-10, 2.389e-10, 2.651e-10, 3.255e-10, 4.099e-10,
671 5.42e-10, 6.978e-10, 8.807e-10, 1.112e-09, 1.405e-09, 2.04e-09,
672 3.111e-09, 4.5e-09, 5.762e-09, 7.37e-09, 7.852e-09, 8.109e-09,
673 8.067e-09, 7.554e-09, 7.076e-09, 6.268e-09, 5.524e-09, 4.749e-09,
674 3.909e-09, 3.223e-09, 2.517e-09, 1.942e-09, 1.493e-09, 1.122e-09,
675 8.449e-10, 6.361e-10, 4.787e-10, 3.611e-10, 2.804e-10, 2.215e-10,
676 1.758e-10, 1.441e-10, 1.197e-10, 9.953e-11, 8.505e-11, 7.334e-11,
677 6.325e-11, 5.625e-11, 5.058e-11, 4.548e-11, 4.122e-11, 3.748e-11,
678 3.402e-11, 3.088e-11, 2.8e-11, 2.536e-11, 2.293e-11, 2.072e-11,
679 1.871e-11, 1.687e-11, 1.52e-11, 1.368e-11, 1.23e-11, 1.105e-11,
680 9.922e-12, 8.898e-12, 7.972e-12, 7.139e-12, 6.385e-12, 5.708e-12,
681 5.099e-12, 4.549e-12, 4.056e-12, 3.613e-12, 3.216e-12, 2.862e-12,
682 2.544e-12, 2.259e-12, 2.004e-12, 1.776e-12, 1.572e-12, 1.391e-12,
683 1.227e-12, 1.082e-12, 9.528e-13, 8.379e-13, 7.349e-13, 6.436e-13,
684 5.634e-13, 4.917e-13, 4.291e-13, 3.745e-13, 3.267e-13, 2.854e-13,
685 2.494e-13, 2.181e-13, 1.913e-13, 1.68e-13, 1.479e-13, 1.31e-13,
686 1.159e-13, 1.025e-13, 9.067e-14, 8.113e-14, 7.281e-14, 6.535e-14,
687 5.892e-14, 5.348e-14, 4.867e-14, 4.439e-14, 4.073e-14, 3.76e-14,
688 3.476e-14, 3.229e-14, 3e-14, 2.807e-14, 2.635e-14, 2.473e-14,
689 2.332e-14
690 };
691
692 static const double hno4[121] = {
693 6.118e-12, 3.594e-12, 2.807e-12, 3.04e-12, 4.458e-12, 7.986e-12,
694 1.509e-11, 2.661e-11, 3.738e-11, 4.652e-11, 4.429e-11, 3.992e-11,
695 3.347e-11, 3.005e-11, 3.173e-11, 4.055e-11, 5.812e-11, 8.489e-11,
696 1.19e-10, 1.482e-10, 1.766e-10, 2.103e-10, 2.35e-10, 2.598e-10,
697 2.801e-10, 2.899e-10, 3e-10, 2.817e-10, 2.617e-10, 2.332e-10,
698 1.933e-10, 1.605e-10, 1.232e-10, 9.285e-11, 6.941e-11, 4.951e-11,
699 3.539e-11, 2.402e-11, 1.522e-11, 9.676e-12, 6.056e-12, 3.745e-12,
700 2.34e-12, 1.463e-12, 9.186e-13, 5.769e-13, 3.322e-13, 1.853e-13,
701 1.035e-13, 7.173e-14, 5.382e-14, 4.036e-14, 3.401e-14, 2.997e-14,
702 2.635e-14, 2.316e-14, 2.034e-14, 1.783e-14, 1.56e-14, 1.363e-14,
703 1.19e-14, 1.037e-14, 9.032e-15, 7.846e-15, 6.813e-15, 5.912e-15,
704 5.121e-15, 4.431e-15, 3.829e-15, 3.306e-15, 2.851e-15, 2.456e-15,
705 2.114e-15, 1.816e-15, 1.559e-15, 1.337e-15, 1.146e-15, 9.811e-16,
706 8.389e-16, 7.162e-16, 6.109e-16, 5.203e-16, 4.425e-16, 3.76e-16,
707 3.184e-16, 2.692e-16, 2.274e-16, 1.917e-16, 1.61e-16, 1.35e-16,
708 1.131e-16, 9.437e-17, 7.874e-17, 6.57e-17, 5.481e-17, 4.579e-17,
709 3.828e-17, 3.204e-17, 2.691e-17, 2.264e-17, 1.912e-17, 1.626e-17,
710 1.382e-17, 1.174e-17, 9.972e-18, 8.603e-18, 7.45e-18, 6.453e-18,
711 5.623e-18, 4.944e-18, 4.361e-18, 3.859e-18, 3.443e-18, 3.096e-18,
712 2.788e-18, 2.528e-18, 2.293e-18, 2.099e-18, 1.929e-18, 1.773e-18,
713 1.64e-18
714 };
715
716 static const double hocl[121] = {
717 1.056e-12, 1.194e-12, 1.35e-12, 1.531e-12, 1.737e-12, 1.982e-12,
718 2.263e-12, 2.599e-12, 2.991e-12, 3.459e-12, 4.012e-12, 4.662e-12,
719 5.438e-12, 6.35e-12, 7.425e-12, 8.686e-12, 1.016e-11, 1.188e-11,
720 1.389e-11, 1.659e-11, 2.087e-11, 2.621e-11, 3.265e-11, 4.064e-11,
721 4.859e-11, 5.441e-11, 6.09e-11, 6.373e-11, 6.611e-11, 6.94e-11,
722 7.44e-11, 7.97e-11, 8.775e-11, 9.722e-11, 1.064e-10, 1.089e-10,
723 1.114e-10, 1.106e-10, 1.053e-10, 1.004e-10, 9.006e-11, 7.778e-11,
724 6.739e-11, 5.636e-11, 4.655e-11, 3.845e-11, 3.042e-11, 2.368e-11,
725 1.845e-11, 1.442e-11, 1.127e-11, 8.814e-12, 6.544e-12, 4.763e-12,
726 3.449e-12, 2.612e-12, 1.999e-12, 1.526e-12, 1.16e-12, 8.793e-13,
727 6.655e-13, 5.017e-13, 3.778e-13, 2.829e-13, 2.117e-13, 1.582e-13,
728 1.178e-13, 8.755e-14, 6.486e-14, 4.799e-14, 3.54e-14, 2.606e-14,
729 1.916e-14, 1.403e-14, 1.026e-14, 7.48e-15, 5.446e-15, 3.961e-15,
730 2.872e-15, 2.076e-15, 1.498e-15, 1.077e-15, 7.726e-16, 5.528e-16,
731 3.929e-16, 2.785e-16, 1.969e-16, 1.386e-16, 9.69e-17, 6.747e-17,
732 4.692e-17, 3.236e-17, 2.232e-17, 1.539e-17, 1.061e-17, 7.332e-18,
733 5.076e-18, 3.522e-18, 2.461e-18, 1.726e-18, 1.22e-18, 8.75e-19,
734 6.264e-19, 4.482e-19, 3.207e-19, 2.368e-19, 1.762e-19, 1.312e-19,
735 9.891e-20, 7.595e-20, 5.87e-20, 4.567e-20, 3.612e-20, 2.904e-20,
736 2.343e-20, 1.917e-20, 1.568e-20, 1.308e-20, 1.1e-20, 9.25e-21,
737 7.881e-21
738 };
739
740 static const double n2o[121] = {
741 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07, 3.17e-07,
742 3.17e-07, 3.17e-07, 3.17e-07, 3.124e-07, 3.077e-07, 3.03e-07,
743 2.984e-07, 2.938e-07, 2.892e-07, 2.847e-07, 2.779e-07, 2.705e-07,
744 2.631e-07, 2.557e-07, 2.484e-07, 2.345e-07, 2.201e-07, 2.01e-07,
745 1.754e-07, 1.532e-07, 1.329e-07, 1.154e-07, 1.003e-07, 8.735e-08,
746 7.617e-08, 6.512e-08, 5.547e-08, 4.709e-08, 3.915e-08, 3.259e-08,
747 2.738e-08, 2.327e-08, 1.98e-08, 1.711e-08, 1.493e-08, 1.306e-08,
748 1.165e-08, 1.049e-08, 9.439e-09, 8.375e-09, 7.391e-09, 6.525e-09,
749 5.759e-09, 5.083e-09, 4.485e-09, 3.953e-09, 3.601e-09, 3.27e-09,
750 2.975e-09, 2.757e-09, 2.556e-09, 2.37e-09, 2.195e-09, 2.032e-09,
751 1.912e-09, 1.79e-09, 1.679e-09, 1.572e-09, 1.482e-09, 1.402e-09,
752 1.326e-09, 1.254e-09, 1.187e-09, 1.127e-09, 1.071e-09, 1.02e-09,
753 9.673e-10, 9.193e-10, 8.752e-10, 8.379e-10, 8.017e-10, 7.66e-10,
754 7.319e-10, 7.004e-10, 6.721e-10, 6.459e-10, 6.199e-10, 5.942e-10,
755 5.703e-10, 5.488e-10, 5.283e-10, 5.082e-10, 4.877e-10, 4.696e-10,
756 4.52e-10, 4.355e-10, 4.198e-10, 4.039e-10, 3.888e-10, 3.754e-10,
757 3.624e-10, 3.499e-10, 3.381e-10, 3.267e-10, 3.163e-10, 3.058e-10,
758 2.959e-10, 2.864e-10, 2.77e-10, 2.686e-10, 2.604e-10, 2.534e-10,
759 2.462e-10, 2.386e-10, 2.318e-10, 2.247e-10, 2.189e-10, 2.133e-10,
760 2.071e-10, 2.014e-10, 1.955e-10, 1.908e-10, 1.86e-10, 1.817e-10
761 };
762
763 static const double n2o5[121] = {
764 1.231e-11, 3.035e-12, 1.702e-12, 9.877e-13, 8.081e-13, 9.039e-13,
765 1.169e-12, 1.474e-12, 1.651e-12, 1.795e-12, 1.998e-12, 2.543e-12,
766 4.398e-12, 7.698e-12, 1.28e-11, 2.131e-11, 3.548e-11, 5.894e-11,
767 7.645e-11, 1.089e-10, 1.391e-10, 1.886e-10, 2.386e-10, 2.986e-10,
768 3.487e-10, 3.994e-10, 4.5e-10, 4.6e-10, 4.591e-10, 4.1e-10, 3.488e-10,
769 2.846e-10, 2.287e-10, 1.696e-10, 1.011e-10, 6.428e-11, 4.324e-11,
770 2.225e-11, 6.214e-12, 3.608e-12, 8.793e-13, 4.491e-13, 1.04e-13,
771 6.1e-14, 3.436e-14, 6.671e-15, 1.171e-15, 5.848e-16, 1.212e-16,
772 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
773 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
774 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
775 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
776 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
777 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
778 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16, 1e-16,
779 1e-16, 1e-16
780 };
781
782 static const double nh3[121] = {
783 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
784 1e-10, 1e-10, 1e-10, 1e-10, 9.444e-11, 8.488e-11, 7.241e-11, 5.785e-11,
785 4.178e-11, 3.018e-11, 2.18e-11, 1.574e-11, 1.137e-11, 8.211e-12,
786 5.973e-12, 4.327e-12, 3.118e-12, 2.234e-12, 1.573e-12, 1.04e-12,
787 6.762e-13, 4.202e-13, 2.406e-13, 1.335e-13, 6.938e-14, 3.105e-14,
788 1.609e-14, 1.033e-14, 6.432e-15, 4.031e-15, 2.555e-15, 1.656e-15,
789 1.115e-15, 7.904e-16, 5.63e-16, 4.048e-16, 2.876e-16, 2.004e-16,
790 1.356e-16, 9.237e-17, 6.235e-17, 4.223e-17, 3.009e-17, 2.328e-17,
791 2.002e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
792 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
793 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
794 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
795 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
796 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
797 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
798 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
799 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
800 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
801 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17, 1.914e-17,
802 1.914e-17
803 };
804
805 static const double no[121] = {
806 2.586e-10, 4.143e-11, 1.566e-11, 9.591e-12, 8.088e-12, 8.462e-12,
807 1.013e-11, 1.328e-11, 1.855e-11, 2.678e-11, 3.926e-11, 5.464e-11,
808 7.012e-11, 8.912e-11, 1.127e-10, 1.347e-10, 1.498e-10, 1.544e-10,
809 1.602e-10, 1.824e-10, 2.078e-10, 2.366e-10, 2.691e-10, 5.141e-10,
810 8.259e-10, 1.254e-09, 1.849e-09, 2.473e-09, 3.294e-09, 4.16e-09,
811 5.095e-09, 6.11e-09, 6.93e-09, 7.888e-09, 8.903e-09, 9.713e-09,
812 1.052e-08, 1.115e-08, 1.173e-08, 1.21e-08, 1.228e-08, 1.239e-08,
813 1.231e-08, 1.213e-08, 1.192e-08, 1.138e-08, 1.085e-08, 1.008e-08,
814 9.224e-09, 8.389e-09, 7.262e-09, 6.278e-09, 5.335e-09, 4.388e-09,
815 3.589e-09, 2.761e-09, 2.129e-09, 1.633e-09, 1.243e-09, 9.681e-10,
816 8.355e-10, 7.665e-10, 7.442e-10, 8.584e-10, 9.732e-10, 1.063e-09,
817 1.163e-09, 1.286e-09, 1.472e-09, 1.707e-09, 2.032e-09, 2.474e-09,
818 2.977e-09, 3.506e-09, 4.102e-09, 5.013e-09, 6.493e-09, 8.414e-09,
819 1.077e-08, 1.367e-08, 1.777e-08, 2.625e-08, 3.926e-08, 5.545e-08,
820 7.195e-08, 9.464e-08, 1.404e-07, 2.183e-07, 3.329e-07, 4.535e-07,
821 6.158e-07, 8.187e-07, 1.075e-06, 1.422e-06, 1.979e-06, 2.71e-06,
822 3.58e-06, 4.573e-06, 5.951e-06, 7.999e-06, 1.072e-05, 1.372e-05,
823 1.697e-05, 2.112e-05, 2.643e-05, 3.288e-05, 3.994e-05, 4.794e-05,
824 5.606e-05, 6.383e-05, 7.286e-05, 8.156e-05, 8.883e-05, 9.469e-05,
825 9.848e-05, 0.0001023, 0.0001066, 0.0001115, 0.0001145, 0.0001142,
826 0.0001133
827 };
828
829 static const double no2[121] = {
830 3.036e-09, 2.945e-10, 9.982e-11, 5.069e-11, 3.485e-11, 2.982e-11,
831 2.947e-11, 3.164e-11, 3.714e-11, 4.586e-11, 6.164e-11, 8.041e-11,
832 9.982e-11, 1.283e-10, 1.73e-10, 2.56e-10, 3.909e-10, 5.959e-10,
833 9.081e-10, 1.384e-09, 1.788e-09, 2.189e-09, 2.686e-09, 3.091e-09,
834 3.49e-09, 3.796e-09, 4.2e-09, 5.103e-09, 6.005e-09, 6.3e-09, 6.706e-09,
835 7.07e-09, 7.434e-09, 7.663e-09, 7.788e-09, 7.8e-09, 7.597e-09,
836 7.482e-09, 7.227e-09, 6.403e-09, 5.585e-09, 4.606e-09, 3.703e-09,
837 2.984e-09, 2.183e-09, 1.48e-09, 8.441e-10, 5.994e-10, 3.799e-10,
838 2.751e-10, 1.927e-10, 1.507e-10, 1.102e-10, 6.971e-11, 5.839e-11,
839 3.904e-11, 3.087e-11, 2.176e-11, 1.464e-11, 1.209e-11, 8.497e-12,
840 6.477e-12, 4.371e-12, 2.914e-12, 2.424e-12, 1.753e-12, 1.35e-12,
841 9.417e-13, 6.622e-13, 5.148e-13, 3.841e-13, 3.446e-13, 3.01e-13,
842 2.551e-13, 2.151e-13, 1.829e-13, 1.64e-13, 1.475e-13, 1.352e-13,
843 1.155e-13, 9.963e-14, 9.771e-14, 9.577e-14, 9.384e-14, 9.186e-14,
844 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
845 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
846 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14,
847 9e-14, 9e-14, 9e-14, 9e-14, 9e-14, 9e-14
848 };
849
850 static const double o3[121] = {
851 2.218e-08, 3.394e-08, 3.869e-08, 4.219e-08, 4.501e-08, 4.778e-08,
852 5.067e-08, 5.402e-08, 5.872e-08, 6.521e-08, 7.709e-08, 9.461e-08,
853 1.269e-07, 1.853e-07, 2.723e-07, 3.964e-07, 5.773e-07, 8.2e-07,
854 1.155e-06, 1.59e-06, 2.076e-06, 2.706e-06, 3.249e-06, 3.848e-06,
855 4.459e-06, 4.986e-06, 5.573e-06, 5.958e-06, 6.328e-06, 6.661e-06,
856 6.9e-06, 7.146e-06, 7.276e-06, 7.374e-06, 7.447e-06, 7.383e-06,
857 7.321e-06, 7.161e-06, 6.879e-06, 6.611e-06, 6.216e-06, 5.765e-06,
858 5.355e-06, 4.905e-06, 4.471e-06, 4.075e-06, 3.728e-06, 3.413e-06,
859 3.125e-06, 2.856e-06, 2.607e-06, 2.379e-06, 2.17e-06, 1.978e-06,
860 1.8e-06, 1.646e-06, 1.506e-06, 1.376e-06, 1.233e-06, 1.102e-06,
861 9.839e-07, 8.771e-07, 7.814e-07, 6.947e-07, 6.102e-07, 5.228e-07,
862 4.509e-07, 3.922e-07, 3.501e-07, 3.183e-07, 2.909e-07, 2.686e-07,
863 2.476e-07, 2.284e-07, 2.109e-07, 2.003e-07, 2.013e-07, 2.022e-07,
864 2.032e-07, 2.042e-07, 2.097e-07, 2.361e-07, 2.656e-07, 2.989e-07,
865 3.37e-07, 3.826e-07, 4.489e-07, 5.26e-07, 6.189e-07, 7.312e-07,
866 8.496e-07, 8.444e-07, 8.392e-07, 8.339e-07, 8.286e-07, 8.234e-07,
867 8.181e-07, 8.129e-07, 8.077e-07, 8.026e-07, 6.918e-07, 5.176e-07,
868 3.865e-07, 2.885e-07, 2.156e-07, 1.619e-07, 1.219e-07, 9.161e-08,
869 6.972e-08, 5.399e-08, 3.498e-08, 2.111e-08, 1.322e-08, 8.482e-09,
870 5.527e-09, 3.423e-09, 2.071e-09, 1.314e-09, 8.529e-10, 5.503e-10,
871 3.665e-10
872 };
873
874 static const double ocs[121] = {
875 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 6e-10, 5.997e-10,
876 5.989e-10, 5.881e-10, 5.765e-10, 5.433e-10, 5.074e-10, 4.567e-10,
877 4.067e-10, 3.601e-10, 3.093e-10, 2.619e-10, 2.232e-10, 1.805e-10,
878 1.46e-10, 1.187e-10, 8.03e-11, 5.435e-11, 3.686e-11, 2.217e-11,
879 1.341e-11, 8.756e-12, 4.511e-12, 2.37e-12, 1.264e-12, 8.28e-13,
880 5.263e-13, 3.209e-13, 1.717e-13, 9.068e-14, 4.709e-14, 2.389e-14,
881 1.236e-14, 1.127e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
882 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
883 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
884 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
885 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
886 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
887 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
888 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
889 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
890 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
891 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
892 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
893 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14, 1.091e-14,
894 1.091e-14, 1.091e-14, 1.091e-14
895 };
896
897 static const double sf6[121] = {
898 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12, 4.103e-12,
899 4.103e-12, 4.103e-12, 4.103e-12, 4.087e-12, 4.064e-12, 4.023e-12,
900 3.988e-12, 3.941e-12, 3.884e-12, 3.755e-12, 3.622e-12, 3.484e-12,
901 3.32e-12, 3.144e-12, 2.978e-12, 2.811e-12, 2.653e-12, 2.489e-12,
902 2.332e-12, 2.199e-12, 2.089e-12, 2.013e-12, 1.953e-12, 1.898e-12,
903 1.859e-12, 1.826e-12, 1.798e-12, 1.776e-12, 1.757e-12, 1.742e-12,
904 1.728e-12, 1.717e-12, 1.707e-12, 1.698e-12, 1.691e-12, 1.685e-12,
905 1.679e-12, 1.675e-12, 1.671e-12, 1.668e-12, 1.665e-12, 1.663e-12,
906 1.661e-12, 1.659e-12, 1.658e-12, 1.657e-12, 1.656e-12, 1.655e-12,
907 1.654e-12, 1.653e-12, 1.653e-12, 1.652e-12, 1.652e-12, 1.652e-12,
908 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12, 1.651e-12,
909 1.651e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
910 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
911 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
912 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
913 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
914 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
915 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12,
916 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12, 1.65e-12
917 };
918
919 static const double so2[121] = {
920 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10, 1e-10,
921 1e-10, 1e-10, 9.867e-11, 9.537e-11, 9e-11, 8.404e-11, 7.799e-11,
922 7.205e-11, 6.616e-11, 6.036e-11, 5.475e-11, 5.007e-11, 4.638e-11,
923 4.346e-11, 4.055e-11, 3.763e-11, 3.471e-11, 3.186e-11, 2.905e-11,
924 2.631e-11, 2.358e-11, 2.415e-11, 2.949e-11, 3.952e-11, 5.155e-11,
925 6.76e-11, 8.741e-11, 1.099e-10, 1.278e-10, 1.414e-10, 1.512e-10,
926 1.607e-10, 1.699e-10, 1.774e-10, 1.832e-10, 1.871e-10, 1.907e-10,
927 1.943e-10, 1.974e-10, 1.993e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
928 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
929 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
930 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
931 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
932 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
933 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10,
934 2e-10, 2e-10, 2e-10, 2e-10, 2e-10, 2e-10
935 };
936
937 const double *q[NG] = { NULL };
938
939 /* Identify variable... */
940 for (int ig = 0; ig < ctl->ng; ig++) {
941 q[ig] = NULL;
942 if (strcasecmp(ctl->emitter[ig], "C2H2") == 0)
943 q[ig] = c2h2;
944 if (strcasecmp(ctl->emitter[ig], "C2H6") == 0)
945 q[ig] = c2h6;
946 if (strcasecmp(ctl->emitter[ig], "CCl4") == 0)
947 q[ig] = ccl4;
948 if (strcasecmp(ctl->emitter[ig], "CH3OH") == 0)
949 q[ig] = ch3oh;
950 if (strcasecmp(ctl->emitter[ig], "CH4") == 0)
951 q[ig] = ch4;
952 if (strcasecmp(ctl->emitter[ig], "ClO") == 0)
953 q[ig] = clo;
954 if (strcasecmp(ctl->emitter[ig], "ClONO2") == 0)
955 q[ig] = clono2;
956 if (strcasecmp(ctl->emitter[ig], "CO") == 0)
957 q[ig] = co;
958 if (strcasecmp(ctl->emitter[ig], "COF2") == 0)
959 q[ig] = cof2;
960 if (strcasecmp(ctl->emitter[ig], "F11") == 0)
961 q[ig] = f11;
962 if (strcasecmp(ctl->emitter[ig], "F113") == 0)
963 q[ig] = f113;
964 if (strcasecmp(ctl->emitter[ig], "F114") == 0)
965 q[ig] = f114;
966 if (strcasecmp(ctl->emitter[ig], "F12") == 0)
967 q[ig] = f12;
968 if (strcasecmp(ctl->emitter[ig], "F14") == 0)
969 q[ig] = f14;
970 if (strcasecmp(ctl->emitter[ig], "F22") == 0)
971 q[ig] = f22;
972 if (strcasecmp(ctl->emitter[ig], "H2CO") == 0)
973 q[ig] = h2co;
974 if (strcasecmp(ctl->emitter[ig], "H2O") == 0)
975 q[ig] = h2o;
976 if (strcasecmp(ctl->emitter[ig], "H2O2") == 0)
977 q[ig] = h2o2;
978 if (strcasecmp(ctl->emitter[ig], "HCl") == 0)
979 q[ig] = hcl;
980 if (strcasecmp(ctl->emitter[ig], "HCN") == 0)
981 q[ig] = hcn;
982 if (strcasecmp(ctl->emitter[ig], "HF") == 0)
983 q[ig] = hf;
984 if (strcasecmp(ctl->emitter[ig], "HNO3") == 0)
985 q[ig] = hno3;
986 if (strcasecmp(ctl->emitter[ig], "HNO4") == 0)
987 q[ig] = hno4;
988 if (strcasecmp(ctl->emitter[ig], "HOCl") == 0)
989 q[ig] = hocl;
990 if (strcasecmp(ctl->emitter[ig], "N2O") == 0)
991 q[ig] = n2o;
992 if (strcasecmp(ctl->emitter[ig], "N2O5") == 0)
993 q[ig] = n2o5;
994 if (strcasecmp(ctl->emitter[ig], "NH3") == 0)
995 q[ig] = nh3;
996 if (strcasecmp(ctl->emitter[ig], "NO") == 0)
997 q[ig] = no;
998 if (strcasecmp(ctl->emitter[ig], "NO2") == 0)
999 q[ig] = no2;
1000 if (strcasecmp(ctl->emitter[ig], "O3") == 0)
1001 q[ig] = o3;
1002 if (strcasecmp(ctl->emitter[ig], "OCS") == 0)
1003 q[ig] = ocs;
1004 if (strcasecmp(ctl->emitter[ig], "SF6") == 0)
1005 q[ig] = sf6;
1006 if (strcasecmp(ctl->emitter[ig], "SO2") == 0)
1007 q[ig] = so2;
1008 }
1009
1010 /* Loop over atmospheric data points... */
1011 for (int ip = 0; ip < atm->np; ip++) {
1012
1013 /* Get altitude index... */
1014 const int iz = locate_reg(z, 121, atm->z[ip]);
1015
1016 /* Interpolate pressure... */
1017 atm->p[ip] = LOGY(z[iz], pre[iz], z[iz + 1], pre[iz + 1], atm->z[ip]);
1018
1019 /* Interpolate temperature... */
1020 atm->t[ip] = LIN(z[iz], tem[iz], z[iz + 1], tem[iz + 1], atm->z[ip]);
1021
1022 /* Interpolate trace gases... */
1023 for (int ig = 0; ig < ctl->ng; ig++)
1024 if (q[ig] != NULL)
1025 atm->q[ig][ip] =
1026 LIN(z[iz], q[ig][iz], z[iz + 1], q[ig][iz + 1], atm->z[ip]);
1027 else
1028 atm->q[ig][ip] = 0;
1029
1030 /* Set CO2... */
1031 if (ctl->ig_co2 >= 0)
1032 atm->q[ctl->ig_co2][ip] =
1033 371.789948e-6 + 2.026214e-6 * (atm->time[ip] - 63158400.) / 31557600.;
1034
1035 /* Set N2... */
1036 if (ctl->ig_n2 >= 0)
1037 atm->q[ctl->ig_n2][ip] = N2;
1038
1039 /* Set O2... */
1040 if (ctl->ig_o2 >= 0)
1041 atm->q[ctl->ig_o2][ip] = O2;
1042
1043 /* Set extinction to zero... */
1044 for (int iw = 0; iw < ctl->nw; iw++)
1045 atm->k[iw][ip] = 0;
1046
1047 /* Set cloud layer... */
1048 atm->clz = atm->cldz = 0;
1049 for (int icl = 0; icl < ctl->ncl; icl++)
1050 atm->clk[icl] = 0;
1051
1052 /* Set surface layer... */
1053 atm->sfz = atm->sfp = atm->sft = 0;
1054 for (int isf = 0; isf < ctl->nsf; isf++)
1055 atm->sfeps[isf] = 1;
1056 }
1057}
int locate_reg(const double *xx, const int n, const double x)
Find array index for regular grid.
Definition: jurassic.c:4271
#define O2
Oxygen concentration.
Definition: jurassic.h:305
#define LOGY(x0, y0, x1, y1, x)
Compute logarithmic interpolation in y.
Definition: jurassic.h:175
#define NG
Maximum number of emitters.
Definition: jurassic.h:369
#define N2
Nitrogen concentration.
Definition: jurassic.h:300
int ig_co2
Emitter index of CO2.
Definition: jurassic.h:556
int ig_o2
Emitter index of O2.
Definition: jurassic.h:565
int ig_n2
Emitter index of N2.
Definition: jurassic.h:562
char emitter[NG][LEN]
Name of each emitter.
Definition: jurassic.h:553
Here is the call graph for this function:

◆ ctmco2()

double ctmco2 ( const double  nu,
const double  p,
const double  t,
const double  u 
)

Compute carbon dioxide continuum (optical depth).

Definition at line 1061 of file jurassic.c.

1065 {
1066
1067 static const double co2296[2001] =
1068 { 9.3388e-5, 9.7711e-5, 1.0224e-4, 1.0697e-4,
1069 1.1193e-4, 1.1712e-4, 1.2255e-4, 1.2824e-4, 1.3419e-4, 1.4043e-4,
1070 1.4695e-4, 1.5378e-4, 1.6094e-4, 1.6842e-4, 1.7626e-4, 1.8447e-4,
1071 1.9307e-4, 2.0207e-4, 2.1149e-4, 2.2136e-4, 2.3169e-4, 2.4251e-4,
1072 2.5384e-4, 2.657e-4, 2.7813e-4, 2.9114e-4, 3.0477e-4, 3.1904e-4,
1073 3.3399e-4, 3.4965e-4, 3.6604e-4, 3.8322e-4, 4.0121e-4, 4.2006e-4,
1074 4.398e-4, 4.6047e-4, 4.8214e-4, 5.0483e-4, 5.286e-4, 5.535e-4,
1075 5.7959e-4, 6.0693e-4, 6.3557e-4, 6.6558e-4, 6.9702e-4, 7.2996e-4,
1076 7.6449e-4, 8.0066e-4, 8.3856e-4, 8.7829e-4, 9.1991e-4, 9.6354e-4,
1077 .0010093, .0010572, .0011074, .00116, .0012152, .001273,
1078 .0013336, .0013972, .0014638, .0015336, .0016068, .0016835,
1079 .001764, .0018483, .0019367, .0020295, .0021267, .0022286,
1080 .0023355, .0024476, .0025652, .0026885, .0028178, .0029534,
1081 .0030956, .0032448, .0034012, .0035654, .0037375, .0039181,
1082 .0041076, .0043063, .0045148, .0047336, .0049632, .005204,
1083 .0054567, .0057219, .0060002, .0062923, .0065988, .0069204,
1084 .007258, .0076123, .0079842, .0083746, .0087844, .0092146,
1085 .0096663, .01014, .010638, .011161, .01171, .012286, .012891,
1086 .013527, .014194, .014895, .015631, .016404, .017217, .01807,
1087 .018966, .019908, .020897, .021936, .023028, .024176, .025382,
1088 .026649, .027981, .02938, .030851, .032397, .034023, .035732,
1089 .037528, .039416, .041402, .04349, .045685, .047994, .050422,
1090 .052975, .055661, .058486, .061458, .064584, .067873, .071334,
1091 .074975, .078807, .082839, .087082, .091549, .096249, .1012,
1092 .10641, .11189, .11767, .12375, .13015, .13689, .14399, .15147,
1093 .15935, .16765, .17639, .18561, .19531, .20554, .21632, .22769,
1094 .23967, .25229, .2656, .27964, .29443, .31004, .3265, .34386,
1095 .36218, .3815, .40188, .42339, .44609, .47004, .49533, .52202,
1096 .5502, .57995, .61137, .64455, .6796, .71663, .75574, .79707,
1097 .84075, .88691, .9357, .98728, 1.0418, 1.0995, 1.1605, 1.225,
1098 1.2932, 1.3654, 1.4418, 1.5227, 1.6083, 1.6989, 1.7948, 1.8964,
1099 2.004, 2.118, 2.2388, 2.3668, 2.5025, 2.6463, 2.7988, 2.9606,
1100 3.1321, 3.314, 3.5071, 3.712, 3.9296, 4.1605, 4.4058, 4.6663,
1101 4.9431, 5.2374, 5.5501, 5.8818, 6.2353, 6.6114, 7.0115, 7.4372,
1102 7.8905, 8.3731, 8.8871, 9.4349, 10.019, 10.641, 11.305, 12.013,
1103 12.769, 13.576, 14.437, 15.358, 16.342, 17.39, 18.513, 19.716,
1104 21.003, 22.379, 23.854, 25.436, 27.126, 28.942, 30.89, 32.973,
1105 35.219, 37.634, 40.224, 43.021, 46.037, 49.29, 52.803, 56.447,
1106 60.418, 64.792, 69.526, 74.637, 80.182, 86.193, 92.713, 99.786,
1107 107.47, 115.84, 124.94, 134.86, 145.69, 157.49, 170.3, 184.39,
1108 199.83, 216.4, 234.55, 254.72, 276.82, 299.85, 326.16, 354.99,
1109 386.51, 416.68, 449.89, 490.12, 534.35, 578.25, 632.26, 692.61,
1110 756.43, 834.75, 924.11, 1016.9, 996.96, 1102.7, 1219.2, 1351.9,
1111 1494.3, 1654.1, 1826.5, 2027.9, 2249., 2453.8, 2714.4, 2999.4,
1112 3209.5, 3509., 3840.4, 3907.5, 4190.7, 4533.5, 4648.3, 5059.1,
1113 5561.6, 6191.4, 6820.8, 7905.9, 9362.2, 2431.3, 2211.3, 2046.8,
1114 2023.8, 1985.9, 1905.9, 1491.1, 1369.8, 1262.2, 1200.7, 887.74,
1115 820.25, 885.23, 887.21, 816.73, 1126.9, 1216.2, 1272.4, 1579.5,
1116 1634.2, 1656.3, 1657.9, 1789.5, 1670.8, 1509.5, 8474.6, 7489.2,
1117 6793.6, 6117., 5574.1, 5141.2, 5084.6, 4745.1, 4413.2, 4102.8,
1118 4024.7, 3715., 3398.6, 3100.8, 2900.4, 2629.2, 2374., 2144.7,
1119 1955.8, 1760.8, 1591.2, 1435.2, 1296.2, 1174., 1065.1, 967.76,
1120 999.48, 897.45, 809.23, 732.77, 670.26, 611.93, 560.11, 518.77,
1121 476.84, 438.8, 408.48, 380.21, 349.24, 322.71, 296.65, 272.85,
1122 251.96, 232.04, 213.88, 197.69, 182.41, 168.41, 155.79, 144.05,
1123 133.31, 123.48, 114.5, 106.21, 98.591, 91.612, 85.156, 79.204,
1124 73.719, 68.666, 63.975, 59.637, 56.35, 52.545, 49.042, 45.788,
1125 42.78, 39.992, 37.441, 35.037, 32.8, 30.744, 28.801, 26.986,
1126 25.297, 23.731, 22.258, 20.883, 19.603, 18.403, 17.295, 16.249,
1127 15.271, 14.356, 13.501, 12.701, 11.954, 11.254, 10.6, 9.9864,
1128 9.4118, 8.8745, 8.3714, 7.8997, 7.4578, 7.0446, 6.6573, 6.2949,
1129 5.9577, 5.6395, 5.3419, 5.063, 4.8037, 4.5608, 4.3452, 4.1364,
1130 3.9413, 3.7394, 3.562, 3.3932, 3.2325, 3.0789, 2.9318, 2.7898,
1131 2.6537, 2.5225, 2.3958, 2.2305, 2.1215, 2.0245, 1.9427, 1.8795,
1132 1.8336, 1.7604, 1.7016, 1.6419, 1.5282, 1.4611, 1.3443, 1.27,
1133 1.1675, 1.0824, 1.0534, .99833, .95854, .92981, .90887, .89346,
1134 .88113, .87068, .86102, .85096, .88262, .86151, .83565, .80518,
1135 .77045, .73736, .74744, .74954, .75773, .82267, .83493, .89402,
1136 .89725, .93426, .95564, .94045, .94174, .93404, .92035, .90456,
1137 .88621, .86673, .78117, .7515, .72056, .68822, .65658, .62764,
1138 .55984, .55598, .57407, .60963, .63763, .66198, .61132, .60972,
1139 .52496, .50649, .41872, .3964, .32422, .27276, .24048, .23772,
1140 .2286, .22711, .23999, .32038, .34371, .36621, .38561, .39953,
1141 .40636, .44913, .42716, .3919, .35477, .33935, .3351, .39746,
1142 .40993, .49398, .49956, .56157, .54742, .57295, .57386, .55417,
1143 .50745, .471, .43446, .39102, .34993, .31269, .27888, .24912,
1144 .22291, .19994, .17972, .16197, .14633, .13252, .12029, .10942,
1145 .099745, .091118, .083404, .076494, .070292, .064716, .059697,
1146 .055173, .051093, .047411, .044089, .041092, .038392, .035965,
1147 .033789, .031846, .030122, .028607, .02729, .026169, .025209,
1148 .024405, .023766, .023288, .022925, .022716, .022681, .022685,
1149 .022768, .023133, .023325, .023486, .024004, .024126, .024083,
1150 .023785, .024023, .023029, .021649, .021108, .019454, .017809,
1151 .017292, .016635, .017037, .018068, .018977, .018756, .017847,
1152 .016557, .016142, .014459, .012869, .012381, .010875, .0098701,
1153 .009285, .0091698, .0091701, .0096145, .010553, .01106, .012613,
1154 .014362, .015017, .016507, .017741, .01768, .017784, .0171,
1155 .016357, .016172, .017257, .018978, .020935, .021741, .023567,
1156 .025183, .025589, .026732, .027648, .028278, .028215, .02856,
1157 .029015, .029062, .028851, .028497, .027825, .027801, .026523,
1158 .02487, .022967, .022168, .020194, .018605, .017903, .018439,
1159 .019697, .020311, .020855, .020057, .018608, .016738, .015963,
1160 .013844, .011801, .011134, .0097573, .0086007, .0086226,
1161 .0083721, .0090978, .0097616, .0098426, .011317, .012853, .01447,
1162 .014657, .015771, .016351, .016079, .014829, .013431, .013185,
1163 .013207, .01448, .016176, .017971, .018265, .019526, .020455,
1164 .019797, .019802, .0194, .018176, .017505, .016197, .015339,
1165 .014401, .013213, .012203, .011186, .010236, .0093288, .0084854,
1166 .0076837, .0069375, .0062614, .0056628, .0051153, .0046015,
1167 .0041501, .003752, .0033996, .0030865, .0028077, .0025586,
1168 .0023355, .0021353, .0019553, .0017931, .0016466, .0015141,
1169 .0013941, .0012852, .0011862, .0010962, .0010142, 9.3935e-4,
1170 8.71e-4, 8.0851e-4, 7.5132e-4, 6.9894e-4, 6.5093e-4, 6.0689e-4,
1171 5.6647e-4, 5.2935e-4, 4.9525e-4, 4.6391e-4, 4.3509e-4, 4.086e-4,
1172 3.8424e-4, 3.6185e-4, 3.4126e-4, 3.2235e-4, 3.0498e-4, 2.8904e-4,
1173 2.7444e-4, 2.6106e-4, 2.4883e-4, 2.3766e-4, 2.275e-4, 2.1827e-4,
1174 2.0992e-4, 2.0239e-4, 1.9563e-4, 1.896e-4, 1.8427e-4, 1.796e-4,
1175 1.7555e-4, 1.7209e-4, 1.692e-4, 1.6687e-4, 1.6505e-4, 1.6375e-4,
1176 1.6294e-4, 1.6261e-4, 1.6274e-4, 1.6334e-4, 1.6438e-4, 1.6587e-4,
1177 1.678e-4, 1.7017e-4, 1.7297e-4, 1.762e-4, 1.7988e-4, 1.8399e-4,
1178 1.8855e-4, 1.9355e-4, 1.9902e-4, 2.0494e-4, 2.1134e-4, 2.1823e-4,
1179 2.2561e-4, 2.335e-4, 2.4192e-4, 2.5088e-4, 2.604e-4, 2.705e-4,
1180 2.8119e-4, 2.9251e-4, 3.0447e-4, 3.171e-4, 3.3042e-4, 3.4447e-4,
1181 3.5927e-4, 3.7486e-4, 3.9127e-4, 4.0854e-4, 4.267e-4, 4.4579e-4,
1182 4.6586e-4, 4.8696e-4, 5.0912e-4, 5.324e-4, 5.5685e-4, 5.8253e-4,
1183 6.0949e-4, 6.378e-4, 6.6753e-4, 6.9873e-4, 7.3149e-4, 7.6588e-4,
1184 8.0198e-4, 8.3987e-4, 8.7964e-4, 9.2139e-4, 9.6522e-4, .0010112,
1185 .0010595, .0011102, .0011634, .0012193, .001278, .0013396,
1186 .0014043, .0014722, .0015436, .0016185, .0016972, .0017799,
1187 .0018668, .001958, .0020539, .0021547, .0022606, .0023719,
1188 .002489, .002612, .0027414, .0028775, .0030206, .0031712,
1189 .0033295, .0034962, .0036716, .0038563, .0040506, .0042553,
1190 .0044709, .004698, .0049373, .0051894, .0054552, .0057354,
1191 .006031, .0063427, .0066717, .0070188, .0073854, .0077726,
1192 .0081816, .0086138, .0090709, .0095543, .010066, .010607,
1193 .011181, .011789, .012433, .013116, .013842, .014613, .015432,
1194 .016304, .017233, .018224, .019281, .020394, .021574, .022836,
1195 .024181, .025594, .027088, .028707, .030401, .032245, .034219,
1196 .036262, .038539, .040987, .043578, .04641, .04949, .052726,
1197 .056326, .0602, .064093, .068521, .073278, .077734, .083064,
1198 .088731, .093885, .1003, .1072, .11365, .12187, .13078, .13989,
1199 .15095, .16299, .17634, .19116, .20628, .22419, .24386, .26587,
1200 .28811, .31399, .34321, .36606, .39675, .42742, .44243, .47197,
1201 .49993, .49027, .51147, .52803, .48931, .49729, .5026, .43854,
1202 .441, .44766, .43414, .46151, .50029, .55247, .43855, .32115,
1203 .32607, .3431, .36119, .38029, .41179, .43996, .47144, .51853,
1204 .55362, .59122, .66338, .69877, .74001, .82923, .86907, .90361,
1205 1.0025, 1.031, 1.0559, 1.104, 1.1178, 1.1341, 1.1547, 1.351,
1206 1.4772, 1.4812, 1.4907, 1.512, 1.5442, 1.5853, 1.6358, 1.6963,
1207 1.7674, 1.8474, 1.9353, 2.0335, 2.143, 2.2592, 2.3853, 2.5217,
1208 2.6686, 2.8273, 2.9998, 3.183, 3.3868, 3.6109, 3.8564, 4.1159,
1209 4.4079, 4.7278, 5.0497, 5.3695, 5.758, 6.0834, 6.4976, 6.9312,
1210 7.38, 7.5746, 7.9833, 8.3791, 8.3956, 8.7501, 9.1067, 9.072,
1211 9.4649, 9.9112, 10.402, 10.829, 11.605, 12.54, 12.713, 10.443,
1212 10.825, 11.375, 11.955, 12.623, 13.326, 14.101, 15.041, 15.547,
1213 16.461, 17.439, 18.716, 19.84, 21.036, 22.642, 23.901, 25.244,
1214 27.03, 28.411, 29.871, 31.403, 33.147, 34.744, 36.456, 39.239,
1215 43.605, 45.162, 47.004, 49.093, 51.391, 53.946, 56.673, 59.629,
1216 63.167, 66.576, 70.254, 74.222, 78.477, 83.034, 87.914, 93.18,
1217 98.77, 104.74, 111.15, 117.95, 125.23, 133.01, 141.33, 150.21,
1218 159.71, 169.89, 180.93, 192.54, 204.99, 218.34, 232.65, 248.,
1219 264.47, 282.14, 301.13, 321.53, 343.48, 367.08, 392.5, 419.88,
1220 449.4, 481.26, 515.64, 552.79, 592.99, 636.48, 683.61, 734.65,
1221 789.99, 850.02, 915.14, 985.81, 1062.5, 1147.1, 1237.8, 1336.4,
1222 1443.2, 1558.9, 1684.2, 1819.2, 1965.2, 2122.6, 2291.7, 2470.8,
1223 2665.7, 2874.9, 3099.4, 3337.9, 3541., 3813.3, 4111.9, 4439.3,
1224 4798.9, 5196., 5639.2, 6087.5, 6657.7, 7306.7, 8040.7, 8845.5,
1225 9702.2, 10670., 11739., 12842., 14141., 15498., 17068., 18729.,
1226 20557., 22559., 25248., 27664., 30207., 32915., 35611., 38081.,
1227 40715., 43191., 41651., 42750., 43785., 44353., 44366., 44189.,
1228 43618., 42862., 41878., 35133., 35215., 36383., 39420., 44055.,
1229 44155., 45850., 46853., 39197., 38274., 29942., 28553., 21792.,
1230 21228., 17106., 14955., 18181., 19557., 21427., 23728., 26301.,
1231 28584., 30775., 32536., 33867., 40089., 39204., 37329., 34452.,
1232 31373., 33921., 34800., 36043., 44415., 45162., 52181., 50895.,
1233 54140., 50840., 50468., 48302., 44915., 40910., 36754., 32755.,
1234 29093., 25860., 22962., 20448., 18247., 16326., 14645., 13165.,
1235 11861., 10708., 9686.9, 8779.7, 7971.9, 7250.8, 6605.7, 6027.2,
1236 5507.3, 5039.1, 4616.6, 4234.8, 3889., 3575.4, 3290.5, 3031.3,
1237 2795.2, 2579.9, 2383.1, 2203.3, 2038.6, 1887.6, 1749.1, 1621.9,
1238 1505., 1397.4, 1298.3, 1207., 1122.8, 1045., 973.1, 906.64,
1239 845.16, 788.22, 735.48, 686.57, 641.21, 599.1, 559.99, 523.64,
1240 489.85, 458.42, 429.16, 401.92, 376.54, 352.88, 330.82, 310.24,
1241 291.03, 273.09, 256.34, 240.69, 226.05, 212.37, 199.57, 187.59,
1242 176.37, 165.87, 156.03, 146.82, 138.17, 130.07, 122.47, 115.34,
1243 108.65, 102.37, 96.473, 90.934, 85.73, 80.84, 76.243, 71.922,
1244 67.858, 64.034, 60.438, 57.052, 53.866, 50.866, 48.04, 45.379,
1245 42.872, 40.51, 38.285, 36.188, 34.211, 32.347, 30.588, 28.929,
1246 27.362, 25.884, 24.489, 23.171, 21.929, 20.755, 19.646, 18.599,
1247 17.61, 16.677, 15.795, 14.961, 14.174, 13.43, 12.725, 12.06,
1248 11.431, 10.834, 10.27, 9.7361, 9.2302, 8.7518, 8.2997, 7.8724,
1249 7.4674, 7.0848, 6.7226, 6.3794, 6.054, 5.745, 5.4525, 5.1752,
1250 4.9121, 4.6625, 4.4259, 4.2015, 3.9888, 3.7872, 3.5961, 3.4149,
1251 3.2431, 3.0802, 2.9257, 2.7792, 2.6402, 2.5084, 2.3834, 2.2648,
1252 2.1522, 2.0455, 1.9441, 1.848, 1.7567, 1.6701, 1.5878, 1.5097,
1253 1.4356, 1.3651, 1.2981, 1.2345, 1.174, 1.1167, 1.062, 1.0101,
1254 .96087, .91414, .86986, .82781, .78777, .74971, .71339, .67882,
1255 .64604, .61473, .58507, .55676, .52987, .5044, .48014, .45715,
1256 .43527, .41453, .3948, .37609, .35831, .34142, .32524, .30995,
1257 .29536, .28142, .26807, .25527, .24311, .23166, .22077, .21053,
1258 .20081, .19143, .18261, .17407, .16603, .15833, .15089, .14385,
1259 .13707, .13065, .12449, .11865, .11306, .10774, .10266, .097818,
1260 .093203, .088815, .084641, .080671, .076892, .073296, .069873,
1261 .066613, .06351, .060555, .05774, .055058, .052504, .050071,
1262 .047752, .045543, .043438, .041432, .039521, .037699, .035962,
1263 .034307, .032729, .031225, .029791, .028423, .02712, .025877,
1264 .024692, .023563, .022485, .021458, .020478, .019543, .018652,
1265 .017802, .016992, .016219, .015481, .014778, .014107, .013467,
1266 .012856, .012274, .011718, .011188, .010682, .0102, .0097393,
1267 .0093001, .008881, .0084812, .0080997, .0077358, .0073885,
1268 .0070571, .0067409, .0064393, .0061514, .0058768, .0056147,
1269 .0053647, .0051262, .0048987, .0046816, .0044745, .0042769,
1270 .0040884, .0039088, .0037373, .0035739, .003418, .0032693,
1271 .0031277, .0029926, .0028639, .0027413, .0026245, .0025133,
1272 .0024074, .0023066, .0022108, .0021196, .002033, .0019507,
1273 .0018726, .0017985, .0017282, .0016617, .0015988, .0015394,
1274 .0014834, .0014306, .0013811, .0013346, .0012911, .0012506,
1275 .0012131, .0011784, .0011465, .0011175, .0010912, .0010678,
1276 .0010472, .0010295, .0010147, .001003, 9.9428e-4, 9.8883e-4,
1277 9.8673e-4, 9.8821e-4, 9.9343e-4, .0010027, .0010164, .0010348,
1278 .0010586, .0010882, .0011245, .0011685, .0012145, .0012666,
1279 .0013095, .0013688, .0014048, .0014663, .0015309, .0015499,
1280 .0016144, .0016312, .001705, .0017892, .0018499, .0019715,
1281 .0021102, .0022442, .0024284, .0025893, .0027703, .0029445,
1282 .0031193, .003346, .0034552, .0036906, .0037584, .0040084,
1283 .0041934, .0044587, .0047093, .0049759, .0053421, .0055134,
1284 .0059048, .0058663, .0061036, .0063259, .0059657, .0060653,
1285 .0060972, .0055539, .0055653, .0055772, .005331, .0054953,
1286 .0055919, .0058684, .006183, .0066675, .0069808, .0075142,
1287 .0078536, .0084282, .0089454, .0094625, .0093703, .0095857,
1288 .0099283, .010063, .010521, .0097778, .0098175, .010379, .010447,
1289 .0105, .010617, .010706, .01078, .011177, .011212, .011304,
1290 .011446, .011603, .011816, .012165, .012545, .013069, .013539,
1291 .01411, .014776, .016103, .017016, .017994, .018978, .01998,
1292 .021799, .022745, .023681, .024627, .025562, .026992, .027958,
1293 .029013, .030154, .031402, .03228, .033651, .035272, .037088,
1294 .039021, .041213, .043597, .045977, .04877, .051809, .054943,
1295 .058064, .061528, .06537, .069309, .071928, .075752, .079589,
1296 .083352, .084096, .087497, .090817, .091198, .094966, .099045,
1297 .10429, .10867, .11518, .12269, .13126, .14087, .15161, .16388,
1298 .16423, .1759, .18721, .19994, .21275, .22513, .23041, .24231,
1299 .25299, .25396, .26396, .27696, .27929, .2908, .30595, .31433,
1300 .3282, .3429, .35944, .37467, .39277, .41245, .43326, .45649,
1301 .48152, .51897, .54686, .57877, .61263, .64962, .68983, .73945,
1302 .78619, .83537, .89622, .95002, 1.0067, 1.0742, 1.1355, 1.2007,
1303 1.2738, 1.347, 1.4254, 1.5094, 1.6009, 1.6976, 1.8019, 1.9148,
1304 2.0357, 2.166, 2.3066, 2.4579, 2.6208, 2.7966, 2.986, 3.188,
1305 3.4081, 3.6456, 3.9, 4.1747, 4.4712, 4.7931, 5.1359, 5.5097,
1306 5.9117, 6.3435, 6.8003, 7.3001, 7.8385, 8.3945, 9.011, 9.6869,
1307 10.392, 11.18, 12.036, 12.938, 13.944, 14.881, 16.029, 17.255,
1308 18.574, 19.945, 21.38, 22.9, 24.477, 26.128, 27.87, 29.037,
1309 30.988, 33.145, 35.506, 37.76, 40.885, 44.487, 48.505, 52.911,
1310 57.56, 61.964, 67.217, 72.26, 78.343, 85.08, 91.867, 99.435,
1311 107.68, 116.97, 127.12, 138.32, 150.26, 163.04, 174.81, 189.26,
1312 205.61, 224.68, 240.98, 261.88, 285.1, 307.58, 334.35, 363.53,
1313 394.68, 427.85, 458.85, 489.25, 472.87, 486.93, 496.27, 501.52,
1314 501.57, 497.14, 488.09, 476.32, 393.76, 388.51, 393.42, 414.45,
1315 455.12, 514.62, 520.38, 547.42, 562.6, 487.47, 480.83, 391.06,
1316 376.92, 303.7, 295.91, 256.03, 236.73, 280.38, 310.71, 335.53,
1317 367.88, 401.94, 435.52, 469.13, 497.94, 588.82, 597.94, 597.2,
1318 588.28, 571.2, 555.75, 603.56, 638.15, 680.75, 801.72, 848.01,
1319 962.15, 990.06, 1068.1, 1076.2, 1115.3, 1134.2, 1136.6, 1119.1,
1320 1108.9, 1090.6, 1068.7, 1041.9, 1005.4, 967.98, 927.08, 780.1,
1321 751.41, 733.12, 742.65, 785.56, 855.16, 852.45, 878.1, 784.59,
1322 777.81, 765.13, 622.93, 498.09, 474.89, 386.9, 378.48, 336.17,
1323 322.04, 329.57, 350.5, 383.38, 420.02, 462.39, 499.71, 531.98,
1324 654.99, 653.43, 639.99, 605.16, 554.16, 504.42, 540.64, 552.33,
1325 679.46, 699.51, 713.91, 832.17, 919.91, 884.96, 907.57, 846.56,
1326 818.56, 768.93, 706.71, 642.17, 575.95, 515.38, 459.07, 409.02,
1327 364.61, 325.46, 291.1, 260.89, 234.39, 211.01, 190.38, 172.11,
1328 155.91, 141.49, 128.63, 117.13, 106.84, 97.584, 89.262, 81.756,
1329 74.975, 68.842, 63.28, 58.232, 53.641, 49.46, 45.649, 42.168,
1330 38.991, 36.078, 33.409, 30.96, 28.71, 26.642, 24.737, 22.985,
1331 21.37, 19.882, 18.512, 17.242, 16.073, 14.987, 13.984, 13.05,
1332 12.186, 11.384, 10.637, 9.9436, 9.2988, 8.6991, 8.141, 7.6215,
1333 7.1378, 6.6872, 6.2671, 5.8754, 5.51, 5.1691, 4.851, 4.5539,
1334 4.2764, 4.0169, 3.7742, 3.5472, 3.3348, 3.1359, 2.9495, 2.7749,
1335 2.6113, 2.4578, 2.3139, 2.1789, 2.0523, 1.9334, 1.8219, 1.7171,
1336 1.6188, 1.5263, 1.4395, 1.3579, 1.2812, 1.209, 1.1411, 1.0773,
1337 1.0171, .96048, .90713, .85684, .80959, .76495, .72282, .68309,
1338 .64563, .61035, .57707, .54573, .51622, .48834, .46199, .43709,
1339 .41359, .39129, .37034, .35064, .33198, .31442, .29784, .28218,
1340 .26732, .25337, .24017, .22774, .21601, .20479, .19426
1341 };
1342
1343 static const double co2260[2001] =
1344 { 5.7971e-5, 6.0733e-5, 6.3628e-5, 6.6662e-5,
1345 6.9843e-5, 7.3176e-5, 7.6671e-5, 8.0334e-5, 8.4175e-5, 8.8201e-5,
1346 9.2421e-5, 9.6846e-5, 1.0149e-4, 1.0635e-4, 1.1145e-4, 1.1679e-4,
1347 1.224e-4, 1.2828e-4, 1.3444e-4, 1.409e-4, 1.4768e-4, 1.5479e-4,
1348 1.6224e-4, 1.7006e-4, 1.7826e-4, 1.8685e-4, 1.9587e-4, 2.0532e-4,
1349 2.1524e-4, 2.2565e-4, 2.3656e-4, 2.48e-4, 2.6001e-4, 2.7261e-4,
1350 2.8582e-4, 2.9968e-4, 3.1422e-4, 3.2948e-4, 3.4548e-4, 3.6228e-4,
1351 3.799e-4, 3.9838e-4, 4.1778e-4, 4.3814e-4, 4.595e-4, 4.8191e-4,
1352 5.0543e-4, 5.3012e-4, 5.5603e-4, 5.8321e-4, 6.1175e-4, 6.417e-4,
1353 6.7314e-4, 7.0614e-4, 7.4078e-4, 7.7714e-4, 8.1531e-4, 8.5538e-4,
1354 8.9745e-4, 9.4162e-4, 9.8798e-4, .0010367, .0010878, .0011415,
1355 .0011978, .001257, .0013191, .0013844, .001453, .0015249,
1356 .0016006, .00168, .0017634, .001851, .001943, .0020397, .0021412,
1357 .0022479, .00236, .0024778, .0026015, .0027316, .0028682,
1358 .0030117, .0031626, .0033211, .0034877, .0036628, .0038469,
1359 .0040403, .0042436, .0044574, .004682, .0049182, .0051665,
1360 .0054276, .0057021, .0059907, .0062942, .0066133, .0069489,
1361 .0073018, .0076729, .0080632, .0084738, .0089056, .0093599,
1362 .0098377, .01034, .010869, .011426, .012011, .012627, .013276,
1363 .013958, .014676, .015431, .016226, .017063, .017944, .018872,
1364 .019848, .020876, .021958, .023098, .024298, .025561, .026892,
1365 .028293, .029769, .031323, .032961, .034686, .036503, .038418,
1366 .040435, .042561, .044801, .047161, .049649, .052271, .055035,
1367 .057948, .061019, .064256, .06767, .07127, .075066, .079069,
1368 .083291, .087744, .092441, .097396, .10262, .10814, .11396,
1369 .1201, .12658, .13342, .14064, .14826, .1563, .1648, .17376,
1370 .18323, .19324, .2038, .21496, .22674, .23919, .25234, .26624,
1371 .28093, .29646, .31287, .33021, .34855, .36794, .38844, .41012,
1372 .43305, .45731, .48297, .51011, .53884, .56924, .60141, .63547,
1373 .67152, .70969, .75012, .79292, .83826, .8863, .93718, .99111,
1374 1.0482, 1.1088, 1.173, 1.2411, 1.3133, 1.3898, 1.471, 1.5571,
1375 1.6485, 1.7455, 1.8485, 1.9577, 2.0737, 2.197, 2.3278, 2.4668,
1376 2.6145, 2.7715, 2.9383, 3.1156, 3.3042, 3.5047, 3.7181, 3.9451,
1377 4.1866, 4.4437, 4.7174, 5.0089, 5.3192, 5.65, 6.0025, 6.3782,
1378 6.7787, 7.206, 7.6617, 8.1479, 8.6669, 9.221, 9.8128, 10.445,
1379 11.12, 11.843, 12.615, 13.441, 14.325, 15.271, 16.283, 17.367,
1380 18.529, 19.776, 21.111, 22.544, 24.082, 25.731, 27.504, 29.409,
1381 31.452, 33.654, 36.024, 38.573, 41.323, 44.29, 47.492, 50.951,
1382 54.608, 58.588, 62.929, 67.629, 72.712, 78.226, 84.207, 90.699,
1383 97.749, 105.42, 113.77, 122.86, 132.78, 143.61, 155.44, 168.33,
1384 182.48, 198.01, 214.87, 233.39, 253.86, 276.34, 300.3, 327.28,
1385 356.89, 389.48, 422.29, 458.99, 501.39, 548.13, 595.62, 652.74,
1386 716.54, 784.57, 866.78, 960.59, 1062.8, 1072.5, 1189.5, 1319.4,
1387 1467.6, 1630.2, 1813.7, 2016.9, 2253., 2515.3, 2773.5, 3092.8,
1388 3444.4, 3720.4, 4104.3, 4527.5, 4645.9, 5021.7, 5462.2, 5597.,
1389 6110.6, 6732.5, 7513.8, 8270.6, 9640.6, 11487., 2796.1, 2680.1,
1390 2441.6, 2404.2, 2334.8, 2215.2, 1642.5, 1477.9, 1328.1, 1223.5,
1391 843.34, 766.96, 831.65, 834.84, 774.85, 1156.3, 1275.6, 1366.1,
1392 1795.6, 1885., 1936.5, 1953.4, 2154.4, 2002.7, 1789.8, 10381.,
1393 9040., 8216.5, 7384.7, 6721.9, 6187.7, 6143.8, 5703.9, 5276.6,
1394 4873.1, 4736., 4325.3, 3927., 3554.1, 3286.1, 2950.1, 2642.4,
1395 2368.7, 2138.9, 1914., 1719.6, 1543.9, 1388.6, 1252.1, 1132.2,
1396 1024.1, 1025.4, 920.58, 829.59, 750.54, 685.01, 624.25, 570.14,
1397 525.81, 481.85, 441.95, 408.71, 377.23, 345.86, 318.51, 292.26,
1398 268.34, 247.04, 227.14, 209.02, 192.69, 177.59, 163.78, 151.26,
1399 139.73, 129.19, 119.53, 110.7, 102.57, 95.109, 88.264, 81.948,
1400 76.13, 70.768, 65.827, 61.251, 57.022, 53.495, 49.824, 46.443,
1401 43.307, 40.405, 37.716, 35.241, 32.923, 30.77, 28.78, 26.915,
1402 25.177, 23.56, 22.059, 20.654, 19.345, 18.126, 16.988, 15.93,
1403 14.939, 14.014, 13.149, 12.343, 11.589, 10.884, 10.225, 9.6093,
1404 9.0327, 8.4934, 7.9889, 7.5166, 7.0744, 6.6604, 6.2727, 5.9098,
1405 5.5701, 5.2529, 4.955, 4.676, 4.4148, 4.171, 3.9426, 3.7332,
1406 3.5347, 3.3493, 3.1677, 3.0025, 2.8466, 2.6994, 2.5601, 2.4277,
1407 2.3016, 2.1814, 2.0664, 1.9564, 1.8279, 1.7311, 1.6427, 1.5645,
1408 1.4982, 1.443, 1.374, 1.3146, 1.2562, 1.17, 1.1105, 1.0272,
1409 .96863, .89718, .83654, .80226, .75908, .72431, .69573, .67174,
1410 .65126, .63315, .61693, .60182, .58715, .59554, .57649, .55526,
1411 .53177, .50622, .48176, .4813, .47642, .47492, .50273, .50293,
1412 .52687, .52239, .53419, .53814, .52626, .52211, .51492, .50622,
1413 .49746, .48841, .4792, .43534, .41999, .40349, .38586, .36799,
1414 .35108, .31089, .30803, .3171, .33599, .35041, .36149, .32924,
1415 .32462, .27309, .25961, .20922, .19504, .15683, .13098, .11588,
1416 .11478, .11204, .11363, .12135, .16423, .17785, .19094, .20236,
1417 .21084, .2154, .24108, .22848, .20871, .18797, .17963, .17834,
1418 .21552, .22284, .26945, .27052, .30108, .28977, .29772, .29224,
1419 .27658, .24956, .22777, .20654, .18392, .16338, .1452, .12916,
1420 .1152, .10304, .092437, .083163, .075031, .067878, .061564,
1421 .055976, .051018, .046609, .042679, .03917, .036032, .033223,
1422 .030706, .02845, .026428, .024617, .022998, .021554, .02027,
1423 .019136, .018141, .017278, .016541, .015926, .015432, .015058,
1424 .014807, .014666, .014635, .014728, .014947, .01527, .015728,
1425 .016345, .017026, .017798, .018839, .019752, .020636, .021886,
1426 .022695, .02327, .023478, .024292, .023544, .022222, .021932,
1427 .020052, .018143, .017722, .017031, .017782, .01938, .020734,
1428 .020476, .019255, .017477, .016878, .014617, .012489, .011765,
1429 .0099077, .0086446, .0079446, .0078644, .0079763, .008671,
1430 .01001, .0108, .012933, .015349, .016341, .018484, .020254,
1431 .020254, .020478, .019591, .018595, .018385, .019913, .022254,
1432 .024847, .025809, .028053, .029924, .030212, .031367, .03222,
1433 .032739, .032537, .03286, .033344, .033507, .033499, .033339,
1434 .032809, .033041, .031723, .029837, .027511, .026603, .024032,
1435 .021914, .020948, .021701, .023425, .024259, .024987, .023818,
1436 .021768, .019223, .018144, .015282, .012604, .01163, .0097907,
1437 .008336, .0082473, .0079582, .0088077, .009779, .010129, .012145,
1438 .014378, .016761, .01726, .018997, .019998, .019809, .01819,
1439 .016358, .016099, .01617, .017939, .020223, .022521, .02277,
1440 .024279, .025247, .024222, .023989, .023224, .021493, .020362,
1441 .018596, .017309, .015975, .014466, .013171, .011921, .01078,
1442 .0097229, .0087612, .0078729, .0070682, .0063494, .0057156,
1443 .0051459, .0046273, .0041712, .0037686, .0034119, .003095,
1444 .0028126, .0025603, .0023342, .0021314, .0019489, .0017845,
1445 .001636, .0015017, .00138, .0012697, .0011694, .0010782,
1446 9.9507e-4, 9.1931e-4, 8.5013e-4, 7.869e-4, 7.2907e-4, 6.7611e-4,
1447 6.2758e-4, 5.8308e-4, 5.4223e-4, 5.0473e-4, 4.7027e-4, 4.3859e-4,
1448 4.0946e-4, 3.8265e-4, 3.5798e-4, 3.3526e-4, 3.1436e-4, 2.9511e-4,
1449 2.7739e-4, 2.6109e-4, 2.4609e-4, 2.3229e-4, 2.1961e-4, 2.0797e-4,
1450 1.9729e-4, 1.875e-4, 1.7855e-4, 1.7038e-4, 1.6294e-4, 1.5619e-4,
1451 1.5007e-4, 1.4456e-4, 1.3961e-4, 1.3521e-4, 1.3131e-4, 1.2789e-4,
1452 1.2494e-4, 1.2242e-4, 1.2032e-4, 1.1863e-4, 1.1733e-4, 1.1641e-4,
1453 1.1585e-4, 1.1565e-4, 1.158e-4, 1.1629e-4, 1.1712e-4, 1.1827e-4,
1454 1.1976e-4, 1.2158e-4, 1.2373e-4, 1.262e-4, 1.2901e-4, 1.3214e-4,
1455 1.3562e-4, 1.3944e-4, 1.4361e-4, 1.4814e-4, 1.5303e-4, 1.5829e-4,
1456 1.6394e-4, 1.6999e-4, 1.7644e-4, 1.8332e-4, 1.9063e-4, 1.984e-4,
1457 2.0663e-4, 2.1536e-4, 2.246e-4, 2.3436e-4, 2.4468e-4, 2.5558e-4,
1458 2.6708e-4, 2.7921e-4, 2.92e-4, 3.0548e-4, 3.1968e-4, 3.3464e-4,
1459 3.5039e-4, 3.6698e-4, 3.8443e-4, 4.0281e-4, 4.2214e-4, 4.4248e-4,
1460 4.6389e-4, 4.864e-4, 5.1009e-4, 5.3501e-4, 5.6123e-4, 5.888e-4,
1461 6.1781e-4, 6.4833e-4, 6.8043e-4, 7.142e-4, 7.4973e-4, 7.8711e-4,
1462 8.2644e-4, 8.6783e-4, 9.1137e-4, 9.5721e-4, .0010054, .0010562,
1463 .0011096, .0011659, .0012251, .0012875, .0013532, .0014224,
1464 .0014953, .001572, .0016529, .0017381, .0018279, .0019226,
1465 .0020224, .0021277, .0022386, .0023557, .0024792, .0026095,
1466 .002747, .0028921, .0030453, .0032071, .003378, .0035586,
1467 .0037494, .003951, .0041642, .0043897, .0046282, .0048805,
1468 .0051476, .0054304, .00573, .0060473, .0063837, .0067404,
1469 .0071188, .0075203, .0079466, .0083994, .0088806, .0093922,
1470 .0099366, .010516, .011134, .011792, .012494, .013244, .014046,
1471 .014898, .015808, .016781, .017822, .018929, .020108, .02138,
1472 .022729, .02419, .02576, .027412, .029233, .031198, .033301,
1473 .035594, .038092, .040767, .04372, .046918, .050246, .053974,
1474 .058009, .061976, .066586, .071537, .076209, .081856, .087998,
1475 .093821, .10113, .10913, .11731, .12724, .13821, .15025, .1639,
1476 .17807, .19472, .21356, .23496, .25758, .28387, .31389, .34104,
1477 .37469, .40989, .43309, .46845, .5042, .5023, .52981, .55275,
1478 .51075, .51976, .52457, .44779, .44721, .4503, .4243, .45244,
1479 .49491, .55399, .39021, .24802, .2501, .2618, .27475, .28879,
1480 .31317, .33643, .36257, .4018, .43275, .46525, .53333, .56599,
1481 .60557, .70142, .74194, .77736, .88567, .91182, .93294, .98407,
1482 .98772, .99176, .9995, 1.2405, 1.3602, 1.338, 1.3255, 1.3267,
1483 1.3404, 1.3634, 1.3967, 1.4407, 1.4961, 1.5603, 1.6328, 1.7153,
1484 1.8094, 1.9091, 2.018, 2.1367, 2.264, 2.4035, 2.5562, 2.7179,
1485 2.9017, 3.1052, 3.3304, 3.5731, 3.8488, 4.1553, 4.4769, 4.7818,
1486 5.1711, 5.5204, 5.9516, 6.4097, 6.8899, 7.1118, 7.5469, 7.9735,
1487 7.9511, 8.3014, 8.6418, 8.4757, 8.8256, 9.2294, 9.6923, 10.033,
1488 10.842, 11.851, 11.78, 8.8435, 9.1381, 9.5956, 10.076, 10.629,
1489 11.22, 11.883, 12.69, 13.163, 13.974, 14.846, 16.027, 17.053,
1490 18.148, 19.715, 20.907, 22.163, 23.956, 25.235, 26.566, 27.94,
1491 29.576, 30.956, 32.432, 35.337, 39.911, 41.128, 42.625, 44.386,
1492 46.369, 48.619, 51.031, 53.674, 56.825, 59.921, 63.286, 66.929,
1493 70.859, 75.081, 79.618, 84.513, 89.739, 95.335, 101.35, 107.76,
1494 114.63, 121.98, 129.87, 138.3, 147.34, 157.04, 167.56, 178.67,
1495 190.61, 203.43, 217.19, 231.99, 247.88, 264.98, 283.37, 303.17,
1496 324.49, 347.47, 372.25, 398.98, 427.85, 459.06, 492.8, 529.31,
1497 568.89, 611.79, 658.35, 708.91, 763.87, 823.65, 888.72, 959.58,
1498 1036.8, 1121.8, 1213.9, 1314.3, 1423.8, 1543., 1672.8, 1813.4,
1499 1966.1, 2131.4, 2309.5, 2499.3, 2705., 2925.7, 3161.6, 3411.3,
1500 3611.5, 3889.2, 4191.1, 4519.3, 4877.9, 5272.9, 5712.9, 6142.7,
1501 6719.6, 7385., 8145., 8977.7, 9831.9, 10827., 11934., 13063.,
1502 14434., 15878., 17591., 19435., 21510., 23835., 26835., 29740.,
1503 32878., 36305., 39830., 43273., 46931., 50499., 49586., 51598.,
1504 53429., 54619., 55081., 55102., 54485., 53487., 52042., 42689.,
1505 42607., 44020., 47994., 54169., 53916., 55808., 56642., 46049.,
1506 44243., 32929., 30658., 21963., 20835., 15962., 13679., 17652.,
1507 19680., 22388., 25625., 29184., 32520., 35720., 38414., 40523.,
1508 49228., 48173., 45678., 41768., 37600., 41313., 42654., 44465.,
1509 55736., 56630., 65409., 63308., 66572., 61845., 60379., 56777.,
1510 51920., 46601., 41367., 36529., 32219., 28470., 25192., 22362.,
1511 19907., 17772., 15907., 14273., 12835., 11567., 10445., 9450.2,
1512 8565.1, 7776., 7070.8, 6439.2, 5872.3, 5362.4, 4903., 4488.3,
1513 4113.4, 3773.8, 3465.8, 3186.1, 2931.7, 2700.1, 2488.8, 2296.,
1514 2119.8, 1958.6, 1810.9, 1675.6, 1551.4, 1437.3, 1332.4, 1236.,
1515 1147.2, 1065.3, 989.86, 920.22, 855.91, 796.48, 741.53, 690.69,
1516 643.62, 600.02, 559.6, 522.13, 487.35, 455.06, 425.08, 397.21,
1517 371.3, 347.2, 324.78, 303.9, 284.46, 266.34, 249.45, 233.7,
1518 219.01, 205.3, 192.5, 180.55, 169.38, 158.95, 149.2, 140.07,
1519 131.54, 123.56, 116.09, 109.09, 102.54, 96.405, 90.655, 85.266,
1520 80.213, 75.475, 71.031, 66.861, 62.948, 59.275, 55.827, 52.587,
1521 49.544, 46.686, 43.998, 41.473, 39.099, 36.867, 34.768, 32.795,
1522 30.939, 29.192, 27.546, 25.998, 24.539, 23.164, 21.869, 20.65,
1523 19.501, 18.419, 17.399, 16.438, 15.532, 14.678, 13.874, 13.115,
1524 12.4, 11.726, 11.088, 10.488, 9.921, 9.3846, 8.8784, 8.3996,
1525 7.9469, 7.5197, 7.1174, 6.738, 6.379, 6.0409, 5.7213, 5.419,
1526 5.1327, 4.8611, 4.6046, 4.3617, 4.1316, 3.9138, 3.7077, 3.5125,
1527 3.3281, 3.1536, 2.9885, 2.8323, 2.6846, 2.5447, 2.4124, 2.2871,
1528 2.1686, 2.0564, 1.9501, 1.8495, 1.7543, 1.6641, 1.5787, 1.4978,
1529 1.4212, 1.3486, 1.2799, 1.2147, 1.1529, 1.0943, 1.0388, .98602,
1530 .93596, .8886, .84352, .80078, .76029, .722, .68585, .65161,
1531 .61901, .58808, .55854, .53044, .5039, .47853, .45459, .43173,
1532 .41008, .38965, .37021, .35186, .33444, .31797, .30234, .28758,
1533 .2736, .26036, .24764, .2357, .22431, .21342, .20295, .19288,
1534 .18334, .17444, .166, .15815, .15072, .14348, .13674, .13015,
1535 .12399, .11807, .11231, .10689, .10164, .096696, .091955,
1536 .087476, .083183, .079113, .075229, .071536, .068026, .064698,
1537 .06154, .058544, .055699, .052997, .050431, .047993, .045676,
1538 .043475, .041382, .039392, .037501, .035702, .033991, .032364,
1539 .030817, .029345, .027945, .026613, .025345, .024139, .022991,
1540 .021899, .02086, .019871, .018929, .018033, .01718, .016368,
1541 .015595, .014859, .014158, .013491, .012856, .012251, .011675,
1542 .011126, .010604, .010107, .0096331, .009182, .0087523, .0083431,
1543 .0079533, .0075821, .0072284, .0068915, .0065706, .0062649,
1544 .0059737, .0056963, .005432, .0051802, .0049404, .0047118,
1545 .0044941, .0042867, .0040891, .0039009, .0037216, .0035507,
1546 .003388, .0032329, .0030852, .0029445, .0028105, .0026829,
1547 .0025613, .0024455, .0023353, .0022303, .0021304, .0020353,
1548 .0019448, .0018587, .0017767, .0016988, .0016247, .0015543,
1549 .0014874, .0014238, .0013635, .0013062, .0012519, .0012005,
1550 .0011517, .0011057, .0010621, .001021, 9.8233e-4, 9.4589e-4,
1551 9.1167e-4, 8.7961e-4, 8.4964e-4, 8.2173e-4, 7.9582e-4, 7.7189e-4,
1552 7.499e-4, 7.2983e-4, 7.1167e-4, 6.9542e-4, 6.8108e-4, 6.6866e-4,
1553 6.5819e-4, 6.4971e-4, 6.4328e-4, 6.3895e-4, 6.3681e-4, 6.3697e-4,
1554 6.3956e-4, 6.4472e-4, 6.5266e-4, 6.6359e-4, 6.778e-4, 6.9563e-4,
1555 7.1749e-4, 7.4392e-4, 7.7556e-4, 8.1028e-4, 8.4994e-4, 8.8709e-4,
1556 9.3413e-4, 9.6953e-4, .0010202, .0010738, .0010976, .0011507,
1557 .0011686, .0012264, .001291, .0013346, .0014246, .0015293,
1558 .0016359, .0017824, .0019255, .0020854, .002247, .0024148,
1559 .0026199, .0027523, .0029704, .0030702, .0033047, .0035013,
1560 .0037576, .0040275, .0043089, .0046927, .0049307, .0053486,
1561 .0053809, .0056699, .0059325, .0055488, .005634, .0056392,
1562 .004946, .0048855, .0048208, .0044386, .0045498, .0046377,
1563 .0048939, .0052396, .0057324, .0060859, .0066906, .0071148,
1564 .0077224, .0082687, .008769, .0084471, .008572, .0087729,
1565 .008775, .0090742, .0080704, .0080288, .0085747, .0086087,
1566 .0086408, .0088752, .0089381, .0089757, .0093532, .0092824,
1567 .0092566, .0092645, .0092735, .009342, .0095806, .0097991,
1568 .010213, .010611, .011129, .011756, .013237, .01412, .015034,
1569 .015936, .01682, .018597, .019315, .019995, .020658, .021289,
1570 .022363, .022996, .023716, .024512, .025434, .026067, .027118,
1571 .028396, .029865, .031442, .033253, .03525, .037296, .039701,
1572 .042356, .045154, .048059, .051294, .054893, .058636, .061407,
1573 .065172, .068974, .072676, .073379, .076547, .079556, .079134,
1574 .082308, .085739, .090192, .09359, .099599, .10669, .11496,
1575 .1244, .13512, .14752, .14494, .15647, .1668, .17863, .19029,
1576 .20124, .20254, .21179, .21982, .21625, .22364, .23405, .23382,
1577 .2434, .25708, .26406, .27621, .28909, .30395, .31717, .33271,
1578 .3496, .36765, .38774, .40949, .446, .46985, .49846, .5287, .562,
1579 .59841, .64598, .68834, .7327, .78978, .8373, .88708, .94744,
1580 1.0006, 1.0574, 1.1215, 1.1856, 1.2546, 1.3292, 1.4107, 1.4974,
1581 1.5913, 1.6931, 1.8028, 1.9212, 2.0492, 2.1874, 2.3365, 2.4978,
1582 2.6718, 2.8588, 3.062, 3.2818, 3.5188, 3.7752, 4.0527, 4.3542,
1583 4.6782, 5.0312, 5.4123, 5.8246, 6.2639, 6.7435, 7.2636, 7.8064,
1584 8.4091, 9.0696, 9.7677, 10.548, 11.4, 12.309, 13.324, 14.284,
1585 15.445, 16.687, 18.019, 19.403, 20.847, 22.366, 23.925, 25.537,
1586 27.213, 28.069, 29.864, 31.829, 33.988, 35.856, 38.829, 42.321,
1587 46.319, 50.606, 55.126, 59.126, 64.162, 68.708, 74.615, 81.176,
1588 87.739, 95.494, 103.83, 113.38, 123.99, 135.8, 148.7, 162.58,
1589 176.32, 192.6, 211.47, 232.7, 252.64, 277.41, 305.38, 333.44,
1590 366.42, 402.66, 442.14, 484.53, 526.42, 568.15, 558.78, 582.6,
1591 600.98, 613.94, 619.44, 618.24, 609.84, 595.96, 484.86, 475.59,
1592 478.49, 501.56, 552.19, 628.44, 630.39, 658.92, 671.96, 562.7,
1593 545.88, 423.43, 400.14, 306.59, 294.13, 246.8, 226.51, 278.21,
1594 314.39, 347.22, 389.13, 433.16, 477.48, 521.67, 560.54, 683.6,
1595 696.37, 695.91, 683.1, 658.24, 634.89, 698.85, 742.87, 796.66,
1596 954.49, 1009.5, 1150.5, 1179.1, 1267.9, 1272.4, 1312.7, 1330.4,
1597 1331.6, 1315.8, 1308.3, 1293.3, 1274.6, 1249.5, 1213.2, 1172.1,
1598 1124.4, 930.33, 893.36, 871.27, 883.54, 940.76, 1036., 1025.6,
1599 1053.1, 914.51, 894.15, 865.03, 670.63, 508.41, 475.15, 370.85,
1600 361.06, 319.38, 312.75, 331.87, 367.13, 415., 467.94, 525.49,
1601 578.41, 624.66, 794.82, 796.97, 780.29, 736.49, 670.18, 603.75,
1602 659.67, 679.8, 857.12, 884.05, 900.65, 1046.1, 1141.9, 1083.,
1603 1089.2, 1e3, 947.08, 872.31, 787.91, 704.75, 624.93, 553.68,
1604 489.91, 434.21, 385.64, 343.3, 306.42, 274.18, 245.94, 221.11,
1605 199.23, 179.88, 162.73, 147.48, 133.88, 121.73, 110.86, 101.1,
1606 92.323, 84.417, 77.281, 70.831, 64.991, 59.694, 54.884, 50.509,
1607 46.526, 42.893, 39.58, 36.549, 33.776, 31.236, 28.907, 26.77,
1608 24.805, 23., 21.339, 19.81, 18.404, 17.105, 15.909, 14.801,
1609 13.778, 12.83, 11.954, 11.142, 10.389, 9.691, 9.0434, 8.4423,
1610 7.8842, 7.3657, 6.8838, 6.4357, 6.0189, 5.6308, 5.2696, 4.9332,
1611 4.6198, 4.3277, 4.0553, 3.8012, 3.5639, 3.3424, 3.1355, 2.9422,
1612 2.7614, 2.5924, 2.4343, 2.2864, 2.148, 2.0184, 1.8971, 1.7835,
1613 1.677, 1.5773, 1.4838, 1.3961, 1.3139, 1.2369, 1.1645, 1.0966,
1614 1.0329, .97309, .91686, .86406, .81439, .76767, .72381, .68252,
1615 .64359, .60695, .57247, .54008, .50957, .48092, .45401, .42862,
1616 .40465, .38202, .36072, .34052, .3216, .30386, .28711, .27135,
1617 .25651, .24252, .2293, .21689, .20517, .19416, .18381, .17396,
1618 .16469
1619 };
1620
1621 static const double co2230[2001] =
1622 { 2.743e-5, 2.8815e-5, 3.027e-5, 3.1798e-5,
1623 3.3405e-5, 3.5094e-5, 3.6869e-5, 3.8734e-5, 4.0694e-5, 4.2754e-5,
1624 4.492e-5, 4.7196e-5, 4.9588e-5, 5.2103e-5, 5.4747e-5, 5.7525e-5,
1625 6.0446e-5, 6.3516e-5, 6.6744e-5, 7.0137e-5, 7.3704e-5, 7.7455e-5,
1626 8.1397e-5, 8.5543e-5, 8.9901e-5, 9.4484e-5, 9.9302e-5, 1.0437e-4,
1627 1.097e-4, 1.153e-4, 1.2119e-4, 1.2738e-4, 1.3389e-4, 1.4074e-4,
1628 1.4795e-4, 1.5552e-4, 1.6349e-4, 1.7187e-4, 1.8068e-4, 1.8995e-4,
1629 1.997e-4, 2.0996e-4, 2.2075e-4, 2.321e-4, 2.4403e-4, 2.5659e-4,
1630 2.698e-4, 2.837e-4, 2.9832e-4, 3.137e-4, 3.2988e-4, 3.4691e-4,
1631 3.6483e-4, 3.8368e-4, 4.0351e-4, 4.2439e-4, 4.4635e-4, 4.6947e-4,
1632 4.9379e-4, 5.1939e-4, 5.4633e-4, 5.7468e-4, 6.0452e-4, 6.3593e-4,
1633 6.69e-4, 7.038e-4, 7.4043e-4, 7.79e-4, 8.1959e-4, 8.6233e-4,
1634 9.0732e-4, 9.5469e-4, .0010046, .0010571, .0011124, .0011706,
1635 .0012319, .0012964, .0013644, .001436, .0015114, .0015908,
1636 .0016745, .0017625, .0018553, .0019531, .002056, .0021645,
1637 .0022788, .0023992, .002526, .0026596, .0028004, .0029488,
1638 .0031052, .0032699, .0034436, .0036265, .0038194, .0040227,
1639 .0042369, .0044628, .0047008, .0049518, .0052164, .0054953,
1640 .0057894, .0060995, .0064265, .0067713, .007135, .0075184,
1641 .0079228, .0083494, .0087993, .0092738, .0097745, .010303,
1642 .01086, .011448, .012068, .012722, .013413, .014142, .014911,
1643 .015723, .01658, .017484, .018439, .019447, .020511, .021635,
1644 .022821, .024074, .025397, .026794, .02827, .029829, .031475,
1645 .033215, .035052, .036994, .039045, .041213, .043504, .045926,
1646 .048485, .05119, .05405, .057074, .060271, .063651, .067225,
1647 .071006, .075004, .079233, .083708, .088441, .093449, .098749,
1648 .10436, .11029, .11657, .12322, .13026, .13772, .14561, .15397,
1649 .16282, .1722, .18214, .19266, .20381, .21563, .22816, .24143,
1650 .2555, .27043, .28625, .30303, .32082, .3397, .35972, .38097,
1651 .40352, .42746, .45286, .47983, .50847, .53888, .57119, .6055,
1652 .64196, .6807, .72187, .76564, .81217, .86165, .91427, .97025,
1653 1.0298, 1.0932, 1.1606, 1.2324, 1.3088, 1.3902, 1.477, 1.5693,
1654 1.6678, 1.7727, 1.8845, 2.0038, 2.131, 2.2666, 2.4114, 2.5659,
1655 2.7309, 2.907, 3.0951, 3.2961, 3.5109, 3.7405, 3.986, 4.2485,
1656 4.5293, 4.8299, 5.1516, 5.4961, 5.8651, 6.2605, 6.6842, 7.1385,
1657 7.6256, 8.1481, 8.7089, 9.3109, 9.9573, 10.652, 11.398, 12.2,
1658 13.063, 13.992, 14.99, 16.064, 17.222, 18.469, 19.813, 21.263,
1659 22.828, 24.516, 26.34, 28.31, 30.437, 32.738, 35.226, 37.914,
1660 40.824, 43.974, 47.377, 51.061, 55.011, 59.299, 63.961, 69.013,
1661 74.492, 80.444, 86.919, 93.836, 101.23, 109.25, 117.98, 127.47,
1662 137.81, 149.07, 161.35, 174.75, 189.42, 205.49, 223.02, 242.26,
1663 263.45, 286.75, 311.94, 340.01, 370.86, 404.92, 440.44, 480.27,
1664 525.17, 574.71, 626.22, 686.8, 754.38, 827.07, 913.38, 1011.7,
1665 1121.5, 1161.6, 1289.5, 1432.2, 1595.4, 1777., 1983.3, 2216.1,
1666 2485.7, 2788.3, 3101.5, 3481., 3902.1, 4257.1, 4740., 5272.8,
1667 5457.9, 5946.2, 6505.3, 6668.4, 7302.4, 8061.6, 9015.8, 9908.3,
1668 11613., 13956., 3249.6, 3243., 2901.5, 2841.3, 2729.6, 2558.2,
1669 1797.8, 1583.2, 1386., 1233.5, 787.74, 701.46, 761.66, 767.21,
1670 722.83, 1180.6, 1332.1, 1461.6, 2032.9, 2166., 2255.9, 2294.7,
1671 2587.2, 2396.5, 2122.4, 12553., 10784., 9832.5, 8827.3, 8029.1,
1672 7377.9, 7347.1, 6783.8, 6239.1, 5721.1, 5503., 4975.1, 4477.8,
1673 4021.3, 3676.8, 3275.3, 2914.9, 2597.4, 2328.2, 2075.4, 1857.6,
1674 1663.6, 1493.3, 1343.8, 1213.3, 1095.6, 1066.5, 958.91, 865.15,
1675 783.31, 714.35, 650.77, 593.98, 546.2, 499.9, 457.87, 421.75,
1676 387.61, 355.25, 326.62, 299.7, 275.21, 253.17, 232.83, 214.31,
1677 197.5, 182.08, 167.98, 155.12, 143.32, 132.5, 122.58, 113.48,
1678 105.11, 97.415, 90.182, 83.463, 77.281, 71.587, 66.341, 61.493,
1679 57.014, 53.062, 49.21, 45.663, 42.38, 39.348, 36.547, 33.967,
1680 31.573, 29.357, 27.314, 25.415, 23.658, 22.03, 20.524, 19.125,
1681 17.829, 16.627, 15.511, 14.476, 13.514, 12.618, 11.786, 11.013,
1682 10.294, 9.6246, 9.0018, 8.4218, 7.8816, 7.3783, 6.9092, 6.4719,
1683 6.0641, 5.6838, 5.3289, 4.998, 4.6893, 4.4014, 4.1325, 3.8813,
1684 3.6469, 3.4283, 3.2241, 3.035, 2.8576, 2.6922, 2.5348, 2.3896,
1685 2.2535, 2.1258, 2.0059, 1.8929, 1.7862, 1.6854, 1.5898, 1.4992,
1686 1.4017, 1.3218, 1.2479, 1.1809, 1.1215, 1.0693, 1.0116, .96016,
1687 .9105, .84859, .80105, .74381, .69982, .65127, .60899, .57843,
1688 .54592, .51792, .49336, .47155, .45201, .43426, .41807, .40303,
1689 .38876, .3863, .37098, .35492, .33801, .32032, .30341, .29874,
1690 .29193, .28689, .29584, .29155, .29826, .29195, .29287, .2904,
1691 .28199, .27709, .27162, .26622, .26133, .25676, .25235, .23137,
1692 .22365, .21519, .20597, .19636, .18699, .16485, .16262, .16643,
1693 .17542, .18198, .18631, .16759, .16338, .13505, .1267, .10053,
1694 .092554, .074093, .062159, .055523, .054849, .05401, .05528,
1695 .058982, .07952, .08647, .093244, .099285, .10393, .10661,
1696 .12072, .11417, .10396, .093265, .089137, .088909, .10902,
1697 .11277, .13625, .13565, .14907, .14167, .1428, .13744, .12768,
1698 .11382, .10244, .091686, .08109, .071739, .063616, .056579,
1699 .050504, .045251, .040689, .036715, .033237, .030181, .027488,
1700 .025107, .022998, .021125, .01946, .017979, .016661, .015489,
1701 .014448, .013526, .012712, .011998, .011375, .010839, .010384,
1702 .010007, .0097053, .0094783, .0093257, .0092489, .0092504,
1703 .0093346, .0095077, .0097676, .01012, .01058, .011157, .011844,
1704 .012672, .013665, .014766, .015999, .017509, .018972, .020444,
1705 .022311, .023742, .0249, .025599, .026981, .026462, .025143,
1706 .025066, .022814, .020458, .020026, .019142, .020189, .022371,
1707 .024163, .023728, .02199, .019506, .018591, .015576, .012784,
1708 .011744, .0094777, .0079148, .0070652, .006986, .0071758,
1709 .008086, .0098025, .01087, .013609, .016764, .018137, .021061,
1710 .023498, .023576, .023965, .022828, .021519, .021283, .023364,
1711 .026457, .029782, .030856, .033486, .035515, .035543, .036558,
1712 .037198, .037472, .037045, .037284, .03777, .038085, .038366,
1713 .038526, .038282, .038915, .037697, .035667, .032941, .031959,
1714 .028692, .025918, .024596, .025592, .027873, .028935, .02984,
1715 .028148, .025305, .021912, .020454, .016732, .013357, .01205,
1716 .009731, .0079881, .0077704, .0074387, .0083895, .0096776,
1717 .010326, .01293, .015955, .019247, .020145, .02267, .024231,
1718 .024184, .022131, .019784, .01955, .01971, .022119, .025116,
1719 .027978, .028107, .029808, .030701, .029164, .028551, .027286,
1720 .024946, .023259, .020982, .019221, .017471, .015643, .014074,
1721 .01261, .011301, .010116, .0090582, .0081036, .0072542, .0065034,
1722 .0058436, .0052571, .0047321, .0042697, .0038607, .0034977,
1723 .0031747, .0028864, .0026284, .002397, .002189, .0020017,
1724 .0018326, .0016798, .0015414, .0014159, .0013019, .0011983,
1725 .0011039, .0010177, 9.391e-4, 8.6717e-4, 8.0131e-4, 7.4093e-4,
1726 6.8553e-4, 6.3464e-4, 5.8787e-4, 5.4487e-4, 5.0533e-4, 4.69e-4,
1727 4.3556e-4, 4.0474e-4, 3.7629e-4, 3.5e-4, 3.2569e-4, 3.032e-4,
1728 2.8239e-4, 2.6314e-4, 2.4535e-4, 2.2891e-4, 2.1374e-4, 1.9975e-4,
1729 1.8685e-4, 1.7498e-4, 1.6406e-4, 1.5401e-4, 1.4479e-4, 1.3633e-4,
1730 1.2858e-4, 1.2148e-4, 1.1499e-4, 1.0907e-4, 1.0369e-4, 9.8791e-5,
1731 9.4359e-5, 9.0359e-5, 8.6766e-5, 8.3555e-5, 8.0703e-5, 7.8192e-5,
1732 7.6003e-5, 7.4119e-5, 7.2528e-5, 7.1216e-5, 7.0171e-5, 6.9385e-5,
1733 6.8848e-5, 6.8554e-5, 6.8496e-5, 6.8669e-5, 6.9069e-5, 6.9694e-5,
1734 7.054e-5, 7.1608e-5, 7.2896e-5, 7.4406e-5, 7.6139e-5, 7.8097e-5,
1735 8.0283e-5, 8.2702e-5, 8.5357e-5, 8.8255e-5, 9.1402e-5, 9.4806e-5,
1736 9.8473e-5, 1.0241e-4, 1.0664e-4, 1.1115e-4, 1.1598e-4, 1.2112e-4,
1737 1.2659e-4, 1.3241e-4, 1.3859e-4, 1.4515e-4, 1.521e-4, 1.5947e-4,
1738 1.6728e-4, 1.7555e-4, 1.8429e-4, 1.9355e-4, 2.0334e-4, 2.1369e-4,
1739 2.2463e-4, 2.3619e-4, 2.4841e-4, 2.6132e-4, 2.7497e-4, 2.8938e-4,
1740 3.0462e-4, 3.2071e-4, 3.3771e-4, 3.5567e-4, 3.7465e-4, 3.947e-4,
1741 4.1588e-4, 4.3828e-4, 4.6194e-4, 4.8695e-4, 5.1338e-4, 5.4133e-4,
1742 5.7087e-4, 6.0211e-4, 6.3515e-4, 6.701e-4, 7.0706e-4, 7.4617e-4,
1743 7.8756e-4, 8.3136e-4, 8.7772e-4, 9.2681e-4, 9.788e-4, .0010339,
1744 .0010922, .001154, .0012195, .0012889, .0013626, .0014407,
1745 .0015235, .0016114, .0017048, .0018038, .001909, .0020207,
1746 .0021395, .0022657, .0023998, .0025426, .0026944, .002856,
1747 .0030281, .0032114, .0034068, .003615, .0038371, .004074,
1748 .004327, .0045971, .0048857, .0051942, .0055239, .0058766,
1749 .0062538, .0066573, .0070891, .007551, .0080455, .0085747,
1750 .0091412, .0097481, .010397, .011092, .011837, .012638, .013495,
1751 .014415, .01541, .016475, .017621, .018857, .020175, .02162,
1752 .023185, .024876, .02672, .028732, .030916, .033319, .035939,
1753 .038736, .041847, .04524, .048715, .052678, .056977, .061203,
1754 .066184, .07164, .076952, .083477, .090674, .098049, .10697,
1755 .1169, .1277, .14011, .15323, .1684, .18601, .20626, .22831,
1756 .25417, .28407, .31405, .34957, .38823, .41923, .46026, .50409,
1757 .51227, .54805, .57976, .53818, .55056, .557, .46741, .46403,
1758 .4636, .42265, .45166, .49852, .56663, .34306, .17779, .17697,
1759 .18346, .19129, .20014, .21778, .23604, .25649, .28676, .31238,
1760 .33856, .39998, .4288, .46568, .56654, .60786, .64473, .76466,
1761 .7897, .80778, .86443, .85736, .84798, .84157, 1.1385, 1.2446,
1762 1.1923, 1.1552, 1.1338, 1.1266, 1.1292, 1.1431, 1.1683, 1.2059,
1763 1.2521, 1.3069, 1.3712, 1.4471, 1.5275, 1.6165, 1.7145, 1.8189,
1764 1.9359, 2.065, 2.2007, 2.3591, 2.5362, 2.7346, 2.9515, 3.2021,
1765 3.4851, 3.7935, 4.0694, 4.4463, 4.807, 5.2443, 5.7178, 6.2231,
1766 6.4796, 6.9461, 7.4099, 7.3652, 7.7182, 8.048, 7.7373, 8.0363,
1767 8.3855, 8.8044, 9.0257, 9.8574, 10.948, 10.563, 6.8979, 7.0744,
1768 7.4121, 7.7663, 8.1768, 8.6243, 9.1437, 9.7847, 10.182, 10.849,
1769 11.572, 12.602, 13.482, 14.431, 15.907, 16.983, 18.11, 19.884,
1770 21.02, 22.18, 23.355, 24.848, 25.954, 27.13, 30.186, 34.893,
1771 35.682, 36.755, 38.111, 39.703, 41.58, 43.606, 45.868, 48.573,
1772 51.298, 54.291, 57.559, 61.116, 64.964, 69.124, 73.628, 78.471,
1773 83.683, 89.307, 95.341, 101.84, 108.83, 116.36, 124.46, 133.18,
1774 142.57, 152.79, 163.69, 175.43, 188.11, 201.79, 216.55, 232.51,
1775 249.74, 268.38, 288.54, 310.35, 333.97, 359.55, 387.26, 417.3,
1776 449.88, 485.2, 523.54, 565.14, 610.28, 659.31, 712.56, 770.43,
1777 833.36, 901.82, 976.36, 1057.6, 1146.8, 1243.8, 1350., 1466.3,
1778 1593.6, 1732.7, 1884.1, 2049.1, 2228.2, 2421.9, 2629.4, 2853.7,
1779 3094.4, 3351.1, 3622.3, 3829.8, 4123.1, 4438.3, 4777.2, 5144.1,
1780 5545.4, 5990.5, 6404.5, 6996.8, 7687.6, 8482.9, 9349.4, 10203.,
1781 11223., 12358., 13493., 14916., 16416., 18236., 20222., 22501.,
1782 25102., 28358., 31707., 35404., 39538., 43911., 48391., 53193.,
1783 58028., 58082., 61276., 64193., 66294., 67480., 67921., 67423.,
1784 66254., 64341., 51737., 51420., 53072., 58145., 66195., 65358.,
1785 67377., 67869., 53509., 50553., 35737., 32425., 21704., 19974.,
1786 14457., 12142., 16798., 19489., 23049., 27270., 31910., 36457.,
1787 40877., 44748., 47876., 59793., 58626., 55454., 50337., 44893.,
1788 50228., 52216., 54747., 69541., 70455., 81014., 77694., 80533.,
1789 73953., 70927., 65539., 59002., 52281., 45953., 40292., 35360.,
1790 31124., 27478., 24346., 21647., 19308., 17271., 15491., 13927.,
1791 12550., 11331., 10250., 9288.8, 8431.4, 7664.9, 6978.3, 6361.8,
1792 5807.4, 5307.7, 4856.8, 4449., 4079.8, 3744.9, 3440.8, 3164.2,
1793 2912.3, 2682.7, 2473., 2281.4, 2106., 1945.3, 1797.9, 1662.5,
1794 1538.1, 1423.6, 1318.1, 1221., 1131.5, 1049., 972.99, 902.87,
1795 838.01, 777.95, 722.2, 670.44, 622.35, 577.68, 536.21, 497.76,
1796 462.12, 429.13, 398.61, 370.39, 344.29, 320.16, 297.85, 277.2,
1797 258.08, 240.38, 223.97, 208.77, 194.66, 181.58, 169.43, 158.15,
1798 147.67, 137.92, 128.86, 120.44, 112.6, 105.3, 98.499, 92.166,
1799 86.264, 80.763, 75.632, 70.846, 66.381, 62.213, 58.321, 54.685,
1800 51.288, 48.114, 45.145, 42.368, 39.772, 37.341, 35.065, 32.937,
1801 30.943, 29.077, 27.33, 25.693, 24.158, 22.717, 21.367, 20.099,
1802 18.909, 17.792, 16.744, 15.761, 14.838, 13.971, 13.157, 12.393,
1803 11.676, 11.003, 10.369, 9.775, 9.2165, 8.6902, 8.1963, 7.7314,
1804 7.2923, 6.8794, 6.4898, 6.122, 5.7764, 5.4525, 5.1484, 4.8611,
1805 4.5918, 4.3379, 4.0982, 3.8716, 3.6567, 3.4545, 3.2634, 3.0828,
1806 2.9122, 2.7512, 2.5993, 2.4561, 2.3211, 2.1938, 2.0737, 1.9603,
1807 1.8534, 1.7525, 1.6572, 1.5673, 1.4824, 1.4022, 1.3265, 1.2551,
1808 1.1876, 1.1239, 1.0637, 1.0069, .9532, .90248, .85454, .80921,
1809 .76631, .72569, .6872, .65072, .61635, .5836, .55261, .52336,
1810 .49581, .46998, .44559, .42236, .40036, .37929, .35924, .34043,
1811 .32238, .30547, .28931, .27405, .25975, .24616, .23341, .22133,
1812 .20997, .19924, .18917, .17967, .17075, .16211, .15411, .14646,
1813 .13912, .13201, .12509, .11857, .11261, .10698, .10186, .097039,
1814 .092236, .087844, .083443, .07938, .075452, .071564, .067931,
1815 .064389, .061078, .057901, .054921, .052061, .049364, .046789,
1816 .04435, .042044, .039866, .037808, .035863, .034023, .032282,
1817 .030634, .029073, .027595, .026194, .024866, .023608, .022415,
1818 .021283, .02021, .019193, .018228, .017312, .016443, .015619,
1819 .014837, .014094, .01339, .012721, .012086, .011483, .010911,
1820 .010368, .009852, .0093623, .0088972, .0084556, .0080362,
1821 .0076379, .0072596, .0069003, .006559, .0062349, .0059269,
1822 .0056344, .0053565, .0050925, .0048417, .0046034, .004377,
1823 .0041618, .0039575, .0037633, .0035788, .0034034, .0032368,
1824 .0030785, .002928, .0027851, .0026492, .0025201, .0023975,
1825 .0022809, .0021701, .0020649, .0019649, .0018699, .0017796,
1826 .0016938, .0016122, .0015348, .0014612, .0013913, .001325,
1827 .0012619, .0012021, .0011452, .0010913, .0010401, 9.9149e-4,
1828 9.454e-4, 9.0169e-4, 8.6024e-4, 8.2097e-4, 7.8377e-4, 7.4854e-4,
1829 7.1522e-4, 6.8371e-4, 6.5393e-4, 6.2582e-4, 5.9932e-4, 5.7435e-4,
1830 5.5087e-4, 5.2882e-4, 5.0814e-4, 4.8881e-4, 4.7076e-4, 4.5398e-4,
1831 4.3843e-4, 4.2407e-4, 4.109e-4, 3.9888e-4, 3.88e-4, 3.7826e-4,
1832 3.6963e-4, 3.6213e-4, 3.5575e-4, 3.505e-4, 3.464e-4, 3.4346e-4,
1833 3.4173e-4, 3.4125e-4, 3.4206e-4, 3.4424e-4, 3.4787e-4, 3.5303e-4,
1834 3.5986e-4, 3.6847e-4, 3.7903e-4, 3.9174e-4, 4.0681e-4, 4.2455e-4,
1835 4.4527e-4, 4.6942e-4, 4.9637e-4, 5.2698e-4, 5.5808e-4, 5.9514e-4,
1836 6.2757e-4, 6.689e-4, 7.1298e-4, 7.3955e-4, 7.8403e-4, 8.0449e-4,
1837 8.5131e-4, 9.0256e-4, 9.3692e-4, .0010051, .0010846, .0011678,
1838 .001282, .0014016, .0015355, .0016764, .0018272, .0020055,
1839 .0021455, .0023421, .0024615, .0026786, .0028787, .0031259,
1840 .0034046, .0036985, .0040917, .0043902, .0048349, .0049531,
1841 .0052989, .0056148, .0052452, .0053357, .005333, .0045069,
1842 .0043851, .004253, .003738, .0038084, .0039013, .0041505,
1843 .0045372, .0050569, .0054507, .0061267, .0066122, .0072449,
1844 .0078012, .0082651, .0076538, .0076573, .0076806, .0075227,
1845 .0076269, .0063758, .006254, .0067749, .0067909, .0068231,
1846 .0072143, .0072762, .0072954, .007679, .0075107, .0073658,
1847 .0072441, .0071074, .0070378, .007176, .0072472, .0075844,
1848 .0079291, .008412, .0090165, .010688, .011535, .012375, .013166,
1849 .013895, .015567, .016011, .016392, .016737, .017043, .017731,
1850 .018031, .018419, .018877, .019474, .019868, .020604, .021538,
1851 .022653, .023869, .025288, .026879, .028547, .030524, .03274,
1852 .035132, .03769, .040567, .043793, .047188, .049962, .053542,
1853 .057205, .060776, .061489, .064419, .067124, .065945, .068487,
1854 .071209, .074783, .077039, .082444, .08902, .09692, .10617,
1855 .11687, .12952, .12362, .13498, .14412, .15492, .16519, .1744,
1856 .17096, .17714, .18208, .17363, .17813, .18564, .18295, .19045,
1857 .20252, .20815, .21844, .22929, .24229, .25321, .26588, .2797,
1858 .29465, .31136, .32961, .36529, .38486, .41027, .43694, .4667,
1859 .49943, .54542, .58348, .62303, .67633, .71755, .76054, .81371,
1860 .85934, .90841, .96438, 1.0207, 1.0821, 1.1491, 1.2226, 1.3018,
1861 1.388, 1.4818, 1.5835, 1.6939, 1.8137, 1.9435, 2.0843, 2.237,
1862 2.4026, 2.5818, 2.7767, 2.9885, 3.2182, 3.4679, 3.7391, 4.0349,
1863 4.3554, 4.7053, 5.0849, 5.4986, 5.9436, 6.4294, 6.9598, 7.5203,
1864 8.143, 8.8253, 9.5568, 10.371, 11.267, 12.233, 13.31, 14.357,
1865 15.598, 16.93, 18.358, 19.849, 21.408, 23.04, 24.706, 26.409,
1866 28.153, 28.795, 30.549, 32.43, 34.49, 36.027, 38.955, 42.465,
1867 46.565, 50.875, 55.378, 59.002, 63.882, 67.949, 73.693, 80.095,
1868 86.403, 94.264, 102.65, 112.37, 123.3, 135.54, 149.14, 163.83,
1869 179.17, 196.89, 217.91, 240.94, 264.13, 292.39, 324.83, 358.21,
1870 397.16, 440.5, 488.6, 541.04, 595.3, 650.43, 652.03, 688.74,
1871 719.47, 743.54, 757.68, 762.35, 756.43, 741.42, 595.43, 580.97,
1872 580.83, 605.68, 667.88, 764.49, 759.93, 789.12, 798.17, 645.66,
1873 615.65, 455.05, 421.09, 306.45, 289.14, 235.7, 215.52, 274.57,
1874 316.53, 357.73, 409.89, 465.06, 521.84, 579.02, 630.64, 794.46,
1875 813., 813.56, 796.25, 761.57, 727.97, 812.14, 866.75, 932.5,
1876 1132.8, 1194.8, 1362.2, 1387.2, 1482.3, 1479.7, 1517.9, 1533.1,
1877 1534.2, 1523.3, 1522.5, 1515.5, 1505.2, 1486.5, 1454., 1412.,
1878 1358.8, 1107.8, 1060.9, 1033.5, 1048.2, 1122.4, 1248.9, 1227.1,
1879 1255.4, 1058.9, 1020.7, 970.59, 715.24, 512.56, 468.47, 349.3,
1880 338.26, 299.22, 301.26, 332.38, 382.08, 445.49, 515.87, 590.85,
1881 662.3, 726.05, 955.59, 964.11, 945.17, 891.48, 807.11, 720.9,
1882 803.36, 834.46, 1073.9, 1107.1, 1123.6, 1296., 1393.7, 1303.1,
1883 1284.3, 1161.8, 1078.8, 976.13, 868.72, 767.4, 674.72, 593.73,
1884 523.12, 462.24, 409.75, 364.34, 325., 290.73, 260.76, 234.46,
1885 211.28, 190.78, 172.61, 156.44, 142.01, 129.12, 117.57, 107.2,
1886 97.877, 89.47, 81.882, 75.021, 68.807, 63.171, 58.052, 53.396,
1887 49.155, 45.288, 41.759, 38.531, 35.576, 32.868, 30.384, 28.102,
1888 26.003, 24.071, 22.293, 20.655, 19.147, 17.756, 16.476, 15.292,
1889 14.198, 13.183, 12.241, 11.367, 10.554, 9.7989, 9.0978, 8.4475,
1890 7.845, 7.2868, 6.7704, 6.2927, 5.8508, 5.4421, 5.064, 4.714,
1891 4.3902, 4.0902, 3.8121, 3.5543, 3.315, 3.093, 2.8869, 2.6953,
1892 2.5172, 2.3517, 2.1977, 2.0544, 1.9211, 1.7969, 1.6812, 1.5735,
1893 1.4731, 1.3794, 1.2921, 1.2107, 1.1346, 1.0637, .99744, .93554,
1894 .87771, .82368, .77313, .72587, .6816, .64014, .60134, .565,
1895 .53086, .49883, .46881, .44074, .4144, .38979, .36679, .34513,
1896 .32474, .30552, .28751, .27045, .25458, .23976, .22584, .21278,
1897 .20051, .18899, .17815, .16801, .15846, .14954, .14117, .13328,
1898 .12584
1899 };
1900
1901 /* Get CO2 continuum absorption... */
1902 const double xw = nu / 2 + 1;
1903 if (xw >= 1 && xw < 2001) {
1904 const int iw = (int) xw;
1905 const double dw = xw - iw;
1906 const double ew = 1 - dw;
1907 const double cw296 = ew * co2296[iw - 1] + dw * co2296[iw];
1908 const double cw260 = ew * co2260[iw - 1] + dw * co2260[iw];
1909 const double cw230 = ew * co2230[iw - 1] + dw * co2230[iw];
1910 const double dt230 = t - 230;
1911 const double dt260 = t - 260;
1912 const double dt296 = t - 296;
1913 const double ctw =
1914 dt260 * 5.050505e-4 * dt296 * cw230 -
1915 dt230 * 9.259259e-4 * dt296 * cw260 +
1916 dt230 * 4.208754e-4 * dt260 * cw296;
1917 return u / NA / 1000 * p / P0 * ctw;
1918 } else
1919 return 0;
1920}
#define P0
Standard pressure [hPa].
Definition: jurassic.h:310
#define NA
Avogadro's number.
Definition: jurassic.h:295

◆ ctmh2o()

double ctmh2o ( const double  nu,
const double  p,
const double  t,
const double  q,
const double  u 
)

Compute water vapor continuum (optical depth).

Definition at line 1924 of file jurassic.c.

1929 {
1930
1931 static const double h2o296[2001] =
1932 { .17, .1695, .172, .168, .1687, .1624, .1606,
1933 .1508, .1447, .1344, .1214, .1133, .1009, .09217, .08297, .06989,
1934 .06513, .05469, .05056, .04417, .03779, .03484, .02994, .0272,
1935 .02325, .02063, .01818, .01592, .01405, .01251, .0108, .009647,
1936 .008424, .007519, .006555, .00588, .005136, .004511, .003989,
1937 .003509, .003114, .00274, .002446, .002144, .001895, .001676,
1938 .001486, .001312, .001164, .001031, 9.129e-4, 8.106e-4, 7.213e-4,
1939 6.4e-4, 5.687e-4, 5.063e-4, 4.511e-4, 4.029e-4, 3.596e-4,
1940 3.22e-4, 2.889e-4, 2.597e-4, 2.337e-4, 2.108e-4, 1.907e-4,
1941 1.728e-4, 1.57e-4, 1.43e-4, 1.305e-4, 1.195e-4, 1.097e-4,
1942 1.009e-4, 9.307e-5, 8.604e-5, 7.971e-5, 7.407e-5, 6.896e-5,
1943 6.433e-5, 6.013e-5, 5.631e-5, 5.283e-5, 4.963e-5, 4.669e-5,
1944 4.398e-5, 4.148e-5, 3.917e-5, 3.702e-5, 3.502e-5, 3.316e-5,
1945 3.142e-5, 2.978e-5, 2.825e-5, 2.681e-5, 2.546e-5, 2.419e-5,
1946 2.299e-5, 2.186e-5, 2.079e-5, 1.979e-5, 1.884e-5, 1.795e-5,
1947 1.711e-5, 1.633e-5, 1.559e-5, 1.49e-5, 1.426e-5, 1.367e-5,
1948 1.312e-5, 1.263e-5, 1.218e-5, 1.178e-5, 1.143e-5, 1.112e-5,
1949 1.088e-5, 1.07e-5, 1.057e-5, 1.05e-5, 1.051e-5, 1.059e-5,
1950 1.076e-5, 1.1e-5, 1.133e-5, 1.18e-5, 1.237e-5, 1.308e-5,
1951 1.393e-5, 1.483e-5, 1.614e-5, 1.758e-5, 1.93e-5, 2.123e-5,
1952 2.346e-5, 2.647e-5, 2.93e-5, 3.279e-5, 3.745e-5, 4.152e-5,
1953 4.813e-5, 5.477e-5, 6.203e-5, 7.331e-5, 8.056e-5, 9.882e-5,
1954 1.05e-4, 1.21e-4, 1.341e-4, 1.572e-4, 1.698e-4, 1.968e-4,
1955 2.175e-4, 2.431e-4, 2.735e-4, 2.867e-4, 3.19e-4, 3.371e-4,
1956 3.554e-4, 3.726e-4, 3.837e-4, 3.878e-4, 3.864e-4, 3.858e-4,
1957 3.841e-4, 3.852e-4, 3.815e-4, 3.762e-4, 3.618e-4, 3.579e-4,
1958 3.45e-4, 3.202e-4, 3.018e-4, 2.785e-4, 2.602e-4, 2.416e-4,
1959 2.097e-4, 1.939e-4, 1.689e-4, 1.498e-4, 1.308e-4, 1.17e-4,
1960 1.011e-4, 9.237e-5, 7.909e-5, 7.006e-5, 6.112e-5, 5.401e-5,
1961 4.914e-5, 4.266e-5, 3.963e-5, 3.316e-5, 3.037e-5, 2.598e-5,
1962 2.294e-5, 2.066e-5, 1.813e-5, 1.583e-5, 1.423e-5, 1.247e-5,
1963 1.116e-5, 9.76e-6, 8.596e-6, 7.72e-6, 6.825e-6, 6.108e-6,
1964 5.366e-6, 4.733e-6, 4.229e-6, 3.731e-6, 3.346e-6, 2.972e-6,
1965 2.628e-6, 2.356e-6, 2.102e-6, 1.878e-6, 1.678e-6, 1.507e-6,
1966 1.348e-6, 1.21e-6, 1.089e-6, 9.806e-7, 8.857e-7, 8.004e-7,
1967 7.261e-7, 6.599e-7, 6.005e-7, 5.479e-7, 5.011e-7, 4.595e-7,
1968 4.219e-7, 3.885e-7, 3.583e-7, 3.314e-7, 3.071e-7, 2.852e-7,
1969 2.654e-7, 2.474e-7, 2.311e-7, 2.162e-7, 2.026e-7, 1.902e-7,
1970 1.788e-7, 1.683e-7, 1.587e-7, 1.497e-7, 1.415e-7, 1.338e-7,
1971 1.266e-7, 1.2e-7, 1.138e-7, 1.08e-7, 1.027e-7, 9.764e-8,
1972 9.296e-8, 8.862e-8, 8.458e-8, 8.087e-8, 7.744e-8, 7.429e-8,
1973 7.145e-8, 6.893e-8, 6.664e-8, 6.468e-8, 6.322e-8, 6.162e-8,
1974 6.07e-8, 5.992e-8, 5.913e-8, 5.841e-8, 5.796e-8, 5.757e-8,
1975 5.746e-8, 5.731e-8, 5.679e-8, 5.577e-8, 5.671e-8, 5.656e-8,
1976 5.594e-8, 5.593e-8, 5.602e-8, 5.62e-8, 5.693e-8, 5.725e-8,
1977 5.858e-8, 6.037e-8, 6.249e-8, 6.535e-8, 6.899e-8, 7.356e-8,
1978 7.918e-8, 8.618e-8, 9.385e-8, 1.039e-7, 1.158e-7, 1.29e-7,
1979 1.437e-7, 1.65e-7, 1.871e-7, 2.121e-7, 2.427e-7, 2.773e-7,
1980 3.247e-7, 3.677e-7, 4.037e-7, 4.776e-7, 5.101e-7, 6.214e-7,
1981 6.936e-7, 7.581e-7, 8.486e-7, 9.355e-7, 9.942e-7, 1.063e-6,
1982 1.123e-6, 1.191e-6, 1.215e-6, 1.247e-6, 1.26e-6, 1.271e-6,
1983 1.284e-6, 1.317e-6, 1.323e-6, 1.349e-6, 1.353e-6, 1.362e-6,
1984 1.344e-6, 1.329e-6, 1.336e-6, 1.327e-6, 1.325e-6, 1.359e-6,
1985 1.374e-6, 1.415e-6, 1.462e-6, 1.526e-6, 1.619e-6, 1.735e-6,
1986 1.863e-6, 2.034e-6, 2.265e-6, 2.482e-6, 2.756e-6, 3.103e-6,
1987 3.466e-6, 3.832e-6, 4.378e-6, 4.913e-6, 5.651e-6, 6.311e-6,
1988 7.169e-6, 8.057e-6, 9.253e-6, 1.047e-5, 1.212e-5, 1.36e-5,
1989 1.569e-5, 1.776e-5, 2.02e-5, 2.281e-5, 2.683e-5, 2.994e-5,
1990 3.488e-5, 3.896e-5, 4.499e-5, 5.175e-5, 6.035e-5, 6.34e-5,
1991 7.281e-5, 7.923e-5, 8.348e-5, 9.631e-5, 1.044e-4, 1.102e-4,
1992 1.176e-4, 1.244e-4, 1.283e-4, 1.326e-4, 1.4e-4, 1.395e-4,
1993 1.387e-4, 1.363e-4, 1.314e-4, 1.241e-4, 1.228e-4, 1.148e-4,
1994 1.086e-4, 1.018e-4, 8.89e-5, 8.316e-5, 7.292e-5, 6.452e-5,
1995 5.625e-5, 5.045e-5, 4.38e-5, 3.762e-5, 3.29e-5, 2.836e-5,
1996 2.485e-5, 2.168e-5, 1.895e-5, 1.659e-5, 1.453e-5, 1.282e-5,
1997 1.132e-5, 1.001e-5, 8.836e-6, 7.804e-6, 6.922e-6, 6.116e-6,
1998 5.429e-6, 4.824e-6, 4.278e-6, 3.788e-6, 3.371e-6, 2.985e-6,
1999 2.649e-6, 2.357e-6, 2.09e-6, 1.858e-6, 1.647e-6, 1.462e-6,
2000 1.299e-6, 1.155e-6, 1.028e-6, 9.142e-7, 8.132e-7, 7.246e-7,
2001 6.451e-7, 5.764e-7, 5.151e-7, 4.603e-7, 4.121e-7, 3.694e-7,
2002 3.318e-7, 2.985e-7, 2.69e-7, 2.428e-7, 2.197e-7, 1.992e-7,
2003 1.81e-7, 1.649e-7, 1.506e-7, 1.378e-7, 1.265e-7, 1.163e-7,
2004 1.073e-7, 9.918e-8, 9.191e-8, 8.538e-8, 7.949e-8, 7.419e-8,
2005 6.94e-8, 6.508e-8, 6.114e-8, 5.761e-8, 5.437e-8, 5.146e-8,
2006 4.89e-8, 4.636e-8, 4.406e-8, 4.201e-8, 4.015e-8, 3.84e-8,
2007 3.661e-8, 3.51e-8, 3.377e-8, 3.242e-8, 3.13e-8, 3.015e-8,
2008 2.918e-8, 2.83e-8, 2.758e-8, 2.707e-8, 2.656e-8, 2.619e-8,
2009 2.609e-8, 2.615e-8, 2.63e-8, 2.675e-8, 2.745e-8, 2.842e-8,
2010 2.966e-8, 3.125e-8, 3.318e-8, 3.565e-8, 3.85e-8, 4.191e-8,
2011 4.59e-8, 5.059e-8, 5.607e-8, 6.239e-8, 6.958e-8, 7.796e-8,
2012 8.773e-8, 9.88e-8, 1.114e-7, 1.258e-7, 1.422e-7, 1.61e-7,
2013 1.822e-7, 2.06e-7, 2.337e-7, 2.645e-7, 2.996e-7, 3.393e-7,
2014 3.843e-7, 4.363e-7, 4.935e-7, 5.607e-7, 6.363e-7, 7.242e-7,
2015 8.23e-7, 9.411e-7, 1.071e-6, 1.232e-6, 1.402e-6, 1.6e-6, 1.82e-6,
2016 2.128e-6, 2.386e-6, 2.781e-6, 3.242e-6, 3.653e-6, 4.323e-6,
2017 4.747e-6, 5.321e-6, 5.919e-6, 6.681e-6, 7.101e-6, 7.983e-6,
2018 8.342e-6, 8.741e-6, 9.431e-6, 9.952e-6, 1.026e-5, 1.055e-5,
2019 1.095e-5, 1.095e-5, 1.087e-5, 1.056e-5, 1.026e-5, 9.715e-6,
2020 9.252e-6, 8.452e-6, 7.958e-6, 7.268e-6, 6.295e-6, 6.003e-6, 5e-6,
2021 4.591e-6, 3.983e-6, 3.479e-6, 3.058e-6, 2.667e-6, 2.293e-6,
2022 1.995e-6, 1.747e-6, 1.517e-6, 1.335e-6, 1.165e-6, 1.028e-6,
2023 9.007e-7, 7.956e-7, 7.015e-7, 6.192e-7, 5.491e-7, 4.859e-7,
2024 4.297e-7, 3.799e-7, 3.38e-7, 3.002e-7, 2.659e-7, 2.366e-7,
2025 2.103e-7, 1.861e-7, 1.655e-7, 1.469e-7, 1.309e-7, 1.162e-7,
2026 1.032e-7, 9.198e-8, 8.181e-8, 7.294e-8, 6.516e-8, 5.787e-8,
2027 5.163e-8, 4.612e-8, 4.119e-8, 3.695e-8, 3.308e-8, 2.976e-8,
2028 2.67e-8, 2.407e-8, 2.171e-8, 1.965e-8, 1.78e-8, 1.617e-8,
2029 1.47e-8, 1.341e-8, 1.227e-8, 1.125e-8, 1.033e-8, 9.524e-9,
2030 8.797e-9, 8.162e-9, 7.565e-9, 7.04e-9, 6.56e-9, 6.129e-9,
2031 5.733e-9, 5.376e-9, 5.043e-9, 4.75e-9, 4.466e-9, 4.211e-9,
2032 3.977e-9, 3.759e-9, 3.558e-9, 3.373e-9, 3.201e-9, 3.043e-9,
2033 2.895e-9, 2.76e-9, 2.635e-9, 2.518e-9, 2.411e-9, 2.314e-9,
2034 2.23e-9, 2.151e-9, 2.087e-9, 2.035e-9, 1.988e-9, 1.946e-9,
2035 1.927e-9, 1.916e-9, 1.916e-9, 1.933e-9, 1.966e-9, 2.018e-9,
2036 2.09e-9, 2.182e-9, 2.299e-9, 2.442e-9, 2.623e-9, 2.832e-9,
2037 3.079e-9, 3.368e-9, 3.714e-9, 4.104e-9, 4.567e-9, 5.091e-9,
2038 5.701e-9, 6.398e-9, 7.194e-9, 8.127e-9, 9.141e-9, 1.035e-8,
2039 1.177e-8, 1.338e-8, 1.508e-8, 1.711e-8, 1.955e-8, 2.216e-8,
2040 2.534e-8, 2.871e-8, 3.291e-8, 3.711e-8, 4.285e-8, 4.868e-8,
2041 5.509e-8, 6.276e-8, 7.262e-8, 8.252e-8, 9.4e-8, 1.064e-7,
2042 1.247e-7, 1.411e-7, 1.626e-7, 1.827e-7, 2.044e-7, 2.284e-7,
2043 2.452e-7, 2.854e-7, 3.026e-7, 3.278e-7, 3.474e-7, 3.693e-7,
2044 3.93e-7, 4.104e-7, 4.22e-7, 4.439e-7, 4.545e-7, 4.778e-7,
2045 4.812e-7, 5.018e-7, 4.899e-7, 5.075e-7, 5.073e-7, 5.171e-7,
2046 5.131e-7, 5.25e-7, 5.617e-7, 5.846e-7, 6.239e-7, 6.696e-7,
2047 7.398e-7, 8.073e-7, 9.15e-7, 1.009e-6, 1.116e-6, 1.264e-6,
2048 1.439e-6, 1.644e-6, 1.856e-6, 2.147e-6, 2.317e-6, 2.713e-6,
2049 2.882e-6, 2.99e-6, 3.489e-6, 3.581e-6, 4.033e-6, 4.26e-6,
2050 4.543e-6, 4.84e-6, 4.826e-6, 5.013e-6, 5.252e-6, 5.277e-6,
2051 5.306e-6, 5.236e-6, 5.123e-6, 5.171e-6, 4.843e-6, 4.615e-6,
2052 4.385e-6, 3.97e-6, 3.693e-6, 3.231e-6, 2.915e-6, 2.495e-6,
2053 2.144e-6, 1.91e-6, 1.639e-6, 1.417e-6, 1.226e-6, 1.065e-6,
2054 9.29e-7, 8.142e-7, 7.161e-7, 6.318e-7, 5.581e-7, 4.943e-7,
2055 4.376e-7, 3.884e-7, 3.449e-7, 3.06e-7, 2.712e-7, 2.412e-7,
2056 2.139e-7, 1.903e-7, 1.689e-7, 1.499e-7, 1.331e-7, 1.183e-7,
2057 1.05e-7, 9.362e-8, 8.306e-8, 7.403e-8, 6.578e-8, 5.853e-8,
2058 5.216e-8, 4.632e-8, 4.127e-8, 3.678e-8, 3.279e-8, 2.923e-8,
2059 2.612e-8, 2.339e-8, 2.094e-8, 1.877e-8, 1.686e-8, 1.516e-8,
2060 1.366e-8, 1.234e-8, 1.114e-8, 1.012e-8, 9.182e-9, 8.362e-9,
2061 7.634e-9, 6.981e-9, 6.406e-9, 5.888e-9, 5.428e-9, 5.021e-9,
2062 4.65e-9, 4.326e-9, 4.033e-9, 3.77e-9, 3.536e-9, 3.327e-9,
2063 3.141e-9, 2.974e-9, 2.825e-9, 2.697e-9, 2.584e-9, 2.488e-9,
2064 2.406e-9, 2.34e-9, 2.292e-9, 2.259e-9, 2.244e-9, 2.243e-9,
2065 2.272e-9, 2.31e-9, 2.378e-9, 2.454e-9, 2.618e-9, 2.672e-9,
2066 2.831e-9, 3.05e-9, 3.225e-9, 3.425e-9, 3.677e-9, 3.968e-9,
2067 4.221e-9, 4.639e-9, 4.96e-9, 5.359e-9, 5.649e-9, 6.23e-9,
2068 6.716e-9, 7.218e-9, 7.746e-9, 7.988e-9, 8.627e-9, 8.999e-9,
2069 9.442e-9, 9.82e-9, 1.015e-8, 1.06e-8, 1.079e-8, 1.109e-8,
2070 1.137e-8, 1.186e-8, 1.18e-8, 1.187e-8, 1.194e-8, 1.192e-8,
2071 1.224e-8, 1.245e-8, 1.246e-8, 1.318e-8, 1.377e-8, 1.471e-8,
2072 1.582e-8, 1.713e-8, 1.853e-8, 2.063e-8, 2.27e-8, 2.567e-8,
2073 2.891e-8, 3.264e-8, 3.744e-8, 4.286e-8, 4.915e-8, 5.623e-8,
2074 6.336e-8, 7.293e-8, 8.309e-8, 9.319e-8, 1.091e-7, 1.243e-7,
2075 1.348e-7, 1.449e-7, 1.62e-7, 1.846e-7, 1.937e-7, 2.04e-7,
2076 2.179e-7, 2.298e-7, 2.433e-7, 2.439e-7, 2.464e-7, 2.611e-7,
2077 2.617e-7, 2.582e-7, 2.453e-7, 2.401e-7, 2.349e-7, 2.203e-7,
2078 2.066e-7, 1.939e-7, 1.78e-7, 1.558e-7, 1.391e-7, 1.203e-7,
2079 1.048e-7, 9.464e-8, 8.306e-8, 7.239e-8, 6.317e-8, 5.52e-8,
2080 4.847e-8, 4.282e-8, 3.796e-8, 3.377e-8, 2.996e-8, 2.678e-8,
2081 2.4e-8, 2.134e-8, 1.904e-8, 1.705e-8, 1.523e-8, 1.35e-8,
2082 1.204e-8, 1.07e-8, 9.408e-9, 8.476e-9, 7.47e-9, 6.679e-9,
2083 5.929e-9, 5.267e-9, 4.711e-9, 4.172e-9, 3.761e-9, 3.288e-9,
2084 2.929e-9, 2.609e-9, 2.315e-9, 2.042e-9, 1.844e-9, 1.64e-9,
2085 1.47e-9, 1.31e-9, 1.176e-9, 1.049e-9, 9.377e-10, 8.462e-10,
2086 7.616e-10, 6.854e-10, 6.191e-10, 5.596e-10, 5.078e-10, 4.611e-10,
2087 4.197e-10, 3.83e-10, 3.505e-10, 3.215e-10, 2.956e-10, 2.726e-10,
2088 2.521e-10, 2.338e-10, 2.173e-10, 2.026e-10, 1.895e-10, 1.777e-10,
2089 1.672e-10, 1.579e-10, 1.496e-10, 1.423e-10, 1.358e-10, 1.302e-10,
2090 1.254e-10, 1.216e-10, 1.187e-10, 1.163e-10, 1.147e-10, 1.145e-10,
2091 1.15e-10, 1.17e-10, 1.192e-10, 1.25e-10, 1.298e-10, 1.345e-10,
2092 1.405e-10, 1.538e-10, 1.648e-10, 1.721e-10, 1.872e-10, 1.968e-10,
2093 2.089e-10, 2.172e-10, 2.317e-10, 2.389e-10, 2.503e-10, 2.585e-10,
2094 2.686e-10, 2.8e-10, 2.895e-10, 3.019e-10, 3.037e-10, 3.076e-10,
2095 3.146e-10, 3.198e-10, 3.332e-10, 3.397e-10, 3.54e-10, 3.667e-10,
2096 3.895e-10, 4.071e-10, 4.565e-10, 4.983e-10, 5.439e-10, 5.968e-10,
2097 6.676e-10, 7.456e-10, 8.405e-10, 9.478e-10, 1.064e-9, 1.218e-9,
2098 1.386e-9, 1.581e-9, 1.787e-9, 2.032e-9, 2.347e-9, 2.677e-9,
2099 3.008e-9, 3.544e-9, 4.056e-9, 4.687e-9, 5.331e-9, 6.227e-9,
2100 6.854e-9, 8.139e-9, 8.945e-9, 9.865e-9, 1.125e-8, 1.178e-8,
2101 1.364e-8, 1.436e-8, 1.54e-8, 1.672e-8, 1.793e-8, 1.906e-8,
2102 2.036e-8, 2.144e-8, 2.292e-8, 2.371e-8, 2.493e-8, 2.606e-8,
2103 2.706e-8, 2.866e-8, 3.036e-8, 3.136e-8, 3.405e-8, 3.665e-8,
2104 3.837e-8, 4.229e-8, 4.748e-8, 5.32e-8, 5.763e-8, 6.677e-8,
2105 7.216e-8, 7.716e-8, 8.958e-8, 9.419e-8, 1.036e-7, 1.108e-7,
2106 1.189e-7, 1.246e-7, 1.348e-7, 1.31e-7, 1.361e-7, 1.364e-7,
2107 1.363e-7, 1.343e-7, 1.293e-7, 1.254e-7, 1.235e-7, 1.158e-7,
2108 1.107e-7, 9.961e-8, 9.011e-8, 7.91e-8, 6.916e-8, 6.338e-8,
2109 5.564e-8, 4.827e-8, 4.198e-8, 3.695e-8, 3.276e-8, 2.929e-8,
2110 2.633e-8, 2.391e-8, 2.192e-8, 2.021e-8, 1.89e-8, 1.772e-8,
2111 1.667e-8, 1.603e-8, 1.547e-8, 1.537e-8, 1.492e-8, 1.515e-8,
2112 1.479e-8, 1.45e-8, 1.513e-8, 1.495e-8, 1.529e-8, 1.565e-8,
2113 1.564e-8, 1.553e-8, 1.569e-8, 1.584e-8, 1.57e-8, 1.538e-8,
2114 1.513e-8, 1.472e-8, 1.425e-8, 1.349e-8, 1.328e-8, 1.249e-8,
2115 1.17e-8, 1.077e-8, 9.514e-9, 8.614e-9, 7.46e-9, 6.621e-9,
2116 5.775e-9, 5.006e-9, 4.308e-9, 3.747e-9, 3.24e-9, 2.84e-9,
2117 2.481e-9, 2.184e-9, 1.923e-9, 1.71e-9, 1.504e-9, 1.334e-9,
2118 1.187e-9, 1.053e-9, 9.367e-10, 8.306e-10, 7.419e-10, 6.63e-10,
2119 5.918e-10, 5.277e-10, 4.717e-10, 4.222e-10, 3.783e-10, 3.39e-10,
2120 3.036e-10, 2.729e-10, 2.455e-10, 2.211e-10, 1.995e-10, 1.804e-10,
2121 1.635e-10, 1.485e-10, 1.355e-10, 1.24e-10, 1.139e-10, 1.051e-10,
2122 9.757e-11, 9.114e-11, 8.577e-11, 8.139e-11, 7.792e-11, 7.52e-11,
2123 7.39e-11, 7.311e-11, 7.277e-11, 7.482e-11, 7.698e-11, 8.162e-11,
2124 8.517e-11, 8.968e-11, 9.905e-11, 1.075e-10, 1.187e-10, 1.291e-10,
2125 1.426e-10, 1.573e-10, 1.734e-10, 1.905e-10, 2.097e-10, 2.28e-10,
2126 2.473e-10, 2.718e-10, 2.922e-10, 3.128e-10, 3.361e-10, 3.641e-10,
2127 3.91e-10, 4.196e-10, 4.501e-10, 4.932e-10, 5.258e-10, 5.755e-10,
2128 6.253e-10, 6.664e-10, 7.344e-10, 7.985e-10, 8.877e-10, 1.005e-9,
2129 1.118e-9, 1.251e-9, 1.428e-9, 1.61e-9, 1.888e-9, 2.077e-9,
2130 2.331e-9, 2.751e-9, 3.061e-9, 3.522e-9, 3.805e-9, 4.181e-9,
2131 4.575e-9, 5.167e-9, 5.634e-9, 6.007e-9, 6.501e-9, 6.829e-9,
2132 7.211e-9, 7.262e-9, 7.696e-9, 7.832e-9, 7.799e-9, 7.651e-9,
2133 7.304e-9, 7.15e-9, 6.977e-9, 6.603e-9, 6.209e-9, 5.69e-9,
2134 5.432e-9, 4.764e-9, 4.189e-9, 3.64e-9, 3.203e-9, 2.848e-9,
2135 2.51e-9, 2.194e-9, 1.946e-9, 1.75e-9, 1.567e-9, 1.426e-9,
2136 1.302e-9, 1.197e-9, 1.109e-9, 1.035e-9, 9.719e-10, 9.207e-10,
2137 8.957e-10, 8.578e-10, 8.262e-10, 8.117e-10, 7.987e-10, 7.875e-10,
2138 7.741e-10, 7.762e-10, 7.537e-10, 7.424e-10, 7.474e-10, 7.294e-10,
2139 7.216e-10, 7.233e-10, 7.075e-10, 6.892e-10, 6.618e-10, 6.314e-10,
2140 6.208e-10, 5.689e-10, 5.55e-10, 4.984e-10, 4.6e-10, 4.078e-10,
2141 3.879e-10, 3.459e-10, 2.982e-10, 2.626e-10, 2.329e-10, 1.988e-10,
2142 1.735e-10, 1.487e-10, 1.297e-10, 1.133e-10, 9.943e-11, 8.736e-11,
2143 7.726e-11, 6.836e-11, 6.053e-11, 5.384e-11, 4.789e-11, 4.267e-11,
2144 3.804e-11, 3.398e-11, 3.034e-11, 2.71e-11, 2.425e-11, 2.173e-11,
2145 1.95e-11, 1.752e-11, 1.574e-11, 1.418e-11, 1.278e-11, 1.154e-11,
2146 1.044e-11, 9.463e-12, 8.602e-12, 7.841e-12, 7.171e-12, 6.584e-12,
2147 6.073e-12, 5.631e-12, 5.254e-12, 4.937e-12, 4.679e-12, 4.476e-12,
2148 4.328e-12, 4.233e-12, 4.194e-12, 4.211e-12, 4.286e-12, 4.424e-12,
2149 4.628e-12, 4.906e-12, 5.262e-12, 5.708e-12, 6.254e-12, 6.914e-12,
2150 7.714e-12, 8.677e-12, 9.747e-12, 1.101e-11, 1.256e-11, 1.409e-11,
2151 1.597e-11, 1.807e-11, 2.034e-11, 2.316e-11, 2.622e-11, 2.962e-11,
2152 3.369e-11, 3.819e-11, 4.329e-11, 4.932e-11, 5.589e-11, 6.364e-11,
2153 7.284e-11, 8.236e-11, 9.447e-11, 1.078e-10, 1.229e-10, 1.417e-10,
2154 1.614e-10, 1.843e-10, 2.107e-10, 2.406e-10, 2.728e-10, 3.195e-10,
2155 3.595e-10, 4.153e-10, 4.736e-10, 5.41e-10, 6.088e-10, 6.769e-10,
2156 7.691e-10, 8.545e-10, 9.621e-10, 1.047e-9, 1.161e-9, 1.296e-9,
2157 1.424e-9, 1.576e-9, 1.739e-9, 1.893e-9, 2.08e-9, 2.336e-9,
2158 2.604e-9, 2.76e-9, 3.001e-9, 3.365e-9, 3.55e-9, 3.895e-9,
2159 4.183e-9, 4.614e-9, 4.846e-9, 5.068e-9, 5.427e-9, 5.541e-9,
2160 5.864e-9, 5.997e-9, 5.997e-9, 6.061e-9, 5.944e-9, 5.855e-9,
2161 5.661e-9, 5.523e-9, 5.374e-9, 4.94e-9, 4.688e-9, 4.17e-9,
2162 3.913e-9, 3.423e-9, 2.997e-9, 2.598e-9, 2.253e-9, 1.946e-9,
2163 1.71e-9, 1.507e-9, 1.336e-9, 1.19e-9, 1.068e-9, 9.623e-10,
2164 8.772e-10, 8.007e-10, 7.42e-10, 6.884e-10, 6.483e-10, 6.162e-10,
2165 5.922e-10, 5.688e-10, 5.654e-10, 5.637e-10, 5.701e-10, 5.781e-10,
2166 5.874e-10, 6.268e-10, 6.357e-10, 6.525e-10, 7.137e-10, 7.441e-10,
2167 8.024e-10, 8.485e-10, 9.143e-10, 9.536e-10, 9.717e-10, 1.018e-9,
2168 1.042e-9, 1.054e-9, 1.092e-9, 1.079e-9, 1.064e-9, 1.043e-9,
2169 1.02e-9, 9.687e-10, 9.273e-10, 9.208e-10, 9.068e-10, 7.687e-10,
2170 7.385e-10, 6.595e-10, 5.87e-10, 5.144e-10, 4.417e-10, 3.804e-10,
2171 3.301e-10, 2.866e-10, 2.509e-10, 2.202e-10, 1.947e-10, 1.719e-10,
2172 1.525e-10, 1.361e-10, 1.21e-10, 1.084e-10, 9.8e-11, 8.801e-11,
2173 7.954e-11, 7.124e-11, 6.335e-11, 5.76e-11, 5.132e-11, 4.601e-11,
2174 4.096e-11, 3.657e-11, 3.25e-11, 2.909e-11, 2.587e-11, 2.297e-11,
2175 2.05e-11, 1.828e-11, 1.632e-11, 1.462e-11, 1.314e-11, 1.185e-11,
2176 1.073e-11, 9.76e-12, 8.922e-12, 8.206e-12, 7.602e-12, 7.1e-12,
2177 6.694e-12, 6.378e-12, 6.149e-12, 6.004e-12, 5.941e-12, 5.962e-12,
2178 6.069e-12, 6.265e-12, 6.551e-12, 6.935e-12, 7.457e-12, 8.074e-12,
2179 8.811e-12, 9.852e-12, 1.086e-11, 1.207e-11, 1.361e-11, 1.553e-11,
2180 1.737e-11, 1.93e-11, 2.175e-11, 2.41e-11, 2.706e-11, 3.023e-11,
2181 3.313e-11, 3.657e-11, 4.118e-11, 4.569e-11, 5.025e-11, 5.66e-11,
2182 6.231e-11, 6.881e-11, 7.996e-11, 8.526e-11, 9.694e-11, 1.106e-10,
2183 1.222e-10, 1.355e-10, 1.525e-10, 1.775e-10, 1.924e-10, 2.181e-10,
2184 2.379e-10, 2.662e-10, 2.907e-10, 3.154e-10, 3.366e-10, 3.579e-10,
2185 3.858e-10, 4.046e-10, 4.196e-10, 4.166e-10, 4.457e-10, 4.466e-10,
2186 4.404e-10, 4.337e-10, 4.15e-10, 4.083e-10, 3.91e-10, 3.723e-10,
2187 3.514e-10, 3.303e-10, 2.847e-10, 2.546e-10, 2.23e-10, 1.994e-10,
2188 1.733e-10, 1.488e-10, 1.297e-10, 1.144e-10, 1.004e-10, 8.741e-11,
2189 7.928e-11, 7.034e-11, 6.323e-11, 5.754e-11, 5.25e-11, 4.85e-11,
2190 4.502e-11, 4.286e-11, 4.028e-11, 3.899e-11, 3.824e-11, 3.761e-11,
2191 3.804e-11, 3.839e-11, 3.845e-11, 4.244e-11, 4.382e-11, 4.582e-11,
2192 4.847e-11, 5.209e-11, 5.384e-11, 5.887e-11, 6.371e-11, 6.737e-11,
2193 7.168e-11, 7.415e-11, 7.827e-11, 8.037e-11, 8.12e-11, 8.071e-11,
2194 8.008e-11, 7.851e-11, 7.544e-11, 7.377e-11, 7.173e-11, 6.801e-11,
2195 6.267e-11, 5.727e-11, 5.288e-11, 4.853e-11, 4.082e-11, 3.645e-11,
2196 3.136e-11, 2.672e-11, 2.304e-11, 1.986e-11, 1.725e-11, 1.503e-11,
2197 1.315e-11, 1.153e-11, 1.014e-11, 8.942e-12, 7.901e-12, 6.993e-12,
2198 6.199e-12, 5.502e-12, 4.89e-12, 4.351e-12, 3.878e-12, 3.461e-12,
2199 3.094e-12, 2.771e-12, 2.488e-12, 2.241e-12, 2.025e-12, 1.838e-12,
2200 1.677e-12, 1.541e-12, 1.427e-12, 1.335e-12, 1.262e-12, 1.209e-12,
2201 1.176e-12, 1.161e-12, 1.165e-12, 1.189e-12, 1.234e-12, 1.3e-12,
2202 1.389e-12, 1.503e-12, 1.644e-12, 1.814e-12, 2.017e-12, 2.255e-12,
2203 2.534e-12, 2.858e-12, 3.231e-12, 3.661e-12, 4.153e-12, 4.717e-12,
2204 5.36e-12, 6.094e-12, 6.93e-12, 7.882e-12, 8.966e-12, 1.02e-11,
2205 1.162e-11, 1.324e-11, 1.51e-11, 1.72e-11, 1.965e-11, 2.237e-11,
2206 2.56e-11, 2.927e-11, 3.371e-11, 3.842e-11, 4.429e-11, 5.139e-11,
2207 5.798e-11, 6.697e-11, 7.626e-11, 8.647e-11, 1.022e-10, 1.136e-10,
2208 1.3e-10, 1.481e-10, 1.672e-10, 1.871e-10, 2.126e-10, 2.357e-10,
2209 2.583e-10, 2.997e-10, 3.289e-10, 3.702e-10, 4.012e-10, 4.319e-10,
2210 4.527e-10, 5.001e-10, 5.448e-10, 5.611e-10, 5.76e-10, 5.965e-10,
2211 6.079e-10, 6.207e-10, 6.276e-10, 6.222e-10, 6.137e-10, 6e-10,
2212 5.814e-10, 5.393e-10, 5.35e-10, 4.947e-10, 4.629e-10, 4.117e-10,
2213 3.712e-10, 3.372e-10, 2.923e-10, 2.55e-10, 2.232e-10, 1.929e-10,
2214 1.679e-10, 1.46e-10, 1.289e-10, 1.13e-10, 9.953e-11, 8.763e-11,
2215 7.76e-11, 6.9e-11, 6.16e-11, 5.525e-11, 4.958e-11, 4.489e-11,
2216 4.072e-11, 3.728e-11, 3.438e-11, 3.205e-11, 3.006e-11, 2.848e-11,
2217 2.766e-11, 2.688e-11, 2.664e-11, 2.67e-11, 2.696e-11, 2.786e-11,
2218 2.861e-11, 3.009e-11, 3.178e-11, 3.389e-11, 3.587e-11, 3.819e-11,
2219 4.054e-11, 4.417e-11, 4.703e-11, 5.137e-11, 5.46e-11, 6.055e-11,
2220 6.333e-11, 6.773e-11, 7.219e-11, 7.717e-11, 8.131e-11, 8.491e-11,
2221 8.574e-11, 9.01e-11, 9.017e-11, 8.999e-11, 8.959e-11, 8.838e-11,
2222 8.579e-11, 8.162e-11, 8.098e-11, 7.472e-11, 7.108e-11, 6.559e-11,
2223 5.994e-11, 5.172e-11, 4.424e-11, 3.951e-11, 3.34e-11, 2.902e-11,
2224 2.541e-11, 2.215e-11, 1.945e-11, 1.716e-11, 1.503e-11, 1.339e-11,
2225 1.185e-11, 1.05e-11, 9.336e-12, 8.307e-12, 7.312e-12, 6.55e-12,
2226 5.836e-12, 5.178e-12, 4.6e-12, 4.086e-12, 3.639e-12, 3.247e-12,
2227 2.904e-12, 2.604e-12, 2.341e-12, 2.112e-12, 1.914e-12, 1.744e-12,
2228 1.598e-12, 1.476e-12, 1.374e-12, 1.293e-12, 1.23e-12, 1.185e-12,
2229 1.158e-12, 1.147e-12, 1.154e-12, 1.177e-12, 1.219e-12, 1.28e-12,
2230 1.36e-12, 1.463e-12, 1.591e-12, 1.75e-12, 1.94e-12, 2.156e-12,
2231 2.43e-12, 2.748e-12, 3.052e-12, 3.533e-12, 3.967e-12, 4.471e-12,
2232 5.041e-12, 5.86e-12, 6.664e-12, 7.522e-12, 8.342e-12, 9.412e-12,
2233 1.072e-11, 1.213e-11, 1.343e-11, 1.496e-11, 1.664e-11, 1.822e-11,
2234 2.029e-11, 2.233e-11, 2.457e-11, 2.709e-11, 2.928e-11, 3.115e-11,
2235 3.356e-11, 3.592e-11, 3.818e-11, 3.936e-11, 4.061e-11, 4.149e-11,
2236 4.299e-11, 4.223e-11, 4.251e-11, 4.287e-11, 4.177e-11, 4.094e-11,
2237 3.942e-11, 3.772e-11, 3.614e-11, 3.394e-11, 3.222e-11, 2.791e-11,
2238 2.665e-11, 2.309e-11, 2.032e-11, 1.74e-11, 1.535e-11, 1.323e-11,
2239 1.151e-11, 9.803e-12, 8.65e-12, 7.54e-12, 6.619e-12, 5.832e-12,
2240 5.113e-12, 4.503e-12, 3.975e-12, 3.52e-12, 3.112e-12, 2.797e-12,
2241 2.5e-12, 2.24e-12, 2.013e-12, 1.819e-12, 1.653e-12, 1.513e-12,
2242 1.395e-12, 1.299e-12, 1.225e-12, 1.168e-12, 1.124e-12, 1.148e-12,
2243 1.107e-12, 1.128e-12, 1.169e-12, 1.233e-12, 1.307e-12, 1.359e-12,
2244 1.543e-12, 1.686e-12, 1.794e-12, 2.028e-12, 2.21e-12, 2.441e-12,
2245 2.653e-12, 2.828e-12, 3.093e-12, 3.28e-12, 3.551e-12, 3.677e-12,
2246 3.803e-12, 3.844e-12, 4.068e-12, 4.093e-12, 4.002e-12, 3.904e-12,
2247 3.624e-12, 3.633e-12, 3.622e-12, 3.443e-12, 3.184e-12, 2.934e-12,
2248 2.476e-12, 2.212e-12, 1.867e-12, 1.594e-12, 1.37e-12, 1.192e-12,
2249 1.045e-12, 9.211e-13, 8.17e-13, 7.29e-13, 6.55e-13, 5.929e-13,
2250 5.415e-13, 4.995e-13, 4.661e-13, 4.406e-13, 4.225e-13, 4.116e-13,
2251 4.075e-13, 4.102e-13, 4.198e-13, 4.365e-13, 4.606e-13, 4.925e-13,
2252 5.326e-13, 5.818e-13, 6.407e-13, 7.104e-13, 7.92e-13, 8.868e-13,
2253 9.964e-13, 1.123e-12, 1.268e-12, 1.434e-12, 1.626e-12, 1.848e-12,
2254 2.107e-12, 2.422e-12, 2.772e-12, 3.145e-12, 3.704e-12, 4.27e-12,
2255 4.721e-12, 5.361e-12, 6.083e-12, 7.095e-12, 7.968e-12, 9.228e-12,
2256 1.048e-11, 1.187e-11, 1.336e-11, 1.577e-11, 1.772e-11, 2.017e-11,
2257 2.25e-11, 2.63e-11, 2.911e-11, 3.356e-11, 3.82e-11, 4.173e-11,
2258 4.811e-11, 5.254e-11, 5.839e-11, 6.187e-11, 6.805e-11, 7.118e-11,
2259 7.369e-11, 7.664e-11, 7.794e-11, 7.947e-11, 8.036e-11, 7.954e-11,
2260 7.849e-11, 7.518e-11, 7.462e-11, 6.926e-11, 6.531e-11, 6.197e-11,
2261 5.421e-11, 4.777e-11, 4.111e-11, 3.679e-11, 3.166e-11, 2.786e-11,
2262 2.436e-11, 2.144e-11, 1.859e-11, 1.628e-11, 1.414e-11, 1.237e-11,
2263 1.093e-11, 9.558e-12
2264 };
2265
2266 static const double h2o260[2001] =
2267 { .2752, .2732, .2749, .2676, .2667, .2545,
2268 .2497, .2327, .2218, .2036, .1825, .1694, .1497, .1353, .121,
2269 .1014, .09405, .07848, .07195, .06246, .05306, .04853, .04138,
2270 .03735, .03171, .02785, .02431, .02111, .01845, .0164, .01405,
2271 .01255, .01098, .009797, .008646, .007779, .006898, .006099,
2272 .005453, .004909, .004413, .003959, .003581, .003199, .002871,
2273 .002583, .00233, .002086, .001874, .001684, .001512, .001361,
2274 .001225, .0011, 9.89e-4, 8.916e-4, 8.039e-4, 7.256e-4, 6.545e-4,
2275 5.918e-4, 5.359e-4, 4.867e-4, 4.426e-4, 4.033e-4, 3.682e-4,
2276 3.366e-4, 3.085e-4, 2.833e-4, 2.605e-4, 2.403e-4, 2.221e-4,
2277 2.055e-4, 1.908e-4, 1.774e-4, 1.653e-4, 1.544e-4, 1.443e-4,
2278 1.351e-4, 1.267e-4, 1.19e-4, 1.119e-4, 1.053e-4, 9.922e-5,
2279 9.355e-5, 8.831e-5, 8.339e-5, 7.878e-5, 7.449e-5, 7.043e-5,
2280 6.664e-5, 6.307e-5, 5.969e-5, 5.654e-5, 5.357e-5, 5.075e-5,
2281 4.81e-5, 4.56e-5, 4.322e-5, 4.102e-5, 3.892e-5, 3.696e-5,
2282 3.511e-5, 3.339e-5, 3.177e-5, 3.026e-5, 2.886e-5, 2.756e-5,
2283 2.636e-5, 2.527e-5, 2.427e-5, 2.337e-5, 2.257e-5, 2.185e-5,
2284 2.127e-5, 2.08e-5, 2.041e-5, 2.013e-5, 2e-5, 1.997e-5, 2.009e-5,
2285 2.031e-5, 2.068e-5, 2.124e-5, 2.189e-5, 2.267e-5, 2.364e-5,
2286 2.463e-5, 2.618e-5, 2.774e-5, 2.937e-5, 3.144e-5, 3.359e-5,
2287 3.695e-5, 4.002e-5, 4.374e-5, 4.947e-5, 5.431e-5, 6.281e-5,
2288 7.169e-5, 8.157e-5, 9.728e-5, 1.079e-4, 1.337e-4, 1.442e-4,
2289 1.683e-4, 1.879e-4, 2.223e-4, 2.425e-4, 2.838e-4, 3.143e-4,
2290 3.527e-4, 4.012e-4, 4.237e-4, 4.747e-4, 5.057e-4, 5.409e-4,
2291 5.734e-4, 5.944e-4, 6.077e-4, 6.175e-4, 6.238e-4, 6.226e-4,
2292 6.248e-4, 6.192e-4, 6.098e-4, 5.818e-4, 5.709e-4, 5.465e-4,
2293 5.043e-4, 4.699e-4, 4.294e-4, 3.984e-4, 3.672e-4, 3.152e-4,
2294 2.883e-4, 2.503e-4, 2.211e-4, 1.92e-4, 1.714e-4, 1.485e-4,
2295 1.358e-4, 1.156e-4, 1.021e-4, 8.887e-5, 7.842e-5, 7.12e-5,
2296 6.186e-5, 5.73e-5, 4.792e-5, 4.364e-5, 3.72e-5, 3.28e-5,
2297 2.946e-5, 2.591e-5, 2.261e-5, 2.048e-5, 1.813e-5, 1.63e-5,
2298 1.447e-5, 1.282e-5, 1.167e-5, 1.041e-5, 9.449e-6, 8.51e-6,
2299 7.596e-6, 6.961e-6, 6.272e-6, 5.728e-6, 5.198e-6, 4.667e-6,
2300 4.288e-6, 3.897e-6, 3.551e-6, 3.235e-6, 2.952e-6, 2.688e-6,
2301 2.449e-6, 2.241e-6, 2.05e-6, 1.879e-6, 1.722e-6, 1.582e-6,
2302 1.456e-6, 1.339e-6, 1.236e-6, 1.144e-6, 1.06e-6, 9.83e-7,
2303 9.149e-7, 8.535e-7, 7.973e-7, 7.466e-7, 6.999e-7, 6.574e-7,
2304 6.18e-7, 5.821e-7, 5.487e-7, 5.18e-7, 4.896e-7, 4.631e-7,
2305 4.386e-7, 4.16e-7, 3.945e-7, 3.748e-7, 3.562e-7, 3.385e-7,
2306 3.222e-7, 3.068e-7, 2.922e-7, 2.788e-7, 2.659e-7, 2.539e-7,
2307 2.425e-7, 2.318e-7, 2.219e-7, 2.127e-7, 2.039e-7, 1.958e-7,
2308 1.885e-7, 1.818e-7, 1.758e-7, 1.711e-7, 1.662e-7, 1.63e-7,
2309 1.605e-7, 1.58e-7, 1.559e-7, 1.545e-7, 1.532e-7, 1.522e-7,
2310 1.51e-7, 1.495e-7, 1.465e-7, 1.483e-7, 1.469e-7, 1.448e-7,
2311 1.444e-7, 1.436e-7, 1.426e-7, 1.431e-7, 1.425e-7, 1.445e-7,
2312 1.477e-7, 1.515e-7, 1.567e-7, 1.634e-7, 1.712e-7, 1.802e-7,
2313 1.914e-7, 2.024e-7, 2.159e-7, 2.295e-7, 2.461e-7, 2.621e-7,
2314 2.868e-7, 3.102e-7, 3.394e-7, 3.784e-7, 4.223e-7, 4.864e-7,
2315 5.501e-7, 6.039e-7, 7.193e-7, 7.728e-7, 9.514e-7, 1.073e-6,
2316 1.18e-6, 1.333e-6, 1.472e-6, 1.566e-6, 1.677e-6, 1.784e-6,
2317 1.904e-6, 1.953e-6, 2.02e-6, 2.074e-6, 2.128e-6, 2.162e-6,
2318 2.219e-6, 2.221e-6, 2.249e-6, 2.239e-6, 2.235e-6, 2.185e-6,
2319 2.141e-6, 2.124e-6, 2.09e-6, 2.068e-6, 2.1e-6, 2.104e-6,
2320 2.142e-6, 2.181e-6, 2.257e-6, 2.362e-6, 2.5e-6, 2.664e-6,
2321 2.884e-6, 3.189e-6, 3.48e-6, 3.847e-6, 4.313e-6, 4.79e-6,
2322 5.25e-6, 5.989e-6, 6.692e-6, 7.668e-6, 8.52e-6, 9.606e-6,
2323 1.073e-5, 1.225e-5, 1.377e-5, 1.582e-5, 1.761e-5, 2.029e-5,
2324 2.284e-5, 2.602e-5, 2.94e-5, 3.483e-5, 3.928e-5, 4.618e-5,
2325 5.24e-5, 6.132e-5, 7.183e-5, 8.521e-5, 9.111e-5, 1.07e-4,
2326 1.184e-4, 1.264e-4, 1.475e-4, 1.612e-4, 1.704e-4, 1.818e-4,
2327 1.924e-4, 1.994e-4, 2.061e-4, 2.18e-4, 2.187e-4, 2.2e-4,
2328 2.196e-4, 2.131e-4, 2.015e-4, 1.988e-4, 1.847e-4, 1.729e-4,
2329 1.597e-4, 1.373e-4, 1.262e-4, 1.087e-4, 9.439e-5, 8.061e-5,
2330 7.093e-5, 6.049e-5, 5.12e-5, 4.435e-5, 3.817e-5, 3.34e-5,
2331 2.927e-5, 2.573e-5, 2.291e-5, 2.04e-5, 1.827e-5, 1.636e-5,
2332 1.463e-5, 1.309e-5, 1.17e-5, 1.047e-5, 9.315e-6, 8.328e-6,
2333 7.458e-6, 6.665e-6, 5.94e-6, 5.316e-6, 4.752e-6, 4.252e-6,
2334 3.825e-6, 3.421e-6, 3.064e-6, 2.746e-6, 2.465e-6, 2.216e-6,
2335 1.99e-6, 1.79e-6, 1.609e-6, 1.449e-6, 1.306e-6, 1.177e-6,
2336 1.063e-6, 9.607e-7, 8.672e-7, 7.855e-7, 7.118e-7, 6.46e-7,
2337 5.871e-7, 5.34e-7, 4.868e-7, 4.447e-7, 4.068e-7, 3.729e-7,
2338 3.423e-7, 3.151e-7, 2.905e-7, 2.686e-7, 2.484e-7, 2.306e-7,
2339 2.142e-7, 1.995e-7, 1.86e-7, 1.738e-7, 1.626e-7, 1.522e-7,
2340 1.427e-7, 1.338e-7, 1.258e-7, 1.183e-7, 1.116e-7, 1.056e-7,
2341 9.972e-8, 9.46e-8, 9.007e-8, 8.592e-8, 8.195e-8, 7.816e-8,
2342 7.483e-8, 7.193e-8, 6.892e-8, 6.642e-8, 6.386e-8, 6.154e-8,
2343 5.949e-8, 5.764e-8, 5.622e-8, 5.479e-8, 5.364e-8, 5.301e-8,
2344 5.267e-8, 5.263e-8, 5.313e-8, 5.41e-8, 5.55e-8, 5.745e-8,
2345 6.003e-8, 6.311e-8, 6.713e-8, 7.173e-8, 7.724e-8, 8.368e-8,
2346 9.121e-8, 9.986e-8, 1.097e-7, 1.209e-7, 1.338e-7, 1.486e-7,
2347 1.651e-7, 1.837e-7, 2.048e-7, 2.289e-7, 2.557e-7, 2.857e-7,
2348 3.195e-7, 3.587e-7, 4.015e-7, 4.497e-7, 5.049e-7, 5.665e-7,
2349 6.366e-7, 7.121e-7, 7.996e-7, 8.946e-7, 1.002e-6, 1.117e-6,
2350 1.262e-6, 1.416e-6, 1.611e-6, 1.807e-6, 2.056e-6, 2.351e-6,
2351 2.769e-6, 3.138e-6, 3.699e-6, 4.386e-6, 5.041e-6, 6.074e-6,
2352 6.812e-6, 7.79e-6, 8.855e-6, 1.014e-5, 1.095e-5, 1.245e-5,
2353 1.316e-5, 1.39e-5, 1.504e-5, 1.583e-5, 1.617e-5, 1.652e-5,
2354 1.713e-5, 1.724e-5, 1.715e-5, 1.668e-5, 1.629e-5, 1.552e-5,
2355 1.478e-5, 1.34e-5, 1.245e-5, 1.121e-5, 9.575e-6, 8.956e-6,
2356 7.345e-6, 6.597e-6, 5.612e-6, 4.818e-6, 4.165e-6, 3.579e-6,
2357 3.041e-6, 2.623e-6, 2.29e-6, 1.984e-6, 1.748e-6, 1.534e-6,
2358 1.369e-6, 1.219e-6, 1.092e-6, 9.8e-7, 8.762e-7, 7.896e-7,
2359 7.104e-7, 6.364e-7, 5.691e-7, 5.107e-7, 4.575e-7, 4.09e-7,
2360 3.667e-7, 3.287e-7, 2.931e-7, 2.633e-7, 2.356e-7, 2.111e-7,
2361 1.895e-7, 1.697e-7, 1.525e-7, 1.369e-7, 1.233e-7, 1.114e-7,
2362 9.988e-8, 9.004e-8, 8.149e-8, 7.352e-8, 6.662e-8, 6.03e-8,
2363 5.479e-8, 4.974e-8, 4.532e-8, 4.129e-8, 3.781e-8, 3.462e-8,
2364 3.176e-8, 2.919e-8, 2.687e-8, 2.481e-8, 2.292e-8, 2.119e-8,
2365 1.967e-8, 1.828e-8, 1.706e-8, 1.589e-8, 1.487e-8, 1.393e-8,
2366 1.307e-8, 1.228e-8, 1.156e-8, 1.089e-8, 1.028e-8, 9.696e-9,
2367 9.159e-9, 8.658e-9, 8.187e-9, 7.746e-9, 7.34e-9, 6.953e-9,
2368 6.594e-9, 6.259e-9, 5.948e-9, 5.66e-9, 5.386e-9, 5.135e-9,
2369 4.903e-9, 4.703e-9, 4.515e-9, 4.362e-9, 4.233e-9, 4.117e-9,
2370 4.017e-9, 3.962e-9, 3.924e-9, 3.905e-9, 3.922e-9, 3.967e-9,
2371 4.046e-9, 4.165e-9, 4.32e-9, 4.522e-9, 4.769e-9, 5.083e-9,
2372 5.443e-9, 5.872e-9, 6.366e-9, 6.949e-9, 7.601e-9, 8.371e-9,
2373 9.22e-9, 1.02e-8, 1.129e-8, 1.251e-8, 1.393e-8, 1.542e-8,
2374 1.72e-8, 1.926e-8, 2.152e-8, 2.392e-8, 2.678e-8, 3.028e-8,
2375 3.39e-8, 3.836e-8, 4.309e-8, 4.9e-8, 5.481e-8, 6.252e-8,
2376 7.039e-8, 7.883e-8, 8.849e-8, 1.012e-7, 1.142e-7, 1.3e-7,
2377 1.475e-7, 1.732e-7, 1.978e-7, 2.304e-7, 2.631e-7, 2.988e-7,
2378 3.392e-7, 3.69e-7, 4.355e-7, 4.672e-7, 5.11e-7, 5.461e-7,
2379 5.828e-7, 6.233e-7, 6.509e-7, 6.672e-7, 6.969e-7, 7.104e-7,
2380 7.439e-7, 7.463e-7, 7.708e-7, 7.466e-7, 7.668e-7, 7.549e-7,
2381 7.586e-7, 7.384e-7, 7.439e-7, 7.785e-7, 7.915e-7, 8.31e-7,
2382 8.745e-7, 9.558e-7, 1.038e-6, 1.173e-6, 1.304e-6, 1.452e-6,
2383 1.671e-6, 1.931e-6, 2.239e-6, 2.578e-6, 3.032e-6, 3.334e-6,
2384 3.98e-6, 4.3e-6, 4.518e-6, 5.321e-6, 5.508e-6, 6.211e-6, 6.59e-6,
2385 7.046e-6, 7.555e-6, 7.558e-6, 7.875e-6, 8.319e-6, 8.433e-6,
2386 8.59e-6, 8.503e-6, 8.304e-6, 8.336e-6, 7.739e-6, 7.301e-6,
2387 6.827e-6, 6.078e-6, 5.551e-6, 4.762e-6, 4.224e-6, 3.538e-6,
2388 2.984e-6, 2.619e-6, 2.227e-6, 1.923e-6, 1.669e-6, 1.462e-6,
2389 1.294e-6, 1.155e-6, 1.033e-6, 9.231e-7, 8.238e-7, 7.36e-7,
2390 6.564e-7, 5.869e-7, 5.236e-7, 4.673e-7, 4.174e-7, 3.736e-7,
2391 3.33e-7, 2.976e-7, 2.657e-7, 2.367e-7, 2.106e-7, 1.877e-7,
2392 1.671e-7, 1.494e-7, 1.332e-7, 1.192e-7, 1.065e-7, 9.558e-8,
2393 8.586e-8, 7.717e-8, 6.958e-8, 6.278e-8, 5.666e-8, 5.121e-8,
2394 4.647e-8, 4.213e-8, 3.815e-8, 3.459e-8, 3.146e-8, 2.862e-8,
2395 2.604e-8, 2.375e-8, 2.162e-8, 1.981e-8, 1.817e-8, 1.67e-8,
2396 1.537e-8, 1.417e-8, 1.31e-8, 1.215e-8, 1.128e-8, 1.05e-8,
2397 9.793e-9, 9.158e-9, 8.586e-9, 8.068e-9, 7.595e-9, 7.166e-9,
2398 6.778e-9, 6.427e-9, 6.108e-9, 5.826e-9, 5.571e-9, 5.347e-9,
2399 5.144e-9, 4.968e-9, 4.822e-9, 4.692e-9, 4.589e-9, 4.506e-9,
2400 4.467e-9, 4.44e-9, 4.466e-9, 4.515e-9, 4.718e-9, 4.729e-9,
2401 4.937e-9, 5.249e-9, 5.466e-9, 5.713e-9, 6.03e-9, 6.436e-9,
2402 6.741e-9, 7.33e-9, 7.787e-9, 8.414e-9, 8.908e-9, 9.868e-9,
2403 1.069e-8, 1.158e-8, 1.253e-8, 1.3e-8, 1.409e-8, 1.47e-8,
2404 1.548e-8, 1.612e-8, 1.666e-8, 1.736e-8, 1.763e-8, 1.812e-8,
2405 1.852e-8, 1.923e-8, 1.897e-8, 1.893e-8, 1.888e-8, 1.868e-8,
2406 1.895e-8, 1.899e-8, 1.876e-8, 1.96e-8, 2.02e-8, 2.121e-8,
2407 2.239e-8, 2.379e-8, 2.526e-8, 2.766e-8, 2.994e-8, 3.332e-8,
2408 3.703e-8, 4.158e-8, 4.774e-8, 5.499e-8, 6.355e-8, 7.349e-8,
2409 8.414e-8, 9.846e-8, 1.143e-7, 1.307e-7, 1.562e-7, 1.817e-7,
2410 2.011e-7, 2.192e-7, 2.485e-7, 2.867e-7, 3.035e-7, 3.223e-7,
2411 3.443e-7, 3.617e-7, 3.793e-7, 3.793e-7, 3.839e-7, 4.081e-7,
2412 4.117e-7, 4.085e-7, 3.92e-7, 3.851e-7, 3.754e-7, 3.49e-7,
2413 3.229e-7, 2.978e-7, 2.691e-7, 2.312e-7, 2.029e-7, 1.721e-7,
2414 1.472e-7, 1.308e-7, 1.132e-7, 9.736e-8, 8.458e-8, 7.402e-8,
2415 6.534e-8, 5.811e-8, 5.235e-8, 4.762e-8, 4.293e-8, 3.896e-8,
2416 3.526e-8, 3.165e-8, 2.833e-8, 2.551e-8, 2.288e-8, 2.036e-8,
2417 1.82e-8, 1.626e-8, 1.438e-8, 1.299e-8, 1.149e-8, 1.03e-8,
2418 9.148e-9, 8.122e-9, 7.264e-9, 6.425e-9, 5.777e-9, 5.06e-9,
2419 4.502e-9, 4.013e-9, 3.567e-9, 3.145e-9, 2.864e-9, 2.553e-9,
2420 2.311e-9, 2.087e-9, 1.886e-9, 1.716e-9, 1.556e-9, 1.432e-9,
2421 1.311e-9, 1.202e-9, 1.104e-9, 1.013e-9, 9.293e-10, 8.493e-10,
2422 7.79e-10, 7.185e-10, 6.642e-10, 6.141e-10, 5.684e-10, 5.346e-10,
2423 5.032e-10, 4.725e-10, 4.439e-10, 4.176e-10, 3.93e-10, 3.714e-10,
2424 3.515e-10, 3.332e-10, 3.167e-10, 3.02e-10, 2.887e-10, 2.769e-10,
2425 2.665e-10, 2.578e-10, 2.503e-10, 2.436e-10, 2.377e-10, 2.342e-10,
2426 2.305e-10, 2.296e-10, 2.278e-10, 2.321e-10, 2.355e-10, 2.402e-10,
2427 2.478e-10, 2.67e-10, 2.848e-10, 2.982e-10, 3.263e-10, 3.438e-10,
2428 3.649e-10, 3.829e-10, 4.115e-10, 4.264e-10, 4.473e-10, 4.63e-10,
2429 4.808e-10, 4.995e-10, 5.142e-10, 5.313e-10, 5.318e-10, 5.358e-10,
2430 5.452e-10, 5.507e-10, 5.698e-10, 5.782e-10, 5.983e-10, 6.164e-10,
2431 6.532e-10, 6.811e-10, 7.624e-10, 8.302e-10, 9.067e-10, 9.937e-10,
2432 1.104e-9, 1.221e-9, 1.361e-9, 1.516e-9, 1.675e-9, 1.883e-9,
2433 2.101e-9, 2.349e-9, 2.614e-9, 2.92e-9, 3.305e-9, 3.724e-9,
2434 4.142e-9, 4.887e-9, 5.614e-9, 6.506e-9, 7.463e-9, 8.817e-9,
2435 9.849e-9, 1.187e-8, 1.321e-8, 1.474e-8, 1.698e-8, 1.794e-8,
2436 2.09e-8, 2.211e-8, 2.362e-8, 2.556e-8, 2.729e-8, 2.88e-8,
2437 3.046e-8, 3.167e-8, 3.367e-8, 3.457e-8, 3.59e-8, 3.711e-8,
2438 3.826e-8, 4.001e-8, 4.211e-8, 4.315e-8, 4.661e-8, 5.01e-8,
2439 5.249e-8, 5.84e-8, 6.628e-8, 7.512e-8, 8.253e-8, 9.722e-8,
2440 1.067e-7, 1.153e-7, 1.347e-7, 1.428e-7, 1.577e-7, 1.694e-7,
2441 1.833e-7, 1.938e-7, 2.108e-7, 2.059e-7, 2.157e-7, 2.185e-7,
2442 2.208e-7, 2.182e-7, 2.093e-7, 2.014e-7, 1.962e-7, 1.819e-7,
2443 1.713e-7, 1.51e-7, 1.34e-7, 1.154e-7, 9.89e-8, 8.88e-8, 7.673e-8,
2444 6.599e-8, 5.73e-8, 5.081e-8, 4.567e-8, 4.147e-8, 3.773e-8,
2445 3.46e-8, 3.194e-8, 2.953e-8, 2.759e-8, 2.594e-8, 2.442e-8,
2446 2.355e-8, 2.283e-8, 2.279e-8, 2.231e-8, 2.279e-8, 2.239e-8,
2447 2.21e-8, 2.309e-8, 2.293e-8, 2.352e-8, 2.415e-8, 2.43e-8,
2448 2.426e-8, 2.465e-8, 2.5e-8, 2.496e-8, 2.465e-8, 2.445e-8,
2449 2.383e-8, 2.299e-8, 2.165e-8, 2.113e-8, 1.968e-8, 1.819e-8,
2450 1.644e-8, 1.427e-8, 1.27e-8, 1.082e-8, 9.428e-9, 8.091e-9,
2451 6.958e-9, 5.988e-9, 5.246e-9, 4.601e-9, 4.098e-9, 3.664e-9,
2452 3.287e-9, 2.942e-9, 2.656e-9, 2.364e-9, 2.118e-9, 1.903e-9,
2453 1.703e-9, 1.525e-9, 1.365e-9, 1.229e-9, 1.107e-9, 9.96e-10,
2454 8.945e-10, 8.08e-10, 7.308e-10, 6.616e-10, 5.994e-10, 5.422e-10,
2455 4.929e-10, 4.478e-10, 4.07e-10, 3.707e-10, 3.379e-10, 3.087e-10,
2456 2.823e-10, 2.592e-10, 2.385e-10, 2.201e-10, 2.038e-10, 1.897e-10,
2457 1.774e-10, 1.667e-10, 1.577e-10, 1.502e-10, 1.437e-10, 1.394e-10,
2458 1.358e-10, 1.324e-10, 1.329e-10, 1.324e-10, 1.36e-10, 1.39e-10,
2459 1.424e-10, 1.544e-10, 1.651e-10, 1.817e-10, 1.984e-10, 2.195e-10,
2460 2.438e-10, 2.7e-10, 2.991e-10, 3.322e-10, 3.632e-10, 3.957e-10,
2461 4.36e-10, 4.701e-10, 5.03e-10, 5.381e-10, 5.793e-10, 6.19e-10,
2462 6.596e-10, 7.004e-10, 7.561e-10, 7.934e-10, 8.552e-10, 9.142e-10,
2463 9.57e-10, 1.027e-9, 1.097e-9, 1.193e-9, 1.334e-9, 1.47e-9,
2464 1.636e-9, 1.871e-9, 2.122e-9, 2.519e-9, 2.806e-9, 3.203e-9,
2465 3.846e-9, 4.362e-9, 5.114e-9, 5.643e-9, 6.305e-9, 6.981e-9,
2466 7.983e-9, 8.783e-9, 9.419e-9, 1.017e-8, 1.063e-8, 1.121e-8,
2467 1.13e-8, 1.201e-8, 1.225e-8, 1.232e-8, 1.223e-8, 1.177e-8,
2468 1.151e-8, 1.116e-8, 1.047e-8, 9.698e-9, 8.734e-9, 8.202e-9,
2469 7.041e-9, 6.074e-9, 5.172e-9, 4.468e-9, 3.913e-9, 3.414e-9,
2470 2.975e-9, 2.65e-9, 2.406e-9, 2.173e-9, 2.009e-9, 1.861e-9,
2471 1.727e-9, 1.612e-9, 1.514e-9, 1.43e-9, 1.362e-9, 1.333e-9,
2472 1.288e-9, 1.249e-9, 1.238e-9, 1.228e-9, 1.217e-9, 1.202e-9,
2473 1.209e-9, 1.177e-9, 1.157e-9, 1.165e-9, 1.142e-9, 1.131e-9,
2474 1.138e-9, 1.117e-9, 1.1e-9, 1.069e-9, 1.023e-9, 1.005e-9,
2475 9.159e-10, 8.863e-10, 7.865e-10, 7.153e-10, 6.247e-10, 5.846e-10,
2476 5.133e-10, 4.36e-10, 3.789e-10, 3.335e-10, 2.833e-10, 2.483e-10,
2477 2.155e-10, 1.918e-10, 1.709e-10, 1.529e-10, 1.374e-10, 1.235e-10,
2478 1.108e-10, 9.933e-11, 8.932e-11, 8.022e-11, 7.224e-11, 6.52e-11,
2479 5.896e-11, 5.328e-11, 4.813e-11, 4.365e-11, 3.961e-11, 3.594e-11,
2480 3.266e-11, 2.967e-11, 2.701e-11, 2.464e-11, 2.248e-11, 2.054e-11,
2481 1.878e-11, 1.721e-11, 1.579e-11, 1.453e-11, 1.341e-11, 1.241e-11,
2482 1.154e-11, 1.078e-11, 1.014e-11, 9.601e-12, 9.167e-12, 8.838e-12,
2483 8.614e-12, 8.493e-12, 8.481e-12, 8.581e-12, 8.795e-12, 9.131e-12,
2484 9.601e-12, 1.021e-11, 1.097e-11, 1.191e-11, 1.303e-11, 1.439e-11,
2485 1.601e-11, 1.778e-11, 1.984e-11, 2.234e-11, 2.474e-11, 2.766e-11,
2486 3.085e-11, 3.415e-11, 3.821e-11, 4.261e-11, 4.748e-11, 5.323e-11,
2487 5.935e-11, 6.619e-11, 7.418e-11, 8.294e-11, 9.26e-11, 1.039e-10,
2488 1.156e-10, 1.297e-10, 1.46e-10, 1.641e-10, 1.858e-10, 2.1e-10,
2489 2.383e-10, 2.724e-10, 3.116e-10, 3.538e-10, 4.173e-10, 4.727e-10,
2490 5.503e-10, 6.337e-10, 7.32e-10, 8.298e-10, 9.328e-10, 1.059e-9,
2491 1.176e-9, 1.328e-9, 1.445e-9, 1.593e-9, 1.77e-9, 1.954e-9,
2492 2.175e-9, 2.405e-9, 2.622e-9, 2.906e-9, 3.294e-9, 3.713e-9,
2493 3.98e-9, 4.384e-9, 4.987e-9, 5.311e-9, 5.874e-9, 6.337e-9,
2494 7.027e-9, 7.39e-9, 7.769e-9, 8.374e-9, 8.605e-9, 9.165e-9,
2495 9.415e-9, 9.511e-9, 9.704e-9, 9.588e-9, 9.45e-9, 9.086e-9,
2496 8.798e-9, 8.469e-9, 7.697e-9, 7.168e-9, 6.255e-9, 5.772e-9,
2497 4.97e-9, 4.271e-9, 3.653e-9, 3.154e-9, 2.742e-9, 2.435e-9,
2498 2.166e-9, 1.936e-9, 1.731e-9, 1.556e-9, 1.399e-9, 1.272e-9,
2499 1.157e-9, 1.066e-9, 9.844e-10, 9.258e-10, 8.787e-10, 8.421e-10,
2500 8.083e-10, 8.046e-10, 8.067e-10, 8.181e-10, 8.325e-10, 8.517e-10,
2501 9.151e-10, 9.351e-10, 9.677e-10, 1.071e-9, 1.126e-9, 1.219e-9,
2502 1.297e-9, 1.408e-9, 1.476e-9, 1.517e-9, 1.6e-9, 1.649e-9,
2503 1.678e-9, 1.746e-9, 1.742e-9, 1.728e-9, 1.699e-9, 1.655e-9,
2504 1.561e-9, 1.48e-9, 1.451e-9, 1.411e-9, 1.171e-9, 1.106e-9,
2505 9.714e-10, 8.523e-10, 7.346e-10, 6.241e-10, 5.371e-10, 4.704e-10,
2506 4.144e-10, 3.683e-10, 3.292e-10, 2.942e-10, 2.62e-10, 2.341e-10,
2507 2.104e-10, 1.884e-10, 1.7e-10, 1.546e-10, 1.394e-10, 1.265e-10,
2508 1.14e-10, 1.019e-10, 9.279e-11, 8.283e-11, 7.458e-11, 6.668e-11,
2509 5.976e-11, 5.33e-11, 4.794e-11, 4.289e-11, 3.841e-11, 3.467e-11,
2510 3.13e-11, 2.832e-11, 2.582e-11, 2.356e-11, 2.152e-11, 1.97e-11,
2511 1.808e-11, 1.664e-11, 1.539e-11, 1.434e-11, 1.344e-11, 1.269e-11,
2512 1.209e-11, 1.162e-11, 1.129e-11, 1.108e-11, 1.099e-11, 1.103e-11,
2513 1.119e-11, 1.148e-11, 1.193e-11, 1.252e-11, 1.329e-11, 1.421e-11,
2514 1.555e-11, 1.685e-11, 1.839e-11, 2.054e-11, 2.317e-11, 2.571e-11,
2515 2.839e-11, 3.171e-11, 3.49e-11, 3.886e-11, 4.287e-11, 4.645e-11,
2516 5.047e-11, 5.592e-11, 6.109e-11, 6.628e-11, 7.381e-11, 8.088e-11,
2517 8.966e-11, 1.045e-10, 1.12e-10, 1.287e-10, 1.486e-10, 1.662e-10,
2518 1.866e-10, 2.133e-10, 2.524e-10, 2.776e-10, 3.204e-10, 3.559e-10,
2519 4.028e-10, 4.448e-10, 4.882e-10, 5.244e-10, 5.605e-10, 6.018e-10,
2520 6.328e-10, 6.579e-10, 6.541e-10, 7.024e-10, 7.074e-10, 7.068e-10,
2521 7.009e-10, 6.698e-10, 6.545e-10, 6.209e-10, 5.834e-10, 5.412e-10,
2522 5.001e-10, 4.231e-10, 3.727e-10, 3.211e-10, 2.833e-10, 2.447e-10,
2523 2.097e-10, 1.843e-10, 1.639e-10, 1.449e-10, 1.27e-10, 1.161e-10,
2524 1.033e-10, 9.282e-11, 8.407e-11, 7.639e-11, 7.023e-11, 6.474e-11,
2525 6.142e-11, 5.76e-11, 5.568e-11, 5.472e-11, 5.39e-11, 5.455e-11,
2526 5.54e-11, 5.587e-11, 6.23e-11, 6.49e-11, 6.868e-11, 7.382e-11,
2527 8.022e-11, 8.372e-11, 9.243e-11, 1.004e-10, 1.062e-10, 1.13e-10,
2528 1.176e-10, 1.244e-10, 1.279e-10, 1.298e-10, 1.302e-10, 1.312e-10,
2529 1.295e-10, 1.244e-10, 1.211e-10, 1.167e-10, 1.098e-10, 9.927e-11,
2530 8.854e-11, 8.011e-11, 7.182e-11, 5.923e-11, 5.212e-11, 4.453e-11,
2531 3.832e-11, 3.371e-11, 2.987e-11, 2.651e-11, 2.354e-11, 2.093e-11,
2532 1.863e-11, 1.662e-11, 1.486e-11, 1.331e-11, 1.193e-11, 1.071e-11,
2533 9.628e-12, 8.66e-12, 7.801e-12, 7.031e-12, 6.347e-12, 5.733e-12,
2534 5.182e-12, 4.695e-12, 4.26e-12, 3.874e-12, 3.533e-12, 3.235e-12,
2535 2.979e-12, 2.76e-12, 2.579e-12, 2.432e-12, 2.321e-12, 2.246e-12,
2536 2.205e-12, 2.196e-12, 2.223e-12, 2.288e-12, 2.387e-12, 2.525e-12,
2537 2.704e-12, 2.925e-12, 3.191e-12, 3.508e-12, 3.876e-12, 4.303e-12,
2538 4.793e-12, 5.347e-12, 5.978e-12, 6.682e-12, 7.467e-12, 8.34e-12,
2539 9.293e-12, 1.035e-11, 1.152e-11, 1.285e-11, 1.428e-11, 1.586e-11,
2540 1.764e-11, 1.972e-11, 2.214e-11, 2.478e-11, 2.776e-11, 3.151e-11,
2541 3.591e-11, 4.103e-11, 4.66e-11, 5.395e-11, 6.306e-11, 7.172e-11,
2542 8.358e-11, 9.67e-11, 1.11e-10, 1.325e-10, 1.494e-10, 1.736e-10,
2543 2.007e-10, 2.296e-10, 2.608e-10, 3.004e-10, 3.361e-10, 3.727e-10,
2544 4.373e-10, 4.838e-10, 5.483e-10, 6.006e-10, 6.535e-10, 6.899e-10,
2545 7.687e-10, 8.444e-10, 8.798e-10, 9.135e-10, 9.532e-10, 9.757e-10,
2546 9.968e-10, 1.006e-9, 9.949e-10, 9.789e-10, 9.564e-10, 9.215e-10,
2547 8.51e-10, 8.394e-10, 7.707e-10, 7.152e-10, 6.274e-10, 5.598e-10,
2548 5.028e-10, 4.3e-10, 3.71e-10, 3.245e-10, 2.809e-10, 2.461e-10,
2549 2.154e-10, 1.91e-10, 1.685e-10, 1.487e-10, 1.313e-10, 1.163e-10,
2550 1.031e-10, 9.172e-11, 8.221e-11, 7.382e-11, 6.693e-11, 6.079e-11,
2551 5.581e-11, 5.167e-11, 4.811e-11, 4.506e-11, 4.255e-11, 4.083e-11,
2552 3.949e-11, 3.881e-11, 3.861e-11, 3.858e-11, 3.951e-11, 4.045e-11,
2553 4.24e-11, 4.487e-11, 4.806e-11, 5.133e-11, 5.518e-11, 5.919e-11,
2554 6.533e-11, 7.031e-11, 7.762e-11, 8.305e-11, 9.252e-11, 9.727e-11,
2555 1.045e-10, 1.117e-10, 1.2e-10, 1.275e-10, 1.341e-10, 1.362e-10,
2556 1.438e-10, 1.45e-10, 1.455e-10, 1.455e-10, 1.434e-10, 1.381e-10,
2557 1.301e-10, 1.276e-10, 1.163e-10, 1.089e-10, 9.911e-11, 8.943e-11,
2558 7.618e-11, 6.424e-11, 5.717e-11, 4.866e-11, 4.257e-11, 3.773e-11,
2559 3.331e-11, 2.958e-11, 2.629e-11, 2.316e-11, 2.073e-11, 1.841e-11,
2560 1.635e-11, 1.464e-11, 1.31e-11, 1.16e-11, 1.047e-11, 9.408e-12,
2561 8.414e-12, 7.521e-12, 6.705e-12, 5.993e-12, 5.371e-12, 4.815e-12,
2562 4.338e-12, 3.921e-12, 3.567e-12, 3.265e-12, 3.01e-12, 2.795e-12,
2563 2.613e-12, 2.464e-12, 2.346e-12, 2.256e-12, 2.195e-12, 2.165e-12,
2564 2.166e-12, 2.198e-12, 2.262e-12, 2.364e-12, 2.502e-12, 2.682e-12,
2565 2.908e-12, 3.187e-12, 3.533e-12, 3.946e-12, 4.418e-12, 5.013e-12,
2566 5.708e-12, 6.379e-12, 7.43e-12, 8.39e-12, 9.51e-12, 1.078e-11,
2567 1.259e-11, 1.438e-11, 1.63e-11, 1.814e-11, 2.055e-11, 2.348e-11,
2568 2.664e-11, 2.956e-11, 3.3e-11, 3.677e-11, 4.032e-11, 4.494e-11,
2569 4.951e-11, 5.452e-11, 6.014e-11, 6.5e-11, 6.915e-11, 7.45e-11,
2570 7.971e-11, 8.468e-11, 8.726e-11, 8.995e-11, 9.182e-11, 9.509e-11,
2571 9.333e-11, 9.386e-11, 9.457e-11, 9.21e-11, 9.019e-11, 8.68e-11,
2572 8.298e-11, 7.947e-11, 7.46e-11, 7.082e-11, 6.132e-11, 5.855e-11,
2573 5.073e-11, 4.464e-11, 3.825e-11, 3.375e-11, 2.911e-11, 2.535e-11,
2574 2.16e-11, 1.907e-11, 1.665e-11, 1.463e-11, 1.291e-11, 1.133e-11,
2575 9.997e-12, 8.836e-12, 7.839e-12, 6.943e-12, 6.254e-12, 5.6e-12,
2576 5.029e-12, 4.529e-12, 4.102e-12, 3.737e-12, 3.428e-12, 3.169e-12,
2577 2.959e-12, 2.798e-12, 2.675e-12, 2.582e-12, 2.644e-12, 2.557e-12,
2578 2.614e-12, 2.717e-12, 2.874e-12, 3.056e-12, 3.187e-12, 3.631e-12,
2579 3.979e-12, 4.248e-12, 4.817e-12, 5.266e-12, 5.836e-12, 6.365e-12,
2580 6.807e-12, 7.47e-12, 7.951e-12, 8.636e-12, 8.972e-12, 9.314e-12,
2581 9.445e-12, 1.003e-11, 1.013e-11, 9.937e-12, 9.729e-12, 9.064e-12,
2582 9.119e-12, 9.124e-12, 8.704e-12, 8.078e-12, 7.47e-12, 6.329e-12,
2583 5.674e-12, 4.808e-12, 4.119e-12, 3.554e-12, 3.103e-12, 2.731e-12,
2584 2.415e-12, 2.15e-12, 1.926e-12, 1.737e-12, 1.578e-12, 1.447e-12,
2585 1.34e-12, 1.255e-12, 1.191e-12, 1.146e-12, 1.121e-12, 1.114e-12,
2586 1.126e-12, 1.156e-12, 1.207e-12, 1.278e-12, 1.372e-12, 1.49e-12,
2587 1.633e-12, 1.805e-12, 2.01e-12, 2.249e-12, 2.528e-12, 2.852e-12,
2588 3.228e-12, 3.658e-12, 4.153e-12, 4.728e-12, 5.394e-12, 6.176e-12,
2589 7.126e-12, 8.188e-12, 9.328e-12, 1.103e-11, 1.276e-11, 1.417e-11,
2590 1.615e-11, 1.84e-11, 2.155e-11, 2.429e-11, 2.826e-11, 3.222e-11,
2591 3.664e-11, 4.14e-11, 4.906e-11, 5.536e-11, 6.327e-11, 7.088e-11,
2592 8.316e-11, 9.242e-11, 1.07e-10, 1.223e-10, 1.341e-10, 1.553e-10,
2593 1.703e-10, 1.9e-10, 2.022e-10, 2.233e-10, 2.345e-10, 2.438e-10,
2594 2.546e-10, 2.599e-10, 2.661e-10, 2.703e-10, 2.686e-10, 2.662e-10,
2595 2.56e-10, 2.552e-10, 2.378e-10, 2.252e-10, 2.146e-10, 1.885e-10,
2596 1.668e-10, 1.441e-10, 1.295e-10, 1.119e-10, 9.893e-11, 8.687e-11,
2597 7.678e-11, 6.685e-11, 5.879e-11, 5.127e-11, 4.505e-11, 3.997e-11,
2598 3.511e-11
2599 };
2600
2601 static const double h2ofrn[2001] = { .01095, .01126, .01205, .01322, .0143,
2602 .01506, .01548, .01534, .01486, .01373, .01262, .01134, .01001,
2603 .008702, .007475, .006481, .00548, .0046, .003833, .00311,
2604 .002543, .002049, .00168, .001374, .001046, 8.193e-4, 6.267e-4,
2605 4.968e-4, 3.924e-4, 2.983e-4, 2.477e-4, 1.997e-4, 1.596e-4,
2606 1.331e-4, 1.061e-4, 8.942e-5, 7.168e-5, 5.887e-5, 4.848e-5,
2607 3.817e-5, 3.17e-5, 2.579e-5, 2.162e-5, 1.768e-5, 1.49e-5,
2608 1.231e-5, 1.013e-5, 8.555e-6, 7.328e-6, 6.148e-6, 5.207e-6,
2609 4.387e-6, 3.741e-6, 3.22e-6, 2.753e-6, 2.346e-6, 1.985e-6,
2610 1.716e-6, 1.475e-6, 1.286e-6, 1.122e-6, 9.661e-7, 8.284e-7,
2611 7.057e-7, 6.119e-7, 5.29e-7, 4.571e-7, 3.948e-7, 3.432e-7,
2612 2.983e-7, 2.589e-7, 2.265e-7, 1.976e-7, 1.704e-7, 1.456e-7,
2613 1.26e-7, 1.101e-7, 9.648e-8, 8.415e-8, 7.34e-8, 6.441e-8,
2614 5.643e-8, 4.94e-8, 4.276e-8, 3.703e-8, 3.227e-8, 2.825e-8,
2615 2.478e-8, 2.174e-8, 1.898e-8, 1.664e-8, 1.458e-8, 1.278e-8,
2616 1.126e-8, 9.891e-9, 8.709e-9, 7.652e-9, 6.759e-9, 5.975e-9,
2617 5.31e-9, 4.728e-9, 4.214e-9, 3.792e-9, 3.463e-9, 3.226e-9,
2618 2.992e-9, 2.813e-9, 2.749e-9, 2.809e-9, 2.913e-9, 3.037e-9,
2619 3.413e-9, 3.738e-9, 4.189e-9, 4.808e-9, 5.978e-9, 7.088e-9,
2620 8.071e-9, 9.61e-9, 1.21e-8, 1.5e-8, 1.764e-8, 2.221e-8, 2.898e-8,
2621 3.948e-8, 5.068e-8, 6.227e-8, 7.898e-8, 1.033e-7, 1.437e-7,
2622 1.889e-7, 2.589e-7, 3.59e-7, 4.971e-7, 7.156e-7, 9.983e-7,
2623 1.381e-6, 1.929e-6, 2.591e-6, 3.453e-6, 4.57e-6, 5.93e-6,
2624 7.552e-6, 9.556e-6, 1.183e-5, 1.425e-5, 1.681e-5, 1.978e-5,
2625 2.335e-5, 2.668e-5, 3.022e-5, 3.371e-5, 3.715e-5, 3.967e-5,
2626 4.06e-5, 4.01e-5, 3.809e-5, 3.491e-5, 3.155e-5, 2.848e-5,
2627 2.678e-5, 2.66e-5, 2.811e-5, 3.071e-5, 3.294e-5, 3.459e-5,
2628 3.569e-5, 3.56e-5, 3.434e-5, 3.186e-5, 2.916e-5, 2.622e-5,
2629 2.275e-5, 1.918e-5, 1.62e-5, 1.373e-5, 1.182e-5, 1.006e-5,
2630 8.556e-6, 7.26e-6, 6.107e-6, 5.034e-6, 4.211e-6, 3.426e-6,
2631 2.865e-6, 2.446e-6, 1.998e-6, 1.628e-6, 1.242e-6, 1.005e-6,
2632 7.853e-7, 6.21e-7, 5.071e-7, 4.156e-7, 3.548e-7, 2.825e-7,
2633 2.261e-7, 1.916e-7, 1.51e-7, 1.279e-7, 1.059e-7, 9.14e-8,
2634 7.707e-8, 6.17e-8, 5.311e-8, 4.263e-8, 3.518e-8, 2.961e-8,
2635 2.457e-8, 2.119e-8, 1.712e-8, 1.439e-8, 1.201e-8, 1.003e-8,
2636 8.564e-9, 7.199e-9, 6.184e-9, 5.206e-9, 4.376e-9, 3.708e-9,
2637 3.157e-9, 2.725e-9, 2.361e-9, 2.074e-9, 1.797e-9, 1.562e-9,
2638 1.364e-9, 1.196e-9, 1.042e-9, 8.862e-10, 7.648e-10, 6.544e-10,
2639 5.609e-10, 4.791e-10, 4.108e-10, 3.531e-10, 3.038e-10, 2.618e-10,
2640 2.268e-10, 1.969e-10, 1.715e-10, 1.496e-10, 1.308e-10, 1.147e-10,
2641 1.008e-10, 8.894e-11, 7.885e-11, 7.031e-11, 6.355e-11, 5.854e-11,
2642 5.534e-11, 5.466e-11, 5.725e-11, 6.447e-11, 7.943e-11, 1.038e-10,
2643 1.437e-10, 2.04e-10, 2.901e-10, 4.051e-10, 5.556e-10, 7.314e-10,
2644 9.291e-10, 1.134e-9, 1.321e-9, 1.482e-9, 1.596e-9, 1.669e-9,
2645 1.715e-9, 1.762e-9, 1.817e-9, 1.828e-9, 1.848e-9, 1.873e-9,
2646 1.902e-9, 1.894e-9, 1.864e-9, 1.841e-9, 1.797e-9, 1.704e-9,
2647 1.559e-9, 1.382e-9, 1.187e-9, 1.001e-9, 8.468e-10, 7.265e-10,
2648 6.521e-10, 6.381e-10, 6.66e-10, 7.637e-10, 9.705e-10, 1.368e-9,
2649 1.856e-9, 2.656e-9, 3.954e-9, 5.96e-9, 8.72e-9, 1.247e-8,
2650 1.781e-8, 2.491e-8, 3.311e-8, 4.272e-8, 5.205e-8, 6.268e-8,
2651 7.337e-8, 8.277e-8, 9.185e-8, 1.004e-7, 1.091e-7, 1.159e-7,
2652 1.188e-7, 1.175e-7, 1.124e-7, 1.033e-7, 9.381e-8, 8.501e-8,
2653 7.956e-8, 7.894e-8, 8.331e-8, 9.102e-8, 9.836e-8, 1.035e-7,
2654 1.064e-7, 1.06e-7, 1.032e-7, 9.808e-8, 9.139e-8, 8.442e-8,
2655 7.641e-8, 6.881e-8, 6.161e-8, 5.404e-8, 4.804e-8, 4.446e-8,
2656 4.328e-8, 4.259e-8, 4.421e-8, 4.673e-8, 4.985e-8, 5.335e-8,
2657 5.796e-8, 6.542e-8, 7.714e-8, 8.827e-8, 1.04e-7, 1.238e-7,
2658 1.499e-7, 1.829e-7, 2.222e-7, 2.689e-7, 3.303e-7, 3.981e-7,
2659 4.84e-7, 5.91e-7, 7.363e-7, 9.087e-7, 1.139e-6, 1.455e-6,
2660 1.866e-6, 2.44e-6, 3.115e-6, 3.941e-6, 4.891e-6, 5.992e-6,
2661 7.111e-6, 8.296e-6, 9.21e-6, 9.987e-6, 1.044e-5, 1.073e-5,
2662 1.092e-5, 1.106e-5, 1.138e-5, 1.171e-5, 1.186e-5, 1.186e-5,
2663 1.179e-5, 1.166e-5, 1.151e-5, 1.16e-5, 1.197e-5, 1.241e-5,
2664 1.268e-5, 1.26e-5, 1.184e-5, 1.063e-5, 9.204e-6, 7.584e-6,
2665 6.053e-6, 4.482e-6, 3.252e-6, 2.337e-6, 1.662e-6, 1.18e-6,
2666 8.15e-7, 5.95e-7, 4.354e-7, 3.302e-7, 2.494e-7, 1.93e-7,
2667 1.545e-7, 1.25e-7, 1.039e-7, 8.602e-8, 7.127e-8, 5.897e-8,
2668 4.838e-8, 4.018e-8, 3.28e-8, 2.72e-8, 2.307e-8, 1.972e-8,
2669 1.654e-8, 1.421e-8, 1.174e-8, 1.004e-8, 8.739e-9, 7.358e-9,
2670 6.242e-9, 5.303e-9, 4.567e-9, 3.94e-9, 3.375e-9, 2.864e-9,
2671 2.422e-9, 2.057e-9, 1.75e-9, 1.505e-9, 1.294e-9, 1.101e-9,
2672 9.401e-10, 8.018e-10, 6.903e-10, 5.965e-10, 5.087e-10, 4.364e-10,
2673 3.759e-10, 3.247e-10, 2.809e-10, 2.438e-10, 2.123e-10, 1.853e-10,
2674 1.622e-10, 1.426e-10, 1.26e-10, 1.125e-10, 1.022e-10, 9.582e-11,
2675 9.388e-11, 9.801e-11, 1.08e-10, 1.276e-10, 1.551e-10, 1.903e-10,
2676 2.291e-10, 2.724e-10, 3.117e-10, 3.4e-10, 3.562e-10, 3.625e-10,
2677 3.619e-10, 3.429e-10, 3.221e-10, 2.943e-10, 2.645e-10, 2.338e-10,
2678 2.062e-10, 1.901e-10, 1.814e-10, 1.827e-10, 1.906e-10, 1.984e-10,
2679 2.04e-10, 2.068e-10, 2.075e-10, 2.018e-10, 1.959e-10, 1.897e-10,
2680 1.852e-10, 1.791e-10, 1.696e-10, 1.634e-10, 1.598e-10, 1.561e-10,
2681 1.518e-10, 1.443e-10, 1.377e-10, 1.346e-10, 1.342e-10, 1.375e-10,
2682 1.525e-10, 1.767e-10, 2.108e-10, 2.524e-10, 2.981e-10, 3.477e-10,
2683 4.262e-10, 5.326e-10, 6.646e-10, 8.321e-10, 1.069e-9, 1.386e-9,
2684 1.743e-9, 2.216e-9, 2.808e-9, 3.585e-9, 4.552e-9, 5.907e-9,
2685 7.611e-9, 9.774e-9, 1.255e-8, 1.666e-8, 2.279e-8, 3.221e-8,
2686 4.531e-8, 6.4e-8, 9.187e-8, 1.295e-7, 1.825e-7, 2.431e-7,
2687 3.181e-7, 4.009e-7, 4.941e-7, 5.88e-7, 6.623e-7, 7.155e-7,
2688 7.451e-7, 7.594e-7, 7.541e-7, 7.467e-7, 7.527e-7, 7.935e-7,
2689 8.461e-7, 8.954e-7, 9.364e-7, 9.843e-7, 1.024e-6, 1.05e-6,
2690 1.059e-6, 1.074e-6, 1.072e-6, 1.043e-6, 9.789e-7, 8.803e-7,
2691 7.662e-7, 6.378e-7, 5.133e-7, 3.958e-7, 2.914e-7, 2.144e-7,
2692 1.57e-7, 1.14e-7, 8.47e-8, 6.2e-8, 4.657e-8, 3.559e-8, 2.813e-8,
2693 2.222e-8, 1.769e-8, 1.391e-8, 1.125e-8, 9.186e-9, 7.704e-9,
2694 6.447e-9, 5.381e-9, 4.442e-9, 3.669e-9, 3.057e-9, 2.564e-9,
2695 2.153e-9, 1.784e-9, 1.499e-9, 1.281e-9, 1.082e-9, 9.304e-10,
2696 8.169e-10, 6.856e-10, 5.866e-10, 5.043e-10, 4.336e-10, 3.731e-10,
2697 3.175e-10, 2.745e-10, 2.374e-10, 2.007e-10, 1.737e-10, 1.508e-10,
2698 1.302e-10, 1.13e-10, 9.672e-11, 8.375e-11, 7.265e-11, 6.244e-11,
2699 5.343e-11, 4.654e-11, 3.975e-11, 3.488e-11, 3.097e-11, 2.834e-11,
2700 2.649e-11, 2.519e-11, 2.462e-11, 2.443e-11, 2.44e-11, 2.398e-11,
2701 2.306e-11, 2.183e-11, 2.021e-11, 1.821e-11, 1.599e-11, 1.403e-11,
2702 1.196e-11, 1.023e-11, 8.728e-12, 7.606e-12, 6.941e-12, 6.545e-12,
2703 6.484e-12, 6.6e-12, 6.718e-12, 6.785e-12, 6.746e-12, 6.724e-12,
2704 6.764e-12, 6.995e-12, 7.144e-12, 7.32e-12, 7.33e-12, 7.208e-12,
2705 6.789e-12, 6.09e-12, 5.337e-12, 4.62e-12, 4.037e-12, 3.574e-12,
2706 3.311e-12, 3.346e-12, 3.566e-12, 3.836e-12, 4.076e-12, 4.351e-12,
2707 4.691e-12, 5.114e-12, 5.427e-12, 6.167e-12, 7.436e-12, 8.842e-12,
2708 1.038e-11, 1.249e-11, 1.54e-11, 1.915e-11, 2.48e-11, 3.256e-11,
2709 4.339e-11, 5.611e-11, 7.519e-11, 1.037e-10, 1.409e-10, 1.883e-10,
2710 2.503e-10, 3.38e-10, 4.468e-10, 5.801e-10, 7.335e-10, 8.98e-10,
2711 1.11e-9, 1.363e-9, 1.677e-9, 2.104e-9, 2.681e-9, 3.531e-9,
2712 4.621e-9, 6.106e-9, 8.154e-9, 1.046e-8, 1.312e-8, 1.607e-8,
2713 1.948e-8, 2.266e-8, 2.495e-8, 2.655e-8, 2.739e-8, 2.739e-8,
2714 2.662e-8, 2.589e-8, 2.59e-8, 2.664e-8, 2.833e-8, 3.023e-8,
2715 3.305e-8, 3.558e-8, 3.793e-8, 3.961e-8, 4.056e-8, 4.102e-8,
2716 4.025e-8, 3.917e-8, 3.706e-8, 3.493e-8, 3.249e-8, 3.096e-8,
2717 3.011e-8, 3.111e-8, 3.395e-8, 3.958e-8, 4.875e-8, 6.066e-8,
2718 7.915e-8, 1.011e-7, 1.3e-7, 1.622e-7, 2.003e-7, 2.448e-7,
2719 2.863e-7, 3.317e-7, 3.655e-7, 3.96e-7, 4.098e-7, 4.168e-7,
2720 4.198e-7, 4.207e-7, 4.289e-7, 4.384e-7, 4.471e-7, 4.524e-7,
2721 4.574e-7, 4.633e-7, 4.785e-7, 5.028e-7, 5.371e-7, 5.727e-7,
2722 5.955e-7, 5.998e-7, 5.669e-7, 5.082e-7, 4.397e-7, 3.596e-7,
2723 2.814e-7, 2.074e-7, 1.486e-7, 1.057e-7, 7.25e-8, 4.946e-8,
2724 3.43e-8, 2.447e-8, 1.793e-8, 1.375e-8, 1.096e-8, 9.091e-9,
2725 7.709e-9, 6.631e-9, 5.714e-9, 4.886e-9, 4.205e-9, 3.575e-9,
2726 3.07e-9, 2.631e-9, 2.284e-9, 2.002e-9, 1.745e-9, 1.509e-9,
2727 1.284e-9, 1.084e-9, 9.163e-10, 7.663e-10, 6.346e-10, 5.283e-10,
2728 4.354e-10, 3.59e-10, 2.982e-10, 2.455e-10, 2.033e-10, 1.696e-10,
2729 1.432e-10, 1.211e-10, 1.02e-10, 8.702e-11, 7.38e-11, 6.293e-11,
2730 5.343e-11, 4.532e-11, 3.907e-11, 3.365e-11, 2.945e-11, 2.558e-11,
2731 2.192e-11, 1.895e-11, 1.636e-11, 1.42e-11, 1.228e-11, 1.063e-11,
2732 9.348e-12, 8.2e-12, 7.231e-12, 6.43e-12, 5.702e-12, 5.052e-12,
2733 4.469e-12, 4e-12, 3.679e-12, 3.387e-12, 3.197e-12, 3.158e-12,
2734 3.327e-12, 3.675e-12, 4.292e-12, 5.437e-12, 7.197e-12, 1.008e-11,
2735 1.437e-11, 2.035e-11, 2.905e-11, 4.062e-11, 5.528e-11, 7.177e-11,
2736 9.064e-11, 1.109e-10, 1.297e-10, 1.473e-10, 1.652e-10, 1.851e-10,
2737 2.079e-10, 2.313e-10, 2.619e-10, 2.958e-10, 3.352e-10, 3.796e-10,
2738 4.295e-10, 4.923e-10, 5.49e-10, 5.998e-10, 6.388e-10, 6.645e-10,
2739 6.712e-10, 6.549e-10, 6.38e-10, 6.255e-10, 6.253e-10, 6.459e-10,
2740 6.977e-10, 7.59e-10, 8.242e-10, 8.92e-10, 9.403e-10, 9.701e-10,
2741 9.483e-10, 9.135e-10, 8.617e-10, 7.921e-10, 7.168e-10, 6.382e-10,
2742 5.677e-10, 5.045e-10, 4.572e-10, 4.312e-10, 4.145e-10, 4.192e-10,
2743 4.541e-10, 5.368e-10, 6.771e-10, 8.962e-10, 1.21e-9, 1.659e-9,
2744 2.33e-9, 3.249e-9, 4.495e-9, 5.923e-9, 7.642e-9, 9.607e-9,
2745 1.178e-8, 1.399e-8, 1.584e-8, 1.73e-8, 1.816e-8, 1.87e-8,
2746 1.868e-8, 1.87e-8, 1.884e-8, 1.99e-8, 2.15e-8, 2.258e-8,
2747 2.364e-8, 2.473e-8, 2.602e-8, 2.689e-8, 2.731e-8, 2.816e-8,
2748 2.859e-8, 2.839e-8, 2.703e-8, 2.451e-8, 2.149e-8, 1.787e-8,
2749 1.449e-8, 1.111e-8, 8.282e-9, 6.121e-9, 4.494e-9, 3.367e-9,
2750 2.487e-9, 1.885e-9, 1.503e-9, 1.249e-9, 1.074e-9, 9.427e-10,
2751 8.439e-10, 7.563e-10, 6.772e-10, 6.002e-10, 5.254e-10, 4.588e-10,
2752 3.977e-10, 3.449e-10, 3.003e-10, 2.624e-10, 2.335e-10, 2.04e-10,
2753 1.771e-10, 1.534e-10, 1.296e-10, 1.097e-10, 9.173e-11, 7.73e-11,
2754 6.547e-11, 5.191e-11, 4.198e-11, 3.361e-11, 2.732e-11, 2.244e-11,
2755 1.791e-11, 1.509e-11, 1.243e-11, 1.035e-11, 8.969e-12, 7.394e-12,
2756 6.323e-12, 5.282e-12, 4.543e-12, 3.752e-12, 3.14e-12, 2.6e-12,
2757 2.194e-12, 1.825e-12, 1.511e-12, 1.245e-12, 1.024e-12, 8.539e-13,
2758 7.227e-13, 6.102e-13, 5.189e-13, 4.43e-13, 3.774e-13, 3.236e-13,
2759 2.8e-13, 2.444e-13, 2.156e-13, 1.932e-13, 1.775e-13, 1.695e-13,
2760 1.672e-13, 1.704e-13, 1.825e-13, 2.087e-13, 2.614e-13, 3.377e-13,
2761 4.817e-13, 6.989e-13, 1.062e-12, 1.562e-12, 2.288e-12, 3.295e-12,
2762 4.55e-12, 5.965e-12, 7.546e-12, 9.395e-12, 1.103e-11, 1.228e-11,
2763 1.318e-11, 1.38e-11, 1.421e-11, 1.39e-11, 1.358e-11, 1.336e-11,
2764 1.342e-11, 1.356e-11, 1.424e-11, 1.552e-11, 1.73e-11, 1.951e-11,
2765 2.128e-11, 2.249e-11, 2.277e-11, 2.226e-11, 2.111e-11, 1.922e-11,
2766 1.775e-11, 1.661e-11, 1.547e-11, 1.446e-11, 1.323e-11, 1.21e-11,
2767 1.054e-11, 9.283e-12, 8.671e-12, 8.67e-12, 9.429e-12, 1.062e-11,
2768 1.255e-11, 1.506e-11, 1.818e-11, 2.26e-11, 2.831e-11, 3.723e-11,
2769 5.092e-11, 6.968e-11, 9.826e-11, 1.349e-10, 1.87e-10, 2.58e-10,
2770 3.43e-10, 4.424e-10, 5.521e-10, 6.812e-10, 8.064e-10, 9.109e-10,
2771 9.839e-10, 1.028e-9, 1.044e-9, 1.029e-9, 1.005e-9, 1.002e-9,
2772 1.038e-9, 1.122e-9, 1.233e-9, 1.372e-9, 1.524e-9, 1.665e-9,
2773 1.804e-9, 1.908e-9, 2.015e-9, 2.117e-9, 2.219e-9, 2.336e-9,
2774 2.531e-9, 2.805e-9, 3.189e-9, 3.617e-9, 4.208e-9, 4.911e-9,
2775 5.619e-9, 6.469e-9, 7.188e-9, 7.957e-9, 8.503e-9, 9.028e-9,
2776 9.571e-9, 9.99e-9, 1.055e-8, 1.102e-8, 1.132e-8, 1.141e-8,
2777 1.145e-8, 1.145e-8, 1.176e-8, 1.224e-8, 1.304e-8, 1.388e-8,
2778 1.445e-8, 1.453e-8, 1.368e-8, 1.22e-8, 1.042e-8, 8.404e-9,
2779 6.403e-9, 4.643e-9, 3.325e-9, 2.335e-9, 1.638e-9, 1.19e-9,
2780 9.161e-10, 7.412e-10, 6.226e-10, 5.516e-10, 5.068e-10, 4.831e-10,
2781 4.856e-10, 5.162e-10, 5.785e-10, 6.539e-10, 7.485e-10, 8.565e-10,
2782 9.534e-10, 1.052e-9, 1.115e-9, 1.173e-9, 1.203e-9, 1.224e-9,
2783 1.243e-9, 1.248e-9, 1.261e-9, 1.265e-9, 1.25e-9, 1.217e-9,
2784 1.176e-9, 1.145e-9, 1.153e-9, 1.199e-9, 1.278e-9, 1.366e-9,
2785 1.426e-9, 1.444e-9, 1.365e-9, 1.224e-9, 1.051e-9, 8.539e-10,
2786 6.564e-10, 4.751e-10, 3.404e-10, 2.377e-10, 1.631e-10, 1.114e-10,
2787 7.87e-11, 5.793e-11, 4.284e-11, 3.3e-11, 2.62e-11, 2.152e-11,
2788 1.777e-11, 1.496e-11, 1.242e-11, 1.037e-11, 8.725e-12, 7.004e-12,
2789 5.718e-12, 4.769e-12, 3.952e-12, 3.336e-12, 2.712e-12, 2.213e-12,
2790 1.803e-12, 1.492e-12, 1.236e-12, 1.006e-12, 8.384e-13, 7.063e-13,
2791 5.879e-13, 4.93e-13, 4.171e-13, 3.569e-13, 3.083e-13, 2.688e-13,
2792 2.333e-13, 2.035e-13, 1.82e-13, 1.682e-13, 1.635e-13, 1.674e-13,
2793 1.769e-13, 2.022e-13, 2.485e-13, 3.127e-13, 4.25e-13, 5.928e-13,
2794 8.514e-13, 1.236e-12, 1.701e-12, 2.392e-12, 3.231e-12, 4.35e-12,
2795 5.559e-12, 6.915e-12, 8.519e-12, 1.013e-11, 1.146e-11, 1.24e-11,
2796 1.305e-11, 1.333e-11, 1.318e-11, 1.263e-11, 1.238e-11, 1.244e-11,
2797 1.305e-11, 1.432e-11, 1.623e-11, 1.846e-11, 2.09e-11, 2.328e-11,
2798 2.526e-11, 2.637e-11, 2.702e-11, 2.794e-11, 2.889e-11, 2.989e-11,
2799 3.231e-11, 3.68e-11, 4.375e-11, 5.504e-11, 7.159e-11, 9.502e-11,
2800 1.279e-10, 1.645e-10, 2.098e-10, 2.618e-10, 3.189e-10, 3.79e-10,
2801 4.303e-10, 4.753e-10, 5.027e-10, 5.221e-10, 5.293e-10, 5.346e-10,
2802 5.467e-10, 5.796e-10, 6.2e-10, 6.454e-10, 6.705e-10, 6.925e-10,
2803 7.233e-10, 7.35e-10, 7.538e-10, 7.861e-10, 8.077e-10, 8.132e-10,
2804 7.749e-10, 7.036e-10, 6.143e-10, 5.093e-10, 4.089e-10, 3.092e-10,
2805 2.299e-10, 1.705e-10, 1.277e-10, 9.723e-11, 7.533e-11, 6.126e-11,
2806 5.154e-11, 4.428e-11, 3.913e-11, 3.521e-11, 3.297e-11, 3.275e-11,
2807 3.46e-11, 3.798e-11, 4.251e-11, 4.745e-11, 5.232e-11, 5.606e-11,
2808 5.82e-11, 5.88e-11, 5.79e-11, 5.661e-11, 5.491e-11, 5.366e-11,
2809 5.341e-11, 5.353e-11, 5.336e-11, 5.293e-11, 5.248e-11, 5.235e-11,
2810 5.208e-11, 5.322e-11, 5.521e-11, 5.725e-11, 5.827e-11, 5.685e-11,
2811 5.245e-11, 4.612e-11, 3.884e-11, 3.129e-11, 2.404e-11, 1.732e-11,
2812 1.223e-11, 8.574e-12, 5.888e-12, 3.986e-12, 2.732e-12, 1.948e-12,
2813 1.414e-12, 1.061e-12, 8.298e-13, 6.612e-13, 5.413e-13, 4.472e-13,
2814 3.772e-13, 3.181e-13, 2.645e-13, 2.171e-13, 1.778e-13, 1.464e-13,
2815 1.183e-13, 9.637e-14, 7.991e-14, 6.668e-14, 5.57e-14, 4.663e-14,
2816 3.848e-14, 3.233e-14, 2.706e-14, 2.284e-14, 1.944e-14, 1.664e-14,
2817 1.43e-14, 1.233e-14, 1.066e-14, 9.234e-15, 8.023e-15, 6.993e-15,
2818 6.119e-15, 5.384e-15, 4.774e-15, 4.283e-15, 3.916e-15, 3.695e-15,
2819 3.682e-15, 4.004e-15, 4.912e-15, 6.853e-15, 1.056e-14, 1.712e-14,
2820 2.804e-14, 4.516e-14, 7.113e-14, 1.084e-13, 1.426e-13, 1.734e-13,
2821 1.978e-13, 2.194e-13, 2.388e-13, 2.489e-13, 2.626e-13, 2.865e-13,
2822 3.105e-13, 3.387e-13, 3.652e-13, 3.984e-13, 4.398e-13, 4.906e-13,
2823 5.55e-13, 6.517e-13, 7.813e-13, 9.272e-13, 1.164e-12, 1.434e-12,
2824 1.849e-12, 2.524e-12, 3.328e-12, 4.523e-12, 6.108e-12, 8.207e-12,
2825 1.122e-11, 1.477e-11, 1.9e-11, 2.412e-11, 2.984e-11, 3.68e-11,
2826 4.353e-11, 4.963e-11, 5.478e-11, 5.903e-11, 6.233e-11, 6.483e-11,
2827 6.904e-11, 7.569e-11, 8.719e-11, 1.048e-10, 1.278e-10, 1.557e-10,
2828 1.869e-10, 2.218e-10, 2.61e-10, 2.975e-10, 3.371e-10, 3.746e-10,
2829 4.065e-10, 4.336e-10, 4.503e-10, 4.701e-10, 4.8e-10, 4.917e-10,
2830 5.038e-10, 5.128e-10, 5.143e-10, 5.071e-10, 5.019e-10, 5.025e-10,
2831 5.183e-10, 5.496e-10, 5.877e-10, 6.235e-10, 6.42e-10, 6.234e-10,
2832 5.698e-10, 4.916e-10, 4.022e-10, 3.126e-10, 2.282e-10, 1.639e-10,
2833 1.142e-10, 7.919e-11, 5.69e-11, 4.313e-11, 3.413e-11, 2.807e-11,
2834 2.41e-11, 2.166e-11, 2.024e-11, 1.946e-11, 1.929e-11, 1.963e-11,
2835 2.035e-11, 2.162e-11, 2.305e-11, 2.493e-11, 2.748e-11, 3.048e-11,
2836 3.413e-11, 3.754e-11, 4.155e-11, 4.635e-11, 5.11e-11, 5.734e-11,
2837 6.338e-11, 6.99e-11, 7.611e-11, 8.125e-11, 8.654e-11, 8.951e-11,
2838 9.182e-11, 9.31e-11, 9.273e-11, 9.094e-11, 8.849e-11, 8.662e-11,
2839 8.67e-11, 8.972e-11, 9.566e-11, 1.025e-10, 1.083e-10, 1.111e-10,
2840 1.074e-10, 9.771e-11, 8.468e-11, 6.958e-11, 5.47e-11, 4.04e-11,
2841 2.94e-11, 2.075e-11, 1.442e-11, 1.01e-11, 7.281e-12, 5.409e-12,
2842 4.138e-12, 3.304e-12, 2.784e-12, 2.473e-12, 2.273e-12, 2.186e-12,
2843 2.118e-12, 2.066e-12, 1.958e-12, 1.818e-12, 1.675e-12, 1.509e-12,
2844 1.349e-12, 1.171e-12, 9.838e-13, 8.213e-13, 6.765e-13, 5.378e-13,
2845 4.161e-13, 3.119e-13, 2.279e-13, 1.637e-13, 1.152e-13, 8.112e-14,
2846 5.919e-14, 4.47e-14, 3.492e-14, 2.811e-14, 2.319e-14, 1.948e-14,
2847 1.66e-14, 1.432e-14, 1.251e-14, 1.109e-14, 1.006e-14, 9.45e-15,
2848 9.384e-15, 1.012e-14, 1.216e-14, 1.636e-14, 2.305e-14, 3.488e-14,
2849 5.572e-14, 8.479e-14, 1.265e-13, 1.905e-13, 2.73e-13, 3.809e-13,
2850 4.955e-13, 6.303e-13, 7.861e-13, 9.427e-13, 1.097e-12, 1.212e-12,
2851 1.328e-12, 1.415e-12, 1.463e-12, 1.495e-12, 1.571e-12, 1.731e-12,
2852 1.981e-12, 2.387e-12, 2.93e-12, 3.642e-12, 4.584e-12, 5.822e-12,
2853 7.278e-12, 9.193e-12, 1.135e-11, 1.382e-11, 1.662e-11, 1.958e-11,
2854 2.286e-11, 2.559e-11, 2.805e-11, 2.988e-11, 3.106e-11, 3.182e-11,
2855 3.2e-11, 3.258e-11, 3.362e-11, 3.558e-11, 3.688e-11, 3.8e-11,
2856 3.929e-11, 4.062e-11, 4.186e-11, 4.293e-11, 4.48e-11, 4.643e-11,
2857 4.704e-11, 4.571e-11, 4.206e-11, 3.715e-11, 3.131e-11, 2.541e-11,
2858 1.978e-11, 1.508e-11, 1.146e-11, 8.7e-12, 6.603e-12, 5.162e-12,
2859 4.157e-12, 3.408e-12, 2.829e-12, 2.405e-12, 2.071e-12, 1.826e-12,
2860 1.648e-12, 1.542e-12, 1.489e-12, 1.485e-12, 1.493e-12, 1.545e-12,
2861 1.637e-12, 1.814e-12, 2.061e-12, 2.312e-12, 2.651e-12, 3.03e-12,
2862 3.46e-12, 3.901e-12, 4.306e-12, 4.721e-12, 5.008e-12, 5.281e-12,
2863 5.541e-12, 5.791e-12, 6.115e-12, 6.442e-12, 6.68e-12, 6.791e-12,
2864 6.831e-12, 6.839e-12, 6.946e-12, 7.128e-12, 7.537e-12, 8.036e-12,
2865 8.392e-12, 8.526e-12, 8.11e-12, 7.325e-12, 6.329e-12, 5.183e-12,
2866 4.081e-12, 2.985e-12, 2.141e-12, 1.492e-12, 1.015e-12, 6.684e-13,
2867 4.414e-13, 2.987e-13, 2.038e-13, 1.391e-13, 9.86e-14, 7.24e-14,
2868 5.493e-14, 4.288e-14, 3.427e-14, 2.787e-14, 2.296e-14, 1.909e-14,
2869 1.598e-14, 1.344e-14, 1.135e-14, 9.616e-15, 8.169e-15, 6.957e-15,
2870 5.938e-15, 5.08e-15, 4.353e-15, 3.738e-15, 3.217e-15, 2.773e-15,
2871 2.397e-15, 2.077e-15, 1.805e-15, 1.575e-15, 1.382e-15, 1.221e-15,
2872 1.09e-15, 9.855e-16, 9.068e-16, 8.537e-16, 8.27e-16, 8.29e-16,
2873 8.634e-16, 9.359e-16, 1.055e-15, 1.233e-15, 1.486e-15, 1.839e-15,
2874 2.326e-15, 2.998e-15, 3.934e-15, 5.256e-15, 7.164e-15, 9.984e-15,
2875 1.427e-14, 2.099e-14, 3.196e-14, 5.121e-14, 7.908e-14, 1.131e-13,
2876 1.602e-13, 2.239e-13, 3.075e-13, 4.134e-13, 5.749e-13, 7.886e-13,
2877 1.071e-12, 1.464e-12, 2.032e-12, 2.8e-12, 3.732e-12, 4.996e-12,
2878 6.483e-12, 8.143e-12, 1.006e-11, 1.238e-11, 1.484e-11, 1.744e-11,
2879 2.02e-11, 2.274e-11, 2.562e-11, 2.848e-11, 3.191e-11, 3.617e-11,
2880 4.081e-11, 4.577e-11, 4.937e-11, 5.204e-11, 5.401e-11, 5.462e-11,
2881 5.507e-11, 5.51e-11, 5.605e-11, 5.686e-11, 5.739e-11, 5.766e-11,
2882 5.74e-11, 5.754e-11, 5.761e-11, 5.777e-11, 5.712e-11, 5.51e-11,
2883 5.088e-11, 4.438e-11, 3.728e-11, 2.994e-11, 2.305e-11, 1.715e-11,
2884 1.256e-11, 9.208e-12, 6.745e-12, 5.014e-12, 3.785e-12, 2.9e-12,
2885 2.239e-12, 1.757e-12, 1.414e-12, 1.142e-12, 9.482e-13, 8.01e-13,
2886 6.961e-13, 6.253e-13, 5.735e-13, 5.433e-13, 5.352e-13, 5.493e-13,
2887 5.706e-13, 6.068e-13, 6.531e-13, 7.109e-13, 7.767e-13, 8.59e-13,
2888 9.792e-13, 1.142e-12, 1.371e-12, 1.65e-12, 1.957e-12, 2.302e-12,
2889 2.705e-12, 3.145e-12, 3.608e-12, 4.071e-12, 4.602e-12, 5.133e-12,
2890 5.572e-12, 5.987e-12, 6.248e-12, 6.533e-12, 6.757e-12, 6.935e-12,
2891 7.224e-12, 7.422e-12, 7.538e-12, 7.547e-12, 7.495e-12, 7.543e-12,
2892 7.725e-12, 8.139e-12, 8.627e-12, 9.146e-12, 9.443e-12, 9.318e-12,
2893 8.649e-12, 7.512e-12, 6.261e-12, 4.915e-12, 3.647e-12, 2.597e-12,
2894 1.785e-12, 1.242e-12, 8.66e-13, 6.207e-13, 4.61e-13, 3.444e-13,
2895 2.634e-13, 2.1e-13, 1.725e-13, 1.455e-13, 1.237e-13, 1.085e-13,
2896 9.513e-14, 7.978e-14, 6.603e-14, 5.288e-14, 4.084e-14, 2.952e-14,
2897 2.157e-14, 1.593e-14, 1.199e-14, 9.267e-15, 7.365e-15, 6.004e-15,
2898 4.995e-15, 4.218e-15, 3.601e-15, 3.101e-15, 2.692e-15, 2.36e-15,
2899 2.094e-15, 1.891e-15, 1.755e-15, 1.699e-15, 1.755e-15, 1.987e-15,
2900 2.506e-15, 3.506e-15, 5.289e-15, 8.311e-15, 1.325e-14, 2.129e-14,
2901 3.237e-14, 4.595e-14, 6.441e-14, 8.433e-14, 1.074e-13, 1.383e-13,
2902 1.762e-13, 2.281e-13, 2.831e-13, 3.523e-13, 4.38e-13, 5.304e-13,
2903 6.29e-13, 7.142e-13, 8.032e-13, 8.934e-13, 9.888e-13, 1.109e-12,
2904 1.261e-12, 1.462e-12, 1.74e-12, 2.099e-12, 2.535e-12, 3.008e-12,
2905 3.462e-12, 3.856e-12, 4.098e-12, 4.239e-12, 4.234e-12, 4.132e-12,
2906 3.986e-12, 3.866e-12, 3.829e-12, 3.742e-12, 3.705e-12, 3.694e-12,
2907 3.765e-12, 3.849e-12, 3.929e-12, 4.056e-12, 4.092e-12, 4.047e-12,
2908 3.792e-12, 3.407e-12, 2.953e-12, 2.429e-12, 1.931e-12, 1.46e-12,
2909 1.099e-12, 8.199e-13, 6.077e-13, 4.449e-13, 3.359e-13, 2.524e-13,
2910 1.881e-13, 1.391e-13, 1.02e-13, 7.544e-14, 5.555e-14, 4.22e-14,
2911 3.321e-14, 2.686e-14, 2.212e-14, 1.78e-14, 1.369e-14, 1.094e-14,
2912 9.13e-15, 8.101e-15, 7.828e-15, 8.393e-15, 1.012e-14, 1.259e-14,
2913 1.538e-14, 1.961e-14, 2.619e-14, 3.679e-14, 5.049e-14, 6.917e-14,
2914 8.88e-14, 1.115e-13, 1.373e-13, 1.619e-13, 1.878e-13, 2.111e-13,
2915 2.33e-13, 2.503e-13, 2.613e-13, 2.743e-13, 2.826e-13, 2.976e-13,
2916 3.162e-13, 3.36e-13, 3.491e-13, 3.541e-13, 3.595e-13, 3.608e-13,
2917 3.709e-13, 3.869e-13, 4.12e-13, 4.366e-13, 4.504e-13, 4.379e-13,
2918 3.955e-13, 3.385e-13, 2.741e-13, 2.089e-13, 1.427e-13, 9.294e-14,
2919 5.775e-14, 3.565e-14, 2.21e-14, 1.398e-14, 9.194e-15, 6.363e-15,
2920 4.644e-15, 3.55e-15, 2.808e-15, 2.274e-15, 1.871e-15, 1.557e-15,
2921 1.308e-15, 1.108e-15, 9.488e-16, 8.222e-16, 7.238e-16, 6.506e-16,
2922 6.008e-16, 5.742e-16, 5.724e-16, 5.991e-16, 6.625e-16, 7.775e-16,
2923 9.734e-16, 1.306e-15, 1.88e-15, 2.879e-15, 4.616e-15, 7.579e-15,
2924 1.248e-14, 2.03e-14, 3.244e-14, 5.171e-14, 7.394e-14, 9.676e-14,
2925 1.199e-13, 1.467e-13, 1.737e-13, 2.02e-13, 2.425e-13, 3.016e-13,
2926 3.7e-13, 4.617e-13, 5.949e-13, 7.473e-13, 9.378e-13, 1.191e-12,
2927 1.481e-12, 1.813e-12, 2.232e-12, 2.722e-12, 3.254e-12, 3.845e-12,
2928 4.458e-12, 5.048e-12, 5.511e-12, 5.898e-12, 6.204e-12, 6.293e-12,
2929 6.386e-12, 6.467e-12, 6.507e-12, 6.466e-12, 6.443e-12, 6.598e-12,
2930 6.873e-12, 7.3e-12, 7.816e-12, 8.368e-12, 8.643e-12, 8.466e-12,
2931 7.871e-12, 6.853e-12, 5.714e-12, 4.482e-12, 3.392e-12, 2.613e-12,
2932 2.008e-12, 1.562e-12, 1.228e-12, 9.888e-13, 7.646e-13, 5.769e-13,
2933 4.368e-13, 3.324e-13, 2.508e-13, 1.916e-13
2934 };
2935
2936 static const double xfcrev[15] =
2937 { 1.003, 1.009, 1.015, 1.023, 1.029, 1.033, 1.037,
2938 1.039, 1.04, 1.046, 1.036, 1.027, 1.01, 1.002, 1.
2939 };
2940
2941 double sfac;
2942
2943 /* Get H2O continuum absorption... */
2944 const double xw = nu / 10 + 1;
2945 if (xw >= 1 && xw < 2001) {
2946 const int iw = (int) xw;
2947 const double dw = xw - iw;
2948 const double ew = 1 - dw;
2949 const double cw296 = ew * h2o296[iw - 1] + dw * h2o296[iw];
2950 const double cw260 = ew * h2o260[iw - 1] + dw * h2o260[iw];
2951 const double cwfrn = ew * h2ofrn[iw - 1] + dw * h2ofrn[iw];
2952 if (nu <= 820 || nu >= 960) {
2953 sfac = 1;
2954 } else {
2955 const double xx = (nu - 820) / 10;
2956 const int ix = (int) xx;
2957 const double dx = xx - ix;
2958 sfac = (1 - dx) * xfcrev[ix] + dx * xfcrev[ix + 1];
2959 }
2960 const double ctwslf =
2961 sfac * cw296 * pow(cw260 / cw296, (296 - t) / (296 - 260));
2962 const double vf2 = POW2(nu - 370);
2963 const double vf6 = POW3(vf2);
2964 const double fscal = 36100 / (vf2 + vf6 * 1e-8 + 36100) * -.25 + 1;
2965 const double ctwfrn = cwfrn * fscal;
2966 const double a1 = nu * u * tanh(.7193876 / t * nu);
2967 const double a2 = 296 / t;
2968 const double a3 = p / P0 * (q * ctwslf + (1 - q) * ctwfrn) * 1e-20;
2969 return a1 * a2 * a3;
2970 } else
2971 return 0;
2972}
#define POW2(x)
Compute x^2.
Definition: jurassic.h:188
#define POW3(x)
Compute x^3.
Definition: jurassic.h:191

◆ ctmn2()

double ctmn2 ( const double  nu,
const double  p,
const double  t 
)

Compute nitrogen continuum (absorption coefficient).

Definition at line 2976 of file jurassic.c.

2979 {
2980
2981 static const double ba[98] =
2982 { 0., 4.45e-8, 5.22e-8, 6.46e-8, 7.75e-8, 9.03e-8,
2983 1.06e-7, 1.21e-7, 1.37e-7, 1.57e-7, 1.75e-7, 2.01e-7, 2.3e-7,
2984 2.59e-7, 2.95e-7, 3.26e-7, 3.66e-7, 4.05e-7, 4.47e-7, 4.92e-7,
2985 5.34e-7, 5.84e-7, 6.24e-7, 6.67e-7, 7.14e-7, 7.26e-7, 7.54e-7,
2986 7.84e-7, 8.09e-7, 8.42e-7, 8.62e-7, 8.87e-7, 9.11e-7, 9.36e-7,
2987 9.76e-7, 1.03e-6, 1.11e-6, 1.23e-6, 1.39e-6, 1.61e-6, 1.76e-6,
2988 1.94e-6, 1.97e-6, 1.87e-6, 1.75e-6, 1.56e-6, 1.42e-6, 1.35e-6,
2989 1.32e-6, 1.29e-6, 1.29e-6, 1.29e-6, 1.3e-6, 1.32e-6, 1.33e-6,
2990 1.34e-6, 1.35e-6, 1.33e-6, 1.31e-6, 1.29e-6, 1.24e-6, 1.2e-6,
2991 1.16e-6, 1.1e-6, 1.04e-6, 9.96e-7, 9.38e-7, 8.63e-7, 7.98e-7,
2992 7.26e-7, 6.55e-7, 5.94e-7, 5.35e-7, 4.74e-7, 4.24e-7, 3.77e-7,
2993 3.33e-7, 2.96e-7, 2.63e-7, 2.34e-7, 2.08e-7, 1.85e-7, 1.67e-7,
2994 1.47e-7, 1.32e-7, 1.2e-7, 1.09e-7, 9.85e-8, 9.08e-8, 8.18e-8,
2995 7.56e-8, 6.85e-8, 6.14e-8, 5.83e-8, 5.77e-8, 5e-8, 4.32e-8, 0.
2996 };
2997
2998 static const double betaa[98] =
2999 { 802., 802., 761., 722., 679., 646., 609., 562.,
3000 511., 472., 436., 406., 377., 355., 338., 319., 299., 278., 255.,
3001 233., 208., 184., 149., 107., 66., 25., -13., -49., -82., -104.,
3002 -119., -130., -139., -144., -146., -146., -147., -148., -150.,
3003 -153., -160., -169., -181., -189., -195., -200., -205., -209.,
3004 -211., -210., -210., -209., -205., -199., -190., -180., -168.,
3005 -157., -143., -126., -108., -89., -63., -32., 1., 35., 65., 95.,
3006 121., 141., 152., 161., 164., 164., 161., 155., 148., 143., 137.,
3007 133., 131., 133., 139., 150., 165., 187., 213., 248., 284., 321.,
3008 372., 449., 514., 569., 609., 642., 673., 673.
3009 };
3010
3011 static const double nua[98] =
3012 { 2120., 2125., 2130., 2135., 2140., 2145., 2150.,
3013 2155., 2160., 2165., 2170., 2175., 2180., 2185., 2190., 2195.,
3014 2200., 2205., 2210., 2215., 2220., 2225., 2230., 2235., 2240.,
3015 2245., 2250., 2255., 2260., 2265., 2270., 2275., 2280., 2285.,
3016 2290., 2295., 2300., 2305., 2310., 2315., 2320., 2325., 2330.,
3017 2335., 2340., 2345., 2350., 2355., 2360., 2365., 2370., 2375.,
3018 2380., 2385., 2390., 2395., 2400., 2405., 2410., 2415., 2420.,
3019 2425., 2430., 2435., 2440., 2445., 2450., 2455., 2460., 2465.,
3020 2470., 2475., 2480., 2485., 2490., 2495., 2500., 2505., 2510.,
3021 2515., 2520., 2525., 2530., 2535., 2540., 2545., 2550., 2555.,
3022 2560., 2565., 2570., 2575., 2580., 2585., 2590., 2595., 2600., 2605.
3023 };
3024
3025 const double t0 = 273.0, tr = 296.0;
3026
3027 /* Check wavenumber range... */
3028 if (nu < nua[0] || nu > nua[97])
3029 return 0;
3030
3031 /* Interpolate B and beta... */
3032 const int idx = locate_reg(nua, 98, nu);
3033 const double b =
3034 1e6 * LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3035 const double beta =
3036 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3037
3038 /* Compute absorption coefficient... */
3039 return 0.1 * POW2(p / P0 * t0 / t) * exp(beta * (1 / tr - 1 / t))
3040 * N2 * b * (N2 + (1 - N2) * (1.294 - 0.4545 * t / tr));
3041}
Here is the call graph for this function:

◆ ctmo2()

double ctmo2 ( const double  nu,
const double  p,
const double  t 
)

Compute oxygen continuum (absorption coefficient).

Definition at line 3045 of file jurassic.c.

3048 {
3049
3050 static const double ba[90] =
3051 { 0., .061, .074, .084, .096, .12, .162, .208, .246,
3052 .285, .314, .38, .444, .5, .571, .673, .768, .853, .966, 1.097,
3053 1.214, 1.333, 1.466, 1.591, 1.693, 1.796, 1.922, 2.037, 2.154,
3054 2.264, 2.375, 2.508, 2.671, 2.847, 3.066, 3.417, 3.828, 4.204,
3055 4.453, 4.599, 4.528, 4.284, 3.955, 3.678, 3.477, 3.346, 3.29,
3056 3.251, 3.231, 3.226, 3.212, 3.192, 3.108, 3.033, 2.911, 2.798,
3057 2.646, 2.508, 2.322, 2.13, 1.928, 1.757, 1.588, 1.417, 1.253,
3058 1.109, .99, .888, .791, .678, .587, .524, .464, .403, .357, .32,
3059 .29, .267, .242, .215, .182, .16, .146, .128, .103, .087, .081,
3060 .071, .064, 0.
3061 };
3062
3063 static const double betaa[90] =
3064 { 467., 467., 400., 315., 379., 368., 475., 521.,
3065 531., 512., 442., 444., 430., 381., 335., 324., 296., 248., 215.,
3066 193., 158., 127., 101., 71., 31., -6., -26., -47., -63., -79.,
3067 -88., -88., -87., -90., -98., -99., -109., -134., -160., -167.,
3068 -164., -158., -153., -151., -156., -166., -168., -173., -170.,
3069 -161., -145., -126., -108., -84., -59., -29., 4., 41., 73., 97.,
3070 123., 159., 198., 220., 242., 256., 281., 311., 334., 319., 313.,
3071 321., 323., 310., 315., 320., 335., 361., 378., 373., 338., 319.,
3072 346., 322., 291., 290., 350., 371., 504., 504.
3073 };
3074
3075 static const double nua[90] =
3076 { 1360., 1365., 1370., 1375., 1380., 1385., 1390.,
3077 1395., 1400., 1405., 1410., 1415., 1420., 1425., 1430., 1435.,
3078 1440., 1445., 1450., 1455., 1460., 1465., 1470., 1475., 1480.,
3079 1485., 1490., 1495., 1500., 1505., 1510., 1515., 1520., 1525.,
3080 1530., 1535., 1540., 1545., 1550., 1555., 1560., 1565., 1570.,
3081 1575., 1580., 1585., 1590., 1595., 1600., 1605., 1610., 1615.,
3082 1620., 1625., 1630., 1635., 1640., 1645., 1650., 1655., 1660.,
3083 1665., 1670., 1675., 1680., 1685., 1690., 1695., 1700., 1705.,
3084 1710., 1715., 1720., 1725., 1730., 1735., 1740., 1745., 1750.,
3085 1755., 1760., 1765., 1770., 1775., 1780., 1785., 1790., 1795.,
3086 1800., 1805.
3087 };
3088
3089 const double t0 = 273, tr = 296;
3090
3091 /* Check wavenumber range... */
3092 if (nu < nua[0] || nu > nua[89])
3093 return 0;
3094
3095 /* Interpolate B and beta... */
3096 const int idx = locate_reg(nua, 90, nu);
3097 const double b = LIN(nua[idx], ba[idx], nua[idx + 1], ba[idx + 1], nu);
3098 const double beta =
3099 LIN(nua[idx], betaa[idx], nua[idx + 1], betaa[idx + 1], nu);
3100
3101 /* Compute absorption coefficient... */
3102 return 0.1 * POW2(p / P0 * t0 / t) * exp(beta * (1 / tr - 1 / t)) * O2 * b;
3103}
Here is the call graph for this function:

◆ copy_atm()

void copy_atm ( const ctl_t ctl,
atm_t atm_dest,
const atm_t atm_src,
const int  init 
)

Copy and initialize atmospheric data.

Definition at line 3107 of file jurassic.c.

3111 {
3112
3113 /* Data size... */
3114 const size_t s = (size_t) atm_src->np * sizeof(double);
3115
3116 /* Copy data... */
3117 atm_dest->np = atm_src->np;
3118 memcpy(atm_dest->time, atm_src->time, s);
3119 memcpy(atm_dest->z, atm_src->z, s);
3120 memcpy(atm_dest->lon, atm_src->lon, s);
3121 memcpy(atm_dest->lat, atm_src->lat, s);
3122 memcpy(atm_dest->p, atm_src->p, s);
3123 memcpy(atm_dest->t, atm_src->t, s);
3124 for (int ig = 0; ig < ctl->ng; ig++)
3125 memcpy(atm_dest->q[ig], atm_src->q[ig], s);
3126 for (int iw = 0; iw < ctl->nw; iw++)
3127 memcpy(atm_dest->k[iw], atm_src->k[iw], s);
3128 atm_dest->clz = atm_src->clz;
3129 atm_dest->cldz = atm_src->cldz;
3130 for (int icl = 0; icl < ctl->ncl; icl++)
3131 atm_dest->clk[icl] = atm_src->clk[icl];
3132 atm_dest->sfz = atm_src->sfz;
3133 atm_dest->sfp = atm_src->sfp;
3134 atm_dest->sft = atm_src->sft;
3135 for (int isf = 0; isf < ctl->nsf; isf++)
3136 atm_dest->sfeps[isf] = atm_src->sfeps[isf];
3137
3138 /* Initialize... */
3139 if (init)
3140 for (int ip = 0; ip < atm_dest->np; ip++) {
3141 atm_dest->p[ip] = 0;
3142 atm_dest->t[ip] = 0;
3143 for (int ig = 0; ig < ctl->ng; ig++)
3144 atm_dest->q[ig][ip] = 0;
3145 for (int iw = 0; iw < ctl->nw; iw++)
3146 atm_dest->k[iw][ip] = 0;
3147 atm_dest->clz = 0;
3148 atm_dest->cldz = 0;
3149 for (int icl = 0; icl < ctl->ncl; icl++)
3150 atm_dest->clk[icl] = 0;
3151 atm_dest->sfz = 0;
3152 atm_dest->sfp = 0;
3153 atm_dest->sft = 0;
3154 for (int isf = 0; isf < ctl->nsf; isf++)
3155 atm_dest->sfeps[isf] = 1;
3156 }
3157}
double time[NP]
Time (seconds since 2000-01-01T00:00Z).
Definition: jurassic.h:500
double lat[NP]
Latitude [deg].
Definition: jurassic.h:509
double lon[NP]
Longitude [deg].
Definition: jurassic.h:506

◆ copy_obs()

void copy_obs ( const ctl_t ctl,
obs_t obs_dest,
const obs_t obs_src,
const int  init 
)

Copy and initialize observation data.

Definition at line 3161 of file jurassic.c.

3165 {
3166
3167 /* Data size... */
3168 const size_t s = (size_t) obs_src->nr * sizeof(double);
3169
3170 /* Copy data... */
3171 obs_dest->nr = obs_src->nr;
3172 memcpy(obs_dest->time, obs_src->time, s);
3173 memcpy(obs_dest->obsz, obs_src->obsz, s);
3174 memcpy(obs_dest->obslon, obs_src->obslon, s);
3175 memcpy(obs_dest->obslat, obs_src->obslat, s);
3176 memcpy(obs_dest->vpz, obs_src->vpz, s);
3177 memcpy(obs_dest->vplon, obs_src->vplon, s);
3178 memcpy(obs_dest->vplat, obs_src->vplat, s);
3179 memcpy(obs_dest->tpz, obs_src->tpz, s);
3180 memcpy(obs_dest->tplon, obs_src->tplon, s);
3181 memcpy(obs_dest->tplat, obs_src->tplat, s);
3182 for (int id = 0; id < ctl->nd; id++)
3183 memcpy(obs_dest->rad[id], obs_src->rad[id], s);
3184 for (int id = 0; id < ctl->nd; id++)
3185 memcpy(obs_dest->tau[id], obs_src->tau[id], s);
3186
3187 /* Initialize... */
3188 if (init)
3189 for (int id = 0; id < ctl->nd; id++)
3190 for (int ir = 0; ir < obs_dest->nr; ir++)
3191 if (isfinite(obs_dest->rad[id][ir])) {
3192 obs_dest->rad[id][ir] = 0;
3193 obs_dest->tau[id][ir] = 0;
3194 }
3195}
int nd
Number of radiance channels.
Definition: jurassic.h:568
double tau[ND][NR]
Transmittance of ray path.
Definition: jurassic.h:797
double rad[ND][NR]
Radiance [W/(m^2 sr cm^-1)].
Definition: jurassic.h:800
double tplon[NR]
Tangent point longitude [deg].
Definition: jurassic.h:791
double vpz[NR]
View point altitude [km].
Definition: jurassic.h:779
double vplat[NR]
View point latitude [deg].
Definition: jurassic.h:785
double obslon[NR]
Observer longitude [deg].
Definition: jurassic.h:773
double obslat[NR]
Observer latitude [deg].
Definition: jurassic.h:776
double obsz[NR]
Observer altitude [km].
Definition: jurassic.h:770
double tplat[NR]
Tangent point latitude [deg].
Definition: jurassic.h:794
double vplon[NR]
View point longitude [deg].
Definition: jurassic.h:782
double time[NR]
Time (seconds since 2000-01-01T00:00Z).
Definition: jurassic.h:767
double tpz[NR]
Tangent point altitude [km].
Definition: jurassic.h:788
int nr
Number of ray paths.
Definition: jurassic.h:764

◆ find_emitter()

int find_emitter ( const ctl_t ctl,
const char *  emitter 
)

Find index of an emitter.

Definition at line 3199 of file jurassic.c.

3201 {
3202
3203 for (int ig = 0; ig < ctl->ng; ig++)
3204 if (strcasecmp(ctl->emitter[ig], emitter) == 0)
3205 return ig;
3206
3207 return -1;
3208}

◆ formod()

void formod ( const ctl_t ctl,
const tbl_t tbl,
atm_t atm,
obs_t obs 
)

Determine ray paths and compute radiative transfer.

Definition at line 3212 of file jurassic.c.

3216 {
3217
3218 int *mask;
3219
3220 /* Allocate... */
3221 ALLOC(mask, int,
3222 ND * NR);
3223
3224 /* Save observation mask... */
3225 for (int id = 0; id < ctl->nd; id++)
3226 for (int ir = 0; ir < obs->nr; ir++)
3227 mask[id * NR + ir] = !isfinite(obs->rad[id][ir]);
3228
3229 /* Hydrostatic equilibrium... */
3230 hydrostatic(ctl, atm);
3231
3232 /* CGA or EGA forward model... */
3233 if (ctl->formod == 0 || ctl->formod == 1)
3234 for (int ir = 0; ir < obs->nr; ir++)
3235 formod_pencil(ctl, tbl, atm, obs, ir);
3236
3237 /* Call RFM... */
3238 else if (ctl->formod == 2)
3239 formod_rfm(ctl, atm, obs);
3240
3241 /* Apply field-of-view convolution... */
3242 formod_fov(ctl, obs);
3243
3244 /* Convert radiance to brightness temperature... */
3245 if (ctl->write_bbt)
3246 for (int id = 0; id < ctl->nd; id++)
3247 for (int ir = 0; ir < obs->nr; ir++)
3248 obs->rad[id][ir] = BRIGHT(obs->rad[id][ir], ctl->nu[id]);
3249
3250 /* Apply observation mask... */
3251 for (int id = 0; id < ctl->nd; id++)
3252 for (int ir = 0; ir < obs->nr; ir++)
3253 if (mask[id * NR + ir])
3254 obs->rad[id][ir] = NAN;
3255
3256 /* Free... */
3257 free(mask);
3258}
void formod_rfm(const ctl_t *ctl, const atm_t *atm, obs_t *obs)
Apply RFM for radiative transfer calculations.
Definition: jurassic.c:3498
void formod_pencil(const ctl_t *ctl, const tbl_t *tbl, const atm_t *atm, obs_t *obs, const int ir)
Compute radiative transfer for a pencil beam.
Definition: jurassic.c:3363
void formod_fov(const ctl_t *ctl, obs_t *obs)
Apply field of view convolution.
Definition: jurassic.c:3298
void hydrostatic(const ctl_t *ctl, atm_t *atm)
Set hydrostatic equilibrium.
Definition: jurassic.c:3676
#define BRIGHT(rad, nu)
Compute brightness temperature.
Definition: jurassic.h:127
#define ND
Maximum number of radiance channels.
Definition: jurassic.h:364
#define ALLOC(ptr, type, n)
Allocate memory.
Definition: jurassic.h:122
#define NR
Maximum number of ray paths.
Definition: jurassic.h:379
double nu[ND]
Centroid wavenumber of each channel [cm^-1].
Definition: jurassic.h:571
int formod
Forward model (0=CGA, 1=EGA, 2=RFM).
Definition: jurassic.h:691
int write_bbt
Use brightness temperature instead of radiance (0=no, 1=yes).
Definition: jurassic.h:685
Here is the call graph for this function:

◆ formod_continua()

void formod_continua ( const ctl_t ctl,
const los_t los,
const int  ip,
double *  beta 
)

Compute absorption coefficient of continua.

Definition at line 3262 of file jurassic.c.

3266 {
3267
3268 /* Extinction... */
3269 for (int id = 0; id < ctl->nd; id++)
3270 beta[id] = los->k[ip][id];
3271
3272 /* CO2 continuum... */
3273 if (ctl->ctm_co2 && ctl->ig_co2 >= 0)
3274 for (int id = 0; id < ctl->nd; id++)
3275 beta[id] += ctmco2(ctl->nu[id], los->p[ip], los->t[ip],
3276 los->u[ip][ctl->ig_co2]) / los->ds[ip];
3277
3278 /* H2O continuum... */
3279 if (ctl->ctm_h2o && ctl->ig_h2o >= 0)
3280 for (int id = 0; id < ctl->nd; id++)
3281 beta[id] += ctmh2o(ctl->nu[id], los->p[ip], los->t[ip],
3282 los->q[ip][ctl->ig_h2o], los->u[ip][ctl->ig_h2o])
3283 / los->ds[ip];
3284
3285 /* N2 continuum... */
3286 if (ctl->ctm_n2)
3287 for (int id = 0; id < ctl->nd; id++)
3288 beta[id] += ctmn2(ctl->nu[id], los->p[ip], los->t[ip]);
3289
3290 /* O2 continuum... */
3291 if (ctl->ctm_o2)
3292 for (int id = 0; id < ctl->nd; id++)
3293 beta[id] += ctmo2(ctl->nu[id], los->p[ip], los->t[ip]);
3294}
double ctmo2(const double nu, const double p, const double t)
Compute oxygen continuum (absorption coefficient).
Definition: jurassic.c:3045
double ctmh2o(const double nu, const double p, const double t, const double q, const double u)
Compute water vapor continuum (optical depth).
Definition: jurassic.c:1924
double ctmco2(const double nu, const double p, const double t, const double u)
Compute carbon dioxide continuum (optical depth).
Definition: jurassic.c:1061
double ctmn2(const double nu, const double p, const double t)
Compute nitrogen continuum (absorption coefficient).
Definition: jurassic.c:2976
int ctm_co2
Compute CO2 continuum (0=no, 1=yes).
Definition: jurassic.h:607
int ctm_n2
Compute N2 continuum (0=no, 1=yes).
Definition: jurassic.h:613
int ctm_h2o
Compute H2O continuum (0=no, 1=yes).
Definition: jurassic.h:610
int ctm_o2
Compute O2 continuum (0=no, 1=yes).
Definition: jurassic.h:616
int ig_h2o
Emitter index of H2O.
Definition: jurassic.h:559
double q[NLOS][NG]
Volume mixing ratio [ppv].
Definition: jurassic.h:726
double ds[NLOS]
Segment length [km].
Definition: jurassic.h:738
double u[NLOS][NG]
Column density [molecules/cm^2].
Definition: jurassic.h:741
double k[NLOS][ND]
Extinction [km^-1].
Definition: jurassic.h:729
double t[NLOS]
Temperature [K].
Definition: jurassic.h:723
double p[NLOS]
Pressure [hPa].
Definition: jurassic.h:720
Here is the call graph for this function:

◆ formod_fov()

void formod_fov ( const ctl_t ctl,
obs_t obs 
)

Apply field of view convolution.

Definition at line 3298 of file jurassic.c.

3300 {
3301
3302 obs_t *obs2;
3303
3304 double rad[ND][NR], tau[ND][NR], z[NR];
3305
3306 /* Do not take into account FOV... */
3307 if (ctl->fov[0] == '-')
3308 return;
3309
3310 /* Allocate... */
3311 ALLOC(obs2, obs_t, 1);
3312
3313 /* Copy observation data... */
3314 copy_obs(ctl, obs2, obs, 0);
3315
3316 /* Loop over ray paths... */
3317 for (int ir = 0; ir < obs->nr; ir++) {
3318
3319 /* Get radiance and transmittance profiles... */
3320 int nz = 0;
3321 for (int ir2 = MAX(ir - NFOV, 0);
3322 ir2 < MIN(ir + 1 + NFOV, obs->nr); ir2++)
3323 if (obs->time[ir2] == obs->time[ir]) {
3324 z[nz] = obs2->vpz[ir2];
3325 for (int id = 0; id < ctl->nd; id++) {
3326 rad[id][nz] = obs2->rad[id][ir2];
3327 tau[id][nz] = obs2->tau[id][ir2];
3328 }
3329 nz++;
3330 }
3331 if (nz < 2)
3332 ERRMSG("Cannot apply FOV convolution!");
3333
3334 /* Convolute profiles with FOV... */
3335 double wsum = 0;
3336 for (int id = 0; id < ctl->nd; id++) {
3337 obs->rad[id][ir] = 0;
3338 obs->tau[id][ir] = 0;
3339 }
3340 for (int i = 0; i < ctl->fov_n; i++) {
3341 const double zfov = obs->vpz[ir] + ctl->fov_dz[i];
3342 const int idx = locate_irr(z, nz, zfov);
3343 for (int id = 0; id < ctl->nd; id++) {
3344 obs->rad[id][ir] += ctl->fov_w[i]
3345 * LIN(z[idx], rad[id][idx], z[idx + 1], rad[id][idx + 1], zfov);
3346 obs->tau[id][ir] += ctl->fov_w[i]
3347 * LIN(z[idx], tau[id][idx], z[idx + 1], tau[id][idx + 1], zfov);
3348 }
3349 wsum += ctl->fov_w[i];
3350 }
3351 for (int id = 0; id < ctl->nd; id++) {
3352 obs->rad[id][ir] /= wsum;
3353 obs->tau[id][ir] /= wsum;
3354 }
3355 }
3356
3357 /* Free... */
3358 free(obs2);
3359}
int locate_irr(const double *xx, const int n, const double x)
Find array index for irregular grid.
Definition: jurassic.c:4241
void copy_obs(const ctl_t *ctl, obs_t *obs_dest, const obs_t *obs_src, const int init)
Copy and initialize observation data.
Definition: jurassic.c:3161
#define NFOV
Number of ray paths used for FOV calculations.
Definition: jurassic.h:424
#define MIN(a, b)
Macro to determine the minimum of two values.
Definition: jurassic.h:161
#define MAX(a, b)
Macro to determine the maximum of two values.
Definition: jurassic.h:157
char fov[LEN]
Field-of-view data file.
Definition: jurassic.h:628
int fov_n
Field-of-view number of data points.
Definition: jurassic.h:637
double fov_dz[NSHAPE]
Field-of-view vertical distance [km].
Definition: jurassic.h:631
double fov_w[NSHAPE]
Field-of-view weighting factor.
Definition: jurassic.h:634
Observation geometry and radiance data.
Definition: jurassic.h:761
Here is the call graph for this function:

◆ formod_pencil()

void formod_pencil ( const ctl_t ctl,
const tbl_t tbl,
const atm_t atm,
obs_t obs,
const int  ir 
)

Compute radiative transfer for a pencil beam.

Definition at line 3363 of file jurassic.c.

3368 {
3369
3370 los_t *los;
3371
3372 double beta_ctm[ND], rad[ND], tau[ND], tau_refl[ND],
3373 tau_path[ND][NG], tau_gas[ND], x0[3], x1[3];
3374
3375 /* Allocate... */
3376 ALLOC(los, los_t, 1);
3377
3378 /* Initialize... */
3379 for (int id = 0; id < ctl->nd; id++) {
3380 rad[id] = 0;
3381 tau[id] = 1;
3382 for (int ig = 0; ig < ctl->ng; ig++)
3383 tau_path[id][ig] = 1;
3384 }
3385
3386 /* Raytracing... */
3387 raytrace(ctl, atm, obs, los, ir);
3388
3389 /* Loop over LOS points... */
3390 for (int ip = 0; ip < los->np; ip++) {
3391
3392 /* Get trace gas transmittance... */
3393 if (ctl->formod == 0)
3394 intpol_tbl_cga(ctl, tbl, los, ip, tau_path, tau_gas);
3395 else
3396 intpol_tbl_ega(ctl, tbl, los, ip, tau_path, tau_gas);
3397
3398 /* Get continuum absorption... */
3399 formod_continua(ctl, los, ip, beta_ctm);
3400
3401 /* Compute Planck function... */
3402 formod_srcfunc(ctl, tbl, los->t[ip], los->src[ip]);
3403
3404 /* Loop over channels... */
3405 for (int id = 0; id < ctl->nd; id++)
3406 if (tau_gas[id] > 0) {
3407
3408 /* Get segment emissivity... */
3409 los->eps[ip][id] = 1 - tau_gas[id] * exp(-beta_ctm[id] * los->ds[ip]);
3410
3411 /* Compute radiance... */
3412 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau[id];
3413
3414 /* Compute path transmittance... */
3415 tau[id] *= (1 - los->eps[ip][id]);
3416 }
3417 }
3418
3419 /* Check whether LOS hit the ground... */
3420 if (ctl->sftype >= 1 && los->sft > 0) {
3421
3422 /* Add surface emissions... */
3423 double src_sf[ND];
3424 formod_srcfunc(ctl, tbl, los->sft, src_sf);
3425 for (int id = 0; id < ctl->nd; id++)
3426 rad[id] += los->sfeps[id] * src_sf[id] * tau[id];
3427
3428 /* Check reflectivity... */
3429 int refl = 0;
3430 if (ctl->sftype >= 2)
3431 for (int id = 0; id < ctl->nd; id++)
3432 if (los->sfeps[id] < 1) {
3433 refl = 1;
3434 break;
3435 }
3436
3437 /* Calculate reflection... */
3438 if (refl) {
3439
3440 /* Initialize... */
3441 for (int id = 0; id < ctl->nd; id++)
3442 tau_refl[id] = 1;
3443
3444 /* Add down-welling radiance... */
3445 for (int ip = los->np - 1; ip >= 0; ip--)
3446 for (int id = 0; id < ctl->nd; id++) {
3447 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau_refl[id]
3448 * tau[id] * (1 - los->sfeps[id]);
3449 tau_refl[id] *= (1 - los->eps[ip][id]);
3450 }
3451
3452 /* Add solar term... */
3453 if (ctl->sftype >= 3) {
3454
3455 /* Get solar zenith angle... */
3456 double sza2;
3457 if (ctl->sfsza < 0)
3458 sza2 =
3459 sza(obs->time[ir], los->lon[los->np - 1], los->lat[los->np - 1]);
3460 else
3461 sza2 = ctl->sfsza;
3462
3463 /* Check solar zenith angle... */
3464 if (sza2 < 89.999) {
3465
3466 /* Get angle of incidence... */
3467 geo2cart(los->z[los->np - 1], los->lon[los->np - 1],
3468 los->lat[los->np - 1], x0);
3469 geo2cart(los->z[0], los->lon[0], los->lat[0], x1);
3470 for (int i = 0; i < 3; i++)
3471 x1[i] -= x0[i];
3472 const double cosa = DOTP(x0, x1) / NORM(x0) / NORM(x1);
3473
3474 /* Get ratio of SZA and incident radiation... */
3475 const double rcos = cosa / cos(DEG2RAD(sza2));
3476
3477 /* Add solar radiation... */
3478 for (int id = 0; id < ctl->nd; id++)
3479 rad[id] += 6.764e-5 / (2. * M_PI) * PLANCK(TSUN, ctl->nu[id])
3480 * tau_refl[id] * (1 - los->sfeps[id]) * tau[id] * rcos;
3481 }
3482 }
3483 }
3484 }
3485
3486 /* Copy results... */
3487 for (int id = 0; id < ctl->nd; id++) {
3488 obs->rad[id][ir] = rad[id];
3489 obs->tau[id][ir] = tau[id];
3490 }
3491
3492 /* Free... */
3493 free(los);
3494}
void intpol_tbl_ega(const ctl_t *ctl, const tbl_t *tbl, const los_t *los, const int ip, double tau_path[ND][NG], double tau_seg[ND])
Get transmittance from look-up tables (EGA method).
Definition: jurassic.c:3949
void formod_continua(const ctl_t *ctl, const los_t *los, const int ip, double *beta)
Compute absorption coefficient of continua.
Definition: jurassic.c:3262
void raytrace(const ctl_t *ctl, const atm_t *atm, obs_t *obs, los_t *los, const int ir)
Do ray-tracing to determine LOS.
Definition: jurassic.c:4339
void intpol_tbl_cga(const ctl_t *ctl, const tbl_t *tbl, const los_t *los, const int ip, double tau_path[ND][NG], double tau_seg[ND])
Get transmittance from look-up tables (CGA method).
Definition: jurassic.c:3860
double sza(const double sec, const double lon, const double lat)
Calculate solar zenith angle.
Definition: jurassic.c:5347
void formod_srcfunc(const ctl_t *ctl, const tbl_t *tbl, const double t, double *src)
Compute Planck source function.
Definition: jurassic.c:3639
void geo2cart(const double z, const double lon, const double lat, double *x)
Convert geolocation to Cartesian coordinates.
Definition: jurassic.c:3656
#define DOTP(a, b)
Compute dot product of two vectors.
Definition: jurassic.h:142
#define DEG2RAD(deg)
Convert degrees to radians.
Definition: jurassic.h:131
#define TSUN
Effective temperature of the sun [K].
Definition: jurassic.h:340
#define PLANCK(T, nu)
Compute Planck function.
Definition: jurassic.h:184
double sfsza
Solar zenith angle at the surface [deg] (-999=auto).
Definition: jurassic.h:595
int sftype
Surface treatment (0=none, 1=emissions, 2=downward, 3=solar).
Definition: jurassic.h:592
Line-of-sight data.
Definition: jurassic.h:705
double z[NLOS]
Altitude [km].
Definition: jurassic.h:711
double eps[NLOS][ND]
Segment emissivity.
Definition: jurassic.h:753
double sft
Surface temperature [K].
Definition: jurassic.h:732
double lon[NLOS]
Longitude [deg].
Definition: jurassic.h:714
int np
Number of LOS points.
Definition: jurassic.h:708
double lat[NLOS]
Latitude [deg].
Definition: jurassic.h:717
double src[NLOS][ND]
Segment source function [W/(m^2 sr cm^-1)].
Definition: jurassic.h:756
double sfeps[ND]
Surface emissivity.
Definition: jurassic.h:735
Here is the call graph for this function:

◆ formod_rfm()

void formod_rfm ( const ctl_t ctl,
const atm_t atm,
obs_t obs 
)

Apply RFM for radiative transfer calculations.

Definition at line 3498 of file jurassic.c.

3501 {
3502
3503 los_t *los;
3504
3505 FILE *out;
3506
3507 char cmd[2 * LEN], filename[2 * LEN],
3508 rfmflg[LEN] = { "RAD TRA MIX LIN SFC" };
3509
3510 double f[NSHAPE], nu[NSHAPE], nu0, nu1, obsz = -999, tsurf,
3511 xd[3], xo[3], xv[3], z[NR], zmin, zmax;
3512
3513 int n, nadir = 0;
3514
3515 /* Allocate... */
3516 ALLOC(los, los_t, 1);
3517
3518 /* Check observer positions... */
3519 for (int ir = 1; ir < obs->nr; ir++)
3520 if (obs->obsz[ir] != obs->obsz[0]
3521 || obs->obslon[ir] != obs->obslon[0]
3522 || obs->obslat[ir] != obs->obslat[0])
3523 ERRMSG("RFM interface requires identical observer positions!");
3524
3525 /* Check extinction data... */
3526 for (int iw = 0; iw < ctl->nw; iw++)
3527 for (int ip = 0; ip < atm->np; ip++)
3528 if (atm->k[iw][ip] != 0)
3529 ERRMSG("RFM interface cannot handle extinction data!");
3530
3531 /* Get altitude range of atmospheric data... */
3532 gsl_stats_minmax(&zmin, &zmax, atm->z, 1, (size_t) atm->np);
3533
3534 /* Observer within atmosphere? */
3535 if (obs->obsz[0] >= zmin && obs->obsz[0] <= zmax) {
3536 obsz = obs->obsz[0];
3537 strcat(rfmflg, " OBS");
3538 }
3539
3540 /* Determine tangent altitude or air mass factor... */
3541 for (int ir = 0; ir < obs->nr; ir++) {
3542
3543 /* Raytracing... */
3544 raytrace(ctl, atm, obs, los, ir);
3545
3546 /* Nadir? */
3547 if (obs->tpz[ir] <= zmin) {
3548 geo2cart(obs->obsz[ir], obs->obslon[ir], obs->obslat[ir], xo);
3549 geo2cart(obs->vpz[ir], obs->vplon[ir], obs->vplat[ir], xv);
3550 for (int i = 0; i < 3; i++)
3551 xd[i] = xo[i] - xv[i];
3552 z[ir] = NORM(xo) * NORM(xd) / DOTP(xo, xd);
3553 nadir++;
3554 } else
3555 z[ir] = obs->tpz[ir];
3556 }
3557 if (nadir > 0 && nadir < obs->nr)
3558 ERRMSG("Limb and nadir not simultaneously possible!");
3559
3560 /* Nadir? */
3561 if (nadir)
3562 strcat(rfmflg, " NAD");
3563
3564 /* Get surface temperature... */
3565 tsurf = atm->t[gsl_stats_min_index(atm->z, 1, (size_t) atm->np)];
3566
3567 /* Refraction? */
3568 if (!nadir && !ctl->refrac)
3569 strcat(rfmflg, " GEO");
3570
3571 /* Continua? */
3572 if (ctl->ctm_co2 || ctl->ctm_h2o || ctl->ctm_n2 || ctl->ctm_o2)
3573 strcat(rfmflg, " CTM");
3574
3575 /* Write atmospheric data file... */
3576 write_atm_rfm("rfm.atm", ctl, atm);
3577
3578 /* Loop over channels... */
3579 for (int id = 0; id < ctl->nd; id++) {
3580
3581 /* Read filter function... */
3582 sprintf(filename, "%s_%.4f.filt", ctl->tblbase, ctl->nu[id]);
3583 read_shape(filename, nu, f, &n);
3584
3585 /* Set spectral range... */
3586 nu0 = nu[0];
3587 nu1 = nu[n - 1];
3588
3589 /* Create RFM driver file... */
3590 if (!(out = fopen("rfm.drv", "w")))
3591 ERRMSG("Cannot create file!");
3592 fprintf(out, "*HDR\nRFM call by JURASSIC.\n");
3593 fprintf(out, "*FLG\n%s\n", rfmflg);
3594 fprintf(out, "*SPC\n%.4f %.4f 0.0005\n", nu0, nu1);
3595 fprintf(out, "*GAS\n");
3596 for (int ig = 0; ig < ctl->ng; ig++)
3597 fprintf(out, "%s\n", ctl->emitter[ig]);
3598 fprintf(out, "*ATM\nrfm.atm\n");
3599 fprintf(out, "*TAN\n");
3600 for (int ir = 0; ir < obs->nr; ir++)
3601 fprintf(out, "%g\n", z[ir]);
3602 fprintf(out, "*SFC\n%g 1.0\n", tsurf);
3603 if (obsz >= 0)
3604 fprintf(out, "*OBS\n%g\n", obsz);
3605 fprintf(out, "*HIT\n%s\n", ctl->rfmhit);
3606 fprintf(out, "*XSC\n");
3607 for (int ig = 0; ig < ctl->ng; ig++)
3608 if (ctl->rfmxsc[ig][0] != '-')
3609 fprintf(out, "%s\n", ctl->rfmxsc[ig]);
3610 fprintf(out, "*END\n");
3611 fclose(out);
3612
3613 /* Remove temporary files... */
3614 if (system("rm -f rfm.runlog rad_*.asc tra_*.asc"))
3615 ERRMSG("Cannot remove temporary files!");
3616
3617 /* Call RFM... */
3618 sprintf(cmd, "echo | %s", ctl->rfmbin);
3619 if (system(cmd))
3620 ERRMSG("Error while calling RFM!");
3621
3622 /* Read data... */
3623 for (int ir = 0; ir < obs->nr; ir++) {
3624 obs->rad[id][ir] = read_obs_rfm("rad", z[ir], nu, f, n) * 1e-5;
3625 obs->tau[id][ir] = read_obs_rfm("tra", z[ir], nu, f, n);
3626 }
3627 }
3628
3629 /* Remove temporary files... */
3630 if (system("rm -f rfm.drv rfm.atm rfm.runlog rad_*.asc tra_*.asc"))
3631 ERRMSG("Error while removing temporary files!");
3632
3633 /* Free... */
3634 free(los);
3635}
double read_obs_rfm(const char *basename, const double z, double *nu, double *f, int n)
Read observation data in RFM format.
Definition: jurassic.c:4943
void write_atm_rfm(const char *filename, const ctl_t *ctl, const atm_t *atm)
Write atmospheric data in RFM format.
Definition: jurassic.c:5618
void read_shape(const char *filename, double *x, double *y, int *n)
Read shape function.
Definition: jurassic.c:5062
#define LEN
Maximum length of ASCII data lines.
Definition: jurassic.h:394
#define NSHAPE
Maximum number of shape function grid points.
Definition: jurassic.h:419
char rfmhit[LEN]
HITRAN file for RFM.
Definition: jurassic.h:697
char tblbase[LEN]
Basename for table files and filter function files.
Definition: jurassic.h:598
char rfmbin[LEN]
Path to RFM binary.
Definition: jurassic.h:694
char rfmxsc[NG][LEN]
Emitter cross-section files for RFM.
Definition: jurassic.h:700
int refrac
Take into account refractivity (0=no, 1=yes).
Definition: jurassic.h:619
Here is the call graph for this function:

◆ formod_srcfunc()

void formod_srcfunc ( const ctl_t ctl,
const tbl_t tbl,
const double  t,
double *  src 
)

Compute Planck source function.

Definition at line 3639 of file jurassic.c.

3643 {
3644
3645 /* Determine index in temperature array... */
3646 const int it = locate_reg(tbl->st, TBLNS, t);
3647
3648 /* Interpolate Planck function value... */
3649 for (int id = 0; id < ctl->nd; id++)
3650 src[id] = LIN(tbl->st[it], tbl->sr[it][id],
3651 tbl->st[it + 1], tbl->sr[it + 1][id], t);
3652}
#define TBLNS
Maximum number of source function temperature levels.
Definition: jurassic.h:444
double sr[TBLNS][ND]
Source function radiance [W/(m^2 sr cm^-1)].
Definition: jurassic.h:832
double st[TBLNS]
Source function temperature [K].
Definition: jurassic.h:829
Here is the call graph for this function:

◆ geo2cart()

void geo2cart ( const double  z,
const double  lon,
const double  lat,
double *  x 
)

Convert geolocation to Cartesian coordinates.

Definition at line 3656 of file jurassic.c.

3660 {
3661
3662 const double radius = z + RE;
3663
3664 const double latrad = lat / 180. * M_PI;
3665 const double lonrad = lon / 180. * M_PI;
3666
3667 const double coslat = cos(latrad);
3668
3669 x[0] = radius * coslat * cos(lonrad);
3670 x[1] = radius * coslat * sin(lonrad);
3671 x[2] = radius * sin(latrad);
3672}

◆ hydrostatic()

void hydrostatic ( const ctl_t ctl,
atm_t atm 
)

Set hydrostatic equilibrium.

Definition at line 3676 of file jurassic.c.

3678 {
3679
3680 const double mmair = 28.96456e-3, mmh2o = 18.0153e-3;
3681
3682 const int ipts = 20;
3683
3684 double dzmin = 1e99, e = 0;
3685
3686 int ipref = 0;
3687
3688 /* Check reference height... */
3689 if (ctl->hydz < 0)
3690 return;
3691
3692 /* Find air parcel next to reference height... */
3693 for (int ip = 0; ip < atm->np; ip++)
3694 if (fabs(atm->z[ip] - ctl->hydz) < dzmin) {
3695 dzmin = fabs(atm->z[ip] - ctl->hydz);
3696 ipref = ip;
3697 }
3698
3699 /* Upper part of profile... */
3700 for (int ip = ipref + 1; ip < atm->np; ip++) {
3701 double mean = 0;
3702 for (int i = 0; i < ipts; i++) {
3703 if (ctl->ig_h2o >= 0)
3704 e = LIN(0.0, atm->q[ctl->ig_h2o][ip - 1],
3705 ipts - 1.0, atm->q[ctl->ig_h2o][ip], (double) i);
3706 mean += (e * mmh2o + (1 - e) * mmair)
3707 * G0 / RI
3708 / LIN(0.0, atm->t[ip - 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3709 }
3710
3711 /* Compute p(z,T)... */
3712 atm->p[ip] =
3713 exp(log(atm->p[ip - 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip - 1]));
3714 }
3715
3716 /* Lower part of profile... */
3717 for (int ip = ipref - 1; ip >= 0; ip--) {
3718 double mean = 0;
3719 for (int i = 0; i < ipts; i++) {
3720 if (ctl->ig_h2o >= 0)
3721 e = LIN(0.0, atm->q[ctl->ig_h2o][ip + 1],
3722 ipts - 1.0, atm->q[ctl->ig_h2o][ip], (double) i);
3723 mean += (e * mmh2o + (1 - e) * mmair)
3724 * G0 / RI
3725 / LIN(0.0, atm->t[ip + 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3726 }
3727
3728 /* Compute p(z,T)... */
3729 atm->p[ip] =
3730 exp(log(atm->p[ip + 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip + 1]));
3731 }
3732}
#define G0
Standard gravity [m/s^2].
Definition: jurassic.h:275
#define RI
Ideal gas constant [J/(mol K)].
Definition: jurassic.h:320
double hydz
Reference height for hydrostatic pressure profile (-999 to skip) [km].
Definition: jurassic.h:604

◆ idx2name()

void idx2name ( const ctl_t ctl,
const int  idx,
char *  quantity 
)

Determine name of state vector quantity for given index.

Definition at line 3736 of file jurassic.c.

3739 {
3740
3741 if (idx == IDXP)
3742 sprintf(quantity, "PRESSURE");
3743
3744 if (idx == IDXT)
3745 sprintf(quantity, "TEMPERATURE");
3746
3747 for (int ig = 0; ig < ctl->ng; ig++)
3748 if (idx == IDXQ(ig))
3749 sprintf(quantity, "%s", ctl->emitter[ig]);
3750
3751 for (int iw = 0; iw < ctl->nw; iw++)
3752 if (idx == IDXK(iw))
3753 sprintf(quantity, "EXTINCT_WINDOW_%d", iw);
3754
3755 if (idx == IDXCLZ)
3756 sprintf(quantity, "CLOUD_HEIGHT");
3757
3758 if (idx == IDXCLDZ)
3759 sprintf(quantity, "CLOUD_DEPTH");
3760
3761 for (int icl = 0; icl < ctl->ncl; icl++)
3762 if (idx == IDXCLK(icl))
3763 sprintf(quantity, "CLOUD_EXTINCT_%.4f", ctl->clnu[icl]);
3764
3765 if (idx == IDXSFZ)
3766 sprintf(quantity, "SURFACE_HEIGHT");
3767
3768 if (idx == IDXSFP)
3769 sprintf(quantity, "SURFACE_PRESSURE");
3770
3771 if (idx == IDXSFT)
3772 sprintf(quantity, "SURFACE_TEMPERATURE");
3773
3774 for (int isf = 0; isf < ctl->nsf; isf++)
3775 if (idx == IDXSFEPS(isf))
3776 sprintf(quantity, "SURFACE_EMISSIVITY_%.4f", ctl->sfnu[isf]);
3777}
double sfnu[NSF]
Surface layer wavenumber [cm^-1].
Definition: jurassic.h:589
double clnu[NCL]
Cloud layer wavenumber [cm^-1].
Definition: jurassic.h:583

◆ init_srcfunc()

void init_srcfunc ( const ctl_t ctl,
tbl_t tbl 
)

Initialize source function table.

Definition at line 3781 of file jurassic.c.

3783 {
3784
3785 char filename[2 * LEN];
3786
3787 double f[NSHAPE], nu[NSHAPE];
3788
3789 int n;
3790
3791 /* Write info... */
3792 LOG(1, "Initialize source function table...");
3793 LOG(2, "Number of data points: %d", TBLNS);
3794
3795 /* Loop over channels... */
3796 for (int id = 0; id < ctl->nd; id++) {
3797
3798 /* Read filter function... */
3799 sprintf(filename, "%s_%.4f.filt", ctl->tblbase, ctl->nu[id]);
3800 read_shape(filename, nu, f, &n);
3801
3802 /* Get minimum grid spacing... */
3803 double dnu = 1.0;
3804 for (int i = 1; i < n; i++)
3805 dnu = MIN(dnu, nu[i] - nu[i - 1]);
3806
3807 /* Compute source function table... */
3808#pragma omp parallel for default(none) shared(ctl,tbl,id,nu,f,n,dnu)
3809 for (int it = 0; it < TBLNS; it++) {
3810
3811 /* Set temperature... */
3812 tbl->st[it] = LIN(0.0, TMIN, TBLNS - 1.0, TMAX, (double) it);
3813
3814 /* Integrate Planck function... */
3815 double fsum = tbl->sr[it][id] = 0;
3816 for (double fnu = nu[0]; fnu <= nu[n - 1]; fnu += dnu) {
3817 const int i = locate_irr(nu, n, fnu);
3818 const double ff = LIN(nu[i], f[i], nu[i + 1], f[i + 1], fnu);
3819 fsum += ff;
3820 tbl->sr[it][id] += ff * PLANCK(tbl->st[it], fnu);
3821 }
3822 tbl->sr[it][id] /= fsum;
3823 }
3824
3825 /* Write info... */
3826 LOG(2,
3827 "channel= %.4f cm^-1 | T= %g ... %g K | B= %g ... %g W/(m^2 sr cm^-1)",
3828 ctl->nu[id], tbl->st[0], tbl->st[TBLNS - 1], tbl->sr[0][id],
3829 tbl->sr[TBLNS - 1][id]);
3830 }
3831}
#define LOG(level,...)
Print log message.
Definition: jurassic.h:222
#define TMAX
Maximum temperature for source function [K].
Definition: jurassic.h:335
#define TMIN
Minimum temperature for source function [K].
Definition: jurassic.h:330
Here is the call graph for this function:

◆ intpol_atm()

void intpol_atm ( const ctl_t ctl,
const atm_t atm,
const double  z,
double *  p,
double *  t,
double *  q,
double *  k 
)

Interpolate atmospheric data.

Definition at line 3835 of file jurassic.c.

3842 {
3843
3844 /* Get array index... */
3845 const int ip = locate_irr(atm->z, atm->np, z);
3846
3847 /* Interpolate... */
3848 *p = LOGY(atm->z[ip], atm->p[ip], atm->z[ip + 1], atm->p[ip + 1], z);
3849 *t = LIN(atm->z[ip], atm->t[ip], atm->z[ip + 1], atm->t[ip + 1], z);
3850 for (int ig = 0; ig < ctl->ng; ig++)
3851 q[ig] =
3852 LIN(atm->z[ip], atm->q[ig][ip], atm->z[ip + 1], atm->q[ig][ip + 1], z);
3853 for (int iw = 0; iw < ctl->nw; iw++)
3854 k[iw] =
3855 LIN(atm->z[ip], atm->k[iw][ip], atm->z[ip + 1], atm->k[iw][ip + 1], z);
3856}
Here is the call graph for this function:

◆ intpol_tbl_cga()

void intpol_tbl_cga ( const ctl_t ctl,
const tbl_t tbl,
const los_t los,
const int  ip,
double  tau_path[ND][NG],
double  tau_seg[ND] 
)

Get transmittance from look-up tables (CGA method).

Definition at line 3860 of file jurassic.c.

3866 {
3867
3868 double eps;
3869
3870 /* Loop over channels... */
3871 for (int id = 0; id < ctl->nd; id++) {
3872
3873 /* Initialize... */
3874 tau_seg[id] = 1;
3875
3876 /* Loop over emitters.... */
3877 for (int ig = 0; ig < ctl->ng; ig++) {
3878
3879 /* Check size of table (pressure) and column density... */
3880 if (tbl->np[id][ig] < 30 || los->cgu[ip][ig] <= 0)
3881 eps = 0;
3882
3883 /* Check transmittance... */
3884 else if (tau_path[id][ig] < 1e-9)
3885 eps = 1;
3886
3887 /* Interpolate... */
3888 else {
3889
3890 /* Determine pressure and temperature indices... */
3891 const int ipr =
3892 locate_irr(tbl->p[id][ig], tbl->np[id][ig], los->cgp[ip][ig]);
3893 const int it0 = locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr],
3894 los->cgt[ip][ig]);
3895 const int it1 =
3896 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3897 los->cgt[ip][ig]);
3898
3899 /* Check size of table (temperature and column density)... */
3900 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3901 || tbl->nu[id][ig][ipr][it0] < 2
3902 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3903 || tbl->nu[id][ig][ipr + 1][it1] < 2
3904 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3905 eps = 0;
3906
3907 else {
3908
3909 /* Get emissivities of extended path... */
3910 double eps00
3911 = intpol_tbl_eps(tbl, ig, id, ipr, it0, los->cgu[ip][ig]);
3912 double eps01 =
3913 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, los->cgu[ip][ig]);
3914 double eps10 =
3915 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, los->cgu[ip][ig]);
3916 double eps11 =
3917 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, los->cgu[ip][ig]);
3918
3919 /* Interpolate with respect to temperature... */
3920 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
3921 tbl->t[id][ig][ipr][it0 + 1], eps01, los->cgt[ip][ig]);
3922 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
3923 tbl->t[id][ig][ipr + 1][it1 + 1],
3924 eps11, los->cgt[ip][ig]);
3925
3926 /* Interpolate with respect to pressure... */
3927 eps00 = LOGX(tbl->p[id][ig][ipr], eps00,
3928 tbl->p[id][ig][ipr + 1], eps11, los->cgp[ip][ig]);
3929
3930 /* Check emssivity range... */
3931 eps00 = MAX(MIN(eps00, 1), 0);
3932
3933 /* Determine segment emissivity... */
3934 eps = 1 - (1 - eps00) / tau_path[id][ig];
3935 }
3936 }
3937
3938 /* Get transmittance of extended path... */
3939 tau_path[id][ig] *= (1 - eps);
3940
3941 /* Get segment transmittance... */
3942 tau_seg[id] *= (1 - eps);
3943 }
3944 }
3945}
double intpol_tbl_eps(const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double u)
Interpolate emissivity from look-up tables.
Definition: jurassic.c:4045
#define LOGX(x0, y0, x1, y1, x)
Compute logarithmic interpolation in x.
Definition: jurassic.h:169
double cgu[NLOS][NG]
Curtis-Godson column density [molecules/cm^2].
Definition: jurassic.h:750
double cgt[NLOS][NG]
Curtis-Godson temperature [K].
Definition: jurassic.h:747
double cgp[NLOS][NG]
Curtis-Godson pressure [hPa].
Definition: jurassic.h:744
double p[ND][NG][TBLNP]
Pressure [hPa].
Definition: jurassic.h:817
int nu[ND][NG][TBLNP][TBLNT]
Number of column densities.
Definition: jurassic.h:814
int nt[ND][NG][TBLNP]
Number of temperatures.
Definition: jurassic.h:811
double t[ND][NG][TBLNP][TBLNT]
Temperature [K].
Definition: jurassic.h:820
int np[ND][NG]
Number of pressure levels.
Definition: jurassic.h:808
Here is the call graph for this function:

◆ intpol_tbl_ega()

void intpol_tbl_ega ( const ctl_t ctl,
const tbl_t tbl,
const los_t los,
const int  ip,
double  tau_path[ND][NG],
double  tau_seg[ND] 
)

Get transmittance from look-up tables (EGA method).

Definition at line 3949 of file jurassic.c.

3955 {
3956
3957 double eps, u;
3958
3959 /* Loop over channels... */
3960 for (int id = 0; id < ctl->nd; id++) {
3961
3962 /* Initialize... */
3963 tau_seg[id] = 1;
3964
3965 /* Loop over emitters.... */
3966 for (int ig = 0; ig < ctl->ng; ig++) {
3967
3968 /* Check size of table (pressure) and column density... */
3969 if (tbl->np[id][ig] < 30 || los->cgu[ip][ig] <= 0)
3970 eps = 0;
3971
3972 /* Check transmittance... */
3973 else if (tau_path[id][ig] < 1e-9)
3974 eps = 1;
3975
3976 /* Interpolate... */
3977 else {
3978
3979 /* Determine pressure and temperature indices... */
3980 const int ipr =
3981 locate_irr(tbl->p[id][ig], tbl->np[id][ig], los->p[ip]);
3982 const int it0 =
3983 locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr], los->t[ip]);
3984 const int it1 =
3985 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3986 los->t[ip]);
3987
3988 /* Check size of table (temperature and column density)... */
3989 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3990 || tbl->nu[id][ig][ipr][it0] < 2
3991 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3992 || tbl->nu[id][ig][ipr + 1][it1] < 2
3993 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3994 eps = 0;
3995
3996 else {
3997
3998 /* Get emissivities of extended path... */
3999 u = intpol_tbl_u(tbl, ig, id, ipr, it0, 1 - tau_path[id][ig]);
4000 double eps00
4001 = intpol_tbl_eps(tbl, ig, id, ipr, it0, u + los->u[ip][ig]);
4002
4003 u = intpol_tbl_u(tbl, ig, id, ipr, it0 + 1, 1 - tau_path[id][ig]);
4004 double eps01 =
4005 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, u + los->u[ip][ig]);
4006
4007 u = intpol_tbl_u(tbl, ig, id, ipr + 1, it1, 1 - tau_path[id][ig]);
4008 double eps10 =
4009 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, u + los->u[ip][ig]);
4010
4011 u =
4012 intpol_tbl_u(tbl, ig, id, ipr + 1, it1 + 1, 1 - tau_path[id][ig]);
4013 double eps11 =
4014 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, u + los->u[ip][ig]);
4015
4016 /* Interpolate with respect to temperature... */
4017 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
4018 tbl->t[id][ig][ipr][it0 + 1], eps01, los->t[ip]);
4019 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
4020 tbl->t[id][ig][ipr + 1][it1 + 1], eps11, los->t[ip]);
4021
4022 /* Interpolate with respect to pressure... */
4023 eps00 = LIN(tbl->p[id][ig][ipr], eps00,
4024 tbl->p[id][ig][ipr + 1], eps11, los->p[ip]);
4025
4026 /* Check emssivity range... */
4027 eps00 = MAX(MIN(eps00, 1), 0);
4028
4029 /* Determine segment emissivity... */
4030 eps = 1 - (1 - eps00) / tau_path[id][ig];
4031 }
4032 }
4033
4034 /* Get transmittance of extended path... */
4035 tau_path[id][ig] *= (1 - eps);
4036
4037 /* Get segment transmittance... */
4038 tau_seg[id] *= (1 - eps);
4039 }
4040 }
4041}
double intpol_tbl_u(const tbl_t *tbl, const int ig, const int id, const int ip, const int it, const double eps)
Interpolate column density from look-up tables.
Definition: jurassic.c:4077
Here is the call graph for this function:

◆ intpol_tbl_eps()

double intpol_tbl_eps ( const tbl_t tbl,
const int  ig,
const int  id,
const int  ip,
const int  it,
const double  u 
)
inline

Interpolate emissivity from look-up tables.

Definition at line 4045 of file jurassic.c.

4051 {
4052
4053 const int nu = tbl->nu[id][ig][ip][it];
4054 const float *u_arr = tbl->u[id][ig][ip][it];
4055 const float *eps_arr = tbl->eps[id][ig][ip][it];
4056
4057 const double u_min = u_arr[0];
4058 const double u_max = u_arr[nu - 1];
4059
4060 /* Lower extrapolation */
4061 if (u < u_min)
4062 return LIN(0.0, 0.0, u_min, eps_arr[0], u);
4063
4064 /* Upper extrapolation */
4065 if (u > u_max) {
4066 const double a = log(1.0 - eps_arr[nu - 1]) / u_max;
4067 return 1.0 - exp(a * u);
4068 }
4069
4070 /* Interpolation */
4071 const int idx = locate_tbl(u_arr, nu, u);
4072 return LIN(u_arr[idx], eps_arr[idx], u_arr[idx + 1], eps_arr[idx + 1], u);
4073}
int locate_tbl(const float *xx, const int n, const double x)
Find array index in float array.
Definition: jurassic.c:4290
float eps[ND][NG][TBLNP][TBLNT][TBLNU]
Emissivity.
Definition: jurassic.h:826
float u[ND][NG][TBLNP][TBLNT][TBLNU]
Column density [molecules/cm^2].
Definition: jurassic.h:823
Here is the call graph for this function:

◆ intpol_tbl_u()

double intpol_tbl_u ( const tbl_t tbl,
const int  ig,
const int  id,
const int  ip,
const int  it,
const double  eps 
)
inline

Interpolate column density from look-up tables.

Definition at line 4077 of file jurassic.c.

4083 {
4084
4085 const int nu = tbl->nu[id][ig][ip][it];
4086 const float *eps_arr = tbl->eps[id][ig][ip][it];
4087 const float *u_arr = tbl->u[id][ig][ip][it];
4088
4089 const double eps_min = eps_arr[0];
4090 const double eps_max = eps_arr[nu - 1];
4091
4092 /* Lower boundary extrapolation */
4093 if (eps < eps_min)
4094 return LIN(0.0, 0.0, eps_min, u_arr[0], eps);
4095
4096 /* Upper boundary extrapolation (log-inverse) */
4097 if (eps > eps_max) {
4098 const double a = log(1.0 - eps_max) / u_arr[nu - 1];
4099 return log(1.0 - eps) / a;
4100 }
4101
4102 /* Interpolation */
4103 const int idx = locate_tbl(eps_arr, nu, eps);
4104 return LIN(eps_arr[idx], u_arr[idx], eps_arr[idx + 1], u_arr[idx + 1], eps);
4105}
Here is the call graph for this function:

◆ jsec2time()

void jsec2time ( const double  jsec,
int *  year,
int *  mon,
int *  day,
int *  hour,
int *  min,
int *  sec,
double *  remain 
)

Convert seconds to date.

Definition at line 4109 of file jurassic.c.

4117 {
4118
4119 struct tm t0, *t1;
4120
4121 t0.tm_year = 100;
4122 t0.tm_mon = 0;
4123 t0.tm_mday = 1;
4124 t0.tm_hour = 0;
4125 t0.tm_min = 0;
4126 t0.tm_sec = 0;
4127
4128 time_t jsec0 = (time_t) jsec + timegm(&t0);
4129 t1 = gmtime(&jsec0);
4130
4131 *year = t1->tm_year + 1900;
4132 *mon = t1->tm_mon + 1;
4133 *day = t1->tm_mday;
4134 *hour = t1->tm_hour;
4135 *min = t1->tm_min;
4136 *sec = t1->tm_sec;
4137 *remain = jsec - floor(jsec);
4138}

◆ kernel()

void kernel ( const ctl_t ctl,
const tbl_t tbl,
atm_t atm,
obs_t obs,
gsl_matrix *  k 
)

Compute Jacobians.

Definition at line 4142 of file jurassic.c.

4147 {
4148
4149 int *iqa;
4150
4151 /* Get sizes... */
4152 const size_t m = k->size1;
4153 const size_t n = k->size2;
4154
4155 /* Allocate... */
4156 gsl_vector *x0 = gsl_vector_alloc(n);
4157 gsl_vector *yy0 = gsl_vector_alloc(m);
4158 ALLOC(iqa, int,
4159 N);
4160
4161 /* Compute radiance for undisturbed atmospheric data... */
4162 formod(ctl, tbl, atm, obs);
4163
4164 /* Compose vectors... */
4165 atm2x(ctl, atm, x0, iqa, NULL);
4166 obs2y(ctl, obs, yy0, NULL, NULL);
4167
4168 /* Initialize kernel matrix... */
4169 gsl_matrix_set_zero(k);
4170
4171 /* Loop over state vector elements... */
4172#pragma omp parallel for default(none) shared(ctl,tbl,atm,obs,k,x0,yy0,n,m,iqa)
4173 for (size_t j = 0; j < n; j++) {
4174
4175 /* Allocate... */
4176 atm_t *atm1;
4177 obs_t *obs1;
4178 ALLOC(atm1, atm_t, 1);
4179 ALLOC(obs1, obs_t, 1);
4180 gsl_vector *x1 = gsl_vector_alloc(n);
4181 gsl_vector *yy1 = gsl_vector_alloc(m);
4182
4183 /* Set perturbation size... */
4184 double h;
4185 if (iqa[j] == IDXP)
4186 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-7);
4187 else if (iqa[j] == IDXT)
4188 h = 1.0;
4189 else if (iqa[j] >= IDXQ(0) && iqa[j] < IDXQ(ctl->ng))
4190 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-15);
4191 else if (iqa[j] >= IDXK(0) && iqa[j] < IDXK(ctl->nw))
4192 h = 1e-4;
4193 else if (iqa[j] == IDXCLZ || iqa[j] == IDXCLDZ)
4194 h = 1.0;
4195 else if (iqa[j] >= IDXCLK(0) && iqa[j] < IDXCLK(ctl->ncl))
4196 h = 1e-4;
4197 else if (iqa[j] == IDXSFZ)
4198 h = 0.1;
4199 else if (iqa[j] == IDXSFP)
4200 h = 10.0;
4201 else if (iqa[j] == IDXSFT)
4202 h = 1.0;
4203 else if (iqa[j] >= IDXSFEPS(0) && iqa[j] < IDXSFEPS(ctl->nsf))
4204 h = 1e-2;
4205 else
4206 ERRMSG("Cannot set perturbation size!");
4207
4208 /* Disturb state vector element... */
4209 gsl_vector_memcpy(x1, x0);
4210 gsl_vector_set(x1, j, gsl_vector_get(x1, j) + h);
4211 copy_atm(ctl, atm1, atm, 0);
4212 copy_obs(ctl, obs1, obs, 0);
4213 x2atm(ctl, x1, atm1);
4214
4215 /* Compute radiance for disturbed atmospheric data... */
4216 formod(ctl, tbl, atm1, obs1);
4217
4218 /* Compose measurement vector for disturbed radiance data... */
4219 obs2y(ctl, obs1, yy1, NULL, NULL);
4220
4221 /* Compute derivatives... */
4222 for (size_t i = 0; i < m; i++)
4223 gsl_matrix_set(k, i, j,
4224 (gsl_vector_get(yy1, i) - gsl_vector_get(yy0, i)) / h);
4225
4226 /* Free... */
4227 gsl_vector_free(x1);
4228 gsl_vector_free(yy1);
4229 free(atm1);
4230 free(obs1);
4231 }
4232
4233 /* Free... */
4234 gsl_vector_free(x0);
4235 gsl_vector_free(yy0);
4236 free(iqa);
4237}
void x2atm(const ctl_t *ctl, const gsl_vector *x, atm_t *atm)
Decompose parameter vector or state vector.
Definition: jurassic.c:6060
void formod(const ctl_t *ctl, const tbl_t *tbl, atm_t *atm, obs_t *obs)
Determine ray paths and compute radiative transfer.
Definition: jurassic.c:3212
void copy_atm(const ctl_t *ctl, atm_t *atm_dest, const atm_t *atm_src, const int init)
Copy and initialize atmospheric data.
Definition: jurassic.c:3107
size_t obs2y(const ctl_t *ctl, const obs_t *obs, gsl_vector *y, int *ida, int *ira)
Compose measurement vector.
Definition: jurassic.c:4312
size_t atm2x(const ctl_t *ctl, const atm_t *atm, gsl_vector *x, int *iqa, int *ipa)
Compose state vector or parameter vector.
Definition: jurassic.c:29
#define N
Maximum size of state vector.
Definition: jurassic.h:404
Atmospheric data.
Definition: jurassic.h:494
Here is the call graph for this function:

◆ locate_irr()

int locate_irr ( const double *  xx,
const int  n,
const double  x 
)

Find array index for irregular grid.

Definition at line 4241 of file jurassic.c.

4244 {
4245
4246 int ilo = 0;
4247 int ihi = n - 1;
4248 int i = (ihi + ilo) >> 1;
4249
4250 if (xx[i] < xx[i + 1])
4251 while (ihi > ilo + 1) {
4252 i = (ihi + ilo) >> 1;
4253 if (xx[i] > x)
4254 ihi = i;
4255 else
4256 ilo = i;
4257 } else
4258 while (ihi > ilo + 1) {
4259 i = (ihi + ilo) >> 1;
4260 if (xx[i] <= x)
4261 ihi = i;
4262 else
4263 ilo = i;
4264 }
4265
4266 return ilo;
4267}

◆ locate_reg()

int locate_reg ( const double *  xx,
const int  n,
const double  x 
)

Find array index for regular grid.

Definition at line 4271 of file jurassic.c.

4274 {
4275
4276 /* Calculate index... */
4277 const int i = (int) ((x - xx[0]) / (xx[1] - xx[0]));
4278
4279 /* Check range... */
4280 if (i < 0)
4281 return 0;
4282 else if (i > n - 2)
4283 return n - 2;
4284 else
4285 return i;
4286}

◆ locate_tbl()

int locate_tbl ( const float *  xx,
const int  n,
const double  x 
)
inline

Find array index in float array.

Definition at line 4290 of file jurassic.c.

4293 {
4294
4295 int ilo = 0;
4296 int ihi = n - 1;
4297 int i = (ihi + ilo) >> 1;
4298
4299 while (ihi > ilo + 1) {
4300 i = (ihi + ilo) >> 1;
4301 if (xx[i] > x)
4302 ihi = i;
4303 else
4304 ilo = i;
4305 }
4306
4307 return ilo;
4308}

◆ obs2y()

size_t obs2y ( const ctl_t ctl,
const obs_t obs,
gsl_vector *  y,
int *  ida,
int *  ira 
)

Compose measurement vector.

Definition at line 4312 of file jurassic.c.

4317 {
4318
4319 size_t m = 0;
4320
4321 /* Determine measurement vector... */
4322 for (int ir = 0; ir < obs->nr; ir++)
4323 for (int id = 0; id < ctl->nd; id++)
4324 if (isfinite(obs->rad[id][ir])) {
4325 if (y != NULL)
4326 gsl_vector_set(y, m, obs->rad[id][ir]);
4327 if (ida != NULL)
4328 ida[m] = id;
4329 if (ira != NULL)
4330 ira[m] = ir;
4331 m++;
4332 }
4333
4334 return m;
4335}

◆ raytrace()

void raytrace ( const ctl_t ctl,
const atm_t atm,
obs_t obs,
los_t los,
const int  ir 
)

Do ray-tracing to determine LOS.

Definition at line 4339 of file jurassic.c.

4344 {
4345
4346 const double h = 0.02, zrefrac = 60;
4347
4348 double ex0[3], ex1[3], k[NW], lat, lon, n, ng[3], norm, p, q[NG], t,
4349 x[3], xh[3], xobs[3], xvp[3], z = 1e99, zmax, zmin;
4350
4351 int stop = 0;
4352
4353 /* Initialize... */
4354 los->np = 0;
4355 los->sft = -999;
4356 obs->tpz[ir] = obs->vpz[ir];
4357 obs->tplon[ir] = obs->vplon[ir];
4358 obs->tplat[ir] = obs->vplat[ir];
4359
4360 /* Get altitude range of atmospheric data... */
4361 gsl_stats_minmax(&zmin, &zmax, atm->z, 1, (size_t) atm->np);
4362 if (ctl->nsf > 0) {
4363 zmin = MAX(atm->sfz, zmin);
4364 if (atm->sfp > 0) {
4365 const int ip = locate_irr(atm->p, atm->np, atm->sfp);
4366 const double zip =
4367 LIN(log(atm->p[ip]), atm->z[ip], log(atm->p[ip + 1]), atm->z[ip + 1],
4368 log(atm->sfp));
4369 zmin = MAX(zip, zmin);
4370 }
4371 }
4372
4373 /* Check observer altitude... */
4374 if (obs->obsz[ir] < zmin)
4375 ERRMSG("Observer below surface!");
4376
4377 /* Check view point altitude... */
4378 if (obs->vpz[ir] > zmax)
4379 return;
4380
4381 /* Determine Cartesian coordinates for observer and view point... */
4382 geo2cart(obs->obsz[ir], obs->obslon[ir], obs->obslat[ir], xobs);
4383 geo2cart(obs->vpz[ir], obs->vplon[ir], obs->vplat[ir], xvp);
4384
4385 /* Determine initial tangent vector... */
4386 for (int i = 0; i < 3; i++)
4387 ex0[i] = xvp[i] - xobs[i];
4388 norm = NORM(ex0);
4389 for (int i = 0; i < 3; i++)
4390 ex0[i] /= norm;
4391
4392 /* Observer within atmosphere... */
4393 for (int i = 0; i < 3; i++)
4394 x[i] = xobs[i];
4395
4396 /* Observer above atmosphere (search entry point)... */
4397 if (obs->obsz[ir] > zmax) {
4398 double dmax = norm, dmin = 0;
4399 while (fabs(dmin - dmax) > 0.001) {
4400 const double d = (dmax + dmin) / 2;
4401 for (int i = 0; i < 3; i++)
4402 x[i] = xobs[i] + d * ex0[i];
4403 cart2geo(x, &z, &lon, &lat);
4404 if (z <= zmax && z > zmax - 0.001)
4405 break;
4406 if (z < zmax - 0.0005)
4407 dmax = d;
4408 else
4409 dmin = d;
4410 }
4411 }
4412
4413 /* Ray-tracing... */
4414 while (1) {
4415
4416 /* Set step length... */
4417 double ds = ctl->rayds;
4418 if (ctl->raydz > 0) {
4419 norm = NORM(x);
4420 for (int i = 0; i < 3; i++)
4421 xh[i] = x[i] / norm;
4422 const double cosa = fabs(DOTP(ex0, xh));
4423 if (cosa != 0)
4424 ds = MIN(ctl->rayds, ctl->raydz / cosa);
4425 }
4426
4427 /* Determine geolocation... */
4428 cart2geo(x, &z, &lon, &lat);
4429
4430 /* Check if LOS hits the ground or has left atmosphere... */
4431 if (z < zmin || z > zmax) {
4432 stop = (z < zmin ? 2 : 1);
4433 const double frac =
4434 ((z <
4435 zmin ? zmin : zmax) - los->z[los->np - 1]) / (z - los->z[los->np -
4436 1]);
4437 geo2cart(los->z[los->np - 1], los->lon[los->np - 1],
4438 los->lat[los->np - 1], xh);
4439 for (int i = 0; i < 3; i++)
4440 x[i] = xh[i] + frac * (x[i] - xh[i]);
4441 cart2geo(x, &z, &lon, &lat);
4442 los->ds[los->np - 1] = ds * frac;
4443 ds = 0;
4444 }
4445
4446 /* Interpolate atmospheric data... */
4447 intpol_atm(ctl, atm, z, &p, &t, q, k);
4448
4449 /* Save data... */
4450 los->lon[los->np] = lon;
4451 los->lat[los->np] = lat;
4452 los->z[los->np] = z;
4453 los->p[los->np] = p;
4454 los->t[los->np] = t;
4455 for (int ig = 0; ig < ctl->ng; ig++)
4456 los->q[los->np][ig] = q[ig];
4457 for (int id = 0; id < ctl->nd; id++)
4458 los->k[los->np][id] = k[ctl->window[id]];
4459 los->ds[los->np] = ds;
4460
4461 /* Add cloud extinction... */
4462 if (ctl->ncl > 0 && atm->cldz > 0) {
4463 const double aux = exp(-0.5 * POW2((z - atm->clz) / atm->cldz));
4464 for (int id = 0; id < ctl->nd; id++) {
4465 const int icl = locate_irr(ctl->clnu, ctl->ncl, ctl->nu[id]);
4466 los->k[los->np][id]
4467 += aux * LIN(ctl->clnu[icl], atm->clk[icl],
4468 ctl->clnu[icl + 1], atm->clk[icl + 1], ctl->nu[id]);
4469 }
4470 }
4471
4472 /* Increment and check number of LOS points... */
4473 if ((++los->np) > NLOS)
4474 ERRMSG("Too many LOS points!");
4475
4476 /* Check stop flag... */
4477 if (stop) {
4478
4479 /* Set surface temperature... */
4480 if (ctl->nsf > 0 && atm->sft > 0)
4481 t = atm->sft;
4482 los->sft = (stop == 2 ? t : -999);
4483
4484 /* Set surface emissivity... */
4485 for (int id = 0; id < ctl->nd; id++) {
4486 los->sfeps[id] = 1.0;
4487 if (ctl->nsf > 0) {
4488 const int isf = locate_irr(ctl->sfnu, ctl->nsf, ctl->nu[id]);
4489 los->sfeps[id] = LIN(ctl->sfnu[isf], atm->sfeps[isf],
4490 ctl->sfnu[isf + 1], atm->sfeps[isf + 1],
4491 ctl->nu[id]);
4492 }
4493 }
4494
4495 /* Leave raytracer... */
4496 break;
4497 }
4498
4499 /* Determine refractivity... */
4500 if (ctl->refrac && z <= zrefrac)
4501 n = 1 + REFRAC(p, t);
4502 else
4503 n = 1;
4504
4505 /* Construct new tangent vector (first term)... */
4506 for (int i = 0; i < 3; i++)
4507 ex1[i] = ex0[i] * n;
4508
4509 /* Compute gradient of refractivity... */
4510 if (ctl->refrac && z <= zrefrac) {
4511 for (int i = 0; i < 3; i++)
4512 xh[i] = x[i] + 0.5 * ds * ex0[i];
4513 cart2geo(xh, &z, &lon, &lat);
4514 intpol_atm(ctl, atm, z, &p, &t, q, k);
4515 n = REFRAC(p, t);
4516 for (int i = 0; i < 3; i++) {
4517 xh[i] += h;
4518 cart2geo(xh, &z, &lon, &lat);
4519 intpol_atm(ctl, atm, z, &p, &t, q, k);
4520 ng[i] = (REFRAC(p, t) - n) / h;
4521 xh[i] -= h;
4522 }
4523 } else
4524 for (int i = 0; i < 3; i++)
4525 ng[i] = 0;
4526
4527 /* Construct new tangent vector (second term)... */
4528 for (int i = 0; i < 3; i++)
4529 ex1[i] += ds * ng[i];
4530
4531 /* Normalize new tangent vector... */
4532 norm = NORM(ex1);
4533 for (int i = 0; i < 3; i++)
4534 ex1[i] /= norm;
4535
4536 /* Determine next point of LOS... */
4537 for (int i = 0; i < 3; i++)
4538 x[i] += 0.5 * ds * (ex0[i] + ex1[i]);
4539
4540 /* Copy tangent vector... */
4541 for (int i = 0; i < 3; i++)
4542 ex0[i] = ex1[i];
4543 }
4544
4545 /* Get tangent point (to be done before changing segment lengths!)... */
4546 tangent_point(los, &obs->tpz[ir], &obs->tplon[ir], &obs->tplat[ir]);
4547
4548 /* Change segment lengths according to trapezoid rule... */
4549 for (int ip = los->np - 1; ip >= 1; ip--)
4550 los->ds[ip] = 0.5 * (los->ds[ip - 1] + los->ds[ip]);
4551 los->ds[0] *= 0.5;
4552
4553 /* Compute column density... */
4554 for (int ip = 0; ip < los->np; ip++)
4555 for (int ig = 0; ig < ctl->ng; ig++)
4556 los->u[ip][ig] = 10 * los->q[ip][ig] * los->p[ip]
4557 / (KB * los->t[ip]) * los->ds[ip];
4558
4559 /* Compute Curtis-Godson means... */
4560 for (int ig = 0; ig < ctl->ng; ig++) {
4561 los->cgu[0][ig] = los->u[0][ig];
4562 los->cgp[0][ig] = los->u[0][ig] * los->p[0];
4563 los->cgt[0][ig] = los->u[0][ig] * los->t[0];
4564 }
4565 for (int ip = 1; ip < los->np; ip++)
4566 for (int ig = 0; ig < ctl->ng; ig++) {
4567 los->cgu[ip][ig] = los->cgu[ip - 1][ig] + los->u[ip][ig];
4568 los->cgp[ip][ig] = los->cgp[ip - 1][ig] + los->u[ip][ig] * los->p[ip];
4569 los->cgt[ip][ig] = los->cgt[ip - 1][ig] + los->u[ip][ig] * los->t[ip];
4570 }
4571 for (int ip = 0; ip < los->np; ip++)
4572 for (int ig = 0; ig < ctl->ng; ig++)
4573 if (los->cgu[ip][ig] != 0) {
4574 los->cgp[ip][ig] /= los->cgu[ip][ig];
4575 los->cgt[ip][ig] /= los->cgu[ip][ig];
4576 }
4577}
void intpol_atm(const ctl_t *ctl, const atm_t *atm, const double z, double *p, double *t, double *q, double *k)
Interpolate atmospheric data.
Definition: jurassic.c:3835
void tangent_point(const los_t *los, double *tpz, double *tplon, double *tplat)
Find tangent point of a given LOS.
Definition: jurassic.c:5387
void cart2geo(const double *x, double *z, double *lon, double *lat)
Convert Cartesian coordinates to geolocation.
Definition: jurassic.c:108
#define KB
Boltzmann constant [kg m^2/(K s^2)].
Definition: jurassic.h:285
#define REFRAC(p, T)
Compute refractivity (return value is n - 1).
Definition: jurassic.h:198
#define NLOS
Maximum number of LOS points.
Definition: jurassic.h:414
#define NW
Maximum number of spectral windows.
Definition: jurassic.h:389
int window[ND]
Window index of each channel.
Definition: jurassic.h:577
double rayds
Maximum step length for raytracing [km].
Definition: jurassic.h:622
double raydz
Vertical step length for raytracing [km].
Definition: jurassic.h:625
Here is the call graph for this function:

◆ read_atm()

void read_atm ( const char *  dirname,
const char *  filename,
const ctl_t ctl,
atm_t atm 
)

Read atmospheric data.

Definition at line 4581 of file jurassic.c.

4585 {
4586
4587 FILE *in;
4588
4589 char file[LEN], line[LEN], *tok;
4590
4591 /* Init... */
4592 atm->np = 0;
4593
4594 /* Set filename... */
4595 if (dirname != NULL)
4596 sprintf(file, "%s/%s", dirname, filename);
4597 else
4598 sprintf(file, "%s", filename);
4599
4600 /* Write info... */
4601 LOG(1, "Read atmospheric data: %s", file);
4602
4603 /* Open file... */
4604 if (!(in = fopen(file, "r")))
4605 ERRMSG("Cannot open file!");
4606
4607 /* Read line... */
4608 while (fgets(line, LEN, in)) {
4609
4610 /* Read data... */
4611 TOK(line, tok, "%lg", atm->time[atm->np]);
4612 TOK(NULL, tok, "%lg", atm->z[atm->np]);
4613 TOK(NULL, tok, "%lg", atm->lon[atm->np]);
4614 TOK(NULL, tok, "%lg", atm->lat[atm->np]);
4615 TOK(NULL, tok, "%lg", atm->p[atm->np]);
4616 TOK(NULL, tok, "%lg", atm->t[atm->np]);
4617 for (int ig = 0; ig < ctl->ng; ig++)
4618 TOK(NULL, tok, "%lg", atm->q[ig][atm->np]);
4619 for (int iw = 0; iw < ctl->nw; iw++)
4620 TOK(NULL, tok, "%lg", atm->k[iw][atm->np]);
4621 if (ctl->ncl > 0 && atm->np == 0) {
4622 TOK(NULL, tok, "%lg", atm->clz);
4623 TOK(NULL, tok, "%lg", atm->cldz);
4624 for (int icl = 0; icl < ctl->ncl; icl++)
4625 TOK(NULL, tok, "%lg", atm->clk[icl]);
4626 }
4627 if (ctl->nsf > 0 && atm->np == 0) {
4628 TOK(NULL, tok, "%lg", atm->sfz);
4629 TOK(NULL, tok, "%lg", atm->sfp);
4630 TOK(NULL, tok, "%lg", atm->sft);
4631 for (int isf = 0; isf < ctl->nsf; isf++)
4632 TOK(NULL, tok, "%lg", atm->sfeps[isf]);
4633 }
4634
4635 /* Increment data point counter... */
4636 if ((++atm->np) > NP)
4637 ERRMSG("Too many data points!");
4638 }
4639
4640 /* Close file... */
4641 fclose(in);
4642
4643 /* Check number of points... */
4644 if (atm->np < 1)
4645 ERRMSG("Could not read any data!");
4646
4647 /* Write info... */
4648 double mini, maxi;
4649 LOG(2, "Number of data points: %d", atm->np);
4650 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
4651 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4652 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
4653 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
4654 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
4655 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
4656 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
4657 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
4658 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
4659 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
4660 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
4661 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
4662 for (int ig = 0; ig < ctl->ng; ig++) {
4663 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
4664 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
4665 }
4666 for (int iw = 0; iw < ctl->nw; iw++) {
4667 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
4668 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
4669 }
4670 if (ctl->ncl > 0 && atm->np == 0) {
4671 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
4672 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
4673 } else
4674 LOG(2, "Cloud layer: none");
4675 if (ctl->nsf > 0 && atm->np == 0) {
4676 LOG(2,
4677 "Surface layer: z_s= %g km | p_s= %g hPa | T_s = %g K | eps= %g ... %g",
4678 atm->sfz, atm->sfp, atm->sft, atm->sfeps[0],
4679 atm->sfeps[ctl->nsf - 1]);
4680 } else
4681 LOG(2, "Surface layer: none");
4682}
#define TOK(line, tok, format, var)
Read string tokens.
Definition: jurassic.h:206
#define NP
Maximum number of atmospheric data points.
Definition: jurassic.h:374

◆ read_ctl()

void read_ctl ( int  argc,
char *  argv[],
ctl_t ctl 
)

Read forward model control parameters.

Definition at line 4686 of file jurassic.c.

4689 {
4690
4691 /* Write info... */
4692 LOG(1, "\nJuelich Rapid Spectral Simulation Code (JURASSIC)\n"
4693 "(executable: %s | version: %s | compiled: %s, %s)\n",
4694 argv[0], VERSION, __DATE__, __TIME__);
4695
4696 /* Emitters... */
4697 ctl->ng = (int) scan_ctl(argc, argv, "NG", -1, "0", NULL);
4698 if (ctl->ng < 0 || ctl->ng > NG)
4699 ERRMSG("Set 0 <= NG <= MAX!");
4700 for (int ig = 0; ig < ctl->ng; ig++)
4701 scan_ctl(argc, argv, "EMITTER", ig, "", ctl->emitter[ig]);
4702 ctl->ig_co2 = find_emitter(ctl, "CO2");
4703 ctl->ig_h2o = find_emitter(ctl, "H2O");
4704 ctl->ig_n2 = find_emitter(ctl, "N2");
4705 ctl->ig_o2 = find_emitter(ctl, "O2");
4706
4707 /* Radiance channels... */
4708 ctl->nd = (int) scan_ctl(argc, argv, "ND", -1, "0", NULL);
4709 if (ctl->nd < 0 || ctl->nd > ND)
4710 ERRMSG("Set 0 <= ND <= MAX!");
4711 for (int id = 0; id < ctl->nd; id++)
4712 ctl->nu[id] = scan_ctl(argc, argv, "NU", id, "", NULL);
4713
4714 /* Spectral windows... */
4715 ctl->nw = (int) scan_ctl(argc, argv, "NW", -1, "1", NULL);
4716 if (ctl->nw < 0 || ctl->nw > NW)
4717 ERRMSG("Set 0 <= NW <= MAX!");
4718 for (int id = 0; id < ctl->nd; id++)
4719 ctl->window[id] = (int) scan_ctl(argc, argv, "WINDOW", id, "0", NULL);
4720
4721 /* Cloud data... */
4722 ctl->ncl = (int) scan_ctl(argc, argv, "NCL", -1, "0", NULL);
4723 if (ctl->ncl < 0 || ctl->ncl > NCL)
4724 ERRMSG("Set 0 <= NCL <= MAX!");
4725 if (ctl->ncl == 1)
4726 ERRMSG("Set NCL > 1!");
4727 for (int icl = 0; icl < ctl->ncl; icl++)
4728 ctl->clnu[icl] = scan_ctl(argc, argv, "CLNU", icl, "", NULL);
4729
4730 /* Surface data... */
4731 ctl->nsf = (int) scan_ctl(argc, argv, "NSF", -1, "0", NULL);
4732 if (ctl->nsf < 0 || ctl->nsf > NSF)
4733 ERRMSG("Set 0 <= NSF <= MAX!");
4734 if (ctl->nsf == 1)
4735 ERRMSG("Set NSF > 1!");
4736 for (int isf = 0; isf < ctl->nsf; isf++)
4737 ctl->sfnu[isf] = scan_ctl(argc, argv, "SFNU", isf, "", NULL);
4738 ctl->sftype = (int) scan_ctl(argc, argv, "SFTYPE", -1, "2", NULL);
4739 if (ctl->sftype < 0 || ctl->sftype > 3)
4740 ERRMSG("Set 0 <= SFTYPE <= 3!");
4741 ctl->sfsza = scan_ctl(argc, argv, "SFSZA", -1, "-999", NULL);
4742
4743 /* Emissivity look-up tables... */
4744 scan_ctl(argc, argv, "TBLBASE", -1, "-", ctl->tblbase);
4745 ctl->tblfmt = (int) scan_ctl(argc, argv, "TBLFMT", -1, "1", NULL);
4746
4747 /* Hydrostatic equilibrium... */
4748 ctl->hydz = scan_ctl(argc, argv, "HYDZ", -1, "-999", NULL);
4749
4750 /* Continua... */
4751 ctl->ctm_co2 = (int) scan_ctl(argc, argv, "CTM_CO2", -1, "1", NULL);
4752 ctl->ctm_h2o = (int) scan_ctl(argc, argv, "CTM_H2O", -1, "1", NULL);
4753 ctl->ctm_n2 = (int) scan_ctl(argc, argv, "CTM_N2", -1, "1", NULL);
4754 ctl->ctm_o2 = (int) scan_ctl(argc, argv, "CTM_O2", -1, "1", NULL);
4755
4756 /* Ray-tracing... */
4757 ctl->refrac = (int) scan_ctl(argc, argv, "REFRAC", -1, "1", NULL);
4758 ctl->rayds = scan_ctl(argc, argv, "RAYDS", -1, "10", NULL);
4759 ctl->raydz = scan_ctl(argc, argv, "RAYDZ", -1, "0.1", NULL);
4760
4761 /* Field of view... */
4762 scan_ctl(argc, argv, "FOV", -1, "-", ctl->fov);
4763 if (ctl->fov[0] != '-')
4764 read_shape(ctl->fov, ctl->fov_dz, ctl->fov_w, &ctl->fov_n);
4765
4766 /* Retrieval interface... */
4767 ctl->retp_zmin = scan_ctl(argc, argv, "RETP_ZMIN", -1, "-999", NULL);
4768 ctl->retp_zmax = scan_ctl(argc, argv, "RETP_ZMAX", -1, "-999", NULL);
4769 ctl->rett_zmin = scan_ctl(argc, argv, "RETT_ZMIN", -1, "-999", NULL);
4770 ctl->rett_zmax = scan_ctl(argc, argv, "RETT_ZMAX", -1, "-999", NULL);
4771 for (int ig = 0; ig < ctl->ng; ig++) {
4772 ctl->retq_zmin[ig] = scan_ctl(argc, argv, "RETQ_ZMIN", ig, "-999", NULL);
4773 ctl->retq_zmax[ig] = scan_ctl(argc, argv, "RETQ_ZMAX", ig, "-999", NULL);
4774 }
4775 for (int iw = 0; iw < ctl->nw; iw++) {
4776 ctl->retk_zmin[iw] = scan_ctl(argc, argv, "RETK_ZMIN", iw, "-999", NULL);
4777 ctl->retk_zmax[iw] = scan_ctl(argc, argv, "RETK_ZMAX", iw, "-999", NULL);
4778 }
4779 ctl->ret_clz = (int) scan_ctl(argc, argv, "RET_CLZ", -1, "0", NULL);
4780 ctl->ret_cldz = (int) scan_ctl(argc, argv, "RET_CLDZ", -1, "0", NULL);
4781 ctl->ret_clk = (int) scan_ctl(argc, argv, "RET_CLK", -1, "0", NULL);
4782 ctl->ret_sfz = (int) scan_ctl(argc, argv, "RET_SFZ", -1, "0", NULL);
4783 ctl->ret_sfp = (int) scan_ctl(argc, argv, "RET_SFP", -1, "0", NULL);
4784 ctl->ret_sft = (int) scan_ctl(argc, argv, "RET_SFT", -1, "0", NULL);
4785 ctl->ret_sfeps = (int) scan_ctl(argc, argv, "RET_SFEPS", -1, "0", NULL);
4786
4787 /* Output flags... */
4788 ctl->write_bbt = (int) scan_ctl(argc, argv, "WRITE_BBT", -1, "0", NULL);
4789 ctl->write_matrix =
4790 (int) scan_ctl(argc, argv, "WRITE_MATRIX", -1, "0", NULL);
4791
4792 /* External forward models... */
4793 ctl->formod = (int) scan_ctl(argc, argv, "FORMOD", -1, "1", NULL);
4794 scan_ctl(argc, argv, "RFMBIN", -1, "-", ctl->rfmbin);
4795 scan_ctl(argc, argv, "RFMHIT", -1, "-", ctl->rfmhit);
4796 for (int ig = 0; ig < ctl->ng; ig++)
4797 scan_ctl(argc, argv, "RFMXSC", ig, "-", ctl->rfmxsc[ig]);
4798}
int find_emitter(const ctl_t *ctl, const char *emitter)
Find index of an emitter.
Definition: jurassic.c:3199
double scan_ctl(int argc, char *argv[], const char *varname, const int arridx, const char *defvalue, char *value)
Search control parameter file for variable entry.
Definition: jurassic.c:5278
#define NSF
Maximum number of surface layer spectral grid points.
Definition: jurassic.h:384
#define NCL
Maximum number of cloud layer spectral grid points.
Definition: jurassic.h:359
int write_matrix
Write matrix file (0=no, 1=yes).
Definition: jurassic.h:688
int tblfmt
Look-up table file format (1=ASCII, 2=binary).
Definition: jurassic.h:601
Here is the call graph for this function:

◆ read_matrix()

void read_matrix ( const char *  dirname,
const char *  filename,
gsl_matrix *  matrix 
)

Read matrix.

Definition at line 4802 of file jurassic.c.

4805 {
4806
4807 FILE *in;
4808
4809 char dum[LEN], file[LEN], line[LEN];
4810
4811 double value;
4812
4813 int i, j;
4814
4815 /* Set filename... */
4816 if (dirname != NULL)
4817 sprintf(file, "%s/%s", dirname, filename);
4818 else
4819 sprintf(file, "%s", filename);
4820
4821 /* Write info... */
4822 LOG(1, "Read matrix: %s", file);
4823
4824 /* Open file... */
4825 if (!(in = fopen(file, "r")))
4826 ERRMSG("Cannot open file!");
4827
4828 /* Read data... */
4829 gsl_matrix_set_zero(matrix);
4830 while (fgets(line, LEN, in))
4831 if (sscanf(line, "%d %s %s %s %s %s %d %s %s %s %s %s %lg",
4832 &i, dum, dum, dum, dum, dum,
4833 &j, dum, dum, dum, dum, dum, &value) == 13)
4834 gsl_matrix_set(matrix, (size_t) i, (size_t) j, value);
4835
4836 /* Close file... */
4837 fclose(in);
4838}

◆ read_obs()

void read_obs ( const char *  dirname,
const char *  filename,
const ctl_t ctl,
obs_t obs 
)

Read observation data.

Definition at line 4842 of file jurassic.c.

4846 {
4847
4848 FILE *in;
4849
4850 char file[LEN], line[LEN], *tok;
4851
4852 /* Init... */
4853 obs->nr = 0;
4854
4855 /* Set filename... */
4856 if (dirname != NULL)
4857 sprintf(file, "%s/%s", dirname, filename);
4858 else
4859 sprintf(file, "%s", filename);
4860
4861 /* Write info... */
4862 LOG(1, "Read observation data: %s", file);
4863
4864 /* Open file... */
4865 if (!(in = fopen(file, "r")))
4866 ERRMSG("Cannot open file!");
4867
4868 /* Read line... */
4869 while (fgets(line, LEN, in)) {
4870
4871 /* Read data... */
4872 TOK(line, tok, "%lg", obs->time[obs->nr]);
4873 TOK(NULL, tok, "%lg", obs->obsz[obs->nr]);
4874 TOK(NULL, tok, "%lg", obs->obslon[obs->nr]);
4875 TOK(NULL, tok, "%lg", obs->obslat[obs->nr]);
4876 TOK(NULL, tok, "%lg", obs->vpz[obs->nr]);
4877 TOK(NULL, tok, "%lg", obs->vplon[obs->nr]);
4878 TOK(NULL, tok, "%lg", obs->vplat[obs->nr]);
4879 TOK(NULL, tok, "%lg", obs->tpz[obs->nr]);
4880 TOK(NULL, tok, "%lg", obs->tplon[obs->nr]);
4881 TOK(NULL, tok, "%lg", obs->tplat[obs->nr]);
4882 for (int id = 0; id < ctl->nd; id++)
4883 TOK(NULL, tok, "%lg", obs->rad[id][obs->nr]);
4884 for (int id = 0; id < ctl->nd; id++)
4885 TOK(NULL, tok, "%lg", obs->tau[id][obs->nr]);
4886
4887 /* Increment counter... */
4888 if ((++obs->nr) > NR)
4889 ERRMSG("Too many rays!");
4890 }
4891
4892 /* Close file... */
4893 fclose(in);
4894
4895 /* Check number of points... */
4896 if (obs->nr < 1)
4897 ERRMSG("Could not read any data!");
4898
4899 /* Write info... */
4900 double mini, maxi;
4901 LOG(2, "Number of ray paths: %d", obs->nr);
4902 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
4903 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4904 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
4905 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
4906 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
4907 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
4908 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
4909 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
4910 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
4911 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
4912 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
4913 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
4914 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
4915 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
4916 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
4917 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
4918 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
4919 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
4920 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
4921 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
4922 for (int id = 0; id < ctl->nd; id++) {
4923 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
4924 if (ctl->write_bbt) {
4925 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
4926 ctl->nu[id], mini, maxi);
4927 } else {
4928 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
4929 ctl->nu[id], mini, maxi);
4930 }
4931 }
4932 for (int id = 0; id < ctl->nd; id++) {
4933 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
4934 if (ctl->write_bbt) {
4935 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
4936 ctl->nu[id], mini, maxi);
4937 }
4938 }
4939}

◆ read_obs_rfm()

double read_obs_rfm ( const char *  basename,
const double  z,
double *  nu,
double *  f,
int  n 
)

Read observation data in RFM format.

Definition at line 4943 of file jurassic.c.

4948 {
4949
4950 FILE *in;
4951
4952 char filename[LEN];
4953
4954 double filt, fsum = 0, nu2[NSHAPE], *nurfm, *rad, radsum = 0;
4955
4956 int npts;
4957
4958 /* Allocate... */
4959 ALLOC(nurfm, double,
4960 RFMNPTS);
4961 ALLOC(rad, double,
4962 RFMNPTS);
4963
4964 /* Search RFM spectrum... */
4965 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000));
4966 if (!(in = fopen(filename, "r"))) {
4967 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000) + 1);
4968 if (!(in = fopen(filename, "r")))
4969 ERRMSG("Cannot find RFM data file!");
4970 }
4971 fclose(in);
4972
4973 /* Read RFM spectrum... */
4974 read_rfm_spec(filename, nurfm, rad, &npts);
4975
4976 /* Set wavenumbers... */
4977 nu2[0] = nu[0];
4978 nu2[n - 1] = nu[n - 1];
4979 for (int i = 1; i < n - 1; i++)
4980 nu2[i] = LIN(0.0, nu2[0], n - 1.0, nu2[n - 1], i);
4981
4982 /* Convolute... */
4983 for (int ipts = 0; ipts < npts; ipts++)
4984 if (nurfm[ipts] >= nu2[0] && nurfm[ipts] <= nu2[n - 1]) {
4985 const int idx = locate_irr(nu2, n, nurfm[ipts]);
4986 filt = LIN(nu2[idx], f[idx], nu2[idx + 1], f[idx + 1], nurfm[ipts]);
4987 fsum += filt;
4988 radsum += filt * rad[ipts];
4989 }
4990
4991 /* Free... */
4992 free(nurfm);
4993 free(rad);
4994
4995 /* Return radiance... */
4996 return radsum / fsum;
4997}
void read_rfm_spec(const char *filename, double *nu, double *rad, int *npts)
Read RFM spectrum.
Definition: jurassic.c:5001
#define RFMNPTS
Maximum number of RFM spectral grid points.
Definition: jurassic.h:449
Here is the call graph for this function:

◆ read_rfm_spec()

void read_rfm_spec ( const char *  filename,
double *  nu,
double *  rad,
int *  npts 
)

Read RFM spectrum.

Definition at line 5001 of file jurassic.c.

5005 {
5006
5007 FILE *in;
5008
5009 char *line = NULL, *tok;
5010
5011 size_t line_buf_size = 0;
5012
5013 double dnu, nu0, nu1;
5014
5015 int ipts = 0;
5016
5017 /* Write info... */
5018 LOG(1, "Read RFM data: %s", filename);
5019
5020 /* Open file... */
5021 if (!(in = fopen(filename, "r")))
5022 ERRMSG("Cannot open file!");
5023
5024 /* Read header... */
5025 for (int i = 0; i < 4; i++)
5026 if (getline(&line, &line_buf_size, in) == -1)
5027 ERRMSG("Error while reading file header!");
5028 if (sscanf(line, "%d %lg %lg %lg", npts, &nu0, &dnu, &nu1) != 4)
5029 ERRMSG("Invalid spectrum header format!");
5030
5031 /* Check number of spectral grid points... */
5032 if (*npts > RFMNPTS)
5033 ERRMSG("Too many spectral grid points!");
5034
5035 /* Read radiance data... */
5036 while (getline(&line, &line_buf_size, in) != -1 && ipts < *npts) {
5037 tok = strtok(line, " \t\n");
5038 while (tok != NULL && ipts < *npts) {
5039 if (sscanf(tok, "%lg", &rad[ipts]) == 1)
5040 ipts++;
5041 tok = strtok(NULL, " \t\n");
5042 }
5043 }
5044
5045 /* Check number of spectral grid points... */
5046 if (ipts != *npts)
5047 ERRMSG("Error while reading RFM data!");
5048
5049 /* Compute wavenumbers... */
5050 for (ipts = 0; ipts < *npts; ipts++)
5051 nu[ipts] = LIN(0.0, nu0, (double) (*npts - 1), nu1, (double) ipts);
5052
5053 /* Close file... */
5054 fclose(in);
5055
5056 /* Free.. */
5057 free(line);
5058}

◆ read_shape()

void read_shape ( const char *  filename,
double *  x,
double *  y,
int *  n 
)

Read shape function.

Definition at line 5062 of file jurassic.c.

5066 {
5067
5068 FILE *in;
5069
5070 char line[LEN];
5071
5072 /* Write info... */
5073 LOG(1, "Read shape function: %s", filename);
5074
5075 /* Open file... */
5076 if (!(in = fopen(filename, "r")))
5077 ERRMSG("Cannot open file!");
5078
5079 /* Read data... */
5080 *n = 0;
5081 while (fgets(line, LEN, in))
5082 if (sscanf(line, "%lg %lg", &x[*n], &y[*n]) == 2)
5083 if ((++(*n)) > NSHAPE)
5084 ERRMSG("Too many data points!");
5085
5086 /* Close file... */
5087 fclose(in);
5088
5089 /* Check number of data points... */
5090 if (*n < 2)
5091 ERRMSG("Could not read any data!");
5092
5093 /* Write info... */
5094 double mini, maxi;
5095 LOG(2, "Number of data points: %d", *n);
5096 gsl_stats_minmax(&mini, &maxi, x, 1, (size_t) *n);
5097 LOG(2, "Range of x values: %.4f ... %.4f", mini, maxi);
5098 gsl_stats_minmax(&mini, &maxi, y, 1, (size_t) *n);
5099 LOG(2, "Range of y values: %g ... %g", mini, maxi);
5100}

◆ read_tbl()

tbl_t * read_tbl ( const ctl_t ctl)

Read look-up table data.

Definition at line 5104 of file jurassic.c.

5105 {
5106
5107 FILE *in;
5108
5109 char filename[2 * LEN], line[LEN];
5110
5111 double eps, press, temp, u;
5112
5113 /* Allocate... */
5114 tbl_t *tbl;
5115 ALLOC(tbl, tbl_t, 1);
5116
5117 /* Loop over trace gases and channels... */
5118 for (int id = 0; id < ctl->nd; id++)
5119 for (int ig = 0; ig < ctl->ng; ig++) {
5120
5121 /* Initialize... */
5122 tbl->np[id][ig] = -1;
5123 double eps_old = -999;
5124 double press_old = -999;
5125 double temp_old = -999;
5126 double u_old = -999;
5127 int nrange = 0;
5128
5129 /* Set filename... */
5130 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
5131 ctl->nu[id], ctl->emitter[ig],
5132 ctl->tblfmt == 1 ? "tab" : "bin");
5133
5134 /* Write info... */
5135 LOG(1, "Read emissivity table: %s", filename);
5136
5137 /* Try to open file... */
5138 if (!(in = fopen(filename, "r"))) {
5139 WARN("Missing emissivity table: %s", filename);
5140 continue;
5141 }
5142
5143 /* Read ASCII tables... */
5144 if (ctl->tblfmt == 1) {
5145
5146 /* Read data... */
5147 while (fgets(line, LEN, in)) {
5148
5149 /* Parse line... */
5150 if (sscanf(line, "%lg %lg %lg %lg", &press, &temp, &u, &eps) != 4)
5151 continue;
5152
5153 /* Check ranges... */
5154 if (u < UMIN || u > UMAX || eps < EPSMIN || eps > EPSMAX) {
5155 nrange++;
5156 continue;
5157 }
5158
5159 /* Determine pressure index... */
5160 if (press != press_old) {
5161 press_old = press;
5162 if ((++tbl->np[id][ig]) >= TBLNP)
5163 ERRMSG("Too many pressure levels!");
5164 tbl->nt[id][ig][tbl->np[id][ig]] = -1;
5165 }
5166
5167 /* Determine temperature index... */
5168 if (temp != temp_old) {
5169 temp_old = temp;
5170 if ((++tbl->nt[id][ig][tbl->np[id][ig]]) >= TBLNT)
5171 ERRMSG("Too many temperatures!");
5172 tbl->nu[id][ig][tbl->np[id][ig]]
5173 [tbl->nt[id][ig][tbl->np[id][ig]]] = -1;
5174 }
5175
5176 /* Determine column density index... */
5177 if ((eps > eps_old && u > u_old) || tbl->nu[id][ig][tbl->np[id][ig]]
5178 [tbl->nt[id][ig][tbl->np[id][ig]]] < 0) {
5179 eps_old = eps;
5180 u_old = u;
5181 if ((++tbl->nu[id][ig][tbl->np[id][ig]]
5182 [tbl->nt[id][ig][tbl->np[id][ig]]]) >= TBLNU)
5183 ERRMSG("Too many column densities!");
5184 }
5185
5186 /* Store data... */
5187 tbl->p[id][ig][tbl->np[id][ig]] = press;
5188 tbl->t[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5189 = temp;
5190 tbl->u[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5191 [tbl->nu[id][ig][tbl->np[id][ig]]
5192 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) u;
5193 tbl->eps[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5194 [tbl->nu[id][ig][tbl->np[id][ig]]
5195 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) eps;
5196 }
5197
5198 /* Increment counters... */
5199 tbl->np[id][ig]++;
5200 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5201 tbl->nt[id][ig][ip]++;
5202 for (int it = 0; it < tbl->nt[id][ig][ip]; it++)
5203 tbl->nu[id][ig][ip][it]++;
5204 }
5205 }
5206
5207 /* Read binary data... */
5208 else if (ctl->tblfmt == 2) {
5209
5210 /* Read data... */
5211 FREAD(&tbl->np[id][ig], int,
5212 1,
5213 in);
5214 if (tbl->np[id][ig] > TBLNP)
5215 ERRMSG("Too many pressure levels!");
5216 FREAD(tbl->p[id][ig], double,
5217 (size_t) tbl->np[id][ig],
5218 in);
5219 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5220 FREAD(&tbl->nt[id][ig][ip], int,
5221 1,
5222 in);
5223 if (tbl->nt[id][ig][ip] > TBLNT)
5224 ERRMSG("Too many temperatures!");
5225 FREAD(tbl->t[id][ig][ip], double,
5226 (size_t) tbl->nt[id][ig][ip],
5227 in);
5228 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
5229 FREAD(&tbl->nu[id][ig][ip][it], int,
5230 1,
5231 in);
5232 if (tbl->nu[id][ig][ip][it] > TBLNU)
5233 ERRMSG("Too many column densities!");
5234 FREAD(tbl->u[id][ig][ip][it], float,
5235 (size_t) tbl->nu[id][ig][ip][it],
5236 in);
5237 FREAD(tbl->eps[id][ig][ip][it], float,
5238 (size_t) tbl->nu[id][ig][ip][it],
5239 in);
5240 }
5241 }
5242 }
5243
5244 /* Error message... */
5245 else
5246 ERRMSG("Unknown look-up table format!");
5247
5248 /* Check ranges... */
5249 if (nrange > 0)
5250 WARN("Column density or emissivity out of range (%d data points)!",
5251 nrange);
5252
5253 /* Close file... */
5254 fclose(in);
5255
5256 /* Write info... */
5257 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
5258 LOG(2,
5259 "p[%2d]= %.5e hPa | T[0:%2d]= %.2f ... %.2f K | u[0:%3d]= %.5e ... %.5e molec/cm^2 | eps[0:%3d]= %.5e ... %.5e",
5260 ip, tbl->p[id][ig][ip], tbl->nt[id][ig][ip] - 1,
5261 tbl->t[id][ig][ip][0],
5262 tbl->t[id][ig][ip][tbl->nt[id][ig][ip] - 1],
5263 tbl->nu[id][ig][ip][0] - 1, tbl->u[id][ig][ip][0][0],
5264 tbl->u[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1],
5265 tbl->nu[id][ig][ip][0] - 1, tbl->eps[id][ig][ip][0][0],
5266 tbl->eps[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1]);
5267 }
5268
5269 /* Initialize source function... */
5270 init_srcfunc(ctl, tbl);
5271
5272 /* Return pointer... */
5273 return tbl;
5274}
void init_srcfunc(const ctl_t *ctl, tbl_t *tbl)
Initialize source function table.
Definition: jurassic.c:3781
#define UMAX
Maximum column density [molecules/cm^2].
Definition: jurassic.h:350
#define WARN(...)
Print warning message.
Definition: jurassic.h:232
#define TBLNU
Maximum number of column densities in emissivity tables.
Definition: jurassic.h:439
#define TBLNT
Maximum number of temperatures in emissivity tables.
Definition: jurassic.h:434
#define EPSMAX
Maximum emissivity.
Definition: jurassic.h:270
#define TBLNP
Maximum number of pressure levels in emissivity tables.
Definition: jurassic.h:429
#define FREAD(ptr, type, size, out)
Read binary data.
Definition: jurassic.h:145
Emissivity look-up tables.
Definition: jurassic.h:805
Here is the call graph for this function:

◆ scan_ctl()

double scan_ctl ( int  argc,
char *  argv[],
const char *  varname,
const int  arridx,
const char *  defvalue,
char *  value 
)

Search control parameter file for variable entry.

Definition at line 5278 of file jurassic.c.

5284 {
5285
5286 FILE *in = NULL;
5287
5288 char dummy[LEN], fullname1[LEN], fullname2[LEN], line[LEN],
5289 rvarname[LEN], rval[LEN];
5290
5291 int contain = 0;
5292
5293 /* Open file... */
5294 if (argv[1][0] != '-')
5295 if (!(in = fopen(argv[1], "r")))
5296 ERRMSG("Cannot open file!");
5297
5298 /* Set full variable name... */
5299 if (arridx >= 0) {
5300 sprintf(fullname1, "%s[%d]", varname, arridx);
5301 sprintf(fullname2, "%s[*]", varname);
5302 } else {
5303 sprintf(fullname1, "%s", varname);
5304 sprintf(fullname2, "%s", varname);
5305 }
5306
5307 /* Read data... */
5308 if (in != NULL)
5309 while (fgets(line, LEN, in))
5310 if (sscanf(line, "%s %s %s", rvarname, dummy, rval) == 3)
5311 if (strcasecmp(rvarname, fullname1) == 0 ||
5312 strcasecmp(rvarname, fullname2) == 0) {
5313 contain = 1;
5314 break;
5315 }
5316 for (int i = 1; i < argc - 1; i++)
5317 if (strcasecmp(argv[i], fullname1) == 0 ||
5318 strcasecmp(argv[i], fullname2) == 0) {
5319 sprintf(rval, "%s", argv[i + 1]);
5320 contain = 1;
5321 break;
5322 }
5323
5324 /* Close file... */
5325 if (in != NULL)
5326 fclose(in);
5327
5328 /* Check for missing variables... */
5329 if (!contain) {
5330 if (strlen(defvalue) > 0)
5331 sprintf(rval, "%s", defvalue);
5332 else
5333 ERRMSG("Missing variable %s!\n", fullname1);
5334 }
5335
5336 /* Write info... */
5337 LOG(1, "%s = %s", fullname1, rval);
5338
5339 /* Return values... */
5340 if (value != NULL)
5341 sprintf(value, "%s", rval);
5342 return atof(rval);
5343}

◆ sza()

double sza ( double  sec,
double  lon,
double  lat 
)

Calculate solar zenith angle.

Definition at line 5347 of file jurassic.c.

5350 {
5351
5352 /* Number of days and fraction with respect to 2000-01-01T12:00Z... */
5353 const double D = sec / 86400 - 0.5;
5354
5355 /* Geocentric apparent ecliptic longitude [rad]... */
5356 const double g = DEG2RAD(357.529 + 0.98560028 * D);
5357 const double q = 280.459 + 0.98564736 * D;
5358 const double L = DEG2RAD(q + 1.915 * sin(g) + 0.020 * sin(2 * g));
5359
5360 /* Mean obliquity of the ecliptic [rad]... */
5361 const double e = DEG2RAD(23.439 - 0.00000036 * D);
5362
5363 /* Declination [rad]... */
5364 const double dec = asin(sin(e) * sin(L));
5365
5366 /* Right ascension [rad]... */
5367 const double ra = atan2(cos(e) * sin(L), cos(L));
5368
5369 /* Greenwich Mean Sidereal Time [h]... */
5370 const double GMST = 18.697374558 + 24.06570982441908 * D;
5371
5372 /* Local Sidereal Time [h]... */
5373 const double LST = GMST + lon / 15;
5374
5375 /* Hour angle [rad]... */
5376 const double h = LST / 12 * M_PI - ra;
5377
5378 /* Convert latitude... */
5379 const double latr = DEG2RAD(lat);
5380
5381 /* Return solar zenith angle [deg]... */
5382 return RAD2DEG(acos(sin(latr) * sin(dec) + cos(latr) * cos(dec) * cos(h)));
5383}

◆ tangent_point()

void tangent_point ( const los_t los,
double *  tpz,
double *  tplon,
double *  tplat 
)

Find tangent point of a given LOS.

Definition at line 5387 of file jurassic.c.

5391 {
5392
5393 double dummy, v[3], v0[3], v2[3];
5394
5395 /* Find minimum altitude... */
5396 const size_t ip = gsl_stats_min_index(los->z, 1, (size_t) los->np);
5397
5398 /* Nadir or zenith... */
5399 if (ip <= 0 || ip >= (size_t) los->np - 1) {
5400 *tpz = los->z[los->np - 1];
5401 *tplon = los->lon[los->np - 1];
5402 *tplat = los->lat[los->np - 1];
5403 }
5404
5405 /* Limb... */
5406 else {
5407
5408 /* Determine interpolating polynomial y=a*x^2+b*x+c... */
5409 const double yy0 = los->z[ip - 1];
5410 const double yy1 = los->z[ip];
5411 const double yy2 = los->z[ip + 1];
5412 const double x1 = sqrt(POW2(los->ds[ip]) - POW2(yy1 - yy0));
5413 const double x2 = x1 + sqrt(POW2(los->ds[ip + 1]) - POW2(yy2 - yy1));
5414 const double a = 1 / (x1 - x2) * (-(yy0 - yy1) / x1 + (yy0 - yy2) / x2);
5415 const double b = -(yy0 - yy1) / x1 - a * x1;
5416 const double c = yy0;
5417
5418 /* Get tangent point location... */
5419 const double x = -b / (2 * a);
5420 *tpz = a * x * x + b * x + c;
5421 geo2cart(los->z[ip - 1], los->lon[ip - 1], los->lat[ip - 1], v0);
5422 geo2cart(los->z[ip + 1], los->lon[ip + 1], los->lat[ip + 1], v2);
5423 for (int i = 0; i < 3; i++)
5424 v[i] = LIN(0.0, v0[i], x2, v2[i], x);
5425 cart2geo(v, &dummy, tplon, tplat);
5426 }
5427}
Here is the call graph for this function:

◆ time2jsec()

void time2jsec ( const int  year,
const int  mon,
const int  day,
const int  hour,
const int  min,
const int  sec,
const double  remain,
double *  jsec 
)

Convert date to seconds.

Definition at line 5431 of file jurassic.c.

5439 {
5440
5441 struct tm t0, t1;
5442
5443 t0.tm_year = 100;
5444 t0.tm_mon = 0;
5445 t0.tm_mday = 1;
5446 t0.tm_hour = 0;
5447 t0.tm_min = 0;
5448 t0.tm_sec = 0;
5449
5450 t1.tm_year = year - 1900;
5451 t1.tm_mon = mon - 1;
5452 t1.tm_mday = day;
5453 t1.tm_hour = hour;
5454 t1.tm_min = min;
5455 t1.tm_sec = sec;
5456
5457 *jsec = (double) timegm(&t1) - (double) timegm(&t0) + remain;
5458}

◆ timer()

void timer ( const char *  name,
const char *  file,
const char *  func,
int  line,
int  mode 
)

Measure wall-clock time.

Definition at line 5462 of file jurassic.c.

5467 {
5468
5469 static double w0[10];
5470
5471 static int l0[10], nt;
5472
5473 /* Start new timer... */
5474 if (mode == 1) {
5475 w0[nt] = omp_get_wtime();
5476 l0[nt] = line;
5477 if ((++nt) >= 10)
5478 ERRMSG("Too many timers!");
5479 }
5480
5481 /* Write elapsed time... */
5482 else {
5483
5484 /* Check timer index... */
5485 if (nt - 1 < 0)
5486 ERRMSG("Coding error!");
5487
5488 /* Write elapsed time... */
5489 LOG(1, "Timer '%s' (%s, %s, l%d-%d): %.3f sec",
5490 name, file, func, l0[nt - 1], line, omp_get_wtime() - w0[nt - 1]);
5491 }
5492
5493 /* Stop timer... */
5494 if (mode == 3)
5495 nt--;
5496}

◆ write_atm()

void write_atm ( const char *  dirname,
const char *  filename,
const ctl_t ctl,
const atm_t atm 
)

Write atmospheric data.

Definition at line 5500 of file jurassic.c.

5504 {
5505
5506 FILE *out;
5507
5508 char file[LEN];
5509
5510 int n = 6;
5511
5512 /* Set filename... */
5513 if (dirname != NULL)
5514 sprintf(file, "%s/%s", dirname, filename);
5515 else
5516 sprintf(file, "%s", filename);
5517
5518 /* Write info... */
5519 LOG(1, "Write atmospheric data: %s", file);
5520
5521 /* Create file... */
5522 if (!(out = fopen(file, "w")))
5523 ERRMSG("Cannot create file!");
5524
5525 /* Write header... */
5526 fprintf(out,
5527 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5528 "# $2 = altitude [km]\n"
5529 "# $3 = longitude [deg]\n"
5530 "# $4 = latitude [deg]\n"
5531 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
5532 for (int ig = 0; ig < ctl->ng; ig++)
5533 fprintf(out, "# $%d = %s volume mixing ratio [ppv]\n",
5534 ++n, ctl->emitter[ig]);
5535 for (int iw = 0; iw < ctl->nw; iw++)
5536 fprintf(out, "# $%d = extinction (window %d) [km^-1]\n", ++n, iw);
5537 if (ctl->ncl > 0) {
5538 fprintf(out, "# $%d = cloud layer height [km]\n", ++n);
5539 fprintf(out, "# $%d = cloud layer depth [km]\n", ++n);
5540 for (int icl = 0; icl < ctl->ncl; icl++)
5541 fprintf(out, "# $%d = cloud layer extinction (%.4f cm^-1) [km^-1]\n",
5542 ++n, ctl->clnu[icl]);
5543 }
5544 if (ctl->nsf > 0) {
5545 fprintf(out, "# $%d = surface layer height [km]\n", ++n);
5546 fprintf(out, "# $%d = surface layer pressure [hPa]\n", ++n);
5547 fprintf(out, "# $%d = surface layer temperature [K]\n", ++n);
5548 for (int isf = 0; isf < ctl->nsf; isf++)
5549 fprintf(out, "# $%d = surface layer emissivity (%.4f cm^-1)\n",
5550 ++n, ctl->sfnu[isf]);
5551 }
5552
5553 /* Write data... */
5554 for (int ip = 0; ip < atm->np; ip++) {
5555 if (ip == 0 || atm->time[ip] != atm->time[ip - 1])
5556 fprintf(out, "\n");
5557 fprintf(out, "%.2f %g %g %g %g %g", atm->time[ip], atm->z[ip],
5558 atm->lon[ip], atm->lat[ip], atm->p[ip], atm->t[ip]);
5559 for (int ig = 0; ig < ctl->ng; ig++)
5560 fprintf(out, " %g", atm->q[ig][ip]);
5561 for (int iw = 0; iw < ctl->nw; iw++)
5562 fprintf(out, " %g", atm->k[iw][ip]);
5563 if (ctl->ncl > 0) {
5564 fprintf(out, " %g %g", atm->clz, atm->cldz);
5565 for (int icl = 0; icl < ctl->ncl; icl++)
5566 fprintf(out, " %g", atm->clk[icl]);
5567 }
5568 if (ctl->nsf > 0) {
5569 fprintf(out, " %g %g %g", atm->sfz, atm->sfp, atm->sft);
5570 for (int isf = 0; isf < ctl->nsf; isf++)
5571 fprintf(out, " %g", atm->sfeps[isf]);
5572 }
5573 fprintf(out, "\n");
5574 }
5575
5576 /* Close file... */
5577 fclose(out);
5578
5579 /* Write info... */
5580 double mini, maxi;
5581 LOG(2, "Number of data points: %d", atm->np);
5582 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
5583 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5584 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
5585 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
5586 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
5587 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
5588 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
5589 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
5590 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
5591 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
5592 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
5593 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
5594 for (int ig = 0; ig < ctl->ng; ig++) {
5595 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
5596 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
5597 }
5598 for (int iw = 0; iw < ctl->nw; iw++) {
5599 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
5600 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
5601 }
5602 if (ctl->ncl > 0 && atm->np == 0) {
5603 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
5604 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
5605 } else
5606 LOG(2, "Cloud layer: none");
5607 if (ctl->nsf > 0 && atm->np == 0) {
5608 LOG(2,
5609 "Surface layer: z_s= %g km | p_s= %g hPa | T_s = %g K | eps= %g ... %g",
5610 atm->sfz, atm->sfp, atm->sft, atm->sfeps[0],
5611 atm->sfeps[ctl->nsf - 1]);
5612 } else
5613 LOG(2, "Surface layer: none");
5614}

◆ write_atm_rfm()

void write_atm_rfm ( const char *  filename,
const ctl_t ctl,
const atm_t atm 
)

Write atmospheric data in RFM format.

Definition at line 5618 of file jurassic.c.

5621 {
5622
5623 FILE *out;
5624
5625 /* Write info... */
5626 LOG(1, "Write RFM data: %s", filename);
5627
5628 /* Create file... */
5629 if (!(out = fopen(filename, "w")))
5630 ERRMSG("Cannot create file!");
5631
5632 /* Write data... */
5633 fprintf(out, "%d\n", atm->np);
5634 fprintf(out, "*HGT [km]\n");
5635 for (int ip = 0; ip < atm->np; ip++)
5636 fprintf(out, "%g\n", atm->z[ip]);
5637 fprintf(out, "*PRE [mb]\n");
5638 for (int ip = 0; ip < atm->np; ip++)
5639 fprintf(out, "%g\n", atm->p[ip]);
5640 fprintf(out, "*TEM [K]\n");
5641 for (int ip = 0; ip < atm->np; ip++)
5642 fprintf(out, "%g\n", atm->t[ip]);
5643 for (int ig = 0; ig < ctl->ng; ig++) {
5644 fprintf(out, "*%s [ppmv]\n", ctl->emitter[ig]);
5645 for (int ip = 0; ip < atm->np; ip++)
5646 fprintf(out, "%g\n", atm->q[ig][ip] * 1e6);
5647 }
5648 fprintf(out, "*END\n");
5649
5650 /* Close file... */
5651 fclose(out);
5652}

◆ write_matrix()

void write_matrix ( const char *  dirname,
const char *  filename,
const ctl_t ctl,
const gsl_matrix *  matrix,
const atm_t atm,
const obs_t obs,
const char *  rowspace,
const char *  colspace,
const char *  sort 
)

Write matrix.

Definition at line 5656 of file jurassic.c.

5665 {
5666
5667 FILE *out;
5668
5669 char file[LEN], quantity[LEN];
5670
5671 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
5672
5673 size_t i, j, nc, nr;
5674
5675 /* Check output flag... */
5676 if (!ctl->write_matrix)
5677 return;
5678
5679 /* Allocate... */
5680 ALLOC(cida, int,
5681 M);
5682 ALLOC(ciqa, int,
5683 N);
5684 ALLOC(cipa, int,
5685 N);
5686 ALLOC(cira, int,
5687 M);
5688 ALLOC(rida, int,
5689 M);
5690 ALLOC(riqa, int,
5691 N);
5692 ALLOC(ripa, int,
5693 N);
5694 ALLOC(rira, int,
5695 M);
5696
5697 /* Set filename... */
5698 if (dirname != NULL)
5699 sprintf(file, "%s/%s", dirname, filename);
5700 else
5701 sprintf(file, "%s", filename);
5702
5703 /* Write info... */
5704 LOG(1, "Write matrix: %s", file);
5705
5706 /* Create file... */
5707 if (!(out = fopen(file, "w")))
5708 ERRMSG("Cannot create file!");
5709
5710 /* Write header (row space)... */
5711 if (rowspace[0] == 'y') {
5712
5713 fprintf(out,
5714 "# $1 = Row: index (measurement space)\n"
5715 "# $2 = Row: channel wavenumber [cm^-1]\n"
5716 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5717 "# $4 = Row: view point altitude [km]\n"
5718 "# $5 = Row: view point longitude [deg]\n"
5719 "# $6 = Row: view point latitude [deg]\n");
5720
5721 /* Get number of rows... */
5722 nr = obs2y(ctl, obs, NULL, rida, rira);
5723
5724 } else {
5725
5726 fprintf(out,
5727 "# $1 = Row: index (state space)\n"
5728 "# $2 = Row: name of quantity\n"
5729 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5730 "# $4 = Row: altitude [km]\n"
5731 "# $5 = Row: longitude [deg]\n" "# $6 = Row: latitude [deg]\n");
5732
5733 /* Get number of rows... */
5734 nr = atm2x(ctl, atm, NULL, riqa, ripa);
5735 }
5736
5737 /* Write header (column space)... */
5738 if (colspace[0] == 'y') {
5739
5740 fprintf(out,
5741 "# $7 = Col: index (measurement space)\n"
5742 "# $8 = Col: channel wavenumber [cm^-1]\n"
5743 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5744 "# $10 = Col: view point altitude [km]\n"
5745 "# $11 = Col: view point longitude [deg]\n"
5746 "# $12 = Col: view point latitude [deg]\n");
5747
5748 /* Get number of columns... */
5749 nc = obs2y(ctl, obs, NULL, cida, cira);
5750
5751 } else {
5752
5753 fprintf(out,
5754 "# $7 = Col: index (state space)\n"
5755 "# $8 = Col: name of quantity\n"
5756 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5757 "# $10 = Col: altitude [km]\n"
5758 "# $11 = Col: longitude [deg]\n" "# $12 = Col: latitude [deg]\n");
5759
5760 /* Get number of columns... */
5761 nc = atm2x(ctl, atm, NULL, ciqa, cipa);
5762 }
5763
5764 /* Write header entry... */
5765 fprintf(out, "# $13 = Matrix element\n\n");
5766
5767 /* Write matrix data... */
5768 i = j = 0;
5769 while (i < nr && j < nc) {
5770
5771 /* Write info about the row... */
5772 if (rowspace[0] == 'y')
5773 fprintf(out, "%d %.4f %.2f %g %g %g",
5774 (int) i, ctl->nu[rida[i]],
5775 obs->time[rira[i]], obs->vpz[rira[i]],
5776 obs->vplon[rira[i]], obs->vplat[rira[i]]);
5777 else {
5778 idx2name(ctl, riqa[i], quantity);
5779 fprintf(out, "%d %s %.2f %g %g %g", (int) i, quantity,
5780 atm->time[ripa[i]], atm->z[ripa[i]],
5781 atm->lon[ripa[i]], atm->lat[ripa[i]]);
5782 }
5783
5784 /* Write info about the column... */
5785 if (colspace[0] == 'y')
5786 fprintf(out, " %d %.4f %.2f %g %g %g",
5787 (int) j, ctl->nu[cida[j]],
5788 obs->time[cira[j]], obs->vpz[cira[j]],
5789 obs->vplon[cira[j]], obs->vplat[cira[j]]);
5790 else {
5791 idx2name(ctl, ciqa[j], quantity);
5792 fprintf(out, " %d %s %.2f %g %g %g", (int) j, quantity,
5793 atm->time[cipa[j]], atm->z[cipa[j]],
5794 atm->lon[cipa[j]], atm->lat[cipa[j]]);
5795 }
5796
5797 /* Write matrix entry... */
5798 fprintf(out, " %g\n", gsl_matrix_get(matrix, i, j));
5799
5800 /* Set matrix indices... */
5801 if (sort[0] == 'r') {
5802 j++;
5803 if (j >= nc) {
5804 j = 0;
5805 i++;
5806 fprintf(out, "\n");
5807 }
5808 } else {
5809 i++;
5810 if (i >= nr) {
5811 i = 0;
5812 j++;
5813 fprintf(out, "\n");
5814 }
5815 }
5816 }
5817
5818 /* Close file... */
5819 fclose(out);
5820
5821 /* Free... */
5822 free(cida);
5823 free(ciqa);
5824 free(cipa);
5825 free(cira);
5826 free(rida);
5827 free(riqa);
5828 free(ripa);
5829 free(rira);
5830}
void idx2name(const ctl_t *ctl, const int idx, char *quantity)
Determine name of state vector quantity for given index.
Definition: jurassic.c:3736
#define M
Maximum size of measurement vector.
Definition: jurassic.h:399
Here is the call graph for this function:

◆ write_obs()

void write_obs ( const char *  dirname,
const char *  filename,
const ctl_t ctl,
const obs_t obs 
)

Write observation data.

Definition at line 5834 of file jurassic.c.

5838 {
5839
5840 FILE *out;
5841
5842 char file[LEN];
5843
5844 int n = 10;
5845
5846 /* Set filename... */
5847 if (dirname != NULL)
5848 sprintf(file, "%s/%s", dirname, filename);
5849 else
5850 sprintf(file, "%s", filename);
5851
5852 /* Write info... */
5853 LOG(1, "Write observation data: %s", file);
5854
5855 /* Create file... */
5856 if (!(out = fopen(file, "w")))
5857 ERRMSG("Cannot create file!");
5858
5859 /* Write header... */
5860 fprintf(out,
5861 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5862 "# $2 = observer altitude [km]\n"
5863 "# $3 = observer longitude [deg]\n"
5864 "# $4 = observer latitude [deg]\n"
5865 "# $5 = view point altitude [km]\n"
5866 "# $6 = view point longitude [deg]\n"
5867 "# $7 = view point latitude [deg]\n"
5868 "# $8 = tangent point altitude [km]\n"
5869 "# $9 = tangent point longitude [deg]\n"
5870 "# $10 = tangent point latitude [deg]\n");
5871 for (int id = 0; id < ctl->nd; id++)
5872 if (ctl->write_bbt)
5873 fprintf(out, "# $%d = brightness temperature (%.4f cm^-1) [K]\n",
5874 ++n, ctl->nu[id]);
5875 else
5876 fprintf(out, "# $%d = radiance (%.4f cm^-1) [W/(m^2 sr cm^-1)]\n",
5877 ++n, ctl->nu[id]);
5878 for (int id = 0; id < ctl->nd; id++)
5879 fprintf(out, "# $%d = transmittance (%.4f cm^-1) [-]\n", ++n,
5880 ctl->nu[id]);
5881
5882 /* Write data... */
5883 for (int ir = 0; ir < obs->nr; ir++) {
5884 if (ir == 0 || obs->time[ir] != obs->time[ir - 1])
5885 fprintf(out, "\n");
5886 fprintf(out, "%.2f %g %g %g %g %g %g %g %g %g", obs->time[ir],
5887 obs->obsz[ir], obs->obslon[ir], obs->obslat[ir],
5888 obs->vpz[ir], obs->vplon[ir], obs->vplat[ir],
5889 obs->tpz[ir], obs->tplon[ir], obs->tplat[ir]);
5890 for (int id = 0; id < ctl->nd; id++)
5891 fprintf(out, " %g", obs->rad[id][ir]);
5892 for (int id = 0; id < ctl->nd; id++)
5893 fprintf(out, " %g", obs->tau[id][ir]);
5894 fprintf(out, "\n");
5895 }
5896
5897 /* Close file... */
5898 fclose(out);
5899
5900 /* Write info... */
5901 double mini, maxi;
5902 LOG(2, "Number of ray paths: %d", obs->nr);
5903 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
5904 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5905 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
5906 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
5907 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
5908 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
5909 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
5910 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
5911 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
5912 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
5913 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
5914 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
5915 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
5916 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
5917 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
5918 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
5919 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
5920 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
5921 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
5922 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
5923 for (int id = 0; id < ctl->nd; id++) {
5924 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
5925 if (ctl->write_bbt) {
5926 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
5927 ctl->nu[id], mini, maxi);
5928 } else {
5929 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
5930 ctl->nu[id], mini, maxi);
5931 }
5932 }
5933 for (int id = 0; id < ctl->nd; id++) {
5934 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
5935 if (ctl->write_bbt) {
5936 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
5937 ctl->nu[id], mini, maxi);
5938 }
5939 }
5940}

◆ write_shape()

void write_shape ( const char *  filename,
const double *  x,
const double *  y,
const int  n 
)

Write shape function.

Definition at line 5944 of file jurassic.c.

5948 {
5949
5950 FILE *out;
5951
5952 /* Write info... */
5953 LOG(1, "Write shape function: %s", filename);
5954
5955 /* Create file... */
5956 if (!(out = fopen(filename, "w")))
5957 ERRMSG("Cannot create file!");
5958
5959 /* Write header... */
5960 fprintf(out,
5961 "# $1 = shape function x-value [-]\n"
5962 "# $2 = shape function y-value [-]\n\n");
5963
5964 /* Write data... */
5965 for (int i = 0; i < n; i++)
5966 fprintf(out, "%.10g %.10g\n", x[i], y[i]);
5967
5968 /* Close file... */
5969 fclose(out);
5970}

◆ write_tbl()

void write_tbl ( const ctl_t ctl,
const tbl_t tbl 
)

Write look-up table data.

Definition at line 5974 of file jurassic.c.

5976 {
5977
5978 FILE *out;
5979
5980 char filename[2 * LEN];
5981
5982 /* Loop over emitters and detectors... */
5983 for (int ig = 0; ig < ctl->ng; ig++)
5984 for (int id = 0; id < ctl->nd; id++) {
5985
5986 /* Set filename... */
5987 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
5988 ctl->nu[id], ctl->emitter[ig],
5989 ctl->tblfmt == 1 ? "tab" : "bin");
5990
5991 /* Write info... */
5992 LOG(1, "Write emissivity table: %s", filename);
5993
5994 /* Create file... */
5995 if (!(out = fopen(filename, "w")))
5996 ERRMSG("Cannot create file!");
5997
5998 /* Write ASCII data... */
5999 if (ctl->tblfmt == 1) {
6000
6001 /* Write header... */
6002 fprintf(out,
6003 "# $1 = pressure [hPa]\n"
6004 "# $2 = temperature [K]\n"
6005 "# $3 = column density [molecules/cm^2]\n"
6006 "# $4 = emissivity [-]\n");
6007
6008 /* Save table file... */
6009 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
6010 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
6011 fprintf(out, "\n");
6012 for (int iu = 0; iu < tbl->nu[id][ig][ip][it]; iu++)
6013 fprintf(out, "%g %g %e %e\n",
6014 tbl->p[id][ig][ip], tbl->t[id][ig][ip][it],
6015 tbl->u[id][ig][ip][it][iu],
6016 tbl->eps[id][ig][ip][it][iu]);
6017 }
6018 }
6019
6020 /* Write binary data... */
6021 else if (ctl->tblfmt == 2) {
6022 FWRITE(&tbl->np[id][ig], int,
6023 1,
6024 out);
6025 FWRITE(tbl->p[id][ig], double,
6026 (size_t) tbl->np[id][ig],
6027 out);
6028 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
6029 FWRITE(&tbl->nt[id][ig][ip], int,
6030 1,
6031 out);
6032 FWRITE(tbl->t[id][ig][ip], double,
6033 (size_t) tbl->nt[id][ig][ip],
6034 out);
6035 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
6036 FWRITE(&tbl->nu[id][ig][ip][it], int,
6037 1,
6038 out);
6039 FWRITE(tbl->u[id][ig][ip][it], float,
6040 (size_t) tbl->nu[id][ig][ip][it],
6041 out);
6042 FWRITE(tbl->eps[id][ig][ip][it], float,
6043 (size_t) tbl->nu[id][ig][ip][it],
6044 out);
6045 }
6046 }
6047 }
6048
6049 /* Error message... */
6050 else
6051 ERRMSG("Unknown look-up table format!");
6052
6053 /* Close file... */
6054 fclose(out);
6055 }
6056}
#define FWRITE(ptr, type, size, out)
Write binary data.
Definition: jurassic.h:151

◆ x2atm()

void x2atm ( const ctl_t ctl,
const gsl_vector *  x,
atm_t atm 
)

Decompose parameter vector or state vector.

Definition at line 6060 of file jurassic.c.

6063 {
6064
6065 size_t n = 0;
6066
6067 /* Get pressure... */
6068 for (int ip = 0; ip < atm->np; ip++)
6069 if (atm->z[ip] >= ctl->retp_zmin && atm->z[ip] <= ctl->retp_zmax)
6070 x2atm_help(&atm->p[ip], x, &n);
6071
6072 /* Get temperature... */
6073 for (int ip = 0; ip < atm->np; ip++)
6074 if (atm->z[ip] >= ctl->rett_zmin && atm->z[ip] <= ctl->rett_zmax)
6075 x2atm_help(&atm->t[ip], x, &n);
6076
6077 /* Get volume mixing ratio... */
6078 for (int ig = 0; ig < ctl->ng; ig++)
6079 for (int ip = 0; ip < atm->np; ip++)
6080 if (atm->z[ip] >= ctl->retq_zmin[ig]
6081 && atm->z[ip] <= ctl->retq_zmax[ig])
6082 x2atm_help(&atm->q[ig][ip], x, &n);
6083
6084 /* Get extinction... */
6085 for (int iw = 0; iw < ctl->nw; iw++)
6086 for (int ip = 0; ip < atm->np; ip++)
6087 if (atm->z[ip] >= ctl->retk_zmin[iw]
6088 && atm->z[ip] <= ctl->retk_zmax[iw])
6089 x2atm_help(&atm->k[iw][ip], x, &n);
6090
6091 /* Get cloud data... */
6092 if (ctl->ret_clz)
6093 x2atm_help(&atm->clz, x, &n);
6094 if (ctl->ret_cldz)
6095 x2atm_help(&atm->cldz, x, &n);
6096 if (ctl->ret_clk)
6097 for (int icl = 0; icl < ctl->ncl; icl++)
6098 x2atm_help(&atm->clk[icl], x, &n);
6099
6100 /* Get surface data... */
6101 if (ctl->ret_sfz)
6102 x2atm_help(&atm->sfz, x, &n);
6103 if (ctl->ret_sfp)
6104 x2atm_help(&atm->sfp, x, &n);
6105 if (ctl->ret_sft)
6106 x2atm_help(&atm->sft, x, &n);
6107 if (ctl->ret_sfeps)
6108 for (int isf = 0; isf < ctl->nsf; isf++)
6109 x2atm_help(&atm->sfeps[isf], x, &n);
6110}
void x2atm_help(double *value, const gsl_vector *x, size_t *n)
Get element from state vector.
Definition: jurassic.c:6114
Here is the call graph for this function:

◆ x2atm_help()

void x2atm_help ( double *  value,
const gsl_vector *  x,
size_t *  n 
)

Get element from state vector.

Definition at line 6114 of file jurassic.c.

6117 {
6118
6119 /* Get state vector element... */
6120 *value = gsl_vector_get(x, *n);
6121 (*n)++;
6122}

◆ y2obs()

void y2obs ( const ctl_t ctl,
const gsl_vector *  y,
obs_t obs 
)

Decompose measurement vector.

Definition at line 6126 of file jurassic.c.

6129 {
6130
6131 size_t m = 0;
6132
6133 /* Decompose measurement vector... */
6134 for (int ir = 0; ir < obs->nr; ir++)
6135 for (int id = 0; id < ctl->nd; id++)
6136 if (isfinite(obs->rad[id][ir])) {
6137 obs->rad[id][ir] = gsl_vector_get(y, m);
6138 m++;
6139 }
6140}