> For the complete documentation index, see [llms.txt](https://docs.openbrim.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.openbrim.org/templates/openbrimfea/result-combinations-fea/fe-composites-fea.md).

# FE Composites \[FEA]

An FE Composite merges the forces from several finite elements into a single set of section forces at the section's **centre of gravity**. A steel I-girder modelled with, say, two shell elements for the deck, one for the web and two beam elements for the flanges has its actions spread across five elements — but design is carried out on the *section*, so those actions must be resolved back to one point.

Without this, the individual element forces cannot be checked against a section capacity at all.

FE Composites are a **reporting** object. They change no analysis result; they resolve existing element forces onto a common reference.

{% hint style="info" %}
**Why this matters for live load.** In influence-surface analysis, OpenBrIM finds the single critical vehicle position that maximizes the force effect **at the section's centre of gravity**, and reports the whole section under that one position. The alternative — taking each element's own critical vehicle position and summing the results — pairs actions that never occur together, giving a result that is conservative but not real. One position for the whole section is both correct and less wasteful.
{% endhint %}

## Data

**Path:** The line along which section forces are extracted. It defines the start and end of the extraction and is divided into segments; at each station the program constructs a cutting plane — perpendicular to the path by default, or rotated by **Cut Skew Angle** — and collects the elements it cuts.

*Engineering influence.* The path is the **spine of the member being designed** — it should follow the girder line, not the model's global axes. Because the cutting planes are square to it unless you skew them deliberately, a path that does not follow the member cuts obliquely through the section, collecting a distorted set of elements and resolving their forces about the wrong axis. On a curved or skewed girder this is the difference between correct section forces and quietly wrong ones. Note the distinction from Cut Skew Angle: a wrong path skews the cut **by accident and inconsistently**; Cut Skew Angle skews it **on purpose and by a known amount**.

**Segments:** How many stations the path is divided into.

*Engineering influence.* This sets the **longitudinal resolution** of the design forces. Too few segments and the extraction misses the critical section — peak moment near midspan, peak shear near supports — reporting values at stations either side of the true maximum and under-predicting. More segments cost extraction time and produce more design points. Place enough that the critical sections of the member are captured.

**Alignment:** The alignment the composite is related to, for station-based positioning.

**Spacing:** The transverse spacing used when the composite represents a repeated member, such as a line of girders.

**Beta Angle:** The rotation of the extraction section about the path.

*Engineering influence.* This orients the section's local axes, and therefore what "major axis moment" and "minor axis moment" mean in the reported forces. An incorrect angle reports the right total actions resolved about the wrong axes, so a girder's strong-axis moment appears partly as weak-axis moment — which will not be caught by a total-force check but will produce a wrong design result.

**Cut Skew Angle:** The rotation of the cutting plane itself, about the cut's own local Z axis. Zero — the default — cuts perpendicular to the path. The rotation is about local Z, and the plane contains local Z. Superelevation applied through the alignment keeps local Z vertical, so the skewed plane stands vertical on a superelevated deck; it tilts only when Beta Angle rolls local Z.

A constant skew goes on **Cut Skew Angle** itself, in the project's angle unit. It takes a single angle only; anything else is treated as zero and reported.

**Cut Skew Table:** A skew that varies along the bridge, as `[[station, angle], [station, angle], …]` keyed by **alignment station**. It takes precedence over Cut Skew Angle whenever it has at least one row, so a model can carry a constant default and a table that overrides it.

| Parameter      | Entry                             | Meaning                                |
| -------------- | --------------------------------- | -------------------------------------- |
| Cut Skew Angle | `0.35`                            | one angle, used at every station       |
| Cut Skew Table | `[[sta, angle], [sta, angle], …]` | a table keyed by **alignment station** |

**The table is a separate parameter, and its units are not the same as Cut Skew Angle's.** Each row mixes a *length* (the station) with an *angle*, and a parameter carries only one unit type — so a table living on Cut Skew Angle would have had its stations converted as though they were angles, silently moving every interpolation point. Cut Skew Table therefore carries no unit type: enter stations in the model's **internal** length unit and **angles in radians**. Unlike **Pos**, whose stations are converted from the display unit, nothing here is converted — so when the display length unit differs from the internal one, the two station lists are not typed in the same unit.

The table is interpolated linearly between rows and held flat outside the authored range, so a handful of control points — typically one per support line — describes the skew everywhere. Rows may be given in any order. On a composite with no alignment (a bare FE model, or one whose alignment rules are all `Fixed`) there are no stations to key on, and the table falls back to distance along the composite's own path.

The station a row is matched against is read from the composite's **own path point**, so it is the PGL station only when that path runs along the PGL. A path deliberately offset from it — a girder midline on an asymmetric section, where the offset is `tan(skew) × (L1 − R1)/2` — is sampled at the offset coordinate, and a table authored against PGL stations will be read slightly off. Key the table in the same space the path is in, or keep the path on the PGL. Symmetric sections and constant skew hide this entirely, which is what makes it worth checking deliberately rather than noticing later.

*Engineering influence.* On a skewed bridge the section that is detailed and checked is often not the one square to the girder: it is the one **parallel to the abutment or bearing line**. This parameter reads the composite forces on that plane. A positive angle rotates the plane's normal toward local +Y, so viewed in plan the cut fans away from square. **That is the opposite sign to a Line's Start Skew X and End Skew X**: a support or deck skew wired in directly must be negated, or the plane is mirrored — and a mirrored plane looks just as plausible.

Consequences worth knowing before using it:

* **Forces are reported on the skewed axes.** `Fx` becomes the force normal to the *skewed* cut, and `My`/`Mz` are about the skewed in-plane axes. This is the point of the parameter — a section check on a skewed plane wants the resultant on that plane — but it means composite forces **will change** when you apply a skew. That is intended, not a regression.
* **Stresses on a skewed cut are stresses on that plane, not along the girder.** For a girder running along the path, the reported fibre stress is the longitudinal stress times `cos²(skew)`, and the girder's bending moment appears as `M·cos(skew)` about the skewed axis with the rest, `M·sin(skew)`, in `Mx`. At 20° the reported stress is 12 % below the longitudinal one, at 30° 25 %, at 45° 50 %. A flexural or load-rating check that wants the member-axis stress must not read a skewed row as if it were that stress.
* **Beta Angle chooses the axis this rotates about.** The two parameters interact: change Beta Angle and you change what "local Z" means, and therefore what a given Cut Skew Angle does.
* **Skew usually varies along the bridge.** Abutments and bents are rarely all on the same skew, so a single angle is right only for a genuinely uniform structure. Prefer Cut Skew Table, keyed on the same stations the support lines are dimensioned at — remembering that its angles are radians while Cut Skew Angle's follow the project's angle unit.
* **The section is the oblique trace of every element the plane cuts.** Shell elements — decks, webs, flanges — are intersected with the skewed plane, so their width and thickness are the oblique ones. A line element (an `FELine` girder, a diaphragm) contributes its own cross-section pushed along the member onto the plane: a girder along the path widens by `sec(skew)`, a diaphragm the plane sweeps through by `1/sin(skew)`. Each element is taken at its **own** crossing of the plane (a girder offset from the path crosses it further along than the path point does), and the forces are resolved about the centroid of the same section the stresses use. A member offset from its nodes is cut in the element whose nodes straddle the plane, so the row is the equilibrium across the plane, including the force the offset link carries at a node the plane passes. At a station just past a girder's last node (closer than its offset × `tan(skew)`), the plane cuts only the offset link there, so that girder is not in the row or the section. A member within 5° of lying in the plane (a diaphragm, cross-frame or plate on the station's own line at a small skew) would leave a trace running along its length. It is therefore left out of the section and the centroid, with a note in the console, but its forces stay in the row, because they are part of the equilibrium across the plane. Keep transverse members out of the Group of a skewed cut unless the cut is meant to pass through them. Response-spectrum and time-history results are combined as described under *Response-spectrum and time-history results* below. Rebar and tendon detailing of line elements is not included in a skewed section.
* **A skewed cut reaches along the member.** It sweeps `half-width × tan(skew)` either side of the station — about 23 ft each way on an 80 ft wide deck at 30°. Stations closer than that to the end of the modelled region will find elements on one side only and report a blank row. Move the station in, rather than reducing the skew, if this happens.

**Pos / PosRel:** The position of the extraction reference, absolute and relative.

*Engineering influence.* These locate the point the forces are resolved to. Because moment is force times lever arm, the reference position directly determines the reported moment: resolving to the centroid of the composite section gives the section moment a design check expects, while resolving to some other point mixes axial force into the moment through the lever arm. This is the parameter to check when the reported axial force looks right but the moment does not.

**Group:** The FE Group whose elements are eligible to be collected.

*Engineering influence.* The **connectivity** parameter. Only elements in this group are gathered by the cutting planes, so an incomplete group omits part of the section — dropping the deck shells from a composite girder, for instance, which removes their contribution to the section forces and understates the design actions. A group that is too broad collects elements from an adjacent member and overstates them.

## Response-spectrum and time-history results

A response-spectrum case or a modal time history gives each mode's composite forces and stresses on the ordinary signed path, and combines them by the case's own rule (CQC, SRSS or ABS with the spatial rule, or the modal superposition's peak). The forces of the girder and the deck are therefore combined as one section in each mode, as a SAP2000 section cut does, and not summed as unsigned element magnitudes. A Direct or FNA time history has no modes. Read on its own, its section forces and stresses are a sum of the members' unsigned peaks and are not a bound: two girders with equal axial peaks give a moment of zero about the section, whatever their signs. In a combination, its stresses are bounded over the signs of those section forces, which are still not a bound themselves.

A response-spectrum or time-history result is an unsigned peak. A combination that contains one has two bounds: POS = static + spectral and NEG = static − spectral, with the spectral part taken as Σ |factor| × |peak|. The plain read (MAX) returns the bound of larger magnitude. The bounds are kept through nested combinations, negative factors and envelopes, with two exceptions. A concurrent (`…Conc`) read, or a governed stress read such as `stressMyPos`, through an envelope nested in another combination keeps the envelope's own pick, which is made before the outer factor and offset apply. A composite stress row reports each fibre on the side that grows its magnitude. Its MAX and MIN columns are the largest and smallest values over all fibres with both bounds, so they show the reversal for the section as a whole, not for each fibre.

*Engineering influence.*

* **A sign-sensitive check must read both bounds.** Read the Max and Min results (`forcePos` / `forceNeg`, or the `PosConc` / `NegConc` reads) for a check that depends on sign, such as pile uplift, bearing hold-down or tension in a member that is in compression under dead load. **Abs. max** and the plain read return one bound, the larger magnitude. For a pile with DC = −200 and EQ = 300, 0.9 DC + EQ reads −480 (compression) on the plain read; its uplift, +120, is in the Max read.
* **Concurrent reads are not concurrent for the seismic part.** A read that governs on one component (for example `forceMyPosConc`) applies the requested bound to that component. Every other component is reported at its larger-magnitude bound, because a spectral response has no sign and its components do not peak together. For a P-M check this is not conservative: below the balance point, more compression raises the moment capacity. Read the axial force at both bounds.
* **A shell's PMax, PMin and von Mises** under a response-spectrum case, or under a combination that contains one, are reported as their bound over every sign the components can take. PMax and von Mises are never below the exact value, and PMin is never above it. With no spectral part they are exact.

## Verification

* Sum the axial forces of the individual elements at a station by hand and compare against the composite's reported axial force. They must agree; a difference means the group or the cutting plane is missing elements.
* Confirm the number of elements collected at each station equals the number the section is built from.
* Check the reported moment against `Σ(element force × lever arm to the reference point)` at one station.
* Display the extraction stations and confirm each cutting plane matches the intended Cut Skew Angle — perpendicular to the member when it is zero, and on the bearing line when it is not. Right-clicking a row of the Composite Element Forces (Sectional) table and choosing **Show Section Cut Plane** draws that station's plane in the 3D view, which is the quickest way to see it.
* With a Cut Skew Table, check a station **at** a support line and one **between** two: the first should match the support's own skew, the second should fall between its neighbours. A cut that is square everywhere means the table was not read as a table — check it is a list of pairs and not a flat list of angles, and that it is on **Cut Skew Table** rather than Cut Skew Angle.
* **On a skewed cut through a box or tub, check a web as well as the deck.** The deck is the easy case: it is cut across its width and comes out wider than the transverse width by `sec(skew)`. A web is cut across its *thickness*, which stretches by the same factor — a 0.5 in web at 30° should measure about 0.577 in in the section. Both stretching together is what keeps the section internally consistent; a deck that widened while the webs stayed square would misplace the neutral axis.
* Confirm the critical sections — midspan, supports — coincide with extraction stations, and increase the segment count if not.
* Check that reported major and minor axis moments are the way round you expect, which validates the beta angle.
* For live load, confirm a single vehicle position is being reported for the whole section rather than per-element maxima.

## Common mistakes

* **An incomplete group**, silently omitting part of the section — most often the deck shells — and understating design actions.
* **A path that does not follow the member**, so the cutting planes slice the section obliquely.
* **Too few segments**, missing the critical section and under-predicting peak moment or shear.
* **Wrong beta angle**, resolving strong-axis actions partly onto the weak axis.
* **Comparing forces across a Cut Skew Angle change** as though they were the same quantity. They are resolved on different planes; a difference is expected.
* **Passing a tangent where an angle is wanted.** Skew is often carried through a model as `tan(θ)` because that is what a slope offset needs. Cut Skew Angle wants the **angle**. A tangent over-rotates every cut — barely at 10°, by 3° at 30°, by 12° at 45° — which reads as a cut that is *almost* right.
* **A flat list of angles instead of a list of pairs.** `[0.3, 0.1]` has no stations in it, so it is not a table: it is ignored (with a warning) and Cut Skew Angle applies — usually 0, a square cut.
* **Degrees in Cut Skew Table.** Its angles are radians. `30` is read as 30 radians and clamped to 85°, with a warning naming Cut Skew Table.
* **A large Cut Skew Angle at a station near the end of the model**, where the skewed plane sweeps past the modelled region and the row comes back blank.
* **Reading Abs. max of an Extreme Event combination for uplift or hold-down.** With a response-spectrum case in the combination, Abs. max returns the larger-magnitude bound, which is usually compression. Read Max and Min.
* **Transverse members in the Group of a skewed cut.** A diaphragm, cross-frame or plate within 5° of the cutting plane keeps its forces in the row but is left out of the section. A member the plane crosses at a larger angle is cut obliquely, and its section is stretched by 1 / sin of the angle between the member and the plane, up to 11.5×. The console names a member stretched more than 2×. Neither is what a girder section check wants.
* **A reference position that is not the section centroid**, mixing axial force into the reported moment through the lever arm.
* **A group that reaches into an adjacent girder**, overstating the section forces.
* **Combining per-element live-load maxima manually** instead of using the composite, producing conservative but unreal results.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.openbrim.org/templates/openbrimfea/result-combinations-fea/fe-composites-fea.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
