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+3)
 Maximum size of state vector. More...
 
#define NQ   (2+NG+NW+NCL+NSF+3)
 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+3)

Maximum size of state vector.

Definition at line 404 of file jurassic.h.

◆ NQ

#define NQ   (2+NG+NW+NCL+NSF+3)

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_sft)
73 atm2x_help(atm->sft, IDXSFT, 0, x, iqa, ipa, &n);
74 if (ctl->ret_sfeps)
75 for (int isf = 0; isf < ctl->nsf; isf++)
76 atm2x_help(atm->sfeps[isf], IDXSFEPS(isf), 0, x, iqa, ipa, &n);
77
78 return n;
79}
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:83
#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 IDXQ(ig)
Indices for volume mixing ratios.
Definition: jurassic.h:463
#define IDXT
Index for temperature.
Definition: jurassic.h:460
double sfeps[NSF]
Surface emissivity.
Definition: jurassic.h:542
double k[NW][NP]
Extinction [km^-1].
Definition: jurassic.h:521
double t[NP]
Temperature [K].
Definition: jurassic.h:515
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
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
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 83 of file jurassic.c.

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

◆ cart2geo()

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

Convert Cartesian coordinates to geolocation.

Definition at line 104 of file jurassic.c.

108 {
109
110 const double radius = NORM(x);
111
112 *lat = RAD2DEG(asin(x[2] / radius));
113 *lon = RAD2DEG(atan2(x[1], x[0]));
114 *z = radius - RE;
115}
#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 119 of file jurassic.c.

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

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

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

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

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

3107 {
3108
3109 /* Data size... */
3110 const size_t s = (size_t) atm_src->np * sizeof(double);
3111
3112 /* Copy data... */
3113 atm_dest->np = atm_src->np;
3114 memcpy(atm_dest->time, atm_src->time, s);
3115 memcpy(atm_dest->z, atm_src->z, s);
3116 memcpy(atm_dest->lon, atm_src->lon, s);
3117 memcpy(atm_dest->lat, atm_src->lat, s);
3118 memcpy(atm_dest->p, atm_src->p, s);
3119 memcpy(atm_dest->t, atm_src->t, s);
3120 for (int ig = 0; ig < ctl->ng; ig++)
3121 memcpy(atm_dest->q[ig], atm_src->q[ig], s);
3122 for (int iw = 0; iw < ctl->nw; iw++)
3123 memcpy(atm_dest->k[iw], atm_src->k[iw], s);
3124 atm_dest->clz = atm_src->clz;
3125 atm_dest->cldz = atm_src->cldz;
3126 for (int icl = 0; icl < ctl->ncl; icl++)
3127 atm_dest->clk[icl] = atm_src->clk[icl];
3128 atm_dest->sft = atm_src->sft;
3129 for (int isf = 0; isf < ctl->nsf; isf++)
3130 atm_dest->sfeps[isf] = atm_src->sfeps[isf];
3131
3132 /* Initialize... */
3133 if (init)
3134 for (int ip = 0; ip < atm_dest->np; ip++) {
3135 atm_dest->p[ip] = 0;
3136 atm_dest->t[ip] = 0;
3137 for (int ig = 0; ig < ctl->ng; ig++)
3138 atm_dest->q[ig][ip] = 0;
3139 for (int iw = 0; iw < ctl->nw; iw++)
3140 atm_dest->k[iw][ip] = 0;
3141 atm_dest->clz = 0;
3142 atm_dest->cldz = 0;
3143 for (int icl = 0; icl < ctl->ncl; icl++)
3144 atm_dest->clk[icl] = 0;
3145 atm_dest->sft = 0;
3146 for (int isf = 0; isf < ctl->nsf; isf++)
3147 atm_dest->sfeps[isf] = 1;
3148 }
3149}
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 3153 of file jurassic.c.

3157 {
3158
3159 /* Data size... */
3160 const size_t s = (size_t) obs_src->nr * sizeof(double);
3161
3162 /* Copy data... */
3163 obs_dest->nr = obs_src->nr;
3164 memcpy(obs_dest->time, obs_src->time, s);
3165 memcpy(obs_dest->obsz, obs_src->obsz, s);
3166 memcpy(obs_dest->obslon, obs_src->obslon, s);
3167 memcpy(obs_dest->obslat, obs_src->obslat, s);
3168 memcpy(obs_dest->vpz, obs_src->vpz, s);
3169 memcpy(obs_dest->vplon, obs_src->vplon, s);
3170 memcpy(obs_dest->vplat, obs_src->vplat, s);
3171 memcpy(obs_dest->tpz, obs_src->tpz, s);
3172 memcpy(obs_dest->tplon, obs_src->tplon, s);
3173 memcpy(obs_dest->tplat, obs_src->tplat, s);
3174 for (int id = 0; id < ctl->nd; id++)
3175 memcpy(obs_dest->rad[id], obs_src->rad[id], s);
3176 for (int id = 0; id < ctl->nd; id++)
3177 memcpy(obs_dest->tau[id], obs_src->tau[id], s);
3178
3179 /* Initialize... */
3180 if (init)
3181 for (int id = 0; id < ctl->nd; id++)
3182 for (int ir = 0; ir < obs_dest->nr; ir++)
3183 if (isfinite(obs_dest->rad[id][ir])) {
3184 obs_dest->rad[id][ir] = 0;
3185 obs_dest->tau[id][ir] = 0;
3186 }
3187}
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 3191 of file jurassic.c.

3193 {
3194
3195 for (int ig = 0; ig < ctl->ng; ig++)
3196 if (strcasecmp(ctl->emitter[ig], emitter) == 0)
3197 return ig;
3198
3199 return -1;
3200}

◆ 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 3204 of file jurassic.c.

3208 {
3209
3210 int *mask;
3211
3212 /* Allocate... */
3213 ALLOC(mask, int,
3214 ND * NR);
3215
3216 /* Save observation mask... */
3217 for (int id = 0; id < ctl->nd; id++)
3218 for (int ir = 0; ir < obs->nr; ir++)
3219 mask[id * NR + ir] = !isfinite(obs->rad[id][ir]);
3220
3221 /* Hydrostatic equilibrium... */
3222 hydrostatic(ctl, atm);
3223
3224 /* CGA or EGA forward model... */
3225 if (ctl->formod == 0 || ctl->formod == 1)
3226 for (int ir = 0; ir < obs->nr; ir++)
3227 formod_pencil(ctl, tbl, atm, obs, ir);
3228
3229 /* Call RFM... */
3230 else if (ctl->formod == 2)
3231 formod_rfm(ctl, atm, obs);
3232
3233 /* Apply field-of-view convolution... */
3234 formod_fov(ctl, obs);
3235
3236 /* Convert radiance to brightness temperature... */
3237 if (ctl->write_bbt)
3238 for (int id = 0; id < ctl->nd; id++)
3239 for (int ir = 0; ir < obs->nr; ir++)
3240 obs->rad[id][ir] = BRIGHT(obs->rad[id][ir], ctl->nu[id]);
3241
3242 /* Apply observation mask... */
3243 for (int id = 0; id < ctl->nd; id++)
3244 for (int ir = 0; ir < obs->nr; ir++)
3245 if (mask[id * NR + ir])
3246 obs->rad[id][ir] = NAN;
3247
3248 /* Free... */
3249 free(mask);
3250}
void formod_rfm(const ctl_t *ctl, const atm_t *atm, obs_t *obs)
Apply RFM for radiative transfer calculations.
Definition: jurassic.c:3490
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:3355
void formod_fov(const ctl_t *ctl, obs_t *obs)
Apply field of view convolution.
Definition: jurassic.c:3290
void hydrostatic(const ctl_t *ctl, atm_t *atm)
Set hydrostatic equilibrium.
Definition: jurassic.c:3668
#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 3254 of file jurassic.c.

3258 {
3259
3260 /* Extinction... */
3261 for (int id = 0; id < ctl->nd; id++)
3262 beta[id] = los->k[ip][id];
3263
3264 /* CO2 continuum... */
3265 if (ctl->ctm_co2 && ctl->ig_co2 >= 0)
3266 for (int id = 0; id < ctl->nd; id++)
3267 beta[id] += ctmco2(ctl->nu[id], los->p[ip], los->t[ip],
3268 los->u[ip][ctl->ig_co2]) / los->ds[ip];
3269
3270 /* H2O continuum... */
3271 if (ctl->ctm_h2o && ctl->ig_h2o >= 0)
3272 for (int id = 0; id < ctl->nd; id++)
3273 beta[id] += ctmh2o(ctl->nu[id], los->p[ip], los->t[ip],
3274 los->q[ip][ctl->ig_h2o], los->u[ip][ctl->ig_h2o])
3275 / los->ds[ip];
3276
3277 /* N2 continuum... */
3278 if (ctl->ctm_n2)
3279 for (int id = 0; id < ctl->nd; id++)
3280 beta[id] += ctmn2(ctl->nu[id], los->p[ip], los->t[ip]);
3281
3282 /* O2 continuum... */
3283 if (ctl->ctm_o2)
3284 for (int id = 0; id < ctl->nd; id++)
3285 beta[id] += ctmo2(ctl->nu[id], los->p[ip], los->t[ip]);
3286}
double ctmo2(const double nu, const double p, const double t)
Compute oxygen continuum (absorption coefficient).
Definition: jurassic.c:3041
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:1920
double ctmco2(const double nu, const double p, const double t, const double u)
Compute carbon dioxide continuum (optical depth).
Definition: jurassic.c:1057
double ctmn2(const double nu, const double p, const double t)
Compute nitrogen continuum (absorption coefficient).
Definition: jurassic.c:2972
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 3290 of file jurassic.c.

3292 {
3293
3294 obs_t *obs2;
3295
3296 double rad[ND][NR], tau[ND][NR], z[NR];
3297
3298 /* Do not take into account FOV... */
3299 if (ctl->fov[0] == '-')
3300 return;
3301
3302 /* Allocate... */
3303 ALLOC(obs2, obs_t, 1);
3304
3305 /* Copy observation data... */
3306 copy_obs(ctl, obs2, obs, 0);
3307
3308 /* Loop over ray paths... */
3309 for (int ir = 0; ir < obs->nr; ir++) {
3310
3311 /* Get radiance and transmittance profiles... */
3312 int nz = 0;
3313 for (int ir2 = MAX(ir - NFOV, 0);
3314 ir2 < MIN(ir + 1 + NFOV, obs->nr); ir2++)
3315 if (obs->time[ir2] == obs->time[ir]) {
3316 z[nz] = obs2->vpz[ir2];
3317 for (int id = 0; id < ctl->nd; id++) {
3318 rad[id][nz] = obs2->rad[id][ir2];
3319 tau[id][nz] = obs2->tau[id][ir2];
3320 }
3321 nz++;
3322 }
3323 if (nz < 2)
3324 ERRMSG("Cannot apply FOV convolution!");
3325
3326 /* Convolute profiles with FOV... */
3327 double wsum = 0;
3328 for (int id = 0; id < ctl->nd; id++) {
3329 obs->rad[id][ir] = 0;
3330 obs->tau[id][ir] = 0;
3331 }
3332 for (int i = 0; i < ctl->fov_n; i++) {
3333 const double zfov = obs->vpz[ir] + ctl->fov_dz[i];
3334 const int idx = locate_irr(z, nz, zfov);
3335 for (int id = 0; id < ctl->nd; id++) {
3336 obs->rad[id][ir] += ctl->fov_w[i]
3337 * LIN(z[idx], rad[id][idx], z[idx + 1], rad[id][idx + 1], zfov);
3338 obs->tau[id][ir] += ctl->fov_w[i]
3339 * LIN(z[idx], tau[id][idx], z[idx + 1], tau[id][idx + 1], zfov);
3340 }
3341 wsum += ctl->fov_w[i];
3342 }
3343 for (int id = 0; id < ctl->nd; id++) {
3344 obs->rad[id][ir] /= wsum;
3345 obs->tau[id][ir] /= wsum;
3346 }
3347 }
3348
3349 /* Free... */
3350 free(obs2);
3351}
int locate_irr(const double *xx, const int n, const double x)
Find array index for irregular grid.
Definition: jurassic.c:4223
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:3153
#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 3355 of file jurassic.c.

3360 {
3361
3362 los_t *los;
3363
3364 double beta_ctm[ND], rad[ND], tau[ND], tau_refl[ND],
3365 tau_path[ND][NG], tau_gas[ND], x0[3], x1[3];
3366
3367 /* Allocate... */
3368 ALLOC(los, los_t, 1);
3369
3370 /* Initialize... */
3371 for (int id = 0; id < ctl->nd; id++) {
3372 rad[id] = 0;
3373 tau[id] = 1;
3374 for (int ig = 0; ig < ctl->ng; ig++)
3375 tau_path[id][ig] = 1;
3376 }
3377
3378 /* Raytracing... */
3379 raytrace(ctl, atm, obs, los, ir);
3380
3381 /* Loop over LOS points... */
3382 for (int ip = 0; ip < los->np; ip++) {
3383
3384 /* Get trace gas transmittance... */
3385 if (ctl->formod == 0)
3386 intpol_tbl_cga(ctl, tbl, los, ip, tau_path, tau_gas);
3387 else
3388 intpol_tbl_ega(ctl, tbl, los, ip, tau_path, tau_gas);
3389
3390 /* Get continuum absorption... */
3391 formod_continua(ctl, los, ip, beta_ctm);
3392
3393 /* Compute Planck function... */
3394 formod_srcfunc(ctl, tbl, los->t[ip], los->src[ip]);
3395
3396 /* Loop over channels... */
3397 for (int id = 0; id < ctl->nd; id++)
3398 if (tau_gas[id] > 0) {
3399
3400 /* Get segment emissivity... */
3401 los->eps[ip][id] = 1 - tau_gas[id] * exp(-beta_ctm[id] * los->ds[ip]);
3402
3403 /* Compute radiance... */
3404 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau[id];
3405
3406 /* Compute path transmittance... */
3407 tau[id] *= (1 - los->eps[ip][id]);
3408 }
3409 }
3410
3411 /* Check whether LOS hit the ground... */
3412 if (ctl->sftype >= 1 && los->sft > 0) {
3413
3414 /* Add surface emissions... */
3415 double src_sf[ND];
3416 formod_srcfunc(ctl, tbl, los->sft, src_sf);
3417 for (int id = 0; id < ctl->nd; id++)
3418 rad[id] += los->sfeps[id] * src_sf[id] * tau[id];
3419
3420 /* Check reflectivity... */
3421 int refl = 0;
3422 if (ctl->sftype >= 2)
3423 for (int id = 0; id < ctl->nd; id++)
3424 if (los->sfeps[id] < 1) {
3425 refl = 1;
3426 break;
3427 }
3428
3429 /* Calculate reflection... */
3430 if (refl) {
3431
3432 /* Initialize... */
3433 for (int id = 0; id < ctl->nd; id++)
3434 tau_refl[id] = 1;
3435
3436 /* Add down-welling radiance... */
3437 for (int ip = los->np - 1; ip >= 0; ip--)
3438 for (int id = 0; id < ctl->nd; id++) {
3439 rad[id] += los->src[ip][id] * los->eps[ip][id] * tau_refl[id]
3440 * tau[id] * (1 - los->sfeps[id]);
3441 tau_refl[id] *= (1 - los->eps[ip][id]);
3442 }
3443
3444 /* Add solar term... */
3445 if (ctl->sftype >= 3) {
3446
3447 /* Get solar zenith angle... */
3448 double sza2;
3449 if (ctl->sfsza < 0)
3450 sza2 =
3451 sza(obs->time[ir], los->lon[los->np - 1], los->lat[los->np - 1]);
3452 else
3453 sza2 = ctl->sfsza;
3454
3455 /* Check solar zenith angle... */
3456 if (sza2 < 89.999) {
3457
3458 /* Get angle of incidence... */
3459 geo2cart(los->z[los->np - 1], los->lon[los->np - 1],
3460 los->lat[los->np - 1], x0);
3461 geo2cart(los->z[0], los->lon[0], los->lat[0], x1);
3462 for (int i = 0; i < 3; i++)
3463 x1[i] -= x0[i];
3464 const double cosa = DOTP(x0, x1) / NORM(x0) / NORM(x1);
3465
3466 /* Get ratio of SZA and incident radiation... */
3467 const double rcos = cosa / cos(DEG2RAD(sza2));
3468
3469 /* Add solar radiation... */
3470 for (int id = 0; id < ctl->nd; id++)
3471 rad[id] += 6.764e-5 / (2. * M_PI) * PLANCK(TSUN, ctl->nu[id])
3472 * tau_refl[id] * (1 - los->sfeps[id]) * tau[id] * rcos;
3473 }
3474 }
3475 }
3476 }
3477
3478 /* Copy results... */
3479 for (int id = 0; id < ctl->nd; id++) {
3480 obs->rad[id][ir] = rad[id];
3481 obs->tau[id][ir] = tau[id];
3482 }
3483
3484 /* Free... */
3485 free(los);
3486}
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:3935
void formod_continua(const ctl_t *ctl, const los_t *los, const int ip, double *beta)
Compute absorption coefficient of continua.
Definition: jurassic.c:3254
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:4321
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:3846
double sza(const double sec, const double lon, const double lat)
Calculate solar zenith angle.
Definition: jurassic.c:5317
void formod_srcfunc(const ctl_t *ctl, const tbl_t *tbl, const double t, double *src)
Compute Planck source function.
Definition: jurassic.c:3631
void geo2cart(const double z, const double lon, const double lat, double *x)
Convert geolocation to Cartesian coordinates.
Definition: jurassic.c:3648
#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 3490 of file jurassic.c.

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

3635 {
3636
3637 /* Determine index in temperature array... */
3638 const int it = locate_reg(tbl->st, TBLNS, t);
3639
3640 /* Interpolate Planck function value... */
3641 for (int id = 0; id < ctl->nd; id++)
3642 src[id] = LIN(tbl->st[it], tbl->sr[it][id],
3643 tbl->st[it + 1], tbl->sr[it + 1][id], t);
3644}
#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 3648 of file jurassic.c.

3652 {
3653
3654 const double radius = z + RE;
3655
3656 const double latrad = lat / 180. * M_PI;
3657 const double lonrad = lon / 180. * M_PI;
3658
3659 const double coslat = cos(latrad);
3660
3661 x[0] = radius * coslat * cos(lonrad);
3662 x[1] = radius * coslat * sin(lonrad);
3663 x[2] = radius * sin(latrad);
3664}

◆ hydrostatic()

void hydrostatic ( const ctl_t ctl,
atm_t atm 
)

Set hydrostatic equilibrium.

Definition at line 3668 of file jurassic.c.

3670 {
3671
3672 const double mmair = 28.96456e-3, mmh2o = 18.0153e-3;
3673
3674 const int ipts = 20;
3675
3676 double dzmin = 1e99, e = 0;
3677
3678 int ipref = 0;
3679
3680 /* Check reference height... */
3681 if (ctl->hydz < 0)
3682 return;
3683
3684 /* Find air parcel next to reference height... */
3685 for (int ip = 0; ip < atm->np; ip++)
3686 if (fabs(atm->z[ip] - ctl->hydz) < dzmin) {
3687 dzmin = fabs(atm->z[ip] - ctl->hydz);
3688 ipref = ip;
3689 }
3690
3691 /* Upper part of profile... */
3692 for (int ip = ipref + 1; ip < atm->np; ip++) {
3693 double mean = 0;
3694 for (int i = 0; i < ipts; i++) {
3695 if (ctl->ig_h2o >= 0)
3696 e = LIN(0.0, atm->q[ctl->ig_h2o][ip - 1],
3697 ipts - 1.0, atm->q[ctl->ig_h2o][ip], (double) i);
3698 mean += (e * mmh2o + (1 - e) * mmair)
3699 * G0 / RI
3700 / LIN(0.0, atm->t[ip - 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3701 }
3702
3703 /* Compute p(z,T)... */
3704 atm->p[ip] =
3705 exp(log(atm->p[ip - 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip - 1]));
3706 }
3707
3708 /* Lower part of profile... */
3709 for (int ip = ipref - 1; ip >= 0; ip--) {
3710 double mean = 0;
3711 for (int i = 0; i < ipts; i++) {
3712 if (ctl->ig_h2o >= 0)
3713 e = LIN(0.0, atm->q[ctl->ig_h2o][ip + 1],
3714 ipts - 1.0, atm->q[ctl->ig_h2o][ip], (double) i);
3715 mean += (e * mmh2o + (1 - e) * mmair)
3716 * G0 / RI
3717 / LIN(0.0, atm->t[ip + 1], ipts - 1.0, atm->t[ip], (double) i) / ipts;
3718 }
3719
3720 /* Compute p(z,T)... */
3721 atm->p[ip] =
3722 exp(log(atm->p[ip + 1]) - mean * 1000 * (atm->z[ip] - atm->z[ip + 1]));
3723 }
3724}
#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 3728 of file jurassic.c.

3731 {
3732
3733 if (idx == IDXP)
3734 sprintf(quantity, "PRESSURE");
3735
3736 if (idx == IDXT)
3737 sprintf(quantity, "TEMPERATURE");
3738
3739 for (int ig = 0; ig < ctl->ng; ig++)
3740 if (idx == IDXQ(ig))
3741 sprintf(quantity, "%s", ctl->emitter[ig]);
3742
3743 for (int iw = 0; iw < ctl->nw; iw++)
3744 if (idx == IDXK(iw))
3745 sprintf(quantity, "EXTINCT_WINDOW_%d", iw);
3746
3747 if (idx == IDXCLZ)
3748 sprintf(quantity, "CLOUD_HEIGHT");
3749
3750 if (idx == IDXCLDZ)
3751 sprintf(quantity, "CLOUD_DEPTH");
3752
3753 for (int icl = 0; icl < ctl->ncl; icl++)
3754 if (idx == IDXCLK(icl))
3755 sprintf(quantity, "CLOUD_EXTINCT_%.4f", ctl->clnu[icl]);
3756
3757 if (idx == IDXSFT)
3758 sprintf(quantity, "SURFACE_TEMPERATURE");
3759
3760 for (int isf = 0; isf < ctl->nsf; isf++)
3761 if (idx == IDXSFEPS(isf))
3762 sprintf(quantity, "SURFACE_EMISSIVITY_%.4f", ctl->sfnu[isf]);
3763}
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 3767 of file jurassic.c.

3769 {
3770
3771 char filename[2 * LEN];
3772
3773 double f[NSHAPE], nu[NSHAPE];
3774
3775 int n;
3776
3777 /* Write info... */
3778 LOG(1, "Initialize source function table...");
3779 LOG(2, "Number of data points: %d", TBLNS);
3780
3781 /* Loop over channels... */
3782 for (int id = 0; id < ctl->nd; id++) {
3783
3784 /* Read filter function... */
3785 sprintf(filename, "%s_%.4f.filt", ctl->tblbase, ctl->nu[id]);
3786 read_shape(filename, nu, f, &n);
3787
3788 /* Get minimum grid spacing... */
3789 double dnu = 1.0;
3790 for (int i = 1; i < n; i++)
3791 dnu = MIN(dnu, nu[i] - nu[i - 1]);
3792
3793 /* Compute source function table... */
3794#pragma omp parallel for default(none) shared(ctl,tbl,id,nu,f,n,dnu)
3795 for (int it = 0; it < TBLNS; it++) {
3796
3797 /* Set temperature... */
3798 tbl->st[it] = LIN(0.0, TMIN, TBLNS - 1.0, TMAX, (double) it);
3799
3800 /* Integrate Planck function... */
3801 double fsum = tbl->sr[it][id] = 0;
3802 for (double fnu = nu[0]; fnu <= nu[n - 1]; fnu += dnu) {
3803 const int i = locate_irr(nu, n, fnu);
3804 const double ff = LIN(nu[i], f[i], nu[i + 1], f[i + 1], fnu);
3805 fsum += ff;
3806 tbl->sr[it][id] += ff * PLANCK(tbl->st[it], fnu);
3807 }
3808 tbl->sr[it][id] /= fsum;
3809 }
3810
3811 /* Write info... */
3812 LOG(2,
3813 "channel= %.4f cm^-1 | T= %g ... %g K | B= %g ... %g W/(m^2 sr cm^-1)",
3814 ctl->nu[id], tbl->st[0], tbl->st[TBLNS - 1], tbl->sr[0][id],
3815 tbl->sr[TBLNS - 1][id]);
3816 }
3817}
#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 3821 of file jurassic.c.

3828 {
3829
3830 /* Get array index... */
3831 const int ip = locate_irr(atm->z, atm->np, z);
3832
3833 /* Interpolate... */
3834 *p = LOGY(atm->z[ip], atm->p[ip], atm->z[ip + 1], atm->p[ip + 1], z);
3835 *t = LIN(atm->z[ip], atm->t[ip], atm->z[ip + 1], atm->t[ip + 1], z);
3836 for (int ig = 0; ig < ctl->ng; ig++)
3837 q[ig] =
3838 LIN(atm->z[ip], atm->q[ig][ip], atm->z[ip + 1], atm->q[ig][ip + 1], z);
3839 for (int iw = 0; iw < ctl->nw; iw++)
3840 k[iw] =
3841 LIN(atm->z[ip], atm->k[iw][ip], atm->z[ip + 1], atm->k[iw][ip + 1], z);
3842}
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 3846 of file jurassic.c.

3852 {
3853
3854 double eps;
3855
3856 /* Loop over channels... */
3857 for (int id = 0; id < ctl->nd; id++) {
3858
3859 /* Initialize... */
3860 tau_seg[id] = 1;
3861
3862 /* Loop over emitters.... */
3863 for (int ig = 0; ig < ctl->ng; ig++) {
3864
3865 /* Check size of table (pressure) and column density... */
3866 if (tbl->np[id][ig] < 30 || los->cgu[ip][ig] <= 0)
3867 eps = 0;
3868
3869 /* Check transmittance... */
3870 else if (tau_path[id][ig] < 1e-9)
3871 eps = 1;
3872
3873 /* Interpolate... */
3874 else {
3875
3876 /* Determine pressure and temperature indices... */
3877 const int ipr =
3878 locate_irr(tbl->p[id][ig], tbl->np[id][ig], los->cgp[ip][ig]);
3879 const int it0 = locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr],
3880 los->cgt[ip][ig]);
3881 const int it1 =
3882 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3883 los->cgt[ip][ig]);
3884
3885 /* Check size of table (temperature and column density)... */
3886 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3887 || tbl->nu[id][ig][ipr][it0] < 2
3888 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3889 || tbl->nu[id][ig][ipr + 1][it1] < 2
3890 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3891 eps = 0;
3892
3893 else {
3894
3895 /* Get emissivities of extended path... */
3896 double eps00
3897 = intpol_tbl_eps(tbl, ig, id, ipr, it0, los->cgu[ip][ig]);
3898 double eps01 =
3899 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, los->cgu[ip][ig]);
3900 double eps10 =
3901 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, los->cgu[ip][ig]);
3902 double eps11 =
3903 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, los->cgu[ip][ig]);
3904
3905 /* Interpolate with respect to temperature... */
3906 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
3907 tbl->t[id][ig][ipr][it0 + 1], eps01, los->cgt[ip][ig]);
3908 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
3909 tbl->t[id][ig][ipr + 1][it1 + 1],
3910 eps11, los->cgt[ip][ig]);
3911
3912 /* Interpolate with respect to pressure... */
3913 eps00 = LOGX(tbl->p[id][ig][ipr], eps00,
3914 tbl->p[id][ig][ipr + 1], eps11, los->cgp[ip][ig]);
3915
3916 /* Check emissivity range... */
3917 eps00 = MAX(MIN(eps00, 1), 0);
3918
3919 /* Determine segment emissivity... */
3920 eps = 1 - (1 - eps00) / tau_path[id][ig];
3921 }
3922 }
3923
3924 /* Get transmittance of extended path... */
3925 tau_path[id][ig] *= (1 - eps);
3926
3927 /* Get segment transmittance... */
3928 tau_seg[id] *= (1 - eps);
3929 }
3930 }
3931}
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:4031
#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 3935 of file jurassic.c.

3941 {
3942
3943 double eps, u;
3944
3945 /* Loop over channels... */
3946 for (int id = 0; id < ctl->nd; id++) {
3947
3948 /* Initialize... */
3949 tau_seg[id] = 1;
3950
3951 /* Loop over emitters.... */
3952 for (int ig = 0; ig < ctl->ng; ig++) {
3953
3954 /* Check size of table (pressure) and column density... */
3955 if (tbl->np[id][ig] < 30 || los->cgu[ip][ig] <= 0)
3956 eps = 0;
3957
3958 /* Check transmittance... */
3959 else if (tau_path[id][ig] < 1e-9)
3960 eps = 1;
3961
3962 /* Interpolate... */
3963 else {
3964
3965 /* Determine pressure and temperature indices... */
3966 const int ipr =
3967 locate_irr(tbl->p[id][ig], tbl->np[id][ig], los->p[ip]);
3968 const int it0 =
3969 locate_reg(tbl->t[id][ig][ipr], tbl->nt[id][ig][ipr], los->t[ip]);
3970 const int it1 =
3971 locate_reg(tbl->t[id][ig][ipr + 1], tbl->nt[id][ig][ipr + 1],
3972 los->t[ip]);
3973
3974 /* Check size of table (temperature and column density)... */
3975 if (tbl->nt[id][ig][ipr] < 2 || tbl->nt[id][ig][ipr + 1] < 2
3976 || tbl->nu[id][ig][ipr][it0] < 2
3977 || tbl->nu[id][ig][ipr][it0 + 1] < 2
3978 || tbl->nu[id][ig][ipr + 1][it1] < 2
3979 || tbl->nu[id][ig][ipr + 1][it1 + 1] < 2)
3980 eps = 0;
3981
3982 else {
3983
3984 /* Get emissivities of extended path... */
3985 u = intpol_tbl_u(tbl, ig, id, ipr, it0, 1 - tau_path[id][ig]);
3986 double eps00
3987 = intpol_tbl_eps(tbl, ig, id, ipr, it0, u + los->u[ip][ig]);
3988
3989 u = intpol_tbl_u(tbl, ig, id, ipr, it0 + 1, 1 - tau_path[id][ig]);
3990 double eps01 =
3991 intpol_tbl_eps(tbl, ig, id, ipr, it0 + 1, u + los->u[ip][ig]);
3992
3993 u = intpol_tbl_u(tbl, ig, id, ipr + 1, it1, 1 - tau_path[id][ig]);
3994 double eps10 =
3995 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1, u + los->u[ip][ig]);
3996
3997 u =
3998 intpol_tbl_u(tbl, ig, id, ipr + 1, it1 + 1, 1 - tau_path[id][ig]);
3999 double eps11 =
4000 intpol_tbl_eps(tbl, ig, id, ipr + 1, it1 + 1, u + los->u[ip][ig]);
4001
4002 /* Interpolate with respect to temperature... */
4003 eps00 = LIN(tbl->t[id][ig][ipr][it0], eps00,
4004 tbl->t[id][ig][ipr][it0 + 1], eps01, los->t[ip]);
4005 eps11 = LIN(tbl->t[id][ig][ipr + 1][it1], eps10,
4006 tbl->t[id][ig][ipr + 1][it1 + 1], eps11, los->t[ip]);
4007
4008 /* Interpolate with respect to pressure... */
4009 eps00 = LIN(tbl->p[id][ig][ipr], eps00,
4010 tbl->p[id][ig][ipr + 1], eps11, los->p[ip]);
4011
4012 /* Check emissivity range... */
4013 eps00 = MAX(MIN(eps00, 1), 0);
4014
4015 /* Determine segment emissivity... */
4016 eps = 1 - (1 - eps00) / tau_path[id][ig];
4017 }
4018 }
4019
4020 /* Get transmittance of extended path... */
4021 tau_path[id][ig] *= (1 - eps);
4022
4023 /* Get segment transmittance... */
4024 tau_seg[id] *= (1 - eps);
4025 }
4026 }
4027}
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:4063
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 4031 of file jurassic.c.

4037 {
4038
4039 const int nu = tbl->nu[id][ig][ip][it];
4040 const float *u_arr = tbl->u[id][ig][ip][it];
4041 const float *eps_arr = tbl->eps[id][ig][ip][it];
4042
4043 const double u_min = u_arr[0];
4044 const double u_max = u_arr[nu - 1];
4045
4046 /* Lower boundary extrapolation... */
4047 if (u < u_min)
4048 return eps_arr[0] * u / u_min;
4049
4050 /* Upper boundary extrapolation... */
4051 if (u > u_max) {
4052 const double a = log(1.0 - eps_arr[nu - 1]) / u_max;
4053 return 1.0 - exp(a * u);
4054 }
4055
4056 /* Interpolation... */
4057 const int idx = locate_tbl(u_arr, nu, u);
4058 return LIN(u_arr[idx], eps_arr[idx], u_arr[idx + 1], eps_arr[idx + 1], u);
4059}
int locate_tbl(const float *xx, const int n, const double x)
Find array index in float array.
Definition: jurassic.c:4272
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 4063 of file jurassic.c.

4069 {
4070
4071 const int nu = tbl->nu[id][ig][ip][it];
4072 const float *eps_arr = tbl->eps[id][ig][ip][it];
4073 const float *u_arr = tbl->u[id][ig][ip][it];
4074
4075 const double eps_min = eps_arr[0];
4076 const double eps_max = eps_arr[nu - 1];
4077
4078 /* Lower boundary extrapolation... */
4079 if (eps < eps_min)
4080 return u_arr[0] * eps / eps_min;
4081
4082 /* Upper boundary extrapolation... */
4083 if (eps > eps_max) {
4084 const double a = log(1.0 - eps_max) / u_arr[nu - 1];
4085 return log(1.0 - eps) / a;
4086 }
4087
4088 /* Interpolation... */
4089 const int idx = locate_tbl(eps_arr, nu, eps);
4090 return LIN(eps_arr[idx], u_arr[idx], eps_arr[idx + 1], u_arr[idx + 1], eps);
4091}
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 4095 of file jurassic.c.

4103 {
4104
4105 struct tm t0, *t1;
4106
4107 t0.tm_year = 100;
4108 t0.tm_mon = 0;
4109 t0.tm_mday = 1;
4110 t0.tm_hour = 0;
4111 t0.tm_min = 0;
4112 t0.tm_sec = 0;
4113
4114 time_t jsec0 = (time_t) jsec + timegm(&t0);
4115 t1 = gmtime(&jsec0);
4116
4117 *year = t1->tm_year + 1900;
4118 *mon = t1->tm_mon + 1;
4119 *day = t1->tm_mday;
4120 *hour = t1->tm_hour;
4121 *min = t1->tm_min;
4122 *sec = t1->tm_sec;
4123 *remain = jsec - floor(jsec);
4124}

◆ 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 4128 of file jurassic.c.

4133 {
4134
4135 int *iqa;
4136
4137 /* Get sizes... */
4138 const size_t m = k->size1;
4139 const size_t n = k->size2;
4140
4141 /* Allocate... */
4142 gsl_vector *x0 = gsl_vector_alloc(n);
4143 gsl_vector *yy0 = gsl_vector_alloc(m);
4144 ALLOC(iqa, int,
4145 N);
4146
4147 /* Compute radiance for undisturbed atmospheric data... */
4148 formod(ctl, tbl, atm, obs);
4149
4150 /* Compose vectors... */
4151 atm2x(ctl, atm, x0, iqa, NULL);
4152 obs2y(ctl, obs, yy0, NULL, NULL);
4153
4154 /* Initialize kernel matrix... */
4155 gsl_matrix_set_zero(k);
4156
4157 /* Loop over state vector elements... */
4158#pragma omp parallel for default(none) shared(ctl,tbl,atm,obs,k,x0,yy0,n,m,iqa)
4159 for (size_t j = 0; j < n; j++) {
4160
4161 /* Allocate... */
4162 atm_t *atm1;
4163 obs_t *obs1;
4164 ALLOC(atm1, atm_t, 1);
4165 ALLOC(obs1, obs_t, 1);
4166 gsl_vector *x1 = gsl_vector_alloc(n);
4167 gsl_vector *yy1 = gsl_vector_alloc(m);
4168
4169 /* Set perturbation size... */
4170 double h;
4171 if (iqa[j] == IDXP)
4172 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-7);
4173 else if (iqa[j] == IDXT)
4174 h = 1.0;
4175 else if (iqa[j] >= IDXQ(0) && iqa[j] < IDXQ(ctl->ng))
4176 h = MAX(fabs(0.01 * gsl_vector_get(x0, j)), 1e-15);
4177 else if (iqa[j] >= IDXK(0) && iqa[j] < IDXK(ctl->nw))
4178 h = 1e-4;
4179 else if (iqa[j] == IDXCLZ || iqa[j] == IDXCLDZ)
4180 h = 1.0;
4181 else if (iqa[j] >= IDXCLK(0) && iqa[j] < IDXCLK(ctl->ncl))
4182 h = 1e-4;
4183 else if (iqa[j] == IDXSFT)
4184 h = 1.0;
4185 else if (iqa[j] >= IDXSFEPS(0) && iqa[j] < IDXSFEPS(ctl->nsf))
4186 h = 1e-2;
4187 else
4188 ERRMSG("Cannot set perturbation size!");
4189
4190 /* Disturb state vector element... */
4191 gsl_vector_memcpy(x1, x0);
4192 gsl_vector_set(x1, j, gsl_vector_get(x1, j) + h);
4193 copy_atm(ctl, atm1, atm, 0);
4194 copy_obs(ctl, obs1, obs, 0);
4195 x2atm(ctl, x1, atm1);
4196
4197 /* Compute radiance for disturbed atmospheric data... */
4198 formod(ctl, tbl, atm1, obs1);
4199
4200 /* Compose measurement vector for disturbed radiance data... */
4201 obs2y(ctl, obs1, yy1, NULL, NULL);
4202
4203 /* Compute derivatives... */
4204 for (size_t i = 0; i < m; i++)
4205 gsl_matrix_set(k, i, j,
4206 (gsl_vector_get(yy1, i) - gsl_vector_get(yy0, i)) / h);
4207
4208 /* Free... */
4209 gsl_vector_free(x1);
4210 gsl_vector_free(yy1);
4211 free(atm1);
4212 free(obs1);
4213 }
4214
4215 /* Free... */
4216 gsl_vector_free(x0);
4217 gsl_vector_free(yy0);
4218 free(iqa);
4219}
void x2atm(const ctl_t *ctl, const gsl_vector *x, atm_t *atm)
Decompose parameter vector or state vector.
Definition: jurassic.c:6029
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:3204
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:3103
size_t obs2y(const ctl_t *ctl, const obs_t *obs, gsl_vector *y, int *ida, int *ira)
Compose measurement vector.
Definition: jurassic.c:4294
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 4223 of file jurassic.c.

4226 {
4227
4228 int ilo = 0;
4229 int ihi = n - 1;
4230 int i = (ihi + ilo) >> 1;
4231
4232 if (xx[i] < xx[i + 1])
4233 while (ihi > ilo + 1) {
4234 i = (ihi + ilo) >> 1;
4235 if (xx[i] > x)
4236 ihi = i;
4237 else
4238 ilo = i;
4239 } else
4240 while (ihi > ilo + 1) {
4241 i = (ihi + ilo) >> 1;
4242 if (xx[i] <= x)
4243 ihi = i;
4244 else
4245 ilo = i;
4246 }
4247
4248 return ilo;
4249}

◆ locate_reg()

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

Find array index for regular grid.

Definition at line 4253 of file jurassic.c.

4256 {
4257
4258 /* Calculate index... */
4259 const int i = (int) ((x - xx[0]) / (xx[1] - xx[0]));
4260
4261 /* Check range... */
4262 if (i < 0)
4263 return 0;
4264 else if (i > n - 2)
4265 return n - 2;
4266 else
4267 return i;
4268}

◆ locate_tbl()

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

Find array index in float array.

Definition at line 4272 of file jurassic.c.

4275 {
4276
4277 int ilo = 0;
4278 int ihi = n - 1;
4279 int i = (ihi + ilo) >> 1;
4280
4281 while (ihi > ilo + 1) {
4282 i = (ihi + ilo) >> 1;
4283 if (xx[i] > x)
4284 ihi = i;
4285 else
4286 ilo = i;
4287 }
4288
4289 return ilo;
4290}

◆ 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 4294 of file jurassic.c.

4299 {
4300
4301 size_t m = 0;
4302
4303 /* Determine measurement vector... */
4304 for (int ir = 0; ir < obs->nr; ir++)
4305 for (int id = 0; id < ctl->nd; id++)
4306 if (isfinite(obs->rad[id][ir])) {
4307 if (y != NULL)
4308 gsl_vector_set(y, m, obs->rad[id][ir]);
4309 if (ida != NULL)
4310 ida[m] = id;
4311 if (ira != NULL)
4312 ira[m] = ir;
4313 m++;
4314 }
4315
4316 return m;
4317}

◆ 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 4321 of file jurassic.c.

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

4560 {
4561
4562 FILE *in;
4563
4564 char file[LEN], line[LEN], *tok;
4565
4566 /* Init... */
4567 atm->np = 0;
4568
4569 /* Set filename... */
4570 if (dirname != NULL)
4571 sprintf(file, "%s/%s", dirname, filename);
4572 else
4573 sprintf(file, "%s", filename);
4574
4575 /* Write info... */
4576 LOG(1, "Read atmospheric data: %s", file);
4577
4578 /* Open file... */
4579 if (!(in = fopen(file, "r")))
4580 ERRMSG("Cannot open file!");
4581
4582 /* Read line... */
4583 while (fgets(line, LEN, in)) {
4584
4585 /* Read data... */
4586 TOK(line, tok, "%lg", atm->time[atm->np]);
4587 TOK(NULL, tok, "%lg", atm->z[atm->np]);
4588 TOK(NULL, tok, "%lg", atm->lon[atm->np]);
4589 TOK(NULL, tok, "%lg", atm->lat[atm->np]);
4590 TOK(NULL, tok, "%lg", atm->p[atm->np]);
4591 TOK(NULL, tok, "%lg", atm->t[atm->np]);
4592 for (int ig = 0; ig < ctl->ng; ig++)
4593 TOK(NULL, tok, "%lg", atm->q[ig][atm->np]);
4594 for (int iw = 0; iw < ctl->nw; iw++)
4595 TOK(NULL, tok, "%lg", atm->k[iw][atm->np]);
4596 if (ctl->ncl > 0 && atm->np == 0) {
4597 TOK(NULL, tok, "%lg", atm->clz);
4598 TOK(NULL, tok, "%lg", atm->cldz);
4599 for (int icl = 0; icl < ctl->ncl; icl++)
4600 TOK(NULL, tok, "%lg", atm->clk[icl]);
4601 }
4602 if (ctl->nsf > 0 && atm->np == 0) {
4603 TOK(NULL, tok, "%lg", atm->sft);
4604 for (int isf = 0; isf < ctl->nsf; isf++)
4605 TOK(NULL, tok, "%lg", atm->sfeps[isf]);
4606 }
4607
4608 /* Increment data point counter... */
4609 if ((++atm->np) > NP)
4610 ERRMSG("Too many data points!");
4611 }
4612
4613 /* Close file... */
4614 fclose(in);
4615
4616 /* Check number of points... */
4617 if (atm->np < 1)
4618 ERRMSG("Could not read any data!");
4619
4620 /* Write info... */
4621 double mini, maxi;
4622 LOG(2, "Number of data points: %d", atm->np);
4623 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
4624 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4625 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
4626 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
4627 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
4628 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
4629 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
4630 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
4631 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
4632 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
4633 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
4634 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
4635 for (int ig = 0; ig < ctl->ng; ig++) {
4636 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
4637 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
4638 }
4639 for (int iw = 0; iw < ctl->nw; iw++) {
4640 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
4641 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
4642 }
4643 if (ctl->ncl > 0 && atm->np == 0) {
4644 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
4645 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
4646 } else
4647 LOG(2, "Cloud layer: none");
4648 if (ctl->nsf > 0 && atm->np == 0) {
4649 LOG(2,
4650 "Surface layer: T_s = %g K | eps= %g ... %g",
4651 atm->sft, atm->sfeps[0], atm->sfeps[ctl->nsf - 1]);
4652 } else
4653 LOG(2, "Surface layer: none");
4654}
#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 4658 of file jurassic.c.

4661 {
4662
4663 /* Write info... */
4664 LOG(1, "\nJuelich Rapid Spectral Simulation Code (JURASSIC)\n"
4665 "(executable: %s | version: %s | compiled: %s, %s)\n",
4666 argv[0], VERSION, __DATE__, __TIME__);
4667
4668 /* Emitters... */
4669 ctl->ng = (int) scan_ctl(argc, argv, "NG", -1, "0", NULL);
4670 if (ctl->ng < 0 || ctl->ng > NG)
4671 ERRMSG("Set 0 <= NG <= MAX!");
4672 for (int ig = 0; ig < ctl->ng; ig++)
4673 scan_ctl(argc, argv, "EMITTER", ig, "", ctl->emitter[ig]);
4674 ctl->ig_co2 = find_emitter(ctl, "CO2");
4675 ctl->ig_h2o = find_emitter(ctl, "H2O");
4676 ctl->ig_n2 = find_emitter(ctl, "N2");
4677 ctl->ig_o2 = find_emitter(ctl, "O2");
4678
4679 /* Radiance channels... */
4680 ctl->nd = (int) scan_ctl(argc, argv, "ND", -1, "0", NULL);
4681 if (ctl->nd < 0 || ctl->nd > ND)
4682 ERRMSG("Set 0 <= ND <= MAX!");
4683 for (int id = 0; id < ctl->nd; id++)
4684 ctl->nu[id] = scan_ctl(argc, argv, "NU", id, "", NULL);
4685
4686 /* Spectral windows... */
4687 ctl->nw = (int) scan_ctl(argc, argv, "NW", -1, "1", NULL);
4688 if (ctl->nw < 0 || ctl->nw > NW)
4689 ERRMSG("Set 0 <= NW <= MAX!");
4690 for (int id = 0; id < ctl->nd; id++)
4691 ctl->window[id] = (int) scan_ctl(argc, argv, "WINDOW", id, "0", NULL);
4692
4693 /* Cloud data... */
4694 ctl->ncl = (int) scan_ctl(argc, argv, "NCL", -1, "0", NULL);
4695 if (ctl->ncl < 0 || ctl->ncl > NCL)
4696 ERRMSG("Set 0 <= NCL <= MAX!");
4697 if (ctl->ncl == 1)
4698 ERRMSG("Set NCL > 1!");
4699 for (int icl = 0; icl < ctl->ncl; icl++)
4700 ctl->clnu[icl] = scan_ctl(argc, argv, "CLNU", icl, "", NULL);
4701
4702 /* Surface data... */
4703 ctl->nsf = (int) scan_ctl(argc, argv, "NSF", -1, "0", NULL);
4704 if (ctl->nsf < 0 || ctl->nsf > NSF)
4705 ERRMSG("Set 0 <= NSF <= MAX!");
4706 if (ctl->nsf == 1)
4707 ERRMSG("Set NSF > 1!");
4708 for (int isf = 0; isf < ctl->nsf; isf++)
4709 ctl->sfnu[isf] = scan_ctl(argc, argv, "SFNU", isf, "", NULL);
4710 ctl->sftype = (int) scan_ctl(argc, argv, "SFTYPE", -1, "2", NULL);
4711 if (ctl->sftype < 0 || ctl->sftype > 3)
4712 ERRMSG("Set 0 <= SFTYPE <= 3!");
4713 ctl->sfsza = scan_ctl(argc, argv, "SFSZA", -1, "-999", NULL);
4714
4715 /* Emissivity look-up tables... */
4716 scan_ctl(argc, argv, "TBLBASE", -1, "-", ctl->tblbase);
4717 ctl->tblfmt = (int) scan_ctl(argc, argv, "TBLFMT", -1, "1", NULL);
4718
4719 /* Hydrostatic equilibrium... */
4720 ctl->hydz = scan_ctl(argc, argv, "HYDZ", -1, "-999", NULL);
4721
4722 /* Continua... */
4723 ctl->ctm_co2 = (int) scan_ctl(argc, argv, "CTM_CO2", -1, "1", NULL);
4724 ctl->ctm_h2o = (int) scan_ctl(argc, argv, "CTM_H2O", -1, "1", NULL);
4725 ctl->ctm_n2 = (int) scan_ctl(argc, argv, "CTM_N2", -1, "1", NULL);
4726 ctl->ctm_o2 = (int) scan_ctl(argc, argv, "CTM_O2", -1, "1", NULL);
4727
4728 /* Ray-tracing... */
4729 ctl->refrac = (int) scan_ctl(argc, argv, "REFRAC", -1, "1", NULL);
4730 ctl->rayds = scan_ctl(argc, argv, "RAYDS", -1, "10", NULL);
4731 ctl->raydz = scan_ctl(argc, argv, "RAYDZ", -1, "0.1", NULL);
4732
4733 /* Field of view... */
4734 scan_ctl(argc, argv, "FOV", -1, "-", ctl->fov);
4735 if (ctl->fov[0] != '-')
4736 read_shape(ctl->fov, ctl->fov_dz, ctl->fov_w, &ctl->fov_n);
4737
4738 /* Retrieval interface... */
4739 ctl->retp_zmin = scan_ctl(argc, argv, "RETP_ZMIN", -1, "-999", NULL);
4740 ctl->retp_zmax = scan_ctl(argc, argv, "RETP_ZMAX", -1, "-999", NULL);
4741 ctl->rett_zmin = scan_ctl(argc, argv, "RETT_ZMIN", -1, "-999", NULL);
4742 ctl->rett_zmax = scan_ctl(argc, argv, "RETT_ZMAX", -1, "-999", NULL);
4743 for (int ig = 0; ig < ctl->ng; ig++) {
4744 ctl->retq_zmin[ig] = scan_ctl(argc, argv, "RETQ_ZMIN", ig, "-999", NULL);
4745 ctl->retq_zmax[ig] = scan_ctl(argc, argv, "RETQ_ZMAX", ig, "-999", NULL);
4746 }
4747 for (int iw = 0; iw < ctl->nw; iw++) {
4748 ctl->retk_zmin[iw] = scan_ctl(argc, argv, "RETK_ZMIN", iw, "-999", NULL);
4749 ctl->retk_zmax[iw] = scan_ctl(argc, argv, "RETK_ZMAX", iw, "-999", NULL);
4750 }
4751 ctl->ret_clz = (int) scan_ctl(argc, argv, "RET_CLZ", -1, "0", NULL);
4752 ctl->ret_cldz = (int) scan_ctl(argc, argv, "RET_CLDZ", -1, "0", NULL);
4753 ctl->ret_clk = (int) scan_ctl(argc, argv, "RET_CLK", -1, "0", NULL);
4754 ctl->ret_sft = (int) scan_ctl(argc, argv, "RET_SFT", -1, "0", NULL);
4755 ctl->ret_sfeps = (int) scan_ctl(argc, argv, "RET_SFEPS", -1, "0", NULL);
4756
4757 /* Output flags... */
4758 ctl->write_bbt = (int) scan_ctl(argc, argv, "WRITE_BBT", -1, "0", NULL);
4759 ctl->write_matrix =
4760 (int) scan_ctl(argc, argv, "WRITE_MATRIX", -1, "0", NULL);
4761
4762 /* External forward models... */
4763 ctl->formod = (int) scan_ctl(argc, argv, "FORMOD", -1, "1", NULL);
4764 scan_ctl(argc, argv, "RFMBIN", -1, "-", ctl->rfmbin);
4765 scan_ctl(argc, argv, "RFMHIT", -1, "-", ctl->rfmhit);
4766 for (int ig = 0; ig < ctl->ng; ig++)
4767 scan_ctl(argc, argv, "RFMXSC", ig, "-", ctl->rfmxsc[ig]);
4768}
int find_emitter(const ctl_t *ctl, const char *emitter)
Find index of an emitter.
Definition: jurassic.c:3191
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:5248
#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 4772 of file jurassic.c.

4775 {
4776
4777 FILE *in;
4778
4779 char dum[LEN], file[LEN], line[LEN];
4780
4781 double value;
4782
4783 int i, j;
4784
4785 /* Set filename... */
4786 if (dirname != NULL)
4787 sprintf(file, "%s/%s", dirname, filename);
4788 else
4789 sprintf(file, "%s", filename);
4790
4791 /* Write info... */
4792 LOG(1, "Read matrix: %s", file);
4793
4794 /* Open file... */
4795 if (!(in = fopen(file, "r")))
4796 ERRMSG("Cannot open file!");
4797
4798 /* Read data... */
4799 gsl_matrix_set_zero(matrix);
4800 while (fgets(line, LEN, in))
4801 if (sscanf(line, "%d %s %s %s %s %s %d %s %s %s %s %s %lg",
4802 &i, dum, dum, dum, dum, dum,
4803 &j, dum, dum, dum, dum, dum, &value) == 13)
4804 gsl_matrix_set(matrix, (size_t) i, (size_t) j, value);
4805
4806 /* Close file... */
4807 fclose(in);
4808}

◆ read_obs()

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

Read observation data.

Definition at line 4812 of file jurassic.c.

4816 {
4817
4818 FILE *in;
4819
4820 char file[LEN], line[LEN], *tok;
4821
4822 /* Init... */
4823 obs->nr = 0;
4824
4825 /* Set filename... */
4826 if (dirname != NULL)
4827 sprintf(file, "%s/%s", dirname, filename);
4828 else
4829 sprintf(file, "%s", filename);
4830
4831 /* Write info... */
4832 LOG(1, "Read observation data: %s", file);
4833
4834 /* Open file... */
4835 if (!(in = fopen(file, "r")))
4836 ERRMSG("Cannot open file!");
4837
4838 /* Read line... */
4839 while (fgets(line, LEN, in)) {
4840
4841 /* Read data... */
4842 TOK(line, tok, "%lg", obs->time[obs->nr]);
4843 TOK(NULL, tok, "%lg", obs->obsz[obs->nr]);
4844 TOK(NULL, tok, "%lg", obs->obslon[obs->nr]);
4845 TOK(NULL, tok, "%lg", obs->obslat[obs->nr]);
4846 TOK(NULL, tok, "%lg", obs->vpz[obs->nr]);
4847 TOK(NULL, tok, "%lg", obs->vplon[obs->nr]);
4848 TOK(NULL, tok, "%lg", obs->vplat[obs->nr]);
4849 TOK(NULL, tok, "%lg", obs->tpz[obs->nr]);
4850 TOK(NULL, tok, "%lg", obs->tplon[obs->nr]);
4851 TOK(NULL, tok, "%lg", obs->tplat[obs->nr]);
4852 for (int id = 0; id < ctl->nd; id++)
4853 TOK(NULL, tok, "%lg", obs->rad[id][obs->nr]);
4854 for (int id = 0; id < ctl->nd; id++)
4855 TOK(NULL, tok, "%lg", obs->tau[id][obs->nr]);
4856
4857 /* Increment counter... */
4858 if ((++obs->nr) > NR)
4859 ERRMSG("Too many rays!");
4860 }
4861
4862 /* Close file... */
4863 fclose(in);
4864
4865 /* Check number of points... */
4866 if (obs->nr < 1)
4867 ERRMSG("Could not read any data!");
4868
4869 /* Write info... */
4870 double mini, maxi;
4871 LOG(2, "Number of ray paths: %d", obs->nr);
4872 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
4873 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
4874 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
4875 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
4876 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
4877 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
4878 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
4879 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
4880 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
4881 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
4882 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
4883 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
4884 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
4885 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
4886 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
4887 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
4888 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
4889 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
4890 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
4891 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
4892 for (int id = 0; id < ctl->nd; id++) {
4893 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
4894 if (ctl->write_bbt) {
4895 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
4896 ctl->nu[id], mini, maxi);
4897 } else {
4898 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
4899 ctl->nu[id], mini, maxi);
4900 }
4901 }
4902 for (int id = 0; id < ctl->nd; id++) {
4903 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
4904 if (ctl->write_bbt) {
4905 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
4906 ctl->nu[id], mini, maxi);
4907 }
4908 }
4909}

◆ 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 4913 of file jurassic.c.

4918 {
4919
4920 FILE *in;
4921
4922 char filename[LEN];
4923
4924 double filt, fsum = 0, nu2[NSHAPE], *nurfm, *rad, radsum = 0;
4925
4926 int npts;
4927
4928 /* Allocate... */
4929 ALLOC(nurfm, double,
4930 RFMNPTS);
4931 ALLOC(rad, double,
4932 RFMNPTS);
4933
4934 /* Search RFM spectrum... */
4935 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000));
4936 if (!(in = fopen(filename, "r"))) {
4937 sprintf(filename, "%s_%05d.asc", basename, (int) (z * 1000) + 1);
4938 if (!(in = fopen(filename, "r")))
4939 ERRMSG("Cannot find RFM data file!");
4940 }
4941 fclose(in);
4942
4943 /* Read RFM spectrum... */
4944 read_rfm_spec(filename, nurfm, rad, &npts);
4945
4946 /* Set wavenumbers... */
4947 nu2[0] = nu[0];
4948 nu2[n - 1] = nu[n - 1];
4949 for (int i = 1; i < n - 1; i++)
4950 nu2[i] = LIN(0.0, nu2[0], n - 1.0, nu2[n - 1], i);
4951
4952 /* Convolute... */
4953 for (int ipts = 0; ipts < npts; ipts++)
4954 if (nurfm[ipts] >= nu2[0] && nurfm[ipts] <= nu2[n - 1]) {
4955 const int idx = locate_irr(nu2, n, nurfm[ipts]);
4956 filt = LIN(nu2[idx], f[idx], nu2[idx + 1], f[idx + 1], nurfm[ipts]);
4957 fsum += filt;
4958 radsum += filt * rad[ipts];
4959 }
4960
4961 /* Free... */
4962 free(nurfm);
4963 free(rad);
4964
4965 /* Return radiance... */
4966 return radsum / fsum;
4967}
void read_rfm_spec(const char *filename, double *nu, double *rad, int *npts)
Read RFM spectrum.
Definition: jurassic.c:4971
#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 4971 of file jurassic.c.

4975 {
4976
4977 FILE *in;
4978
4979 char *line = NULL, *tok;
4980
4981 size_t line_buf_size = 0;
4982
4983 double dnu, nu0, nu1;
4984
4985 int ipts = 0;
4986
4987 /* Write info... */
4988 LOG(1, "Read RFM data: %s", filename);
4989
4990 /* Open file... */
4991 if (!(in = fopen(filename, "r")))
4992 ERRMSG("Cannot open file!");
4993
4994 /* Read header... */
4995 for (int i = 0; i < 4; i++)
4996 if (getline(&line, &line_buf_size, in) == -1)
4997 ERRMSG("Error while reading file header!");
4998 if (sscanf(line, "%d %lg %lg %lg", npts, &nu0, &dnu, &nu1) != 4)
4999 ERRMSG("Invalid spectrum header format!");
5000
5001 /* Check number of spectral grid points... */
5002 if (*npts > RFMNPTS)
5003 ERRMSG("Too many spectral grid points!");
5004
5005 /* Read radiance data... */
5006 while (getline(&line, &line_buf_size, in) != -1 && ipts < *npts) {
5007 tok = strtok(line, " \t\n");
5008 while (tok != NULL && ipts < *npts) {
5009 if (sscanf(tok, "%lg", &rad[ipts]) == 1)
5010 ipts++;
5011 tok = strtok(NULL, " \t\n");
5012 }
5013 }
5014
5015 /* Check number of spectral grid points... */
5016 if (ipts != *npts)
5017 ERRMSG("Error while reading RFM data!");
5018
5019 /* Compute wavenumbers... */
5020 for (ipts = 0; ipts < *npts; ipts++)
5021 nu[ipts] = LIN(0.0, nu0, (double) (*npts - 1), nu1, (double) ipts);
5022
5023 /* Close file... */
5024 fclose(in);
5025
5026 /* Free.. */
5027 free(line);
5028}

◆ read_shape()

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

Read shape function.

Definition at line 5032 of file jurassic.c.

5036 {
5037
5038 FILE *in;
5039
5040 char line[LEN];
5041
5042 /* Write info... */
5043 LOG(1, "Read shape function: %s", filename);
5044
5045 /* Open file... */
5046 if (!(in = fopen(filename, "r")))
5047 ERRMSG("Cannot open file!");
5048
5049 /* Read data... */
5050 *n = 0;
5051 while (fgets(line, LEN, in))
5052 if (sscanf(line, "%lg %lg", &x[*n], &y[*n]) == 2)
5053 if ((++(*n)) > NSHAPE)
5054 ERRMSG("Too many data points!");
5055
5056 /* Close file... */
5057 fclose(in);
5058
5059 /* Check number of data points... */
5060 if (*n < 2)
5061 ERRMSG("Could not read any data!");
5062
5063 /* Write info... */
5064 double mini, maxi;
5065 LOG(2, "Number of data points: %d", *n);
5066 gsl_stats_minmax(&mini, &maxi, x, 1, (size_t) *n);
5067 LOG(2, "Range of x values: %.4f ... %.4f", mini, maxi);
5068 gsl_stats_minmax(&mini, &maxi, y, 1, (size_t) *n);
5069 LOG(2, "Range of y values: %g ... %g", mini, maxi);
5070}

◆ read_tbl()

tbl_t * read_tbl ( const ctl_t ctl)

Read look-up table data.

Definition at line 5074 of file jurassic.c.

5075 {
5076
5077 FILE *in;
5078
5079 char filename[2 * LEN], line[LEN];
5080
5081 double eps, press, temp, u;
5082
5083 /* Allocate... */
5084 tbl_t *tbl;
5085 ALLOC(tbl, tbl_t, 1);
5086
5087 /* Loop over trace gases and channels... */
5088 for (int id = 0; id < ctl->nd; id++)
5089 for (int ig = 0; ig < ctl->ng; ig++) {
5090
5091 /* Initialize... */
5092 tbl->np[id][ig] = -1;
5093 double eps_old = -999;
5094 double press_old = -999;
5095 double temp_old = -999;
5096 double u_old = -999;
5097 int nrange = 0;
5098
5099 /* Set filename... */
5100 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
5101 ctl->nu[id], ctl->emitter[ig],
5102 ctl->tblfmt == 1 ? "tab" : "bin");
5103
5104 /* Write info... */
5105 LOG(1, "Read emissivity table: %s", filename);
5106
5107 /* Try to open file... */
5108 if (!(in = fopen(filename, "r"))) {
5109 WARN("Missing emissivity table: %s", filename);
5110 continue;
5111 }
5112
5113 /* Read ASCII tables... */
5114 if (ctl->tblfmt == 1) {
5115
5116 /* Read data... */
5117 while (fgets(line, LEN, in)) {
5118
5119 /* Parse line... */
5120 if (sscanf(line, "%lg %lg %lg %lg", &press, &temp, &u, &eps) != 4)
5121 continue;
5122
5123 /* Check ranges... */
5124 if (u < UMIN || u > UMAX || eps < EPSMIN || eps > EPSMAX) {
5125 nrange++;
5126 continue;
5127 }
5128
5129 /* Determine pressure index... */
5130 if (press != press_old) {
5131 press_old = press;
5132 if ((++tbl->np[id][ig]) >= TBLNP)
5133 ERRMSG("Too many pressure levels!");
5134 tbl->nt[id][ig][tbl->np[id][ig]] = -1;
5135 }
5136
5137 /* Determine temperature index... */
5138 if (temp != temp_old) {
5139 temp_old = temp;
5140 if ((++tbl->nt[id][ig][tbl->np[id][ig]]) >= TBLNT)
5141 ERRMSG("Too many temperatures!");
5142 tbl->nu[id][ig][tbl->np[id][ig]]
5143 [tbl->nt[id][ig][tbl->np[id][ig]]] = -1;
5144 }
5145
5146 /* Determine column density index... */
5147 if ((eps > eps_old && u > u_old) || tbl->nu[id][ig][tbl->np[id][ig]]
5148 [tbl->nt[id][ig][tbl->np[id][ig]]] < 0) {
5149 eps_old = eps;
5150 u_old = u;
5151 if ((++tbl->nu[id][ig][tbl->np[id][ig]]
5152 [tbl->nt[id][ig][tbl->np[id][ig]]]) >= TBLNU)
5153 ERRMSG("Too many column densities!");
5154 }
5155
5156 /* Store data... */
5157 tbl->p[id][ig][tbl->np[id][ig]] = press;
5158 tbl->t[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5159 = temp;
5160 tbl->u[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5161 [tbl->nu[id][ig][tbl->np[id][ig]]
5162 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) u;
5163 tbl->eps[id][ig][tbl->np[id][ig]][tbl->nt[id][ig][tbl->np[id][ig]]]
5164 [tbl->nu[id][ig][tbl->np[id][ig]]
5165 [tbl->nt[id][ig][tbl->np[id][ig]]]] = (float) eps;
5166 }
5167
5168 /* Increment counters... */
5169 tbl->np[id][ig]++;
5170 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5171 tbl->nt[id][ig][ip]++;
5172 for (int it = 0; it < tbl->nt[id][ig][ip]; it++)
5173 tbl->nu[id][ig][ip][it]++;
5174 }
5175 }
5176
5177 /* Read binary data... */
5178 else if (ctl->tblfmt == 2) {
5179
5180 /* Read data... */
5181 FREAD(&tbl->np[id][ig], int,
5182 1,
5183 in);
5184 if (tbl->np[id][ig] > TBLNP)
5185 ERRMSG("Too many pressure levels!");
5186 FREAD(tbl->p[id][ig], double,
5187 (size_t) tbl->np[id][ig],
5188 in);
5189 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5190 FREAD(&tbl->nt[id][ig][ip], int,
5191 1,
5192 in);
5193 if (tbl->nt[id][ig][ip] > TBLNT)
5194 ERRMSG("Too many temperatures!");
5195 FREAD(tbl->t[id][ig][ip], double,
5196 (size_t) tbl->nt[id][ig][ip],
5197 in);
5198 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
5199 FREAD(&tbl->nu[id][ig][ip][it], int,
5200 1,
5201 in);
5202 if (tbl->nu[id][ig][ip][it] > TBLNU)
5203 ERRMSG("Too many column densities!");
5204 FREAD(tbl->u[id][ig][ip][it], float,
5205 (size_t) tbl->nu[id][ig][ip][it],
5206 in);
5207 FREAD(tbl->eps[id][ig][ip][it], float,
5208 (size_t) tbl->nu[id][ig][ip][it],
5209 in);
5210 }
5211 }
5212 }
5213
5214 /* Error message... */
5215 else
5216 ERRMSG("Unknown look-up table format!");
5217
5218 /* Check ranges... */
5219 if (nrange > 0)
5220 WARN("Column density or emissivity out of range (%d data points)!",
5221 nrange);
5222
5223 /* Close file... */
5224 fclose(in);
5225
5226 /* Write info... */
5227 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
5228 LOG(2,
5229 "p[%2d]= %.5e hPa | T[0:%2d]= %.2f ... %.2f K | u[0:%3d]= %.5e ... %.5e molec/cm^2 | eps[0:%3d]= %.5e ... %.5e",
5230 ip, tbl->p[id][ig][ip], tbl->nt[id][ig][ip] - 1,
5231 tbl->t[id][ig][ip][0],
5232 tbl->t[id][ig][ip][tbl->nt[id][ig][ip] - 1],
5233 tbl->nu[id][ig][ip][0] - 1, tbl->u[id][ig][ip][0][0],
5234 tbl->u[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1],
5235 tbl->nu[id][ig][ip][0] - 1, tbl->eps[id][ig][ip][0][0],
5236 tbl->eps[id][ig][ip][0][tbl->nu[id][ig][ip][0] - 1]);
5237 }
5238
5239 /* Initialize source function... */
5240 init_srcfunc(ctl, tbl);
5241
5242 /* Return pointer... */
5243 return tbl;
5244}
void init_srcfunc(const ctl_t *ctl, tbl_t *tbl)
Initialize source function table.
Definition: jurassic.c:3767
#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 5248 of file jurassic.c.

5254 {
5255
5256 FILE *in = NULL;
5257
5258 char dummy[LEN], fullname1[LEN], fullname2[LEN], line[LEN],
5259 rvarname[LEN], rval[LEN];
5260
5261 int contain = 0;
5262
5263 /* Open file... */
5264 if (argv[1][0] != '-')
5265 if (!(in = fopen(argv[1], "r")))
5266 ERRMSG("Cannot open file!");
5267
5268 /* Set full variable name... */
5269 if (arridx >= 0) {
5270 sprintf(fullname1, "%s[%d]", varname, arridx);
5271 sprintf(fullname2, "%s[*]", varname);
5272 } else {
5273 sprintf(fullname1, "%s", varname);
5274 sprintf(fullname2, "%s", varname);
5275 }
5276
5277 /* Read data... */
5278 if (in != NULL)
5279 while (fgets(line, LEN, in))
5280 if (sscanf(line, "%s %s %s", rvarname, dummy, rval) == 3)
5281 if (strcasecmp(rvarname, fullname1) == 0 ||
5282 strcasecmp(rvarname, fullname2) == 0) {
5283 contain = 1;
5284 break;
5285 }
5286 for (int i = 1; i < argc - 1; i++)
5287 if (strcasecmp(argv[i], fullname1) == 0 ||
5288 strcasecmp(argv[i], fullname2) == 0) {
5289 sprintf(rval, "%s", argv[i + 1]);
5290 contain = 1;
5291 break;
5292 }
5293
5294 /* Close file... */
5295 if (in != NULL)
5296 fclose(in);
5297
5298 /* Check for missing variables... */
5299 if (!contain) {
5300 if (strlen(defvalue) > 0)
5301 sprintf(rval, "%s", defvalue);
5302 else
5303 ERRMSG("Missing variable %s!\n", fullname1);
5304 }
5305
5306 /* Write info... */
5307 LOG(1, "%s = %s", fullname1, rval);
5308
5309 /* Return values... */
5310 if (value != NULL)
5311 sprintf(value, "%s", rval);
5312 return atof(rval);
5313}

◆ sza()

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

Calculate solar zenith angle.

Definition at line 5317 of file jurassic.c.

5320 {
5321
5322 /* Number of days and fraction with respect to 2000-01-01T12:00Z... */
5323 const double D = sec / 86400 - 0.5;
5324
5325 /* Geocentric apparent ecliptic longitude [rad]... */
5326 const double g = DEG2RAD(357.529 + 0.98560028 * D);
5327 const double q = 280.459 + 0.98564736 * D;
5328 const double L = DEG2RAD(q + 1.915 * sin(g) + 0.020 * sin(2 * g));
5329
5330 /* Mean obliquity of the ecliptic [rad]... */
5331 const double e = DEG2RAD(23.439 - 0.00000036 * D);
5332
5333 /* Declination [rad]... */
5334 const double dec = asin(sin(e) * sin(L));
5335
5336 /* Right ascension [rad]... */
5337 const double ra = atan2(cos(e) * sin(L), cos(L));
5338
5339 /* Greenwich Mean Sidereal Time [h]... */
5340 const double GMST = 18.697374558 + 24.06570982441908 * D;
5341
5342 /* Local Sidereal Time [h]... */
5343 const double LST = GMST + lon / 15;
5344
5345 /* Hour angle [rad]... */
5346 const double h = LST / 12 * M_PI - ra;
5347
5348 /* Convert latitude... */
5349 const double latr = DEG2RAD(lat);
5350
5351 /* Return solar zenith angle [deg]... */
5352 return RAD2DEG(acos(sin(latr) * sin(dec) + cos(latr) * cos(dec) * cos(h)));
5353}

◆ 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 5357 of file jurassic.c.

5361 {
5362
5363 double dummy, v[3], v0[3], v2[3];
5364
5365 /* Find minimum altitude... */
5366 const size_t ip = gsl_stats_min_index(los->z, 1, (size_t) los->np);
5367
5368 /* Nadir or zenith... */
5369 if (ip <= 0 || ip >= (size_t) los->np - 1) {
5370 *tpz = los->z[los->np - 1];
5371 *tplon = los->lon[los->np - 1];
5372 *tplat = los->lat[los->np - 1];
5373 }
5374
5375 /* Limb... */
5376 else {
5377
5378 /* Determine interpolating polynomial y=a*x^2+b*x+c... */
5379 const double yy0 = los->z[ip - 1];
5380 const double yy1 = los->z[ip];
5381 const double yy2 = los->z[ip + 1];
5382 const double x1 = sqrt(POW2(los->ds[ip]) - POW2(yy1 - yy0));
5383 const double x2 = x1 + sqrt(POW2(los->ds[ip + 1]) - POW2(yy2 - yy1));
5384 const double a = 1 / (x1 - x2) * (-(yy0 - yy1) / x1 + (yy0 - yy2) / x2);
5385 const double b = -(yy0 - yy1) / x1 - a * x1;
5386 const double c = yy0;
5387
5388 /* Get tangent point location... */
5389 const double x = -b / (2 * a);
5390 *tpz = a * x * x + b * x + c;
5391 geo2cart(los->z[ip - 1], los->lon[ip - 1], los->lat[ip - 1], v0);
5392 geo2cart(los->z[ip + 1], los->lon[ip + 1], los->lat[ip + 1], v2);
5393 for (int i = 0; i < 3; i++)
5394 v[i] = LIN(0.0, v0[i], x2, v2[i], x);
5395 cart2geo(v, &dummy, tplon, tplat);
5396 }
5397}
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 5401 of file jurassic.c.

5409 {
5410
5411 struct tm t0, t1;
5412
5413 t0.tm_year = 100;
5414 t0.tm_mon = 0;
5415 t0.tm_mday = 1;
5416 t0.tm_hour = 0;
5417 t0.tm_min = 0;
5418 t0.tm_sec = 0;
5419
5420 t1.tm_year = year - 1900;
5421 t1.tm_mon = mon - 1;
5422 t1.tm_mday = day;
5423 t1.tm_hour = hour;
5424 t1.tm_min = min;
5425 t1.tm_sec = sec;
5426
5427 *jsec = (double) timegm(&t1) - (double) timegm(&t0) + remain;
5428}

◆ timer()

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

Measure wall-clock time.

Definition at line 5432 of file jurassic.c.

5437 {
5438
5439 static double w0[10];
5440
5441 static int l0[10], nt;
5442
5443 /* Start new timer... */
5444 if (mode == 1) {
5445 w0[nt] = omp_get_wtime();
5446 l0[nt] = line;
5447 if ((++nt) >= 10)
5448 ERRMSG("Too many timers!");
5449 }
5450
5451 /* Write elapsed time... */
5452 else {
5453
5454 /* Check timer index... */
5455 if (nt - 1 < 0)
5456 ERRMSG("Coding error!");
5457
5458 /* Write elapsed time... */
5459 LOG(1, "Timer '%s' (%s, %s, l%d-%d): %.3f sec",
5460 name, file, func, l0[nt - 1], line, omp_get_wtime() - w0[nt - 1]);
5461 }
5462
5463 /* Stop timer... */
5464 if (mode == 3)
5465 nt--;
5466}

◆ 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 5470 of file jurassic.c.

5474 {
5475
5476 FILE *out;
5477
5478 char file[LEN];
5479
5480 int n = 6;
5481
5482 /* Set filename... */
5483 if (dirname != NULL)
5484 sprintf(file, "%s/%s", dirname, filename);
5485 else
5486 sprintf(file, "%s", filename);
5487
5488 /* Write info... */
5489 LOG(1, "Write atmospheric data: %s", file);
5490
5491 /* Create file... */
5492 if (!(out = fopen(file, "w")))
5493 ERRMSG("Cannot create file!");
5494
5495 /* Write header... */
5496 fprintf(out,
5497 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5498 "# $2 = altitude [km]\n"
5499 "# $3 = longitude [deg]\n"
5500 "# $4 = latitude [deg]\n"
5501 "# $5 = pressure [hPa]\n" "# $6 = temperature [K]\n");
5502 for (int ig = 0; ig < ctl->ng; ig++)
5503 fprintf(out, "# $%d = %s volume mixing ratio [ppv]\n",
5504 ++n, ctl->emitter[ig]);
5505 for (int iw = 0; iw < ctl->nw; iw++)
5506 fprintf(out, "# $%d = extinction (window %d) [km^-1]\n", ++n, iw);
5507 if (ctl->ncl > 0) {
5508 fprintf(out, "# $%d = cloud layer height [km]\n", ++n);
5509 fprintf(out, "# $%d = cloud layer depth [km]\n", ++n);
5510 for (int icl = 0; icl < ctl->ncl; icl++)
5511 fprintf(out, "# $%d = cloud layer extinction (%.4f cm^-1) [km^-1]\n",
5512 ++n, ctl->clnu[icl]);
5513 }
5514 if (ctl->nsf > 0) {
5515 fprintf(out, "# $%d = surface layer height [km]\n", ++n);
5516 fprintf(out, "# $%d = surface layer pressure [hPa]\n", ++n);
5517 fprintf(out, "# $%d = surface layer temperature [K]\n", ++n);
5518 for (int isf = 0; isf < ctl->nsf; isf++)
5519 fprintf(out, "# $%d = surface layer emissivity (%.4f cm^-1)\n",
5520 ++n, ctl->sfnu[isf]);
5521 }
5522
5523 /* Write data... */
5524 for (int ip = 0; ip < atm->np; ip++) {
5525 if (ip == 0 || atm->time[ip] != atm->time[ip - 1])
5526 fprintf(out, "\n");
5527 fprintf(out, "%.2f %g %g %g %g %g", atm->time[ip], atm->z[ip],
5528 atm->lon[ip], atm->lat[ip], atm->p[ip], atm->t[ip]);
5529 for (int ig = 0; ig < ctl->ng; ig++)
5530 fprintf(out, " %g", atm->q[ig][ip]);
5531 for (int iw = 0; iw < ctl->nw; iw++)
5532 fprintf(out, " %g", atm->k[iw][ip]);
5533 if (ctl->ncl > 0) {
5534 fprintf(out, " %g %g", atm->clz, atm->cldz);
5535 for (int icl = 0; icl < ctl->ncl; icl++)
5536 fprintf(out, " %g", atm->clk[icl]);
5537 }
5538 if (ctl->nsf > 0) {
5539 fprintf(out, " %g", atm->sft);
5540 for (int isf = 0; isf < ctl->nsf; isf++)
5541 fprintf(out, " %g", atm->sfeps[isf]);
5542 }
5543 fprintf(out, "\n");
5544 }
5545
5546 /* Close file... */
5547 fclose(out);
5548
5549 /* Write info... */
5550 double mini, maxi;
5551 LOG(2, "Number of data points: %d", atm->np);
5552 gsl_stats_minmax(&mini, &maxi, atm->time, 1, (size_t) atm->np);
5553 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5554 gsl_stats_minmax(&mini, &maxi, atm->z, 1, (size_t) atm->np);
5555 LOG(2, "Altitude range: %g ... %g km", mini, maxi);
5556 gsl_stats_minmax(&mini, &maxi, atm->lon, 1, (size_t) atm->np);
5557 LOG(2, "Longitude range: %g ... %g deg", mini, maxi);
5558 gsl_stats_minmax(&mini, &maxi, atm->lat, 1, (size_t) atm->np);
5559 LOG(2, "Latitude range: %g ... %g deg", mini, maxi);
5560 gsl_stats_minmax(&mini, &maxi, atm->p, 1, (size_t) atm->np);
5561 LOG(2, "Pressure range: %g ... %g hPa", maxi, mini);
5562 gsl_stats_minmax(&mini, &maxi, atm->t, 1, (size_t) atm->np);
5563 LOG(2, "Temperature range: %g ... %g K", mini, maxi);
5564 for (int ig = 0; ig < ctl->ng; ig++) {
5565 gsl_stats_minmax(&mini, &maxi, atm->q[ig], 1, (size_t) atm->np);
5566 LOG(2, "Emitter %s range: %g ... %g ppv", ctl->emitter[ig], mini, maxi);
5567 }
5568 for (int iw = 0; iw < ctl->nw; iw++) {
5569 gsl_stats_minmax(&mini, &maxi, atm->k[iw], 1, (size_t) atm->np);
5570 LOG(2, "Extinction range (window %d): %g ... %g km^-1", iw, mini, maxi);
5571 }
5572 if (ctl->ncl > 0 && atm->np == 0) {
5573 LOG(2, "Cloud layer: z= %g km | dz= %g km | k= %g ... %g km^-1",
5574 atm->clz, atm->cldz, atm->clk[0], atm->clk[ctl->ncl - 1]);
5575 } else
5576 LOG(2, "Cloud layer: none");
5577 if (ctl->nsf > 0 && atm->np == 0) {
5578 LOG(2,
5579 "Surface layer: T_s = %g K | eps= %g ... %g",
5580 atm->sft, atm->sfeps[0], atm->sfeps[ctl->nsf - 1]);
5581 } else
5582 LOG(2, "Surface layer: none");
5583}

◆ 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 5587 of file jurassic.c.

5590 {
5591
5592 FILE *out;
5593
5594 /* Write info... */
5595 LOG(1, "Write RFM data: %s", filename);
5596
5597 /* Create file... */
5598 if (!(out = fopen(filename, "w")))
5599 ERRMSG("Cannot create file!");
5600
5601 /* Write data... */
5602 fprintf(out, "%d\n", atm->np);
5603 fprintf(out, "*HGT [km]\n");
5604 for (int ip = 0; ip < atm->np; ip++)
5605 fprintf(out, "%g\n", atm->z[ip]);
5606 fprintf(out, "*PRE [mb]\n");
5607 for (int ip = 0; ip < atm->np; ip++)
5608 fprintf(out, "%g\n", atm->p[ip]);
5609 fprintf(out, "*TEM [K]\n");
5610 for (int ip = 0; ip < atm->np; ip++)
5611 fprintf(out, "%g\n", atm->t[ip]);
5612 for (int ig = 0; ig < ctl->ng; ig++) {
5613 fprintf(out, "*%s [ppmv]\n", ctl->emitter[ig]);
5614 for (int ip = 0; ip < atm->np; ip++)
5615 fprintf(out, "%g\n", atm->q[ig][ip] * 1e6);
5616 }
5617 fprintf(out, "*END\n");
5618
5619 /* Close file... */
5620 fclose(out);
5621}

◆ 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 5625 of file jurassic.c.

5634 {
5635
5636 FILE *out;
5637
5638 char file[LEN], quantity[LEN];
5639
5640 int *cida, *ciqa, *cipa, *cira, *rida, *riqa, *ripa, *rira;
5641
5642 size_t i, j, nc, nr;
5643
5644 /* Check output flag... */
5645 if (!ctl->write_matrix)
5646 return;
5647
5648 /* Allocate... */
5649 ALLOC(cida, int,
5650 M);
5651 ALLOC(ciqa, int,
5652 N);
5653 ALLOC(cipa, int,
5654 N);
5655 ALLOC(cira, int,
5656 M);
5657 ALLOC(rida, int,
5658 M);
5659 ALLOC(riqa, int,
5660 N);
5661 ALLOC(ripa, int,
5662 N);
5663 ALLOC(rira, int,
5664 M);
5665
5666 /* Set filename... */
5667 if (dirname != NULL)
5668 sprintf(file, "%s/%s", dirname, filename);
5669 else
5670 sprintf(file, "%s", filename);
5671
5672 /* Write info... */
5673 LOG(1, "Write matrix: %s", file);
5674
5675 /* Create file... */
5676 if (!(out = fopen(file, "w")))
5677 ERRMSG("Cannot create file!");
5678
5679 /* Write header (row space)... */
5680 if (rowspace[0] == 'y') {
5681
5682 fprintf(out,
5683 "# $1 = Row: index (measurement space)\n"
5684 "# $2 = Row: channel wavenumber [cm^-1]\n"
5685 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5686 "# $4 = Row: view point altitude [km]\n"
5687 "# $5 = Row: view point longitude [deg]\n"
5688 "# $6 = Row: view point latitude [deg]\n");
5689
5690 /* Get number of rows... */
5691 nr = obs2y(ctl, obs, NULL, rida, rira);
5692
5693 } else {
5694
5695 fprintf(out,
5696 "# $1 = Row: index (state space)\n"
5697 "# $2 = Row: name of quantity\n"
5698 "# $3 = Row: time (seconds since 2000-01-01T00:00Z)\n"
5699 "# $4 = Row: altitude [km]\n"
5700 "# $5 = Row: longitude [deg]\n" "# $6 = Row: latitude [deg]\n");
5701
5702 /* Get number of rows... */
5703 nr = atm2x(ctl, atm, NULL, riqa, ripa);
5704 }
5705
5706 /* Write header (column space)... */
5707 if (colspace[0] == 'y') {
5708
5709 fprintf(out,
5710 "# $7 = Col: index (measurement space)\n"
5711 "# $8 = Col: channel wavenumber [cm^-1]\n"
5712 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5713 "# $10 = Col: view point altitude [km]\n"
5714 "# $11 = Col: view point longitude [deg]\n"
5715 "# $12 = Col: view point latitude [deg]\n");
5716
5717 /* Get number of columns... */
5718 nc = obs2y(ctl, obs, NULL, cida, cira);
5719
5720 } else {
5721
5722 fprintf(out,
5723 "# $7 = Col: index (state space)\n"
5724 "# $8 = Col: name of quantity\n"
5725 "# $9 = Col: time (seconds since 2000-01-01T00:00Z)\n"
5726 "# $10 = Col: altitude [km]\n"
5727 "# $11 = Col: longitude [deg]\n" "# $12 = Col: latitude [deg]\n");
5728
5729 /* Get number of columns... */
5730 nc = atm2x(ctl, atm, NULL, ciqa, cipa);
5731 }
5732
5733 /* Write header entry... */
5734 fprintf(out, "# $13 = Matrix element\n\n");
5735
5736 /* Write matrix data... */
5737 i = j = 0;
5738 while (i < nr && j < nc) {
5739
5740 /* Write info about the row... */
5741 if (rowspace[0] == 'y')
5742 fprintf(out, "%d %.4f %.2f %g %g %g",
5743 (int) i, ctl->nu[rida[i]],
5744 obs->time[rira[i]], obs->vpz[rira[i]],
5745 obs->vplon[rira[i]], obs->vplat[rira[i]]);
5746 else {
5747 idx2name(ctl, riqa[i], quantity);
5748 fprintf(out, "%d %s %.2f %g %g %g", (int) i, quantity,
5749 atm->time[ripa[i]], atm->z[ripa[i]],
5750 atm->lon[ripa[i]], atm->lat[ripa[i]]);
5751 }
5752
5753 /* Write info about the column... */
5754 if (colspace[0] == 'y')
5755 fprintf(out, " %d %.4f %.2f %g %g %g",
5756 (int) j, ctl->nu[cida[j]],
5757 obs->time[cira[j]], obs->vpz[cira[j]],
5758 obs->vplon[cira[j]], obs->vplat[cira[j]]);
5759 else {
5760 idx2name(ctl, ciqa[j], quantity);
5761 fprintf(out, " %d %s %.2f %g %g %g", (int) j, quantity,
5762 atm->time[cipa[j]], atm->z[cipa[j]],
5763 atm->lon[cipa[j]], atm->lat[cipa[j]]);
5764 }
5765
5766 /* Write matrix entry... */
5767 fprintf(out, " %g\n", gsl_matrix_get(matrix, i, j));
5768
5769 /* Set matrix indices... */
5770 if (sort[0] == 'r') {
5771 j++;
5772 if (j >= nc) {
5773 j = 0;
5774 i++;
5775 fprintf(out, "\n");
5776 }
5777 } else {
5778 i++;
5779 if (i >= nr) {
5780 i = 0;
5781 j++;
5782 fprintf(out, "\n");
5783 }
5784 }
5785 }
5786
5787 /* Close file... */
5788 fclose(out);
5789
5790 /* Free... */
5791 free(cida);
5792 free(ciqa);
5793 free(cipa);
5794 free(cira);
5795 free(rida);
5796 free(riqa);
5797 free(ripa);
5798 free(rira);
5799}
void idx2name(const ctl_t *ctl, const int idx, char *quantity)
Determine name of state vector quantity for given index.
Definition: jurassic.c:3728
#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 5803 of file jurassic.c.

5807 {
5808
5809 FILE *out;
5810
5811 char file[LEN];
5812
5813 int n = 10;
5814
5815 /* Set filename... */
5816 if (dirname != NULL)
5817 sprintf(file, "%s/%s", dirname, filename);
5818 else
5819 sprintf(file, "%s", filename);
5820
5821 /* Write info... */
5822 LOG(1, "Write observation data: %s", file);
5823
5824 /* Create file... */
5825 if (!(out = fopen(file, "w")))
5826 ERRMSG("Cannot create file!");
5827
5828 /* Write header... */
5829 fprintf(out,
5830 "# $1 = time (seconds since 2000-01-01T00:00Z)\n"
5831 "# $2 = observer altitude [km]\n"
5832 "# $3 = observer longitude [deg]\n"
5833 "# $4 = observer latitude [deg]\n"
5834 "# $5 = view point altitude [km]\n"
5835 "# $6 = view point longitude [deg]\n"
5836 "# $7 = view point latitude [deg]\n"
5837 "# $8 = tangent point altitude [km]\n"
5838 "# $9 = tangent point longitude [deg]\n"
5839 "# $10 = tangent point latitude [deg]\n");
5840 for (int id = 0; id < ctl->nd; id++)
5841 if (ctl->write_bbt)
5842 fprintf(out, "# $%d = brightness temperature (%.4f cm^-1) [K]\n",
5843 ++n, ctl->nu[id]);
5844 else
5845 fprintf(out, "# $%d = radiance (%.4f cm^-1) [W/(m^2 sr cm^-1)]\n",
5846 ++n, ctl->nu[id]);
5847 for (int id = 0; id < ctl->nd; id++)
5848 fprintf(out, "# $%d = transmittance (%.4f cm^-1) [-]\n", ++n,
5849 ctl->nu[id]);
5850
5851 /* Write data... */
5852 for (int ir = 0; ir < obs->nr; ir++) {
5853 if (ir == 0 || obs->time[ir] != obs->time[ir - 1])
5854 fprintf(out, "\n");
5855 fprintf(out, "%.2f %g %g %g %g %g %g %g %g %g", obs->time[ir],
5856 obs->obsz[ir], obs->obslon[ir], obs->obslat[ir],
5857 obs->vpz[ir], obs->vplon[ir], obs->vplat[ir],
5858 obs->tpz[ir], obs->tplon[ir], obs->tplat[ir]);
5859 for (int id = 0; id < ctl->nd; id++)
5860 fprintf(out, " %g", obs->rad[id][ir]);
5861 for (int id = 0; id < ctl->nd; id++)
5862 fprintf(out, " %g", obs->tau[id][ir]);
5863 fprintf(out, "\n");
5864 }
5865
5866 /* Close file... */
5867 fclose(out);
5868
5869 /* Write info... */
5870 double mini, maxi;
5871 LOG(2, "Number of ray paths: %d", obs->nr);
5872 gsl_stats_minmax(&mini, &maxi, obs->time, 1, (size_t) obs->nr);
5873 LOG(2, "Time range: %.2f ... %.2f s", mini, maxi);
5874 gsl_stats_minmax(&mini, &maxi, obs->obsz, 1, (size_t) obs->nr);
5875 LOG(2, "Observer altitude range: %g ... %g km", mini, maxi);
5876 gsl_stats_minmax(&mini, &maxi, obs->obslon, 1, (size_t) obs->nr);
5877 LOG(2, "Observer longitude range: %g ... %g deg", mini, maxi);
5878 gsl_stats_minmax(&mini, &maxi, obs->obslat, 1, (size_t) obs->nr);
5879 LOG(2, "Observer latitude range: %g ... %g deg", mini, maxi);
5880 gsl_stats_minmax(&mini, &maxi, obs->vpz, 1, (size_t) obs->nr);
5881 LOG(2, "View point altitude range: %g ... %g km", mini, maxi);
5882 gsl_stats_minmax(&mini, &maxi, obs->vplon, 1, (size_t) obs->nr);
5883 LOG(2, "View point longitude range: %g ... %g deg", mini, maxi);
5884 gsl_stats_minmax(&mini, &maxi, obs->vplat, 1, (size_t) obs->nr);
5885 LOG(2, "View point latitude range: %g ... %g deg", mini, maxi);
5886 gsl_stats_minmax(&mini, &maxi, obs->tpz, 1, (size_t) obs->nr);
5887 LOG(2, "Tangent point altitude range: %g ... %g km", mini, maxi);
5888 gsl_stats_minmax(&mini, &maxi, obs->tplon, 1, (size_t) obs->nr);
5889 LOG(2, "Tangent point longitude range: %g ... %g deg", mini, maxi);
5890 gsl_stats_minmax(&mini, &maxi, obs->tplat, 1, (size_t) obs->nr);
5891 LOG(2, "Tangent point latitude range: %g ... %g deg", mini, maxi);
5892 for (int id = 0; id < ctl->nd; id++) {
5893 gsl_stats_minmax(&mini, &maxi, obs->rad[id], 1, (size_t) obs->nr);
5894 if (ctl->write_bbt) {
5895 LOG(2, "Brightness temperature (%.4f cm^-1) range: %g ... %g K",
5896 ctl->nu[id], mini, maxi);
5897 } else {
5898 LOG(2, "Radiance (%.4f cm^-1) range: %g ... %g W/(m^2 sr cm^-1)",
5899 ctl->nu[id], mini, maxi);
5900 }
5901 }
5902 for (int id = 0; id < ctl->nd; id++) {
5903 gsl_stats_minmax(&mini, &maxi, obs->tau[id], 1, (size_t) obs->nr);
5904 if (ctl->write_bbt) {
5905 LOG(2, "Transmittance (%.4f cm^-1) range: %g ... %g",
5906 ctl->nu[id], mini, maxi);
5907 }
5908 }
5909}

◆ write_shape()

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

Write shape function.

Definition at line 5913 of file jurassic.c.

5917 {
5918
5919 FILE *out;
5920
5921 /* Write info... */
5922 LOG(1, "Write shape function: %s", filename);
5923
5924 /* Create file... */
5925 if (!(out = fopen(filename, "w")))
5926 ERRMSG("Cannot create file!");
5927
5928 /* Write header... */
5929 fprintf(out,
5930 "# $1 = shape function x-value [-]\n"
5931 "# $2 = shape function y-value [-]\n\n");
5932
5933 /* Write data... */
5934 for (int i = 0; i < n; i++)
5935 fprintf(out, "%.10g %.10g\n", x[i], y[i]);
5936
5937 /* Close file... */
5938 fclose(out);
5939}

◆ write_tbl()

void write_tbl ( const ctl_t ctl,
const tbl_t tbl 
)

Write look-up table data.

Definition at line 5943 of file jurassic.c.

5945 {
5946
5947 FILE *out;
5948
5949 char filename[2 * LEN];
5950
5951 /* Loop over emitters and detectors... */
5952 for (int ig = 0; ig < ctl->ng; ig++)
5953 for (int id = 0; id < ctl->nd; id++) {
5954
5955 /* Set filename... */
5956 sprintf(filename, "%s_%.4f_%s.%s", ctl->tblbase,
5957 ctl->nu[id], ctl->emitter[ig],
5958 ctl->tblfmt == 1 ? "tab" : "bin");
5959
5960 /* Write info... */
5961 LOG(1, "Write emissivity table: %s", filename);
5962
5963 /* Create file... */
5964 if (!(out = fopen(filename, "w")))
5965 ERRMSG("Cannot create file!");
5966
5967 /* Write ASCII data... */
5968 if (ctl->tblfmt == 1) {
5969
5970 /* Write header... */
5971 fprintf(out,
5972 "# $1 = pressure [hPa]\n"
5973 "# $2 = temperature [K]\n"
5974 "# $3 = column density [molecules/cm^2]\n"
5975 "# $4 = emissivity [-]\n");
5976
5977 /* Save table file... */
5978 for (int ip = 0; ip < tbl->np[id][ig]; ip++)
5979 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
5980 fprintf(out, "\n");
5981 for (int iu = 0; iu < tbl->nu[id][ig][ip][it]; iu++)
5982 fprintf(out, "%g %g %e %e\n",
5983 tbl->p[id][ig][ip], tbl->t[id][ig][ip][it],
5984 tbl->u[id][ig][ip][it][iu],
5985 tbl->eps[id][ig][ip][it][iu]);
5986 }
5987 }
5988
5989 /* Write binary data... */
5990 else if (ctl->tblfmt == 2) {
5991 FWRITE(&tbl->np[id][ig], int,
5992 1,
5993 out);
5994 FWRITE(tbl->p[id][ig], double,
5995 (size_t) tbl->np[id][ig],
5996 out);
5997 for (int ip = 0; ip < tbl->np[id][ig]; ip++) {
5998 FWRITE(&tbl->nt[id][ig][ip], int,
5999 1,
6000 out);
6001 FWRITE(tbl->t[id][ig][ip], double,
6002 (size_t) tbl->nt[id][ig][ip],
6003 out);
6004 for (int it = 0; it < tbl->nt[id][ig][ip]; it++) {
6005 FWRITE(&tbl->nu[id][ig][ip][it], int,
6006 1,
6007 out);
6008 FWRITE(tbl->u[id][ig][ip][it], float,
6009 (size_t) tbl->nu[id][ig][ip][it],
6010 out);
6011 FWRITE(tbl->eps[id][ig][ip][it], float,
6012 (size_t) tbl->nu[id][ig][ip][it],
6013 out);
6014 }
6015 }
6016 }
6017
6018 /* Error message... */
6019 else
6020 ERRMSG("Unknown look-up table format!");
6021
6022 /* Close file... */
6023 fclose(out);
6024 }
6025}
#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 6029 of file jurassic.c.

6032 {
6033
6034 size_t n = 0;
6035
6036 /* Get pressure... */
6037 for (int ip = 0; ip < atm->np; ip++)
6038 if (atm->z[ip] >= ctl->retp_zmin && atm->z[ip] <= ctl->retp_zmax)
6039 x2atm_help(&atm->p[ip], x, &n);
6040
6041 /* Get temperature... */
6042 for (int ip = 0; ip < atm->np; ip++)
6043 if (atm->z[ip] >= ctl->rett_zmin && atm->z[ip] <= ctl->rett_zmax)
6044 x2atm_help(&atm->t[ip], x, &n);
6045
6046 /* Get volume mixing ratio... */
6047 for (int ig = 0; ig < ctl->ng; ig++)
6048 for (int ip = 0; ip < atm->np; ip++)
6049 if (atm->z[ip] >= ctl->retq_zmin[ig]
6050 && atm->z[ip] <= ctl->retq_zmax[ig])
6051 x2atm_help(&atm->q[ig][ip], x, &n);
6052
6053 /* Get extinction... */
6054 for (int iw = 0; iw < ctl->nw; iw++)
6055 for (int ip = 0; ip < atm->np; ip++)
6056 if (atm->z[ip] >= ctl->retk_zmin[iw]
6057 && atm->z[ip] <= ctl->retk_zmax[iw])
6058 x2atm_help(&atm->k[iw][ip], x, &n);
6059
6060 /* Get cloud data... */
6061 if (ctl->ret_clz)
6062 x2atm_help(&atm->clz, x, &n);
6063 if (ctl->ret_cldz)
6064 x2atm_help(&atm->cldz, x, &n);
6065 if (ctl->ret_clk)
6066 for (int icl = 0; icl < ctl->ncl; icl++)
6067 x2atm_help(&atm->clk[icl], x, &n);
6068
6069 /* Get surface data... */
6070 if (ctl->ret_sft)
6071 x2atm_help(&atm->sft, x, &n);
6072 if (ctl->ret_sfeps)
6073 for (int isf = 0; isf < ctl->nsf; isf++)
6074 x2atm_help(&atm->sfeps[isf], x, &n);
6075}
void x2atm_help(double *value, const gsl_vector *x, size_t *n)
Get element from state vector.
Definition: jurassic.c:6079
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 6079 of file jurassic.c.

6082 {
6083
6084 /* Get state vector element... */
6085 *value = gsl_vector_get(x, *n);
6086 (*n)++;
6087}

◆ y2obs()

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

Decompose measurement vector.

Definition at line 6091 of file jurassic.c.

6094 {
6095
6096 size_t m = 0;
6097
6098 /* Decompose measurement vector... */
6099 for (int ir = 0; ir < obs->nr; ir++)
6100 for (int id = 0; id < ctl->nd; id++)
6101 if (isfinite(obs->rad[id][ir])) {
6102 obs->rad[id][ir] = gsl_vector_get(y, m);
6103 m++;
6104 }
6105}