The rigidDiaphragm command allows you to constrain the motion of multiple secondary nodes to the motion of a primary node, e.g., when simulating rigid floor diaphragms in 3D structural models. But what if you want to enforce rigid diaphragm constraints for a 2D model, e.g., as shown below? Prior to PR #764, you would have … Continue reading Rigid Diaphragm for 2D Models

# Category: Linear Analysis

# OpenSees Spy

A previous post on the 'fullGenLapack' eigenvalue solver led me down a rabbit hole of sorting out all the equation solvers (linear and eigen) and equation numberers available in OpenSees. I have yet to emerge from the rabbit hole, but I wanted to show how to create "spy" matrices from OpenSees models. A spy matrix … Continue reading OpenSees Spy

# Verifying Will Never Be Easy

A previous post compared the natural periods computed by OpenSees for a relatively simple one-story, one-bay, elastic frame to published ETABS results. Many easy to make modeling choices (mass distribution, rigid joint offsets, relative stiffness, etc.) led to "incorrect" periods. The "correct" modeling choices gave periods from OpenSees that were very close to ETABS--close enough … Continue reading Verifying Will Never Be Easy

# The Stiffness Matrix Isn’t Everything

After several deliveries of graduate level courses in linear and nonlinear structural analysis, I have started to think that we over-emphasize the stiffness matrix in linear structural analysis. And this emphasis can lead to conceptual difficulties in nonlinear structural analysis. The steps to a linear analysis are presented as: Form the stiffness matrix Form the … Continue reading The Stiffness Matrix Isn’t Everything

# Three-Dimensional Meshing

Two previous posts showed how to use Minjie's meshing functions to create line meshes for beam-column elements and 2D meshes for solid elements. This post will complete the trilogy by showing how to make a 3D mesh for solid elements. The bar shown below is the same model used in the post on 2D meshing. … Continue reading Three-Dimensional Meshing

# Line Mesh

The DiscretizeMember function, which dates back many years, was recently superseded by the line mesh command, written by Minjie. In addition to creating boundaries for solid meshes, as shown in this post, you can use line meshes to discretize a frame member (2D or 3D) into beam-column elements--just pass the optional element type and arguments … Continue reading Line Mesh

# Two-Dimensional Meshing

Although the material and element models are there, OpenSees is not well known for solid finite element analysis. Creating a good mesh is key to solid FEA and there aren't many meshing tools implemented in OpenSees. The OG block2D and block3D commands work fine, but you have to manually join or tie adjacent meshes with … Continue reading Two-Dimensional Meshing

# Trying to Get a Reaction

OpenSees does not compute reactions automatically because this can be a time consuming process--OpenSees assembles reactions over all nodes in a model, not just over the nodes that are constrained. When performing response history analysis, assembling reactions is likely not something you want or need to do at every time step. You probably just want … Continue reading Trying to Get a Reaction

# Like Spinning Nodes

After posting on reasons that the solution to Ax=b fails, I realized I omitted an important case: truss nodes in a frame model. Although this post might be a stretch for an LBU (least bloggable unit), the blogging equivalent of an LPU, there are important factors to consider for structural models comprised of truss and … Continue reading Like Spinning Nodes

# Failure to Solve

Solving a system of simultaneous linear equations, canonically referred to as solving Ax=b in math speak, is at the heart of every equilibrium solution algorithm for nonlinear analysis. In the context of OpenSees, A is the effective tangent stiffness matrix, x is the vector of displacement increments, and b is the residual force vector. However, … Continue reading Failure to Solve