VTU input tutorial
Introduction
Note
This tutorial builds upon the contents of previous 4C tutorials. If you are not familiar with the basic concepts of how to setup and run a simulation with 4C, please refer to the introductory 3D solid-mechanics tutorial first.
This tutorial demonstrates the usage of 4C with the VTU file format. In this example, we look into a simple 3D solid-mechanics problem. All principles are also applicable to other problem types, e.g. fluid-structure interaction or thermal problems.
The example consists of a simple hollow quarter-cylinder, as shown in the (interactive) figure below. The material of the cylinder is a living soft tissue consisting of collagen fibers embedded in an elastin matrix. The collagen fibers are oriented in circumferential direction as shown in the figure.
The quarter-cylinder is subjected to a pressure load on the inner surface. On the outer surface, a Robin spring boundary condition in reference-surface normal direction is applied. All movements on the lateral surfaces are fixed in their respective surface normal direction. The elastin matrix is stress-free in the reference configuration and the collagen fibers have a prestretch so that the cylinder is in mechanical equilibrium in the reference configuration under the baseline pressure.
The living soft tissue tries to maintain a mechanobiological homeostatic state. We assume that the tissue is homeostatic in reference configuration under the baseline pressure. At the initial time, the pressure is increased by 60%, resulting in an immediate deformation of the cylinder and a transient adaptation of the collagen fiber concentration over time through a turnover process.
Note
We will not go into the details of the material model or the mechanobiological adaption in this tutorial. The interested reader is referred to the respective literature of constrained mixture models [1, 2, 3]. We will also not analyze the simulation results, since it is just a simple dummy example to demonstrate how to input geometry and data via VTU files.
Defining blocks and materials
A block is used in 4C to assign a group of elements to specific physical and element parameters. In
our case, we only have one block consisting of all elements in the mesh. The blocks are defined with
a cell-data array of an integer type in the VTU file with the name block_id.
Note
Every block in 4C can only consist of elements of the same type (hex8, tet4, etc.).
Note
Since 4C is using the id defined for the block to define the element properties, it is important to note that we must define a block-id even if the system contains only a single block.
To assign physics and element parameters to the block, we need to define the
section STRUCTURE GEOMETRY in the input file, as shown here:
STRUCTURE GEOMETRY:
FILE: tutorial_vtu.vtu
ELEMENT_BLOCKS:
- ID: 1
SOLID:
HEX8:
MAT: 1
KINEM: nonlinear
Here, we define the path to the VTU file and the element-blocks. In our example, we only have one
block with the id 1 consisting of hexahedral elements with nonlinear kinematics. We assign the
material with the id 1 to this block (see below for the material definition).
Defining boundary conditions via point-sets
Next, we want to define boundary conditions at specific surfaces of the geometry. In 4C,
we can apply boundary conditions to point-sets. VTU does not have native support for point-set definitions,
so 4C expects a point array of an integer type with the name point_set_<id> in the VTU file, where <id>
is the id of the point set. Every point that belongs to the point-set should have a non-zero value (typically 1)
as a value in the point array. Points that do not belong to the point-set should have a value of 0.
Note
4C only accepts integer-type point arrays for point-set definitions!
On the inner side of the quarter-cylinder, we apply a pressure load. We define the point-set
with the id 1 with the point_array point_set_1 which is 1 for all points on the inner surface and 0 elsewhere.
Note
Paraview (and the interactive plot here) linearly interpolates the point-set data within the geometry so that it might appear as if the point-set is not an integer value. However, 4C only considers the actual point values and does not interpolate as Paraview does for visualization.
In the input file, we can now define the pressure boundary condition on point-set 1, as shown here:
DESIGN SURF NEUMANN CONDITIONS:
- E: 1
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 1
- 0
- 0
VAL:
- -40
- 0
- 0
FUNCT:
- 0
- 0
- 0
TYPE: orthopressure
Note
It is important to specify the ENTITY_TYPE indicating which entity the id refers to. Here, we use
node_set_id since we define the surface based on a node set.
Similarly, we define the remaining boundary conditions (Robin spring conditions and lateral surface fixings). The respective sections in the input file are
DESIGN SURF ROBIN SPRING DASHPOT CONDITIONS:
- E: 2
ENTITY_TYPE: node_set_id
NUMDOF: 1
ONOFF:
- 1
STIFF:
- 100
TIMEFUNCTSTIFF:
- 0
VISCO:
- 0
TIMEFUNCTVISCO:
- 0
DISPLOFFSET:
- 0
TIMEFUNCTDISPLOFFSET:
- 0
FUNCTNONLINSTIFF:
- 0
DIRECTION: refsurfnormal
DESIGN SURF DIRICH CONDITIONS:
- E: 3
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 0
- 0
- 1
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
- E: 4
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 0
- 0
- 1
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
- E: 5
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 1
- 0
- 0
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
- E: 6
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 0
- 1
- 0
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
DESIGN LINE DIRICH CONDITIONS:
- E: 7
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 1
- 0
- 1
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
- E: 8
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 1
- 0
- 1
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
- E: 9
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 0
- 1
- 1
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
- E: 10
ENTITY_TYPE: node_set_id
NUMDOF: 3
ONOFF:
- 0
- 1
- 1
VAL:
- 0.0
- 0.0
- 0.0
FUNCT:
- 0
- 0
- 0
The interested reader can open the respective vtu-file in Paraview and visualize the point-sets to see which points are part of the respective point-sets.
Defining fields
In this example, we define a vector field called collagen_fiber, which is a unit vector field in the
domain pointing in the direction of the collagen fibers (see figure above). The field can be defined
as point-data, cell-data, or constant data. In our case, the field is defined at the points and are interpolated
within the cells by 4C.
To access a field from the mesh, you need to define them in the input file.
fields:
- name: collagen_fiber
discretization: structure
source:
from_mesh:
basis: points
You define the name of the field and the discretization in which the field is used. Here, we use the
field for a solid mechanics problem, so we define the discretization as structure. The source
of the field is from_mesh since we want to read the values directly from the mesh file.
Alternatively, the field can also be read from a table-like json structure, which we will not cover
in this tutorial.
In this case, the field we want to create is an interpolated field – i.e., a field that can be
evaluated at arbitrary points within the domain and is defined on a basis.
In our case, we define the field on the points of the mesh and interpolate it with the shape functions.
Hence, we use points as the basis. If the fibers are constant within an element, you can use the
basis cells instead and provide a cell-data array.
You can now refer to this field from the parameter sections in the input file. Here, we use it in the material definition of the collagen fiber as follows:
MATERIALS:
- MAT: 1
MAT_Mixture:
MATIDMIXTURERULE: 10
MATIDSCONST:
- 11
- 12
- MAT: 10
MIX_GrowthRemodelMixtureRule:
GROWTH_STRATEGY: 100
DENS: 1
MASSFRAC:
- 0.5020811158
- 0.497918842
- MAT: 100
MIX_GrowthStrategy_Stiffness:
KAPPA: 720
- MAT: 11
MIX_Constituent_ExplicitRemodelFiber:
ORIENTATION:
from_mesh: collagen_fiber
FIBER_MATERIAL_ID: 110
DECAY_TIME: 100
GROWTH_CONSTANT: 0.1
DEPOSITION_STRETCH: 1.1
INELASTIC_GROWTH: false
- MAT: 110
MIX_Constituent_RemodelFiber_Material_Exponential:
K1: 568
K2: 11.2
COMPRESSION: false
- MAT: 12
MIX_Constituent_ElastHyper:
NUMMAT: 2
MATIDS:
- 121
- 122
PRESTRESS_STRATEGY: 129
- MAT: 121
ELAST_IsoNeoHooke:
MUE:
constant: 72
- MAT: 122
ELAST_VolSussmanBathe:
KAPPA: 720
- MAT: 129
MIX_Prestress_Strategy_Prescribed:
PRESTRETCH:
constant:
- - 1.0
- 0.0
- 0.0
- - 0.0
- 1.0
- 0.0
- - 0.0
- 0.0
- 1.0
Take a look at the ORIENTATION of the collagen fiber (MIX_Constituent_ExplicitRemodelFiber). Here,
we specify that we want to read the fiber orientation from the mesh field collagen_fiber
that we defined in the fields section above and in the vtu file.
Simulation
Finally, we can run the simulation as usual with 4C. See 3D solid mechanics tutorial for more details on running a simulation with 4C and inspecting the results. Note, that the simulation shown here is not based on realistic geometries or parameters, and is only meant to demonstrate the usage of vtu files in 4C. Hence, we omit the analysis of the results here.