Commit 7bc038d9 authored by Gautier Bureau's avatar Gautier Bureau Committed by GILLES Sebastien
Browse files

#860 New InputParameter introduced for PrestressFiber. CardiacMechanics now compile again.

parent e55436b7
......@@ -278,7 +278,7 @@ Petsc1 = {
-- Maximum iteration
-- Expected format: {VALUE1, VALUE2, ...}
-- Constraint: v > 0
maxIteration = 1000,
maxIteration = 20,
-- List of preconditioner: { none jacobi sor lu bjacobi ilu asm cholesky }.
-- To use mumps:
......@@ -615,38 +615,6 @@ Solid = {
} -- Solid
---- TransientSource - Volumic
--TransientSource1 = {
-- -- How is given the transient source value (as a constant, as a Lua function, per quadrature point, etc...)
-- -- Expected format: "VALUE"
-- -- Constraint: ops_in(v, {'ignore', 'constant', 'lua_function'})
-- nature = {"constant", "constant", "constant"},
--
-- -- Value of the transient source in the case nature is 'constant'(and also initial value if nature is 'at_quadrature_point'; irrelevant otherwise).
-- -- Expected format: VALUE
-- scalar_value = { 0. , 0., 0.},
--
-- -- Value of the transient source for the component x in the case nature is 'lua_function'(and also initial value if nature is 'at_quadrature_point'; irrelevant otherwise).
-- -- Expected format: Function in Lua language, for instance:
-- -- function(arg1, arg2, arg3)
-- -- return arg1 + arg2 - arg3
-- -- end
-- -- sin, cos and tan require a 'math.' preffix.
-- lua_function_x = function (x, y, z)
-- return 0.;
-- end,
--
-- lua_function_y = function (x, y, z)
-- return 10.;
-- end,
--
-- lua_function_z = function (x, y, z)
-- return 0.;
-- end
--
--}
AppliedPressure = {
-- How is given the volumic mass (as a constant, as a Lua function, per quadrature point, etc...)
......@@ -683,6 +651,103 @@ AppliedPressure = {
} -- AppliedPressure
Heart = {
Time = {
-- Heart beat duration.
-- Expected format: VALUE
HeartBeatDuration = 0.8
}, -- Time
Geometry = {
-- Velocity of electrical activation.
-- Expected format: VALUE
Velocity = 0.5
}, -- Geometry
} -- Heart
ActiveStress = {
Contractility = {
-- How is given the parameter (as a constant, as a Lua function, per quadrature point, etc...). Choose
-- "ignore" if you do not want this parameter (in this case it will stay at nullptr).
-- Expected format: "VALUE"
-- Constraint: ops_in(v, {'ignore', 'constant', 'lua_function','at_quadrature_point','piecewise_constant_by_domain'})
nature = 'constant',
-- Value of the volumic mass in the case nature is 'constant'(and also initial value if nature is
-- 'at_quadrature_point'; irrelevant otherwise).
-- Expected format: VALUE
scalar_value = 1.e05,
-- Value of the volumic mass in the case nature is 'lua_function'(and also initial value if nature is
-- 'at_quadrature_point'; irrelevant otherwise).
-- Expected format: Function in Lua language, for instance:
-- -- function(arg1, arg2, arg3)
-- return arg1 + arg2 -
-- arg3
-- end
-- sin, cos and tan require a 'math.'
-- preffix.
-- If you do not wish to provide one, put anything you want (e.g. 'none'): the
-- content is not interpreted by Ops until an actual use of the underlying function.
lua_function = none,
-- Domain indices of the parameter in the case nature is 'piecewise_constant_by_domain'. The various
-- domains given here must not intersect.
-- Expected format: {VALUE1, VALUE2, ...}
piecewise_constant_domain_id = {},
-- Value of the parameter in the case nature is 'piecewise_constant_by_domain'.
-- Expected format: {VALUE1, VALUE2, ...}
piecewise_constant_domain_value = {}
}, -- Contractility
InitialCondition = {
-- Active Stress initial condition.
-- Expected format: VALUE
ActiveStress = 0.
}, -- InitialCondition
} -- ActiveStress
ElectricalActivation = {
-- Delay of the ElectricalActivation.
-- Expected format: VALUE
Delay = -0.02,
-- Amplitude Max of the ElectricalActivation.
-- Expected format: VALUE
AmplitudeMax = 15.,
-- Amplitude Min of the ElectricalActivation.
-- Expected format: VALUE
AmplitudeMin = -5.,
-- Fast Depolarization Duration of the ElectricalActivation.
-- Expected format: VALUE
DepolarizationDuration = 0.04,
-- Plateau Duration of the ElectricalActivation.
-- Expected format: VALUE
PlateauDuration = 0.25,
-- Repolarization Duration of the ElectricalActivation.
-- Expected format: VALUE
RepolarizationDuration = 0.2
} -- ElectricalActivation
Fiber_vector_1 = {
-- Path to Ensight file.
......@@ -708,7 +773,7 @@ Fiber_vector_1 = {
Result = {
-- Directory in which all the results will be written.
-- Expected format: "VALUE"
output_directory = "/Volumes/Data/${USER}/HappyHeart/Results/CardiacMechanics",
output_directory = "/Volumes/Data/${USER}/HappyHeart/Results/CardiacMechanicsPrestress",
-- Enables to skip some printing in the console. Can be used to WriteSolution every n time.
-- Expected format: VALUE
......
......@@ -38,6 +38,10 @@
134A1D2F1C0746BF00611B9C /* FollowingPressure.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 134A1D2C1C0746BF00611B9C /* FollowingPressure.hxx */; };
134DABD81C6E0E8000C7C65B /* InitialCondition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 134DABD11C6E0D4100C7C65B /* InitialCondition.cpp */; };
134DABF41C6E4D5500C7C65B /* ThreeDimensionalInitialCondition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 134DABEB1C6E43D100C7C65B /* ThreeDimensionalInitialCondition.cpp */; };
13546B681CAD15F400383282 /* InputAnalyticalPrestressFiber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13542D9B1CAC29DD004D641D /* InputAnalyticalPrestressFiber.cpp */; };
13546B741CAD1B3A00383282 /* ActiveStress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13546B6B1CAD182D00383282 /* ActiveStress.cpp */; };
13546B7A1CAD4D0E00383282 /* ElectricalActivation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13546B761CAD4C4600383282 /* ElectricalActivation.cpp */; };
13546B7F1CAD5F2D00383282 /* Heart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13546B7C1CAD5F2B00383282 /* Heart.cpp */; };
135A9AC01C9C352600C66720 /* libSeldon.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BEE79A1F1C995B5F00F05519 /* libSeldon.a */; };
135A9AC31C9C37A500C66720 /* UpdateFiberDeformation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 135A9AAD1C9C164B00C66720 /* UpdateFiberDeformation.hpp */; };
135A9AC61C9C4ACA00C66720 /* UpdateFiberDeformation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 135A9AB31C9C164B00C66720 /* UpdateFiberDeformation.cpp */; };
......@@ -4044,6 +4048,18 @@
134DABF01C6E462900C7C65B /* Constant.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = Constant.hxx; path = Private/InitialCondition/Policy/Constant.hxx; sourceTree = "<group>"; };
134DABF21C6E464600C7C65B /* OpsFunction.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = OpsFunction.hpp; path = Private/InitialCondition/Policy/OpsFunction.hpp; sourceTree = "<group>"; };
134DABF31C6E464600C7C65B /* OpsFunction.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = OpsFunction.hxx; path = Private/InitialCondition/Policy/OpsFunction.hxx; sourceTree = "<group>"; };
13542D981CAC29BC004D641D /* InputAnalyticalPrestressFiber.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = InputAnalyticalPrestressFiber.hpp; sourceTree = "<group>"; };
13542D9A1CAC29CF004D641D /* InputAnalyticalPrestressFiber.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = InputAnalyticalPrestressFiber.hxx; sourceTree = "<group>"; };
13542D9B1CAC29DD004D641D /* InputAnalyticalPrestressFiber.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InputAnalyticalPrestressFiber.cpp; sourceTree = "<group>"; };
13546B6B1CAD182D00383282 /* ActiveStress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ActiveStress.cpp; path = Parameter/ActiveStress/ActiveStress.cpp; sourceTree = "<group>"; };
13546B6C1CAD182D00383282 /* ActiveStress.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ActiveStress.hpp; path = Parameter/ActiveStress/ActiveStress.hpp; sourceTree = "<group>"; };
13546B6D1CAD182D00383282 /* ActiveStress.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ActiveStress.hxx; path = Parameter/ActiveStress/ActiveStress.hxx; sourceTree = "<group>"; };
13546B761CAD4C4600383282 /* ElectricalActivation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ElectricalActivation.cpp; path = Parameter/ElectricalActivation/ElectricalActivation.cpp; sourceTree = "<group>"; };
13546B771CAD4C4600383282 /* ElectricalActivation.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = ElectricalActivation.hpp; path = Parameter/ElectricalActivation/ElectricalActivation.hpp; sourceTree = "<group>"; };
13546B781CAD4C4600383282 /* ElectricalActivation.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = ElectricalActivation.hxx; path = Parameter/ElectricalActivation/ElectricalActivation.hxx; sourceTree = "<group>"; };
13546B7C1CAD5F2B00383282 /* Heart.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Heart.cpp; path = Parameter/Heart/Heart.cpp; sourceTree = "<group>"; };
13546B7D1CAD5F2B00383282 /* Heart.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = Heart.hpp; path = Parameter/Heart/Heart.hpp; sourceTree = "<group>"; };
13546B7E1CAD5F2B00383282 /* Heart.hxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = Heart.hxx; path = Parameter/Heart/Heart.hxx; sourceTree = "<group>"; };
135A9AA91C9C164B00C66720 /* GlobalParametersOperator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = GlobalParametersOperator.hpp; sourceTree = "<group>"; };
135A9AAA1C9C164B00C66720 /* GlobalParametersOperator.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = GlobalParametersOperator.hxx; sourceTree = "<group>"; };
135A9AAC1C9C164B00C66720 /* UpdateFiberDeformation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UpdateFiberDeformation.cpp; sourceTree = "<group>"; };
......@@ -6296,6 +6312,36 @@
name = Policy;
sourceTree = "<group>";
};
13546B6A1CAD17DE00383282 /* ActiveStress */ = {
isa = PBXGroup;
children = (
13546B6B1CAD182D00383282 /* ActiveStress.cpp */,
13546B6C1CAD182D00383282 /* ActiveStress.hpp */,
13546B6D1CAD182D00383282 /* ActiveStress.hxx */,
);
name = ActiveStress;
sourceTree = "<group>";
};
13546B791CAD4C4B00383282 /* ElectricalActivation */ = {
isa = PBXGroup;
children = (
13546B761CAD4C4600383282 /* ElectricalActivation.cpp */,
13546B771CAD4C4600383282 /* ElectricalActivation.hpp */,
13546B781CAD4C4600383282 /* ElectricalActivation.hxx */,
);
name = ElectricalActivation;
sourceTree = "<group>";
};
13546B7B1CAD5EE000383282 /* Heart */ = {
isa = PBXGroup;
children = (
13546B7C1CAD5F2B00383282 /* Heart.cpp */,
13546B7D1CAD5F2B00383282 /* Heart.hpp */,
13546B7E1CAD5F2B00383282 /* Heart.hxx */,
);
name = Heart;
sourceTree = "<group>";
};
135A9AA21C9C14B700C66720 /* ParametersOperator */ = {
isa = PBXGroup;
children = (
......@@ -7986,6 +8032,9 @@
BE607D001B1DE2E6008017B9 /* SpatialFunction.cpp */,
BE607CFB1B1DDA1E008017B9 /* SpatialFunction.hpp */,
BE607D021B1DE2E6008017B9 /* SpatialFunction.hxx */,
13546B7B1CAD5EE000383282 /* Heart */,
13546B6A1CAD17DE00383282 /* ActiveStress */,
13546B791CAD4C4B00383282 /* ElectricalActivation */,
BE646CD61B1C4A71001267F4 /* Source */,
BE646CD31B1C4A51001267F4 /* Solid */,
BE646CD41B1C4A59001267F4 /* Fluid */,
......@@ -8544,6 +8593,9 @@
children = (
BE50E8F81C903BBF0038D16E /* AnalyticalPrestressFiber.hpp */,
BE50E8F91C903BBF0038D16E /* AnalyticalPrestressFiber.hxx */,
13542D9B1CAC29DD004D641D /* InputAnalyticalPrestressFiber.cpp */,
13542D981CAC29BC004D641D /* InputAnalyticalPrestressFiber.hpp */,
13542D9A1CAC29CF004D641D /* InputAnalyticalPrestressFiber.hxx */,
BE50E8FA1C903BBF0038D16E /* None.cpp */,
BEA9645F1C47DA7F00ADDD5C /* None.hpp */,
);
......@@ -12192,6 +12244,7 @@
buildActionMask = 2147483647;
files = (
131D43AB1B441FE30015EBF9 /* InitialConditionGate.cpp in Sources */,
13546B741CAD1B3A00383282 /* ActiveStress.cpp in Sources */,
BE96FEA61B821D51009BC073 /* Fluid.cpp in Sources */,
BE646CF01B1C4B12001267F4 /* HyperelasticBulk.cpp in Sources */,
BE607D031B1DE2E6008017B9 /* SpatialFunction.cpp in Sources */,
......@@ -12220,12 +12273,14 @@
BE5B6F7B1C3C1658004A0284 /* InitVertexMatching.cpp in Sources */,
BE5B6F811C3C16BF004A0284 /* InterpolationFile.cpp in Sources */,
131D43941B4408790015EBF9 /* ReactionCoefficient.cpp in Sources */,
13546B7F1CAD5F2D00383282 /* Heart.cpp in Sources */,
BE4053F71AC1729B0024D5F9 /* FEltSpace.cpp in Sources */,
BE64E4061B25B8A600DD48A0 /* TimeManager.cpp in Sources */,
1322D2841B42F038009BEFD0 /* FitzHughNagumo.cpp in Sources */,
BE8C17791B1C86E300514368 /* TransfertCoefficient.cpp in Sources */,
BE64622C1AEE199900D5162A /* NumberingSubsetManager.cpp in Sources */,
1322D2A01B43C779009BEFD0 /* MitchellSchaeffer.cpp in Sources */,
13546B7A1CAD4D0E00383282 /* ElectricalActivation.cpp in Sources */,
BE96FE9E1B820BF4009BC073 /* Solid.cpp in Sources */,
BE625B561BCBB72500FB316D /* Fiber.cpp in Sources */,
BE96FE981B820327009BC073 /* Section.cpp in Sources */,
......@@ -12673,6 +12728,7 @@
BECA4D8A1B1758B800DC7265 /* TransientSource.cpp in Sources */,
BE2801E51C7F172500FD01BC /* CauchyGreenTensor.cpp in Sources */,
BE608ADF1C4E88FD009A3034 /* Ale.cpp in Sources */,
13546B681CAD15F400383282 /* InputAnalyticalPrestressFiber.cpp in Sources */,
BECA4D751B1758B800DC7265 /* ElementaryDataImpl.cpp in Sources */,
BE2801EB1C7F17C300FD01BC /* InvariantManager.cpp in Sources */,
BECA4D541B1758B800DC7265 /* ScalarDivVectorial.cpp in Sources */,
......@@ -42,7 +42,7 @@
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
......
//
// ActiveStress.cpp
// HappyHeart
//
// Created by Gautier Bureau on 29/03/16.
// Copyright © 2016 Sebastien Gilles. All rights reserved.
//
# include "Utilities/String/EmptyString.hpp"
# include "Core/InputParameter/Parameter/ActiveStress/ActiveStress.hpp"
namespace HappyHeart
{
namespace InputParameter
{
const std::string& ActiveStress::GetName()
{
static std::string ret("ActiveStress");
return ret;
}
const std::string& ActiveStress::Contractility::GetName()
{
static std::string ret("Contractility");
return ret;
}
const std::string& ActiveStress::Contractility::Scalar::Constraint()
{
return Utilities::EmptyString();
}
const std::string& ActiveStress::InitialCondition::GetName()
{
static std::string ret("InitialCondition");
return ret;
}
const std::string& ActiveStress::InitialCondition::ActiveStress::NameInFile()
{
static std::string ret("ActiveStress");
return ret;
}
const std::string& ActiveStress::InitialCondition::ActiveStress::Description()
{
static std::string ret("Active Stress initial condition." );
return ret;
}
const std::string& ActiveStress::InitialCondition::ActiveStress::Constraint()
{
return Utilities::EmptyString();
}
const std::string& ActiveStress::InitialCondition::ActiveStress::DefaultValue()
{
static std::string ret("0.");
return ret;
}
} // namespace InputParameter
} // namespace HappyHeart
//
// ActiveStress.hpp
// HappyHeart
//
// Created by Gautier Bureau on 29/03/16.
// Copyright © 2016 Sebastien Gilles. All rights reserved.
//
#ifndef HAPPY_HEART_x_CORE_x_INPUT_PARAMETER_x_PARAMETER_x_ACTIVE_STRESS_x_ACTIVE_STRESS_HPP_
# define HAPPY_HEART_x_CORE_x_INPUT_PARAMETER_x_PARAMETER_x_ACTIVE_STRESS_x_ACTIVE_STRESS_HPP_
# include "Core/InputParameter/Crtp/Section.hpp"
# include "Core/InputParameter/Parameter/Private/ParameterUsualDescription.hpp"
namespace HappyHeart
{
namespace InputParameter
{
struct ActiveStress : public Crtp::Section<ActiveStress, NoEnclosingSection>
{
/*!
* \brief Return the name of the section in the input parameter ('CardiacParameters' here).
*
*/
static const std::string& GetName();
//! Convenient alias.
using self = ActiveStress;
//! Friendship to section parent.
using parent = Crtp::Section<self, NoEnclosingSection>;
friend parent;
struct Contractility : public Crtp::Section<Contractility, ActiveStress>
{
//! Convenient alias.
using self = Contractility;
//! Friendship to section parent.
using parent = Crtp::Section<self, ActiveStress>;
friend parent;
/*!
* \brief Return the name of the section in the input parameter.
*
*/
static const std::string& GetName();
/*!
* \brief Choose how is described the diffusion tensor (through a scalar, a function, etc...)
*/
struct Nature : public Crtp::InputParameter<Nature, self, Private::Nature::storage_type>,
public Private::Nature
{ };
/*!
* \brief Scalar value. Irrelevant if nature is not scalar.
*/
struct Scalar : public Crtp::InputParameter<Scalar, self, Private::Scalar::storage_type>,
public Private::Scalar
{
/*!
* \return Constraint to fulfill.
*
* Might be left empty; if not the format to respect is the Ops one. Hereafter some text from Ops example file:
*
* An age should be greater than 0 and less than, say, 150. It is possible
* to check it with a logical expression (written in Lua). The expression
* should be written with 'v' being the variable to be checked.
* \a constraint = "v >= 0 and v < 150"
*
* It is possible to check whether a variable is in a set of acceptable
* value. This is performed with 'ops_in' (a Lua function defined by Ops).
* \a constraint = "ops_in(v, {'Messiah', 'Water Music'})"
*
* If a vector is retrieved, the constraint must be satisfied on every
* element of the vector.
*/
static const std::string& Constraint();
};
/*!
* \brief Function that determines diffusion tensor value. Irrelevant if nature is not lua_function.
*/
struct LuaFunction : public Crtp::InputParameter<LuaFunction, self, Private::LuaFunction::storage_type>,
public Private::LuaFunction
{ };
/*!
* \brief Piecewise Constant domain index.
*/
struct PiecewiseConstantByDomainId : public Crtp::InputParameter<PiecewiseConstantByDomainId, self, Private::PiecewiseConstantByDomainId::storage_type>,
public Private::PiecewiseConstantByDomainId
{ };
/*!
* \brief Piecewise Constant value by domain.
*/
struct PiecewiseConstantByDomainValue : public Crtp::InputParameter<PiecewiseConstantByDomainValue, self, Private::PiecewiseConstantByDomainValue::storage_type>,
public Private::PiecewiseConstantByDomainValue
{ };
//! Alias to the tuple of structs.
using section_content_type = std::tuple
<
Nature,
Scalar,
LuaFunction,
PiecewiseConstantByDomainId,
PiecewiseConstantByDomainValue
>;
private:
//! Content of the section.
section_content_type section_content;
}; // struct Contractility
struct InitialCondition : public Crtp::Section<InitialCondition, ActiveStress>
{
/*!
* \brief Return the name of the section in the input parameter ('nagumo' here).
*
*/
static const std::string& GetName();
//! Convenient alias.
using self = InitialCondition;
//! Friendship to section parent.
using parent = Crtp::Section<self, ActiveStress>;
friend parent;
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
*/
struct ActiveStress : public Crtp::InputParameter<ActiveStress, self, double>
{
//! Name of the input parameter in Lua input file.
static const std::string& NameInFile();
//! Description of the input parameter.
static const std::string& Description();
/*!
* \return Constraint to fulfill.
*
* Might be left empty; if not the format to respect is the Ops one. Hereafter some text from Ops example file:
*
* An age should be greater than 0 and less than, say, 150. It is possible
* to check it with a logical expression (written in Lua). The expression
* should be written with 'v' being the variable to be checked.
* \a constraint = "v >= 0 and v < 150"
*
* It is possible to check whether a variable is in a set of acceptable
* value. This is performed with 'ops_in' (a Lua function defined by Ops).
* \a constraint = "ops_in(v, {'Messiah', 'Water Music'})"
*
* If a vector is retrieved, the constraint must be satisfied on every
* element of the vector.
*/
static const std::string& Constraint();
/*!
* \return Default value.
*
* This is intended to be used only when the class is used to create a default file; never when no value has been given
* in the input parameter file (doing so is too much error prone...)
*
* This is given as a string; if no default value return an empty string. The value must be Ops-formatted.
*/
static const std::string& DefaultValue();
};
//! Alias to the tuple of structs.
using section_content_type = std::tuple
<
ActiveStress
>;
private:
//! Content of the section.
section_content_type section_content;
}; // struct InitialConditions
//! Alias to the tuple of structs.
using section_content_type = std::tuple
<
Contractility,
InitialCondition
>;
private:
//! Content of the section.
section_content_type section_content;
}; // struct CardiacParameters
} // InputParameter
} // namespace HappyHeart
# include "Core/InputParameter/Parameter/ActiveStress/ActiveStress.hxx"
#endif // HAPPY_HEART_x_CORE_x_INPUT_PARAMETER_x_PARAMETER_x_ACTIVE_STRESS_x_ACTIVE_STRESS_HPP_