Beam Summary#

The BeamSummary class lets you work with a list of beam sections and perform checks, design, and report generation for all of them at once.

Creating Concrete and Steel Materials#

Define the concrete and steel materials to be used across all beams:

from mento.material import Concrete_ACI_318_19, Concrete_EN_1992_2004, SteelBar
from mento import MPa

# ACI 318-19
conc = Concrete_ACI_318_19(name="C25", f_c=25 * MPa)

# or EN 1992-2004
conc = Concrete_EN_1992_2004(name="C25/30", f_c=25 * MPa)

steel = SteelBar(name="ADN 420", f_y=420 * MPa)

Supported design codes: ACI 318-19, EN 1992-2004, and CIRSOC 201-25.

Loading Input Data from Excel#

The beam dimensions, forces, and reinforcement details are typically loaded from an Excel input file. The file should have a specific format and units, as shown below:

Beam summary input.

The recommended way to read the Excel file is with pandas:

import pandas as pd

input_df = pd.read_excel('Mento-Input.xlsx', sheet_name='Beams', usecols='B:S', skiprows=4)

The Excel file should contain the following columns:

  • Label: Beam identifier (e.g., V101, V102).

  • Comb.: Load combination label.

  • b: Beam width in cm.

  • h: Beam height in cm.

  • cc: Stirrup clear cover in mm.

  • Nx: Axial force in kN.

  • Vz: Shear force in kN.

  • My: Moment in kNm.

  • ns: Number of stirrup legs.

  • dbs: Stirrup diameter in mm.

  • sl: Stirrup spacing in cm.

  • n1, n2, n3, n4: Number of longitudinal bars per group.

  • db1, db2, db3, db4: Diameter of longitudinal bars in mm.

Bottom reinforcement is checked against positive bending moments; top reinforcement against negative bending moments.

For a quick test you can build the DataFrame manually:

data = {
    "Label": ["", "V101", "V102", "V103", "V104"],
    "Comb.": ["", "ELU 1", "ELU 2", "ELU 3", "ELU 4"],
    "b": ["cm", 20, 20, 20, 20],
    "h": ["cm", 50, 50, 50, 50],
    "cc": ["mm", 25, 25, 25, 25],
    "Nx": ["kN", 0, 0, 0, 0],
    "Vz": ["kN", 20, -50, 100, 100],
    "My": ["kNm", 0, -35, 40, 45],
    "ns": ["", 0, 1.0, 1.0, 1.0],
    "dbs": ["mm", 0, 6, 6, 6],
    "sl": ["cm", 0, 20, 20, 20],
    "n1": ["", 2.0, 2, 2.0, 2.0],
    "db1": ["mm", 12, 12, 12, 12],
    "n2": ["", 1.0, 1, 1.0, 0.0],
    "db2": ["mm", 10, 16, 10, 0],
    "n3": ["", 2.0, 0.0, 2.0, 0.0],
    "db3": ["mm", 12, 0, 16, 0],
    "n4": ["", 0, 0.0, 0, 0.0],
    "db4": ["mm", 0, 0, 0, 0],
}
input_df = pd.DataFrame(data)

Creating the BeamSummary Object#

Once the input data is ready, create a BeamSummary object:

from mento.summary import BeamSummary

beam_summary = BeamSummary(concrete=conc, steel_bar=steel, beam_list=input_df)

To verify that units were applied correctly, inspect the data attribute:

beam_summary.data

Checking Beam Capacity#

Use check() to get a summary table with DCR (Demand-Capacity Ratio) values for all beams. Two modes are available:

Check with applied forces (uses the forces in the input data):

beam_summary.check()

Capacity check (zeros all forces to report section capacity only):

beam_summary.check(capacity_check=True)

The result is a DataFrame with identification, reinforcement, DCR columns, and a pass/fail status (✅ / ❌). For EN 1992-2004 concrete, code-specific capacity columns (MRd,top, MRd,bot, VRd) are added automatically; for ACI 318-19 and CIRSOC 201-25 the equivalent columns are ØMn,top, ØMn,bot, ØVn.

Viewing Detailed Results#

For a full breakdown per beam use flexure_results() and shear_results(). Both methods accept an optional index (1-based) to retrieve results for a single beam, and a capacity_check flag:

# All beams — forces from input
beam_summary.flexure_results()
beam_summary.shear_results()

# All beams — capacity check (adds MRd,top / MRd,bot or ØMn,top / ØMn,bot columns)
beam_summary.flexure_results(capacity_check=True)
beam_summary.shear_results(capacity_check=True)

# Single beam (1-based index)
beam_summary.flexure_results(index=2)
beam_summary.shear_results(index=2)

For step-by-step detail of a specific beam you can also access the node directly:

beam_summary.nodes[2].check_shear()
beam_summary.nodes[2].check_flexure()

Designing Reinforcement#

design() runs automatic flexure and shear design for every beam and returns a DataFrame with the filled rebar columns (n1n4, db1db4, ns, dbs, sl):

designed_df = beam_summary.design()

Exporting and Importing a Design#

After running design(), save the result to Excel so it can be reviewed or edited:

beam_summary.export_design("BeamDesign.xlsx")

To reload an edited file and rebuild the summary with the new reinforcement:

beam_summary.import_design("BeamDesign.xlsx")

Exporting Results to Excel#

The DataFrames returned by check(), flexure_results(), and shear_results() can be written to Excel directly:

beam_summary.check().to_excel("results.xlsx", index=False)

Detailed Word Report#

results_detailed_doc() generates a Word document (.docx) that contains:

  • Full flexure and shear detail for one selected beam.

  • Summary tables (beam data, flexure results, shear results, DCR check) for all beams.

The document is saved to the current working directory with the name Beam_Summary_{design_code}.docx (e.g. Beam_Summary_ACI 318-19.docx).

# Detailed report with beam 1 as the reference beam (default)
beam_summary.results_detailed_doc()

# Use beam 3 as the reference beam
beam_summary.results_detailed_doc(index=3)

The index parameter is 1-based and must be within the range of beams in the summary. An IndexError is raised for out-of-range values.