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:
- A constant:
Value := 1.2 - A conditional:
Value := (IsCustom) ? customValue : codeFormula(...) - A lambda for load shape functions:
Value := Alfa => formulaFn(Alfa)
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
TestData/new-SnowHonza/Snow.fcs
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
TestData/test-GridValuesWind-*/
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
TestData/test-SiloLoads/
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
TestData/test-ShellsAreaLoad-*/
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
TestData/new-VertexLoadFromFrame/VertexLoadClass.fcsTestData/new-VertexLoadFromFrame/test.fcs
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 |