-
Notifications
You must be signed in to change notification settings - Fork 298
/
radau.h
120 lines (105 loc) · 2.69 KB
/
radau.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* This file is part of OpenModelica.
*
* Copyright (c) 1998-2010, Linköpings University,
* Department of Computer and Information Science,
* SE-58183 Linköping, Sweden.
*
* All rights reserved.
*
* THIS PROGRAM IS PROVIDED UNDER THE TERMS OF THIS OSMC PUBLIC
* LICENSE (OSMC-PL). ANY USE, REPRODUCTION OR DISTRIBUTION OF
* THIS PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THE OSMC
* PUBLIC LICENSE.
*
* The OpenModelica software and the Open Source Modelica
* Consortium (OSMC) Public License (OSMC-PL) are obtained
* from Linköpings University, either from the above address,
* from the URL: http://www.ida.liu.se/projects/OpenModelica
* and in the OpenModelica distribution.
*
* This program is distributed WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY SET FORTH
* IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS
* OF OSMC-PL.
*
* See the full OSMC Public License conditions for more details.
*
*/
/*! \file radau.h
* author: Ru(n)ge, wbraun
*/
#ifndef _RADAU_H_
#define _RADAU_H_
#include "simulation_data.h"
#include "solver_main.h"
#include "omc_config.h" /* for WITH_SUNDIALS */
#ifdef WITH_SUNDIALS
/* adrpo: on mingw link with static sundials */
#if defined(__MINGW32__)
#if !defined(LINK_SUNDIALS_STATIC)
#define LINK_SUNDIALS_STATIC 1
#endif
#endif
#define DEFAULT_IMPRK_ORDER 5
#include <math.h>
#include <nvector/nvector_serial.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct{
N_Vector x;
N_Vector sVars;
N_Vector sEqns;
N_Vector c;
void* kmem;
int glstr;
int error_code;
int mset;
double fnormtol;
double scsteptol;
}KDATAODE;
typedef struct{
double *x0;
double *f0;
double *x;
int nStates;
double dt;
double currentStep;
double t0;
double *min;
double *max;
double *derx;
double *s;
long double **c;
double *a;
}NLPODE;
typedef struct{
KDATAODE *kData;
NLPODE *nlp;
DATA *data;
threadData_t *threadData;
SOLVER_INFO *solverInfo;
int N;
int order;
int lsMethod; /* specifies the method the used linear solver */
}KINODE;
#else
typedef struct{
void *kData;
void *nlp;
DATA *data;
SOLVER_INFO *solverInfo;
int N;
int order;
}KINODE;
#endif /* SUNDIALS */
int allocateKinOde(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo, int order);
int freeKinOde(DATA* data, SOLVER_INFO* solverInfo);
int kinsolOde(SOLVER_INFO* solverInfo);
#ifdef __cplusplus
};
#endif
#endif /* _RADAU_H_ */