OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment.
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Static Private Member Functions | Private Attributes | List of all members
oms::KinsolSolver Class Reference

#include <AlgLoop.h>

Public Member Functions

 ~KinsolSolver ()
 Destroy the oms::KinsolSolver::KinsolSolver object.
 
oms_status_enu_t kinsolSolve (System &syst, DirectedGraph &graph)
 Solve algebraic system with KINSOL.
 

Static Public Member Functions

static KinsolSolverNewKinsolSolver (const int algLoopNum, const unsigned int size, double relativeTolerance, const bool useDirectionalDerivative)
 Create new oms::KinsolSolver::KinsolSolver object.
 

Static Private Member Functions

static int nlsKinsolJac (N_Vector u, N_Vector fu, SUNMatrix J, void *user_data, N_Vector tmp1, N_Vector tmp2)
 Jacobian function for KINSOL.
 
static int nlsKinsolResiduals (N_Vector u, N_Vector fval, void *user_data)
 Residual function for KINSOL.
 
static void sundialsErrorHandlerFunction (int line, const char *func, const char *file, const char *msg, SUNErrCode err_code, void *err_user_data, SUNContext sunctx)
 Error handler function of type SUNErrHandlerFn.
 

Private Attributes

double fnormtol = 0.0
 
N_Vector initialGuess = nullptr
 
N_Vector uScale = nullptr
 
N_Vector fScale = nullptr
 
N_Vector fTmp = nullptr
 
SUNContext sunctx = nullptr
 
void * kinsolMemory = nullptr
 
void * user_data = nullptr
 
int size = 0
 
SUNLinearSolver linSol = nullptr
 
N_Vector y = nullptr
 
SUNMatrix J = nullptr
 

Constructor & Destructor Documentation

◆ ~KinsolSolver()

oms::KinsolSolver::~KinsolSolver ( )

Destroy the oms::KinsolSolver::KinsolSolver object.

Member Function Documentation

◆ kinsolSolve()

oms_status_enu_t oms::KinsolSolver::kinsolSolve ( System syst,
DirectedGraph graph 
)

Solve algebraic system with KINSOL.

Parameters
systReference to System object
graphReference to graph opbject
Returns
oms_status_enu_t Return oms_status_ok on success, oms_status_warning if solving was computed, but solution is not within tolerance and oms_status_error if an error occured.
Here is the call graph for this function:

◆ NewKinsolSolver()

oms::KinsolSolver * oms::KinsolSolver::NewKinsolSolver ( const int  algLoopNum,
const unsigned int  size,
double  relativeTolerance,
const bool  useDirectionalDerivative 
)
static

Create new oms::KinsolSolver::KinsolSolver object.

Parameters
algLoopNumNumber of algebraic loop
sizeDimension of algebraic loop
relativeToleranceTolerance used for solving the loop
Returns
oms::KinsolSolver* Retruns pointer to KinsolSolver object
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nlsKinsolJac()

int oms::KinsolSolver::nlsKinsolJac ( N_Vector  u,
N_Vector  fu,
SUNMatrix  J,
void *  user_data,
N_Vector  tmp1,
N_Vector  tmp2 
)
staticprivate

Jacobian function for KINSOL.

Parameters
uis the current (unscaled) iterate
fuis the current value of the vector F(u)
Jis the output approximate Jacobian matrix, J = ∂F/∂u, of type SUNMatrix
datais a pointer to user data, the same as the user data parameter passed to KINSetUserData
tmp1pointer to memory allocated for variables of type N_Vector which can be used by the KINJacFn function as temporary storage or work space
tmp2pointer to memory allocated for variables of type N_Vector which can be used by the KINJacFn function as temporary storage or work space
Returns
int A function of type KINLsJacFn should return 0 if successful or a non-zero value otherwise
Here is the call graph for this function:

◆ nlsKinsolResiduals()

int oms::KinsolSolver::nlsKinsolResiduals ( N_Vector  u,
N_Vector  fval,
void *  user_data 
)
staticprivate

Residual function for KINSOL.

This function computes F(u) (or G(u) for fixed-point iteration and Anderson acceleration) for a given value of the vector u.

Parameters
uis the current value of the variable vector, u
fvalis the output vector F(u)
user_dataa is a pointer to user data, the pointer user data passed to KINSetUserData
Returns
int A KINSysFn function should return 0 if successful, a positive value if a recoverable error occurred (in which case kinsol will attempt to correct), or a negative value if it failed unrecoverably (in which case the solution process is halted and KIN SYSFUNC FAIL is returned).
Here is the call graph for this function:

◆ sundialsErrorHandlerFunction()

void oms::KinsolSolver::sundialsErrorHandlerFunction ( int  line,
const char *  func_name,
const char *  file,
const char *  msg,
SUNErrCode  err_code,
void *  err_user_data,
SUNContext  sunctx 
)
staticprivate

Error handler function of type SUNErrHandlerFn.

Pushed onto the error handler stack of the SUNDIALS context, so it is called for errors reported by KINSOL and by any other SUNDIALS module created with that context.

Parameters
lineLine number in the SUNDIALS source file where the error occurred.
func_nameName of the SUNDIALS function in which the error occurred.
fileName of the SUNDIALS source file where the error occurred.
msgError message. Can be NULL, in which case the message belonging to err_code is used.
err_codeError code. Either a SUNErrCode or a package level code, e.g. one of the KIN_* constants.
err_user_dataPointer to user data given to SUNContext_PushErrHandler(), a KINSOL_USER_DATA pointer. Can be NULL.
sunctxSUNDIALS context reporting the error. Unused.

Member Data Documentation

◆ fnormtol

double oms::KinsolSolver::fnormtol = 0.0
private

◆ fScale

N_Vector oms::KinsolSolver::fScale = nullptr
private

◆ fTmp

N_Vector oms::KinsolSolver::fTmp = nullptr
private

◆ initialGuess

N_Vector oms::KinsolSolver::initialGuess = nullptr
private

◆ J

SUNMatrix oms::KinsolSolver::J = nullptr
private

◆ kinsolMemory

void* oms::KinsolSolver::kinsolMemory = nullptr
private

◆ linSol

SUNLinearSolver oms::KinsolSolver::linSol = nullptr
private

◆ size

int oms::KinsolSolver::size = 0
private

◆ sunctx

SUNContext oms::KinsolSolver::sunctx = nullptr
private

◆ uScale

N_Vector oms::KinsolSolver::uScale = nullptr
private

◆ user_data

void* oms::KinsolSolver::user_data = nullptr
private

◆ y

N_Vector oms::KinsolSolver::y = nullptr
private

The documentation for this class was generated from the following files: