4 #include <boost/noncopyable.hpp> 5 #include <blitz/array.h> 29 LRadDriver(
int Number_stream,
int Number_stokes,
31 bool Tms_Correction =
false,
32 bool Pure_nadir =
false,
33 const PsMode ps_mode = DETECT);
44 virtual void setup_geometry(blitz::Array<double, 1> alt,
double sza,
double zen,
double azm)
const;
52 const blitz::Array<double, 1>& ssa,
53 const blitz::Array<double, 3>& pf,
54 const blitz::Array<double, 2>& zmat);
76 virtual blitz::Array<double, 1>
stokes()
const;
84 virtual void print(std::ostream& Os,
bool Short_form =
false)
const;
90 void set_ps_mode(
const PsMode& mode)
123 void initialize(
const PsMode ps_mode);
124 void check_rt_inputs();
127 int nstream, nstokes;
129 bool use_tms_correction;
131 bool regular_ps, enhanced_ps;
135 int need_jacobians_i;
138 blitz::Array<double, 1> surface_param_f;
139 blitz::Array<double, 1> tau_f;
140 blitz::Array<double, 1> omega_f;
141 blitz::Array<double, 3> pf_f;
142 blitz::Array<double, 2> zmat_f;
143 blitz::Array<double, 1> fscale_f;
144 blitz::Array<double, 3> jac_atm_f;
145 blitz::Array<double, 2> jac_surf_f;
146 blitz::Array<double, 2> l_tau_f;
147 blitz::Array<double, 2> l_omega_f;
148 blitz::Array<double, 4> l_pf_f;
149 blitz::Array<double, 3> l_zmat_f;
150 blitz::Array<double, 2> l_fscale_f;
151 blitz::Array<double, 1> stokes_val_f;
155 mutable void *l_rad_struct;
virtual blitz::Array< double, 3 > atmospheric_jacobian() const
Atmospheric jacobian from last calculation.
virtual void calculate_first_order()
Perform radiative transfer calculation with the values setup by setup_optical_inputs and setup_linear...
virtual void setup_geometry(blitz::Array< double, 1 > alt, double sza, double zen, double azm) const
Setup viewing geometry, should only be called once per instance or if the viewing geometry changes...
virtual int number_stokes() const
This is a Mixin for classes that can be printed.
virtual void print(std::ostream &Os, bool Short_form=false) const
virtual void setup_linear_inputs(const ArrayAd< double, 1 > &od, const ArrayAd< double, 1 > &ssa, const ArrayAd< double, 3 > &pf, const ArrayAd< double, 2 > &zmat)
Set up linearization, weighting functions.
virtual int number_stream() const
virtual blitz::Array< double, 2 > surface_jacobian() const
Surface jacobian.
virtual blitz::Array< double, 1 > stokes() const
Retrieve the stokes values calculated.
LRadDriver(int Number_stream, int Number_stokes, int surface_type, bool Tms_Correction=false, bool Pure_nadir=false, const PsMode ps_mode=DETECT)
virtual void setup_surface_params(const blitz::Array< double, 1 > &surface_param)
Set up surface parameters for spectral point.
ArrayAd< double, 2 > z_matrix(const ArrayAd< double, 3 > &pf) const
Calculate the z matrix.
This class drives the LRAD code, which gives a polarization correction to scalar intensity and jacobi...
virtual void setup_optical_inputs(const blitz::Array< double, 1 > &od, const blitz::Array< double, 1 > &ssa, const blitz::Array< double, 3 > &pf, const blitz::Array< double, 2 > &zmat)
Set up optical depth, single scattering albedo and scattering matrix Should be called per spectral po...
Contains classes to abstract away details in various Spurr Radiative Transfer software.
virtual ~LRadDriver()
Destructor.
virtual void clear_linear_inputs()
Mark that we are not retrieving weighting functions.
virtual void calculate_second_order()
Perform radiative transfer calculation with the values setup by setup_optical_inputs and setup_linear...