The structure input file defines the structure to be analyzed. The calculation engine is unit-agnostic, so the units used as input are also the output units. Units need, nevertheless, to be congruent.
The input file should be a plain-text file with the .inkfem
extension.
Inside the file, the first line should include the header:
inkfem vM.m
where M
and m
are the major and minor versions of the binary used to compute the structure.
The current version is 1.1
:
inkfem v1.1
Then go the definition sections:
nodes
: the structure nodes, referred by idsections
: the element's sections, referred by namematerials
: the element's materials, referred by nameloads
: the loads applied to the nodes and elementsbars
: the structure bars (linear resistant elements), referred by id
The sections can appear in any order.
The nodes are defined under the header:
|nodes|
Each node is defined following the format:
<id> -> <xCoord> <yCoord> {[dx dy rz]}
where:
- id: the node's unique id
- xCoord: the node's position x-coordinate
- yCoord: the node's position y-coordinate
- {dx dy rz}: set of externally constrained degrees of freedom
Node with id 23, at position (120, 450)
and no external constraints:
23 -> 120.0 450.0 { }
Node with id 48, at position (300, 50)
and the displacement in the x and y directions externally constrained:
48 -> 300.0 50.0 { dx dy }
The materials are defined under the header:
|materials|
Each material is defined following the format:
<name> -> <density> <young> <shear> <poisson> <yield> <ultimate>
where:
- name: the material's unique name
- density: the material's density
- young: the material's Young or elasticity modulus
- shear: the material's shear modulus
- poisson: the material's poisson ratio
- yield: the material's yield strength
- ultimate: the material's ultimate strength
Standard steel 275:
'steel_275' -> 0.00000785 21000000.0 8100000.0 0.3 27500.0 43000.0
The sections are defined under the header:
|sections|
Each section is defined following the format:
<name> -> <area> <iStrong> <iWeak> <sStrong> <sWeak>
where:
- name: the section's unique name
- area: the section's cross section area
- iStrong: the strong axis' moment of inertia
- iWeak: the weak axis' moment of inertia
- sStrong: the strong axis' section modulus
- sWeak: the weak axis' section modulus
Standard European IPE-100 section:
'ipe_100' -> 10.3 171.0 15.92 34.2 5.79
The loads are defined under the header:
|loads|
There are two types of loads:
- Distributed
- Concentrated
Both types are applied to bars.
To define a concentrated load on a node, choose a bar which contains the node, and add the concentrated load to that bar at position t = 0
(start node) or t = 1
(end node).
Distributed loads are defined following the format:
<term> <reference><type> <barId> <tStart> <valueStart> <tEnd> <valueEnd>
where:
- term: is either:
fx
: force in the x-axis directionfy
: force in the y-axis directionmz
: moment about the z-axis
- reference: the reference frame in which the load is defined. Can be:
l
: reference frame local to the barg
: global reference frame
- type: must be
d
to signify this is a distributed load - barId: The id of the bar where the load is applied
- tStart: the load start position in the bar's directrix (
0 <= t <= 1
) - valueStart: the value for the load at
tStart
- tEnd: the load end position in the bar's directrix (
tStart <= t <= 1
) - valueEnd: the value for the load at
tEnd
Distributed loads are always linear: they have a start and end value, and those values are linearly interpolated. The current implementation doesn't allow any other kind of distributed load interpolation.
A distributed force in the bar's local y-axis direction, applied to a bar with id 4, starting at t = 0
with value -50
and ending at t = 1
with value -75
.
fy ld 4 0.0 -50.0 1.0 -75.0
A distributed moment about the global z-axis, applied to a bar with id 12, starting at t = 0.25
with value 100
and ending at t = 0.75
with value 200
.
mz gd 12 0.25 100 0.75 200
Concentrated loads are defined following the format:
<term> <reference><type> <elementId> <t> <value>
where:
- term: is either:
fx
: force in the x-axis directionfy
: force in the y-axis directionmz
: moment about the z-axis
- reference: the reference frame in which the load is defined. Can be:
l
: reference frame local to the barg
: global reference frame
- type: must be
c
to signify this is a concentrated load - elementId: The if of the bar where the load is applied
- t: the load position in the bar's directrix (
0 <= t <= 1
) - value: the load's value
A concentrated force in the element with id 11 local y-axis direction, at position t = 0
(applied in the start node), with value -70
.
fy lc 11 0.0 -70.0
The bars are defined under the header:
|bars|
Each bar is defined following the format:
Here's a complete input file example:
inkfem v1.1
|nodes|
1 -> 0 0 {dx dy}
2 -> 200 300 {}
3 -> 400 0 {}
4 -> 600 300 {}
5 -> 800 0 {dx dy}
|materials|
'mat_A' -> 1.0 1.0 1.0 1.0 1.0 1.0
|sections|
'sec_A' -> 1.0 1.0 1.0 1.0 1.0
|loads|
fy ld 4 0.0 -50.0 1.0 -75.0
|bars|
1 -> 1{dx dy rz} 2{dx dy rz} 'mat_A' 'sec_A'
2 -> 1{dx dy rz} 3{dx dy rz} 'mat_A' 'sec_A'
3 -> 2{dx dy rz} 3{dx dy rz} 'mat_A' 'sec_A'
4 -> 2{dx dy rz} 4{dx dy rz} 'mat_A' 'sec_A'
5 -> 3{dx dy rz} 4{dx dy rz} 'mat_A' 'sec_A'
6 -> 3{dx dy rz} 5{dx dy rz} 'mat_A' 'sec_A'
7 -> 4{dx dy rz} 5{dx dy rz} 'mat_A' 'sec_A'
The preprocessed structure is saved into a .inkfempre
file if the -p
flag is passed to inkfem.
The file's template is defined in preprocess.template.txt.
The solution structure is saved into a .inkfemsol
file.
The file's template is defined in solution.template.txt.