LOCA is generic continuation and bifurcation analysis package that is designed for large-scale applications. The algorithms are designed with minimal additional interface requirements over that needed for a Newton method to reach an equilibrium solution. LOCA is built upon the NOX nonlinear solver package. The algorithms in NOX are generic and written to the NOX::Abstract::Group and NOX::Abstract::Vector, which provide abstract interfaces to the linear algebra, data structures, and nonlinear equations to be solved. LOCA uses the NOX interface and extends it via additional abstract groups that provide the interface needed for continuation and bifurcation tracking, such as setting parameters and computing derivatives with respect to parameters.
LOCA provides several generic groups that take the NOX group representing the equilibrium equations and implement the extended sets of nonlinear equations representing various forms of continuation and bifurcations (such as the additional equation for arc-length continuation). These extended groups also include generic algorithms for computing the Newton step for the extended system based on the Newton step for the equilibrium equations (e.g. Sherman-Morrison-Woodbury formula for arclength continuation). They are then sent to NOX for nonlinear solution.
Finally, LOCA provides a stepper class that repeatedly calls the NOX nonlinear solver to compute points along a continuation curve. The design allows for continuation of bifurcations so two-parameter bifurcation sets can be generated. The stepper class relies on several support classes that compute predictors, step sizes, etc. Each of these are discussed in more detail n the LOCA Class Overview.
Unlike NOX which can provide a range of nonlinear solvers using a single abstract interface to the nonlinear equations and linear algebra, LOCA provides several different levels of functionality, each requiring additional information from the underlying problem. Therefore, the interface to LOCA is split among several abstract classes each encapsulating a different level of functionality. To interface to LOCA, the user need only provide implementations of those abstract classes for the functionality the user is interested in. LOCA provides two complete interfaces:
both of which implement the interface required for all levels of functionality provided by LOCA.
See LOCA Class Overview.