Commit ebd0a6f5 authored by ucewa's avatar ucewa
Browse files

Added different FirstCollisionSolvers and Icosahedron Quadratures

parent 434d5e53
......@@ -30,7 +30,7 @@ include_directories( ${LAPACK_INCLUDE_DIR} )
find_package( BLAS )
find_package( VTK COMPONENTS vtkIOGeometry vtkFiltersCore REQUIRED )
find_package( VTK COMPONENTS vtkIOGeometry vtkFiltersCore REQUIRED HINTS ~/VTK-install)
find_package( Python3 COMPONENTS Interpreter Development NumPy REQUIRED )
include_directories( ${Python3_INCLUDE_DIRS} ${Python3_NumPy_INCLUDE_DIRS} )
......
......@@ -45,7 +45,8 @@ class Config
// Quadrature
QUAD_NAME _quadName; /*!< @brief Quadrature Name*/
unsigned short _quadOrder; /*!< @brief Quadrature Order*/
unsigned _nQuadPoints;
unsigned _nQuadPoints; /*!< @brief Nr of Quadrature Points*/
unsigned short _quadOrderFine;
// Mesh
unsigned _nCells; /*!< @brief: Number of cells in the mesh */
......@@ -68,6 +69,12 @@ class Config
ENTROPY_NAME _entropyName; /*!< @brief Name of the used Entropy Functional */
unsigned short _maxMomentDegree; /*!< @brief Maximal Order of Moments for PN and MN Solver */
unsigned short _reconsOrder; /*!< @brief Spatial Order of Accuracy for Solver */
unsigned short _refineIter; /*!< @brief Nr of Iterations for which refinement is wanted */
double _betaAS; /*!< @brief Beta Value for Artificial Scattering */
double _sigmaAS; /*!< @brief Sigma Value for Artificial Scattering */
SOLVER_NAME _uncollidedSolverName; /*!< @brief Chosen Solver for Uncollided Part of First Collision Solver */
bool _localRefine; /*!< @brief is true if Local Refinement is wanted */
bool _artificialScattering; /*!< @brief is true if Artificial Scattering is wanted */
/*!< @brief If true, very low entries (10^-10 or smaller) of the flux matrices will be set to zero,
* to improve floating point accuracy */
......@@ -264,6 +271,7 @@ class Config
unsigned GetNQuadPoints() { return _nQuadPoints; }
QUAD_NAME inline GetQuadName() const { return _quadName; }
unsigned short inline GetQuadOrder() const { return _quadOrder; }
unsigned short inline GetQuadOrderFine() const { return _quadOrderFine; }
// Mesh Structure
unsigned GetNCells() { return _nCells; }
......@@ -280,6 +288,14 @@ class Config
double inline GetTEnd() const { return _tEnd; }
bool inline GetSNAllGaussPts() const { return _allGaussPts; }
bool inline GetIsCSD() const { return _csd; }
// FirstCollision
SOLVER_NAME inline GetFirstCollisionSolver() const { return _uncollidedSolverName; }
bool inline GetIsLocalRefine() const { return _localRefine; }
unsigned short inline GetRefineIter() const { return _refineIter; }
bool inline GetIsArtificialScattering() const { return _artificialScattering; }
double inline GetBetaAS() const { return _betaAS; }
double inline GetSigmaAS() const { return _sigmaAS; }
// Linesource
double inline GetSigmaS() const { return _sigmaS; }
......
......@@ -63,7 +63,9 @@ enum QUAD_NAME {
QUAD_Lebedev,
QUAD_LDFESA,
QUAD_Product,
QUAD_GaussChebyshev1D
QUAD_GaussChebyshev1D,
QUAD_Icosahedron_Mid,
QUAD_Icosahedron_Triang
};
/*! @brief Conversion Map String to enum
......@@ -74,7 +76,9 @@ inline std::map<std::string, QUAD_NAME> Quadrature_Map{ { "MONTE_CARLO", QUAD_Mo
{ "GAUSS_LEGENDRE_1D", QUAD_GaussLegendre1D },
{ "LEVEL_SYMMETRIC", QUAD_LevelSymmetric },
{ "LEBEDEV", QUAD_Lebedev },
{ "LDFESA", QUAD_LDFESA } };
{ "LDFESA", QUAD_LDFESA },
{ "ICOSAHEDRON", QUAD_Icosahedron_Mid },
{ "ICOSAHEDRON_TRIANG", QUAD_Icosahedron_Triang} };
// Problem name
enum PROBLEM_NAME {
......@@ -116,7 +120,10 @@ enum SOLVER_NAME {
CSD_SN_FOKKERPLANCK_TRAFO_SOLVER_2D,
CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D,
PN_SOLVER,
MN_SOLVER
MN_SOLVER,
FIRST_COLLISION_SOLVER,
FIRST_COLLISION_CSD_SN_SOLVER,
REFINE_SN_SOLVER
};
inline std::map<std::string, SOLVER_NAME> Solver_Map{ { "SN_SOLVER", SN_SOLVER },
......@@ -127,7 +134,10 @@ inline std::map<std::string, SOLVER_NAME> Solver_Map{ { "SN_SOLVER", SN_SOLVER }
{ "CSD_SN_FOKKERPLANCK_TRAFO_SOLVER_2D", CSD_SN_FOKKERPLANCK_TRAFO_SOLVER_2D },
{ "CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D", CSD_SN_FOKKERPLANCK_TRAFO_SH_SOLVER_2D },
{ "PN_SOLVER", PN_SOLVER },
{ "MN_SOLVER", MN_SOLVER } };
{ "MN_SOLVER", MN_SOLVER },
{ "FIRST_COLLISION_SOLVER", FIRST_COLLISION_SOLVER },
{ "FIRST_COLLISION_CSD_SN_SOLVER", FIRST_COLLISION_CSD_SN_SOLVER },
{ "REFINE_SN_SOLVER", REFINE_SN_SOLVER } };
// Entropy functional
enum ENTROPY_NAME { QUADRATIC, MAXWELL_BOLTZMANN, BOSE_EINSTEIN, FERMI_DIRAC };
......
......@@ -19,6 +19,7 @@ class Isotropic : public ScatteringKernel
~Isotropic();
virtual Matrix GetScatteringKernel();
virtual Matrix GetScatteringKernelFirstCollision( unsigned nqF, Vector weightsF );
};
#endif
......@@ -19,6 +19,7 @@ class Isotropic1D : public ScatteringKernel
~Isotropic1D();
virtual Matrix GetScatteringKernel();
virtual Matrix GetScatteringKernelFirstCollision( unsigned nqF, Vector weightsF ); // not used in 1D case
};
#endif
......@@ -30,6 +30,7 @@ class ScatteringKernel
/*! @brief: Computes the scattering kernel and for the whole SN system and stores it in a Matrix
@return: Matrix with discretized scattering kernel */
virtual Matrix GetScatteringKernel() = 0;
virtual Matrix GetScatteringKernelFirstCollision( unsigned nqF, Vector weightsF ) = 0;
/*! @brief: Creates an object of the child class of ScatteringKernelBase corresponding to the enum KERNEL_NAME */
static ScatteringKernel* CreateScatteringKernel( KERNEL_NAME name, QuadratureBase* quad );
......
#ifndef QICOSAHEDRON_H
#define QICOSAHEDRON_H
#include "quadraturebase.h"
class QIcosahedron : public QuadratureBase
{
public:
QIcosahedron( Config* settings );
QIcosahedron( unsigned quadOrder );
virtual ~QIcosahedron() {}
private:
void SetName() override { _name = "Icosahedron quadrature."; }
void SetNq() override;
bool CheckOrder();
void SetConnectivity() override;
void SetupTriangulation();
void SetPointsAndWeights() override;
/*! @brief Nr of quadraturepoints in refined quadrature */
void SetNqRefined();
/*! @brief Calculation of corresponding points and weights in refined quadrature /n
Defines _pointsRefined, _weightsRefined, _refineVector */
void Refine();
/*! @brief Set values concerning refinement to original, if no refinement is used */
void ResetValues();
/*! @brief Determination of neighbour triangles for each quadrature point in COARSE quadrature \n
Defines VectorVector _neighbours */
void SetNeighbourConnectivity();
// Helper
/*! @brief Setup of the initial platonic solid (until now only Icosahedron supported) */
void SetupPlatonicSolid();
/*! @brief Interpolation between 2 points on unit sphere (slerp)
@param Vector-a,b Points on unit sphere @param unsigned n Nr of Interpolation points
@return VectorVector of Interpolation points
*/
VectorVector Interpolate( Vector a, Vector b, unsigned n );
/*! @brief Calculates the area of a spherical triangle
@param Vector-a,b,c Points on unit sphere
@return double Area of spherical triangle
*/
double GetArea( Vector a, Vector b, Vector c);
// Variables
private:
VectorVectorU _faces;
VectorVector _vertices;
VectorVector _ptsTriang;
VectorVectorU _triangles;
};
#endif // QICOSAHEDRON_H
\ No newline at end of file
#ifndef QICOSAHEDRONTRIANG_H
#define QICOSAHEDRONTRIANG_H
#include "quadraturebase.h"
class QIcosahedronII : public QuadratureBase
{
public:
QIcosahedronII( Config* settings );
QIcosahedronII( unsigned quadOrder );
virtual ~QIcosahedronII() {}
private:
void SetName() override { _name = "Icosahedron quadrature."; }
void SetNq() override; /*!@brief Set number of quadrature points */
bool CheckOrder();
void SetConnectivity() override;
void SetupTriangulation(); /*!@brief Setup of the Triangulation (face-wise) */
void SetPointsAndWeights() override;
// Helper
void SetupPlatonicSolid(); /*!@brief Setup of the initial platonic solid (until now only Icosahedron supported) */
VectorVector Interpolate( Vector, Vector, unsigned); /*!@brief Interpolation between 2 points on unit sphere (slerp) */
double GetArea( Vector, Vector, Vector); /*!@brief Calculates the area of a spherical triangle */
// Variables
private:
VectorVectorU _faces;
VectorVector _vertices;
VectorVector _ptsTriang;
VectorVectorU _triangles;
};
#endif // QICOSAHEDRONTRIANG_H
\ No newline at end of file
......@@ -72,6 +72,14 @@ class QuadratureBase
inline VectorVectorU GetConnectivity() const {
return _connectivity;
} /*! @returns VectorVectorU _connectivity: connectivity of gridpoints of the quadrature */
/* If local_refinement = false: return values from not refined quadrature object */
inline unsigned GetNqRefined() const { return _nqRefined; }
inline VectorVector GetPointsRefined() const { return _pointsRefined; }
inline Vector GetWeightsRefined() const { return _weightsRefined; }
inline VectorVectorU GetRefineVector() const { return _refineVector; }
inline VectorVectorU GetNeighbours() const { return _neighbours; }
inline VectorVectorU GetNeighboursRefined() const {return _neighboursRefined; }
protected:
// Setter
......@@ -94,6 +102,14 @@ class QuadratureBase
VectorVector _pointsSphere; /*! @brief (my,phi)gridpoints of the quadrature in spherical cordinates */
Vector _weights; /*! @brief weights of the gridpoints of the quadrature */
VectorVectorU _connectivity; /*! @brief connectivity of the gripoints of the quadrature */
unsigned _nqRefined;
VectorVector _pointsRefined;
Vector _weightsRefined;
VectorVectorU _refineVector;
VectorVectorU _neighbours;
VectorVectorU _neighboursRefined;
};
#endif // QUADRATURE_H
......@@ -42,6 +42,10 @@ class CSDSolverTrafoFP : public SNSolver
Vector _energiesOrig; /*! @brief: original energy levels for CSD, lenght = _nEnergies */
Matrix _identity; /*! @brif: identity matrix for FP scattering. Dim (_nq,_nq)*/
double _sigmaAS;
double _betaAS;
Vector _xiAS;
public:
/**
* @brief CSDSolverTrafoFP constructor
......@@ -62,6 +66,10 @@ class CSDSolverTrafoFP : public SNSolver
void IterPreprocessing( unsigned idx_pseudotime ) override final;
void virtual IterPostprocessing() override final;
void SolverPreprocessing() override final;
// Helper
void GetASTransportCoefficients();
void Refinement();
};
#endif // CSDSOLVERTRAFOFP_H
#ifndef FIRSTCOLLISIONCSDSNSOLVER_H
#define FIRSTCOLLISIONCSDSNSOLVER_H
#include "solverbase.h"
class QuadratureBase;
class ScatteringKernel;
class FirstCollisionCSDSNSolver : public Solver
{
public:
/*! @brief Constructor of FirstCollisonSNSolver */
FirstCollisionCSDSNSolver( Config * settings );
/*! @brief Destructor of FirstCollisionSNSolver */
~FirstCollisionCSDSNSolver() {}
/*! @brief: Solver function */
void Solve() override;
private:
/*! @brief Performs preprocessing for the solver (CSD transformations) */
void SolverPreprocessing( ) override;
/*! @brief Performs preprocessing for the current solver iteration */
void IterPreprocessing( unsigned idx_pseudotime ) override;
/*! @brief Performs postprocessing for the current solver iteration */
void IterPostprocessing( ) override; // not used
void IterPostprocessing( unsigned iter );
/*! @brief: Computes the flux of the solution to check conservation properties */
void ComputeRadFlux() override;
void ComputeRadFlux( unsigned iter );
void FluxUpdate() override;
/*! @brief Constructs the flux update for the first collision source of the current iteration and stores it in _solNewFC*/
void FluxUpdateUncollided( );
/*! @brief Constructs the flux update for the current iteration and stores it in _solNew*/
void FluxUpdateCollided( );
void FVMUpdate( unsigned iter ) override;
/*! @brief Computes the finite Volume update step for the first collision source of the current iteration */
void FVMUpdateUncollided( unsigned iter );
/*! @brief Computes the finite Volume update step of the current iteration */
void FVMUpdateCollided( unsigned iter );
/*! @brief Computes the first collision source _FCSource of the current iteration */
void ComputeFirstCollisionSource( unsigned iter );
/*! @brief: Adds the artificial scattering term to the updated first collision source */
// void AddArtificialScattering( unsigned iter );
void GetASTransportCoefficients();
/*! @brief: Computation of the refined version of first collision _solFC */
void IterRefinement( unsigned iter );
/*! @brief: Refinement of the Quadrature depending on external source */
void RefineQuadrature();
/*! @brief: Interpolation of between solution on quadPoints in last iteartion and quadPoints in this iteration */
void InterpolateSolution();
/*! @brief: Determines if refinenment is necessary (per iteration step) */
void DetermineRefinement( unsigned iter );
/*! @brief: CConstructor of the angular flux */
Vector ConstructFluxSN( unsigned idx_cell, bool FC );
void Refinement();
Matrix SetupLaplaceBeltrami( VectorVector p, Vector w );
void PrepareVolumeOutput() override;
void WriteVolumeOutput( unsigned idx_pseudoTime ) override;
// Variables
private:
// CSD Variables
bool _RT;
std::vector<double> _dose;
Vector _energies;
Vector _energiesOrig;
Vector _angle;
double _energyMax;
std::vector<Matrix> _sigmaSE;
std::vector<Matrix> _sigmaSECoarse; /*! @brief scattering cross section for all energies*/
Vector _sigmaTE; /*! @brief total cross section for all energies*/
std::vector<Matrix> _sigmaSEFine; /*! @brief scattering cross section for all energies*/
Vector _sigmaTEFine; /*! @brief total cross section for all energies*/
Vector _sigmaTECoarse;
// FP Variables
unsigned _FPMethod;
blaze::DiagonalMatrix<Matrix> _identityFC;
blaze::DiagonalMatrix<Matrix> _identity;
Matrix _LC;
Matrix _LFC;
Matrix _xi;
Matrix _xiF;
Matrix _MatInterp;
Matrix ILFC;
Matrix IL;
double alpha;
double beta;
double alpha2;
double _sigmaAS;
double _betaAS;
Vector _xiAS;
// general
blaze::DiagonalMatrix<Matrix> _scatteringKernel; /*! @brief Scattering Kernel of coarse quadrature grid */
blaze::DiagonalMatrix<Matrix> _scatteringKernelFC; /*! @brief Scattering kernel from fine to coarse mesh for FirstCollisionSource Calculation */
VectorVector _solFC; /*! @brief Stores the Flux of uncollided Part */
VectorVector _solNewFC; /*! @brief Helper Variable for flux of uncollided part */
VectorVector _QFirstCollision; /*! @brief First Collision Source (dim = [_nCells][_nqC] ) */
// Fine Mesh Variables
QuadratureBase * _quadratureFine; /*! @brief Quadrature in fine mesh (used for uncollided part without local refinement) */
unsigned _nqF; /*! @brief Nr of quadrature points in fine mesh */
VectorVector _quadPointsF; /*! @brief quadrature points of fine mesh */
Vector _weightsF; /*! @brief weights of quadrature points of fine mesh */
// coarse Mesh Variables
unsigned _nqC; /*! @brief Nr of quadrature points in coarse mesh */
VectorVector _quadPointsC; /*! @brief Nr of quadrature points in coarse mesh */
Vector _weightsC; /*! @brief weights of quadrature points of coarse mesh */
VectorVectorU _neigh; /*! @brief Stores the neighbor dependency of quadrature points in coarse mesh */
// Variables used for uncollided part --> new calculated for local refinement
unsigned _nq; /*! @brief Nr of quadrature points used for uncollided part (if NO local refinement: = _nqF)*/
VectorVector _quadPoints; /*! @brief quadrature points used for uncollided part (if NO local refinement: = _quadPointsF) */
Vector _weights; /*! @brief weights of quadrature points used for uncollided part (if NO local refinement: = _weightsF) */
// external Source
std::vector<VectorVector> _QextC; /*! @brief External Source calculated in coarse mesh */
std::vector<VectorVector> _QextF; /*! @brief External Source calculated in fine mesh */
// _Q: external Source used in calculation (from solverbase)
// local Refinement
VectorU _refine; /*! @brief Vector that stores how often a quadPoint was refined, if refinement is needed*/
VectorVectorU _quadC2F; /*! @brief VectorVector with fine quadrature points for each coarse quadrature point ( dim = [_nqC][nr of corresp. fine points]) */
VectorU _quadIDs; /*! @brief VectorU with the IDs corresp to Coarse (ID<_nqC) or Fine (ID>=_nqC) quadarture mesh */
blaze::CompressedMatrix<double> _solInter; /*! @brief interpolation matrix for _solFC (dim = (_nq, _nqOld)) */
unsigned _nqOld; /*! @brief Nr of Quadarture Points in the last iteration */
VectorU _quadIDsOld; /*! @brief _quadIDs from last Itaertion */
};
#endif // FIRSTCOLLISIONCSDSNSOLVER_H
\ No newline at end of file
#ifndef FIRSTCOLLISIONMNSOLVER_H
#define FIRSTCOLLISIONMNSOLVER_H
#include "solverbase.h"
class EntropyBase;
class SphericalBase;
class OptimizerBase;
class FirstCollisionMNSolver : public Solver
{
private:
virtual void IterPreprocessing( unsigned idx_pseudotime ) override;
virtual void IterPostprocessing( ) override;
void FluxUpdate() override; // necessary to define but not used
virtual void FluxUpdateUncollided( );
void FluxUpdateCollided( );
void FVMUpdate( unsigned iter ) override; // necessary to define but not used
virtual void FVMUpdateUncollided( unsigned iter );
void FVMUpdateCollided( unsigned iter );
void ComputeMoments();
virtual void ComputeFirstCollisionSource( unsigned iter );
void ComputeRealizableSolution( unsigned idx_cell );
virtual void ComputeRadFlux() override;
Vector ConstructFluxMN( unsigned idx_cell );
Vector ConstructFluxSN( unsigned idx_cell );
public:
// Constructor of FirstCollisonSolver
FirstCollisionMNSolver( Config * settings );
// Destructor
virtual ~FirstCollisionMNSolver() {}
void Solve() override; // overrides Basis Solver !!
private:
void PrepareVolumeOutput() override;
void WriteVolumeOutput( unsigned idx_pseudoTime ) override;
// Variables
protected:
VectorVector _solF;
VectorVector _solNewF;
// MN Variables
unsigned _LMaxDegree;
SphericalBase * _basis;
unsigned _nTotalEntries;
EntropyBase * _entropy;
OptimizerBase * _optimizer;
VectorVector _alpha;
VectorVector _moments;
Vector _scatterMatDiag;
// coarse Variables
VectorVector _quadPoints;
Vector _weights;
VectorVector _quadPointsSphere;
Matrix _scatteringKernel;
VectorVector _QFirstCollision;
};
#endif // FIRSTCOLLISIONMNSOLVER_H
\ No newline at end of file
#ifndef FIRSTCOLLISIONSNSOLVER_H
#define FIRSTCOLLISIONSNSOLVER_H
#include "solverbase.h"
class QuadratureBase;
class ScatteringKernel;
class FirstCollisionSNSolver : public Solver
{
public:
/*! @brief Constructor of FirstCollisonSNSolver */
FirstCollisionSNSolver( Config * settings );
/*! @brief Destructor of FirstCollisionSNSolver */
~FirstCollisionSNSolver() {}
/*! @brief: Solver function */
void Solve() override;
private:
/*! @brief Performs preprocessing for the current solver iteration */
void IterPreprocessing( unsigned idx_pseudotime ) override;
/*! @brief Performs postprocessing for the current solver iteration */
void IterPostprocessing( ) override;
/*! @brief: Computes the flux of the solution to check conservation properties */
void ComputeRadFlux() override;
void FluxUpdate() override;
/*! @brief Constructs the flux update for the first collision source of the current iteration and stores it in _solNewFC*/
void FluxUpdateUncollided( );
/*! @brief Constructs the flux update for the current iteration and stores it in _solNew*/
void FluxUpdateCollided( );
void FVMUpdate( unsigned iter ) override;
/*! @brief Computes the finite Volume update step for the first collision source of the current iteration */
void FVMUpdateUncollided( unsigned iter );
/*! @brief Computes the finite Volume update step of the current iteration */
void FVMUpdateCollided( unsigned iter );
/*! @brief Computes the first collision source _FCSource of the current iteration */
void ComputeFirstCollisionSource( unsigned iter );
/*! @brief: Adds the artificial scattering term to the updated first collision source */
void AddArtificialScattering( unsigned iter );
void AddArtificialScatteringCoarse( unsigned iter );
/*! @brief: Computation of the refined version of first collision _solFC */
void IterRefinement( unsigned iter );
/*! @brief: Refinement of the Quadrature depending on external source */
void RefineQuadrature();
/*! @brief: Interpolation of between solution on quadPoints in last iteartion and quadPoints in this iteration */
void InterpolateSolution();
/*! @brief: Determines if refinenment is necessary (per iteration step) */
void DetermineRefinement( unsigned iter );
/*! @brief: CConstructor of the angular flux */
Vector ConstructFluxSN( unsigned idx_cell, bool FC );
void PrepareVolumeOutput() override;
void WriteVolumeOutput( unsigned idx_pseudoTime ) override;
void RefineTest();
// Variables
private:
bool localizedIC;
ScatteringKernel * KERNEL;
Matrix _scatteringKernel; /*! @brief Scattering Kernel of coarse quadrature grid */
Matrix _scatteringKernelFC; /*! @brief Scattering kernel from fine to coarse mesh for FirstCollisionSource Calculation */
Matrix _scK;
VectorVector _solFC; /*! @brief Stores the Flux of uncollided Part */
VectorVector _solNewFC; /*! @brief Helper Variable for flux of uncollided part */
VectorVector _QFirstCollision; /*! @brief First Collision Source (dim = [_nCells][_nqC] ) */
// Fine Mesh Variables
QuadratureBase * _quadratureFine; /*! @brief Quadrature in fine mesh (used for uncollided part without local refinement) */
unsigned _nqF; /*! @brief Nr of quadrature points in fine mesh */
VectorVector _quadPointsF; /*! @brief quadrature points of fine mesh */
Vector _weightsF; /*! @brief weights of quadrature points of fine mesh */
VectorVector _quadPointsSphereFine;
// coarse Mesh Variables
unsigned _nqC; /*! @brief Nr of quadrature points in coarse mesh */
VectorVector _quadPointsC; /*! @brief Nr of quadrature points in coarse mesh */
Vector _weightsC; /*! @brief weights of quadrature points of coarse mesh */
VectorVectorU _neigh; /*! @brief Stores the neighbor dependency of quadrature points in coarse mesh */
VectorVector _quadPointsSphere;
// Variables used for uncollided part --> new calculated for local refinement
unsigned _nq; /*! @brief Nr of quadrature points used for uncollided part (if NO local refinement: = _nqF)*/
VectorVector _quadPoints; /*! @brief quadrature points used for uncollided part (if NO local refinement: = _quadPointsF) */
Vector _weights; /*! @brief weights of quadrature points used for uncollided part (if NO local refinement: = _weightsF) */
// external Source
std::vector<VectorVector> _QextC; /*! @brief External Source calculated in coarse mesh */
std::vector<VectorVector> _QextF; /*! @brief External Source calculated in fine mesh */
// _Q: external Source used in calculation (from solverbase)
// local Refinement