Skip to content
Snippets Groups Projects
Commit 2b6bb9d2 authored by Axelle Drouard's avatar Axelle Drouard
Browse files

Make scheme compatible with 2d and 3d problems

parent 20fc19c7
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,7 @@ add_library( ...@@ -20,6 +20,7 @@ add_library(
target_link_libraries( target_link_libraries(
PugsLanguageModules PugsLanguageModules
${HIGHFIVE_TARGET} ${HIGHFIVE_TARGET}
PugsScheme
) )
add_dependencies( add_dependencies(
...@@ -27,5 +28,6 @@ add_dependencies( ...@@ -27,5 +28,6 @@ add_dependencies(
PugsLanguageModules PugsLanguageModules
PugsLanguageAlgorithms PugsLanguageAlgorithms
PugsUtils PugsUtils
PugsScheme
PugsMesh PugsMesh
) )
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
#include <scheme/DiscreteFunctionVectorIntegrator.hpp> #include <scheme/DiscreteFunctionVectorIntegrator.hpp>
#include <scheme/DiscreteFunctionVectorInterpoler.hpp> #include <scheme/DiscreteFunctionVectorInterpoler.hpp>
#include <scheme/EulerKineticSolver.hpp> #include <scheme/EulerKineticSolver.hpp>
#include <scheme/EulerKineticSolver2D.hpp>
#include <scheme/EulerKineticSolverAcoustic2LagrangeFVOrder2.hpp> #include <scheme/EulerKineticSolverAcoustic2LagrangeFVOrder2.hpp>
#include <scheme/EulerKineticSolverAcousticLagrangeFV.hpp> #include <scheme/EulerKineticSolverAcousticLagrangeFV.hpp>
#include <scheme/EulerKineticSolverFirstOrderFV.hpp> #include <scheme/EulerKineticSolverFirstOrderFV.hpp>
...@@ -44,6 +43,7 @@ ...@@ -44,6 +43,7 @@
#include <scheme/EulerKineticSolverMeanFluxMood.hpp> #include <scheme/EulerKineticSolverMeanFluxMood.hpp>
#include <scheme/EulerKineticSolverMoodFD.hpp> #include <scheme/EulerKineticSolverMoodFD.hpp>
#include <scheme/EulerKineticSolverMoodFV.hpp> #include <scheme/EulerKineticSolverMoodFV.hpp>
#include <scheme/EulerKineticSolverMultiD.hpp>
#include <scheme/EulerKineticSolverOneFluxMood.hpp> #include <scheme/EulerKineticSolverOneFluxMood.hpp>
#include <scheme/EulerKineticSolverThirdOrderFD.hpp> #include <scheme/EulerKineticSolverThirdOrderFD.hpp>
#include <scheme/EulerKineticSolverThirdOrderFV.hpp> #include <scheme/EulerKineticSolverThirdOrderFV.hpp>
...@@ -956,47 +956,62 @@ SchemeModule::SchemeModule() ...@@ -956,47 +956,62 @@ SchemeModule::SchemeModule()
)); ));
this->_addBuiltinFunction("euler_kinetic_2D", this->_addBuiltinFunction("euler_kinetic_MultiD",
std::function( std::function(
[](const double& dt, const double& gamma, const std::vector<TinyVector<2>>& lambda_vector, [](const double& dt, const double& gamma, const std::vector<TinyVector<2>>& lambda_vector,
const double& eps, const size_t& SpaceOrder, const double& eps, const size_t& SpaceOrder,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho, const std::shared_ptr<const DiscreteFunctionVariant>& F_rho,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_u1, const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_u,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_u2,
const std::shared_ptr<const DiscreteFunctionVariant>& F_E, const std::shared_ptr<const DiscreteFunctionVariant>& F_E,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>&
bc_descriptor_list) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, bc_descriptor_list) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>> {
return eulerKineticSolverMultiD(dt, gamma, lambda_vector, eps, SpaceOrder, F_rho,
F_rho_u, F_E, bc_descriptor_list);
}
));
this->_addBuiltinFunction("euler_kinetic_MultiD",
std::function(
[](const double& dt, const double& gamma, const std::vector<TinyVector<3>>& lambda_vector,
const double& eps, const size_t& SpaceOrder,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_u,
const std::shared_ptr<const DiscreteFunctionVariant>& F_E,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>&
bc_descriptor_list) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>> { std::shared_ptr<const DiscreteFunctionVariant>> {
return eulerKineticSolver2D(dt, gamma, lambda_vector, eps, SpaceOrder, F_rho, F_rho_u1, return eulerKineticSolverMultiD(dt, gamma, lambda_vector, eps, SpaceOrder, F_rho,
F_rho_u2, F_E, bc_descriptor_list); F_rho_u, F_E, bc_descriptor_list);
} }
)); ));
this->_addBuiltinFunction("get_lambda_vector", this->_addBuiltinFunction("get_lambda_vector_2d",
std::function( std::function(
[](const std::shared_ptr<const MeshVariant>& mesh, const double& lambda, const size_t& L, [](const std::shared_ptr<const MeshVariant>& mesh, const double& lambda, const size_t& L,
const size_t& M) -> std::vector<TinyVector<2>> { const size_t& M) -> std::vector<TinyVector<2>> {
return getLambdaVector(mesh, lambda, L, M); return getLambdaVector2D(mesh, lambda, L, M);
} }
)); ));
this->_addBuiltinFunction("get_velocity", std::function( this->_addBuiltinFunction("get_lambda_vector_3d", std::function(
[](const std::shared_ptr<const DiscreteFunctionVariant>& Fn_rho_u1, [](const std::shared_ptr<const MeshVariant>& mesh,
const std::shared_ptr<const DiscreteFunctionVariant>& Fn_rho_u2) const double& lambda) -> std::vector<TinyVector<3>> {
-> std::shared_ptr<const DiscreteFunctionVariant> { return getLambdaVector3D(mesh, lambda);
return getVelocity(Fn_rho_u1, Fn_rho_u2);
} }
)); ));
this->_addBuiltinFunction("get_euler_kinetic_waves_2D", this->_addBuiltinFunction("get_euler_kinetic_waves_MultiD",
std::function( std::function(
[](const std::vector<TinyVector<2>>& lambda_vector, [](const std::vector<TinyVector<2>>& lambda_vector,
...@@ -1005,9 +1020,23 @@ SchemeModule::SchemeModule() ...@@ -1005,9 +1020,23 @@ SchemeModule::SchemeModule()
const std::shared_ptr<const DiscreteFunctionVariant>& rho_E, const std::shared_ptr<const DiscreteFunctionVariant>& rho_E,
const double& gamma) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, const double& gamma) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>> {
return getEulerKineticWavesMultiD(lambda_vector, rho, rho_u, rho_E, gamma);
}
));
this->_addBuiltinFunction("get_euler_kinetic_waves_MultiD",
std::function(
[](const std::vector<TinyVector<3>>& lambda_vector,
const std::shared_ptr<const DiscreteFunctionVariant>& rho,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_u,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_E,
const double& gamma) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>> { std::shared_ptr<const DiscreteFunctionVariant>> {
return getEulerKineticWaves2D(lambda_vector, rho, rho_u, rho_E, gamma); return getEulerKineticWavesMultiD(lambda_vector, rho, rho_u, rho_E, gamma);
} }
)); ));
......
...@@ -21,7 +21,7 @@ add_library( ...@@ -21,7 +21,7 @@ add_library(
EulerKineticSolverOneFluxMood.cpp EulerKineticSolverOneFluxMood.cpp
EulerKineticSolverMoodFD.cpp EulerKineticSolverMoodFD.cpp
EulerKineticSolverMoodFV.cpp EulerKineticSolverMoodFV.cpp
EulerKineticSolver2D.cpp EulerKineticSolverMultiD.cpp
EulerKineticSolverThirdOrderMoodFV.cpp EulerKineticSolverThirdOrderMoodFV.cpp
EulerKineticSolverThirdOrderMoodFD.cpp EulerKineticSolverThirdOrderMoodFD.cpp
EulerKineticSolverThirdOrderFV.cpp EulerKineticSolverThirdOrderFV.cpp
......
#ifndef EULER_KINETIC_SOLVER_2D_HPP
#define EULER_KINETIC_SOLVER_2D_HPP
#include <language/utils/FunctionSymbolId.hpp>
#include <scheme/DiscreteFunctionVariant.hpp>
class IBoundaryConditionDescriptor;
std::vector<TinyVector<2>> getLambdaVector(const std::shared_ptr<const MeshVariant>& mesh,
const double& lambda,
const size_t& L,
const size_t& M);
std::shared_ptr<const DiscreteFunctionVariant> getVelocity(
const std::shared_ptr<const DiscreteFunctionVariant>& Fn_rho_u1,
const std::shared_ptr<const DiscreteFunctionVariant>& Fn_rho_u2);
std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
getEulerKineticWaves2D(const std::vector<TinyVector<2>>& lambda_vector,
const std::shared_ptr<const DiscreteFunctionVariant>& rho,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_u,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_E,
const double& gamma);
std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
eulerKineticSolver2D(const double& dt,
const double& gamma,
const std::vector<TinyVector<2>>& lambda_vector,
const double& eps,
const size_t& SpaceOrder,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_u1,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_u2,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_E,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list);
#endif // EULER_KINETIC_SOLVER_2D_HPP
#ifndef EULER_KINETIC_SOLVER_MULTID_HPP
#define EULER_KINETIC_SOLVER_MULTID_HPP
#include <language/utils/FunctionSymbolId.hpp>
#include <scheme/DiscreteFunctionVariant.hpp>
class IBoundaryConditionDescriptor;
std::vector<TinyVector<2>> getLambdaVector2D(const std::shared_ptr<const MeshVariant>& mesh,
const double& lambda,
const size_t& L,
const size_t& M);
std::vector<TinyVector<3>> getLambdaVector3D(const std::shared_ptr<const MeshVariant>& mesh, const double& lambda);
template <size_t Dimension>
std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
getEulerKineticWavesMultiD(const std::vector<TinyVector<Dimension>>& lambda_vector,
const std::shared_ptr<const DiscreteFunctionVariant>& rho,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_u,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_E,
const double& gamma);
template <size_t Dimension>
std::tuple<std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
eulerKineticSolverMultiD(const double& dt,
const double& gamma,
const std::vector<TinyVector<Dimension>>& lambda_vector,
const double& eps,
const size_t& SpaceOrder,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_u,
const std::shared_ptr<const DiscreteFunctionVariant>& F_rho_E,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list);
#endif // EULER_KINETIC_SOLVER_MULTID_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment