Version 1.0
SE-TEDS is the canonical format for representing structural engineering project data in a way that is complete (no information loss), compact (60–82% fewer tokens than standard formats), human-readable (engineers can validate it without tooling), and LLM-parseable (no special pre-processing required).
Always read this skill fully before generating, modifying, or interpreting any structural model data. Every block, field, and convention defined here is mandatory unless marked as optional.
Core Principles — Apply All Six Together
1. Symbolic Identifiers — Every entity uses a short alphanumeric ID. Never repeat descriptive labels at reference sites. One label per entity, declared once.
- Nodes:
N1, N2, …Materials:M1, M2, …Sections:S1, S2, … - Elements:
E1, E2, …Load cases:LC1, LC2, …Combinations:CB1, CB2, … - Groups:
GN_prefix for node groups,GE_prefix for element groups
2. Comma-Separated Values (CSV) — All tabular data uses | as column separator. One header row per block (prefix #). No JSON objects, no repeated keys.
3. Inline Units Declaration — Declare units once in [HEADER]. Never repeat units on individual values. Local exceptions use parenthetical suffix: 9.81(m/s2).
4. Hierarchical Block Structure — Named blocks in fixed order:
[HEADER] → [DEFAULTS] → [NODES] → [GROUPS] → [MATERIALS] → [SECTIONS]
→ [ELEMENTS] → [JOINTS] → [DIAPHRAGMS] → [LOAD_CASES] → [COMBINATIONS]
→ [LOADS] → [RESULTS]
5. Sparse Encoding of Defaults — Only write fields that differ from the declared default. Empty comma-separated cells and omitted optional fields inherit the default.
6. Normalised Float Precision — Round all floats to 4 significant figures unless higher precision is explicitly required (e.g., seismic mass). Never write full double-precision output like 4.500000000000000e+00; write 4.500.
File Header
Every SE-TEDS file begins with [HEADER]. All fields are mandatory unless marked (optional).
[HEADER]
schema_version:1.0
project:<project_name_no_spaces>
revision:Rev-01
date:YYYY-MM-D
author:<name> # (optional)
units:<force>,<length>,<temperature>
# Supported force: kN,N,tf,kip,lb
# Supported length: m,cm,,mm, ft,in
# Supported temp: C,F,K
axes:X=<dir>;Y=<dir>;Z=<dir>
gravity:<scalar>
num_dof:6
Example:
[HEADER]
schema_version:1.0
project:Tower_A_RC_Frame
revision:Rev-03
date:2025-04-10
units:kN,m,C
axes:X=East;Y=North;Z=Up
gravity:9.81
num_dof:6
Defaults Block
Declare all model-wide defaults here. Downstream blocks omit any field whose value matches the declared default.
[DEFAULTS]
element_releases:fixed-fixed
element_angle:0.0
mass_source:load_cases LC1(1.0) LC2(0.30)
design_code:<code_identifier>
mesh_size:auto
diaphragm:none
self_weight:included
self_weight_mult=1.0
Nodes Block
Standard Format
[NODES]
ID,X,Y,Z,m_x,m_y,m_z
N1,0,0,0,0,0
N2,5,0.1,0,0,0.2
N8,0,0,7.2,12.5,12.5
m_x/y/z: lumped nodal mass in force/g units.- Use
##for inline comments on the same row,#alone for full-line comments.
Cylindrical Coordinates (optional suffix)
ID,R,Theta,Z
N201(cyl),8,0.2,0
N202(cyl),8,30.5,0
R: RadiousTheta: AngleZ: Elevation
Grid Generation Block (use for regular column grids)
Declare a grid instead of listing every node when the geometry is regular. The parser expands it into the full node table automatically.
[GRID]
X_spaces:0,5.0,10.0,15.0
Y_spaces:0,6.0,12.0
Z_spaces:0,3.5,7.0,10.5,14.0,17.5
ID_prefix:N
ID_start:1
# Generates N1 through N72 automatically
N: Node (e.g.: N5 is Node 5)
Groups Block
Define named subsets of nodes and elements for use in load assignments and results.
[GROUPS]
#name:members
GN_BASE:N1-N20
GN_FLOOR1:N21-N60
GN_ROOF:N101-N120
GN_CORES:N5,N10,N15,N20
GE_COLS_L1:E1-E20
GE_BEAMS_L1:E21-E60
GE_SLABS_L1:E200-E280
GE_COLS_ALL:GE_COLS_L1,GE_COLS_L2,GE_COLS_L3
GE_RC_COLS:sec=S40-S43
GE_STEEL:sec=S1-S7
Range syntax: N1-N20 (inclusive). Space-separated lists for non-contiguous IDs.
sec=filter selects all elements assigned to a given section range, so for instance,S40-S43are
Materials Block
Steel
[MATERIALS]
#ID,class,name,E,nu,G,rho,fy,fu,alpha
M1,STEEL,A992-Gr50,200000,0.30,76923,7.85,345,448,12e-6
M2,STEEL,A36,200000,0.30,76923,7.85,250,400,12e-6
# Units: E, G in MPa; rho in t/m3; fy, fu in MPa; alpha in 1/°C
# G is auto-computed as E/(2(1+nu)) if omitted
Concrete
#ID,class,name,fck,fctm,Ec,rho,nu,alpha,behavior
M4,CONCRETE,C25/30,25,2.56,31000,2.50,0.20,10e-6,LIN
M5,CONCRETE,C30/37,30,2.90,32837,2.50,0.20,10e-6,LIN
M6,CONCRETE,C40/50,40,3.51,35000,2.50,0.20,10e-6,MAN-P
# behavior tokens: LIN | MAN-P (Mander parabolic) | PK (Popovics-Kent)
# Ec auto-computed from fck per code formula if omitted
Nonlinear behavior sub-block — required immediately after any row with a non-LIN behavior token:
M6,CONCRETE,C40/50,40,3.51,35000,2.50,0.20,10e-6,MAN-P
behavior.fco = 40.0 # unconfined peak stress (MPa)
behavior.eco = 0.002 # strain at peak stress
behavior.fcc = 52.0 # confined peak stress (MPa)
behavior.ecc = 0.0035 # strain at confined peak
behavior.ecu = 0.012 # ultimate strain (confined)
behavior.Esec = auto # secant modulus; auto = fcc/ecc
behavior.tension = NO # ignore tensile strength
Rebar
#ID,class,name,E,fy,fu,eps_sh,eps_u,rho
M10,REBAR,GR60,200000,420,620,0.008,0.090,7.85
M11,REBAR,GR40,200000,280,420,0.010,0.120,7.85
# eps_sh: strain hardening onset strain; eps_u: rupture strain
Timber (Orthotropic)
#ID,class,name,EL,ER,ET,GLR,GLT,GRT,rho
M15,TIMBER,Glulam24,12500,500,350,780,650,65,0.50
# L=grain axis, R=radial, T=tangential; axis mapping set in section definition
Material class tokens: STEEL | CONCRETE | REBAR | TIMBER | GENERIC
Sections Block
Steel — Catalogue (preferred for standard profiles)
[SECTIONS]
#ID,type,mat,designation,angle
S1,CATALOGUE,M1,W18X97,0
S2,CATALOGUE,M1,W21X101,0
S3,CATALOGUE,M3,HSS8X8X0.5,0
S4,CATALOGUE,M1,L6X6X0.5,45
# Designation resolved against built-in database: AISC,BS EN,DIN,JIS
# angle: local section rotation in degrees about longitudinal axis
Steel — Parametric Built-Up
# I-section: I h bf tf tw
S10,I,M1,I h=600 bf=250 tf=20 tw=12
# Box: BOX h b tf tw
S11,BOX,M3,BOX h=400 b=300 tf=16 tw=12
# Pipe (CHS): PIPE OD t
S12,PIPE,M3,PIPE OD=219.1 t=8.0
# Cover-plated W-section
S13,COMPOUND,M1,W24X76 +CP b=250 t=20 at=TOPBOT
# Supported shapes: I | C | T | BOX | PIPE | PLATE | COMPOUND
Steel — Explicit Properties
#ID,type,mat,A,Iz,Iy,J,Wz,Wy,Av_z
S20,EXPLICIT,M1,148,1.42e5,4820,72,4720,770,58
Steel — Tapered / Stepped Members
# Linear taper
S30,TAPER,M1,I_end=S10 J_end=S11 interp=linear
# Stepped (segment=section@rel_start-rel_end)
S31,STEPPED,M1,seg1=S1@0.0-0.4 seg2=S2@0.4-0.7 seg3=S1@0.7-1.0
Reinforced Concrete — Rectangular Column
#ID,type,conc,rebar,B,H,cover,reinf_notation
S40,RC_RECT,M5,M10,500,500,40,8T25+4T20
S41,RC_RECT,M5,M10,600,600,40,12T28
# Reinforcement notation: <qty>T<dia> for deformed bar, <qty>R<dia> for plain bar
# Multiple groups separated by +
# Total rho auto-computed by parser
Reinforced Concrete — Beam
#ID,type,conc,rebar,B,H,cover,top,bot,links
S50,RC_BEAM,M4,M10,300,600,35,3T20,4T25,T10@150
S51,RC_BEAM,M4,M10,300,700,35,2T20,5T25,T10@125
Reinforced Concrete — T-Beam
#ID,type,conc,rebar,bw,H,bf,hf,cover,top,bot,links
S55,RC_TBEAM,M5,M10,300,700,900,150,35,2T20,5T25,T10@150
# bw=web width, bf=effective flange width, hf=slab thickness
Reinforced Concrete — Circular Column
#ID,type,conc,rebar,D,cover,long_reinf,ties
S60,RC_CIRC,M5,M10,600,50,12T25,T10@100
S61,RC_CIRC,M6,M10,800,50,16T28,T12@100
Reinforced Concrete — Slab
#ID,type,conc,rebar,thick,cover,reinf_x,reinf_y
S70,RC_SLAB,M4,M10,200,25,T12@200,T12@200
S71,RC_SLAB,M4,M10,250,25,T16@150,T16@150
Reinforced Concrete — Flat Slab
#ID,type,conc,rebar,thick,cv,col_x,col_y,mid_x,mid_y
S75,RC_FLAT_SLB,M5,M10,280,30,T20@125,T20@125,T12@200,T12@200
Design Parameters (append as key=value tags to any RC section row)
S40,RC_RECT,M5,M10,500,500,40,8T25+4T20 fire=R120 exp=XC2 DCM=Y
# fire=<rating> exp=<exposure_class> DCM=Y/N (ductility class medium)
RC section type tokens:
RC_RECT | RC_BEAM | RC_TBEAM | RC_CIRC | RC_SLAB | RC_FLAT_SLB
Elements Block
Frame Elements
[ELEMENTS]
#ID,class,iNode,jNode,sec,angle,rel_i,rel_j
E1,FRAME,N1,N6,S40,,
E3,FRAME,N6,N7,S50,,
E5,FRAME,N3,N8,S41,90,
E6,FRAME,N4,N9,S41,,Mz,Mz
# E6: moment-pinned at both ends about local z
E7,FRAME,N5,N10,S42,,,My Mz
# E7: moment-released at J-end about both local axes
angle: local section rotation in degrees about element local x-axis. Default = 0.rel_i / rel_j: space-separated DOF labels to release. Tokens:Fx Fy Fz Mx My Mz. Empty = fully fixed (default).
Shell Elements
#ID,class,N1,N2,N3,N4,sec,type
E200,SHELL,N21,N22,N27,N26,S70,thin
E300,SHELL,N40,N41,N46,,S71,thin
# E300 is triangular — N4 omitted
# type tokens: thin | thick (Mindlin)
Link Elements
#ID,class,iNode,jNode,type,properties
E500,LINK,N1,N1',SPRING,Kz=50000 Kx=5000 Ky=5000
E501,LINK,N2,N2',ISOLATOR,Kv=200000 Kh=2000 Qd=0.10W
E502,LINK,N10,N11,GAP,open_dist=5mm Kc=1e8
E503,LINK,N20,N21,DAMPER,C=1500 exp=0.50
# N1' notation indicates master-slave offset node
# type tokens: SPRING | ISOLATOR | GAP | DAMPER
Rigid End Offsets (optional block)
[OFFSETS]
#elem,i_dx,i_dy,i_dz,j_dx,j_dy,j_dz
E1,0,0,0.25,0,0,0.25
E3,0.30,0,0,0.30,0,0
Joints Block
Supports
[JOINTS]
#node,type,Ux,Uy,Uz,Rx,Ry,Rz,angle
N1,SUPPORT,1,1,1,1,1,1
# 1 = restrained, 0 = free, numeric = spring stiffness
N3,SUPPORT,1,1,1,0,0,0
# Pinned support — all translations fixed, rotations free
N4,SUPPORT,1,0,1,0,0,0
# Roller in Y direction
N5,SUPPORT,5e4,5e4,1e5,0,0,0
# Spring support — translational springs (kN/m), rotations free
# Shortcut keywords (expands to the patterns above):
GN_BASE,FIXED,,,,,,
N50,PINNED,,,,,,
N51,ROLLER_X,,,,,,
# Supported shortcuts: FIXED | PINNED | ROLLER_X | ROLLER_Y | ROLLER_Z
Semi-Rigid Connections
#node,elem,type,Krx,Kry,Krz
N15,E12,SEMI_RIGID,,,25000
# Moment-rotation stiffness in kNm/rad; empty = fully fixed
Diaphragms
[DIAPHRAGMS]
#name,master,slaves,DOFs
DPH_L1,N100,GN_FLOOR1,Ux Uy Rz
DPH_L2,N101,GN_FLOOR2,Ux Uy Rz
DPH_ROOF,N102,GN_ROOF,Ux Uy Rz
Load Cases Block
[LOAD_CASES]
#ID,type,label,self_wt,multiplier
LC1,DEAD,Dead_Permanent,YES,1.0
LC2,DEAD,Dead_Superimposed,NO,1.0
LC3,LIVE,Live_Office,NO,1.0
LC4,LIVE,Live_Roof,NO,1.0
LC5,WIND,Wind_X+,NO,1.0
LC6,WIND,Wind_X-,NO,1.0
LC7,WIND,Wind_Y+,NO,1.0
LC8,WIND,Wind_Y-,NO,1.0
LC9,SEISMIC,Seismic_RSA_X,NO,1.0
LC10,SEISMIC,Seismic_RSA_Y,NO,1.0
LC11,THERMAL,Thermal_Summer,NO,1.0
LC12,NOTIONAL,Notional_X+,NO,1.0
# Type tokens: DEAD,LIVE,WIND,SEISMIC,THERMAL,NOTIONAL,MOVING
Seismic Sub-Block (required for SEISMIC type cases)
[SEISMIC]
LC9.spectrum : code=ASCE7-22 Ss=1.20 S1=0.55 SiteClass=D
LC9.direction : X ecc=0.05
LC9.modes : 12 CQC missing_mass=YES
LC9.scaling : Vt_min=0.85*Vbase
LC10.spectrum : same_as=LC9
LC10.direction: Y ecc=0.05
LC10.modes : 12 CQC missing_mass=YES
-–
Combinations Block
Explicit Table
Each column header corresponds to a load case ID. Factor - means the load case does
not participate in that combination (sparse encoding).
[COMBINATIONS]
# type: U=ULS | S=SLS | A=ALS | F=FIRE
#ID,type,label,LC1,LC2,LC3,LC4,LC5,LC6,LC9
CB1,U,1.4DL,1.4,1.4,-,-,-,-,-
CB2,U,1.2DL+1.6LL,1.2,1.2,1.6,1.6,-,-,-
CB3,U,1.2DL+1.0LL+1.6W,1.2,1.2,1.0,-,1.6,-,-
CB4,U,1.2DL+1.0LL-1.6W,1.2,1.2,1.0,-,-,1.6,-
CB5,U,0.9DL+1.6W+,0.9,0.9,-,-,1.6,-,-
CB6,U,1.2DL+1.0LL+EQX,1.2,1.2,1.0,-,-,-,1.0
CB7,S,1.0DL+1.0LL,1.0,1.0,1.0,-,-,-,-
CB8,S,1.0DL+0.3LL+1.0W,1.0,1.0,0.3,-,1.0,-,-
CB9,A,1.0DL+0.5LL+1.0EQ,1.0,1.0,0.5,-,-,-,1.0
Auto-Generation (use for code-compliant models)
[COMBINATIONS]
auto_code : ASCE7-22 importance=II seismic_sdc=D
# Parser generates all required LRFD combinations including seismic Section 12.4
# Supported codes: ASCE7-22 | EN1990 | NTC2018 | NBC2015 | AS/NZS1170
-–
Loads Block
Point Loads on Nodes
[LOADS]
#case,node,Fx,Fy,Fz,Mx,My,Mz
LC2,N8,-,-,-150,-,-,-
LC2,N12,-,-,-220,-,-,-
LC5,N25,85,-,-,-,-,-
# Negative Fz = downward (in -Z gravity convention)
# Dash = zero load on that DOF (sparse)
Distributed Loads on Frame Elements
#case,elem/group,type,csys,dir,w1,w2,d1,d2
LC2,E3,UNIFORM,GLOBAL,Z,-15.0,,
LC3,GE_BEAMS_L1,UNIFORM,GLOBAL,Z,-8.50,,
LC2,E4,TRAPEZOIDAL,GLOBAL,Z,-12.0,-5.0,
LC5,GE_COLS_ALL,UNIFORM,GLOBAL,X,2.40,,
LC3,E7,POINT_SPAN,LOCAL,Y,-45.0,,2.5
# POINT_SPAN: concentrated load at distance d1 from I-end
LC11,GE_STEEL,THERMAL,-,-,dT=35,,
# THERMAL: uniform temperature change in declared temp units
# type tokens: UNIFORM | TRAPEZOIDAL | TRIANGULAR | POINT_SPAN | THERMAL
# csys tokens: GLOBAL,LOCAL
Area Loads on Shell Elements
#case,elem/group,type,dir,p,face
LC2,GE_SLABS_L1,PRESSURE,GLOBAL_Z,-4.80,TOP
LC3,GE_SLABS_L1,PRESSURE,GLOBAL_Z,-3.00,TOP
LC5,E300-E350,PRESSURE,GLOBAL_X,1.20,BOTH
LC1,GE_SLABS_L1,SELF_WT,-,auto
# face tokens: TOP | BOTTOM | BOTH
Wind Profile (storey-level lateral forces)
[WIND_PROFILE]
#case,group,Fx,Fy,Mz
LC5,GN_FLOOR1,85.0,-,-
LC5,GN_FLOOR2,140.0,-,-
LC5,GN_FLOOR3,185.0,-,-
LC5,GN_ROOF,220.0,-,-
Moving Loads
[MOVING_LOADS]
#case,path,vehicle,lanes,increment
LC13,PATH_LANE1,HL-93,1,0.5m
[LANE_PATHS]
PATH_LANE1: E1 E2 E3 E4 E5 E6
-–
Results Block
Store results as design envelopes (max/min + governing combination), never as full station-by-station force diagrams. Use dash for effects that are not critical.
Member Force Envelopes
[RESULTS]
[FRAME_ENVELOPES]
#elem,combo,Nmax,Nmin,Vymax,Vymin,Vzmax,Vzmin,Mymax,Mymin,Mzmax,Mzmin
E1,CB2,-850.0,-1240,45.0,-38.0,-,-,-,-,185.0,-210.0
E3,CB3,12.0,-25.0,88.0,-92.0,-,-,340.0,-280,15.0,-12.0
# Units: kN for forces, kNm for moments
# Governing combo annotates the row
Node Displacement Envelopes
[DISP_ENVELOPES]
#node,combo,Ux_max,Ux_min,Uy_max,Uy_min,Uz_max,Uz_min
N8,CB7,22.5,-19.8,18.3,-15.6,-4.2,-12.8
# Units: mm
Support Reaction Envelopes
[REACTION_ENVELOPES]
#node,combo,Rxmax,Rxmin,Rymax,Rymin,Rzmax,Rzmin
N1,CB2,280.0,-85.0,210.0,-62.0,1850.0,420.0
# Units: kN
Storey Drift and Beam Deflection
[DRIFT_SUMMARY]
#storey,combo,driftratio_X,driftratio_Y,limit
L1,CB8,1/450,1/520,1/400
L2,CB8,1/380,1/430,1/400
# ALERT: L2 drift_X marginally exceeds limit
[DEFLECTION_SUMMARY]
#elem,combo,dmax_mm,dallow_mm,L_mm,ratio
E3,CB7,18.5,20.8,5000,L/270
Utilisation Ratios (primary block for design review queries)
[UTILISATION]
#elem,section,UR_max,check,combo,status
E1,S40,0.82,PM_interact,CB6,OK
E3,S50,0.91,Vy_shear,CB2,OK
E5,S41,1.03,PM_interact,CB9,FAIL
E7,S42,0.74,Mz_flexure,CB3,OK
# status: OK | FAIL | WARN (WARN = 0.95 ≤ UR < 1.00)
# check tokens: PM_interact | Vy_shear | Vz_shear | Mz_flexure | My_flexure
#,axial_tens,axial_comp,torsion,stability,deflection,drift
-–
Comment and Annotation Conventions
# Full-line comment — ignored by parser
## Inline end-of-row comment — must come after all data fields
# Indented comment — used for sub-block explanations
# ALERT: flag for conditions requiring engineer attention
# WARN: non-critical advisory note
-–
Token Efficiency Checklists
Before Writing Any Block
- [ ] Are all IDs using the short symbolic format (N1, M2, S3, E4, LC5, CB6)?
- [ ] Are floats rounded to 4 significant figures?
- [ ] Are units declared in
[HEADER]and not repeated on individual values? - [ ] Is the
[GRID]block applicable instead of listing every node? - [ ] Can
auto_codereplace an explicit[COMBINATIONS]table?
Before Writing Loads
- [ ] Are loads assigned to element groups rather than individual element IDs wherever the load is uniform across a group?
- [ ] Are dashes used for zero-load DOFs rather than writing
0?
Before Writing Results
- [ ] Are results stored as envelopes (max/min + combo) rather than full output tables?
- [ ] Are dash characters used for non-critical force components?
- [ ] Is
[UTILISATION]populated for all designed elements?
-–
Block Ordering Summary
[HEADER] ← mandatory, always first
[DEFAULTS] ← mandatory, always second
[NODES] or [GRID] ← geometry backbone
[GROUPS] ← optional but strongly recommended for regular models
[MATERIALS] ← all material classes in order: STEEL, CONCRETE, REBAR, TIMBER
[SECTIONS] ← steel first, then RC, in ascending ID order
[ELEMENTS] ← FRAME first, then SHELL, then LINK
[OFFSETS] ← optional, immediately after [ELEMENTS]
[JOINTS] ← supports, then semi-rigid connections
[DIAPHRAGMS] ← optional, after [JOINTS]
[LOAD_CASES] ← all cases before any combinations
[SEISMIC] ← optional sub-block, immediately after [LOAD_CASES]
[COMBINATIONS] ← or auto_code single line
[LOADS] ← point, distributed, area, then profile blocks
[WIND_PROFILE] ← optional, after [LOADS]
[MOVING_LOADS] ← optional, after [WIND_PROFILE]
[RESULTS] ← optional; omit if model has not been analysed yet
[FRAME_ENVELOPES]
[DISP_ENVELOPES]
[REACTION_ENVELOPES]
[DRIFT_SUMMARY]
[DEFLECTION_SUMMARY]
[UTILISATION] ← load this block first when answering design review queries
-–
Quick Reference — All Tokens
| Category | Tokens |
|---|---|
| Material classes | STEEL CONCRETE REBAR TIMBER GENERIC |
| Concrete behavior | LIN MAN-P PK |
| Section types (steel) | CATALOGUE I C T BOX PIPE PLATE COMPOUND TAPER STEPPED EXPLICIT |
| Section types (RC) | RC_RECT RC_BEAM RC_TBEAM RC_CIRC RC_SLAB RC_FLAT_SLB |
| Element classes | FRAME SHELL LINK SOLID |
| Shell type | thin thick |
| Link type | SPRING ISOLATOR GAP DAMPER |
| DOF release labels | Fx Fy Fz Mx My Mz |
| Support shortcuts | FIXED PINNED ROLLER_X ROLLER_Y ROLLER_Z |
| Load case types | DEAD LIVE WIND SEISMIC THERMAL NOTIONAL MOVING |
| Combination types | U S A F |
| Load types | UNIFORM TRAPEZOIDAL TRIANGULAR POINT_SPAN PRESSURE SELF_WT THERMAL |
| Load csys | GLOBAL LOCAL |
| Shell face | TOP BOTTOM BOTH |
| Design status | OK FAIL WARN |
| UR check tokens | PM_interact Vy_shear Vz_shear Mz_flexure My_flexure axial_tens axial_comp torsion stability deflection drift |