diff --git a/MoReFEM.xcodeproj/project.pbxproj b/MoReFEM.xcodeproj/project.pbxproj index db09c3b7c30ce6ea86e38cbd6d9f5d6b71f3dcfa..4d950f23ab04805f8da2a56e6db2a9659242bc45 100644 --- a/MoReFEM.xcodeproj/project.pbxproj +++ b/MoReFEM.xcodeproj/project.pbxproj @@ -4617,6 +4617,7 @@ BECEF92A22DF5D5E00D0DDE7 /* Now.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Now.hpp; sourceTree = "<group>"; }; BECEF93322DF640900D0DDE7 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; }; BECEF93422DF640A00D0DDE7 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; }; + BECEF93522DF7B0200D0DDE7 /* demo_result_directory_start_time.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = demo_result_directory_start_time.lua; sourceTree = "<group>"; }; BED13351206519C700A3B0AA /* Penalization.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Penalization.hxx; sourceTree = "<group>"; }; BED13352206519C800A3B0AA /* Penalization.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Penalization.hpp; sourceTree = "<group>"; }; BED748E41906734200BAB761 /* main_test_ondomatic_numbering.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main_test_ondomatic_numbering.cpp; sourceTree = "<group>"; }; @@ -5463,6 +5464,7 @@ BE0AFB7220750C570089FD9D /* CMakeLists.txt */, BEB0C6171EC3054500D62905 /* README */, BE6EA6201EC330820085E651 /* demo_input_hyperelasticity.lua */, + BECEF93522DF7B0200D0DDE7 /* demo_result_directory_start_time.lua */, 137F2B091E38B22900BD6083 /* InputData.hpp */, 137F2B0A1E38B22900BD6083 /* main.cpp */, 137F2B0B1E38B22900BD6083 /* main_ensight_output.cpp */, diff --git a/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity-mpi.xcscheme b/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity-mpi.xcscheme index aefcfae4e1fa96ccf3ca4093cffc53d7851600c1..7fd8a9acd875b6156effdee31440c774910f902e 100644 --- a/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity-mpi.xcscheme +++ b/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity-mpi.xcscheme @@ -75,6 +75,10 @@ </CommandLineArgument> <CommandLineArgument argument = "-i ${HOME}/Codes/MoReFEM/CoreLibrary/Sources/ModelInstances/Hyperelasticity/demo_input_hyperelasticity.lua" + isEnabled = "NO"> + </CommandLineArgument> + <CommandLineArgument + argument = "-i ${HOME}/Codes/MoReFEM/CoreLibrary/Sources/ModelInstances/Hyperelasticity/demo_result_directory_start_time.lua" isEnabled = "YES"> </CommandLineArgument> </CommandLineArguments> diff --git a/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity.xcscheme b/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity.xcscheme index b414cd0810b3eb8e5f536f214e756d9008afe03b..79e875ba396117b72d92e81fe46c4043606a76bc 100644 --- a/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity.xcscheme +++ b/MoReFEM.xcodeproj/xcshareddata/xcschemes/Hyperelasticity.xcscheme @@ -64,6 +64,10 @@ <CommandLineArguments> <CommandLineArgument argument = "-i ${HOME}/Codes/MoReFEM/CoreLibrary/Sources/ModelInstances/Hyperelasticity/demo_input_hyperelasticity.lua" + isEnabled = "NO"> + </CommandLineArgument> + <CommandLineArgument + argument = "-i ${HOME}/Codes/MoReFEM/CoreLibrary/Sources/ModelInstances/Hyperelasticity/demo_result_directory_start_time.lua" isEnabled = "YES"> </CommandLineArgument> </CommandLineArguments> diff --git a/Sources/Core/MoReFEMData/MoReFEMData.hpp b/Sources/Core/MoReFEMData/MoReFEMData.hpp index 99f09226ecdb18473bf647a1535d04fff05588a3..eb7a05479e48378c06f465d7cc4abc97bb4eebab 100644 --- a/Sources/Core/MoReFEMData/MoReFEMData.hpp +++ b/Sources/Core/MoReFEMData/MoReFEMData.hpp @@ -27,6 +27,7 @@ # include "Utilities/TimeKeep/TimeKeep.hpp" # include "Utilities/Environment/Environment.hpp" # include "Utilities/OutputFormat/OutputFormat.hpp" +# include "Utilities/Datetime/Now.hpp" # include "Core/InputData/Instances/Result.hpp" # include "Core/InitTimeKeepLog.hpp" diff --git a/Sources/Core/MoReFEMData/MoReFEMData.hxx b/Sources/Core/MoReFEMData/MoReFEMData.hxx index 9bee2aa906b9f5388e4915d599408efe38305b06..cc36be4d83c9a8a99dc19ec44c528c5fe11b118f 100644 --- a/Sources/Core/MoReFEMData/MoReFEMData.hxx +++ b/Sources/Core/MoReFEMData/MoReFEMData.hxx @@ -79,7 +79,6 @@ namespace MoReFEM const auto& mpi = GetMpi(); - // Set the MOREFEM_RESULT_DIR to default value if not yet settled. { const char* const result_dir = "MOREFEM_RESULT_DIR"; @@ -111,6 +110,21 @@ namespace MoReFEM "directory defined in input data file; if not it is in fact unused." << std::endl; } + + std::string start_time = "MOREFEM_START_TIME"; + + if (environment.DoExist(start_time)) + { + throw Exception("There is an environment variable named 'MOREFEM_START_TIME'; please unset it before " + "running again your program (it might be set internally to determine the result " + "directory if ${MOREFEM_START_TIME} appears in the chosen path).", + __FILE__, __LINE__); + } + + environment.SetEnvironmentVariable(std::make_pair(start_time, Utilities::Now(mpi)), + __FILE__, __LINE__); + + mpi.Barrier(); } diff --git a/Sources/ModelInstances/Hyperelasticity/demo_input_hyperelasticity.lua b/Sources/ModelInstances/Hyperelasticity/demo_input_hyperelasticity.lua index 14666c3454067824e42567fc0926e62daf47be2a..5a10ae360ef62d44df163f79deaf935c4c96aaac 100644 --- a/Sources/ModelInstances/Hyperelasticity/demo_input_hyperelasticity.lua +++ b/Sources/ModelInstances/Hyperelasticity/demo_input_hyperelasticity.lua @@ -451,7 +451,7 @@ Result = { -- MOREFEM_RESULT_DIR, which is either provided in user's environment or automatically set to -- '/Volumes/Data/${USER}/MoReFEM/Results' in MoReFEM initialization step. -- Expected format: "VALUE" - output_directory = "${MOREFEM_RESULT_DIR}/${MOREFEM_RUN_TIME}/MidpointHyperelasticity", + output_directory = "${MOREFEM_RESULT_DIR}/MidpointHyperelasticity", -- Enables to skip some printing in the console. Can be used to WriteSolution every n time. -- Expected format: VALUE diff --git a/Sources/ModelInstances/Hyperelasticity/demo_result_directory_start_time.lua b/Sources/ModelInstances/Hyperelasticity/demo_result_directory_start_time.lua new file mode 100644 index 0000000000000000000000000000000000000000..152e17c3fd359f6e6cd30825a32f555b53ebc443 --- /dev/null +++ b/Sources/ModelInstances/Hyperelasticity/demo_result_directory_start_time.lua @@ -0,0 +1,464 @@ +-- 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 = 2. + +} -- 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 = "displacement", + + -- 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 + +Unknown1 = { + + -- Name of the unknown (used for displays in output). + -- Expected format: "VALUE" + name = "displacement", + + -- 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 + +Mesh1 = { + + -- Path of the mesh file to use. + -- Expected format: "VALUE" + mesh = "${MOREFEM_ROOT}/Data/Mesh/Bar.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 - Full mesh. +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 = { }, + + -- 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 - The 3D elements of the mesh. +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 = { 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 = { } + +} -- Domain2 + +-- Domain3 - The border upon which surfacic forces are applied. +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 = { 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 = { 2 }, + + -- 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 - upon which Dirichlet boundary condition is applied. +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 = { 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 = { } + +} -- Domain4 + +EssentialBoundaryCondition1 = { + + -- Name of the boundary condition (must be unique). + -- Expected format: "VALUE" + name = "clamped", + + -- 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 = 'displacement', + + -- 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 = 4, + + -- 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 + +-- Volume +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 = 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 = { "displacement" }, + + -- List of the shape function to use for each unknown; + -- Expected format: {"VALUE1", "VALUE2", ...} + shape_function_list = { "P1" }, + + -- List of the numbering subset to use for each unknown; + -- Expected format: {VALUE1, VALUE2, ...} + numbering_subset_list = { 1 } + +} -- FiniteElementSpace1 + +-- Surfacic +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 = 3, + + -- 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 = { "displacement" }, + + -- List of the shape function to use for each unknown; + -- Expected format: {"VALUE1", "VALUE2", ...} + shape_function_list = { "P1" }, + + -- 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-8, + + -- 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-5, + + -- Step size tolerance + -- Expected format: VALUE + -- Constraint: v > 0. + stepSizeTolerance = 1e-8, + + -- Solver to use. + -- Expected format: "VALUE" + -- Constraint: value_in(v, { 'Mumps', 'Umfpack', 'Gmres' }) + solver = 'Mumps' + +} -- Petsc1 + +-- Surfacic +TransientSource1 = { + + -- How is given the transient source value (as a constant, as a Lua function, per quadrature point, etc...) + -- Expected format: {"VALUE1", "VALUE2", ...} + -- Constraint: value_in(v, {'ignore', 'constant', 'lua_function'}) + nature = { 'constant', 'constant', 'constant'}, + + -- The value for the parameter, which type depends directly on the nature chosen: + -- If nature is 'constant', expected format is VALUE + -- If nature is 'piecewise_constant_by_domain', expected format is {[KEY1] = VALUE1, [KEY2] = VALUE2, ...} + -- If nature is 'lua_function', expected format is a Lua function with prototype function(x, y, z) + -- return x + y - z + -- end + -- where x, y and z are global coordinates. sin, cos, tan, exp and so forth require a 'math.' preffix. + value = { 0., 300., 0. } + + +} -- TransientSource1 + + +Solid = { + + VolumicMass = { + + -- 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: value_in(v, {'ignore', 'constant', 'lua_function','at_quadrature_point','piecewise_constant_by_domain'}) + nature = "constant", + + -- The value for the parameter, which type depends directly on the nature chosen: + -- If nature is 'constant', expected format is VALUE + -- If nature is 'piecewise_constant_by_domain', expected format is {[KEY1] = VALUE1, [KEY2] = VALUE2, ...} + -- If nature is 'lua_function', expected format is a Lua function with prototype function(x, y, z) + -- return x + y - z + -- end + -- where x, y and z are global coordinates. sin, cos, tan, exp and so forth require a 'math.' preffix. + value = 1. + + }, -- VolumicMass + + HyperelasticBulk = { + + -- 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: value_in(v, {'ignore', 'constant', 'lua_function','at_quadrature_point','piecewise_constant_by_domain'}) + nature = "constant", + + -- The value for the parameter, which type depends directly on the nature chosen: + -- If nature is 'constant', expected format is VALUE + -- If nature is 'piecewise_constant_by_domain', expected format is {[KEY1] = VALUE1, [KEY2] = VALUE2, ...} + -- If nature is 'lua_function', expected format is a Lua function with prototype function(x, y, z) + -- return x + y - z + -- end + -- where x, y and z are global coordinates. sin, cos, tan, exp and so forth require a 'math.' preffix. + value = 1750000. + + }, -- HyperelasticBulk + + Kappa1 = { + + -- 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: value_in(v, {'ignore', 'constant', 'lua_function','at_quadrature_point','piecewise_constant_by_domain'}) + nature = "constant", + + -- The value for the parameter, which type depends directly on the nature chosen: + -- If nature is 'constant', expected format is VALUE + -- If nature is 'piecewise_constant_by_domain', expected format is {[KEY1] = VALUE1, [KEY2] = VALUE2, ...} + -- If nature is 'lua_function', expected format is a Lua function with prototype function(x, y, z) + -- return x + y - z + -- end + -- where x, y and z are global coordinates. sin, cos, tan, exp and so forth require a 'math.' preffix. + value = 500. + + + }, -- Kappa1 + + Kappa2 = { + + -- 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: value_in(v, {'ignore', 'constant', 'lua_function','at_quadrature_point','piecewise_constant_by_domain'}) + nature = "constant", + + -- The value for the parameter, which type depends directly on the nature chosen: + -- If nature is 'constant', expected format is VALUE + -- If nature is 'piecewise_constant_by_domain', expected format is {[KEY1] = VALUE1, [KEY2] = VALUE2, ...} + -- If nature is 'lua_function', expected format is a Lua function with prototype function(x, y, z) + -- return x + y - z + -- end + -- where x, y and z are global coordinates. sin, cos, tan, exp and so forth require a 'math.' preffix. + value = 403346.1538461538 + + + }, -- Kappa2 + + +} -- Solid + +Result = { + + -- Directory in which all the results will be written. This path may use the environment variable + -- MOREFEM_RESULT_DIR, which is either provided in user's environment or automatically set to + -- '/Volumes/Data/${USER}/MoReFEM/Results' in MoReFEM initialization step. + -- Expected format: "VALUE" + output_directory = "${MOREFEM_RESULT_DIR}/MidpointHyperelasticity/${MOREFEM_START_TIME}", + + -- Enables to skip some printing in the console. Can be used to WriteSolution every n time. + -- Expected format: VALUE + display_value = 1, + + -- Defines the solutions output format. Set to false for ascii or true for binary. + -- Expected format: VALUE + binary_output = false +} -- Result +