Sometimes Tags Don’t Matter

When building a model in OpenSees, you have to ensure that you have unique tags for your domain components (nodes, elements, patterns, time series, parameters, etc.), reliability components (random variables, limit state functions, etc.), and model building components (materials, sections, beam integrations, etc.). If you define a duplicate tag, you will get an error message. … Continue reading Sometimes Tags Don’t Matter

How to Profile OpenSees

Where does the time in a nonlinear finite element analysis go? For large models, solving equations dominates the analysis time, while for small to moderate models, constitutive models (state determination) dominate. It is impossible to know the relative cost of state determination and solving equations prior to an analysis. Profiling tools can tell you after … Continue reading How to Profile OpenSees

Don’t Invert the Matrix

A common issue with linear algebra textbooks is the depiction of $latex {\bf x}={\bf A}^{-1}{\bf b}$ as the solution to the linear system of equations $latex {\bf A}{\bf x}={\bf b}$. Find the inverse of the matrix $latex {\bf A}$, then multiply that inverse with the right-hand side vector, $latex {\bf b}$. Theoretically correct? Yes. Practical? … Continue reading Don’t Invert the Matrix

Stop Hogging All the RAM

While writing a previous post on elastic shear beams available in OpenSees, I noticed that the ElasticTimoshenkoBeam3d class stores the element stiffness matrix, along with several other matrices, as private data. As a result, each instance of this class keeps its own copy of several 12x12 matrices for the element response instead of writing to … Continue reading Stop Hogging All the RAM

A Lovely Little Mystery

Most comments in the OpenSees source code convey the purpose of an if-statement, loop, function call, etc. Other comments convey frustration with the author's implementation choices. I have addressed and/or deleted the gentle yet passive aggressive comments Frank left for me in the various places of OpenSees that I have touched. So, while making some … Continue reading A Lovely Little Mystery

Unrolling the Four Node Quad

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

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

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

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