Commit f008a9eb authored by GILLES Sebastien's avatar GILLES Sebastien

#1443 Introduce the run from prepartition data for the Stokes model.

parent 81e5bd5c
......@@ -3752,6 +3752,7 @@
BE5275252499002700507228 /* demo_2d_binary_from_prepartitioned_data.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = demo_2d_binary_from_prepartitioned_data.lua; sourceTree = "<group>"; };
BE5275262499002700507228 /* demo_3d_from_prepartitioned_data.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = demo_3d_from_prepartitioned_data.lua; sourceTree = "<group>"; };
BE5275272499002800507228 /* demo_2d_from_prepartitioned_data.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = demo_2d_from_prepartitioned_data.lua; sourceTree = "<group>"; };
BE5275282499052300507228 /* demo_from_prepartitioned_data.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = demo_from_prepartitioned_data.lua; sourceTree = "<group>"; };
BE5301441E774418004CA0BA /* ApplySetCauchyGreenTensor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ApplySetCauchyGreenTensor.hpp; path = Internal/ApplySetCauchyGreenTensor.hpp; sourceTree = "<group>"; };
BE5301451E774418004CA0BA /* ApplySetCauchyGreenTensor.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ApplySetCauchyGreenTensor.hxx; path = Internal/ApplySetCauchyGreenTensor.hxx; sourceTree = "<group>"; };
BE5389FB1C897FE400D80749 /* Mpi.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Mpi.hpp; sourceTree = "<group>"; };
......@@ -8155,6 +8156,7 @@
BE0AFB702074C28E0089FD9D /* CMakeLists.txt */,
BEBB9F02227867FB00660051 /* TwoOperators.cmake */,
BE5704E122786DD000F83152 /* demo.lua */,
BE5275282499052300507228 /* demo_from_prepartitioned_data.lua */,
BEB0C6151EC2FDD100D62905 /* README */,
BE5ECE2919AC85EA00C636A7 /* InputData.hpp */,
BE915A151AAF514900B4C474 /* main.cpp */,
......@@ -36,9 +36,11 @@ add_test(Stokes
--overwrite_directory
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_ROOT}/Sources/ModelInstances/Stokes/demo.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Seq)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Seq
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes PROPERTIES TIMEOUT 80)
add_test(Stokes-mpi
${OPEN_MPI_INCL_DIR}/../bin/mpirun
--oversubscribe
......@@ -46,15 +48,29 @@ add_test(Stokes-mpi
--overwrite_directory
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_ROOT}/Sources/ModelInstances/Stokes/demo.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Mpi4)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Mpi4
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes-mpi PROPERTIES TIMEOUT 80)
add_test(Stokes-mpi-from-prepartitioned-data
${OPEN_MPI_INCL_DIR}/../bin/mpirun
--oversubscribe
-np 4 MoReFEM4Stokes
--overwrite_directory
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_ROOT}/Sources/ModelInstances/Stokes/demo_from_prepartitioned_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Mpi4_FromPrepartitionedData
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes-mpi-from-prepartitioned-data PROPERTIES TIMEOUT 80)
add_test(StokesModelEnsightOutput
MoReFEM4StokesEnsightOutput
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_TEST_OUTPUT_DIR}/Seq/Stokes/Rank_0/input_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Seq)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Seq
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(StokesModelEnsightOutput PROPERTIES TIMEOUT 20)
......@@ -62,7 +78,17 @@ add_test(StokesModelEnsightOutput-mpi
MoReFEM4StokesEnsightOutput
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_TEST_OUTPUT_DIR}/Mpi4/Stokes/Rank_0/input_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Mpi4)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Mpi4
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(StokesModelEnsightOutput-mpi PROPERTIES TIMEOUT 20)
add_test(StokesModelEnsightOutput-mpi-from-prepartitioned-data
MoReFEM4StokesEnsightOutput
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_TEST_OUTPUT_DIR}/Mpi4_FromPrepartitionedData/Stokes/Rank_0/input_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/Mpi4_FromPrepartitionedData
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(StokesModelEnsightOutput-mpi PROPERTIES TIMEOUT 20)
......
......@@ -24,6 +24,7 @@
# include "Core/InputData/Instances/TimeManager/TimeManager.hpp"
# include "Core/InputData/Instances/Geometry/Mesh.hpp"
# include "Core/InputData/Instances/Solver/Petsc.hpp"
# include "Core/InputData/Instances/Parallelism/Parallelism.hpp"
# include "FormulationSolver/Crtp/VolumicAndSurfacicSource.hpp"
......@@ -131,6 +132,7 @@ namespace MoReFEM
InputDataNS::VectorialTransientSource<EnumUnderlyingType(SourceIndex::volumic)>,
InputDataNS::VectorialTransientSource<EnumUnderlyingType(SourceIndex::surfacic)>,
InputDataNS::Parallelism,
InputDataNS::Result
>;
......
......@@ -41,7 +41,8 @@ add_test(Stokes_2_operators
--overwrite_directory
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_ROOT}/Sources/ModelInstances/Stokes/demo.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Seq)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Seq
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes_2_operators PROPERTIES TIMEOUT 80)
......@@ -52,15 +53,29 @@ add_test(Stokes_2_operators-mpi
--overwrite_directory
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_ROOT}/Sources/ModelInstances/Stokes/demo.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes_2_operators-mpi PROPERTIES TIMEOUT 80)
add_test(Stokes_2_operators-mpi-from-prepartitioned-data
${OPEN_MPI_INCL_DIR}/../bin/mpirun
--oversubscribe
-np 4 MoReFEM4Stokes
--overwrite_directory
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_ROOT}/Sources/ModelInstances/Stokes/demo_from_prepartitioned_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4_FromPrepartitionedData
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes-mpi-from-prepartitioned-data PROPERTIES TIMEOUT 80)
add_test(Stokes_2_operatorsModelEnsightOutput
MoReFEM4Stokes_2_operatorsEnsightOutput
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Seq/Stokes/Rank_0/input_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Seq)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Seq
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes_2_operatorsModelEnsightOutput PROPERTIES TIMEOUT 80)
......@@ -68,10 +83,20 @@ add_test(Stokes_2_operatorsModelEnsightOutput-mpi
MoReFEM4Stokes_2_operatorsEnsightOutput
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4/Stokes/Rank_0/input_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4)
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes_2_operatorsModelEnsightOutput-mpi PROPERTIES TIMEOUT 80)
add_test(Stokes_2_operatorsModelEnsightOutput-mpi-from-prepartitioned-data
MoReFEM4StokesEnsightOutput
-e MOREFEM_ROOT=${MOREFEM_ROOT}
-i ${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4_FromPrepartitionedData/Stokes/Rank_0/input_data.lua
-e MOREFEM_RESULT_DIR=${MOREFEM_TEST_OUTPUT_DIR}/TwoOperators/Mpi4_FromPrepartitionedData
-e MOREFEM_PREPARTITIONED_DATA_DIR=${MOREFEM_TEST_OUTPUT_DIR}/PrepartitionedData)
set_tests_properties(Stokes_2_operatorsModelEnsightOutput-mpi-from-prepartitioned-data PROPERTIES TIMEOUT 80)
# Not a typo: the Stokes executable with a different MOREFEM_TEST_OUTPUT_DIR is fine!
add_test(Stokes_2_operatorsCheckResults
......
......@@ -500,6 +500,29 @@ TransientSource2 = {
} -- TransientSource2
Parallelism = {
-- What should be done for a parallel run. There are 4 possibilities:
-- 'Precompute': Precompute the data for a later parallel run and stop once it's done.
-- 'ParallelNoWrite': Run the code in parallel without using any pre-processed data and do not write down
-- the processed data.
-- 'Parallel': Run the code in parallel without using any pre-processed data and write down the processed
-- data.
-- 'RunFromPreprocessed': Run the code in parallel using pre-processed data.
-- Expected format: "VALUE"
-- Constraint: value_in(v, {'Precompute', 'ParallelNoWrite', 'Parallel', 'RunFromPreprocessed'})
policy = 'Parallel',
-- Directory in which parallelism data will be written or read (depending on the policy).
-- Expected format: "VALUE"
directory = '${MOREFEM_PREPARTITIONED_DATA_DIR}/Stokes'
} -- Parallelism
Result = {
......
-- Comment lines are introduced by "--".
-- In a section (i.e. within braces), all entries must be separated by a comma.
transient = {
-- 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
} -- transient
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 = 'monolithic',
-- 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
} -- NumberingSubset1
NumberingSubset2 = {
-- 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 = 'test1',
-- 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
} -- NumberingSubset2
Unknown1 = {
-- Name of the unknown (used for displays in output).
-- Expected format: "VALUE"
name = 'velocity',
-- Index of the god of dof into which the finite element space is defined.
-- Expected format: "VALUE"
-- Constraint: value_in(v, {'scalar', 'vectorial'})
nature = 'vectorial'
} -- Unknown1
Unknown2 = {
-- Name of the unknown (used for displays in output).
-- Expected format: "VALUE"
name = 'pressure',
-- Index of the god of dof into which the finite element space is defined.
-- Expected format: "VALUE"
-- Constraint: value_in(v, {'scalar', 'vectorial'})
nature = 'scalar'
} -- Unknown2
EssentialBoundaryCondition1 = {
-- Name of the boundary condition (must be unique).
-- Expected format: "VALUE"
name = 'sole',
-- Comp1, Comp2 or Comp3
-- Expected format: "VALUE"
-- Constraint: value_in(v, {'Comp1', 'Comp2', 'Comp3', 'Comp12', 'Comp23', 'Comp13', 'Comp123'})
component = 'Comp123',
-- Name of the unknown addressed by the boundary condition.
-- Expected format: "VALUE"
unknown = 'velocity',
-- Values at each of the relevant component.
-- Expected format: { VALUE1, VALUE2, ...}
value = {0, 0, 0},
-- Index of the domain onto which essential boundary condition is defined.
-- Expected format: VALUE
domain_index = 3,
-- Whether the values of the boundary condition may vary over time.
-- Expected format: 'true' or 'false' (without the quote)
is_mutable = false,
-- Whether a dof of this boundary condition may also belong to another one. This highlights an ill-defined
-- model in most cases, but I nonetheless need it for FSI/ALE.
-- Expected format: 'true' or 'false' (without the quote)
may_overlap = false
} -- EssentialBoundaryCondition1
Mesh1 = {
-- Path of the mesh file to use.
-- Expected format: "VALUE"
mesh = '${MOREFEM_ROOT}/Data/Mesh/cylindrical_3d.mesh',
-- Format of the input mesh.
-- Expected format: "VALUE"
-- Constraint: value_in(v, {'Ensight', 'Medit'})
format = 'Medit',
-- Highest dimension of the input mesh. This dimension might be lower than the one effectively read in the
-- mesh file; in which case Coords will be reduced provided all the dropped values are 0. If not, an
-- exception is thrown.
-- Expected format: VALUE
-- Constraint: v <= 3 and v > 0
dimension = 3,
-- Space unit of the mesh.
-- Expected format: VALUE
space_unit = 1
} -- Mesh1
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: value_in(v, {0, 1, 2, 3})
dimension_list = {3},
-- 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 = {},
-- List of geometric element types considered in the domain. Might be left empty if no restriction upon
-- these. No constraint is applied at  LuaOptionFile level, as some geometric element types could be added
-- after generation of current input data 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 = {}
} -- Domain1
Domain2 = {
-- 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: value_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 = {1},
-- List of geometric element types considered in the domain. Might be left empty if no restriction upon
-- these. No constraint is applied at  LuaOptionFile level, as some geometric element types could be added
-- after generation of current input data 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 = {}
} -- Domain2
Domain3 = {
-- 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: value_in(v, {0, 1, 2, 3})
dimension_list = {},
-- 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 = {3},
-- List of geometric element types considered in the domain. Might be left empty if no restriction upon
-- these. No constraint is applied at  LuaOptionFile level, as some geometric element types could be added
-- after generation of current input data 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 = {}
} -- Domain3
Domain4 = {
-- 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: value_in(v, {0, 1, 2, 3})
dimension_list = {},
-- 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 = {},
-- List of geometric element types considered in the domain. Might be left empty if no restriction upon
-- these. No constraint is applied at  LuaOptionFile level, as some geometric element types could be added
-- after generation of current input data 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 = {}
} -- Domain4
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 = {'velocity', 'pressure'},
-- List of the shape function to use for each unknown;
-- Expected format: {"VALUE1", "VALUE2", ...}
shape_function_list = {'P2', 'P1'},
-- List of the numbering subset to use for each unknown;
-- Expected format: { VALUE1, VALUE2, ...}
numbering_subset_list = {1, 1}
} -- FiniteElementSpace1
FiniteElementSpace2 = {
-- 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 = 2,
-- 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 = {'velocity'},
-- List of the shape function to use for each unknown;
-- Expected format: {"VALUE1", "VALUE2", ...}
shape_function_list = {'P2'},
-- List of the numbering subset to use for each unknown;
-- Expected format: { VALUE1, VALUE2, ...}
numbering_subset_list = {1}
} -- FiniteElementSpace2
Petsc1 = {
-- Absolute tolerance
-- Expected format: VALUE
-- Constraint: v > 0.
absoluteTolerance = 1e-10,
-- gmresStart
-- Expected format: VALUE
-- Constraint: v >= 0
gmresRestart = 200,
-- Maximum iteration
-- Expected format: VALUE
-- Constraint: v > 0
maxIteration = 1000,
-- Preconditioner to use. Must be lu for any direct solver.
-- Expected format: "VALUE"
-- Constraint: value_in(v, {'lu', 'none'})
preconditioner = 'lu',
-- Relative tolerance
-- Expected format: VALUE
-- Constraint: v > 0.
relativeTolerance = 1e-06,
-- Step size tolerance
-- Expected format: VALUE
-- Constraint: v > 0.
stepSizeTolerance = 1e-08,
-- Solver to use.
-- Expected format: "VALUE"
-- Constraint: value_in(v, { 'Mumps', 'Umfpack', 'Gmres' })
solver = 'Mumps'
} -- Petsc1
Fluid = {
Viscosity = {
-- 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).