Commit 0d800e30 authored by GILLES Sebastien's avatar GILLES Sebastien
Browse files

#869 Test/Coloring: rewrite it with a Model to solve the runtime issue with...

#869 Test/Coloring: rewrite it with a Model to solve the runtime issue with gcc (Model is really in charge of allocating/deallocating stuff properly and without it something was not correctly allocated).
parent 1cb16132
-- Comment lines are introduced by "--".
-- In a section (i.e. within braces), all entries must be separated by a comma.
-- transient
transient = {
-- Tells which policy is used to describe time evolution.
-- Expected format: "VALUE"
-- Constraint: ops_in(v, {'constant_time_step'})
time_evolution_policy = "constant_time_step",
-- Time at the beginning of the code (in seconds).
-- Expected format: VALUE
-- Constraint: v >= 0.
init_time = 0.,
-- Time step between two iterations, in seconds.
-- Expected format: VALUE
-- Constraint: v > 0.
timeStep = 0.1,
-- Maximum time, if set to zero run a static case.
-- Expected format: VALUE
-- Constraint: v >= 0.
timeMax = 0.1
}
-- Mesh1
......@@ -41,3 +65,127 @@ Result = {
}
Petsc1 = {
-- Absolute tolerance
-- Expected format: {VALUE1, VALUE2, ...}
-- Constraint: v > 0.
absoluteTolerance = 1e-10,
-- gmresStart
-- Expected format: {VALUE1, VALUE2, ...}
-- Constraint: v >= 0
gmresRestart = 200,
-- Maximum iteration
-- Expected format: {VALUE1, VALUE2, ...}
-- Constraint: v > 0
maxIteration = 1000,
-- List of preconditioner: { none jacobi sor lu bjacobi ilu asm cholesky }.
-- To use mumps:
-- preconditioner = lu
-- Expected format: {"VALUE1", "VALUE2", ...}
-- Constraint: ops_in(v, 'lu')
preconditioner = 'lu',
-- Relative tolerance
-- Expected format: {VALUE1, VALUE2, ...}
-- Constraint: v > 0.
relativeTolerance = 1e-6,
-- List of solver: { chebychev cg gmres preonly bicg python };
-- Expected format: {"VALUE1", "VALUE2", ...}
-- Constraint: ops_in(v, {'Mumps', 'Umfpack'})
solver = 'Mumps',
} -- Petsc
-- NumberingSubset1
NumberingSubset1 = {
-- Name of the numbering subset (not really used; at the moment I just need one input parameter to ground
-- the possible values to choose elsewhere).
-- Expected format: "VALUE"
name = 'unused',
-- Whether a vector defined on this numbering subset might be used to compute a movemesh. If true, a
-- FEltSpace featuring this numbering subset will compute additional quantities to enable fast computation.
-- This should be false for most numbering subsets, and when it's true the sole unknown involved should be a
-- displacement.
-- Expected format: 'true' or 'false' (without the quote)
do_move_mesh = false
}
-- Unknown1
Unknown1 = {
-- Name of the unknown (used for displays in output).
-- Expected format: "VALUE"
name = 'unused',
-- Index of the god of dof into which the finite element space is defined.
-- Expected format: "VALUE"
-- Constraint: ops_in(v, {'scalar', 'vectorial'})
nature = 'scalar'
}
-- Domain1
Domain1 = {
-- Index of the geometric mesh upon which the domain is defined (as defined in the present file). Might be
-- left empty if domain not limited to one mesh; at most one value is expected here.
-- Expected format: {VALUE1, VALUE2, ...}
mesh_index = {1},
-- List of dimensions encompassed by the domain. Might be left empty if no restriction at all upon
-- dimensions.
-- Expected format: {VALUE1, VALUE2, ...}
-- Constraint: ops_in(v, {0, 1, 2, 3})
dimension_list = { 2 },
-- List of mesh labels encompassed by the domain. Might be left empty if no restriction at all upon mesh
-- labels. This parameter does not make sense if no mesh is defined for the domain.
-- Expected format: {VALUE1, VALUE2, ...}
mesh_label_list = { 0 },
-- List of geometric element types considered in the domain. Might be left empty if no restriction upon
-- these. No constraint is applied at Ops level, as some geometric element types could be added after
-- generation of current input parameter file. Current list is below; if an incorrect value is put there it
-- will be detected a bit later when the domain object is built.
-- The known types when this file was generated are:
-- . Point1
-- . Segment2, Segment3
-- . Triangle3, Triangle6
-- . Quadrangle4, Quadrangle8, Quadrangle9
-- . Tetrahedron4, Tetrahedron10
-- . Hexahedron8, Hexahedron20, Hexahedron27.
-- Expected format: {"VALUE1", "VALUE2", ...}
geometric_element_type_list = {}
}
-- FiniteElementSpace1
FiniteElementSpace1 = {
-- Index of the god of dof into which the finite element space is defined.
-- Expected format: VALUE
god_of_dof_index = 1,
-- Index of the domain onto which the finite element space is defined. This domain must be unidimensional.
-- Expected format: VALUE
domain_index = 1,
-- List of all unknowns defined in the finite element space. Unknowns here must be defined in this file as
-- an 'Unknown' block; expected name/identifier is the name given there.
-- Expected format: {"VALUE1", "VALUE2", ...}
unknown_list = { 'unused' },
-- List of the shape function to use for each unknown;
-- Expected format: {"VALUE1", "VALUE2", ...}
shape_function_list = { 'P0' },
-- List of the numbering subset to use for each unknown;
-- Expected format: {VALUE1, VALUE2, ...}
numbering_subset_list = { 1 }
}
......@@ -214,6 +214,12 @@
BE1EBB021CA0961000EC0EAA /* InputParameterList.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BE1EBB011CA0961000EC0EAA /* InputParameterList.hpp */; };
BE1EBB031CA0977400EC0EAA /* libOps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE43AD351AFB9ADB0082AF43 /* libOps.a */; };
BE1EBB0E1CA097BA00EC0EAA /* libSeldon.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BEE79A1F1C995B5F00F05519 /* libSeldon.a */; };
BE1EBB121CA0A59600EC0EAA /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE1EBB0F1CA0A59600EC0EAA /* Model.cpp */; };
BE1EBB131CA0A80700EC0EAA /* libFiniteElement.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE9C4D121807F5DC005B94BC /* libFiniteElement.a */; };
BE1EBB141CA0A80700EC0EAA /* libFormulationSolver.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BEABCEBD1AE65A9A00817D37 /* libFormulationSolver.a */; };
BE1EBB151CA0A80700EC0EAA /* libHyperelasticity.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE9EA0211B8F159D00B60AC2 /* libHyperelasticity.a */; };
BE1EBB161CA0A80700EC0EAA /* libOperators.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BECA4B941B1756DE00DC7265 /* libOperators.a */; };
BE1EBB171CA0A80700EC0EAA /* libParameters.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE6199501B0F643300906290 /* libParameters.a */; };
BE2592141C9ABA6900DF404B /* Utilities.doxygen in Headers */ = {isa = PBXBuildFile; fileRef = BE2592131C9ABA6900DF404B /* Utilities.doxygen */; };
BE2592171C9AC0F800DF404B /* HappyHeart.doxygen in Headers */ = {isa = PBXBuildFile; fileRef = BE2592161C9AC0F800DF404B /* HappyHeart.doxygen */; };
BE2801E01C7F06E400FD01BC /* DerivativeGreenLagrange.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BE2801DD1C7F06E400FD01BC /* DerivativeGreenLagrange.hpp */; };
......@@ -2195,6 +2201,34 @@
remoteGlobalIDString = BE9CBB4F1B0B339100FA0F1B;
remoteInfo = Seldon;
};
BE1EBB181CA0A81600EC0EAA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BE5BC27016C008CF00232749 /* Project object */;
proxyType = 1;
remoteGlobalIDString = BE9C4D111807F5DC005B94BC;
remoteInfo = FiniteElement;
};
BE1EBB1A1CA0A81600EC0EAA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BE5BC27016C008CF00232749 /* Project object */;
proxyType = 1;
remoteGlobalIDString = BE61994F1B0F643300906290;
remoteInfo = Parameters;
};
BE1EBB1C1CA0A81600EC0EAA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BE5BC27016C008CF00232749 /* Project object */;
proxyType = 1;
remoteGlobalIDString = BECA4B931B1756DE00DC7265;
remoteInfo = Operators;
};
BE1EBB1E1CA0A81600EC0EAA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BE5BC27016C008CF00232749 /* Project object */;
proxyType = 1;
remoteGlobalIDString = BEABCEBC1AE65A9A00817D37;
remoteInfo = FormulationSolver;
};
BE2D653D1CA049290053F0AF /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BECCA6D61C97F8F30061FAD3 /* M3DISIM-HappyHeart.xcodeproj */;
......@@ -4122,6 +4156,9 @@
BE1EBAFD1CA0957300EC0EAA /* main_test_coloring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main_test_coloring.cpp; path = Coloring/main_test_coloring.cpp; sourceTree = "<group>"; };
BE1EBB001CA095C000EC0EAA /* demo_input_test_coloring.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = demo_input_test_coloring.lua; path = Data/Lua/demo_input_test_coloring.lua; sourceTree = SOURCE_ROOT; };
BE1EBB011CA0961000EC0EAA /* InputParameterList.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = InputParameterList.hpp; path = Coloring/InputParameterList.hpp; sourceTree = "<group>"; };
BE1EBB0F1CA0A59600EC0EAA /* Model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Model.cpp; path = Coloring/Model.cpp; sourceTree = "<group>"; };
BE1EBB101CA0A59600EC0EAA /* Model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Model.hpp; path = Coloring/Model.hpp; sourceTree = "<group>"; };
BE1EBB111CA0A59600EC0EAA /* Model.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Model.hxx; path = Coloring/Model.hxx; sourceTree = "<group>"; };
BE1F00AB1A0A417D0063ACBE /* AccessShapeFunction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = AccessShapeFunction.hpp; sourceTree = "<group>"; };
BE1F00AC1A0A417D0063ACBE /* AccessShapeFunction.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = AccessShapeFunction.hxx; sourceTree = "<group>"; };
BE2241BC19FA5FDE00B90563 /* InterfaceSpecialization.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InterfaceSpecialization.cpp; sourceTree = "<group>"; };
......@@ -5825,6 +5862,11 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
BE1EBB131CA0A80700EC0EAA /* libFiniteElement.a in Frameworks */,
BE1EBB141CA0A80700EC0EAA /* libFormulationSolver.a in Frameworks */,
BE1EBB151CA0A80700EC0EAA /* libHyperelasticity.a in Frameworks */,
BE1EBB161CA0A80700EC0EAA /* libOperators.a in Frameworks */,
BE1EBB171CA0A80700EC0EAA /* libParameters.a in Frameworks */,
BE1EBB0E1CA097BA00EC0EAA /* libSeldon.a in Frameworks */,
BE1EBB031CA0977400EC0EAA /* libOps.a in Frameworks */,
BEA9CBA41A1E26AC003A6276 /* Accelerate.framework in Frameworks */,
......@@ -6385,6 +6427,9 @@
BE1EBAFD1CA0957300EC0EAA /* main_test_coloring.cpp */,
BE1EBB011CA0961000EC0EAA /* InputParameterList.hpp */,
BE1EBB001CA095C000EC0EAA /* demo_input_test_coloring.lua */,
BE1EBB0F1CA0A59600EC0EAA /* Model.cpp */,
BE1EBB101CA0A59600EC0EAA /* Model.hpp */,
BE1EBB111CA0A59600EC0EAA /* Model.hxx */,
);
name = Coloring;
sourceTree = "<group>";
......@@ -11324,6 +11369,10 @@
buildRules = (
);
dependencies = (
BE1EBB191CA0A81600EC0EAA /* PBXTargetDependency */,
BE1EBB1B1CA0A81600EC0EAA /* PBXTargetDependency */,
BE1EBB1D1CA0A81600EC0EAA /* PBXTargetDependency */,
BE1EBB1F1CA0A81600EC0EAA /* PBXTargetDependency */,
BE1EBB0D1CA097B400EC0EAA /* PBXTargetDependency */,
BE1EBB051CA0977F00EC0EAA /* PBXTargetDependency */,
BE1EBB071CA0977F00EC0EAA /* PBXTargetDependency */,
......@@ -12294,6 +12343,7 @@
buildActionMask = 2147483647;
files = (
BE1EBAFF1CA0958300EC0EAA /* main_test_coloring.cpp in Sources */,
BE1EBB121CA0A59600EC0EAA /* Model.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -12970,6 +13020,26 @@
name = Seldon;
targetProxy = BE1EBB0C1CA097B400EC0EAA /* PBXContainerItemProxy */;
};
BE1EBB191CA0A81600EC0EAA /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BE9C4D111807F5DC005B94BC /* FiniteElement */;
targetProxy = BE1EBB181CA0A81600EC0EAA /* PBXContainerItemProxy */;
};
BE1EBB1B1CA0A81600EC0EAA /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BE61994F1B0F643300906290 /* Parameters */;
targetProxy = BE1EBB1A1CA0A81600EC0EAA /* PBXContainerItemProxy */;
};
BE1EBB1D1CA0A81600EC0EAA /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BECA4B931B1756DE00DC7265 /* Operators */;
targetProxy = BE1EBB1C1CA0A81600EC0EAA /* PBXContainerItemProxy */;
};
BE1EBB1F1CA0A81600EC0EAA /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BEABCEBC1AE65A9A00817D37 /* FormulationSolver */;
targetProxy = BE1EBB1E1CA0A81600EC0EAA /* PBXContainerItemProxy */;
};
BE5A4E311B677E57006822DD /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = BEA8A378177AD4FE009436C9 /* Utilities */;
......
......@@ -8,14 +8,10 @@ import targets
if __name__ == "__main__":
target_list = targets.TestTargetList()
#target_list = (('acoustic_wave', ('demo_input_acoustic_wave_1D.lua', 'demo_input_acoustic_wave_1D_DirBCs.lua', 'demo_input_acoustic_wave_2D.lua', 'demo_input_acoustic_wave_2D_DirBCs.lua')), )
#target_list = (('acoustic_wave', ('demo_input_acoustic_wave_1D.lua', 'demo_input_acoustic_wave_1D_DirBCs.lua', 'demo_input_acoustic_wave_2D.lua', 'demo_input_acoustic_wave_2D_DirBCs.lua')), )
target_list = (\
# ('test_coloring', ()),
('test_conform_operator', ('demo_input_test_conform_projector.lua', )),
# ('test_fiber_list_manager', ('demo_input_test_at_dof_parameter.lua', )),
# ('test_p1_to_p1b', ('demo_input_test_P1_to_P1b.lua', )),
# ('test_p1_to_p2', ('demo_input_test_P1_to_P2.lua', )),
('test_coloring', ('demo_input_test_coloring.lua', )),
)
......@@ -30,20 +26,19 @@ if __name__ == "__main__":
if os.path.exists(stderr):
os.remove(stderr)
manual_test.CheckHappyHeart(happy_heart_path,
os.path.join(happy_heart_path, "Sources", "build_configuration_clang.py"),
target_list,
stdout,
stderr,
do_create_reference = True)
sys.exit()
manual_test.CheckHappyHeart(happy_heart_path,
os.path.join(happy_heart_path, "Sources", "build_configuration_clang_release.py"),
target_list,
stdout,
stderr,
do_create_reference = True)
# manual_test.CheckHappyHeart(happy_heart_path,
# os.path.join(happy_heart_path, "Sources", "build_configuration_clang.py"),
# target_list,
# stdout,
# stderr,
# do_create_reference = True)
#
# manual_test.CheckHappyHeart(happy_heart_path,
# os.path.join(happy_heart_path, "Sources", "build_configuration_clang_release.py"),
# target_list,
# stdout,
# stderr,
# do_create_reference = True)
manual_test.CheckHappyHeart(happy_heart_path,
os.path.join(happy_heart_path, "Sources", "build_configuration_gcc_debug.py"),
......
......@@ -6,13 +6,19 @@
// Copyright (c) 2015 Inria. All rights reserved.
//
#ifndef HAPPY_HEART_x_TEST_x_OPERATORS_x_P1_xTO_x_P2_x_INPUT_PARAMETER_LIST_HPP_
# define HAPPY_HEART_x_TEST_x_OPERATORS_x_P1_xTO_x_P2_x_INPUT_PARAMETER_LIST_HPP_
#ifndef HAPPY_HEART_x_TEST_x_GEOMETRY_x_COLORING_x_INPUT_PARAMETER_LIST_HPP_
# define HAPPY_HEART_x_TEST_x_GEOMETRY_x_COLORING_x_INPUT_PARAMETER_LIST_HPP_
# include "Utilities/Containers/EnumClass.hpp"
# include "Core/InputParameterData/InputParameterList.hpp"
# include "Core/InputParameter/Result.hpp"
# include "Core/InputParameter/TimeManager/TimeManager.hpp"
# include "Core/InputParameter/Geometry/Domain.hpp"
# include "Core/InputParameter/FElt/FEltSpace.hpp"
# include "Core/InputParameter/FElt/Unknown.hpp"
# include "Core/InputParameter/FElt/NumberingSubset.hpp"
# include "Core/InputParameter/Solver/Petsc.hpp"
namespace HappyHeart
......@@ -27,17 +33,33 @@ namespace HappyHeart
{
enum class Unused
{
value = 1
};
enum class MeshIndex
{
mesh = 1
};
using InputParameterTuple = std::tuple
<
// InputParameter::Petsc<EnumUnderlyingType(SolverIndex::solver)>,
InputParameter::TimeManager,
InputParameter::NumberingSubset<EnumUnderlyingType(Unused::value)>,
InputParameter::Unknown<EnumUnderlyingType(Unused::value)>,
InputParameter::Domain<EnumUnderlyingType(Unused::value)>,
InputParameter::FEltSpace<EnumUnderlyingType(Unused::value)>,
InputParameter::Petsc<EnumUnderlyingType(Unused::value)>,
InputParameter::Mesh<EnumUnderlyingType(MeshIndex::mesh)>,
......@@ -57,4 +79,4 @@ namespace HappyHeart
} // namespace HappyHeart
#endif // HAPPY_HEART_x_TEST_x_OPERATORS_x_P1_xTO_x_P2_x_INPUT_PARAMETER_LIST_HPP_
#endif // HAPPY_HEART_x_TEST_x_GEOMETRY_x_COLORING_x_INPUT_PARAMETER_LIST_HPP_
//
// Model.cpp
// HappyHeart
//
// Created by Sebastien Gilles on 21/03/16.
// Copyright © 2016 Inria. All rights reserved.
//
#include "Geometry/GeometricMeshRegion_Connectivity.hpp"
#include "Test/Geometry/Coloring/Model.hpp"
namespace HappyHeart
{
namespace TestNS
{
namespace ColoringNS
{
Model::Model(const Wrappers::Mpi& mpi_ptr,
const InputParameterList& input_parameter_data)
: parent(mpi_ptr, input_parameter_data)
{ }
void Model::SupplInitialize(const InputParameterList& input_parameter_data)
{
auto& manager = GeometricMeshRegionManager::CreateOrGetInstance();
const auto& geometric_mesh_region = manager.GetMesh(1);
std::vector<unsigned int> Ngeometric_elt_per_color;
auto coloring = ComputeColoring(geometric_mesh_region, 2, Ngeometric_elt_per_color);
const std::size_t Ncolor = Ngeometric_elt_per_color.size();
for (std::size_t color = 0u; color < Ncolor; ++color)
std::cout << "Color " << color << " -> " << Ngeometric_elt_per_color[color] << " geometric elements." << std::endl;
auto geometric_elt_range = geometric_mesh_region.GetSubsetGeometricEltList(1u);
std::cout << "Ngeom elt dim 1 = " << geometric_elt_range.second - geometric_elt_range.first << std::endl;
geometric_elt_range = geometric_mesh_region.GetSubsetGeometricEltList(2u) ;
std::cout << "Ngeom elt dim 2 = " << geometric_elt_range.second - geometric_elt_range.first << std::endl;
}
void Model::Forward()
{ }
void Model::SupplFinalizeStep()
{ }
void Model::SupplFinalize()
{ }
} // namespace ColoringNS
} // namespace NS
} // namespace HappyHeart
//
// Model.hpp
// HappyHeart
//
// Created by Sebastien Gilles on 21/03/16.
// Copyright © 2016 Inria. All rights reserved.
//
#ifndef HAPPY_HEART_x_TEST_x_GEOMETRY_x_COLORING_x_MODEL_HPP_
# define HAPPY_HEART_x_TEST_x_GEOMETRY_x_COLORING_x_MODEL_HPP_
# include <memory>
# include <vector>
# include "Model/Model.hpp"
# include "Test/Geometry/Coloring/InputParameterList.hpp"
namespace HappyHeart
{
namespace TestNS
{
namespace ColoringNS
{
class Model : public HappyHeart::Model<Model, DoConsiderProcessorWiseLocal2Global::no>
{
private:
//! Alias to self.
using self = Model;
//! Convenient alias.
using parent = HappyHeart::Model<Model, DoConsiderProcessorWiseLocal2Global::no>;
public:
//! Return the name of the model.
static const std::string& ClassName();
//! Friendship granted to the base class so this one can manipulates private methods.
friend parent;
public:
/// \name Special members.
///@{
//! Constructor.
Model(const Wrappers::Mpi& mpi,
const InputParameterList& input_parameter_data);
//! Destructor.
~Model() = default;
//! Copy constructor.
Model(const Model&) = delete;
//! Move constructor.
Model(Model&&) = delete;
//! Copy affectation.
Model& operator=(const Model&) = delete;
//! Move affectation.
Model& operator=(Model&&) = delete;
///@}
/// \name Crtp-required methods.
///@{
/*!
* \brief Initialise the problem.
*
* This initialisation includes the resolution of the static problem.
*/
void SupplInitialize(const InputParameterList& input_parameter_data);
//! Manage time iteration.
void Forward();
/*!
* \brief Additional operations to finalize a dynamic step.
*
* Base class already update the time for next time iterations.
*/
void SupplFinalizeStep();
/*!
* \brief Initialise a dynamic step.
*
*/
void SupplFinalize();
private:
/*!
* \brief Whether the model wants to add additional cases in which the Model stops (besides the reach of
* maximum time).
*
* Returns always true (no such additional condition in this Model).
*/
bool SupplHasFinishedConditions() const;
/*!
* \brief Part of InitializedStep() specific to Elastic model.
*
* As there are none, the body of this method is empty.
*/
void SupplInitializeStep();
///@}
};
} // namespace ColoringNS
} // namespace TestNS
} // namespace HappyHeart
# include "Test/Geometry/Coloring/Model.hxx"
#endif // HAPPY_HEART_x_TEST_x_GEOMETRY_x_COLORING_x_MODEL_HPP_
//
// Model.hxx
// HappyHeart
//
// Created by Sebastien Gilles on 21/03/16.