00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00036 #ifndef rte_h
00037 #define rte_h
00038
00039
00040
00041
00042
00043 #include "agenda_class.h"
00044 #include "arts.h"
00045 #include "complex.h"
00046 #include "ppath.h"
00047 #include "matpackII.h"
00048 #include "matpackIII.h"
00049
00050
00051
00052
00053
00054
00055 void apply_y_unit(
00056 MatrixView iy,
00057 const String& y_unit,
00058 const Vector& f_grid );
00059
00060 void apply_y_unit_single(
00061 Vector& i,
00062 const String& y_unit,
00063 const Numeric& f );
00064
00065 void include_trans_in_diy_dq(
00066 ArrayOfTensor4& diy_dq,
00067 const Index& iv,
00068 bool pol_trans,
00069 ConstMatrixView trans,
00070 const ArrayOfPpath& ppath_array,
00071 const Index& ppath_array_index );
00072
00073 void iy_calc( Workspace& ws,
00074 Matrix& iy,
00075 Ppath& ppath,
00076 Index& ppath_array_index,
00077 ArrayOfPpath& ppath_array,
00078 ArrayOfTensor4& diy_dvmr,
00079 ArrayOfTensor4& diy_dt,
00080 const Agenda& ppath_step_agenda,
00081 const Agenda& rte_agenda,
00082 const Agenda& iy_space_agenda,
00083 const Agenda& surface_prop_agenda,
00084 const Agenda& iy_cloudbox_agenda,
00085 const Index& atmosphere_dim,
00086 const Vector& p_grid,
00087 const Vector& lat_grid,
00088 const Vector& lon_grid,
00089 const Tensor3& z_field,
00090 const Tensor3& t_field,
00091 const Tensor4& vmr_field,
00092 const Matrix& r_geoid,
00093 const Matrix& z_surface,
00094 const Index& cloudbox_on,
00095 const ArrayOfIndex& cloudbox_limits,
00096 const Vector& pos,
00097 const Vector& los,
00098 const Vector& f_grid,
00099 const Index& stokes_dim,
00100 const Index& ppath_array_do,
00101 const ArrayOfIndex& rte_do_vmr_jacs,
00102 const Index& rte_do_t_jacs );
00103
00104 void iy_calc_no_jacobian(
00105 Workspace& ws,
00106 Matrix& iy,
00107 Ppath& ppath,
00108 const Agenda& ppath_step_agenda,
00109 const Agenda& rte_agenda,
00110 const Agenda& iy_space_agenda,
00111 const Agenda& surface_prop_agenda,
00112 const Agenda& iy_cloudbox_agenda,
00113 const Index& atmosphere_dim,
00114 const Vector& p_grid,
00115 const Vector& lat_grid,
00116 const Vector& lon_grid,
00117 const Tensor3& z_field,
00118 const Tensor3& t_field,
00119 const Tensor4& vmr_field,
00120 const Matrix& r_geoid,
00121 const Matrix& z_surface,
00122 const Index& cloudbox_on,
00123 const ArrayOfIndex& cloudbox_limits,
00124 const Vector& pos,
00125 const Vector& los,
00126 const Vector& f_grid,
00127 const Index& stokes_dim );
00128
00129 void rte_step_std(
00130
00131 VectorView stokes_vec,
00132 MatrixView trans_mat,
00133
00134 ConstMatrixView ext_mat_av,
00135 ConstVectorView abs_vec_av,
00136 ConstVectorView sca_vec_av,
00137 const Numeric& l_step,
00138 const Numeric& rte_planck_value );
00139
00140 void rte_std(Workspace& ws,
00141 Matrix& iy,
00142 Tensor4& ppath_transmissions,
00143 ArrayOfTensor4& diy_dvmr,
00144 ArrayOfTensor4& diy_dt,
00145 const Ppath& ppath,
00146 const ArrayOfPpath& ppath_array,
00147 const Index& ppath_array_index,
00148 const Vector& f_grid,
00149 const Index& stokes_dim,
00150 const Agenda& emission_agenda,
00151 const Agenda& abs_scalar_gas_agenda,
00152 const ArrayOfIndex& rte_do_gas_jacs,
00153 const Index& rte_do_t_jacs,
00154 const bool& do_transmissions );
00155
00156 void rtecalc_check_input(
00157 Index& nf,
00158 Index& nmblock,
00159 Index& nza,
00160 Index& naa,
00161 Index& nblock,
00162 const Index& atmosphere_dim,
00163 const Vector& p_grid,
00164 const Vector& lat_grid,
00165 const Vector& lon_grid,
00166 const Tensor3& z_field,
00167 const Tensor3& t_field,
00168 const Matrix& r_geoid,
00169 const Matrix& z_surface,
00170 const Index& cloudbox_on,
00171 const ArrayOfIndex& cloudbox_limits,
00172 const Sparse& sensor_response,
00173 const Matrix& sensor_pos,
00174 const Matrix& sensor_los,
00175 const Vector& f_grid,
00176 const Index& stokes_dim,
00177 const Index& antenna_dim,
00178 const Vector& mblock_za_grid,
00179 const Vector& mblock_aa_grid,
00180 const String& y_unit,
00181 const String& jacobian_unit );
00182
00183 void surface_calc(
00184 Matrix& iy,
00185 const Tensor3& I,
00186 const Matrix& surface_los,
00187 const Tensor4& surface_rmatrix,
00188 const Matrix& surface_emission );
00189
00190
00191
00192 #endif // rte_h