Intrinsic modal solution¤
Overall solution process¤
The tensor structure of the main components in the solution process is illustrated in the figure below in the sequential order they are computed, together with the asymptotic time and space complexities. The discretization of the problem comprises number of condensed nodes, modes used in the reduced order model and time steps in the solution (if the problem is static, represents a ramping load stepping scheme). The intrinsic modes, are computed from the eigenvalue solution and the coordinates of the active nodes. The nonlinear couplings, are calculated next, from which the is assembled and solved to yield the solution states with the number of states in the system that is proportional to the number of modes. Local velocities, internal forces and strain fields are computed as a product of the corresponding intrinsic modes and states, and their integration leads to the position tensor, with similar structure. In some cases, such as when gravity forces are included, the evolution of the rotational matrix, , needs to be solved for too.
For links to the codebase, see the following:
- Modes.
- Nonlinear couplings.
- Solution of equations:
System based solutions¤
An internal function identifier (Sol name) is build such that unique functions are mapped to the input settings in the system of equations, thereby avoiding the use of if-conditionals, 0-only additional vectors inside the solvers (running iteratively). The options are as follows:
Type | Target | Gravity | BC1 [prime=2] | ModalAero [prime=3] | SteadyAero [prime=5] | UnsteadyAero [prime=7] | Point loads [prime=11] | q0 approx | Rigid-body | Nonlinearities | residualised |
---|---|---|---|---|---|---|---|---|---|---|---|
1 static | Level | False: "g" | Clamped | None | None | None | None | via q2 | 1-quaternion+strains | All -> "" | None -> "" |
2 Dynamic | TRIM1 | True: "G" | Free | Rogers | qalpha | gust | follower | via q1 | All-quaternions | Linear sys -> "l" | True -> "r" |
3 Stability | TRIM2 | Prescribed | Loewner | qx (control) | controls | dead | Linear sys+disp -> "L" | ||||
4 Control | only gamma1 -> "g1" |
And some of the implemented RHS solutions (see for instance equations):
Sol name | label | Imp | |
---|---|---|---|
10G1 | Structural static under Gravity | [1,0,G] | Y |
10g11 | Structural static with follower point forces | [1,0,g,0,0,0,0,1] | Y |
10g121 | Structural static with dead point forces | [1,0,g,0,0,0,0,2] | Y |
10g1331 | Structural static with follower+dead forces | [1,0,g,0,0,0,0,3] | N |
10g15 | Manoeuvre under qalpha | [1,0,g,0,1,1] | Y |
10G15 | Manoeuvre under qalpha and Gravity | [1,0,G,0,1,1] | N |
10g75 | Manoeuvre under qalpha and controls | [1,0,g,0,1,2] | N |
10G75 | Manoeuvre under qalpha+controls+Gravity | [1,0,G,0,1,2] | N |
20g1 | Clamped Structural dynamics, free vibrations | [2,0,g] | Y |
20G2 | Free Structural dynamic with gravity forces | [2,0,G,1] | Y |
20g2 | Free Structural dynamic | [2,0,g,1] | Y |
20g11 | Structural dynamic follower point forces | [2,0,g,0,0,0,0,1] | Y |
20g121 | Structural dynamic dead point forces | [2,0,g,0,0,0,0,2] | Y |
20g22 | Free Structural dynamic follower point forces | [2,0,g,1,0,0,0,1] | Y |
20g242 | Free Structural dynamic dead point forces | [2,0,g,1,0,0,0,2] | Y |
11G6 | Static trimmed State (elevator-qalpha, | [1,1,G,1,1] | Y |
no gravity updating) | Y | ||
12G2 | Static trimmed State (elevator-qalpha, | [1,2,G,1] | Y |
gravity updating) | |||
21G150 | Dynamic trimmed State | [2,1,G,1,1,2] | N |
20g21 | Gust response | [2,0,g,0,1,0,1] | Y |
20g273 | Gust response, q0 obtained via integrator q1 | [2,0,g,0,1,0,1,0,1] | Y |
20g105 | Gust response with steady qalpha | [2,0,g,0,1,1,1] | N |
20g42 | Gust response Free-flight | [2,0,g,1,1,0,1] | Y |
20G42 | Gust response Free-flight and gravity (X error) | [2,0,G,1,1,0,1] | N |
20G1050 | Gust response Free-flight, gravity, controls | [2,0,G,1,1,2,1] | N |
Sol name is based on the input options obtained as the multiplication of prime numbers, which can be obtained and inspected as:
import feniax.intrinsic.functions as functions
label = functions.label_generator([2,0,'g',0,1,0,1,0,1])
print(label)
Recovery of deformations¤
Analytical solutions to the are obtained when the strain is assumed constant between nodes, using a piecewise constant integration. If a component in the load-path is discretized in $n$+1 points, strain and curvatures are defined in the mid-points of the spatial discretization (n in total). and are constant within the segment , and the position and rotation matrix after integration are with the operators and obtained from integration of the exponential function, as in \cite{PALACIOS2010}. Note that when position and rotations are recovered from strain integration, there is still one point that is either clamped or needs to be tracked from integration of its local velocity.