FCS Advanced Loads

Wind, snow, silo, and vertex loads, including the VariableSymbol engineering-quantity pattern used for EN code calculations.

1. VariableSymbol — Engineering Quantity Objects

A VariableSymbol bundles the numeric value of a load variable with its metadata: symbol (LaTeX), human name, code reference, and unit type. This enables richly formatted calculation reports (see 21-OUTPUT-AND-REPORTING.md).

Structure

myVar := {
    Name        = "sk",               # identifier used in reports
    Symbol      = "s_{k}",            # LaTeX symbol string
    Explanation = "Characteristic value of snow load on the ground",
    QuantityType = "LoadForcePerArea", # unit family
    Reference   = "EN1991-1-3(4.1)",  # code clause
    Value       := 1.2                # numeric value (SI units)
}

Value can be:

Accessing the value

sk.Value         # → numeric load (kN/m²)
sk.Symbol        # → "s_{k}"
sk.Name          # → "sk"

Using in reports

browse_report sk          # table: name, symbol, value, unit, reference

2. Snow Loads (EN 1991-1-3)

The snow module SnowSVK (or country-specific namespace) provides code functions:

# from new-SnowHonza/Snow.fcs
NA := SnowSVK{}

SnowZoneId  := 2
Altitude    := 0
TopographyId := 2
IsCustom_sk := False
Custom_sk   := 0.80

sk := {
    Name="sk", Symbol="s_{k}",
    Explanation = "Characteristic value of snow load on the ground",
    QuantityType = "LoadForcePerArea",
    Reference = "EN1991-1-3(4.1)",
    Value := (IsCustom_sk) ? Custom_sk : NA.fsk(SnowZoneId, Altitude, Custom_sk)
}

Ce := {
    Name="C_e", Symbol="C_{e}",
    Explanation = "Exposure coefficient",
    QuantityType = "Coefficient",
    Reference = "EN1991-1-3(5.2(7))[Table 5.1]",
    Value := NA.fCe(TopographyId)
}

Ct := {
    Name="C_t", Symbol="C_{t}",
    Explanation = "Thermal coefficient",
    QuantityType = "Coefficient",
    Reference = "EN1991-1-3(5.2(8))",
    Value := NA.fCt
}

# shape coefficient — lambda: takes roof slope angle in radians
mu1 := {
    Name="mu1", Symbol="\\mu_{1}",
    QuantityType="Coefficient",
    Reference="EN1991-1-3(5.3.2)[Table 5.2]",
    Value := Alfa => NA.fmu1(Alfa)
}

# actual roof snow load (lambda applied to slope angle)
s := {
    Name="s", Symbol="s",
    QuantityType="LoadForcePerArea",
    Reference="EN1991-1-3(5.2(3))",
    Value := Alfa => mu1.Value(Alfa) * Ce.Value * Ct.Value * sk.Value
}

Source files


3. Wind Loads — gridValues JSON Format

Wind pressure distributions on a surface can be supplied as a 2-D grid of values in JSON form, then referenced in FCS:

windGrid := Fcm.ResourceReader.ReadJsonAsDynamicObject("WindGrid.json")
# windGrid has fields: xCoords, yCoords, values[][]

load {wl1} area {aWall} gridValues (windGrid) case {lcWind}

The JSON file structure:

{
  "xCoords": [0, 1, 2, 3],
  "yCoords": [0, 1, 2],
  "values":  [[0.4, 0.5, 0.6, 0.5],
               [0.3, 0.4, 0.5, 0.4],
               [0.2, 0.3, 0.4, 0.3]]
}

Source folders


4. LoadPanel API

LoadPanel creates an area load that is automatically distributed to supporting beams or shells below it. Useful for floor loads that transfer to beams.

load_panel {lp1} area {aFloor} pressureZ -5.0 case {lcLive}

The solver resolves the tributary widths and places equivalent point or line loads on the target elements.


5. Silo Pressure Loads

Silo/hopper horizontal pressure follows Janssen's equation. The silo_pressure keyword applies:

# from test-SiloLoads context
load {slPressure} shell {sSiloWall} silo_pressure
    gamma      1.8e4    # bulk density (N/m³)
    phi        35       # friction angle (degrees)
    mu         0.4      # wall friction coefficient
    case {lcSilo}

Source folders


6. Area Load on Curved Surfaces with Z-Tolerance

When applying an area load to a curved shell whose projection differs from a flat bounding area, use Ztolerance to control snap:

load {al1} area {aCurvedRoof} pressureZ -1.5
    Ztolerance 0.3     # nodes within 0.3 m of area plane are included
    case {lcSnow}

Source folders


7. Vertex (Nodal) Load

A point force or moment applied to a specific node:

vertex {v1} xyz 2.0 0.0 0.0

load {vl1} vertex {v1} Fx 0.5 Fy 0 Fz -1.0 Mx 0 My 0 Mz 0 case {lcPt}

Pattern from VertexLoadClass

In parametric models a gclass encapsulates the vertex load:

# VertexLoadClass.fcs pattern
Lcs    := GCS.Tx(2)          # position via LCS transform
Fx     := 0.5
Fz     := -1

v1Coords := Lcs.Origin.Point
vertex {v1} xyz v1Coords.X v1Coords.Y v1Coords.Z
load   {vl1} vertex {v1} Fx Fy Fz Mx My Mz case (LoadCase)

Source files


8. Common QuantityType Values

QuantityType string Physical meaning
"LoadForcePerArea" Pressure (kN/m²)
"LoadForce" Concentrated force (kN)
"Coefficient" Dimensionless factor
"Length" Geometry dimension (m / mm)
"Angle" Rotation (rad / deg)

9. Quick Reference

# VariableSymbol pattern
v := { Name="v", Symbol="s_{k}", QuantityType="LoadForcePerArea",
       Reference="EN1991-1-3", Value := 1.2 }
browse_report v

# Conditional value
v.Value := (useCustom) ? customVal : codeFunction(params)

# Lambda shape function
muFn.Value := Alfa => 0.8 * (60 - Alfa*Unit.deg_to_rad) / 30

# Vertex load
vertex {vPt} xyz X Y Z
load {lPt} vertex {vPt} Fx 0 Fy 0 Fz -10 case {lc1}

# Area load with z-tolerance
load {lArea} area {aRoof} pressureZ -1.5 Ztolerance 0.3 case {lc1}

10. Relevant Test Folders

Folder Feature
new-SnowHonza/ Full EN 1991-1-3 snow with VariableSymbol
test-GridValuesWind-*/ Grid-based wind pressure
new-Astron/ Wind on industrialbuilding
test-SiloLoads/ Janssen silo pressure
test-ShellsAreaLoad-*/ Area load on shells
new-VertexLoadFromFrame/ VertexLoadClass parametric vertex load
new-LoadTest/ Basic load combinations