If one of the eigenvalues for your model is zero or negative, you likely made a modeling error. The error could be due to boundary conditions, element stiffness, or mass definition. Let me show you how easy it is to make an error and get bad eigenvalues due to an error in mass definition. Suppose … Continue reading One Way to Get Bad Eigenvalues
Month: November 2022
How to Find the Neutral Axis
There is no recorder option in OpenSees to get the location of the neutral axis in a fiber section. Instead, you have to post-process the section deformations. The strain at any point in a 2D fiber section is $latex \varepsilon=\varepsilon_a - y\kappa_z$ where $latex \varepsilon_a$ is the section axial deformation, $latex \kappa_z$ is the section … Continue reading How to Find the Neutral Axis
Quick (and Dirty) Modal Damping
Frank recently told me about "quick" modal damping and explained it as "adding the modal damping forces to the right-hand side but not adding the modal damping terms to the dynamic tangent". The rationale for "quick" modal damping is to reduce computational expense due to: Assembly of modal damping terms into the dynamic tangent must … Continue reading Quick (and Dirty) Modal Damping
Pseudo-Time Is Not the Load Factor
In a nonlinear static analysis, the time series associated with lateral loads is typically linear: ops.timeSeries('Linear',1) In this case, the load factor, $latex \lambda$, associated with the time series is equal to the pseudo-time in the domain, i.e., $latex \lambda(t)=t$. Then, when you use the '-time' option in the node and element recorders, you get … Continue reading Pseudo-Time Is Not the Load Factor
Misalignment with OpenSees
OpenSees has been around, solving various earthquake engineering and other problems, for over 20 years. So, I become skeptical when someone reports an error in the fundamental mathematical formulations of OpenSees. Source: https://screenrant.com/the-office-uk-best-quotes/ Typically, the "error" comes down to misalignment of what you think OpenSees should do, e.g., based on your experience with another structural … Continue reading Misalignment with OpenSees
Rigid Diaphragm for 2D Models
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
Simple Loads on a Cantilever
"What are the columns of output for a section force / section deformation element recorder?" is a frequently asked OpenSees question. The correct answer is "It depends on the type of element and section model." But a much better answer is "Apply simple loads to a cantilever and figure it out." Consider the cantilever and … Continue reading Simple Loads on a Cantilever
OpenSees Pareto Principles
The Pareto Principle, aka the "80/20 Rule", states that 80% of the output is generated by 20% of the input. For example, in any given academic department of engineering, 20% of the faculty generates 80% of the papers, research funding, graduated students, citations, or whatever metric. And 100% of the faculty will tell you they … Continue reading OpenSees Pareto Principles
Element Self-Weight
A question posted the other day in the OpenSees Facebook group asked how to add self-weight to elements. I gave the easy I-can-answer-this-in-under-two-seconds answer of "use the eleLoad command". It turns out the complete answer is not so simple as it depends on the type of element to which you want to apply self-weight. The … Continue reading Element Self-Weight
CyclopSees
I first came to know The Postman as a failed motion picture from the late 1990s. The movie starred Kevin Costner, who also starred in Bull Durham, the blog's most frequently referenced movie. Although I've never watched The Postman (not to be confused with Il Postino), I have read the original novel, written by David … Continue reading CyclopSees
