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)

Design

See EnSimpleBeamDesign