28 #include "libmesh/linear_solver.h" 55 _t0_X.reset(system.solution->clone().release());
56 _t0_X_orig.reset(system.solution->zero_clone().release());
60 _t0_X->add(-1., *system.solution);
91 std::unique_ptr<libMesh::NumericVector<Real>>
92 f(X.zero_clone().release()),
93 dfdp(X.zero_clone().release()),
94 dXdp(X.zero_clone().release()),
95 t1_X(X.zero_clone().release()),
96 dX(X.zero_clone().release());
98 libMesh::SparseMatrix<Real>
112 _g(X, p, *t1_X, t1_p, g);
146 libMesh::SparseMatrix<Real> &jac,
147 libMesh::NumericVector<Real> &t1_X,
152 std::unique_ptr<libMesh::NumericVector<Real>>
153 f(X.zero_clone().release()),
154 dfdp(X.zero_clone().release()),
155 dXdp(X.zero_clone().release());
189 val = std::sqrt(t1_p*t1_p + std::pow(t1_X.l2_norm(), 2));
197 _t0_X->add(1., t1_X);
208 std::unique_ptr<libMesh::NumericVector<Real>>
209 f(X.zero_clone().release()),
210 t1_X(X.zero_clone().release());
221 _g(X, p, *t1_X, t1_p, g);
230 libMesh::NumericVector<Real> &t1_X,
236 std::unique_ptr<libMesh::NumericVector<Real>>
237 dX(X.clone().release());
virtual Real _g(const libMesh::NumericVector< Real > &X, const MAST::Parameter &p)
where, and .
void _update_search_direction(const libMesh::NumericVector< Real > &X, const MAST::Parameter &p, libMesh::SparseMatrix< Real > &jac, libMesh::NumericVector< Real > &t1_X, Real &t1_p)
updates for the current iterate X and p, and stores these values to _t0_X and _t0_p for next computa...
This class implements a system for solution of nonlinear systems.
virtual void clear_elem_operation_object()
clears the association of this object with the assembly element operation object. ...
virtual bool sensitivity_assemble(const MAST::FunctionBase &f, libMesh::NumericVector< Real > &sensitivity_rhs)
Assembly function.
virtual void _save_iteration_data()
method saves any data for possible resuse if the solution step is restarted
This is a scalar function whose value can be changed and one that can be used as a design variable in...
virtual void set_elem_operation_object(MAST::AssemblyElemOperations &elem_ops)
attaches a element operation to this object, and associated this with the element operation object...
void _solve_schur_factorization(const libMesh::NumericVector< Real > &X, const MAST::Parameter &p, libMesh::SparseMatrix< Real > &jac, bool update_jac, libMesh::NumericVector< Real > &f, bool update_f, libMesh::NumericVector< Real > &dfdp, bool update_dfdp, libMesh::NumericVector< Real > &dXdp, bool update_dXdp, const libMesh::NumericVector< Real > &dgdX, const Real dgdp, const Real g, libMesh::NumericVector< Real > &dX, Real &dp)
solves for the linear system of equation using Schur factorization.
virtual void initialize(Real dp)
initializes the search direction using the specified load step dp.
void _solve(const libMesh::NumericVector< Real > &X, const MAST::Parameter &p, libMesh::NumericVector< Real > &f, bool update_f, libMesh::NumericVector< Real > &dfdp, bool update_dfdp, const libMesh::NumericVector< Real > &dgdX, const Real dgdp, const Real g, libMesh::NumericVector< Real > &dX, Real &dp)
solves for the linear system of equation as a monolithic system dX and dp are returned from the solu...
the equation set is: the N-R updates are calculated such that This equation is solved using Schur-f...
Real arc_length
arc length that the solver is required to satisfy for the update.
MAST::AssemblyBase * _assembly
std::unique_ptr< libMesh::NumericVector< Real > > _t0_X_orig
std::unique_ptr< libMesh::NumericVector< Real > > _X0
void set_operation(MAST::NonlinearSystem::Operation op)
sets the current operation of the system
PseudoArclengthContinuationSolver()
std::unique_ptr< libMesh::NumericVector< Real > > _t0_X
virtual void _solve_NR_iterate(libMesh::NumericVector< Real > &X, MAST::Parameter &p)
virtual ~PseudoArclengthContinuationSolver()
MAST::AssemblyElemOperations * _elem_ops
virtual void _reset_iterations()
method resets any data if a solution step is restarted
const MAST::NonlinearSystem & system() const
bool schur_factorization
flag to use Schur-factorizaiton (default) or monolithic solver
virtual void solve(MAST::AssemblyElemOperations &elem_ops, MAST::AssemblyBase &assembly)
solves the nonlinear problem with the specified assembly operation object