OMSimulatorLib
The OMSimulator project is a FMI-based co-simulation environment that supports ordinary (i.e., non-delayed) and TLM connections.
Public Member Functions | Static Public Member Functions | Static Private Member Functions | Private Attributes | List of all members
oms::KinsolSolver Class Reference

#include <AlgLoop.h>

Collaboration diagram for oms::KinsolSolver:
Collaboration graph

Public Member Functions

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

Static Public Member Functions

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

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. More...
 
static int nlsKinsolResiduals (N_Vector u, N_Vector fval, void *user_data)
 Residual function for KINSOL. More...
 
static void sundialsErrorHandlerFunction (int error_code, const char *module, const char *function, char *msg, void *user_data)
 Error handler function given to KINSOL. More...
 
static void sundialsInfoHandlerFunction (const char *module, const char *function, char *msg, void *user_data)
 Info handler function given to KINSOL. More...
 

Private Attributes

double fnormtol
 
N_Vector initialGuess
 
N_Vector uScale
 
N_Vector fScale
 
N_Vector fTmp
 
void * kinsolMemory
 
void * user_data
 
int size
 
SUNLinearSolver linSol
 
N_Vector y
 
SUNMatrix J
 

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:
Here is the caller graph for this function:

◆ NewKinsolSolver()

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

Create new oms::KinsolSolver::KinsolSolver object.

Parameters
algLoopNumNumber of algebraic loop
sizeDimension of algebraic loop
absoluteToleranceTolerance 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:
Here is the caller 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:
Here is the caller graph for this function:

◆ sundialsErrorHandlerFunction()

void oms::KinsolSolver::sundialsErrorHandlerFunction ( int  errorCode,
const char *  module,
const char *  function,
char *  msg,
void *  user_data 
)
staticprivate

Error handler function given to KINSOL.

Parameters
errorCodeError code from KINSOL
moduleName of the module reporting the error.
functionName of the function in which the error occurred.
msgError Message.
user_dataPointer to user data. Unused.
Here is the caller graph for this function:

◆ sundialsInfoHandlerFunction()

void oms::KinsolSolver::sundialsInfoHandlerFunction ( const char *  module,
const char *  function,
char *  msg,
void *  user_data 
)
staticprivate

Info handler function given to KINSOL.

Will only print information when debug loging is active.

Parameters
moduleName of the module reporting the information.
functionName of the function reporting the information.
msgMessage.
user_dataPointer to user data. Unused.
Here is the caller graph for this function:

Member Data Documentation

◆ fnormtol

double oms::KinsolSolver::fnormtol
private

◆ fScale

N_Vector oms::KinsolSolver::fScale
private

◆ fTmp

N_Vector oms::KinsolSolver::fTmp
private

◆ initialGuess

N_Vector oms::KinsolSolver::initialGuess
private

◆ J

SUNMatrix oms::KinsolSolver::J
private

◆ kinsolMemory

void* oms::KinsolSolver::kinsolMemory
private

◆ linSol

SUNLinearSolver oms::KinsolSolver::linSol
private

◆ size

int oms::KinsolSolver::size
private

◆ uScale

N_Vector oms::KinsolSolver::uScale
private

◆ user_data

void* oms::KinsolSolver::user_data
private

◆ y

N_Vector oms::KinsolSolver::y
private

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