icedb  version 0.5.1
Snow particle scattering database API
refractBoost.hpp
Go to the documentation of this file.
1 #pragma once
2 #include "../defs.h"
3 
4 #include <complex>
5 #include <functional>
6 #include <iostream>
7 #include <map>
8 #include <string>
9 #include <vector>
10 #include <boost/parameter/keyword.hpp>
11 #include <boost/parameter/name.hpp>
12 #include <boost/parameter/preprocessor.hpp>
13 #include <boost/lexical_cast.hpp>
14 #include "../units/units.hpp"
15 #include "refractBase.hpp"
16 #include "../optionsForwards.hpp"
17 
18 namespace icedb {
19  namespace refract {
20  namespace boost {
21 
24  BOOST_PARAMETER_NAME(frequency)
25  BOOST_PARAMETER_NAME(temperature)
26  BOOST_PARAMETER_NAME(salinity)
27  BOOST_PARAMETER_NAME(temp_units)
28  BOOST_PARAMETER_NAME(freq_units)
29  BOOST_PARAMETER_NAME(salinity_units)
30  BOOST_PARAMETER_NAME(m)
31  BOOST_PARAMETER_NAME(provider)
32 
33 
34 #define standardGenericProvider(name) \
35  BOOST_PARAMETER_FUNCTION( \
36  (void), \
37  name, \
38  tag, \
39  (required \
40  (frequency, (double)) \
41  (temperature, (double)) \
42  (in_out(m), *)) \
43  (optional \
44  (freq_units, *, std::string("GHz")) \
45  (temp_units, *, std::string("K")) \
46  (provider, (const char*), "")) \
47  ) \
48  { \
49  double freq = rtmath::units::conv_spec(freq_units, "GHz").convert(frequency); \
50  double temp = rtmath::units::converter(temp_units, "degK").convert(temperature); \
51  implementations:: name(freq, temp, m, provider); \
52  }
53 
57 
58 #define standardFTmProvider(name) \
59  BOOST_PARAMETER_FUNCTION( \
60  (void), \
61  name, \
62  tag, \
63  (required \
64  (frequency, (double)) \
65  (temperature, (double)) \
66  (in_out(m), *)) \
67  (optional \
68  (freq_units, *, std::string("GHz")) \
69  (temp_units, *, std::string("degK"))) \
70  ) \
71  { \
72  double freq = rtmath::units::conv_spec(freq_units, "GHz").convert(frequency); \
73  double temp = rtmath::units::converter(temp_units, "degK").convert(temperature); \
74  implementations:: name(freq, temp, m); \
75  }
76 
81 
82 #define standardLmProvider(name) \
83  BOOST_PARAMETER_FUNCTION( \
84  (void), \
85  name, \
86  tag, \
87  (required \
88  (frequency, (double)) \
89  (in_out(m), *) ) \
90  (optional \
91  (temperature, (double), 0) \
92  (freq_units, *, std::string("GHz")) \
93  (temp_units, *, std::string("degK")) ) \
94  ) \
95  { \
96  double lambda = rtmath::units::conv_spec(freq_units, "um").convert(frequency); \
97  double temp = rtmath::units::converter(temp_units, "degK").convert(temperature); \
98  implementations:: name(lambda, m); \
99  }
100 
108 
109  }
110  }
111 }
112 
void mIceWarren(double f, double t, std::complex< double > &m)
Ice complex refractive index for microwave/uv.
void mWaterHanel(double lambda, std::complex< double > &m)
Water complex refractive index for ir/vis.
void mIceMatzler(double f, double t, std::complex< double > &m)
void mNaClHanel(double lambda, std::complex< double > &m)
Sodium chloride refractive index for ir/vis.
void mSandEHanel(double lambda, std::complex< double > &m)
Sand E-ray refractive index for ir/vis (birefringent)
void mSandOHanel(double lambda, std::complex< double > &m)
Sand O-ray refractvie index for ir/vis (birefringent)
standardFTmProvider(mWaterLiebe)
standardLmProvider(mWaterHanel)
void mDustHanel(double lambda, std::complex< double > &m)
Dust-like particle refractive index for ir/vis.
void mWaterLiebe(double f, double t, std::complex< double > &m)
void mWaterFreshMeissnerWentz(double f, double t, std::complex< double > &m)
standardGenericProvider(mWater)
void mIceHanel(double lambda, std::complex< double > &m)
Ice complex refractive index for ir/vis.
void mSeaSaltHanel(double lambda, std::complex< double > &m)
Sea salt refractive index for ir/vis.