The FourNodeQuad was one of the first, if not the first, solid elements in OpenSees. Despite the element's mediocre implementation, the coding style was copied by others into subsequent solid element implementations. Fortunately, before that copying happened, I revised the implementation to be more computationally efficient--and I was kind enough to leave the original author's … Continue reading Unrolling the Four Node Quad
Category: Programming
Un-MATLAB Your OpenSees
Many people develop their OpenSees elements and materials in MATLAB, then port to C++. To support this transition, OpenSees implements easy matrix-vector algebra by overloading the +, -, *, and ^ operators for the Matrix and Vector classes. The overloaded operators are self-explanatory, except for ^, which is "transpose times" or inner product. C = … Continue reading Un-MATLAB Your OpenSees
An OpenSeesSPecial Request
Due to sendSelf and recvSelf implementation neglect, OpenSeesSP is broken. I want it to work. Not for OpenSees Cloud, we'll do fine without OpenSeesSP. Instead, it's for everyone out there who wants to run a large model locally without encountering stubborn errors or jumping through hoops to use OpenSeesMP. So, I have a small request--even … Continue reading An OpenSeesSPecial Request
Main Street, OpenSees
Every C++ executable has a main() function and OpenSees.exe, the standalone Tcl executable, is no exception. You can find the main() function in SRC/tcl/tclAppInit.cpp, where nothing much happens besides calling g3TclMain(), which is defined in SRC/tcl/tclMain.cpp, home of more familiar content like the banner and copyright statement. Prior to the conveniences provided by scripting languages--running … Continue reading Main Street, OpenSees
OpenSees 12345
In the early 2000s, when the Tcl interpreter was taking shape for OpenSees, Frank used a dummy tag 123456789 to determine if a load pattern had already been defined while parsing the load and sp commands. Here is the 2001 source code for TclModelBuilder.cpp--clearly written by Frank because he does not capitalize anything when he … Continue reading OpenSees 12345
How to Find a Memory Leak in OpenSees
Memory leaks plague virtually all software written in C++ or any other language that requires programmers to manage memory. OpenSees is no exception. With code written by many people with varying knowledge of C++ and very little overall QA/QC, it's fair to say OpenSees has more than its fair share of memory leaks. It's a … Continue reading How to Find a Memory Leak in OpenSees
OpenSees Tcl to Python Converter
Although Python is a more popular programming language than Tcl, I suspect Tcl remains the most used language for OpenSees. Python is gaining ground though as it appeals to newer users of OpenSees. I don't have data to back any of this up. To help the transition from Tcl to Python, OpenSeesPy was designed to … Continue reading OpenSees Tcl to Python Converter
Glulam Volume Factor
I knew nothing about wood design until I started teaching it. Although there are accommodations for LRFD, which is all I learned as a student, wood design is entirely ASD, or allowable stress design. The required stress, f, determined from structural analysis for the controlling ASD load combination, must be less than the available stress, … Continue reading Glulam Volume Factor
Section X
You can record section response in a frame element if you know the section number, or integration point, of the section whose response you would like to record. This is straightforward for distributed plasticity integration such as Lobatto or Legendre where section number 1 is at end I of the element and section number N … Continue reading Section X
No Exit
Have you ever seen OpenSees.exe vanish all of a sudden or received a "Kernel died" message when running OpenSeesPy in a Jupyter Notebook? The C++ exit() function is the likely culprit. Or a segmentation fault. But this post will focus on the exit() function. Some grepping and line counting reveals over 2,000 calls to exit() … Continue reading No Exit