:root{ --bg:#f3f1ea; --panel:#fffdf9; --ink:#152238; --ink-soft:#526074; --ink-faint:#8b96a5; --line:#d8dce1; --grid:#e3e7ea; --accent:#c2542a; --accent-soft:#e9c3ae; --accent-deep:#8f3c1c; --pass:#1f6f54; --pass-bg:#e4f1ea; --fail:#b23a2e; --fail-bg:#faeae7; --pressure-1:#1f4e79; --pressure-2:#5b9bd5; --mono:'IBM Plex Mono', ui-monospace, SFMono-Regular, monospace; --sans:'Inter', system-ui, -apple-system, sans-serif; } *{box-sizing:border-box;} html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:var(--sans);} body{ background-image: linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px); background-size:28px 28px; min-height:100vh; } .wrap{max-width:1360px;margin:0 auto;padding:28px 24px 60px;} header.top{ display:flex;justify-content:space-between;align-items:flex-end; border-bottom:2px solid var(--ink);padding-bottom:14px;margin-bottom:22px; flex-wrap:wrap;gap:10px; } header.top .title-block{max-width:640px;} .eyebrow{ font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase; color:var(--accent-deep);font-weight:600;margin-bottom:6px; } h1{font-size:26px;line-height:1.15;margin:0 0 6px;font-weight:800;letter-spacing:-.01em;} .sub{color:var(--ink-soft);font-size:13.5px;line-height:1.5;margin:0;} .rev{font-family:var(--mono);font-size:11px;color:var(--ink-faint);text-align:right;line-height:1.6;} .layout{ display:grid; grid-template-columns:300px 1fr 320px; gap:20px; align-items:start; } @media (max-width:1080px){ .layout{grid-template-columns:1fr;} } .panel{ background:var(--panel);border:1px solid var(--line);border-radius:2px; box-shadow:0 1px 0 rgba(21,34,56,.03); } .panel h2{ font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase; color:var(--ink-soft);font-weight:600;margin:0;padding:12px 16px;border-bottom:1px solid var(--line); display:flex;justify-content:space-between;align-items:center; } .panel .body{padding:14px 16px 18px;} /* inputs */ .field{margin-bottom:14px;} .field label{ display:flex;justify-content:space-between;align-items:baseline; font-size:12px;color:var(--ink-soft);margin-bottom:5px;font-weight:600; } .field label .val{font-family:var(--mono);color:var(--ink);font-weight:600;font-size:12.5px;} .field input[type=number]{ width:100%;padding:7px 8px;border:1px solid var(--line);border-radius:2px; font-family:var(--mono);font-size:13px;color:var(--ink);background:#fff; } .field input[type=range]{width:100%;accent-color:var(--accent);} .field .unit{font-family:var(--mono);font-size:10.5px;color:var(--ink-faint);} .field-row{display:flex;gap:10px;} .quick-controls{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 20px;margin-bottom:14px;} @media (max-width:820px){.quick-controls{grid-template-columns:repeat(2,1fr);}} @media (max-width:480px){.quick-controls{grid-template-columns:1fr;}} .field-row .field{flex:1;} .divider{height:1px;background:var(--line);margin:16px 0;} .section-label{ font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase; color:var(--accent-deep);font-weight:700;margin:0 0 10px; } .xspacing-box{ background:#fbf3ee;border:1px solid var(--accent-soft);border-radius:2px;padding:12px 14px;margin-bottom:16px; } .xspacing-box label{color:var(--accent-deep);} .xspacing-box .val{color:var(--accent-deep);} .xspacing-scale{display:flex;justify-content:space-between;font-family:var(--mono);font-size:10px;color:var(--ink-faint);margin-top:2px;} button.reset{ width:100%;padding:8px;background:#fff;border:1px solid var(--line);border-radius:2px; font-family:var(--mono);font-size:11px;letter-spacing:.05em;text-transform:uppercase; color:var(--ink-soft);cursor:pointer;margin-top:4px; } button.reset:hover{border-color:var(--ink-soft);color:var(--ink);} /* center visual */ .visual-panel .body{padding:16px;} #wallSvg{width:100%;height:auto;display:block;} .legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:10px;font-size:11px;color:var(--ink-soft);font-family:var(--mono);} .legend span{display:inline-flex;align-items:center;gap:5px;} .swatch{width:11px;height:11px;border-radius:2px;display:inline-block;} /* results */ .status-banner{ display:flex;align-items:center;justify-content:space-between; padding:12px 16px;font-family:var(--mono);font-weight:700;font-size:14px;letter-spacing:.04em; border-bottom:1px solid var(--line); } .status-banner.pass{background:var(--pass-bg);color:var(--pass);} .status-banner.fail{background:var(--fail-bg);color:var(--fail);} .status-banner .dot{width:9px;height:9px;border-radius:50%;background:currentColor;display:inline-block;margin-right:8px;} .results-grid{padding:14px 16px;} .row{ display:flex;justify-content:space-between;align-items:baseline; padding:7px 0;border-bottom:1px dashed var(--line);font-size:12.5px; } .row:last-child{border-bottom:none;} .row .k{color:var(--ink-soft);} .row .v{font-family:var(--mono);font-weight:600;color:var(--ink);} .row .v.hi{color:var(--fail);} .row.section{border-bottom:none;padding-top:14px;} .row.section .k{ font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase; color:var(--accent-deep);font-weight:700; } .util-bar{height:6px;border-radius:3px;background:var(--grid);margin-top:6px;overflow:hidden;} .util-bar .fill{height:100%;border-radius:3px;transition:width .25s ease;} .tie-table{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:11px;margin-top:6px;} .tie-table th{ text-align:right;font-weight:600;color:var(--ink-faint);border-bottom:1px solid var(--line); padding:4px 6px;font-size:10px;text-transform:uppercase;letter-spacing:.05em; } .tie-table th:first-child, .tie-table td:first-child{text-align:left;} .tie-table td{text-align:right;padding:4px 6px;border-bottom:1px solid var(--grid);} .tie-table td.over{color:var(--fail);font-weight:700;} details.about{margin-top:16px;} details.about summary{ cursor:pointer;font-family:var(--mono);font-size:11px;color:var(--ink-soft); letter-spacing:.05em;text-transform:uppercase;padding:6px 0; } details.about .content{font-size:12px;color:var(--ink-soft);line-height:1.6;padding:8px 2px 4px;} details.about .content code{font-family:var(--mono);background:var(--grid);padding:1px 4px;border-radius:2px;} .disclaimer{ margin-top:18px;padding:12px 14px;border:1px dashed var(--ink-faint);border-radius:2px; font-size:11px;line-height:1.6;color:var(--ink-soft);background:#fbfaf6; } .disclaimer b{color:var(--ink);}
Wallform Calc — Internal

Sign in

Invite-only access. Contact the admin if you don't have an account yet.

Forgot password?
Platform Hub
Formwork Design Aid

Wall Form Tie-Rod Calculator

Fresh-concrete pressure → continuous-waler analysis (stiffness method) → automatic tie-level placement until every tie reaction clears the allowable capacity.

MODEL v1.0
CIRIA-STYLE PRESSURE + FE BEAM SOLVER

Inputs

kN/m³
m/h
°C
kN
GPa
mm⁴
kN·m
kN
mm — solver stops subdividing below this
GPa
mm⁴
kN·m
kN
kN — reaction at a mid soldier
kN — reaction at an end soldier
m, comma-separated — form height is spliced from these
from prop's ground point to wall, 5–7° incline
degrees from the ground
attaches at 2/3 height, 60° from ground

Wall elevation & pressure envelope

MK2 soldier Tie rod Tie overhang (Y) S150 cantilever zone (X) S150 secondary Dead zone (no tie fits) Pressure envelope, P(h) Reaction > capacity
m
m — includes S150 cantilever both ends
mm
mm
mm
mm, each side
How this is calculated
Pressure envelope: P(h) = min( D·h , D·[C1·√R + C2·K·√(H − C1·√R)] ), where h is depth below the top of the pour and K = 36/(T+16) is a temperature correction (K≈1.0 at 20 °C). Each vertical MK2 soldier carries a distributed load w(y) = P(y)·Sx and is analysed as a continuous beam using the direct stiffness method (2-DOF-per-node Euler beam elements), with tie rods as point supports.

Tie layout is solved, not just inserted. The soldier runs the full wall height, but ties can only be placed within a tie zone set back from each edge — 1st tie from bottom and last tie from top — reflecting that a real tie can't sit right at the panel edge. The overhang beyond each end tie still carries pressure and transmits it into that tie, the way a real cantilevered soldier end does. For a trial tie count N, the solver fixes the two end ties at the edges of the tie zone and iteratively reshapes the spacing of every tie in between until all interior reactions converge to the same value — genuine dynamic Y-spacing rather than a fixed grid with extra rows bolted on. It repeats this for N = 2, 3, 4… and keeps the smallest N whose reactions clear the allowable tie load, stopping only if the minimum spacing limit is reached first. The end ties often carry more load than the equalized interior ties, not less — they're picking up the overhang's cantilever load on top of their own span, which is real continuous-beam-with-overhang behaviour and is still checked against capacity like every other tie.

S150 secondary spacing comes straight from your spacing-vs-pressure table (no interpolation) and is applied as a single uniform pitch from bottom to top: the governing pressure — at the very bottom of the pour, where it's highest — picks one spacing value, and every row from the first (38 mm up from the bottom, half the S150's own 75 mm width) to the top is spaced that same distance apart. Every secondary run spans cant + Xspacing + Xspacing + … + cant — a full cantilever overhang beyond the outermost soldier on both ends, feeding load back into that soldier. In the degenerate case of only 2 soldiers (cant + Xspacing + cant, a single bay), each soldier's tributary width isn't the X spacing — it's half the secondary's own total length, since each end soldier now picks up its whole cantilever plus half the one bay.

Bill of materials. Wall length is built from standard panel widths (1.2–6.0 m in 0.3 m steps), largest panels first. Soldier length is spliced from your priority-ordered length list the same way, itemised by piece length. Everything that exists on one face of the form (soldiers, secondaries, brackets, clamps, panels) is doubled for a double-sided wall; tie rods are not (one tie already spans both faces) but get 2 washer plates each. Hop-up brackets attach directly to a soldier, so they're capped at 1 per soldier line — never more than the number of soldiers. Push-pull props and turnbuckles follow the sides selector instead of the automatic doubling. Soldier spacing (X spacing) is treated as independent of panel width — soldier positions aren't forced to land on panel joints.

Tie dead zones. A tie can't be placed wherever the soldier is physically obstructed: at each S150 crossing (75 mm), at each splice joint between soldier pieces (two 8 mm end plates, 16 mm total), and at each stiffener plate (35 mm, position varies by piece length — currently only known for a 3.6 m piece). Spliced pieces are assumed to stack bottom-to-top in the same order they're listed for the height splice, so a piece's stiffener positions (given from its own bottom) get offset by however much soldier sits beneath it. The solver nudges any tie that would land in one of these zones to the nearest clear edge, left to right, keeping the minimum spacing against its already-placed neighbour — so a tie's final position can shift slightly off the ideal equalized value or off your exact 1st-tie/last-tie offset. If a piece length has no stiffener data yet, it's only checked against S150 and joint zones.

Results

Maximum pressure
X spacing
Number of soldiers
S150 secondary spacing
Number of secondary rows
Number of tie rows
Total tie rods
Tie reactions
Maximum tie reaction
Allowable tie load
Utilization
Soldier check
Soldier max moment
Allowable moment
Moment utilization
Soldier max shear
Allowable shear
Shear utilization
Soldier max deflection
S150 secondary check
Governing pressure
Secondary UDL
Max moment
Allowable moment
Moment utilization
Max shear
Allowable shear
Shear utilization
Max interior reaction
Allow. interior reaction
Interior utilization
Max outer reaction
Allow. outer reaction
Outer utilization
Tie levels (bottom → top)
Rowy (mm)SpacingReaction (kN)

Bill of materials

ComponentLengthUnitPer sideSides ×Total qtyNote
Bolt & nut roll-up
SizeQtyUsed for
Rental pricing
ComponentQtyRate/dayDaily cost
Total rental cost / day
Wall face area (both sides)
Rental cost per m² / day
Design aid, not a substitute for engineering sign-off. This tool implements a specific pressure model and a linear-elastic continuous-beam idealisation of both the soldier and the S150 secondary, checked against the tie load, bending moment, shear, and (for the secondary) interior/outer reaction capacities you supply — it does not check sheathing or connection design beyond what's stated, and the C1/C2/temperature-correction values, section properties, allowable capacities, and secondary spacing table are all user-supplied assumptions. Pricing is a per-day hire rate, not a purchase cost — multiply by the job's hire duration for a total, and treat the flagged assumed-quantity lines as estimates until confirmed. Have a licensed engineer verify the pressure basis, load factors, tie layout, secondary spacing, and full BOM against the applicable code and your system supplier's data before use on site.