Skip to content
Snippets Groups Projects
Commit eaf29b89 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add access to cells' volume of a mesh in the script file

`m` denoting a mesh
```
let V:Vh, V = cell_volume(m);
```
parent f7bb98ce
No related branches found
No related tags found
1 merge request!90Add access to cells' volume of a mesh in the script file
......@@ -6,12 +6,16 @@
#include <language/utils/BinaryOperatorProcessorBuilder.hpp>
#include <language/utils/BuiltinFunctionEmbedder.hpp>
#include <language/utils/TypeDescriptor.hpp>
#include <mesh/Connectivity.hpp>
#include <mesh/Mesh.hpp>
#include <mesh/MeshData.hpp>
#include <mesh/MeshDataManager.hpp>
#include <scheme/AcousticSolver.hpp>
#include <scheme/DirichletBoundaryConditionDescriptor.hpp>
#include <scheme/DiscreteFunctionDescriptorP0.hpp>
#include <scheme/DiscreteFunctionDescriptorP0Vector.hpp>
#include <scheme/DiscreteFunctionInterpoler.hpp>
#include <scheme/DiscreteFunctionP0.hpp>
#include <scheme/DiscreteFunctionUtils.hpp>
#include <scheme/DiscreteFunctionVectorInterpoler.hpp>
#include <scheme/FourierBoundaryConditionDescriptor.hpp>
......@@ -240,6 +244,48 @@ SchemeModule::SchemeModule()
));
this
->_addBuiltinFunction("cell_volume",
std::make_shared<BuiltinFunctionEmbedder<std::shared_ptr<const IDiscreteFunction>(
const std::shared_ptr<const IMesh>&)>>(
[](const std::shared_ptr<const IMesh>& i_mesh) -> std::shared_ptr<const IDiscreteFunction> {
switch (i_mesh->dimension()) {
case 1: {
constexpr size_t Dimension = 1;
using MeshType = Mesh<Connectivity<Dimension>>;
std::shared_ptr<const MeshType> mesh =
std::dynamic_pointer_cast<const Mesh<Connectivity<Dimension>>>(i_mesh);
return std::make_shared<const DiscreteFunctionP0<
Dimension, double>>(mesh, copy(MeshDataManager::instance().getMeshData(*mesh).Vj()));
}
case 2: {
constexpr size_t Dimension = 2;
using MeshType = Mesh<Connectivity<Dimension>>;
std::shared_ptr<const MeshType> mesh =
std::dynamic_pointer_cast<const Mesh<Connectivity<Dimension>>>(i_mesh);
return std::make_shared<const DiscreteFunctionP0<
Dimension, double>>(mesh, copy(MeshDataManager::instance().getMeshData(*mesh).Vj()));
}
case 3: {
constexpr size_t Dimension = 3;
using MeshType = Mesh<Connectivity<Dimension>>;
std::shared_ptr<const MeshType> mesh =
std::dynamic_pointer_cast<const Mesh<Connectivity<Dimension>>>(i_mesh);
return std::make_shared<const DiscreteFunctionP0<
Dimension, double>>(mesh, copy(MeshDataManager::instance().getMeshData(*mesh).Vj()));
}
default: {
throw UnexpectedError("invalid mesh dimension");
}
}
}
));
MathFunctionRegisterForVh{*this};
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment