ARTS  2.2.66
m_surface.cc File Reference

Workspace functions associated wih the surface and its properties. More...

#include <cmath>
#include "arts.h"
#include "auto_md.h"
#include "check_input.h"
#include "complex.h"
#include "geodetic.h"
#include "math_funcs.h"
#include "messages.h"
#include "special_interp.h"
#include "interpolation.h"
#include "physics_funcs.h"
#include "rte.h"
#include "surface.h"

Go to the source code of this file.

Functions

void InterpSurfaceFieldToPosition (Numeric &outvalue, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Vector &rtp_pos, const Matrix &z_surface, const Matrix &field, const Verbosity &verbosity)
 WORKSPACE METHOD: InterpSurfaceFieldToPosition. More...
 
void iySurfaceRtpropAgenda (Workspace &ws, Matrix &iy, ArrayOfTensor3 &diy_dx, const Tensor3 &iy_transmission, const Index &jacobian_do, const Index &atmosphere_dim, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Index &cloudbox_on, const Index &stokes_dim, const Vector &f_grid, const Vector &rtp_pos, const Vector &rtp_los, const Vector &rte_pos2, const Agenda &iy_main_agenda, const Agenda &surface_rtprop_agenda, const Verbosity &)
 WORKSPACE METHOD: iySurfaceRtpropAgenda. More...
 
void specular_losCalc (Vector &specular_los, Vector &surface_normal, const Vector &rtp_pos, const Vector &rtp_los, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Vector &refellipsoid, const Matrix &z_surface, const Verbosity &)
 WORKSPACE METHOD: specular_losCalc. More...
 
void surfaceBlackbody (Workspace &ws, Matrix &surface_los, Tensor4 &surface_rmatrix, Matrix &surface_emission, const Vector &f_grid, const Index &stokes_dim, const Numeric &surface_skin_t, const Agenda &blackbody_radiation_agenda, const Verbosity &verbosity)
 WORKSPACE METHOD: surfaceBlackbody. More...
 
void surfaceFlatRefractiveIndex (Workspace &ws, Matrix &surface_los, Tensor4 &surface_rmatrix, Matrix &surface_emission, const Vector &f_grid, const Index &stokes_dim, const Index &atmosphere_dim, const Vector &rtp_los, const Vector &specular_los, const Numeric &surface_skin_t, const GriddedField3 &surface_complex_refr_index, const Agenda &blackbody_radiation_agenda, const Verbosity &verbosity)
 WORKSPACE METHOD: surfaceFlatRefractiveIndex. More...
 
void surfaceFlatReflectivity (Workspace &ws, Matrix &surface_los, Tensor4 &surface_rmatrix, Matrix &surface_emission, const Vector &f_grid, const Index &stokes_dim, const Index &atmosphere_dim, const Vector &specular_los, const Numeric &surface_skin_t, const Tensor3 &surface_reflectivity, const Agenda &blackbody_radiation_agenda, const Verbosity &verbosity)
 WORKSPACE METHOD: surfaceFlatReflectivity. More...
 
void surfaceFlatScalarReflectivity (Workspace &ws, Matrix &surface_los, Tensor4 &surface_rmatrix, Matrix &surface_emission, const Vector &f_grid, const Index &stokes_dim, const Index &atmosphere_dim, const Vector &specular_los, const Numeric &surface_skin_t, const Vector &surface_scalar_reflectivity, const Agenda &blackbody_radiation_agenda, const Verbosity &verbosity)
 WORKSPACE METHOD: surfaceFlatScalarReflectivity. More...
 
void surfaceLambertianSimple (Workspace &ws, Matrix &surface_los, Tensor4 &surface_rmatrix, Matrix &surface_emission, const Vector &f_grid, const Index &stokes_dim, const Index &atmosphere_dim, const Vector &rtp_los, const Numeric &surface_skin_t, const Vector &surface_scalar_reflectivity, const Index &lambertian_nza, const Agenda &blackbody_radiation_agenda, const Numeric &za_pos, const Verbosity &)
 WORKSPACE METHOD: surfaceLambertianSimple. More...
 
void surface_complex_refr_indexFromGriddedField5 (GriddedField3 &surface_complex_refr_index, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lat_true, const Vector &lon_true, const Vector &rtp_pos, const GriddedField5 &complex_n_field, const Verbosity &)
 WORKSPACE METHOD: surface_complex_refr_indexFromGriddedField5. More...
 
void surface_reflectivityFromGriddedField6 (Tensor3 &surface_reflectivity, const Index &stokes_dim, const Vector &f_grid, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lat_true, const Vector &lon_true, const Vector &rtp_pos, const Vector &rtp_los, const GriddedField6 &r_field, const Verbosity &)
 WORKSPACE METHOD: surface_reflectivityFromGriddedField6. More...
 
void surface_scalar_reflectivityFromGriddedField4 (Vector &surface_scalar_reflectivity, const Index &stokes_dim, const Vector &f_grid, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lat_true, const Vector &lon_true, const Vector &rtp_pos, const Vector &rtp_los, const GriddedField4 &r_field, const Verbosity &)
 WORKSPACE METHOD: surface_scalar_reflectivityFromGriddedField4. More...
 

Variables

const Numeric DEG2RAD
 

Detailed Description

Workspace functions associated wih the surface and its properties.

Author
Patrick Eriksson Patri.nosp@m.ck.E.nosp@m.rikss.nosp@m.on@c.nosp@m.halme.nosp@m.rs.s.nosp@m.e
Date
2008-09-17

These functions are listed in the doxygen documentation as entries of the file auto_md.h.

Definition in file m_surface.cc.

Function Documentation

◆ InterpSurfaceFieldToPosition()

void InterpSurfaceFieldToPosition ( Numeric out,
const Index atmosphere_dim,
const Vector lat_grid,
const Vector lon_grid,
const Vector rtp_pos,
const Matrix z_surface,
const Matrix field,
const Verbosity verbosity 
)

WORKSPACE METHOD: InterpSurfaceFieldToPosition.

Point interpolation of surface fields.

The default way to specify the position is by rtp_pos.

Linear interpolation is applied.

The interpolation is done for the latitude and longitude in rtp_pos*, while the altitude in rtp_pos is not part of the calculations. However, it is checked that the altitude of rtp_pos is inside the range covered by z_surface with a 1 m margin, to give a warning when the specified position is not consistent with the surface altitudes.

Author
Patrick Eriksson
Parameters
[out]outGeneric output
[in]atmosphere_dimWS Input
[in]lat_gridWS Input
[in]lon_gridWS Input
[in]rtp_posWS Input
[in]z_surfaceWS Input
[in]fieldGeneric Input

Definition at line 68 of file m_surface.cc.

References chk_atm_grids(), chk_atm_surface(), chk_interpolation_grids(), chk_rte_pos(), CREATE_OUT3, gridpos(), interp_atmsurface_by_gp(), max, and min.

Referenced by InterpSurfaceFieldToPosition_g().

◆ iySurfaceRtpropAgenda()

void iySurfaceRtpropAgenda ( Workspace ws,
Matrix iy,
ArrayOfTensor3 diy_dx,
const Tensor3 iy_transmission,
const Index jacobian_do,
const Index atmosphere_dim,
const Tensor3 t_field,
const Tensor3 z_field,
const Tensor4 vmr_field,
const Index cloudbox_on,
const Index stokes_dim,
const Vector f_grid,
const Vector rtp_pos,
const Vector rtp_los,
const Vector rte_pos2,
const Agenda iy_main_agenda,
const Agenda surface_rtprop_agenda,
const Verbosity verbosity 
)

WORKSPACE METHOD: iySurfaceRtpropAgenda.

Interface to surface_rtprop_agenda for iy_surface_agenda.

This method is designed to be part of iy_surface_agenda. It determines the radiative properties of the surface by surface_rtprop_agenda* and calculates the downwelling radiation by iy_main_agenda, and sums up the terms as described in AUG. That is, this WSM uses the output from surface_rtprop_agenda in a straightforward fashion.

Author
Patrick Eriksson
Parameters
[in,out]wsWorkspace
[out]iyWS Output
[out]diy_dxWS Output
[in]iy_transmissionWS Input
[in]jacobian_doWS Input
[in]atmosphere_dimWS Input
[in]t_fieldWS Input
[in]z_fieldWS Input
[in]vmr_fieldWS Input
[in]cloudbox_onWS Input
[in]stokes_dimWS Input
[in]f_gridWS Input
[in]rtp_posWS Input
[in]rtp_losWS Input
[in]rte_pos2WS Input
[in]iy_main_agendaWS Input
[in]surface_rtprop_agendaWS Input

Definition at line 124 of file m_surface.cc.

References chk_if_in_range(), chk_rte_los(), chk_rte_pos(), iy_main_agendaExecute(), iy_transmission_mult(), joker, Agenda::name(), ConstTensor4View::nbooks(), ConstMatrixView::ncols(), ConstTensor4View::ncols(), ConstVectorView::nelem(), ConstTensor3View::npages(), ConstTensor4View::npages(), ConstMatrixView::nrows(), ConstTensor4View::nrows(), surface_calc(), and surface_rtprop_agendaExecute().

Referenced by iySurfaceRtpropAgenda_g().

◆ specular_losCalc()

void specular_losCalc ( Vector specular_los,
Vector surface_normal,
const Vector rtp_pos,
const Vector rtp_los,
const Index atmosphere_dim,
const Vector lat_grid,
const Vector lon_grid,
const Vector refellipsoid,
const Matrix z_surface,
const Verbosity verbosity 
)

WORKSPACE METHOD: specular_losCalc.

Calculates the specular direction for intersections with the surface.

A help method to set up the surface properties. This method calculates specular_los, that is required in several methods to convert zenith angles to incidence angles.

The method also returns the line-of-sight for the surface normal.

Author
Patrick Eriksson
Parameters
[out]specular_losWS Output
[out]surface_normalWS Output
[in]rtp_posWS Input
[in]rtp_losWS Input
[in]atmosphere_dimWS Input
[in]lat_gridWS Input
[in]lon_gridWS Input
[in]refellipsoidWS Input
[in]z_surfaceWS Input

Definition at line 243 of file m_surface.cc.

References cart2zaaa(), chk_interpolation_grids(), cross3(), fac(), gridpos(), interp(), interpweights(), joker, max, plevel_angletilt(), plevel_slope_2d(), plevel_slope_3d(), refell2d(), Vector::resize(), sign(), and zaaa2cart().

Referenced by specular_losCalc_g().

◆ surface_complex_refr_indexFromGriddedField5()

void surface_complex_refr_indexFromGriddedField5 ( GriddedField3 surface_complex_refr_index,
const Index atmosphere_dim,
const Vector lat_grid,
const Vector lat_true,
const Vector lon_true,
const Vector rtp_pos,
const GriddedField5 complex_refr_index_field,
const Verbosity verbosity 
)

WORKSPACE METHOD: surface_complex_refr_indexFromGriddedField5.

Extracts complex refractive index from a field of such data.

The method allows to obtain surface_complex_refr_index by interpolation of a geographical field of such data. The position for which refraction shall be extracted is given by rtp_pos. The refractive index field is expected to be stored as: <br> GriddedField5: <br> Vector f_grid[N_f] <br> Vector T_grid[N_T] <br> ArrayOfString Complex[2] <br> Vector "Latitude" [N_lat] <br> Vector "Longitude" [N_lon] <br> Tensor5 data[N_f][N_T][2][N_lat][N_lon]

Definition and treatment of the three first dimensions follows complex_refr_index*, e.g. the temperature grid is allowed to have length 1. The grids for latitude and longitude must have a length of >= 2 (ie. no automatic expansion).

Hence, this method performs an interpolation only in the lat and lon dimensions, to a single point. The remaining GriddedField3 is simply returned as surface_complex_refr_index.

Author
Patrick Eriksson
Parameters
[out]surface_complex_refr_indexWS Output
[in]atmosphere_dimWS Input
[in]lat_gridWS Input
[in]lat_trueWS Input
[in]lon_trueWS Input
[in]rtp_posWS Input
[in]complex_refr_index_fieldGeneric Input

Definition at line 693 of file m_surface.cc.

References GriddedField5::checksize_strict(), chk_griddedfield_gridname(), chk_if_in_range(), chk_latlon_true(), chk_rte_pos(), GriddedField3::data, GriddedField5::data, GriddedField::get_numeric_grid(), gridpos(), interp(), interpweights(), joker, lon_shiftgrid(), ConstTensor5View::nbooks(), ConstTensor5View::ncols(), ConstTensor5View::npages(), ConstTensor5View::nrows(), ConstTensor5View::nshelves(), pos2true_latlon(), GriddedField3::resize(), GriddedField::set_grid(), and GriddedField::set_grid_name().

Referenced by surface_complex_refr_indexFromGriddedField5_g().

◆ surface_reflectivityFromGriddedField6()

void surface_reflectivityFromGriddedField6 ( Tensor3 surface_reflectivity,
const Index stokes_dim,
const Vector f_grid,
const Index atmosphere_dim,
const Vector lat_grid,
const Vector lat_true,
const Vector lon_true,
const Vector rtp_pos,
const Vector rtp_los,
const GriddedField6 r_field,
const Verbosity verbosity 
)

WORKSPACE METHOD: surface_reflectivityFromGriddedField6.

Extracts surface reflectivities from a field of such data.

This method allows to specify a field of surface reflectivity for automatic interpolation to points of interest. The position and direction for which the reflectivity shall be extracted are given by rtp_pos and rtp_los. The reflectivity field is expected to be stored as: <br> GriddedField6: <br> Vector "Frequency" [N_f] <br> Vector "Stokes element" [N_s1] <br> Vector "Stokes_element" [N_s2] <br> Vector "Incidence angle" [N_ia] <br> Vector "Latitude" [N_lat] <br> Vector "Longitude" [N_lon] <br> Tensor6 data[N_f][N_s1][N_s2][N_ia][N_lat][N_lon]

Grids for incidence angle, latitude and longitude must have a length of >= 2 (ie. no automatic expansion). If the frequency grid has length 1, this is taken as that the reflectivity is constant, following the definition of surface_scalar_reflectivity. The data can cover higher Stokes dimensionalities than set by stokes_dim*. Data for non-used Stokes elements are just cropped. The order between the two Stokes dimensions is the same as in surface_reflectivity* and surface_rmatrix*.

The interpolation is done in steps: <br> 1: Linear interpolation for lat and lon (std. extrapolation). <br> 2: Interpolation in incidence angle (std. extrapolation). <br> If the grid has a length of >= 4, cubic interpolation is <br> applied. Otherwise linear interpolation. <br> 3. Linear interpolation in frequency (if input data have more <br> than one frequency).

Author
Patrick Eriksson
Parameters
[out]surface_reflectivityWS Output
[in]stokes_dimWS Input
[in]f_gridWS Input
[in]atmosphere_dimWS Input
[in]lat_gridWS Input
[in]lat_trueWS Input
[in]lon_trueWS Input
[in]rtp_posWS Input
[in]rtp_losWS Input
[in]r_fieldGeneric Input

Definition at line 796 of file m_surface.cc.

References GriddedField6::checksize_strict(), chk_griddedfield_gridname(), chk_if_in_range(), chk_interpolation_grids(), chk_latlon_true(), chk_rte_los(), chk_rte_pos(), GriddedField6::data, GriddedField::get_numeric_grid(), gridpos(), gridpos_poly(), interp(), interpweights(), joker, lon_shiftgrid(), ConstTensor6View::nbooks(), ConstTensor6View::ncols(), ConstVectorView::nelem(), ConstTensor6View::npages(), ConstTensor6View::nrows(), ConstTensor6View::nshelves(), ConstTensor6View::nvitrines(), pos2true_latlon(), and Tensor3::resize().

Referenced by surface_reflectivityFromGriddedField6_g().

◆ surface_scalar_reflectivityFromGriddedField4()

void surface_scalar_reflectivityFromGriddedField4 ( Vector surface_scalar_reflectivity,
const Index stokes_dim,
const Vector f_grid,
const Index atmosphere_dim,
const Vector lat_grid,
const Vector lat_true,
const Vector lon_true,
const Vector rtp_pos,
const Vector rtp_los,
const GriddedField4 r_field,
const Verbosity verbosity 
)

WORKSPACE METHOD: surface_scalar_reflectivityFromGriddedField4.

Extracts scalar surface reflectivities from a field of such data.

This method allows to specify a field of surface reflectivity for automatic interpolation to points of interest. The position and direction for which the reflectivity shall be extracted are given by rtp_pos and rtp_los. The reflectivity field is expected to be stored as: <br> GriddedField4: <br> Vector "Frequency" [N_f] <br> Vector "Incidence angle" [N_ia] <br> Vector "Latitude" [N_lat] <br> Vector "Longitude" [N_lon] <br> Tensor4 data[N_f][N_ia][N_lat][N_lon]

Grids for incidence angle, latitude and longitude must have a length of >= 2 (ie. no automatic expansion). If the frequency grid has length 1, this is taken as the reflectivity is constant, following the definition of surface_scalar_reflectivity.

The interpolation is done in steps: <br> 1: Linear interpolation for lat and lon (std. extrapolation). <br> 2: Interpolation in incidence angle (std. extrapolation). <br> If the grid has a length of >= 4, cubic interpolation is <br> applied. Otherwise linear interpolation. <br> 3. Linear interpolation if frequency (if input data have more <br> than one frequency).

Author
Patrick Eriksson
Parameters
[out]surface_scalar_reflectivityWS Output
[in]stokes_dimWS Input
[in]f_gridWS Input
[in]atmosphere_dimWS Input
[in]lat_gridWS Input
[in]lat_trueWS Input
[in]lon_trueWS Input
[in]rtp_posWS Input
[in]rtp_losWS Input
[in]r_fieldGeneric Input

Definition at line 933 of file m_surface.cc.

References GriddedField4::checksize_strict(), chk_griddedfield_gridname(), chk_if_in_range(), chk_interpolation_grids(), chk_latlon_true(), chk_rte_los(), chk_rte_pos(), GriddedField4::data, GriddedField::get_numeric_grid(), gridpos(), gridpos_poly(), interp(), interpweights(), joker, lon_shiftgrid(), ConstTensor4View::nbooks(), ConstTensor4View::ncols(), ConstVectorView::nelem(), ConstTensor4View::npages(), ConstTensor4View::nrows(), pos2true_latlon(), and Vector::resize().

Referenced by surface_scalar_reflectivityFromGriddedField4_g().

◆ surfaceBlackbody()

void surfaceBlackbody ( Workspace ws,
Matrix surface_los,
Tensor4 surface_rmatrix,
Matrix surface_emission,
const Vector f_grid,
const Index stokes_dim,
const Numeric surface_skin_t,
const Agenda blackbody_radiation_agenda,
const Verbosity verbosity 
)

WORKSPACE METHOD: surfaceBlackbody.

Creates variables to mimic a blackbody surface.

This method sets up surface_los, surface_rmatrix and surface_emission* for surface_rtprop_agenda. Here, surface_los and surface_rmatrix are set to be empty, and surface_emission to hold blackbody radiation for a temperature of surface_skin_t.

Author
Patrick Eriksson
Parameters
[in,out]wsWorkspace
[out]surface_losWS Output
[out]surface_rmatrixWS Output
[out]surface_emissionWS Output
[in]f_gridWS Input
[in]stokes_dimWS Input
[in]surface_skin_tWS Input
[in]blackbody_radiation_agendaWS Input

Definition at line 324 of file m_surface.cc.

References blackbody_radiation_agendaExecute(), chk_if_in_range(), chk_not_negative(), CREATE_OUT2, ConstVectorView::nelem(), Tensor4::resize(), and Matrix::resize().

Referenced by surfaceBlackbody_g().

◆ surfaceFlatReflectivity()

void surfaceFlatReflectivity ( Workspace ws,
Matrix surface_los,
Tensor4 surface_rmatrix,
Matrix surface_emission,
const Vector f_grid,
const Index stokes_dim,
const Index atmosphere_dim,
const Vector specular_los,
const Numeric surface_skin_t,
const Tensor3 surface_reflectivity,
const Agenda blackbody_radiation_agenda,
const Verbosity verbosity 
)

WORKSPACE METHOD: surfaceFlatReflectivity.

Creates variables to mimic specular reflection by a (flat) surface where surface_reflectivity is specified.

Works basically as surfaceFlatScalarReflectivity but is more general as also vector radiative transfer is handled. See the ARTS theory document (ATD) for details around how surface_emission* is determined. In the nomenclature of ATD, surface_reflectivity* gives R.

Author
Patrick Eriksson
Parameters
[in,out]wsWorkspace
[out]surface_losWS Output
[out]surface_rmatrixWS Output
[out]surface_emissionWS Output
[in]f_gridWS Input
[in]stokes_dimWS Input
[in]atmosphere_dimWS Input
[in]specular_losWS Input
[in]surface_skin_tWS Input
[in]surface_reflectivityWS Input
[in]blackbody_radiation_agendaWS Input

Definition at line 431 of file m_surface.cc.

References blackbody_radiation_agendaExecute(), chk_if_in_range(), chk_not_negative(), CREATE_OUT2, joker, mult(), ConstTensor3View::ncols(), ConstVectorView::nelem(), ConstTensor3View::npages(), ConstTensor3View::nrows(), Tensor4::resize(), and Matrix::resize().

Referenced by surfaceFlatReflectivity_g().

◆ surfaceFlatRefractiveIndex()

void surfaceFlatRefractiveIndex ( Workspace ws,
Matrix surface_los,
Tensor4 surface_rmatrix,
Matrix surface_emission,
const Vector f_grid,
const Index stokes_dim,
const Index atmosphere_dim,
const Vector rtp_los,
const Vector specular_los,
const Numeric surface_skin_t,
const GriddedField3 surface_complex_refr_index,
const Agenda blackbody_radiation_agenda,
const Verbosity verbosity 
)

WORKSPACE METHOD: surfaceFlatRefractiveIndex.

Creates variables to mimic specular reflection by a (flat) surface where the complex refractive index is specified.

The dielectric properties of the surface are described by surface_complex_refr_index*. The Fresnel equations are used to calculate amplitude reflection coefficients. The method can thus result in that the reflection properties differ between frequencies and polarisations.

Local thermodynamic equilibrium is assumed, which corresponds to that the reflection and emission coefficients add up to 1.

Author
Patrick Eriksson
Parameters
[in,out]wsWorkspace
[out]surface_losWS Output
[out]surface_rmatrixWS Output
[out]surface_emissionWS Output
[in]f_gridWS Input
[in]stokes_dimWS Input
[in]atmosphere_dimWS Input
[in]rtp_losWS Input
[in]specular_losWS Input
[in]surface_skin_tWS Input
[in]surface_complex_refr_indexWS Input
[in]blackbody_radiation_agendaWS Input

Definition at line 364 of file m_surface.cc.

References calc_incang(), chk_if_in_range(), chk_not_negative(), complex_n_interp(), CREATE_OUT2, CREATE_OUT3, fresnel(), joker, ConstVectorView::nelem(), Tensor4::resize(), Matrix::resize(), and surface_specular_R_and_b().

Referenced by surfaceFlatRefractiveIndex_g().

◆ surfaceFlatScalarReflectivity()

void surfaceFlatScalarReflectivity ( Workspace ws,
Matrix surface_los,
Tensor4 surface_rmatrix,
Matrix surface_emission,
const Vector f_grid,
const Index stokes_dim,
const Index atmosphere_dim,
const Vector specular_los,
const Numeric surface_skin_t,
const Vector surface_scalar_reflectivity,
const Agenda blackbody_radiation_agenda,
const Verbosity verbosity 
)

WORKSPACE METHOD: surfaceFlatScalarReflectivity.

Creates variables to mimic specular reflection by a (flat) surface where surface_scalar_reflectivity is specified.

The method can only be used for stokes_dim equal to 1. Local thermodynamic equilibrium is assumed, which corresponds to that reflectivity and emissivity add up to 1.

Author
Patrick Eriksson
Parameters
[in,out]wsWorkspace
[out]surface_losWS Output
[out]surface_rmatrixWS Output
[out]surface_emissionWS Output
[in]f_gridWS Input
[in]stokes_dimWS Input
[in]atmosphere_dimWS Input
[in]specular_losWS Input
[in]surface_skin_tWS Input
[in]surface_scalar_reflectivityWS Input
[in]blackbody_radiation_agendaWS Input

Definition at line 523 of file m_surface.cc.

References blackbody_radiation_agendaExecute(), chk_if_in_range(), chk_not_negative(), CREATE_OUT2, CREATE_OUT3, joker, max, min, ConstVectorView::nelem(), Tensor4::resize(), and Matrix::resize().

Referenced by surfaceFlatScalarReflectivity_g().

◆ surfaceLambertianSimple()

void surfaceLambertianSimple ( Workspace ws,
Matrix surface_los,
Tensor4 surface_rmatrix,
Matrix surface_emission,
const Vector f_grid,
const Index stokes_dim,
const Index atmosphere_dim,
const Vector rtp_los,
const Numeric surface_skin_t,
const Vector surface_scalar_reflectivity,
const Index lambertian_nza,
const Agenda blackbody_radiation_agenda,
const Numeric za_pos,
const Verbosity verbosity 
)

WORKSPACE METHOD: surfaceLambertianSimple.

Creates variables to mimic a Lambertian surface.

The method can only be used for 1D calculations.

A Lambertian surface can be characterised solely by its reflectivity, here taken from surface_scalar_reflectivity.

The down-welling radiation field is estimated by making calculations for lambertian_nza directions. The range of zenith angles ([0,90]) is divided in an equidistant manner. The values for surface_rmatrix are assuming a constant radiance over each zenith angle range. See AUG.

Default is to select the zenith angles for sensor_los to be placed centrally in the grid ranges. For example, if lambertian_nza is set to 9, down-welling radiation will be calculated for zenith angles = 5, 15, ..., 85. The position of these angles can be shifted by za_pos*. This variable specifies the fractional distance inside the ranges. For example, a za_pos of 0.7 (np still 9) gives the angles 7, 17, ..., 87.

Only upper-left diagonal element of the surface_rmatrix-es is non-zero. That is, the upwelling radiation is always unpolarised.

Local thermodynamic equilibrium is assumed, which corresponds to that the reflection and emission coefficients "add up to 1".

Author
Patrick Eriksson
Parameters
[in,out]wsWorkspace
[out]surface_losWS Output
[out]surface_rmatrixWS Output
[out]surface_emissionWS Output
[in]f_gridWS Input
[in]stokes_dimWS Input
[in]atmosphere_dimWS Input
[in]rtp_losWS Input
[in]surface_skin_tWS Input
[in]surface_scalar_reflectivityWS Input
[in]lambertian_nzaWS Input
[in]blackbody_radiation_agendaWS Input
[in]za_posGeneric Input (Default: "0.5")

Definition at line 594 of file m_surface.cc.

References blackbody_radiation_agendaExecute(), chk_if_in_range(), chk_not_negative(), DEG2RAD, max, min, ConstVectorView::nelem(), Tensor4::resize(), Matrix::resize(), and w().

Referenced by surfaceLambertianSimple_g().

Variable Documentation

◆ DEG2RAD

const Numeric DEG2RAD
extern

Referenced by surfaceLambertianSimple().