Welcome to the juliajim Documentation!
Welcome to the documentation page.
Here's my vision for the package: I would like to use a singly specified dynamical system to subject it to different types of analyses. This includes transient simulations, steady-state periodic/quasi-periodic, etc.
If this is interesting to you, you may find value in the project.
Note that this is still under heavy development. It is functional but the documentation needs a lot of work. Please reach out to me in case you're interested in contributing, share the vision, and have started loving Julia! :-)
Introduction
This is a set of Julia routines to help with computational research in nonlinear structural dynamics. Most of the content is derived from my earlier efforts (functional but badly maintained) with MATLAB/Octave at https://github.com/Nidish96/octave-jim.
Installation
The development is not yet complete and the package is not registered either. But you can try out the package by installing it manually from Github as follows:
] dev https://github.com/Nidish96/juliajimor, with Pkg
using Pkg
Pkg.develop(url="https://github.com/Nidish96/juliajim")After this you can just do using juliajim and get cracking.
Getting Started
Although formal documentation is highly lacking, a series of examples with progressively increasing complexity designed to expose most of the features of the toolbox are provided here. Each example is documented to a reasonable degree. Going through the examples should already help you get started on the analysis. The following is a road-map for navigating the examples:
If you're just here for the...
- Fourier Utilities, start by looking at Example A.
- Continuation Utilities, start by looking at Examples B1 and B2.
- Integrated nonlinear dynamics, start by looking at Examples C1-C5. Note:
- For Harmonic Balance forced response computations, see Examples C1, C2, and C3.
- For Harmonic Balance Extended Periodic Motion Concept (EPMC) Nonlinear Modal Analysis, see Example C4.
- For transient simulation utilities, see Example C5, which uses a Newmark-$\beta$ implementation.
- Out of the above, all examples except Example C1 use a hysteretic nonlinearity.
Why yet another package?
Each programming language/environment/specification you choose (MATLAB, Python, Julia, C/C++, etc.) has its own host of libraries that can do a lot of what juliajim sets out to do. Notable examples include Trilinos (C++) and the SciML ecosystem (Julia), which can do what juliajim sets out and (FAR!) more.
My vision for this tool is this: I'd like to be able to specify a system once and conduct different types of analysis on it. This mainly includes nonlinear static solves, transient time-marching (also shooting for periodic solutions), harmonic balance (for periodic and quasi periodic solutions), and variants therein (potentially more).
Although a lot of the existing tools come very close to acheiving this, they don't span nearly all the kinds of nonlinearities. For instance, it is presently quite non-trivial to use any existing code as is for simulating systems with something as simple as an elastic dry-friction element (a hysteretically saturated linear spring).
Furthermore, very few tools provide a lot of convenience for harmonic balance simulations. A notable exception to this is the MATLAB tool NLvib (a very well designed set of minimal routines that work really well). The main reason that juliajim is not just a fork of NLvib is Julia - I'm convinced of the several advantages of Julia and want to ensure a useful package exists in Julia that I can throw myself behind. Furthermore, since I started using Julia MATLAB has started feeling really annoying (read: https://mateusaraujo.info/2024/04/03/matlab-is-dead-long-live-julia/ ).
Design Philosophy
I am taking care to ensure that the project is as small as possible in order to ensure that the routines developed here can be part of something bigger. Furthermore, the different parts of the package (HARMONIC, CONTINUATION) are written in order to be fully functional independently. For instance, the HB routines in the former portion of the toolbox can be used to write residue that can be used with BifurcationKit.jl for doing numerical continuation if the provided routines in CONTINUATION are deemed insufficient.
MDOFUTILS and its suite of routines (including frequency domain residues, time domain marchers, etc.) are my way of using the two main parts of the package to provide a functional interface for nonlinear dynamics research.
Conventions
- All scripts are tagged by an alphabet.
- All routines are upper case.
Other Projects to Look at
- NLvib: A Matlab toolbox for harmonic balance, shooting, and continuation.
- tmdsimpy: A Python package with very similar goals as juliajim.
- octave-jim: My old code - its a mess that works.
- HarmonicBalance.jl: A Julia toolbox for harmonic balance.
- BifurcationKit.jl: A great set of continuation and bifurcation routines.