SutranetTower — User Manual
A beginner-friendly guide to designing and analysing lattice communication towers — either 3-leg equilateral-triangular or 4-leg square cross-section — using SutranetTower, the tower engineering analysis app by Sutranet, live at www.sutranet.co.in. Covers IS 875 Part 3 wind loading, a full 3D finite-element solve, and IS 17740 / IS 800 member capacity checks — and, for US towers, the ANSI/TIA-222-I design path.
IS 875 Part 3:2015 IS 17740:2022 IS 800:2007 ANSI/TIA-222-I 3-leg & 4-leg OpenSeesPy 3D FEM1.Introduction
SutranetTower is a web application by Sutranet for designing lattice telecom towers — either a 3-leg (equilateral-triangular) or 4-leg (square) cross-section, selected under Tower Type. You describe the tower’s geometry, member sizes, bracing, wind environment and antenna loads in a structured form (or as a JSON file), and the app (the list below describes the Indian-code path; for US towers see ANSI/TIA-222-I):
- Computes wind loads on every section per IS 875 Part 3:2015.
- Builds the real 3D lattice (legs, diagonals, horizontals) and solves it with OpenSeesPy, a finite-element engine.
- Checks every member against tension and compression (buckling) capacity per IS 17740:2022 / IS 800:2007.
- Produces a single self-contained HTML report you can open, share, or archive — and, optionally, a STAAD.Pro .std file for independent cross-checking.
2.Key Concepts
Slope
A tapering segment of the tower defined by its bottom_width, top_width and
height. A tower is built from one or more stacked slopes, bottom to top.
Section
A sub-division within a slope with its own height, panel count, bracing pattern and member sizes
(section_id e.g. S1, S2…).
This is the level at which you assign leg/diagonal/horizontal pipe or angle sections.
Panel
The smallest repeating bracing unit inside a section, set by num_panels. Each panel
gets the section’s bracing pattern repeated on every face by rotational symmetry
(120° on a 3-leg tower, 90° on a 4-leg tower).
Tower type
The Tower Type node also holds the Design Standard: IS (IS 875 Part 3 + IS 17740 / IS 800) or ANSI/TIA-222-I.
Number of legs, set under Tower Type: 3-leg (equilateral triangle, 3 faces) or 4-leg (square, 4 faces). This drives the leg/face geometry, the wind-load tables (IS 875 Table 33/34/35) and the antenna/ladder mount indices.
Leg base supports, also under Tower Type: Pinned (the default) holds each leg base in position and against twisting about the vertical axis, and lets the leg rotate in bending; Fixed also holds the bending rotations. Pinned gives slightly higher forces in the bottom-panel bracing. The report states which was used, and the STAAD export writes the same supports. In tower.json the key is "base_fixity": "pinned" or "fixed"; a file without it is analysed pinned.
Bending check on beam elements (IS 800), also under Tower Type, IS towers only: IS 17740 has the legs modelled as beams but gives no bending check for lattice members, and refers provisions it does not cover to IS 800. Off (the default) checks every member for axial tension and compression only; moments in legs and in bracing modelled as beam-columns are shown on the report and not checked. On also checks legs for axial force with bending by IS 800 Cl. 9.3.1 and 9.3.2.2, and diagonals modelled as beam-columns by N/Nd + M/Md. The report states which was used. In tower.json the key is "is800_bending_check": true; a file without it is analysed with the check off. A TIA-222-I tower always checks its legs for bending and does not take this key.
Face / Leg / Diagonal / Horizontal
Each face has 2 inclined legs (corner chords) shared with its neighbour, diagonal bracing members, and optional horizontals at panel breaks. Even-leg (4-leg) towers can also carry plan bracing across the ring for torsional rigidity.
3.Quick Start
- Open the app at www.sutranet.co.in. Open the Data ▾ menu in the header and click Load Example to start from a working 40 m tower instead of a blank one.
- In the Tower Builder tab, walk the left-hand tree from the top: Tower Type, Wind Parameters, Analysis Config, Antennas, Mounts & Platforms, Lighting, Signs & Anti-climb, Climbing Ladder, Feed Lines, Ice & Seismic (Ice, Seismic & Tornado on a TIA-222-I tower), then each slope (S1, S2…) and the sections inside it. A required input that is still blank is outlined in red. If you click Run Analysis with one missing, a message names it and the builder opens the node where it is entered.
- (Optional) Click the ✦ Review Inputs button to get an automated sanity check before you spend time waiting on the solve.
- Click Run Analysis. The app polls progress every 1.5 s until the job finishes (typically seconds to low minutes, hard-capped at 180 s — see Limitations).
- Review the report in the Analysis Result tab: start with Summary for the headline max utilisation and drift, then drill into Capacity and Lattice Forces for any overstressed members.
- Use Data ▾ → Export JSON to save your tower definition, Save the run to keep it in History, and (optionally) download the STAAD .std file for an independent cross-check.
4.Wind Input
Wind loading follows IS 875 Part 3:2015. The design wind speed at any height is:
Vz = Vb × k1 × k2 × k3 × k4
pz = 0.6 × Vz² (design wind pressure, N/m²)
The Wind Parameters node holds these inputs. The first column gives the builder’s
label and, below it, the key in tower.json.
| Field | Meaning | Default | Notes |
|---|---|---|---|
Basic Wind Speed Vbbasic_wind_speed_ms | Basic wind speed at 10 m, flat open terrain | required | Your site’s value from IS 875 Part 3 Fig. 1 — a run without it is refused. It is expected to be one of the map’s six speeds (33, 39, 44, 47, 50, 55 m/s); another value is analysed as entered, with a warning, and k1 is read at the nearest map speed |
Terrain Categoryterrain_category | 1 = open sea, 2 = open/scattered obstructions, 3 = dense obstructions/suburbs, 4 = dense urban / large city centres | required | IS 875 Part 3 Cl. 6.3.2; drives the k2 height profile. A run without it, or with a value other than 1–4, is refused |
Risk Category (IS 17740 Table 1)risk_category (top level of the file) | I = unmanned site in open country or optional services (25-year design life); II = every tower that is not I or III (50 years); III = urban location, vital telecom, or failure may cause injury (100 years) | required | IS 17740 Cl. 7.3.1. There is no default; the run is blocked until you choose. It sets k1 (next row). Category IV exists on TIA-222-I towers only |
k1 — Risk / Probabilityk1 | Risk coefficient (probability factor, IS 875 Table 1) | from the Risk Category | Filled in from the tower’s Risk Category and Vb: 0.89–0.94, 1.0 or 1.05–1.08. You may type your own value; one below the table is accepted and flagged on the report. Click Use the Table 1 value to go back to the table |
k3 — Topographyk3 | Topography factor (IS 875 Part 3 Cl. 6.3.3) | required | Enter 1.0 for level ground, up to 1.36 on hills, cliffs and escarpments. A run without it is refused. The program uses the value you enter; it does not work out Annex C for you, and the report says so |
Terrain upwind of the site (optional) and Fetch of the site’s terrain (km)terrain_change | A change of terrain category upwind (IS 875 Part 3 Cl. 6.3.2.4, Table 3, Annex B) | optional | Leave blank when the site’s terrain category extends far upwind. Otherwise choose the upwind category and the distance from the tower to where the terrain changes (0.2 to 50 km). The wind profile then changes at the developed height the panel shows. It cannot be combined with the gust-factor method: such a run is refused, and the fallback is to enter the less rough of the two categories |
Cyclone region (IS 875-3 Cl. 6.3.4)cyclone_region | Is the site in the ~60 km coastal belt of the east coast or the Gujarat coast? (IS 875 Part 3 Cl. 6.3.4) | required | true sets Kd = 1.0 (Cl. 7.2.1) and k4 = 1.30 for a communication tower (Cl. 6.3.4) on the tower and every appurtenance; a declared Kd other than 1.0, or a k4 below 1.30, is refused. The site lookup pre-fills “yes” when the coast is within 60 km — it cannot tell which coast, so confirm it |
k4 — Importancek4 | Importance factor for cyclonic regions (Cl. 6.3.4) | 1.0 | Set to 1.30 and locked by Cyclone region = Yes; 1.0 outside the cyclone belt |
Gust Factor G overridegust_factor | A factor on the static design wind force | 1.0 (builder) | The static method of IS 875 Part 3 Cl. 6 and 7 has no gust factor, so leave it at 1.0. The builder always writes the value shown. A hand-written file that leaves the key out gets an estimated factor from the terrain turbulence (typically 2.5 to 3.8), which multiplies the static wind; state 1.0 unless you intend that. On a gust-factor run (section 9) this input is not used |
Kd — Wind Directionalitykd | Directionality factor (IS 875 Part 3 Cl. 7.2.1) | 0.90 | Set to 1.0 and locked in a cyclone region |
Kc — Combination Factorkc | Combination factor (IS 875 Part 3 Cl. 7.2) | 1.0 | 1.0 for an open lattice tower. Ka (area averaging, Table 4) is worked out by the program for each panel. The design pressure is never taken below 0.70 pz (Cl. 7.2) |
Analysis Directionsdirections_deg | Wind azimuths analysed | 3-leg: 0–330° in 30° steps (12 pts); 4-leg: 0/15/30/45° octant | 0° aligns with model +Y, 90° with +X. The 4-leg octant relies on square symmetry — it auto-expands to the full 0–345° rose when antennas/a ladder make the loading asymmetric. The envelope of all directions governs. Older files with the key direction_deg are still read |
Whether the static method or the gust-factor method (IS 875 Part 3 Cl. 10.2) is used is set under Analysis Config → Wind Method; see section 9.
Wind speed lookup by location
Under Site Location Lookup at the top of Wind Parameters, enter the site’s Latitude and Longitude and click → Lookup. The panel shows the basic wind speed from the IS 875 wind map and the distance to the coast; click ✓ Apply Vb to use the speed, or View on Map to check the location. When the coast is within 60 km the lookup pre-fills Cyclone region with “Yes”, with a note: it cannot tell which coast, so confirm it.
basic_wind_speed_ms and terrain_category manually.
How force coefficients are applied
The Cf table used depends on both the member shape and the tower type (IS 875 Cl. 7.4.3.5):
- Flat-sided (angle) members use Table 33: Cf depends on solidity ratio φ. On a 3-leg tower it is constant for all wind directions; on a 4-leg (square) tower the face→corner increase (Cl. 7.4.3.5(b), 1.0→1.2×) is interpolated linearly by wind angle.
- Round (pipe) members use Table 35 on a 3-leg tower and
Table 34 (face vs. corner Cf) on a 4-leg tower. Cf depends on solidity ratio φ
and flow regime, set by
D×V̄d(shown as DVd), where D is the member diameter and V̄d is the design hourly-mean wind speed at that height (Vb·k1·k2,i·k3·k4, IS 875 Part 3 Cl. 6.4) — not the 3-second gust speed Vz that the pressure uses. The hourly-mean speed is roughly two-thirds of Vz, so more members fall in the higher-Cf regime than a check on Vz would give. Below 6 m²/s the flow is subcritical (higher Cf, ~1.3–1.8); at/above 6 m²/s it is supercritical (lower Cf, ~0.8–1.2). - Solidity ratio φ is computed per section from the actual projected member areas vs. the gross panel face area — you don’t set φ directly, it falls out of your member sizing.
5.Slopes & Sections
Build the tower top-down or bottom-up in the tree: add Slopes for each taper change, then one or more Sections inside each slope.
| Field (builder label / JSON key) | Level | Meaning |
|---|---|---|
Bottom Face Width / Top Face Widthbottom_width / top_width | Slope | Face width (m) at the bottom/top of that slope |
Slope Height / Heightheight | Slope / Section | Vertical extent (m) |
Section IDsection_id | Section | Unique label, e.g. S1 |
No. of Panelsnum_panels | Section | Number of bracing panels stacked in this section (≥ 1) |
Panel Heightpanel_height | Section | Per-panel height; must equal height / num_panels |
Bracing Patternbracing | Section | Pattern name/alias — see Bracing Patterns |
- The sum of a slope’s section heights must equal that slope’s
height(the slope height is the width-interpolation reference; a mismatch would silently build a taller/shorter tower). - Each section’s
num_panels×panel_heightmust equal itsheight(a mismatch leaves a gap/overlap at the panel nodes). A ~1% tolerance absorbs rounded values like 3 × 1.6667 = 5.0001 m.
6.Member Sections
Each section has a Leg section (leg_section), a Diagonal section
(diagonal_section), a Horizontal (ring beam) (horizontal_section) when
the bracing pattern places horizontal members, and a section for each tag listed under
Redundant members (redundant_sections). If the pattern places horizontals or
redundants that have no section, the run is refused unless Auto-Size is on; the
diagonal size is never borrowed. Four section types are offered (Section type):
Pipe (CHS)
| Field | Meaning |
|---|---|
Outer Diameter — OD (od) | Outer diameter (mm) |
Wall Thickness — t (thk) | Wall thickness (mm) |
Steel grade (grade) | Steel grade. On an IS tower choose an IS 2062 grade or, for a pipe only, an IS 1161 tube grade (YSt 210, 240, 310, 355, 420, 460), which carries its own ultimate strength. A tube grade on an angle or a solid round bar is refused. A plain number in an older file is still read as a yield strength with the IS 2062 ultimate strength |
Solid round bar (S.R.)
Enter the Diameter — Ø ({"type": "solid_round", "od": …}) and an
IS 2062 grade. It is checked as a round member (buckling curve ‘a’). A bolt hole in a solid bar
is deducted across the full diameter.
Single equal angle (ISA, IS 808:2021)
| Field | Meaning |
|---|---|
Angle designation (designation) | Free text, e.g. ISA 65x65x6 or shorthand ISA 50x5 |
Steel grade (grade) | An IS 2062 grade |
Double angle (back-to-back)
Same fields as a single angle, plus Gap (gap_mm, back-to-back spacing, default
10 mm), which shifts the combined Iyy via the parallel-axis theorem. On a diagonal, horizontal or
redundant, Stitch connectors (IS 17740 Cl. 12.2.2) describes the intermediate connectors:
connector type, the largest spacing ai and the number of intermediate connectors n. The modified
slenderness of Cl. 12.2.2(b) is then used. Left as Not declared, the member takes the strictest of
the three cases. For two angles connected only at their ends this gives the same slenderness as before; it
matters when a member is split at a crossover.
End connection of bracing (IS 17740 Annex F)
Each diagonal, horizontal and redundant has an End connection setting
(end_connection). It selects the row of IS 17740 Annex F Table 6 that turns the
member’s L/r into the equivalent slenderness KL/r used in its compression check. It does not set the
net section in tension; that comes from the connections block.
| Choice | JSON value | Annex F Table 6 |
|---|---|---|
| Single bolt/rivet at each end | single_bolt (default for a single angle) | Eccentric both ends: KL/r = 60 + 0.5·L/r up to L/r 120; KL/r = L/r above 120 (a single bolt gives no restraint, Note 6) |
| 2+ bolts/rivets or welded | multi_bolt_or_weld | Up to L/r 120 as above; above 120, partial restraint at both ends: 46.2 + 0.615·L/r |
| Partial restraint at ONE end only | partial_one_end | Above L/r 120: 28.6 + 0.762·L/r |
| Concentric one end, eccentric the other | concentric_one_end | Up to L/r 120: 30 + 0.75·L/r |
The table applies to single angles as written. A double angle is treated as concentric: up to L/r 120
KL/r = L/r, and above 120 the row of its end connection. A pipe is checked on its geometric L/r
whatever the end connection. A solid round bar with a single-bolt or flattened end takes the eccentric rows,
and with a welded or multi-bolt end its geometric L/r. Round bracing
also has Leg connection (Annex F-8) (leg_connection): choose Welded directly to
leg to use the effective length factors K of Annex F-8; leave it unset, or choose Bolted to
leg, for K = 1.0. An end connection value the table does not list is refused. The other
choices in the list (gusset only, welded direct to legs) belong to TIA-222-I and are hidden on an IS
tower.
Bolt holes & net section
On an IS tower, a member’s bolt holes are described only in the section’s
connections block: the bolt line of its entry is used for net-section rupture and
block shear (IS 800 Cl. 6.3, 6.4), and {"welded": true} declares a welded end. A member
with no entry is checked on gross yield only and the report says so. The older
n_bolt_holes / bolt_hole_dia keys on a member are refused on IS towers;
they remain in use on TIA-222-I towers. fu (ultimate strength) is taken from the grade.
Connection design (optional)
Each section can carry a bolted-connection check, enabled by the Connection design toggle on that section in the Tower Builder. The spec is edited as a small raw-JSON block; leave a sub-key out to skip that connection. The checks are driven by the factored axial demand that the section’s members actually attract in the analysis (tension for the flange, axial magnitude for bracing), and every result appears in the report’s Connections tab. All checks use IS 800:2007 partial safety factors: γm0 = 1.10, γm1 = 1.25, γmb = 1.25 (bolts), γmw = 1.25 (shop weld).
| Sub-key | Applies to | Basis & checks |
|---|---|---|
flange | Leg splice for a pipe (CHS) leg | Ring-flange splice: bolt tension + prying (IS 800 §10.3.5 / §10.4.7), annular-plate flexural mechanism (EN 1993-1-8 §6.2.4 T-stub, Mode 1/2), and the shell-to-plate fillet weld (§10.5). Governing utilisation across the three. |
leg_splice | Leg splice for an angle / double-angle leg | Bolted lap / cover-plate splice in double shear (IS 800 §10.3). Use this or flange to match the leg type — not both. |
diag_bracing | Diagonals / horizontals | Bolted shear connection: bolt shear (§10.3.3, incl. long-joint βlj), bolt bearing (§10.3.4), net-section rupture (§6.3) and block shear (§6.4.1). Governing utilisation across all. |
redundant_bracing | Redundant members, by tag | Bracing-shear spec, given either per tag as a {"r1": {…}, "r2": {…}} map keyed by the same tags as redundant_sections, or as one flat spec shared by every tag. A tag omitted from the map is left undetailed; a tag named in the map that the section does not define is an error, not a no-op. |
Bolted shear connections — what each field measures
Applies to diag_bracing, horiz_bracing, redundant_bracing and
leg_splice — they all share one field set. All dimensions are in
millimetres, strengths in MPa.
end_dist is measured along the line of force to the edge the
bolt bears toward; edge_dist is transverse to it. n_bolts_line counts the bolts
in the line of force (2 here), and pitch is the spacing between them — leave
pitch at 0 for a single bolt.n_shear_planes = 2. A single lap (member to one plate) crosses one, so
n_shear_planes = 1 — that halves the bolt shear capacity, and it is the
usual detail for redundants. t_ply is the governing thickness in bearing: the
thinner of the member and the sum of the plates on one side.| Field | Meaning | Notes |
|---|---|---|
d_bolt | Nominal bolt diameter | Drives shear area and bearing. |
d_hole | Hole diameter | Bolt + clearance (typ. +2 mm to M24). Sets net section and the Cl. 10.2.4.2 minimum distances. |
bolt_grade | Bolt property class, IS 800 Table 1 | For example "8.8". Gives the bolt’s ultimate and yield strength at its diameter (class 8.8 is 800/640 MPa up to 16 mm and 830/660 MPa above; 4.6 to 6.8 yields per Amendment No. 2). Classes 4.6, 4.8, 5.6, 5.8, 6.8, 8.8, 9.8, 10.9 and 12.9 are accepted; any other is refused. Do not also give fub_bolt or fyb_bolt: stating both is refused. |
fub_bolt | Bolt ultimate strength (instead of bolt_grade) | 800 MPa when neither this nor bolt_grade is given. Where the bolt yield is needed and fyb_bolt is not given, it is read from Table 1 for the class this value names (800 → 8.8, 1000 → 10.9 …); a value that names no class is refused. |
n_shear_planes | Shear planes crossed | Defaults to 2. Set 1 for a single lap — the usual redundant detail. |
threads_in_plane | Threads in the shear plane? | Default true (uses the 0.78 net area). false uses the shank. |
t_ply, fy_ply | Governing ply thickness & yield | fu is derived from fy by the IS 2062 grade map. |
width_gross | Gross width of the connected element | Net section = (width_gross − d_hole) × t_ply. Omit (0) to skip the rupture check. |
end_dist, edge_dist | End and edge distances | See the figure. end_dist also enters the bearing kb; leaving it at 0 overstates bearing capacity. |
edge_type | How the edge was cut | Required, no default — see Detailing below. |
welded | true for a welded member end | Write {"welded": true} as the whole entry. The member is then checked with no bolt holes. Cannot be combined with bolt details. |
both_legs_connected | leg_splice of an angle leg only | Required, true or false: whether the splice bolts pass through both legs of the leg angle. It decides the leg’s net section. |
The bolt line of each entry (d_hole, n_bolts_line, pitch, end_dist, edge_dist) is also used for the member’s own tension check: net-section rupture and block shear (IS 800 Cl. 6.3, 6.4). A member with no entry is checked on gross yield only, and the report marks its net section and block shear as not checked. | ||
gc_mm | Bracing blocks only: distance from the heel of a single angle to the centroid of its bolt or weld group (mm) | IS 17740 Cl. 10.4.4.2. When it is past the centreline of the connected leg, the member’s compression capacity is multiplied by b/2g. Leave it out for normal framing; do not enter 0. A block holding only gc_mm gets no connection check. Not applied when the connected leg is 75 mm or less or L/r > 120. |
pitch, n_bolts_line | Spacing and count in the line of force | Long joints (> 15·d) get the Cl. 10.3.3.1 βlj reduction automatically. |
bearing_credit | leg_splice only | true halves the compressive demand per IS 800 §10.8 full-contact bearing. A documented simplification — confirm against your adopted reading. |
Ring-flange leg splice — what each field measures
Applies to flange, used when the leg is a pipe (CHS).
pcd and plate outside diameter
plate_od are diameters, not radii. The prying levers m (bolt axis to shell wall,
less 0.8√2·weld_throat) and e (bolt axis to plate edge) are computed
from them — a large pcd relative to the pipe means a long lever and a high prying
force.| Field | Meaning | Notes |
|---|---|---|
n_bolts | Bolts on the pitch circle | Assumed equally spaced. |
d_bolt | Nominal bolt diameter | — |
pcd | Bolt pitch-circle diameter | Must clear the pipe OD; sets the prying lever m. |
plate_thickness | Flange plate thickness | Drives the plate flexural mechanism — the usual governing mode. |
plate_od | Plate outside diameter | Sets the edge lever e. |
plate_fy | Plate yield | fu derived from fy. |
bolt_grade, or fub_bolt / fyb_bolt | Bolt strength | As for the bolted shear fields above. Prefer bolt_grade: an 8.8 bolt above 16 mm is 830/660 MPa, not 800/640. |
weld_throat | Fillet weld effective throat | Shell to plate. 0 means full-penetration — the weld check is then skipped, not failed. |
pretensioned | Bolts pretensioned? | Sets β in Cl. 10.4.7 prying (1 if true, else 2). Default false. |
Detailing (IS 800 §10.2). Every bolted-shear spec is also checked against the
spacing limits the capacity equations assume: minimum end and edge distance (Cl. 10.2.4.2),
maximum edge distance 12·t·ε (Cl. 10.2.4.3), and minimum pitch 2.5·d
(Cl. 10.2.2). The minimum end/edge distance depends on how the edge was prepared, so
edge_type is required and has no default —
"sheared" / "hand_flame_cut" give 1.7× the hole diameter,
"rolled" / "machine_flame_cut" / "sawn" /
"planed" give 1.5×. Omitting it reports the distance as unchecked rather than
assuming a factor; an unrecognised value is an error. A detailing violation fails the connection
but does not appear in its utilisation ratio, which stays a pure strength figure.
A bolt smaller than 12 mm is also reported as a detailing violation (IS 17740 Cl. 13.1.2),
on bracing ends, leg splices and ring flanges.
Note the Cl. 10.2.3.1 maximum pitch and the corrosive-exposure edge cap are
not checked.
edge_type | Edge preparation | Min. end & edge distance | M16 (d0=18) | M20 (d0=22) | M24 (d0=26) |
|---|---|---|---|---|---|
"sheared""hand_flame_cut" | Sheared or hand-flame cut | 1.7 × hole dia | 30.6 mm | 37.4 mm | 44.2 mm |
"rolled""machine_flame_cut""sawn" / "planed" | Rolled, machine-flame cut, sawn or planed | 1.5 × hole dia | 27.0 mm | 33.0 mm | 39.0 mm |
edge_type reports them as unchecked rather than resolving either way, and a
misspelt value is an error rather than a fallback.
JSON schema
The connections object sits on a section, alongside
leg_section / diagonal_section / redundant_sections. Every sub-key
is optional — omit one to skip that connection entirely. Notation below:
(required) means the analysis raises if the key is absent;
= value is the default applied when it is.
"connections": { // optional, per section
"flange": { // leg splice — PIPE (CHS) leg only
"n_bolts": integer (required) // bolts on the pitch circle
"d_bolt": number (required) // mm
"pcd": number (required) // mm, bolt pitch-circle DIAMETER
"plate_thickness": number (required) // mm
"plate_od": number (required) // mm, plate outside DIAMETER
"plate_fy": number = 250 // MPa
"plate_fu": number = from plate_fy
"bolt_grade": string // IS 800 Table 1 class, e.g. "8.8"; or:
"fub_bolt": number = 800 // MPa; not with bolt_grade
"fyb_bolt": number = from the class fub_bolt names
"pretensioned": boolean = false // sets β in Cl. 10.4.7 prying
"weld_throat": number = 0 // mm; 0 ⇒ full pen, weld check SKIPPED
"fu_weld": number = 410 // MPa
"fu_pipe": number = from the leg grade
}, // pipe OD/thk/fy come from leg_section
"leg_splice": { // leg splice — ANGLE / DOUBLE-ANGLE leg only
// …all the bolted-shear fields below, plus:
"both_legs_connected": boolean (required) // bolts through both legs of the leg angle?
"bearing_credit": boolean = false // true ⇒ halve compressive demand (§10.8)
"t_ply": number = 8.0 // NOTE: 6.4 for the bracing blocks
},
"diag_bracing": { …bolted-shear fields… }, // diagonals
"horiz_bracing": { …bolted-shear fields… }, // horizontals
"redundant_bracing": // EITHER one shared spec…
{ …bolted-shear fields… }
// …OR one spec per redundant tag, keyed as in "redundant_sections":
{ "r1": { …fields… }, "r2": { …fields… } }
}
// ── bolted-shear fields (diag_bracing, horiz_bracing,
// redundant_bracing and leg_splice all share these) ──
"d_bolt": number (required) // mm
"d_hole": number (required) // mm, = d_bolt + clearance
"edge_type": string (required if end_dist/edge_dist given)
// "sheared" | "hand_flame_cut"
// "rolled" | "machine_flame_cut" | "sawn" | "planed"
"bolt_grade": string // IS 800 Table 1 class, e.g. "8.8"; or:
"fub_bolt": number = 800 // MPa; not with bolt_grade
"n_shear_planes": integer = 2 // 1 = single lap ← usual for redundants
"threads_in_plane": boolean = true // false ⇒ shank area, not 0.78·A
"t_ply": number = 6.4 // mm, governing thickness in bearing
"fy_ply": number = 250 // MPa
"fu_ply": number = from fy_ply
"width_gross": number = 0 // mm; 0 ⇒ net-section check SKIPPED
"end_dist": number = 0 // mm; 0 ⇒ inflates bearing k_b
"edge_dist": number = 0 // mm
"pitch": number = 0 // mm, between bolts in line of force
"n_bolts_line": integer = 1 // bolts in the line of force
"gc_mm": number (optional) // bracing blocks only; Cl. 10.4.4.2, never 0
// a welded member end instead of bolt details:
{ "welded": true }
When a plate’s ultimate strength (fu_ply, plate_fu) is not given, it is
derived from its fy through the IS 2062 grade map (250→410, 300→440,
310→450, 350→490 MPa; anything else → 410).
A horiz_bracing entry on a section whose bracing pattern places no horizontal member has
nothing to check: it is listed as a warning and the report marks it NOT CHECKED.
n_shear_planes defaults to 2, so a single-lap redundant left unset is
credited with double the bolt shear it has. And end_dist defaults to 0,
which drops the e/(3d0) term from the bearing kb and overstates bearing
capacity — the §10.2 detailing check reports that one, but set the distance rather than
relying on the report to catch it. width_gross and weld_throat at 0 skip
their checks entirely, which is intended but worth knowing.
"redundent" instead of "redundant_bracing" produces a report with
no redundant connection results at all and no warning anywhere. Copy the names from this
schema; if a connection you configured is missing from the report’s Connections tab, a
misspelt key is the first thing to check.
A complete example
An angle-leg section with per-tag redundant detailing — r1 on M16 and the more
heavily loaded r2 on M20:
"connections": {
"leg_splice": {
"d_bolt": 20.0, "d_hole": 22.0, "bolt_grade": "8.8",
"n_shear_planes": 2, // cover plate each side of the angle
"t_ply": 8.0, "fy_ply": 250.0, "width_gross": 70.0,
"end_dist": 40.0, "edge_dist": 38.0, "edge_type": "sheared",
"pitch": 60.0, "n_bolts_line": 2,
"bearing_credit": true, // IS 800 §10.8 full-contact bearing
"both_legs_connected": true // required on an angle-leg splice
},
"diag_bracing": {
"d_bolt": 20.0, "d_hole": 22.0, "fub_bolt": 800.0,
"n_shear_planes": 1, // single lap onto the gusset
"t_ply": 8.0, "fy_ply": 250.0, "width_gross": 70.0,
"end_dist": 40.0, "edge_dist": 38.0, "edge_type": "sheared"
},
"redundant_bracing": { // keys match "redundant_sections"
"r1": {
"d_bolt": 16.0, "d_hole": 18.0, "fub_bolt": 800.0, "n_shear_planes": 1,
"t_ply": 6.0, "fy_ply": 250.0, "width_gross": 50.0,
"end_dist": 32.0, "edge_dist": 32.0, "edge_type": "sheared"
},
"r2": {
"d_bolt": 20.0, "d_hole": 22.0, "fub_bolt": 800.0, "n_shear_planes": 1,
"t_ply": 8.0, "fy_ply": 250.0, "width_gross": 70.0,
"end_dist": 45.0, "edge_dist": 38.0, "edge_type": "sheared"
}
}
}
The // comments are for this manual only — strip them, JSON has no comments. A single
flat spec is still accepted in place of the {"r1": …, "r2": …} map when every redundant tag
shares one detail. Swap leg_splice for flange if the leg is a pipe.
7.Bracing Patterns
Pick a bracing pattern per section from the dropdown (built from the editable
bracings.json library). Every face automatically receives the same pattern by rotational
symmetry (120° on a 3-leg tower, 90° on a 4-leg tower). Each pattern declares which leg counts it is
valid for (applicable_legs) — the dropdown only offers patterns valid for the current
Tower Type, and picking an incompatible one is rejected at run time with a clear error.
The shipped library is a deliberately small starter set of four standard patterns. Anything beyond these is user-defined: create your own in the Bracing Library editor and they are saved to your private library (they never modify the shipped set).
| Pattern | Aliases | Legs | Description |
|---|---|---|---|
| single | 1, warren, pratt | 3, 4 | Single diagonal per face, with a horizontal ring at each panel top (Warren / Pratt). The simplest usable pattern. |
| cross | 2, x, xx | 3, 4 | X-bracing (two crossing diagonals), unsplit at the crossover. No horizontal ring — the diagonals are the only load path (use single if you want a ring at each panel top). |
| k_brace | k, 5 | 3, 4 | Two half-diagonals rise from the bottom corners to a node at mid-span of the top horizontal ring, which is split at that node. The ring holds the apex in-plane, so it is not a mechanism. |
| x_plan4 | — | 4 | The 4-leg workhorse: X split at the crossover, plus opposite-face plan bracing through the crossover node (face_offset = 2). Gives the square ring torsional rigidity and shortens the diagonals’ out-of-plane buckling length (Annex F F-1). Needs a plan1 entry in the section’s redundant_sections (or auto_size). |
Plan bracing (4-leg towers)
A triangular ring is inherently rigid, but a square ring is not — so even-leg (4-leg) towers often
need plan bracing: horizontal diagonals across the ring that provide torsional/plan
rigidity and also shorten the out-of-plane buckling length of crossover X-braces. In the library editor
these appear as Plan Bracing (opposite-face links) alongside the legacy
Hip Members (adjacent-face links); both are saved into each pattern’s
redundant_links.
The Bracing Library editor
The Bracing Library tab is a single unified 3D editor — you author directly on the live 3D lattice (it replaces the older 2D Face Canvas / Hip / Plan views and the read-only preview). You still design one face — whatever you draw on the reference face is replicated to every other face automatically by rotational symmetry, so a pattern stays leg-count-agnostic. The tab has three regions plus two assistants:
- Pattern list (left) — every pattern with a small 2D thumbnail; + New, Clone, Delete. The list is filtered to patterns valid for the current Tower Type.
- 3D Pattern Editor (centre) — the interactive viewport: drag to rotate, scroll to zoom. Each face carries the fixed corner nodes bot_L, bot_R, top_L, top_R, and faces are labelled F0, F1…. You author by clicking one node then another: two nodes on the same face draw a same-face member; two nodes on different faces draw a cross-face (hip / plan) link with the face offset inferred automatically — there is no separate Hip/Plan mode. Click an existing member or cross-face line to split it with a node. A colour legend below the viewport keys diagonal / redundant / ring / cross-face / leg.
- Editing & controls (right) — the context panels that appear for the current action (draw-member / add-node, member type & OPS element, cross-face link tag, rings and redundant-link lists), plus the two assistants below.
- Pattern Health panel — four live checks (no duplicate members, all nodes connected, no bypassed nodes, all nodes have out-of-plane stiffness) that update as you edit. Fix reds before saving.
- Guidance panel — a rule-based (or AI-backed, if an API key is configured) helper. Click Explain current errors or ask a free-text question about the pattern.
Anatomy of a pattern
A pattern is a small record (stored in bracings.json) built from these pieces:
| Piece | What it is |
|---|---|
extra_nodes | Points you add on the face beyond the four corners. Most are placed at a fraction t (0–1) along a line between two existing nodes. A special x-intersect node is placed at the true geometric crossing of two lines (used for a real X crossover, e.g. the split X in x_plan4). |
face_members | The members drawn between two same-face nodes. Each has a type — diagonal, horizontal, or redundant — which decides its section (leg/diagonal/horizontal/redundant) and its KL/r limit (150 / 200 / 250). |
ops_element | The finite-element formulation for that member: Truss (axial-only, linear — the default for bracing), corotTruss (axial-only, geometrically nonlinear), or elasticBeamColumn (full 6-DOF beam). Set per member. |
redundant_links | Cross-face links authored in 3D. A Hip joins nodes on adjacent faces (face_offset = ±1); Plan bracing joins opposite faces (face_offset = num_legs/2, 4-leg only). Each may carry a tag so you can give it its own section. |
rings | A horizontal member auto-replicated all the way around the polygon at one node level (a full closed ring), authored by clicking the same node label on two adjacent faces in 3D. |
cross_nodes | A split point placed along a cross-face link (needs the two-face context to resolve). Only usable as a redundant-link endpoint — never as a same-face face_member endpoint. |
name / aliases / description | Identity. Aliases are alternate names the dropdown and JSON accept (e.g. x → cross). |
applicable_legs | Which tower types the pattern is valid for — a non-empty subset of {3, 4}. Set via the Applies to checkboxes. |
Step-by-step: creating a custom pattern
- Open the Bracing Library tab. Start from an existing pattern close to what you want (select it, then edit) rather than a blank face — it’s faster and less error-prone.
- Set the Tower Type you’re targeting in the Tower Builder first, so the 3D editor shows the correct 3-leg or 4-leg lattice while you work.
- Place nodes. In the 3D viewport click two existing nodes on the same face; in the panel that appears, drag Position t and click Add Node to drop a node at that fraction along the line between them. For a true X crossing, click ✕ X-intersect Node and then click the four endpoints of the two crossing lines — the app computes their intersection.
- Draw members. Click one node, then another on the same face; choose Diagonal, Horizontal or Redundant. Click an existing member to change its Type, its OPS element, or (for redundants) its Tag, or to remove it.
- Split, don’t bypass. If a node sits partway along a member’s path, that member must be drawn as two segments meeting at the node — never as one member that runs past it (see Do’s & Don’ts). Click a member (or a cross-face line) to split it at a node.
- (4-leg / stiffening) Add cross-face links in the same viewport: click a node on one face, then a node on a different face — the editor makes a Hip (adjacent face) or Plan-bracing (opposite face) link and infers the face offset automatically. Give it a Tag and Save Link. For a full horizontal ring, click the same node label on two adjacent faces and choose + Horizontal ring. Use the F0, F1… face labels to pick the intended adjacent/opposite face deliberately.
- Watch the Pattern Health panel. Resolve every red item; use Explain current errors for a plain-language fix.
- Open Pattern Settings & Save: set Name, Aliases, Description, and tick the Applies to (3-leg / 4-leg) boxes. Click Save Pattern (local).
- Save to server (built-in library for admins, or my patterns for a
private copy). The server re-validates with
validate_bracing_pattern()and rejects anything invalid. This step is required before the pattern can be used in an analysis. - Assign the pattern to a section in the Tower Builder, and give that section a
redundant_sectionfor each redundant Tag you used (or enable Auto-Size).
Do’s and Don’ts
✓ Do
- Start from a working pattern and modify it incrementally.
- Split every member at any node on its path (e.g. bot_L→mid + mid→top_R), so interior nodes are actually connected.
- Author leg-splitting nodes directly on the leg corners — a node on a leg must be defined as a fraction of bot_L→top_L (or bot_R→top_R), so the lattice builder physically splits the leg there.
- Give every diagonal/horizontal/redundant a section in the section that uses the pattern; use distinct Tags for redundants that need different sizes.
- Add plan bracing on 4-leg towers whose face has an unbraced crossover — it supplies the plan/torsional rigidity a square ring lacks and shortens X-brace buckling lengths.
- Clear the Pattern Health panel and Save to server before running an analysis.
- Set
applicable_legshonestly — only tick 4-leg if the geometry really works on a square face.
✗ Don’t
- Don’t duplicate a member — two members on the same node pair (in either order) create a singular stiffness matrix.
- Don’t leave a node floating — every
extra_nodemust be an endpoint of at least one member, or it’s an unconstrained point. - Don’t let a member bypass an interior node on its path — the skipped node keeps an unconstrained out-of-plane DOF and the solve won’t converge.
- Don’t define a leg node transitively (e.g. bot_L→5 where 5 is itself the leg midpoint) — the leg beam runs straight past it, leaving a mechanism the solver can’t stabilise.
- Don’t reference a
cross_nodefrom a same-face member, and don’t chain cross_nodes — they only resolve as redundant-link endpoints. - Don’t reuse a redundant
tagon two different links — they would silently share one cross-section assignment. - Don’t rely on a 4-leg X-brace being self-braced out-of-plane — a square face has no inherent plan rigidity; without plan bracing it can fail slenderness.
validate_bracing_pattern() catches: a singular matrix, a floating node, or a zero-stiffness
mechanism that makes the OpenSeesPy Newton–Raphson solve diverge. Fixing them at authoring time is far
cheaper than debugging a non-converging run.
bracings.json and hot-reloaded in most deployments,
but if a new or edited pattern doesn’t appear in the dropdown or the analysis still uses the old
geometry, restart the server so it re-reads the file.
8.Antennas & Climbing Ladder
Antennas
Click + Add Antenna Group for each set of identical antennas. A group has an ID, a Type (panel / dish / generic), an Elevation, the Mass per antenna and its size (panel: width, height and depth; dish: diameter; generic: frontal area). The drag coefficient is worked out from the size (IS 875 Part 3 Table 20 for a panel, IS 17740 Annex L Table 7 for a dish); a value in Cd Override replaces it.
Under Mounting positions add one row per physical antenna:
| Field | Meaning |
|---|---|
| Mount (Face / Leg) and # | Whether the antenna is on a face or at a leg, and which one. Faces and legs are numbered from 0 with their azimuths shown. |
| Az | Local azimuth of the antenna: 0° points straight out from the face or leg, clockwise positive. |
| Arm | Arm length from the face or leg to the antenna. |
| Lat | Sideways offset as a fraction of the face width at that elevation (−0.5 to 0.5). |
| On | Shown when mounts are defined: hang the antenna on a mount. A frame then supplies the face or leg, azimuth and arm, and the group takes the mount’s elevation; a platform supplies the elevation only. |
The 3×120° Preset button (4×90° on a 4-leg tower) puts one antenna on each face. Each antenna contributes projected wind area, drag, dead weight and the torsion from its eccentric position at its elevation.
- Mount pipe (optional): the round pole the antenna clamps to — OD (use the actual outside diameter, 60.3 mm for a 2″ NPS pipe), length, Ca (default 1.2) and mass. Its wind area is added to each antenna. Shield behind antenna counts only the length that sticks out beyond the antenna.
- Shielding Factor (optional, 0 to 1, default 1.0): reduces the wind on an antenna on the leeward side of the tower body for each wind direction. It is not applied to dishes, whose coefficients already vary with the wind angle.
A dish must state its Dish type — without radome, with radome, with cylindrical shroud, or grid — on IS and TIA-222-I towers alike; there is no default and the run is blocked until it is chosen. The type selects the coefficient table (IS 17740 Annex L Table 7, or TIA-222-I Annex C). The dish load has three parts: a force along the wind, a force across it, and a twisting moment.
Climbing ladder
Toggle this on to add the climbing ladder, defined by Ladder A_eff, its exposed wind area per
metre of height (A_eff_m2_per_m — required, there is no default), its Drag
Coefficient Cd (about 1.2), Dead Weight per metre, its Mounting Location
(outside_face, inside_face, or
inside_axis) with face index and offset, and the elevation range it covers. A
ladder inside the tower takes the Shielding Factor Ka (default 0.9); one on the outside face takes
1.0. The Visual Dimensions only change the 3D drawing. On an IS tower the IS 17740
Cl. 7.2.2 climber load of 1330 N is applied at the ladder top; a tower without a ladder carries no
live load. The TIA-222-I load combinations carry no live load.
When the tower has an ice case, the ladder needs two more inputs under Ice on the ladder: the total length of rails and rungs in one metre of ladder (about 3.3 for two rails with 0.4 m rungs at 300 mm) and the rail / rung size. The run is blocked until both are entered.
This is the ladder only. Enter a cable tray / feedline ladder under Feed Lines as its own run (custom, component type Flat, with the tray width), and the cables as separate runs. Do not include trays or cables in the ladder’s area, or their wind load is counted twice.
Feed lines
Each Feed Lines run is a group of identical cables on one face, with its elevation range and arrangement. On an IS tower every line’s projected area is counted (IS 17740 Cl. 7.5, Cf 1.2 round / 2.0 flat); the block treatments are TIA-only (T6), so on an IS tower automatic is evaluated as individual and rectangular / round are not offered.
Mounts & Platforms
Mounting frames and platforms can be declared on an IS tower as well as on a TIA-222-I tower, under Mounts & Platforms. The kinds (sector frame, frame assembly, platform), the mount library and the optional 3D drawing are described in T6. On an IS tower you enter each mount’s wind area (EPA) and weight from the manufacturer’s data, and the wind on it is IS 17740 Cl. 7.5 at the same design pressure as the antennas. IS 17740 gives no shielding factor for mounts, so the reductions offered there (three or more frames at one level, low-profile platforms) are the ANSI/TIA-222-I values; the report says so. A platform on an IS tower must state its deck area, which carries the IS 17740 Cl. 7.2.2 live load of 1500 N/m².
Lighting, signs and anti-climb devices
The Lighting, Signs & Anti-climb node is for items that are neither antennas nor mounts. Each row needs an elevation, a mass and a wind area (EPA); zero is allowed, blank is not. With no placement the item acts on the tower axis in every wind direction. Give it a placement on a face or a leg and enter its EPA normal and sideways, and it can also twist the tower. When the tower has an ice case, enter the values in a table by ice thickness instead; a run whose ice thickness goes beyond the table is refused.
9.Analysis Config
The design standard (IS or ANSI/TIA-222-I) is chosen under Tower Type → Design Standard. The Analysis Config node then sets:
- Load Combination Standard (IS towers): IS 17740:2022 Table 2 (the default) or IS 800:2007 Table 4. Member ratios read roughly 7–12% lower on the IS 17740 set than on the IS 800 set (wind factor 1.4 against 1.5, dead load 1.1 against 1.5). Every strength combination of the chosen set, including the gravity-only ones, enters the member checks.
- Wind Method (IS towers): the checkbox Use the gust-factor method (IS 875 Part 3 Cl. 10.2). Off, the static method is used, and the run changes to the gust-factor method by itself only when the first natural frequency is below 1 Hz (IS 17740 Cl. 8.2). On, the wind on the structure and on antennas, ladder and feed lines is the hourly-mean pressure × G(z) whatever the frequency, and Kd, Ka and Kc are not applied. The gust-factor method cannot be combined with a change of terrain upwind; such a run is refused.
- Redundant Member Grade: one grade for every redundant member — IS 2062, or an IS 1161 tube grade when the redundants are pipes; on a TIA-222-I tower an ASTM grade, which is required when the tower has redundant members (there is no ASTM default).
- Auto-Size Members: tick Auto-size members left without a section, then choose whether to size unspecified horizontal and/or redundant members, and the number of Refinement Passes (2–3 is enough). The program picks the lightest IS 1161 pipe or IS 808 angle (AISC shapes on a TIA tower), in the family of the section’s diagonal, that passes slenderness, compression, tension and the minimum bracing resistance; the chosen member is then checked like any other. The run log lists each pick and marks one for which nothing in the catalogue passes (that member then fails its check). The picks are written into the run’s tower file, so reopening the run from History shows them. With Auto-Size off, a horizontal or redundant with no section stops the run; the diagonal size is never borrowed.
The element formulation for each diagonal and horizontal is defined per member in the Bracing Library — every pattern carries its own ops_element (choose corotTruss, Truss, or elasticBeamColumn on each member), so different sections can use different bracing behaviour. It is no longer a single tower-wide toggle in the Config node.
| Option | What it models | When to use |
|---|---|---|
| Truss (default) | Axial-only, geometrically linear | Standard pin-jointed bracing assumption for diagonals/horizontals; matches STAAD’s MEMBER TRUSS |
| corotTruss | Axial-only, geometrically nonlinear (accounts for P–Δ/rope-tension effects) | When you want the bracing’s own geometric nonlinearity included |
| elasticBeamColumn | Full 6-DOF beam with bending/shear stiffness | Use if the member is rigidly/moment-connected, or to study added lateral stiffness from bending continuity |
Legs always use elasticBeamColumn (they carry significant bending in addition to axial load and need full beam behaviour). For model-validation work, the per-member choice can be force-overridden from the CLI (not exposed in the UI):
python main.py tower.json --diag-type elasticBeamColumn --horizontal-type elasticBeamColumn --redundant-grade 350
Automatic planar-joint stabilization. Singular “planar-joint” nodes (for example an X/M crossover on a square 4-leg face with no plan bracing) have no out-of-plane stiffness when their bracing is axial-only truss, which would make the stiffness matrix singular. SutranetTower auto-stabilizes these joints — the offending truss bracing is promoted to elasticBeamColumn automatically (the PLS-TOWER / tnxTower approach), so the model stays solvable without manual edits. This is on by default; the analysis log lists exactly which joints were stabilized.
K-brace horizontals on IS towers. A horizontal that a diagonal ends on part-way along its length, with no plan bracing at that node, is modelled as a beam (elasticBeamColumn) on an IS tower, as IS 17740 Cl. 9.1(a)(2) asks for. The analysis log lists these members.
Dynamic wind, seismic & ice loads
(On a TIA-222-I tower see T7 instead.) Three additional IS 17740 load effects. Seismic and ice live under the Ice & Seismic builder node and are off by default; a plain tower report has neither unless you enable them. The gust-factor method is switched on under Analysis Config, and also engages by itself when the tower is flexible.
| Effect | Basis | When it engages |
|---|---|---|
| Gust-factor dynamic wind | IS 875 Pt 3:2015 Cl. 10.2 — along-wind gust factor G(z) on the hourly-mean pressure | Automatically when the first-mode frequency f₁ < 1.0 Hz (the IS 17740 Cl. 8.2 mandate), or on request with Use the gust-factor method under Analysis Config (wind.dynamic_method: true). f₁ is the IS 17740 Cl. 8.4(a) formula value, with the mass of the steel and of every antenna, mount pipe, ladder, feed line, mount and attachment; the report also shows a Rayleigh estimate for comparison. A gust-factor calculation that fails stops the run |
| Seismic | IS 1893 Part 4 (via the IS 17740 Foreword) — Aₕ = (Z/2)(Sa/g)(I/R), storey forces Qᵢ ∝ Wᵢhᵢ² | When the seismic block is enabled. The zone (II to V) is required. The Category (1 to 4, default 2 for a communication tower) sets the importance factor; you may raise it but not lower it. Response reduction defaults to 2.0 and soil to medium. The spectrum is IS 1893 (Part 4):2024 Annex C at 2% damping, and the period is found by Rayleigh’s method from one static solve. Two cases are added for every wind direction analysed: 1.1 DL + 1.0 E and 0.9 DL + 1.0 E. Vertical shaking is not included, and the report says so. A site-specific spectrum (at 2% damping) can be given in the tower file as seismic.site_spectrum; the builder keeps one that was imported but has no editor for it. A Category 1 or 2 tower without one gets a warning (IS 1893 Part 4 Cl. 7.1). The method is equivalent static; the condition that the first mode governs is not checked, and the report says so |
| Ice | IS 17740 Cl. 7.2.4 — height-escalated ice thickness, added weight and projected-area sleeve with round-member Cf | When Enable atmospheric ice is ticked and the design ice thickness is above zero (rare across most of India). In the builder both Design Ice Thickness tᵢ and Wind Speed with Ice start blank and the run is blocked until you enter them; tick Use full Vb to run the ice case at the basic wind speed instead of entering a speed. Ice is put on every member, on antennas and on the climbing ladder. Adds the case 1.1 DL + 1.0 ice + 1.0 wind on ice. An ice run needs the two ladder ice inputs (see 8) and cannot include a generic antenna, which has no dimensions to ice |
When enabled, the member-capacity check envelopes over all ultimate cases (wind + seismic + ice), and the report Summary tab gains dedicated dynamic / seismic / ice panels. A red banner also appears whenever f₁ < 1.0 Hz to flag that a dynamic gust-factor analysis is required.
T.US Design — ANSI/TIA-222-I
SutranetTower can design a tower to the US standard ANSI/TIA-222-I instead of the Indian
codes. Pick ANSI/TIA-222-I — US LRFD as the Design Standard under Tower Type
("design_standard": "TIA222I" in tower.json) and the whole run follows it: wind
loads, load combinations, member strength, connection design, the report and the STAAD export. The 3D
finite-element solve itself is the same for both standards.
This chapter covers only what is different on a TIA tower. Everything about geometry, slopes, sections and bracing patterns (sections 5–7) applies unchanged.
- The builder switches its input units to US customary (ft, in, kip, mph). You can switch back with the SI / US buttons; the saved file is always SI.
- Steel grades become ASTM (A572-50, A36, A500-C…) and sections come from the AISC shapes database.
- You must choose a Risk Category before the tower can run (T2).
- Design is LRFD: factored loads (TIA-222-I §2.3) against φ·Rn (Section 4).
T1. Scope
| Covered | Not covered (the run refuses, or you must check by hand) |
|---|---|
| Self-supporting lattice towers, 3-leg or 4-leg. Wind (§2.6), ice (§2.6.10), seismic (§2.7), tornado (§2.9), mounting frames and platforms (§2.6.11.2), feed lines, member strength (Section 4), bolted connections, ring flanges and U-bolts (§4.9, Annex Q). | Guyed masts, monopoles and tubular spines. Anchor rods and base plates (§4.9.9). Guy link plates. Slip-critical connections. Double-angle legs. The design of the mounts themselves (Section 16) — only their load on the tower is included. Foundations. |
T2. Site inputs (Wind Parameters)
None of these can be looked up by the app for a US site — the location lookup covers India only. Read them from the ASCE 7 Hazard Tool and the project documents.
| Field | JSON key | Where the value comes from | Default |
|---|---|---|---|
| Risk Category (Table 2-1) | risk_category (top level) |
I, II, III or IV, from the structure’s use and the consequence of failure (§2.2). If a failure could damage a neighbouring facility of higher category, use that category. | None — required |
| Basic wind speed V | wind.basic_wind_speed_ms |
The ASCE 7 wind map for your risk category (3-second gust at 10 m, Exposure C) | — |
| Exposure Category | wind.exposure |
B (urban, suburban, wooded), C (open terrain), D (flat, unobstructed, coastal) — Table 2-4 | C |
| Ground elevation zs | wind.ground_elevation_m |
Site elevation above sea level. Sets the air-density factor Ke = e−0.000119·zs (§2.6.8) | 0 |
| Topographic factor Kzt | wind.kzt |
1.0 on flat ground; higher on hills, ridges and escarpments (§2.6.6). Not calculated by the app. | 1.0 |
| Analysis directions | wind.directions_deg |
See T3 | Every face’s Table 2-6 directions |
The directionality factor Kd is fixed at 0.85 for latticed towers (Table 2-2). The IS inputs k1–k4, Kc and the gust factor do not apply and are hidden.
T3. Wind directions
TIA-222-I §2.6.11 requires each wind direction of Table 2-6 to be checked for each face:
- 4-leg (square): face-on and 45° to every face → 0°, 45°, 90° … 315° (8 directions).
- 3-leg (triangular): face-on, 60° and ±90° to every face → every 30° (12 directions).
Directions are measured from the normal to face 0. When you switch a tower to TIA-222-I, or change its leg count, the builder ticks these directions for you. You may add more (every 15°, say).
If you remove some and the tower carries antennas, a ladder, feed lines or mounts — anything that loads one face differently from another — a warning under the direction grid lists the missing directions, with an Add them button, and the report repeats the warning. A bare tower with no attachments is not warned: every face then behaves like face 0.
T4. How the wind load is calculated
qz = 0.613 × Kz × Kzt × Ks × Ke × Kd × V² (N/m², V in m/s)
Gh = 0.85 + 0.15 × (h/45.7 − 3), kept between 0.85 and 1.00
F = qz × Gh × (EPA)S
(EPA)S = Cf × [ Df × Af + Dr × Ar × Rr ]
- Kz varies with height and exposure (Table 2-4). It is evaluated at each section’s mid-height.
- Cf depends on the solidity ratio ε of the face: 4.0ε² − 5.9ε + 4.0 (square) or 3.4ε² − 4.7ε + 3.4 (triangular).
- Af is the projected area of flat members (angles), Ar of round members (pipes, solid bars). Round members are reduced by Rr, which depends on the flow regime.
- Df, Dr (Table 2-6) depend on where the wind comes from:
A direction between the tabulated ones takes the nearest one.Tower Face-on Other tabulated directions Square 1.0 45°: 1 + 0.75ε (max 1.2), flat and round Triangular 1.0 60°: Df 0.80 · ±90°: Df 0.85 · Dr 1.0 throughout - Tapered towers (§3.7.1): if the leg slope changes by more than 1° between
sections, and the projected legs meet within the tower height, extra load cases are added with the
wind pressure reduced above or below that point. They appear as
…_ap1hi/_ap1locases and feed the capacity check automatically.
T5. Members, materials and strength
Sections and grades
| Section type | How to enter it |
|---|---|
| Angle | AISC equal-leg designation, e.g. L4X4X3/8. Sizes below L2×2 (no longer in the AISC database) are included for older towers. |
| Double angle (back-to-back) | The single-angle designation plus the gap. For bracing, fill in Stitch connectors (§4.5.3): connector type, spacing a and number of intermediate connectors (§4.5.3). Without them the member is checked by the strictest §4.5.3 rule. Double-angle legs are refused — Table 4-3 has no rule for them. |
| Pipe / round HSS | An AISC designation such as HSS10X.500 (checked on its design wall thickness, 0.93× nominal), or leave it blank and enter OD and wall thickness. |
| Solid round bar | Diameter only. |
Grades are ASTM names (A572-42/50/55/60/65, A871-60/65, A588, A606, A36, A992, A529-50, A500-B/C). Yield and ultimate strengths are the ASTM minimums. Thickness-dependent reductions are not applied. The Redundant Member Grade under Analysis Config has no ASTM default: a tower with redundant members cannot run until one is chosen, and an IS grade is refused.
End connection of bracing
The end connection sets the bracing’s effective slenderness (Tables 4-4 and 4-5):
| Choice | Meaning |
|---|---|
| Single bolt / flattened end | Eccentric at both ends. |
| Welded / 2+ bolts, both ends | Concentric, with partial restraint from the member it connects to. |
| Welded / 2+ bolts to a gusset only | Connected only to a gusset, not also to the leg or restraining member: §4.5.2 gives no partial restraint. |
| Welded direct to legs — cut / continuous | Round bracing welded straight onto the legs (Table 4-5). “Cut” = separate pieces at the joint; “continuous” = one bar bent or layered through it. |
The IS-only choices (“partial restraint at one end”, “concentric one end”) are hidden on a TIA tower because Table 4-4 has no row for them.
What is checked
- Compression: φcFcrAg, with local buckling through the effective yield F′y (§4.5.4.1). Angles use the angle column curve, round members the AISC curve.
- Tension: the lesser of yield on the gross area and rupture on the effective net area (§4.6), with the prescribed shear-lag factor U.
- Slenderness: legs per Table 4-3; bracing per Table 4-4; crossing and K-bracing per Tables 4-6 / 4-7, using the actual connection points in your bracing pattern. A crossover only counts as supported if the plan or hip bracing there is triangulated (Figure 4-2).
- KL/r limits (§4.4.2): legs 150, diagonals and horizontals 200, redundants 250, tension-only members 300.
- Minimum bracing strength (§4.4.1, Tables 4-1 and 4-2): every bracing member is designed for at least the required bracing force from the legs it braces. Hip bracing uses Figure 4-2 note 3 instead. Redundants are usually sized by this minimum rather than by their analysis force.
- Legs in bending (§4.8.1): axial load plus the moment from leg continuity, with the B1 magnifier.
- Joint eccentricity (§4.4.4.2): if a single-angle brace is connected beyond the
centreline of the leg, enter
gc_mmin the connection block (T9). Otherwise normal framing is assumed.
Auto-size works on TIA towers too: it picks from the AISC catalogues and checks with the TIA rules above.
T6. Antennas, mounts, feed lines and the ladder
Antennas
Wind force F = qz · Gh · Ka · Ca · A (§2.6.11.2), at the antenna’s elevation. Panels take Ca from Table 2-8 by their aspect ratio (1.2 to 2.0); dishes use Annex C Tables C-1 to C-4, chosen by the required Dish type, with the force along the wind, the force across it and the twisting moment, all varying with the angle between the wind and the dish axis. Ka is taken as 1.0.
Mounts & Platforms
Add the frames and platforms your antennas hang on under Mounts & Platforms. Their wind area and weight are loaded onto the tower. You enter the EPA and weight from the manufacturer or a catalogue, at one or more ice thicknesses; the app interpolates at the actual ice thickness.
| Kind | Use for | Ka |
|---|---|---|
| Sector frame | One frame on one face or leg. Enter the normal and transverse EPA. | 1.0; 0.80 or 0.75 only for a group of three or more frames at the same elevation (§2.6.11.2.2) |
| Frame assembly | A catalogue value for a complete set of frames that already includes their shielding. | not applied |
| Platform | Frame/truss platform, low-profile platform, or circular ring. | By type: 1.00, 0.75 (square) / 0.67 (triangular), 1.00 |
- An antenna can be placed on a mount; it then moves with the mount.
- Frequently used products can be saved to your mount library.
- The optional 3D drawing of a mount is for the viewer only — it never changes a load.
- If you add antennas but no mounts, the report warns that any mount load is missing.
Feed lines
Each Feed Lines run is a group of identical cables on one face. On a TIA tower the cluster treatment can be individual (every line counted), rectangular or round (the group treated as one block, §2.6.11.5), or automatic (the lower of the two per direction). A block is only allowed when the lines really form a cluster — at least two lines, no further apart than three times the larger diameter — and automatic never applies block relief to flat lines. A cable tray or feedline ladder is entered as its own run with a flat component type.
Climbing ladder
Same input as on IS towers (section 8), loaded with the TIA velocity pressure. TIA-222-I load combinations carry no live load, so the climber load is not applied.
T7. Ice, seismic and tornado
All three are under Ice, Seismic & Tornado and are off until you enable them.
| Load | Inputs | What the app does |
|---|---|---|
| Ice (§2.6.10) | Design ice thickness ti and the wind speed with ice Vi, both from the ASCE 7 Hazard Tool for your risk category (§2.6.4). Both are required: the fields start blank, and Vi cannot be worked out from V. Either enter Vi or tick Use full V to run the ice case at V, which is conservative. A tower file with an ice case that states neither (ice_wind_speed_ms or "use_basic_wind_speed": true) is refused. |
Ice thickness grows with height (tiz = ti·Kiz·Kzt0.35); adds ice weight and the larger iced wind area, on the structure, feed lines, mounts, antennas and the climbing ladder. With an ice case a panel antenna must state its depth, the ladder needs its two ice inputs, and a generic antenna is refused. |
| Seismic (§2.7) | SDS, SD1 (site-adjusted design values), TL, site class. The importance factor is not an input — it comes from the risk category and is shown read-only. | Equivalent lateral force method, R = 3.0, with the §2.7.8.1.1 minimum. Vertical effect ±0.2 SDS·D. A Risk Category I tower cannot have a seismic block (Table 2-3 gives no factor). |
| Tornado (§2.9) | Whether the site is in the tornado-prone region, and the tornado speed VT from the Hazard Tool. | Applies only to Risk Category III and IV. The panel tells you live whether §2.9 applies or which exemption does. When it applies, tornado cases are enveloped with the normal wind cases and the greater governs. |
If your tower is Risk Category III or IV and you have not added a tornado block, the report warns that §2.9 was not evaluated.
T8. Load combinations
| Case | Combination (§2.3.2) | Present when |
|---|---|---|
| ULS1 | 1.2 D + 1.0 Wo | always, per direction |
| ULS2 | 0.9 D + 1.0 Wo | always, per direction (uplift) |
| ICE1 | 1.2 D + 1.0 Di + 1.0 Wi (the ice weight takes 1.0) | ice enabled |
| EQ1 / EQ2 | (1.2 + 0.2 SDS) D + Eh / (0.9 − 0.2 SDS) D + Eh | seismic enabled |
| TOR1 / TOR2 | 1.2 D + 1.0 WT / 0.9 D + 1.0 WT | tornado applies |
| SLS1 | 1.0 D + 1.0 Wo at the 60 mph service wind speed, Kd 0.85 (§2.8.3) | always — used for the serviceability check |
Member capacities are checked against the envelope of every ULS, ICE, EQ and TOR case.
Serviceability (§2.8.2): twist and sway rotation ≤ 4° and horizontal displacement ≤ 3% of height, checked on SLS1 — the 60 mph service loads, whatever your design V. The report’s Direction Summary (base shear, tip drift, reactions), the max tip deflection figure and the PDF reaction table all show this service case and say so. They are not design values: take foundation design forces from the factored cases in the Support Reactions tab. In the STAAD file the service wind is written as its own load cases.
T9. Connection design
Connections are entered as JSON in the section’s Connections box; the placeholder shows a TIA example. The checks follow §4.9: bolt tension, shear and bearing, combined tension and shear, connecting plates, block shear, bracing connections, angle-leg splices (with the §4.8 eccentric-splice check), ring flanges to Annex Q, welds, and U-bolts.
- Every key is checked. A misspelt key stops the run instead of being ignored.
edge_type(sheared or rolled) is required: the minimum edge distance depends on it.- Give the bolt strength as
bolt_grade(e.g. A325) orbolt_fu. - A ring flange needs
ncornc_basis(Annex Q, Table Q-1). - Two keys change the member check as well as the connection:
gc_mmin a bracing block (joint eccentricity, §4.4.4.2) andboth_legs_connectedin a leg splice (raises the shear-lag factor U from 0.80 to 1.00). redundant_bracingcan be one block for all redundants, or one block per tag ({"r1": {…}, "r2": {…}}).- Anchor rods, base plates, guy link plates and slip-critical connections are refused.
T10. Report, warnings and STAAD export
- The report opens in US units; the SI / US toggle in its header switches it.
- The Wind, Antennas and Capacity tabs show the TIA quantities and clause references. The Summary tab adds ice, seismic and tornado panels when those loads are enabled.
- The compliance banner at the top of the Summary lists what the app could not decide for you. On a TIA tower it can report: missing wind directions (§2.6.11), antennas with no mounts, the two-period seismic spectrum being used (§2.7.6.1), tornado loads not evaluated (§2.9), a bent main diagonal that needs hip bracing (§4.5.2.3), and a seismic or ice block that failed and was not analysed. Read it before the numbers.
- The STAAD.Pro model is written in FEET / KIP, with the AISC angles as a user table inside the file. Towers with double-angle members cannot be exported. See section 13.
- §4.4.4.1 joint eccentricity: the model assumes bracing meets at the leg work point. Other framing is not detected and not warned about.
- §2.7.6.1 multi-period spectrum: the two-period spectrum is used; check the site spectrum if one is required.
- Site values (V, Kzt, SDS/SD1, VT, ice) and mount EPA are taken as entered and cannot be checked by the app.
10.Running the Analysis
- Click Run Analysis. The browser posts your tower JSON plus the analysis config to
the server, which spawns the analysis as a background job and returns a
job_id. - The app polls job status every 1.5 s while a window shows the progress. Status moves through running → done, error or cancelled.
- On done, the generated HTML report loads automatically into the Analysis Result tab.
- On error, the status panel shows the reason in the run’s own words (e.g. a missing input, timeout, or memory limit — see Troubleshooting). A run that is refused for a missing or invalid input is not counted against your quota.
- If the inputs were accepted but the analysis itself failed (for example it did not converge), the report is still shown, with a red ANALYSIS FAILED banner. Such a run cannot be saved or exported.
You can have one run at a time: starting another while one is queued or running is refused. The running window has a Cancel run button that stops it. A cancelled run is still counted against your quota.
When a result is a mechanism
If a load case moves any node of the tower by more than half the tower height, the model is probably a mechanism — for example a bracing pattern with no diagonals. The run continues, but the compliance banner on the report names those load cases and says their results should not be relied on. The 0.5 × height limit is the program’s own, not a code clause. A load case whose result is not a number stops the analysis, and the report is shown with the ANALYSIS FAILED banner.
Opening an older tower file
When you import a file or reopen a History entry made with an earlier version, a notice above the builder lists:
- the inputs the current version requires that the file does not state — for example Risk Category, Cyclone region, k3, Dish type, the ladder’s A_eff, the deck area of an IS platform, the ladder ice inputs or the wind speed with ice;
- any value it filled in exactly from the file itself (a TIA-222-I tower’s risk category, taken from its tornado block or its seismic importance factor);
- defaults that have changed since the file was written: leg base supports are now pinned, the IS 800 bending check is off unless stated, and a TIA-222-I tower with no wind directions now runs every Table 2-6 direction for each face.
The program never guesses an engineering input for you: fill in the listed items and run again. Results may differ from the earlier run. A file written by a newer version of the program is refused.
11.AI / Rule-Based Guidance
Three optional guidance helpers are available. Each is answered by an AI model (Claude) only when the server it runs on has been set up with an API key; otherwise, or when the AI call fails, a fixed rule-based engine answers instead. The live site may run either way, so do not expect AI answers to always be there. The report’s guidance panel shows which engine answered (rule-based or ✦ Claude AI).
Bracing pattern guidance
While editing a custom bracing pattern, get instant feedback on duplicate members, floating nodes, and bypassed nodes, with suggested fixes.
Tower / results guidance
- Before running (✦ Review Inputs in the header): flags widening-with-height geometry, panel heights below 1 m or above 6 m, very thin-walled members (D/t > 50), member thicknesses below the IS 17740 Table 3 minimum, a missing Risk Category or a k1 below the table, a missing cyclone region or terrain category, wind speeds outside a plausible 25–75 m/s range, and antenna/ladder elevations outside the tower height.
- After running (✦ Ask AI, bottom right of the report): type a question or click one of the prompts (Is it safe?, Redesign?, Governing dir?, Drift OK?). It flags max UC > 1.0 (overstressed) or > 0.9 (marginal), drift exceeding the IS 17740:2022 Cl. 10.1.2 limits (3% of height sway, 4° twist), KL/r above the per-role IS 17740 limits (legs 120, diagonals 150, horizontals 200, redundants 250), and identifies the governing wind direction, with suggested next steps (e.g. “increase OD×t of section S3 leg”).
12.Reading the Report
| Tab | What to look for |
|---|---|
| Summary | Tower type & height, section count, max UC ratio, max tip drift vs the IS 17740:2022 Cl. 10.1.2(b) limit of 3% of height (plus 4° twist/sway rotation per Cl. 10.1.2(a)), direction envelope & governing member forces, (if enabled) dynamic / seismic / ice panels, and Scope of this report: what this run checked and what it did not (also printed in the PDF). Read it before relying on the report |
| Geometry & Weights | 3D lattice view, per-section panel breakdown and member profiles/weights — confirm the model matches what you intended before trusting the numbers |
| Wind Load | Per-section z_mid, k2, Vz, pz, solidity φ, Cf for legs/diagonals/horizontals, D·V̄d (on the hourly-mean speed) and flow regime, resulting wind force per direction |
| Antennas | Per-antenna elevation, drag coefficient, projected area, and resulting wind force per direction (only shown if antennas were defined) |
| Nodal Loads | Factored nodal loads applied to the 3D lattice per load combination |
| Lattice Forces | Axial (and, for beam elements, moment) member forces from the OpenSeesPy solve per load combination |
| Displacements | Node displacements (mm) per load combination and the tip-drift envelope across all wind directions |
| Capacity | UC ratio per member type per section (enveloped over every strength combination), governing mode (tension/compression), KL/r, pass/fail. Click a row for the step-by-step working. A † marks a member whose net section and block shear were not checked because its connection was not declared |
| Connections | Flange splice (IS 800 + EN 1993-1-8) and bracing shear/bearing checks (IS 800 §10). Each connection reads OK, OVERSTRESSED (a strength ratio above 1.0) or DETAILING (a spacing, edge-distance or bolt-size rule is broken; this does not enter the ratio) |
| Support Reactions | Base node reactions (Rx, Ry, Rz, Mx, My, Mz) per load combination |
On a TIA-222-I tower the tabs show the TIA quantities instead, and the check is LRFD — see T10. The rest of this section describes the IS report.
The UNITS tile in the strip of headline figures at the top of the report switches the displayed units between SI and US customary (SI ⇄ US), and ↓ Export CSV at the foot of the tables saves every table of the open tab to one CSV file. Read the compliance banner at the top of the Summary before the numbers: it lists the warnings of the run (inputs accepted with a warning, members not checked, load cases that look like a mechanism, and similar). A red ANALYSIS FAILED banner above it means the analysis did not complete.
The 3D viewer in the Geometry tab also has Deflected shape and Force colours toggles that redraw the real lattice at its displaced position (scaled) and colour members by force for the selected wind direction.
Utilisation ratio (UC)
UC = |Applied Force| / Governing Capacity
- Tension: governing capacity = the lowest of gross-section yield Tdg, net-section rupture Tdn and block shear Tdb (IS 17740 Cl. 11.1, IS 800 Cl. 6), with the bolt line taken from the section’s connections block. A member with no connection entry is checked on gross yield only; the report says its net section and block shear were NOT CHECKED, and the Summary’s compliance banner names those members.
- Compression: governing capacity = Perry–Robertson buckling capacity per IS 800 Cl. 7.1, γm0 = 1.10, using buckling curve ‘a’ (α = 0.21) for CHS/pipe and curve ‘c’ (α = 0.49) for angle / double-angle sections (IS 800 Table 10). Bracing members additionally use the IS 17740 Annex F equivalent slenderness. A slender angle (IS 800 Table 2) is checked on its effective area.
- Bending: only when Bending check on beam elements (IS 800) is on (Tower Type); the leg ratio shown is then the larger of the axial ratio and the combined axial-and-bending ratio.
Tension and compression envelopes are tracked separately per member/section, so a larger tension force can never mask a smaller-but-governing compression case.
Pass/Fail
A member passes when UC ≤ 1.0 and its KL/r is within the per-role limit (IS 17740 with Amendment 1: legs 120, diagonals 150, horizontals 200, redundants 250). Tip drift vs the IS 17740:2022 Cl. 10.1.2 limits (3% of height; 4° rotation) is a serviceability flag, not a strength criterion, but should not be ignored.
13.STAAD.Pro Export
Download a STAAD.Pro .std file of the model your analysis run actually solved — the same
geometry, sections and nodal loads — for independent cross-checking or detailed design continuation.
Available for IS and TIA-222-I towers. The file is written during the run, so re-run a tower to get a
file for it.
- Coordinate system: Z-up; units: METER, KN on an IS tower, FEET, KIP on a TIA-222-I tower
- Sections: IS angles from STAAD’s Indian table; AISC angles as a user table written inside the file (STAAD’s own American table lacks many sizes); pipes and solid bars as prismatic properties. A tower with double-angle members cannot be exported to STAAD.
- All lattice nodes and members, mapped to
MEMBER TRUSS(pin-ended, axial only) for Truss/corotTruss elements, or beam members (section properties AX, IZ, IY, IX) for elasticBeamColumn. No shear areas are written, matching the SutranetTower analysis. - Material: E = 200000 MPa, ν = 0.30, ρ = 7850 kg/m³
- Load cases: LC1 dead load (self-weight + antenna & ladder dead weight), LC2 live/maintenance load (the IS 17740 Cl. 7.2.2 climber load where a ladder is defined, and the platform live load where an IS platform is declared; the case is empty when the tower has neither), LC3+ wind per direction (including per-direction ladder wind); combinations per the selected standard (IS 800:2007 Table 4, IS 17740:2022 Table 2, or TIA-222-I §2.3.2). Ice, seismic, tornado and §3.7.1 pattern cases are not exported.
Choosing the STAAD analysis
Pick the analysis next to Export STAAD.Pro before downloading:
- Match SutranetTower (default) —
PDELTA 30 ANALYSIS LARGEDELTA. STAAD reproduces this report: P–Δ is included, P–δ inside members is not. Each load combination is written as its own load case (REPEAT LOAD), because P–Δ results cannot be added together. - Linear —
PERFORM ANALYSISwith STAAD load combinations. A first-order run; light diagonals and small leg moments can differ from this report, which includes leg P–Δ. - Full P–Δ (incl. P–δ) —
PDELTA 30 ANALYSIS SMALLDELTA, STAAD’s own default. It also includes bending within each member, which SutranetTower does not model, so leg moments on heavily loaded legs can read 10–20% higher than this report.
14.Accounts & Quota
If the deployment has Firebase authentication configured, you’ll see a sign-in modal on
first visit. Each account has a role (free or
admin) and a monthly run quota that resets on the 1st of each month; your
remaining quota is shown next to your email in the header. Admins can adjust other users’ quotas.
Ways to sign in
| Option | How it works |
|---|---|
| Continue with Google (Sign up with Google on the Register tab) | One-click sign-in with a Google account — a Google popup opens, you pick your account, and you’re in. No password to set or remember. First Google sign-in creates your account automatically. (Shown only when the deployment’s Firebase project has Google sign-in enabled.) |
| Email & password — Register | Enter an email and a password (minimum 6 characters), then re-type it in the Confirm password box. The SHOW toggle reveals what you typed so you can check it. Mismatched or too-short passwords are caught before the account is created. Registering accepts the Terms and Privacy Policy. |
| Email & password — Sign In | Enter the email and password you registered with. |
Email verification and the welcome email
When you register with email and password, Firebase sends a link to verify your address, and a notice in the app says so. You can use the app straight away; verifying is not required to run analyses. Once the address is verified, the app sends one welcome email with links to the training videos and this manual. It is sent the next time you sign in or the app refreshes your session, so it can arrive up to an hour after you click the link. A Google account is already verified, so its welcome email is sent when the account is created. The emails come from a new sender and are often filed as spam: check your spam folder and mark them “not spam”. Accounts created before the welcome email existed do not get one.
Forgot your password?
On the Sign In tab, click Forgot password?, enter your account email, and click Send reset link. Firebase emails you a secure link to choose a new password — check your inbox (and spam folder). For privacy the app shows the same confirmation whether or not that email is registered, so the message appearing does not by itself confirm an account exists. Password recovery applies to email/password accounts; if you signed up with Google, sign in with the Continue with Google button instead (your password is managed by Google).
15.Limitations
| Limitation | Detail |
|---|---|
| 180-second analysis timeout | A run exceeding 180 s is aborted server-side and reported as a timeout error |
| 20-section cap | A tower with more than 20 sections is rejected outright (proof-of-concept memory guard on a ~1 GB server) |
| Unsaved runs are not kept | Only saved runs stay in History. An unsaved run is replaced by your next run, and a run that was in progress when the server restarted ends as an error |
| India-only wind lookup | Lat/lon → wind speed lookup only covers lat −10…40, lon 60…100; elsewhere, including every TIA-222-I site, enter wind parameters manually |
| Local buckling | On IS towers a slender angle (IS 800 Table 2) is checked in compression on a reduced effective area, and a pipe too thin for the table is refused. Lateral-torsional buckling of an angle leg in bending is not checked. On TIA-222-I towers local buckling is included through F′y (§4.5.4.1) |
| TIA-222-I scope | Self-supporting lattice towers only; no anchor rods, base plates, guy link plates or slip-critical connections; known gaps are listed in T10 |
| Base fixity | Leg bases are pinned (the default) or fixed, as chosen under Tower Type; no partial/spring foundation fixity is modelled |
| Linear-elastic material only | No plastic hinge / inelastic analysis, no fatigue, no corrosion allowance (P–Δ on the legs is captured on every run; bracing adds its own geometric nonlinearity only where corotTruss is chosen) |
| First-mode dynamic gust only | The Cl. 10.2 gust-factor dynamic wind, IS 1893-4 seismic and Cl. 7.2.4 ice effects are implemented, but the dynamic wind uses a first-mode (f₁) estimate — a full multi-mode resonant/damping analysis is not performed |
| Fixed DVd threshold | The subcritical/supercritical flow split for round members is fixed at D·V̄d = 6 m²/s (V̄d = design hourly-mean speed), as in IS 875 Part 3 Tables 34/35, with no user override |
| Library reload | Edits to the bracing library may require a server restart to take effect, depending on deployment |
16.Best Practices
- Start from the example tower and modify incrementally rather than building from a blank slate — it’s a known-valid baseline.
- Run “Review Inputs” before every analysis, especially after large geometry or bracing changes — it catches common modelling mistakes for free.
- Check the Geometry tab first after every run, before trusting any numbers — a wrong bracing pattern or panel count produces a structurally different (and silently wrong) model.
- Keep panel heights moderate (roughly 1–6 m) — very short or very tall panels distort solidity ratio and force-coefficient assumptions.
- Use more/shorter sections at the base, where wind moment and axial load are highest, and fewer/taller sections near the top.
- Cross-check critical designs against the STAAD export, particularly when UC is close to 1.0 or when you’ve switched diagonals to elasticBeamColumn.
- Export your tower JSON after every meaningful change, and Save runs you want to keep — an unsaved run is replaced by your next run.
- Validate custom bracing patterns in the Bracing Library tab before using them in a real tower — fix any duplicate-member, floating-node, or bypassed-node errors immediately.
- Treat AI/rule-based guidance as a second opinion, not a final verdict — always apply engineering judgement on top of it.
17.Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| “Too many sections (POC limit is 20 sections)” | Tower exceeds the 20-section cap | Merge adjacent sections or reduce subdivisions |
| “Analysis timed out (> 180s)” | Model too large/complex (many sections, fine bracing, many wind directions) | Reduce wind directions analysed, simplify bracing, or split into fewer/larger sections |
| “Slope N: declared height … does not match the sum of its section heights” | A slope’s height ≠ the sum of its section heights | Adjust the slope height or the section heights so they add up (see Slopes & Sections) |
| “Section …: num_panels × panel_height does not match the section height” | Panel subdivision doesn’t tile the section | Set panel_height = height / num_panels, or adjust num_panels/height |
| Bracing pattern won’t save | Duplicate member, floating extra node, or bypassed node | Use the Bracing Library editor’s validation message to locate and fix the offending node/member |
| “bracing pattern … is only valid for N-leg towers” | Pattern’s applicable_legs doesn’t include the current Tower Type | Pick a compatible pattern, or mark the pattern applicable to this leg count in the Bracing Library |
| Wind lookup says “not found” | Coordinates outside the Indian subcontinent bounds | Enter basic_wind_speed_ms and terrain_category manually |
| Job/report disappeared | The run was not saved and a later run replaced it | Re-run the analysis and use Save to keep it in History |
| “… is required … There is no default” | The file is from an earlier version, or a required input is blank | Fill in the inputs listed in the notice above the builder (see Opening an older tower file) |
| “Unknown bracing pattern …” | The tower uses a pattern that is not in your Bracing Library | Re-create or re-save the pattern in the Bracing Library, or choose another pattern for those sections |
| Run refused: an analysis is already in progress | You have a run queued or running | Wait for it, or press Cancel run |
| Run Analysis shows a message and opens a tree node instead of running | A required input is blank or out of range (Risk Category, Cyclone region, k3, Dish type, ice inputs, seismic zone…) | Enter the input named in the message; it is outlined in red in the node that opens |
| “connections.leg_splice needs "both_legs_connected"” | An angle leg has a bolted leg splice that does not say whether the bolts pass through both legs | Add "both_legs_connected": true or false to the leg_splice entry |
| “bolt_grade … is stated together with …” or “fub_bolt … names no bolt property class” | A connection block gives both a bolt class and bolt strengths, or an ultimate strength that is not an IS 800 Table 1 class | Give bolt_grade alone (e.g. "8.8"), or give fyb_bolt with fub_bolt |
| Compliance banner says a load case “is probably a mechanism” | A node moved more than half the tower height in that case; usually a bracing pattern that leaves part of the tower unbraced | Check the bracing pattern and the Geometry tab; do not rely on that case’s results (see Running the Analysis) |
| Memory error on large towers | ~1 GB VM memory guard exceeded | Reduce section/node count, fewer wind directions, simpler bracing |
| UC > 1.0 on a member | Member undersized for the governing load combination | Increase OD×t (pipe) or designation size (angle) for that section’s member; re-run |
18.Glossary
Bracing editor & geometry
These are the terms used inside the Bracing Library editor and the pattern
schema (bracings.json). A pattern is always authored on one face and replicated
to every face by rotational symmetry, so most terms describe a single face and how members reach
across to their neighbours.
| Term | Meaning |
|---|---|
| Face (F0, F1…) | One flat side of the tower, the panel between two adjacent legs. A 3-leg tower has 3 faces, a 4-leg tower 4. The F0/F1… labels in the 3D editor are face indices, used to pick adjacent vs opposite faces deliberately. |
| Corner node (bot_L, bot_R, top_L, top_R) | The four corners of a face panel — bottom/top ends of the two legs (left/right) that bound the face. Left/right are as seen looking at the face from outside. |
| Extra node | A user-placed point beyond the four corners, sitting at fraction t along a member or leg. Used as an endpoint for further members. Created by Add Node / splitting a member. |
| t (position) | Interpolation fraction from a member’s from end (t = 0, start) to its to end (t = 1, end). A split node at t = 0.25 sits 25 % of the way from the from node. Clamped to 0.05–0.95 so a node can’t land exactly on an endpoint. |
| X-intersect node | A node placed at the geometric crossing of two lines (4-click), e.g. the centre of an X-brace. Because it isn’t on a single member it can’t anchor a ring or hip. |
| Face member | A member whose both ends lie on the same face (diagonal, horizontal, or redundant). In-plane bracing of that panel; replicated to every face. |
| Diagonal | A face member running corner-to-corner across a panel — the primary bracing that carries shear. |
| Horizontal (member) | A face member lying horizontally within one face (e.g. the mid horizontal of a K-brace). In-plane only — it does not go around the corner to the next face. |
| Horizontal ring | A horizontal member repeated around the polygon, connecting the same node on two adjacent faces. Forms a closed loop tracing the section outline — it frames a diaphragm level and ties neighbouring legs. Schema: rings. Authored by clicking the same node on two adjacent faces → “Horizontal ring”. |
| Redundant link | Any cross-face connection (schema redundant_links: {from, to, face_offset, tag}). Covers hips and plan bracing — anything joining nodes on different faces. |
| face_offset | How many faces around the polygon the target face is from the source: 0 = same face, ±1 = adjacent (a hip), numLegs/2 = opposite (plan bracing). |
| Hip member | A cross-face member to an adjacent face (face_offset = ±1). Legacy hips schema, now expressed as a redundant link; gives an interior node out-of-plane restraint. |
| Plan bracing (“cross”) | A cross-face member to the opposite face (face_offset = numLegs/2) — a diagonal across the section plan. On a 4-leg square two of these make an X in plan. Stops the section racking/twisting; even-leg towers only (a triangle plan is already rigid). |
| cross_node | A split point placed on a cross-face link (it resolves to a point between two faces). Lets one redundant link be split into two segments meeting at a real node. |
| Crossover / chain | An X-brace split at its crossover into sub-segments. The full-length “chain” drives a separate out-of-plane slenderness check (IS 17740 Annex F F-1 / Cl. 12.4). |
| Tag | Short label identifying a redundant or link (r1, rl1, plan1…) so it can be assigned its own member section. Hover a member/node in the 3D editor to see its tag/label. |
| ops_element | The OpenSees element type used for a member: corotTruss, Truss, or elasticBeamColumn (see the analysis terms below). |
Analysis & code
| Term | Meaning |
|---|---|
| UC | Utilisation/unity check ratio — applied force divided by governing capacity; ≤ 1.0 = safe |
| KL/r | Effective slenderness ratio (effective length / radius of gyration); per-role limits per IS 17740 (with Amendment 1): legs 120, diagonals 150, horizontals 200, redundants 250 |
| Redundant | Secondary bracing member that subdivides a main member’s unbraced length; designed to a minimum bracing resistance (IS 17740 Cl. 10.4.2 / Annex C). See also Redundant link for the cross-face form. |
| Vb / Vz | Basic wind speed (10 m, flat open terrain) / design wind speed at height z |
| Cf | Force (drag) coefficient applied to projected member area to get wind force |
| Solidity ratio (φ) | Ratio of projected (solid) member area to gross panel face area — drives Cf |
| corotTruss | Corotational truss element: axial-only, geometrically nonlinear (captures large-displacement / rope effects) |
| elasticBeamColumn | Linear-elastic beam element with full 6-DOF bending/shear/axial stiffness |
| Tdg / Tdn / Tdb | Design tensile capacity by gross-section yielding / by net-section rupture / by block shear (IS 800 Cl. 6.2, 6.3, 6.4) |
| Nd | Design compressive (buckling) capacity, Perry–Robertson method, IS 800 Cl. 7.1 |