Solve the ordinary differential equation of motion for a viscously damped mass-spring system that exhibits nonlinear, cyclic, force-displacement behavior when subject to an arbitrary external force. The derivatives are implicitly integrated through time by using the Newmark-beta method as presented in . The complete numerical form of the governing equation is then expressed as a residual and a solution is found using a Newton-Raphson algorithm obtained from . The material behavior of the spring may be either linear or nonlinear, as Newton's method should converge either way.
A nonlinear relationship between the restoring force and the displacement is defined by using a backbone curve. The data is input as a set of abscissa-ordinate pairs that must be strictly positive. The user-provided backbone is then reflected through both the horizontal and vertical axes such that the relationship becomes isotropic, i.e., the same whether the spring is being stretched or compressed. The first data point is assumed to be the initial elastic yield point. If the system begins to recover while yielding, the backbone is shifted from its original yield point up to the current displacement. This shifting creates a very basic form of strain hardening. However, it fails to capture the more realistic effect of cyclic strain hardening and degradation. The implementation of some method to improve the hysteretic behavior of the spring is the main focus of future developments.
The script is divided into three main parts: Input Parameters, Source Computations, and Postprocessing. The only thing a basic user need modify is the Input Parameters section. Optionally, they may also perform auxiliary calculations in the Postprocessing section. There are two demonstrations provided: `steelBar.m` and `chopraEx55.m`. The former is a model of a non-slender steel bar that deforms under uniaxial compression and tension and supports a, relatively, very large mass. Its backbone curve represents ASTM A992 steel at 20 degrees-Celsius and was generated in accordance with . The latter demonstration reproduces Example 5.5 from  exactly, and serves as a verification of this code.
This project is intended to be for academic or research purposes, and so I encourage anyone to experiment with alternatives or new capabilities. And if you do, please share your ideas with me! I've explained almost every bit of code directly in the files, including instructions for some of the inputs. I also discuss important modelling assumptions and certain limitations, so be sure to read the commentary.
If you have questions or comments, please feel free to contact me. I am happy to assist with issues and take any and all feedback into consideration so that I may provide improvements. I am also open to academic discussions about the related subjects. Finally, I am always interested in employment opportunities ;)
 Chopra, AK. (2014). "Dynamics of Structures, Theory and Applications to Earthquake Engineering: Global Edition." Pearson Education. 4th ed.
 Burden, RL, Faires, DJ. (1993). "Numerical Analysis." PWS Publishing Company. 5th ed.
 Cai W, Morovat MA, Engelhardt MD. (2017). "True stress-strain curves for ASTM A992 steel for fracture simulation at elevated temperatures." Journal of Construction Steel Research. 139.