1 #ifndef SPURR_RT_DRIVER_H 2 #define SPURR_RT_DRIVER_H 4 #include <boost/shared_ptr.hpp> 5 #include <blitz/array.h> 41 virtual void setup_geometry(
double sza,
double azm,
double zen)
const = 0;
66 virtual void do_kparams_derivs(
const int kernel_index,
const bool do_kparams) = 0;
71 const bool lambertian_flag,
72 const int n_brdf_parameters,
73 const bool do_factor_wfs,
74 const blitz::Array<bool, 1>& do_params_wfs) = 0;
95 : do_solar_sources(do_solar), do_thermal_emission(do_thermal) {}
98 virtual double reflectance_calculate(
const blitz::Array<double, 1>& height_grid,
99 double sza,
double azm,
double zen,
101 const blitz::Array<double, 1>& surface_parameters,
102 const blitz::Array<double, 1>& od,
103 const blitz::Array<double, 1>& ssa,
104 const blitz::Array<double, 2>& pf,
105 double surface_bb = 0,
106 const blitz::Array<double, 1>& atmosphere_bb = blitz::Array<double,1>());
109 virtual void reflectance_and_jacobian_calculate(
const blitz::Array<double, 1>& height_grid,
110 double sza,
double azm,
double zen,
117 blitz::Array<double, 2>& jac_atm,
118 blitz::Array<double, 1>& jac_surf,
119 double surface_bb = 0,
120 const blitz::Array<double, 1>& atmosphere_bb = blitz::Array<double,1>());
127 virtual void setup_height_grid(
const blitz::Array<double, 1>& height_grid)
const = 0;
131 virtual void setup_geometry(
double sza,
double azm,
double zen)
const = 0;
134 virtual void setup_thermal_inputs(
double surface_bb,
const blitz::Array<double, 1> atmosphere_bb)
const = 0;
138 virtual void setup_optical_inputs(
const blitz::Array<double, 1>& od,
139 const blitz::Array<double, 1>& ssa,
140 const blitz::Array<double, 2>& pf)
const = 0;
143 virtual void clear_linear_inputs()
const = 0;
149 bool do_surface_linearization)
const = 0;
153 virtual void calculate_rt()
const = 0;
156 virtual double get_intensity()
const = 0;
159 virtual void copy_jacobians(blitz::Array<double, 2>& jac_atm, blitz::Array<double, 1>& jac_surf)
const = 0;
166 virtual void initialize_rt() = 0;
virtual void setup_coxmunk_inputs(int kernel_index, ArrayAd< double, 1 > &surface_parameters, const blitz::Array< int, 1 > ¶meter_indexes) const
virtual void initialize_brdf_kernel(int kernel_type)
Initializes a specific BRDF kernel based on the kernel type integer Each call adds a new kernel setup...
virtual bool do_shadow_effect() const =0
virtual ArrayAd< double, 1 > setup_brdf_inputs(int surface_type, const ArrayAd< double, 1 > &surface_parameters) const
Sets up the BRDF inputs to be used by the BRDF calculation code This routine is intended to be called...
virtual int n_brdf_kernels() const =0
virtual int n_kernel_params_wfs() const =0
const boost::shared_ptr< SpurrBrdfDriver > brdf_driver() const
Access to BRDF driver.
SpurrRtDriver(bool do_solar=true, bool do_thermal=false)
virtual void setup_geometry(double sza, double azm, double zen) const =0
virtual int n_surface_wfs() const =0
Abstracts away set up of BRDF kernel interfaces.
virtual void initialize_kernel_parameters(const int kernel_index, const int which_brdf, const bool lambertian_flag, const int n_brdf_parameters, const bool do_factor_wfs, const blitz::Array< bool, 1 > &do_params_wfs)=0
blitz::Array< double, 1 > brdf_factors
virtual int n_kernel_factor_wfs() const =0
virtual bool do_kparams_derivs(const int kernel_index) const =0
Abstracts away set up of Radiative Transfer software from Rob Spurr into a simpler common inteface us...
Contains classes to abstract away details in various Spurr Radiative Transfer software.
virtual void setup_breon_inputs(int kernel_index, ArrayAd< double, 1 > &surface_parameters, const blitz::Array< int, 1 > ¶meter_indexes) const
For use with SWIG, it is useful to have a base class that everything can be cast to.
virtual void calculate_brdf() const =0
virtual void initialize_brdf_inputs(int surface_type)
Initializes the BRDF kernels for the given Ground surface type integer.
virtual void setup_lambertian_inputs(int kernel_index, ArrayAd< double, 1 > &surface_parameters, const blitz::Array< int, 1 > ¶meter_indexes) const
boost::shared_ptr< SpurrBrdfDriver > brdf_driver_
Spurr BRDF class interface class to use.
virtual void setup_rahman_inputs(int kernel_index, ArrayAd< double, 1 > &surface_parameters, const blitz::Array< int, 1 > ¶meter_indexes) const
blitz::Array< double, 2 > brdf_params