ARTS  2.0.49
m_ppath.cc
Go to the documentation of this file.
1 /* Copyright (C) 2002-2008 Patrick Eriksson <Patrick.Eriksson@rss.chalmers.se>
2 
3  This program is free software; you can redistribute it and/or modify it
4  under the terms of the GNU General Public License as published by the
5  Free Software Foundation; either version 2, or (at your option) any
6  later version.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; if not, write to the Free Software
15  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
16  USA. */
17 
18 
19 
20 /*===========================================================================
21  === File description
22  ===========================================================================*/
23 
40 /*===========================================================================
41  === External declarations
42  ===========================================================================*/
43 
44 #include <cmath>
45 #include "arts.h"
46 #include "auto_md.h"
47 #include "check_input.h"
48 #include "math_funcs.h"
49 #include "messages.h"
50 #include "ppath.h"
51 #include "special_interp.h"
52 #include "xml_io.h"
53 #include "refraction.h"
54 #include "m_general.h"
55 
56 extern const Numeric RAD2DEG;
57 extern const Numeric DEG2RAD;
58 extern const Numeric EARTH_GRAV_CONST;
59 
60 /*===========================================================================
61  === The functions (in alphabetical order)
62  ===========================================================================*/
63 
64 /* Workspace method: Doxygen documentation will be auto-generated */
66  // WS Output:
67  Ppath& ppath,
68  // WS Input:
69  const Agenda& ppath_step_agenda,
70  const Index& atmosphere_dim,
71  const Vector& p_grid,
72  const Vector& lat_grid,
73  const Vector& lon_grid,
74  const Tensor3& z_field,
75  const Matrix& r_geoid,
76  const Matrix& z_surface,
77  const Index& cloudbox_on,
78  const ArrayOfIndex& cloudbox_limits,
79  const Vector& rte_pos,
80  const Vector& rte_los,
81  const Verbosity& verbosity)
82 {
83  ppath_calc( ws, ppath, ppath_step_agenda, atmosphere_dim,
84  p_grid, lat_grid, lon_grid, z_field, r_geoid, z_surface,
85  cloudbox_on, cloudbox_limits, rte_pos, rte_los, 1,
86  verbosity );
87 }
88 
89 
90 
91 /* Workspace method: Doxygen documentation will be auto-generated */
92 void ppath_stepGeometric(// WS Output:
93  Ppath& ppath_step,
94  // WS Input:
95  const Index& atmosphere_dim,
96  const Vector& p_grid,
97  const Vector& lat_grid,
98  const Vector& lon_grid,
99  const Tensor3& z_field,
100  const Matrix& r_geoid,
101  const Matrix& z_surface,
102  const Numeric& ppath_lmax,
103  const Verbosity&)
104 {
105  // Input checks here would be rather costly as this function is called
106  // many times. So we perform asserts in the sub-functions, but no checks
107  // here.
108 
109  if( atmosphere_dim == 1 )
110  { ppath_step_geom_1d( ppath_step, p_grid, z_field(joker,0,0),
111  r_geoid(0,0), z_surface(0,0), ppath_lmax ); }
112 
113  else if( atmosphere_dim == 2 )
114  { ppath_step_geom_2d( ppath_step, p_grid, lat_grid,
115  z_field(joker,joker,0), r_geoid(joker,0),
116  z_surface(joker,0), ppath_lmax ); }
117 
118 
119  else if( atmosphere_dim == 3 )
120  { ppath_step_geom_3d( ppath_step, p_grid, lat_grid, lon_grid,
121  z_field, r_geoid, z_surface, ppath_lmax ); }
122 
123  else
124  { throw runtime_error( "The atmospheric dimensionality must be 1-3." ); }
125 }
126 
127 
128 
129 /* Workspace method: Doxygen documentation will be auto-generated */
131  // WS Output:
132  Ppath& ppath_step,
133  Numeric& rte_pressure,
134  Numeric& rte_temperature,
135  Vector& rte_vmr_list,
136  Numeric& refr_index,
137  // WS Input:
138  const Agenda& refr_index_agenda,
139  const Index& atmosphere_dim,
140  const Vector& p_grid,
141  const Vector& lat_grid,
142  const Vector& lon_grid,
143  const Tensor3& z_field,
144  const Tensor3& t_field,
145  const Tensor4& vmr_field,
146  const Matrix& r_geoid,
147  const Matrix& z_surface,
148  const Numeric& ppath_lmax,
149  const Numeric& ppath_lraytrace,
150  const Verbosity&)
151 {
152  // Input checks here would be rather costly as this function is called
153  // many times. So we do only asserts. The keywords are checked here,
154  // other input in the sub-functions to make them as simple as possible.
155 
156  assert( ppath_lraytrace > 0 );
157 
158  if( atmosphere_dim == 1 )
159  { ppath_step_refr_1d( ws, ppath_step, rte_pressure, rte_temperature,
160  rte_vmr_list, refr_index, refr_index_agenda,
161  p_grid, z_field(joker,0,0), t_field(joker,0,0),
162  vmr_field(joker,joker,0,0), r_geoid(0,0), z_surface(0,0),
163  "linear_euler", ppath_lraytrace, ppath_lmax ); }
164 
165  else if( atmosphere_dim == 2 )
166  { ppath_step_refr_2d( ws, ppath_step, rte_pressure, rte_temperature,
167  rte_vmr_list, refr_index, refr_index_agenda,
168  p_grid, lat_grid, z_field(joker,joker,0),
169  t_field(joker,joker,0), vmr_field(joker, joker,joker,0),
170  r_geoid(joker,0), z_surface(joker,0),
171  "linear_euler", ppath_lraytrace, ppath_lmax ); }
172 
173  else if( atmosphere_dim == 3 )
174  { ppath_step_refr_3d( ws, ppath_step, rte_pressure, rte_temperature,
175  rte_vmr_list, refr_index, refr_index_agenda,
176  p_grid, lat_grid, lon_grid, z_field,
177  t_field, vmr_field, r_geoid, z_surface,
178  "linear_euler", ppath_lraytrace, ppath_lmax ); }
179 
180  else
181  { throw runtime_error( "The atmospheric dimensionality must be 1-3." ); }
182 }
183 
184 
185 
186 /* Workspace method: Doxygen documentation will be auto-generated */
187 void rte_posAddRgeoid(// WS Output:
188  Vector& rte_pos,
189  // WS Input:
190  const Index& atmosphere_dim,
191  const Vector& lat_grid,
192  const Vector& lon_grid,
193  const Matrix& r_geoid,
194  const Verbosity& verbosity)
195 {
196  // Check input
197  chk_if_in_range( "atmosphere_dim", atmosphere_dim, 1, 3 );
198  chk_vector_length( "rte_pos", rte_pos, atmosphere_dim );
199 
200  // Use *sensor_posAddRgeoid* to perform the calculations.
201  Matrix m(1,rte_pos.nelem());
202  m(0,joker) = rte_pos;
203  sensor_posAddRgeoid( m, atmosphere_dim, lat_grid, lon_grid, r_geoid, verbosity );
204  rte_pos[0] = m(0,0);
205 }
206 
207 
208 
209 /* Workspace method: Doxygen documentation will be auto-generated */
210 void rte_losSet(// WS Output:
211  Vector& rte_los,
212  // WS Input:
213  const Index& atmosphere_dim,
214  // Control Parameters:
215  const Numeric& za,
216  const Numeric& aa,
217  const Verbosity&)
218 {
219  // Check input
220  chk_if_in_range( "atmosphere_dim", atmosphere_dim, 1, 3 );
221 
222  if( atmosphere_dim == 1 )
223  { rte_los.resize(1); }
224  else
225  {
226  rte_los.resize(2);
227  rte_los[1] = aa;
228  }
229  rte_los[0] = za;
230 }
231 
232 
233 
234 /* Workspace method: Doxygen documentation will be auto-generated */
235 void rte_posSet(// WS Output:
236  Vector& rte_pos,
237  // WS Input:
238  const Index& atmosphere_dim,
239  // Control Parameters:
240  const Numeric& r_or_z,
241  const Numeric& lat,
242  const Numeric& lon,
243  const Verbosity&)
244 {
245  // Check input
246  chk_if_in_range( "atmosphere_dim", atmosphere_dim, 1, 3 );
247 
248  rte_pos.resize(atmosphere_dim);
249  rte_pos[0] = r_or_z;
250  if( atmosphere_dim >= 2 )
251  { rte_pos[1] = lat; }
252  if( atmosphere_dim == 3 )
253  { rte_pos[2] = lon; }
254 }
255 
256 
257 
258 /* Workspace method: Doxygen documentation will be auto-generated */
259 void sensor_posAddRgeoid(// WS Output:
260  Matrix& sensor_pos,
261  // WS Input:
262  const Index& atmosphere_dim,
263  const Vector& lat_grid,
264  const Vector& lon_grid,
265  const Matrix& r_geoid,
266  const Verbosity&)
267 {
268  // Check input
269  chk_if_in_range( "atmosphere_dim", atmosphere_dim, 1, 3 );
270  chk_matrix_ncols( "sensor_pos", sensor_pos, atmosphere_dim );
271  chk_atm_surface( "r_geoid", r_geoid, atmosphere_dim, lat_grid, lon_grid );
272 
273  // Number of positions
274  const Index npos = sensor_pos.nrows();
275  //
276  if( npos == 0 )
277  throw runtime_error("The number of positions is 0, must be at least 1.");
278 
279  if( atmosphere_dim == 1 )
280  { sensor_pos(joker,0) += r_geoid(0,0); }
281 
282  else
283  {
284  // Check that positions in sensor_pos are inside the lat and lon grids
285  if( min(sensor_pos(joker,1)) < lat_grid[0] ||
286  max(sensor_pos(joker,1)) > last(lat_grid) )
287  throw runtime_error(
288  "You have given a position with a latitude outside *lat_grid*." );
289  if( atmosphere_dim == 3 )
290  {
291  if( min(sensor_pos(joker,2)) < lon_grid[0] ||
292  max(sensor_pos(joker,2)) > last(lon_grid) )
293  throw runtime_error(
294  "You have given a position with a longitude outside *lon_grid*." );
295  }
296 
297  if( atmosphere_dim == 2 )
298  {
299  ArrayOfGridPos gp(npos);
300  Matrix itw(npos,2);
301  gridpos( gp, lat_grid, sensor_pos(joker,1) );
302  interpweights( itw, gp );
303  Vector v_rgeoid(npos);
304  interp( v_rgeoid, itw, r_geoid(joker,0), gp );
305  for( Index i=0; i<npos; i++ )
306  { sensor_pos(i,0) += v_rgeoid[i]; }
307  }
308  else
309  {
310  ArrayOfGridPos gp_lat(npos), gp_lon(npos);
311  Matrix itw(npos,4);
312  gridpos( gp_lat, lat_grid, sensor_pos(joker,1) );
313  gridpos( gp_lon, lon_grid, sensor_pos(joker,2) );
314  interpweights( itw, gp_lat, gp_lon );
315  Vector v_rgeoid(npos);
316  interp( v_rgeoid, itw, r_geoid, gp_lat, gp_lon );
317  for( Index i=0; i<npos; i++ )
318  { sensor_pos(i,0) += v_rgeoid[i]; }
319  }
320  }
321 }
322 
323 
324 /* Workspace method: Doxygen documentation will be auto-generated */
326  // WS Generic Output:
327  Vector& za_vector,
328  // WS Input:
329  const Agenda& refr_index_agenda,
330  const Matrix& sensor_pos,
331  const Vector& p_grid,
332  const Tensor3& t_field,
333  const Tensor3& z_field,
334  const Tensor4& vmr_field,
335  const Matrix& r_geoid,
336  const Index& atmosphere_dim,
337  // WS Generic Input:
338  const Vector& ztan_vector,
339  const Verbosity&)
340 {
341  if( atmosphere_dim != 1 ) {
342  throw runtime_error( "The function can only be used for 1D atmospheres." );
343  }
344 
345  if( ztan_vector.nelem() != sensor_pos.nrows() ) {
346  ostringstream os;
347  os << "The number of altitudes in true tangent altitude vector must\n"
348  << "match the number of positions in *sensor_pos*.";
349  throw runtime_error( os.str() );
350  }
351 
352  //Set za_vector's size equal to ztan_vector
353  za_vector.resize( ztan_vector.nelem() );
354 
355  // Define refraction variables
356  Numeric refr_index, rte_pressure, rte_temperature;
357  Vector rte_vmr_list;
358 
359  //Calculate refractive index for the tangential altitudes
360  for( Index i=0; i<ztan_vector.nelem(); i++ ) {
361  get_refr_index_1d( ws, refr_index, rte_pressure, rte_temperature,
362  rte_vmr_list, refr_index_agenda, p_grid, r_geoid(0,0),
363  z_field(joker,0,0), t_field(joker,0,0),
364  vmr_field(joker,joker,0,0), ztan_vector[i]+r_geoid(0,0) );
365 
366  //Calculate zenith angle
367  za_vector[i] = 180-asin(refr_index*(ztan_vector[i]+r_geoid(0,0)) /
368  sensor_pos(i,0))*RAD2DEG;
369  }
370 }
371 
372 
373 
374 /* Workspace method: Doxygen documentation will be auto-generated */
375 void VectorZtanToZa1D(// WS Generic Output:
376  Vector& za_vector,
377  // WS Input:
378  const Matrix& sensor_pos,
379  const Matrix& r_geoid,
380  const Index& atmosphere_dim,
381  // WS Generic Input:
382  const Vector& ztan_vector,
383  const Verbosity&)
384 {
385  if( atmosphere_dim != 1 ) {
386  throw runtime_error( "The function can only be used for 1D atmospheres." );
387  }
388 
389  const Index npos = sensor_pos.nrows();
390 
391  if( ztan_vector.nelem() != npos )
392  {
393  ostringstream os;
394  os << "The number of altitudes in the geometric tangent altitude vector must\n"
395  << "match the number of positions in *sensor_pos*.";
396  throw runtime_error( os.str() );
397  }
398 
399  za_vector.resize(npos);
400 
401  for( Index i=0; i<npos; i++ )
402  { za_vector[i] = geompath_za_at_r( r_geoid(0,0) + ztan_vector[i], 100,
403  sensor_pos(i,0) ); }
404 }
405 
406 
Matrix
The Matrix class.
Definition: matpackI.h:767
ppath_calc
void ppath_calc(Workspace &ws, Ppath &ppath, const Agenda &ppath_step_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Matrix &r_geoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Vector &rte_pos, const Vector &rte_los, const bool &outside_cloudbox, const Verbosity &verbosity)
ppath_calc
Definition: ppath.cc:6171
auto_md.h
chk_atm_surface
void chk_atm_surface(const String &x_name, const Matrix &x, const Index &dim, ConstVectorView lat_grid, ConstVectorView lon_grid)
chk_atm_surface
Definition: check_input.cc:821
gridpos
void gridpos(ArrayOfGridPos &gp, ConstVectorView old_grid, ConstVectorView new_grid, const Numeric &extpolfac)
Set up a grid position Array.
Definition: interpolation.cc:167
Tensor3
The Tensor3 class.
Definition: matpackIII.h:340
joker
const Joker joker
last
Numeric last(ConstVectorView x)
last
Definition: math_funcs.cc:183
interp
Numeric interp(ConstVectorView itw, ConstVectorView a, const GridPos &tc)
Red 1D Interpolate.
Definition: interpolation.cc:1000
ppath_step_refr_1d
void ppath_step_refr_1d(Workspace &ws, Ppath &ppath, Numeric &rte_pressure, Numeric &rte_temperature, Vector &rte_vmr_list, Numeric &refr_index, const Agenda &refr_index_agenda, ConstVectorView p_grid, ConstVectorView z_field, ConstVectorView t_field, ConstMatrixView vmr_field, const double &r_geoid, const double &z_surface, const String &rtrace_method, const double &lraytrace, const double &lmax)
ppath_step_refr_1d
Definition: ppath.cc:4714
sensor_posAddRgeoid
void sensor_posAddRgeoid(Matrix &sensor_pos, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Matrix &r_geoid, const Verbosity &)
WORKSPACE METHOD: sensor_posAddRgeoid.
Definition: m_ppath.cc:259
VectorZtanToZa1D
void VectorZtanToZa1D(Vector &za_vector, const Matrix &sensor_pos, const Matrix &r_geoid, const Index &atmosphere_dim, const Vector &ztan_vector, const Verbosity &)
WORKSPACE METHOD: VectorZtanToZa1D.
Definition: m_ppath.cc:375
Vector::resize
void resize(Index n)
Resize function.
Definition: matpackI.cc:771
ConstMatrixView::nrows
Index nrows() const
Returns the number of rows.
Definition: matpackI.cc:796
geompath_za_at_r
double geompath_za_at_r(const double &ppc, const double &a_za, const double &r)
geompath_za_at_r
Definition: ppath.cc:160
DEG2RAD
const Numeric DEG2RAD
ppath_stepGeometric
void ppath_stepGeometric(Ppath &ppath_step, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Matrix &r_geoid, const Matrix &z_surface, const Numeric &ppath_lmax, const Verbosity &)
WORKSPACE METHOD: ppath_stepGeometric.
Definition: m_ppath.cc:92
Tensor4
The Tensor4 class.
Definition: matpackIV.h:375
Ppath
The structure to describe a propagation path and releated quantities.
Definition: ppath.h:59
Agenda
The Agenda class.
Definition: agenda_class.h:44
rte_posSet
void rte_posSet(Vector &rte_pos, const Index &atmosphere_dim, const Numeric &r_or_z, const Numeric &lat, const Numeric &lon, const Verbosity &)
WORKSPACE METHOD: rte_posSet.
Definition: m_ppath.cc:235
Array< Index >
messages.h
Declarations having to do with the four output streams.
ppath_step_geom_1d
void ppath_step_geom_1d(Ppath &ppath, ConstVectorView p_grid, ConstVectorView z_field, const double &r_geoid, const double &z_surface, const double &lmax)
ppath_step_geom_1d
Definition: ppath.cc:3791
rte_losSet
void rte_losSet(Vector &rte_los, const Index &atmosphere_dim, const Numeric &za, const Numeric &aa, const Verbosity &)
WORKSPACE METHOD: rte_losSet.
Definition: m_ppath.cc:210
chk_matrix_ncols
void chk_matrix_ncols(const String &x_name, ConstMatrixView x, const Index &l)
chk_matrix_ncols
Definition: check_input.cc:539
rte_posAddRgeoid
void rte_posAddRgeoid(Vector &rte_pos, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Matrix &r_geoid, const Verbosity &verbosity)
WORKSPACE METHOD: rte_posAddRgeoid.
Definition: m_ppath.cc:187
ConstVectorView::nelem
Index nelem() const
Returns the number of elements.
Definition: matpackI.cc:175
ppath_step_geom_2d
void ppath_step_geom_2d(Ppath &ppath, ConstVectorView p_grid, ConstVectorView lat_grid, ConstMatrixView z_field, ConstVectorView r_geoid, ConstVectorView z_surface, const double &lmax)
ppath_step_geom_2d
Definition: ppath.cc:3871
VectorZtanToZaRefr1D
void VectorZtanToZaRefr1D(Workspace &ws, Vector &za_vector, const Agenda &refr_index_agenda, const Matrix &sensor_pos, const Vector &p_grid, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Matrix &r_geoid, const Index &atmosphere_dim, const Vector &ztan_vector, const Verbosity &)
WORKSPACE METHOD: VectorZtanToZaRefr1D.
Definition: m_ppath.cc:325
ppath_step_geom_3d
void ppath_step_geom_3d(Ppath &ppath, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstMatrixView r_geoid, ConstMatrixView z_surface, const double &lmax)
ppath_step_geom_3d
Definition: ppath.cc:3956
Numeric
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:33
Verbosity
Definition: messages.h:50
math_funcs.h
get_refr_index_1d
void get_refr_index_1d(Workspace &ws, Numeric &refr_index, Numeric &a_pressure, Numeric &a_temperature, Vector &a_vmr_list, const Agenda &refr_index_agenda, ConstVectorView p_grid, const Numeric &r_geoid, ConstVectorView z_field, ConstVectorView t_field, ConstMatrixView vmr_field, const Numeric &r)
get_refr_index_1d
Definition: refraction.cc:82
ppath_step_refr_2d
void ppath_step_refr_2d(Workspace &ws, Ppath &ppath, Numeric &rte_pressure, Numeric &rte_temperature, Vector &rte_vmr_list, Numeric &refr_index, const Agenda &refr_index_agenda, ConstVectorView p_grid, ConstVectorView lat_grid, ConstMatrixView z_field, ConstMatrixView t_field, ConstTensor3View vmr_field, ConstVectorView r_geoid, ConstVectorView z_surface, const String &rtrace_method, const double &lraytrace, const double &lmax)
ppath_step_refr_2d
Definition: ppath.cc:4857
max
#define max(a, b)
Definition: continua.cc:13097
ppath.h
Propagation path structure and functions.
chk_vector_length
void chk_vector_length(const String &x_name, ConstVectorView x, const Index &l)
chk_vector_length
Definition: check_input.cc:222
refraction.h
Refraction functions.
min
#define min(a, b)
Definition: continua.cc:13096
Workspace
Workspace class.
Definition: workspace_ng.h:47
special_interp.h
Header file for special_interp.cc.
EARTH_GRAV_CONST
const Numeric EARTH_GRAV_CONST
ppath_step_refr_3d
void ppath_step_refr_3d(Workspace &ws, Ppath &ppath, Numeric &rte_pressure, Numeric &rte_temperature, Vector &rte_vmr_list, Numeric &refr_index, const Agenda &refr_index_agenda, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstMatrixView r_geoid, ConstMatrixView z_surface, const String &rtrace_method, const double &lraytrace, const double &lmax)
ppath_step_refr_3d
Definition: ppath.cc:4992
RAD2DEG
const Numeric RAD2DEG
Index
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:39
chk_if_in_range
void chk_if_in_range(const String &x_name, const Index &x, const Index &x_low, const Index &x_high)
chk_if_in_range
Definition: check_input.cc:95
check_input.h
Vector
The Vector class.
Definition: matpackI.h:555
ppath_stepRefractionEuler
void ppath_stepRefractionEuler(Workspace &ws, Ppath &ppath_step, Numeric &rte_pressure, Numeric &rte_temperature, Vector &rte_vmr_list, Numeric &refr_index, const Agenda &refr_index_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Tensor3 &t_field, const Tensor4 &vmr_field, const Matrix &r_geoid, const Matrix &z_surface, const Numeric &ppath_lmax, const Numeric &ppath_lraytrace, const Verbosity &)
WORKSPACE METHOD: ppath_stepRefractionEuler.
Definition: m_ppath.cc:130
ppathCalc
void ppathCalc(Workspace &ws, Ppath &ppath, const Agenda &ppath_step_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Matrix &r_geoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Vector &rte_pos, const Vector &rte_los, const Verbosity &verbosity)
WORKSPACE METHOD: ppathCalc.
Definition: m_ppath.cc:65
interpweights
void interpweights(VectorView itw, const GridPos &tc)
Red 1D interpolation weights.
Definition: interpolation.cc:756
arts.h
The global header file for ARTS.
xml_io.h
This file contains basic functions to handle XML data files.
m_general.h
Template functions for general supergeneric ws methods.