Introduction
When analyzing wall panels in ETABS for crack width calculations, structural engineers often face confusion about which moment components to use: M11, M22, or M12. This comprehensive guide explains the local axes color convention in ETABS and provides a clear methodology for crack width analysis using the appropriate moment directions.
🎯 Quick Answer
Use M11 for steel parallel to Local-1, M22 for steel parallel to Local-2. Do not use M12 by itself—include its effect via a Wood–Armer combination with M11/M22.
1. ETABS Local Axes Color Convention
ETABS uses a consistent color coding system for local axes on shell elements (walls, slabs, etc.):
The local axes form a right-handed coordinate system where Local-1 × Local-2 → Local-3. To display these axes in ETABS:
- Display → Set Display Options → Area Local Axes
- Or rotate axes using Assign → Shell → Local Axes
2. Shell Moment Components Explained
ETABS reports shell moments as forces per unit length (kN·m/m or equivalent). Understanding each component is crucial for proper crack width analysis:
| Moment Component | Physical Meaning | Bar Direction Mapping | Usage in Crack Analysis |
|---|---|---|---|
M11 |
Bending of strips parallel to Local-1 (curvature in 1-direction; moment about Local-2) | Bars parallel to Local-1 (red, typically horizontal) | Use for horizontal reinforcement crack checks |
M22 |
Bending of strips parallel to Local-2 (curvature in 2-direction; moment about Local-1) | Bars parallel to Local-2 (green, typically vertical) | Use for vertical reinforcement crack checks |
M12 = M21 |
Twisting moment per unit width coupling Local-1 and Local-2 | Not a bar direction by itself | Include via Wood–Armer combination |
3. Determining Which Face is in Tension
For crack width analysis, we need to identify the tension face. Use the right-hand rule about the listed axis:
- +M11 is a positive rotation about +Local-2
- +M22 is a positive rotation about +Local-1
To avoid sign confusion and properly account for twisting, compute Wood–Armer design moments for each face:
Bottom Face (−Local-3) Tension
M₂_bot = max(0, M22) + |M12|
Top Face (+Local-3) Tension
M₂_top = max(0, -M22) + |M12|
⚠️ Important Design Note
Use M₁_* for bars parallel to Local-1 (red) and M₂_* for bars parallel to Local-2 (green) on the face that governs. This is the standard CSI approach for slab/wall design strips so that M12 is not lost.
4. Service-Level Crack Width Workflow
Follow this systematic approach for crack width analysis:
- Use Service Load Combinations (no φ factors) to read M11/M22/M12 from ETABS
- Form Wood–Armer design moments per face and pick the governing face for the bar direction you're checking
- Compute steel stress (fₛ) from a cracked-section analysis of a unit-width strip in that direction
- Evaluate crack control:
- ACI 318-19 Ch. 24.3 — prescriptive control via bar size/spacing at the tension face
- Where an explicit width is required (e.g., watertightness), use an accepted model such as ACI 224R (Gergely–Lutz) with the fₛ from Step 3
5. C# Implementation for Wood–Armer Design Moments
Here's a complete C# implementation that you can use in your structural analysis software:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace etabslocalaxes
{
///
/// Wood–Armer design moments for ETABS shell elements.
/// Computes design moments for top (+Local-3) and bottom (−Local-3) faces.
///
public sealed class WoodArmer
{
///
/// ETABS shell moments in kN·m per meter
///
public record Moments(double M11, double M22, double M12);
///
/// Design moments per face (per meter, ≥ 0)
///
public record FaceDesign(double M1, double M2);
///
/// Compute Wood–Armer design moments for top (+Local-3) and bottom (−Local-3) faces.
///
public static void Design(Moments m, out FaceDesign top, out FaceDesign bottom)
{
double t = Math.Abs(m.M12);
// Bottom (−3) face tension: positive M11/M22 on bottom face
double M1_bot = Math.Max(0.0, m.M11) + t;
double M2_bot = Math.Max(0.0, m.M22) + t;
// Top (+3) face tension: negative M11/M22 on top face
double M1_top = Math.Max(0.0, -m.M11) + t;
double M2_top = Math.Max(0.0, -m.M22) + t;
top = new FaceDesign(M1_top, M2_top);
bottom = new FaceDesign(M1_bot, M2_bot);
}
///
/// Get the governing face for bars parallel to a chosen local axis (1 or 2).
/// Returns the FaceDesign and a label ("Top"/"Bottom").
///
public static (FaceDesign face, string label) GoverningForBars(int localAxis, in FaceDesign top, in FaceDesign bottom)
{
if (localAxis == 1)
return (top.M1 >= bottom.M1) ? (top, "Top (+3)") : (bottom, "Bottom (−3)");
if (localAxis == 2)
return (top.M2 >= bottom.M2) ? (top, "Top (+3)") : (bottom, "Bottom (−3)");
throw new ArgumentOutOfRangeException(nameof(localAxis), "Use 1 for bars ‖ Local-1 or 2 for bars ‖ Local-2.");
}
}
///
/// Optional ETABS OAPI integration for reading shell moments directly
///
public static class EtabsShellResults
{
/* Example usage (requires ETABSv1 reference):
public static void DumpSelectedShellMoments(ETABSv1.cSapModel sap, Action log)
{
sap.Results.Setup.DeselectAllCasesAndCombosForOutput();
sap.Results.Setup.SetComboSelectedForOutput("Service LC");
int n = 0; string[] Obj=null, Elm=null, Lc=null, StepType=null; double[] StepNum=null;
double[] F11=null, F22=null, F12=null, V13=null, V23=null, M11=null, M22=null, M12=null;
sap.Results.AreaForceShell(ref n, ref Obj, ref Elm, ref Lc, ref StepType, ref StepNum,
ref F11, ref F22, ref F12, ref V13, ref V23, ref M11, ref M22, ref M12);
log("Shell\tLC\tM11\tM22\tM12 (kN·m/m)");
for (int i = 0; i < n; i++)
log($"{Obj[i]}\t{Lc[i]}\t{M11[i]:F3}\t{M22[i]:F3}\t{M12[i]:F3}");
}
*/
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
///
/// Example: compute Wood–Armer design moments for sample service moments.
/// Replace the sample values with ETABS outputs at your critical point.
///
private void DemoWoodArmer()
{
var m = new WoodArmer.Moments(m11: -12.5, m22: 28.0, m12: 3.6); // kN·m/m
WoodArmer.Design(m, out var top, out var bottom);
// Suppose you want the governing design moment for vertical bars (‖ Local-2)
var (gov, face) = WoodArmer.GoverningForBars(localAxis: 2, top, bottom);
MessageBox.Show(
$"Top: {top}\nBottom: {bottom}\n\nGoverning for bars ‖ Local-2: {face} → M2 = {gov.M2:F3}",
"Wood–Armer Design Moments", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// Example button handler you can drop onto a Button named btnCompute
private void btnCompute_Click(object sender, EventArgs e)
{
// TODO: parse M11/M22/M12 from TextBoxes and call WoodArmer.Design(...)
DemoWoodArmer();
}
}
}
6. ETABS Reference Setup
To integrate with ETABS directly, you'll need to add the ETABSv1 reference:
Adding ETABSv1 Reference (Early Binding - Recommended)
- Close any ETABS instances
- In Visual Studio: Project → Add Reference…
- Use either method:
- COM tab → look for "ETABSv1 1.0 Type Library" → check → OK
- Browse to ETABS installation folder:
C:\Program Files\Computers and Structures\ETABS <version>\ETABSv1.dll
- In Project → Properties:
- Platform target: x64 (ETABS is 64-bit)
- Uncheck "Prefer 32-bit"
- For ETABSv1 reference: Embed Interop Types = True
Alternative: Late Binding (No Reference)
using System;
using System.Runtime.InteropServices;
public static class EtabsLateBinding
{
public static dynamic GetActiveEtabs()
{
// Try to grab the active ETABS OAPI via its ProgID
object obj = Marshal.GetActiveObject("CSI.ETABS.API.ETABSObject");
return obj; // use as 'dynamic'
}
}
7. Practical ETABS Workflow
Follow these steps in ETABS for crack width analysis:
- Display Service Load Case results → Shell Forces/Stresses
- Verify local axes using Display → Set Display Options → Area Local Axes
- Read M11/M22/M12 at critical locations
- Form Wood–Armer moments for the face and direction you're checking
- Use those moments to get steel stress (cracked-section analysis) for the bar set perpendicular to the expected crack orientation
- Apply your chosen crack-width model or check ACI 24.3 spacing limits
8. Code References and Standards
This methodology is based on established engineering standards and software documentation:
- CSI (ETABS/SAFE) Help — Shell local axes definitions and shell forces/stresses output conventions
- CSI SAFE/ETABS Design Manuals — Wood–Armer design moments for plates/slabs/walls
- ACI 318-19, Building Code Requirements for Structural Concrete — Chapter 24.3, Serviceability: Control of flexural cracking by reinforcement distribution
- ACI 224R-01, Control of Cracking in Concrete Structures — background and Gergely–Lutz equation for estimating crack width
📥 Download Complete Implementation
Get the complete C# implementation with ETABS integration and example calculations.
Download C# Code Download Complete GuideConclusion
Understanding ETABS local axes and moment directions is crucial for accurate crack width analysis of wall panels. By using the Wood–Armer design moment approach, you ensure that the twisting moment (M12) is properly accounted for in your crack width calculations. The color convention (red=Local-1, green=Local-2, blue=Local-3) provides a visual reference that simplifies the analysis process.
Remember: Use M11 for horizontal bars, M22 for vertical bars, and always include M12 effects through Wood–Armer combinations. This methodology ensures comprehensive and accurate crack width analysis for your structural designs.