cloudy  trunk
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Data Structures | Macros | Enumerations | Functions | Variables
grains_mie.cpp File Reference
#include <ctype.h>
#include "cddefines.h"
#include "elementnames.h"
#include "physconst.h"
#include "dense.h"
#include "called.h"
#include "version.h"
#include "grainvar.h"
#include "rfield.h"
#include "atmdat.h"
#include "grains.h"
Include dependency graph for grains_mie.cpp:

Go to the source code of this file.

Data Structures

struct  sd_data
 
struct  grain_data
 

Macros

#define NPTS_DERIV   8
 
#define NPTS_COMB   (NPTS_DERIV*(NPTS_DERIV-1)/2)
 
#define NMXLIM   16000
 

Enumerations

enum  rfi_type { RFI_TABLE, OPC_TABLE, OPC_GREY, OPC_PAH1 }
 
enum  emt_type { FARAFONOV00, STOGNIENKO95, BRUGGEMAN35 }
 
enum  sd_type {
  SD_ILLEGAL, SD_SINGLE_SIZE, SD_POWERLAW, SD_EXP_CUTOFF1,
  SD_EXP_CUTOFF2, SD_EXP_CUTOFF3, SD_LOG_NORMAL, SD_LIN_NORMAL,
  SD_TABLE
}
 

Functions

STATIC void mie_auxiliary (sd_data *, const char *)
 
STATIC void mie_integrate (sd_data *, double, double, double *, bool)
 
STATIC void mie_cs_size_distr (double, sd_data *, grain_data *, void(*)(double, sd_data *, grain_data *, double *, double *, double *, int *), double *, double *, double *, int *)
 
STATIC void mie_cs (double, sd_data *, grain_data *, double *, double *, double *, int *)
 
STATIC void pah1_fun (double, sd_data *, grain_data *, double *, double *, double *, int *)
 
STATIC void tbl_fun (double, sd_data *, grain_data *, double *, double *, double *, int *)
 
STATIC double size_distr (double, sd_data *)
 
STATIC double search_limit (double, double, double, sd_data)
 
STATIC void mie_calc_ial (grain_data *, long, double[], const char *, bool *)
 
STATIC void mie_repair (const char *, long, int, int, realnum[], double[], int[], bool, bool *)
 
STATIC double mie_find_slope (const realnum[], const double[], const int[], long, long, int, bool, bool *)
 
STATIC void mie_read_rfi (const char *, grain_data *)
 
STATIC void mie_read_mix (const char *, grain_data *)
 
STATIC void init_eps (double, long, grain_data[], complex< double >[])
 
STATIC complex< double > cnewton (void(*)(complex< double >, double[], complex< double >[], long, complex< double > *, double *, double *), double[], complex< double >[], long, complex< double >, double)
 
STATIC void Stognienko (complex< double >, double[], complex< double >[], long, complex< double > *, double *, double *)
 
STATIC void Bruggeman (complex< double >, double[], complex< double >[], long, complex< double > *, double *, double *)
 
STATIC void mie_read_szd (const char *, sd_data *)
 
STATIC void mie_read_long (const char *, const char[], long int *, bool, long int)
 
STATIC void mie_read_realnum (const char *, const char[], realnum *, bool, long int)
 
STATIC void mie_read_double (const char *, const char[], double *, bool, long int)
 
STATIC void mie_read_form (const char *, double[], double *, double *)
 
STATIC void mie_write_form (const double[], char[])
 
STATIC void mie_read_word (const char[], char[], long, int)
 
STATIC void mie_next_data (const char *, FILE *, char *, long int *)
 
STATIC void mie_next_line (const char *, FILE *, char *, long int *)
 
STATIC void sinpar (double, double, double, double *, double *, double *, double *, double *, long *)
 
STATIC void anomal (double, double *, double *, double *, double *, double, double)
 
STATIC void bigk (complex< double >, complex< double > *)
 
STATIC void ritodf (double, double, double *, double *)
 
STATIC void dftori (double *, double *, double, double)
 
void mie_write_opc (const char *rfi_file, const char *szd_file, long int nbin)
 
void mie_read_opc (const char *chFile, GrainPar gp)
 
STATIC void mie_calc_ial (grain_data *gd, long int n, double invlen[], const char *chString, bool *lgWarning)
 
STATIC void mie_repair (const char *chString, long int n, int val, int del, realnum anu[], double data[], int ErrorIndex[], bool lgRound, bool *lgWarning)
 
STATIC void mie_read_form (const char chWord[], double elmAbun[], double *no_atoms, double *mol_weight)
 
STATIC void mie_next_data (const char *chFile, FILE *io, char chLine[], long int *dl)
 
STATIC void mie_next_line (const char *chFile, FILE *io, char chLine[], long int *dl)
 
void gauss_init (long int nn, double xbot, double xtop, double x[], double a[], double rr[], double ww[])
 
void gauss_legendre (long int nn, double x[], double a[])
 
void find_arr (double x, double xa[], long int n, long int *ind, bool *lgOutOfBounds)
 
STATIC void sinpar (double nre, double nim, double x, double *qext, double *qphase, double *qscat, double *ctbrqs, double *qback, long int *iflag)
 

Variables

static const long MAGIC_RFI = 1030103L
 
static const long MAGIC_SZD = 2010403L
 
static const long MAGIC_OPC = 3030307L
 
static const long MAGIC_MIX = 4030103L
 
static const double SMALLEST_GRAIN = 0.0001*(1.-10.*DBL_EPSILON)
 
static const double LARGEST_GRAIN = 10.*(1.+10.*DBL_EPSILON)
 
static const int NSD = 7
 
static const int ipSize = 0
 
static const int ipBLo = 0
 
static const int ipBHi = 1
 
static const int ipExp = 2
 
static const int ipBeta = 3
 
static const int ipSLo = 4
 
static const int ipSHi = 5
 
static const int ipAlpha = 6
 
static const int ipGCen = 2
 
static const int ipGSig = 3
 
static const int NAX = 3
 
static const int NDAT = 4
 
static const int WORDLEN = 5
 
static const int LABELSUB1 = 3
 
static const int LABELSUB2 = 5
 
static const int LABELSIZE = LABELSUB1 + LABELSUB2 + 4
 
static const long MIX_TABLE_SIZE = 2000L
 
static const double pah1_strength [7] ={1.4e-21,1.8e-21,1.2e-20,6.0e-21,4.0e-20,1.9e-20,1.9e-20}
 
static const double pah1_wlBand [7] ={3.3, 6.18, 7.7, 8.6, 11.3, 12.0, 13.3}
 
static const double pah1_width [7] ={0.024, 0.102, 0.24, 0.168, 0.086, 0.174, 0.174}
 

Macro Definition Documentation

#define NMXLIM   16000

Definition at line 4334 of file grains_mie.cpp.

Referenced by sinpar().

#define NPTS_COMB   (NPTS_DERIV*(NPTS_DERIV-1)/2)

Definition at line 2157 of file grains_mie.cpp.

Referenced by mie_find_slope().

#define NPTS_DERIV   8

Definition at line 2156 of file grains_mie.cpp.

Referenced by mie_find_slope(), and mie_repair().

Enumeration Type Documentation

enum emt_type
Enumerator
FARAFONOV00 
STOGNIENKO95 
BRUGGEMAN35 

Definition at line 75 of file grains_mie.cpp.

enum rfi_type
Enumerator
RFI_TABLE 
OPC_TABLE 
OPC_GREY 
OPC_PAH1 

Definition at line 70 of file grains_mie.cpp.

enum sd_type
Enumerator
SD_ILLEGAL 
SD_SINGLE_SIZE 
SD_POWERLAW 
SD_EXP_CUTOFF1 
SD_EXP_CUTOFF2 
SD_EXP_CUTOFF3 
SD_LOG_NORMAL 
SD_LIN_NORMAL 
SD_TABLE 

Definition at line 80 of file grains_mie.cpp.

Function Documentation

STATIC void anomal ( double  x,
double *  qext,
double *  qabs,
double *  qphase,
double *  xistar,
double  delta,
double  beta 
)

Definition at line 4600 of file grains_mie.cpp.

References bigk(), DEBUG_ENTRY, and POW2.

Referenced by mie_cs().

Here is the call graph for this function:

STATIC void bigk ( complex< double >  cw,
complex< double > *  cbigk 
)

Definition at line 4642 of file grains_mie.cpp.

References DEBUG_ENTRY.

Referenced by anomal().

STATIC void Bruggeman ( complex< double >  x,
double  frdelta[],
complex< double >  eps[],
long  sumAxes,
complex< double > *  f,
double *  dudx,
double *  dudy 
)

Definition at line 3482 of file grains_mie.cpp.

References DEBUG_ENTRY, h2, and POW2.

Referenced by mie_read_mix().

STATIC complex< double > cnewton ( void(*)(complex< double >, double[], complex< double >[], long, complex< double > *, double *, double *)  fun,
double  frdelta[],
complex< double >  eps[],
long  sumAxes,
complex< double >  x0,
double  tol 
)

Definition at line 3391 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, ioQQQ, LOOP_MAX, POW2, ShowMe(), x0, and x1.

Referenced by mie_read_mix().

Here is the call graph for this function:

STATIC void dftori ( double *  nr,
double *  ni,
double  eps1,
double  eps2 
)

Definition at line 4682 of file grains_mie.cpp.

References ASSERT, and DEBUG_ENTRY.

Referenced by mie_read_mix(), and mie_read_rfi().

void find_arr ( double  ,
double  [],
long  int,
long int *  ,
bool *   
)

find index ind such that min(xa[ind],xa[ind+1]) <= x <= max(xa[ind],xa[ind+1]). xa is assumed to be strictly monotically increasing or decreasing. if x is outside the range spanned by xa, lgOutOfBounds is raised and ind is set to -1 n is the number of elements in xa.

Parameters
x
xa[]
n
[out]*ind
[out]*lgOutOfBounds

Definition at line 4244 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, ioQQQ, MAX2, MIN2, and sign3().

Referenced by init_eps(), mie_calc_ial(), mie_cs(), size_distr(), and tbl_fun().

Here is the call graph for this function:

void gauss_init ( long  int,
double  ,
double  ,
double  [],
double  [],
double  [],
double  [] 
)

set up Gaussian quadrature for arbitrary interval

Parameters
nn
xbot
xtop
x[]
a[]
rr[]
ww[]

Definition at line 4104 of file grains_mie.cpp.

References DEBUG_ENTRY.

Referenced by DebyeDeriv(), and mie_integrate().

void gauss_legendre ( long  int,
double  [],
double  [] 
)
set up abscissas and weights for Gauss-Legendre intergration of arbitrary even order 
Parameters
nn
x[]
a[]

Definition at line 4132 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, ioQQQ, MALLOC, POW2, and SAFETY.

Referenced by DebyeDeriv(), and mie_integrate().

STATIC void init_eps ( double  wavlen,
long  nMaterial,
grain_data  gdArr[],
complex< double >  eps[] 
)

Definition at line 3347 of file grains_mie.cpp.

References ASSERT, DEBUG_ENTRY, find_arr(), grain_data::n, grain_data::nAxes, ritodf(), and grain_data::wavlen.

Referenced by mie_read_mix().

Here is the call graph for this function:

STATIC void mie_auxiliary ( sd_data sd,
const char *  auxCase 
)
STATIC void mie_calc_ial ( grain_data ,
long  ,
double  [],
const char *  ,
bool *   
)

Referenced by mie_write_opc().

STATIC void mie_calc_ial ( grain_data gd,
long int  n,
double  invlen[],
const char *  chString,
bool *  lgWarning 
)
STATIC void mie_cs ( double  wavlen,
sd_data sd,
grain_data gd,
double *  cs_abs,
double *  cs_sct,
double *  cosb,
int *  error 
)

Definition at line 1533 of file grains_mie.cpp.

References anomal(), ASSERT, grain_data::cAxis, cdEXIT, sd_data::cSize, DEBUG_ENTRY, find_arr(), ioQQQ, MAX2, grain_data::n, grain_data::ndata, grain_data::nr1, PI, POW2, sinpar(), and grain_data::wavlen.

Referenced by mie_write_opc().

Here is the call graph for this function:

STATIC void mie_cs_size_distr ( double  wavlen,
sd_data sd,
grain_data gd,
void(*)(double, sd_data *, grain_data *, double *,double *, double *, int *)  cs_fun,
double *  cs_abs,
double *  cs_sct,
double *  cosb,
int *  error 
)
STATIC double mie_find_slope ( const realnum  anu[],
const double  data[],
const int  ErrorIndex[],
long  i1,
long  i2,
int  val,
bool  lgVerbose,
bool *  lgWarning 
)

Definition at line 2309 of file grains_mie.cpp.

References ASSERT, DEBUG_ENTRY, ioQQQ, MAX2, NPTS_COMB, NPTS_DERIV, and POW2.

Referenced by mie_repair().

STATIC void mie_integrate ( sd_data sd,
double  amin,
double  amax,
double *  normalization,
bool  lgFreeMem 
)
STATIC void mie_next_data ( const char *  ,
FILE *  ,
char *  ,
long int *   
)
STATIC void mie_next_data ( const char *  chFile,
FILE *  io,
char  chLine[],
long int *  dl 
)

Definition at line 4045 of file grains_mie.cpp.

References DEBUG_ENTRY, and mie_next_line().

Here is the call graph for this function:

STATIC void mie_next_line ( const char *  ,
FILE *  ,
char *  ,
long int *   
)

Referenced by mie_next_data(), and mie_read_opc().

STATIC void mie_next_line ( const char *  chFile,
FILE *  io,
char  chLine[],
long int *  dl 
)

Definition at line 4073 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, FILENAME_PATH_LENGTH_2, ioQQQ, and read_whole_line().

Here is the call graph for this function:

STATIC void mie_read_double ( const char *  chFile,
const char  chLine[],
double *  data,
bool  lgZeroIllegal,
long int  dl 
)

Definition at line 3909 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, and ioQQQ.

Referenced by mie_read_mix(), mie_read_opc(), mie_read_rfi(), and mie_read_szd().

STATIC void mie_read_form ( const char *  ,
double  [],
double *  ,
double *   
)

Referenced by mie_read_rfi().

STATIC void mie_read_form ( const char  chWord[],
double  elmAbun[],
double *  no_atoms,
double *  mol_weight 
)
STATIC void mie_read_long ( const char *  chFile,
const char  chLine[],
long int *  data,
bool  lgZeroIllegal,
long int  dl 
)

Definition at line 3861 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, and ioQQQ.

Referenced by mie_read_mix(), mie_read_opc(), mie_read_rfi(), and mie_read_szd().

STATIC void mie_read_mix ( const char *  chFile,
grain_data gd 
)
void mie_read_opc ( const char *  ,
GrainPar   
)
STATIC void mie_read_realnum ( const char *  chFile,
const char  chLine[],
realnum data,
bool  lgZeroIllegal,
long int  dl 
)

Definition at line 3884 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, and ioQQQ.

Referenced by mie_read_opc().

STATIC void mie_read_rfi ( const char *  chFile,
grain_data gd 
)
STATIC void mie_read_szd ( const char *  chFile,
sd_data sd 
)
STATIC void mie_read_word ( const char  chLine[],
char  chWord[],
long  n,
int  toUpper 
)

Definition at line 4020 of file grains_mie.cpp.

References DEBUG_ENTRY.

Referenced by mie_read_mix(), mie_read_rfi(), and mie_read_szd().

STATIC void mie_repair ( const char *  ,
long  ,
int  ,
int  ,
realnum  [],
double  [],
int  [],
bool  ,
bool *   
)

Referenced by mie_calc_ial(), and mie_write_opc().

STATIC void mie_repair ( const char *  chString,
long int  n,
int  val,
int  del,
realnum  anu[],
double  data[],
int  ErrorIndex[],
bool  lgRound,
bool *  lgWarning 
)

Definition at line 2160 of file grains_mie.cpp.

References cdEXIT, DEBUG_ENTRY, ioQQQ, MAX2, mie_find_slope(), NPTS_DERIV, and ShowMe().

Here is the call graph for this function:

STATIC void mie_write_form ( const double  elmAbun[],
char  chWord[] 
)

Definition at line 3983 of file grains_mie.cpp.

References ASSERT, t_elementnames::chElementSym, DEBUG_ENTRY, elementnames, FILENAME_PATH_LENGTH_2, LIMELM, and nint().

Referenced by mie_read_mix().

Here is the call graph for this function:

void mie_write_opc ( const char *  ,
const char *  ,
long  int 
)
STATIC void pah1_fun ( double  wavl,
sd_data sd,
grain_data gd,
double *  cs_abs,
double *  cs_sct,
double *  cosb,
int *  error 
)
Todo:
2 impose size limits on PAH's, changeover to graphite ??
Todo:
2 detect if PAH's are present in ionized regions ??

Definition at line 1671 of file grains_mie.cpp.

References ATOMIC_MASS_UNIT, t_dense::AtomicWeight, sd_data::cSize, DEBUG_ENTRY, dense, EVRYD, Singleton< T >::Inst(), ipCARBON, ipHYDROGEN, MAX2, MIN2, PHFIT95, PI, POW2, POW3, grain_data::rho, RYD_INF, x1, and x2.

Referenced by mie_write_opc().

Here is the call graph for this function:

STATIC void ritodf ( double  nr,
double  ni,
double *  eps1,
double *  eps2 
)

Definition at line 4667 of file grains_mie.cpp.

References DEBUG_ENTRY.

Referenced by init_eps().

STATIC double search_limit ( double  ref,
double  step,
double  rel_cutoff,
sd_data  sd 
)

Definition at line 2008 of file grains_mie.cpp.

References ASSERT, cdEXIT, DEBUG_ENTRY, ioQQQ, ipBHi, ipBLo, sd_data::lim, MAX2, POW4, size_distr(), SMALLEST_GRAIN, TOLER, x1, and x2.

Referenced by mie_read_szd().

Here is the call graph for this function:

STATIC void sinpar ( double  ,
double  ,
double  ,
double *  ,
double *  ,
double *  ,
double *  ,
double *  ,
long *   
)

Referenced by mie_cs().

STATIC void sinpar ( double  nre,
double  nim,
double  x,
double *  qext,
double *  qphase,
double *  qscat,
double *  ctbrqs,
double *  qback,
long int *  iflag 
)

Definition at line 4336 of file grains_mie.cpp.

References DEBUG_ENTRY, MALLOC, MAX2, MAX4, nint(), NMXLIM, POW2, and POW3.

Here is the call graph for this function:

STATIC double size_distr ( double  size,
sd_data sd 
)
STATIC void Stognienko ( complex< double >  x,
double  frdelta[],
complex< double >  eps[],
long  sumAxes,
complex< double > *  f,
double *  dudx,
double *  dudy 
)

Definition at line 3440 of file grains_mie.cpp.

References DEBUG_ENTRY, h2, PI, and POW2.

Referenced by mie_read_mix().

STATIC void tbl_fun ( double  wavl,
sd_data sd,
grain_data gd,
double *  cs_abs,
double *  cs_sct,
double *  cosb,
int *  error 
)
Todo:
2 include code for interpolating inv_att_len somewhere!!
Todo:
2 why is charge of pah2_ism_01.opc so different??

Definition at line 1882 of file grains_mie.cpp.

References ASSERT, DEBUG_ENTRY, find_arr(), grain_data::nOpcCols, grain_data::nOpcData, grain_data::opcAnu, grain_data::opcData, TotalInsanity(), and WAVNRYD.

Referenced by mie_write_opc().

Here is the call graph for this function:

Variable Documentation

const int ipAlpha = 6
static

Definition at line 65 of file grains_mie.cpp.

Referenced by mie_read_szd(), and size_distr().

const int ipBeta = 3
static

Definition at line 62 of file grains_mie.cpp.

Referenced by mie_read_szd(), and size_distr().

const int ipBHi = 1
static
const int ipBLo = 0
static
const int ipExp = 2
static

Definition at line 61 of file grains_mie.cpp.

Referenced by mie_read_szd(), and size_distr().

const int ipGCen = 2
static

Definition at line 66 of file grains_mie.cpp.

Referenced by mie_read_szd(), and size_distr().

const int ipGSig = 3
static

Definition at line 67 of file grains_mie.cpp.

Referenced by mie_read_szd(), and size_distr().

const int ipSHi = 5
static

Definition at line 64 of file grains_mie.cpp.

Referenced by mie_read_szd(), and size_distr().

const int ipSize = 0
static

Definition at line 58 of file grains_mie.cpp.

Referenced by mie_auxiliary(), mie_cs_size_distr(), and mie_read_szd().

const int ipSLo = 4
static

Definition at line 63 of file grains_mie.cpp.

Referenced by mie_read_szd(), and size_distr().

const int LABELSIZE = LABELSUB1 + LABELSUB2 + 4
static

Definition at line 152 of file grains_mie.cpp.

Referenced by mie_read_opc(), and mie_write_opc().

const int LABELSUB1 = 3
static

Definition at line 150 of file grains_mie.cpp.

Referenced by mie_write_opc().

const int LABELSUB2 = 5
static

Definition at line 151 of file grains_mie.cpp.

Referenced by mie_write_opc().

const double LARGEST_GRAIN = 10.*(1.+10.*DBL_EPSILON)
static

Definition at line 51 of file grains_mie.cpp.

Referenced by mie_read_szd().

const long MAGIC_MIX = 4030103L
static

Definition at line 40 of file grains_mie.cpp.

Referenced by mie_read_mix().

const long MAGIC_OPC = 3030307L
static

Definition at line 39 of file grains_mie.cpp.

Referenced by mie_read_opc(), and mie_write_opc().

const long MAGIC_RFI = 1030103L
static

Definition at line 37 of file grains_mie.cpp.

Referenced by mie_read_rfi().

const long MAGIC_SZD = 2010403L
static

Definition at line 38 of file grains_mie.cpp.

Referenced by mie_read_szd().

const long MIX_TABLE_SIZE = 2000L
static

Definition at line 155 of file grains_mie.cpp.

Referenced by mie_read_mix().

const int NAX = 3
static

Definition at line 112 of file grains_mie.cpp.

Referenced by mie_cs_size_distr(), mie_read_mix(), mie_read_rfi(), and mie_write_opc().

const int NDAT = 4
static

Definition at line 113 of file grains_mie.cpp.

Referenced by mie_read_mix(), mie_read_rfi(), and mie_write_opc().

const int NSD = 7
static

Definition at line 54 of file grains_mie.cpp.

const double pah1_strength[7] ={1.4e-21,1.8e-21,1.2e-20,6.0e-21,4.0e-20,1.9e-20,1.9e-20}
static

Definition at line 1667 of file grains_mie.cpp.

const double pah1_width[7] ={0.024, 0.102, 0.24, 0.168, 0.086, 0.174, 0.174}
static

Definition at line 1669 of file grains_mie.cpp.

const double pah1_wlBand[7] ={3.3, 6.18, 7.7, 8.6, 11.3, 12.0, 13.3}
static

Definition at line 1668 of file grains_mie.cpp.

const double SMALLEST_GRAIN = 0.0001*(1.-10.*DBL_EPSILON)
static

Definition at line 50 of file grains_mie.cpp.

Referenced by mie_read_szd(), and search_limit().

const int WORDLEN = 5
static

Definition at line 147 of file grains_mie.cpp.

Referenced by mie_read_mix(), mie_read_rfi(), and mie_read_szd().


Generated for cloudy by doxygen 1.8.4