Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F71428227
NonLinearSolver.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Jul 11, 18:18
Size
2 KB
Mime Type
text/x-c
Expires
Sat, Jul 13, 18:18 (1 d, 22 h)
Engine
blob
Format
Raw Data
Handle
18949360
Attached To
rLAMMPS lammps
NonLinearSolver.h
View Options
#ifndef NON_LINEAR_SOLVER_H
#define NON_LINEAR_SOLVER_H
// ATC includes
#include "ATC_TypeDefs.h"
#include "MatrixLibrary.h"
#include "ATC_Error.h"
// other includes
#include <set>
#include <map>
namespace ATC {
/**
* @class TangentOperator
* @brief an adaptor to allow NonLinearSolver to work with a generic function
*/
class TangentOperator {
public:
TangentOperator(){};
virtual ~TangentOperator(){};
virtual void function(const VECTOR & x, DENS_VEC & f) {}; // =0;
virtual void tangent(const VECTOR & x, DENS_VEC & f, MATRIX & dfdx) =0;
//virtual void function(const VECTOR & x, VECTOR & f) {}; // =0;
//virtual void tangent(const VECTOR & x, VECTOR & f, MATRIX & dfdx) {}; // =0;
};
/**
* @class NonLinearSolver
* @brief a class to solve a system of non-linear equations
* f(x) = 0
*/
class NonLinearSolver {
public:
enum NonLinearSolveType {
NEWTON_RAPHSON=0,
};
/** Constructor */
NonLinearSolver(
TangentOperator * f, // provides f and f' at x, pointer for polymorphism
const BC_SET * bcs = NULL,
const int dof = 0,
bool parallel = false
);
/** Destructor */
virtual ~NonLinearSolver() {};
/** residual norm */
double residual_norm(VECTOR & x);
/** solve */
bool solve(VECTOR & x); // incoming: initial guess, outgoing: solution
/** line search */
bool line_search(VECTOR & x);
/** access to current state */
DENS_MAT & tangent() { return A_;}
DENS_VEC & residual() { return r_;}
/** change solver parameters */
void set_max_iterations(const int maxIter) { maxIterations_=maxIter; }
void set_residual_tolerance(const double tol) { tol_=tol;}
void set_solution_tolerance(const double tol) { tolx_=tol;}
protected:
/** function & tangent */
TangentOperator * f_;
DENS_VEC r_;
DENS_MAT A_;
DENS_VEC dx_;
/** equality constraints */
const BC_SET * bcs_;
/** degree of freedom */
int dof_;
/** flavors */
int solverType_;
/** state */
double rNorm0_, rNorm0P_, rNorm_, rNormP_;
/** parameters & tolerances */
double tol_; // tolerance on f
double tolx_; // tolerance on dx
double tol0_; // tolerance on initial f
int maxIterations_;
/** run solve in parallel */
bool parallel_;
};
} // namespace ATC
#endif
Event Timeline
Log In to Comment