Skip to content

Commit 024573e

Browse files
Willi BraunOpenModelica-Hudson
authored andcommitted
add further deltaX option for the solvers
1 parent 5c6c19f commit 024573e

File tree

9 files changed

+35
-23
lines changed

9 files changed

+35
-23
lines changed

SimulationRuntime/c/linearization/linearize.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ int functionODE_residual(DATA* data, threadData_t *threadData, double *dx, doubl
112112
/* Calculate the jacobian matrix by numerical finite difference */
113113
int functionJacAC_num(DATA* data, threadData_t *threadData, double *matrixA, double *matrixC, double *matrixCz)
114114
{
115-
const double delta_h = numericalDifferentiationDeltaX;
115+
const double delta_h = numericalDifferentiationDeltaXlinearize;
116116
double delta_hh;
117117
double xsave;
118118

@@ -203,7 +203,7 @@ int functionJacAC_num(DATA* data, threadData_t *threadData, double *matrixA, dou
203203

204204
int functionJacBD_num(DATA* data, threadData_t *threadData, double *matrixB, double *matrixD, double *matrixDz)
205205
{
206-
const double delta_h = numericalDifferentiationDeltaX;
206+
const double delta_h = numericalDifferentiationDeltaXlinearize;
207207
double delta_hh;
208208
double usave;
209209
double* u;

SimulationRuntime/c/simulation/simulation_runtime.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -508,14 +508,21 @@ int startNonInteractiveSimulation(int argc, char**argv, DATA* data, threadData_t
508508
infoStreamPrint(LOG_STDOUT, 0, "Linearization will performed at point of time: %f", data->simulationInfo->stopTime);
509509
}
510510

511-
/* set delta x */
512-
if(omc_flag[FLAG_DELTA_X]) {
513-
numericalDifferentiationDeltaX = atof(omc_flagValue[FLAG_DELTA_X]);
514-
infoStreamPrint(LOG_SOLVER, 0, "Set delta x for numerical differentiation to %f", numericalDifferentiationDeltaX);
511+
/* set delta x for linearization */
512+
if(omc_flag[FLAG_DELTA_X_LINEARIZE]) {
513+
numericalDifferentiationDeltaXlinearize = atof(omc_flagValue[FLAG_DELTA_X_LINEARIZE]);
514+
infoStreamPrint(LOG_SOLVER, 0, "Set delta x for numerical differentiation of the linearization to %f", numericalDifferentiationDeltaXlinearize);
515515
}else{
516-
numericalDifferentiationDeltaX = sqrt(DBL_EPSILON*2e1);
516+
numericalDifferentiationDeltaXlinearize = sqrt(DBL_EPSILON*2e1);
517517
}
518518

519+
/* set delta x for integration methods dassl, ida */
520+
if(omc_flag[FLAG_DELTA_X_SOLVER]) {
521+
numericalDifferentiationDeltaXsolver = atof(omc_flagValue[FLAG_DELTA_X_SOLVER]);
522+
infoStreamPrint(LOG_SOLVER, 0, "Set delta x for numerical differentiation of the integrator to %f", numericalDifferentiationDeltaXsolver);
523+
}else{
524+
numericalDifferentiationDeltaXsolver = sqrt(DBL_EPSILON);
525+
}
519526

520527
if(omc_flag[FLAG_S]) {
521528
if (omc_flagValue[FLAG_S]) {

SimulationRuntime/c/simulation/solver/dassl.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,6 @@ int dassl_initial(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo,
172172

173173
dasslData->idid = 0;
174174

175-
dasslData->sqrteps = sqrt(DBL_EPSILON);
176175
dasslData->ysave = (double*) malloc(N*sizeof(double));
177176
dasslData->ypsave = (double*) malloc(N*sizeof(double));
178177
dasslData->delta_hh = (double*) malloc(N*sizeof(double));
@@ -1137,7 +1136,7 @@ int jacA_num(DATA* data, double *t, double *y, double *yprime, double *delta, do
11371136
TRACE_PUSH
11381137
DASSL_DATA* dasslData = (DASSL_DATA*)(void*)((double**)rpar)[1];
11391138

1140-
double delta_h = dasslData->sqrteps;
1139+
double delta_h = numericalDifferentiationDeltaXsolver;
11411140
double delta_hh,delta_hhh, deltaInv;
11421141
double ysave;
11431142
double ypsave;
@@ -1236,7 +1235,7 @@ int jacA_numColored(DATA* data, double *t, double *y, double *yprime, double *de
12361235
TRACE_PUSH
12371236
const int index = data->callback->INDEX_JAC_A;
12381237
DASSL_DATA* dasslData = (DASSL_DATA*)(void*)((double**)rpar)[1];
1239-
double delta_h = dasslData->sqrteps;
1238+
double delta_h = numericalDifferentiationDeltaXsolver;
12401239
double delta_hhh;
12411240
int ires;
12421241
double* delta_hh = dasslData->delta_hh;

SimulationRuntime/c/simulation/solver/dassl.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ typedef struct DASSL_DATA{
6767
int *jroot;
6868

6969
/* variables used in jacobian calculation */
70-
double sqrteps;
7170
double *ysave;
7271
double *ypsave;
7372
double *delta_hh;

SimulationRuntime/c/simulation/solver/ida_solver.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ ida_solver_initial(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo
187187
idaData->yp);
188188

189189
/* allocate memory for jacobians calculation */
190-
idaData->sqrteps = sqrt(DBL_EPSILON);
191190
idaData->ysave = (double*) malloc(idaData->N*sizeof(double));
192191
idaData->ypsave = (double*) malloc(idaData->N*sizeof(double));
193192
idaData->delta_hh = (double*) malloc(idaData->N*sizeof(double));
@@ -1102,7 +1101,7 @@ int jacOwnNumColoredIDA(double tt, N_Vector yy, N_Vector yp, N_Vector rr, DlsMat
11021101
double *ysave = idaData->ysave;
11031102
double *ypsave = idaData->ypsave;
11041103

1105-
double delta_h = idaData->sqrteps;
1104+
double delta_h = numericalDifferentiationDeltaXsolver;
11061105
double delta_hhh;
11071106
long int i,j,l,ii;
11081107

@@ -1258,7 +1257,7 @@ int jacOwnNumIDA(double tt, N_Vector yy, N_Vector yp, N_Vector rr, DlsMat Jac, d
12581257

12591258
double ysave, ypsave;
12601259

1261-
double delta_h = idaData->sqrteps;
1260+
double delta_h = numericalDifferentiationDeltaXsolver;
12621261
double delta_hh;
12631262
double delta_hhh;
12641263
double deltaInv;
@@ -1384,7 +1383,7 @@ int jacobianSparseNumIDA(double tt, N_Vector yy, N_Vector yp, N_Vector rr, SlsMa
13841383
double *ysave = idaData->ysave;
13851384
double *ypsave = idaData->ypsave;
13861385

1387-
double delta_h = idaData->sqrteps;
1386+
double delta_h = numericalDifferentiationDeltaXsolver;
13881387
double *delta_hh = idaData->delta_hh;
13891388
double delta_hhh;
13901389
double deltaInv;

SimulationRuntime/c/simulation/solver/model_help.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ double newtonXTol = 1e-12;
5757
double newtonFTol = 1e-12;
5858
const size_t SIZERINGBUFFER = 3;
5959
int compiledInDAEMode = 0;
60-
double numericalDifferentiationDeltaX = 1e-8;
60+
double numericalDifferentiationDeltaXlinearize = 1e-8;
61+
double numericalDifferentiationDeltaXsolver = 1e-8;
6162

6263
static double tolZC;
6364

SimulationRuntime/c/simulation/solver/model_help.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ extern double newtonXTol;
8181
extern double newtonFTol;
8282
extern const size_t SIZERINGBUFFER;
8383
extern int compiledInDAEMode;
84-
extern double numericalDifferentiationDeltaX;
84+
extern double numericalDifferentiationDeltaXlinearize;
85+
extern double numericalDifferentiationDeltaXsolver;
8586

8687
void initializeDataStruc(DATA *data, threadData_t *threadData);
8788

SimulationRuntime/c/util/simulation_options.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ const char *FLAG_NAME[FLAG_MAX+1] = {
3939
/* FLAG_CPU */ "cpu",
4040
/* FLAG_CSV_OSTEP */ "csvOstep",
4141
/* FLAG_DAE_MODE */ "daeMode",
42-
/* FLAG_DELTA_X */ "deltaX",
42+
/* FLAG_DELTA_X_LINEARIZE */ "deltaXLinearize",
43+
/* FLAG_DELTA_X_SOLVER */ "deltaXSolver",
4344
/* FLAG_EMBEDDED_SERVER */ "embeddedServer",
4445
/* FLAG_EMIT_PROTECTED */ "emit_protected",
4546
/* FLAG_F */ "f",
@@ -119,7 +120,8 @@ const char *FLAG_DESC[FLAG_MAX+1] = {
119120
/* FLAG_CPU */ "dumps the cpu-time into the result file",
120121
/* FLAG_CSV_OSTEP */ "value specifies csv-files for debuge values for optimizer step",
121122
/* FLAG_DAE_MODE */ "flag to let the integrator use daeResiduals",
122-
/* FLAG_DELTA_X */ "value specifies the delta x value for numerical differentiation, used by linearization or integrator",
123+
/* FLAG_DELTA_X_LINEARIZE */ "value specifies the delta x value for numerical differentiation used by linearization. The default value is 1e-5.",
124+
/* FLAG_DELTA_X_SOLVER */ "value specifies the delta x value for numerical differentiation used by integrator. The default values is sqrt(DBL_EPSILON).",
123125
/* FLAG_EMBEDDED_SERVER */ "enables an embedded server. Valid values: none, opc-da [broken], opc-ua [experimental], or the path to a shared object.",
124126
/* FLAG_EMIT_PROTECTED */ "emits protected variables to the result-file",
125127
/* FLAG_F */ "value specifies a new setup XML file to the generated simulation code",
@@ -207,8 +209,10 @@ const char *FLAG_DETAILED_DESC[FLAG_MAX+1] = {
207209
" Value specifies csv-files for debuge values for optimizer step",
208210
/* FLAG_DAE_MODE */
209211
" Enables daeMode simulation if the model was compiled with the omc flag --daeMode and the IDA integrator is used.",
210-
/* FLAG_DELTA_X */
211-
"value specifies the delta x value for numerical differentiation, used by linearization or integrator",
212+
/* FLAG_DELTA_X_LINEARIZE */
213+
"value specifies the delta x value for numerical differentiation used by linearization. The default value is sqrt(DBL_EPSILON*2e1).",
214+
/* FLAG_DELTA_X_SOLVER */
215+
"value specifies the delta x value for numerical differentiation used by integrator. The default values is sqrt(DBL_EPSILON).",
212216
/* FLAG_EMBEDDED_SERVER */
213217
" Enables an embedded server. Valid values:\n\n"
214218
" * none - default, run without embedded server\n"
@@ -407,7 +411,8 @@ const int FLAG_TYPE[FLAG_MAX] = {
407411
/* FLAG_CPU */ FLAG_TYPE_FLAG,
408412
/* FLAG_CSV_OSTEP */ FLAG_TYPE_OPTION,
409413
/* FLAG_DAE_SOLVING */ FLAG_TYPE_FLAG,
410-
/* FLAG_DELTA_X */ FLAG_TYPE_OPTION,
414+
/* FLAG_DELTA_X_LINEARIZE */ FLAG_TYPE_OPTION,
415+
/* FLAG_DELTA_X_SOLVER */ FLAG_TYPE_OPTION,
411416
/* FLAG_EMBEDDED_SERVER */ FLAG_TYPE_OPTION,
412417
/* FLAG_EMIT_PROTECTED */ FLAG_TYPE_FLAG,
413418
/* FLAG_F */ FLAG_TYPE_OPTION,

SimulationRuntime/c/util/simulation_options.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ enum _FLAG
4747
FLAG_CPU,
4848
FLAG_CSV_OSTEP,
4949
FLAG_DAE_MODE,
50-
FLAG_DELTA_X,
50+
FLAG_DELTA_X_LINEARIZE,
51+
FLAG_DELTA_X_SOLVER,
5152
FLAG_EMBEDDED_SERVER,
5253
FLAG_EMIT_PROTECTED,
5354
FLAG_F,

0 commit comments

Comments
 (0)