Engineering Software

I am always looking for ways to make engineering tasks more efficient. Being able to create code and software to automate tedious engineering tasks has helped me complete projects ahead of schedule and with more reliability.

Below are just a few of the programs that I have developed.

STAAD Load Case Generator

This program was developed to automatically create load combinations based on ASCE 7. Loads could also be generated for use with the direct analysis method defined in AISC 360. Using a set of base loads, load combinations are created as required. Hundreds of load combinations can be created with ease, unlike previous implementations that used Excel and often had load cases that were missing or not relevant.

CAESAR II Load Table Generator

CAESAR II is used to do a flexibility analysis of piping and reactions from the analysis are used for the structural design of supports. Previously, support reactions would manually be taken out of CAESAR II into a load table that would be used to design supports. This process was very tedious and prone to mistakes. When I first tried this, the way it was always done before, I told myself there is a better way; and there was! I created a program that reads the output from CAESAR II as well as the geometry file and automatically created a load table the could be used for the design of supports. This tool alone has saved hundreds of engineering hours.


The Self-OPTIM framework was created in the C# programming language and utilizes various components of the .NET framework to expedite the optimization process. The use of multiple threads and the ability to create asynchronous TCP/IP sockets to connect to remote clients prove invaluable to the optimization speed of Self-OPTIM. Another benefit to using the C# programming language is the ability to create a graphical user interface (GUI), which allows the user to effectively create any optimization run in a time efficient manner.

The development of the Self-OPTIM framework was made in such a way that additional modules could easily be created to implement the Self-OPTIM procedure in Figure 13. Any module that implements the abstract base class of the Self-OPTIM framework can be used in the optimization process. For example, the primary FEA tool utilized by the Self-OPTIM framework at this time is ABAQUS. However, other third party FEA tools could also be implemented if desired. For this implementation several sub-modules have been created that utilize ABAQUS. The two primary ones are the Standard module, which utilize the input file, and the UMAT module, which uses a Fortran file for user defined materials.

Steel Bridge Optimizer

The primary purpose of SBO is to automate the process of determining the optimal sections for a specific bridge geometry. The program comes preloaded with various features that make it easy to optimize various geometries once setup. Cross sections that are commonly available to the Steel Bridge Team come preloaded in the sections database of the program. Nearly four hundred different sections are able to be used in the optimization process including circular pipes, rectangular tubes and square tubes. Once optimization of the structure is complete, the optimal section assignments can be exported back into SAP2000 to do back checks and or stress analysis.

SBO in its entirety was created in C#, which is a .NET programming language that is specific to the Windows operating system. Visual Studio, an integrated development environment (IDE) from Microsoft, was utilized as the primary programming environment for the creation of the code and graphical user interface of SBO. In order to compute the heavy mathematical operations that are required in the program, a mathematical library named ILNumerics was used. In order to provide the user with a visual representation of the structure that is being optimized, Helix 3D Toolkit was used.

Using this toolkit, the user can see the optimization of the structure take place in real time. As each optimization loop finishes, the viewport updates the sections of all the frames. This provides the user with the ability to visualize the optimization process as it takes place.