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

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