FEM Post processing - HiStructClient/femcad-doc GitHub Wiki
EnSimpleBeamCheck
After AnalysisCase is defined, results (internal forces, deformations, EN checks, design etc.) can be obtained. Main class that handles results and checks is res.En.Steel.EnSimpleBeamCheck. This class is critical for the postprocesing. Class parameters are:
-
AnalysisCase ( see wiki page Analysis ),
-
SingleBeam: one SimpleBeamClass we want the results from,
-
BeamsCount: 1 if there is only one unique beam in the model, more if there is a set of similar beams (such as rafter, purlin..),
-
BeamPathFn: string path to the SimpleBeamClass in AnalysisBlock (could be taken from FemCad Assembly Tree), example of the function:
beamPathFn := r => "AnalysisBlock.Beams.["+ r.ToString() +"]."
(Note: if the BeamSelector doesnt work properly, try to pass unused parameter for the function:
beamPathFn := r => ( notUsed => "AnalysisBlock.Beams.dParts["+ r.ToString() +"].")
-
IgnoredLayers: beams in this layer will not be taken into account,
-
AllBeamsSelector: Selector to pick the right beam from structure set (detailed below).
myEnCheckClass := res.En.Steel.SimpleBeamCheck{ AnalysisCase, SingleBeam := myColumns[0], BeamsCount := 1, BeamPathFn := beamPathFn(columnIdx), IgnoredLayers := [], AllBeamsSelector := Fcs.Assembly.BeamByPath( beamPathStringFn(columnIdx) ) }
For picking up the desired simpleBeams in structure, multiple selectors can be used:
Fcs.Assembly.All
Fcs.Assembly.AllMembers
Fcs.Assembly.AllBeams
Fcs.Assembly.AllShells
Fcs.Assembly.AllVertexSupports
Fcs.Assembly.ByName("name")
Fcs.Assembly.BeamByName("string")
Fcs.Assembly.BeamByPath( "pathString")
Fcs.Assembly.BeamNameAndRelativeInterval("beamName",relStart,relEnd )
Fcs.Assembly.BeamNameAndAbsoluteInterval("beamName",absStart,absEnd )
Fcs.Assembly.BeamsWithCrossSectionName("cssName")
Fcs.Assembly.BeamsByLayer("layerName")
Fcs.Assembly.ShellsByLayer("layerName")
Fcs.Assembly.BeamsInLayer("layerName")
Fcs.Assembly.ShellsInLayer("layerName")
Fcs.Assembly.MembersInLayer("layerName")
Selectors can be combined by Fcs.Assembly.Union(firstSelector, secondSelector).
Internal forces
List of extreme internal forces can be get by calling:
myExtremesOnResultParts := myEnCheckClass.ExtremesOnResultParts
Internal forces in specific structure segment can be obtained by passing an interval to EnCheckClass and calling GetExtremesInSpecInterval. A set of internal forces on a beam segment specified by the passed interval will be returned.
mySpecificInternalForces := BeamsEnCheckClass.Select(beam => beam{
RelInterval := Fcs.Math.IntervalSet( 0,1 ),
# AbsInterval := Fcs.Math.IntervalSet( 0.84, 2.6), # Relative or absolute interval of beam segment can be used.
}.GetExtremesInSpecInterval
Reading of the resulting extremes
ExtremesOnBeam in SimpleBeamAnalysisResults allows to read extreme values of internal forces and displacements. The extreme looks like this:
ExtOnBeam.dx :
Max:0.466336354545 on AnalysisBlock.gbSimpleBeams.dParts[0].gbBeam.dParts[0].b1 at 1 0 0, Min:-0.462959983302 on AnalysisBlock.gbSimpleBeams.dParts[0].gbBeam.dParts[0].b1 at 1 0 0
And further can be read by calling:
ExtOnBeam.dx.Max.ResultCase :
F_1-SLS-Characteristic Eq.6.14b EN 1990 ( Q1 = Wind outer )[29](+LIN(Self weight)+LIN(Dead load)+LIN(wind load x⁺cₚₑ⁻⁺)+LIN(Live load)+0.7*(LIN(Snow load μ₃)))
ExtOnBeam.dx.Max.ResultCase.Value.items[1] :
+LIN(Dead load)
ExtOnBeam.dx.Max.ResultCase.Value.items[1].Result :
LIN(Dead load)
ExtOnBeam.dx.Max.ResultCase.Value.items[1].Coefficient:
1.0
ExtOnBeam.dx.Max.ResultCase.Value.items[1].Result.Mechanical.LoadCaseName :
"Dead load"
En checks
Document with all internal force is assembled in the EnSimpleBeamClass:
AllInForcesDoc := myEnCheckClass.ResultTable
List of EN checks can be get by calling:
myBeamEnChecks := myEnCheckClass.Select( beam => [
beam.AllAxialForceChecks,
beam.AllBendingMomentChecks,
beam.AllShearForceChecks,
beam.AllBucklingYyChecks,
beam.AllBucklingZzChecks,
beam.AllAxialAndBendingBucklingYyChecks,
beam.AllAxialAndBendingBucklingZzChecks,
beam.AllDisplacementChecks,
]
)
Document with all the conducted checks is assembled in the EnSimpleBeamClass:
AllBeamsEnCheckTables := myEnCheckClass.checkTablesFn(("Title"), myBeamEnChecks,True ) )
To check whether all the calculated checks are ok, a partCheckBoolFn can be used:
areChecksOk := myEnCheckClass.partCheckBoolFn (myBeamEnChecks, True).All(check => check == True)