diff --git a/femutils/IArcaneFemBC.h b/femutils/IArcaneFemBC.h index 071f6bc..d8caf98 100644 --- a/femutils/IArcaneFemBC.h +++ b/femutils/IArcaneFemBC.h @@ -9,6 +9,7 @@ #include #include +#include using namespace Arcane; @@ -52,6 +53,10 @@ class IManufacturedSolution virtual bool getManufacturedDirichlet() =0; virtual Real getPenalty() =0; virtual String getEnforceDirichletMethod() =0; + virtual ICaseFunction* getManufacturedDirichletFunction() =0; + virtual IStandardFunction* getManufacturedDirichletStandardFunction() =0; + virtual ICaseFunction* getManufacturedSourceFunction() =0; + virtual IStandardFunction* getManufacturedSourceStandardFunction() =0; }; class IArcaneFemBC diff --git a/fourier/Fem.axl b/fourier/Fem.axl index dcea0cf..719d859 100644 --- a/fourier/Fem.axl +++ b/fourier/Fem.axl @@ -33,37 +33,6 @@ Type of mesh provided to the solver - - - - Dirichlet boundary condition - - - - Function for Dirichlet boundary condition - - - - - Method via which Dirichlet boundary condition is imposed - - - - - Penalty value for enforcing Dirichlet condition - - - - - Function for manufactured source term condition - - - - manufacturedSolution.isPresent()) { - const auto& bs = options()->manufacturedSolution()[0]; + BC::IArcaneFemBC* bc = options()->boundaryConditions(); - if (bs->manufacturedSource.isPresent()) { - ICaseFunction* opt_function_source = bs->manufacturedSource.function(); - IStandardFunction* scf_source = bs->manufacturedSource.standardFunction(); + for (BC::IManufacturedSolution* bs : bc->manufacturedSolutions()) { + if (bs->getManufacturedSource()) { + ICaseFunction* opt_function_source = bs->getManufacturedSourceFunction(); + IStandardFunction* scf_source = bs->getManufacturedSourceStandardFunction(); if (!scf_source) ARCANE_FATAL("No standard case function for option 'manufactured-source-condition'"); auto* functorS = scf_source->getFunctorRealReal3ToReal(); @@ -44,9 +44,9 @@ startInit() m_manufactured_source = functorS; } - if (bs->manufacturedDirichlet.isPresent()) { - ICaseFunction* opt_function = bs->manufacturedDirichlet.function(); - IStandardFunction* scf = bs->manufacturedDirichlet.standardFunction(); + if (bs->getManufacturedDirichlet()) { + ICaseFunction* opt_function = bs->getManufacturedDirichletFunction(); + IStandardFunction* scf = bs->getManufacturedDirichletStandardFunction(); if (!scf) ARCANE_FATAL("No standard case function for option 'manufactured-dirichlet-condition'"); auto* functor = scf->getFunctorRealReal3ToReal(); @@ -180,23 +180,22 @@ _assembleLinearOperator() if (options()->qdot.isPresent()) ArcaneFemFunctions::BoundaryConditions2D::applyConstantSourceToRhs(qdot, mesh(), node_dof, m_node_coord, rhs_values); - BC::IArcaneFemBC* bc = options()->boundaryConditions(); - if(bc){ + if (bc) { for (BC::INeumannBoundaryCondition* bs : bc->neumannBoundaryConditions()) ArcaneFemFunctions::BoundaryConditions2D::applyNeumannToRhs(bs, node_dof, m_node_coord, rhs_values); for (BC::IDirichletBoundaryCondition* bs : bc->dirichletBoundaryConditions()) ArcaneFemFunctions::BoundaryConditions2D::applyDirichletToLhsAndRhs(bs, node_dof, m_node_coord, m_linear_system, rhs_values); - for (BC::IManufacturedSolution* bs : bc->manufacturedSolutions()){ - if (bs->getManufacturedSource()){ + for (BC::IManufacturedSolution* bs : bc->manufacturedSolutions()) { + if (bs->getManufacturedSource()) { ARCANE_CHECK_POINTER(m_manufactured_source); info() << "Apply manufactured Source condition to all cells"; - ArcaneFemFunctions::BoundaryConditions2D::applyManufacturedSourceToRhs(m_manufactured_source, mesh(), node_dof, m_node_coord, rhs_values); + ArcaneFemFunctions::BoundaryConditions2D::applyManufacturedSourceToRhs(m_manufactured_source, mesh(), node_dof, m_node_coord, rhs_values); } - if (bs->getManufacturedDirichlet()){ + if (bs->getManufacturedDirichlet()) { ARCANE_CHECK_POINTER(m_manufactured_dirichlet); info() << "Apply manufactured dirichlet condition to all borders"; FaceGroup group = mesh()->outerFaces(); diff --git a/fourier/Test.manufacture.solution.arc b/fourier/Test.manufacture.solution.arc index dfd9608..61f2618 100644 --- a/fourier/Test.manufacture.solution.arc +++ b/fourier/Test.manufacture.solution.arc @@ -28,10 +28,6 @@ - - true - true - true