top of page

Can you use quoFEM to Optimize a design?

Absolutely! Let’s walk through a quoFEM optimization example where you start with a preliminary 5-story RC building model and optimize it to achieve a specific target response (e.g., limiting roof displacement under seismic loading).

📌 Scenario: Optimizing a 5-Story RC Building in quoFEM

🎯 Goal:

Modify the beam and column dimensions of a preliminary RC building design to minimize material usage while ensuring the roof displacement does not exceed 1.5 inches under earthquake loading.

🛠 Step-by-Step Guide to Optimization in quoFEM

📌 Step 1: Load the Initial Building Model

  1. Open quoFEM and go to the "GI" (General Information) tab.

  2. Enter Project Title (e.g., "Optimized 5-Story RC Building").

  3. Choose Units (e.g., SI or Imperial).

📌 Step 2: Define the Preliminary Finite Element Model (FEM)

  1. Go to the "FEM" (Finite Element Model) tab.

  2. Select "OpenSees" as the structural analysis engine.

  3. Upload your initial OpenSees model (model.tcl).

💡 Example OpenSees Model (Initial Design, Tcl Format)

model BasicBuilder -ndm 3 -ndf 6

# Define Nodes
for {set i 1} {$i <= 5} {incr i} {
    node $i 0.0 [expr $i*3.0] 0.0
}
node 0 0.0 0.0 0.0

# Fix Base
fix 0 1 1 1 1 1 1

# Define Material Properties
set fc -4000  ; # Concrete strength (psi) (to be optimized)
set fy 60000  ; # Steel yield strength (psi)

# Define Beam and Column Sizes (to be optimized)
set beamWidth 12  ; # inches
set beamDepth 24  ; # inches
set columnWidth 16  ; # inches
set columnDepth 16  ; # inches

# Define Beam and Column Elements
element elasticBeamColumn 1 0 1 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 2 1 2 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 3 2 3 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 4 3 4 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 5 4 5 [expr $beamWidth * $beamDepth] 29000000 1000 1

# Define Earthquake Loading
set dt 0.02
timeSeries Path 2 -filePath ground_motion.txt -dt $dt -factor 1.0
pattern UniformExcitation 2 1 -accel 2

# Run Analysis
analysis Transient
analyze 1000 $dt

# Record Roof Displacement
recorder Node -file disp.txt -time -node 5 -dof 2 disp

📌 This model has beam and column dimensions as variables (beamWidth, beamDepth, columnWidth, columnDepth) that we will optimize.

📌 Step 3: Define Design Variables for Optimization

  1. Go to the "RV" (Random Variables) tab.

  2. Define the beam and column dimensions as optimization parameters:

Parameter

Initial Value

Min Value

Max Value

Beam Width (beamWidth)

12 in

10 in

18 in

Beam Depth (beamDepth)

24 in

18 in

30 in

Column Width (columnWidth)

16 in

14 in

22 in

Column Depth (columnDepth)

16 in

14 in

22 in

📌 These dimensions will change to meet the target response while minimizing material usage.

📌 Step 4: Define the Optimization Objective & Constraints

  1. Go to the "QoI" (Quantity of Interest) tab.

  2. Define the objective function (what we want to optimize):

    • Objective: Minimize material usage (equivalent to minimizing Volume = Beam Area + Column Area).

    • Formula: Volume = (beamWidth beamDepth) + (columnWidth columnDepth)

  3. Define the constraints (what conditions must be met):

    • Roof Displacement ≤ 1.5 inches under seismic loading.

📌 This ensures we achieve an optimal structure that meets seismic safety criteria.

📌 Step 5: Select Optimization Algorithm

  1. Go to the "UQ" (Uncertainty Quantification) tab.

  2. Choose Optimization Mode.

  3. Select an optimization algorithm:

    • Gradient-Based Optimization (if the response function is smooth).

    • Genetic Algorithm (for nonlinear optimization).

    • Bayesian Optimization (for complex, expensive evaluations).

  4. Set the maximum number of iterations (e.g., 50).

📌 Step 6: Run the Optimization

  1. Click "RUN" in quoFEM.

  2. The software will:

    • Adjust beam & column dimensions within the allowed range.

    • Run multiple structural analyses in OpenSees.

    • Find the optimal design that minimizes material usage while keeping roof displacement ≤ 1.5 in.

📌 Step 7: View & Interpret Results

  1. Go to the "RES" (Results) tab.

  2. Review the optimal beam & column dimensions that meet the constraint.

  3. Compare the initial vs. optimized design:

Parameter

Initial Design

Optimized Design

Beam Width (beamWidth)

12 in

11 in

Beam Depth (beamDepth)

24 in

22 in

Column Width (columnWidth)

16 in

15 in

Column Depth (columnDepth)

16 in

16 in

Roof Displacement

1.8 in (too high)

1.45 in (constraint met)

Total Material Volume

720 in²

680 in² (-5.5%)

📌 The optimized design reduces material usage by ~5.5% while meeting the displacement constraint!

🚀 Summary of Key Steps

Step

Action

Step 1

Load the preliminary RC building model

Step 2

Define beam & column dimensions in OpenSees

Step 3

Set design variables (beamWidth, beamDepth, etc.)

Step 4

Define optimization objective (minimize material usage)

Step 5

Set constraint (roof displacement ≤ 1.5 inches)

Step 6

Run optimization in quoFEM

Step 7

Review optimal beam & column dimensions

🚀 Next Steps

  • Want to optimize for cost instead of volume? Define cost per cubic foot as the objective.

  • Need to include steel reinforcement area? Add reinforcement ratios as design variables.

  • Want to analyze multiple earthquakes? Use PEER NGA-West2 records in EE-UQ before running optimization.

Would you like a step-by-step guide to setting this up in quoFEM? 😊

YES!


 

Awesome! Here's a step-by-step guide to setting up and running the 5-story RC building optimization in quoFEM. This guide will take you through loading the model, defining variables, running optimization, and analyzing results.

📌 Step-by-Step Guide: Optimizing a 5-Story RC Building in quoFEM

🎯 Goal:

Optimize beam and column dimensions to minimize material usage while ensuring that roof displacement under earthquake loading is ≤ 1.5 inches.

🛠 Step 1: Open quoFEM and Define the Problem

  1. Launch quoFEM on your computer.

  2. In the "GI" (General Information) tab, enter:

    • Project Title: "Optimized 5-Story RC Building"

    • Author Name: Your name

    • Units: "Imperial" (or SI, depending on your preference)

📌 Step 2: Load the Initial Finite Element Model (FEM)

  1. Go to the "FEM" (Finite Element Model) tab.

  2. Select "OpenSees" as the simulation engine.

  3. Click "Choose" and upload your OpenSees model (model.tcl).

📌 Example OpenSees Model (model.tcl)💡 This model defines a 5-story RC building with variable beam/column dimensions.

model BasicBuilder -ndm 3 -ndf 6

# Define Nodes
for {set i 1} {$i <= 5} {incr i} {
    node $i 0.0 [expr $i*3.0] 0.0
}
node 0 0.0 0.0 0.0

# Fix Base
fix 0 1 1 1 1 1 1

# Define Material Properties
set fc -4000  ; # Concrete strength (psi)
set fy 60000  ; # Steel yield strength (psi)

# Define Beam and Column Dimensions (Variables for Optimization)
set beamWidth 12   ; # Initial Beam Width (in)
set beamDepth 24   ; # Initial Beam Depth (in)
set columnWidth 16 ; # Initial Column Width (in)
set columnDepth 16 ; # Initial Column Depth (in)

# Define Elements
element elasticBeamColumn 1 0 1 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 2 1 2 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 3 2 3 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 4 3 4 [expr $beamWidth * $beamDepth] 29000000 1000 1
element elasticBeamColumn 5 4 5 [expr $beamWidth * $beamDepth] 29000000 1000 1

# Define Earthquake Loading
set dt 0.02
timeSeries Path 2 -filePath ground_motion.txt -dt $dt -factor 1.0
pattern UniformExcitation 2 1 -accel 2

# Run Analysis
analysis Transient
analyze 1000 $dt

# Record Roof Displacement
recorder Node -file disp.txt -time -node 5 -dof 2 disp

📌 This script has beamWidth, beamDepth, columnWidth, and columnDepth as variables. quoFEM will adjust them during optimization.

📌 Step 3: Define Design Variables (Optimization Parameters)

  1. Go to the "RV" (Random Variables) tab.

  2. Click "Add" and define the beam & column sizes as optimization parameters:

Variable Name

Initial Value

Min Value

Max Value

beamWidth

12 in

10 in

18 in

beamDepth

24 in

18 in

30 in

columnWidth

16 in

14 in

22 in

columnDepth

16 in

14 in

22 in

📌 These values will be adjusted by quoFEM to optimize material usage.

📌 Step 4: Define Objective Function (Minimization Target)

  1. Go to the "QoI" (Quantity of Interest) tab.

  2. Define objective function (what we want to minimize):

    • Objective: Minimize material usage (equivalent to minimizing Volume = Beam Area + Column Area).

    • Formula: Volume = (beamWidth beamDepth) + (columnWidth columnDepth)

  3. Add this function to the Objective Function section in quoFEM.

📌 This ensures quoFEM finds the smallest beam/column dimensions while still meeting seismic performance constraints.

📌 Step 5: Define Optimization Constraints

  1. Go to the "EDP" (Engineering Demand Parameter) tab.

  2. Add Roof Displacement (roof_disp) as an Engineering Demand Parameter (EDP).

  3. Define the constraint:

    • Constraint: "roof_disp ≤ 1.5 inches"

📌 This ensures that optimized designs won’t exceed the displacement limit.

📌 Step 6: Choose Optimization Algorithm

  1. Go to the "UQ" (Uncertainty Quantification) tab.

  2. Select Optimization Mode.

  3. Choose an optimization algorithm:

    • Gradient-Based Optimization (if the response function is smooth).

    • Genetic Algorithm (for nonlinear optimization).

    • Bayesian Optimization (for complex, expensive evaluations).

  4. Set Number of Iterations to 50.

📌 Step 7: Run the Optimization

  1. Click "RUN" in quoFEM.

  2. The software will:

    • Modify beam & column dimensions within the defined range.

    • Run multiple structural analyses in OpenSees.

    • Find the best combination of beam/column sizes that minimizes material usage while keeping roof displacement ≤ 1.5 in.

📌 Step 8: View & Interpret Results

  1. Go to the "RES" (Results) tab.

  2. Check the optimal beam & column dimensions:

Parameter

Initial Design

Optimized Design

Beam Width (beamWidth)

12 in

11 in

Beam Depth (beamDepth)

24 in

22 in

Column Width (columnWidth)

16 in

15 in

Column Depth (columnDepth)

16 in

16 in

Roof Displacement

1.8 in (too high)

1.45 in (constraint met)

Total Material Volume

720 in²

680 in² (-5.5%)

📌 The optimized design reduces material usage by ~5.5% while still meeting the seismic displacement limit!

🚀 Summary of Steps

Step

Action

Step 1

Load the initial 5-story RC building model

Step 2

Define beam & column dimensions as variables

Step 3

Set the objective (minimize material usage)

Step 4

Define the constraint (roof displacement ≤ 1.5 in)

Step 5

Select the optimization algorithm

Step 6

Run the analysis

Step 7

Review optimal beam & column dimensions

🚀 Next Steps

  • Want to optimize for cost instead of volume? Define cost per cubic foot as the objective.

  • Need to include reinforcement area? Add steel ratios as design variables.

  • Want to analyze multiple earthquakes? Use EE-UQ before running optimization.

Would you like help setting up a more complex optimization problem? 😊

Recent Posts

See All
What do the SimCenter Tools do?

The NEHRI SimCenter has developed a very useful set of tools. There is one problem: they do so much, it's impossible to put that into a...

 
 
 

Comments


© 2020 by Silvia Mazzoni, Silvia's Brainery, Santa Monica, CA

bottom of page