Data items
Data items in the data part are used to control the calculation, select required output, give unknowns initial values, etc.. Note that an end_data record is needed.
data_item index data_values
…
data_item index data_values
end_data
Consider the following example
element 0 -tria3 0 1 2
element 1 -tria3 1 2 3
node 0 0. 0.
node 1 1. 0.
node 2 0. 1.
node 3 1. 1.
…
end_data
Note that the data items element and node are indexed. In fact most data items need to be indexed. Indexing starts at 0 (all numbering in TOCHNOG starts at 0). Indices need not strictly be sequential (e.g. only the indices 1,2 and 5 of a data item may be specified).
Ranges
Ranges are general input formats used for indices and data values. Possible ranges are illustrated by the following examples
12
-all
-ra part1 part2 …-ra
The -all range is not available for indices. The -ra are delimiters of complex ranges. Each complex range part, e.g. part1, consists by example out of
35
-from 5 -to 16
-from 5 -to 25 -step 2
The data values for a data item can be specified as a range if this is allowed for in the description of the data item. All words in the data part (or part of an index) need to be preceeded with a ’tic’ (-). In the example the node_dof records 1 to 100 are initialized
node_dof -ra -from 1 -to 100 -ra 1. 0. 0.
Define blocks
You can define a word to represent a set of strings. For each word defined, you need to specify a start_define …end_define block. Within the block, you first specify the word, and then you specify the set of strings. Later in the data part, you can use the defined words as the replacement of the set of strings.
Example:
start_define
velocity 1.34
end_define
start_define
left_edge geometry_line 1
end_define
…
left_edge 0. 0. 0. 10. 1.e-4
…
bounda_unknown 1 -left_edge -velx
bounda_time 1 0. 0. 100. velocity
…
The words plus, minus, multiply and divide as used in arithmetic blocks are prohibited in define blocks.
Arithmetic blocks
You also can use the arithmetic expressions plus, minus, multiply and divide. We show some examples:
(make A equal to 4.1)
start_arithmetic
A 1.1 plus 3
end_arithmetic
…
(make B equal to 3.2)
start_arithmetic
B 3.2
end_arithmetic
…
(make C equal to 7.6)
start_arithmetic
C A plus B
end_arithmetic
…
(make D equal to 15.2)
start_arithmetic
D A plus B multiply 2.
end_arithmetic
Expressions will be evaluated from left to right. Words from define blocks will not be recognized in arithmetic blocks.
Automatic counting: the counters
The words counter_a, counter_b, counter_c and counter_d are reserved words in the data part. If they are found, they will be substituted by their integer value. Initially the value is 0 for both, and each time a counter is encountered it will be increased by 1. The example below shows a typical application.
start_define
left_edge geometry_line counter_a
end_define
start_define
right_edge geometry_line counter_a
end_define
…
left_edge 0. 0. 0. 10. 1.e-4
right_edge 2. 0. 2. 10. 1.e-4
…
bounda_unknown 1 -left_edge -velx
bounda_time 1 0.
bounda_unknown 2 -right_edge -velx
bounda_time 2 1.3
…
Notice that we automatically give the geometry lines a unique number in this way; the unique number is not really of interest in the remainder of the input file, so the application of a counter is convenient.
Finally, also the words counter_a_apply, counter_b_apply, counter_c_apply and counter_d_apply are available. They will be substituted by the current value of the counters, without that the counters are incremented.
Control indices
All possible data items are defined in the following sections. It only makes sense to specify some of the data items before the calculation; the other data items are only meant to be printed after the calculation. The example below specifies a 1D temperature calculation.
echo -no
number_of_space_dimensions 1
condif_temperature
end_initia
node 1 0
node 2 1
node 3 2
element 1 -bar2 1 2
element 2 -bar2 2 3
bounda_unknown 0 1 -temp
bounda_time 0 0.0 0. 1. 1. 100. 1.
bounda_unknown 1 3 -temp
bounda_time 1 0.0 0.0 100.0 0.
group_type 0 -condif
group_condif_density 0 1.0
group_condif_capacity 0 0.1
group_condif_conductivity 0 0.1
group_condif_flow 0 0.
control_timestep 0 0.1 10.0
control_print 0 -time_current -node_dof
control_print_database 1 -yes
control_timestep 2 0.2 10.0
control_print 2 -time_current -node_dof
end_data
Note how the indices of control items like control_timestep and control_print are used to control the sequence of events. First, (index=0) time steps of size 0.1 are taken and for each time step results are printed. Then (index=1) the database is printed which can serve as a point of restart. Finally (index=2) time steps of size 0.2 are taken and for each time step results are printed.
Numbering of values in records
The numering of values in records in illustrated by node_dof records. Look at the following piece of input file
…
number_of_space_dimensions 2
materi_velocity
materi_stress
end_initia
…
node_dof 1 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 -1.0
node_dof 2 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 -1.0
…
end_data
Here node_dof records 1 and 2 are initialized. The initial velocities are 0, and for the initial stresses we use σ_xx = −1, σ_yy = −1 and σ_zz = −1. The total list of unknowns in the node_dof record is -velx, -vely, -sigxx, -sigxy, -sigxz, -sigyy, -sigyz and -sigzz.
We refer to -velx as the 0’th value in the node_dof record, -vely as the 1’th value, etc. So printing the history of the -sigxx stress of node_dof record 1 is obtained by this:
…
control_timestep 10 …
control_print_history 10 -node_dof 1 2
…
end_data
where the number 2 refers to the -sigxx stress. See also the definition of the control_print_history record for this. As an alternative, sometimes you can use names in stead of numbers, by example here:
…
control_timestep 10 …
control_print_history 10 -node_dof 1 -sigxx
…
end_data
Types of unknowns
Some of the unknowns are principal unknowns: these are materi_velocity, condif_temperature, groundflow_pressure, wave_fscalar. These are the unknowns which are solved by the equilibrium equations (conservation laws).
The other unknowns, like materi_stress and so, follow from these principal unknowns (strains follow from displacement derivatives, stresses follow from strains by material laws, etc.).
Furthermore, for all the unknowns we have primary values, which are the unknowns themselves, and derived unknowns, which are the space and time derivatives of the primary unknowns.
At the start of the calculations, this record is used to generate element_group records. Each element, all of whose nodes are part of the geometry_item, will get an element_group record with value element_group. Please realise that the geometry entity can be a two-dimensional area, a volume, etc.
This option comes handy whenever a part of the domain gets some specific element data. By example, this would be the case if different areas in the structure have different material properties like stiffness, etc.
Beware: any directly specified element_group records will be overwritten.
We show here two ways to get different element data in different regions: Both ways give elements with young 1.2 from x=0 to x=1, and elements with young 3.3 from x=1 to x=2.
First way:
..
node 1 0.
node 2 1.
node 3 2.
element 1 -bar2 1 2
element 2 -bar2 2 3
element_group 1 0
element_group 2 1
..
group_type 0 -materi
group_materi_elasti_young 0 1.2
group_type 1 -materi
group_materi_elasti_young 1 3.3
..
control_mesh_refine_globally 10 -h_refinement
..
Second way:
..
node 1 0.
node 2 1.
node 3 2.
element 1 -bar2 1 2
element 2 -bar2 2 3
..
group_type 0 -materi
group_materi_elasti_young 0 1.2
group_type 1 -materi
group_materi_elasti_young 1 3.3
..
geometry_line 1 0. 1. 1.e-4
geometry_line 2 1. 2. 1.e-4
area_element_group 1 -geometry_line 1 0
area_element_group 2 -geometry_line 2 1
..
See also area_element_group_sequence_elementgroup etc.
See area_element_group_sequence_elementgroup.
This options works more or less the same as the area_element_group option. Read that description first.
With this option however, you can specify what the element group numbers of an area (geometry) will be in time. This allows for an easy modelling of change of material models inside a geometry (that is, inside the elements of that geometry).
This option works in combination with the area_element_group_sequence_element etc. records (with the same index).
With area_element_group_sequence_geometry you select the area (geometry) for which the time sequence of group numbers should be used.
With area_element_group_sequence_time and area_element_group_sequence_elementgroup you select time points at which groups should become active; by example, group_0 becomes active at time_0 etc.
With area_element_group_sequence_element you select the name of the elements for which the sequence of time versus group will be used; if this area_element_group_sequence_element is not specified then all elements in the area (geometry) will be used.
Remark 1: If you want the stresses, strains, etc. to be reset to 0. when the element group changes, then use a control_unknown_reset_geometry record for that.
Remark 2: It is more convenient and clear to use the start_define end_define option to define the geometries.
Example:
area_element_group_sequence_geometry 0 -geometry_brick 1
area_element_group_sequence_element 0 -hex8
area_element_group_sequence_time 0 0. 2. 3.
area_element_group_sequence_elementgroup 0 1 5 4
group_type 1 …
…
group_type 5 …
…
group_type 4 …
…
control_unknown_reset_geometry 10 -geometry_brick 1
…
In the selected geometry element group 1 will be used starting from time 0 for elements -hex8. Starting from time 2 element group 5 will be used, etc.
Same example, now with define’s however:
start_define
soil_empty_wall geometry_brick 1
end_define
…
area_element_group_sequence_geometry 0 -soil_empty_wall
area_element_group_sequence_element 0 -hex8
area_element_group_sequence_time 0 0. 2. 3.
area_element_group_sequence_elementgroup 0 1 5 4
group_type 1 …
…
group_type 5 …
…
group_type 4 …
…
control_unknown_reset_geometry 10 -soil_empty_wall
…
See area_element_group_sequence_elementgroup.
See area_element_group_sequence_elementgroup.
This record is used to generate data_item_name records on all nodes located on the specified geometrical entity. The values for the data_item_name should be specified in the area_node_dataitem_double record for real precision values, or in the area_node_dataitem_integer record for integer values (or words).
This allows you to set records like node_boundary or so for nodes located in geometries, without finding out yourself which nodes are located on the geometry.
See area_node_dataitem.
See area_node_dataitem.
States which ones from the list of dof’s in which nodes get prescribed nodal forces. The item node_range represents a range of node numbers. In stead of a node range also, by example, -geometry_line 1 can be used, indicating that the nodes on line 1 get the prescribed nodal forces. The items unknown_0 etc. can be one of the items listed at dof_label. However, neither -dis and -scal can be used.
For a specific index, only one of bounda_force and bounda_unknown can be specified; thus, either Neumann conditions or Dirichlet conditions can be applied to a particular node, but nor both.
Attention: with this option you get the same nodal force on all the specified nodes. If you want to apply a distributed force on a edge, however, you should use force_element_edge. That option gives forces consistent with the displacement field, so not necessarily the same for all nodes. By example the nodes on the side of linear elements on a edge get only half the force.
See also: bounda_time, bounda_sine and force_element_edge.
The bounda_unknown or bounda_force record with the same index is imposed with the sum of the sine functions; the first sine function has frequency freq_0 and amplitude amp_0, the second sine function has frequency freq_1 and amplitude amp_1, etc.. The sine functions starts at time 0. More general behavior in time can be imposed by using bounda_time records. For a specific index only one of bounda_time and bounda_sine can be specified.
As a typical application the response due to the excitation with a frequency spectrum can be analyzed. Just print the relevant response by control_print_history and extract the frequency spectrum of that response signal.
The sine loads will be only imposed after start_time.
This record specifies a multi linear time-load diagram for the bounda_unknown or bounda_force record with the same index. Between to time points in the diagram, the load is interpolated linearly (ramp function between the two points).
At all times that an unknown is not prescribed in such way, it is free and determined with the governing differential equations. For a specific index only one of bounda_time, bounda_time_file, bounda_sine and bounda_time_user can be specified.
As a special option, you can specify only one value in the bounda_time record if the load is constant over time (so not time-load sets but directly the constant load value).
As a further special option, you can specify no bounda_time and no bounda_sine at all; then a 0 value is assumed.
The same multilinear diagram as in the bounda_time record can be specified, now however it is given in the file index.bounda. This allows for a larger number of time load sets than possible with the bounda_time record, since the value of that record is limited in length by the maximum length that Tochnog uses to store it.
You need to set switch to -yes.
By example if index is 3 then the sets need to be specified in the file 3.bounda.
If switch is set to -yes a user supplied routine for the time-load diagram will be used.
See also the file user.cc in the distribution.
States which unknowns in which nodes get prescribed values by adjustment of the node_dof records. The item node_range represents a range of node numbers. In stead of a node range also, by example, -geometry_line 1 can be used, indicating that the nodes on line 1 get the prescribed boundary values. The items unknown_0 etc. are one of the primary unknowns listed at dof_label.
For a specific index, only one of bounda_force and bounda_unknown can be specified (thus either Neumann conditions or Dirichlet conditions).
Example for discrete node forces in y-direction on the nodes on a line:
bounda_unknown 0 -geometry_line 1 -vely
bounda_time 0 0. 0. 1. 1. 100. 1.
Normally you only should specify boundary conditions on principal unknowns (like velocity, temperature, etc.) and not on strain, stresses, etc.!
Specially for velocity (displacement) unknowns, you can prescibe a rotation around either the x-axis, y-axis or z-axis. In 1D you cannot use this record. In 2D you can only specify a rotation around the z-axis. In 3D you can specify each of the three axis.
Example of an x-axis rotation of node 12 with angular velocity of 0.33 [degrees per unit time]:
bounda_unknown 0 12 -rotation_x_axis
bounda_time 0 0.33
For the rotation 0.33 the rotation vector points in the positive x-axis direction.
See also: bounda_time, bounda_sine, force_element_edge and force_element_volume.
With this record you can specify a data item which should be changed over time. The time table should be given in the change_dataitem_time table as time-value sets; at least two sets should be specified.
The operat determines how the time-value sets are used. If operat is set to -use, then the value of the time-value sets is directly used. If operat is set to -add, then the value of the time-value sets is interpreted as a rate of change, so that the value is multiplied with the time step and then added to the old value.
As a typical example you can use this to prescribe the displacement of a contact geometry over time. Below the y-coordinates of a geometry line which is used in the contact algorithm is changed over time:
contact_geometry 0 -geometry_line 1
…
geometry_line 1 0. 10. 2. 10.
…
change_dataitem 0 -geometry_line 1 1 -use
change_dataitem_time 0 0. 10. 100. 0.
change_dataitem 1 -geometry_line 1 3 -use
change_dataitem_time 1 0. 10. 100. 0.
…
See change_dataitem and change_dataitem_time_user.
If switch is set to -yes then the changes applied by the change_dataitem and change_dataitem_time records (with the same index), will be applied at the discrete time points given in change_dataitem_time. Between those time points, no interpolation is used.
More precise, the change of the data item will be applied directly after the time point has passed.
If you don’t specify this change_dataitem_discrete record then interpolation is used.
If switch is set to -yes a user supplied subroutine is used in stead of the change_dataitem_time table.
See also the user.cc routine included in the distribution.
Tochnog will check for data records which you specify, if other records needed are also specified. If something is wrong an error is generated. If you set switch to -no this checking is suppressed.
Convection coefficient and convection environmental temperature. Also the record condif_convection_geometry should be specified.
Selects the area for which the condif_convection record with the same index should be applied. This is only available for linear elements.
In 1D, the convective heat flux is 0. In 2D this option is available for all elements. In 3D this option is only available for all linear elements. In stead of a number of nodes also, by example, -geometry_line 1 can be used in 2D, indicating that the nodes on line 1 start to convect. See also: condif_convection.
Radiation coefficient and radiation environmental temperature. Also the record condif_radiation_geometry should be specified.
Selects the area for which the condif_radiation record with the same index should be applied. This is only available for linear elements.
In 1D, the radiation heat flux is 0. In 2D this option is available for all elements. In 3D this option is only available for linear elements. the triangle between the 3 nodes will radiate heat. In stead of a number of nodes also, by example, -geometry_line 1 can be used in 2D, indicating that the nodes on line 1 radiate heat. See also: condif_radiation.
See contact_geometry.
This record specifies a contact geometry. Contacting nodes are forced to stay at the outward normal side of the contact geometry.
The allowed geometries and their material outward normals are listed below
This normal can be switched sign by setting the contact_geometry_switch with the same index to -yes.
In stead of geometries, also contact with all elements will be checked. Only contact with the elements -bar2, -tria3, -quad4, -tet4 and -hex8 can be detected. The outer boundary of the elements should be specified by node_boundary records. Often it is sufficient to apply node_boundary records on the body with the coarsest mesh; if the meshes of the contacting bodies are of the same size however, you should specify node_boundary records for both contacting bodies.
The time steps should be such small, that contacter nodes penetrate the other elements only in small steps.
If a contact_geometry is used, then the contacter node should also be within the tolerance of the geometrical entity to be noticed!
If contact is detected, normal contact forces of size contact_penalty_velocity * penetration are generated between the contacting node and the other element. Moreover, also a frictional force of size friction * normal force is generated (see contact_friction).
You need more iterations, see control_timestep_iterations, then normal; say 5 or more.
As an alternative to the contact algorithm, see slide_geometry.
See contact_geometry.
This factor specifies how much of the frictional energy is transformed into heat (this only makes sense if friction in contact_friction is not zero, and if condif_temperature is initialized). The factor should be between 0 and 1. See also contact_geometry.
The pressure_penalty should be given some high value if the pressure is freely linked at the surfaces of contacter and target. See also contact_geometry.
The temperature_penalty should be given some high value if free heat exchange between contacter and target is possible. See also contact_geometry.
The velocity_penalty essentially puts a spring between the contacter and the target if penetration occurs. Iterations (see control_timestep_iterations) are needed; more iterations are needed if the penalty factor is higher. See also contact_geometry.
See also contact_geometry.
Delete one or more data items. The index_range is a number (e.g. 3) or a range (-ra ... -ra, or -all). If index data_item_name is a nodal item (by example node or node_dof) then index_range can also be a geometrical entity (by example -geometry_line 1 or so), and the item will be deleted for nodes located on the geometrical entity.
In the example below element 1-10 and nodes 1-100 are deleted after some time in the calculation; this simulates dismantling a part of a structure somewhere in its lifetime. First, time steps with the total structure are taken; then a part of the structure is dismantled; then time steps with the remaining part of the structure are taken.
…
control_timestep 10 …
…
control_data_delete 20 -element -ra -from 1 -to 10 -ra
control_data_delete 21 -node -ra -from 1 -to 100 -ra
…
control_timestep 30 …
…
If an element or node is deleted, then also the corresponding records will be deleted. See also control_data_put.
Puts one or more data items. The values to be put should be specified in a control_data_put_double record for real data or in a control_data_put_integer record otherwise. The index_range is a number (e.g. 3) or a range (-ra ... -ra, or -all).
The -all option is only available for nodal data items (like node or node_dof).
If data_item_name is a nodal item then index_range can also be a geometrical entity (by example -geometry_line 1 or so), and the item will be put for nodes located on the geometrical entity.
As a special option for putting nodal items, you can use the control_data_put_double_node record in stead of the control_data_put_double record. In the control_data_put_double_node you can specifying a linear change of the nodal item data over the domain. You accomplish this by specifying in the control_data_put_double_node record the nodal item data at (x=0, y=0, z=0), then specify the gradients of the data in x-direction, then specify the gradients of the data in y-direction, and then specify the gradients of the data in z-direction. If 1D you only need to specify everything in x-direction, etc. Typcally this can be used for generation a linear initial stress distribution in the domain (geotechnics), or so.
If the data item already exists it is overwritten; else a new record will be generated.
See also control_data_delete.
See control_data_put.
See control_data_put.
See control_data_put.
Add a random number, based on a -uniform or -normal distribution, to the data_item_name records. This is done for the data_item_number value in those records (0 for the first value, 1 for the second value, etc.). The distribution_type should be set to -uniform or -normal. Use the control_distribute_values record to set the range of the distribution (for -uniform) or the variance of the distribution (for -normal).
If you specify a group item for data_item_name, by example group_materi_elasti_young or so, then not the group item record self will be changed, but the item will be changed for the elements which use this record; in this way you can give a random distribution to element data like stiffness, plastic properties, etc.
Several sets of distribution_type data_item_name data_item_number can be specified. For each set, you need to specify a corresponding value in control_distribute_values.
When a control_distribute record is encountered, all previous control_distribute records are disregarded.
In the first example, an uniform distribution with range 1.2 is added to the nodal temperatures:
…
materi_velocity
condif_temperature
…
control_distribute 10 -uniform -node_dof -temp
control_distribute_values 10 1.2
…
In the second example, an normal distribution with variance 1.e-3 is added to the y coordinate of the nodes:
…
control_distribute 10 -normal -node 1
control_distribute_values 10 1.e-3
…
In the third example, an normal distribution with variance 1. is added to the young’s modulus:
…
control_distribute 10 -normal -group_materi_elasti_young 0
control_distribute_values 10 1.
…
See control_distribute.
With this option you can ask for eigenvalues (and eigenvectors). The eigenvectors are determined for the principal unknowns in the system (like velocity, temperature, etc.). This option is only available after the matrices have been set up with control_options_solver. And it is assumed that the matrices used in the eigenmodes determination are symmetric.
With type_of_eigen_analysis you can determine which eigen problem will be solved. If type_of_eigen_analysis is set to -matrix, the eigen modes of the matrix will be solved. Other options for type_of_eigen_analysis are presently not available. (To be more clear: presently you cannot solve generalized eigenvalue problems like vibration in mechanics, acoustics, etc.)
The eigenvalues are put in the control_eigen_values record. The eigenvectors are put in the node_eigen records.
Warning: the eigensolvers we use are not tuned for finite element analysis. So the eigensolvers may be very slow, and large amounts of memory may be consumed.
The eigenvalues and eigenvectors are deleted whenever a new timestep is performed with control_timesteps. This is done since in general after a new timestep the matrices will have changed, and so the eigenvalues are not valid anymore.
See also control_eigen_scale.
With this option you can scale the eigenvectors such that the largest component becomes largest_component.
See also control_eigen.
See also control_eigen.
The nodes of the geometry entity 0 are replaced such that they neatly follow the boundary of geometry 1. In this way, it is easy to make a mesh with elements precisely in specific regions, if this is required to give separate element_group data (e.g. materials) to the geometry and it is too difficult to make the mesh at once ok for this.
Nodes moved in this process automatically get a node_boundary record.
The created mesh may be quite distorted. Consider using control_mesh_remesh.
All elements which are part of the geometry item are deleted. In this way, it is easy to make a mesh with holes, tunneling systems in ground, etc. Remaining nodes in the geometry, are moved onto the edge of the geometry if the corresponding control_mesh_delete_geometry_movenodes record with the same index is set to -yes; (otherwise, the remaining nodes are left inside the geometry). For these remaining nodes, automatically a node_boundary record will be generated.
For a geometry_point, elements inside the tolerance distance of the point will be deleted. For a geometry_circle, elements in the total inner area of the circle radius plus its tolerance will be deleted. Likewise for other geometries.
If you combine this record with a control_timestep record, then the element will be slowly deleted, starting from a complete element at the start of the timestep up to no element at the end of the timestep. This is accomplished by reducing the nodal forces of the elements slowly to zero; at the end of the timestep, the element is deleted completely. This might be usefull for a better convergence behaviour of the iterative process.
See also control_mesh_delete_geometry_movenodes, control_mesh_delete_geometry_element and control_mesh_delete_geometry_elementgroup.
Only elements with names element_name_0 etc. will be deleted if the control_mesh_delete_geometry (with the same index) is used. By example, element_name_0 is -quad4, -beam, etc.
If this record is not specified all elements in the geometry will be deleted.
Only elements from group element_group_0 etc. will be deleted if the control_mesh_delete_geometry (with the same index) is used.
The elements deleted by control_mesh_delete_geometry (with the same index), will be deleted by a factor factor_0 at the start of the timesteps up to a factor factor_1 at the end of the timesteps. If the control_mesh_delete_geometry is not used in cobination with timesteps, then directly factor_1 will be applied.
If this record is not specified then factor_0 = 0 and factor_1 = 1.
Determines if remaining nodes inside a deleted geometry, are moved onto the edge of the geometry (-yes) or not (-no). Moving nodes makes that the element mesh exactly fits the deleted geometry, but may also lead to heavily distorted elements. Default this record is -yes.
See also control_mesh_delete_geometry.
At the end of a timestep, an element will be deleted when its volume has become smaller than eps.
The same as control_mesh_generate_truss, now for beams however.
Generate -contactspring springs for nodes which have the same position in space. This can be used to connect these nodes with spring elements, so to model a contact area. Only nodes located on the specified geometry entity will be used.
The generated springs will get an element_group record with value element_group. So in that element group you can put the properties of the contact springs.
With the control_mesh_generate_contactspring_element record you can set between which elements the contactsprings should be generated. By example use -quad4 and -trussbeam if you want to generate contactsprings between those elements.
See control_mesh_generate_contactspring.
Generate -spring1 springs for nodes. Only nodes located on the specified geometry entity will be used.
The generated springs will get an element_group record with value element_group. So in that element group you can put the properties of the springs (see group_spring_stiffness etc.).
Generate -spring2 springs for nodes which have the same position in space. This can be used to connect these nodes with spring elements. Only nodes located on the specified geometry entity will be used.
The generated springs will get an element_group record with value element_group. So in that element group you can put the properties of the springs (see group_spring_stiffness etc.).
Typically you can use this option to connect meshes which were generated with different control_mesh_macro records or so.
Generate trusses for nodes which are neigbours in space (that is, for nodes which are connected by an isoparametric finite element). Only nodes located on the specified geometry entity will be used.
The generated trusses will get an element_group record with value element_group. So in that element group you can put the properties of the trusses (see group_truss_young etc.).
Typically you can use this option to put easy trusses somewhere in a mesh with isoparametric elements.
The same as control_mesh_generate_truss, now for trussbeams however.
This record works together with the control_mesh_generate_truss, control_mesh_generate_beam and control_mesh_generate_trussbeam records.
If switch is set to -yes, the truss or beam of trussbeam will not be connected to the existing nodes, but new nodes will be generated for the generated element.
Afterwards you can typically connect the truss or beam of trussbeam to the existing mesh with constactsprings, so that the end result is that you can model frictional slip between isoparametric elements and structural elements.
See also control_mehs_generate_contactspring.
This record works together with the control_mesh_generate_truss, control_mesh_generate_beam and control_mesh_generate_trussbeam records.
With macro_0 etc. you can specify the indices of control_mesh_macro_* records. Then the trusses (or beams or trussbeams) will only be generated for nodes coming from the mesh generated by the macro records with the specified indices.
This is handy in case you generate two neighbouring meshes with macro’s, and want to generate the elements (trusses or beams or trussbeams) in between these two meshes. Normally, both the meshes would get the extra truss (or ..) in case you use a geometry_line or so to specify that the new elements should be generated between the two meshes (this is so, since the nodes of both meshes are located on the geometry_line). With the present control_mesh_generate_truss_beam_macro record however you can specify that the new elements should only be generated by looking at the nodes of some of the meshes, and so no double new elements will be generated in between the two meshes.
With this record and the control_mesh_macro_parameters record you define a macro region. The macro region will automatically be divided into finite elements.
The type of macro region is defined by macro_item. You can set macro_item to a -sphere (3D), -cylinder_hollow (3D), -brick (3D), -rectangle (2D), -circle (2D), -circle_hollow (2D) and -bar (1D).
The elements to be generated will get element_group element_group.
With n … you define how much nodes and elements will be generated. For a -sphere, first 8 elements are generated; you need to specify the number of refinements. For a -cylinder_hollow, you need to specify the number of nodes in the length direction, the number of nodes over the wall thickness, the number of nodes in circ. direction. For a -brick, you need to specify the number of nodes in x-direction, the number of nodes in y-direction and the number of nodes in z-direction. For a -circle, you need to specify the number of nodes in a cross-section direction. For a -circle_hollow, you need to specify the number of nodes over the wall thickness, the number of nodes in circ. direction. For a -rectangle, you need to specify the number of nodes in width direction and the number of nodes in thickness direction. For a -bar, you need to specify the number of nodes.
In the following example a sphere is generated, after which the nodes get an initial velocity:
…
number_of_space_dimension 2
…
end_initia
…
control_mesh_macro 20 -sphere …
control_mesh_macro_parameters 20 …
…
control_data_put 30 -node_dof -all
control_data_put_double 30 0. 1. …
…
With this options you can set the element type which will be generated with control_mesh_macro (with the same index). This option is only available in 2d and 3d.
For element you can use -tria3, -tria6, -quad4 and -quad9 in 2d. For element you can use -tet4, -tet10, -hex8 and -hex27 in 2d.
If this record is not specified then -bar2 (1d), -quad4 (2d) or -hex8 (3d) will be generated.
With this record you can specify the dimensions of the control_mesh_macro region.
For a -sphere, you need to specify the x, y, z coordinates of the middle of the sphere and the radius of the sphere. For a -cylinder_hollow, you need to specify the x, y, z coordinates at the start of the cylinder, the x, y, z coordinates at the end of the cylinder, the middle radius, the wall thickness, the start angle and the end angle in degrees (which allows for an open section). For a -brick, you need to specify the x, y, z coordinates at the middle, the length in x-direction, the length in y-direction, and the length in z-direction. For a -circle, you need to specify the x, y coordinates of the middle and also the radius. For a -circle_hollow, you need to specify the same as for the circle and additionally the wall thickness, the start angle and the end angle in degrees (which allows for an open section). For a -rectangle, you need to specify the x, y coordinates of the middle, the width and the height respectively. For a -bar, you need to specify the x coordinate of the middle and the length respectively.
Nodes on the boundary edge of the macro region automatically get a node_boundary record if the switch is set to -yes.
If switch is set to -no then node_boundary records are not set.
Default switch is set to -yes.
If switch is set to -yes, then nodes with the same coordinates are merged into one node.
Distance below which nodes will be merged. Default some small value.
This record works together with the control_mesh_merge record.
With macro_0 etc. you can specify the indices of control_mesh_macro_* records. Then the merging will only be done for nodes coming from the mesh generated by the macro records with the specified indices.
The mesh merging from control_mesh_merge, with the same index, will not be use for nodes in the geometry specified by geometry_entity_item geometry_entity_index.
If switch is set to -yes then a new mesh is build.
This is useful whenever the old mesh is very distorted as a result of a large deformation process. The parameter delta determines the typical element size, with which the new mesh should be build.
This option tends to make elements at the edge of the domain small.
See also control_mesh_new_mesh_element.
With this record you can determine the element type which will be created by control_mesh_new_mesh. Allowed types are -bar2, -tria3, -quad4, -tet4 and -hex8. If this record is not specified one of the simplex elements (-bar2, -tria3, -tet4; depending on the number of dimensions) will be generated.
This record activates global mesh refinement or global mesh coarsening. This is not available for -tria3 and -tet4 elements. Either refinement_method is -h_refinement (more of the same elements) or refinement_method is -p_refinement (higher order elements) or refine_method is -p_coarsen (lower order elements).
As a special option for the -h_refinement method, the format refine_globally index -h_refinement switch_ξ switch_η switch_ζ can be used. By example in 1D, only refine_globally index -h_refinement switch_ξ should be specified. By example in the -hex8 element, ξ is the isoparametric coordinate running from the first node to the second node, η runs from the first node the third node and ζ runs from the first node to the fifth node. A isoparametric direction will be refined if the corresponding switch is set to -yes. This option allows for refinement in specific directions. It should be used with care however, and only gives proper results if the ξ,η and ζ directions of the elements match.
The control_mesh_refine_globally will automatically merge nodes which have the same position in space.
Rules for old and new:
See also control_mesh_refine_globally_geometry.
This record can be used together with the control_mesh_refine_globally record with the same index. If all nodes of an element edge is part of the geometrical entity, the new generated nodes are also placed on that geometrical entity. This typically is used to follow curved edges of the domain.
The control_mesh_refine_locally will automatically merge nodes which have the same position in space.
An elements will be refined depending on the size of a solution variable. Typically the solution variableresidue is used, but others can be chosen via control_mesh_refine_locally_unknown.
The percentage of elements which will be refined is specified by percentage. Typically percentage is 10 or so.
This local mesh refinement is only available for -bar2, -bar3, -tria3, -tria6, -tet4 and -tet10 elements.
See the rules for old and new at control_mesh_refine_globally.
See also control_mesh_refine_locally_geometry.
This record can be used together with the control_mesh_refine_locally record with the same index. If all nodes of an element edge is part of the geometrical entity, the new generated nodes are also placed on that geometrical entity. This typically is used to follow curved edges of the domain.
The refinement as specified in the control_mesh_refine_locally record with the same index, will not be applied on the geometry specified by geometry_entity_0 geometry_entity_index_0.
The refinement as specified in the control_mesh_refine_locally record with the same index, will only be applied on the geometry specified by geometry_entity_0 geometry_entity_index_0.
With unknown you can set which unknown will be used for deciding if an element should be refined. The size of the unknown field will be used.
Possibilities for unknown are: -materi_damage, -materi_displacement, -materi_plasti_kappa, -materi_strain_elasti, -materi_strain_plasti, -materi_strain_total, -materi_stress, -materi_velocity, -materi_void_fraction and -residue.
As a special option you can set unknown to -nothing; then an element is refined always.
For finding localization zones (e.g. shear bands) choosing -materi_strain_plasti or -materi_damage seems to be most robust.
This record causes remeshing if switch is set to -yes.
Nodes are replaced either such that the mesh becomes more regular (geometric remeshing) or such that the mesh becomes more dense in areas of residues (residue remeshing).
By example, the geometric remeshing can be used after local mesh refinement (control_mesh_refine_locally). And by example, the residue remeshing can be used so that nodes follow wave propagation phenomena.
The remeshing can only be applied in combination with time steps, so a control_timestep record with the same index should be present.
See also control_mesh_remesh_factor and node_boundary.
With this record you can set the relative usage of geometry remeshing and residue remeshing. As the typical remeshing step (i.e. the distance that a node is relocated) is about 100 times as large in geometry remeshing than in residue remeshing, you should use, say, geometry_factor is 0.01 and residue_factor 1.0 for both effects to be of about equal size. Some examples are given below.
(only geometric remeshing)
control_mesh_remesh index …
(only geometric remeshing)
control_mesh_remesh index …
control_mesh_remesh_factor index 1. 0.
(only residue remeshing)
…
residue
end_initia
…
control_mesh_remesh index …
control_mesh_remesh_factor index 0. 1.
(both geometric remeshing and residue remeshing)
…
residue
end_initia
…
control_mesh_remesh index …
control_mesh_remesh_factor index 0.05 0.5
The residue_factor can only be larger that 0 if residue is specified in the initialization part.
If this control_mesh_remesh_factor record is not specified, then geometry_factor is 1 and residue_factor is 0.
Practical tips:
The element numbers are made strictly sequential starting from lowest_element and the node numbers are made strictly sequential starting from lowest_node. Beware using control_renumber in combination with, by example, node numbers in printing of node_dof records; use post_point records instead.
If switch is set to -yes then each -quad4 element is split into four -tria3 elements and each -hex8 element is split into twelve -tet4 elements. Further, each -quad9 element is split into four -tria6 elements and each -hex27 element is split into six -tet10 elements.
See the rules for old and new at control_mesh_refine_globally. See also control_mesh_split_only.
If this record is used, the corresponding control_mesh_split record will only be applied on the geometry specified by index geometry_entity geometry_entity_index.
If switch is set to -yes, the convection of a material with respect to the mesh is allowed. If switch is set to -no, the convection of a material with respect to the mesh is not allowed. This is done for timestep records with the same index.
Default switch is set to -yes. See also options_convection.
If switch is set to -yes, inertia terms are included (material mass, heat capacity, ..). If switch is set to -no, inertia is not included. This is done for timestep records with the same index.
Default switch is set to -yes. See also options_inertia.
Relaxation parameters for adjusting unknowns in iterations. This can stabilize the calculation. By example, a relaxation parameter of 0.1 means that the corresponding unknown is now completely updated with the iterative change, but only 10 percent of the change is actually applied in a iteration.
If enough iterations are used, the relaxation parameters with not influence the final solution.
You should specify a relaxation parameter term for each principal unknown which is present in the calculation (see the start of the data part description for a list of principal unknowns; these are velocities, temperature, etc.).
This relaxation done for timestep records with the same index. See also options_relaxation.
If switch is set to -yes, any plasticity data in the input file will be ignored. This is done for timestep records with the same index.
This option is convenient for testing your input file just linear, without the need to outcomment each and every part with plasticity data. See also options_skip_plasticity.
If solver_type is set to -diagonal then only the main diagonal of the system matrix will be used for the solution of all unknowns. This gives the program an explicit like structure. In fact, if control_timestep_iterations is set to 1, then a classical explicit finite element program is obtained.
If solver_type is set to -matrix_iterative_bicg then the complete system matrix will be used for solution of the principal unknowns (see the initialization section for an explanation on principal unknowns). A diagonal Preconditioned BiConjugate Gradient method is applied.
If solver_type is set to -matrix_iterative_petsc then the complete system matrix will be used for solution of the principal unknowns (see the initialization section). The PETSc library with iterative solvers is applied. See also control_options_solver_petsc_ksptype and control_options_solver_petsc_pctype. The PETSc solver is meant for expert users only. See tochnog/src/makefile how to link the PetSc solvers to Tochnog. The PETSc library is developed by Satish Balay, William Gropp, Lois Curfman McInnes and Barry Smith (Mathematics and Computer Science Division, Argonne National Laboratory).
If solver_type is set to -matrix_superlu then the complete system matrix will be used for solution of the principal unknowns (see the initialization section). The SuperLu library with a sequential direct solvers is applied (LU decomposition). The SuperLu solver is meant for expert users only. Also available are -matrix_superlu_mt (multithreads based parallel version of SuperLu) and -matrix_superlu_dist (MPI based distributed parallel version of SuperLu). See tochnog/src/makefile how to link the SuperLu solvers to Tochnog. The SuperLu library is developed by James W. Demmel (Computer Science Division, University of California, Berkeley), John R. Gilbert (Xerox Palo Alto Research Center) and Xiaoye S. Li (National Energy Research Scientific Computing Center, NERSC). Beware: if the equations are singular, if you forget boundary conditions or so, superlu tends to give strange problems (segmentation faults or so).
In all cases, the first iteration will give estimates for velocities, displacements, etc. Typically you need at least two iterations to get estimates for strains, stresses, etc.
Even if the equations are linear, using more iterations may change the results. This is because, the strain, stresses, etc. are redistributed due to the continuous field approach. Typically the results become more accurate when using more iterations; but using two or three iterations is ok in most cases.
Even in case of plasticity, damage, or so we use the linear elastic stiffness matrix in both the diagonal solver and the matrix solvers. This gives a stable iteration behavior but requires that enough time steps and/or iterations are used.
If solver_type is set to -none then only the matrices and right-hand sides are setup, but the equations are not really solved.
For the multithreaded parallel solvers use options_processors to set the numbers of processors that you want to use.
Default we use -matrix_iterative_bicg.
With this record you can set the Krylov Subspace type for the PETSc solver (so the method in which the iterative method searches for the solution of the equations). Possibilities are: -richardson, -chebychev, -cg, -bicg, -gmres, -bcgs, -tfqmr, -tcqmr, -cr, -lsqr, -preonly. See control_options_solver_petsc_pctype on how to set the preconditioning type.
The PETSc solver needs to be installed separately on your computer. See the Tochnog homepage links where to get PETSc. After installing PETSc, you need to compile Tochnog and link it to the PETSc library; follow the instructions in tochnog/src/makefile.
Running on single processor computers.
For running on a single processor computer run Tochnog like tochnog beam.dat.
Running on distributed processor systems (clusters of workstations).
With the PETSc solver you can also run on distributed memory systems. The MPI is used for message parsing. We recommend using the MPICH version of MPI; see the links at the homepage where to get it.
For running on distributed systems, run Tochnog like mpi -v -np 20 tochnog if you have the same filesystem across all the machines. Otherwise you need to use a procgroup file which tells where in each machine the executable and the data file are. Examples of usage are on page 9 of the mpich guide.ps file. If mpich is used for MPI, then the $MPIHOME/util/machines/machines.$ARCH file contains the hostnames. But if the procgroup file is used, then it takes precedence over machines.$ARCH.
A procgroup file is like:
hostname1 0 /home/xxx/tochnog
hostname2 1 /users/yyy/tochnog
…
Also notice that in calling Tochnog no arguments are specified so always the default input file tn.dat is used.
With this record you can set the Preconditioner type for the PETSc solver. Possibilities are: -jacobi, -bjacobi, -sor, -eisenstat, -icc, -ilu, -asm, -sles and -lu. Especially the -lu is noteworthy, since it is a complete LU factorisation so that it activatives a direct solver (sparse, profile).
The is the normal printing command. A control_print record causes the data items with name data_item_name_0, etc. to be printed. Example
control_print 1 -node -node_dof
See also: print_filter.
If switch is set to -yes, the complete database is be printed. See the example below
control_print_database 6 -yes
This database contains the complete status of the calculation. By example if index is 6, the data base is printed in the file input_file_name6.dbs.
As a special option, you can print a restart database by setting switch to -restart. This database is essentially the same as the complete database but, however, all control records up to the present index are deleted since these do not need to performed anymore in a restart.
Always a complete database tn.dbs is printed at the end of the calculation.
This option prints columns of data for each time step. Print in the first column the number_0 value of data_item_name_0 with index index_0. Similar in the second column for data_item_name_1 index_1 number_1. Etc. (for all values).
Typically, the data item names can be -node_dof such that unknowns can be printed against each other in time. If the data item names are -node_dof, then number_0 and number_1, etc. can be -velx, -temp, etc. (see dof_label); otherwise, by example, if number_0 is 3 then the fourth value of data_item_name_0 is printed. All results will be printed in the file tn.dvd.
Example:
control_print_data_versus_data 0 -node_dof 2 -temp
-node_dof 2 -sigxx -node_dof 2 -sigxx
Another example:
post_point 0 0.0 1.0
post_calcul -materi_stress -average -materi_stress -sizedev
control_print_data_versus_data 20
-time_current 0 0
-post_point_dof_calcul 0 0 -post_point_dof_calcul 0 1
In the last example, the -post_point_dof_calcul 0 0 stands for ’the post_point_dof_record with index 0 and the 0’th number which is the first value so the avarage of the stresses’.
See also: control_print.
If switch is set to -yes then results are written in a format for IBM data explorer. By example, if the input file is called turbine.dat then the results are written in the turbine.dx.
Presently, in data explorer do the following to visualize:
Set the option rendering options to hardware for better results. You are urged to read the quick reference manual for IBM dx. Expect Tochnog specific visualisation networks for data explorer to appear once.
With this options you can print values from element data versus coordinates. Select either -element_truss_force or -element_beam_moment for data_item_name.
By example, the first value of a -element_beam_moment record (that is number 0 in tochnog notation) will be printed in the file element_beam_moment_0.index; the file will contain lines containing x, y, z and value. In 1D only x will be printed, etc.
See print_filter.
Print the mesh and the unknowns in a file which can be plotted with the GID pre-post processor if switch is set to -yes. By example, if the input file is called turbine.dat then the mesh is written in the turbine.flavia.dat (2D) or the turbine.flavia.msh file (3D). The results are written in the turbine.flavia.res. If line data is present (truss elements, beam elements, tendons), these will be written to lines.bon.
The mesh and results for unknowns will always be written at the end of the calculation.
Nodes and elements will be renumbered when written to the GID files, because GID preferes sequential numbering. You can keep the node and elements numbers in Tochnog the same as the numbers in GID, by applying a renumber index 1 1 on the mesh you use (thus keeping the numbers in Tochnog sequential starting from 1).
Since GID uses the time as a label for each set of results, you can only print new results to the GID files at unique time points (that is, at the start of the calculation or after the time has increased with the control_timestep option).
Since GID gets confused when the number of elements changes between several control_print_gid records, Tochnog will only print GID results for the last mesh used.
Coordinates for nodes will be written in the original configuration. If materi_velocity is initialized, also a vector mesh_deform will be written for GID which contains the deformation between the original mesh configuration and the deformed mesh configuration. Use the deform mesh menu in GID, to draw the deformed configuration by applying the vector deformation with a factor 1.
If materi_velocity is initialized, also a vector force will be written for GID which contains the forces corresponding to the velocities (displacements).
Empty elements (that is, elements with a materi_density or materi_diffusion lower than 0.5) will not be plotted,
As a special option, you can set switch to -separate. Then the mesh and results will be printed in separate files for GID. The option comes handy when the mesh changes during the calculation; GID cannot plot that if the mesh and results are in the same file.
Print the mesh and the unknowns in a file which can be plotted with the General Mesh Viewer if switch is set to -yes. The files are numbered sequentially. By example, the first results are printed in the file gmv001.inp, the second results are printed in the file gmv002.inp, etc. Also results of node_dof_calcul records (if present) will be printed.
Always a gmv.inp file will be generated at the end of the calculation.
Only the elements -tria3, -quad4, -quad9, -tet4, -hex8 and -hex27 are available. The elements -quad9 and -hex27 will be mapped to -quad4 and -hex8 elements to allow for gmv plotting.
TOCHNOG will temporarily renumber elements and nodes when is writes the GMV data. So the numbering in the GMV plots will not correspond with the numbering as it was in the actual calculation.
If present, TOCHNOG element groups will be attributed to GMV material numbers.
If present, TOCHNOG post_point records will be attributed to GMV tracers.
As a special option, you can specify the number of an eigen mode instead of -yes after materi_velocity has been initialized and an eigenvalue analysis has been performed by control_eigen. Then the eigenmode for the velocity is added to the nodal coordinates. In this way you can view the mode.
Print the time history for each of the sets data_item_name_0 data_item_index_0 number_0 …. By example, data_item_name_0 is -node_dof so that the development of an unknown can be followed in time. If -node_dof is used, number_0 is one of -velx, -temp, etc. (see dof_label); otherwise, number_0 should be an integer specifying the number of the value in the record (for instance number 2 means the third value).
The following history is printed in the file temp112.his
control_print_history 0 -node_dof 112 -temp
Print x in x.index. Print y in y.index. Print z in z.index. Also the primary unknowns are printed; by example, print -temp in temp.index. Furthermore, also data generated by post_calcul is printed.
Use matlab (a trademark of The MathWorks, Inc.) to plot.
By example, if you want to plot temperatures after a 2D calculation with control_print_matlab 100 -yes, then do in matlab the following:
load x.100
load y.100
load temp.100
fill(x,y,temp)
By example, if you want to plot temperatures after a 3D calculation with control_print_matlab 100 -yes, then do in matlab the following:
load x.100
load y.100
load z.100
load temp.100
fill3(x,y,z,temp)
Print the mesh and the unknowns in a file which can be plotted with plotmtv if switch is set to -yes. By example, the first results are printed in the file plotmtv1.dat, the second results are printed in the file plotmtv2.dat, etc. Also results of node_dof_calcul records (if present) will be printed.
Only the elements -bar2, -bar3, -bar4, -bar5, -tria3, -quad4, -quad9, -tet4 and -hex8 are available.
As a special option, you can specify the number of an eigen mode instead of -yes after materi_velocity has been initialized and an eigenvalue analysis has been performed by control_eigen. Then the eigenmode for the velocity is added to the nodal coordinates. In this way you can view the mode.
Print primary unknown field in node_dof into the file tecplot.plt if switch is set to -yes. Also results of node_dof_calcul records (if present) are printed in the tecplot.plt file.
If switch is set to -mesh, then also the mesh is printed; this will be done automatically however for a new mesh or if the mesh has been changed.
As a special option, you can specify the number of an eigen mode instead of -yes after materi_velocity has been initialized and an eigenvalue analysis has been performed by control_eigen. Then the eigenmode for the velocity is added to the nodal coordinates. In this way you can view the mode.
You can plot this file with the program tecplot (a trademark of Amtec Eng., Inc.).
If switch is set to -yes then results for the primary unknowns will be printed, including also the coordinates at which the results hold.
By example, for the file temp.index will contain lines containing x, y, z and -temp. In 1D only x will be printed, etc.
Also results for node_dof_calcul records will be printed.
If switch is set to -yes then results for right-hand-side for the the primary unknowns will be printed, including also the coordinates at which the results hold.
By example, for the file temp_rhside.index will contain lines containing x, y, z and right-hand-side of -temp (that is, heat flux). In 1D only x will be printed, etc.
Print the mesh and the unknowns in a file which can be plotted with the Visual Tool Kit, vtk, if switch is set to -yes. The results are printed in the file tnindex.vtk. Also results of node_dof_calcul records, if present, will be printed.
Only the elements -bar2, -bar3, -tria3, -quad4, -quad9, -tet4, -hex8 and -hex27 are available. The elements -bar3, -quad9 and -hex27 will be mapped to -bar2, -quad4 and -hex8 elements respectively for vtk plotting.
Relaxation parameters for temperature. See also control_relaxation_materi_velocity.
Relaxation parameters for groundflow pressure. See also control_relaxation_materi_velocity.
Relaxation parameters for velocity. This parameter only enters the left hand side of the iterative scheme. If enough iterations are used (see control_timestep_iterations), the parameters do not influence the final results.
The control_relaxation … options add ’stiffness’ to the left hand side of the equations, and so stabilize the iterations. Another possibility is to use options_relaxation which reduces iterative changes to the unknowns.
If number_of_repeats is larger than 0 the calculation repeats from the control_index. The value of number_of_repeats is decreased with 1.
A first application is to do many time steps, but print only once in a while:
control_timestep 10 1. 100. …
control_print 20 -node_dof …
control_repeat 30 80 10
In the latter example, first 100 timesteps are taken, then results for node_dof are printed; this is repeated 80 times.
Also, this control_repeat can typically be used to perform a number of refinements combined with time stepping to a new, refined, solution. This is done a fixed number of times.
See also control_repeat_until_item.
The calculation repeats from the control_index until the data item value as specified by data_item_name data_item_index data_item_number satisfies repeat_criterium.
If repeat_criterium is -change then repeating is stopped if the value changes less than tolerance. The tolerance needs to be specified in the control_repeat_until_tolerance record (with the same index). It specifies as a percentage the relative change in the data item value above which repeating occurs.
If repeat_criterium is -value then repeating is stopped if the absolute value is less than tolerance. The tolerance needs to be specified in the control_repeat_until_tolerance record (with the same index).
This can typically be used to perform a number of refinements combined with time stepping to a new solution until some data item doesn’t change much anymore.
See also control_repeat.
If switch is set to -yes then the calculation continues with the undeformed mesh. The unknowns (in the node_dof records) are reset to the initial values. And time_current is set to the initial time.
This allows you to calculate some path dependent behavior completely from the start with a refined mesh.
These records define sets of time steps of size step_size which are to be taken till the time is increased by time_increment. In the example below time steps of 0.1 are taken from time 0.0 up to time 1.0. Then time steps of 0.2 are taken up to time 2.0
control_timestep 0 0.1 1. 0.2 1.
This sets a fixed number of equilibrium iterations in each time step (for time steps of the control_timestep record with the same index). If number_of_iterations is 1 then the time stepping is completely Euler explicit. For larger values, the time stepping becomes implicit. For many iterations, the time stepping is Euler implicit. Typically, number_of_iterations is 1,2 or 3. Default number_of_iterations is 2.
As an alternative, you can use control_timestep_iterations_automatic.
After specification of this record, iterations will be performed until ratio in post_node_rhside_ratio is less then ratio_criterium. Typically, set ratio_criterium to 0.01 or 0.001.
TOCHNOG will now also adjust the time step size. If few iterations are needed the time step size is increased. If many iterations are needed the time step size is decreased.
The time step specified in control_timestep is used as initial step. The time step is not allowed to become higher then maximum_timestep. If the time step becomes very low compared to the initial step, time stepping is aborted.
The initial step as specified in control_timestep, should be sufficient small so that this automatic algorithm can fulfill the ratio_criterium in that initial step.
The control_timestep_iterations_automatic options normally will stop the calculation if the minimal timestep is reached and the criterium can not be fulfilled.
However, if you set switch in control_timestep_iterations_automatic_stop to -yes then the calculation will continue.
If this record is specified, each new time step size is multiplier * old time step size. The step_size as specified in control_timestep will only be used as the initial time step.
This option is handy to study physical processes which develop more slowly when time proceeds. A typical example is consolidation analysis in geotechnics.
The unknowns as specified in this record are freezed to keep their values. By example, unknown_0 is temp, etc.
Specifies the geometry on which the control_unknown_reset record with the same index should be applied. If this geometry is not specified, the control_unknown_reset record will be done for all nodes.
The unknowns as specified in this record are set to a value specified in the control_unknown_reset_value record (with the same index). By example, unknown_0 is -eptxx, etc.
As a special option you can use -all to reset all unknowns.
As a typical example, you can set strains to zero in a geotechnical calculation, with an -updated material description, after the gravity load has been applied. In this way the strains for further deformations can de distinguished more clearly.
Specifies the value to which unknowns of the control_unknown_reset_unknown record are reset. If this control_unknown_reset_value record is not specified, then the unknowns are reset to 0.
See dependency_item.
This record allows you to make an element data item dependent on one of the unknowns (see dof_label for unknown names). This is done for n values of the unknown (n should be at least 2). The dependency should be specified in the dependency_diagram record (same index) with a multi linear diagram. In the diagram first a set of unknowns values should be specified. Second the set of data item values for those unknown values should be specified.
Some examples are given below.
Temperature dependent Young’s modulus of element_group 1 (E=1.e10 at temperature 1, etc.):
dependency_item 1 -group_materi_elasti_young 1 -temp 4
dependency_diagram 1 1. 2. 3. 4. 1.e10 1.e9 1.e8 3.e5
Temperature dependent Young’s moduli in two maxwell chains of element_group 1 ( for the first chain the moduli 1.e10, 1.e9, … for the second chain the moduli 1.e10, 1.e9, … all relaxation times are 1. 10 −2. ):
dependency_item 1 -group_materi_maxwell_chain 1 -temp 4
dependency_diagram 1
1. 2. 3. 4.
1.e10 1.e9 1.e8 3.e5
1.e-2 1.e-2 1.e-2 1.e-2
1.e12 1.e11 1.e10 3.e7
1.e-2 1.e-2 1.e-2 1.e-2
As a special option, unknown can be set to -time_current. This allows for time-dependent properties (aging). The example below shows time dependent Young’s modulus of element_group 1 (E=1.e10 at time 0, etc.):
dependency_item 1 -group_materi_elasti_young 1 -time_current 4
dependency_diagram 1 0. 1. 2. 3. 1.e10 1.e9 1.e8 3.e5
The dependencies are available only for real data (and thus not for integer data). The dependency_diagram values shows be specified from low to high values for the unknown.
This record will be filled with labels of the unknowns in the correct order. This information is required for understanding records like node_dof etc. The sequential order for the primary unknowns will match the order in which they are specified in the initialization part.
The total list of possible unknown labels is: -dam damage, -dens density, -ener material strain energy, -epexx xx-strain elastic, -epexy, -epexz, -epeyy, -epeyz, -epezz, -eppxx xx-strain plastic, -eppxy, -eppxz, -eppyy, -eppyz, -eppzz, -eptxx xx-strain total, -eptxy, -eptxz, -eptyy, -eptyz, -eptzz, -eppsize size of plastic strains, -gvelx ground water velocity in x-direction, -gvely, -gvelz. -hisv0, -hisv1, ..., material history variables, -kap plastic isotropic hardening parameter kappa, -pres hydraulic pressure head, -res residue unknown, -rhoxx xx plastic kinematic hardening, -rhoxy, -rhoxz, -rhoyy, -rhoyz, -rhozz, -scal scalar, -temp temperature, -f plasticity yield rule, -fn nonlocal plasticity yield rule, -fscal time derivative of scalar, -sigxx xx-stress, -sigxy, -sigxz, -sigyy, -sigyz, -sigzz, -1msigxx xx-stress in first maxwell chain, -1msigxy, -1msigxz, -1msigyy, -1msigyz, -1msigzz, -velx velocity in x-direction, -vely, -velz, -velix integrated velocity in x-direction, -veliy, -veliz, -void material void fraction. -work material second order work. Furthermore, -xvelx denotes the spatial x-derivative of -velx in x-direction, etc.. Finally, -tvelx denotes the first time derivative of -velx, etc.. The time derivative and the space derivatives are only calculated if derivatives is included in the initialization part.
By example, the following might be seen after a print of the database
echo -yes
number_of_space_dimensions 2
derivatives
condif_temperature
end_initia
…
dof_label -temp -xtemp -ytemp -ttemp
…
Or, by example, the following might be seen after a print of the database
echo -yes
number_of_space_dimensions 2
condif_temperature
end_initia
…
dof_label -temp
…
Nodal connective of element index. In 1D, element_name is -bar2 (2 noded bar), -bar3, -bar4.
In 2D, element_name is -tria3 (3 noded triangle), -tria6 (6 noded triangle), -quad4 (4 noded quadrilateral), -quad9, -quad16.
In 3D, element_name is -tet4 (4 noded tetrahedral), -tet10 (10 noded tetrahedral), -hex8 (8 noded hexahedral), -hex27, -hex64.
Example with 4-noded quadrilateral
element 0 -quad4 1 2 3 4
node 1 0. 0.
node 2 1. 0.
node 3 0. 1.
node 4 1. 1.
Example with 9-noded quadrilateral
element 0 -quad9 1 2 3 4 5 6 7 8 9
node 1 0.0 0.0
node 2 0.5 0.0
node 3 1.0 0.0
node 4 0.0 0.5
node 5 0.5 0.5
node 6 1.0 0.5
node 7 0.0 1.0
node 8 0.5 1.0
node 9 1.0 1.0
Example with hexahedral
element 0 -hex8 1 2 3 4 5 6 7 8
node 1 0. 0. 0.
node 2 1. 0. 0.
node 3 0. 1. 0.
node 4 1. 1. 0.
node 5 0. 0. 1.
node 6 1. 0. 1.
node 7 0. 1. 1.
node 8 1. 1. 1.
As a special option, user supplied elements can be used by specifying -user. See the section on user supplied subroutines.
Except for the -tria3 and -tet4 element, the nodal location is always in lobatto points. See also: group_integration_points.
Spring elements between two nodes are available by specifying -spring2 for element. The two nodes may have the same position in space for a spring. Spring elements at one node are available by specifying -spring1 for element. The springs are available in 1D, 2D and 3D. You need to specify data like group_spring_stiffness etc.
Contact spring elements between two nodes are available by specifying -contactspring for element. The two nodes may have the same position in space for a spring. The contact springs are available in 1D, 2D and 3D. You need to specify data like group_contactspring_stiffness etc.
Truss elements are available by specifying -truss for element. A truss always has two nodes, which it connects with a elongation stiffness. The trusses are available in 1D, 2D and 3D. You need to specify data like group_truss_area etc.
Beam elements are available by specifying -beam for element. A beam always has two nodes, which it connects with a bending stiffness. The beams are presently only available in 2D. You need to specify data like group_beam_inertia etc.
Combined trussbeam elements are available by specifying -trussbeam for element. This element always has two nodes, which it connects with a elongation stiffness and a bending stiffness. This element is presently only available in 2D. You need to specify data like group_truss_area, group_beam_inertia etc.
After the calculation, this record will be filled with the direction of a beam in space. The index specifies the beam element number.
After the calculation, this record will be filled with the forces and moments of a beam in the local beam space coordinates x, y, z (such that z is perpendicular to the bending plane of the beam). For a beam in 2d, the local beam x, y, z axes equal the global x, y, z.
The element_beam_moment record contains the forces and moments in the first node, and after that the forces and moments in the second node. The index specifies the beam element number.
This data item is specified which element data items should be taken for the element index. Example: elements 0 and 1 get density 1024 while element 2 gets density 1236
element 0 0 1 2
element 1 1 2 3
element 2 2 3 4
…
element_group 0 1
element_group 1 1
element_group 2 2
…
density 1 1024.
density 2 1236.
If no element_group records are specified, all element data should use index is 0.
See also area_element_group.
After the calculation, this record will be filled with the normal and tangential directions in a contactspring element. The index specifies the spring element number.
After the calculation, this record will be filled with the normal and tangential forces in a contactspring element. The index specifies the spring element number.
After the calculation, this record will be filled with the normal force in a spring element. The index specifies the spring element number.
This record will be filled with the direction of the tendons which are placed in element index (all three directions for each tendon). See also tendon.
This record will be filled with the tendons which are placed in element index. See also tendon.
This record will contain after the calculation the strains of the tendons which are placed in element index. See also tendon.
This record will contain after the calculation the stresses of the tendons which are placed in element index. See also tendon.
This record will contain after the calculation the volume of the tendons which are placed in element index. See also tendon.
After the calculation, this record will be filled with the direction of a truss in space. The index specifies the truss element number.
After the calculation, this record will be filled with the normal force in a truss element. The index specifies the truss element number.
Distributed edge source terms (force terms per unit length in 2D or per unit area in 3D). These distributed terms are translated into equivalent nodal force terms on the edges of elements. This option is meant for 2D and 3D calculations. You should specify a force term for each principal unknown which is present in the calculation (see the start of the data part description for a list of principal unknowns). Also the record force_element_edge_geometry should be specified, and optionally the records force_element_edge_factor and force_element_edge_time can be specified.
This data item defines a polynomial in space. This polynomial gives a factor which is used as a multiplication factor for force_element_edge records (with the same index). In this way, you can obtain coordinate dependent forces.
In 1D the polynomial is a0 + a1 x + a2 x2 + … . In 2D the polynomial is a0 + a1 x + a2 y + a3 x2 + a4 xy + a5 y2 + a6 x3 + a7 x2 y + a8 x y2 + a9 y3 + … . In 3D the polynomial is a0 + a1 z + a2 z2 + … .
Selects the area for which the force_element_edge record with the same index should be applied. In stead of specifying node numbers also, by example, -geometry_line 1 can be used in 2D, indicating that the nodes on line 1 get the distributed force.
Attention: if this force_element_edge_geometry option is used INSIDE a FE mesh, then the elements on each side of the geometry will get the force. So you may need to specify only half of the physical force value.
The force_element_edge record with the same index is imposed with the sum of the sine functions; the first sine function has frequency freq_0 and amplitude amp_0, the second sine function has frequency freq_1 and amplitude amp_1, etc.. The sine functions start at time 0. More general behavior in time can be imposed by using force_element_edge_time records. For a specific index only one of force_element_edge_sine and force_element_edge_time can be specified.
The sine loads will be only imposed after start_time.
More general time behaviour can be specified with force_element_edge_time.
This record specifies a diagram which contains the factors with which the force_element_edge record with the same index is applied. Linear interpolation is used to extend the time load values to the intervals between these pairs.
If this record is not specified, and the force_element_edge_sine record is not specified, the force is applied at all times with a factor 1.
If no external forces like force_element_edge_time are specified, the internal element forces become zero at free edges to satisfy equilibrium. This causes, by example, temperature gradients to become zero at free edges in heat problems.
Distributed normal force in the direction of the outward normal at the edge of a geometry. This distributed term is translated into equivalent nodal force terms on the edges of elements. This option is meant for 2D and 3D calculations. Also the record force_element_edge_normal_geometry should be specified, and optionally the record force_element_edge_normal_time can be specified.
This data item defines a polynomial in space. This polynomial gives a factor which is used as a multiplication factor for force_element_edge_normal records (with the same index). In this way, you can obtain coordinate dependent forces.
In 1D the polynomial is a0 + a1 x + a2 x2 + … . In 2D the polynomial is a0 + a1 x + a2 y + a3 x2 + a4 xy + a5 y2 + a6 x3 + a7 x2 y + a8 x y2 + a9 y3 + … . In 3D the polynomial is a0 + a1 z + a2 z2 + … .
Selects the area for which the force_element_edge_normal record with the same index should be applied. By example, -geometry_line 1 can be used in 2D, indicating that the nodes on line 1 get the distributed force.
Attention: if this force_element_edge_normal_geometry option is used INSIDE a FE mesh, then the elements on each side of the geometry will get the force. So the total force will normally become zero since the normals of the elements at the side of the geometry are opposite.
Same as force_element_edge_sine, now for normal edge loads however.
This record specifies a diagram which contains the factors with which the force_element_edge_normal record with the same index is applied. Linear interpolation is used to extend the time load values to the intervals between these pairs.
If this record is not specified, the force is applied at all times with a factor 1.
Distributed water pressure force. This distributed term is translated into equivalent nodal force terms on the edges of elements. The distributed force is automatically calculated as density_water g Δ z where g is the gravitational acceleration, and Δ z is the distance from the phreatic level. In a 3d calculation, the water pressure force acts in the direction dir_x dir_y dir_z. In a 2d calculation, the water pressure force acts in the direction dir_x dir_y (and dir_z should not be specified).
Also the record groundflow_phreaticlevel and force_element_edge_water_geometry should be specified.
Selects the area for which the force_element_edge_water record with the same index should be applied. By example, -geometry_line 1 can be used in 2D, indicating that the nodes on line 1 get the distributed water pressure force.
Attention: if this force_element_edge_water_geometry option is used INSIDE a FE mesh, then the elements on each side of the geometry will get the force. So you may need to specify only half of the physical force value.
This record specifies a diagram which contains the factors with which the force_element_edge_water record with the same index is applied. Linear interpolation is used to extend the time load values to the intervals between these pairs.
If this record is not specified, the force is applied at all times with a factor 1.
Distributed volume source terms (like force, heat generation, etc.) in differential equations. Here force_0 is the source term for the first primary unknown, etc. Use the control_print data item to print dof_label to get the sequential order of the primary unknowns. Specify source terms for each principal unknown which is present in the calculation (see the start of the data part description for a list of principal unknowns). Consider the example with distributed volume force in x-direction for a 2D material:
force_element_volume 0 1. 0.
See also force_element_volume_factor, force_element_volume_geometry, and force_element_volume_time.
This polynomial gives a factor which is used as a multiplication factor for force_element_volume records (with the same index). In this way, you can obtain coordinate dependent forces.
In 1D the polynomial is a0 + a1 x + a2 x2 + … . In 2D the polynomial is a0 + a1 x + a2 y + a3 x2 + a4 xy + a5 y2 + a6 x3 + a7 x2 y + a8 x y2 + a9 y3 + … . In 3D the polynomial is a0 + a1 z + a2 z2 + … .
Restricts the area for which the force_element_volume record with the same index should be applied. In stead of a specifying element numbers also, by example, -geometry_quadrilateral 1 can be used in 2D, indicating that the elements on quadrilateral 1 get the distributed force.
Same as force_element_volume_sine, now for volume loads however.
This record specifies a multi-linear diagram which contains the factors with which the force_element_volume record with the same index is applied.
If this record is not specified, the force is applied at all times with a factor 1.
Gravitational acceleration.
In 1D, only the gravity in x-direction needs to be specified. In 2D, the gravity in x-direction and y-direction needs to be specified. In 3D, the gravity in x-direction, y-direction and z-direction needs to be specified.
See also force_gravity_time.
This record specifies a multi-linear diagram which contains the factors with which the force_gravity record is applied. This allows you to impose the gravity on a structure slowly, which might be needed for path dependent problems.
If this record is not specified, the gravity is applied at all times with a factor 1.
This sets, for either the geometry_line or the geometry_triangle or the geometry_quadrilateral with the same index extra factors which are used for the bounda_unknown and the bounda_force records. The boundary conditions at a node being part of the geometrical entity are multiplied with the interpolation of the factors. For a geometry_line either 2 or 3 factors should be specified; 2 factors define a linear variation where the factors hold at the start and end of the line respectively; 3 factors define a parabolic variation where the factors hold at the start, at the middle and at the end of the line respectively. For a geometry_triangle 3 factors should be specified (a linear variation with factors for the first, second and third corner point respectively). For a geometry_quadrilateral 4 factors should be specified (a linear variation with factors for the first, second, third and fourth corner point respectively). In the example below, node 2 will get temperature 20*1.6 and node 3 will get temperature 20*2.2.
…
number_of_space_dimensions 2
condif_temperature
…
end_initia
node 2 0.2 0
node 3 0.4 0.
…
geometry_line 1 0. 0. 1. 0. 0.01
geometry_bounda_factor 1 1. 4.
bounda_unknown 0 -geometry_line 1 -temp
bounda_time 0 0. 20. 1.e6 20.
…
end_data
This sets, for the geomerical entity with the same index an extra factor which is used for the bounda_unknown and the bounda_force records. The factor gives a sinus variation in x-direction. The size of the factor is sin(a+b*x).
This sets, for the geomerical entity with the same index an extra factor which is used for the bounda_unknown and the bounda_force records. The factor gives a sinus variation in y-direction. The size of the factor is sin(a+b*y).
This sets, for the geomerical entity with the same index an extra factor which is used for the bounda_unknown and the bounda_force records. The factor gives a sinus variation in z-direction. The size of the factor is sin(a+b*z).
This data item defines a brick in space. Other data items can check if nodes are located on this geometry. The coordinate of the center is x_c y_c z_c. The length in respectively x, y and z direction are l_x l_y l_z. All node within a distance tolerance are considered to be part of the brick.
This data item defines a circle in space. Other data items can check if nodes are located on this geometry. The coordinate of the center is x_c y_c. The circle can only be used in 2D. All node within a distance tolerance of the radius are considered to be part of the circle.
This data item defines a circle segment in space. Other data items can check if nodes are located on this geometry. The coordinate of the center is x_c y_c. If side_x is set to a positive value, say +1., then only x-values larger then x_c are considered to be part of the geometry. If side_x is set to a negative value, say -1., then only x-values smaller then x_c are considered to be part of the geometry. If side_x is set to 0 , then all x-values are considered to be part of the geometry. Likewise remarks hold for y-values. All node within a distance tolerance of the radius are considered to be part of the circle segment.
This data item defines a cylinder segment in space. Other data items can check if nodes are located on this geometry. The coordinate of the center point at the bottom is x_0 y_0 z_0. The coordinate of the center point at the top is x_1 y_1 z_1. The cylinder can only be used in 3D. All node within a distance tolerance of the radius are considered to be part of the cylinder.
This data item defines a cylindrical segment in space. Other data items can check if nodes are located on this geometry. The coordinate of the center point at the bottom is x_0 y_0 z_0. The coordinate of the center point at the top is x_1 y_1 z_1. If side_x is set to a positive value, say +1., then only x-values larger then x_c are considered to be part of the geometry. If side_y is set to a negative value, say -1., then only x-values smaller then x_c are considered to be part of the geometry. If side_x is set to 0 , then all x-values are considered to be part of the geometry. Likewise remarks hold for y- and z-values. The cylinder segment can only be used in 3D. All node within a distance tolerance of the radius are considered to be part of the cylinder.
The coordinate of the center is x_c y_c. The equation for the ellipse is:
⎛ ⎜ ⎜ ⎝ |
| ⎞ ⎟ ⎟ ⎠ |
| + | ⎛ ⎜ ⎜ ⎝ |
| ⎞ ⎟ ⎟ ⎠ |
| = 1 |
Other data items can check if nodes are located on this geometry. The ellipse can only be used in 2D. All node within a distance tolerance of the ellipse are considered to be part of the ellipse.
This data item defines a line in space. Other data items can check if nodes are located on this geometry. Coordinates of the end points are denoted by x_0, etc.. In 1D, only the x-coordinates should be specified, etc.. All node within a distance radius are considered to be part of the line.
In the example, a line in 2D space is defined and is used by a convection_geometry record (nodes located on the line will convect heat)
…
geometry_line 2 1. 0. 1. 1. 0.01
…
group_condif_convection_geometry 0 -geometry_line 2
…
This data item defines a point in space. Other data items can check if nodes are located on this geometry. The coordinate of the point is x y z. In 1D, only x should be specified, etc.. All node within a distance radius are considered to be part of the point.
This data item defines a polynomial in space if 2D or 3D. Other data items can check if nodes are located on this geometry. In 2D it is the curve y = a0 + a1 x + a2 x2 + … . In 3D it is the surface z = a0 + a1 x + a2 y + a3 x2 + a4 xy + a5 y2 + a6 x3 + a7 x2 y + a8 x y2 + a9 y3 + … . In 2D x0−x1 defines the domain of x. In 3D x0−x1 defines the domain of x and y0−y1 defines the domain of y. All node with a distance (that is the y-distance in 2D or the z-distance in 3D) not more than tolerance are considered to be part of the polynomial.
This data item defines a quadrilateral in space. Other data items can check if nodes are located on this geometry. The coordinates of the corner points are x_0 y_0 z_0 etc.. In 2D, only x_0, y_0 etc. should be specified etc.. The points of the quadrilateral should be specified in the correct order; the order is clearified in the example below.
All node within a distance tolerance are considered to be part of the quadrilateral (this gives a brick with thickness 2 ∗ tolerance). Internally in TOCHNOG, the quadrilateral is divided into two geometry_triangles, which is only approximately true if the quadrilateral is twisted. Example
…
number_of_space_dimensions 2
…
geometry_quadrilateral 0 0. 0. 1. 0. 0. 1. 1. 1.
…
Notice the order in which the points are to be specified.
This set combines a number of geometrical entities (e.g. geometry_circle, geometry_line, etc.) into a new entity.
As a special option you can refer to nodes with a node_boundary record by specifying geometry_set index node_boundary.
Other data items can check if nodes are located on this geometry.
This data item defines a sphere in space. Other data items can check if nodes are located on this geometry. The coordinate of the center is x_c y_c z_c. All node within a distance tolerance of radius are considered to be part of the sphere.
This data item defines a spherical segment in space. Other data items can check if nodes are located on this geometry. The coordinate of the center is x_c y_c z_c. If side_x is set to a positive value, say +1., then only x-values larger then x_c are considered to be part of the geometry. If side_x is set to a negative value, say -1., then only x-values smaller then x_c are considered to be part of the geometry. If side_x is set to 0 , then all x-values are considered to be part of the geometry. Likewise remarks hold for y- and z-values.
All node within a distance tolerance of radius are considered to be part of the spherical segment.
This data item defines a triangle in space. Other data items can check if nodes are located on this geometry. The coordinates of the corner points are x_0 y_0 z_0 etc.. In 2D the z coordinates should not be specified. All node within a distance tolerance are considered to be part of the triangle (this gives a wedge with thickness 2 ∗ tolerance).
Density of ground water.
Groundwater level.
In a 1D calculation this record should be given x value of the groundwater level. The groundwater is below that x-value.
In a 2D calculation this record should be given sets of x−y which specify the y level of the groundwater at several x locations; In 2D you need to give the x−y sets as follows:
In 3D the phreatic line is specified as follows. Denote the lowest x with x_0, the next higher x with x_1 etc. Denote the lowest y with y_0, the next higher y with y_1 etc. Denote the phreatic level z value for x_i y_j with z_ij. Then give the following:
The sets x,y need to form a regular grid in the x,y plane. In 3d, the number of points in x and y direction resprectively should be set with nx and ny of the groundflow_phreaticlevel_n record.
In nodes above the phreatic level the pressure will be set to zero during the calculation.
As a special option in 2D and 3D, you can specify one value only, which sets a constant phreatic level of that value everywhere.
See groundflow_phreaticlevel.
If method is set to -method1 then the phreatic level gives the following boundary conditions.
The phreatic level is used to automatically give nodes which are located exactly on the phreatic level the boundary condition that the hydraulic pressure head is ρ g z. (In fact in 2D y is used in stead of z).
Nodes above the phreatic level will be given a hydraulic pressure head of zero.
Notice that this option only works correct if the groundwater level is located exactly on nodes of the mesh.
If method is set to -method2 then the phreatic phreatic level gives the following boundary conditions.
The phreatic level is used to automatically give nodes which are located exactly on or above the phreatic level the boundary condition that the hydraulic pressure head is ρ g z. (In fact in 2D y is used in stead of z).
Nodes above the phreatic level (getting also ρ g z) are in fact not important for the groundflow calculation results under the phreatic level.
Notice that this option also works correct if the groundwater phreatic level is not located exactly on nodes of the mesh. However, plots of the hydraulic head are more difficult to understand because nodes above the phreatic level don’t get value 0 but get value ρ g z (but, again, this is not important for the real groundwater results).
If switch is set to -yes, the calculation becomes axi-symmetrical (1D or 2D) for the group index. Each specified x coordinate becomes a radius and y becomes the length (=vertical) direction. (The z-direction is the axi-symmetric direction). Specify only non-negative x coordinates, i.e. define the computational domain in the right half-plane.
Moment of inertia for for a beam. The index specifies the element_group, see element_group.
Memory model for beam; either -updated_without_rotation or -updated. The -updated model is a geometrically nonlinear model which takes large beam rotations into account. The index specifies the element_group, see element_group.
With this option you can use a 2d beam in a 3d calculation. With first_direction and second_direction you can set the plane in which the beam will act; set these to either -x, -y or -z; set first the smaller one (so e.g. -x before -y).
Example of beam acting in x-z plane:
…
number_of_space_dimensions 3
materi_velocity
materi_velocity_integrated
materi_stress
end_initia
…
group_beam_inertia 0 …
group_beam_plane 0 -x -z
…
end_data
Please realize that the beam mechanically still is a 2d beam (it does not model double bending or torsion); it just can act in a 2d plane in 3d space.
Any element output like element_beam_direction and element_beam_moment is defined in the plane of the beam.
If this record is not specified for a beam in 3d, then -x -y is assumed. In 2d, this record cannot be specified (the beam is always in the x-y plane).
The index specifies the element_group, see element_group.
Young’s modulus for a beam. The index specifies the element_group, see element_group.
Absorption coefficient. The index specifies the element_group, see element_group.
Heat capacity. The index specifies the element_group, see element_group.
Heat conductivity. The index specifies the element_group, see element_group.
Density for convection-diffusion equation. The index specifies the element_group, see element_group.
Known flow field. In 1D only beta1 should be specified, etc. The index specifies the element_group, see element_group.
The normal contact force FN is not allowed to become larger then cohesion c in tension (positive values of FN). If it would become larger, then the contact is broken, a gap is assumed and the contact force FN is put to 0. To have really a positive FN for extension of the contact spring, the order of the two nodes as specified in the element record for the contact spring should be correct.
Notice that when you use control_mesh_generate_contactspring to obtain the contact spring elements, you are not sure what the first and what the second node of an element will be, and thus you should not use this group_contactspring_cohesion record. Otherwise, it is not important what you use as first and second node, so that control_mesh_generate_contactspring can be used safely.
If this group_contactspring_cohesion is not specified, infinite cohesion is assumed.
The index specifies the element_group, see element_group.
Direction of a contactspring; that is the direction normal to the surface of the body to which the contact spring is connected. If this record is not specified, the direction is taken to be from the first node of the spring to the second node. The direction it used to determine the elongation of the spring normal to the surface (penetration). The index specifies the element_group, see element_group.
Memory model for contactspring; either -updated_without_rotation or -updated. The -updated model is a geometrically nonlinear model which takes large contactspring rotations into account. The index specifies the element_group, see element_group.
Stiffnesses for contact springs. The force FN in normal direction of the contact spring is determined from FN = kN uN where uN is the normal displacement difference of the two nodes (that is, the displacement of the second node in normal direction minus the displacement of the first node in normal direction). The first tangential force FT1 of the contact spring is determined from FT1 = kT uT1 where uT1 is the tangential displacement difference of the two nodes in the first tangential direction; the same is done for the second tangential force. The total tangential force √ FT1 + FT2 cannot exceed f FN with f friction coefficient; then frictional slip occurs and the total tangential force is set to f FN To model continuing stick between two bodies just put the friction coefficient f very high.
In 1D the parameters kT and f will not be used (but should be specified as dummies nevertheless).
The index specifies the element_group, see element_group.
See also group_contactspring_friction and group_contactspring_friction_automatic.
With this record you can specify a fixed friction coefficient for contact springs.
The index specifies the element_group, see element_group.
See also group_contactspring_stiffness and group_contactspring_friction_automatic.
If switch is set to -yes, the friction coefficient for contact springs will be determined from the plasticity law angle of neighbouring elements. For a neighbouring group_materi_plasti_mohrcoul the friction coefficient f will be set to f = (2./3.) tan φ with φ the friction angle in the mohr-coulomb law of the neighbouring elements. For a neighbouring group_materi_plasti_diprisco the friction coefficient f will be set to a value depending on the parameter γ of that law.
If no neigbouring elements with appropriate material law are found, then f will be set to 0.2.
The index specifies the element_group, see element_group.
Capacity for ground water flow. The index specifies the element_group, see element_group.
If switch is set to -yes, then the material divergence part ∂ v/∂ xi in the groundflow storage equation is used in the analysis. If switch is set to -no it is not used. Default switch is -yes. The index specifies the element_group, see element_group.
Permeability coefficient in ground water flow, in each space direction. In 1D you only should specify pex, etc. The index specifies the element_group, see element_group.
Here method sets the integration method for bars, quads en hexa elements. You can either set method to -gauss or -lobatto.
If this record is not set, the default method as described in group_integration_points is chosen.
Here type sets the number of integration points in an element. It should be set to -normal, -minimal or to -maximal.
For -tria3 elements and -tet4 elements, the integration point will be located in the middle with -minimal integration, or the integration points are located in the nodes with -maximal integration.
For -tria6 elements and -tet10 elements, the integration point will be located in the in the nodes, irrespective of this group_integration_points record.
For other elements, if -minimal is used then the number of integration points in a direction is set equal to the number of nodes in the direction minus 1, and gauss integration is used. If for the other elements -maximal is used then the number of integration points in a direction is set equal to the number of nodes in the direction, and lobatto integration is used.
Default -minimal is used for -bar2, -tria3 and -tet4 elements; it is default -maximal otherwise.
If type is set to -normal, the default integration will be used.
For third or higher order elements (-bar4, -quad16, etc.) you always need to use -minimal if materi_velocity is initialized.
The index specifies the element_group, see element_group.
Parameters for the Mazars damage law. The index specifies the element_group, see element_group.
Material damping coefficient. The index specifies the element_group, see element_group.
Density for material flow equation. This may be overruled by specifying the density as an unknown in the initialization part. The index specifies the element_group, see element_group.
Density for material flow equation when a calculation is performed in combination with groundflow. In case an element is above the phreatic level, as specified by groundflow_phreaticlevel_bounda, the density_dry will be used. In case an element is below the phreatic level, the density_wet will be used.
In case the groundflow_phreaticlevel_bounda is not specified, the density_wet will be used.
The index specifies the element_group, see element_group.
Elastic data G for the modified CamClay model. The index specifies the element_group, see element_group.
Elastic data ν for the modified CamClay model. This option is alternative to the group_materi_elasti_camclay_g option (so, only one of both can be defined). With this option the poisson ratio ν is assumed constant, and is used as follows:
G = |
| K ( 1 − 2 ν ) / ( 1 + ν ) |
The index specifies the element_group, see element_group.
Compressibility for materials. The index specifies the element_group, see element_group.
Elastic data B−0, R, λ for the Lade model. The index specifies the element_group, see element_group.
Poisson ratio for solid. The index specifies the element_group, see element_group.
Specifies the unique direction (dir_0 dir_1 dir_2) and the elastic moduli in the transverse isotropic model. The index specifies the element_group, see element_group.
See group_materi_elasti_volumetric_young_values
See group_materi_elasti_volumetric_young_values
This is a special record to model the volumetric stress part of a nonlinear material, given the experimental results of a volumetric compression test (compression in one direction, fixed size in other two directions).
The table є_0 σ_0 є_1 σ1 … specifies the strain-stress results for the volumetric compression test. Together with the poisson ratio as specified in group_materi_elasti_volumetric_poisson, an isotropic law in a nonlinear Young’s modulus and a constant poisson ratio is fitted to this experiment. The Young modulues in fact is taken as the polynomial expansion E0 + E1 є + E2 є2 + … + En−1 єn−1 where n denotes the order of the polynomial expansion (as given in group_materi_elasti_volumetric_young_order).
The poisson ratio should be taken very high, say 0.4999999 or so, to ensure that the resulting law only models volumetric stresses. Then afterwards a normal young-poisson isotropic law (group_materi_elasti_young and group_materi_elasti_poisson) can be added to get an extra deviatoric part.
Young’s modulus for solid material. The index specifies the element_group, see element_group.
Polynomial parameters for strain dependent Young’s modulus for solid material. See the theory part. The index specifies the element_group, see element_group.
Power law Young’s modulus for solid material. See the theory part. The index specifies the element_group, see element_group.
Linear expansion coefficient. The index specifies the element_group, see element_group.
Volume expansion coefficient. The index specifies the element_group, see element_group.
If the compression strain in an element exceeds threshold, the element is considered to be fail. The element will be slowly deleted. It is totally deleted if the delete_time has passed.
The index specifies the element_group, see element_group.
If the damage in an element exceeds threshold, the element is considered to be fail. The element will be slowly deleted. It is totally deleted if the delete_time has passed.
The index specifies the element_group, see element_group.
If the plastic parameter kappa in an element exceeds threshold, the element is considered to be fail. The element will be slowly deleted. It is totally deleted if the delete_time has passed.
The index specifies the element_group, see element_group.
If the tensile strain in an element exceeds threshold, the element is considered to be fail. The element will be slowly deleted. It is totally deleted if the delete_time has passed.
The index specifies the element_group, see element_group.
If the void fraction in an element exceeds threshold, the element is considered to be fail. The element will be slowly deleted. It is totally deleted if the delete_time has passed.
The index specifies the element_group, see element_group.
Parameters for Besseling Hyper elastic rubber model. The index specifies the element_group, see element_group.
Parameters for Blatz-Ko model. The index specifies the element_group, see element_group.
Parameters for Mooney-rivlin hyper elastic rubber model. The index specifies the element_group, see element_group.
Parameter for Neo-Hookean hyper elastic rubber model. The index specifies the element_group, see element_group.
Parameters for reduced polynomial hyper elastic rubber model. The index specifies the element_group, see element_group.
Parameter for the linear volumetric hyperelasticity model. The index specifies the element_group, see element_group.
Parameter for the murnaghan volumetric hyperelasticity model. The index specifies the element_group, see element_group.
Parameter for the ogden volumetric hyperelasticity model. The index specifies the element_group, see element_group.
Parameters for the polynomial volumetric hyperelasticity model. The index specifies the element_group, see element_group.
Parameter for the simo-taylor volumetric hyperelasticity model. The index specifies the element_group, see element_group.
In total n parallel maxwell chains are defined with stiffness E_0, relaxation time t_0, etc..
The number n should equal materi_maxwell_stress in the input initialization part. The index specifies the element_group, see element_group.
If switch is set to -yes the zz stress becomes zero in 2D and the yy and zz stress become zero in 1D (in combination with axi-symmetry in 1D, only the yy stress becomes zero since zz is the axi-symmetric direction). If group_materi_membrane is not used the plane strain conditions are used. Always the z-thickness is 1. in 3D, and the y, and z-thickness are 1. in 2D; see however also volume_factor.
The group_materi_membrane option cannot be used in combination with group_materi_elasti_compressibility, group_materi_hyperelasticity and group_materi_viscosity.
The index specifies the element_group, see element_group.
Either memory_type should be set to -updated, -updated_without_rotation, -total, -total_piola or -total_linear. See the theoretical part for some explanation.
For a simple linear total Lagrange solid the input file may look like
…
materi_velocity
materi_displacement
materi_strain_total
materi_stress
end_initia
…
group_materi_memory 0 -total_linear
group_materi_elasti_young 0 …
…
end_data
For a large deformation total Lagrange solid with a straightforward decomposition of the deformation tensor into a rotation tensor and a stretch tensor the input file may look like
…
materi_velocity
materi_displacement
materi_strain_total
materi_stress
end_initia
…
group_materi_memory 0 -total
group_materi_elasti_young 0 …
…
end_data
For a large deformation total Lagrange solid with Piola-Kirchoff stresses and Green-Lagrange strains the input file may look like
…
materi_velocity
materi_displacement
materi_strain_total
materi_stress
end_initia
…
group_materi_memory 0 -total_piola
group_materi_elasti_young 0 …
…
end_data
For an updated Lagrange solid the input file may look like
…
materi_velocity
materi_strain_total
materi_stress
end_initia
…
node 1 …
node 2 …
…
(use -updated_without_rotation to neglect rigid body rotation)
group_materi_memory 0 -updated
group_materi_elasti_young 0 …
…
end_data
For a fluid the input file may look like
…
materi_velocity
materi_stress
end_initia
…
(use eulerian mesh)
options_mesh -fixed_in_space
…
node 1 …
node 2 …
…
group_materi_memory 0 -updated_without_rotation
group_materi_viscosity 0 …
group_materi_elasti_compressibility 0 …
…
end_data
The index specifies the element_group, see element_group.
With this record you can model frictional slip of soil material and alike granular materials on other materials like concrete, steel, etc.
This is done by reducing the friction angle phi and diletance angle phiflow and cohesion c of the granular material with a factor (2./3.). The reduction is done for records group_materi_plasti_mohrcoul and group_materi_plasti_druckprag, if specified.
The index specifies the element_group of the granular material, see element_group.
With group_0 , group_1 etc. you can specify the groups of the concrete material, steel material etc. The reduction of the friction angle and diletance angle will only be applied to the granular elements (of element_group) which are a direct neighbour of an element which has one of the groups group_0 , group_1 etc.
Please realise that this method only works well if the finite elements are not too large.
See also group_materi_plasti_boundary_factor.
With this record you can specify a factor other then the default 2./3. used by the group_materi_plasti_boundary record.
The index specifies the element_group of the granular material, see element_group.
Plastic data M, κ and λ for the modified CamClay model. The index specifies the element_group, see element_group.
Plastic data for the modified cap plasticity model. The єvp pb … represents a table with єvp versus pb values; at least two sets of values need to be specified.
The index specifies the element_group, see element_group.
Yield data for compression plasticity. The index specifies the element_group, see element_group. Condition: materi_strain_plasti should be initialized.
Yield data for di Prisco plasticity. The index specifies the element_group, see element_group. Condition: materi_strain_plasti should be initialized.
Both yield data and flow data (indicated by the word flow) for Drucker-Prager plasticity. Choose phi and phiflow in between 0 and π/2. The index specifies the element_group, see element_group. Condition: materi_strain_plasti should be initialized.
The normal group_materi_plasti_druckprag does only limit shear forces, and doesn’t care about any tension stresses. That normally isn’t a problem since in geotechnical calculations the stress are compressive anyway.
With this group_materi_plasti_druckprag_tensioncutoff you can cutoff, however, any tensile stresses beyond the apex. Activate this by setting switch to -yes.
Activating this cutoff option may lead to a more troublesome convergence behavior.
Yield data (also used as flow data) for Gurson plasticity. The index specifies the element_group, see element_group.
Yield data (also used as flow data) for HLC plasticity. The index specifies the element_group, see element_group.
This factor specifies how much of the plastic energy loss is transformed into heat (this only makes sense if condif_temperature is initialized). The factor should be between 0 and 1. The index specifies the element_group, see element_group.
Cohesion parameter in hypoplastic law; see the theory section. The index specifies the element_group, see element_group.
Intergranular strain parameters in hypoplastic law; see the theory section. The index specifies the element_group, see element_group.
If switch is set to -yes the initial void ratio is corrected for pressure dependency; see the theory section. The index specifies the element_group, see element_group.
Von-Wolffersdorf parameters in hypoplastic law; see the theory section. Here ϕ is in degrees. The index specifies the element_group, see element_group.
Attention: you need to initialize 4 history variables for application of this hypoplasticity model. The first history variable contains the void ratio, and should be initialized by initially specifying node_dof records. The second history variable will be filled with the time step size of an internally used sub-stepping algorithm for hypoplasticity; this is meant for postprocessing only. The third history variable will be filled with the mobilized friction angle; this is meant for postprocessing only. The fourth history variable will be filled with the a measure of the effective stiffness following from the hypoplasticity law ( √ Mijkl Mijkl ). this is meant for postprocessing only.
This record specifies the size of the rate of the kinematic hardening matrix ρij. The index specifies the element_group, see element_group.
Both yield data and flow data (indicated by the word flow) for Matsuoka-Nakai plasticity. Choose phi and phiflow in between 0 and π/2. The index specifies the element_group, see element_group.
Both yield data and flow data (indicated by the word flow) for Mohr-Coulomb plasticity. Choose phi and phiflow in between 0 and π/2. The index specifies the element_group, see element_group.
Both yield data and flow data (indicated by the word flow) for Mohr-Coulomb softening plasticity. See the theoretical part. Choose each of the angles phi_0 phiflow_0 phi_1 phiflow_1 in between 0 and π/2. The index specifies the element_group, see element_group.
The normal group_materi_plasti_mohrcoul does only limit shear forces, and doesn’t care about any tension stresses. That normally isn’t a problem since in geotechnical calculations the stress are compressive anyway.
With this group_materi_plasti_mohrcoul_tensioncutoff you can cutoff, however, any tensile stresses beyond the apex. Activate this by setting switch to -yes.
Activating this cutoff option may lead to a more troublesome convergence behavior.
Yield data for tension plasticity. The index specifies the element_group, see element_group. Condition: materi_strain_plasti should be initialized.
If switch is set to -yes the user supplied routine for plasticity is called.
See also the file user.cc in the distribution.
The index specifies the element_group, see element_group.
This record specifies if the visco-plasticity yielding, for the viscoplastic law with the same index, is used for all values of the yield function (both positive and negative) or only for positive values of the yield function.
If switch is set to -yes then viscoplastic yielding is used for all values of the yield function f. If switch is set to -no then viscoplastic yielding is nonly used for positive values of the yield function f.
If this group_materi_plasti_visco_always record is not specified, the switch is assumed to be -no.
The index specifies the element_group, see element_group.
This record specifies visco-plasticity data for the exponential model. It should be used in combination with a plasticity model.
The index specifies the element_group, see element_group.
This record specifies visco-plasticity data for the power model. It should be used in combination with a plasticity model.
The index specifies the element_group, see element_group.
Yield data for Von-Mises plasticity.
The index specifies the element_group, see element_group. Condition: materi_strain_plasti should be initialized.
Data for Von-Mises Nadai hardening. The σy0 of the group_materi_plasti_vonmises record is taken as σy0 in the nadai law.
The index specifies the element_group, see element_group. Condition: materi_plasti_kappa should be initialized.
If switch is set to -yes, then stokes flow is used. The index specifies the element_group, see element_group.
Viscosity for Newtonian flow. The index specifies the element_group, see element_group.
If switch is set to -yes, the user supplied routine for the viscosity for Newtonian flow is used. The index specifies the element_group, see element_group.
Parameters for the non-Newtonian bingham viscosity law. The index specifies the element_group, see element_group.
Parameters for the non-Newtonian exponential viscosity law. The index specifies the element_group, see element_group.
If switch is set to -yes, then viscous dissipation will be used as a heat generation source. See also the theoretical part at the start of this manual. The index specifies the element_group, see element_group.
Direction of a spring. If this direction is specified, it used to determine the elongation of the spring in this direction. If this record is not specified, the direction is taken to be from the first node of the spring to the second node. The index specifies the element_group, see element_group.
Maximum force in a spring. The index specifies the element_group, see element_group.
Stiffness of a spring. It is multiplied with the elongation of the spring to calculate the spring force. The index specifies the element_group, see element_group.
With this option you can set the time of birth of the elements (in group index) and the time of death of the elements.
Out of the range birth - death the elements of the group will not be used in the calculation (the starting birth limit itself is not included in the range, whereas the ending death limit itself is included).
Cross-sectional area for a truss. The index specifies the element_group, see element_group.
Density for a truss. The index specifies the element_group, see element_group.
Memory model for truss; either -updated_without_rotation or -updated. The -updated model is a geometrically nonlinear model which takes large truss rotations into account. The index specifies the element_group, see element_group.
The truss will act as a rope if switch is set to -yes. This means that negative forces will not be allowed (the force remains zero in compression). The index specifies the element_group, see element_group.
Yield stress for truss. The actual stress cannot exceed the yield force. The index specifies the element_group, see element_group.
Young’s modulus for a truss. The truss force F is F = E A Δ u, where Δ u is the elongation of the truss. The index specifies the element_group, see element_group.
See also group_truss_young and group_truss_area.
With this record a differential equation is specified for the element group index. Allowed type names are -condif, -groundflow, -materi, -wave, -spring, -truss, -beam and -trussbeam. Also -empty is allowed; it indicates that the element is empty.
See also element_group.
Set switch to -yes if you want to use a umat.c routine. The index specifies the element_group, see element_group.
See also the user supplied subroutines section and group_user_data.
Data values which will become available for user supplied subroutines. The index specifies the element_group, see element_group.
See also: the user supplied subroutines section and group_user_umat.
In 1D or 2D you can specify the cross-section and thickness respectively, for elements of the element group index (see element_group).
See also volume_factor.
Speed of sound in wave equation. The index specifies the element_group, see element_group.
Number of iterations for inverse modeling of parameters. In each iteration the total time history as defined by the control_timestep records will be applied. Moreover, it will be applied for the current estimate of the parameters and once for each parameter varied a bit (see inverse_variation); in this way, the sensitivity of the target data with respect to the parameters is determined. At the end of the iteration, these sensitivities are used to determine new estimates for the parameters. In case of problems consider using inverse_parameter_step. See also: inverse_target.
This record will be filled with the number of inverse iteration. This comes handy in printing (see control_print).
Selects a parameter which is to be determined by inverse modeling. Condition: the parameter value should not be 0. See also: inverse_target.
Specifies the lower and higher allowed value for the inverse_parameter (with the same index). Default no limits are used.
The inverse parameter may be adjusted too much in each inverse iteration, such that the inverse process becomes unstable. This record allows you to set a maximum to the adjustment of the inverse_parameter (with the same index). Specifying small values (near 0) for size gives a stable but slow inverse process. Default, size is 1.0e10.
Specifies the factor by which the inverse_parameter (same index) is varied a bit to determine the sensitivity of the targets with respect to the parameter. A relative variation is used: (varied factor = (1+variation)*factor. On the one hand, it is of importance to use a variation small enough to get a good approximation of the sensitivity of the targets with respect to the parameter. On the other hand the variation should not be such small that we run into problems with the computer accuracy. Default, variation is 1. 10−4. See also inverse_target.
This record, in combination with the inverse_target_data record with the same index, allows you to specify target data (e.g. experimental data to determine model parameters or required data for optimization) to be used in the inverse modeling. Parameters will be determined by least squares minimization, i.e. the sum
Σ ( penalty ( actual_value − target_value ) ) 2 |
is minimized (penalty and target_value are the penalty factor and target value, see inverse_target_data). In the example below, the temperature (2.33) at node 3 and the temperature (80.2) at post point 10 were measured and are used for inverse modeling of the conductivity. Both experimental results are imposed with a penalty factor 100 in the inverse modeling. In total 20 iterations are used to estimate the conductivity. The initial estimate for the conductivity needs to be specified via the group_condif_conductivity record; while iterating this record will be updated with new estimates.
…
condif_temperature
end_initia
…
inverse_target 1 -node_dof 3 -temp
inverse_target_data 1 2.33 100.
inverse_target 2 -post_point_dof 10 -temp
inverse_target_data 2 80.2 100.
inverse_parameter 0 -group_condif_conductivity 0 0
inverse_iterations 0 20
…
end_data
Specifies the target_value (required value) and penalty (penalty factor in least squares minimization) for the inverse_target record with the same index. A special format index lower_value higher_value penalty is available which allows for putting limits on targets; if the actual value is in between the lower_value and higher_value it considered to be ok; if the actual value is lower than lower_value than the lower value becomes the target value and is imposed with the penalty factor; likewise for higher_value.
With this record you can specify at the end of which control_timestep record the inverse_target record (with the same index) should be evaluated. This is useful if transient information is needed for the inverse modeling. Default, the inverse_target is evaluated after the last control_timestep record.
Minimal value for artificial diffusion. Above this minimal value, an element is considered to be filled with material. Below this minimal value, an element is considered to be empty.
See also: the initialization of materi_diffusion in the initialization part.
Coordinates of node index. In 1D, only coord_0 should be specified, etc..
You are not allowed to put free nodes (not attached to any element) in your model. These free nodes will be removed automatically.
The index corresponds to a node. The node is assumed to be located on the boundary of the domain if this record is specified. You can set switch is set to -yes.
For the options control_mesh_remesh, control_new_mesh and the contact algorithm it is necessary to give all the nodes on the boundary.
These node_boundary records can also be referred to by geometry_set records.
It is not allowed to give all nodes of one element node_boundary records.
This record adds a discrete damper to node index in x, y and z direction respectively. In 1D only damping_x needs to be specified, etc. The damper will lead to a nodal force of the size damping_x * v_x where v_x is the velocity in x direction. The same holds for the y and z direction.
dof_0 dof_1 … are the degrees of freedom (unknowns) at the node with number index. The total number and type of the unknowns depends on the initialization part. Each node has the same unknowns.
Unknowns like pressure, temperature, etc. are primary unknowns. The other unknowns, space derivatives and the time derivative, are not primary unknowns. In the example below, -temp is 1., -xtemp is 0.2 and -ttemp is 0.1 in node 6
…
number_of_space_dimensions 1
derivatives
condif_temperature
end_initia
…
node_dof 6 1.0 0.2 0.1
…
Default all values in the node_dof records are set zero at the start of the calculation. See also: dof_label and post_point.
See post_calcul.
This record will be filled with dof_0 dof_1 …, which are the degrees of freedom (unknowns) as specified at the start of the calculation. at the node with number index.
If the mesh has been refined, these start values hold for the refined mesh.
See also node_dof and node_start_refined.
Eigenvector for node index for the principal unknowns. First the results for the unknowns for the first eigen mode are given. Then the results for the unknowns for the second eigen mode are given. Etc.
Only the principal unknowns of these unknowns have been actually solved in the eigen problem.
See also control_eigen and the principal unknowns listed in the initialization part.
This record adds a discrete mass to node index in x, y and z direction. In 1D only the x-mass needs to be specified, etc. The mass will lead to a nodal force of the size mass_x * v• where v•_x is the acceleration, and to a gravity force if force_gravity is specified. The same holds for the y and z direction.
This record will contain after the calculations
Fexternal − ( Fstatic + Finertia + Fdamping ) |
Here Fexternal are the external forces resulting from bounda_force records, Fstatic are the internal static forces (elastic forces, ..), Finertia are the internal inertia forces (mass, capacity, ..) and Fdamping are the internal damping forces.
For the temperature equation, this will give the heat flow normal to the outer surface (the heat flux to the environment) at prescribed temperatures. For velocity unknowns, this will give the force vector at prescribed displacements. For the pressure in the ground flow equation, this will give the ground flow to the environment at prescribed pressures.
After the calculation, this record will contain coordinates of node index as specified at the start of the calculation. If the mesh has been refined this record with contain the start coordinates for the refined mesh. In 1D, only coord_0 is filled, etc..
This record adds a discrete stiffness to node index in x, y and z direction respectively. In 1D only stiffness_x needs to be specified, etc. The stiffness will lead to a nodal force of the size stiffness_x * u_x where u_x is the displacement in x direction. The same holds for the y and z direction. Condition: also materi_velocity_integrated or materi_displacement should be initialized.
If switch is set to -yes, the convection of a material with respect to the mesh is allowed. If switch is set to -no, the convection of a material with respect to the mesh is not allowed. This is done for all timesteps.
Default switch is set to -yes. See also control_options_convection.
If switch is set to -no the evaluation of elements in the element loop will not be done. This is meant for testing purposes only.
If switch is set to -yes, inertia terms are included (material mass, heat capacity, ..). If switch is set to -no, inertia is not included. This is done for all timestep records.
Default switch is set to -yes. See also control_options_inertia.
If switch is set to -yes then the element matrices are stored per group (and not per element). This saves memory. It is only possible to use this, however, if the element matrices in a group are really the same (typically in a linear calculation in a regular mesh with elements of the same size and the same shape per group).
Tochnog normally allocates much (and enough) memory to store element matrices. Especially in 3D calculations with high order elements, the allocated memory size may be eccesive large. Then you can set matrix_length with this options_matrix_length record to a low value, which will be used for memory allocation. If this value matrix_length would be too small to store the element matrices, you will be automatically warned and asked to make the value higher.
If specifier_x is set to -fixed_in_space, the nodal points of the mesh remain fixed in space in x-direction. If a specifier_x is set to -follow_material, the nodal points of the mesh will follow material displacements in x-direction. The same holds for the other directions. In 1D, you only need to give specifier_x, etc.
Default each specifier is set to -follow_material.
This record options_mesh only is used if materi_velocity is initialised. If materi_displacement is initialized however, each specifier is automatically set to -fixed_in_space.
By specifying this record in combination with a viscoplastic model , like group_materi_plasti_visco_power, a nonlocal yield rule fn will be used in the viscoplastic law. The nonlocal yield rule needs to be initialized as unknown by the materi_plasti_f_nonlocal record in the initialization part. The nonlocal yield rule fn in a point is determined by an averaging of the local yield rule f in neighbouring points and using gauss weighting functions for this (i.e. the larger the distance the less the neighbouring point contributes to the nonlocal yield rule). The averaging is done over a region with radius nonlocal_radius.
In this way, you can prevent unlimited localization and so mesh dependency, in calculations with softening plasticity.
With this record you can set the number of CPUs you want to use (nproc). If your TOCHNOG implementation does not allow for more processors, this record is ignored. In fact, not the number of processors but the number of threads is set (that is, if you use 2 threads while your system only supports 1 processor than those threads are split over that single processor).
You can also set an environment symbol TOCHNOG_OPTIONS_PROCESSORS to nproc. In this way, you do not need to set the number of processors in each input file separately.
Error messages may become confusing when you use more than one processor.
Default nproc is 1.
Relaxation parameters for adjusting unknowns in iterations. This can stabilize the calculation. By example, a relaxation parameter of 0.1 means that the corresponding unknown is now completely updated with the iterative change, but only 10 percent of the change is actually applied in a iteration.
If enough iterations are used, the relaxation parameters with not influence the final solution.
You should specify a relaxation parameter term for each principal unknown which is present in the calculation (see the start of the data part description for a list of principal unknowns; these are velocities, temperature, etc.).
The relaxation is used for all timesteps. See also control_options_relaxation.
While determining the residue in the differential equations -res for the node_dof records, the contribution for each primary unknown equation can be multiplied with a separate factor. Here factor_0 is the factor for the first principal unknown, factor_1 is the factor for the second principal unknown, etc. A factor should be specified for each principal unknown.
With these factors you can put special importance on the equation for one (or several) principal unknowns. If this record is not specified, all factors are taken to be 1.
If switch is set to -yes, any plasticity data in the input file will be ignored. This is done for all timesteps.
This option is convenient for testing your input file just linear, without the need to outcomment each and every part with plasticity data. See also control_options_skip_plasticity.
You can set here the solver type to one of diagonal, matrix_iterative_bicg, matrix_iterative_petsc or materi_superlu. The solver set here holds for the entire calculation (as opposed to the control_options_solver which only holds for the corresponding time steps). In fact, each control_options_solver will be overwritten by a specified options_solver.
You can also set an environment symbol TOCHNOG_OPTIONS_SOLVER to solver, by example to -matrix_superlu. In this way, you do not need to set the solver type in each input file separately.
Because of finite discretisation sometimes unrealistic results may be obtained (wiggles, etc.). If switch is set to -static, results are stabilized with a scheme which assumes that you are looking for the static (time independent) solution. If switch is set to -dynamic, results are stabilized with a scheme which assumes that you are looking for the dynamic (transient) solution. If switch is set to -no, no stabilization is used. Default switch is set to -static.
Warning: this default -static scheme may give bad results for transients calculations.
This records activates calculation post results. Here unknown can be one of the matrices -materi_stress, -materi_strain_elasti, -materi_strain_plasti, -materi_strain_total or unknown can be one of the vectors -materi_velocity, -materi_displacement, or unknown can be one of the scalars -condif_temperature, -groundflow_pressure.
The results of these calculations are stored for each node_dof record in a node_dof_calcul record, and are stored for each post_point_dof record in a post_point_dof_calcul record, and are stored for each post_line_dof record in a post_line_dof_calcul record, and are stored for each post_quadrilateral_dof record in a post_quadrilateral_dof_calcul record.
We denote a matrix unknown with Aij and denote a vector unknown with Ai, and denote a scalar unknown with a.
If operat is -prival then three principal values of a matrix Aij are calculated. Each principal value contains the size of the principal vector. The principal values are ordered (the first value is the largest one, and the last value is the smallest one).
If operat is -privec then three principal vectors of a matrix Aij are calculated. Each principal vector contains the x, y and z component of the principal vector. The same ordering as used for -prival is used here also.
If operat is -average then 1/3 ( A11 + A22 + A33 ) is calculated for a matrix or 1/3 ( A1 + A2 + A3 ) is calculated for a vector.
If operat is -absol then the absolute value of a scalar a is calculated.
If operat is -positive then the average of the positive principal values for a matrix is calculated. If materi_strain_plasti is taken for the matrix Aij, then this operator typically can be used as a measure for the amount of tensile failure (cracking).
If operat is -negative then the average of the negative principal values for a matrix is calculated. If materi_strain_plasti is taken for the matrix Aij, then this operator typically can be used as a measure for the amount of compression failure (crunching).
If operat is -sizetot then √ 0.5 Aij Aij is calculated for a matrix or √ 0.5 Ai Ai is calculated for a vector. This measures the size of a matrix or the size of a vector.
If operat is -sizedev then √ 0.5 Bij Bij is calculated where Bij is the deviatoric part of a matrix Aij: Bij = Aij − δij A11+A22+A33/3 where δij is 1 if i=j and is 0 otherwise. This measures the size of the deviatoric part of the matrix.
Specially for geotechnics you can set operat to -phimob in case unknown is -materi_stress. Then the ’mobilised friction angle’ is calculated in degrees. It is default calculated without taking cohesion into account.
Specially for geotechnics you can set operat to -total in case unknown is -materi_stress. Then the total stress is calculated from the effective stress and the groundflow total pressure.
Specially for geotechnics you can set operat to -static in case unknown is -groundflow_pressure. Then the static pressure is calculated.
Specially for geotechnics you can set operat to -dynamic in case unknown is -groundflow_pressure. Then the dynamic pressure is calculated.
Specially for geotechnics you can set operat to -total in case unknown is -groundflow_pressure. Then the total pressure is calculated.
The next piece of input file
…
materi_stress
materi_strain_plasti
end_initia
…
post_calcul -materi_stress -sizedev -materi_strain_plasti -sizetot
…
control_timestep 1 …
control_print 1 -node_dof_calcul
will print records like
node_dof_calcul index 0.2 1.1e-4
Here the 0.2 is the equivalent Von Mises stress and 1.1e-4 measures the plastic strain matrix.
By means of this record, you can specify a data record for which the error in its value needs to be estimated.
The error is estimated as follows. The value for the data item will be remembered just before each mesh refinement (with control_mesh_refine_locally or control_mesh_refine_globally). The last 2 stored values and the current value are used create an estimated value . The error percentage is defined as:
100 |
|
The percentage will be placed in the post_error_result, with the same index.
A typical example looks like:
…
post_error_item 1 -post_point_dof 1 -velx
…
control_mesh_refine_globally 10 …
…
timesteps 20 …
…
control_repeat_until_item 30 10 -value -post_error_result 1 0
control_repeat_until_tolerance 30 5.
…
This asks for the estimation of the error in the x-velocity at a point. It is used to determine automatically the number of refinements, by requiring that the error should become less than 5 percent.
A final remark. The values used for the error estimation will not be stored if the mesh refinement takes place at the start of the calculation, since that mesh contains normally not useful information.
See post_error_item.
Here you can specify results that should be integrated over time. The integrated results will be placed in the post_integrate_result record with the same index.
An example looks like:
…
groundflow_pressure
groundflow_velocity
end_initia
…
post_node 1 -average -geometry_line 4
…
post_integrate 3 -post_node_result 1 -gvely
…
…
Here the post_node record first takes care that the average groundflow y-velocity at nodes on a line are determined, among other unknowns. The post_integrate record integrates that average groundflow y-velocity over time. In this way the total groundflow debit volume over a line is registered.
With this post_global you can ask for global information to be determined. You can set each of the names name_0, name_1, etc. to
User control_print to print each of -global_elements, etc.
See post_integrate.
This record specifies a line in space for which the average or sum of the unknown values will be calculated. The values are placed in a record post_line_dof with the same index. Internally in TOCHNOG, post_point records are used to evaluate the unknowns on the line. In 1D only x_0 and x_1 should be specified, etc.. In the example below, the average of the x-velocity between the points (3,1) and (3,7) will be printed
…
number_of_space_dimensions 2
materi_velocity
…
end_data
…
post_line 1 3. 1. 3. 7.
…
print_filter 0 -post_line_dof 1 -velx
…
control_timestep 1 1. 100.
control_print 1 -post_line_dof
The coordinates are defined in the initial mesh. See also: post_line_n, post_line_operat and post_line_moment.
If operat is set to -average then the average is calculated for the post_line record with the same index. If operat is set to -sum then the sum is calculated for the post_line record with the same index. If this post_line_operat is not specified, then operat is set to -average.
Average unknown values at a selected line. See post_line.
See post_calcul.
If switch is set to -yes, then the moment of the unknowns with respect to the middle of the post_line (same index) is calculated (instead of the average value of the unknowns). This moment is the integral of the unknown value multiplied with the distance to the middle of the line multiplied by the area contribution; the first point in the post_line has negative distance with respect to the line middle and the second point in the post_line has positive distance with respect to the line middle.
Use n post_point records to evaluate the unknowns along the line. Default n is 5. See post_line.
If operat is set to -sum, results for the nodal data_item are summed. If operat is set to -average, results for the nodal data_item are averaged. For example, you can take for data_item the -node_rhside data item. In this way you can sum the external nodal forces on a part of the domain.
If operat is set to -moment and data_item equals node_rhside, the moments Mx, My, Mz are determined. These are moment with respect to the three model axes, each one in the positive direction of its axis.
This operation is done for nodes which are placed on the geometrical entity geometry_entity geometry_entity_index. Instead of a geometrical entity you can also use -all to tell that all nodes should be used. The result is put into the post_node_result record (with the same index).
See post_node.
After the calculations, this record will be filled with the absolute maxima for the node_rhside values for those unknowns which are fixed (so the maxima of external forces, fluxes, etc.).
After the calculations, this record will be filled with the absolute maxima for the node_rhside values for those unknowns which are free. In equilibrium these should become 0. Because of a limited number of equilibrium iterations however, the values may be larger then 0.
After the calculations, this record will be filled with the ratio of the the internal forces (out-of-balance forces) and the external forces. The internal forces are taken from the post_node_rhside_free record. The external forces are taken from the post_node_rhside_fixed record. The maximum ratio for the unknowns is used.
As an expeption, if the external forces are very low (below 1.e-6), the ratio is directly filled with the internal forces and so represent an absolute value of unbalance and no unbalance ratio.
See also post_node_rhside_ratio_unknowntypes.
With this option you can specify a list of unknown types which should be used in the calculation of the post_node_rhside_ratio result. By example, if both materi_velocity and condif_temperature are initialised, then you can should to use only the material velocities in the accuracy ratio determination by specifying post_node_rhside_ratio_unknowntypes -materi_velocity.
In case this post_node_rhside_ratio_unknowntypes is not specified, default all principal unknowns present in the calculation will be used.
This record specifies a point in space for which unknown values will be calculated. The values are placed in a record post_point_dof with the same index. The values are obtained by determining in which element the point is located and then using the element’s interpolation functions. In 1D only x should be specified, etc.. The coordinates are defined in the initial mesh.
Unknown values at a selected point. See post_point.
See post_calcul.
This record specifies a quadrilateral in space for which the average of the unknown values will be calculated. The values are placed in a record post_quadrilateral_dof with the same index. Internally in TOCHNOG, post_point records are used to evaluate the unknowns on the quadrilateral. In 2D only x_0 y_0 and x_1 y_1 should be specified. The coordinates are defined in the initial mesh. See also: post_quadrilateral_n.
Average unknown values at a selected quadrilateral. See post_quadrilateral.
See post_calcul.
Use n post_point records in each direction to evaluate the unknowns along the quadrilateral. Default n is 5. See post_quadrilateral.
If switch is set to -yes, all evaluated arithmetics will be printed. See the start of the data part for an explanation about arithmetics.
If switch is set to -yes, the control index being evaluated will be printed. Handy for keeping track on what the program is doing.
If switch is set to -yes, all evaluated defines will be printed. See the start of the data part for an explanation about defines.
If switch is set to -yes then failure of elements due to one of the failure criteria (group_materi_failure_rupture, etc.) will be reported.
The data selected in the records control_print, control_print_unknowns, control_print_unknownsrhside or control_print_element will be filtered at output. Thus only a limited amount of data will actually be printed. Here data_item_name is the name of the data item to be filtered, e.g. data_item_name is -node_dof. data_item_index is the index of the data_item_name record which passes the filter. If, by example, data_item_index is 3 then only index 3 passes the filter. If data_item_index is -all then all indices pass the filter. If, by example, data_item_index is -geometry_line 3 (valid if data_item_name is -node or another nodal item) then only records with coordinates located on line 3 pass the filter. If, by example, data_item_index is -geometry_line 3 (valid if data_item_name is -element or another element item) then only element with at least one coordinate located on line 3 pass the filter. If, by example, data_item_index is -ra …-ra then indices in this range pass the filter. If, by example, data_item_index is -macro 4 and data_item_name is data valid at a node (or element), then only nodes (or elements) generated by the macro number 4 pass the filter (see control_mesh_macro_* for macro’s). If, by example, data_item_index is -macro -none and data_item_name is data valid at a node (or element) then only nodes (or elements) not generated by any macro pass the filter (see control_mesh_macro_* for macro’s).
By example, if number_0 is 3 then the fourth value of a record passes the filter. If number_0 is -all the whole record passes the filter. If, by example, number_0 is -velx while data_item_name is -node_dof then only x-velocities pass the filter.
Some examples are
print_filter 1 -node_dof -all -temp -sigxx (temperatures and xx-stresses)
print_filter 2 -node -geometry_line 3 0 (x-coordinates on line 3)
With control_print_filter you can select if the records control_print, control_print_unknowns or control_print_unknownsrhside (with the same index) should use specific filters (specify the indices of the filter for print_filter_index), should use all filters (specify -all for print_filter_index), or should use no filter at all (specify -none for print_filter_index). Default, if control_print_filter is not specified, all filters will be used for a print option.
Example:
print_filter 1 …
print_filter 2 …
…
control_timestep 10 …
control_print 10 …
control_print_filter 10 1 (only use filter 1)
…
control_timestep 20 …
control_print 20 …
control_print_filter 20 -all (use all filters)
All used filters are placed in-line; thus only data which passes all used filters will be printed.
If switch is set to -yes, the database will be written after succesfull completion of a timestep to the file last.dbs.
In case of any trouble at the new timestep, that last.dbs can serve as a restart file. Just adjust all control records to what you want them to be.
If switch is set to -yes, tochnog will print some info where it is in the calculation.
This record makes material to slide over the geometry specified by geometry_entity geometry_entity_index. Velocities normal to that direction are not allowed.
This option comes handy when it is a priori known at which nodes sliding will occur, which is typically the case in an Eulerian calculation, or if deformations are small. Otherwise, contact conditions should be used (see contact_geometry etc.).
Optionally slide_friction and slide_penalty can be specified.
This specifies friction for the slide_geometry option.
This specifies penalty factor with which the slide_geometry option is enforced; if this record is not specified then some high default value for the penalty factor.
See also: target_value.
This allows for testing the results of the calculation. Typically, data_item_name is -node_dof but also other data items can be tested. The record with index data_item_index will be tested. If data_item_name is -node_dof then number can be -velx, -temp, etc. (see dof_label); else, by example, number is 3 states that the fourth value needs to be checked. The result should not differ more from value than tolerance.
For a calculation with no problems, the tn.log file contains a line stating that the calculation did start followed by a line stating that the calculation did end. If this is not precisely the case, some problem did occur or the targeted results differ too much. In the example below it is checked that the pressure in node 6 does not differ more than 1. 10−5.
target_item 0 -node_dof 6 -pres
target_value 0 1.2 1.e-5
The chacked value, 1.2 in this case, has been found from a previous computation that is regarded as reliable. The present computed value is compared with the earlier one. If they agree within the specified tolerance, 1.e-5 in this case, then Tochnog is silent. If they do not, then Tochnog writes an error message into the file "tn.log".
This record specifies a tendon; the start point is specified by x_0 y_0 z_0 and the end point is specified by x_1 y_1 z_1. The tendon has cross sectional area tendon_area. In 1D only x_0, x_1, etc. should be specified, etc.. Tendons will automatically be distributed over the elements. This is only available for linear and quadratic elements. Only if a tendon part completely passes an element it will be embedded in the element; tendons need to be embedded in elements which have a -materi differential equation group_type.
This record automatically fills the element_tendon_direction, element_tendon_number, element_tendon_stress and element_tendon_volume records. You are not allowed to specify those records yourself.
In combination with tendons, the group_materi_memory model should be set to -total or -updated_without_rotation.
Elastic stiffness for tendon (with the same index). Tendon will use the group_materi_memory model of the parent element; only -total is available however for tendons.
Thermal expansion coefficient for tendon (with the same index).
Yield stress for tendon (with the same index). Perfectly plastic yielding is used.
Initial stress for tendon (with the same index). See also tendon_stress_time and element_tendon_stress.
With this record you can specify a factor for the initial tendon stress in time (see tendon_stress for the initial tendon stress). A table of time points with factors should be specified. After the last time point in this table is passed, the tendon stress initially is set to the last value (that is the initial_stress multiplied with the last factor), and further on can change due to length changes of the tendon.
Attention: this table is only taken into account if actual time steps are performed by means of control_timestep.
Consumed computer time up to moment of printing.
Current time in calculation.
This data item defines a polynomial in space in 1D or 2D. The polynomial specifies the cross-sectional area (in 1D) or the thickness (2D) as function of the global x coordinate (1D) or the global x,y coordinates (2D). By example, in a 1D solid calculation it can be used to specify varying cross-sectional areas of bars, or in a 1D flow calculation it can be used to specify the cross- sectional area of a channel.
In 1D the polynomial is a0 + a1 x + a2 x2 + … . In 2D the polynomial is a0 + a1 x + a2 y + a3 x2 + a4 xy + a5 y2 + a6 x3 + a7 x2 y + a8 x y2 + a9 y3 + … .
If this record is not specified, the cross-sectional area is 1 (1D) or the thickness is 1 (2D).
See also volume_element_factor.