00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00026 #ifndef gas_abs_lookup_h
00027 #define gas_abs_lookup_h
00028
00029 #include "matpackIV.h"
00030 #include "absorption.h"
00031 #include "abs_species_tags.h"
00032
00033
00034 class bifstream;
00035 class bofstream;
00036 class Agenda;
00037 class Workspace;
00038
00040
00043 class GasAbsLookup {
00044 public:
00045 GasAbsLookup() : species(),
00046 nonlinear_species(),
00047 f_grid(),
00048 p_grid(),
00049 vmrs_ref(),
00050 t_ref(),
00051 t_pert(),
00052 nls_pert(),
00053 xsec()
00054 { }
00055
00056
00057 void Adapt( const ArrayOfArrayOfSpeciesTag& current_species,
00058 ConstVectorView current_f_grid );
00059
00060
00061 void Extract( Matrix& sga,
00062 const Index& p_interp_order,
00063 const Index& t_interp_order,
00064 const Index& h2o_interp_order,
00065 const Index& f_index,
00066 const Numeric& p,
00067 const Numeric& T,
00068 ConstVectorView abs_vmrs ) const;
00069
00070 void GetFgrid( Vector& f ) const;
00071
00072 void GetPgrid( Vector& p ) const;
00073
00074
00075 friend void xml_read_from_stream( istream& is_xml,
00076 GasAbsLookup& gal,
00077 bifstream *pbifs );
00078 friend void xml_write_to_stream ( ostream& os_xml,
00079 const GasAbsLookup& gal,
00080 bofstream *pbofs,
00081 const String& name);
00082
00083 friend void abs_lookupCreate(
00084 GasAbsLookup& abs_lookup,
00085 Index& abs_lookup_is_adapted,
00086
00087 const ArrayOfArrayOfSpeciesTag& abs_species,
00088 const ArrayOfArrayOfLineRecord& abs_lines_per_species,
00089 const ArrayOfLineshapeSpec& abs_lineshape,
00090 const ArrayOfArrayOfSpeciesTag& abs_nls,
00091 const Vector& f_grid,
00092 const Vector& abs_p,
00093 const Matrix& abs_vmrs,
00094 const Vector& abs_t,
00095 const Vector& abs_t_pert,
00096 const Vector& abs_nls_pert,
00097 const Vector& abs_n2,
00098 const ArrayOfString& abs_cont_names,
00099 const ArrayOfString& abs_cont_models,
00100 const ArrayOfVector& abs_cont_parameters );
00101
00102 friend Numeric calc_lookup_error(
00103 const GasAbsLookup& al,
00104 const Index& abs_p_interp_order,
00105 const Index& abs_t_interp_order,
00106 const Index& abs_nls_interp_order,
00107 const bool ignore_errors,
00108
00109 const Vector& abs_n2,
00110 const ArrayOfArrayOfLineRecord& abs_lines_per_species,
00111 const ArrayOfLineshapeSpec& abs_lineshape,
00112 const ArrayOfString& abs_cont_names,
00113 const ArrayOfString& abs_cont_models,
00114 const ArrayOfVector& abs_cont_parameters,
00115
00116 const Numeric& local_p,
00117 const Numeric& local_t,
00118 const Vector& local_vmrs);
00119
00120 friend void abs_lookupTestAccuracy(
00121 const GasAbsLookup& abs_lookup,
00122 const Index& abs_lookup_is_adapted,
00123 const Index& abs_p_interp_order,
00124 const Index& abs_t_interp_order,
00125 const Index& abs_nls_interp_order,
00126 const Vector& abs_n2,
00127 const ArrayOfArrayOfLineRecord& abs_lines_per_species,
00128 const ArrayOfLineshapeSpec& abs_lineshape,
00129 const ArrayOfString& abs_cont_names,
00130 const ArrayOfString& abs_cont_models,
00131 const ArrayOfVector& abs_cont_parameters );
00132
00133 private:
00134
00136 ArrayOfArrayOfSpeciesTag species;
00137
00139
00145 ArrayOfIndex nonlinear_species;
00146
00148
00149 Vector f_grid;
00150
00152
00153 Vector p_grid;
00154
00156
00161 Vector log_p_grid;
00162
00164
00171 Matrix vmrs_ref;
00172
00174
00176 Vector t_ref;
00177
00179
00190 Vector t_pert;
00191
00193
00205 Vector nls_pert;
00206
00208
00239 Tensor4 xsec;
00240
00241 };
00242
00243
00244 ostream& operator<< (ostream& os, const GasAbsLookup& gal);
00245
00246 #endif // gas_abs_lookup_h