FCS Mesh Connectivity
Controls how different structural parts share mesh nodes: hanging nodes (T-junctions), auto-weld, manual weld, and assembly selection helpers.
1. The Problem: Incompatible Meshes
When a beam frames into the middle of a slab, or when two slabs share an edge but have different mesh densities, their nodes do not automatically align. Without a connectivity rule the parts are structurally disconnected.
FCS solves this with Fcs.Mesh.ConnectRules.
2. HangingNodes Rule
HangingNodes inserts constraint equations so that nodes on the coarser (hanging) mesh are slave to the finer (supporting) mesh.
Syntax
Mesh.ConnectRules := Fcs.Mesh.ConnectRules{
Rules = [
Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities = <entity-selector>,
SupportingEntities = <entity-selector>,
GlueDistance = 0.01
}
]
}
| Field | Description |
|---|---|
HangingEntities |
Elements whose nodes will be constrained |
SupportingEntities |
Elements that provide the reference mesh |
GlueDistance |
Tolerance (m) — nodes within this distance of a supporting face are glued |
Two slabs connected via hanging nodes
# from new-HangingNodesRibAnd2Shells/HangingSlabTest.fcs
Mesh.ConnectRules := Fcs.Mesh.ConnectRules{
Rules = [
Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities = Fcs.Assembly.ShellsInLayer("BotLayer"),
SupportingEntities = Fcs.Assembly.ShellsInLayer("TopLayer"),
GlueDistance = 0.01
}
]
}
Slab + rib (beams hanging on shells)
# from new-SlabRib/SlabRib.fcs
Mesh.ConnectRules = Fcs.Mesh.ConnectRules{
Rules = [
Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities = Fcs.Assembly.AllBeams,
SupportingEntities = Fcs.Assembly.AllShells,
GlueDistance = 0.2
}
]
}
Multiple rules in one block
Mesh.ConnectRules := Fcs.Mesh.ConnectRules{
Rules = [
Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities = Fcs.Assembly.ShellsInLayer("Ribs"),
SupportingEntities = Fcs.Assembly.ShellsInLayer("Slab"),
GlueDistance = 0.05
},
Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities = Fcs.Assembly.AllBeams,
SupportingEntities = Fcs.Assembly.AllShells,
GlueDistance = 0.05
}
]
}
3. Assembly Entity Selectors
Use these inside HangingEntities / SupportingEntities:
| Selector | Returns |
|---|---|
Fcs.Assembly.AllBeams |
Every beam element in the model |
Fcs.Assembly.AllShells |
Every shell element in the model |
Fcs.Assembly.ShellsInLayer("name") |
Shells whose mesh layer matches the string |
Fcs.Assembly.BeamsInLayer("name") |
Beams in a named layer |
Layers are defined earlier in the script via mesh_layer {ml1} name "LayerName" declarations.
4. AutoConnect
AutoConnect automatically glues nearby nodes across separate components without requiring explicit HangingNodes rules:
Mesh.AutoConnect := True
Use when models share physical edges but come from different gclass instances and manual rule authoring is impractical.
5. WeldNodes
WeldNodes merges duplicate nodes that are within tolerance after each mesher pass:
Mesh.WeldNodes := True
Mesh.WeldNodesTolerance := 0.001 # 1 mm
This is distinct from HangingNodes: welding replaces two nodes with one shared node, whereas HangingNodes adds constraint equations while keeping both meshes separate.
6. Shear Locking
| Shell type | Shear locking risk |
|---|---|
| Full-integration quad | High for thin plates |
Reduced-integration quad (type ReducedIntegration) |
Low |
| Triangle | Low |
To switch a shell to reduced integration:
shell {s1} area {a1} thickness 0.2 type ReducedIntegration
Source files
TestData/bug-ShearLockingQuad/TestData/bug-ShearLockingTriangle/
7. Complete Workflow Example
# --- layers ---
mesh_layer {mlSlab} name "Slab"
mesh_layer {mlRib} name "Rib"
# --- geometry (abbreviated) ---
area {aSlab} boundary curve {cSlab}
area {aRib1} boundary curve {cRib1}
# --- members ---
shell {sSlab} area {aSlab} thickness 0.2 layer {mlSlab}
shell {sRib1} area {aRib1} thickness 0.15 layer {mlRib}
# --- connectivity ---
Mesh.ConnectRules := Fcs.Mesh.ConnectRules{
Rules = [
Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities = Fcs.Assembly.ShellsInLayer("Rib"),
SupportingEntities = Fcs.Assembly.ShellsInLayer("Slab"),
GlueDistance = 0.05
}
]
}
# --- analysis (obtains meshed model) ---
analysis1 := Fcm.GetAnalysis()
8. Quick Reference
# Beam ribs on slab
Mesh.ConnectRules = Fcs.Mesh.ConnectRules{
Rules=[Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities=Fcs.Assembly.AllBeams,
SupportingEntities=Fcs.Assembly.AllShells,
GlueDistance=0.2
}]
}
# Layer-based shells
Mesh.ConnectRules = Fcs.Mesh.ConnectRules{
Rules=[Fcs.Mesh.ConnectRules.HangingNodes{
HangingEntities=Fcs.Assembly.ShellsInLayer("BotLayer"),
SupportingEntities=Fcs.Assembly.ShellsInLayer("TopLayer"),
GlueDistance=0.01
}]
}
# Weld nearby nodes
Mesh.WeldNodes := True
Mesh.WeldNodesTolerance := 0.001
9. Relevant Test Folders
| Folder | Feature |
|---|---|
new-HangingNodesRibAnd2Shells/ |
Shell-to-shell HangingNodes |
new-HangingNodesShells/ |
Shell HangingNodes variants |
new-SlabRib/ |
Beam-on-shell HangingNodes |
test-MeshConnect1/ |
Basic mesh connectivity |
test-MeshConnectClubs/ |
Multi-layer connectivity |
test-MeshWeld1/ |
WeldNodes |
bug-HangingNodeStrange01/ … 06/ |
HangingNodes edge cases |
bug-ShearLockingQuad/ |
Quad shear locking |
bug-ShearLockingTriangle/ |
Triangle shear locking |