FCS Slabs, Ribs, and Orthotropic Panels
Shell and slab modelling with integrated ribs, orthotropic material definitions, and roof/wall panel properties.
1. Standard Shell (Isotropic Slab)
material {matConcrete} linear E 30.0e9 ni 0.2 rho 2500
thickness 1 material {matConcrete} t 0.20 # 200 mm slab
shell {s1} area {a1} thickness 1
The thickness keyword assigns a cross-section (material + plate thickness) to a shell element. The implicit index is used if only one thickness is defined.
2. ThicknessSection Class
In parametric models use ThicknessSection to bundle material and geometry:
thicknessIsotropic1 := ThicknessSection{
Geometry := ThicknessIsotropic{
Material := matConcrete,
Thickness := 0.20
}
}
shell {s1} area {a1} thickness (thicknessIsotropic1)
This pattern is used by all HBC-2 parametric templates.
3. Orthotropic Panels
Corrugated or sandwich panels (wall panels, roof panels, floor decking) are modelled as orthotropic shells. Their effective stiffness properties are stored in a JSON resource file and loaded at runtime with Fcm.ResourceReader.
Loading orthotropy data from JSON
# list of stiffness objects, each with a "Name" field
orthotropyList := Fcm.ResourceReader.ReadJsonAsDynamicObjectArray("OrthotropyFcs.json")
orthotropyByName := name => orthotropyList.FindOrDefault(o => o.Name == name, {})
# pick a specific panel type by name
StiffnessParameters := orthotropyByName("GSI_wp_4_ga_8")
Orthotropy := {}
thicknessOrthotropic := ThicknessSection{
Geometry := ThicknessOrthotropic{
Orthotropy,
StiffnessParameters
}
}
Inline named parameter override
thicknessRoofPanel := ThicknessSection{
Geometry := ThicknessOrthotropic{
Orthotropy,
StiffnessParameters = orthotropyByName("GSI_rp_ga_24")
}
}
Using the orthotropic thickness
shell {sPanel} area {aRoof} thickness (thicknessOrthotropic)
Source files
TestData/new-SlabOrthotropy/ThicknessLib.fcsTestData/new-SlabOrthotropy/OrthotropicTest.fcsTestData/new-SlabOrthotropy/OrthotropicTestRoofPanel.fcsTestData/new-SlabOrthotropy/OrthotropicTestRotated.fcs
4. Rib-Z (Cold-Formed Rib on Slab)
A rib-Z is a cold-formed Z-section beam that bears on the underside of a concrete slab (or on a roof panel). The rib beam mesh uses HangingNodes to connect to the slab shell mesh (see 15-MESH-CONNECTIVITY.md).
Rib beam declaration
res := Resources{}
ribBeam := BeamStandard(GCS.Rx(0)){
beamCss := res.cssLib.sectionGsiRibChannel,
LcsAlpha := 90*Unit.deg, # rotate LCS 90° so Z points vertically
MirrorCssY := False,
MirrorCssZ := False,
MirrorLcsZ := False,
Ecc := {Y:=0.0, Z:=0}
}
Combining rib + slab with HangingNodes
# slab layer
mesh_layer {mlSlab} name "Slab"
shell {sSlab} area {aSlab} thickness 1 layer {mlSlab}
# rib layer
mesh_layer {mlRib} name "Rib"
beam {bRib} curve {cRib} xsection {csRib} layer {mlRib}
# connect: ribs are hanging on slab
Mesh.ConnectRules = Fcs.Mesh.ConnectRules{
Rules = [
Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities = Fcs.Assembly.AllBeams,
SupportingEntities = Fcs.Assembly.AllShells,
GlueDistance = 0.2
}
]
}
Source files
TestData/new-BenchmarkRibZ/BeamRibZ1.fcsTestData/new-BenchmarkRibZ/css/SectionGsiRib.fcsTestData/new-SlabRib/SlabRib.fcsTestData/new-RoofPanelWithRibZ/
5. Mesh Options for Shell Models
model_shell3d # activate 3-D shell solver
Mesh.WeldNodes := True # merge coincident nodes
Mesh.ElementSize := 0.2 # global target element size (m)
Mesh.DefaultElementType2D := Fcs.Mesh.Element.Quadrilateral # or Triangle
model_shell3d must appear before the mesh/analysis directives to activate the 3-D plate/shell solver.
6. Plate 2-D (In-Plane / Plane Stress)
For pure in-plane problems use model_plate2d instead of model_shell3d:
model_plate2d
material {m1} linear E 210e9 ni 0.3 rho 7850
thickness 1 material 1 t 0.01
shell {s1} area {a1} thickness 1
Source files
TestData/new-SlabOrthotropy/IsotropicShearTest.fcs
7. Rotated Orthotropy Direction
For skew panels or when the corrugation direction is not aligned with the global X axis:
# rotate the orthotropy axes 30° around the shell normal
thicknessRotated := ThicknessSection{
Geometry := ThicknessOrthotropic{
Orthotropy = { Angle := 30 * Unit.deg },
StiffnessParameters
}
}
Source files
TestData/new-SlabOrthotropy/OrthotropicTestRotated.fcs
8. Quick Reference
# --- Isotropic slab ---
thickness 1 material {matC30} t 0.20
shell {s} area {a} thickness 1
# --- Orthotropic panel from JSON library ---
orthoList := Fcm.ResourceReader.ReadJsonAsDynamicObjectArray("OrthotropyFcs.json")
orthoByName := n => orthoList.FindOrDefault(o=>o.Name==n, {})
thkPanel := ThicknessSection{ Geometry:=ThicknessOrthotropic{
Orthotropy, StiffnessParameters=orthoByName("GSI_wp_4_ga_8") }}
shell {sPanel} area {aRoof} thickness (thkPanel)
# --- Rib on slab ---
Mesh.ConnectRules = Fcs.Mesh.ConnectRules{
Rules=[Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities=Fcs.Assembly.AllBeams,
SupportingEntities=Fcs.Assembly.AllShells,
GlueDistance=0.2
}]
}
model_shell3d
9. Relevant Test Folders
| Folder | Feature |
|---|---|
new-SlabOrthotropy/ |
Orthotropic shells (isotropic, orthotropic, rotated, roof panel) |
new-BenchmarkRibZ/ |
Cold-formed Z-rib test cases |
new-SlabRib/ |
Slab + rib with HangingNodes |
new-RoofPanelWithRibZ/ |
Roof panel + rib combination |
test-ShellBeam-*/ (≈30 folders) |
Various shell-beam interaction |
test-temelin3/ |
Large slab model |
bug-SlabRib/ |
SlabRib edge-case bug reproductions |
bug-ShearLockingQuad/ |
Quad integration pitfall |