Alpine3D 20240427.cd14b8b
SnowDriftA3D Class Reference

#include <SnowDrift.h>

Public Member Functions

 SnowDriftA3D (const mio::DEMObject &dem, const mio::Config &cfg)
 
virtual ~SnowDriftA3D ()
 
virtual void setSnowSurfaceData (const mio::Grid2DObject &cH_in, const mio::Grid2DObject &sp_in, const mio::Grid2DObject &rg_in, const mio::Grid2DObject &N3_in, const mio::Grid2DObject &rb_in)
 
void setSnowPack (SnowpackInterface &mysnowpack)
 
virtual void Compute (const mio::Date &calcDate)
 Main: Calls the essential routines. More...
 
bool isNewWindField (const unsigned int current_step)
 
void setMeteo (const unsigned int &steps, const mio::Grid2DObject &new_psum, const mio::Grid2DObject &new_psum_ph, const mio::Grid2DObject &new_p, mio::Grid2DObject &vw, mio::Grid2DObject &dw, const mio::Grid2DObject &new_rh, const mio::Grid2DObject &new_ta, const std::vector< mio::MeteoData > &vecMeteo)
 Sets the required meteo fields. More...
 
void GetTResults (double outtime_v[15], double outtime_tau[15], double outtime_salt[15], double outtime_diff[15])
 
double getTiming () const
 
void Destroy ()
 
std::string getGridsRequirements () const
 

Protected Member Functions

void Initialize ()
 Initialize for snowdrift Allocate saltation variable, snow height and new snow mass per bottom element. More...
 
void ConstructElements ()
 
void InitializeNodes (const mio::Grid3DObject &z_readMatr)
 Initialize nodes Each (3D) node receives its (x,y,z), slope, aspect, normals. More...
 
void CompleteNodes ()
 Initialize concentration according to the rain rate (uniform) Now calculate the missing parameters Slope in direction of the wind. More...
 
virtual void compSaltation (bool setbound)
 Calculate Saltation Fluxes for all Bottom Elements. More...
 
virtual void SnowMassChange (bool setbound, const mio::Date &calcDate)
 
virtual void Suspension ()
 
virtual void Diffusion (double deltaT, double &diff_max, double t)
 
virtual void Sublimation ()
 Sublimation Calculates drifting snow sublimation at every node of the concentration field. More...
 
double terminalFallVelocity (const double Radius, const double Temperature, const double RH, const double altitude)
 Terminal fall velocity NB assumed to be 0.5. More...
 
double calcS (const double concentration, const double sublradius, const double dmdt)
 Calculate sublimation The mass change of a single particle is now extended to all particles. More...
 
double calcSubldM (const double Radius, const double AirTemperature, const double RH, const double WindSpeed, const double altitude)
 Calculate sublimation mass change This function calculates the mass change of a single ice particle for the given conditions. More...
 
double reynoldsNumberforFallingParticles (const double Radius, const double Windspeed, const double AirTemperature, const double RH, const double altitude)
 Reynolds number Calculate the Reynolds number for a falling particle. More...
 
double ventilationVelocity (const double Radius, const double Windspeed, const double AirTemperature, const double RH, const double altitude)
 Ventilation velocity. More...
 
double waterVaporDensity (const double Temperature, const double VaporPressure)
 
double RH_from_q (const double AirTemp, const double q, const double altitude)
 Relative humidity Gives the relative humidity for a given air temperature and specific humidity. More...
 
void initializeTRH ()
 Initialize RH, T and q Initialize fields of humidity and temperature, necessary for sublimation calculations. More...
 
virtual void Jacobian (double *DETERMINANTJ, double J[][3], const int element, const double *P, int k, const int ix, const int iy, const int iz)
 Compute Jacobian This function calculates the Jacobian at the given point P and and stores the value of its determinant at point P in the global variable DETERMINANTJ[k] the input value is the respective element, the position where to store the DETERMINANTJ[k], and the function is of type void, the Jacobian matrix J and the integration point P and the DETERMINANTJ array. More...
 
virtual void J0fun (double J0[3][3], const double J[3][3])
 J0 function computes the matrix of cofactors of the input matrix J and stores it in J0. More...
 
virtual double GQIntB (double *DETERMINANTJ, const int i, const int j)
 GQIntB returns the integral of the product of basis functions i and j over a hexahedral element using gaussian quadrature, DETERMINANTK[0],...DETERMINANTK[7] contains the determinant of the jacobian of the mapping onto the unit cube evaluated at the corners. More...
 
virtual double GQIntC (double *DETERMINANTJ, const double J0M[3][3][8], const int i, const int j, const double b[3], const double K[3][3])
 GQIntC returns the integral of the product of the gradients of basis functions i and j over a hexahedral element using gaussian quadrature, DETERMINANTK[0],...DETERMINANTK[7] contains the determinant of the jacobian of the mapping onto the unit cube evaluated at the corners. More...
 
virtual double GQIntApdx (double DETERMINANTJ[], const double J0M[3][3][8], const int i, const int j, double b[], const double deltak)
 GQIntApdx returns the integral of the product of a basis function i and the gradient of basis function j over a hexahedral element using gaussian quadrature, DETERMINANTK[0],...DETERMINANTK[7] contains the determinant of the jacobian of the mapping onto the unit cube evaluated at the corners. More...
 
virtual double GQIntAdxdx (double *DETERMINANTJ, double J0M[3][3][8], const int i, const int j, double *b, const double deltak)
 GQIntAdxdx ... More...
 
virtual void TTfun (double TT[3][8], const double P[])
 TT function TTfun is a function calculating the values of the partial derivative of phi at the point P and putting them in a (3,8) array. More...
 
virtual void phi (double *PHI, double *P)
 Phi - shape functions Calculates the value of the 8 shape functions at point P. More...
 
virtual void setQuadraturePoints ()
 
virtual void matmult (CDoubleArray &res, const CDoubleArray &x, double *sm, int *ijm)
 matmult computes a matrix vector product for a sparse matrix More...
 
virtual void matmult (CDoubleArray &res, const CDoubleArray &x, const CDoubleArray &sA, const CIntArray &colA, CIntArray &rowA)
 matmult computes a matrix vector product for a sparse matrix of CSR format More...
 
virtual void transmult (CDoubleArray &res, const CDoubleArray &x, double *sm, int *ijm)
 transmult this is the transmult function that multiplies the vector x by the transpose of the matrix M in its sparse form sm, ijm More...
 
virtual void SolveEquation (int timeStep, int maxTimeStep, const param_type param)
 Solve the advection diffusion equation. More...
 
virtual void bicgStab (CDoubleArray &result, CDoubleArray &rhs, const CDoubleArray &sA, const CIntArray &colA, CIntArray &rowA, const int nmax, const double tol, double &testres)
 bicgStab iterative equation solver iterative equation solver Tests : Tested by the followin procedure: given a sparse matrix A (CRS-format) characterized by colA and rowA and an arbitrary, or rather: a few nontrivial examples of a vector x. For each x matmult(y,x,sA,rowA,colA) and bicgStab(result,y,sA,colA,rowA,...) have been computed and then verified that result=x More...
 
virtual void assembleSystem (CIntArray &colA, CIntArray &rowA, CDoubleArray &sA, CDoubleArray &sB, CDoubleArray &Psi, CDoubleArray &f, const double dt)
 Assemble System loop over all elements, updates the system matrices A, B and the 'bare' right hand side (rhs) of the system, in other words: prepares the system prior to the inclusion of dirichlet boundary conditions. More...
 
virtual void applyBoundaryValues (CDoubleArray &c00, CDoubleArray &Psi)
 applyBoundaryValues Apply boundary values to all elements Author: Marc Ryser More...
 
virtual void prepareSolve ()
 prepareSolve Some preparations to solve a 3D-field. More...
 
virtual void computeDiffusionTensor (double K[3][3], const unsigned int ix, const unsigned int iy, const unsigned int iz)
 Compute diffusion tensor Computes the diffusion tensor of an element, accesses the nodes array and the nodeMap array. More...
 
virtual void computeDriftVector (double b[3], const unsigned int ix, const unsigned int iy, const unsigned int iz)
 Compute the drift vector of an element. More...
 
virtual void computeElementParameters (const int &element, double DETERMINANTJ[8], double J0M[3][3][8], double J0[3][3], double J[3][3], double b[3], double K[3][3], double &deltak, double &qualla, const int ix, const int iy, const int iz)
 Compute parameters of the SUPG method Compute the parameters of the SUPG method for each element. More...
 
virtual void computeElementSystem (int &element, int &nDofNodes, int *dofNode, double Ael[9][9], double Del[9][9], bool stationary, double DETERMINANTJ[8], double J0M[3][3][8], double b[3], double K[3][3], double &deltak, const double &dt, CDoubleArray &f, CDoubleArray &Psi)
 compute element system .... More...
 
virtual void computeDirichletBoundaryValues (int element, double DETERMINANTJ[8], double J0M[3][3][8], double J0[3][3], double b[3], double K[3][3], double deltak, int spec[8], int length_spec, int length_complSpec, CDoubleArray &c00, CDoubleArray &Psi)
 
virtual void addElementMatrix (CDoubleArray &sA, const CIntArray &colInd, const CIntArray &rowPtr, const double Bel[9][9], const int element, const int *spec, const int length_spec)
 Add element matrix given a sparse matrix A in CSR format ( specified by sA, colInd, rowPtr) and the element matrix Bel, this function adds the element contributions to the global ones ; the first length_spec entries of the vector spec contains the indices of the matrix which are inserted Comments : Beware of the enumeration of the matrix sA (size is one bigger than required, zero index is unused => dangerous accesses nodeMap, nodeMap. More...
 
virtual void computeDepositionFlux (const CDoubleArray &c, const double theta)
 compute deposition flux Authors : Marc Ryser Description : calculates the deposition flux i.e. (b c + K grad c) at the artificial layer of nodes and write it to the flux_x,y,z variable Comments : Beware of the enumeration of elements and nodes, Must be consistent with SnowDriftA3D::SnowMassChange(...) Note: this solution has temporary character since flux_x has size (nx-1)*(ny-1) and therefore only internal fluxes are written More...
 
virtual void computeDepositionFluxSublimation (const CDoubleArray &c, const double theta)
 compute deposition flux Authors : Marc Ryser Description : calculates the deposition flux i.e. (b c + K grad c) at the artificial layer of nodes and write it to the flux_x,y,z variable Comments : Beware of the enumeration of elements and nodes, Must be consistent with SnowDriftA3D::SnowMassChange(...) Note: this solution has temporary character since flux_x has size (nx-1)*(ny-1) and therefore only internal fluxes are written More...
 
void setBC_BottomLayer (CDoubleArray &var00, const param_type param)
 Set Bottom Boundary Condition Set the boundary condition of bottom layer +intialize concentration in rest of domain. More...
 
void values_nodes_to_elements (const mio::Grid3DObject &nodesGrid, CDoubleArray &elementsArray)
 nodes_to_elements More...
 
void values_elements_to_nodes (mio::Grid3DObject &nodesGrid, const CDoubleArray &elementsArray)
 elements_to_nodes Extract a 3D-grid of nodes from an array of elements More...
 
void setRobinBoundaryCondition (const aspect_type aspect, const double gamma_val, const int ix, const int iy, const int iz, CDoubleArray &var00, const param_type param)
 Set Robin Boundary Condition. More...
 
virtual void InitializeFEData ()
 Initializes system size and all data members which are required for the finite element solution. More...
 
virtual void prepareSparseMatrix (CIntArray &colA, CIntArray &rowA, CDoubleArray &adjA)
 prepare sparse matrix Description : generates the auxiliary arrays (i.e. the arrays row-pointer and column-index) for a sparse matrix of CSR format. The sparsity pattern is assumed to be given by a finite element problem on a nodal mesh which is topologically equivalent to a simple cubic lattice with N=nx*ny*nz number of nodes. For these hexahedral elements each node belongs to 8 elements. Hence, the support of the basis function of that given node overlaps with the support of 27 nodes' basis functions (including its own) which implies 27 nonzero entries per node in the interior of the domain. On the surface one has 18, 12 and 8 nonzero entries depending on the location (interior, edge, corner) From that the total number of nonzero elements can be computed. Usually, the dimensions of colA and rowA are nNZ and nDOF + 1,respectively where the last entry of rowA holds the number of nonzeros. Note: Here the sizes are nNZ + 1 for colA nDOF + 2 for rowA. This stems from the fact that originally Numerical recipes routines are used for the sparse matrix arrays in numerical recipes start with index one. In order to adopt them an the size was simply enlarged by one and the zero-index entry is unused. => fragile More...
 
virtual void initializeSystem (CIntArray &colA, CIntArray &rowA, CDoubleArray &sA, CDoubleArray &sB, CDoubleArray &rhs, CDoubleArray &f, CDoubleArray &Psi, CDoubleArray &var, CDoubleArray &var00, const param_type param)
 Initialize system initializes vectors for the algorithm required for each time step. More...
 
virtual void resetArray (CDoubleArray &sA)
 
virtual void resetArray (CIntArray &sA)
 
virtual void classifySubdomain ()
 Description... this functions sets summation limits for the loops over boundary elements (faces,bars,corners), presently the assemble routines depend on these limits => fragile the values of the limits is also affected by the enumeration of the elements presently the the first element has the number 1 (instead of 0) => even more fragile. More...
 
virtual int numberOfNonzeros ()
 Number of nonzero elements of the finite element system matrix Description : computes the number of nonzero elements of the finite element system matrix, assumes a rectangular domain with simple cubic connectivity of size nx ny nz and linear elements. Then the support of the basis function at each of the (nx-2)*(ny-2)*(nz-2) degrees of freedom overlaps with the support of the basis functions of a certain number of nodes. The number of these nodes depends on the location of the degree of freedom. This defines four classes of dofs: interior (= adjacent to 0 boundary nodes) face (= adjacent to one boundary node) bar (= adjacent to two boundary nodes) and corner (= adjacent to three boundary nodes) where here adjacency refers to the simple cubic lattice graph. More...
 
void iterativeSublimationCalculation (int timeStep, int maxTimeStep)
 Calculate the steady state sublimation in several steps. Single feedbacks can be switched on or off in SnowDrift.h. More...
 
void zeroRow (int node)
 
void buildWindFieldsTable (const std::string &wind_field_string)
 
void debugOutputs (const mio::Date &calcDate, const std::string &fname, const DRIFT_OUTPUT &filetype)
 
void writeOutput (const std::string &fname)
 Write output Writes the values of several nodes-fields. More...
 

Protected Attributes

Saltation saltation_obj
 
double time_v [15]
 
double time_tau [15]
 
double time_salt [15]
 
double time_diff [15]
 
int DOITERATION
 
double auxLayerHeight
 
double station_altitude
 
mio::IOManager io
 
SnowpackInterfacesnowpack
 
mio::Timer timer
 
mio::Grid2DObject cH
 
mio::Grid2DObject sp
 
mio::Grid2DObject rg
 
mio::Grid2DObject N3
 
mio::Grid2DObject rb
 
unsigned int nx
 
unsigned int ny
 
unsigned int nz
 
unsigned int nDOF
 
unsigned int nNodes
 
unsigned int nElements
 
unsigned int nNZ
 
CDoubleArray sA
 
CDoubleArray sB
 
CIntArray colA
 
CIntArray rowA
 
CDoubleArray Psi
 
CDoubleArray c
 
CDoubleArray q
 
CDoubleArray T
 
CDoubleArray rhs
 
CDoubleArray f
 
CDoubleArray c00
 
CDoubleArray q00
 
CDoubleArray T00
 
CDoubleArray precond
 
CDoubleArray gNeumann
 
CDoubleArray gDirichlet
 
CDoubleArray gamma
 
CIntArray nnzA
 
CDoubleArray adjA
 
double qualla
 
double theta
 
mio::Array2D< int > nz_face
 
mio::Array2D< int > ny_face
 
mio::Array2D< int > nx_face
 
mio::Array2D< int > nz_bar
 
mio::Array2D< int > ny_bar
 
mio::Array2D< int > nx_bar
 
mio::Array2D< int > nz_interior
 
mio::Array2D< int > ny_interior
 
mio::Array2D< int > nx_interior
 
CIntArray n_corner
 
mio::Array2D< double > qPoint
 
CElementArray nodeMap
 
CElementArray dofMap
 
CDoubleArray flux_x
 
CDoubleArray flux_y
 
CDoubleArray flux_z
 
CDoubleArray flux_x_subl
 
CDoubleArray flux_y_subl
 
CDoubleArray flux_z_subl
 
bool new_wind_status
 
CElementArray elems
 
mio::Array2D< double > saltation
 
mio::Array2D< double > c_salt
 
mio::Array2D< double > mns_subl
 
mio::Array2D< double > mns_nosubl
 
mio::Array2D< double > dif_mns_subl
 
mio::Grid2DObject mns
 
mio::Grid2DObject vw
 
mio::Grid2DObject rh
 
mio::Grid2DObject ta
 
mio::Grid2DObject p
 
mio::Grid2DObject psum
 
mio::Grid2DObject psum_ph
 
double ta_1D
 
mio::Date skip_date
 
mio::Grid3DObject nodes_x
 
mio::Grid3DObject nodes_y
 
mio::Grid3DObject nodes_z
 
mio::Grid3DObject nodes_sy
 
mio::Grid3DObject nodes_sx
 
mio::Grid3DObject nodes_slope
 
mio::Grid3DObject nodes_wstar
 
mio::Grid3DObject nodes_u
 
mio::Grid3DObject nodes_v
 
mio::Grid3DObject nodes_w
 
mio::Grid3DObject nodes_K
 
mio::Grid3DObject nodes_e
 
mio::Grid3DObject nodes_c
 
mio::Grid3DObject nodes_Tair
 
mio::Grid3DObject nodes_Tair_ini
 
mio::Grid3DObject nodes_q
 
mio::Grid3DObject nodes_q_ini
 
mio::Grid3DObject nodes_RH
 
mio::Grid3DObject nodes_Subl
 
mio::Grid3DObject nodes_Subl_ini
 
mio::Grid3DObject nodes_WindVel
 
mio::Grid3DObject nodes_tmp_c
 
bool STATIONARY
 
std::vector< struct WIND_FIELDwind_fields
 
int wind_field_index
 

Static Protected Attributes

static const double kinematicViscosityAir = 1.3E-5
 
static const double USTAR =0.87
 
static const double molecularWeightofWater = 18.015E-3
 
static const double thermalConductivityofAtm = 0.024
 
static const double c_red = 1.0
 
static const double grain_size = 0.000680
 
static const double tau_thresh = 0.094
 
static const double z0 = 0.01
 
static const bool thresh_snow = true
 

Constructor & Destructor Documentation

◆ SnowDriftA3D()

SnowDriftA3D::SnowDriftA3D ( const mio::DEMObject &  dem,
const mio::Config &  cfg 
)

◆ ~SnowDriftA3D()

SnowDriftA3D::~SnowDriftA3D ( )
virtual

Member Function Documentation

◆ addElementMatrix()

void SnowDriftA3D::addElementMatrix ( CDoubleArray sA_loc,
const CIntArray colInd,
const CIntArray rowPtr,
const double  Bel[9][9],
const int  element,
const int *  spec,
const int  length_spec 
)
protectedvirtual

Add element matrix given a sparse matrix A in CSR format ( specified by sA, colInd, rowPtr) and the element matrix Bel, this function adds the element contributions to the global ones ; the first length_spec entries of the vector spec contains the indices of the matrix which are inserted Comments : Beware of the enumeration of the matrix sA (size is one bigger than required, zero index is unused => dangerous accesses nodeMap, nodeMap.

Parameters
sA
colInd
rowPtr
Bel
element
spec
length_spec

◆ applyBoundaryValues()

void SnowDriftA3D::applyBoundaryValues ( CDoubleArray var00,
CDoubleArray Psi_loc 
)
protectedvirtual

applyBoundaryValues Apply boundary values to all elements Author: Marc Ryser

Parameters
var00initial variable
Psivector for incorporating inhomogeneous Dirichlet BC

◆ assembleSystem()

void SnowDriftA3D::assembleSystem ( CIntArray colA_loc,
CIntArray rowA_loc,
CDoubleArray sA_loc,
CDoubleArray sB_loc,
CDoubleArray Psi_loc,
CDoubleArray f_loc,
const double  dt 
)
protectedvirtual

Assemble System loop over all elements, updates the system matrices A, B and the 'bare' right hand side (rhs) of the system, in other words: prepares the system prior to the inclusion of dirichlet boundary conditions.

Parameters
colAcolumn index to locate within sparse matrix
rowArow index
sA"system matrix"
sB"system matrix"
Psivector for incorporating inhomogeneous Dirichlet BC
fsource in diffusion equation
dt

◆ bicgStab()

void SnowDriftA3D::bicgStab ( CDoubleArray result,
CDoubleArray rhs_loc,
const CDoubleArray sA_loc,
const CIntArray colA_loc,
CIntArray rowA_loc,
const int  nmax,
const double  tol,
double &  testres 
)
protectedvirtual

bicgStab iterative equation solver iterative equation solver Tests : Tested by the followin procedure: given a sparse matrix A (CRS-format) characterized by colA and rowA and an arbitrary, or rather: a few nontrivial examples of a vector x. For each x matmult(y,x,sA,rowA,colA) and bicgStab(result,y,sA,colA,rowA,...) have been computed and then verified that result=x

Parameters
resresult
rhs
sA
colA
rowA
nmaxmax number of iterations
toltolerance

◆ buildWindFieldsTable()

void SnowDriftA3D::buildWindFieldsTable ( const std::string &  wind_field_string)
protected

◆ calcS()

double SnowDriftA3D::calcS ( const double  concentration,
const double  sublradius,
const double  dmdt 
)
protected

Calculate sublimation The mass change of a single particle is now extended to all particles.

Parameters
concentrationsnow concentration
sublradiusradius of a single particle
dmdtmass change of a single particle due to sublimation

◆ calcSubldM()

double SnowDriftA3D::calcSubldM ( const double  Radius,
const double  AirTemperature,
const double  RH,
const double  WindSpeed,
const double  altitude 
)
protected

Calculate sublimation mass change This function calculates the mass change of a single ice particle for the given conditions.

Parameters
Radiusradius of the ice particle
AirTemperature
RHrelative humidity
WindSpeedmagnitude of the wind

◆ classifySubdomain()

void SnowDriftA3D::classifySubdomain ( void  )
protectedvirtual

Description... this functions sets summation limits for the loops over boundary elements (faces,bars,corners), presently the assemble routines depend on these limits => fragile the values of the limits is also affected by the enumeration of the elements presently the the first element has the number 1 (instead of 0) => even more fragile.

This setting will become important for the domain decomposition, since then an element on the domain boundary is not necessarily an element of the physical boundary, and these array account for that. Note: these summation limits are related to the number of nodes, the number of elements, the number of dofs and accordingly the number of nonzero matrix elemens in the system matrix. It would be better to have one class which holds all these information consistently.

◆ CompleteNodes()

void SnowDriftA3D::CompleteNodes ( )
protected

Initialize concentration according to the rain rate (uniform) Now calculate the missing parameters Slope in direction of the wind.

CompleteNodes

◆ compSaltation()

void SnowDriftA3D::compSaltation ( bool  setbound)
protectedvirtual

Calculate Saltation Fluxes for all Bottom Elements.

Parameters
setboundbool

◆ Compute()

void SnowDriftA3D::Compute ( const mio::Date &  calcDate)
virtual

Main: Calls the essential routines.

Parameters
calcDatedate of current time step

◆ computeDepositionFlux()

void SnowDriftA3D::computeDepositionFlux ( const CDoubleArray concentration,
const double  theta_l 
)
protectedvirtual

compute deposition flux Authors : Marc Ryser Description : calculates the deposition flux i.e. (b c + K grad c) at the artificial layer of nodes and write it to the flux_x,y,z variable Comments : Beware of the enumeration of elements and nodes, Must be consistent with SnowDriftA3D::SnowMassChange(...) Note: this solution has temporary character since flux_x has size (nx-1)*(ny-1) and therefore only internal fluxes are written

Parameters
CDoubleArray&cConcentration of snow
thetaheight above bottom of element

◆ computeDepositionFluxSublimation()

void SnowDriftA3D::computeDepositionFluxSublimation ( const CDoubleArray concentration,
const double  theta_l 
)
protectedvirtual

compute deposition flux Authors : Marc Ryser Description : calculates the deposition flux i.e. (b c + K grad c) at the artificial layer of nodes and write it to the flux_x,y,z variable Comments : Beware of the enumeration of elements and nodes, Must be consistent with SnowDriftA3D::SnowMassChange(...) Note: this solution has temporary character since flux_x has size (nx-1)*(ny-1) and therefore only internal fluxes are written

Parameters
CDoubleArray&cConcentration of snow
thetaheight above bottom of element

◆ computeDiffusionTensor()

void SnowDriftA3D::computeDiffusionTensor ( double  K[3][3],
const unsigned int  ix,
const unsigned int  iy,
const unsigned int  iz 
)
protectedvirtual

Compute diffusion tensor Computes the diffusion tensor of an element, accesses the nodes array and the nodeMap array.

Parameters
elementelement number
Kdiffusion coefficient
layerlayer of the element

◆ computeDirichletBoundaryValues()

void SnowDriftA3D::computeDirichletBoundaryValues ( int  element,
double  DETERMINANTJ[8],
double  J0M[3][3][8],
double  J0[3][3],
double  b[3],
double  K[3][3],
double  deltak,
int  spec[8],
int  length_spec,
int  length_complSpec,
CDoubleArray c00,
CDoubleArray Psi 
)
protectedvirtual

◆ computeDriftVector()

void SnowDriftA3D::computeDriftVector ( double  b[3],
const unsigned int  ix,
const unsigned int  iy,
const unsigned int  iz 
)
protectedvirtual

Compute the drift vector of an element.

Parameters
elementelement number
bdrift vector

◆ computeElementParameters()

void SnowDriftA3D::computeElementParameters ( const int &  element,
double  DETERMINANTJ[8],
double  J0M[3][3][8],
double  J0[3][3],
double  J[3][3],
double  b[3],
double  K[3][3],
double &  deltak,
double &  qualla_loc,
const int  ix,
const int  iy,
const int  iz 
)
protectedvirtual

Compute parameters of the SUPG method Compute the parameters of the SUPG method for each element.

Parameters
elementElement number
DETERMINANTJDeterminant of Jacobian matrix
J0M
J0JO matrix
JJacobian matrix
bdrift vector
KDiffusion tensor
&deltakparameter SUPG method
&quallaparameter SUPG method (to vary delta_k)

◆ computeElementSystem()

void SnowDriftA3D::computeElementSystem ( int &  element,
int &  nDofNodes,
int *  dofNode,
double  Ael[9][9],
double  Del[9][9],
bool  stationary,
double  DETERMINANTJ[8],
double  J0M[3][3][8],
double  b[3],
double  K[3][3],
double &  deltak,
const double &  dt,
CDoubleArray f_loc,
CDoubleArray Psi_loc 
)
protectedvirtual

compute element system ....

Parameters
elementelement number
nDofNodesdegrees of freedom of element
Ael
Del
stationary
DETERMINANTJ
J0M
bwind field
Kdiffusion tensor
deltakparameter
dt
fsource
Psi

◆ ConstructElements()

void SnowDriftA3D::ConstructElements ( )
protected

◆ debugOutputs()

void SnowDriftA3D::debugOutputs ( const mio::Date &  calcDate,
const std::string &  fname,
const DRIFT_OUTPUT filetype 
)
protected

◆ Destroy()

void SnowDriftA3D::Destroy ( )

◆ Diffusion()

void SnowDriftA3D::Diffusion ( double  deltaT,
double &  diff_max,
double  t 
)
protectedvirtual

◆ getGridsRequirements()

std::string SnowDriftA3D::getGridsRequirements ( ) const

◆ getTiming()

double SnowDriftA3D::getTiming ( ) const

◆ GetTResults()

void SnowDriftA3D::GetTResults ( double  outtime_v[15],
double  outtime_tau[15],
double  outtime_salt[15],
double  outtime_diff[15] 
)

◆ GQIntAdxdx()

double SnowDriftA3D::GQIntAdxdx ( double *  DETERMINANTJ,
double  J0M[3][3][8],
const int  i,
const int  j,
double *  b,
const double  deltak 
)
protectedvirtual

GQIntAdxdx ...

Parameters
DETERMINANTJdeterminant of Jacobian
J0M
ipointer
jpointer
*bdrift vector
deltakparameter SUPG method

◆ GQIntApdx()

double SnowDriftA3D::GQIntApdx ( double  DETERMINANTJ[],
const double  J0M[3][3][8],
const int  i,
const int  j,
double  b[],
const double  deltak 
)
protectedvirtual

GQIntApdx returns the integral of the product of a basis function i and the gradient of basis function j over a hexahedral element using gaussian quadrature, DETERMINANTK[0],...DETERMINANTK[7] contains the determinant of the jacobian of the mapping onto the unit cube evaluated at the corners.

Parameters
DETERMINANTJdeterminant of Jacobian
J0M
inr basis function
jnr basis function
bdrift vector
deltakparameter SUPG method

◆ GQIntB()

double SnowDriftA3D::GQIntB ( double *  DETERMINANTJ,
const int  i,
const int  j 
)
protectedvirtual

GQIntB returns the integral of the product of basis functions i and j over a hexahedral element using gaussian quadrature, DETERMINANTK[0],...DETERMINANTK[7] contains the determinant of the jacobian of the mapping onto the unit cube evaluated at the corners.

Parameters
DETERMINANTJdeterminant of Jacobian
inr shape function
jnr shape function

◆ GQIntC()

double SnowDriftA3D::GQIntC ( double *  DETERMINANTJ,
const double  J0M[3][3][8],
const int  i,
const int  j,
const double  b[3],
const double  K[3][3] 
)
protectedvirtual

GQIntC returns the integral of the product of the gradients of basis functions i and j over a hexahedral element using gaussian quadrature, DETERMINANTK[0],...DETERMINANTK[7] contains the determinant of the jacobian of the mapping onto the unit cube evaluated at the corners.

Parameters
DETERMINANTJdeterminant of Jacobian
J0M
ipointer/index
jpointer/index
bdrift vector
KDiffusion tensor

◆ Initialize()

void SnowDriftA3D::Initialize ( )
protected

Initialize for snowdrift Allocate saltation variable, snow height and new snow mass per bottom element.

◆ InitializeFEData()

void SnowDriftA3D::InitializeFEData ( void  )
protectedvirtual

Initializes system size and all data members which are required for the finite element solution.

◆ InitializeNodes()

void SnowDriftA3D::InitializeNodes ( const mio::Grid3DObject &  z_readMatr)
protected

Initialize nodes Each (3D) node receives its (x,y,z), slope, aspect, normals.

◆ initializeSystem()

void SnowDriftA3D::initializeSystem ( CIntArray colA_loc,
CIntArray rowA_loc,
CDoubleArray sA_loc,
CDoubleArray sB_loc,
CDoubleArray rhs_loc,
CDoubleArray f_loc,
CDoubleArray Psi_loc,
CDoubleArray var,
CDoubleArray var00,
const param_type  param 
)
protectedvirtual

Initialize system initializes vectors for the algorithm required for each time step.

Parameters
colAarray determining the sparsity pattern
rowAarray determining the sparsity pattern
sAsystem matrix in compressed sparse row (CSR) storage format
sBsystem matrix in compressed sparse row (CSR) storage format
rhsvector which contains the right hand side of the linear system
fsource term in the advection/diffusion equation (sublimation amount)
Psiauxiliary vector for incorporating inhomogeneous Dirichlet boundary conditions
varvariable for which equation has to be solved (Humidity, Concentration or Temperature)
var00boundary condition at bottom + initial condition interior domain of variable var

◆ initializeTRH()

void SnowDriftA3D::initializeTRH ( )
protected

Initialize RH, T and q Initialize fields of humidity and temperature, necessary for sublimation calculations.

◆ isNewWindField()

bool SnowDriftA3D::isNewWindField ( const unsigned int  current_step)

◆ iterativeSublimationCalculation()

void SnowDriftA3D::iterativeSublimationCalculation ( int  timeStep,
int  maxTimeStep 
)
protected

Calculate the steady state sublimation in several steps. Single feedbacks can be switched on or off in SnowDrift.h.

◆ J0fun()

void SnowDriftA3D::J0fun ( double  J0[3][3],
const double  J[3][3] 
)
protectedvirtual

J0 function computes the matrix of cofactors of the input matrix J and stores it in J0.

Parameters
J0matrix of cofactors (transpose of the adjoint of J)
JJacobian matrix

◆ Jacobian()

void SnowDriftA3D::Jacobian ( double *  DETERMINANTJ,
double  J[][3],
const int  element,
const double *  P,
int  k,
const int  ix,
const int  iy,
const int  iz 
)
protectedvirtual

Compute Jacobian This function calculates the Jacobian at the given point P and and stores the value of its determinant at point P in the global variable DETERMINANTJ[k] the input value is the respective element, the position where to store the DETERMINANTJ[k], and the function is of type void, the Jacobian matrix J and the integration point P and the DETERMINANTJ array.

Parameters
DETERMINANTJDeterminant of Jacobian matrix
JJacobian matrix
elementelement number
Ppoint where Jacobian has to be calculated
kfor storing Jacobian at DETERMINANTJ(k)

◆ matmult() [1/2]

void SnowDriftA3D::matmult ( CDoubleArray y_loc,
const CDoubleArray x_loc,
const CDoubleArray sA_loc,
const CIntArray colInd,
CIntArray rowPtr 
)
protectedvirtual

matmult computes a matrix vector product for a sparse matrix of CSR format

Parameters
yresult (matrix vector product)
x
sA
colindcolumn index
rowPtrrow index

◆ matmult() [2/2]

void SnowDriftA3D::matmult ( CDoubleArray res,
const CDoubleArray x_loc,
double *  sm,
int *  ijm 
)
protectedvirtual

matmult computes a matrix vector product for a sparse matrix

Parameters
resresult (matrix vector product)
x
smsparse matrix
ijm

◆ numberOfNonzeros()

int SnowDriftA3D::numberOfNonzeros ( )
protectedvirtual

Number of nonzero elements of the finite element system matrix Description : computes the number of nonzero elements of the finite element system matrix, assumes a rectangular domain with simple cubic connectivity of size nx ny nz and linear elements. Then the support of the basis function at each of the (nx-2)*(ny-2)*(nz-2) degrees of freedom overlaps with the support of the basis functions of a certain number of nodes. The number of these nodes depends on the location of the degree of freedom. This defines four classes of dofs: interior (= adjacent to 0 boundary nodes) face (= adjacent to one boundary node) bar (= adjacent to two boundary nodes) and corner (= adjacent to three boundary nodes) where here adjacency refers to the simple cubic lattice graph.

accesses the SnowDrift variable nNZ Comments : For parallelization issues this must be in accordance with the summation limits set in SnowDriftA3D::classifySubdomain()

◆ phi()

void SnowDriftA3D::phi ( double *  PHI,
double *  P 
)
protectedvirtual

Phi - shape functions Calculates the value of the 8 shape functions at point P.

Parameters
*PHI...................shape functions
*Ppointer

◆ prepareSolve()

void SnowDriftA3D::prepareSolve ( )
protectedvirtual

prepareSolve Some preparations to solve a 3D-field.

◆ prepareSparseMatrix()

void SnowDriftA3D::prepareSparseMatrix ( CIntArray colA,
CIntArray rowA,
CDoubleArray adjA 
)
protectedvirtual

prepare sparse matrix Description : generates the auxiliary arrays (i.e. the arrays row-pointer and column-index) for a sparse matrix of CSR format. The sparsity pattern is assumed to be given by a finite element problem on a nodal mesh which is topologically equivalent to a simple cubic lattice with N=nx*ny*nz number of nodes. For these hexahedral elements each node belongs to 8 elements. Hence, the support of the basis function of that given node overlaps with the support of 27 nodes' basis functions (including its own) which implies 27 nonzero entries per node in the interior of the domain. On the surface one has 18, 12 and 8 nonzero entries depending on the location (interior, edge, corner) From that the total number of nonzero elements can be computed. Usually, the dimensions of colA and rowA are nNZ and nDOF + 1,respectively where the last entry of rowA holds the number of nonzeros. Note: Here the sizes are nNZ + 1 for colA nDOF + 2 for rowA. This stems from the fact that originally Numerical recipes routines are used for the sparse matrix arrays in numerical recipes start with index one. In order to adopt them an the size was simply enlarged by one and the zero-index entry is unused. => fragile

◆ resetArray() [1/2]

void SnowDriftA3D::resetArray ( CDoubleArray sA)
protectedvirtual

◆ resetArray() [2/2]

void SnowDriftA3D::resetArray ( CIntArray sA)
protectedvirtual

◆ reynoldsNumberforFallingParticles()

double SnowDriftA3D::reynoldsNumberforFallingParticles ( const double  Radius,
const double  Windspeed,
const double  AirTemperature,
const double  RH,
const double  altitude 
)
protected

Reynolds number Calculate the Reynolds number for a falling particle.

Parameters
Radiusradius of the particle
Windspeedmagnitude of the wind
AirTemperature
RHrelative humidity of the air

◆ RH_from_q()

double SnowDriftA3D::RH_from_q ( const double  AirTemp,
const double  qi,
const double  altitude 
)
protected

Relative humidity Gives the relative humidity for a given air temperature and specific humidity.

Parameters
AirTempAir temperature
qispecific humidity
altitudeAltitude above sea level

◆ setBC_BottomLayer()

void SnowDriftA3D::setBC_BottomLayer ( CDoubleArray var00,
const param_type  param 
)
protected

Set Bottom Boundary Condition Set the boundary condition of bottom layer +intialize concentration in rest of domain.

Parameters
c00initial concentration/humidity at bottom

◆ setMeteo()

void SnowDriftA3D::setMeteo ( const unsigned int &  steps,
const mio::Grid2DObject &  new_psum,
const mio::Grid2DObject &  new_psum_ph,
const mio::Grid2DObject &  new_p,
mio::Grid2DObject &  vw,
mio::Grid2DObject &  dw,
const mio::Grid2DObject &  new_rh,
const mio::Grid2DObject &  new_ta,
const std::vector< mio::MeteoData > &  vecMeteo 
)

Sets the required meteo fields.

◆ setQuadraturePoints()

void SnowDriftA3D::setQuadraturePoints ( void  )
protectedvirtual

◆ setRobinBoundaryCondition()

void SnowDriftA3D::setRobinBoundaryCondition ( const aspect_type  aspect,
const double  gamma_val,
const int  ix,
const int  iy,
const int  iz,
CDoubleArray var00,
const param_type  param 
)
protected

Set Robin Boundary Condition.

Parameters
aspectLocation of boundary (NSWE or top/bottom)
gamma_val(double) constant to approach Dirichlet or Neumann condition
ix,iy,izlocation
var00Initial 3D field (T, q or c) that needs to be set
paramType of field (T, q or c)

◆ setSnowPack()

void SnowDriftA3D::setSnowPack ( SnowpackInterface mysnowpack)

◆ setSnowSurfaceData()

void SnowDriftA3D::setSnowSurfaceData ( const mio::Grid2DObject &  cH_in,
const mio::Grid2DObject &  sp_in,
const mio::Grid2DObject &  rg_in,
const mio::Grid2DObject &  N3_in,
const mio::Grid2DObject &  rb_in 
)
virtual

◆ SnowMassChange()

void SnowDriftA3D::SnowMassChange ( bool  setbound,
const mio::Date &  calcDate 
)
protectedvirtual

◆ SolveEquation()

void SnowDriftA3D::SolveEquation ( int  timeStep,
int  maxTimeStep,
const param_type  param 
)
protectedvirtual

Solve the advection diffusion equation.

Parameters
timeStep(parameter only for non stationary)
maxTimeStep(parameter only for non stationary)
paramvariable that should be solved

◆ Sublimation()

void SnowDriftA3D::Sublimation ( )
protectedvirtual

Sublimation Calculates drifting snow sublimation at every node of the concentration field.

◆ Suspension()

void SnowDriftA3D::Suspension ( )
protectedvirtual

◆ terminalFallVelocity()

double SnowDriftA3D::terminalFallVelocity ( const double  Radius,
const double  Temperature,
const double  RH,
const double  altitude 
)
protected

Terminal fall velocity NB assumed to be 0.5.

Parameters
Radiusradius of the particle
Temperatureair temperature (K)
RHrelative humidity of the air (between 0 and 1)
altitudeAltitude above sea level

◆ transmult()

void SnowDriftA3D::transmult ( CDoubleArray res,
const CDoubleArray x_loc,
double *  sm,
int *  ijm 
)
protectedvirtual

transmult this is the transmult function that multiplies the vector x by the transpose of the matrix M in its sparse form sm, ijm

Parameters
resresult
x
sm
ijmindex

◆ TTfun()

void SnowDriftA3D::TTfun ( double  TT[3][8],
const double  P[] 
)
protectedvirtual

TT function TTfun is a function calculating the values of the partial derivative of phi at the point P and putting them in a (3,8) array.

Parameters
TTpartial derivative of phi at point P (result of this function)
Ppointer

◆ values_elements_to_nodes()

void SnowDriftA3D::values_elements_to_nodes ( mio::Grid3DObject &  nodesGrid,
const CDoubleArray elementsArray 
)
protected

elements_to_nodes Extract a 3D-grid of nodes from an array of elements

Parameters
nodesGridgrid of nodes that should be filled
elementsArrayarray with elements

◆ values_nodes_to_elements()

void SnowDriftA3D::values_nodes_to_elements ( const mio::Grid3DObject &  nodesGrid,
CDoubleArray elementsArray 
)
protected

nodes_to_elements

Parameters
nodesGrid3Dgrid of nodes
elementsArrayarray with elements

◆ ventilationVelocity()

double SnowDriftA3D::ventilationVelocity ( const double  Radius,
const double  Windspeed,
const double  AirTemperature,
const double  RH,
const double  altitude 
)
protected

Ventilation velocity.

Parameters
Radiusradius of the particle
Windspeedmagnitude of the wind
AirTemperature
RHrelative humidity of the air
altitudeAltitude above sea level

◆ waterVaporDensity()

double SnowDriftA3D::waterVaporDensity ( const double  Temperature,
const double  VaporPressure 
)
protected

◆ writeOutput()

void SnowDriftA3D::writeOutput ( const std::string &  fname)
protected

Write output Writes the values of several nodes-fields.

◆ zeroRow()

void SnowDriftA3D::zeroRow ( int  node)
protected

Member Data Documentation

◆ adjA

CDoubleArray SnowDriftA3D::adjA
protected

◆ auxLayerHeight

double SnowDriftA3D::auxLayerHeight
protected

◆ c

CDoubleArray SnowDriftA3D::c
protected

◆ c00

CDoubleArray SnowDriftA3D::c00
protected

◆ c_red

const double SnowDriftA3D::c_red = 1.0
staticprotected

◆ c_salt

mio::Array2D<double> SnowDriftA3D::c_salt
protected

◆ cH

mio::Grid2DObject SnowDriftA3D::cH
protected

◆ colA

CIntArray SnowDriftA3D::colA
protected

◆ dif_mns_subl

mio::Array2D<double> SnowDriftA3D::dif_mns_subl
protected

◆ dofMap

CElementArray SnowDriftA3D::dofMap
protected

◆ DOITERATION

int SnowDriftA3D::DOITERATION
protected

◆ elems

CElementArray SnowDriftA3D::elems
protected

◆ f

CDoubleArray SnowDriftA3D::f
protected

◆ flux_x

CDoubleArray SnowDriftA3D::flux_x
protected

◆ flux_x_subl

CDoubleArray SnowDriftA3D::flux_x_subl
protected

◆ flux_y

CDoubleArray SnowDriftA3D::flux_y
protected

◆ flux_y_subl

CDoubleArray SnowDriftA3D::flux_y_subl
protected

◆ flux_z

CDoubleArray SnowDriftA3D::flux_z
protected

◆ flux_z_subl

CDoubleArray SnowDriftA3D::flux_z_subl
protected

◆ gamma

CDoubleArray SnowDriftA3D::gamma
protected

◆ gDirichlet

CDoubleArray SnowDriftA3D::gDirichlet
protected

◆ gNeumann

CDoubleArray SnowDriftA3D::gNeumann
protected

◆ grain_size

const double SnowDriftA3D::grain_size = 0.000680
staticprotected

◆ io

mio::IOManager SnowDriftA3D::io
protected

◆ kinematicViscosityAir

const double SnowDriftA3D::kinematicViscosityAir = 1.3E-5
staticprotected

◆ mns

mio::Grid2DObject SnowDriftA3D::mns
protected

◆ mns_nosubl

mio::Array2D<double> SnowDriftA3D::mns_nosubl
protected

◆ mns_subl

mio::Array2D<double> SnowDriftA3D::mns_subl
protected

◆ molecularWeightofWater

const double SnowDriftA3D::molecularWeightofWater = 18.015E-3
staticprotected

◆ N3

mio::Grid2DObject SnowDriftA3D::N3
protected

◆ n_corner

CIntArray SnowDriftA3D::n_corner
protected

◆ nDOF

unsigned int SnowDriftA3D::nDOF
protected

◆ nElements

unsigned int SnowDriftA3D::nElements
protected

◆ new_wind_status

bool SnowDriftA3D::new_wind_status
protected

◆ nNodes

unsigned int SnowDriftA3D::nNodes
protected

◆ nNZ

unsigned int SnowDriftA3D::nNZ
protected

◆ nnzA

CIntArray SnowDriftA3D::nnzA
protected

◆ nodeMap

CElementArray SnowDriftA3D::nodeMap
protected

◆ nodes_c

mio::Grid3DObject SnowDriftA3D::nodes_c
protected

◆ nodes_e

mio::Grid3DObject SnowDriftA3D::nodes_e
protected

◆ nodes_K

mio::Grid3DObject SnowDriftA3D::nodes_K
protected

◆ nodes_q

mio::Grid3DObject SnowDriftA3D::nodes_q
protected

◆ nodes_q_ini

mio::Grid3DObject SnowDriftA3D::nodes_q_ini
protected

◆ nodes_RH

mio::Grid3DObject SnowDriftA3D::nodes_RH
protected

◆ nodes_slope

mio::Grid3DObject SnowDriftA3D::nodes_slope
protected

◆ nodes_Subl

mio::Grid3DObject SnowDriftA3D::nodes_Subl
protected

◆ nodes_Subl_ini

mio::Grid3DObject SnowDriftA3D::nodes_Subl_ini
protected

◆ nodes_sx

mio::Grid3DObject SnowDriftA3D::nodes_sx
protected

◆ nodes_sy

mio::Grid3DObject SnowDriftA3D::nodes_sy
protected

◆ nodes_Tair

mio::Grid3DObject SnowDriftA3D::nodes_Tair
protected

◆ nodes_Tair_ini

mio::Grid3DObject SnowDriftA3D::nodes_Tair_ini
protected

◆ nodes_tmp_c

mio::Grid3DObject SnowDriftA3D::nodes_tmp_c
protected

◆ nodes_u

mio::Grid3DObject SnowDriftA3D::nodes_u
protected

◆ nodes_v

mio::Grid3DObject SnowDriftA3D::nodes_v
protected

◆ nodes_w

mio::Grid3DObject SnowDriftA3D::nodes_w
protected

◆ nodes_WindVel

mio::Grid3DObject SnowDriftA3D::nodes_WindVel
protected

◆ nodes_wstar

mio::Grid3DObject SnowDriftA3D::nodes_wstar
protected

◆ nodes_x

mio::Grid3DObject SnowDriftA3D::nodes_x
protected

◆ nodes_y

mio::Grid3DObject SnowDriftA3D::nodes_y
protected

◆ nodes_z

mio::Grid3DObject SnowDriftA3D::nodes_z
protected

◆ nx

unsigned int SnowDriftA3D::nx
protected

◆ nx_bar

mio::Array2D<int> SnowDriftA3D::nx_bar
protected

◆ nx_face

mio::Array2D<int> SnowDriftA3D::nx_face
protected

◆ nx_interior

mio::Array2D<int> SnowDriftA3D::nx_interior
protected

◆ ny

unsigned int SnowDriftA3D::ny
protected

◆ ny_bar

mio::Array2D<int> SnowDriftA3D::ny_bar
protected

◆ ny_face

mio::Array2D<int> SnowDriftA3D::ny_face
protected

◆ ny_interior

mio::Array2D<int> SnowDriftA3D::ny_interior
protected

◆ nz

unsigned int SnowDriftA3D::nz
protected

◆ nz_bar

mio::Array2D<int> SnowDriftA3D::nz_bar
protected

◆ nz_face

mio::Array2D<int> SnowDriftA3D::nz_face
protected

◆ nz_interior

mio::Array2D<int> SnowDriftA3D::nz_interior
protected

◆ p

mio::Grid2DObject SnowDriftA3D::p
protected

◆ precond

CDoubleArray SnowDriftA3D::precond
protected

◆ Psi

CDoubleArray SnowDriftA3D::Psi
protected

◆ psum

mio::Grid2DObject SnowDriftA3D::psum
protected

◆ psum_ph

mio::Grid2DObject SnowDriftA3D::psum_ph
protected

◆ q

CDoubleArray SnowDriftA3D::q
protected

◆ q00

CDoubleArray SnowDriftA3D::q00
protected

◆ qPoint

mio::Array2D<double> SnowDriftA3D::qPoint
protected

◆ qualla

double SnowDriftA3D::qualla
protected

◆ rb

mio::Grid2DObject SnowDriftA3D::rb
protected

◆ rg

mio::Grid2DObject SnowDriftA3D::rg
protected

◆ rh

mio::Grid2DObject SnowDriftA3D::rh
protected

◆ rhs

CDoubleArray SnowDriftA3D::rhs
protected

◆ rowA

CIntArray SnowDriftA3D::rowA
protected

◆ sA

CDoubleArray SnowDriftA3D::sA
protected

◆ saltation

mio::Array2D<double> SnowDriftA3D::saltation
protected

◆ saltation_obj

Saltation SnowDriftA3D::saltation_obj
protected

◆ sB

CDoubleArray SnowDriftA3D::sB
protected

◆ skip_date

mio::Date SnowDriftA3D::skip_date
protected

◆ snowpack

SnowpackInterface* SnowDriftA3D::snowpack
protected

◆ sp

mio::Grid2DObject SnowDriftA3D::sp
protected

◆ station_altitude

double SnowDriftA3D::station_altitude
protected

◆ STATIONARY

bool SnowDriftA3D::STATIONARY
protected

◆ T

CDoubleArray SnowDriftA3D::T
protected

◆ T00

CDoubleArray SnowDriftA3D::T00
protected

◆ ta

mio::Grid2DObject SnowDriftA3D::ta
protected

◆ ta_1D

double SnowDriftA3D::ta_1D
protected

◆ tau_thresh

const double SnowDriftA3D::tau_thresh = 0.094
staticprotected

◆ thermalConductivityofAtm

const double SnowDriftA3D::thermalConductivityofAtm = 0.024
staticprotected

◆ theta

double SnowDriftA3D::theta
protected

◆ thresh_snow

const bool SnowDriftA3D::thresh_snow = true
staticprotected

◆ time_diff

double SnowDriftA3D::time_diff[15]
protected

◆ time_salt

double SnowDriftA3D::time_salt[15]
protected

◆ time_tau

double SnowDriftA3D::time_tau[15]
protected

◆ time_v

double SnowDriftA3D::time_v[15]
protected

◆ timer

mio::Timer SnowDriftA3D::timer
protected

◆ USTAR

const double SnowDriftA3D::USTAR =0.87
staticprotected

◆ vw

mio::Grid2DObject SnowDriftA3D::vw
protected

◆ wind_field_index

int SnowDriftA3D::wind_field_index
protected

◆ wind_fields

std::vector<struct WIND_FIELD> SnowDriftA3D::wind_fields
protected

◆ z0

const double SnowDriftA3D::z0 = 0.01
staticprotected

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