FEA Results Guide

Overview

This guide explains how to extract and organize finite element analysis results in OpenBrIM using ParamML expressions. After running FEA analyses, results must be queried and organized for design checks, reports, and code compliance verification.

Key Concepts:

  • Result Functions: ParamML functions that query analysis results (stress(), force(), forcePos(), forceNeg(), etc.)

  • Limit State Organization: Structuring results by AASHTO limit states (Strength, Service, Fatigue, Extreme Event)

  • Envelope Results: Combined max/min results across multiple load cases

  • Concurrent Forces: Extracting all force components when one component governs

  • Multi-Station Extraction: Using map() to extract results at multiple locations efficiently

Core Result Extraction Functions

1. Force Extraction Functions

force(elementPath, loadCase, component, station?)

Extracts a specific force component from analysis results.

Parameters:

  • elementPath (String): Full path to the FE element (use fullname() for dynamic paths)

  • loadCase (String): Load case or combination name

  • component (String): Force component ('Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz')

  • station (Number, optional): Station location along element

Returns: Number - Force value in the specified component

Example:


forcePos(component, elementPath, loadCase, station?)

Extracts the maximum (positive) value for a specific force component.

Parameters:

  • component (String): Force component ('Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz')

  • elementPath (String): Full path to the FE element

  • loadCase (String): Load case or combination name

  • station (Number, optional): Station location

Returns: Number - Maximum (positive) force value

Example:

Related: forceNeg(), forceFxPosConc(), forceFyPosConc(), forceFzPosConc(), forceMxPosConc(), forceMyPosConc(), forceMzPosConc()


forceNeg(component, elementPath, loadCase, station?)

Extracts the minimum (negative) value for a specific force component.

Parameters:

  • component (String): Force component ('Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz')

  • elementPath (String): Full path to the FE element

  • loadCase (String): Load case or combination name

  • station (Number, optional): Station location

Returns: Number - Minimum (negative) force value

Example:

Related: forcePos(), forceFxNegConc(), forceFyNegConc(), forceFzNegConc(), forceMxNegConc(), forceMyNegConc(), forceMzNegConc()


Concurrent Force Functions

These functions extract ALL force components when a specific component reaches its maximum/minimum value.

Function Pattern:

  • forceFxPosConc(loadCase, element, station, concElement, concStation) - All forces when Fx is maximum positive

  • forceFxNegConc(loadCase, element, station, concElement, concStation) - All forces when Fx is maximum negative

  • Similar functions for: Fy, Fz, Mx, My, Mz

Parameters:

  • loadCase (String): Load case or combination name

  • element (String): Element path for the component being maximized

  • station (Number): Station for the component being maximized

  • concElement (String): Element path for concurrent forces extraction

  • concStation (Number): Station for concurrent forces extraction

Returns: Array [Fx, Fy, Fz, Mx, My, Mz] - All force components at the concurrent location when the primary component governs

Example:

Use Cases:

  • Design checks requiring concurrent forces (e.g., P-M interaction)

  • Extracting shear when moment governs

  • Combined stress calculations


2. Stress Extraction Functions

stress(loadCase, element, station?)

Extracts stress components from analysis results.

Parameters:

  • loadCase (String): Load case or combination name

  • element (String): Element path or identifier

  • station (Number, optional): Station location

Returns: Array [σxx, σyy, σzz, τxy, τyz, τzx] - Stress tensor components

Example:

Note: Stress results depend on element type and location (integration points, nodes, etc.)


3. Displacement Extraction Functions

disp(node, loadCase, component)

Extracts nodal displacement for a specific component.

Parameters:

  • node (String): Node name or path

  • loadCase (String): Load case or combination name

  • component (String): Displacement component ('Tx', 'Ty', 'Tz', 'Rx', 'Ry', 'Rz')

Returns: Number - Displacement value

Example:

Related: dispX(), dispY(), dispZ() - Component-specific functions


Result Organization Patterns

1. Multi-Station Extraction

Use map() to extract results at multiple stations efficiently.

Pattern:

Nested Pattern - Multiple Load Cases at Multiple Stations:


2. Limit State Organization

AASHTO LRFD limit states should be organized hierarchically.

Structure:


3. Unfactored Results Pattern

Extract results from individual load cases grouped by limit state.

Example:

Result Structure:


4. Factored Results Pattern

Extract results from factored load combinations (max and min envelopes).

Example:


5. Governing Results Pattern

Extract the absolute min/max across multiple load combinations.

Example:

Sorting Pattern for Concurrent Forces:


6. Concurrent Force Extraction Pattern

Extract all force components when one component governs.

Pattern:

Result Structure:

Where Fx is the governing (max or min) value, and Fy, Fz, Mx, My, Mz are concurrent values.


Complete Extraction Object Example

Stress Extraction Object


Force Extraction Object


Advanced Patterns

1. Conditional Result Extraction

Use guards to extract only required limit states:


2. NULL Handling

Always check for NULL before extracting:


3. Using atstation() with Result Functions

Evaluate station-dependent results at specific locations:


4. Result Data Structure Indexing

Access specific components from result arrays:


Best Practices

1. Performance Optimization

Use StaticParams for repeated extractions:

Cache commonly used results:


2. Organize by Hierarchy


3. Document Result Structures

Use comments to clarify complex nested structures:


4. Error Checking

Check for NULL results before using:


5. Unit Consistency

Ensure consistent units in result extraction:


Common Pitfalls

1. Incorrect Element Paths

Problem: Element path doesn't match FEA model


2. Missing CoreCombName

Problem: Load case names don't include combination suffix


3. Index Errors in Nested Maps

Problem: Using wrong index variable in nested maps


4. Concurrent Force Confusion

Problem: Using wrong concurrent location


Summary

OpenBrIM FEA result extraction uses ParamML functions to query analysis outputs and organize them for design checks:

Core Functions:

  • force(), forcePos(), forceNeg() - Force/moment extraction

  • forceFxPosConc(), forceMyNegConc(), etc. - Concurrent force extraction

  • stress() - Stress component extraction

  • disp(), dispX(), dispY(), dispZ() - Displacement extraction

Organization Patterns:

  • Multi-station extraction using map()

  • Hierarchical limit state organization (Unfactored, Factored, Governing, Envelope)

  • Conditional extraction with guards

  • NULL handling for missing load cases

Best Practices:

  • Use fullname() for dynamic element paths

  • Cache results to avoid redundant extractions

  • Use StaticParams in repeats for performance

  • Document complex result structures

  • Check for NULL before extraction

  • Maintain unit consistency

Common Use Cases:

  • Stress/force extraction at design stations

  • Concurrent forces for interaction checks

  • Envelope results across multiple load combinations

  • Limit state compliance verification

  • Governing results for design reports

By following these patterns, AI agents can efficiently extract and organize FEA results for bridge design code checks and documentation.

Last updated