Alpine3D 20241222.625fd38
TerrainRadiationComplex Class Reference

This module calculates the radiative transfer of SW radiation in snow-covered terrain. It can take into account anisotropic reflection of light on snow (forward scattering) and multiple reflections in the terrain. More...

#include <TerrainRadiationComplex.h>

Public Member Functions

 TerrainRadiationComplex (const mio::Config &cfg, const mio::DEMObject &dem_in, const std::string &method)
 
 ~TerrainRadiationComplex ()
 
virtual void getRadiation (mio::Array2D< double > &direct, mio::Array2D< double > &diffuse, mio::Array2D< double > &terrain, const mio::Array2D< double > &direct_unshaded_horizontal, const mio::Array2D< double > &total_ilwr, mio::Array2D< double > &sky_ilwr, mio::Array2D< double > &terrain_ilwr, double solarAzimuth, double solarElevation)
 Computes direct, diffuse and terrain radiation for each gridpoint. Terrain radiation. More...
 
virtual void setMeteo (const mio::Array2D< double > &albedo, const mio::Array2D< double > &ta)
 
void getSkyViewFactor (mio::Array2D< double > &o_sky_vf)
 
void setSP (const mio::Date timestamp, const double solarAzimuth, const double solarElevation)
 
void writeSP (const unsigned int max_steps)
 
- Public Member Functions inherited from TerrainRadiationAlgorithm
 TerrainRadiationAlgorithm (const std::string &i_algo)
 
virtual ~TerrainRadiationAlgorithm ()
 
bool hasSP ()
 
virtual void getRadiation (mio::Array2D< double > &direct, mio::Array2D< double > &diffuse, mio::Array2D< double > &terrain, const mio::Array2D< double > &direct_unshaded_horizontal, const mio::Array2D< double > &total_ilwr, mio::Array2D< double > &sky_ilwr, mio::Array2D< double > &terrain_ilwr, double solarAzimuth, double solarElevation)=0
 
virtual void setMeteo (const mio::Array2D< double > &albedo, const mio::Array2D< double > &ta)=0
 
virtual void setSP (const mio::Date, const double, const double)
 
virtual void writeSP (const unsigned int)
 
virtual void getSkyViewFactor (mio::Array2D< double > &o_sky_vf)=0
 

Additional Inherited Members

- Public Attributes inherited from TerrainRadiationAlgorithm
const std::string algo
 
- Protected Attributes inherited from TerrainRadiationAlgorithm
bool _hasSP
 

Detailed Description

This module calculates the radiative transfer of SW radiation in snow-covered terrain. It can take into account anisotropic reflection of light on snow (forward scattering) and multiple reflections in the terrain.

The price for this complexity is high: The initialization time is extremely long (for a DEM with 30'000 pixels it can be 12 hours. However, if a ViewList-file is generated during the initialization, it can be bypassed in later simulations. ) In the main computation loop, the effort is considerable too and may dominate the simulation time in many cases. Therefore, this module is recommended for explicit radiation investigations based on relatively small, high-resolution DEM's. It can also be coupled to the SolarPanel-module for precise simulation of radiation on photovoltaic panels.

The algorithm is described in F. von Rütte et al., "How Forward-Scattering Snow and Terrain Change the Alpine Radiation Balance With Application to Solar Panels", Journal of Geophysical Research: Atmospheres 126.15 (2021), 10.1029/2020JD034333 or in the master thesis of Felix von Rütte (under the supervision of M. Lehning), entitled "Radiative Transfer Model for Snowy Mountains" (in the comments, it is often referred to by the abbreviation "MT").

This algorithm is configured with the following ini keys:

  • COMPLEX_ANISOTROPY: Whether a snow BRDF should be included. False means isotropic scattering (true or false);
  • COMPLEX_MULTIPLE : Whether multiple scattering in the terrain should be taken into account (true or false);
  • COMPLEX_WRITE_VIEWLIST : Whether the initialization data should be written to file (it requires an already existing "output" folder); (true or false);
  • COMPLEX_READ_VIEWLIST : Whether an existing initialization file should be read in; bypassing the initialization (true or false);
  • COMPLEX_VIEWLISTFILE : Path and filename to the ViewList file if existing, for example "../input/surface-grids/ViewList_Totalp_30x30.rad", ()
[EBalance]
TERRAIN_RADIATION = TRUE
TERRAIN_RADIATION_METHOD = COMPLEX
COMPLEX_ANISOTROPY = TRUE
COMPLEX_MULTIPLE = TRUE
COMPLEX_WRITE_VIEWLIST = FALSE
COMPLEX_READ_VIEWLIST = TRUE
COMPLEX_VIEWLISTFILE = ../input/surface-grids/ViewList_Totalp_30x30.rad

Constructor & Destructor Documentation

◆ TerrainRadiationComplex()

TerrainRadiationComplex::TerrainRadiationComplex ( const mio::Config &  cfg,
const mio::DEMObject &  dem_in,
const std::string &  method 
)

◆ ~TerrainRadiationComplex()

TerrainRadiationComplex::~TerrainRadiationComplex ( )

Member Function Documentation

◆ getRadiation()

void TerrainRadiationComplex::getRadiation ( mio::Array2D< double > &  direct,
mio::Array2D< double > &  diffuse,
mio::Array2D< double > &  terrain,
const mio::Array2D< double > &  direct_unshaded_horizontal,
const mio::Array2D< double > &  total_ilwr,
mio::Array2D< double > &  sky_ilwr,
mio::Array2D< double > &  terrain_ilwr,
double  solarAzimuth,
double  solarElevation 
)
virtual

Computes direct, diffuse and terrain radiation for each gridpoint. Terrain radiation.

Parameters
[out]directDirect short wave radiation component
[out]diffuseDiffuse short wave radiation component
[out]terrainTerrain reflected short wave radiation component
[in]total_ilwrTotal Incoming Long Wave radiation (unused)
[in]sky_ilwrIncoming Long Wave radiation coming from the sky (unused)
[in]terrain_ilwrIncoming Long Wave radiation emitted by the terrain (unused)
[in]solarAzimuthAzimuth of the Sun in the sky
[in]solarElevationElevation of the Sun in the sky

Implements TerrainRadiationAlgorithm.

◆ getSkyViewFactor()

void TerrainRadiationComplex::getSkyViewFactor ( mio::Array2D< double > &  o_sky_vf)
virtual

◆ setMeteo()

void TerrainRadiationComplex::setMeteo ( const mio::Array2D< double > &  albedo,
const mio::Array2D< double > &  ta 
)
virtual

◆ setSP()

void TerrainRadiationComplex::setSP ( const mio::Date  timestamp,
const double  solarAzimuth,
const double  solarElevation 
)
virtual

Reimplemented from TerrainRadiationAlgorithm.

◆ writeSP()

void TerrainRadiationComplex::writeSP ( const unsigned int  max_steps)
virtual

Reimplemented from TerrainRadiationAlgorithm.


The documentation for this class was generated from the following files: