18#ifndef TERRAINRadiationComplex_H
19#define TERRAINRadiationComplex_H
21#include <meteoio/MeteoIO.h>
73 virtual void getRadiation(mio::Array2D<double>& direct, mio::Array2D<double>& diffuse,
74 mio::Array2D<double>& terrain,
const mio::Array2D<double>& direct_unshaded_horizontal,
75 const mio::Array2D<double>& total_ilwr, mio::Array2D<double>& sky_ilwr,
76 mio::Array2D<double>& terrain_ilwr,
double solarAzimuth,
double solarElevation)
override;
77 virtual void setMeteo(
const mio::Array2D<double>& albedo,
const mio::Array2D<double>& ta)
override;
80 void setSP(
const mio::Date timestamp,
const double solarAzimuth,
const double solarElevation)
override;
81 void writeSP(
const unsigned int max_steps)
override;
84 typedef std::array<double, 3> Vec3D;
87 void initBasicSetHorizontal();
88 void initBasicSetRotated();
96 void TriangleNormal(
size_t ii_dem,
size_t jj_dem,
int which_triangle, Vec3D &v_out);
97 double IntersectionRayTriangle(
const Vec3D &v_view,
size_t ii_0,
size_t jj_0,
size_t ii_dem,
size_t jj_dem,
size_t which_triangle);
98 size_t vectorToSPixel(
const Vec3D &vec_in,
size_t ii_dem,
size_t jj_dem,
size_t which_triangle);
99 void initSkyViewFactor();
100 double computeSkyViewFactor(
size_t ii_dem,
size_t jj_dem,
size_t which_triangle);
101 double getLandViewFactor(
size_t ii_dem,
size_t jj_dem,
size_t which_triangle);
102 double getSkyViewFactor(
size_t ii_dem,
size_t jj_dem,
size_t which_triangle);
103 void getVectorSun(
double solarAzimuth,
double solarElevation, Vec3D &v_out);
104 double TerrainBiggestDifference(
const mio::Array3D<double> &terrain_old,
const mio::Array3D<double> &terrain_new);
107 double NormOfVector(
const Vec3D &vec1);
108 void normalizeVector(
const Vec3D &vec1, Vec3D &v_out);
109 double VectorScalarProduct(
const Vec3D &vec1,
const Vec3D &vec2);
110 void VectorCrossProduct(
const Vec3D &vec1,
const Vec3D &vec2, Vec3D &v_out);
111 void VectorSum(
const Vec3D &vec1,
const Vec3D &vec2, Vec3D &v_out);
112 void VectorDifference(
const Vec3D &vec1,
const Vec3D &vec2, Vec3D &v_out);
113 void VectorStretch(
const Vec3D &vec1,
double factor, Vec3D &v_out);
114 void RotN(
const Vec3D &axis,
const Vec3D &vec_in,
double rad, Vec3D &v_out);
115 void ProjectVectorToPlane(
const Vec3D &vec1,
const Vec3D &plane_normal, Vec3D &v_out);
116 double AngleBetween2Vectors(
const Vec3D &vec1,
const Vec3D &vec2);
126 void PrintProgress(
double percentage);
129 const size_t dimx, dimy;
133 const mio::Config &cfg;
137 std::vector<std::vector<double> > pv_points;
139 mio::Array3D<std::vector<double>> SortList;
140 std::vector<Vec3D> BasicSet_Horizontal;
141 mio::Array4D<Vec3D> BasicSet_rotated;
142 mio::Array4D<std::vector<double>> ViewList;
143 mio::Array2D<double> RList;
144 mio::Array2D<double> albedo_grid;
146 mio::Array2D<double> sky_vf_mean;
147 std::vector<mio::Array2D<double>> sky_vf;
148 unsigned int M_epsilon;
154 bool if_anisotropy =
false;
155 bool if_multiple =
false;
156 bool if_write_view_list =
true;
157 bool if_read_view_list =
false;
Definition: SolarPanel.h:11
Definition: TerrainRadiationAlgorithm.h:37
This module calculates the radiative transfer of SW radiation in snow-covered terrain....
Definition: TerrainRadiationComplex.h:68
TerrainRadiationComplex(const mio::Config &cfg, const mio::DEMObject &dem_in, const std::string &method)
Definition: TerrainRadiationComplex.cc:31
virtual void setMeteo(const mio::Array2D< double > &albedo, const mio::Array2D< double > &ta) override
Definition: TerrainRadiationComplex.cc:901
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) override
Computes direct, diffuse and terrain radiation for each gridpoint. Terrain radiation.
Definition: TerrainRadiationComplex.cc:604
void getSkyViewFactor(mio::Array2D< double > &o_sky_vf) override
Definition: TerrainRadiationComplex.cc:1130
void setSP(const mio::Date timestamp, const double solarAzimuth, const double solarElevation) override
Definition: TerrainRadiationComplex.cc:1415
void writeSP(const unsigned int max_steps) override
Definition: TerrainRadiationComplex.cc:1420