Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactoring non-linear solvers (#9065)
### Unified user data structs for all non-linear solvers: ```C typedef struct NLS_USERDATA { DATA *data; threadData_t *threadData; int sysNumber; /* System index, for print messages only */ NONLINEAR_SYSTEM_DATA* nlsData; /* Pointer to nonlinear system data */ ANALYTIC_JACOBIAN* analyticJacobian; /* Pointer to analytic Jacobian */ } NLS_USERDATA; ``` Contains pointer to `nlsData` that contains this user data. Used to hide omc internal data from 3rdParty function calls. userData will be passed to residual and Jacobian functions. Use `initNlsUserData` and `freeNlsUserData` for memory management. ### Simplify NLS functions interface - `int allocateNewtonData(int size, void** voiddata)` --> `DATA_NEWTON* allocateNewtonData(int size, NLS_USERDATA* userData)` - `int nlsKinsolFree(void **solverData)` --> `void freeNewtonData(DATA_NEWTON* newtonData)` - `int solveNLS(DATA *data, threadData_t *threadData, int sysNumber)` --> `modelica_boolean solveNLS(DATA *data, threadData_t *threadData, NONLINEAR_SYSTEM_DATA* nonlinsys)` - `int _omc_newton(int(*f)(int*, double*, double*, void*, int), DATA_NEWTON* solverData, void* userdata);` --> `int _omc_newton(genericResidualFunc f, DATA_NEWTON* solverData, void* userData);` - `void printNonLinearSystemSolvingStatistics(DATA *data, int sysNumber, int logLevel)` --> `void printNonLinearSystemSolvingStatistics(NONLINEAR_SYSTEM_DATA* nonlinsys, enum LOG_STREAM stream)` ### Other - Added more documentation. - Fixed memory leaks while freeing NLS data. - Removed unused `currentNonlinearSystemIndex` from `NONLINEAR_SYSTEM_DATA`. - Added `TRUE` and `FALSE` to openmodelcia_types.h, next to definition of type `modelica_boolean`. - typedef `genericResidualFunc` function pointer.
- Loading branch information