diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 8b7d3a90..20f0564e 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -46,10 +46,11 @@ jobs: sudo apt-get install pkgconf sudo apt-get install python sudo apt-get install qt5-default + sudo apt-get install rapidjson-dev - name: Build working-directory: ./src - run: make + run: make repo_checkout=https - name: Install working-directory: ./src diff --git a/.hooks/pre-commit b/.hooks/pre-commit index ccaa151b..cd34bb69 100755 --- a/.hooks/pre-commit +++ b/.hooks/pre-commit @@ -7,13 +7,13 @@ def get_files(): '--name-only', 'HEAD']).split() def apply_code_style(): - files = filter(lambda x: x.find('tests/system/gt_data') == -1, get_files()) + files = filter(lambda x: x.find(b'tests/system/gt_data') == -1, get_files()) - files = filter(lambda x: x.endswith('.c') or - x.endswith('.h') or - x.endswith('.cpp'), files) + files = filter(lambda x: x.endswith(b'.c') or + x.endswith(b'.h') or + x.endswith(b'.cpp'), files) for f in files: - print("Apply code style to: " + f) + print("Apply code style to: " + str(f)) subprocess.check_output(['clang-format-7', '-i', f]) subprocess.check_output(['git', 'add', f]) diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..921b028a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "sonarlint.pathToCompileCommands": "${workspaceFolder}/src/engine/compile_commands.json", + "files.associations": { + "patoh.h": "c", + "scotch.h": "c", + "utils.h": "c" + } +} \ No newline at end of file diff --git a/CHANGELOG b/CHANGELOG index 121e0135..30056bcc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,16 @@ ## Changelog +## [4.4.0] - 28-08-2024 + +### Added +- **Allow discrete Integer** definitions to be able to use them as array indexes. +- **New MMO_CVODEMaxOder annotation** to select the max order used in `CVODE` solver. +- **New MMO_XOutput annotation** that allows selecting state variable output (exerimental). + +### Changed +- Use time variable in initial code. +- Fixed QSS first order method recompute next time. + ## [4.3.0] - 21-09-2022 ### Added diff --git a/README.md b/README.md index c14f14c0..8d7d0ab7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## QSS Solver 4.3.0 +## QSS Solver 4.4.0 The QSS Solver is a modeling and simulation environment for continuous and hybrid systems and it's optimized for large scale model simulation. @@ -219,6 +219,17 @@ The makefile script accepts the following targets: ## Changelog +## [4.4.0] - 28-08-2024 + +### Added +- **Allow discrete Integer** definitions to be able to use them as array indexes. +- **New MMO_CVODEMaxOder annotation** to select the max order used in `CVODE` solver. +- **New MMO_XOutput annotation** that allows selecting state variable output (exerimental). + +### Changed +- Use time variable in initial code. +- Fixed QSS first order method recompute next time. + ## [4.3.0] - 21-09-2022 ### Added @@ -230,14 +241,6 @@ The makefile script accepts the following targets: ### Removed - **mLIQSS3** is deprecated. -## [4.2.1] - 28-06-2023 - -### Added -- Added mLIQSS article models to distribution. - -### Changed -- Fix mLIQSS recompute next time to only update the Jacobian approximation when the influencer is a state variable. - ## Licensing Please see the file called LICENSE. diff --git a/bin/build.sh b/bin/build.sh index 48734687..2f3370e5 100755 --- a/bin/build.sh +++ b/bin/build.sh @@ -15,7 +15,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== FILE=$1 diff --git a/bin/compile.sh b/bin/compile.sh index a3809016..d1198c3f 100755 --- a/bin/compile.sh +++ b/bin/compile.sh @@ -18,7 +18,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== FILE=$1 diff --git a/bin/createLog.sh b/bin/createLog.sh index c3cf52d1..cf8e8013 100755 --- a/bin/createLog.sh +++ b/bin/createLog.sh @@ -14,7 +14,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== MODEL=$1 diff --git a/bin/exportvars.sh b/bin/exportvars.sh index ff1a2e1f..3abf1a12 100755 --- a/bin/exportvars.sh +++ b/bin/exportvars.sh @@ -14,7 +14,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== cd .. diff --git a/bin/gnuplot.sh b/bin/gnuplot.sh index 65ce1d9f..8a605435 100755 --- a/bin/gnuplot.sh +++ b/bin/gnuplot.sh @@ -13,7 +13,7 @@ # NOTES: -persist is the default option used by the QSS Solver GUI. # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== OPTIONS=$1 diff --git a/bin/mmoc.sh b/bin/mmoc.sh index fdcb4dbf..0efbc3b2 100755 --- a/bin/mmoc.sh +++ b/bin/mmoc.sh @@ -14,7 +14,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== OPTIONS=$1 diff --git a/bin/registervars.sh b/bin/registervars.sh index 9c39e69b..8d69f9ac 100755 --- a/bin/registervars.sh +++ b/bin/registervars.sh @@ -14,7 +14,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== cd .. diff --git a/bin/run.sh b/bin/run.sh index 5813c724..f9013829 100755 --- a/bin/run.sh +++ b/bin/run.sh @@ -17,7 +17,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== diff --git a/bin/runqss.sh b/bin/runqss.sh index c800d9d1..cfb5dd34 100755 --- a/bin/runqss.sh +++ b/bin/runqss.sh @@ -16,7 +16,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== FILE=$1 diff --git a/bin/sbml.sh b/bin/sbml.sh index 65bf9436..025a70f9 100755 --- a/bin/sbml.sh +++ b/bin/sbml.sh @@ -16,7 +16,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== OPTIONS=$1 diff --git a/bin/simulate.sh b/bin/simulate.sh index 5ffe5bc2..264a6b2c 100755 --- a/bin/simulate.sh +++ b/bin/simulate.sh @@ -20,7 +20,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== FILE=$1 diff --git a/bin/sortDiscretes.sh b/bin/sortDiscretes.sh index e1ba634f..331c1e1c 100755 --- a/bin/sortDiscretes.sh +++ b/bin/sortDiscretes.sh @@ -15,7 +15,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== if test -n "$(find . -maxdepth 1 -name '*-discrete-*.dat' -print -quit)"; then diff --git a/bin/uploadDoc.sh b/bin/uploadDoc.sh index 1a9a62d8..c451277a 100755 --- a/bin/uploadDoc.sh +++ b/bin/uploadDoc.sh @@ -13,7 +13,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== cd $MMOC_SRC/engine/usr/doc/html diff --git a/deploy/linux/README.md b/deploy/linux/README.md new file mode 100644 index 00000000..0de73115 --- /dev/null +++ b/deploy/linux/README.md @@ -0,0 +1,14 @@ +**Release procedure** + +- Checkout `qss-solver-release` branch. +- Create branch `release-X.X.X`. +- Merge `qss-solver-dev` -> `qss-solver-release`. +- Update `version` file to `X.X.X`. +- Run `update.sh`. +- Commit update changes with `-n`. +- Update `CHANGELOG` and `README.md` files. +- Commit changes with `-n`. +- Push branch. +- Merge pushed branch in `qss-solver-release` with `--squash`. +- Push `qss-solver-release` branch. +- Merge `qss-solver-release` in `qss-solver-dev`. \ No newline at end of file diff --git a/deploy/linux/build.sh b/deploy/linux/build.sh old mode 100644 new mode 100755 index 5228d4e1..29487974 --- a/deploy/linux/build.sh +++ b/deploy/linux/build.sh @@ -15,7 +15,7 @@ # NOTES: --- # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com # PROJECT: QSS Solver -# VERSION: 4.3.0 +# VERSION: 4.4.0 #=================================================================================== rm -rf qss-solver-*.deb @@ -35,16 +35,24 @@ echo $INI_VER >> ./deploy/linux/qss-solver.ini # Set OS config files. CONTROL_FILE="control.amd64" SBML_LIB="libsbml.so.5.18.0" -PACKAGE_NAME=qss-solver-$VER.deb +PACKAGE_NAME=qss-solver-$VER SYSTEM_VERSION=`lsb_release -d` if [[ "$SYSTEM_VERSION" == *"22.04"* ]]; then CONTROL_FILE="control.amd64.u22" SBML_LIB="libsbml.so.5.19.0" - PACKAGE_NAME=qss-solver-$VER-u22.deb + PACKAGE_NAME=$PACKAGE_NAME-u22 fi # Set solver branch BRANCH=`git rev-parse --abbrev-ref HEAD` + +# If build from development branch, update package name to unstable. +if [ "$BRANCH" == "qss-solver-dev" ]; then + PACKAGE_NAME=$PACKAGE_NAME-unstable +fi + +PACKAGE_NAME=$PACKAGE_NAME.deb + BRANCH="branch="$BRANCH echo $BRANCH >> ./deploy/linux/qss-solver.ini diff --git a/deploy/linux/version b/deploy/linux/version index 80895903..fdc66988 100644 --- a/deploy/linux/version +++ b/deploy/linux/version @@ -1 +1 @@ -4.3.0 +4.4.0 diff --git a/src/Makefile b/src/Makefile index 587b7be1..2af2a3c6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,6 +1,9 @@ # Target variables MODE ?= Debug DISTRO := $(shell lsb_release -r 2>/dev/null | grep Release | awk '{ print $$2 }') +sbg_branch ?= sb-graph-dev +build_sbg ?= True +repo_checkout ?= ssh # Build cores. CORES = $(shell nproc) @@ -18,7 +21,7 @@ mmo-interfaces: create-folders @cd interfaces/sbml && $(MAKE) MODE=$(MODE) -j $(CORES) @echo Done -qss-engine: create-folders +qss-engine: create-folders lib-gtest @echo BUILDING QSS LIBRARIES DEPS @cd engine && $(MAKE) cvode @cd engine && $(MAKE) ida @@ -36,11 +39,14 @@ qss-user-libs: create-folders qss-engine @echo Done mmo-compiler: create-folders lib-gtest + @echo BUILDING MICROMODELICA C COMPILER DEPS + @cd mmoc && $(MAKE) MODE=$(MODE) lib_sbg sbg_branch=$(sbg_branch) build_sbg=$(build_sbg) repo_checkout=$(repo_checkout) + @echo Done @echo BUILDING MICROMODELICA C COMPILER @cd mmoc && $(MAKE) MODE=$(MODE) -j $(CORES) @echo Done -qss-solver-gui: create-folders +qss-solver-gui: create-folders lib-gtest @echo BUILDING MMO EDITOR @cd gui && $(MAKE) -f gui.makefile MODE=$(MODE) -j $(CORES) @echo Done @@ -99,7 +105,10 @@ clean: @cd interfaces/sbml && $(MAKE) clean help: - @echo "make MODE= " + @echo "make MODE= sbg_branch= build_sbg= repo_checkout=" @echo "Default values:" @echo "" @echo "MODE=Debug" + @echo "sbg_branch=sb-graph-dev" + @echo "build_sbg=True" + @echo "repo_checkout=ssh" \ No newline at end of file diff --git a/src/engine/.vscode/launch.json b/src/engine/.vscode/launch.json index 17c762f7..68010dee 100644 --- a/src/engine/.vscode/launch.json +++ b/src/engine/.vscode/launch.json @@ -23,6 +23,25 @@ "ignoreFailures": true } ] + }, + + // Advection model + { + "name": "Advection.", + "type": "cppdbg", + "request": "launch", + "program": "/home/joaquin/work/qss-solver/build/advection/advection", + "cwd": "/home/joaquin/work/qss-solver/build/advection/", + "environment": [], + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] } + ] } \ No newline at end of file diff --git a/src/engine/.vscode/settings.json b/src/engine/.vscode/settings.json index e6330034..a5623fce 100644 --- a/src/engine/.vscode/settings.json +++ b/src/engine/.vscode/settings.json @@ -1,6 +1,20 @@ { "files.associations": { - "random": "cpp" + "random": "cpp", + "qss_bdf.h": "c", + "array": "c", + "compare": "c", + "functional": "c", + "istream": "c", + "ostream": "c", + "ranges": "c", + "tuple": "c", + "type_traits": "c", + "utility": "c", + "typeindex": "c", + "typeinfo": "c", + "qss_data.h": "c" }, - "C_Cpp.dimInactiveRegions": true + "C_Cpp.dimInactiveRegions": true, + "sonarlint.pathToCompileCommands": "${workspaceFolder}/compile_commands.json" } \ No newline at end of file diff --git a/src/engine/QSSSolver.doxyfile b/src/engine/QSSSolver.doxyfile index 948765d1..bad8266b 100644 --- a/src/engine/QSSSolver.doxyfile +++ b/src/engine/QSSSolver.doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "Stand-Alone QSS Solver" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 4.3.0 +PROJECT_NUMBER = 4.4.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/src/engine/classic/classic_cvode_integrator.c b/src/engine/classic/classic_cvode_integrator.c index 09687554..dc66286d 100644 --- a/src/engine/classic/classic_cvode_integrator.c +++ b/src/engine/classic/classic_cvode_integrator.c @@ -233,6 +233,13 @@ void CVODE_integrate(SIM_simulator simulate) if (check_flag(&flag, "CVDense", 1, simulator)) return; } + if (simulator->data->params->CVODE_max_order != 0) { + flag = CVodeSetMaxOrd(cvode_mem, simulator->data->params->CVODE_max_order); + if (check_flag(&flag, "CVodeSetMaxOrd", 1, simulator)) { + return; + } + } + getTime(simulator->stats->sTime); if (is_sampled) { CLC_save_step(simOutput, solution, solution_time, t, totalOutputSteps, NV_DATA_S(y), clcData->d, clcData->alg); diff --git a/src/engine/classic/classic_data.c b/src/engine/classic/classic_data.c index e589c802..5e31b574 100644 --- a/src/engine/classic/classic_data.c +++ b/src/engine/classic/classic_data.c @@ -42,7 +42,6 @@ CLC_data CLC_Data(int states, int discretes, int events, int inputs, int algebra strcat(fileName, ".ini"); SET_settings settings = SET_Settings(fileName); CLC_data p = checkedMalloc(sizeof(*p)); - int i; p->states = states; p->discretes = discretes; p->events = events; @@ -78,14 +77,15 @@ CLC_data CLC_Data(int states, int discretes, int events, int inputs, int algebra cleanVector(p->nDS, 0, states); double sameDQMin = (settings->nDQMin == 1) ? settings->dqmin[0] : 0; double sameDQRel = (settings->nDQRel == 1) ? settings->dqrel[0] : 0; - for (i = 0; i < states; i++) { + for (int i = 0; i < states; i++) { p->nSD[i] = 0; p->dQMin[i] = (sameDQMin > 0) ? sameDQMin : settings->dqmin[i]; p->dQRel[i] = (sameDQRel > 0) ? sameDQRel : settings->dqrel[i]; } p->event = SD_EventData(events); p->params = SD_Parameters(settings->derdelta, settings->zchyst, settings->minstep, settings->symdiff, settings->lps, settings->nodesize, - settings->pm, settings->dt, settings->dtSynch, settings->partitionerOptions, settings->jacobian); + settings->pm, settings->dt, settings->dtSynch, settings->partitionerOptions, settings->jacobian, + settings->CVODE_max_order, settings->x_output); p->scalarEvaluations = 0; p->zeroCrossings = 0; p->funEvaluations = 0; diff --git a/src/engine/common/data.c b/src/engine/common/data.c index 47cd2211..7cfaae7b 100644 --- a/src/engine/common/data.c +++ b/src/engine/common/data.c @@ -171,7 +171,8 @@ void SD_cleanEventData(SD_eventData events, int size) } SD_parameters SD_Parameters(double derDelta, double zcHyst, double minStep, int symDiff, int lps, int nodeSize, SD_PartitionMethod pm, - double dt, SD_DtSynch synch, SD_partitionerOptions partitionerOptions, int jacobian) + double dt, SD_DtSynch synch, SD_partitionerOptions partitionerOptions, int jacobian, int CVODE_max_order, + int x_output) { SD_parameters p = checkedMalloc(sizeof(*p)); p->derDelta = derDelta; @@ -185,10 +186,12 @@ SD_parameters SD_Parameters(double derDelta, double zcHyst, double minStep, int p->dtSynch = synch; p->partitionerOptions = partitionerOptions; p->jacobian = jacobian; + p->CVODE_max_order = CVODE_max_order; + p->x_output = x_output; return p; } -SD_parameters SD_copyParameters(SD_parameters parameters) +SD_parameters SD_copyParameters(const_SD_parameters parameters) { SD_parameters p = checkedMalloc(sizeof(*p)); p->derDelta = parameters->derDelta; @@ -199,6 +202,7 @@ SD_parameters SD_copyParameters(SD_parameters parameters) p->nodeSize = parameters->nodeSize; p->pm = parameters->pm; p->dt = parameters->dt; + p->x_output = parameters->x_output; return p; } @@ -436,8 +440,8 @@ SD_jacMatrix SD_JacMatrix(int variables) void SD_allocJacMatrix(SD_jacMatrix jac_matrix) { - int i, variables = jac_matrix->variables; - for (i = 0; i < variables; i++) { + int variables = jac_matrix->variables; + for (int i = 0; i < variables; i++) { int size = jac_matrix->size[i]; if (size > 0) { jac_matrix->index[i] = (int *)malloc(size * sizeof(int)); @@ -452,8 +456,8 @@ void SD_allocJacMatrix(SD_jacMatrix jac_matrix) void SD_cleanJacMatrix(SD_jacMatrix jac_matrix) { - int i, variables = jac_matrix->variables; - for (i = 0; i < variables; i++) { + int variables = jac_matrix->variables; + for (int i = 0; i < variables; i++) { if (jac_matrix->size[i] > 0) { cleanDoubleVector(jac_matrix->value[i], 0, jac_matrix->size[i]); } @@ -462,13 +466,13 @@ void SD_cleanJacMatrix(SD_jacMatrix jac_matrix) void SD_freeJacMatrix(SD_jacMatrix jac_matrix) { - int i, variables = jac_matrix->variables; + int variables = jac_matrix->variables; free(jac_matrix->size); - for (i = 0; i < variables; i++) { + for (int i = 0; i < variables; i++) { free(jac_matrix->index[i]); } free(jac_matrix->index); - for (i = 0; i < variables; i++) { + for (int i = 0; i < variables; i++) { free(jac_matrix->value[i]); } free(jac_matrix->value); diff --git a/src/engine/common/data.h b/src/engine/common/data.h index a4aee0d1..fb8d8db6 100644 --- a/src/engine/common/data.h +++ b/src/engine/common/data.h @@ -21,6 +21,7 @@ #include +#include #include "utils.h" typedef void (*SD_eq)(int, double *, double *, double *, double, double *); @@ -158,7 +159,7 @@ void SD_freeEventData(SD_eventData events, int size); void SD_cleanEventData(SD_eventData events, int size); -typedef struct SD_parameters_ *SD_parameters; +TYPE_DEF(SD_parameters) struct SD_parameters_ { double derDelta; @@ -169,15 +170,18 @@ struct SD_parameters_ { int lps; //!< Number of LPs defined for parallel simulations. int nodeSize; //!< Node size used in the memory list for output simulation values. int jacobian; + int CVODE_max_order; SD_PartitionMethod pm; //!< Partition method used to obtain a model partition for parallel simulations. SD_DtSynch dtSynch; //!< \f $ \delta t $ \f synchronization policy. SD_partitionerOptions partitionerOptions; + int x_output; }; SD_parameters SD_Parameters(double derDelta, double zcHyst, double minStep, int symDiff, int lps, int nodeSize, SD_PartitionMethod pm, - double dt, SD_DtSynch synch, SD_partitionerOptions partitionerOptions, int jacobian); + double dt, SD_DtSynch synch, SD_partitionerOptions partitionerOptions, int jacobian, int CVODE_max_order, + int x_output); -SD_parameters SD_copyParameters(SD_parameters parameters); +SD_parameters SD_copyParameters(const_SD_parameters parameters); void SD_freeParameters(SD_parameters params); @@ -204,7 +208,7 @@ SD_outputVariable SD_OutputVariable(int outputs); void SD_freeOutputVariable(SD_outputVariable variable); -typedef struct SD_output_ *SD_output; +TYPE_DEF(SD_output) struct SD_output_ { char *name; diff --git a/src/engine/common/macros.h b/src/engine/common/macros.h index 7520e9fa..e904676e 100644 --- a/src/engine/common/macros.h +++ b/src/engine/common/macros.h @@ -19,21 +19,33 @@ #pragma once +#define QSS_MODULE_INIT(module, args...) \ + if (sim_data->params->lps > 0) { \ + module##_PAR_init(args); \ + } else { \ + module##_init(args); \ + } + +#define TYPE_DEF(type) \ + typedef struct type##_ *type; \ + typedef const struct type##_ *const_##type; + +/// Define a minimum approximation of DQ used in QSS methods when +/// recomputing state variables next times, to avoid numerical +/// errors. @see https://github.com/CIFASIS/qss-solver/issues/258 +#define DQ_APPROX 0.999999999 + #ifdef QSS_PARALLEL #define QSS_FUNC_DECL(module, name) module##_##PAR_##name #define QSS_FUNC_INVK(module, name) module##_##PAR_##name -#define QSS_ASSIGN_QUANTIZER_OPS(module) \ - quantizer->state->qMap = simData->lp->qMap; \ - quantizer->ops->recomputeNextTimes = module##_##PAR_recomputeNextTimes; \ - quantizer->ops->recomputeNextTime = module##_##PAR_recomputeNextTime; \ - quantizer->ops->nextTime = module##_##PAR_nextTime; \ - quantizer->ops->updateQuantizedState = module##_##PAR_updateQuantizedState; - #define QSS_PARALLEL_EXP(exp) exp +#define QSS_PARALLEL_IF(map) if (map > NOT_ASSIGNED) { +#define QSS_PARALLEL_IF_END } + #else #define QSS_FUNC_DECL(module, name) module##_##name @@ -42,30 +54,11 @@ #define QSS_PARALLEL_EXP(exp) -#define QSS_ASSIGN_QUANTIZER_OPS(module) \ - quantizer->ops->recomputeNextTimes = module##_##recomputeNextTimes; \ - quantizer->ops->recomputeNextTime = module##_##recomputeNextTime; \ - quantizer->ops->nextTime = module##_##nextTime; \ - quantizer->ops->updateQuantizedState = module##_##updateQuantizedState; +#define QSS_PARALLEL_IF(map) -#endif +#define QSS_PARALLEL_IF_END -#define QSS_DECLARE_QUANTIZER_INTERFACE(module) \ - extern void module##_##init(QA_quantizer quantizer, QSS_data simData, QSS_time simTime); \ - extern void module##_##recomputeNextTimes(QA_quantizer quantizer, int vars, int *inf, double t, double *nTime, double *x, double *lqu, \ - double *q) __attribute__((hot)); \ - extern void module##_##recomputeNextTime(QA_quantizer quantizer, int var, double t, double *nTime, double *x, double *lqu, double *q) \ - __attribute__((hot)); \ - extern void module##_##nextTime(QA_quantizer quantizer, int var, double t, double *nTime, double *x, double *lqu) __attribute__((hot)); \ - extern void module##_##updateQuantizedState(QA_quantizer quantizer, int i, double *q, double *x, double *lqu) __attribute__((hot)); \ - extern void module##_##PAR_init(QA_quantizer quantizer, QSS_data simData, QSS_time simTime); \ - extern void module##_##PAR_recomputeNextTimes(QA_quantizer quantizer, int vars, int *inf, double t, double *nTime, double *x, \ - double *lqu, double *q) __attribute__((hot)); \ - extern void module##_##PAR_recomputeNextTime(QA_quantizer quantizer, int var, double t, double *nTime, double *x, double *lqu, \ - double *q) __attribute__((hot)); \ - extern void module##_##PAR_nextTime(QA_quantizer quantizer, int var, double t, double *nTime, double *x, double *lqu) \ - __attribute__((hot)); \ - extern void module##_##PAR_updateQuantizedState(QA_quantizer quantizer, int i, double *q, double *x, double *lqu) __attribute__((hot)); +#endif #define QSS_INT_FUNC_DECL(ret_type, module, name, args...) \ extern ret_type module##_##name(args); \ diff --git a/src/engine/common/settings.c b/src/engine/common/settings.c index e43b0451..bf7e7fc2 100644 --- a/src/engine/common/settings.c +++ b/src/engine/common/settings.c @@ -119,12 +119,15 @@ int _getOrder(SD_Solver sol) SET_settings SET_Settings(char *fname) { - config_t cfg, *cf; + config_t cfg; + config_t *cf; const config_setting_t *lists; - int count, n, ires, option; + int count; + int n; + int ires; + int option; double dres; const char *sol; - const char *bdf; cf = &cfg; config_init(cf); if (!config_read_file(cf, fname)) { @@ -153,7 +156,9 @@ SET_settings SET_Settings(char *fname) p->dtSynch = SD_DT_Adaptive; p->BDFPart = 0; p->BDFPartitionDepth = 1; + p->CVODE_max_order = 0; p->BDFMaxStep = 0; + p->x_output = 0; if (config_lookup_float(cf, "minstep", &dres)) { if (dres == 0) { p->minstep = MIN_STEP; @@ -201,6 +206,9 @@ SET_settings SET_Settings(char *fname) if (config_lookup_int(cf, "jacobian", &ires)) { p->jacobian = ires; } + if (config_lookup_int(cf, "CVODEMaxOrder", &ires)) { + p->CVODE_max_order = ires; + } if (config_lookup_int(cf, "nodesize", &ires)) { if (ires == 0) { p->nodesize = NODE_SIZE; @@ -215,10 +223,8 @@ SET_settings SET_Settings(char *fname) if (config_lookup_int(cf, "bdf", &ires)) { p->BDFPart = ires; } - if (config_lookup_int(cf, "BDFPartitionDepth", &ires)) { - if (ires > 0) { - p->BDFPartitionDepth = ires; - } + if (config_lookup_int(cf, "BDFPartitionDepth", &ires) && ires > 0) { + p->BDFPartitionDepth = ires; } if (config_lookup_float(cf, "BDFMaxStep", &dres)) { p->BDFMaxStep = dres; @@ -273,6 +279,9 @@ SET_settings SET_Settings(char *fname) } p->partitionerOptions.nMetis = option; } + if (config_lookup_int(cf, "XOutput", &ires)) { + p->x_output = ires; + } config_destroy(cf); return p; } diff --git a/src/engine/common/settings.h b/src/engine/common/settings.h index e6e04358..537c250b 100644 --- a/src/engine/common/settings.h +++ b/src/engine/common/settings.h @@ -16,13 +16,12 @@ along with QSS Solver. If not, see . ******************************************************************************/ +#pragma once -#ifndef SETTINGS_H_ -#define SETTINGS_H_ - +#include #include "data.h" -typedef struct SET_settings_ *SET_settings; +TYPE_DEF(SET_settings) struct SET_settings_ { double minstep; @@ -43,14 +42,14 @@ struct SET_settings_ { int nDQRel; int jacobian; int BDFPartitionDepth; + int CVODE_max_order; SD_PartitionMethod pm; SD_DtSynch dtSynch; SD_partitionerOptions partitionerOptions; int BDFPart; + int x_output; }; SET_settings SET_Settings(char *fname); void freeSettings(SET_settings settings); - -#endif /* SETTINGS_H_ */ diff --git a/src/engine/common/utils.c b/src/engine/common/utils.c index bb9139e8..a3e907f2 100644 --- a/src/engine/common/utils.c +++ b/src/engine/common/utils.c @@ -30,6 +30,13 @@ #include +void checkedFree(void *ptr) +{ + if (ptr != NULL) { + free(ptr); + } +} + void *checkedMalloc(unsigned long long len) { void *p = malloc(len); @@ -158,7 +165,7 @@ double minPosRoot(double *coeff, int order) mpr = INF; } else { mpr = -coeff[0] / coeff[1]; - }; + } if (mpr < 0) { mpr = INF; } @@ -169,7 +176,7 @@ double minPosRoot(double *coeff, int order) mpr = INF; } else { mpr = -coeff[0] / coeff[1]; - }; + } if (mpr < 0) { mpr = INF; } @@ -187,13 +194,13 @@ double minPosRoot(double *coeff, int order) mpr = r1; } else { mpr = INF; - }; + } r1 = (-coeff[1] - sd) / 2 / coeff[2]; if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } - }; - }; + } + } break; case 3: if ((coeff[3] == 0) || (1000 * fabs(coeff[3]) < fabs(coeff[2]))) { @@ -234,7 +241,14 @@ double minPosRoot(double *coeff, int order) } } else { // three real roots - double rho, th, rho13, costh3, sinth3, spt, smti32, r1; + double rho; + double th; + double rho13; + double costh3; + double sinth3; + double spt; + double smti32; + double r1; rho = sqrt(-q * q * q); th = acos(r / rho); rho13 = pow(rho, 1.0 / 3); diff --git a/src/engine/common/utils.h b/src/engine/common/utils.h index eb9dcc50..8548d43c 100644 --- a/src/engine/common/utils.h +++ b/src/engine/common/utils.h @@ -17,8 +17,7 @@ ******************************************************************************/ -#ifndef UTILS_H_ -#define UTILS_H_ +#pragma once #ifdef _WIN32 #include @@ -67,6 +66,8 @@ typedef char bool; typedef char *string; +void checkedFree(void *ptr); + void *checkedMalloc(unsigned long long len); double minPosRoot(double *coeff, int order) __attribute__((hot)); @@ -413,5 +414,3 @@ void waitUntil(double until); void setInitRealTime(); #endif - -#endif /* UTILS_H_ */ diff --git a/src/engine/qss/methods/cqss.c b/src/engine/qss/methods/cqss.c index 693dee6f..c541bf0d 100644 --- a/src/engine/qss/methods/cqss.c +++ b/src/engine/qss/methods/cqss.c @@ -22,9 +22,9 @@ #include #include +#include #include #include -#include void QSS_FUNC_DECL(CQSS, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { diff --git a/src/engine/qss/methods/cqss.h b/src/engine/qss/methods/cqss.h index 9109ac42..2cc640fc 100644 --- a/src/engine/qss/methods/cqss.h +++ b/src/engine/qss/methods/cqss.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/liqss.c b/src/engine/qss/methods/liqss.c index ad4de5b8..8cafa994 100644 --- a/src/engine/qss/methods/liqss.c +++ b/src/engine/qss/methods/liqss.c @@ -23,9 +23,9 @@ #include #include +#include #include #include -#include void QSS_FUNC_DECL(LIQSS, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { @@ -110,10 +110,10 @@ void QSS_FUNC_DECL(LIQSS, nextTime)(QA_quantizer quantizer, int var, double t, d void QSS_FUNC_DECL(LIQSS, updateQuantizedState)(QA_quantizer quantizer, int var, double *q, double *x, double *lqu) { int cf0 = var * 2, cf1 = cf0 + 1; - double dx; + double dx = 0; double *u = quantizer->state->u0; double *a = quantizer->state->a; - double dq; + double dq = 0; quantizer->state->qAux[var] = q[cf0]; quantizer->state->oldDx[var] = x[cf1]; quantizer->state->lt[var] = *(quantizer->state->simTime); diff --git a/src/engine/qss/methods/liqss.h b/src/engine/qss/methods/liqss.h index 975cb8fd..6fca760a 100644 --- a/src/engine/qss/methods/liqss.h +++ b/src/engine/qss/methods/liqss.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/liqss2.c b/src/engine/qss/methods/liqss2.c index 6df740bd..cc27a959 100644 --- a/src/engine/qss/methods/liqss2.c +++ b/src/engine/qss/methods/liqss2.c @@ -16,14 +16,16 @@ along with QSS Solver. If not, see . ******************************************************************************/ + #include + #include #include #include +#include #include #include -#include void QSS_FUNC_DECL(LIQSS2, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { diff --git a/src/engine/qss/methods/liqss2.h b/src/engine/qss/methods/liqss2.h index 07c1ca92..c23375ac 100644 --- a/src/engine/qss/methods/liqss2.h +++ b/src/engine/qss/methods/liqss2.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/liqss3.c b/src/engine/qss/methods/liqss3.c index 84340035..f9b3ece6 100644 --- a/src/engine/qss/methods/liqss3.c +++ b/src/engine/qss/methods/liqss3.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include diff --git a/src/engine/qss/methods/liqss3.h b/src/engine/qss/methods/liqss3.h index 95a2a0b4..8a97ab09 100644 --- a/src/engine/qss/methods/liqss3.h +++ b/src/engine/qss/methods/liqss3.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/liqss_bdf.c b/src/engine/qss/methods/liqss_bdf.c index 03fa52f4..d7856989 100644 --- a/src/engine/qss/methods/liqss_bdf.c +++ b/src/engine/qss/methods/liqss_bdf.c @@ -17,12 +17,15 @@ ******************************************************************************/ -#include -#include #include + +#include #include #include +#include +#include + void QSS_FUNC_DECL(LIQSS_BDF, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { int i; diff --git a/src/engine/qss/methods/liqss_bdf.h b/src/engine/qss/methods/liqss_bdf.h index 1e6b1595..9e862f5a 100644 --- a/src/engine/qss/methods/liqss_bdf.h +++ b/src/engine/qss/methods/liqss_bdf.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/mliqss.c b/src/engine/qss/methods/mliqss.c index 1878df82..dc4d0e23 100644 --- a/src/engine/qss/methods/mliqss.c +++ b/src/engine/qss/methods/mliqss.c @@ -17,12 +17,15 @@ along with QSS Solver. If not, see . ******************************************************************************/ + +#include + #include #include #include +#include #include -#include #define TOL 2 @@ -93,7 +96,6 @@ void QSS_FUNC_DECL(mLIQSS, recomputeNextTime)(QA_quantizer quantizer, int i, dou bool state_step = quantizer->state->lSimTime->type == ST_State; double diff_Q; bool *sim_step = quantizer->state->sim_step; - int *flag2 = quantizer->state->flag2; if (t > 0 && state_step) { diff_Q = q[2 * ifr_state] - quantizer->state->qAux[ifr_state]; diff --git a/src/engine/qss/methods/mliqss2.c b/src/engine/qss/methods/mliqss2.c index 3f6faf16..93e376dd 100644 --- a/src/engine/qss/methods/mliqss2.c +++ b/src/engine/qss/methods/mliqss2.c @@ -17,11 +17,13 @@ ******************************************************************************/ +#include + #include #include #include -#include +#include #include void QSS_FUNC_DECL(mLIQSS2, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) diff --git a/src/engine/qss/methods/mliqss3.c b/src/engine/qss/methods/mliqss3.c index 17e04965..67ebc525 100644 --- a/src/engine/qss/methods/mliqss3.c +++ b/src/engine/qss/methods/mliqss3.c @@ -23,9 +23,8 @@ #include #include +#include #include -#include -#include #define EPS 1e-40 diff --git a/src/engine/qss/methods/qss.c b/src/engine/qss/methods/qss.c index 2f1c9049..e96fa226 100644 --- a/src/engine/qss/methods/qss.c +++ b/src/engine/qss/methods/qss.c @@ -21,9 +21,8 @@ #include +#include #include -#include -#include void QSS_FUNC_DECL(QSS, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { @@ -40,13 +39,17 @@ void QSS_FUNC_DECL(QSS, recomputeNextTime)(QA_quantizer quantizer, int var, doub { int cf0 = var * 2, cf1 = cf0 + 1; double coeff[2]; - coeff[0] = q[cf0] - x[cf0] - lqu[var]; - coeff[1] = -x[cf1]; - nTime[var] = t + minPosRoot(coeff, 1); - coeff[0] = q[cf0] - x[cf0] + lqu[var]; - double timeaux = t + minPosRoot(coeff, 1); - if (timeaux < nTime[var]) { - nTime[var] = timeaux; + if (fabs(q[cf0] - x[cf0]) >= lqu[var] * DQ_APPROX) { + nTime[var] = t; + } else { + coeff[0] = q[cf0] - x[cf0] - lqu[var]; + coeff[1] = -x[cf1]; + nTime[var] = t + minPosRoot(coeff, 1); + coeff[0] = q[cf0] - x[cf0] + lqu[var]; + double timeaux = t + minPosRoot(coeff, 1); + if (timeaux < nTime[var]) { + nTime[var] = timeaux; + } } } diff --git a/src/engine/qss/methods/qss.h b/src/engine/qss/methods/qss.h index 61a6a268..9755ecd4 100644 --- a/src/engine/qss/methods/qss.h +++ b/src/engine/qss/methods/qss.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/qss2.c b/src/engine/qss/methods/qss2.c index 0f9d0c6e..feb0f23d 100644 --- a/src/engine/qss/methods/qss2.c +++ b/src/engine/qss/methods/qss2.c @@ -21,9 +21,8 @@ #include +#include #include -#include -#include void QSS_FUNC_DECL(QSS2, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { @@ -52,7 +51,7 @@ void QSS_FUNC_DECL(QSS2, recomputeNextTime)(QA_quantizer quantizer, int var, dou { int cf0 = var * 3, cf1 = cf0 + 1, cf2 = cf1 + 1; double coeff[3]; - if (fabs(q[cf0] - x[cf0]) >= lqu[var] * 0.999999999) { + if (fabs(q[cf0] - x[cf0]) >= lqu[var] * DQ_APPROX) { nTime[var] = t; } else { coeff[0] = q[cf0] + lqu[var] - x[cf0]; diff --git a/src/engine/qss/methods/qss2.h b/src/engine/qss/methods/qss2.h index d9de4e01..9134fe3e 100644 --- a/src/engine/qss/methods/qss2.h +++ b/src/engine/qss/methods/qss2.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/qss3.c b/src/engine/qss/methods/qss3.c index db1eb414..aad73afe 100644 --- a/src/engine/qss/methods/qss3.c +++ b/src/engine/qss/methods/qss3.c @@ -21,9 +21,8 @@ #include +#include #include -#include -#include void QSS_FUNC_DECL(QSS3, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { @@ -57,7 +56,7 @@ void QSS_FUNC_DECL(QSS3, recomputeNextTime)(QA_quantizer quantizer, int var, dou { int cf0 = var * 4, cf1 = cf0 + 1, cf2 = cf1 + 1, cf3 = cf2 + 1; double coeff[4]; - if (fabs(q[cf0] - x[cf0]) >= lqu[var] * 0.999999999) { + if (fabs(q[cf0] - x[cf0]) >= lqu[var] * DQ_APPROX) { nTime[var] = t; } else { coeff[0] = q[cf0] + lqu[var] - x[cf0]; diff --git a/src/engine/qss/methods/qss3.h b/src/engine/qss/methods/qss3.h index 72baf170..136e21d3 100644 --- a/src/engine/qss/methods/qss3.h +++ b/src/engine/qss/methods/qss3.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/methods/qss4.c b/src/engine/qss/methods/qss4.c index 7a54569f..e06faf7e 100644 --- a/src/engine/qss/methods/qss4.c +++ b/src/engine/qss/methods/qss4.c @@ -21,9 +21,8 @@ #include +#include #include -#include -#include void QSS_FUNC_DECL(QSS4, init)(QA_quantizer quantizer, QSS_data simData, QSS_time simTime) { @@ -56,7 +55,7 @@ void QSS_FUNC_DECL(QSS4, recomputeNextTime)(QA_quantizer quantizer, int var, dou { int cf0 = var * 5, cf1 = cf0 + 1, cf2 = cf1 + 1, cf3 = cf2 + 1, cf4 = cf3 + 1; double coeff[5]; - if (fabs(q[cf0] - x[cf0]) >= lqu[var] * 0.999999999) { + if (fabs(q[cf0] - x[cf0]) >= lqu[var] * DQ_APPROX) { nTime[var] = t; } else { coeff[0] = q[cf0] + lqu[var] - x[cf0]; diff --git a/src/engine/qss/methods/qss4.h b/src/engine/qss/methods/qss4.h index c67ee015..b48764fc 100644 --- a/src/engine/qss/methods/qss4.h +++ b/src/engine/qss/methods/qss4.h @@ -19,7 +19,6 @@ #pragma once -#include #include #include diff --git a/src/engine/qss/qss_data.c b/src/engine/qss/qss_data.c index aac9e2e7..d61ec23a 100644 --- a/src/engine/qss/qss_data.c +++ b/src/engine/qss/qss_data.c @@ -37,8 +37,7 @@ QSS_reinit QSS_Reinit() return NULL; } QSS_reinit p = checkedMalloc(sizeof(*p)); - int i; - for (i = 0; i < QSS_REINIT_BUFFER; i++) { + for (int i = 0; i < QSS_REINIT_BUFFER; i++) { p->variable[i] = NOT_ASSIGNED; } p->time = INF; @@ -230,8 +229,8 @@ QSS_LP_dataArray QSS_LP_DataArray(int size) void QSS_LP_freeDataArray(QSS_LP_dataArray array) { if (!QSS_hardCopyStruct) { - int i, size = array->size; - for (i = 0; i < size; i++) { + int size = array->size; + for (int i = 0; i < size; i++) { if (array->lp[i] != NULL) { QSS_LP_freeData(array->lp[i]); } @@ -253,36 +252,16 @@ void QSS_LP_freeData(QSS_LP_data data) if (data == NULL) { return; } - if (data->nLPS != NULL) { - free(data->nLPS); - } - if (data->lps != NULL) { - free(data->lps); - } - if (data->qOutMap != NULL) { - free(data->qOutMap); - } - if (data->eOutMap != NULL) { - free(data->eOutMap); - } - if (data->qMap != NULL) { - free(data->qMap); - } - if (data->qInMap != NULL) { - free(data->qInMap); - } - if (data->eMap != NULL) { - free(data->eMap); - } - if (data->eInMap != NULL) { - free(data->eInMap); - } - if (data->iMap != NULL) { - free(data->iMap); - } - if (data->dscMap != NULL) { - free(data->dscMap); - } + checkedFree(data->nLPS); + checkedFree(data->lps); + checkedFree(data->qOutMap); + checkedFree(data->eOutMap); + checkedFree(data->qMap); + checkedFree(data->qInMap); + checkedFree(data->eMap); + checkedFree(data->eInMap); + checkedFree(data->iMap); + checkedFree(data->dscMap); free(data); } @@ -308,7 +287,7 @@ QSS_data QSS_Data(int states, int discretes, int events, int inputs, int algs, i exit(-1); } QSS_data p = checkedMalloc(sizeof(*p)); - int i, order = settings->order; + int order = settings->order; int xOrder = order + 1; p->states = states; p->discretes = discretes; @@ -421,7 +400,7 @@ QSS_data QSS_Data(int states, int discretes, int events, int inputs, int algs, i } } - for (i = 0; i < states; i++) { + for (int i = 0; i < states; i++) { p->dQMin[i] = (same_DQMin) ? settings->dqmin[0] : settings->dqmin[i]; p->dQRel[i] = (same_DQRel) ? settings->dqrel[0] : settings->dqrel[i]; } @@ -439,7 +418,8 @@ QSS_data QSS_Data(int states, int discretes, int events, int inputs, int algs, i p->event = NULL; } p->params = SD_Parameters(settings->derdelta, settings->zchyst, settings->minstep, settings->symdiff, settings->lps, settings->nodesize, - settings->pm, settings->dt, settings->dtSynch, settings->partitionerOptions, settings->jacobian); + settings->pm, settings->dt, settings->dtSynch, settings->partitionerOptions, settings->jacobian, + settings->CVODE_max_order, settings->x_output); p->lp = NULL; if (settings->lps > 0) { QSS_setReinitBuffer(TRUE); diff --git a/src/engine/qss/qss_data.h b/src/engine/qss/qss_data.h index cead5727..10129703 100644 --- a/src/engine/qss/qss_data.h +++ b/src/engine/qss/qss_data.h @@ -29,6 +29,7 @@ #pragma once #include +#include #include #define QSS_REINIT_BUFFER 10000 @@ -168,7 +169,7 @@ QSS_event SD_Event(QSS_zc zeroCrossing, QSS_hnd handlerPos, QSS_hnd handlerNeg); void QSS_freeEvent(QSS_event events); -typedef struct QSS_data_ *QSS_data; +TYPE_DEF(QSS_data) struct QSS_data_ { double *dQMin; @@ -245,7 +246,7 @@ void QSS_cleanData(QSS_data data); void QSS_allocDataMatrix(QSS_data data); -typedef struct QSS_time_ *QSS_time; +TYPE_DEF(QSS_time) /** * @struct QSS_time_ diff --git a/src/engine/qss/qss_file.c b/src/engine/qss/qss_file.c index 328aea8c..07015b55 100644 --- a/src/engine/qss/qss_file.c +++ b/src/engine/qss/qss_file.c @@ -37,6 +37,10 @@ void F_init(LG_log log, QSS_data sim_data, SD_output sim_output) int i, j, size; log->state->data = sim_data; log->state->output = sim_output; + int output_coeffs = sim_data->order; + if (sim_data->params->x_output == 1) { + output_coeffs++; + } #ifdef QSS_PARALLEL QSS_LP_data lp = sim_data->lp; log->state->size = lp->outputs; @@ -64,7 +68,7 @@ void F_init(LG_log log, QSS_data sim_data, SD_output sim_output) sprintf(log->state->fileName, "%s%s.dat", sim_output->variable[i].name, ext); log->state->files[j] = fopen(log->state->fileName, "w+"); if (sim_output->commInterval == CI_Dense || sim_output->commInterval == CI_Sampled) { - log->state->values[j] = sim_output->nOS[i] * sim_data->order + sim_output->nOD[i]; + log->state->values[j] = sim_output->nOS[i] * output_coeffs + sim_output->nOD[i]; } j++; #ifdef QSS_PARALLEL diff --git a/src/engine/qss/qss_log.c b/src/engine/qss/qss_log.c index 475f0662..20924270 100644 --- a/src/engine/qss/qss_log.c +++ b/src/engine/qss/qss_log.c @@ -17,12 +17,11 @@ ******************************************************************************/ -#include - #include #include "qss_file.h" #include "qss_memory.h" +#include LG_logState LG_LogState() { @@ -59,18 +58,10 @@ LG_log LG_Log(QSS_data sim_data, SD_output sim_output) s->ops = LG_LogOps(); switch (sim_output->store) { case SD_Memory: - if (sim_data->params->lps > 0) { - M_PAR_init(s, sim_data, sim_output); - } else { - M_init(s, sim_data, sim_output); - } + QSS_MODULE_INIT(M, s, sim_data, sim_output) break; case SD_File: - if (sim_data->params->lps > 0) { - F_PAR_init(s, sim_data, sim_output); - } else { - F_init(s, sim_data, sim_output); - } + QSS_MODULE_INIT(F, s, sim_data, sim_output) break; } return s; @@ -87,18 +78,10 @@ LG_log LG_copy(LG_log log, SD_StoreData store_data) s->state->batch_end = log->state->batch_end; switch (store_data) { case SD_Memory: - if (sim_data->params->lps > 0) { - M_PAR_init(s, sim_data, sim_output); - } else { - M_init(s, sim_data, sim_output); - } + QSS_MODULE_INIT(M, s, sim_data, sim_output) break; case SD_File: - if (sim_data->params->lps > 0) { - F_PAR_init(s, sim_data, sim_output); - } else { - F_init(s, sim_data, sim_output); - } + QSS_MODULE_INIT(F, s, sim_data, sim_output) break; } return s; diff --git a/src/engine/qss/qss_output.c b/src/engine/qss/qss_output.c index cd7b04c2..3c07e07e 100644 --- a/src/engine/qss/qss_output.c +++ b/src/engine/qss/qss_output.c @@ -17,11 +17,11 @@ ******************************************************************************/ -#include - #include +#include #include +#include #include "qss_sampled.h" #include "qss_step.h" @@ -31,6 +31,8 @@ OUT_outputState OUT_OutputState() p->log = NULL; p->steps = NULL; p->values = NULL; + p->output_var = NULL; + p->order = 0; return p; } @@ -43,26 +45,18 @@ OUT_outputOps OUT_OutputOps() return p; } -OUT_output OUT_Output(QSS_data simData, QSS_time simTime, SD_output simOutput) +OUT_output OUT_Output(QSS_data sim_data, QSS_time sim_time, SD_output sim_output) { OUT_output p = checkedMalloc(sizeof(*p)); p->state = OUT_OutputState(); p->ops = OUT_OutputOps(); - switch (simOutput->commInterval) { + switch (sim_output->commInterval) { case CI_Step: - if (simData->params->lps > 0) { - ST_PAR_init(p, simData, simTime, simOutput); - } else { - ST_init(p, simData, simTime, simOutput); - } + QSS_MODULE_INIT(ST, p, sim_data, sim_time, sim_output) break; case CI_Dense: case CI_Sampled: - if (simData->params->lps > 0) { - SAM_PAR_init(p, simData, simTime, simOutput); - } else { - SAM_init(p, simData, simTime, simOutput); - } + QSS_MODULE_INIT(SAM, p, sim_data, sim_time, sim_output) break; default: return NULL; @@ -93,11 +87,11 @@ void OUT_freeOutput(OUT_output o) } } -void OUT_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) +void OUT_write(OUT_output output, QSS_data sim_data, QSS_time sim_time, SD_output sim_output) { - output->ops->write(output, simData, simTime, simOutput); + output->ops->write(output, sim_data, sim_time, sim_output); } -int OUT_getSteps(OUT_output output, int var) { return output->ops->getSteps(output, var); } +int OUT_getSteps(const_OUT_output output, int var) { return output->ops->getSteps(output, var); } void OUT_save(OUT_output output) { output->ops->save(output); } diff --git a/src/engine/qss/qss_output.h b/src/engine/qss/qss_output.h index 1db435d2..734e9a34 100644 --- a/src/engine/qss/qss_output.h +++ b/src/engine/qss/qss_output.h @@ -17,134 +17,77 @@ ******************************************************************************/ -#ifndef QSS_OUTPUT_H_ -#define QSS_OUTPUT_H_ +#pragma once #include +#include #include #include -/** - * - */ -typedef struct OUT_outputState_ *OUT_outputState; - -/** - * - */ -typedef struct OUT_outputOps_ *OUT_outputOps; - -/** - * - */ -typedef struct OUT_output_ *OUT_output; - -/** - * - * @param QSS_data - * @param QSS_time - * @param SD_output - */ -typedef void (*OUT_writeFn)(OUT_output, QSS_data, QSS_time, SD_output); - -/** - * - * @param - * @return - */ -typedef int (*OUT_getStepsFn)(OUT_output, int); - -/** - * - */ +#define QSS_DEFINE_OPUTPUT_OPS(module) \ + output->ops->write = module##_write; \ + output->ops->getSteps = module##_getSteps; \ + output->ops->save = module##_save; + +#ifdef QSS_PARALLEL +#define QSS_ASSIGN_OUTPUT_OPS(module) QSS_DEFINE_OPUTPUT_OPS(module##_PAR) +#else +#define QSS_ASSIGN_OUTPUT_OPS(module) QSS_DEFINE_OPUTPUT_OPS(module) +#endif + +#define QSS_DEFINE_OUTPUT_INTERFACE(module) \ + void module##_write(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output); \ + int module##_getSteps(const_OUT_output output, int var); \ + void module##_save(OUT_output output); \ + void module##_init(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output); + +#define QSS_DECLARE_OUTPUT_INTERFACE(module) \ + QSS_DEFINE_OUTPUT_INTERFACE(module) \ + QSS_DEFINE_OUTPUT_INTERFACE(module##_PAR) + +TYPE_DEF(OUT_outputOps) +TYPE_DEF(OUT_outputState) +TYPE_DEF(OUT_output) + +typedef void (*OUT_writeFn)(OUT_output, const_QSS_data, const_QSS_time, const_SD_output); + +typedef int (*OUT_getStepsFn)(const_OUT_output, int); + typedef void (*OUT_saveFn)(OUT_output); -/** - * - */ struct OUT_outputState_ { - LG_log log; //!< - int *steps; //!< - double *values; //!< + LG_log log; + int *steps; + double *values; + double *output_var; + int order; }; -/** - * - */ struct OUT_outputOps_ { - OUT_writeFn write; //!< - OUT_getStepsFn getSteps; //!< - OUT_saveFn save; //!< + OUT_writeFn write; + OUT_getStepsFn getSteps; + OUT_saveFn save; }; -/** - * - */ struct OUT_output_ { - OUT_outputState state; //!< - OUT_outputOps ops; //!< + OUT_outputState state; + OUT_outputOps ops; }; -/** - * - * @param simData - * @param simTime - * @param simOutput - * @return - */ -OUT_output OUT_Output(QSS_data simData, QSS_time simTime, SD_output simOutput); - -/** - * - * @return - */ +OUT_output OUT_Output(QSS_data sim_data, QSS_time sim_time, SD_output sim_output); + OUT_outputState OUT_OutputState(); -/** - * - * @return - */ OUT_outputOps OUT_OutputOps(); -/** - * - * @param o - */ void OUT_freeOutput(OUT_output o); -/** - * - * @param o - */ void OUT_freeOutputState(OUT_outputState o); -/** - * - * @param o - */ void OUT_freeOutputOps(OUT_outputOps o); -/** - * - * @param output - * @param simData - * @param simTime - * @param simOutput - */ -void OUT_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); - -/** - * - * @param - * @param var - * @return - */ -int OUT_getSteps(OUT_output output, int var); - -/** - * - * @param output - */ -void OUT_save(OUT_output output); +void OUT_write(OUT_output output, QSS_data sim_data, QSS_time sim_time, SD_output sim_output); -#endif /* QSS_OUTPUT_H_ */ +int OUT_getSteps(const_OUT_output output, int var); + +void OUT_save(OUT_output output); diff --git a/src/engine/qss/qss_quantizer.h b/src/engine/qss/qss_quantizer.h index be2380f9..582d95f4 100644 --- a/src/engine/qss/qss_quantizer.h +++ b/src/engine/qss/qss_quantizer.h @@ -22,6 +22,33 @@ #include #include +#define QSS_DEFINE_QUANTIZER_OPS(module) \ + quantizer->ops->recomputeNextTimes = module##_recomputeNextTimes; \ + quantizer->ops->recomputeNextTime = module##_recomputeNextTime; \ + quantizer->ops->nextTime = module##_nextTime; \ + quantizer->ops->updateQuantizedState = module##_updateQuantizedState; + +#ifdef QSS_PARALLEL +#define QSS_ASSIGN_QUANTIZER_OPS(module) \ + quantizer->state->qMap = simData->lp->qMap; \ + QSS_DEFINE_QUANTIZER_OPS(module##_PAR) +#else +#define QSS_ASSIGN_QUANTIZER_OPS(module) QSS_DEFINE_QUANTIZER_OPS(module) +#endif + +#define QSS_DEFINE_QUANTIZER_INTERFACE(module) \ + extern void module##_init(QA_quantizer quantizer, QSS_data simData, QSS_time simTime); \ + extern void module##_recomputeNextTimes(QA_quantizer quantizer, int vars, int *inf, double t, double *nTime, double *x, double *lqu, \ + double *q) __attribute__((hot)); \ + extern void module##_recomputeNextTime(QA_quantizer quantizer, int var, double t, double *nTime, double *x, double *lqu, double *q) \ + __attribute__((hot)); \ + extern void module##_nextTime(QA_quantizer quantizer, int var, double t, double *nTime, double *x, double *lqu) __attribute__((hot)); \ + extern void module##_updateQuantizedState(QA_quantizer quantizer, int i, double *q, double *x, double *lqu) __attribute__((hot)); + +#define QSS_DECLARE_QUANTIZER_INTERFACE(module) \ + QSS_DEFINE_QUANTIZER_INTERFACE(module) \ + QSS_DEFINE_QUANTIZER_INTERFACE(module##_PAR) + typedef struct QA_quantizerOps_ *QA_quantizerOps; typedef struct QA_quantizerState_ *QA_quantizerState; typedef struct QA_quantizer_ *QA_quantizer; diff --git a/src/engine/qss/qss_sampled.c b/src/engine/qss/qss_sampled.c index b6bee7af..242e1884 100644 --- a/src/engine/qss/qss_sampled.c +++ b/src/engine/qss/qss_sampled.c @@ -17,169 +17,120 @@ ******************************************************************************/ -#include - #include #include #include #include #include +#include -#ifdef QSS_PARALLEL -void SAM_PAR_writeOutvar(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput, int index, int variable) -#else -void SAM_writeOutvar(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput, int index, int variable) -#endif +void QSS_FUNC_DECL(SAM, writeOutvar)(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output, + int index, int variable) { - int j, k, h, nOS = simOutput->nOS[index], nOD = simOutput->nOD[index], order = simData->order, coeffs = order + 1, nStates = nOS * coeffs; - for (j = 0; j < nOS; j++) { - double *q = simData->q; - k = simOutput->OS[index][j]; - for (h = 0; h < order; h++) { - output->state->values[j * coeffs + h] = q[k * coeffs + h]; + int nOS = sim_output->nOS[index]; + int nOD = sim_output->nOD[index]; + int order = output->state->order; + int coeffs = sim_data->order + 1; + int nStates = nOS * coeffs; + const double *output_vars = output->state->output_var; + for (int j = 0; j < nOS; j++) { + int k = sim_output->OS[index][j]; + for (int h = 0; h < order; h++) { + output->state->values[j * coeffs + h] = output_vars[k * coeffs + h]; } } - for (j = 0; j < nOD; j++) { - k = simOutput->OD[index][j]; - output->state->values[nStates + j] = simData->d[k]; + for (int j = 0; j < nOD; j++) { + int k = sim_output->OD[index][j]; + output->state->values[nStates + j] = sim_data->d[k]; } - LG_writeLine(output->state->log, variable, simTime->time, output->state->values); + LG_writeLine(output->state->log, variable, sim_time->time, output->state->values); } -#ifdef QSS_PARALLEL -void SAM_PAR_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#else -void SAM_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#endif +void QSS_FUNC_DECL(SAM, init)(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output) { - int i, j, max = 0, maxDiscrete = 0, outputs = simOutput->outputs, size = outputs; -#ifdef QSS_PARALLEL - QSS_LP_data lp = simData->lp; - size = lp->outputs; -#endif + int i; + int max = 0; + int max_discrete = 0; + int outputs = sim_output->outputs; + int size = outputs; + QSS_PARALLEL_EXP(QSS_LP_data lp = sim_data->lp;) + QSS_PARALLEL_EXP(size = lp->outputs;) if (size > 0) { - output->state->log = LG_Log(simData, simOutput); + if (sim_data->params->x_output == 1) { + output->state->output_var = sim_data->x; + output->state->order = sim_data->order + 1; + } else { + output->state->output_var = sim_data->q; + output->state->order = sim_data->order; + } + output->state->log = LG_Log(sim_data, sim_output); output->state->steps = (int *)malloc(outputs * sizeof(int)); - for (j = 0; j < outputs; j++) { - if (max < simOutput->nOS[j]) { - max = simOutput->nOS[j]; + for (int j = 0; j < outputs; j++) { + if (max < sim_output->nOS[j]) { + max = sim_output->nOS[j]; } - if (maxDiscrete < simOutput->nOD[j]) { - maxDiscrete = simOutput->nOD[j]; + if (max_discrete < sim_output->nOD[j]) { + max_discrete = sim_output->nOD[j]; } } - output->state->values = (double *)malloc((((simData->order + 1) * max) + maxDiscrete) * sizeof(double)); + size_t values_nbr = (((sim_data->order + 1) * max) + max_discrete); + if (values_nbr > 0) { + output->state->values = (double *)malloc(values_nbr * sizeof(double)); + } i = 0; - for (j = 0; j < outputs; j++) { -#ifdef QSS_PARALLEL - if (lp->oMap[j] > NOT_ASSIGNED) { - SAM_PAR_writeOutvar(output, simData, simTime, simOutput, j, i); -#else - SAM_writeOutvar(output, simData, simTime, simOutput, j, i); -#endif - output->state->steps[i++] = 1; -#ifdef QSS_PARALLEL - } -#endif + for (int j = 0; j < outputs; j++) { + QSS_PARALLEL_IF(lp->oMap[j]) + QSS_FUNC_INVK(SAM, writeOutvar)(output, sim_data, sim_time, sim_output, j, i); + output->state->steps[i++] = 1; + QSS_PARALLEL_IF_END } -#ifdef QSS_PARALLEL - output->ops->write = SAM_PAR_write; - output->ops->getSteps = SAM_PAR_getSteps; - output->ops->save = SAM_PAR_save; -#else - output->ops->write = SAM_write; - output->ops->getSteps = SAM_getSteps; - output->ops->save = SAM_save; -#endif + QSS_ASSIGN_OUTPUT_OPS(SAM) } } -#ifdef QSS_PARALLEL -void SAM_PAR_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#else -void SAM_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#endif +void QSS_FUNC_DECL(SAM, initOutputVar)(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output, + int output_index) { -#ifdef QSS_PARALLEL - QSS_LP_data lp = simData->lp; -#endif - int i, k, h, j; - if (simTime->type == ST_State) { - int nSO = simOutput->nSO[simTime->minIndex]; - for (i = 0; i < nSO; i++) { - j = simOutput->SO[simTime->minIndex][i]; - int variable = j; -#ifdef QSS_PARALLEL - if (lp->oMap[j] > NOT_ASSIGNED) { - variable = lp->oMap[j]; - SAM_PAR_writeOutvar(output, simData, simTime, simOutput, j, variable); -#else - SAM_writeOutvar(output, simData, simTime, simOutput, j, variable); -#endif - output->state->steps[variable]++; -#ifdef QSS_PARALLEL - } -#endif + QSS_PARALLEL_EXP(QSS_LP_data lp = sim_data->lp;) + int variable = output_index; + QSS_PARALLEL_IF(lp->oMap[output_index]) + QSS_PARALLEL_EXP(variable = lp->oMap[output_index];) + QSS_FUNC_INVK(SAM, writeOutvar)(output, sim_data, sim_time, sim_output, output_index, variable); + output->state->steps[variable]++; + QSS_PARALLEL_IF_END +} + +void QSS_FUNC_DECL(SAM, write)(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output) +{ + if (sim_time->type == ST_State) { + int nSO = sim_output->nSO[sim_time->minIndex]; + for (int i = 0; i < nSO; i++) { + int j = sim_output->SO[sim_time->minIndex][i]; + QSS_FUNC_INVK(SAM, initOutputVar)(output, sim_data, sim_time, sim_output, j); } - } else if (simTime->type == ST_Event) { - int nLHSSt = simData->event[simTime->minIndex].nLHSSt; - for (k = 0; k < nLHSSt; k++) { - h = simData->event[simTime->minIndex].LHSSt[k]; - int nSO = simOutput->nSO[h]; - for (i = 0; i < nSO; i++) { - j = simOutput->SO[h][i]; - int variable = j; -#ifdef QSS_PARALLEL - if (lp->oMap[j] > NOT_ASSIGNED) { - variable = lp->oMap[j]; - SAM_PAR_writeOutvar(output, simData, simTime, simOutput, j, variable); -#else - SAM_writeOutvar(output, simData, simTime, simOutput, j, variable); -#endif - output->state->steps[variable]++; -#ifdef QSS_PARALLEL - } -#endif + } else if (sim_time->type == ST_Event) { + int nLHSSt = sim_data->event[sim_time->minIndex].nLHSSt; + for (int k = 0; k < nLHSSt; k++) { + int h = sim_data->event[sim_time->minIndex].LHSSt[k]; + int nSO = sim_output->nSO[h]; + for (int i = 0; i < nSO; i++) { + int j = sim_output->SO[h][i]; + QSS_FUNC_INVK(SAM, initOutputVar)(output, sim_data, sim_time, sim_output, j); } } - int nLHSDsc = simData->event[simTime->minIndex].nLHSDsc; - for (k = 0; k < nLHSDsc; k++) { - h = simData->event[simTime->minIndex].LHSDsc[k]; - int nDO = simOutput->nDO[h]; - for (i = 0; i < nDO; i++) { - j = simOutput->DO[h][i]; - int variable = j; -#ifdef QSS_PARALLEL - if (lp->oMap[j] > NOT_ASSIGNED) { - variable = lp->oMap[j]; - SAM_PAR_writeOutvar(output, simData, simTime, simOutput, j, variable); -#else - SAM_writeOutvar(output, simData, simTime, simOutput, j, variable); -#endif - output->state->steps[variable]++; -#ifdef QSS_PARALLEL - } -#endif + int nLHSDsc = sim_data->event[sim_time->minIndex].nLHSDsc; + for (int k = 0; k < nLHSDsc; k++) { + int h = sim_data->event[sim_time->minIndex].LHSDsc[k]; + int nDO = sim_output->nDO[h]; + for (int i = 0; i < nDO; i++) { + int j = sim_output->DO[h][i]; + QSS_FUNC_INVK(SAM, initOutputVar)(output, sim_data, sim_time, sim_output, j); } } } } -#ifdef QSS_PARALLEL -int SAM_PAR_getSteps(OUT_output output, int var) -#else -int SAM_getSteps(OUT_output output, int var) -#endif -{ - return output->state->steps[var]; -} +int QSS_FUNC_DECL(SAM, getSteps)(const_OUT_output output, int var) { return output->state->steps[var]; } -#ifdef QSS_PARALLEL -void SAM_PAR_save(OUT_output output) -#else -void SAM_save(OUT_output output) -#endif -{ - LG_toFile(output->state->log); -} +void QSS_FUNC_DECL(SAM, save)(OUT_output output) { LG_toFile(output->state->log); } diff --git a/src/engine/qss/qss_sampled.h b/src/engine/qss/qss_sampled.h index 05fed03c..c0e9df19 100644 --- a/src/engine/qss/qss_sampled.h +++ b/src/engine/qss/qss_sampled.h @@ -17,65 +17,10 @@ ******************************************************************************/ -#ifndef QSS_SAMPLED_H_ -#define QSS_SAMPLED_H_ +#pragma once #include #include #include -/** - * - * @param simData - * @param simTime - * @param simOutput - */ -void SAM_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); -/** - * - * @param var - * @return - */ -int SAM_getSteps(OUT_output output, int var); - -/** - * - */ -void SAM_save(OUT_output output); - -/** - * - * @param simData - * @param simTime - * @param simOutput - */ -void SAM_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); - -/** - * - * @param simData - * @param simTime - * @param simOutput - */ -void SAM_PAR_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); -/** - * - * @param var - * @return - */ -int SAM_PAR_getSteps(OUT_output output, int var); - -/** - * - */ -void SAM_PAR_save(OUT_output output); - -/** - * - * @param simData - * @param simTime - * @param simOutput - */ -void SAM_PAR_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); - -#endif /* QSS_SAMPLED_H_ */ +QSS_DECLARE_OUTPUT_INTERFACE(SAM) diff --git a/src/engine/qss/qss_step.c b/src/engine/qss/qss_step.c index 33e88e7c..0dbd0b3a 100644 --- a/src/engine/qss/qss_step.c +++ b/src/engine/qss/qss_step.c @@ -17,171 +17,111 @@ ******************************************************************************/ -#include - #include -#include #include #include #include -#include +#include -#ifdef QSS_PARALLEL -void ST_PAR_writeOutvar(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput, int index, int variable) -#else -void ST_writeOutvar(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput, int index, int variable) -#endif +void QSS_FUNC_DECL(ST, writeOutvar)(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output, + int index, int variable) { - int j, k; - double e; - int nOS = simOutput->nOS[index], order = simData->order - 1, coeffs = order + 2; - double *q = simData->q; + double output_val; + int nOS = sim_output->nOS[index]; + int order = sim_data->order - 1; + int coeffs = order + 2; + double *q = sim_data->q; double tmp[nOS]; - for (j = 0; j < nOS; j++) { - k = simOutput->OS[index][j]; - e = simTime->time - simTime->tq[k]; + for (int j = 0; j < nOS; j++) { + int k = sim_output->OS[index][j]; + double elapsed = sim_time->time - sim_time->tq[k]; int cf0 = k * coeffs; tmp[j] = q[cf0]; - if (e) { - q[cf0] = evaluatePoly(cf0, e, q, order); + if (elapsed != 0) { + q[cf0] = evaluatePoly(cf0, elapsed, q, order); } } - simOutput->value(index, q, simData->d, simData->alg, simTime->time, &e); - LG_write(output->state->log, variable, simTime->time, e); - for (j = 0; j < nOS; j++) { - k = simOutput->OS[index][j]; + sim_output->value(index, q, sim_data->d, sim_data->alg, sim_time->time, &output_val); + LG_write(output->state->log, variable, sim_time->time, output_val); + for (int j = 0; j < nOS; j++) { + int k = sim_output->OS[index][j]; int cf0 = k * coeffs; q[cf0] = tmp[j]; } } -#ifdef QSS_PARALLEL -void ST_PAR_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#else -void ST_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#endif +void QSS_FUNC_DECL(ST, init)(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output) { - int j, i, outputs = simOutput->outputs, size = outputs; -#ifdef QSS_PARALLEL - QSS_LP_data lp = simData->lp; - size = lp->outputs; -#endif + int j; + int outputs = sim_output->outputs; + int size = outputs; + QSS_PARALLEL_EXP(QSS_LP_data lp = sim_data->lp;) + QSS_PARALLEL_EXP(size = lp->outputs;) if (size) { output->state->steps = (int *)malloc(outputs * sizeof(int)); - output->state->log = LG_Log(simData, simOutput); + output->state->log = LG_Log(sim_data, sim_output); j = 0; - for (i = 0; i < outputs; i++) { -#ifdef QSS_PARALLEL - if (lp->oMap[i] > NOT_ASSIGNED) { - ST_PAR_writeOutvar(output, simData, simTime, simOutput, i, j); -#else - ST_writeOutvar(output, simData, simTime, simOutput, i, j); -#endif + for (int i = 0; i < outputs; i++) { + QSS_PARALLEL_EXP(if (lp->oMap[i] > NOT_ASSIGNED) {) + QSS_FUNC_INVK(ST, writeOutvar)(output, sim_data, sim_time, sim_output, i, j); output->state->steps[j++] = 1; -#ifdef QSS_PARALLEL - } -#endif + QSS_PARALLEL_EXP( + }) } -#ifdef QSS_PARALLEL - output->ops->write = ST_PAR_write; - output->ops->getSteps = ST_PAR_getSteps; - output->ops->save = ST_PAR_save; -#else - output->ops->write = ST_write; - output->ops->getSteps = ST_getSteps; - output->ops->save = ST_save; -#endif + QSS_ASSIGN_OUTPUT_OPS(ST) } } -#ifdef QSS_PARALLEL -void ST_PAR_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#else -void ST_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput) -#endif +void QSS_FUNC_DECL(ST, write)(OUT_output output, const_QSS_data sim_data, const_QSS_time sim_time, const_SD_output sim_output) { -#ifdef QSS_PARALLEL - QSS_LP_data lp = simData->lp; -#endif - int i, j, k, h; - if (simTime->type == ST_State) { - int nSO = simOutput->nSO[simTime->minIndex]; - for (i = 0; i < nSO; i++) { - j = simOutput->SO[simTime->minIndex][i]; + QSS_PARALLEL_EXP(QSS_LP_data lp = sim_data->lp;) + if (sim_time->type == ST_State) { + int nSO = sim_output->nSO[sim_time->minIndex]; + for (int i = 0; i < nSO; i++) { + int j = sim_output->SO[sim_time->minIndex][i]; int variable = j; -#ifdef QSS_PARALLEL - if (lp->oMap[j] > NOT_ASSIGNED) { - variable = lp->oMap[j]; - ST_PAR_writeOutvar(output, simData, simTime, simOutput, j, variable); -#else - ST_writeOutvar(output, simData, simTime, simOutput, j, variable); -#endif - + QSS_PARALLEL_EXP(if (lp->oMap[j] > NOT_ASSIGNED) {) + QSS_PARALLEL_EXP(variable = lp->oMap[j];) + QSS_FUNC_INVK(ST, writeOutvar)(output, sim_data, sim_time, sim_output, j, variable); output->state->steps[variable]++; -#ifdef QSS_PARALLEL - } -#endif + QSS_PARALLEL_EXP( + }) } - } else if (simTime->type == ST_Event) { - int nLHSSt = simData->event[simTime->minIndex].nLHSSt; - for (k = 0; k < nLHSSt; k++) { - h = simData->event[simTime->minIndex].LHSSt[k]; - int nSO = simOutput->nSO[h]; - for (i = 0; i < nSO; i++) { - j = simOutput->SO[h][i]; + } else if (sim_time->type == ST_Event) { + int nLHSSt = sim_data->event[sim_time->minIndex].nLHSSt; + for (int k = 0; k < nLHSSt; k++) { + int h = sim_data->event[sim_time->minIndex].LHSSt[k]; + int nSO = sim_output->nSO[h]; + for (int i = 0; i < nSO; i++) { + int j = sim_output->SO[h][i]; int variable = j; -#ifdef QSS_PARALLEL - if (lp->oMap[j] > NOT_ASSIGNED) { - variable = lp->oMap[j]; - ST_PAR_writeOutvar(output, simData, simTime, simOutput, j, variable); -#else - ST_writeOutvar(output, simData, simTime, simOutput, j, variable); -#endif + QSS_PARALLEL_EXP(if (lp->oMap[j] > NOT_ASSIGNED) {) + QSS_PARALLEL_EXP(variable = lp->oMap[j];) + QSS_FUNC_INVK(ST, writeOutvar)(output, sim_data, sim_time, sim_output, j, variable); output->state->steps[variable]++; -#ifdef QSS_PARALLEL - } -#endif + QSS_PARALLEL_EXP( + }) } } - int nLHSDsc = simData->event[simTime->minIndex].nLHSDsc; - for (k = 0; k < nLHSDsc; k++) { - h = simData->event[simTime->minIndex].LHSDsc[k]; - int nDO = simOutput->nDO[h]; - for (i = 0; i < nDO; i++) { - j = simOutput->DO[h][i]; + int nLHSDsc = sim_data->event[sim_time->minIndex].nLHSDsc; + for (int k = 0; k < nLHSDsc; k++) { + int h = sim_data->event[sim_time->minIndex].LHSDsc[k]; + int nDO = sim_output->nDO[h]; + for (int i = 0; i < nDO; i++) { + int j = sim_output->DO[h][i]; int variable = j; -#ifdef QSS_PARALLEL - if (lp->oMap[j] > NOT_ASSIGNED) { - variable = lp->oMap[j]; - ST_PAR_writeOutvar(output, simData, simTime, simOutput, j, variable); - -#else - ST_writeOutvar(output, simData, simTime, simOutput, j, variable); -#endif + QSS_PARALLEL_EXP(if (lp->oMap[j] > NOT_ASSIGNED) {) + QSS_PARALLEL_EXP(variable = lp->oMap[j];) + QSS_FUNC_INVK(ST, writeOutvar)(output, sim_data, sim_time, sim_output, j, variable); output->state->steps[variable]++; -#ifdef QSS_PARALLEL - } -#endif + QSS_PARALLEL_EXP( + }) } } } } -#ifdef QSS_PARALLEL -int ST_PAR_getSteps(OUT_output output, int var) -#else -int ST_getSteps(OUT_output output, int var) -#endif -{ - return output->state->steps[var]; -} +int QSS_FUNC_DECL(ST, getSteps)(const_OUT_output output, int var) { return output->state->steps[var]; } -#ifdef QSS_PARALLEL -void ST_PAR_save(OUT_output output) -#else -void ST_save(OUT_output output) -#endif -{ - LG_toFile(output->state->log); -} +void QSS_FUNC_DECL(ST, save)(OUT_output output) { LG_toFile(output->state->log); } diff --git a/src/engine/qss/qss_step.h b/src/engine/qss/qss_step.h index 0ab032df..1ff4ff99 100644 --- a/src/engine/qss/qss_step.h +++ b/src/engine/qss/qss_step.h @@ -16,68 +16,10 @@ along with QSS Solver. If not, see . ******************************************************************************/ - -#ifndef QSS_STEP_H_ -#define QSS_STEP_H_ +#pragma once #include #include #include -/** - * - * @param QSS_data - * @param QSS_time - * @param SD_output - */ -void ST_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); - -/** - * - * @param - * @return - */ -int ST_getSteps(OUT_output output, int var); - -/** - * - */ -void ST_save(OUT_output output); - -/** - * - * @param simData - * @param simTime - * @param simOutput - */ -void ST_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); - -/** - * - * @param QSS_data - * @param QSS_time - * @param SD_output - */ -void ST_PAR_write(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); - -/** - * - * @param - * @return - */ -int ST_PAR_getSteps(OUT_output output, int var); - -/** - * - */ -void ST_PAR_save(OUT_output output); - -/** - * - * @param simData - * @param simTime - * @param simOutput - */ -void ST_PAR_init(OUT_output output, QSS_data simData, QSS_time simTime, SD_output simOutput); - -#endif /* QSS_STEP_H_ */ +QSS_DECLARE_OUTPUT_INTERFACE(ST) diff --git a/src/engine/tests/system/gt_data/adr2D/adr2D.mo b/src/engine/tests/system/gt_data/adr2D/adr2D.mo new file mode 100644 index 00000000..a9b0c3cc --- /dev/null +++ b/src/engine/tests/system/gt_data/adr2D/adr2D.mo @@ -0,0 +1,41 @@ +model adr2D + parameter Real a=1,d=0.01,r=1000; + constant Integer N=10; + parameter Real dx=10/N; + Real u[N,N]; +equation + der(u[1,1])=-a*(u[1,1]-1)/dx-a*(u[1,1]-1)/dx+d*(u[2,1]-2*u[1,1]+1)/dx^2+d*(u[1,2]-2*u[1,1]+1)/dx^2+r*(u[1,1]^2-u[1,1]^3); + der(u[N,N])=-a*(u[N,N]-u[N-1,N])/dx-a*(u[N,N]-u[N,N-1])/dx+d*(2*u[N-1,N]-2*u[N,N])/dx^2+d*(2*u[N,N-1]-2*u[N,N])/dx^2+r*(u[N,N]^2-u[N,N]^3); + der(u[1,N])=-a*(u[1,N]-1)/dx-a*(u[1,N]-u[1,N-1])/dx+d*(u[2,N]-2*u[1,N]+1)/dx^2+d*(2*u[1,N-1]-2*u[1,N])/dx^2+r*(u[1,N]^2-u[1,N]^3); + der(u[N,1])=-a*(u[N,1]-u[N-1,1])/dx-a*(u[N,1]-1)/dx+d*(2*u[N-1,1]-2*u[N,1])/dx^2+d*(u[N,2]-2*u[N,1]+1)/dx^2+r*(u[N,1]^2-u[N,1]^3); + + for i in 2:N-1,j in 2:N-1 loop + der(u[i,j])=-a*(u[i,j]-u[i-1,j])/dx-a*(u[i,j]-u[i,j-1])/dx+d*(u[i+1,j]-2*u[i,j]+u[i-1,j])/dx^2+d*(u[i,j+1]-2*u[i,j]+u[i,j-1])/dx^2+r*(u[i,j]^2-u[i,j]^3); + end for; + for j in 2:N-1 loop + der(u[1,j])=-a*(u[1,j]-1)/dx-a*(u[1,j]-u[1,j-1])/dx+d*(u[2,j]-2*u[1,j]+1)/dx^2+d*(u[1,j+1]-2*u[1,j]+u[1,j-1])/dx^2+r*(u[1,j]^2-u[1,j]^3); + der(u[N,j])=-a*(u[N,j]-u[N-1,j])/dx-a*(u[N,j]-u[N,j-1])/dx+d*(2*u[N-1,j]-2*u[1,j])/dx^2+d*(u[N,j+1]-2*u[N,j]+u[N,j-1])/dx^2+r*(u[N,j]^2-u[N,j]^3); + end for; + for i in 2:N-1 loop + der(u[i,1])=-a*(u[i,1]-u[i-1,1])/dx-a*(u[i,1]-1)/dx+d*(u[i+1,1]-2*u[i,1]+u[i-1,1])/dx^2+d*(u[i,2]-2*u[i,1]+1)/dx^2+r*(u[i,1]^2-u[i,1]^3); + der(u[i,N])=-a*(u[i,N]-u[i-1,N])/dx-a*(u[i,N]-u[i,N-1])/dx+d*(u[i+1,N]-2*u[i,N]+u[i-1,N])/dx^2+d*(2*u[i,N-1]-2*u[i,N])/dx^2+r*(u[i,N]^2-u[i,N]^3); +end for; + annotation( + + experiment( + MMO_Description="", + MMO_Solver=CVODE_BDF, + MMO_PartitionMethod=Scotch, + MMO_LPS=4, + MMO_DT_Synch=SD_DT_Fixed, + MMO_DT_Min=1e-3, + MMO_Output={u[2,2]}, + Jacobian=Dense, + MMO_BDF_PDepth=1, + MMO_BDF_Max_Step=0, + StartTime=0.0, + StopTime=10, + Tolerance={1e-3}, + AbsTolerance={1e-6} + )); +end adr2D; diff --git a/src/engine/tests/system/gt_data/adr2D/u[2,2].dat b/src/engine/tests/system/gt_data/adr2D/u[2,2].dat new file mode 100644 index 00000000..621571a4 --- /dev/null +++ b/src/engine/tests/system/gt_data/adr2D/u[2,2].dat @@ -0,0 +1,503 @@ +6.405699089271e-09 8.371548637969e-17 +6.40633965918e-05 8.37132662139e-09 +0.0007046333055189 6.498159064486e-07 +0.00180869548558 3.61715525195e-06 +0.002912757665641 8.981692981895e-06 +0.004584696991406 2.178922604976e-05 +0.006256636317171 4.035669187864e-05 +0.007928575642936 6.480175955759e-05 +0.01080634421764 0.0001210556828767 +0.0153954636575 0.0002505143123545 +0.01998458309736 0.0004349981922706 +0.02284600702855 0.0005821855305389 +0.02570743095974 0.0007589796670064 +0.02856885489093 0.000971495653903 +0.03022819690697 0.001114166446341 +0.03188753892301 0.001273979107509 +0.03354688093905 0.001454105833126 +0.0352062229551 0.001658855225418 +0.03686556497114 0.00189426437463 +0.03779512864846 0.002042332084728 +0.03872469232578 0.00220442817731 +0.0396542560031 0.002382905625455 +0.04058381968042 0.00258060910911 +0.04151338335774 0.002801076055112 +0.04244294703507 0.003048833920174 +0.04337251071239 0.003329830867287 +0.04430207438971 0.003652068762145 +0.04523163806703 0.004026553311673 +0.04616120174435 0.004468729586834 +0.04709076542167 0.00500057978854 +0.04802032909899 0.005653288628016 +0.04894989277631 0.006469034570278 +0.04987945645363 0.007496580179405 +0.05080902013095 0.008775001564026 +0.05173858380827 0.0103113182637 +0.05230037423261 0.01135486896435 +0.05286216465695 0.01246666543431 +0.05342395508129 0.01363045273295 +0.05398574550563 0.01483420947839 +0.05454753592997 0.01606878051354 +0.05510932635431 0.01733098820157 +0.05567111677865 0.01861786498926 +0.05623290720299 0.01993247391385 +0.05679469762733 0.02127911395877 +0.05735648805167 0.02265879542909 +0.05791827847601 0.02407300223579 +0.05848006890035 0.025521155023 +0.05904185932469 0.02700412765591 +0.05960364974903 0.02852591783653 +0.06016544017337 0.03009162902084 +0.06072723059771 0.03170742440113 +0.06128902102205 0.03337778629253 +0.06185081144639 0.0351086126746 +0.06241260187073 0.03690328357095 +0.06297439229507 0.03876567048514 +0.06353618271941 0.04070243055257 +0.06454723481133 0.04440240930207 +0.06555828690326 0.0484212906275 +0.06728375313888 0.05626425379653 +0.0690092193745 0.06566862901852 +0.07073468561011 0.07724235544924 +0.07246015184573 0.0919578102114 +0.07418561808135 0.1116363379301 +0.07591108431697 0.1388958637793 +0.07683935718699 0.1581690095384 +0.07776763005701 0.1822969471698 +0.07869590292703 0.213208261667 +0.07962417579705 0.2537728065827 +0.08055244866707 0.3088503648373 +0.08148072153709 0.38331516739 +0.08240899440711 0.4827332647882 +0.08333726727713 0.6059141043441 +0.08426554014715 0.736244523399 +0.08519381301717 0.8464002527559 +0.08612208588719 0.9217386938456 +0.08705035875721 0.9647747087801 +0.08797863162723 0.9869746482908 +0.08890690449725 0.9967258430417 +0.08983517736727 1.00017740343 +0.0907634502373 1.000807577833 +0.09169172310732 1.000696728076 +0.09261999597734 1.000422283157 +0.09354826884736 1.000206461309 +0.09447654171738 1.000078574526 +0.09495209683984 1.000042494422 +0.0954276519623 1.000019826972 +0.09590320708476 1.000006226864 +0.09637876220722 0.9999984500071 +0.09685431732968 0.9999943050045 +0.09732987245214 0.9999923892228 +0.0978054275746 0.9999918312281 +0.09828098269706 0.9999920914452 +0.09875653781952 0.9999928259089 +0.09923209294198 0.9999938037068 +0.09970764806444 0.9999948639113 +0.1001832031869 0.9999959003012 +0.1006587583094 0.9999968341225 +0.1011343134318 0.9999976316423 +0.1016098685543 0.9999982798488 +0.1020854236767 0.9999987865549 +0.1025609787992 0.9999991670886 +0.1030365339217 0.999999444382 +0.1035120890441 0.9999996390851 +0.1039876441666 0.9999997727002 +0.104463199289 0.9999998606877 +0.1049387544115 0.9999999180015 +0.105414309534 0.9999999534466 +0.1058898646564 0.9999999752051 +0.1063654197789 0.9999999874473 +0.1068409749013 0.9999999945683 +0.1073165300238 0.9999999979057 +0.1077920851463 0.99999999982 +0.1082676402687 1.000000000256 +0.1087431953912 1.000000000647 +0.1092187505136 1.000000000354 +0.1096943056361 1.000000000445 +0.1101698607586 1.000000000071 +0.110645415881 1.000000000179 +0.1111209710035 0.9999999998577 +0.1115965261259 1.000000000021 +0.1120720812484 0.9999999997503 +0.1125476363709 0.9999999999509 +0.1130231914933 0.9999999997076 +0.1134987466158 0.9999999999253 +0.1139743017382 0.9999999996943 +0.1144498568607 0.9999999999182 +0.1149254119832 0.999999999692 +0.1154009671056 0.9999999999173 +0.1158765222281 0.9999999996931 +0.1163520773505 0.999999999918 +0.116827632473 0.9999999996948 +0.1173031875955 0.9999999999189 +0.1177787427179 0.9999999996965 +0.1182542978404 0.9999999999198 +0.1187298529628 0.9999999996981 +0.1192054080853 0.9999999999206 +0.1196809632078 0.9999999996998 +0.1201565183302 0.9999999999216 +0.1206320734527 0.9999999997016 +0.1211076285751 0.9999999999227 +0.1215831836976 0.9999999997036 +0.1220587388201 0.999999999924 +0.1225342939425 0.9999999997058 +0.123009849065 0.9999999999255 +0.1234854041874 1.000000000244 +0.1242215668105 1.000000000549 +0.1249577294335 1.000000000599 +0.1261443440369 1.00000000036 +0.1273309586402 1.000000000047 +0.1285175732435 0.9999999998684 +0.1297041878468 0.9999999998328 +0.1315165553478 0.9999999998905 +0.1327105407792 0.9999999999205 +0.1339045262107 0.999999999938 +0.1350985116421 0.9999999999572 +0.1362924970736 0.9999999999786 +0.137486482505 0.9999999999932 +0.1386804679365 0.9999999999977 +0.1398744533679 0.9999999999969 +0.1410684387993 0.9999999999968 +0.1422624242308 0.9999999999986 +0.1434564096622 1 +0.1446503950937 1.000000000001 +0.1458443805251 1 +0.1470383659566 0.9999999999998 +0.148232351388 0.9999999999998 +0.1490414203399 0.9999999999999 +0.1498504892918 1 +0.1506595582438 1 +0.1514686271957 1 +0.1522776961476 1 +0.1530867650995 1 +0.1538958340514 1 +0.1547049030033 1 +0.1555139719552 1 +0.1563230409072 1 +0.1571321098591 1 +0.157941178811 1 +0.1587502477629 1 +0.1595593167148 1 +0.1603683856667 1 +0.1611774546186 1 +0.1619865235706 1 +0.1627955925225 1 +0.1636046614744 1 +0.1645011126287 1 +0.1653975637831 1 +0.1662940149375 1 +0.1671904660919 1 +0.1692848077754 1 +0.1713791494589 1 +0.1734734911424 1 +0.1755678328259 1 +0.1768036358592 1 +0.1780394388924 1 +0.1792752419257 1 +0.180511044959 1 +0.1817468479922 1 +0.1829826510255 1 +0.1842184540588 1 +0.1854542570921 1 +0.1866900601253 1 +0.1879258631586 1 +0.1891616661919 1 +0.1903974692251 1 +0.1916332722584 1 +0.1928690752917 1 +0.1941048783249 1 +0.1948894816987 1 +0.1956740850725 1 +0.1964586884463 1 +0.1972432918201 1 +0.1980278951939 1 +0.1988124985677 1 +0.1995971019415 1 +0.2003817053152 1 +0.201166308689 1 +0.2019509120628 1 +0.2027355154366 1 +0.2032288573113 1 +0.203722199186 1 +0.2042155410607 1 +0.2047088829354 1 +0.2052022248101 1 +0.2056955666848 1 +0.2065254686449 1 +0.2078106557389 1 +0.2090958428328 1 +0.2111869613418 1 +0.2132780798507 1 +0.2153691983596 1 +0.2174603168686 1 +0.2195514353775 1 +0.2216425538864 1 +0.2237336723954 1 +0.2258247909043 1 +0.2279159094132 1 +0.229185166125 1 +0.2304544228368 1 +0.2317236795486 1 +0.2329929362605 1 +0.2342621929723 1 +0.2355314496841 1 +0.2368007063959 1 +0.2380699631077 1 +0.2393392198195 1 +0.2406084765313 1 +0.2418777332431 1 +0.2431469899549 1 +0.2444162466667 1 +0.2452427497642 1 +0.2460692528617 1 +0.2468957559592 1 +0.2477222590566 1 +0.2485487621541 1 +0.2493752652516 1 +0.2502017683491 1 +0.2510282714466 1 +0.251854774544 1 +0.2526812776415 1 +0.253507780739 1 +0.2543342838365 1 +0.255160786934 1 +0.2559872900314 1 +0.2568137931289 1 +0.2576402962264 1 +0.2584667993239 1 +0.2592933024214 1 +0.2601198055189 1 +0.2609463086163 1 +0.2617728117138 1 +0.2625993148113 1 +0.2634258179088 1 +0.2642523210063 1 +0.2650788241037 1 +0.2659053272012 1 +0.2673839742517 1 +0.2688626213023 1 +0.2703412683528 1 +0.2718199154033 1 +0.2732985624538 1 +0.2747772095043 1 +0.2762558565548 1 +0.2777345036053 1 +0.2792131506559 1 +0.2802425968731 1 +0.2812720430903 1 +0.2823014893075 1 +0.2833309355247 1 +0.2843603817419 1 +0.2853898279591 1 +0.2864192741763 1 +0.2874487203935 1 +0.2884781666107 1 +0.2895076128279 1 +0.2905370590452 1 +0.2915665052624 1 +0.2925959514796 1 +0.2936253976968 1 +0.294654843914 1 +0.2953351272501 1 +0.2960154105861 1 +0.2966956939222 1 +0.2973759772583 1 +0.2980562605944 1 +0.2987365439304 1 +0.2994168272665 1 +0.3000971106026 1 +0.3007773939386 1 +0.3014576772747 1 +0.3021379606108 1 +0.3028182439469 1 +0.3034985272829 1 +0.304178810619 1 +0.3048590939551 1 +0.3055393772912 1 +0.3062196606272 1 +0.3072416434716 1 +0.308263626316 1 +0.3092856091604 1 +0.3111478365759 1 +0.3130100639914 1 +0.3148722914068 1 +0.3167345188223 1 +0.3185967462377 1 +0.3204589736532 1 +0.3223212010687 1 +0.3241834284841 1 +0.3254074569883 1 +0.3266314854924 1 +0.3278555139966 1 +0.3290795425007 1 +0.3303035710049 1 +0.331527599509 1 +0.3327516280132 1 +0.3339756565173 1 +0.3351996850215 1 +0.3364237135256 1 +0.3376477420298 1 +0.3388717705339 1 +0.3400957990381 1 +0.3413198275422 1 +0.3425438560464 1 +0.3437678845505 1 +0.3449919130547 1 +0.3458401892478 1 +0.3466884654409 1 +0.3475367416341 1 +0.3483850178272 1 +0.3492332940203 1 +0.3500815702134 1 +0.3509298464066 1 +0.3517781225997 1 +0.3526263987928 1 +0.3534746749859 1 +0.3543229511791 1 +0.3551712273722 1 +0.3560195035653 1 +0.3568677797584 1 +0.3577160559516 1 +0.3585643321447 1 +0.3594126083378 1 +0.3602608845309 1 +0.3611091607241 1 +0.3619574369172 1 +0.3628057131103 1 +0.3636539893034 1 +0.3645022654966 1 +0.3653505416897 1 +0.3661988178828 1 +0.367047094076 1 +0.3678953702691 1 +0.3687436464622 1 +0.3695919226553 1 +0.3704401988485 1 +0.3712884750416 1 +0.3721367512347 1 +0.3729850274278 1 +0.373833303621 1 +0.3746815798141 1 +0.3755298560072 1 +0.3763781322003 1 +0.3772264083935 1 +0.3780746845866 1 +0.3789229607797 1 +0.3797712369728 1 +0.380619513166 1 +0.3814677893591 1 +0.3823160655522 1 +0.3831643417453 1 +0.3840126179385 1 +0.3848608941316 1 +0.3857091703247 1 +0.3865574465178 1 +0.387405722711 1 +0.3882539989041 1 +0.3891022750972 1 +0.3899505512903 1 +0.3907988274835 1 +0.3916471036766 1 +0.3924953798697 1 +0.3933436560628 1 +0.394191932256 1 +0.3950402084491 1 +0.3958884846422 1 +0.3967367608353 1 +0.3975850370285 1 +0.3984333132216 1 +0.3992815894147 1 +0.4001298656079 1 +0.400978141801 1 +0.4023005238129 1 +0.4036229058248 1 +0.4049452878367 1 +0.4062676698486 1 +0.4075900518605 1 +0.4089124338724 1 +0.4102348158843 1 +0.4115571978963 1 +0.4128795799082 1 +0.4142019619201 1 +0.415524343932 1 +0.4168467259439 1 +0.4181691079558 1 +0.4194914899677 1 +0.4208138719796 1 +0.4217340362757 1 +0.4226542005717 1 +0.4235743648677 1 +0.4244945291637 1 +0.4254146934598 1 +0.4262586636356 1 +0.4271026338115 1 +0.4279466039873 1 +0.4287905741632 1 +0.429634544339 1 +0.4310506370576 1 +0.4324667297761 1 +0.4338828224947 1 +0.4352989152132 1 +0.4367150079318 1 +0.4375910568191 1 +0.4384671057063 1 +0.4393431545936 1 +0.4402192034809 1 +0.4410952523681 1 +0.4419713012554 1 +0.4433132230462 1 +0.4446551448371 1 +0.4459970666279 1 +0.4473389884187 1 +0.4486809102096 1 +0.4500228320004 1 +0.4513647537913 1 +0.4527066755821 1 +0.4540485973729 1 +0.4553905191638 1 +0.4567324409546 1 +0.4580743627455 1 +0.4594162845363 1 +0.4607582063271 1 +0.462100128118 1 +0.4634420499088 1 +0.4647839716997 1 +0.4661258934905 1 +0.4674678152813 1 +0.4688097370722 1 +0.470151658863 1 +0.4714935806538 1 +0.4728355024447 1 +0.4741774242355 1 +0.4755193460264 1 +0.4768612678172 1 +0.478203189608 1 +0.4795451113989 1 +0.4808870331897 1 +0.4822289549806 1 +0.4835708767714 1 +0.4849127985622 1 +0.4862547203531 1 +0.4910752690258 1 +0.4958958176986 1 +0.5007163663713 1 +0.515935996377 1 +0.5311556263828 1 +0.5463752563885 1 +0.5615948863942 1 + 0.5768145164 1 +0.5920341464057 1 +0.6072537764114 1 +0.6224734064172 1 +0.6376930364229 1 +0.6529126664286 1 +0.6799339088263 1 +0.706955151224 1 +0.7562275742994 1 +0.9182140827629 1 +1.198335786366 1 +1.746148758421 1 +2.667942051456 1 +4.238150003005 1 +6.777405784274 1 +10.85000552647 1 diff --git a/src/engine/tests/system/gt_data/advection_x/advection_x.mo b/src/engine/tests/system/gt_data/advection_x/advection_x.mo new file mode 100644 index 00000000..756cb8bc --- /dev/null +++ b/src/engine/tests/system/gt_data/advection_x/advection_x.mo @@ -0,0 +1,34 @@ +model advection_x + parameter Real alpha=0.5,mu=1000; + constant Integer N = 20000; + Real u[N]; + initial algorithm + for i in 1:N/3 loop + u[i]:=1; + end for; + + equation + der(u[1])=(-u[1]+1)*N-mu*u[1]*(u[1]-alpha)*(u[1]-1); + for j in 2:N loop + der(u[j])=(-u[j]+u[j-1])*N-mu*u[j]*(u[j]-alpha)*(u[j]-1); + end for; + annotation( + + experiment( + MMO_Description="Advection", + MMO_Solver=LIQSS2, + MMO_SymDiff=false, + MMO_PartitionMethod=Scotch, + MMO_LPS=2, + MMO_DT_Min=2, + MMO_Output={u[N]}, + Jacobian=Dense, + MMO_BDF_PDepth=1, + MMO_BDF_Max_Step=0, + MMO_XOutput=1, + StartTime=0.0, + StopTime=1.0, + Tolerance={1e-3}, + AbsTolerance={1e-3} + )); +end advection_x; diff --git a/src/engine/tests/system/gt_data/advection_x/u[20000].dat b/src/engine/tests/system/gt_data/advection_x/u[20000].dat new file mode 100644 index 00000000..e2fa896d --- /dev/null +++ b/src/engine/tests/system/gt_data/advection_x/u[20000].dat @@ -0,0 +1,66 @@ +0.0000000000000000 0.0000000000000000 +0.6655315646292351 0.0010000000000001 +0.6655759867714215 0.0015458032375786 +0.6656899316263852 0.0048119882836072 +0.6657557124856130 0.0077161415225117 +0.6659006063971377 0.0187050302319935 +0.6659646126696505 0.0226887477157473 +0.6660444850007129 0.0309446623633333 +0.6660600909696984 0.0333153223503534 +0.6660628808097638 0.0337384652903384 +0.6661427113700010 0.0474917463580142 +0.6661909811496619 0.0568734619456735 +0.6662193385446916 0.0641579497709258 +0.6662405993789329 0.0699306271822678 +0.6662529934170682 0.0748456903815172 +0.6663261992380591 0.0989133242817953 +0.6663810920059906 0.1218856105450624 +0.6664312994265371 0.1471129436227142 +0.6664804062723049 0.1759865570717606 +0.6665314906269263 0.2106589039400357 +0.6665864952777911 0.2534578722023649 +0.6666482498634582 0.3081126458961052 +0.6667181068651489 0.3777225345438095 +0.6667697596199709 0.4322528518289370 +0.6668259703984848 0.4965445602018396 +0.6668906468991360 0.5691737445769340 +0.6669876996091704 0.6713109727890449 +0.6670332091096602 0.7145132921893066 +0.6671008517755099 0.7738722990298974 +0.6671392303293573 0.8037615280631280 +0.6671996264132175 0.8433675340815868 +0.6672606314480255 0.8767940851795921 +0.6673261656480407 0.9063047232437756 +0.6673788702343422 0.9268635616105109 +0.6674022871765239 0.9329491599442750 +0.6674939818519489 0.9558773168515428 +0.6675435793048926 0.9658744112792051 +0.6675532511013186 0.9671116609760319 +0.6676111930846697 0.9731210168598284 +0.6676932863479942 0.9812820367924957 +0.6678108066841595 0.9889118933698714 +0.6678677159594776 0.9916132596414297 +0.6678868391107240 0.9918158292082323 +0.6679448843049861 0.9931568866421694 +0.6680126269975997 0.9946540821764658 +0.6680136628159942 0.9946561283519649 +0.6680954666725181 0.9967478426964196 +0.6682399418733164 0.9981447536266329 +0.6682768252697698 0.9985013024761600 +0.6684258434728404 0.9988968387281413 +0.6684939298179723 0.9993847429158612 +0.6686789251088845 0.9988473971816499 +0.6689973409742608 0.9995987645888914 +0.6700847634518875 0.9995299133463826 +0.6704673564808212 1.0003875396711019 +0.6724397985840010 0.9996653029052899 +0.6750769666261182 1.0003696048196813 +0.6784743442800065 0.9998487050104925 +0.6885438432186701 1.0001882838300660 +0.6985765888828802 0.9998936563231599 +0.7147015340636446 1.0001152962863638 +0.7415402326398698 0.9999840340948313 +0.8119653408699237 0.9999697532497175 +0.9078707939900165 1.0000583839013244 +0.9309873794521004 0.9999519292403013 +0.9992491924119283 1.0008667476066122 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[10].dat b/src/engine/tests/system/gt_data/virus_replication/X[10].dat new file mode 100644 index 00000000..563442e1 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[10].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0000000000000000 +1.2000000000000002 0.0000000000000000 +1.3000000000000000 0.0000000000000000 +1.4000000000000001 0.0000000000000000 +1.5000000000000000 0.0000000000000000 +1.6000000000000001 0.0000000000000000 +1.7000000000000002 0.0000000000000000 +1.8000000000000000 0.0000000000000000 +1.9000000000000001 0.0000000000000000 +2.0000000000000000 0.0000000000000000 +2.1000000000000001 0.0000000000000000 +2.2000000000000002 0.0000000000000000 +2.3000000000000003 0.0000000000000000 +2.4000000000000004 0.0000000000000000 +2.5000000000000000 0.0000000000000000 +2.6000000000000001 0.0000000000000000 +2.7000000000000002 0.0000000000000000 +2.8000000000000003 0.0000000000000000 +2.9000000000000004 0.0000000000000000 +3.0000000000000000 0.0000000000000000 +3.1000000000000001 0.0000000000000000 +3.2000000000000002 0.0000000000000000 +3.3000000000000003 0.0000000000000000 +3.4000000000000004 0.0000000000000000 +3.5000000000000000 0.0000000000000000 +3.6000000000000001 0.0000000000000000 +3.7000000000000002 0.0000000000000000 +3.8000000000000003 0.0000000000000000 +3.9000000000000004 0.0000000000000000 +4.0000000000000000 0.0000000000000000 +4.1000000000000005 0.0000000000000000 +4.2000000000000002 0.0000000000000000 +4.2999999999999998 0.0000000000000000 +4.4000000000000004 0.0000000000000000 +4.5000000000000000 0.0000000000000000 +4.6000000000000005 0.0000000000000000 +4.7000000000000002 0.0000000000000000 +4.8000000000000007 0.0000000000000000 +4.9000000000000004 0.0000000000000000 +5.0000000000000000 0.0000000000000000 +5.1000000000000005 0.0000000000000000 +5.2000000000000002 0.0000000000000000 +5.3000000000000007 0.0000000000000000 +5.4000000000000004 0.0100000000000000 +5.5000000000000000 0.0100000000000000 +5.6000000000000005 0.0100000000000000 +5.7000000000000002 0.0100000000000000 +5.8000000000000007 0.0100000000000000 +5.9000000000000004 0.0200000000000000 +6.0000000000000000 0.0200000000000000 +6.1000000000000005 0.0200000000000000 +6.2000000000000002 0.0300000000000000 +6.3000000000000007 0.0300000000000000 +6.4000000000000004 0.0400000000000000 +6.5000000000000000 0.0400000000000000 +6.6000000000000005 0.0500000000000000 +6.7000000000000002 0.0500000000000000 +6.8000000000000007 0.0600000000000000 +6.9000000000000004 0.0600000000000000 +7.0000000000000000 0.0700000000000000 +7.1000000000000005 0.0800000000000000 +7.2000000000000002 0.0800000000000000 +7.3000000000000007 0.0900000000000000 +7.4000000000000004 0.1000000000000000 +7.5000000000000000 0.1000000000000000 +7.6000000000000005 0.1100000000000000 +7.7000000000000002 0.1200000000000000 +7.8000000000000007 0.1300000000000001 +7.9000000000000004 0.1400000000000001 +8.0000000000000000 0.1500000000000001 +8.0999999999999996 0.1600000000000001 +8.2000000000000011 0.1700000000000002 +8.3000000000000007 0.1800000000000001 +8.4000000000000004 0.1900000000000001 +8.5000000000000000 0.2000000000000000 +8.5999999999999996 0.2100000000000000 +8.7000000000000011 0.2200000000000000 +8.8000000000000007 0.2300000000000000 +8.9000000000000004 0.2400000000000000 +9.0000000000000000 0.2600000000000001 +9.0999999999999996 0.2700000000000001 +9.2000000000000011 0.2800000000000001 +9.3000000000000007 0.2900000000000001 +9.4000000000000004 0.3000000000000002 +9.5000000000000000 0.3200000000000001 +9.6000000000000014 0.3300000000000002 +9.7000000000000011 0.3400000000000001 +9.8000000000000007 0.3600000000000001 +9.9000000000000004 0.3700000000000001 +10.0000000000000000 0.3800000000000001 +10.1000000000000014 0.4000000000000001 +10.2000000000000011 0.4100000000000002 +10.3000000000000007 0.4200000000000002 +10.4000000000000004 0.4400000000000002 +10.5000000000000000 0.4500000000000001 +10.6000000000000014 0.4600000000000001 +10.7000000000000011 0.4800000000000003 +10.8000000000000007 0.4900000000000004 +10.9000000000000004 0.5100000000000005 +11.0000000000000000 0.5200000000000004 +11.1000000000000014 0.5300000000000004 +11.2000000000000011 0.5500000000000005 +11.3000000000000007 0.5600000000000006 +11.4000000000000004 0.5700000000000007 +11.5000000000000000 0.5900000000000009 +11.6000000000000014 0.6000000000000009 +11.7000000000000011 0.6100000000000010 +11.8000000000000007 0.6300000000000010 +11.9000000000000004 0.6400000000000011 +12.0000000000000000 0.6500000000000010 +12.1000000000000014 0.6700000000000009 +12.2000000000000011 0.6800000000000008 +12.3000000000000007 0.6900000000000007 +12.4000000000000004 0.7100000000000009 +12.5000000000000000 0.7200000000000009 +12.6000000000000014 0.7300000000000009 +12.7000000000000011 0.7400000000000010 +12.8000000000000007 0.7600000000000012 +12.9000000000000004 0.7700000000000012 +13.0000000000000000 0.7800000000000014 +13.1000000000000014 0.7900000000000014 +13.2000000000000011 0.8000000000000014 +13.3000000000000007 0.8200000000000014 +13.4000000000000004 0.8300000000000015 +13.5000000000000000 0.8400000000000015 +13.6000000000000014 0.8500000000000016 +13.7000000000000011 0.8600000000000017 +13.8000000000000007 0.8700000000000017 +13.9000000000000004 0.8800000000000017 +14.0000000000000000 0.8900000000000016 +14.1000000000000014 0.9000000000000016 +14.2000000000000011 0.9100000000000016 +14.3000000000000007 0.9200000000000015 +14.4000000000000004 0.9300000000000014 +14.5000000000000000 0.9400000000000014 +14.6000000000000014 0.9500000000000015 +14.7000000000000011 0.9600000000000015 +14.8000000000000007 0.9700000000000015 +14.9000000000000004 0.9700000000000015 +15.0000000000000000 0.9800000000000015 +15.1000000000000014 0.9900000000000015 +15.2000000000000011 1.0000000000000016 +15.3000000000000007 1.0100000000000016 +15.4000000000000004 1.0100000000000016 +15.5000000000000000 1.0200000000000016 +15.6000000000000014 1.0300000000000016 +15.7000000000000011 1.0300000000000016 +15.8000000000000007 1.0400000000000016 +15.9000000000000004 1.0500000000000016 +16.0000000000000000 1.0500000000000016 +16.1000000000000014 1.0600000000000016 +16.1999999999999993 1.0600000000000016 +16.3000000000000007 1.0700000000000016 +16.4000000000000021 1.0700000000000016 +16.5000000000000000 1.0800000000000016 +16.6000000000000014 1.0800000000000016 +16.6999999999999993 1.0900000000000016 +16.8000000000000007 1.0900000000000016 +16.9000000000000021 1.0900000000000016 +17.0000000000000000 1.1000000000000016 +17.1000000000000014 1.1000000000000016 +17.1999999999999993 1.1000000000000016 +17.3000000000000007 1.1100000000000017 +17.4000000000000021 1.1100000000000017 +17.5000000000000000 1.1100000000000017 +17.6000000000000014 1.1200000000000017 +17.6999999999999993 1.1200000000000017 +17.8000000000000007 1.1200000000000017 +17.9000000000000021 1.1300000000000017 +18.0000000000000000 1.1300000000000017 +18.1000000000000014 1.1300000000000017 +18.1999999999999993 1.1300000000000017 +18.3000000000000007 1.1300000000000017 +18.4000000000000021 1.1400000000000017 +18.5000000000000000 1.1400000000000017 +18.6000000000000014 1.1400000000000017 +18.6999999999999993 1.1400000000000017 +18.8000000000000007 1.1400000000000017 +18.9000000000000021 1.1400000000000017 +19.0000000000000000 1.1400000000000017 +19.1000000000000014 1.1400000000000017 +19.2000000000000028 1.1400000000000017 +19.3000000000000007 1.1400000000000017 +19.4000000000000021 1.1400000000000017 +19.5000000000000000 1.1400000000000017 +19.6000000000000014 1.1400000000000017 +19.7000000000000028 1.1300000000000017 +19.8000000000000007 1.1300000000000017 +19.9000000000000021 1.1300000000000017 +20.0000000000000000 1.1200000000000017 +20.1000000000000014 1.1200000000000017 +20.2000000000000028 1.1100000000000017 +20.3000000000000007 1.1100000000000017 +20.4000000000000021 1.1000000000000016 +20.5000000000000000 1.1000000000000016 +20.6000000000000014 1.0900000000000016 +20.7000000000000028 1.0900000000000016 +20.8000000000000007 1.0800000000000016 +20.9000000000000021 1.0800000000000016 +21.0000000000000000 1.0700000000000016 +21.1000000000000014 1.0700000000000016 +21.2000000000000028 1.0600000000000016 +21.3000000000000007 1.0600000000000016 +21.4000000000000021 1.0500000000000016 +21.5000000000000000 1.0400000000000016 +21.6000000000000014 1.0400000000000016 +21.7000000000000028 1.0300000000000016 +21.8000000000000007 1.0300000000000016 +21.9000000000000021 1.0200000000000018 +22.0000000000000000 1.0100000000000020 +22.1000000000000014 1.0100000000000020 +22.2000000000000028 1.0000000000000020 +22.3000000000000007 1.0000000000000020 +22.4000000000000021 0.9900000000000020 +22.5000000000000000 0.9800000000000021 +22.6000000000000014 0.9800000000000021 +22.7000000000000028 0.9700000000000021 +22.8000000000000007 0.9700000000000021 +22.9000000000000021 0.9600000000000020 +23.0000000000000000 0.9600000000000020 +23.1000000000000014 0.9500000000000021 +23.2000000000000028 0.9500000000000021 +23.3000000000000007 0.9400000000000021 +23.4000000000000021 0.9400000000000021 +23.5000000000000000 0.9400000000000021 +23.6000000000000014 0.9300000000000020 +23.7000000000000028 0.9300000000000020 +23.8000000000000007 0.9200000000000020 +23.9000000000000021 0.9200000000000020 +24.0000000000000000 0.9200000000000020 +24.1000000000000014 0.9200000000000020 +24.2000000000000028 0.9100000000000020 +24.3000000000000007 0.9100000000000020 +24.4000000000000021 0.9100000000000020 +24.5000000000000000 0.9100000000000020 +24.6000000000000014 0.9100000000000020 +24.7000000000000028 0.9000000000000020 +24.8000000000000007 0.9000000000000020 +24.9000000000000021 0.9000000000000020 +25.0000000000000000 0.9000000000000020 +25.1000000000000014 0.9000000000000020 +25.2000000000000028 0.9000000000000020 +25.3000000000000007 0.9000000000000020 +25.4000000000000021 0.9000000000000020 +25.5000000000000000 0.9000000000000020 +25.6000000000000014 0.9000000000000020 +25.7000000000000028 0.9000000000000020 +25.8000000000000007 0.9000000000000020 +25.9000000000000021 0.9000000000000020 +26.0000000000000000 0.9100000000000020 +26.1000000000000014 0.9100000000000020 +26.2000000000000028 0.9100000000000020 +26.3000000000000007 0.9100000000000020 +26.4000000000000021 0.9200000000000020 +26.5000000000000000 0.9200000000000020 +26.6000000000000014 0.9200000000000020 +26.7000000000000028 0.9300000000000019 +26.8000000000000007 0.9300000000000019 +26.9000000000000021 0.9300000000000019 +27.0000000000000000 0.9400000000000019 +27.1000000000000014 0.9400000000000019 +27.2000000000000028 0.9400000000000019 +27.3000000000000007 0.9500000000000018 +27.4000000000000021 0.9500000000000018 +27.5000000000000000 0.9500000000000018 +27.6000000000000014 0.9600000000000020 +27.7000000000000028 0.9600000000000020 +27.8000000000000007 0.9600000000000020 +27.9000000000000021 0.9700000000000019 +28.0000000000000000 0.9700000000000019 +28.1000000000000014 0.9700000000000019 +28.2000000000000028 0.9700000000000019 +28.3000000000000007 0.9800000000000019 +28.4000000000000021 0.9800000000000019 +28.5000000000000000 0.9800000000000019 +28.6000000000000014 0.9900000000000019 +28.7000000000000028 0.9900000000000019 +28.8000000000000007 0.9900000000000019 +28.9000000000000021 0.9900000000000019 +29.0000000000000000 1.0000000000000020 +29.1000000000000014 1.0000000000000020 +29.2000000000000028 1.0000000000000020 +29.3000000000000007 1.0000000000000020 +29.4000000000000021 1.0000000000000020 +29.5000000000000000 1.0100000000000020 +29.6000000000000014 1.0100000000000020 +29.7000000000000028 1.0100000000000020 +29.8000000000000007 1.0100000000000020 +29.9000000000000021 1.0100000000000020 +30.0000000000000000 1.0100000000000020 +30.1000000000000014 1.0100000000000020 +30.2000000000000028 1.0100000000000020 +30.3000000000000007 1.0100000000000020 +30.4000000000000021 1.0100000000000020 +30.5000000000000000 1.0100000000000020 +30.6000000000000014 1.0100000000000020 +30.7000000000000028 1.0100000000000020 +30.8000000000000007 1.0100000000000020 +30.9000000000000021 1.0100000000000020 +31.0000000000000000 1.0100000000000020 +31.1000000000000014 1.0100000000000020 +31.2000000000000028 1.0000000000000020 +31.3000000000000007 1.0000000000000020 +31.4000000000000021 1.0000000000000020 +31.5000000000000000 1.0000000000000020 +31.6000000000000014 0.9900000000000020 +31.7000000000000028 0.9900000000000020 +31.8000000000000007 0.9900000000000020 +31.9000000000000021 0.9900000000000020 +32.0000000000000000 0.9800000000000020 +32.1000000000000014 0.9800000000000020 +32.2000000000000028 0.9800000000000020 +32.3000000000000043 0.9800000000000020 +32.3999999999999986 0.9700000000000020 +32.5000000000000000 0.9700000000000020 +32.6000000000000014 0.9700000000000020 +32.7000000000000028 0.9700000000000020 +32.8000000000000043 0.9600000000000019 +32.8999999999999986 0.9600000000000019 +33.0000000000000000 0.9600000000000019 +33.1000000000000014 0.9600000000000019 +33.2000000000000028 0.9600000000000019 +33.3000000000000043 0.9500000000000018 +33.3999999999999986 0.9500000000000018 +33.5000000000000000 0.9500000000000018 +33.6000000000000014 0.9500000000000018 +33.7000000000000028 0.9400000000000018 +33.8000000000000043 0.9400000000000018 +33.8999999999999986 0.9400000000000018 +34.0000000000000000 0.9400000000000018 +34.1000000000000014 0.9400000000000018 +34.2000000000000028 0.9300000000000019 +34.3000000000000043 0.9300000000000019 +34.3999999999999986 0.9300000000000019 +34.5000000000000000 0.9300000000000019 +34.6000000000000014 0.9200000000000020 +34.7000000000000028 0.9200000000000020 +34.8000000000000043 0.9200000000000020 +34.8999999999999986 0.9100000000000021 +35.0000000000000000 0.9100000000000021 +35.1000000000000014 0.9100000000000021 +35.2000000000000028 0.9100000000000021 +35.3000000000000043 0.9000000000000020 +35.3999999999999986 0.9000000000000020 +35.5000000000000000 0.9000000000000020 +35.6000000000000014 0.8900000000000021 +35.7000000000000028 0.8900000000000021 +35.8000000000000043 0.8900000000000021 +35.8999999999999986 0.8800000000000021 +36.0000000000000000 0.8800000000000021 +36.1000000000000014 0.8700000000000021 +36.2000000000000028 0.8700000000000021 +36.3000000000000043 0.8700000000000021 +36.3999999999999986 0.8600000000000020 +36.5000000000000000 0.8600000000000020 +36.6000000000000014 0.8500000000000019 +36.7000000000000028 0.8500000000000019 +36.8000000000000043 0.8400000000000019 +36.8999999999999986 0.8400000000000019 +37.0000000000000000 0.8300000000000021 +37.1000000000000014 0.8300000000000021 +37.2000000000000028 0.8200000000000022 +37.3000000000000043 0.8200000000000022 +37.3999999999999986 0.8100000000000021 +37.5000000000000000 0.8100000000000021 +37.6000000000000014 0.8000000000000019 +37.7000000000000028 0.8000000000000019 +37.8000000000000043 0.7900000000000020 +37.8999999999999986 0.7900000000000020 +38.0000000000000000 0.7800000000000022 +38.1000000000000014 0.7800000000000022 +38.2000000000000028 0.7700000000000021 +38.3000000000000043 0.7700000000000021 +38.4000000000000057 0.7600000000000023 +38.5000000000000000 0.7600000000000023 +38.6000000000000014 0.7500000000000023 +38.7000000000000028 0.7500000000000023 +38.8000000000000043 0.7400000000000022 +38.9000000000000057 0.7400000000000022 +39.0000000000000000 0.7300000000000021 +39.1000000000000014 0.7300000000000021 +39.2000000000000028 0.7300000000000021 +39.3000000000000043 0.7200000000000021 +39.4000000000000057 0.7200000000000021 +39.5000000000000000 0.7200000000000021 +39.6000000000000014 0.7100000000000020 +39.7000000000000028 0.7100000000000020 +39.8000000000000043 0.7100000000000020 +39.9000000000000057 0.7100000000000020 +40.0000000000000000 0.7100000000000020 +40.1000000000000014 0.7000000000000020 +40.2000000000000028 0.7000000000000020 +40.3000000000000043 0.7000000000000020 +40.4000000000000057 0.7000000000000020 +40.5000000000000000 0.7000000000000020 +40.6000000000000014 0.7000000000000020 +40.7000000000000028 0.7000000000000020 +40.8000000000000043 0.7000000000000020 +40.9000000000000057 0.7000000000000020 +41.0000000000000000 0.7000000000000020 +41.1000000000000014 0.7100000000000019 +41.2000000000000028 0.7100000000000019 +41.3000000000000043 0.7100000000000019 +41.4000000000000057 0.7100000000000019 +41.5000000000000000 0.7200000000000019 +41.6000000000000014 0.7200000000000019 +41.7000000000000028 0.7300000000000018 +41.8000000000000043 0.7300000000000018 +41.9000000000000057 0.7300000000000018 +42.0000000000000000 0.7400000000000019 +42.1000000000000014 0.7400000000000019 +42.2000000000000028 0.7500000000000020 +42.3000000000000043 0.7500000000000020 +42.4000000000000057 0.7600000000000021 +42.5000000000000000 0.7600000000000021 +42.6000000000000014 0.7700000000000021 +42.7000000000000028 0.7700000000000021 +42.8000000000000043 0.7700000000000021 +42.9000000000000057 0.7800000000000020 +43.0000000000000000 0.7800000000000020 +43.1000000000000014 0.7900000000000019 +43.2000000000000028 0.7900000000000019 +43.3000000000000043 0.8000000000000020 +43.4000000000000057 0.8000000000000020 +43.5000000000000000 0.8100000000000019 +43.6000000000000014 0.8100000000000019 +43.7000000000000028 0.8200000000000018 +43.8000000000000043 0.8200000000000018 +43.9000000000000057 0.8300000000000020 +44.0000000000000000 0.8300000000000020 +44.1000000000000014 0.8400000000000020 +44.2000000000000028 0.8400000000000020 +44.3000000000000043 0.8500000000000019 +44.4000000000000057 0.8500000000000019 +44.5000000000000000 0.8600000000000020 +44.6000000000000014 0.8600000000000020 +44.7000000000000028 0.8700000000000019 +44.8000000000000043 0.8700000000000019 +44.9000000000000057 0.8800000000000019 +45.0000000000000000 0.8800000000000019 +45.1000000000000014 0.8900000000000020 +45.2000000000000028 0.8900000000000020 +45.3000000000000043 0.9000000000000019 +45.4000000000000057 0.9000000000000019 +45.5000000000000000 0.9100000000000019 +45.6000000000000014 0.9100000000000019 +45.7000000000000028 0.9200000000000019 +45.8000000000000043 0.9200000000000019 +45.9000000000000057 0.9200000000000019 +46.0000000000000000 0.9300000000000018 +46.1000000000000014 0.9300000000000018 +46.2000000000000028 0.9400000000000018 +46.3000000000000043 0.9400000000000018 +46.4000000000000057 0.9500000000000018 +46.5000000000000000 0.9500000000000018 +46.6000000000000014 0.9600000000000019 +46.7000000000000028 0.9600000000000019 +46.8000000000000043 0.9600000000000019 +46.9000000000000057 0.9700000000000019 +47.0000000000000000 0.9700000000000019 +47.1000000000000014 0.9800000000000019 +47.2000000000000028 0.9800000000000019 +47.3000000000000043 0.9800000000000019 +47.4000000000000057 0.9900000000000019 +47.5000000000000000 0.9900000000000019 +47.6000000000000014 1.0000000000000020 +47.7000000000000028 1.0000000000000020 +47.8000000000000043 1.0000000000000020 +47.9000000000000057 1.0000000000000020 +48.0000000000000000 1.0100000000000020 +48.1000000000000014 1.0100000000000020 +48.2000000000000028 1.0100000000000020 +48.3000000000000043 1.0200000000000020 +48.4000000000000057 1.0200000000000020 +48.5000000000000000 1.0200000000000020 +48.6000000000000014 1.0200000000000020 +48.7000000000000028 1.0300000000000020 +48.8000000000000043 1.0300000000000020 +48.9000000000000057 1.0300000000000020 +49.0000000000000000 1.0300000000000020 +49.1000000000000014 1.0300000000000020 +49.2000000000000028 1.0400000000000020 +49.3000000000000043 1.0400000000000020 +49.4000000000000057 1.0400000000000020 +49.5000000000000000 1.0400000000000020 +49.6000000000000014 1.0400000000000020 +49.7000000000000028 1.0400000000000020 +49.8000000000000043 1.0400000000000020 +49.9000000000000057 1.0500000000000020 +50.0000000000000000 1.0500000000000020 +50.1000000000000014 1.0500000000000020 +50.2000000000000028 1.0500000000000020 +50.3000000000000043 1.0500000000000020 +50.4000000000000057 1.0500000000000020 +50.5000000000000000 1.0500000000000020 +50.6000000000000014 1.0500000000000020 +50.7000000000000028 1.0600000000000021 +50.8000000000000043 1.0600000000000021 +50.9000000000000057 1.0600000000000021 +51.0000000000000000 1.0600000000000021 +51.1000000000000014 1.0600000000000021 +51.2000000000000028 1.0600000000000021 +51.3000000000000043 1.0700000000000021 +51.4000000000000057 1.0700000000000021 +51.5000000000000000 1.0700000000000021 +51.6000000000000014 1.0700000000000021 +51.7000000000000028 1.0800000000000021 +51.8000000000000043 1.0800000000000021 +51.9000000000000057 1.0800000000000021 +52.0000000000000000 1.0800000000000021 +52.1000000000000014 1.0900000000000021 +52.2000000000000028 1.0900000000000021 +52.3000000000000043 1.0900000000000021 +52.4000000000000057 1.0900000000000021 +52.5000000000000000 1.1000000000000021 +52.6000000000000014 1.1000000000000021 +52.7000000000000028 1.1000000000000021 +52.8000000000000043 1.1100000000000019 +52.9000000000000057 1.1100000000000019 +53.0000000000000000 1.1100000000000019 +53.1000000000000014 1.1200000000000017 +53.2000000000000028 1.1200000000000017 +53.3000000000000043 1.1200000000000017 +53.4000000000000057 1.1300000000000017 +53.5000000000000000 1.1300000000000017 +53.6000000000000014 1.1300000000000017 +53.7000000000000028 1.1400000000000017 +53.8000000000000043 1.1400000000000017 +53.9000000000000057 1.1500000000000017 +54.0000000000000000 1.1500000000000017 +54.1000000000000014 1.1500000000000017 +54.2000000000000028 1.1600000000000017 +54.3000000000000043 1.1600000000000017 +54.4000000000000057 1.1600000000000017 +54.5000000000000000 1.1700000000000017 +54.6000000000000014 1.1700000000000017 +54.7000000000000028 1.1700000000000017 +54.8000000000000043 1.1800000000000017 +54.9000000000000057 1.1800000000000017 +55.0000000000000000 1.1800000000000017 +55.1000000000000014 1.1800000000000017 +55.2000000000000028 1.1900000000000019 +55.3000000000000043 1.1900000000000019 +55.4000000000000057 1.1900000000000019 +55.5000000000000000 1.2000000000000020 +55.6000000000000014 1.2000000000000020 +55.7000000000000028 1.2000000000000020 +55.8000000000000043 1.2000000000000020 +55.9000000000000057 1.2100000000000020 +56.0000000000000000 1.2100000000000020 +56.1000000000000014 1.2100000000000020 +56.2000000000000028 1.2100000000000020 +56.3000000000000043 1.2100000000000020 +56.4000000000000057 1.2200000000000020 +56.5000000000000000 1.2200000000000020 +56.6000000000000014 1.2200000000000020 +56.7000000000000028 1.2200000000000020 +56.8000000000000043 1.2200000000000020 +56.9000000000000057 1.2200000000000020 +57.0000000000000000 1.2300000000000020 +57.1000000000000014 1.2300000000000020 +57.2000000000000028 1.2300000000000020 +57.3000000000000043 1.2300000000000020 +57.4000000000000057 1.2300000000000020 +57.5000000000000000 1.2300000000000020 +57.6000000000000014 1.2300000000000020 +57.7000000000000028 1.2300000000000020 +57.8000000000000043 1.2300000000000020 +57.9000000000000057 1.2300000000000020 +58.0000000000000000 1.2300000000000020 +58.1000000000000014 1.2300000000000020 +58.2000000000000028 1.2200000000000020 +58.3000000000000043 1.2200000000000020 +58.4000000000000057 1.2200000000000020 +58.5000000000000000 1.2100000000000020 +58.6000000000000014 1.2100000000000020 +58.7000000000000028 1.2000000000000020 +58.8000000000000043 1.2000000000000020 +58.9000000000000057 1.1900000000000019 +59.0000000000000000 1.1900000000000019 +59.1000000000000014 1.1800000000000017 +59.2000000000000028 1.1700000000000019 +59.3000000000000043 1.1700000000000019 +59.4000000000000057 1.1600000000000019 +59.5000000000000000 1.1500000000000021 +59.6000000000000014 1.1400000000000021 +59.7000000000000028 1.1400000000000021 +59.8000000000000043 1.1300000000000021 +59.9000000000000057 1.1200000000000019 +60.0000000000000000 1.1100000000000019 +60.1000000000000014 1.1100000000000019 +60.2000000000000028 1.1000000000000021 +60.3000000000000043 1.0900000000000021 +60.4000000000000057 1.0800000000000021 +60.5000000000000000 1.0700000000000018 +60.6000000000000014 1.0600000000000016 +60.7000000000000028 1.0500000000000014 +60.8000000000000043 1.0400000000000014 +60.9000000000000057 1.0300000000000011 +61.0000000000000000 1.0200000000000009 +61.1000000000000014 1.0200000000000009 +61.2000000000000028 1.0100000000000011 +61.3000000000000043 1.0000000000000011 +61.4000000000000057 0.9900000000000010 +61.5000000000000000 0.9800000000000010 +61.6000000000000014 0.9700000000000006 +61.7000000000000028 0.9600000000000009 +61.8000000000000043 0.9500000000000008 +61.9000000000000057 0.9400000000000008 +62.0000000000000000 0.9300000000000010 +62.1000000000000014 0.9300000000000010 +62.2000000000000028 0.9200000000000010 +62.3000000000000043 0.9100000000000008 +62.4000000000000057 0.9000000000000006 +62.5000000000000000 0.8900000000000003 +62.6000000000000014 0.8900000000000003 +62.7000000000000028 0.8800000000000003 +62.8000000000000043 0.8700000000000006 +62.9000000000000057 0.8600000000000008 +63.0000000000000000 0.8600000000000008 +63.1000000000000014 0.8500000000000006 +63.2000000000000028 0.8400000000000005 +63.3000000000000043 0.8400000000000005 +63.4000000000000057 0.8300000000000007 +63.5000000000000000 0.8300000000000007 +63.6000000000000014 0.8200000000000006 +63.7000000000000028 0.8200000000000006 +63.8000000000000043 0.8100000000000007 +63.9000000000000057 0.8100000000000007 +64.0000000000000000 0.8100000000000007 +64.1000000000000085 0.8000000000000008 +64.2000000000000028 0.8000000000000008 +64.2999999999999972 0.8000000000000008 +64.4000000000000057 0.7900000000000010 +64.5000000000000000 0.7900000000000010 +64.6000000000000085 0.7900000000000010 +64.7000000000000028 0.7900000000000010 +64.7999999999999972 0.7900000000000010 +64.9000000000000057 0.7900000000000010 +65.0000000000000000 0.7900000000000010 +65.1000000000000085 0.7900000000000010 +65.2000000000000028 0.7900000000000010 +65.2999999999999972 0.7900000000000010 +65.4000000000000057 0.7900000000000010 +65.5000000000000000 0.7900000000000010 +65.6000000000000085 0.7900000000000010 +65.7000000000000028 0.7900000000000010 +65.7999999999999972 0.7900000000000010 +65.9000000000000057 0.7900000000000010 +66.0000000000000000 0.8000000000000008 +66.1000000000000085 0.8000000000000008 +66.2000000000000028 0.8000000000000008 +66.2999999999999972 0.8100000000000006 +66.4000000000000057 0.8100000000000006 +66.5000000000000000 0.8100000000000006 +66.6000000000000085 0.8200000000000007 +66.7000000000000028 0.8200000000000007 +66.7999999999999972 0.8200000000000007 +66.9000000000000057 0.8300000000000008 +67.0000000000000000 0.8300000000000008 +67.1000000000000085 0.8400000000000005 +67.2000000000000028 0.8400000000000005 +67.2999999999999972 0.8400000000000005 +67.4000000000000057 0.8500000000000006 +67.5000000000000000 0.8500000000000006 +67.6000000000000085 0.8500000000000006 +67.7000000000000028 0.8600000000000009 +67.7999999999999972 0.8600000000000009 +67.9000000000000057 0.8600000000000009 +68.0000000000000000 0.8700000000000006 +68.1000000000000085 0.8700000000000006 +68.2000000000000028 0.8700000000000006 +68.2999999999999972 0.8800000000000007 +68.4000000000000057 0.8800000000000007 +68.5000000000000000 0.8800000000000007 +68.6000000000000085 0.8800000000000007 +68.7000000000000028 0.8900000000000009 +68.7999999999999972 0.8900000000000009 +68.9000000000000057 0.8900000000000009 +69.0000000000000000 0.8900000000000009 +69.1000000000000085 0.8900000000000009 +69.2000000000000028 0.9000000000000009 +69.2999999999999972 0.9000000000000009 +69.4000000000000057 0.9000000000000009 +69.5000000000000000 0.9000000000000009 +69.6000000000000085 0.9000000000000009 +69.7000000000000028 0.9000000000000009 +69.7999999999999972 0.9000000000000009 +69.9000000000000057 0.9000000000000009 +70.0000000000000000 0.9000000000000009 +70.1000000000000085 0.9000000000000009 +70.2000000000000028 0.9100000000000008 +70.2999999999999972 0.9100000000000008 +70.4000000000000057 0.9100000000000008 +70.5000000000000000 0.9100000000000008 +70.6000000000000085 0.9100000000000008 +70.7000000000000028 0.9100000000000008 +70.7999999999999972 0.9100000000000008 +70.9000000000000057 0.9000000000000008 +71.0000000000000000 0.9000000000000008 +71.1000000000000085 0.9000000000000008 +71.2000000000000028 0.9000000000000008 +71.2999999999999972 0.8900000000000008 +71.4000000000000057 0.8900000000000008 +71.5000000000000000 0.8800000000000009 +71.6000000000000085 0.8800000000000009 +71.7000000000000028 0.8800000000000009 +71.7999999999999972 0.8700000000000008 +71.9000000000000057 0.8700000000000008 +72.0000000000000000 0.8600000000000007 +72.1000000000000085 0.8600000000000007 +72.2000000000000028 0.8500000000000008 +72.2999999999999972 0.8500000000000008 +72.4000000000000057 0.8400000000000004 +72.5000000000000000 0.8400000000000004 +72.6000000000000085 0.8300000000000001 +72.7000000000000028 0.8200000000000001 +72.7999999999999972 0.8200000000000001 +72.9000000000000057 0.8100000000000003 +73.0000000000000000 0.8100000000000003 +73.1000000000000085 0.8000000000000003 +73.2000000000000028 0.7899999999999999 +73.2999999999999972 0.7899999999999999 +73.4000000000000057 0.7799999999999995 +73.5000000000000000 0.7799999999999995 +73.6000000000000085 0.7699999999999997 +73.7000000000000028 0.7599999999999996 +73.7999999999999972 0.7599999999999996 +73.9000000000000057 0.7499999999999994 +74.0000000000000000 0.7499999999999994 +74.1000000000000085 0.7399999999999998 +74.2000000000000028 0.7399999999999998 +74.2999999999999972 0.7300000000000000 +74.4000000000000057 0.7300000000000000 +74.5000000000000000 0.7200000000000000 +74.6000000000000085 0.7200000000000000 +74.7000000000000028 0.7100000000000003 +74.7999999999999972 0.7100000000000003 +74.9000000000000057 0.7100000000000003 +75.0000000000000000 0.7000000000000001 +75.1000000000000085 0.7000000000000001 +75.2000000000000028 0.7000000000000001 +75.2999999999999972 0.6900000000000003 +75.4000000000000057 0.6900000000000003 +75.5000000000000000 0.6900000000000003 +75.6000000000000085 0.6900000000000003 +75.7000000000000028 0.6900000000000003 +75.7999999999999972 0.6800000000000002 +75.9000000000000057 0.6800000000000002 +76.0000000000000000 0.6800000000000002 +76.1000000000000085 0.6800000000000002 +76.2000000000000028 0.6800000000000002 +76.2999999999999972 0.6800000000000002 +76.4000000000000057 0.6800000000000002 +76.5000000000000000 0.6800000000000002 +76.6000000000000085 0.6900000000000003 +76.7000000000000028 0.6900000000000003 +76.8000000000000114 0.6900000000000003 +76.9000000000000057 0.7000000000000002 +77.0000000000000000 0.7000000000000002 +77.1000000000000085 0.7100000000000001 +77.2000000000000028 0.7100000000000001 +77.3000000000000114 0.7100000000000001 +77.4000000000000057 0.7200000000000002 +77.5000000000000000 0.7300000000000003 +77.6000000000000085 0.7300000000000003 +77.7000000000000028 0.7400000000000004 +77.8000000000000114 0.7400000000000004 +77.9000000000000057 0.7500000000000003 +78.0000000000000000 0.7600000000000001 +78.1000000000000085 0.7600000000000001 +78.2000000000000028 0.7700000000000006 +78.3000000000000114 0.7800000000000006 +78.4000000000000057 0.7800000000000006 +78.5000000000000000 0.7900000000000003 +78.6000000000000085 0.8000000000000004 +78.7000000000000028 0.8100000000000001 +78.8000000000000114 0.8100000000000001 +78.9000000000000057 0.8199999999999998 +79.0000000000000000 0.8300000000000004 +79.1000000000000085 0.8400000000000005 +79.2000000000000028 0.8500000000000004 +79.3000000000000114 0.8500000000000004 +79.4000000000000057 0.8600000000000003 +79.5000000000000000 0.8700000000000009 +79.6000000000000085 0.8800000000000004 +79.7000000000000028 0.8900000000000003 +79.8000000000000114 0.9000000000000004 +79.9000000000000057 0.9000000000000004 +80.0000000000000000 0.9100000000000010 +80.1000000000000085 0.9200000000000008 +80.2000000000000028 0.9300000000000007 +80.3000000000000114 0.9400000000000011 +80.4000000000000057 0.9500000000000016 +80.5000000000000000 0.9500000000000016 +80.6000000000000085 0.9600000000000019 +80.7000000000000028 0.9700000000000023 +80.8000000000000114 0.9800000000000023 +80.9000000000000057 0.9900000000000027 +81.0000000000000000 1.0000000000000024 +81.1000000000000085 1.0100000000000022 +81.2000000000000028 1.0100000000000022 +81.3000000000000114 1.0200000000000022 +81.4000000000000057 1.0300000000000018 +81.5000000000000000 1.0400000000000018 +81.6000000000000085 1.0500000000000023 +81.7000000000000028 1.0500000000000023 +81.8000000000000114 1.0600000000000025 +81.9000000000000057 1.0700000000000027 +82.0000000000000000 1.0800000000000025 +82.1000000000000085 1.0900000000000030 +82.2000000000000028 1.0900000000000030 +82.3000000000000114 1.1000000000000025 +82.4000000000000057 1.1100000000000023 +82.5000000000000000 1.1200000000000019 +82.6000000000000085 1.1200000000000019 +82.7000000000000028 1.1300000000000017 +82.8000000000000114 1.1400000000000017 +82.9000000000000057 1.1400000000000017 +83.0000000000000000 1.1500000000000017 +83.1000000000000085 1.1600000000000015 +83.2000000000000028 1.1600000000000015 +83.3000000000000114 1.1700000000000013 +83.4000000000000057 1.1700000000000013 +83.5000000000000000 1.1800000000000013 +83.6000000000000085 1.1900000000000015 +83.7000000000000028 1.1900000000000015 +83.8000000000000114 1.2000000000000013 +83.9000000000000057 1.2000000000000013 +84.0000000000000000 1.2000000000000013 +84.1000000000000085 1.2100000000000015 +84.2000000000000028 1.2100000000000015 +84.3000000000000114 1.2200000000000013 +84.4000000000000057 1.2200000000000013 +84.5000000000000000 1.2200000000000013 +84.6000000000000085 1.2300000000000013 +84.7000000000000028 1.2300000000000013 +84.8000000000000114 1.2300000000000013 +84.9000000000000057 1.2400000000000013 +85.0000000000000000 1.2400000000000013 +85.1000000000000085 1.2400000000000013 +85.2000000000000028 1.2400000000000013 +85.3000000000000114 1.2400000000000013 +85.4000000000000057 1.2500000000000013 +85.5000000000000000 1.2500000000000013 +85.6000000000000085 1.2500000000000013 +85.7000000000000028 1.2500000000000013 +85.8000000000000114 1.2500000000000013 +85.9000000000000057 1.2500000000000013 +86.0000000000000000 1.2500000000000013 +86.1000000000000085 1.2500000000000013 +86.2000000000000028 1.2500000000000013 +86.3000000000000114 1.2400000000000013 +86.4000000000000057 1.2400000000000013 +86.5000000000000000 1.2400000000000013 +86.6000000000000085 1.2300000000000011 +86.7000000000000028 1.2300000000000011 +86.8000000000000114 1.2200000000000013 +86.9000000000000057 1.2200000000000013 +87.0000000000000000 1.2100000000000017 +87.1000000000000085 1.2100000000000017 +87.2000000000000028 1.2000000000000020 +87.3000000000000114 1.2000000000000020 +87.4000000000000057 1.1900000000000019 +87.5000000000000000 1.1900000000000019 +87.6000000000000085 1.1800000000000019 +87.7000000000000028 1.1700000000000021 +87.8000000000000114 1.1700000000000021 +87.9000000000000057 1.1600000000000019 +88.0000000000000000 1.1500000000000017 +88.1000000000000085 1.1400000000000019 +88.2000000000000028 1.1400000000000019 +88.3000000000000114 1.1300000000000023 +88.4000000000000057 1.1200000000000023 +88.5000000000000000 1.1100000000000030 +88.6000000000000085 1.1100000000000030 +88.7000000000000028 1.1000000000000032 +88.8000000000000114 1.0900000000000036 +88.9000000000000057 1.0800000000000032 +89.0000000000000000 1.0700000000000036 +89.1000000000000085 1.0700000000000036 +89.2000000000000028 1.0600000000000034 +89.3000000000000114 1.0500000000000036 +89.4000000000000057 1.0400000000000031 +89.5000000000000000 1.0400000000000031 +89.6000000000000085 1.0300000000000034 +89.7000000000000028 1.0200000000000033 +89.8000000000000114 1.0100000000000038 +89.9000000000000057 1.0100000000000038 +90.0000000000000000 1.0000000000000036 +90.1000000000000085 0.9900000000000040 +90.2000000000000028 0.9800000000000042 +90.3000000000000114 0.9800000000000042 +90.4000000000000057 0.9700000000000041 +90.5000000000000000 0.9600000000000036 +90.6000000000000085 0.9600000000000036 +90.7000000000000028 0.9500000000000034 +90.8000000000000114 0.9500000000000034 +90.9000000000000057 0.9400000000000032 +91.0000000000000000 0.9400000000000032 +91.1000000000000085 0.9300000000000034 +91.2000000000000028 0.9300000000000034 +91.3000000000000114 0.9200000000000034 +91.4000000000000057 0.9200000000000034 +91.5000000000000000 0.9100000000000035 +91.6000000000000085 0.9100000000000035 +91.7000000000000028 0.9100000000000035 +91.8000000000000114 0.9100000000000035 +91.9000000000000057 0.9000000000000032 +92.0000000000000000 0.9000000000000032 +92.1000000000000085 0.9000000000000032 +92.2000000000000028 0.9000000000000032 +92.3000000000000114 0.9000000000000032 +92.4000000000000057 0.9000000000000032 +92.5000000000000000 0.9000000000000032 +92.6000000000000085 0.9000000000000032 +92.7000000000000028 0.9000000000000032 +92.8000000000000114 0.9000000000000032 +92.9000000000000057 0.9000000000000032 +93.0000000000000000 0.9000000000000032 +93.1000000000000085 0.9000000000000032 +93.2000000000000028 0.9000000000000032 +93.3000000000000114 0.9000000000000032 +93.4000000000000057 0.9100000000000034 +93.5000000000000000 0.9100000000000034 +93.6000000000000085 0.9100000000000034 +93.7000000000000028 0.9200000000000035 +93.8000000000000114 0.9200000000000035 +93.9000000000000057 0.9300000000000038 +94.0000000000000000 0.9300000000000038 +94.1000000000000085 0.9400000000000039 +94.2000000000000028 0.9400000000000039 +94.3000000000000114 0.9500000000000041 +94.4000000000000057 0.9500000000000041 +94.5000000000000000 0.9600000000000042 +94.6000000000000085 0.9600000000000042 +94.7000000000000028 0.9700000000000045 +94.8000000000000114 0.9700000000000045 +94.9000000000000057 0.9800000000000042 +95.0000000000000000 0.9800000000000042 +95.1000000000000085 0.9900000000000045 +95.2000000000000028 0.9900000000000045 +95.3000000000000114 1.0000000000000044 +95.4000000000000057 1.0000000000000044 +95.5000000000000000 1.0100000000000042 +95.6000000000000085 1.0100000000000042 +95.7000000000000028 1.0200000000000045 +95.8000000000000114 1.0200000000000045 +95.9000000000000057 1.0300000000000042 +96.0000000000000000 1.0300000000000042 +96.1000000000000085 1.0300000000000042 +96.2000000000000028 1.0400000000000040 +96.3000000000000114 1.0400000000000040 +96.4000000000000057 1.0500000000000038 +96.5000000000000000 1.0500000000000038 +96.6000000000000085 1.0500000000000038 +96.7000000000000028 1.0500000000000038 +96.8000000000000114 1.0600000000000038 +96.9000000000000057 1.0600000000000038 +97.0000000000000000 1.0600000000000038 +97.1000000000000085 1.0700000000000036 +97.2000000000000028 1.0700000000000036 +97.3000000000000114 1.0700000000000036 +97.4000000000000057 1.0700000000000036 +97.5000000000000000 1.0700000000000036 +97.6000000000000085 1.0800000000000036 +97.7000000000000028 1.0800000000000036 +97.8000000000000114 1.0800000000000036 +97.9000000000000057 1.0800000000000036 +98.0000000000000000 1.0800000000000036 +98.1000000000000085 1.0800000000000036 +98.2000000000000028 1.0800000000000036 +98.3000000000000114 1.0800000000000036 +98.4000000000000057 1.0800000000000036 +98.5000000000000000 1.0800000000000036 +98.6000000000000085 1.0900000000000036 +98.7000000000000028 1.0900000000000036 +98.8000000000000114 1.0900000000000036 +98.9000000000000057 1.0900000000000036 +99.0000000000000000 1.0900000000000036 +99.1000000000000085 1.0900000000000036 +99.2000000000000028 1.0900000000000036 +99.3000000000000114 1.0900000000000036 +99.4000000000000057 1.0900000000000036 +99.5000000000000000 1.0900000000000036 +99.6000000000000085 1.0900000000000036 +99.7000000000000028 1.0900000000000036 +99.8000000000000114 1.0900000000000036 +99.9000000000000057 1.0900000000000036 +100.0000000000000000 1.0900000000000036 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[1].dat b/src/engine/tests/system/gt_data/virus_replication/X[1].dat new file mode 100644 index 00000000..e4f3e844 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[1].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0100000000000000 +0.2000000000000000 0.0300000000000000 +0.3000000000000000 0.0500000000000000 +0.4000000000000000 0.0500000000000000 +0.5000000000000000 0.0500000000000000 +0.6000000000000001 0.0400000000000000 +0.7000000000000001 0.0400000000000000 +0.8000000000000000 0.0400000000000000 +0.9000000000000000 0.0500000000000000 +1.0000000000000000 0.0800000000000000 +1.1000000000000001 0.1099999999999999 +1.2000000000000002 0.1699999999999999 +1.3000000000000000 0.2100000000000000 +1.4000000000000001 0.2499999999999999 +1.5000000000000000 0.3000000000000000 +1.6000000000000001 0.3399999999999999 +1.7000000000000002 0.3999999999999999 +1.8000000000000000 0.4600000000000000 +1.9000000000000001 0.5199999999999999 +2.0000000000000000 0.5399999999999999 +2.1000000000000001 0.5499999999999999 +2.2000000000000002 0.5499999999999999 +2.3000000000000003 0.5800000000000000 +2.4000000000000004 0.6200000000000001 +2.5000000000000000 0.6500000000000000 +2.6000000000000001 0.6800000000000000 +2.7000000000000002 0.7200000000000000 +2.8000000000000003 0.7600000000000000 +2.9000000000000004 0.7800000000000000 +3.0000000000000000 0.8000000000000000 +3.1000000000000001 0.8000000000000000 +3.2000000000000002 0.8000000000000000 +3.3000000000000003 0.8000000000000000 +3.4000000000000004 0.8000000000000000 +3.5000000000000000 0.8000000000000000 +3.6000000000000001 0.8300000000000001 +3.7000000000000002 0.8400000000000001 +3.8000000000000003 0.8500000000000001 +3.9000000000000004 0.8600000000000001 +4.0000000000000000 0.8800000000000001 +4.1000000000000005 0.9199999999999999 +4.2000000000000002 0.9600000000000001 +4.2999999999999998 0.9800000000000002 +4.4000000000000004 1.0000000000000002 +4.5000000000000000 1.0000000000000002 +4.6000000000000005 1.0100000000000002 +4.7000000000000002 0.9900000000000004 +4.8000000000000007 0.9800000000000003 +4.9000000000000004 0.9600000000000002 +5.0000000000000000 0.9600000000000002 +5.1000000000000005 0.9500000000000002 +5.2000000000000002 0.9700000000000002 +5.3000000000000007 1.0000000000000002 +5.4000000000000004 1.0100000000000002 +5.5000000000000000 1.0100000000000002 +5.6000000000000005 1.0200000000000002 +5.7000000000000002 1.0400000000000003 +5.8000000000000007 1.0400000000000003 +5.9000000000000004 1.0400000000000003 +6.0000000000000000 1.0500000000000003 +6.1000000000000005 1.0600000000000003 +6.2000000000000002 1.0800000000000003 +6.3000000000000007 1.1000000000000003 +6.4000000000000004 1.1100000000000003 +6.5000000000000000 1.1100000000000003 +6.6000000000000005 1.1100000000000003 +6.7000000000000002 1.1200000000000003 +6.8000000000000007 1.1100000000000003 +6.9000000000000004 1.1100000000000003 +7.0000000000000000 1.1300000000000003 +7.1000000000000005 1.1500000000000004 +7.2000000000000002 1.1500000000000004 +7.3000000000000007 1.1500000000000004 +7.4000000000000004 1.1600000000000004 +7.5000000000000000 1.1600000000000004 +7.6000000000000005 1.1600000000000004 +7.7000000000000002 1.2000000000000004 +7.8000000000000007 1.2300000000000002 +7.9000000000000004 1.2500000000000000 +8.0000000000000000 1.2600000000000000 +8.0999999999999996 1.2600000000000000 +8.2000000000000011 1.2600000000000000 +8.3000000000000007 1.2700000000000000 +8.4000000000000004 1.2700000000000000 +8.5000000000000000 1.2700000000000000 +8.5999999999999996 1.2800000000000000 +8.7000000000000011 1.3099999999999998 +8.8000000000000007 1.3199999999999998 +8.9000000000000004 1.3299999999999998 +9.0000000000000000 1.3399999999999999 +9.0999999999999996 1.3100000000000003 +9.2000000000000011 1.2800000000000002 +9.3000000000000007 1.2500000000000000 +9.4000000000000004 1.2300000000000000 +9.5000000000000000 1.2100000000000000 +9.6000000000000014 1.2000000000000002 +9.7000000000000011 1.2000000000000002 +9.8000000000000007 1.1900000000000004 +9.9000000000000004 1.1600000000000004 +10.0000000000000000 1.1500000000000004 +10.1000000000000014 1.1500000000000004 +10.2000000000000011 1.1400000000000003 +10.3000000000000007 1.1400000000000003 +10.4000000000000004 1.1500000000000004 +10.5000000000000000 1.1500000000000004 +10.6000000000000014 1.1500000000000004 +10.7000000000000011 1.1400000000000006 +10.8000000000000007 1.1100000000000008 +10.9000000000000004 1.0800000000000005 +11.0000000000000000 1.0700000000000005 +11.1000000000000014 1.0600000000000005 +11.2000000000000011 1.0600000000000005 +11.3000000000000007 1.0500000000000005 +11.4000000000000004 1.0500000000000005 +11.5000000000000000 1.0500000000000005 +11.6000000000000014 1.0700000000000003 +11.7000000000000011 1.1000000000000005 +11.8000000000000007 1.1100000000000003 +11.9000000000000004 1.1300000000000003 +12.0000000000000000 1.1600000000000008 +12.1000000000000014 1.1900000000000006 +12.2000000000000011 1.2300000000000006 +12.3000000000000007 1.2699999999999998 +12.4000000000000004 1.2699999999999998 +12.5000000000000000 1.2900000000000000 +12.6000000000000014 1.3100000000000001 +12.7000000000000011 1.3100000000000001 +12.8000000000000007 1.3000000000000000 +12.9000000000000004 1.2900000000000000 +13.0000000000000000 1.2800000000000000 +13.1000000000000014 1.2800000000000000 +13.2000000000000011 1.2600000000000002 +13.3000000000000007 1.2300000000000004 +13.4000000000000004 1.2000000000000002 +13.5000000000000000 1.2000000000000002 +13.6000000000000014 1.1800000000000002 +13.7000000000000011 1.1399999999999997 +13.8000000000000007 1.0999999999999990 +13.9000000000000004 1.0699999999999987 +14.0000000000000000 1.0399999999999987 +14.1000000000000014 0.9899999999999987 +14.2000000000000011 0.9599999999999990 +14.3000000000000007 0.9299999999999989 +14.4000000000000004 0.8999999999999989 +14.5000000000000000 0.8699999999999990 +14.6000000000000014 0.8399999999999992 +14.7000000000000011 0.8099999999999991 +14.8000000000000007 0.7999999999999989 +14.9000000000000004 0.7899999999999989 +15.0000000000000000 0.7799999999999990 +15.1000000000000014 0.7699999999999989 +15.2000000000000011 0.7599999999999989 +15.3000000000000007 0.7599999999999989 +15.4000000000000004 0.7799999999999990 +15.5000000000000000 0.7899999999999990 +15.6000000000000014 0.7799999999999992 +15.7000000000000011 0.7599999999999991 +15.8000000000000007 0.7499999999999991 +15.9000000000000004 0.6999999999999993 +16.0000000000000000 0.6499999999999989 +16.1000000000000014 0.5899999999999991 +16.1999999999999993 0.5599999999999989 +16.3000000000000007 0.5399999999999989 +16.4000000000000021 0.5199999999999986 +16.5000000000000000 0.4999999999999983 +16.6000000000000014 0.4799999999999979 +16.6999999999999993 0.4799999999999979 +16.8000000000000007 0.4999999999999977 +16.9000000000000021 0.5299999999999990 +17.0000000000000000 0.5599999999999996 +17.1000000000000014 0.6199999999999964 +17.1999999999999993 0.6699999999999985 +17.3000000000000007 0.7199999999999981 +17.4000000000000021 0.7599999999999981 +17.5000000000000000 0.7799999999999981 +17.6000000000000014 0.7999999999999988 +17.6999999999999993 0.8299999999999986 +17.8000000000000007 0.8699999999999971 +17.9000000000000021 0.8999999999999976 +18.0000000000000000 0.9299999999999983 +18.1000000000000014 0.9499999999999977 +18.1999999999999993 0.9599999999999975 +18.3000000000000007 0.9899999999999967 +18.4000000000000021 1.0199999999999969 +18.5000000000000000 1.0399999999999969 +18.6000000000000014 1.0499999999999967 +18.6999999999999993 1.0799999999999970 +18.8000000000000007 1.0999999999999968 +18.9000000000000021 1.0999999999999968 +19.0000000000000000 1.0999999999999968 +19.1000000000000014 1.0899999999999967 +19.2000000000000028 1.0899999999999967 +19.3000000000000007 1.0799999999999970 +19.4000000000000021 1.0599999999999963 +19.5000000000000000 1.0399999999999960 +19.6000000000000014 1.0199999999999958 +19.7000000000000028 0.9999999999999959 +19.8000000000000007 1.0099999999999962 +19.9000000000000021 1.0199999999999960 +20.0000000000000000 1.0299999999999958 +20.1000000000000014 1.0399999999999956 +20.2000000000000028 1.0499999999999956 +20.3000000000000007 1.0899999999999941 +20.4000000000000021 1.0999999999999945 +20.5000000000000000 1.1099999999999945 +20.6000000000000014 1.1099999999999945 +20.7000000000000028 1.1099999999999945 +20.8000000000000007 1.0799999999999952 +20.9000000000000021 1.0399999999999971 +21.0000000000000000 0.9999999999999966 +21.1000000000000014 0.9799999999999961 +21.2000000000000028 0.9799999999999961 +21.3000000000000007 0.9999999999999958 +21.4000000000000021 1.0099999999999956 +21.5000000000000000 1.0099999999999956 +21.6000000000000014 1.0099999999999956 +21.7000000000000028 1.0099999999999956 +21.8000000000000007 1.0099999999999956 +21.9000000000000021 1.0299999999999958 +22.0000000000000000 1.0599999999999952 +22.1000000000000014 1.0699999999999952 +22.2000000000000028 1.0699999999999952 +22.3000000000000007 1.0699999999999952 +22.4000000000000021 1.0899999999999948 +22.5000000000000000 1.1299999999999941 +22.6000000000000014 1.1799999999999946 +22.7000000000000028 1.2099999999999946 +22.8000000000000007 1.2399999999999949 +22.9000000000000021 1.2899999999999965 +23.0000000000000000 1.3199999999999967 +23.1000000000000014 1.3199999999999967 +23.2000000000000028 1.2899999999999956 +23.3000000000000007 1.2499999999999969 +23.4000000000000021 1.2199999999999969 +23.5000000000000000 1.1799999999999977 +23.6000000000000014 1.1399999999999975 +23.7000000000000028 1.1099999999999983 +23.8000000000000007 1.0699999999999981 +23.9000000000000021 1.0399999999999980 +24.0000000000000000 1.0099999999999976 +24.1000000000000014 0.9699999999999981 +24.2000000000000028 0.9299999999999987 +24.3000000000000007 0.8899999999999979 +24.4000000000000021 0.8499999999999974 +24.5000000000000000 0.8099999999999979 +24.6000000000000014 0.7899999999999981 +24.7000000000000028 0.7899999999999981 +24.8000000000000007 0.7899999999999981 +24.9000000000000021 0.7899999999999981 +25.0000000000000000 0.7799999999999983 +25.1000000000000014 0.7499999999999977 +25.2000000000000028 0.7399999999999980 +25.3000000000000007 0.7399999999999980 +25.4000000000000021 0.7399999999999980 +25.5000000000000000 0.7399999999999980 +25.6000000000000014 0.7399999999999980 +25.7000000000000028 0.7499999999999978 +25.8000000000000007 0.7499999999999978 +25.9000000000000021 0.7599999999999978 +26.0000000000000000 0.7599999999999978 +26.1000000000000014 0.7499999999999978 +26.2000000000000028 0.7499999999999978 +26.3000000000000007 0.7599999999999978 +26.4000000000000021 0.7799999999999979 +26.5000000000000000 0.7999999999999977 +26.6000000000000014 0.8399999999999974 +26.7000000000000028 0.8699999999999970 +26.8000000000000007 0.8999999999999975 +26.9000000000000021 0.9199999999999980 +27.0000000000000000 0.9399999999999982 +27.1000000000000014 0.9499999999999981 +27.2000000000000028 0.9599999999999976 +27.3000000000000007 0.9799999999999971 +27.4000000000000021 0.9899999999999970 +27.5000000000000000 1.0099999999999971 +27.6000000000000014 1.0299999999999974 +27.7000000000000028 1.0399999999999974 +27.8000000000000007 1.0399999999999974 +27.9000000000000021 1.0299999999999974 +28.0000000000000000 0.9999999999999977 +28.1000000000000014 0.9899999999999975 +28.2000000000000028 0.9799999999999972 +28.3000000000000007 0.9699999999999972 +28.4000000000000021 0.9699999999999972 +28.5000000000000000 0.9699999999999972 +28.6000000000000014 0.9699999999999972 +28.7000000000000028 0.9799999999999971 +28.8000000000000007 0.9699999999999968 +28.9000000000000021 0.9399999999999955 +29.0000000000000000 0.8999999999999948 +29.1000000000000014 0.8599999999999958 +29.2000000000000028 0.8499999999999961 +29.3000000000000007 0.8399999999999961 +29.4000000000000021 0.8099999999999961 +29.5000000000000000 0.7899999999999961 +29.6000000000000014 0.7699999999999957 +29.7000000000000028 0.7399999999999951 +29.8000000000000007 0.7299999999999950 +29.9000000000000021 0.7199999999999951 +30.0000000000000000 0.7199999999999951 +30.1000000000000014 0.7399999999999958 +30.2000000000000028 0.7499999999999958 +30.3000000000000007 0.7399999999999961 +30.4000000000000021 0.7199999999999965 +30.5000000000000000 0.6999999999999966 +30.6000000000000014 0.6799999999999968 +30.7000000000000028 0.6699999999999968 +30.8000000000000007 0.6699999999999968 +30.9000000000000021 0.6699999999999968 +31.0000000000000000 0.6699999999999968 +31.1000000000000014 0.6599999999999969 +31.2000000000000028 0.6499999999999969 +31.3000000000000007 0.6199999999999973 +31.4000000000000021 0.6099999999999971 +31.5000000000000000 0.5899999999999970 +31.6000000000000014 0.5899999999999970 +31.7000000000000028 0.5799999999999970 +31.8000000000000007 0.5699999999999967 +31.9000000000000021 0.5699999999999967 +32.0000000000000000 0.5599999999999967 +32.1000000000000014 0.5599999999999967 +32.2000000000000028 0.5699999999999967 +32.3000000000000043 0.5699999999999967 +32.3999999999999986 0.5699999999999967 +32.5000000000000000 0.5499999999999973 +32.6000000000000014 0.5199999999999975 +32.7000000000000028 0.4899999999999972 +32.8000000000000043 0.4699999999999981 +32.8999999999999986 0.4499999999999988 +33.0000000000000000 0.4399999999999986 +33.1000000000000014 0.4299999999999985 +33.2000000000000028 0.4299999999999985 +33.3000000000000043 0.4399999999999984 +33.3999999999999986 0.4399999999999984 +33.5000000000000000 0.4299999999999986 +33.6000000000000014 0.4299999999999986 +33.7000000000000028 0.4399999999999985 +33.8000000000000043 0.4499999999999986 +33.8999999999999986 0.4399999999999989 +34.0000000000000000 0.4399999999999989 +34.1000000000000014 0.4499999999999990 +34.2000000000000028 0.4799999999999975 +34.3000000000000043 0.5199999999999985 +34.3999999999999986 0.5699999999999978 +34.5000000000000000 0.6199999999999944 +34.6000000000000014 0.6699999999999909 +34.7000000000000028 0.7099999999999909 +34.8000000000000043 0.7599999999999911 +34.8999999999999986 0.8099999999999872 +35.0000000000000000 0.8699999999999847 +35.1000000000000014 0.9299999999999871 +35.2000000000000028 0.9899999999999877 +35.3000000000000043 1.0299999999999863 +35.3999999999999986 1.0899999999999879 +35.5000000000000000 1.1399999999999868 +35.6000000000000014 1.1899999999999862 +35.7000000000000028 1.2199999999999880 +35.8000000000000043 1.2299999999999875 +35.8999999999999986 1.2499999999999878 +36.0000000000000000 1.2599999999999874 +36.1000000000000014 1.2699999999999874 +36.2000000000000028 1.2399999999999882 +36.3000000000000043 1.1999999999999897 +36.3999999999999986 1.1799999999999893 +36.5000000000000000 1.1699999999999890 +36.6000000000000014 1.1699999999999890 +36.7000000000000028 1.1499999999999890 +36.8000000000000043 1.1299999999999901 +36.8999999999999986 1.1099999999999908 +37.0000000000000000 1.0799999999999910 +37.1000000000000014 1.0499999999999918 +37.2000000000000028 1.0199999999999942 +37.3000000000000043 0.9899999999999938 +37.3999999999999986 0.9599999999999945 +37.5000000000000000 0.9299999999999967 +37.6000000000000014 0.8999999999999958 +37.7000000000000028 0.8599999999999951 +37.8000000000000043 0.7900000000000003 +37.8999999999999986 0.7500000000000003 +38.0000000000000000 0.7300000000000006 +38.1000000000000014 0.7300000000000006 +38.2000000000000028 0.7400000000000010 +38.3000000000000043 0.7400000000000010 +38.4000000000000057 0.7300000000000010 +38.5000000000000000 0.7400000000000011 +38.6000000000000014 0.7700000000000008 +38.7000000000000028 0.8100000000000008 +38.8000000000000043 0.8500000000000041 +38.9000000000000057 0.9000000000000058 +39.0000000000000000 0.9400000000000081 +39.1000000000000014 0.9700000000000079 +39.2000000000000028 0.9900000000000064 +39.3000000000000043 1.0100000000000064 +39.4000000000000057 1.0300000000000076 +39.5000000000000000 1.0400000000000076 +39.6000000000000014 1.0700000000000081 +39.7000000000000028 1.1000000000000083 +39.8000000000000043 1.1300000000000061 +39.9000000000000057 1.1400000000000059 +40.0000000000000000 1.1600000000000052 +40.1000000000000014 1.2000000000000066 +40.2000000000000028 1.2200000000000080 +40.3000000000000043 1.2500000000000073 +40.4000000000000057 1.2600000000000071 +40.5000000000000000 1.2700000000000076 +40.6000000000000014 1.2700000000000076 +40.7000000000000028 1.2600000000000071 +40.8000000000000043 1.2600000000000071 +40.9000000000000057 1.2600000000000071 +41.0000000000000000 1.2500000000000078 +41.1000000000000014 1.2200000000000077 +41.2000000000000028 1.1800000000000088 +41.3000000000000043 1.1500000000000103 +41.4000000000000057 1.1100000000000079 +41.5000000000000000 1.0700000000000085 +41.6000000000000014 1.0400000000000102 +41.7000000000000028 1.0400000000000102 +41.8000000000000043 1.0600000000000103 +41.9000000000000057 1.0600000000000103 +42.0000000000000000 1.0800000000000096 +42.1000000000000014 1.0800000000000096 +42.2000000000000028 1.0700000000000098 +42.3000000000000043 1.0600000000000103 +42.4000000000000057 1.0500000000000107 +42.5000000000000000 1.0400000000000107 +42.6000000000000014 1.0300000000000105 +42.7000000000000028 1.0400000000000105 +42.8000000000000043 1.0400000000000105 +42.9000000000000057 1.0300000000000105 +43.0000000000000000 1.0300000000000105 +43.1000000000000014 1.0200000000000105 +43.2000000000000028 1.0100000000000102 +43.3000000000000043 1.0000000000000098 +43.4000000000000057 1.0000000000000098 +43.5000000000000000 1.0000000000000098 +43.6000000000000014 1.0200000000000098 +43.7000000000000028 1.0400000000000096 +43.8000000000000043 1.0500000000000098 +43.9000000000000057 1.0700000000000092 +44.0000000000000000 1.0900000000000096 +44.1000000000000014 1.1100000000000096 +44.2000000000000028 1.1100000000000096 +44.3000000000000043 1.1200000000000097 +44.4000000000000057 1.1000000000000096 +44.5000000000000000 1.0800000000000087 +44.6000000000000014 1.0600000000000100 +44.7000000000000028 1.0300000000000111 +44.8000000000000043 1.0000000000000111 +44.9000000000000057 0.9500000000000139 +45.0000000000000000 0.9100000000000110 +45.1000000000000014 0.8800000000000116 +45.2000000000000028 0.8600000000000112 +45.3000000000000043 0.8600000000000112 +45.4000000000000057 0.8800000000000110 +45.5000000000000000 0.9200000000000114 +45.6000000000000014 0.9600000000000107 +45.7000000000000028 0.9800000000000115 +45.8000000000000043 1.0100000000000107 +45.9000000000000057 1.0400000000000100 +46.0000000000000000 1.1000000000000127 +46.1000000000000014 1.1600000000000126 +46.2000000000000028 1.2300000000000164 +46.3000000000000043 1.3200000000000065 +46.4000000000000057 1.3800000000000094 +46.5000000000000000 1.4300000000000117 +46.6000000000000014 1.4500000000000133 +46.7000000000000028 1.4600000000000131 +46.8000000000000043 1.4500000000000133 +46.9000000000000057 1.4600000000000137 +47.0000000000000000 1.4700000000000140 +47.1000000000000014 1.4600000000000140 +47.2000000000000028 1.4400000000000144 +47.3000000000000043 1.4300000000000144 +47.4000000000000057 1.4200000000000150 +47.5000000000000000 1.4000000000000148 +47.6000000000000014 1.3700000000000154 +47.7000000000000028 1.3600000000000154 +47.8000000000000043 1.3300000000000156 +47.9000000000000057 1.3000000000000154 +48.0000000000000000 1.2800000000000149 +48.1000000000000014 1.2500000000000153 +48.2000000000000028 1.2400000000000155 +48.3000000000000043 1.2400000000000155 +48.4000000000000057 1.2400000000000155 +48.5000000000000000 1.2500000000000153 +48.6000000000000014 1.2600000000000158 +48.7000000000000028 1.2700000000000158 +48.8000000000000043 1.2700000000000158 +48.9000000000000057 1.2700000000000158 +49.0000000000000000 1.2600000000000156 +49.1000000000000014 1.2400000000000160 +49.2000000000000028 1.2300000000000164 +49.3000000000000043 1.2100000000000166 +49.4000000000000057 1.2000000000000171 +49.5000000000000000 1.1900000000000173 +49.6000000000000014 1.1800000000000170 +49.7000000000000028 1.1900000000000166 +49.8000000000000043 1.2100000000000175 +49.9000000000000057 1.2300000000000182 +50.0000000000000000 1.2400000000000182 +50.1000000000000014 1.2400000000000182 +50.2000000000000028 1.2400000000000182 +50.3000000000000043 1.2500000000000178 +50.4000000000000057 1.2600000000000176 +50.5000000000000000 1.2800000000000176 +50.6000000000000014 1.2900000000000176 +50.7000000000000028 1.3000000000000176 +50.8000000000000043 1.3200000000000178 +50.9000000000000057 1.3400000000000190 +51.0000000000000000 1.3500000000000187 +51.1000000000000014 1.3600000000000190 +51.2000000000000028 1.3700000000000188 +51.3000000000000043 1.3800000000000185 +51.4000000000000057 1.3900000000000190 +51.5000000000000000 1.4000000000000190 +51.6000000000000014 1.3900000000000190 +51.7000000000000028 1.3700000000000181 +51.8000000000000043 1.3500000000000176 +51.9000000000000057 1.3300000000000185 +52.0000000000000000 1.2900000000000202 +52.1000000000000014 1.2500000000000200 +52.2000000000000028 1.2200000000000188 +52.3000000000000043 1.1900000000000197 +52.4000000000000057 1.1600000000000215 +52.5000000000000000 1.1300000000000217 +52.6000000000000014 1.1100000000000205 +52.7000000000000028 1.0700000000000194 +52.8000000000000043 1.0300000000000187 +52.9000000000000057 0.9900000000000180 +53.0000000000000000 0.9500000000000167 +53.1000000000000014 0.9200000000000159 +53.2000000000000028 0.8900000000000153 +53.3000000000000043 0.8800000000000154 +53.4000000000000057 0.8600000000000160 +53.5000000000000000 0.8500000000000159 +53.6000000000000014 0.8400000000000158 +53.7000000000000028 0.8300000000000154 +53.8000000000000043 0.8100000000000167 +53.9000000000000057 0.8000000000000169 +54.0000000000000000 0.7800000000000173 +54.1000000000000014 0.7500000000000181 +54.2000000000000028 0.7200000000000184 +54.3000000000000043 0.6900000000000199 +54.4000000000000057 0.6600000000000225 +54.5000000000000000 0.6300000000000202 +54.6000000000000014 0.6000000000000191 +54.7000000000000028 0.5800000000000193 +54.8000000000000043 0.5600000000000201 +54.9000000000000057 0.5400000000000204 +55.0000000000000000 0.5200000000000189 +55.1000000000000014 0.5000000000000187 +55.2000000000000028 0.5000000000000187 +55.3000000000000043 0.5000000000000187 +55.4000000000000057 0.5200000000000190 +55.5000000000000000 0.5300000000000186 +55.6000000000000014 0.5300000000000186 +55.7000000000000028 0.5300000000000186 +55.8000000000000043 0.5300000000000186 +55.9000000000000057 0.5400000000000182 +56.0000000000000000 0.5600000000000168 +56.1000000000000014 0.6000000000000171 +56.2000000000000028 0.6300000000000179 +56.3000000000000043 0.6600000000000182 +56.4000000000000057 0.6600000000000182 +56.5000000000000000 0.6500000000000180 +56.6000000000000014 0.6500000000000180 +56.7000000000000028 0.6500000000000180 +56.8000000000000043 0.6500000000000180 +56.9000000000000057 0.6200000000000186 +57.0000000000000000 0.6000000000000203 +57.1000000000000014 0.5900000000000201 +57.2000000000000028 0.5900000000000201 +57.3000000000000043 0.5900000000000201 +57.4000000000000057 0.5900000000000201 +57.5000000000000000 0.5800000000000203 +57.6000000000000014 0.5900000000000204 +57.7000000000000028 0.6200000000000208 +57.8000000000000043 0.6400000000000204 +57.9000000000000057 0.6700000000000209 +58.0000000000000000 0.6900000000000198 +58.1000000000000014 0.7200000000000191 +58.2000000000000028 0.7300000000000190 +58.3000000000000043 0.7500000000000189 +58.4000000000000057 0.7500000000000189 +58.5000000000000000 0.7500000000000189 +58.6000000000000014 0.7500000000000189 +58.7000000000000028 0.7700000000000177 +58.8000000000000043 0.8000000000000173 +58.9000000000000057 0.8400000000000196 +59.0000000000000000 0.8800000000000185 +59.1000000000000014 0.9100000000000188 +59.2000000000000028 0.9400000000000179 +59.3000000000000043 0.9600000000000188 +59.4000000000000057 1.0000000000000198 +59.5000000000000000 1.0200000000000198 +59.6000000000000014 1.0300000000000196 +59.7000000000000028 1.0400000000000196 +59.8000000000000043 1.0700000000000203 +59.9000000000000057 1.0800000000000201 +60.0000000000000000 1.0800000000000201 +60.1000000000000014 1.0800000000000201 +60.2000000000000028 1.0700000000000200 +60.3000000000000043 1.0700000000000200 +60.4000000000000057 1.0800000000000201 +60.5000000000000000 1.1000000000000205 +60.6000000000000014 1.1100000000000205 +60.7000000000000028 1.1300000000000201 +60.8000000000000043 1.1300000000000201 +60.9000000000000057 1.1200000000000194 +61.0000000000000000 1.1000000000000201 +61.1000000000000014 1.0700000000000183 +61.2000000000000028 1.0500000000000189 +61.3000000000000043 1.0400000000000191 +61.4000000000000057 1.0300000000000189 +61.5000000000000000 1.0300000000000189 +61.6000000000000014 1.0200000000000196 +61.7000000000000028 1.0000000000000200 +61.8000000000000043 0.9800000000000203 +61.9000000000000057 0.9500000000000206 +62.0000000000000000 0.9400000000000205 +62.1000000000000014 0.9500000000000198 +62.2000000000000028 0.9600000000000201 +62.3000000000000043 0.9600000000000201 +62.4000000000000057 0.9600000000000201 +62.5000000000000000 0.9600000000000201 +62.6000000000000014 0.9300000000000210 +62.7000000000000028 0.9100000000000208 +62.8000000000000043 0.8800000000000210 +62.9000000000000057 0.8500000000000200 +63.0000000000000000 0.8300000000000193 +63.1000000000000014 0.8200000000000195 +63.2000000000000028 0.8000000000000196 +63.3000000000000043 0.7900000000000197 +63.4000000000000057 0.8000000000000193 +63.5000000000000000 0.8200000000000192 +63.6000000000000014 0.8400000000000193 +63.7000000000000028 0.8500000000000192 +63.8000000000000043 0.8700000000000195 +63.9000000000000057 0.9000000000000214 +64.0000000000000000 0.9000000000000214 +64.1000000000000085 0.9000000000000214 +64.2000000000000028 0.9100000000000216 +64.2999999999999972 0.9100000000000216 +64.4000000000000057 0.9400000000000194 +64.5000000000000000 0.9700000000000196 +64.6000000000000085 1.0000000000000211 +64.7000000000000028 1.0100000000000211 +64.7999999999999972 1.0200000000000204 +64.9000000000000057 1.0100000000000211 +65.0000000000000000 1.0000000000000218 +65.1000000000000085 0.9700000000000217 +65.2000000000000028 0.9500000000000226 +65.2999999999999972 0.9300000000000203 +65.4000000000000057 0.8900000000000170 +65.5000000000000000 0.8700000000000155 +65.6000000000000085 0.8500000000000166 +65.7000000000000028 0.8200000000000168 +65.7999999999999972 0.7700000000000177 +65.9000000000000057 0.7100000000000126 +66.0000000000000000 0.6600000000000062 +66.1000000000000085 0.6300000000000051 +66.2000000000000028 0.6000000000000070 +66.2999999999999972 0.5800000000000097 +66.4000000000000057 0.5600000000000099 +66.5000000000000000 0.5200000000000136 +66.6000000000000085 0.4900000000000128 +66.7000000000000028 0.4600000000000146 +66.7999999999999972 0.4300000000000169 +66.9000000000000057 0.4100000000000169 +67.0000000000000000 0.4100000000000169 +67.1000000000000085 0.4200000000000170 +67.2000000000000028 0.4200000000000170 +67.2999999999999972 0.3900000000000129 +67.4000000000000057 0.3800000000000130 +67.5000000000000000 0.3900000000000114 +67.6000000000000085 0.4100000000000123 +67.7000000000000028 0.4300000000000135 +67.7999999999999972 0.4400000000000125 +67.9000000000000057 0.4700000000000131 +68.0000000000000000 0.4700000000000131 +68.1000000000000085 0.4800000000000134 +68.2000000000000028 0.5100000000000164 +68.2999999999999972 0.5300000000000167 +68.4000000000000057 0.5400000000000172 +68.5000000000000000 0.5200000000000174 +68.6000000000000085 0.4900000000000180 +68.7000000000000028 0.4600000000000198 +68.7999999999999972 0.4400000000000223 +68.9000000000000057 0.4400000000000223 +69.0000000000000000 0.4700000000000266 +69.1000000000000085 0.5100000000000262 +69.2000000000000028 0.5300000000000270 +69.2999999999999972 0.5300000000000270 +69.4000000000000057 0.5300000000000270 +69.5000000000000000 0.5300000000000270 +69.6000000000000085 0.5600000000000257 +69.7000000000000028 0.5900000000000289 +69.7999999999999972 0.6100000000000286 +69.9000000000000057 0.6300000000000276 +70.0000000000000000 0.6700000000000257 +70.1000000000000085 0.7000000000000265 +70.2000000000000028 0.7300000000000250 +70.2999999999999972 0.7400000000000244 +70.4000000000000057 0.7500000000000254 +70.5000000000000000 0.7900000000000238 +70.6000000000000085 0.8200000000000283 +70.7000000000000028 0.8400000000000267 +70.7999999999999972 0.8500000000000262 +70.9000000000000057 0.8800000000000244 +71.0000000000000000 0.9200000000000205 +71.1000000000000085 0.9500000000000177 +71.2000000000000028 0.9600000000000168 +71.2999999999999972 1.0000000000000167 +71.4000000000000057 1.0300000000000176 +71.5000000000000000 1.0600000000000203 +71.6000000000000085 1.1000000000000159 +71.7000000000000028 1.1400000000000203 +71.7999999999999972 1.1700000000000217 +71.9000000000000057 1.1900000000000206 +72.0000000000000000 1.2000000000000215 +72.1000000000000085 1.2300000000000213 +72.2000000000000028 1.2500000000000180 +72.2999999999999972 1.2600000000000173 +72.4000000000000057 1.2600000000000173 +72.5000000000000000 1.2400000000000144 +72.6000000000000085 1.1900000000000155 +72.7000000000000028 1.1600000000000172 +72.7999999999999972 1.1300000000000170 +72.9000000000000057 1.1200000000000185 +73.0000000000000000 1.1000000000000176 +73.1000000000000085 1.0900000000000183 +73.2000000000000028 1.0800000000000181 +73.2999999999999972 1.0800000000000181 +73.4000000000000057 1.0800000000000181 +73.5000000000000000 1.0800000000000181 +73.6000000000000085 1.0900000000000174 +73.7000000000000028 1.1100000000000165 +73.7999999999999972 1.1100000000000165 +73.9000000000000057 1.1200000000000168 +74.0000000000000000 1.1200000000000168 +74.1000000000000085 1.1000000000000179 +74.2000000000000028 1.0900000000000183 +74.2999999999999972 1.0800000000000183 +74.4000000000000057 1.0800000000000183 +74.5000000000000000 1.1000000000000203 +74.6000000000000085 1.1100000000000203 +74.7000000000000028 1.1100000000000203 +74.7999999999999972 1.1300000000000201 +74.9000000000000057 1.1500000000000223 +75.0000000000000000 1.1800000000000253 +75.1000000000000085 1.2400000000000220 +75.2000000000000028 1.3000000000000036 +75.2999999999999972 1.3500000000000045 +75.4000000000000057 1.3700000000000063 +75.5000000000000000 1.4000000000000095 +75.6000000000000085 1.4200000000000106 +75.7000000000000028 1.4400000000000108 +75.7999999999999972 1.4800000000000093 +75.9000000000000057 1.5100000000000111 +76.0000000000000000 1.5200000000000100 +76.1000000000000085 1.5200000000000100 +76.2000000000000028 1.5200000000000100 +76.2999999999999972 1.5100000000000107 +76.4000000000000057 1.4800000000000098 +76.5000000000000000 1.4400000000000088 +76.6000000000000085 1.3800000000000079 +76.7000000000000028 1.3400000000000098 +76.8000000000000114 1.3000000000000134 +76.9000000000000057 1.2700000000000151 +77.0000000000000000 1.2600000000000147 +77.1000000000000085 1.2700000000000140 +77.2000000000000028 1.3000000000000131 +77.3000000000000114 1.3100000000000136 +77.4000000000000057 1.3400000000000127 +77.5000000000000000 1.3700000000000094 +77.6000000000000085 1.3900000000000077 +77.7000000000000028 1.3900000000000077 +77.8000000000000114 1.3900000000000077 +77.9000000000000057 1.3900000000000077 +78.0000000000000000 1.3900000000000077 +78.1000000000000085 1.3900000000000077 +78.2000000000000028 1.3900000000000077 +78.3000000000000114 1.3800000000000086 +78.4000000000000057 1.3700000000000072 +78.5000000000000000 1.3500000000000072 +78.6000000000000085 1.3400000000000065 +78.7000000000000028 1.3400000000000065 +78.8000000000000114 1.3300000000000054 +78.9000000000000057 1.3000000000000076 +79.0000000000000000 1.2800000000000100 +79.1000000000000085 1.2600000000000107 +79.2000000000000028 1.2300000000000124 +79.3000000000000114 1.2100000000000133 +79.4000000000000057 1.2000000000000128 +79.5000000000000000 1.2000000000000128 +79.6000000000000085 1.1800000000000137 +79.7000000000000028 1.1600000000000139 +79.8000000000000114 1.1400000000000126 +79.9000000000000057 1.1200000000000103 +80.0000000000000000 1.1100000000000101 +80.1000000000000085 1.1100000000000101 +80.2000000000000028 1.1200000000000088 +80.3000000000000114 1.1400000000000099 +80.4000000000000057 1.1800000000000086 +80.5000000000000000 1.2100000000000080 +80.6000000000000085 1.2300000000000084 +80.7000000000000028 1.2300000000000084 +80.8000000000000114 1.2200000000000066 +80.9000000000000057 1.1900000000000053 +81.0000000000000000 1.1600000000000052 +81.1000000000000085 1.1200000000000085 +81.2000000000000028 1.1000000000000090 +81.3000000000000114 1.0700000000000058 +81.4000000000000057 1.0500000000000038 +81.5000000000000000 1.0300000000000025 +81.6000000000000085 0.9900000000000022 +81.7000000000000028 0.9700000000000013 +81.8000000000000114 0.9300000000000024 +81.9000000000000057 0.8900000000000055 +82.0000000000000000 0.8399999999999977 +82.1000000000000085 0.8000000000000036 +82.2000000000000028 0.7800000000000027 +82.3000000000000114 0.7600000000000025 +82.4000000000000057 0.7400000000000033 +82.5000000000000000 0.7300000000000023 +82.6000000000000085 0.7100000000000037 +82.7000000000000028 0.6800000000000016 +82.8000000000000114 0.6300000000000119 +82.9000000000000057 0.5900000000000157 +83.0000000000000000 0.5600000000000140 +83.1000000000000085 0.5300000000000124 +83.2000000000000028 0.5000000000000088 +83.3000000000000114 0.5000000000000088 +83.4000000000000057 0.5000000000000088 +83.5000000000000000 0.5200000000000061 +83.6000000000000085 0.5600000000000083 +83.7000000000000028 0.6000000000000123 +83.8000000000000114 0.6400000000000124 +83.9000000000000057 0.6800000000000107 +84.0000000000000000 0.7200000000000040 +84.1000000000000085 0.7600000000000059 +84.2000000000000028 0.7900000000000047 +84.3000000000000114 0.8100000000000032 +84.4000000000000057 0.8100000000000032 +84.5000000000000000 0.8200000000000024 +84.6000000000000085 0.8200000000000024 +84.7000000000000028 0.8000000000000043 +84.8000000000000114 0.7900000000000045 +84.9000000000000057 0.7800000000000055 +85.0000000000000000 0.7600000000000056 +85.1000000000000085 0.7600000000000056 +85.2000000000000028 0.7600000000000056 +85.3000000000000114 0.7700000000000045 +85.4000000000000057 0.7800000000000040 +85.5000000000000000 0.8000000000000030 +85.6000000000000085 0.8200000000000016 +85.7000000000000028 0.8300000000000010 +85.8000000000000114 0.8300000000000010 +85.9000000000000057 0.8300000000000010 +86.0000000000000000 0.8300000000000010 +86.1000000000000085 0.8300000000000010 +86.2000000000000028 0.8300000000000010 +86.3000000000000114 0.8300000000000010 +86.4000000000000057 0.8300000000000010 +86.5000000000000000 0.8500000000000016 +86.6000000000000085 0.8899999999999961 +86.7000000000000028 0.9300000000000003 +86.8000000000000114 0.9600000000000002 +86.9000000000000057 0.9800000000000018 +87.0000000000000000 1.0199999999999971 +87.1000000000000085 1.0500000000000018 +87.2000000000000028 1.0899999999999987 +87.3000000000000114 1.1300000000000014 +87.4000000000000057 1.1500000000000032 +87.5000000000000000 1.1800000000000057 +87.6000000000000085 1.2000000000000064 +87.7000000000000028 1.2200000000000062 +87.8000000000000114 1.2300000000000071 +87.9000000000000057 1.2600000000000036 +88.0000000000000000 1.2700000000000027 +88.1000000000000085 1.2700000000000027 +88.2000000000000028 1.2700000000000027 +88.3000000000000114 1.2800000000000027 +88.4000000000000057 1.2800000000000027 +88.5000000000000000 1.2800000000000027 +88.6000000000000085 1.2900000000000025 +88.7000000000000028 1.3100000000000012 +88.8000000000000114 1.3299999999999992 +88.9000000000000057 1.3500000000000008 +89.0000000000000000 1.3600000000000005 +89.1000000000000085 1.3500000000000025 +89.2000000000000028 1.3300000000000050 +89.3000000000000114 1.2900000000000016 +89.4000000000000057 1.2600000000000053 +89.5000000000000000 1.2200000000000115 +89.6000000000000085 1.2000000000000108 +89.7000000000000028 1.1900000000000106 +89.8000000000000114 1.1700000000000121 +89.9000000000000057 1.1800000000000106 +90.0000000000000000 1.2100000000000115 +90.1000000000000085 1.2200000000000122 +90.2000000000000028 1.2200000000000122 +90.3000000000000114 1.2000000000000153 +90.4000000000000057 1.2000000000000153 +90.5000000000000000 1.2000000000000153 +90.6000000000000085 1.1800000000000148 +90.7000000000000028 1.1700000000000155 +90.8000000000000114 1.1600000000000150 +90.9000000000000057 1.1400000000000141 +91.0000000000000000 1.1100000000000108 +91.1000000000000085 1.0700000000000134 +91.2000000000000028 1.0400000000000127 +91.3000000000000114 1.0100000000000144 +91.4000000000000057 0.9900000000000138 +91.5000000000000000 0.9900000000000138 +91.6000000000000085 0.9800000000000141 +91.7000000000000028 0.9700000000000147 +91.8000000000000114 0.9300000000000143 +91.9000000000000057 0.9000000000000140 +92.0000000000000000 0.8700000000000142 +92.1000000000000085 0.8400000000000155 +92.2000000000000028 0.8300000000000158 +92.3000000000000114 0.8200000000000162 +92.4000000000000057 0.8200000000000162 +92.5000000000000000 0.8200000000000162 +92.6000000000000085 0.8200000000000162 +92.7000000000000028 0.8500000000000144 +92.8000000000000114 0.8900000000000167 +92.9000000000000057 0.9400000000000132 +93.0000000000000000 1.0000000000000022 +93.1000000000000085 1.0699999999999881 +93.2000000000000028 1.1099999999999914 +93.3000000000000114 1.1499999999999919 +93.4000000000000057 1.1799999999999953 +93.5000000000000000 1.2099999999999940 +93.6000000000000085 1.2199999999999944 +93.7000000000000028 1.2199999999999944 +93.8000000000000114 1.2099999999999940 +93.9000000000000057 1.1999999999999937 +94.0000000000000000 1.1799999999999948 +94.1000000000000085 1.1799999999999948 +94.2000000000000028 1.1699999999999957 +94.3000000000000114 1.1699999999999957 +94.4000000000000057 1.1899999999999973 +94.5000000000000000 1.2099999999999989 +94.6000000000000085 1.2399999999999964 +94.7000000000000028 1.2599999999999945 +94.8000000000000114 1.2599999999999945 +94.9000000000000057 1.2599999999999945 +95.0000000000000000 1.2599999999999945 +95.1000000000000085 1.2499999999999944 +95.2000000000000028 1.2299999999999958 +95.3000000000000114 1.2199999999999962 +95.4000000000000057 1.1999999999999960 +95.5000000000000000 1.1699999999999966 +95.6000000000000085 1.1199999999999875 +95.7000000000000028 1.0499999999999929 +95.8000000000000114 0.9799999999999977 +95.9000000000000057 0.9199999999999953 +96.0000000000000000 0.8699999999999901 +96.1000000000000085 0.8299999999999963 +96.2000000000000028 0.7699999999999984 +96.3000000000000114 0.7299999999999967 +96.4000000000000057 0.7099999999999994 +96.5000000000000000 0.7099999999999994 +96.6000000000000085 0.7099999999999994 +96.7000000000000028 0.7099999999999994 +96.8000000000000114 0.7199999999999993 +96.9000000000000057 0.7299999999999993 +97.0000000000000000 0.7399999999999990 +97.1000000000000085 0.7599999999999989 +97.2000000000000028 0.7599999999999989 +97.3000000000000114 0.7499999999999984 +97.4000000000000057 0.7399999999999988 +97.5000000000000000 0.7399999999999988 +97.6000000000000085 0.7399999999999988 +97.7000000000000028 0.7499999999999998 +97.8000000000000114 0.7800000000000009 +97.9000000000000057 0.7800000000000009 +98.0000000000000000 0.7700000000000021 +98.1000000000000085 0.7600000000000031 +98.2000000000000028 0.7500000000000031 +98.3000000000000114 0.7400000000000034 +98.4000000000000057 0.7300000000000034 +98.5000000000000000 0.7400000000000027 +98.6000000000000085 0.7500000000000024 +98.7000000000000028 0.7700000000000015 +98.8000000000000114 0.8000000000000046 +98.9000000000000057 0.8200000000000014 +99.0000000000000000 0.8500000000000071 +99.1000000000000085 0.8800000000000063 +99.2000000000000028 0.9200000000000095 +99.3000000000000114 0.9500000000000104 +99.4000000000000057 0.9900000000000095 +99.5000000000000000 1.0100000000000096 +99.6000000000000085 1.0100000000000096 +99.7000000000000028 1.0000000000000093 +99.8000000000000114 1.0000000000000093 +99.9000000000000057 1.0100000000000087 +100.0000000000000000 1.0100000000000087 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[2].dat b/src/engine/tests/system/gt_data/virus_replication/X[2].dat new file mode 100644 index 00000000..562998a8 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[2].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0100000000000000 +0.5000000000000000 0.0100000000000000 +0.6000000000000001 0.0100000000000000 +0.7000000000000001 0.0200000000000000 +0.8000000000000000 0.0200000000000000 +0.9000000000000000 0.0200000000000000 +1.0000000000000000 0.0200000000000000 +1.1000000000000001 0.0300000000000000 +1.2000000000000002 0.0400000000000000 +1.3000000000000000 0.0600000000000000 +1.4000000000000001 0.0700000000000000 +1.5000000000000000 0.0900000000000000 +1.6000000000000001 0.1100000000000000 +1.7000000000000002 0.1400000000000000 +1.8000000000000000 0.1600000000000000 +1.9000000000000001 0.2000000000000000 +2.0000000000000000 0.2300000000000000 +2.1000000000000001 0.2600000000000000 +2.2000000000000002 0.2900000000000000 +2.3000000000000003 0.3099999999999999 +2.4000000000000004 0.3399999999999999 +2.5000000000000000 0.3699999999999999 +2.6000000000000001 0.3999999999999999 +2.7000000000000002 0.4299999999999999 +2.8000000000000003 0.4599999999999999 +2.9000000000000004 0.4899999999999998 +3.0000000000000000 0.5099999999999997 +3.1000000000000001 0.5399999999999995 +3.2000000000000002 0.5699999999999995 +3.3000000000000003 0.5899999999999995 +3.4000000000000004 0.6099999999999995 +3.5000000000000000 0.6299999999999996 +3.6000000000000001 0.6399999999999996 +3.7000000000000002 0.6599999999999996 +3.8000000000000003 0.6799999999999996 +3.9000000000000004 0.6999999999999996 +4.0000000000000000 0.7099999999999996 +4.1000000000000005 0.7299999999999996 +4.2000000000000002 0.7499999999999996 +4.2999999999999998 0.7699999999999995 +4.4000000000000004 0.7899999999999994 +4.5000000000000000 0.8099999999999993 +4.6000000000000005 0.8299999999999993 +4.7000000000000002 0.8499999999999993 +4.8000000000000007 0.8599999999999993 +4.9000000000000004 0.8699999999999993 +5.0000000000000000 0.8799999999999993 +5.1000000000000005 0.8899999999999993 +5.2000000000000002 0.8899999999999993 +5.3000000000000007 0.8999999999999994 +5.4000000000000004 0.9099999999999994 +5.5000000000000000 0.9199999999999994 +5.6000000000000005 0.9299999999999994 +5.7000000000000002 0.9399999999999994 +5.8000000000000007 0.9499999999999994 +5.9000000000000004 0.9599999999999994 +6.0000000000000000 0.9699999999999994 +6.1000000000000005 0.9799999999999994 +6.2000000000000002 0.9799999999999994 +6.3000000000000007 0.9899999999999994 +6.4000000000000004 1.0099999999999996 +6.5000000000000000 1.0199999999999996 +6.6000000000000005 1.0199999999999996 +6.7000000000000002 1.0299999999999996 +6.8000000000000007 1.0399999999999996 +6.9000000000000004 1.0499999999999996 +7.0000000000000000 1.0499999999999996 +7.1000000000000005 1.0599999999999996 +7.2000000000000002 1.0699999999999996 +7.3000000000000007 1.0799999999999996 +7.4000000000000004 1.0899999999999996 +7.5000000000000000 1.0899999999999996 +7.6000000000000005 1.0999999999999996 +7.7000000000000002 1.1099999999999997 +7.8000000000000007 1.1199999999999997 +7.9000000000000004 1.1299999999999997 +8.0000000000000000 1.1399999999999997 +8.0999999999999996 1.1499999999999997 +8.2000000000000011 1.1599999999999997 +8.3000000000000007 1.1699999999999997 +8.4000000000000004 1.1799999999999997 +8.5000000000000000 1.1899999999999997 +8.5999999999999996 1.1999999999999997 +8.7000000000000011 1.2099999999999997 +8.8000000000000007 1.2199999999999998 +8.9000000000000004 1.2299999999999998 +9.0000000000000000 1.2399999999999998 +9.0999999999999996 1.2499999999999998 +9.2000000000000011 1.2499999999999998 +9.3000000000000007 1.2499999999999998 +9.4000000000000004 1.2499999999999998 +9.5000000000000000 1.2499999999999998 +9.6000000000000014 1.2499999999999998 +9.7000000000000011 1.2499999999999998 +9.8000000000000007 1.2399999999999998 +9.9000000000000004 1.2399999999999998 +10.0000000000000000 1.2299999999999998 +10.1000000000000014 1.2199999999999998 +10.2000000000000011 1.2099999999999997 +10.3000000000000007 1.2099999999999997 +10.4000000000000004 1.1999999999999997 +10.5000000000000000 1.1999999999999997 +10.6000000000000014 1.1899999999999997 +10.7000000000000011 1.1899999999999997 +10.8000000000000007 1.1799999999999997 +10.9000000000000004 1.1699999999999997 +11.0000000000000000 1.1599999999999997 +11.1000000000000014 1.1499999999999997 +11.2000000000000011 1.1399999999999997 +11.3000000000000007 1.1399999999999997 +11.4000000000000004 1.1299999999999997 +11.5000000000000000 1.1199999999999997 +11.6000000000000014 1.1099999999999997 +11.7000000000000011 1.1099999999999997 +11.8000000000000007 1.1099999999999997 +11.9000000000000004 1.1099999999999997 +12.0000000000000000 1.1099999999999997 +12.1000000000000014 1.1099999999999997 +12.2000000000000011 1.1199999999999997 +12.3000000000000007 1.1299999999999997 +12.4000000000000004 1.1499999999999997 +12.5000000000000000 1.1599999999999997 +12.6000000000000014 1.1699999999999997 +12.7000000000000011 1.1899999999999997 +12.8000000000000007 1.1999999999999997 +12.9000000000000004 1.2099999999999997 +13.0000000000000000 1.2099999999999997 +13.1000000000000014 1.2199999999999998 +13.2000000000000011 1.2199999999999998 +13.3000000000000007 1.2299999999999998 +13.4000000000000004 1.2299999999999998 +13.5000000000000000 1.2299999999999998 +13.6000000000000014 1.2299999999999998 +13.7000000000000011 1.2199999999999998 +13.8000000000000007 1.2099999999999997 +13.9000000000000004 1.1999999999999997 +14.0000000000000000 1.1899999999999997 +14.1000000000000014 1.1699999999999997 +14.2000000000000011 1.1499999999999997 +14.3000000000000007 1.1299999999999997 +14.4000000000000004 1.1099999999999997 +14.5000000000000000 1.0899999999999994 +14.6000000000000014 1.0699999999999996 +14.7000000000000011 1.0399999999999998 +14.8000000000000007 1.0200000000000000 +14.9000000000000004 1.0000000000000000 +15.0000000000000000 0.9800000000000000 +15.1000000000000014 0.9600000000000003 +15.2000000000000011 0.9400000000000003 +15.3000000000000007 0.9200000000000004 +15.4000000000000004 0.9100000000000004 +15.5000000000000000 0.9000000000000004 +15.6000000000000014 0.8900000000000003 +15.7000000000000011 0.8800000000000004 +15.8000000000000007 0.8700000000000006 +15.9000000000000004 0.8500000000000006 +16.0000000000000000 0.8400000000000006 +16.1000000000000014 0.8100000000000003 +16.1999999999999993 0.7899999999999999 +16.3000000000000007 0.7700000000000000 +16.4000000000000021 0.7500000000000000 +16.5000000000000000 0.7200000000000004 +16.6000000000000014 0.7000000000000008 +16.6999999999999993 0.6800000000000010 +16.8000000000000007 0.6600000000000007 +16.9000000000000021 0.6500000000000007 +17.0000000000000000 0.6400000000000007 +17.1000000000000014 0.6300000000000006 +17.1999999999999993 0.6300000000000006 +17.3000000000000007 0.6300000000000006 +17.4000000000000021 0.6400000000000005 +17.5000000000000000 0.6500000000000006 +17.6000000000000014 0.6700000000000008 +17.6999999999999993 0.6800000000000009 +17.8000000000000007 0.7000000000000014 +17.9000000000000021 0.7200000000000014 +18.0000000000000000 0.7300000000000018 +18.1000000000000014 0.7500000000000016 +18.1999999999999993 0.7700000000000017 +18.3000000000000007 0.7900000000000017 +18.4000000000000021 0.8100000000000022 +18.5000000000000000 0.8300000000000023 +18.6000000000000014 0.8500000000000022 +18.6999999999999993 0.8700000000000021 +18.8000000000000007 0.8900000000000020 +18.9000000000000021 0.9100000000000016 +19.0000000000000000 0.9300000000000016 +19.1000000000000014 0.9500000000000021 +19.2000000000000028 0.9600000000000019 +19.3000000000000007 0.9700000000000019 +19.4000000000000021 0.9800000000000019 +19.5000000000000000 0.9900000000000019 +19.6000000000000014 0.9900000000000019 +19.7000000000000028 0.9900000000000019 +19.8000000000000007 1.0000000000000020 +19.9000000000000021 1.0000000000000020 +20.0000000000000000 1.0000000000000020 +20.1000000000000014 1.0000000000000020 +20.2000000000000028 1.0100000000000020 +20.3000000000000007 1.0100000000000020 +20.4000000000000021 1.0200000000000020 +20.5000000000000000 1.0300000000000022 +20.6000000000000014 1.0400000000000020 +20.7000000000000028 1.0400000000000020 +20.8000000000000007 1.0500000000000018 +20.9000000000000021 1.0500000000000018 +21.0000000000000000 1.0500000000000018 +21.1000000000000014 1.0500000000000018 +21.2000000000000028 1.0400000000000018 +21.3000000000000007 1.0400000000000018 +21.4000000000000021 1.0400000000000018 +21.5000000000000000 1.0300000000000018 +21.6000000000000014 1.0300000000000018 +21.7000000000000028 1.0300000000000018 +21.8000000000000007 1.0300000000000018 +21.9000000000000021 1.0300000000000018 +22.0000000000000000 1.0300000000000018 +22.1000000000000014 1.0300000000000018 +22.2000000000000028 1.0300000000000018 +22.3000000000000007 1.0300000000000018 +22.4000000000000021 1.0300000000000018 +22.5000000000000000 1.0400000000000018 +22.6000000000000014 1.0500000000000018 +22.7000000000000028 1.0600000000000021 +22.8000000000000007 1.0800000000000018 +22.9000000000000021 1.1000000000000016 +23.0000000000000000 1.1200000000000012 +23.1000000000000014 1.1400000000000015 +23.2000000000000028 1.1500000000000017 +23.3000000000000007 1.1600000000000015 +23.4000000000000021 1.1700000000000015 +23.5000000000000000 1.1700000000000015 +23.6000000000000014 1.1700000000000015 +23.7000000000000028 1.1700000000000015 +23.8000000000000007 1.1700000000000015 +23.9000000000000021 1.1600000000000017 +24.0000000000000000 1.1500000000000019 +24.1000000000000014 1.1300000000000019 +24.2000000000000028 1.1100000000000021 +24.3000000000000007 1.0900000000000023 +24.4000000000000021 1.0700000000000025 +24.5000000000000000 1.0500000000000023 +24.6000000000000014 1.0300000000000020 +24.7000000000000028 1.0000000000000029 +24.8000000000000007 0.9800000000000030 +24.9000000000000021 0.9700000000000031 +25.0000000000000000 0.9500000000000030 +25.1000000000000014 0.9300000000000030 +25.2000000000000028 0.9100000000000029 +25.3000000000000007 0.9000000000000027 +25.4000000000000021 0.8800000000000032 +25.5000000000000000 0.8700000000000031 +25.6000000000000014 0.8600000000000032 +25.7000000000000028 0.8500000000000033 +25.8000000000000007 0.8400000000000034 +25.9000000000000021 0.8300000000000035 +26.0000000000000000 0.8200000000000035 +26.1000000000000014 0.8200000000000035 +26.2000000000000028 0.8100000000000036 +26.3000000000000007 0.8000000000000036 +26.4000000000000021 0.8000000000000036 +26.5000000000000000 0.8000000000000036 +26.6000000000000014 0.8000000000000036 +26.7000000000000028 0.8000000000000036 +26.8000000000000007 0.8100000000000035 +26.9000000000000021 0.8200000000000035 +27.0000000000000000 0.8300000000000035 +27.1000000000000014 0.8400000000000034 +27.2000000000000028 0.8500000000000036 +27.3000000000000007 0.8600000000000035 +27.4000000000000021 0.8700000000000037 +27.5000000000000000 0.8900000000000037 +27.6000000000000014 0.9000000000000036 +27.7000000000000028 0.9100000000000034 +27.8000000000000007 0.9200000000000034 +27.9000000000000021 0.9300000000000036 +28.0000000000000000 0.9400000000000036 +28.1000000000000014 0.9500000000000037 +28.2000000000000028 0.9500000000000037 +28.3000000000000007 0.9500000000000037 +28.4000000000000021 0.9500000000000037 +28.5000000000000000 0.9600000000000037 +28.6000000000000014 0.9600000000000037 +28.7000000000000028 0.9600000000000037 +28.8000000000000007 0.9600000000000037 +28.9000000000000021 0.9600000000000037 +29.0000000000000000 0.9600000000000037 +29.1000000000000014 0.9600000000000037 +29.2000000000000028 0.9500000000000038 +29.3000000000000007 0.9400000000000039 +29.4000000000000021 0.9300000000000037 +29.5000000000000000 0.9100000000000039 +29.6000000000000014 0.9000000000000038 +29.7000000000000028 0.8900000000000036 +29.8000000000000007 0.8700000000000035 +29.9000000000000021 0.8600000000000034 +30.0000000000000000 0.8500000000000036 +30.1000000000000014 0.8300000000000034 +30.2000000000000028 0.8300000000000034 +30.3000000000000007 0.8200000000000035 +30.4000000000000021 0.8100000000000034 +30.5000000000000000 0.8000000000000034 +30.6000000000000014 0.7900000000000034 +30.7000000000000028 0.7800000000000034 +30.8000000000000007 0.7700000000000032 +30.9000000000000021 0.7600000000000031 +31.0000000000000000 0.7500000000000031 +31.1000000000000014 0.7400000000000032 +31.2000000000000028 0.7300000000000033 +31.3000000000000007 0.7200000000000032 +31.4000000000000021 0.7100000000000031 +31.5000000000000000 0.7000000000000031 +31.6000000000000014 0.6900000000000031 +31.7000000000000028 0.6800000000000030 +31.8000000000000007 0.6700000000000030 +31.9000000000000021 0.6600000000000029 +32.0000000000000000 0.6500000000000030 +32.1000000000000014 0.6400000000000033 +32.2000000000000028 0.6400000000000033 +32.3000000000000043 0.6300000000000031 +32.3999999999999986 0.6200000000000030 +32.5000000000000000 0.6200000000000030 +32.6000000000000014 0.6100000000000033 +32.7000000000000028 0.6000000000000033 +32.8000000000000043 0.5900000000000034 +32.8999999999999986 0.5800000000000037 +33.0000000000000000 0.5600000000000033 +33.1000000000000014 0.5500000000000034 +33.2000000000000028 0.5400000000000036 +33.3000000000000043 0.5300000000000036 +33.3999999999999986 0.5200000000000039 +33.5000000000000000 0.5100000000000038 +33.6000000000000014 0.5000000000000036 +33.7000000000000028 0.5000000000000036 +33.8000000000000043 0.4900000000000034 +33.8999999999999986 0.4900000000000034 +34.0000000000000000 0.4800000000000033 +34.1000000000000014 0.4800000000000033 +34.2000000000000028 0.4800000000000033 +34.3000000000000043 0.4800000000000033 +34.3999999999999986 0.4800000000000033 +34.5000000000000000 0.4900000000000032 +34.6000000000000014 0.5000000000000032 +34.7000000000000028 0.5200000000000040 +34.8000000000000043 0.5400000000000041 +34.8999999999999986 0.5600000000000031 +35.0000000000000000 0.5900000000000029 +35.1000000000000014 0.6200000000000018 +35.2000000000000028 0.6500000000000030 +35.3000000000000043 0.6900000000000023 +35.3999999999999986 0.7200000000000039 +35.5000000000000000 0.7600000000000035 +35.6000000000000014 0.8000000000000062 +35.7000000000000028 0.8400000000000062 +35.8000000000000043 0.8700000000000052 +35.8999999999999986 0.9100000000000040 +36.0000000000000000 0.9400000000000029 +36.1000000000000014 0.9700000000000015 +36.2000000000000028 1.0000000000000016 +36.3000000000000043 1.0200000000000007 +36.3999999999999986 1.0400000000000005 +36.5000000000000000 1.0500000000000000 +36.6000000000000014 1.0600000000000003 +36.7000000000000028 1.0700000000000001 +36.8000000000000043 1.0800000000000001 +36.8999999999999986 1.0800000000000001 +37.0000000000000000 1.0800000000000001 +37.1000000000000014 1.0800000000000001 +37.2000000000000028 1.0800000000000001 +37.3000000000000043 1.0800000000000001 +37.3999999999999986 1.0700000000000003 +37.5000000000000000 1.0600000000000005 +37.6000000000000014 1.0400000000000009 +37.7000000000000028 1.0300000000000011 +37.8000000000000043 1.0100000000000018 +37.8999999999999986 0.9900000000000019 +38.0000000000000000 0.9600000000000012 +38.1000000000000014 0.9400000000000014 +38.2000000000000028 0.9200000000000013 +38.3000000000000043 0.9000000000000004 +38.4000000000000057 0.8900000000000003 +38.5000000000000000 0.8699999999999997 +38.6000000000000014 0.8599999999999998 +38.7000000000000028 0.8499999999999998 +38.8000000000000043 0.8499999999999998 +38.9000000000000057 0.8499999999999998 +39.0000000000000000 0.8499999999999998 +39.1000000000000014 0.8599999999999997 +39.2000000000000028 0.8700000000000000 +39.3000000000000043 0.8899999999999996 +39.4000000000000057 0.8999999999999992 +39.5000000000000000 0.9099999999999988 +39.6000000000000014 0.9199999999999987 +39.7000000000000028 0.9399999999999984 +39.8000000000000043 0.9599999999999990 +39.9000000000000057 0.9699999999999984 +40.0000000000000000 0.9899999999999987 +40.1000000000000014 1.0099999999999985 +40.2000000000000028 1.0299999999999978 +40.3000000000000043 1.0499999999999972 +40.4000000000000057 1.0699999999999981 +40.5000000000000000 1.0899999999999976 +40.6000000000000014 1.0999999999999972 +40.7000000000000028 1.1199999999999968 +40.8000000000000043 1.1299999999999972 +40.9000000000000057 1.1499999999999977 +41.0000000000000000 1.1599999999999977 +41.1000000000000014 1.1599999999999977 +41.2000000000000028 1.1699999999999977 +41.3000000000000043 1.1699999999999977 +41.4000000000000057 1.1699999999999977 +41.5000000000000000 1.1599999999999979 +41.6000000000000014 1.1499999999999977 +41.7000000000000028 1.1399999999999972 +41.8000000000000043 1.1299999999999972 +41.9000000000000057 1.1299999999999972 +42.0000000000000000 1.1199999999999972 +42.1000000000000014 1.1199999999999972 +42.2000000000000028 1.1099999999999972 +42.3000000000000043 1.1099999999999972 +42.4000000000000057 1.0999999999999974 +42.5000000000000000 1.0999999999999974 +42.6000000000000014 1.0899999999999974 +42.7000000000000028 1.0899999999999974 +42.8000000000000043 1.0799999999999972 +42.9000000000000057 1.0799999999999972 +43.0000000000000000 1.0699999999999972 +43.1000000000000014 1.0699999999999972 +43.2000000000000028 1.0599999999999972 +43.3000000000000043 1.0599999999999972 +43.4000000000000057 1.0499999999999972 +43.5000000000000000 1.0499999999999972 +43.6000000000000014 1.0399999999999971 +43.7000000000000028 1.0399999999999971 +43.8000000000000043 1.0399999999999971 +43.9000000000000057 1.0399999999999971 +44.0000000000000000 1.0399999999999971 +44.1000000000000014 1.0499999999999974 +44.2000000000000028 1.0499999999999974 +44.3000000000000043 1.0599999999999976 +44.4000000000000057 1.0599999999999976 +44.5000000000000000 1.0699999999999976 +44.6000000000000014 1.0699999999999976 +44.7000000000000028 1.0699999999999976 +44.8000000000000043 1.0699999999999976 +44.9000000000000057 1.0599999999999978 +45.0000000000000000 1.0499999999999980 +45.1000000000000014 1.0299999999999978 +45.2000000000000028 1.0199999999999982 +45.3000000000000043 0.9999999999999990 +45.4000000000000057 0.9899999999999992 +45.5000000000000000 0.9799999999999991 +45.6000000000000014 0.9799999999999991 +45.7000000000000028 0.9799999999999991 +45.8000000000000043 0.9799999999999991 +45.9000000000000057 0.9799999999999991 +46.0000000000000000 0.9799999999999991 +46.1000000000000014 0.9999999999999990 +46.2000000000000028 1.0199999999999991 +46.3000000000000043 1.0399999999999983 +46.4000000000000057 1.0699999999999976 +46.5000000000000000 1.0999999999999979 +46.6000000000000014 1.1299999999999986 +46.7000000000000028 1.1599999999999997 +46.8000000000000043 1.1900000000000004 +46.9000000000000057 1.2200000000000009 +47.0000000000000000 1.2400000000000015 +47.1000000000000014 1.2600000000000020 +47.2000000000000028 1.2800000000000009 +47.3000000000000043 1.2900000000000007 +47.4000000000000057 1.3100000000000007 +47.5000000000000000 1.3200000000000005 +47.6000000000000014 1.3200000000000005 +47.7000000000000028 1.3300000000000007 +47.8000000000000043 1.3300000000000007 +47.9000000000000057 1.3300000000000007 +48.0000000000000000 1.3300000000000007 +48.1000000000000014 1.3300000000000007 +48.2000000000000028 1.3200000000000007 +48.3000000000000043 1.3100000000000007 +48.4000000000000057 1.3000000000000007 +48.5000000000000000 1.3000000000000007 +48.6000000000000014 1.2900000000000007 +48.7000000000000028 1.2900000000000007 +48.8000000000000043 1.2900000000000007 +48.9000000000000057 1.2900000000000007 +49.0000000000000000 1.2900000000000007 +49.1000000000000014 1.2800000000000005 +49.2000000000000028 1.2800000000000005 +49.3000000000000043 1.2700000000000007 +49.4000000000000057 1.2700000000000007 +49.5000000000000000 1.2600000000000009 +49.6000000000000014 1.2500000000000007 +49.7000000000000028 1.2500000000000007 +49.8000000000000043 1.2400000000000004 +49.9000000000000057 1.2400000000000004 +50.0000000000000000 1.2400000000000004 +50.1000000000000014 1.2400000000000004 +50.2000000000000028 1.2400000000000004 +50.3000000000000043 1.2400000000000004 +50.4000000000000057 1.2400000000000004 +50.5000000000000000 1.2400000000000004 +50.6000000000000014 1.2400000000000004 +50.7000000000000028 1.2400000000000004 +50.8000000000000043 1.2500000000000007 +50.9000000000000057 1.2600000000000007 +51.0000000000000000 1.2700000000000005 +51.1000000000000014 1.2800000000000002 +51.2000000000000028 1.2800000000000002 +51.3000000000000043 1.2900000000000003 +51.4000000000000057 1.3000000000000000 +51.5000000000000000 1.3100000000000001 +51.6000000000000014 1.3199999999999998 +51.7000000000000028 1.3199999999999998 +51.8000000000000043 1.3299999999999998 +51.9000000000000057 1.3299999999999998 +52.0000000000000000 1.3299999999999998 +52.1000000000000014 1.3299999999999998 +52.2000000000000028 1.3200000000000001 +52.3000000000000043 1.3100000000000001 +52.4000000000000057 1.3000000000000000 +52.5000000000000000 1.2800000000000007 +52.6000000000000014 1.2700000000000002 +52.7000000000000028 1.2499999999999996 +52.8000000000000043 1.2299999999999989 +52.9000000000000057 1.2099999999999993 +53.0000000000000000 1.1899999999999991 +53.1000000000000014 1.1599999999999977 +53.2000000000000028 1.1399999999999979 +53.3000000000000043 1.1099999999999977 +53.4000000000000057 1.0899999999999967 +53.5000000000000000 1.0699999999999972 +53.6000000000000014 1.0499999999999976 +53.7000000000000028 1.0299999999999978 +53.8000000000000043 1.0099999999999976 +53.9000000000000057 0.9899999999999977 +54.0000000000000000 0.9699999999999966 +54.1000000000000014 0.9499999999999964 +54.2000000000000028 0.9299999999999957 +54.3000000000000043 0.9099999999999958 +54.4000000000000057 0.8899999999999956 +54.5000000000000000 0.8599999999999951 +54.6000000000000014 0.8399999999999939 +54.7000000000000028 0.8199999999999945 +54.8000000000000043 0.7899999999999945 +54.9000000000000057 0.7699999999999942 +55.0000000000000000 0.7499999999999949 +55.1000000000000014 0.7199999999999955 +55.2000000000000028 0.6999999999999966 +55.3000000000000043 0.6799999999999964 +55.4000000000000057 0.6699999999999960 +55.5000000000000000 0.6499999999999959 +55.6000000000000014 0.6399999999999958 +55.7000000000000028 0.6299999999999960 +55.8000000000000043 0.6199999999999960 +55.9000000000000057 0.6099999999999963 +56.0000000000000000 0.6099999999999963 +56.1000000000000014 0.5999999999999963 +56.2000000000000028 0.5999999999999963 +56.3000000000000043 0.5999999999999963 +56.4000000000000057 0.6099999999999962 +56.5000000000000000 0.6099999999999962 +56.6000000000000014 0.6099999999999962 +56.7000000000000028 0.6199999999999962 +56.8000000000000043 0.6199999999999962 +56.9000000000000057 0.6199999999999962 +57.0000000000000000 0.6199999999999962 +57.1000000000000014 0.6199999999999962 +57.2000000000000028 0.6199999999999962 +57.3000000000000043 0.6199999999999962 +57.4000000000000057 0.6199999999999962 +57.5000000000000000 0.6199999999999962 +57.6000000000000014 0.6099999999999961 +57.7000000000000028 0.6099999999999961 +57.8000000000000043 0.6099999999999961 +57.9000000000000057 0.6099999999999961 +58.0000000000000000 0.6199999999999961 +58.1000000000000014 0.6299999999999962 +58.2000000000000028 0.6299999999999962 +58.3000000000000043 0.6499999999999960 +58.4000000000000057 0.6599999999999964 +58.5000000000000000 0.6599999999999964 +58.6000000000000014 0.6699999999999966 +58.7000000000000028 0.6799999999999965 +58.8000000000000043 0.6899999999999968 +58.9000000000000057 0.6999999999999966 +59.0000000000000000 0.7199999999999965 +59.1000000000000014 0.7399999999999968 +59.2000000000000028 0.7499999999999970 +59.3000000000000043 0.7699999999999969 +59.4000000000000057 0.7899999999999966 +59.5000000000000000 0.8099999999999968 +59.6000000000000014 0.8299999999999969 +59.7000000000000028 0.8499999999999975 +59.8000000000000043 0.8699999999999984 +59.9000000000000057 0.8899999999999997 +60.0000000000000000 0.9099999999999998 +60.1000000000000014 0.9200000000000004 +60.2000000000000028 0.9400000000000004 +60.3000000000000043 0.9500000000000005 +60.4000000000000057 0.9600000000000007 +60.5000000000000000 0.9700000000000008 +60.6000000000000014 0.9900000000000007 +60.7000000000000028 1.0000000000000007 +60.8000000000000043 1.0100000000000007 +60.9000000000000057 1.0200000000000009 +61.0000000000000000 1.0300000000000009 +61.1000000000000014 1.0400000000000009 +61.2000000000000028 1.0400000000000009 +61.3000000000000043 1.0400000000000009 +61.4000000000000057 1.0400000000000009 +61.5000000000000000 1.0400000000000009 +61.6000000000000014 1.0400000000000009 +61.7000000000000028 1.0400000000000009 +61.8000000000000043 1.0400000000000009 +61.9000000000000057 1.0300000000000011 +62.0000000000000000 1.0200000000000009 +62.1000000000000014 1.0200000000000009 +62.2000000000000028 1.0100000000000007 +62.3000000000000043 1.0000000000000004 +62.4000000000000057 1.0000000000000004 +62.5000000000000000 1.0000000000000004 +62.6000000000000014 0.9900000000000004 +62.7000000000000028 0.9900000000000004 +62.8000000000000043 0.9800000000000003 +62.9000000000000057 0.9700000000000006 +63.0000000000000000 0.9500000000000012 +63.1000000000000014 0.9400000000000015 +63.2000000000000028 0.9300000000000019 +63.3000000000000043 0.9200000000000020 +63.4000000000000057 0.9000000000000021 +63.5000000000000000 0.9000000000000021 +63.6000000000000014 0.8900000000000020 +63.7000000000000028 0.8800000000000020 +63.8000000000000043 0.8800000000000020 +63.9000000000000057 0.8800000000000020 +64.0000000000000000 0.8800000000000020 +64.1000000000000085 0.8800000000000020 +64.2000000000000028 0.8800000000000020 +64.2999999999999972 0.8800000000000020 +64.4000000000000057 0.8900000000000022 +64.5000000000000000 0.8900000000000022 +64.6000000000000085 0.9000000000000018 +64.7000000000000028 0.9100000000000011 +64.7999999999999972 0.9200000000000016 +64.9000000000000057 0.9300000000000013 +65.0000000000000000 0.9400000000000014 +65.1000000000000085 0.9400000000000014 +65.2000000000000028 0.9400000000000014 +65.2999999999999972 0.9400000000000014 +65.4000000000000057 0.9400000000000014 +65.5000000000000000 0.9400000000000014 +65.6000000000000085 0.9400000000000014 +65.7000000000000028 0.9300000000000019 +65.7999999999999972 0.9200000000000025 +65.9000000000000057 0.9000000000000040 +66.0000000000000000 0.8800000000000027 +66.1000000000000085 0.8600000000000005 +66.2000000000000028 0.8299999999999992 +66.2999999999999972 0.8099999999999979 +66.4000000000000057 0.7899999999999988 +66.5000000000000000 0.7599999999999992 +66.6000000000000085 0.7399999999999979 +66.7000000000000028 0.7099999999999986 +66.7999999999999972 0.6900000000000001 +66.9000000000000057 0.6599999999999993 +67.0000000000000000 0.6399999999999980 +67.1000000000000085 0.6199999999999997 +67.2000000000000028 0.5999999999999989 +67.2999999999999972 0.5799999999999996 +67.4000000000000057 0.5600000000000001 +67.5000000000000000 0.5400000000000008 +67.6000000000000085 0.5300000000000014 +67.7000000000000028 0.5200000000000021 +67.7999999999999972 0.5100000000000026 +67.9000000000000057 0.5100000000000026 +68.0000000000000000 0.5000000000000027 +68.1000000000000085 0.5000000000000027 +68.2000000000000028 0.5000000000000027 +68.2999999999999972 0.5000000000000027 +68.4000000000000057 0.5000000000000027 +68.5000000000000000 0.5000000000000027 +68.6000000000000085 0.5000000000000027 +68.7000000000000028 0.5000000000000027 +68.7999999999999972 0.5000000000000027 +68.9000000000000057 0.5000000000000027 +69.0000000000000000 0.4900000000000027 +69.1000000000000085 0.4900000000000027 +69.2000000000000028 0.4900000000000027 +69.2999999999999972 0.4900000000000027 +69.4000000000000057 0.4900000000000027 +69.5000000000000000 0.5000000000000029 +69.6000000000000085 0.5000000000000029 +69.7000000000000028 0.5100000000000028 +69.7999999999999972 0.5200000000000027 +69.9000000000000057 0.5300000000000024 +70.0000000000000000 0.5400000000000024 +70.1000000000000085 0.5500000000000024 +70.2000000000000028 0.5700000000000015 +70.2999999999999972 0.5800000000000018 +70.4000000000000057 0.6000000000000006 +70.5000000000000000 0.6200000000000017 +70.6000000000000085 0.6300000000000014 +70.7000000000000028 0.6500000000000027 +70.7999999999999972 0.6700000000000023 +70.9000000000000057 0.6900000000000005 +71.0000000000000000 0.7099999999999993 +71.1000000000000085 0.7299999999999992 +71.2000000000000028 0.7499999999999984 +71.2999999999999972 0.7700000000000010 +71.4000000000000057 0.7999999999999998 +71.5000000000000000 0.8199999999999998 +71.6000000000000085 0.8399999999999986 +71.7000000000000028 0.8699999999999980 +71.7999999999999972 0.8999999999999984 +71.9000000000000057 0.9200000000000000 +72.0000000000000000 0.9500000000000008 +72.1000000000000085 0.9799999999999970 +72.2000000000000028 0.9999999999999991 +72.2999999999999972 1.0299999999999969 +72.4000000000000057 1.0499999999999983 +72.5000000000000000 1.0699999999999958 +72.6000000000000085 1.0799999999999954 +72.7000000000000028 1.0899999999999950 +72.7999999999999972 1.0999999999999950 +72.9000000000000057 1.0999999999999950 +73.0000000000000000 1.0999999999999950 +73.1000000000000085 1.0999999999999950 +73.2000000000000028 1.0999999999999950 +73.2999999999999972 1.0999999999999950 +73.4000000000000057 1.0999999999999950 +73.5000000000000000 1.0999999999999950 +73.6000000000000085 1.0999999999999950 +73.7000000000000028 1.0999999999999950 +73.7999999999999972 1.0999999999999950 +73.9000000000000057 1.0999999999999950 +74.0000000000000000 1.0999999999999950 +74.1000000000000085 1.0999999999999950 +74.2000000000000028 1.0999999999999950 +74.2999999999999972 1.0999999999999950 +74.4000000000000057 1.0999999999999950 +74.5000000000000000 1.0999999999999950 +74.6000000000000085 1.0999999999999950 +74.7000000000000028 1.0999999999999950 +74.7999999999999972 1.0999999999999950 +74.9000000000000057 1.0999999999999950 +75.0000000000000000 1.0999999999999950 +75.1000000000000085 1.1099999999999948 +75.2000000000000028 1.1299999999999935 +75.2999999999999972 1.1499999999999948 +75.4000000000000057 1.1699999999999942 +75.5000000000000000 1.1899999999999915 +75.6000000000000085 1.2099999999999895 +75.7000000000000028 1.2299999999999882 +75.7999999999999972 1.2499999999999873 +75.9000000000000057 1.2799999999999863 +76.0000000000000000 1.2999999999999878 +76.1000000000000085 1.3199999999999878 +76.2000000000000028 1.3399999999999870 +76.2999999999999972 1.3599999999999866 +76.4000000000000057 1.3699999999999868 +76.5000000000000000 1.3799999999999870 +76.6000000000000085 1.3799999999999870 +76.7000000000000028 1.3799999999999870 +76.8000000000000114 1.3799999999999870 +76.9000000000000057 1.3699999999999868 +77.0000000000000000 1.3599999999999868 +77.1000000000000085 1.3499999999999872 +77.2000000000000028 1.3499999999999872 +77.3000000000000114 1.3399999999999870 +77.4000000000000057 1.3399999999999870 +77.5000000000000000 1.3399999999999870 +77.6000000000000085 1.3399999999999870 +77.7000000000000028 1.3399999999999870 +77.8000000000000114 1.3499999999999868 +77.9000000000000057 1.3499999999999868 +78.0000000000000000 1.3499999999999868 +78.1000000000000085 1.3599999999999868 +78.2000000000000028 1.3599999999999868 +78.3000000000000114 1.3599999999999868 +78.4000000000000057 1.3599999999999868 +78.5000000000000000 1.3599999999999868 +78.6000000000000085 1.3599999999999868 +78.7000000000000028 1.3599999999999868 +78.8000000000000114 1.3599999999999868 +78.9000000000000057 1.3599999999999868 +79.0000000000000000 1.3599999999999868 +79.1000000000000085 1.3499999999999868 +79.2000000000000028 1.3399999999999872 +79.3000000000000114 1.3299999999999863 +79.4000000000000057 1.3199999999999863 +79.5000000000000000 1.2999999999999876 +79.6000000000000085 1.2899999999999872 +79.7000000000000028 1.2799999999999874 +79.8000000000000114 1.2699999999999878 +79.9000000000000057 1.2599999999999882 +80.0000000000000000 1.2399999999999884 +80.1000000000000085 1.2299999999999878 +80.2000000000000028 1.2199999999999884 +80.3000000000000114 1.2099999999999889 +80.4000000000000057 1.2099999999999889 +80.5000000000000000 1.1999999999999889 +80.6000000000000085 1.1999999999999889 +80.7000000000000028 1.1999999999999889 +80.8000000000000114 1.1999999999999889 +80.9000000000000057 1.1999999999999889 +81.0000000000000000 1.1999999999999889 +81.1000000000000085 1.1999999999999889 +81.2000000000000028 1.1999999999999889 +81.3000000000000114 1.1799999999999893 +81.4000000000000057 1.1699999999999886 +81.5000000000000000 1.1599999999999895 +81.6000000000000085 1.1499999999999890 +81.7000000000000028 1.1299999999999901 +81.8000000000000114 1.1099999999999923 +81.9000000000000057 1.0899999999999930 +82.0000000000000000 1.0699999999999925 +82.1000000000000085 1.0499999999999945 +82.2000000000000028 1.0199999999999969 +82.3000000000000114 0.9999999999999979 +82.4000000000000057 0.9799999999999971 +82.5000000000000000 0.9499999999999966 +82.6000000000000085 0.9299999999999947 +82.7000000000000028 0.9099999999999953 +82.8000000000000114 0.8799999999999952 +82.9000000000000057 0.8599999999999963 +83.0000000000000000 0.8299999999999959 +83.1000000000000085 0.7999999999999966 +83.2000000000000028 0.7799999999999983 +83.3000000000000114 0.7500000000000019 +83.4000000000000057 0.7299999999999998 +83.5000000000000000 0.7000000000000002 +83.6000000000000085 0.6900000000000007 +83.7000000000000028 0.6800000000000006 +83.8000000000000114 0.6700000000000007 +83.9000000000000057 0.6700000000000007 +84.0000000000000000 0.6700000000000007 +84.1000000000000085 0.6700000000000007 +84.2000000000000028 0.6800000000000010 +84.3000000000000114 0.6900000000000004 +84.4000000000000057 0.6999999999999998 +84.5000000000000000 0.7100000000000004 +84.6000000000000085 0.7200000000000010 +84.7000000000000028 0.7300000000000005 +84.8000000000000114 0.7400000000000010 +84.9000000000000057 0.7400000000000010 +85.0000000000000000 0.7500000000000012 +85.1000000000000085 0.7500000000000012 +85.2000000000000028 0.7500000000000012 +85.3000000000000114 0.7500000000000012 +85.4000000000000057 0.7500000000000012 +85.5000000000000000 0.7600000000000010 +85.6000000000000085 0.7600000000000010 +85.7000000000000028 0.7700000000000014 +85.8000000000000114 0.7700000000000014 +85.9000000000000057 0.7800000000000012 +86.0000000000000000 0.7800000000000012 +86.1000000000000085 0.7900000000000014 +86.2000000000000028 0.7900000000000014 +86.3000000000000114 0.8000000000000013 +86.4000000000000057 0.8000000000000013 +86.5000000000000000 0.8000000000000013 +86.6000000000000085 0.8100000000000016 +86.7000000000000028 0.8200000000000016 +86.8000000000000114 0.8300000000000007 +86.9000000000000057 0.8400000000000010 +87.0000000000000000 0.8600000000000007 +87.1000000000000085 0.8800000000000023 +87.2000000000000028 0.8900000000000019 +87.3000000000000114 0.9100000000000003 +87.4000000000000057 0.9400000000000005 +87.5000000000000000 0.9599999999999995 +87.6000000000000085 0.9799999999999982 +87.7000000000000028 0.9999999999999984 +87.8000000000000114 1.0199999999999985 +87.9000000000000057 1.0499999999999994 +88.0000000000000000 1.0699999999999996 +88.1000000000000085 1.0899999999999996 +88.2000000000000028 1.1000000000000001 +88.3000000000000114 1.1200000000000010 +88.4000000000000057 1.1299999999999999 +88.5000000000000000 1.1499999999999995 +88.6000000000000085 1.1600000000000001 +88.7000000000000028 1.1699999999999995 +88.8000000000000114 1.1899999999999993 +88.9000000000000057 1.1999999999999984 +89.0000000000000000 1.2199999999999982 +89.1000000000000085 1.2299999999999980 +89.2000000000000028 1.2399999999999973 +89.3000000000000114 1.2499999999999976 +89.4000000000000057 1.2499999999999976 +89.5000000000000000 1.2499999999999976 +89.6000000000000085 1.2499999999999976 +89.7000000000000028 1.2499999999999976 +89.8000000000000114 1.2399999999999971 +89.9000000000000057 1.2399999999999971 +90.0000000000000000 1.2299999999999971 +90.1000000000000085 1.2299999999999971 +90.2000000000000028 1.2299999999999971 +90.3000000000000114 1.2299999999999971 +90.4000000000000057 1.2299999999999971 +90.5000000000000000 1.2199999999999971 +90.6000000000000085 1.2199999999999971 +90.7000000000000028 1.2199999999999971 +90.8000000000000114 1.2099999999999971 +90.9000000000000057 1.2099999999999971 +91.0000000000000000 1.1999999999999971 +91.1000000000000085 1.1899999999999968 +91.2000000000000028 1.1699999999999964 +91.3000000000000114 1.1599999999999966 +91.4000000000000057 1.1499999999999968 +91.5000000000000000 1.1299999999999955 +91.6000000000000085 1.1199999999999950 +91.7000000000000028 1.0999999999999956 +91.8000000000000114 1.0899999999999954 +91.9000000000000057 1.0699999999999956 +92.0000000000000000 1.0599999999999956 +92.1000000000000085 1.0399999999999967 +92.2000000000000028 1.0199999999999947 +92.3000000000000114 0.9999999999999964 +92.4000000000000057 0.9799999999999960 +92.5000000000000000 0.9699999999999950 +92.6000000000000085 0.9499999999999946 +92.7000000000000028 0.9399999999999950 +92.8000000000000114 0.9299999999999954 +92.9000000000000057 0.9299999999999954 +93.0000000000000000 0.9299999999999954 +93.1000000000000085 0.9399999999999945 +93.2000000000000028 0.9499999999999937 +93.3000000000000114 0.9699999999999931 +93.4000000000000057 0.9899999999999912 +93.5000000000000000 1.0099999999999902 +93.6000000000000085 1.0299999999999907 +93.7000000000000028 1.0399999999999912 +93.8000000000000114 1.0599999999999907 +93.9000000000000057 1.0699999999999903 +94.0000000000000000 1.0899999999999912 +94.1000000000000085 1.0999999999999912 +94.2000000000000028 1.0999999999999912 +94.3000000000000114 1.1099999999999914 +94.4000000000000057 1.1199999999999917 +94.5000000000000000 1.1199999999999917 +94.6000000000000085 1.1299999999999921 +94.7000000000000028 1.1399999999999930 +94.8000000000000114 1.1599999999999937 +94.9000000000000057 1.1699999999999933 +95.0000000000000000 1.1699999999999933 +95.1000000000000085 1.1799999999999937 +95.2000000000000028 1.1899999999999942 +95.3000000000000114 1.1899999999999942 +95.4000000000000057 1.1899999999999942 +95.5000000000000000 1.1899999999999942 +95.6000000000000085 1.1899999999999942 +95.7000000000000028 1.1899999999999942 +95.8000000000000114 1.1699999999999939 +95.9000000000000057 1.1499999999999937 +96.0000000000000000 1.1299999999999912 +96.1000000000000085 1.0999999999999939 +96.2000000000000028 1.0699999999999941 +96.3000000000000114 1.0399999999999932 +96.4000000000000057 1.0099999999999942 +96.5000000000000000 0.9799999999999953 +96.6000000000000085 0.9599999999999967 +96.7000000000000028 0.9299999999999951 +96.8000000000000114 0.9099999999999943 +96.9000000000000057 0.8899999999999937 +97.0000000000000000 0.8799999999999940 +97.1000000000000085 0.8699999999999936 +97.2000000000000028 0.8599999999999933 +97.3000000000000114 0.8499999999999930 +97.4000000000000057 0.8399999999999934 +97.5000000000000000 0.8299999999999937 +97.6000000000000085 0.8199999999999941 +97.7000000000000028 0.8099999999999935 +97.8000000000000114 0.8099999999999935 +97.9000000000000057 0.7999999999999937 +98.0000000000000000 0.7999999999999937 +98.1000000000000085 0.7999999999999937 +98.2000000000000028 0.7899999999999936 +98.3000000000000114 0.7899999999999936 +98.4000000000000057 0.7799999999999933 +98.5000000000000000 0.7799999999999933 +98.6000000000000085 0.7799999999999933 +98.7000000000000028 0.7699999999999934 +98.8000000000000114 0.7699999999999934 +98.9000000000000057 0.7699999999999934 +99.0000000000000000 0.7799999999999931 +99.1000000000000085 0.7799999999999931 +99.2000000000000028 0.7999999999999934 +99.3000000000000114 0.8099999999999932 +99.4000000000000057 0.8199999999999926 +99.5000000000000000 0.8399999999999925 +99.6000000000000085 0.8599999999999932 +99.7000000000000028 0.8699999999999934 +99.8000000000000114 0.8799999999999932 +99.9000000000000057 0.8899999999999940 +100.0000000000000000 0.9099999999999941 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[3].dat b/src/engine/tests/system/gt_data/virus_replication/X[3].dat new file mode 100644 index 00000000..87b3fed9 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[3].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0100000000000000 +1.2000000000000002 0.0100000000000000 +1.3000000000000000 0.0100000000000000 +1.4000000000000001 0.0200000000000000 +1.5000000000000000 0.0200000000000000 +1.6000000000000001 0.0300000000000000 +1.7000000000000002 0.0400000000000000 +1.8000000000000000 0.0500000000000000 +1.9000000000000001 0.0600000000000000 +2.0000000000000000 0.0800000000000000 +2.1000000000000001 0.0900000000000000 +2.2000000000000002 0.1100000000000001 +2.3000000000000003 0.1300000000000001 +2.4000000000000004 0.1500000000000000 +2.5000000000000000 0.1700000000000001 +2.6000000000000001 0.1900000000000001 +2.7000000000000002 0.2100000000000001 +2.8000000000000003 0.2300000000000001 +2.9000000000000004 0.2500000000000002 +3.0000000000000000 0.2800000000000002 +3.1000000000000001 0.3000000000000003 +3.2000000000000002 0.3200000000000002 +3.3000000000000003 0.3500000000000003 +3.4000000000000004 0.3700000000000003 +3.5000000000000000 0.4000000000000002 +3.6000000000000001 0.4200000000000003 +3.7000000000000002 0.4400000000000002 +3.8000000000000003 0.4600000000000002 +3.9000000000000004 0.4800000000000003 +4.0000000000000000 0.5100000000000003 +4.1000000000000005 0.5300000000000002 +4.2000000000000002 0.5500000000000004 +4.2999999999999998 0.5700000000000003 +4.4000000000000004 0.5900000000000002 +4.5000000000000000 0.6100000000000002 +4.6000000000000005 0.6300000000000002 +4.7000000000000002 0.6500000000000000 +4.8000000000000007 0.6700000000000000 +4.9000000000000004 0.6900000000000002 +5.0000000000000000 0.7000000000000001 +5.1000000000000005 0.7199999999999999 +5.2000000000000002 0.7399999999999999 +5.3000000000000007 0.7499999999999999 +5.4000000000000004 0.7699999999999999 +5.5000000000000000 0.7799999999999998 +5.6000000000000005 0.7999999999999998 +5.7000000000000002 0.8099999999999998 +5.8000000000000007 0.8199999999999998 +5.9000000000000004 0.8299999999999998 +6.0000000000000000 0.8499999999999999 +6.1000000000000005 0.8599999999999999 +6.2000000000000002 0.8699999999999999 +6.3000000000000007 0.8799999999999999 +6.4000000000000004 0.8899999999999999 +6.5000000000000000 0.8999999999999999 +6.6000000000000005 0.9199999999999999 +6.7000000000000002 0.9299999999999999 +6.8000000000000007 0.9399999999999999 +6.9000000000000004 0.9500000000000000 +7.0000000000000000 0.9600000000000000 +7.1000000000000005 0.9700000000000000 +7.2000000000000002 0.9800000000000000 +7.3000000000000007 0.9900000000000000 +7.4000000000000004 0.9900000000000000 +7.5000000000000000 1.0000000000000000 +7.6000000000000005 1.0100000000000000 +7.7000000000000002 1.0200000000000000 +7.8000000000000007 1.0300000000000000 +7.9000000000000004 1.0400000000000000 +8.0000000000000000 1.0500000000000000 +8.0999999999999996 1.0600000000000001 +8.2000000000000011 1.0700000000000001 +8.3000000000000007 1.0800000000000001 +8.4000000000000004 1.0900000000000001 +8.5000000000000000 1.1000000000000001 +8.5999999999999996 1.1000000000000001 +8.7000000000000011 1.1100000000000001 +8.8000000000000007 1.1200000000000001 +8.9000000000000004 1.1300000000000001 +9.0000000000000000 1.1400000000000001 +9.0999999999999996 1.1500000000000001 +9.2000000000000011 1.1600000000000001 +9.3000000000000007 1.1700000000000002 +9.4000000000000004 1.1800000000000002 +9.5000000000000000 1.1800000000000002 +9.6000000000000014 1.1900000000000002 +9.7000000000000011 1.2000000000000002 +9.8000000000000007 1.2000000000000002 +9.9000000000000004 1.2000000000000002 +10.0000000000000000 1.2100000000000002 +10.1000000000000014 1.2100000000000002 +10.2000000000000011 1.2100000000000002 +10.3000000000000007 1.2100000000000002 +10.4000000000000004 1.2100000000000002 +10.5000000000000000 1.2100000000000002 +10.6000000000000014 1.2100000000000002 +10.7000000000000011 1.2100000000000002 +10.8000000000000007 1.2100000000000002 +10.9000000000000004 1.2100000000000002 +11.0000000000000000 1.2000000000000002 +11.1000000000000014 1.2000000000000002 +11.2000000000000011 1.2000000000000002 +11.3000000000000007 1.1900000000000002 +11.4000000000000004 1.1800000000000002 +11.5000000000000000 1.1800000000000002 +11.6000000000000014 1.1700000000000002 +11.7000000000000011 1.1700000000000002 +11.8000000000000007 1.1600000000000001 +11.9000000000000004 1.1600000000000001 +12.0000000000000000 1.1500000000000001 +12.1000000000000014 1.1500000000000001 +12.2000000000000011 1.1400000000000001 +12.3000000000000007 1.1400000000000001 +12.4000000000000004 1.1400000000000001 +12.5000000000000000 1.1400000000000001 +12.6000000000000014 1.1400000000000001 +12.7000000000000011 1.1400000000000001 +12.8000000000000007 1.1500000000000001 +12.9000000000000004 1.1500000000000001 +13.0000000000000000 1.1600000000000001 +13.1000000000000014 1.1600000000000001 +13.2000000000000011 1.1700000000000002 +13.3000000000000007 1.1700000000000002 +13.4000000000000004 1.1800000000000002 +13.5000000000000000 1.1800000000000002 +13.6000000000000014 1.1900000000000002 +13.7000000000000011 1.1900000000000002 +13.8000000000000007 1.1900000000000002 +13.9000000000000004 1.2000000000000002 +14.0000000000000000 1.2000000000000002 +14.1000000000000014 1.2000000000000002 +14.2000000000000011 1.2000000000000002 +14.3000000000000007 1.1900000000000002 +14.4000000000000004 1.1900000000000002 +14.5000000000000000 1.1800000000000002 +14.6000000000000014 1.1700000000000002 +14.7000000000000011 1.1600000000000001 +14.8000000000000007 1.1500000000000001 +14.9000000000000004 1.1300000000000001 +15.0000000000000000 1.1200000000000003 +15.1000000000000014 1.1000000000000003 +15.2000000000000011 1.0900000000000003 +15.3000000000000007 1.0800000000000003 +15.4000000000000004 1.0600000000000005 +15.5000000000000000 1.0500000000000005 +15.6000000000000014 1.0300000000000005 +15.7000000000000011 1.0200000000000005 +15.8000000000000007 1.0000000000000004 +15.9000000000000004 0.9900000000000005 +16.0000000000000000 0.9800000000000005 +16.1000000000000014 0.9600000000000003 +16.1999999999999993 0.9500000000000002 +16.3000000000000007 0.9300000000000004 +16.4000000000000021 0.9100000000000003 +16.5000000000000000 0.9000000000000002 +16.6000000000000014 0.8800000000000003 +16.6999999999999993 0.8600000000000004 +16.8000000000000007 0.8400000000000010 +16.9000000000000021 0.8200000000000007 +17.0000000000000000 0.8100000000000009 +17.1000000000000014 0.7900000000000013 +17.1999999999999993 0.7800000000000012 +17.3000000000000007 0.7600000000000015 +17.4000000000000021 0.7500000000000013 +17.5000000000000000 0.7400000000000012 +17.6000000000000014 0.7300000000000013 +17.6999999999999993 0.7300000000000013 +17.8000000000000007 0.7200000000000013 +17.9000000000000021 0.7200000000000013 +18.0000000000000000 0.7200000000000013 +18.1000000000000014 0.7200000000000013 +18.1999999999999993 0.7200000000000013 +18.3000000000000007 0.7300000000000012 +18.4000000000000021 0.7300000000000012 +18.5000000000000000 0.7400000000000012 +18.6000000000000014 0.7500000000000013 +18.6999999999999993 0.7600000000000013 +18.8000000000000007 0.7700000000000014 +18.9000000000000021 0.7900000000000013 +19.0000000000000000 0.8000000000000014 +19.1000000000000014 0.8100000000000015 +19.2000000000000028 0.8300000000000014 +19.3000000000000007 0.8400000000000016 +19.4000000000000021 0.8500000000000015 +19.5000000000000000 0.8700000000000017 +19.6000000000000014 0.8800000000000016 +19.7000000000000028 0.8900000000000015 +19.8000000000000007 0.9000000000000014 +19.9000000000000021 0.9100000000000013 +20.0000000000000000 0.9200000000000013 +20.1000000000000014 0.9200000000000013 +20.2000000000000028 0.9300000000000014 +20.3000000000000007 0.9400000000000015 +20.4000000000000021 0.9500000000000014 +20.5000000000000000 0.9500000000000014 +20.6000000000000014 0.9600000000000015 +20.7000000000000028 0.9700000000000016 +20.8000000000000007 0.9800000000000018 +20.9000000000000021 0.9800000000000018 +21.0000000000000000 0.9900000000000018 +21.1000000000000014 1.0000000000000018 +21.2000000000000028 1.0000000000000018 +21.3000000000000007 1.0000000000000018 +21.4000000000000021 1.0100000000000018 +21.5000000000000000 1.0100000000000018 +21.6000000000000014 1.0100000000000018 +21.7000000000000028 1.0100000000000018 +21.8000000000000007 1.0200000000000018 +21.9000000000000021 1.0200000000000018 +22.0000000000000000 1.0200000000000018 +22.1000000000000014 1.0200000000000018 +22.2000000000000028 1.0200000000000018 +22.3000000000000007 1.0200000000000018 +22.4000000000000021 1.0200000000000018 +22.5000000000000000 1.0200000000000018 +22.6000000000000014 1.0300000000000018 +22.7000000000000028 1.0300000000000018 +22.8000000000000007 1.0300000000000018 +22.9000000000000021 1.0400000000000018 +23.0000000000000000 1.0400000000000018 +23.1000000000000014 1.0500000000000020 +23.2000000000000028 1.0600000000000021 +23.3000000000000007 1.0700000000000021 +23.4000000000000021 1.0800000000000021 +23.5000000000000000 1.0900000000000021 +23.6000000000000014 1.1000000000000021 +23.7000000000000028 1.1000000000000021 +23.8000000000000007 1.1100000000000019 +23.9000000000000021 1.1100000000000019 +24.0000000000000000 1.1200000000000019 +24.1000000000000014 1.1200000000000019 +24.2000000000000028 1.1200000000000019 +24.3000000000000007 1.1200000000000019 +24.4000000000000021 1.1200000000000019 +24.5000000000000000 1.1200000000000019 +24.6000000000000014 1.1100000000000017 +24.7000000000000028 1.1000000000000019 +24.8000000000000007 1.0900000000000019 +24.9000000000000021 1.0800000000000018 +25.0000000000000000 1.0700000000000018 +25.1000000000000014 1.0600000000000018 +25.2000000000000028 1.0400000000000018 +25.3000000000000007 1.0300000000000018 +25.4000000000000021 1.0200000000000020 +25.5000000000000000 1.0000000000000020 +25.6000000000000014 0.9900000000000019 +25.7000000000000028 0.9800000000000019 +25.8000000000000007 0.9600000000000021 +25.9000000000000021 0.9500000000000022 +26.0000000000000000 0.9400000000000021 +26.1000000000000014 0.9300000000000023 +26.2000000000000028 0.9200000000000024 +26.3000000000000007 0.9100000000000023 +26.4000000000000021 0.9000000000000022 +26.5000000000000000 0.8900000000000022 +26.6000000000000014 0.8800000000000021 +26.7000000000000028 0.8700000000000020 +26.8000000000000007 0.8600000000000021 +26.9000000000000021 0.8600000000000021 +27.0000000000000000 0.8600000000000021 +27.1000000000000014 0.8500000000000021 +27.2000000000000028 0.8500000000000021 +27.3000000000000007 0.8500000000000021 +27.4000000000000021 0.8500000000000021 +27.5000000000000000 0.8500000000000021 +27.6000000000000014 0.8500000000000021 +27.7000000000000028 0.8600000000000021 +27.8000000000000007 0.8600000000000021 +27.9000000000000021 0.8700000000000021 +28.0000000000000000 0.8800000000000021 +28.1000000000000014 0.8800000000000021 +28.2000000000000028 0.8900000000000020 +28.3000000000000007 0.9000000000000019 +28.4000000000000021 0.9000000000000019 +28.5000000000000000 0.9100000000000020 +28.6000000000000014 0.9100000000000020 +28.7000000000000028 0.9200000000000019 +28.8000000000000007 0.9200000000000019 +28.9000000000000021 0.9200000000000019 +29.0000000000000000 0.9300000000000019 +29.1000000000000014 0.9300000000000019 +29.2000000000000028 0.9300000000000019 +29.3000000000000007 0.9300000000000019 +29.4000000000000021 0.9300000000000019 +29.5000000000000000 0.9300000000000019 +29.6000000000000014 0.9300000000000019 +29.7000000000000028 0.9300000000000019 +29.8000000000000007 0.9300000000000019 +29.9000000000000021 0.9300000000000019 +30.0000000000000000 0.9200000000000019 +30.1000000000000014 0.9100000000000018 +30.2000000000000028 0.9000000000000019 +30.3000000000000007 0.9000000000000019 +30.4000000000000021 0.8900000000000019 +30.5000000000000000 0.8800000000000019 +30.6000000000000014 0.8700000000000020 +30.7000000000000028 0.8600000000000019 +30.8000000000000007 0.8600000000000019 +30.9000000000000021 0.8500000000000018 +31.0000000000000000 0.8400000000000016 +31.1000000000000014 0.8300000000000016 +31.2000000000000028 0.8200000000000017 +31.3000000000000007 0.8100000000000016 +31.4000000000000021 0.8000000000000016 +31.5000000000000000 0.7900000000000016 +31.6000000000000014 0.7900000000000016 +31.7000000000000028 0.7800000000000015 +31.8000000000000007 0.7700000000000016 +31.9000000000000021 0.7600000000000017 +32.0000000000000000 0.7500000000000019 +32.1000000000000014 0.7400000000000020 +32.2000000000000028 0.7300000000000022 +32.3000000000000043 0.7200000000000019 +32.3999999999999986 0.7100000000000017 +32.5000000000000000 0.7000000000000015 +32.6000000000000014 0.6900000000000014 +32.7000000000000028 0.6900000000000014 +32.8000000000000043 0.6800000000000014 +32.8999999999999986 0.6700000000000015 +33.0000000000000000 0.6600000000000015 +33.1000000000000014 0.6500000000000014 +33.2000000000000028 0.6400000000000012 +33.3000000000000043 0.6300000000000009 +33.3999999999999986 0.6200000000000010 +33.5000000000000000 0.6100000000000012 +33.6000000000000014 0.6000000000000010 +33.7000000000000028 0.5900000000000013 +33.8000000000000043 0.5800000000000013 +33.8999999999999986 0.5700000000000013 +34.0000000000000000 0.5600000000000016 +34.1000000000000014 0.5600000000000016 +34.2000000000000028 0.5500000000000018 +34.3000000000000043 0.5400000000000018 +34.3999999999999986 0.5400000000000018 +34.5000000000000000 0.5300000000000018 +34.6000000000000014 0.5300000000000018 +34.7000000000000028 0.5300000000000018 +34.8000000000000043 0.5300000000000018 +34.8999999999999986 0.5300000000000018 +35.0000000000000000 0.5300000000000018 +35.1000000000000014 0.5300000000000018 +35.2000000000000028 0.5400000000000017 +35.3000000000000043 0.5500000000000020 +35.3999999999999986 0.5700000000000025 +35.5000000000000000 0.5800000000000023 +35.6000000000000014 0.6000000000000015 +35.7000000000000028 0.6200000000000025 +35.8000000000000043 0.6500000000000024 +35.8999999999999986 0.6700000000000031 +36.0000000000000000 0.6900000000000016 +36.1000000000000014 0.7200000000000006 +36.2000000000000028 0.7400000000000009 +36.3000000000000043 0.7700000000000007 +36.3999999999999986 0.7900000000000001 +36.5000000000000000 0.8199999999999983 +36.6000000000000014 0.8399999999999983 +36.7000000000000028 0.8599999999999985 +36.8000000000000043 0.8799999999999975 +36.8999999999999986 0.8999999999999982 +37.0000000000000000 0.9199999999999980 +37.1000000000000014 0.9299999999999982 +37.2000000000000028 0.9499999999999976 +37.3000000000000043 0.9599999999999973 +37.3999999999999986 0.9699999999999970 +37.5000000000000000 0.9799999999999971 +37.6000000000000014 0.9899999999999971 +37.7000000000000028 0.9899999999999971 +37.8000000000000043 0.9899999999999971 +37.8999999999999986 0.9899999999999971 +38.0000000000000000 0.9899999999999971 +38.1000000000000014 0.9899999999999971 +38.2000000000000028 0.9899999999999971 +38.3000000000000043 0.9899999999999971 +38.4000000000000057 0.9799999999999972 +38.5000000000000000 0.9699999999999971 +38.6000000000000014 0.9599999999999972 +38.7000000000000028 0.9499999999999974 +38.8000000000000043 0.9399999999999972 +38.9000000000000057 0.9299999999999972 +39.0000000000000000 0.9199999999999969 +39.1000000000000014 0.9199999999999969 +39.2000000000000028 0.9099999999999970 +39.3000000000000043 0.9099999999999970 +39.4000000000000057 0.9099999999999970 +39.5000000000000000 0.9099999999999970 +39.6000000000000014 0.9099999999999970 +39.7000000000000028 0.9099999999999970 +39.8000000000000043 0.9099999999999970 +39.9000000000000057 0.9099999999999970 +40.0000000000000000 0.9199999999999968 +40.1000000000000014 0.9199999999999968 +40.2000000000000028 0.9299999999999968 +40.3000000000000043 0.9399999999999966 +40.4000000000000057 0.9499999999999964 +40.5000000000000000 0.9699999999999960 +40.6000000000000014 0.9799999999999961 +40.7000000000000028 0.9899999999999964 +40.8000000000000043 0.9999999999999968 +40.9000000000000057 1.0199999999999969 +41.0000000000000000 1.0299999999999974 +41.1000000000000014 1.0399999999999971 +41.2000000000000028 1.0499999999999974 +41.3000000000000043 1.0599999999999972 +41.4000000000000057 1.0699999999999974 +41.5000000000000000 1.0799999999999976 +41.6000000000000014 1.0899999999999976 +41.7000000000000028 1.0999999999999976 +41.8000000000000043 1.0999999999999976 +41.9000000000000057 1.0999999999999976 +42.0000000000000000 1.1099999999999977 +42.1000000000000014 1.1099999999999977 +42.2000000000000028 1.1099999999999977 +42.3000000000000043 1.1099999999999977 +42.4000000000000057 1.1099999999999977 +42.5000000000000000 1.1099999999999977 +42.6000000000000014 1.1099999999999977 +42.7000000000000028 1.1099999999999977 +42.8000000000000043 1.1099999999999977 +42.9000000000000057 1.1099999999999977 +43.0000000000000000 1.0999999999999976 +43.1000000000000014 1.0999999999999976 +43.2000000000000028 1.0999999999999976 +43.3000000000000043 1.0899999999999976 +43.4000000000000057 1.0899999999999976 +43.5000000000000000 1.0899999999999976 +43.6000000000000014 1.0799999999999976 +43.7000000000000028 1.0799999999999976 +43.8000000000000043 1.0699999999999976 +43.9000000000000057 1.0699999999999976 +44.0000000000000000 1.0699999999999976 +44.1000000000000014 1.0699999999999976 +44.2000000000000028 1.0599999999999976 +44.3000000000000043 1.0599999999999976 +44.4000000000000057 1.0599999999999976 +44.5000000000000000 1.0599999999999976 +44.6000000000000014 1.0599999999999976 +44.7000000000000028 1.0599999999999976 +44.8000000000000043 1.0599999999999976 +44.9000000000000057 1.0599999999999976 +45.0000000000000000 1.0599999999999976 +45.1000000000000014 1.0599999999999976 +45.2000000000000028 1.0599999999999976 +45.3000000000000043 1.0599999999999976 +45.4000000000000057 1.0499999999999974 +45.5000000000000000 1.0399999999999976 +45.6000000000000014 1.0399999999999976 +45.7000000000000028 1.0299999999999976 +45.8000000000000043 1.0299999999999976 +45.9000000000000057 1.0199999999999978 +46.0000000000000000 1.0199999999999978 +46.1000000000000014 1.0199999999999978 +46.2000000000000028 1.0099999999999978 +46.3000000000000043 1.0099999999999978 +46.4000000000000057 1.0099999999999978 +46.5000000000000000 1.0199999999999976 +46.6000000000000014 1.0299999999999978 +46.7000000000000028 1.0399999999999974 +46.8000000000000043 1.0499999999999974 +46.9000000000000057 1.0699999999999976 +47.0000000000000000 1.0799999999999981 +47.1000000000000014 1.0999999999999983 +47.2000000000000028 1.1199999999999992 +47.3000000000000043 1.1299999999999990 +47.4000000000000057 1.1499999999999999 +47.5000000000000000 1.1599999999999999 +47.6000000000000014 1.1799999999999993 +47.7000000000000028 1.1899999999999993 +47.8000000000000043 1.2099999999999986 +47.9000000000000057 1.2199999999999982 +48.0000000000000000 1.2299999999999980 +48.1000000000000014 1.2399999999999978 +48.2000000000000028 1.2499999999999980 +48.3000000000000043 1.2499999999999980 +48.4000000000000057 1.2599999999999980 +48.5000000000000000 1.2599999999999980 +48.6000000000000014 1.2699999999999980 +48.7000000000000028 1.2699999999999980 +48.8000000000000043 1.2699999999999980 +48.9000000000000057 1.2699999999999980 +49.0000000000000000 1.2699999999999980 +49.1000000000000014 1.2699999999999980 +49.2000000000000028 1.2799999999999980 +49.3000000000000043 1.2799999999999980 +49.4000000000000057 1.2799999999999980 +49.5000000000000000 1.2799999999999980 +49.6000000000000014 1.2799999999999980 +49.7000000000000028 1.2799999999999980 +49.8000000000000043 1.2699999999999980 +49.9000000000000057 1.2699999999999980 +50.0000000000000000 1.2699999999999980 +50.1000000000000014 1.2599999999999980 +50.2000000000000028 1.2599999999999980 +50.3000000000000043 1.2599999999999980 +50.4000000000000057 1.2599999999999980 +50.5000000000000000 1.2599999999999980 +50.6000000000000014 1.2499999999999980 +50.7000000000000028 1.2499999999999980 +50.8000000000000043 1.2499999999999980 +50.9000000000000057 1.2499999999999980 +51.0000000000000000 1.2499999999999980 +51.1000000000000014 1.2499999999999980 +51.2000000000000028 1.2499999999999980 +51.3000000000000043 1.2499999999999980 +51.4000000000000057 1.2599999999999980 +51.5000000000000000 1.2599999999999980 +51.6000000000000014 1.2699999999999978 +51.7000000000000028 1.2699999999999978 +51.8000000000000043 1.2799999999999976 +51.9000000000000057 1.2799999999999976 +52.0000000000000000 1.2899999999999974 +52.1000000000000014 1.2899999999999974 +52.2000000000000028 1.2899999999999974 +52.3000000000000043 1.2999999999999974 +52.4000000000000057 1.2999999999999974 +52.5000000000000000 1.2999999999999974 +52.6000000000000014 1.2999999999999974 +52.7000000000000028 1.2999999999999974 +52.8000000000000043 1.2899999999999974 +52.9000000000000057 1.2899999999999974 +53.0000000000000000 1.2799999999999971 +53.1000000000000014 1.2699999999999969 +53.2000000000000028 1.2599999999999969 +53.3000000000000043 1.2399999999999973 +53.4000000000000057 1.2299999999999969 +53.5000000000000000 1.2199999999999969 +53.6000000000000014 1.1999999999999975 +53.7000000000000028 1.1899999999999977 +53.8000000000000043 1.1699999999999977 +53.9000000000000057 1.1499999999999981 +54.0000000000000000 1.1399999999999979 +54.1000000000000014 1.1199999999999979 +54.2000000000000028 1.0999999999999972 +54.3000000000000043 1.0899999999999972 +54.4000000000000057 1.0699999999999974 +54.5000000000000000 1.0499999999999976 +54.6000000000000014 1.0299999999999974 +54.7000000000000028 1.0099999999999971 +54.8000000000000043 0.9899999999999970 +54.9000000000000057 0.9699999999999971 +55.0000000000000000 0.9499999999999972 +55.1000000000000014 0.9299999999999967 +55.2000000000000028 0.9099999999999967 +55.3000000000000043 0.8899999999999967 +55.4000000000000057 0.8699999999999969 +55.5000000000000000 0.8499999999999973 +55.6000000000000014 0.8299999999999972 +55.7000000000000028 0.8099999999999972 +55.8000000000000043 0.7899999999999970 +55.9000000000000057 0.7799999999999976 +56.0000000000000000 0.7599999999999972 +56.1000000000000014 0.7499999999999969 +56.2000000000000028 0.7299999999999977 +56.3000000000000043 0.7199999999999981 +56.4000000000000057 0.7099999999999985 +56.5000000000000000 0.6999999999999987 +56.6000000000000014 0.6899999999999988 +56.7000000000000028 0.6799999999999990 +56.8000000000000043 0.6799999999999990 +56.9000000000000057 0.6699999999999992 +57.0000000000000000 0.6699999999999992 +57.1000000000000014 0.6599999999999991 +57.2000000000000028 0.6599999999999991 +57.3000000000000043 0.6499999999999992 +57.4000000000000057 0.6499999999999992 +57.5000000000000000 0.6499999999999992 +57.6000000000000014 0.6399999999999993 +57.7000000000000028 0.6399999999999993 +57.8000000000000043 0.6399999999999993 +57.9000000000000057 0.6399999999999993 +58.0000000000000000 0.6299999999999992 +58.1000000000000014 0.6299999999999992 +58.2000000000000028 0.6299999999999992 +58.3000000000000043 0.6299999999999992 +58.4000000000000057 0.6299999999999992 +58.5000000000000000 0.6299999999999992 +58.6000000000000014 0.6299999999999992 +58.7000000000000028 0.6399999999999993 +58.8000000000000043 0.6399999999999993 +58.9000000000000057 0.6499999999999996 +59.0000000000000000 0.6499999999999996 +59.1000000000000014 0.6599999999999995 +59.2000000000000028 0.6699999999999995 +59.3000000000000043 0.6799999999999993 +59.4000000000000057 0.6899999999999992 +59.5000000000000000 0.6999999999999992 +59.6000000000000014 0.7099999999999991 +59.7000000000000028 0.7199999999999990 +59.8000000000000043 0.7399999999999992 +59.9000000000000057 0.7499999999999993 +60.0000000000000000 0.7599999999999989 +60.1000000000000014 0.7799999999999983 +60.2000000000000028 0.7899999999999987 +60.3000000000000043 0.8099999999999979 +60.4000000000000057 0.8199999999999977 +60.5000000000000000 0.8399999999999974 +60.6000000000000014 0.8499999999999978 +60.7000000000000028 0.8599999999999975 +60.8000000000000043 0.8799999999999977 +60.9000000000000057 0.8899999999999972 +61.0000000000000000 0.8999999999999968 +61.1000000000000014 0.9199999999999969 +61.2000000000000028 0.9299999999999967 +61.3000000000000043 0.9399999999999966 +61.4000000000000057 0.9499999999999965 +61.5000000000000000 0.9599999999999966 +61.6000000000000014 0.9599999999999966 +61.7000000000000028 0.9699999999999966 +61.8000000000000043 0.9799999999999964 +61.9000000000000057 0.9799999999999964 +62.0000000000000000 0.9899999999999964 +62.1000000000000014 0.9899999999999964 +62.2000000000000028 0.9899999999999964 +62.3000000000000043 0.9899999999999964 +62.4000000000000057 0.9999999999999964 +62.5000000000000000 0.9999999999999964 +62.6000000000000014 0.9999999999999964 +62.7000000000000028 0.9999999999999964 +62.8000000000000043 0.9999999999999964 +62.9000000000000057 0.9999999999999964 +63.0000000000000000 0.9899999999999965 +63.1000000000000014 0.9899999999999965 +63.2000000000000028 0.9899999999999965 +63.3000000000000043 0.9799999999999963 +63.4000000000000057 0.9699999999999963 +63.5000000000000000 0.9699999999999963 +63.6000000000000014 0.9599999999999962 +63.7000000000000028 0.9499999999999963 +63.8000000000000043 0.9499999999999963 +63.9000000000000057 0.9399999999999962 +64.0000000000000000 0.9299999999999961 +64.1000000000000085 0.9299999999999961 +64.2000000000000028 0.9199999999999964 +64.2999999999999972 0.9199999999999964 +64.4000000000000057 0.9199999999999964 +64.5000000000000000 0.9099999999999964 +64.6000000000000085 0.9099999999999964 +64.7000000000000028 0.9099999999999964 +64.7999999999999972 0.9099999999999964 +64.9000000000000057 0.9099999999999964 +65.0000000000000000 0.9099999999999964 +65.1000000000000085 0.9099999999999964 +65.2000000000000028 0.9099999999999964 +65.2999999999999972 0.9199999999999964 +65.4000000000000057 0.9199999999999964 +65.5000000000000000 0.9199999999999964 +65.6000000000000085 0.9199999999999964 +65.7000000000000028 0.9199999999999964 +65.7999999999999972 0.9199999999999964 +65.9000000000000057 0.9199999999999964 +66.0000000000000000 0.9199999999999964 +66.1000000000000085 0.9199999999999964 +66.2000000000000028 0.9199999999999964 +66.2999999999999972 0.9099999999999964 +66.4000000000000057 0.8999999999999970 +66.5000000000000000 0.8899999999999966 +66.6000000000000085 0.8699999999999970 +66.7000000000000028 0.8599999999999962 +66.7999999999999972 0.8399999999999966 +66.9000000000000057 0.8299999999999964 +67.0000000000000000 0.8099999999999972 +67.1000000000000085 0.7899999999999963 +67.2000000000000028 0.7799999999999973 +67.2999999999999972 0.7599999999999972 +67.4000000000000057 0.7399999999999984 +67.5000000000000000 0.7199999999999973 +67.6000000000000085 0.6999999999999965 +67.7000000000000028 0.6899999999999954 +67.7999999999999972 0.6699999999999943 +67.9000000000000057 0.6599999999999948 +68.0000000000000000 0.6399999999999946 +68.1000000000000085 0.6299999999999955 +68.2000000000000028 0.6199999999999956 +68.2999999999999972 0.5999999999999954 +68.4000000000000057 0.5899999999999953 +68.5000000000000000 0.5899999999999953 +68.6000000000000085 0.5799999999999959 +68.7000000000000028 0.5699999999999956 +68.7999999999999972 0.5599999999999959 +68.9000000000000057 0.5599999999999959 +69.0000000000000000 0.5499999999999960 +69.1000000000000085 0.5499999999999960 +69.2000000000000028 0.5399999999999960 +69.2999999999999972 0.5399999999999960 +69.4000000000000057 0.5299999999999958 +69.5000000000000000 0.5299999999999958 +69.6000000000000085 0.5299999999999958 +69.7000000000000028 0.5199999999999957 +69.7999999999999972 0.5199999999999957 +69.9000000000000057 0.5199999999999957 +70.0000000000000000 0.5199999999999957 +70.1000000000000085 0.5199999999999957 +70.2000000000000028 0.5199999999999957 +70.2999999999999972 0.5299999999999958 +70.4000000000000057 0.5299999999999958 +70.5000000000000000 0.5399999999999954 +70.6000000000000085 0.5499999999999958 +70.7000000000000028 0.5599999999999955 +70.7999999999999972 0.5699999999999960 +70.9000000000000057 0.5799999999999953 +71.0000000000000000 0.5899999999999949 +71.1000000000000085 0.5999999999999950 +71.2000000000000028 0.6199999999999941 +71.2999999999999972 0.6299999999999943 +71.4000000000000057 0.6399999999999937 +71.5000000000000000 0.6599999999999949 +71.6000000000000085 0.6799999999999954 +71.7000000000000028 0.6899999999999956 +71.7999999999999972 0.7099999999999972 +71.9000000000000057 0.7299999999999980 +72.0000000000000000 0.7499999999999986 +72.1000000000000085 0.7699999999999986 +72.2000000000000028 0.7899999999999976 +72.2999999999999972 0.8099999999999975 +72.4000000000000057 0.8299999999999967 +72.5000000000000000 0.8599999999999973 +72.6000000000000085 0.8799999999999985 +72.7000000000000028 0.8999999999999979 +72.7999999999999972 0.9099999999999980 +72.9000000000000057 0.9299999999999969 +73.0000000000000000 0.9499999999999973 +73.1000000000000085 0.9599999999999965 +73.2000000000000028 0.9799999999999964 +73.2999999999999972 0.9899999999999958 +73.4000000000000057 0.9999999999999960 +73.5000000000000000 1.0099999999999953 +73.6000000000000085 1.0199999999999956 +73.7000000000000028 1.0199999999999956 +73.7999999999999972 1.0299999999999956 +73.9000000000000057 1.0399999999999952 +74.0000000000000000 1.0399999999999952 +74.1000000000000085 1.0499999999999954 +74.2000000000000028 1.0499999999999954 +74.2999999999999972 1.0599999999999954 +74.4000000000000057 1.0599999999999954 +74.5000000000000000 1.0699999999999954 +74.6000000000000085 1.0699999999999954 +74.7000000000000028 1.0699999999999954 +74.7999999999999972 1.0799999999999956 +74.9000000000000057 1.0799999999999956 +75.0000000000000000 1.0799999999999956 +75.1000000000000085 1.0799999999999956 +75.2000000000000028 1.0899999999999956 +75.2999999999999972 1.0899999999999956 +75.4000000000000057 1.0999999999999959 +75.5000000000000000 1.0999999999999959 +75.6000000000000085 1.1099999999999957 +75.7000000000000028 1.1199999999999954 +75.7999999999999972 1.1299999999999961 +75.9000000000000057 1.1499999999999961 +76.0000000000000000 1.1599999999999961 +76.1000000000000085 1.1699999999999966 +76.2000000000000028 1.1899999999999979 +76.2999999999999972 1.1999999999999971 +76.4000000000000057 1.2199999999999986 +76.5000000000000000 1.2299999999999993 +76.6000000000000085 1.2499999999999993 +76.7000000000000028 1.2599999999999989 +76.8000000000000114 1.2699999999999991 +76.9000000000000057 1.2799999999999998 +77.0000000000000000 1.2899999999999998 +77.1000000000000085 1.3000000000000000 +77.2000000000000028 1.3000000000000000 +77.3000000000000114 1.3100000000000003 +77.4000000000000057 1.3100000000000003 +77.5000000000000000 1.3100000000000003 +77.6000000000000085 1.3100000000000003 +77.7000000000000028 1.3200000000000003 +77.8000000000000114 1.3200000000000003 +77.9000000000000057 1.3200000000000003 +78.0000000000000000 1.3200000000000003 +78.1000000000000085 1.3300000000000003 +78.2000000000000028 1.3300000000000003 +78.3000000000000114 1.3300000000000003 +78.4000000000000057 1.3400000000000001 +78.5000000000000000 1.3400000000000001 +78.6000000000000085 1.3400000000000001 +78.7000000000000028 1.3400000000000001 +78.8000000000000114 1.3400000000000001 +78.9000000000000057 1.3499999999999999 +79.0000000000000000 1.3499999999999999 +79.1000000000000085 1.3499999999999999 +79.2000000000000028 1.3499999999999999 +79.3000000000000114 1.3499999999999999 +79.4000000000000057 1.3499999999999999 +79.5000000000000000 1.3499999999999999 +79.6000000000000085 1.3399999999999996 +79.7000000000000028 1.3399999999999996 +79.8000000000000114 1.3300000000000001 +79.9000000000000057 1.3300000000000001 +80.0000000000000000 1.3199999999999996 +80.1000000000000085 1.3099999999999992 +80.2000000000000028 1.2999999999999996 +80.3000000000000114 1.2899999999999998 +80.4000000000000057 1.2899999999999998 +80.5000000000000000 1.2799999999999996 +80.6000000000000085 1.2700000000000000 +80.7000000000000028 1.2599999999999998 +80.8000000000000114 1.2599999999999998 +80.9000000000000057 1.2499999999999993 +81.0000000000000000 1.2499999999999993 +81.1000000000000085 1.2399999999999993 +81.2000000000000028 1.2399999999999993 +81.3000000000000114 1.2299999999999993 +81.4000000000000057 1.2299999999999993 +81.5000000000000000 1.2199999999999993 +81.6000000000000085 1.2199999999999993 +81.7000000000000028 1.2099999999999989 +81.8000000000000114 1.1999999999999984 +81.9000000000000057 1.1899999999999979 +82.0000000000000000 1.1799999999999973 +82.1000000000000085 1.1699999999999977 +82.2000000000000028 1.1599999999999970 +82.3000000000000114 1.1399999999999961 +82.4000000000000057 1.1299999999999961 +82.5000000000000000 1.1099999999999965 +82.6000000000000085 1.0999999999999965 +82.7000000000000028 1.0799999999999974 +82.8000000000000114 1.0599999999999967 +82.9000000000000057 1.0399999999999971 +83.0000000000000000 1.0199999999999980 +83.1000000000000085 0.9999999999999996 +83.2000000000000028 0.9799999999999993 +83.3000000000000114 0.9600000000000005 +83.4000000000000057 0.9400000000000022 +83.5000000000000000 0.9200000000000024 +83.6000000000000085 0.9000000000000017 +83.7000000000000028 0.8800000000000001 +83.8000000000000114 0.8600000000000007 +83.9000000000000057 0.8400000000000002 +84.0000000000000000 0.8199999999999997 +84.1000000000000085 0.8100000000000004 +84.2000000000000028 0.8000000000000002 +84.3000000000000114 0.7900000000000008 +84.4000000000000057 0.7800000000000007 +84.5000000000000000 0.7700000000000007 +84.6000000000000085 0.7700000000000007 +84.7000000000000028 0.7600000000000007 +84.8000000000000114 0.7600000000000007 +84.9000000000000057 0.7600000000000007 +85.0000000000000000 0.7600000000000007 +85.1000000000000085 0.7600000000000007 +85.2000000000000028 0.7600000000000007 +85.3000000000000114 0.7500000000000007 +85.4000000000000057 0.7500000000000007 +85.5000000000000000 0.7500000000000007 +85.6000000000000085 0.7500000000000007 +85.7000000000000028 0.7500000000000007 +85.8000000000000114 0.7500000000000007 +85.9000000000000057 0.7500000000000007 +86.0000000000000000 0.7500000000000007 +86.1000000000000085 0.7600000000000006 +86.2000000000000028 0.7600000000000006 +86.3000000000000114 0.7600000000000006 +86.4000000000000057 0.7700000000000005 +86.5000000000000000 0.7700000000000005 +86.6000000000000085 0.7700000000000005 +86.7000000000000028 0.7800000000000004 +86.8000000000000114 0.7800000000000004 +86.9000000000000057 0.7900000000000000 +87.0000000000000000 0.7900000000000000 +87.1000000000000085 0.8000000000000003 +87.2000000000000028 0.8100000000000006 +87.3000000000000114 0.8200000000000006 +87.4000000000000057 0.8300000000000014 +87.5000000000000000 0.8400000000000011 +87.6000000000000085 0.8500000000000008 +87.7000000000000028 0.8600000000000013 +87.8000000000000114 0.8800000000000010 +87.9000000000000057 0.8900000000000010 +88.0000000000000000 0.9100000000000010 +88.1000000000000085 0.9300000000000019 +88.2000000000000028 0.9400000000000031 +88.3000000000000114 0.9600000000000029 +88.4000000000000057 0.9700000000000033 +88.5000000000000000 0.9900000000000035 +88.6000000000000085 1.0100000000000031 +88.7000000000000028 1.0200000000000020 +88.8000000000000114 1.0400000000000020 +88.9000000000000057 1.0500000000000029 +89.0000000000000000 1.0700000000000027 +89.1000000000000085 1.0800000000000032 +89.2000000000000028 1.1000000000000030 +89.3000000000000114 1.1100000000000023 +89.4000000000000057 1.1200000000000017 +89.5000000000000000 1.1400000000000026 +89.6000000000000085 1.1500000000000024 +89.7000000000000028 1.1600000000000028 +89.8000000000000114 1.1700000000000030 +89.9000000000000057 1.1700000000000030 +90.0000000000000000 1.1800000000000028 +90.1000000000000085 1.1800000000000028 +90.2000000000000028 1.1900000000000031 +90.3000000000000114 1.1900000000000031 +90.4000000000000057 1.2000000000000033 +90.5000000000000000 1.2000000000000033 +90.6000000000000085 1.2000000000000033 +90.7000000000000028 1.2000000000000033 +90.8000000000000114 1.2000000000000033 +90.9000000000000057 1.2000000000000033 +91.0000000000000000 1.2000000000000033 +91.1000000000000085 1.2000000000000033 +91.2000000000000028 1.2000000000000033 +91.3000000000000114 1.2000000000000033 +91.4000000000000057 1.2000000000000033 +91.5000000000000000 1.2000000000000033 +91.6000000000000085 1.1900000000000033 +91.7000000000000028 1.1800000000000037 +91.8000000000000114 1.1700000000000039 +91.9000000000000057 1.1700000000000039 +92.0000000000000000 1.1600000000000035 +92.1000000000000085 1.1500000000000030 +92.2000000000000028 1.1300000000000032 +92.3000000000000114 1.1200000000000034 +92.4000000000000057 1.1100000000000034 +92.5000000000000000 1.1000000000000041 +92.6000000000000085 1.0800000000000038 +92.7000000000000028 1.0700000000000047 +92.8000000000000114 1.0600000000000054 +92.9000000000000057 1.0500000000000054 +93.0000000000000000 1.0300000000000056 +93.1000000000000085 1.0200000000000051 +93.2000000000000028 1.0200000000000051 +93.3000000000000114 1.0100000000000053 +93.4000000000000057 1.0100000000000053 +93.5000000000000000 1.0100000000000053 +93.6000000000000085 1.0100000000000053 +93.7000000000000028 1.0100000000000053 +93.8000000000000114 1.0100000000000053 +93.9000000000000057 1.0100000000000053 +94.0000000000000000 1.0200000000000058 +94.1000000000000085 1.0200000000000058 +94.2000000000000028 1.0300000000000062 +94.3000000000000114 1.0400000000000060 +94.4000000000000057 1.0500000000000056 +94.5000000000000000 1.0500000000000056 +94.6000000000000085 1.0600000000000058 +94.7000000000000028 1.0700000000000063 +94.8000000000000114 1.0700000000000063 +94.9000000000000057 1.0800000000000061 +95.0000000000000000 1.0900000000000065 +95.1000000000000085 1.1000000000000070 +95.2000000000000028 1.1100000000000074 +95.3000000000000114 1.1200000000000070 +95.4000000000000057 1.1200000000000070 +95.5000000000000000 1.1300000000000068 +95.6000000000000085 1.1400000000000066 +95.7000000000000028 1.1400000000000066 +95.8000000000000114 1.1400000000000066 +95.9000000000000057 1.1500000000000066 +96.0000000000000000 1.1500000000000066 +96.1000000000000085 1.1500000000000066 +96.2000000000000028 1.1400000000000061 +96.3000000000000114 1.1400000000000061 +96.4000000000000057 1.1300000000000057 +96.5000000000000000 1.1100000000000052 +96.6000000000000085 1.1000000000000056 +96.7000000000000028 1.0800000000000056 +96.8000000000000114 1.0700000000000045 +96.9000000000000057 1.0500000000000040 +97.0000000000000000 1.0400000000000051 +97.1000000000000085 1.0200000000000053 +97.2000000000000028 1.0100000000000060 +97.3000000000000114 0.9900000000000055 +97.4000000000000057 0.9800000000000065 +97.5000000000000000 0.9600000000000056 +97.6000000000000085 0.9500000000000065 +97.7000000000000028 0.9400000000000069 +97.8000000000000114 0.9200000000000070 +97.9000000000000057 0.9100000000000071 +98.0000000000000000 0.9000000000000070 +98.1000000000000085 0.8900000000000077 +98.2000000000000028 0.8800000000000077 +98.3000000000000114 0.8800000000000077 +98.4000000000000057 0.8700000000000071 +98.5000000000000000 0.8600000000000066 +98.6000000000000085 0.8500000000000061 +98.7000000000000028 0.8400000000000056 +98.8000000000000114 0.8400000000000056 +98.9000000000000057 0.8300000000000052 +99.0000000000000000 0.8200000000000049 +99.1000000000000085 0.8200000000000049 +99.2000000000000028 0.8200000000000049 +99.3000000000000114 0.8200000000000049 +99.4000000000000057 0.8200000000000049 +99.5000000000000000 0.8200000000000049 +99.6000000000000085 0.8200000000000049 +99.7000000000000028 0.8200000000000049 +99.8000000000000114 0.8200000000000049 +99.9000000000000057 0.8300000000000047 +100.0000000000000000 0.8300000000000047 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[4].dat b/src/engine/tests/system/gt_data/virus_replication/X[4].dat new file mode 100644 index 00000000..1018f10b --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[4].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0000000000000000 +1.2000000000000002 0.0000000000000000 +1.3000000000000000 0.0000000000000000 +1.4000000000000001 0.0000000000000000 +1.5000000000000000 0.0000000000000000 +1.6000000000000001 0.0000000000000000 +1.7000000000000002 0.0100000000000000 +1.8000000000000000 0.0100000000000000 +1.9000000000000001 0.0200000000000000 +2.0000000000000000 0.0200000000000000 +2.1000000000000001 0.0300000000000000 +2.2000000000000002 0.0300000000000000 +2.3000000000000003 0.0400000000000000 +2.4000000000000004 0.0500000000000000 +2.5000000000000000 0.0600000000000000 +2.6000000000000001 0.0700000000000000 +2.7000000000000002 0.0800000000000000 +2.8000000000000003 0.1000000000000000 +2.9000000000000004 0.1100000000000000 +3.0000000000000000 0.1300000000000000 +3.1000000000000001 0.1400000000000000 +3.2000000000000002 0.1600000000000000 +3.3000000000000003 0.1700000000000001 +3.4000000000000004 0.1900000000000000 +3.5000000000000000 0.2100000000000001 +3.6000000000000001 0.2300000000000001 +3.7000000000000002 0.2500000000000001 +3.8000000000000003 0.2700000000000000 +3.9000000000000004 0.2900000000000000 +4.0000000000000000 0.3100000000000000 +4.1000000000000005 0.3300000000000000 +4.2000000000000002 0.3500000000000000 +4.2999999999999998 0.3700000000000000 +4.4000000000000004 0.3900000000000000 +4.5000000000000000 0.4100000000000001 +4.6000000000000005 0.4300000000000002 +4.7000000000000002 0.4500000000000002 +4.8000000000000007 0.4700000000000001 +4.9000000000000004 0.4900000000000000 +5.0000000000000000 0.5099999999999999 +5.1000000000000005 0.5300000000000000 +5.2000000000000002 0.5500000000000000 +5.3000000000000007 0.5700000000000000 +5.4000000000000004 0.5800000000000000 +5.5000000000000000 0.6000000000000000 +5.6000000000000005 0.6200000000000000 +5.7000000000000002 0.6400000000000000 +5.8000000000000007 0.6500000000000000 +5.9000000000000004 0.6699999999999999 +6.0000000000000000 0.6899999999999998 +6.1000000000000005 0.6999999999999998 +6.2000000000000002 0.7199999999999999 +6.3000000000000007 0.7299999999999998 +6.4000000000000004 0.7499999999999998 +6.5000000000000000 0.7599999999999997 +6.6000000000000005 0.7799999999999997 +6.7000000000000002 0.7899999999999997 +6.8000000000000007 0.7999999999999997 +6.9000000000000004 0.8199999999999996 +7.0000000000000000 0.8299999999999996 +7.1000000000000005 0.8399999999999996 +7.2000000000000002 0.8499999999999996 +7.3000000000000007 0.8699999999999997 +7.4000000000000004 0.8799999999999997 +7.5000000000000000 0.8899999999999997 +7.6000000000000005 0.8999999999999997 +7.7000000000000002 0.9099999999999997 +7.8000000000000007 0.9199999999999997 +7.9000000000000004 0.9299999999999997 +8.0000000000000000 0.9399999999999997 +8.0999999999999996 0.9499999999999997 +8.2000000000000011 0.9599999999999997 +8.3000000000000007 0.9699999999999999 +8.4000000000000004 0.9799999999999998 +8.5000000000000000 0.9899999999999998 +8.5999999999999996 0.9999999999999997 +8.7000000000000011 1.0099999999999996 +8.8000000000000007 1.0199999999999996 +8.9000000000000004 1.0299999999999996 +9.0000000000000000 1.0399999999999996 +9.0999999999999996 1.0499999999999996 +9.2000000000000011 1.0599999999999996 +9.3000000000000007 1.0699999999999996 +9.4000000000000004 1.0799999999999996 +9.5000000000000000 1.0899999999999996 +9.6000000000000014 1.0999999999999996 +9.7000000000000011 1.1099999999999997 +9.8000000000000007 1.1199999999999997 +9.9000000000000004 1.1299999999999997 +10.0000000000000000 1.1299999999999997 +10.1000000000000014 1.1399999999999997 +10.2000000000000011 1.1499999999999997 +10.3000000000000007 1.1499999999999997 +10.4000000000000004 1.1599999999999997 +10.5000000000000000 1.1599999999999997 +10.6000000000000014 1.1699999999999997 +10.7000000000000011 1.1699999999999997 +10.8000000000000007 1.1799999999999997 +10.9000000000000004 1.1799999999999997 +11.0000000000000000 1.1799999999999997 +11.1000000000000014 1.1799999999999997 +11.2000000000000011 1.1899999999999997 +11.3000000000000007 1.1899999999999997 +11.4000000000000004 1.1899999999999997 +11.5000000000000000 1.1899999999999997 +11.6000000000000014 1.1899999999999997 +11.7000000000000011 1.1899999999999997 +11.8000000000000007 1.1899999999999997 +11.9000000000000004 1.1899999999999997 +12.0000000000000000 1.1799999999999997 +12.1000000000000014 1.1799999999999997 +12.2000000000000011 1.1799999999999997 +12.3000000000000007 1.1699999999999997 +12.4000000000000004 1.1699999999999997 +12.5000000000000000 1.1699999999999997 +12.6000000000000014 1.1599999999999997 +12.7000000000000011 1.1599999999999997 +12.8000000000000007 1.1599999999999997 +12.9000000000000004 1.1599999999999997 +13.0000000000000000 1.1599999999999997 +13.1000000000000014 1.1599999999999997 +13.2000000000000011 1.1599999999999997 +13.3000000000000007 1.1599999999999997 +13.4000000000000004 1.1599999999999997 +13.5000000000000000 1.1599999999999997 +13.6000000000000014 1.1599999999999997 +13.7000000000000011 1.1599999999999997 +13.8000000000000007 1.1599999999999997 +13.9000000000000004 1.1699999999999997 +14.0000000000000000 1.1699999999999997 +14.1000000000000014 1.1699999999999997 +14.2000000000000011 1.1799999999999997 +14.3000000000000007 1.1799999999999997 +14.4000000000000004 1.1799999999999997 +14.5000000000000000 1.1799999999999997 +14.6000000000000014 1.1799999999999997 +14.7000000000000011 1.1799999999999997 +14.8000000000000007 1.1799999999999997 +14.9000000000000004 1.1799999999999997 +15.0000000000000000 1.1699999999999997 +15.1000000000000014 1.1699999999999997 +15.2000000000000011 1.1599999999999997 +15.3000000000000007 1.1499999999999997 +15.4000000000000004 1.1499999999999997 +15.5000000000000000 1.1399999999999997 +15.6000000000000014 1.1299999999999997 +15.7000000000000011 1.1199999999999997 +15.8000000000000007 1.1099999999999997 +15.9000000000000004 1.0999999999999996 +16.0000000000000000 1.0899999999999996 +16.1000000000000014 1.0699999999999992 +16.1999999999999993 1.0599999999999989 +16.3000000000000007 1.0499999999999989 +16.4000000000000021 1.0399999999999991 +16.5000000000000000 1.0299999999999991 +16.6000000000000014 1.0099999999999991 +16.6999999999999993 0.9999999999999990 +16.8000000000000007 0.9899999999999988 +16.9000000000000021 0.9699999999999986 +17.0000000000000000 0.9599999999999985 +17.1000000000000014 0.9399999999999987 +17.1999999999999993 0.9299999999999987 +17.3000000000000007 0.9099999999999987 +17.4000000000000021 0.8999999999999988 +17.5000000000000000 0.8799999999999991 +17.6000000000000014 0.8699999999999991 +17.6999999999999993 0.8499999999999994 +17.8000000000000007 0.8399999999999994 +17.9000000000000021 0.8299999999999993 +18.0000000000000000 0.8199999999999992 +18.1000000000000014 0.8099999999999993 +18.1999999999999993 0.7999999999999993 +18.3000000000000007 0.7899999999999993 +18.4000000000000021 0.7899999999999993 +18.5000000000000000 0.7799999999999992 +18.6000000000000014 0.7799999999999992 +18.6999999999999993 0.7799999999999992 +18.8000000000000007 0.7799999999999992 +18.9000000000000021 0.7799999999999992 +19.0000000000000000 0.7799999999999992 +19.1000000000000014 0.7799999999999992 +19.2000000000000028 0.7799999999999992 +19.3000000000000007 0.7799999999999992 +19.4000000000000021 0.7899999999999994 +19.5000000000000000 0.7899999999999994 +19.6000000000000014 0.7999999999999993 +19.7000000000000028 0.8099999999999992 +19.8000000000000007 0.8199999999999992 +19.9000000000000021 0.8199999999999992 +20.0000000000000000 0.8299999999999991 +20.1000000000000014 0.8399999999999990 +20.2000000000000028 0.8499999999999990 +20.3000000000000007 0.8599999999999989 +20.4000000000000021 0.8699999999999989 +20.5000000000000000 0.8699999999999989 +20.6000000000000014 0.8799999999999989 +20.7000000000000028 0.8899999999999989 +20.8000000000000007 0.8999999999999989 +20.9000000000000021 0.9099999999999989 +21.0000000000000000 0.9099999999999989 +21.1000000000000014 0.9199999999999989 +21.2000000000000028 0.9299999999999989 +21.3000000000000007 0.9399999999999991 +21.4000000000000021 0.9399999999999991 +21.5000000000000000 0.9499999999999990 +21.6000000000000014 0.9499999999999990 +21.7000000000000028 0.9599999999999989 +21.8000000000000007 0.9599999999999989 +21.9000000000000021 0.9699999999999989 +22.0000000000000000 0.9699999999999989 +22.1000000000000014 0.9799999999999989 +22.2000000000000028 0.9799999999999989 +22.3000000000000007 0.9899999999999989 +22.4000000000000021 0.9899999999999989 +22.5000000000000000 0.9899999999999989 +22.6000000000000014 0.9999999999999989 +22.7000000000000028 0.9999999999999989 +22.8000000000000007 0.9999999999999989 +22.9000000000000021 0.9999999999999989 +23.0000000000000000 1.0099999999999989 +23.1000000000000014 1.0099999999999989 +23.2000000000000028 1.0199999999999989 +23.3000000000000007 1.0199999999999989 +23.4000000000000021 1.0299999999999989 +23.5000000000000000 1.0299999999999989 +23.6000000000000014 1.0399999999999989 +23.7000000000000028 1.0399999999999989 +23.8000000000000007 1.0499999999999989 +23.9000000000000021 1.0599999999999989 +24.0000000000000000 1.0599999999999989 +24.1000000000000014 1.0699999999999990 +24.2000000000000028 1.0699999999999990 +24.3000000000000007 1.0799999999999990 +24.4000000000000021 1.0799999999999990 +24.5000000000000000 1.0799999999999990 +24.6000000000000014 1.0899999999999990 +24.7000000000000028 1.0899999999999990 +24.8000000000000007 1.0899999999999990 +24.9000000000000021 1.0899999999999990 +25.0000000000000000 1.0899999999999990 +25.1000000000000014 1.0899999999999990 +25.2000000000000028 1.0899999999999990 +25.3000000000000007 1.0899999999999990 +25.4000000000000021 1.0799999999999990 +25.5000000000000000 1.0699999999999992 +25.6000000000000014 1.0699999999999992 +25.7000000000000028 1.0599999999999992 +25.8000000000000007 1.0499999999999992 +25.9000000000000021 1.0399999999999991 +26.0000000000000000 1.0299999999999994 +26.1000000000000014 1.0199999999999996 +26.2000000000000028 1.0099999999999996 +26.3000000000000007 0.9999999999999994 +26.4000000000000021 0.9899999999999993 +26.5000000000000000 0.9799999999999993 +26.6000000000000014 0.9699999999999995 +26.7000000000000028 0.9699999999999995 +26.8000000000000007 0.9599999999999996 +26.9000000000000021 0.9499999999999995 +27.0000000000000000 0.9399999999999995 +27.1000000000000014 0.9299999999999996 +27.2000000000000028 0.9199999999999996 +27.3000000000000007 0.9199999999999996 +27.4000000000000021 0.9099999999999995 +27.5000000000000000 0.8999999999999995 +27.6000000000000014 0.8999999999999995 +27.7000000000000028 0.8899999999999996 +27.8000000000000007 0.8899999999999996 +27.9000000000000021 0.8899999999999996 +28.0000000000000000 0.8899999999999996 +28.1000000000000014 0.8899999999999996 +28.2000000000000028 0.8899999999999996 +28.3000000000000007 0.8899999999999996 +28.4000000000000021 0.8899999999999996 +28.5000000000000000 0.8899999999999996 +28.6000000000000014 0.8899999999999996 +28.7000000000000028 0.8899999999999996 +28.8000000000000007 0.8899999999999996 +28.9000000000000021 0.8899999999999996 +29.0000000000000000 0.8899999999999996 +29.1000000000000014 0.8999999999999996 +29.2000000000000028 0.8999999999999996 +29.3000000000000007 0.8999999999999996 +29.4000000000000021 0.9099999999999996 +29.5000000000000000 0.9099999999999996 +29.6000000000000014 0.9099999999999996 +29.7000000000000028 0.9099999999999996 +29.8000000000000007 0.9099999999999996 +29.9000000000000021 0.9199999999999996 +30.0000000000000000 0.9199999999999996 +30.1000000000000014 0.9199999999999996 +30.2000000000000028 0.9199999999999996 +30.3000000000000007 0.9199999999999996 +30.4000000000000021 0.9199999999999996 +30.5000000000000000 0.9099999999999996 +30.6000000000000014 0.9099999999999996 +30.7000000000000028 0.9099999999999996 +30.8000000000000007 0.8999999999999996 +30.9000000000000021 0.8999999999999996 +31.0000000000000000 0.8899999999999996 +31.1000000000000014 0.8899999999999996 +31.2000000000000028 0.8799999999999996 +31.3000000000000007 0.8799999999999996 +31.4000000000000021 0.8699999999999997 +31.5000000000000000 0.8599999999999998 +31.6000000000000014 0.8599999999999998 +31.7000000000000028 0.8499999999999999 +31.8000000000000007 0.8399999999999999 +31.9000000000000021 0.8299999999999997 +32.0000000000000000 0.8299999999999997 +32.1000000000000014 0.8199999999999995 +32.2000000000000028 0.8099999999999994 +32.3000000000000043 0.7999999999999994 +32.3999999999999986 0.7899999999999993 +32.5000000000000000 0.7899999999999993 +32.6000000000000014 0.7799999999999994 +32.7000000000000028 0.7699999999999996 +32.8000000000000043 0.7599999999999997 +32.8999999999999986 0.7499999999999994 +33.0000000000000000 0.7399999999999993 +33.1000000000000014 0.7299999999999994 +33.2000000000000028 0.7299999999999994 +33.3000000000000043 0.7199999999999992 +33.3999999999999986 0.7099999999999991 +33.5000000000000000 0.6999999999999990 +33.6000000000000014 0.6899999999999989 +33.7000000000000028 0.6799999999999988 +33.8000000000000043 0.6699999999999990 +33.8999999999999986 0.6599999999999988 +34.0000000000000000 0.6499999999999988 +34.1000000000000014 0.6499999999999988 +34.2000000000000028 0.6399999999999985 +34.3000000000000043 0.6299999999999987 +34.3999999999999986 0.6199999999999989 +34.5000000000000000 0.6099999999999989 +34.6000000000000014 0.5999999999999986 +34.7000000000000028 0.5999999999999986 +34.8000000000000043 0.5899999999999989 +34.8999999999999986 0.5799999999999991 +35.0000000000000000 0.5799999999999991 +35.1000000000000014 0.5699999999999992 +35.2000000000000028 0.5699999999999992 +35.3000000000000043 0.5699999999999992 +35.3999999999999986 0.5699999999999992 +35.5000000000000000 0.5699999999999992 +35.6000000000000014 0.5699999999999992 +35.7000000000000028 0.5699999999999992 +35.8000000000000043 0.5699999999999992 +35.8999999999999986 0.5799999999999993 +36.0000000000000000 0.5899999999999992 +36.1000000000000014 0.5999999999999994 +36.2000000000000028 0.6099999999999998 +36.3000000000000043 0.6299999999999999 +36.3999999999999986 0.6400000000000005 +36.5000000000000000 0.6600000000000001 +36.6000000000000014 0.6700000000000004 +36.7000000000000028 0.6900000000000011 +36.8000000000000043 0.7100000000000007 +36.8999999999999986 0.7300000000000016 +37.0000000000000000 0.7400000000000022 +37.1000000000000014 0.7600000000000025 +37.2000000000000028 0.7800000000000021 +37.3000000000000043 0.7900000000000025 +37.3999999999999986 0.8100000000000026 +37.5000000000000000 0.8300000000000027 +37.6000000000000014 0.8400000000000029 +37.7000000000000028 0.8600000000000031 +37.8000000000000043 0.8700000000000031 +37.8999999999999986 0.8800000000000029 +38.0000000000000000 0.8900000000000027 +38.1000000000000014 0.9000000000000030 +38.2000000000000028 0.9100000000000033 +38.3000000000000043 0.9200000000000030 +38.4000000000000057 0.9200000000000030 +38.5000000000000000 0.9300000000000029 +38.6000000000000014 0.9300000000000029 +38.7000000000000028 0.9300000000000029 +38.8000000000000043 0.9300000000000029 +38.9000000000000057 0.9300000000000029 +39.0000000000000000 0.9300000000000029 +39.1000000000000014 0.9300000000000029 +39.2000000000000028 0.9300000000000029 +39.3000000000000043 0.9300000000000029 +39.4000000000000057 0.9300000000000029 +39.5000000000000000 0.9300000000000029 +39.6000000000000014 0.9300000000000029 +39.7000000000000028 0.9300000000000029 +39.8000000000000043 0.9300000000000029 +39.9000000000000057 0.9300000000000029 +40.0000000000000000 0.9300000000000029 +40.1000000000000014 0.9200000000000029 +40.2000000000000028 0.9200000000000029 +40.3000000000000043 0.9200000000000029 +40.4000000000000057 0.9200000000000029 +40.5000000000000000 0.9200000000000029 +40.6000000000000014 0.9300000000000027 +40.7000000000000028 0.9300000000000027 +40.8000000000000043 0.9400000000000027 +40.9000000000000057 0.9500000000000027 +41.0000000000000000 0.9500000000000027 +41.1000000000000014 0.9600000000000024 +41.2000000000000028 0.9700000000000023 +41.3000000000000043 0.9800000000000024 +41.4000000000000057 0.9900000000000024 +41.5000000000000000 1.0000000000000027 +41.6000000000000014 1.0100000000000025 +41.7000000000000028 1.0100000000000025 +41.8000000000000043 1.0200000000000022 +41.9000000000000057 1.0300000000000022 +42.0000000000000000 1.0400000000000025 +42.1000000000000014 1.0400000000000025 +42.2000000000000028 1.0500000000000025 +42.3000000000000043 1.0600000000000025 +42.4000000000000057 1.0600000000000025 +42.5000000000000000 1.0700000000000023 +42.6000000000000014 1.0700000000000023 +42.7000000000000028 1.0700000000000023 +42.8000000000000043 1.0800000000000023 +42.9000000000000057 1.0800000000000023 +43.0000000000000000 1.0800000000000023 +43.1000000000000014 1.0800000000000023 +43.2000000000000028 1.0900000000000023 +43.3000000000000043 1.0900000000000023 +43.4000000000000057 1.0900000000000023 +43.5000000000000000 1.0900000000000023 +43.6000000000000014 1.0900000000000023 +43.7000000000000028 1.0900000000000023 +43.8000000000000043 1.0900000000000023 +43.9000000000000057 1.0900000000000023 +44.0000000000000000 1.0900000000000023 +44.1000000000000014 1.0900000000000023 +44.2000000000000028 1.0800000000000023 +44.3000000000000043 1.0800000000000023 +44.4000000000000057 1.0800000000000023 +44.5000000000000000 1.0800000000000023 +44.6000000000000014 1.0800000000000023 +44.7000000000000028 1.0700000000000023 +44.8000000000000043 1.0700000000000023 +44.9000000000000057 1.0700000000000023 +45.0000000000000000 1.0700000000000023 +45.1000000000000014 1.0700000000000023 +45.2000000000000028 1.0700000000000023 +45.3000000000000043 1.0700000000000023 +45.4000000000000057 1.0700000000000023 +45.5000000000000000 1.0600000000000023 +45.6000000000000014 1.0600000000000023 +45.7000000000000028 1.0600000000000023 +45.8000000000000043 1.0600000000000023 +45.9000000000000057 1.0500000000000023 +46.0000000000000000 1.0500000000000023 +46.1000000000000014 1.0500000000000023 +46.2000000000000028 1.0400000000000023 +46.3000000000000043 1.0400000000000023 +46.4000000000000057 1.0400000000000023 +46.5000000000000000 1.0400000000000023 +46.6000000000000014 1.0300000000000022 +46.7000000000000028 1.0300000000000022 +46.8000000000000043 1.0300000000000022 +46.9000000000000057 1.0300000000000022 +47.0000000000000000 1.0300000000000022 +47.1000000000000014 1.0400000000000025 +47.2000000000000028 1.0500000000000023 +47.3000000000000043 1.0500000000000023 +47.4000000000000057 1.0600000000000021 +47.5000000000000000 1.0700000000000021 +47.6000000000000014 1.0800000000000018 +47.7000000000000028 1.0900000000000014 +47.8000000000000043 1.1000000000000016 +47.9000000000000057 1.1100000000000017 +48.0000000000000000 1.1200000000000017 +48.1000000000000014 1.1300000000000017 +48.2000000000000028 1.1400000000000015 +48.3000000000000043 1.1500000000000012 +48.4000000000000057 1.1600000000000010 +48.5000000000000000 1.1700000000000013 +48.6000000000000014 1.1800000000000013 +48.7000000000000028 1.1900000000000013 +48.8000000000000043 1.2000000000000015 +48.9000000000000057 1.2000000000000015 +49.0000000000000000 1.2100000000000017 +49.1000000000000014 1.2200000000000017 +49.2000000000000028 1.2200000000000017 +49.3000000000000043 1.2300000000000015 +49.4000000000000057 1.2300000000000015 +49.5000000000000000 1.2400000000000018 +49.6000000000000014 1.2400000000000018 +49.7000000000000028 1.2400000000000018 +49.8000000000000043 1.2500000000000018 +49.9000000000000057 1.2500000000000018 +50.0000000000000000 1.2500000000000018 +50.1000000000000014 1.2500000000000018 +50.2000000000000028 1.2500000000000018 +50.3000000000000043 1.2500000000000018 +50.4000000000000057 1.2600000000000018 +50.5000000000000000 1.2600000000000018 +50.6000000000000014 1.2600000000000018 +50.7000000000000028 1.2600000000000018 +50.8000000000000043 1.2600000000000018 +50.9000000000000057 1.2600000000000018 +51.0000000000000000 1.2600000000000018 +51.1000000000000014 1.2600000000000018 +51.2000000000000028 1.2600000000000018 +51.3000000000000043 1.2600000000000018 +51.4000000000000057 1.2600000000000018 +51.5000000000000000 1.2600000000000018 +51.6000000000000014 1.2600000000000018 +51.7000000000000028 1.2600000000000018 +51.8000000000000043 1.2600000000000018 +51.9000000000000057 1.2600000000000018 +52.0000000000000000 1.2600000000000018 +52.1000000000000014 1.2600000000000018 +52.2000000000000028 1.2600000000000018 +52.3000000000000043 1.2600000000000018 +52.4000000000000057 1.2700000000000018 +52.5000000000000000 1.2700000000000018 +52.6000000000000014 1.2700000000000018 +52.7000000000000028 1.2800000000000018 +52.8000000000000043 1.2800000000000018 +52.9000000000000057 1.2800000000000018 +53.0000000000000000 1.2800000000000018 +53.1000000000000014 1.2800000000000018 +53.2000000000000028 1.2800000000000018 +53.3000000000000043 1.2800000000000018 +53.4000000000000057 1.2800000000000018 +53.5000000000000000 1.2700000000000020 +53.6000000000000014 1.2700000000000020 +53.7000000000000028 1.2600000000000022 +53.8000000000000043 1.2500000000000020 +53.9000000000000057 1.2400000000000022 +54.0000000000000000 1.2300000000000020 +54.1000000000000014 1.2200000000000017 +54.2000000000000028 1.2100000000000017 +54.3000000000000043 1.2000000000000020 +54.4000000000000057 1.1900000000000019 +54.5000000000000000 1.1800000000000017 +54.6000000000000014 1.1600000000000015 +54.7000000000000028 1.1500000000000012 +54.8000000000000043 1.1400000000000008 +54.9000000000000057 1.1200000000000012 +55.0000000000000000 1.1100000000000014 +55.1000000000000014 1.0900000000000007 +55.2000000000000028 1.0700000000000010 +55.3000000000000043 1.0600000000000016 +55.4000000000000057 1.0400000000000018 +55.5000000000000000 1.0200000000000020 +55.6000000000000014 1.0100000000000025 +55.7000000000000028 0.9900000000000028 +55.8000000000000043 0.9700000000000031 +55.9000000000000057 0.9500000000000034 +56.0000000000000000 0.9300000000000043 +56.1000000000000014 0.9200000000000041 +56.2000000000000028 0.9000000000000041 +56.3000000000000043 0.8800000000000047 +56.4000000000000057 0.8700000000000043 +56.5000000000000000 0.8500000000000035 +56.6000000000000014 0.8400000000000032 +56.7000000000000028 0.8200000000000036 +56.8000000000000043 0.8100000000000036 +56.9000000000000057 0.8000000000000037 +57.0000000000000000 0.7800000000000042 +57.1000000000000014 0.7700000000000045 +57.2000000000000028 0.7600000000000044 +57.3000000000000043 0.7500000000000044 +57.4000000000000057 0.7400000000000047 +57.5000000000000000 0.7300000000000044 +57.6000000000000014 0.7300000000000044 +57.7000000000000028 0.7200000000000044 +57.8000000000000043 0.7100000000000044 +57.9000000000000057 0.7000000000000045 +58.0000000000000000 0.7000000000000045 +58.1000000000000014 0.6900000000000044 +58.2000000000000028 0.6800000000000045 +58.3000000000000043 0.6800000000000045 +58.4000000000000057 0.6700000000000044 +58.5000000000000000 0.6700000000000044 +58.6000000000000014 0.6700000000000044 +58.7000000000000028 0.6600000000000045 +58.8000000000000043 0.6600000000000045 +58.9000000000000057 0.6600000000000045 +59.0000000000000000 0.6600000000000045 +59.1000000000000014 0.6600000000000045 +59.2000000000000028 0.6600000000000045 +59.3000000000000043 0.6600000000000045 +59.4000000000000057 0.6600000000000045 +59.5000000000000000 0.6600000000000045 +59.6000000000000014 0.6600000000000045 +59.7000000000000028 0.6700000000000046 +59.8000000000000043 0.6700000000000046 +59.9000000000000057 0.6800000000000047 +60.0000000000000000 0.6900000000000045 +60.1000000000000014 0.6900000000000045 +60.2000000000000028 0.7000000000000045 +60.3000000000000043 0.7100000000000043 +60.4000000000000057 0.7200000000000042 +60.5000000000000000 0.7300000000000041 +60.6000000000000014 0.7400000000000040 +60.7000000000000028 0.7500000000000037 +60.8000000000000043 0.7600000000000035 +60.9000000000000057 0.7800000000000037 +61.0000000000000000 0.7900000000000035 +61.1000000000000014 0.8000000000000036 +61.2000000000000028 0.8100000000000033 +61.3000000000000043 0.8200000000000035 +61.4000000000000057 0.8300000000000038 +61.5000000000000000 0.8500000000000040 +61.6000000000000014 0.8600000000000035 +61.7000000000000028 0.8700000000000033 +61.8000000000000043 0.8800000000000030 +61.9000000000000057 0.8900000000000032 +62.0000000000000000 0.9000000000000031 +62.1000000000000014 0.9100000000000034 +62.2000000000000028 0.9100000000000034 +62.3000000000000043 0.9200000000000036 +62.4000000000000057 0.9300000000000036 +62.5000000000000000 0.9300000000000036 +62.6000000000000014 0.9400000000000038 +62.7000000000000028 0.9500000000000037 +62.8000000000000043 0.9500000000000037 +62.9000000000000057 0.9600000000000039 +63.0000000000000000 0.9600000000000039 +63.1000000000000014 0.9600000000000039 +63.2000000000000028 0.9700000000000039 +63.3000000000000043 0.9700000000000039 +63.4000000000000057 0.9700000000000039 +63.5000000000000000 0.9700000000000039 +63.6000000000000014 0.9700000000000039 +63.7000000000000028 0.9700000000000039 +63.8000000000000043 0.9700000000000039 +63.9000000000000057 0.9700000000000039 +64.0000000000000000 0.9700000000000039 +64.1000000000000085 0.9600000000000037 +64.2000000000000028 0.9600000000000037 +64.2999999999999972 0.9600000000000037 +64.4000000000000057 0.9500000000000040 +64.5000000000000000 0.9500000000000040 +64.6000000000000085 0.9500000000000040 +64.7000000000000028 0.9400000000000038 +64.7999999999999972 0.9400000000000038 +64.9000000000000057 0.9400000000000038 +65.0000000000000000 0.9300000000000040 +65.1000000000000085 0.9300000000000040 +65.2000000000000028 0.9300000000000040 +65.2999999999999972 0.9300000000000040 +65.4000000000000057 0.9300000000000040 +65.5000000000000000 0.9300000000000040 +65.6000000000000085 0.9300000000000040 +65.7000000000000028 0.9200000000000040 +65.7999999999999972 0.9200000000000040 +65.9000000000000057 0.9200000000000040 +66.0000000000000000 0.9200000000000040 +66.1000000000000085 0.9200000000000040 +66.2000000000000028 0.9200000000000040 +66.2999999999999972 0.9200000000000040 +66.4000000000000057 0.9200000000000040 +66.5000000000000000 0.9200000000000040 +66.6000000000000085 0.9200000000000040 +66.7000000000000028 0.9100000000000042 +66.7999999999999972 0.9000000000000040 +66.9000000000000057 0.9000000000000040 +67.0000000000000000 0.8900000000000041 +67.1000000000000085 0.8800000000000037 +67.2000000000000028 0.8700000000000033 +67.2999999999999972 0.8600000000000028 +67.4000000000000057 0.8500000000000029 +67.5000000000000000 0.8400000000000023 +67.6000000000000085 0.8300000000000017 +67.7000000000000028 0.8200000000000019 +67.7999999999999972 0.8000000000000022 +67.9000000000000057 0.7900000000000031 +68.0000000000000000 0.7800000000000039 +68.1000000000000085 0.7600000000000037 +68.2000000000000028 0.7500000000000039 +68.2999999999999972 0.7400000000000045 +68.4000000000000057 0.7200000000000044 +68.5000000000000000 0.7100000000000036 +68.6000000000000085 0.7000000000000034 +68.7000000000000028 0.6900000000000034 +68.7999999999999972 0.6700000000000031 +68.9000000000000057 0.6600000000000038 +69.0000000000000000 0.6500000000000030 +69.1000000000000085 0.6400000000000029 +69.2000000000000028 0.6300000000000030 +69.2999999999999972 0.6200000000000032 +69.4000000000000057 0.6200000000000032 +69.5000000000000000 0.6100000000000029 +69.6000000000000085 0.6000000000000031 +69.7000000000000028 0.5900000000000034 +69.7999999999999972 0.5900000000000034 +69.9000000000000057 0.5800000000000036 +70.0000000000000000 0.5700000000000037 +70.1000000000000085 0.5700000000000037 +70.2000000000000028 0.5600000000000034 +70.2999999999999972 0.5600000000000034 +70.4000000000000057 0.5600000000000034 +70.5000000000000000 0.5600000000000034 +70.6000000000000085 0.5500000000000034 +70.7000000000000028 0.5500000000000034 +70.7999999999999972 0.5500000000000034 +70.9000000000000057 0.5500000000000034 +71.0000000000000000 0.5500000000000034 +71.1000000000000085 0.5600000000000034 +71.2000000000000028 0.5600000000000034 +71.2999999999999972 0.5700000000000031 +71.4000000000000057 0.5700000000000031 +71.5000000000000000 0.5800000000000026 +71.6000000000000085 0.5900000000000024 +71.7000000000000028 0.6000000000000031 +71.7999999999999972 0.6100000000000033 +71.9000000000000057 0.6200000000000029 +72.0000000000000000 0.6300000000000032 +72.1000000000000085 0.6400000000000023 +72.2000000000000028 0.6600000000000029 +72.2999999999999972 0.6700000000000021 +72.4000000000000057 0.6800000000000014 +72.5000000000000000 0.7000000000000015 +72.6000000000000085 0.7200000000000015 +72.7000000000000028 0.7300000000000022 +72.7999999999999972 0.7500000000000016 +72.9000000000000057 0.7700000000000026 +73.0000000000000000 0.7800000000000024 +73.1000000000000085 0.8000000000000030 +73.2000000000000028 0.8100000000000023 +73.2999999999999972 0.8300000000000007 +73.4000000000000057 0.8500000000000010 +73.5000000000000000 0.8600000000000001 +73.6000000000000085 0.8800000000000020 +73.7000000000000028 0.8900000000000012 +73.7999999999999972 0.9000000000000019 +73.9000000000000057 0.9200000000000019 +74.0000000000000000 0.9300000000000025 +74.1000000000000085 0.9400000000000024 +74.2000000000000028 0.9500000000000021 +74.2999999999999972 0.9600000000000016 +74.4000000000000057 0.9700000000000019 +74.5000000000000000 0.9800000000000014 +74.6000000000000085 0.9900000000000010 +74.7000000000000028 0.9900000000000010 +74.7999999999999972 1.0000000000000013 +74.9000000000000057 1.0100000000000018 +75.0000000000000000 1.0200000000000016 +75.1000000000000085 1.0200000000000016 +75.2000000000000028 1.0300000000000018 +75.2999999999999972 1.0300000000000018 +75.4000000000000057 1.0400000000000016 +75.5000000000000000 1.0500000000000018 +75.6000000000000085 1.0500000000000018 +75.7000000000000028 1.0600000000000023 +75.7999999999999972 1.0600000000000023 +75.9000000000000057 1.0700000000000018 +76.0000000000000000 1.0800000000000016 +76.1000000000000085 1.0900000000000023 +76.2000000000000028 1.1000000000000028 +76.2999999999999972 1.1100000000000025 +76.4000000000000057 1.1200000000000028 +76.5000000000000000 1.1300000000000030 +76.6000000000000085 1.1400000000000030 +76.7000000000000028 1.1500000000000032 +76.8000000000000114 1.1600000000000037 +76.9000000000000057 1.1700000000000039 +77.0000000000000000 1.1800000000000033 +77.1000000000000085 1.1900000000000033 +77.2000000000000028 1.2000000000000037 +77.3000000000000114 1.2100000000000042 +77.4000000000000057 1.2200000000000042 +77.5000000000000000 1.2300000000000040 +77.6000000000000085 1.2400000000000035 +77.7000000000000028 1.2500000000000038 +77.8000000000000114 1.2500000000000038 +77.9000000000000057 1.2600000000000040 +78.0000000000000000 1.2600000000000040 +78.1000000000000085 1.2700000000000036 +78.2000000000000028 1.2800000000000034 +78.3000000000000114 1.2800000000000034 +78.4000000000000057 1.2900000000000034 +78.5000000000000000 1.2900000000000034 +78.6000000000000085 1.3000000000000036 +78.7000000000000028 1.3000000000000036 +78.8000000000000114 1.3000000000000036 +78.9000000000000057 1.3100000000000038 +79.0000000000000000 1.3100000000000038 +79.1000000000000085 1.3200000000000041 +79.2000000000000028 1.3200000000000041 +79.3000000000000114 1.3200000000000041 +79.4000000000000057 1.3200000000000041 +79.5000000000000000 1.3300000000000043 +79.6000000000000085 1.3300000000000043 +79.7000000000000028 1.3300000000000043 +79.8000000000000114 1.3300000000000043 +79.9000000000000057 1.3300000000000043 +80.0000000000000000 1.3300000000000043 +80.1000000000000085 1.3300000000000043 +80.2000000000000028 1.3300000000000043 +80.3000000000000114 1.3300000000000043 +80.4000000000000057 1.3300000000000043 +80.5000000000000000 1.3200000000000043 +80.6000000000000085 1.3200000000000043 +80.7000000000000028 1.3100000000000043 +80.8000000000000114 1.3100000000000043 +80.9000000000000057 1.3000000000000038 +81.0000000000000000 1.3000000000000038 +81.1000000000000085 1.2900000000000043 +81.2000000000000028 1.2900000000000043 +81.3000000000000114 1.2800000000000045 +81.4000000000000057 1.2800000000000045 +81.5000000000000000 1.2700000000000047 +81.6000000000000085 1.2700000000000047 +81.7000000000000028 1.2600000000000049 +81.8000000000000114 1.2600000000000049 +81.9000000000000057 1.2500000000000047 +82.0000000000000000 1.2500000000000047 +82.1000000000000085 1.2400000000000051 +82.2000000000000028 1.2300000000000046 +82.3000000000000114 1.2200000000000046 +82.4000000000000057 1.2200000000000046 +82.5000000000000000 1.2100000000000042 +82.6000000000000085 1.2000000000000035 +82.7000000000000028 1.1900000000000039 +82.8000000000000114 1.1800000000000035 +82.9000000000000057 1.1600000000000046 +83.0000000000000000 1.1500000000000046 +83.1000000000000085 1.1400000000000037 +83.2000000000000028 1.1200000000000039 +83.3000000000000114 1.1100000000000030 +83.4000000000000057 1.1000000000000039 +83.5000000000000000 1.0800000000000056 +83.6000000000000085 1.0600000000000065 +83.7000000000000028 1.0500000000000056 +83.8000000000000114 1.0300000000000076 +83.9000000000000057 1.0100000000000073 +84.0000000000000000 1.0000000000000082 +84.1000000000000085 0.9800000000000079 +84.2000000000000028 0.9600000000000076 +84.3000000000000114 0.9500000000000073 +84.4000000000000057 0.9300000000000063 +84.5000000000000000 0.9200000000000065 +84.6000000000000085 0.9000000000000071 +84.7000000000000028 0.8900000000000062 +84.8000000000000114 0.8800000000000061 +84.9000000000000057 0.8700000000000062 +85.0000000000000000 0.8600000000000070 +85.1000000000000085 0.8500000000000070 +85.2000000000000028 0.8400000000000073 +85.3000000000000114 0.8300000000000076 +85.4000000000000057 0.8200000000000079 +85.5000000000000000 0.8200000000000079 +85.6000000000000085 0.8100000000000082 +85.7000000000000028 0.8000000000000084 +85.8000000000000114 0.8000000000000084 +85.9000000000000057 0.7900000000000081 +86.0000000000000000 0.7900000000000081 +86.1000000000000085 0.7900000000000081 +86.2000000000000028 0.7800000000000081 +86.3000000000000114 0.7800000000000081 +86.4000000000000057 0.7800000000000081 +86.5000000000000000 0.7800000000000081 +86.6000000000000085 0.7800000000000081 +86.7000000000000028 0.7800000000000081 +86.8000000000000114 0.7800000000000081 +86.9000000000000057 0.7800000000000081 +87.0000000000000000 0.7800000000000081 +87.1000000000000085 0.7800000000000081 +87.2000000000000028 0.7800000000000081 +87.3000000000000114 0.7800000000000081 +87.4000000000000057 0.7800000000000081 +87.5000000000000000 0.7900000000000078 +87.6000000000000085 0.7900000000000078 +87.7000000000000028 0.8000000000000078 +87.8000000000000114 0.8100000000000080 +87.9000000000000057 0.8100000000000080 +88.0000000000000000 0.8200000000000077 +88.1000000000000085 0.8300000000000071 +88.2000000000000028 0.8400000000000069 +88.3000000000000114 0.8500000000000066 +88.4000000000000057 0.8600000000000060 +88.5000000000000000 0.8700000000000067 +88.6000000000000085 0.8800000000000059 +88.7000000000000028 0.9000000000000060 +88.8000000000000114 0.9100000000000065 +88.9000000000000057 0.9200000000000060 +89.0000000000000000 0.9400000000000065 +89.1000000000000085 0.9500000000000061 +89.2000000000000028 0.9600000000000057 +89.3000000000000114 0.9800000000000052 +89.4000000000000057 0.9900000000000058 +89.5000000000000000 1.0000000000000053 +89.6000000000000085 1.0200000000000040 +89.7000000000000028 1.0300000000000042 +89.8000000000000114 1.0400000000000036 +89.9000000000000057 1.0500000000000043 +90.0000000000000000 1.0600000000000036 +90.1000000000000085 1.0800000000000043 +90.2000000000000028 1.0900000000000047 +90.3000000000000114 1.1000000000000054 +90.4000000000000057 1.1100000000000054 +90.5000000000000000 1.1100000000000054 +90.6000000000000085 1.1200000000000054 +90.7000000000000028 1.1300000000000052 +90.8000000000000114 1.1400000000000057 +90.9000000000000057 1.1400000000000057 +91.0000000000000000 1.1500000000000055 +91.1000000000000085 1.1500000000000055 +91.2000000000000028 1.1600000000000052 +91.3000000000000114 1.1600000000000052 +91.4000000000000057 1.1700000000000053 +91.5000000000000000 1.1700000000000053 +91.6000000000000085 1.1700000000000053 +91.7000000000000028 1.1700000000000053 +91.8000000000000114 1.1700000000000053 +91.9000000000000057 1.1700000000000053 +92.0000000000000000 1.1700000000000053 +92.1000000000000085 1.1700000000000053 +92.2000000000000028 1.1700000000000053 +92.3000000000000114 1.1700000000000053 +92.4000000000000057 1.1700000000000053 +92.5000000000000000 1.1600000000000048 +92.6000000000000085 1.1500000000000050 +92.7000000000000028 1.1500000000000050 +92.8000000000000114 1.1400000000000055 +92.9000000000000057 1.1300000000000054 +93.0000000000000000 1.1200000000000052 +93.1000000000000085 1.1100000000000052 +93.2000000000000028 1.1000000000000059 +93.3000000000000114 1.1000000000000059 +93.4000000000000057 1.0900000000000061 +93.5000000000000000 1.0800000000000061 +93.6000000000000085 1.0700000000000063 +93.7000000000000028 1.0700000000000063 +93.8000000000000114 1.0600000000000067 +93.9000000000000057 1.0600000000000067 +94.0000000000000000 1.0500000000000069 +94.1000000000000085 1.0500000000000069 +94.2000000000000028 1.0500000000000069 +94.3000000000000114 1.0500000000000069 +94.4000000000000057 1.0500000000000069 +94.5000000000000000 1.0500000000000069 +94.6000000000000085 1.0500000000000069 +94.7000000000000028 1.0500000000000069 +94.8000000000000114 1.0500000000000069 +94.9000000000000057 1.0500000000000069 +95.0000000000000000 1.0500000000000069 +95.1000000000000085 1.0500000000000069 +95.2000000000000028 1.0600000000000074 +95.3000000000000114 1.0600000000000074 +95.4000000000000057 1.0700000000000074 +95.5000000000000000 1.0700000000000074 +95.6000000000000085 1.0800000000000076 +95.7000000000000028 1.0800000000000076 +95.8000000000000114 1.0900000000000081 +95.9000000000000057 1.0900000000000081 +96.0000000000000000 1.1000000000000081 +96.1000000000000085 1.1000000000000081 +96.2000000000000028 1.1100000000000079 +96.3000000000000114 1.1100000000000079 +96.4000000000000057 1.1100000000000079 +96.5000000000000000 1.1100000000000079 +96.6000000000000085 1.1100000000000079 +96.7000000000000028 1.1100000000000079 +96.8000000000000114 1.1100000000000079 +96.9000000000000057 1.1100000000000079 +97.0000000000000000 1.1100000000000079 +97.1000000000000085 1.1000000000000083 +97.2000000000000028 1.0900000000000087 +97.3000000000000114 1.0800000000000090 +97.4000000000000057 1.0700000000000092 +97.5000000000000000 1.0600000000000089 +97.6000000000000085 1.0500000000000096 +97.7000000000000028 1.0400000000000096 +97.8000000000000114 1.0300000000000098 +97.9000000000000057 1.0200000000000096 +98.0000000000000000 1.0100000000000098 +98.1000000000000085 1.0000000000000093 +98.2000000000000028 0.9900000000000091 +98.3000000000000114 0.9800000000000093 +98.4000000000000057 0.9700000000000099 +98.5000000000000000 0.9600000000000094 +98.6000000000000085 0.9500000000000097 +98.7000000000000028 0.9400000000000094 +98.8000000000000114 0.9300000000000088 +98.9000000000000057 0.9200000000000081 +99.0000000000000000 0.9100000000000076 +99.1000000000000085 0.9000000000000070 +99.2000000000000028 0.9000000000000070 +99.3000000000000114 0.8900000000000068 +99.4000000000000057 0.8800000000000068 +99.5000000000000000 0.8800000000000068 +99.6000000000000085 0.8700000000000070 +99.7000000000000028 0.8700000000000070 +99.8000000000000114 0.8600000000000072 +99.9000000000000057 0.8600000000000072 +100.0000000000000000 0.8500000000000073 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[5].dat b/src/engine/tests/system/gt_data/virus_replication/X[5].dat new file mode 100644 index 00000000..051765dd --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[5].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0000000000000000 +1.2000000000000002 0.0000000000000000 +1.3000000000000000 0.0000000000000000 +1.4000000000000001 0.0000000000000000 +1.5000000000000000 0.0000000000000000 +1.6000000000000001 0.0000000000000000 +1.7000000000000002 0.0000000000000000 +1.8000000000000000 0.0000000000000000 +1.9000000000000001 0.0000000000000000 +2.0000000000000000 0.0000000000000000 +2.1000000000000001 0.0000000000000000 +2.2000000000000002 0.0100000000000000 +2.3000000000000003 0.0100000000000000 +2.4000000000000004 0.0100000000000000 +2.5000000000000000 0.0200000000000000 +2.6000000000000001 0.0200000000000000 +2.7000000000000002 0.0300000000000000 +2.8000000000000003 0.0300000000000000 +2.9000000000000004 0.0400000000000000 +3.0000000000000000 0.0500000000000000 +3.1000000000000001 0.0500000000000000 +3.2000000000000002 0.0600000000000000 +3.3000000000000003 0.0700000000000000 +3.4000000000000004 0.0800000000000000 +3.5000000000000000 0.1000000000000001 +3.6000000000000001 0.1100000000000000 +3.7000000000000002 0.1200000000000001 +3.8000000000000003 0.1300000000000000 +3.9000000000000004 0.1500000000000000 +4.0000000000000000 0.1600000000000000 +4.1000000000000005 0.1800000000000000 +4.2000000000000002 0.1900000000000000 +4.2999999999999998 0.2100000000000001 +4.4000000000000004 0.2200000000000001 +4.5000000000000000 0.2400000000000002 +4.6000000000000005 0.2600000000000002 +4.7000000000000002 0.2700000000000001 +4.8000000000000007 0.2900000000000001 +4.9000000000000004 0.3100000000000002 +5.0000000000000000 0.3300000000000003 +5.1000000000000005 0.3500000000000004 +5.2000000000000002 0.3600000000000003 +5.3000000000000007 0.3800000000000001 +5.4000000000000004 0.4000000000000000 +5.5000000000000000 0.4200000000000000 +5.6000000000000005 0.4400000000000002 +5.7000000000000002 0.4500000000000001 +5.8000000000000007 0.4700000000000001 +5.9000000000000004 0.4900000000000000 +6.0000000000000000 0.5099999999999999 +6.1000000000000005 0.5299999999999998 +6.2000000000000002 0.5399999999999998 +6.3000000000000007 0.5599999999999997 +6.4000000000000004 0.5799999999999998 +6.5000000000000000 0.5999999999999998 +6.6000000000000005 0.6099999999999998 +6.7000000000000002 0.6299999999999997 +6.8000000000000007 0.6399999999999997 +6.9000000000000004 0.6599999999999997 +7.0000000000000000 0.6799999999999996 +7.1000000000000005 0.6899999999999996 +7.2000000000000002 0.7099999999999995 +7.3000000000000007 0.7199999999999994 +7.4000000000000004 0.7399999999999994 +7.5000000000000000 0.7499999999999994 +7.6000000000000005 0.7599999999999995 +7.7000000000000002 0.7799999999999995 +7.8000000000000007 0.7899999999999995 +7.9000000000000004 0.7999999999999995 +8.0000000000000000 0.8199999999999995 +8.0999999999999996 0.8299999999999995 +8.2000000000000011 0.8399999999999995 +8.3000000000000007 0.8499999999999996 +8.4000000000000004 0.8699999999999998 +8.5000000000000000 0.8799999999999998 +8.5999999999999996 0.8899999999999999 +8.7000000000000011 0.8999999999999999 +8.8000000000000007 0.9099999999999998 +8.9000000000000004 0.9199999999999998 +9.0000000000000000 0.9299999999999997 +9.0999999999999996 0.9499999999999997 +9.2000000000000011 0.9599999999999997 +9.3000000000000007 0.9699999999999998 +9.4000000000000004 0.9799999999999996 +9.5000000000000000 0.9899999999999998 +9.6000000000000014 0.9999999999999997 +9.7000000000000011 1.0099999999999996 +9.8000000000000007 1.0199999999999996 +9.9000000000000004 1.0299999999999996 +10.0000000000000000 1.0399999999999996 +10.1000000000000014 1.0499999999999996 +10.2000000000000011 1.0599999999999996 +10.3000000000000007 1.0699999999999996 +10.4000000000000004 1.0699999999999996 +10.5000000000000000 1.0799999999999996 +10.6000000000000014 1.0899999999999996 +10.7000000000000011 1.0999999999999996 +10.8000000000000007 1.1099999999999997 +10.9000000000000004 1.1099999999999997 +11.0000000000000000 1.1199999999999997 +11.1000000000000014 1.1199999999999997 +11.2000000000000011 1.1299999999999997 +11.3000000000000007 1.1399999999999997 +11.4000000000000004 1.1399999999999997 +11.5000000000000000 1.1499999999999997 +11.6000000000000014 1.1499999999999997 +11.7000000000000011 1.1499999999999997 +11.8000000000000007 1.1599999999999997 +11.9000000000000004 1.1599999999999997 +12.0000000000000000 1.1599999999999997 +12.1000000000000014 1.1599999999999997 +12.2000000000000011 1.1699999999999997 +12.3000000000000007 1.1699999999999997 +12.4000000000000004 1.1699999999999997 +12.5000000000000000 1.1699999999999997 +12.6000000000000014 1.1699999999999997 +12.7000000000000011 1.1699999999999997 +12.8000000000000007 1.1699999999999997 +12.9000000000000004 1.1699999999999997 +13.0000000000000000 1.1699999999999997 +13.1000000000000014 1.1699999999999997 +13.2000000000000011 1.1699999999999997 +13.3000000000000007 1.1699999999999997 +13.4000000000000004 1.1699999999999997 +13.5000000000000000 1.1699999999999997 +13.6000000000000014 1.1699999999999997 +13.7000000000000011 1.1599999999999997 +13.8000000000000007 1.1599999999999997 +13.9000000000000004 1.1599999999999997 +14.0000000000000000 1.1599999999999997 +14.1000000000000014 1.1599999999999997 +14.2000000000000011 1.1599999999999997 +14.3000000000000007 1.1599999999999997 +14.4000000000000004 1.1599999999999997 +14.5000000000000000 1.1599999999999997 +14.6000000000000014 1.1699999999999997 +14.7000000000000011 1.1699999999999997 +14.8000000000000007 1.1699999999999997 +14.9000000000000004 1.1699999999999997 +15.0000000000000000 1.1699999999999997 +15.1000000000000014 1.1699999999999997 +15.2000000000000011 1.1699999999999997 +15.3000000000000007 1.1699999999999997 +15.4000000000000004 1.1699999999999997 +15.5000000000000000 1.1699999999999997 +15.6000000000000014 1.1699999999999997 +15.7000000000000011 1.1599999999999997 +15.8000000000000007 1.1599999999999997 +15.9000000000000004 1.1499999999999997 +16.0000000000000000 1.1499999999999997 +16.1000000000000014 1.1399999999999997 +16.1999999999999993 1.1299999999999997 +16.3000000000000007 1.1299999999999997 +16.4000000000000021 1.1199999999999997 +16.5000000000000000 1.1099999999999997 +16.6000000000000014 1.0999999999999996 +16.6999999999999993 1.0899999999999996 +16.8000000000000007 1.0799999999999996 +16.9000000000000021 1.0699999999999994 +17.0000000000000000 1.0599999999999994 +17.1000000000000014 1.0499999999999994 +17.1999999999999993 1.0399999999999996 +17.3000000000000007 1.0299999999999996 +17.4000000000000021 1.0199999999999996 +17.5000000000000000 0.9999999999999991 +17.6000000000000014 0.9899999999999991 +17.6999999999999993 0.9799999999999992 +17.8000000000000007 0.9699999999999990 +17.9000000000000021 0.9499999999999991 +18.0000000000000000 0.9399999999999991 +18.1000000000000014 0.9299999999999988 +18.1999999999999993 0.9199999999999990 +18.3000000000000007 0.9099999999999990 +18.4000000000000021 0.8999999999999990 +18.5000000000000000 0.8899999999999991 +18.6000000000000014 0.8799999999999992 +18.6999999999999993 0.8699999999999991 +18.8000000000000007 0.8599999999999992 +18.9000000000000021 0.8499999999999992 +19.0000000000000000 0.8399999999999992 +19.1000000000000014 0.8399999999999992 +19.2000000000000028 0.8299999999999992 +19.3000000000000007 0.8299999999999992 +19.4000000000000021 0.8199999999999993 +19.5000000000000000 0.8199999999999993 +19.6000000000000014 0.8199999999999993 +19.7000000000000028 0.8199999999999993 +19.8000000000000007 0.8199999999999993 +19.9000000000000021 0.8199999999999993 +20.0000000000000000 0.8199999999999993 +20.1000000000000014 0.8199999999999993 +20.2000000000000028 0.8199999999999993 +20.3000000000000007 0.8199999999999993 +20.4000000000000021 0.8199999999999993 +20.5000000000000000 0.8199999999999993 +20.6000000000000014 0.8299999999999992 +20.7000000000000028 0.8299999999999992 +20.8000000000000007 0.8399999999999992 +20.9000000000000021 0.8499999999999993 +21.0000000000000000 0.8499999999999993 +21.1000000000000014 0.8599999999999993 +21.2000000000000028 0.8599999999999993 +21.3000000000000007 0.8699999999999993 +21.4000000000000021 0.8799999999999993 +21.5000000000000000 0.8799999999999993 +21.6000000000000014 0.8899999999999992 +21.7000000000000028 0.8999999999999992 +21.8000000000000007 0.8999999999999992 +21.9000000000000021 0.9099999999999993 +22.0000000000000000 0.9099999999999993 +22.1000000000000014 0.9199999999999993 +22.2000000000000028 0.9299999999999993 +22.3000000000000007 0.9299999999999993 +22.4000000000000021 0.9399999999999993 +22.5000000000000000 0.9399999999999993 +22.6000000000000014 0.9499999999999993 +22.7000000000000028 0.9499999999999993 +22.8000000000000007 0.9599999999999992 +22.9000000000000021 0.9599999999999992 +23.0000000000000000 0.9699999999999992 +23.1000000000000014 0.9699999999999992 +23.2000000000000028 0.9699999999999992 +23.3000000000000007 0.9799999999999992 +23.4000000000000021 0.9799999999999992 +23.5000000000000000 0.9899999999999992 +23.6000000000000014 0.9899999999999992 +23.7000000000000028 0.9999999999999993 +23.8000000000000007 0.9999999999999993 +23.9000000000000021 1.0099999999999993 +24.0000000000000000 1.0099999999999993 +24.1000000000000014 1.0199999999999994 +24.2000000000000028 1.0199999999999994 +24.3000000000000007 1.0299999999999994 +24.4000000000000021 1.0299999999999994 +24.5000000000000000 1.0399999999999994 +24.6000000000000014 1.0399999999999994 +24.7000000000000028 1.0499999999999994 +24.8000000000000007 1.0499999999999994 +24.9000000000000021 1.0499999999999994 +25.0000000000000000 1.0599999999999994 +25.1000000000000014 1.0599999999999994 +25.2000000000000028 1.0599999999999994 +25.3000000000000007 1.0699999999999994 +25.4000000000000021 1.0699999999999994 +25.5000000000000000 1.0699999999999994 +25.6000000000000014 1.0699999999999994 +25.7000000000000028 1.0699999999999994 +25.8000000000000007 1.0699999999999994 +25.9000000000000021 1.0699999999999994 +26.0000000000000000 1.0699999999999994 +26.1000000000000014 1.0599999999999994 +26.2000000000000028 1.0599999999999994 +26.3000000000000007 1.0599999999999994 +26.4000000000000021 1.0499999999999994 +26.5000000000000000 1.0399999999999994 +26.6000000000000014 1.0399999999999994 +26.7000000000000028 1.0299999999999994 +26.8000000000000007 1.0199999999999994 +26.9000000000000021 1.0199999999999994 +27.0000000000000000 1.0099999999999993 +27.1000000000000014 0.9999999999999993 +27.2000000000000028 0.9999999999999993 +27.3000000000000007 0.9899999999999993 +27.4000000000000021 0.9799999999999993 +27.5000000000000000 0.9699999999999993 +27.6000000000000014 0.9699999999999993 +27.7000000000000028 0.9599999999999994 +27.8000000000000007 0.9499999999999994 +27.9000000000000021 0.9499999999999994 +28.0000000000000000 0.9399999999999994 +28.1000000000000014 0.9399999999999994 +28.2000000000000028 0.9299999999999995 +28.3000000000000007 0.9299999999999995 +28.4000000000000021 0.9299999999999995 +28.5000000000000000 0.9199999999999995 +28.6000000000000014 0.9199999999999995 +28.7000000000000028 0.9199999999999995 +28.8000000000000007 0.9099999999999995 +28.9000000000000021 0.9099999999999995 +29.0000000000000000 0.9099999999999995 +29.1000000000000014 0.9099999999999995 +29.2000000000000028 0.9099999999999995 +29.3000000000000007 0.9099999999999995 +29.4000000000000021 0.9099999999999995 +29.5000000000000000 0.9099999999999995 +29.6000000000000014 0.9099999999999995 +29.7000000000000028 0.9099999999999995 +29.8000000000000007 0.9099999999999995 +29.9000000000000021 0.9099999999999995 +30.0000000000000000 0.9099999999999995 +30.1000000000000014 0.9099999999999995 +30.2000000000000028 0.9099999999999995 +30.3000000000000007 0.9099999999999995 +30.4000000000000021 0.9099999999999995 +30.5000000000000000 0.9099999999999995 +30.6000000000000014 0.9099999999999995 +30.7000000000000028 0.9099999999999995 +30.8000000000000007 0.9099999999999995 +30.9000000000000021 0.9099999999999995 +31.0000000000000000 0.9099999999999995 +31.1000000000000014 0.9099999999999995 +31.2000000000000028 0.8999999999999995 +31.3000000000000007 0.8999999999999995 +31.4000000000000021 0.8999999999999995 +31.5000000000000000 0.8999999999999995 +31.6000000000000014 0.8899999999999995 +31.7000000000000028 0.8899999999999995 +31.8000000000000007 0.8799999999999996 +31.9000000000000021 0.8799999999999996 +32.0000000000000000 0.8699999999999996 +32.1000000000000014 0.8699999999999996 +32.2000000000000028 0.8599999999999997 +32.3000000000000043 0.8599999999999997 +32.3999999999999986 0.8499999999999995 +32.5000000000000000 0.8499999999999995 +32.6000000000000014 0.8399999999999997 +32.7000000000000028 0.8300000000000000 +32.8000000000000043 0.8300000000000000 +32.8999999999999986 0.8199999999999998 +33.0000000000000000 0.8099999999999996 +33.1000000000000014 0.8099999999999996 +33.2000000000000028 0.7999999999999997 +33.3000000000000043 0.7899999999999995 +33.3999999999999986 0.7799999999999994 +33.5000000000000000 0.7799999999999994 +33.6000000000000014 0.7699999999999991 +33.7000000000000028 0.7599999999999990 +33.8000000000000043 0.7499999999999988 +33.8999999999999986 0.7399999999999990 +34.0000000000000000 0.7399999999999990 +34.1000000000000014 0.7299999999999990 +34.2000000000000028 0.7199999999999991 +34.3000000000000043 0.7099999999999991 +34.3999999999999986 0.6999999999999992 +34.5000000000000000 0.6899999999999991 +34.6000000000000014 0.6899999999999991 +34.7000000000000028 0.6799999999999990 +34.8000000000000043 0.6699999999999994 +34.8999999999999986 0.6599999999999993 +35.0000000000000000 0.6499999999999995 +35.1000000000000014 0.6499999999999995 +35.2000000000000028 0.6399999999999997 +35.3000000000000043 0.6299999999999999 +35.3999999999999986 0.6299999999999999 +35.5000000000000000 0.6199999999999999 +35.6000000000000014 0.6199999999999999 +35.7000000000000028 0.6100000000000000 +35.8000000000000043 0.6100000000000000 +35.8999999999999986 0.6100000000000000 +36.0000000000000000 0.6000000000000000 +36.1000000000000014 0.6000000000000000 +36.2000000000000028 0.6000000000000000 +36.3000000000000043 0.6000000000000000 +36.3999999999999986 0.6000000000000000 +36.5000000000000000 0.6000000000000000 +36.6000000000000014 0.6099999999999999 +36.7000000000000028 0.6199999999999998 +36.8000000000000043 0.6199999999999998 +36.8999999999999986 0.6299999999999999 +37.0000000000000000 0.6400000000000001 +37.1000000000000014 0.6500000000000002 +37.2000000000000028 0.6600000000000005 +37.3000000000000043 0.6800000000000005 +37.3999999999999986 0.6900000000000008 +37.5000000000000000 0.7000000000000005 +37.6000000000000014 0.7100000000000010 +37.7000000000000028 0.7300000000000002 +37.8000000000000043 0.7400000000000001 +37.8999999999999986 0.7499999999999998 +38.0000000000000000 0.7600000000000000 +38.1000000000000014 0.7799999999999997 +38.2000000000000028 0.7899999999999996 +38.3000000000000043 0.7999999999999994 +38.4000000000000057 0.8099999999999992 +38.5000000000000000 0.8199999999999991 +38.6000000000000014 0.8299999999999994 +38.7000000000000028 0.8399999999999992 +38.8000000000000043 0.8499999999999992 +38.9000000000000057 0.8599999999999991 +39.0000000000000000 0.8699999999999989 +39.1000000000000014 0.8699999999999989 +39.2000000000000028 0.8799999999999990 +39.3000000000000043 0.8799999999999990 +39.4000000000000057 0.8899999999999989 +39.5000000000000000 0.8899999999999989 +39.6000000000000014 0.8899999999999989 +39.7000000000000028 0.8999999999999988 +39.8000000000000043 0.8999999999999988 +39.9000000000000057 0.8999999999999988 +40.0000000000000000 0.9099999999999988 +40.1000000000000014 0.9099999999999988 +40.2000000000000028 0.9099999999999988 +40.3000000000000043 0.9099999999999988 +40.4000000000000057 0.9099999999999988 +40.5000000000000000 0.9099999999999988 +40.6000000000000014 0.9099999999999988 +40.7000000000000028 0.9199999999999988 +40.8000000000000043 0.9199999999999988 +40.9000000000000057 0.9199999999999988 +41.0000000000000000 0.9199999999999988 +41.1000000000000014 0.9299999999999989 +41.2000000000000028 0.9299999999999989 +41.3000000000000043 0.9299999999999989 +41.4000000000000057 0.9399999999999989 +41.5000000000000000 0.9399999999999989 +41.6000000000000014 0.9499999999999990 +41.7000000000000028 0.9599999999999987 +41.8000000000000043 0.9599999999999987 +41.9000000000000057 0.9699999999999988 +42.0000000000000000 0.9699999999999988 +42.1000000000000014 0.9799999999999988 +42.2000000000000028 0.9899999999999987 +42.3000000000000043 0.9899999999999987 +42.4000000000000057 0.9999999999999986 +42.5000000000000000 0.9999999999999986 +42.6000000000000014 1.0099999999999985 +42.7000000000000028 1.0199999999999985 +42.8000000000000043 1.0199999999999985 +42.9000000000000057 1.0299999999999985 +43.0000000000000000 1.0299999999999985 +43.1000000000000014 1.0399999999999983 +43.2000000000000028 1.0399999999999983 +43.3000000000000043 1.0499999999999983 +43.4000000000000057 1.0499999999999983 +43.5000000000000000 1.0499999999999983 +43.6000000000000014 1.0599999999999981 +43.7000000000000028 1.0599999999999981 +43.8000000000000043 1.0599999999999981 +43.9000000000000057 1.0699999999999981 +44.0000000000000000 1.0699999999999981 +44.1000000000000014 1.0699999999999981 +44.2000000000000028 1.0699999999999981 +44.3000000000000043 1.0699999999999981 +44.4000000000000057 1.0699999999999981 +44.5000000000000000 1.0699999999999981 +44.6000000000000014 1.0799999999999981 +44.7000000000000028 1.0799999999999981 +44.8000000000000043 1.0799999999999981 +44.9000000000000057 1.0799999999999981 +45.0000000000000000 1.0799999999999981 +45.1000000000000014 1.0799999999999981 +45.2000000000000028 1.0799999999999981 +45.3000000000000043 1.0799999999999981 +45.4000000000000057 1.0799999999999981 +45.5000000000000000 1.0799999999999981 +45.6000000000000014 1.0699999999999981 +45.7000000000000028 1.0699999999999981 +45.8000000000000043 1.0699999999999981 +45.9000000000000057 1.0699999999999981 +46.0000000000000000 1.0699999999999981 +46.1000000000000014 1.0699999999999981 +46.2000000000000028 1.0699999999999981 +46.3000000000000043 1.0599999999999981 +46.4000000000000057 1.0599999999999981 +46.5000000000000000 1.0599999999999981 +46.6000000000000014 1.0599999999999981 +46.7000000000000028 1.0499999999999980 +46.8000000000000043 1.0499999999999980 +46.9000000000000057 1.0499999999999980 +47.0000000000000000 1.0499999999999980 +47.1000000000000014 1.0499999999999980 +47.2000000000000028 1.0499999999999980 +47.3000000000000043 1.0499999999999980 +47.4000000000000057 1.0499999999999980 +47.5000000000000000 1.0499999999999980 +47.6000000000000014 1.0499999999999980 +47.7000000000000028 1.0499999999999980 +47.8000000000000043 1.0499999999999980 +47.9000000000000057 1.0499999999999980 +48.0000000000000000 1.0599999999999978 +48.1000000000000014 1.0699999999999981 +48.2000000000000028 1.0699999999999981 +48.3000000000000043 1.0799999999999979 +48.4000000000000057 1.0899999999999979 +48.5000000000000000 1.0999999999999976 +48.6000000000000014 1.0999999999999976 +48.7000000000000028 1.1099999999999977 +48.8000000000000043 1.1199999999999974 +48.9000000000000057 1.1299999999999975 +49.0000000000000000 1.1299999999999975 +49.1000000000000014 1.1399999999999977 +49.2000000000000028 1.1499999999999975 +49.3000000000000043 1.1599999999999975 +49.4000000000000057 1.1599999999999975 +49.5000000000000000 1.1699999999999973 +49.6000000000000014 1.1799999999999973 +49.7000000000000028 1.1799999999999973 +49.8000000000000043 1.1899999999999975 +49.9000000000000057 1.1899999999999975 +50.0000000000000000 1.1999999999999977 +50.1000000000000014 1.1999999999999977 +50.2000000000000028 1.2099999999999975 +50.3000000000000043 1.2099999999999975 +50.4000000000000057 1.2199999999999975 +50.5000000000000000 1.2199999999999975 +50.6000000000000014 1.2199999999999975 +50.7000000000000028 1.2299999999999975 +50.8000000000000043 1.2299999999999975 +50.9000000000000057 1.2299999999999975 +51.0000000000000000 1.2399999999999975 +51.1000000000000014 1.2399999999999975 +51.2000000000000028 1.2399999999999975 +51.3000000000000043 1.2399999999999975 +51.4000000000000057 1.2399999999999975 +51.5000000000000000 1.2499999999999976 +51.6000000000000014 1.2499999999999976 +51.7000000000000028 1.2499999999999976 +51.8000000000000043 1.2499999999999976 +51.9000000000000057 1.2499999999999976 +52.0000000000000000 1.2499999999999976 +52.1000000000000014 1.2499999999999976 +52.2000000000000028 1.2499999999999976 +52.3000000000000043 1.2499999999999976 +52.4000000000000057 1.2599999999999976 +52.5000000000000000 1.2599999999999976 +52.6000000000000014 1.2599999999999976 +52.7000000000000028 1.2599999999999976 +52.8000000000000043 1.2599999999999976 +52.9000000000000057 1.2599999999999976 +53.0000000000000000 1.2599999999999976 +53.1000000000000014 1.2699999999999976 +53.2000000000000028 1.2699999999999976 +53.3000000000000043 1.2699999999999976 +53.4000000000000057 1.2699999999999976 +53.5000000000000000 1.2699999999999976 +53.6000000000000014 1.2699999999999976 +53.7000000000000028 1.2699999999999976 +53.8000000000000043 1.2699999999999976 +53.9000000000000057 1.2699999999999976 +54.0000000000000000 1.2699999999999976 +54.1000000000000014 1.2699999999999976 +54.2000000000000028 1.2599999999999973 +54.3000000000000043 1.2599999999999973 +54.4000000000000057 1.2499999999999973 +54.5000000000000000 1.2499999999999973 +54.6000000000000014 1.2399999999999973 +54.7000000000000028 1.2299999999999973 +54.8000000000000043 1.2199999999999973 +54.9000000000000057 1.2099999999999975 +55.0000000000000000 1.1999999999999973 +55.1000000000000014 1.1899999999999977 +55.2000000000000028 1.1799999999999979 +55.3000000000000043 1.1699999999999979 +55.4000000000000057 1.1599999999999979 +55.5000000000000000 1.1499999999999981 +55.6000000000000014 1.1399999999999986 +55.7000000000000028 1.1199999999999990 +55.8000000000000043 1.1099999999999990 +55.9000000000000057 1.0899999999999983 +56.0000000000000000 1.0799999999999981 +56.1000000000000014 1.0699999999999983 +56.2000000000000028 1.0499999999999987 +56.3000000000000043 1.0399999999999989 +56.4000000000000057 1.0199999999999991 +56.5000000000000000 1.0099999999999996 +56.6000000000000014 0.9899999999999998 +56.7000000000000028 0.9699999999999992 +56.8000000000000043 0.9599999999999991 +56.9000000000000057 0.9399999999999993 +57.0000000000000000 0.9299999999999995 +57.1000000000000014 0.9199999999999995 +57.2000000000000028 0.8999999999999991 +57.3000000000000043 0.8899999999999988 +57.4000000000000057 0.8699999999999991 +57.5000000000000000 0.8599999999999991 +57.6000000000000014 0.8499999999999989 +57.7000000000000028 0.8399999999999989 +57.8000000000000043 0.8199999999999991 +57.9000000000000057 0.8099999999999989 +58.0000000000000000 0.7999999999999992 +58.1000000000000014 0.7899999999999995 +58.2000000000000028 0.7799999999999998 +58.3000000000000043 0.7699999999999998 +58.4000000000000057 0.7600000000000000 +58.5000000000000000 0.7499999999999998 +58.6000000000000014 0.7499999999999998 +58.7000000000000028 0.7399999999999998 +58.8000000000000043 0.7299999999999998 +58.9000000000000057 0.7199999999999998 +59.0000000000000000 0.7199999999999998 +59.1000000000000014 0.7099999999999999 +59.2000000000000028 0.7099999999999999 +59.3000000000000043 0.7000000000000000 +59.4000000000000057 0.7000000000000000 +59.5000000000000000 0.7000000000000000 +59.6000000000000014 0.6899999999999999 +59.7000000000000028 0.6899999999999999 +59.8000000000000043 0.6899999999999999 +59.9000000000000057 0.6899999999999999 +60.0000000000000000 0.6899999999999999 +60.1000000000000014 0.6899999999999999 +60.2000000000000028 0.6899999999999999 +60.3000000000000043 0.6899999999999999 +60.4000000000000057 0.6899999999999999 +60.5000000000000000 0.6899999999999999 +60.6000000000000014 0.6899999999999999 +60.7000000000000028 0.6899999999999999 +60.8000000000000043 0.7000000000000000 +60.9000000000000057 0.7100000000000000 +61.0000000000000000 0.7100000000000000 +61.1000000000000014 0.7200000000000000 +61.2000000000000028 0.7300000000000001 +61.3000000000000043 0.7400000000000003 +61.4000000000000057 0.7500000000000006 +61.5000000000000000 0.7600000000000005 +61.6000000000000014 0.7600000000000005 +61.7000000000000028 0.7700000000000004 +61.8000000000000043 0.7800000000000005 +61.9000000000000057 0.7900000000000007 +62.0000000000000000 0.8000000000000007 +62.1000000000000014 0.8100000000000007 +62.2000000000000028 0.8200000000000006 +62.3000000000000043 0.8300000000000006 +62.4000000000000057 0.8400000000000006 +62.5000000000000000 0.8500000000000005 +62.6000000000000014 0.8600000000000007 +62.7000000000000028 0.8600000000000007 +62.8000000000000043 0.8700000000000003 +62.9000000000000057 0.8800000000000002 +63.0000000000000000 0.8900000000000001 +63.1000000000000014 0.8900000000000001 +63.2000000000000028 0.9000000000000004 +63.3000000000000043 0.9100000000000003 +63.4000000000000057 0.9100000000000003 +63.5000000000000000 0.9200000000000003 +63.6000000000000014 0.9200000000000003 +63.7000000000000028 0.9300000000000004 +63.8000000000000043 0.9300000000000004 +63.9000000000000057 0.9400000000000004 +64.0000000000000000 0.9400000000000004 +64.1000000000000085 0.9400000000000004 +64.2000000000000028 0.9400000000000004 +64.2999999999999972 0.9500000000000004 +64.4000000000000057 0.9500000000000004 +64.5000000000000000 0.9500000000000004 +64.6000000000000085 0.9500000000000004 +64.7000000000000028 0.9500000000000004 +64.7999999999999972 0.9500000000000004 +64.9000000000000057 0.9500000000000004 +65.0000000000000000 0.9500000000000004 +65.1000000000000085 0.9500000000000004 +65.2000000000000028 0.9500000000000004 +65.2999999999999972 0.9400000000000003 +65.4000000000000057 0.9400000000000003 +65.5000000000000000 0.9400000000000003 +65.6000000000000085 0.9400000000000003 +65.7000000000000028 0.9400000000000003 +65.7999999999999972 0.9400000000000003 +65.9000000000000057 0.9400000000000003 +66.0000000000000000 0.9300000000000003 +66.1000000000000085 0.9300000000000003 +66.2000000000000028 0.9300000000000003 +66.2999999999999972 0.9300000000000003 +66.4000000000000057 0.9300000000000003 +66.5000000000000000 0.9300000000000003 +66.6000000000000085 0.9300000000000003 +66.7000000000000028 0.9300000000000003 +66.7999999999999972 0.9200000000000002 +66.9000000000000057 0.9200000000000002 +67.0000000000000000 0.9200000000000002 +67.1000000000000085 0.9200000000000002 +67.2000000000000028 0.9100000000000004 +67.2999999999999972 0.9100000000000004 +67.4000000000000057 0.9000000000000000 +67.5000000000000000 0.9000000000000000 +67.6000000000000085 0.8900000000000002 +67.7000000000000028 0.8900000000000002 +67.7999999999999972 0.8800000000000003 +67.9000000000000057 0.8700000000000000 +68.0000000000000000 0.8600000000000000 +68.1000000000000085 0.8499999999999994 +68.2000000000000028 0.8399999999999996 +68.2999999999999972 0.8300000000000003 +68.4000000000000057 0.8200000000000006 +68.5000000000000000 0.8100000000000003 +68.6000000000000085 0.8000000000000008 +68.7000000000000028 0.7900000000000014 +68.7999999999999972 0.7800000000000006 +68.9000000000000057 0.7700000000000006 +69.0000000000000000 0.7600000000000006 +69.1000000000000085 0.7500000000000011 +69.2000000000000028 0.7400000000000008 +69.2999999999999972 0.7300000000000000 +69.4000000000000057 0.7199999999999993 +69.5000000000000000 0.7099999999999993 +69.6000000000000085 0.6999999999999988 +69.7000000000000028 0.6899999999999988 +69.7999999999999972 0.6799999999999982 +69.9000000000000057 0.6699999999999976 +70.0000000000000000 0.6599999999999980 +70.1000000000000085 0.6499999999999980 +70.2000000000000028 0.6399999999999981 +70.2999999999999972 0.6399999999999981 +70.4000000000000057 0.6299999999999977 +70.5000000000000000 0.6199999999999978 +70.6000000000000085 0.6199999999999978 +70.7000000000000028 0.6099999999999978 +70.7999999999999972 0.5999999999999975 +70.9000000000000057 0.5999999999999975 +71.0000000000000000 0.5899999999999979 +71.1000000000000085 0.5899999999999979 +71.2000000000000028 0.5899999999999979 +71.2999999999999972 0.5799999999999980 +71.4000000000000057 0.5799999999999980 +71.5000000000000000 0.5799999999999980 +71.6000000000000085 0.5799999999999980 +71.7000000000000028 0.5799999999999980 +71.7999999999999972 0.5799999999999980 +71.9000000000000057 0.5799999999999980 +72.0000000000000000 0.5899999999999981 +72.1000000000000085 0.5899999999999981 +72.2000000000000028 0.5999999999999978 +72.2999999999999972 0.5999999999999978 +72.4000000000000057 0.6099999999999981 +72.5000000000000000 0.6199999999999986 +72.6000000000000085 0.6299999999999982 +72.7000000000000028 0.6399999999999983 +72.7999999999999972 0.6499999999999978 +72.9000000000000057 0.6599999999999983 +73.0000000000000000 0.6699999999999979 +73.1000000000000085 0.6799999999999975 +73.2000000000000028 0.6899999999999979 +73.2999999999999972 0.6999999999999980 +73.4000000000000057 0.7199999999999974 +73.5000000000000000 0.7299999999999982 +73.6000000000000085 0.7399999999999987 +73.7000000000000028 0.7599999999999972 +73.7999999999999972 0.7699999999999964 +73.9000000000000057 0.7799999999999971 +74.0000000000000000 0.7999999999999977 +74.1000000000000085 0.8099999999999975 +74.2000000000000028 0.8199999999999983 +74.2999999999999972 0.8299999999999988 +74.4000000000000057 0.8499999999999983 +74.5000000000000000 0.8599999999999980 +74.6000000000000085 0.8699999999999977 +74.7000000000000028 0.8799999999999985 +74.7999999999999972 0.8899999999999985 +74.9000000000000057 0.8999999999999990 +75.0000000000000000 0.9099999999999995 +75.1000000000000085 0.9199999999999999 +75.2000000000000028 0.9299999999999995 +75.2999999999999972 0.9399999999999992 +75.4000000000000057 0.9499999999999998 +75.5000000000000000 0.9600000000000003 +75.6000000000000085 0.9700000000000003 +75.7000000000000028 0.9800000000000009 +75.7999999999999972 0.9900000000000011 +75.9000000000000057 0.9900000000000011 +76.0000000000000000 1.0000000000000007 +76.1000000000000085 1.0100000000000011 +76.2000000000000028 1.0200000000000007 +76.2999999999999972 1.0200000000000007 +76.4000000000000057 1.0300000000000011 +76.5000000000000000 1.0400000000000007 +76.6000000000000085 1.0500000000000005 +76.7000000000000028 1.0600000000000009 +76.8000000000000114 1.0700000000000014 +76.9000000000000057 1.0800000000000018 +77.0000000000000000 1.0900000000000023 +77.1000000000000085 1.1000000000000016 +77.2000000000000028 1.1100000000000021 +77.3000000000000114 1.1200000000000017 +77.4000000000000057 1.1300000000000010 +77.5000000000000000 1.1400000000000015 +77.6000000000000085 1.1400000000000015 +77.7000000000000028 1.1500000000000021 +77.8000000000000114 1.1600000000000017 +77.9000000000000057 1.1700000000000021 +78.0000000000000000 1.1800000000000017 +78.1000000000000085 1.1900000000000019 +78.2000000000000028 1.2000000000000015 +78.3000000000000114 1.2000000000000015 +78.4000000000000057 1.2100000000000017 +78.5000000000000000 1.2200000000000017 +78.6000000000000085 1.2300000000000015 +78.7000000000000028 1.2300000000000015 +78.8000000000000114 1.2400000000000015 +78.9000000000000057 1.2500000000000020 +79.0000000000000000 1.2500000000000020 +79.1000000000000085 1.2600000000000018 +79.2000000000000028 1.2600000000000018 +79.3000000000000114 1.2700000000000016 +79.4000000000000057 1.2700000000000016 +79.5000000000000000 1.2800000000000014 +79.6000000000000085 1.2800000000000014 +79.7000000000000028 1.2900000000000014 +79.8000000000000114 1.2900000000000014 +79.9000000000000057 1.3000000000000016 +80.0000000000000000 1.3000000000000016 +80.1000000000000085 1.3000000000000016 +80.2000000000000028 1.3100000000000016 +80.3000000000000114 1.3100000000000016 +80.4000000000000057 1.3100000000000016 +80.5000000000000000 1.3100000000000016 +80.6000000000000085 1.3100000000000016 +80.7000000000000028 1.3100000000000016 +80.8000000000000114 1.3100000000000016 +80.9000000000000057 1.3100000000000016 +81.0000000000000000 1.3100000000000016 +81.1000000000000085 1.3100000000000016 +81.2000000000000028 1.3100000000000016 +81.3000000000000114 1.3100000000000016 +81.4000000000000057 1.3100000000000016 +81.5000000000000000 1.3100000000000016 +81.6000000000000085 1.3100000000000016 +81.7000000000000028 1.3000000000000016 +81.8000000000000114 1.3000000000000016 +81.9000000000000057 1.2900000000000018 +82.0000000000000000 1.2900000000000018 +82.1000000000000085 1.2800000000000018 +82.2000000000000028 1.2800000000000018 +82.3000000000000114 1.2800000000000018 +82.4000000000000057 1.2700000000000016 +82.5000000000000000 1.2600000000000018 +82.6000000000000085 1.2600000000000018 +82.7000000000000028 1.2500000000000013 +82.8000000000000114 1.2500000000000013 +82.9000000000000057 1.2400000000000018 +83.0000000000000000 1.2300000000000018 +83.1000000000000085 1.2200000000000011 +83.2000000000000028 1.2100000000000006 +83.3000000000000114 1.2000000000000004 +83.4000000000000057 1.1900000000000002 +83.5000000000000000 1.1800000000000008 +83.6000000000000085 1.1700000000000015 +83.7000000000000028 1.1600000000000013 +83.8000000000000114 1.1500000000000021 +83.9000000000000057 1.1400000000000028 +84.0000000000000000 1.1300000000000021 +84.1000000000000085 1.1100000000000030 +84.2000000000000028 1.1000000000000025 +84.3000000000000114 1.0800000000000036 +84.4000000000000057 1.0700000000000029 +84.5000000000000000 1.0600000000000029 +84.6000000000000085 1.0400000000000025 +84.7000000000000028 1.0300000000000018 +84.8000000000000114 1.0100000000000029 +84.9000000000000057 1.0000000000000031 +85.0000000000000000 0.9900000000000023 +85.1000000000000085 0.9700000000000027 +85.2000000000000028 0.9600000000000029 +85.3000000000000114 0.9500000000000035 +85.4000000000000057 0.9400000000000027 +85.5000000000000000 0.9300000000000024 +85.6000000000000085 0.9200000000000023 +85.7000000000000028 0.9100000000000025 +85.8000000000000114 0.9000000000000021 +85.9000000000000057 0.8900000000000019 +86.0000000000000000 0.8800000000000023 +86.1000000000000085 0.8700000000000027 +86.2000000000000028 0.8600000000000022 +86.3000000000000114 0.8500000000000019 +86.4000000000000057 0.8500000000000019 +86.5000000000000000 0.8400000000000021 +86.6000000000000085 0.8300000000000020 +86.7000000000000028 0.8300000000000020 +86.8000000000000114 0.8200000000000016 +86.9000000000000057 0.8200000000000016 +87.0000000000000000 0.8200000000000016 +87.1000000000000085 0.8100000000000015 +87.2000000000000028 0.8100000000000015 +87.3000000000000114 0.8100000000000015 +87.4000000000000057 0.8000000000000013 +87.5000000000000000 0.8000000000000013 +87.6000000000000085 0.8000000000000013 +87.7000000000000028 0.8000000000000013 +87.8000000000000114 0.8000000000000013 +87.9000000000000057 0.8000000000000013 +88.0000000000000000 0.8000000000000013 +88.1000000000000085 0.8000000000000013 +88.2000000000000028 0.8000000000000013 +88.3000000000000114 0.8000000000000013 +88.4000000000000057 0.8100000000000009 +88.5000000000000000 0.8200000000000008 +88.6000000000000085 0.8200000000000008 +88.7000000000000028 0.8300000000000006 +88.8000000000000114 0.8300000000000006 +88.9000000000000057 0.8400000000000010 +89.0000000000000000 0.8500000000000013 +89.1000000000000085 0.8600000000000012 +89.2000000000000028 0.8700000000000007 +89.3000000000000114 0.8800000000000003 +89.4000000000000057 0.8900000000000007 +89.5000000000000000 0.9000000000000011 +89.6000000000000085 0.9100000000000008 +89.7000000000000028 0.9200000000000000 +89.8000000000000114 0.9299999999999993 +89.9000000000000057 0.9400000000000001 +90.0000000000000000 0.9500000000000001 +90.1000000000000085 0.9599999999999996 +90.2000000000000028 0.9799999999999993 +90.3000000000000114 0.9899999999999991 +90.4000000000000057 0.9999999999999984 +90.5000000000000000 1.0099999999999980 +90.6000000000000085 1.0199999999999987 +90.7000000000000028 1.0299999999999991 +90.8000000000000114 1.0399999999999991 +90.9000000000000057 1.0499999999999994 +91.0000000000000000 1.0599999999999989 +91.1000000000000085 1.0699999999999987 +91.2000000000000028 1.0699999999999987 +91.3000000000000114 1.0799999999999990 +91.4000000000000057 1.0899999999999985 +91.5000000000000000 1.0999999999999985 +91.6000000000000085 1.0999999999999985 +91.7000000000000028 1.1099999999999983 +91.8000000000000114 1.1199999999999981 +91.9000000000000057 1.1199999999999981 +92.0000000000000000 1.1299999999999983 +92.1000000000000085 1.1299999999999983 +92.2000000000000028 1.1299999999999983 +92.3000000000000114 1.1399999999999983 +92.4000000000000057 1.1399999999999983 +92.5000000000000000 1.1399999999999983 +92.6000000000000085 1.1399999999999983 +92.7000000000000028 1.1499999999999984 +92.8000000000000114 1.1499999999999984 +92.9000000000000057 1.1499999999999984 +93.0000000000000000 1.1499999999999984 +93.1000000000000085 1.1499999999999984 +93.2000000000000028 1.1399999999999983 +93.3000000000000114 1.1399999999999983 +93.4000000000000057 1.1299999999999983 +93.5000000000000000 1.1299999999999983 +93.6000000000000085 1.1199999999999986 +93.7000000000000028 1.1199999999999986 +93.8000000000000114 1.1099999999999983 +93.9000000000000057 1.1099999999999983 +94.0000000000000000 1.0999999999999981 +94.1000000000000085 1.0999999999999981 +94.2000000000000028 1.0899999999999983 +94.3000000000000114 1.0899999999999983 +94.4000000000000057 1.0899999999999983 +94.5000000000000000 1.0799999999999983 +94.6000000000000085 1.0799999999999983 +94.7000000000000028 1.0799999999999983 +94.8000000000000114 1.0699999999999983 +94.9000000000000057 1.0699999999999983 +95.0000000000000000 1.0699999999999983 +95.1000000000000085 1.0699999999999983 +95.2000000000000028 1.0699999999999983 +95.3000000000000114 1.0699999999999983 +95.4000000000000057 1.0599999999999983 +95.5000000000000000 1.0599999999999983 +95.6000000000000085 1.0599999999999983 +95.7000000000000028 1.0599999999999983 +95.8000000000000114 1.0599999999999983 +95.9000000000000057 1.0699999999999983 +96.0000000000000000 1.0699999999999983 +96.1000000000000085 1.0699999999999983 +96.2000000000000028 1.0799999999999985 +96.3000000000000114 1.0799999999999985 +96.4000000000000057 1.0799999999999985 +96.5000000000000000 1.0799999999999985 +96.6000000000000085 1.0899999999999985 +96.7000000000000028 1.0899999999999985 +96.8000000000000114 1.0899999999999985 +96.9000000000000057 1.0899999999999985 +97.0000000000000000 1.0899999999999985 +97.1000000000000085 1.0999999999999988 +97.2000000000000028 1.0999999999999988 +97.3000000000000114 1.0999999999999988 +97.4000000000000057 1.0999999999999988 +97.5000000000000000 1.0999999999999988 +97.6000000000000085 1.0899999999999985 +97.7000000000000028 1.0899999999999985 +97.8000000000000114 1.0799999999999985 +97.9000000000000057 1.0799999999999985 +98.0000000000000000 1.0699999999999985 +98.1000000000000085 1.0699999999999985 +98.2000000000000028 1.0599999999999989 +98.3000000000000114 1.0499999999999985 +98.4000000000000057 1.0499999999999985 +98.5000000000000000 1.0399999999999980 +98.6000000000000085 1.0299999999999983 +98.7000000000000028 1.0199999999999980 +98.8000000000000114 1.0099999999999978 +98.9000000000000057 0.9999999999999983 +99.0000000000000000 0.9999999999999983 +99.1000000000000085 0.9899999999999981 +99.2000000000000028 0.9799999999999985 +99.3000000000000114 0.9699999999999980 +99.4000000000000057 0.9599999999999981 +99.5000000000000000 0.9499999999999981 +99.6000000000000085 0.9499999999999981 +99.7000000000000028 0.9399999999999984 +99.8000000000000114 0.9299999999999988 +99.9000000000000057 0.9299999999999988 +100.0000000000000000 0.9199999999999993 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[6].dat b/src/engine/tests/system/gt_data/virus_replication/X[6].dat new file mode 100644 index 00000000..658ac510 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[6].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0000000000000000 +1.2000000000000002 0.0000000000000000 +1.3000000000000000 0.0000000000000000 +1.4000000000000001 0.0000000000000000 +1.5000000000000000 0.0000000000000000 +1.6000000000000001 0.0000000000000000 +1.7000000000000002 0.0000000000000000 +1.8000000000000000 0.0000000000000000 +1.9000000000000001 0.0000000000000000 +2.0000000000000000 0.0000000000000000 +2.1000000000000001 0.0000000000000000 +2.2000000000000002 0.0000000000000000 +2.3000000000000003 0.0000000000000000 +2.4000000000000004 0.0000000000000000 +2.5000000000000000 0.0000000000000000 +2.6000000000000001 0.0000000000000000 +2.7000000000000002 0.0000000000000000 +2.8000000000000003 0.0100000000000000 +2.9000000000000004 0.0100000000000000 +3.0000000000000000 0.0100000000000000 +3.1000000000000001 0.0200000000000000 +3.2000000000000002 0.0200000000000000 +3.3000000000000003 0.0200000000000000 +3.4000000000000004 0.0300000000000000 +3.5000000000000000 0.0300000000000000 +3.6000000000000001 0.0400000000000000 +3.7000000000000002 0.0500000000000000 +3.8000000000000003 0.0600000000000000 +3.9000000000000004 0.0600000000000000 +4.0000000000000000 0.0700000000000000 +4.1000000000000005 0.0800000000000000 +4.2000000000000002 0.0900000000000001 +4.2999999999999998 0.1000000000000000 +4.4000000000000004 0.1100000000000000 +4.5000000000000000 0.1200000000000000 +4.6000000000000005 0.1400000000000000 +4.7000000000000002 0.1500000000000000 +4.8000000000000007 0.1600000000000001 +4.9000000000000004 0.1700000000000001 +5.0000000000000000 0.1900000000000001 +5.1000000000000005 0.2000000000000000 +5.2000000000000002 0.2200000000000001 +5.3000000000000007 0.2300000000000000 +5.4000000000000004 0.2500000000000001 +5.5000000000000000 0.2600000000000000 +5.6000000000000005 0.2800000000000000 +5.7000000000000002 0.2899999999999999 +5.8000000000000007 0.3100000000000000 +5.9000000000000004 0.3300000000000001 +6.0000000000000000 0.3400000000000001 +6.1000000000000005 0.3600000000000001 +6.2000000000000002 0.3800000000000001 +6.3000000000000007 0.3900000000000001 +6.4000000000000004 0.4100000000000001 +6.5000000000000000 0.4300000000000002 +6.6000000000000005 0.4400000000000001 +6.7000000000000002 0.4600000000000001 +6.8000000000000007 0.4800000000000001 +6.9000000000000004 0.4900000000000001 +7.0000000000000000 0.5100000000000000 +7.1000000000000005 0.5300000000000001 +7.2000000000000002 0.5400000000000001 +7.3000000000000007 0.5600000000000002 +7.4000000000000004 0.5800000000000001 +7.5000000000000000 0.5900000000000001 +7.6000000000000005 0.6100000000000001 +7.7000000000000002 0.6200000000000001 +7.8000000000000007 0.6400000000000000 +7.9000000000000004 0.6500000000000000 +8.0000000000000000 0.6700000000000000 +8.0999999999999996 0.6800000000000000 +8.2000000000000011 0.7000000000000001 +8.3000000000000007 0.7100000000000001 +8.4000000000000004 0.7300000000000000 +8.5000000000000000 0.7399999999999999 +8.5999999999999996 0.7499999999999998 +8.7000000000000011 0.7699999999999999 +8.8000000000000007 0.7799999999999999 +8.9000000000000004 0.7899999999999998 +9.0000000000000000 0.8099999999999999 +9.0999999999999996 0.8200000000000000 +9.2000000000000011 0.8299999999999998 +9.3000000000000007 0.8399999999999997 +9.4000000000000004 0.8599999999999999 +9.5000000000000000 0.8699999999999999 +9.6000000000000014 0.8799999999999999 +9.7000000000000011 0.8900000000000000 +9.8000000000000007 0.9000000000000001 +9.9000000000000004 0.9100000000000000 +10.0000000000000000 0.9300000000000000 +10.1000000000000014 0.9400000000000002 +10.2000000000000011 0.9500000000000002 +10.3000000000000007 0.9600000000000003 +10.4000000000000004 0.9700000000000002 +10.5000000000000000 0.9800000000000002 +10.6000000000000014 0.9900000000000002 +10.7000000000000011 1.0000000000000002 +10.8000000000000007 1.0100000000000002 +10.9000000000000004 1.0200000000000002 +11.0000000000000000 1.0300000000000002 +11.1000000000000014 1.0400000000000003 +11.2000000000000011 1.0500000000000003 +11.3000000000000007 1.0500000000000003 +11.4000000000000004 1.0600000000000003 +11.5000000000000000 1.0700000000000003 +11.6000000000000014 1.0800000000000003 +11.7000000000000011 1.0800000000000003 +11.8000000000000007 1.0900000000000003 +11.9000000000000004 1.1000000000000003 +12.0000000000000000 1.1000000000000003 +12.1000000000000014 1.1100000000000003 +12.2000000000000011 1.1100000000000003 +12.3000000000000007 1.1200000000000003 +12.4000000000000004 1.1200000000000003 +12.5000000000000000 1.1300000000000003 +12.6000000000000014 1.1300000000000003 +12.7000000000000011 1.1400000000000003 +12.8000000000000007 1.1400000000000003 +12.9000000000000004 1.1400000000000003 +13.0000000000000000 1.1500000000000004 +13.1000000000000014 1.1500000000000004 +13.2000000000000011 1.1500000000000004 +13.3000000000000007 1.1500000000000004 +13.4000000000000004 1.1500000000000004 +13.5000000000000000 1.1600000000000004 +13.6000000000000014 1.1600000000000004 +13.7000000000000011 1.1600000000000004 +13.8000000000000007 1.1600000000000004 +13.9000000000000004 1.1600000000000004 +14.0000000000000000 1.1600000000000004 +14.1000000000000014 1.1600000000000004 +14.2000000000000011 1.1600000000000004 +14.3000000000000007 1.1600000000000004 +14.4000000000000004 1.1600000000000004 +14.5000000000000000 1.1600000000000004 +14.6000000000000014 1.1600000000000004 +14.7000000000000011 1.1600000000000004 +14.8000000000000007 1.1600000000000004 +14.9000000000000004 1.1600000000000004 +15.0000000000000000 1.1600000000000004 +15.1000000000000014 1.1600000000000004 +15.2000000000000011 1.1600000000000004 +15.3000000000000007 1.1600000000000004 +15.4000000000000004 1.1700000000000004 +15.5000000000000000 1.1700000000000004 +15.6000000000000014 1.1700000000000004 +15.7000000000000011 1.1700000000000004 +15.8000000000000007 1.1700000000000004 +15.9000000000000004 1.1700000000000004 +16.0000000000000000 1.1700000000000004 +16.1000000000000014 1.1700000000000004 +16.1999999999999993 1.1700000000000004 +16.3000000000000007 1.1600000000000004 +16.4000000000000021 1.1600000000000004 +16.5000000000000000 1.1500000000000004 +16.6000000000000014 1.1500000000000004 +16.6999999999999993 1.1400000000000003 +16.8000000000000007 1.1400000000000003 +16.9000000000000021 1.1300000000000006 +17.0000000000000000 1.1300000000000006 +17.1000000000000014 1.1200000000000006 +17.1999999999999993 1.1100000000000005 +17.3000000000000007 1.1100000000000005 +17.4000000000000021 1.1000000000000008 +17.5000000000000000 1.0900000000000007 +17.6000000000000014 1.0800000000000007 +17.6999999999999993 1.0700000000000007 +17.8000000000000007 1.0600000000000005 +17.9000000000000021 1.0500000000000007 +18.0000000000000000 1.0400000000000007 +18.1000000000000014 1.0300000000000007 +18.1999999999999993 1.0200000000000005 +18.3000000000000007 1.0100000000000005 +18.4000000000000021 1.0000000000000004 +18.5000000000000000 0.9900000000000005 +18.6000000000000014 0.9800000000000004 +18.6999999999999993 0.9700000000000002 +18.8000000000000007 0.9600000000000002 +18.9000000000000021 0.9500000000000002 +19.0000000000000000 0.9400000000000003 +19.1000000000000014 0.9300000000000003 +19.2000000000000028 0.9200000000000002 +19.3000000000000007 0.9100000000000000 +19.4000000000000021 0.8999999999999999 +19.5000000000000000 0.8999999999999999 +19.6000000000000014 0.8899999999999998 +19.7000000000000028 0.8799999999999998 +19.8000000000000007 0.8799999999999998 +19.9000000000000021 0.8699999999999999 +20.0000000000000000 0.8699999999999999 +20.1000000000000014 0.8599999999999998 +20.2000000000000028 0.8599999999999998 +20.3000000000000007 0.8499999999999998 +20.4000000000000021 0.8499999999999998 +20.5000000000000000 0.8499999999999998 +20.6000000000000014 0.8499999999999998 +20.7000000000000028 0.8399999999999997 +20.8000000000000007 0.8399999999999997 +20.9000000000000021 0.8399999999999997 +21.0000000000000000 0.8399999999999997 +21.1000000000000014 0.8399999999999997 +21.2000000000000028 0.8399999999999997 +21.3000000000000007 0.8399999999999997 +21.4000000000000021 0.8399999999999997 +21.5000000000000000 0.8499999999999996 +21.6000000000000014 0.8499999999999996 +21.7000000000000028 0.8599999999999995 +21.8000000000000007 0.8599999999999995 +21.9000000000000021 0.8599999999999995 +22.0000000000000000 0.8699999999999996 +22.1000000000000014 0.8699999999999996 +22.2000000000000028 0.8799999999999996 +22.3000000000000007 0.8799999999999996 +22.4000000000000021 0.8899999999999996 +22.5000000000000000 0.8899999999999996 +22.6000000000000014 0.8999999999999996 +22.7000000000000028 0.8999999999999996 +22.8000000000000007 0.9099999999999996 +22.9000000000000021 0.9099999999999996 +23.0000000000000000 0.9199999999999996 +23.1000000000000014 0.9199999999999996 +23.2000000000000028 0.9299999999999996 +23.3000000000000007 0.9299999999999996 +23.4000000000000021 0.9399999999999996 +23.5000000000000000 0.9399999999999996 +23.6000000000000014 0.9499999999999997 +23.7000000000000028 0.9499999999999997 +23.8000000000000007 0.9499999999999997 +23.9000000000000021 0.9599999999999999 +24.0000000000000000 0.9599999999999999 +24.1000000000000014 0.9699999999999998 +24.2000000000000028 0.9699999999999998 +24.3000000000000007 0.9799999999999998 +24.4000000000000021 0.9799999999999998 +24.5000000000000000 0.9899999999999997 +24.6000000000000014 0.9899999999999997 +24.7000000000000028 0.9999999999999997 +24.8000000000000007 0.9999999999999997 +24.9000000000000021 1.0099999999999998 +25.0000000000000000 1.0099999999999998 +25.1000000000000014 1.0199999999999998 +25.2000000000000028 1.0199999999999998 +25.3000000000000007 1.0199999999999998 +25.4000000000000021 1.0299999999999998 +25.5000000000000000 1.0299999999999998 +25.6000000000000014 1.0399999999999998 +25.7000000000000028 1.0399999999999998 +25.8000000000000007 1.0399999999999998 +25.9000000000000021 1.0499999999999998 +26.0000000000000000 1.0499999999999998 +26.1000000000000014 1.0499999999999998 +26.2000000000000028 1.0499999999999998 +26.3000000000000007 1.0499999999999998 +26.4000000000000021 1.0499999999999998 +26.5000000000000000 1.0499999999999998 +26.6000000000000014 1.0499999999999998 +26.7000000000000028 1.0499999999999998 +26.8000000000000007 1.0499999999999998 +26.9000000000000021 1.0499999999999998 +27.0000000000000000 1.0499999999999998 +27.1000000000000014 1.0499999999999998 +27.2000000000000028 1.0399999999999998 +27.3000000000000007 1.0399999999999998 +27.4000000000000021 1.0299999999999998 +27.5000000000000000 1.0299999999999998 +27.6000000000000014 1.0199999999999998 +27.7000000000000028 1.0199999999999998 +27.8000000000000007 1.0099999999999998 +27.9000000000000021 0.9999999999999999 +28.0000000000000000 0.9999999999999999 +28.1000000000000014 0.9899999999999999 +28.2000000000000028 0.9899999999999999 +28.3000000000000007 0.9799999999999999 +28.4000000000000021 0.9799999999999999 +28.5000000000000000 0.9700000000000000 +28.6000000000000014 0.9700000000000000 +28.7000000000000028 0.9600000000000000 +28.8000000000000007 0.9600000000000000 +28.9000000000000021 0.9500000000000000 +29.0000000000000000 0.9500000000000000 +29.1000000000000014 0.9500000000000000 +29.2000000000000028 0.9399999999999999 +29.3000000000000007 0.9399999999999999 +29.4000000000000021 0.9399999999999999 +29.5000000000000000 0.9299999999999999 +29.6000000000000014 0.9299999999999999 +29.7000000000000028 0.9299999999999999 +29.8000000000000007 0.9299999999999999 +29.9000000000000021 0.9299999999999999 +30.0000000000000000 0.9199999999999999 +30.1000000000000014 0.9199999999999999 +30.2000000000000028 0.9199999999999999 +30.3000000000000007 0.9199999999999999 +30.4000000000000021 0.9199999999999999 +30.5000000000000000 0.9199999999999999 +30.6000000000000014 0.9199999999999999 +30.7000000000000028 0.9199999999999999 +30.8000000000000007 0.9199999999999999 +30.9000000000000021 0.9199999999999999 +31.0000000000000000 0.9099999999999999 +31.1000000000000014 0.9099999999999999 +31.2000000000000028 0.9099999999999999 +31.3000000000000007 0.9099999999999999 +31.4000000000000021 0.9099999999999999 +31.5000000000000000 0.9099999999999999 +31.6000000000000014 0.9099999999999999 +31.7000000000000028 0.9099999999999999 +31.8000000000000007 0.9099999999999999 +31.9000000000000021 0.8999999999999999 +32.0000000000000000 0.8999999999999999 +32.1000000000000014 0.8999999999999999 +32.2000000000000028 0.8999999999999999 +32.3000000000000043 0.8900000000000000 +32.3999999999999986 0.8900000000000000 +32.5000000000000000 0.8800000000000001 +32.6000000000000014 0.8800000000000001 +32.7000000000000028 0.8800000000000001 +32.8000000000000043 0.8700000000000001 +32.8999999999999986 0.8700000000000001 +33.0000000000000000 0.8600000000000000 +33.1000000000000014 0.8600000000000000 +33.2000000000000028 0.8499999999999999 +33.3000000000000043 0.8499999999999999 +33.3999999999999986 0.8399999999999999 +33.5000000000000000 0.8399999999999999 +33.6000000000000014 0.8299999999999998 +33.7000000000000028 0.8199999999999997 +33.8000000000000043 0.8199999999999997 +33.8999999999999986 0.8099999999999999 +34.0000000000000000 0.8000000000000002 +34.1000000000000014 0.8000000000000002 +34.2000000000000028 0.7900000000000003 +34.3000000000000043 0.7800000000000000 +34.3999999999999986 0.7800000000000000 +34.5000000000000000 0.7700000000000001 +34.6000000000000014 0.7600000000000003 +34.7000000000000028 0.7500000000000004 +34.8000000000000043 0.7500000000000004 +34.8999999999999986 0.7400000000000004 +35.0000000000000000 0.7300000000000004 +35.1000000000000014 0.7200000000000003 +35.2000000000000028 0.7200000000000003 +35.3000000000000043 0.7100000000000002 +35.3999999999999986 0.7000000000000004 +35.5000000000000000 0.6900000000000004 +35.6000000000000014 0.6900000000000004 +35.7000000000000028 0.6800000000000006 +35.8000000000000043 0.6700000000000005 +35.8999999999999986 0.6700000000000005 +36.0000000000000000 0.6600000000000007 +36.1000000000000014 0.6500000000000007 +36.2000000000000028 0.6500000000000007 +36.3000000000000043 0.6400000000000008 +36.3999999999999986 0.6400000000000008 +36.5000000000000000 0.6400000000000008 +36.6000000000000014 0.6300000000000009 +36.7000000000000028 0.6300000000000009 +36.8000000000000043 0.6300000000000009 +36.8999999999999986 0.6300000000000009 +37.0000000000000000 0.6300000000000009 +37.1000000000000014 0.6300000000000009 +37.2000000000000028 0.6300000000000009 +37.3000000000000043 0.6300000000000009 +37.3999999999999986 0.6400000000000008 +37.5000000000000000 0.6400000000000008 +37.6000000000000014 0.6500000000000008 +37.7000000000000028 0.6500000000000008 +37.8000000000000043 0.6600000000000010 +37.8999999999999986 0.6700000000000013 +38.0000000000000000 0.6800000000000015 +38.1000000000000014 0.6900000000000014 +38.2000000000000028 0.7000000000000015 +38.3000000000000043 0.7100000000000016 +38.4000000000000057 0.7200000000000017 +38.5000000000000000 0.7200000000000017 +38.6000000000000014 0.7300000000000016 +38.7000000000000028 0.7400000000000020 +38.8000000000000043 0.7500000000000023 +38.9000000000000057 0.7600000000000022 +39.0000000000000000 0.7700000000000021 +39.1000000000000014 0.7800000000000019 +39.2000000000000028 0.7900000000000018 +39.3000000000000043 0.8000000000000016 +39.4000000000000057 0.8100000000000014 +39.5000000000000000 0.8200000000000016 +39.6000000000000014 0.8200000000000016 +39.7000000000000028 0.8300000000000017 +39.8000000000000043 0.8400000000000015 +39.9000000000000057 0.8400000000000015 +40.0000000000000000 0.8500000000000013 +40.1000000000000014 0.8500000000000013 +40.2000000000000028 0.8600000000000014 +40.3000000000000043 0.8600000000000014 +40.4000000000000057 0.8700000000000014 +40.5000000000000000 0.8700000000000014 +40.6000000000000014 0.8800000000000013 +40.7000000000000028 0.8800000000000013 +40.8000000000000043 0.8800000000000013 +40.9000000000000057 0.8900000000000015 +41.0000000000000000 0.8900000000000015 +41.1000000000000014 0.8900000000000015 +41.2000000000000028 0.9000000000000016 +41.3000000000000043 0.9000000000000016 +41.4000000000000057 0.9000000000000016 +41.5000000000000000 0.9100000000000017 +41.6000000000000014 0.9100000000000017 +41.7000000000000028 0.9100000000000017 +41.8000000000000043 0.9200000000000016 +41.9000000000000057 0.9200000000000016 +42.0000000000000000 0.9300000000000017 +42.1000000000000014 0.9300000000000017 +42.2000000000000028 0.9400000000000016 +42.3000000000000043 0.9400000000000016 +42.4000000000000057 0.9500000000000016 +42.5000000000000000 0.9500000000000016 +42.6000000000000014 0.9600000000000015 +42.7000000000000028 0.9600000000000015 +42.8000000000000043 0.9700000000000014 +42.9000000000000057 0.9700000000000014 +43.0000000000000000 0.9800000000000016 +43.1000000000000014 0.9800000000000016 +43.2000000000000028 0.9900000000000019 +43.3000000000000043 0.9900000000000019 +43.4000000000000057 1.0000000000000020 +43.5000000000000000 1.0000000000000020 +43.6000000000000014 1.0100000000000020 +43.7000000000000028 1.0100000000000020 +43.8000000000000043 1.0200000000000020 +43.9000000000000057 1.0200000000000020 +44.0000000000000000 1.0300000000000020 +44.1000000000000014 1.0300000000000020 +44.2000000000000028 1.0400000000000018 +44.3000000000000043 1.0400000000000018 +44.4000000000000057 1.0400000000000018 +44.5000000000000000 1.0400000000000018 +44.6000000000000014 1.0500000000000018 +44.7000000000000028 1.0500000000000018 +44.8000000000000043 1.0500000000000018 +44.9000000000000057 1.0600000000000018 +45.0000000000000000 1.0600000000000018 +45.1000000000000014 1.0600000000000018 +45.2000000000000028 1.0600000000000018 +45.3000000000000043 1.0600000000000018 +45.4000000000000057 1.0700000000000018 +45.5000000000000000 1.0700000000000018 +45.6000000000000014 1.0700000000000018 +45.7000000000000028 1.0700000000000018 +45.8000000000000043 1.0700000000000018 +45.9000000000000057 1.0700000000000018 +46.0000000000000000 1.0700000000000018 +46.1000000000000014 1.0700000000000018 +46.2000000000000028 1.0700000000000018 +46.3000000000000043 1.0700000000000018 +46.4000000000000057 1.0700000000000018 +46.5000000000000000 1.0700000000000018 +46.6000000000000014 1.0700000000000018 +46.7000000000000028 1.0700000000000018 +46.8000000000000043 1.0700000000000018 +46.9000000000000057 1.0700000000000018 +47.0000000000000000 1.0700000000000018 +47.1000000000000014 1.0600000000000018 +47.2000000000000028 1.0600000000000018 +47.3000000000000043 1.0600000000000018 +47.4000000000000057 1.0600000000000018 +47.5000000000000000 1.0600000000000018 +47.6000000000000014 1.0600000000000018 +47.7000000000000028 1.0600000000000018 +47.8000000000000043 1.0600000000000018 +47.9000000000000057 1.0600000000000018 +48.0000000000000000 1.0600000000000018 +48.1000000000000014 1.0600000000000018 +48.2000000000000028 1.0600000000000018 +48.3000000000000043 1.0600000000000018 +48.4000000000000057 1.0600000000000018 +48.5000000000000000 1.0600000000000018 +48.6000000000000014 1.0600000000000018 +48.7000000000000028 1.0600000000000018 +48.8000000000000043 1.0700000000000018 +48.9000000000000057 1.0700000000000018 +49.0000000000000000 1.0800000000000018 +49.1000000000000014 1.0800000000000018 +49.2000000000000028 1.0900000000000016 +49.3000000000000043 1.1000000000000014 +49.4000000000000057 1.1000000000000014 +49.5000000000000000 1.1100000000000014 +49.6000000000000014 1.1100000000000014 +49.7000000000000028 1.1200000000000017 +49.8000000000000043 1.1300000000000017 +49.9000000000000057 1.1300000000000017 +50.0000000000000000 1.1400000000000015 +50.1000000000000014 1.1500000000000015 +50.2000000000000028 1.1500000000000015 +50.3000000000000043 1.1600000000000017 +50.4000000000000057 1.1600000000000017 +50.5000000000000000 1.1700000000000019 +50.6000000000000014 1.1700000000000019 +50.7000000000000028 1.1800000000000022 +50.8000000000000043 1.1800000000000022 +50.9000000000000057 1.1900000000000022 +51.0000000000000000 1.1900000000000022 +51.1000000000000014 1.2000000000000020 +51.2000000000000028 1.2000000000000020 +51.3000000000000043 1.2000000000000020 +51.4000000000000057 1.2100000000000020 +51.5000000000000000 1.2100000000000020 +51.6000000000000014 1.2200000000000017 +51.7000000000000028 1.2200000000000017 +51.8000000000000043 1.2200000000000017 +51.9000000000000057 1.2200000000000017 +52.0000000000000000 1.2300000000000018 +52.1000000000000014 1.2300000000000018 +52.2000000000000028 1.2300000000000018 +52.3000000000000043 1.2300000000000018 +52.4000000000000057 1.2300000000000018 +52.5000000000000000 1.2400000000000018 +52.6000000000000014 1.2400000000000018 +52.7000000000000028 1.2400000000000018 +52.8000000000000043 1.2400000000000018 +52.9000000000000057 1.2400000000000018 +53.0000000000000000 1.2500000000000018 +53.1000000000000014 1.2500000000000018 +53.2000000000000028 1.2500000000000018 +53.3000000000000043 1.2500000000000018 +53.4000000000000057 1.2500000000000018 +53.5000000000000000 1.2600000000000018 +53.6000000000000014 1.2600000000000018 +53.7000000000000028 1.2600000000000018 +53.8000000000000043 1.2600000000000018 +53.9000000000000057 1.2600000000000018 +54.0000000000000000 1.2600000000000018 +54.1000000000000014 1.2600000000000018 +54.2000000000000028 1.2600000000000018 +54.3000000000000043 1.2600000000000018 +54.4000000000000057 1.2600000000000018 +54.5000000000000000 1.2600000000000018 +54.6000000000000014 1.2600000000000018 +54.7000000000000028 1.2600000000000018 +54.8000000000000043 1.2600000000000018 +54.9000000000000057 1.2600000000000018 +55.0000000000000000 1.2500000000000018 +55.1000000000000014 1.2500000000000018 +55.2000000000000028 1.2400000000000018 +55.3000000000000043 1.2400000000000018 +55.4000000000000057 1.2300000000000018 +55.5000000000000000 1.2200000000000017 +55.6000000000000014 1.2200000000000017 +55.7000000000000028 1.2100000000000017 +55.8000000000000043 1.2000000000000020 +55.9000000000000057 1.1900000000000019 +56.0000000000000000 1.1800000000000017 +56.1000000000000014 1.1700000000000015 +56.2000000000000028 1.1600000000000017 +56.3000000000000043 1.1500000000000017 +56.4000000000000057 1.1400000000000017 +56.5000000000000000 1.1200000000000019 +56.6000000000000014 1.1100000000000017 +56.7000000000000028 1.1000000000000021 +56.8000000000000043 1.0900000000000019 +56.9000000000000057 1.0700000000000025 +57.0000000000000000 1.0600000000000025 +57.1000000000000014 1.0500000000000025 +57.2000000000000028 1.0300000000000020 +57.3000000000000043 1.0200000000000020 +57.4000000000000057 1.0100000000000016 +57.5000000000000000 0.9900000000000017 +57.6000000000000014 0.9800000000000013 +57.7000000000000028 0.9700000000000017 +57.8000000000000043 0.9600000000000016 +57.9000000000000057 0.9400000000000015 +58.0000000000000000 0.9300000000000014 +58.1000000000000014 0.9200000000000015 +58.2000000000000028 0.9000000000000019 +58.3000000000000043 0.8900000000000022 +58.4000000000000057 0.8800000000000026 +58.5000000000000000 0.8700000000000028 +58.6000000000000014 0.8600000000000025 +58.7000000000000028 0.8500000000000024 +58.8000000000000043 0.8400000000000026 +58.9000000000000057 0.8300000000000030 +59.0000000000000000 0.8200000000000028 +59.1000000000000014 0.8100000000000031 +59.2000000000000028 0.8000000000000028 +59.3000000000000043 0.7900000000000028 +59.4000000000000057 0.7800000000000028 +59.5000000000000000 0.7700000000000030 +59.6000000000000014 0.7600000000000032 +59.7000000000000028 0.7600000000000032 +59.8000000000000043 0.7500000000000030 +59.9000000000000057 0.7500000000000030 +60.0000000000000000 0.7400000000000031 +60.1000000000000014 0.7400000000000031 +60.2000000000000028 0.7300000000000031 +60.3000000000000043 0.7300000000000031 +60.4000000000000057 0.7200000000000032 +60.5000000000000000 0.7200000000000032 +60.6000000000000014 0.7200000000000032 +60.7000000000000028 0.7100000000000031 +60.8000000000000043 0.7100000000000031 +60.9000000000000057 0.7100000000000031 +61.0000000000000000 0.7100000000000031 +61.1000000000000014 0.7100000000000031 +61.2000000000000028 0.7100000000000031 +61.3000000000000043 0.7100000000000031 +61.4000000000000057 0.7100000000000031 +61.5000000000000000 0.7200000000000030 +61.6000000000000014 0.7200000000000030 +61.7000000000000028 0.7200000000000030 +61.8000000000000043 0.7300000000000029 +61.9000000000000057 0.7300000000000029 +62.0000000000000000 0.7400000000000028 +62.1000000000000014 0.7500000000000028 +62.2000000000000028 0.7500000000000028 +62.3000000000000043 0.7600000000000027 +62.4000000000000057 0.7700000000000027 +62.5000000000000000 0.7700000000000027 +62.6000000000000014 0.7800000000000029 +62.7000000000000028 0.7900000000000030 +62.8000000000000043 0.8000000000000033 +62.9000000000000057 0.8000000000000033 +63.0000000000000000 0.8100000000000034 +63.1000000000000014 0.8200000000000036 +63.2000000000000028 0.8300000000000038 +63.3000000000000043 0.8300000000000038 +63.4000000000000057 0.8400000000000041 +63.5000000000000000 0.8500000000000038 +63.6000000000000014 0.8600000000000040 +63.7000000000000028 0.8600000000000040 +63.8000000000000043 0.8700000000000040 +63.9000000000000057 0.8800000000000038 +64.0000000000000000 0.8800000000000038 +64.1000000000000085 0.8900000000000039 +64.2000000000000028 0.8900000000000039 +64.2999999999999972 0.9000000000000040 +64.4000000000000057 0.9000000000000040 +64.5000000000000000 0.9100000000000041 +64.6000000000000085 0.9100000000000041 +64.7000000000000028 0.9100000000000041 +64.7999999999999972 0.9200000000000044 +64.9000000000000057 0.9200000000000044 +65.0000000000000000 0.9200000000000044 +65.1000000000000085 0.9300000000000042 +65.2000000000000028 0.9300000000000042 +65.2999999999999972 0.9300000000000042 +65.4000000000000057 0.9300000000000042 +65.5000000000000000 0.9300000000000042 +65.6000000000000085 0.9300000000000042 +65.7000000000000028 0.9300000000000042 +65.7999999999999972 0.9300000000000042 +65.9000000000000057 0.9400000000000042 +66.0000000000000000 0.9400000000000042 +66.1000000000000085 0.9400000000000042 +66.2000000000000028 0.9400000000000042 +66.2999999999999972 0.9400000000000042 +66.4000000000000057 0.9400000000000042 +66.5000000000000000 0.9400000000000042 +66.6000000000000085 0.9400000000000042 +66.7000000000000028 0.9400000000000042 +66.7999999999999972 0.9400000000000042 +66.9000000000000057 0.9300000000000040 +67.0000000000000000 0.9300000000000040 +67.1000000000000085 0.9300000000000040 +67.2000000000000028 0.9300000000000040 +67.2999999999999972 0.9300000000000040 +67.4000000000000057 0.9300000000000040 +67.5000000000000000 0.9200000000000040 +67.6000000000000085 0.9200000000000040 +67.7000000000000028 0.9200000000000040 +67.7999999999999972 0.9100000000000040 +67.9000000000000057 0.9100000000000040 +68.0000000000000000 0.9100000000000040 +68.1000000000000085 0.9000000000000042 +68.2000000000000028 0.9000000000000042 +68.2999999999999972 0.8900000000000040 +68.4000000000000057 0.8900000000000040 +68.5000000000000000 0.8800000000000040 +68.6000000000000085 0.8700000000000042 +68.7000000000000028 0.8700000000000042 +68.7999999999999972 0.8600000000000044 +68.9000000000000057 0.8500000000000040 +69.0000000000000000 0.8400000000000039 +69.1000000000000085 0.8300000000000041 +69.2000000000000028 0.8300000000000041 +69.2999999999999972 0.8200000000000044 +69.4000000000000057 0.8100000000000042 +69.5000000000000000 0.8000000000000037 +69.6000000000000085 0.7900000000000030 +69.7000000000000028 0.7800000000000030 +69.7999999999999972 0.7700000000000031 +69.9000000000000057 0.7600000000000028 +70.0000000000000000 0.7500000000000028 +70.1000000000000085 0.7400000000000022 +70.2000000000000028 0.7300000000000021 +70.2999999999999972 0.7300000000000021 +70.4000000000000057 0.7200000000000026 +70.5000000000000000 0.7100000000000026 +70.6000000000000085 0.7000000000000031 +70.7000000000000028 0.6900000000000031 +70.7999999999999972 0.6800000000000029 +70.9000000000000057 0.6800000000000029 +71.0000000000000000 0.6700000000000034 +71.1000000000000085 0.6600000000000030 +71.2000000000000028 0.6500000000000026 +71.2999999999999972 0.6500000000000026 +71.4000000000000057 0.6400000000000025 +71.5000000000000000 0.6400000000000025 +71.6000000000000085 0.6300000000000022 +71.7000000000000028 0.6300000000000022 +71.7999999999999972 0.6200000000000020 +71.9000000000000057 0.6200000000000020 +72.0000000000000000 0.6100000000000021 +72.1000000000000085 0.6100000000000021 +72.2000000000000028 0.6100000000000021 +72.2999999999999972 0.6100000000000021 +72.4000000000000057 0.6100000000000021 +72.5000000000000000 0.6100000000000021 +72.6000000000000085 0.6100000000000021 +72.7000000000000028 0.6100000000000021 +72.7999999999999972 0.6100000000000021 +72.9000000000000057 0.6100000000000021 +73.0000000000000000 0.6100000000000021 +73.1000000000000085 0.6200000000000023 +73.2000000000000028 0.6300000000000021 +73.2999999999999972 0.6300000000000021 +73.4000000000000057 0.6400000000000021 +73.5000000000000000 0.6500000000000026 +73.6000000000000085 0.6600000000000024 +73.7000000000000028 0.6700000000000024 +73.7999999999999972 0.6700000000000024 +73.9000000000000057 0.6800000000000023 +74.0000000000000000 0.6900000000000026 +74.1000000000000085 0.7000000000000024 +74.2000000000000028 0.7200000000000021 +74.2999999999999972 0.7300000000000022 +74.4000000000000057 0.7400000000000017 +74.5000000000000000 0.7500000000000023 +74.6000000000000085 0.7600000000000023 +74.7000000000000028 0.7700000000000028 +74.7999999999999972 0.7800000000000031 +74.9000000000000057 0.7900000000000036 +75.0000000000000000 0.8000000000000040 +75.1000000000000085 0.8100000000000042 +75.2000000000000028 0.8300000000000047 +75.2999999999999972 0.8400000000000053 +75.4000000000000057 0.8500000000000052 +75.5000000000000000 0.8600000000000054 +75.6000000000000085 0.8700000000000050 +75.7000000000000028 0.8800000000000051 +75.7999999999999972 0.8900000000000056 +75.9000000000000057 0.9000000000000055 +76.0000000000000000 0.9100000000000050 +76.1000000000000085 0.9200000000000047 +76.2000000000000028 0.9300000000000047 +76.2999999999999972 0.9300000000000047 +76.4000000000000057 0.9400000000000045 +76.5000000000000000 0.9500000000000044 +76.6000000000000085 0.9600000000000040 +76.7000000000000028 0.9700000000000039 +76.8000000000000114 0.9800000000000033 +76.9000000000000057 0.9900000000000037 +77.0000000000000000 1.0000000000000033 +77.1000000000000085 1.0100000000000033 +77.2000000000000028 1.0200000000000029 +77.3000000000000114 1.0200000000000029 +77.4000000000000057 1.0300000000000036 +77.5000000000000000 1.0400000000000031 +77.6000000000000085 1.0500000000000025 +77.7000000000000028 1.0600000000000023 +77.8000000000000114 1.0700000000000018 +77.9000000000000057 1.0800000000000012 +78.0000000000000000 1.0900000000000007 +78.1000000000000085 1.1000000000000008 +78.2000000000000028 1.1100000000000012 +78.3000000000000114 1.1200000000000014 +78.4000000000000057 1.1200000000000014 +78.5000000000000000 1.1300000000000017 +78.6000000000000085 1.1400000000000019 +78.7000000000000028 1.1500000000000019 +78.8000000000000114 1.1600000000000021 +78.9000000000000057 1.1700000000000015 +79.0000000000000000 1.1700000000000015 +79.1000000000000085 1.1800000000000015 +79.2000000000000028 1.1900000000000019 +79.3000000000000114 1.2000000000000022 +79.4000000000000057 1.2000000000000022 +79.5000000000000000 1.2100000000000017 +79.6000000000000085 1.2200000000000022 +79.7000000000000028 1.2200000000000022 +79.8000000000000114 1.2300000000000022 +79.9000000000000057 1.2400000000000024 +80.0000000000000000 1.2400000000000024 +80.1000000000000085 1.2500000000000027 +80.2000000000000028 1.2500000000000027 +80.3000000000000114 1.2600000000000029 +80.4000000000000057 1.2600000000000029 +80.5000000000000000 1.2700000000000027 +80.6000000000000085 1.2700000000000027 +80.7000000000000028 1.2800000000000025 +80.8000000000000114 1.2800000000000025 +80.9000000000000057 1.2800000000000025 +81.0000000000000000 1.2800000000000025 +81.1000000000000085 1.2900000000000025 +81.2000000000000028 1.2900000000000025 +81.3000000000000114 1.2900000000000025 +81.4000000000000057 1.2900000000000025 +81.5000000000000000 1.2900000000000025 +81.6000000000000085 1.3000000000000027 +81.7000000000000028 1.3000000000000027 +81.8000000000000114 1.3000000000000027 +81.9000000000000057 1.3000000000000027 +82.0000000000000000 1.3000000000000027 +82.1000000000000085 1.3000000000000027 +82.2000000000000028 1.3000000000000027 +82.3000000000000114 1.3000000000000027 +82.4000000000000057 1.3000000000000027 +82.5000000000000000 1.2900000000000027 +82.6000000000000085 1.2900000000000027 +82.7000000000000028 1.2900000000000027 +82.8000000000000114 1.2800000000000025 +82.9000000000000057 1.2800000000000025 +83.0000000000000000 1.2800000000000025 +83.1000000000000085 1.2700000000000027 +83.2000000000000028 1.2700000000000027 +83.3000000000000114 1.2600000000000027 +83.4000000000000057 1.2500000000000029 +83.5000000000000000 1.2500000000000029 +83.6000000000000085 1.2400000000000027 +83.7000000000000028 1.2300000000000029 +83.8000000000000114 1.2300000000000029 +83.9000000000000057 1.2200000000000026 +84.0000000000000000 1.2100000000000033 +84.1000000000000085 1.2000000000000035 +84.2000000000000028 1.1900000000000039 +84.3000000000000114 1.1800000000000042 +84.4000000000000057 1.1700000000000044 +84.5000000000000000 1.1600000000000044 +84.6000000000000085 1.1500000000000039 +84.7000000000000028 1.1400000000000046 +84.8000000000000114 1.1300000000000048 +84.9000000000000057 1.1200000000000052 +85.0000000000000000 1.1100000000000048 +85.1000000000000085 1.0900000000000050 +85.2000000000000028 1.0800000000000056 +85.3000000000000114 1.0700000000000058 +85.4000000000000057 1.0600000000000063 +85.5000000000000000 1.0500000000000069 +85.6000000000000085 1.0300000000000080 +85.7000000000000028 1.0200000000000071 +85.8000000000000114 1.0100000000000064 +85.9000000000000057 1.0000000000000060 +86.0000000000000000 0.9900000000000060 +86.1000000000000085 0.9800000000000065 +86.2000000000000028 0.9700000000000059 +86.3000000000000114 0.9600000000000063 +86.4000000000000057 0.9500000000000069 +86.5000000000000000 0.9400000000000071 +86.6000000000000085 0.9300000000000076 +86.7000000000000028 0.9200000000000074 +86.8000000000000114 0.9100000000000078 +86.9000000000000057 0.9000000000000072 +87.0000000000000000 0.8900000000000077 +87.1000000000000085 0.8900000000000077 +87.2000000000000028 0.8800000000000076 +87.3000000000000114 0.8700000000000080 +87.4000000000000057 0.8700000000000080 +87.5000000000000000 0.8600000000000081 +87.6000000000000085 0.8500000000000084 +87.7000000000000028 0.8500000000000084 +87.8000000000000114 0.8400000000000083 +87.9000000000000057 0.8400000000000083 +88.0000000000000000 0.8400000000000083 +88.1000000000000085 0.8300000000000083 +88.2000000000000028 0.8300000000000083 +88.3000000000000114 0.8300000000000083 +88.4000000000000057 0.8200000000000083 +88.5000000000000000 0.8200000000000083 +88.6000000000000085 0.8200000000000083 +88.7000000000000028 0.8200000000000083 +88.8000000000000114 0.8200000000000083 +88.9000000000000057 0.8200000000000083 +89.0000000000000000 0.8200000000000083 +89.1000000000000085 0.8200000000000083 +89.2000000000000028 0.8300000000000083 +89.3000000000000114 0.8300000000000083 +89.4000000000000057 0.8400000000000081 +89.5000000000000000 0.8400000000000081 +89.6000000000000085 0.8500000000000079 +89.7000000000000028 0.8500000000000079 +89.8000000000000114 0.8600000000000079 +89.9000000000000057 0.8700000000000075 +90.0000000000000000 0.8800000000000076 +90.1000000000000085 0.8800000000000076 +90.2000000000000028 0.8900000000000081 +90.3000000000000114 0.9000000000000075 +90.4000000000000057 0.9100000000000074 +90.5000000000000000 0.9200000000000078 +90.6000000000000085 0.9300000000000074 +90.7000000000000028 0.9400000000000077 +90.8000000000000114 0.9500000000000081 +90.9000000000000057 0.9500000000000081 +91.0000000000000000 0.9600000000000080 +91.1000000000000085 0.9700000000000076 +91.2000000000000028 0.9800000000000079 +91.3000000000000114 0.9900000000000077 +91.4000000000000057 1.0000000000000078 +91.5000000000000000 1.0100000000000082 +91.6000000000000085 1.0200000000000087 +91.7000000000000028 1.0300000000000085 +91.8000000000000114 1.0400000000000083 +91.9000000000000057 1.0400000000000083 +92.0000000000000000 1.0500000000000080 +92.1000000000000085 1.0600000000000085 +92.2000000000000028 1.0700000000000087 +92.3000000000000114 1.0700000000000087 +92.4000000000000057 1.0800000000000085 +92.5000000000000000 1.0800000000000085 +92.6000000000000085 1.0900000000000087 +92.7000000000000028 1.1000000000000085 +92.8000000000000114 1.1000000000000085 +92.9000000000000057 1.1100000000000088 +93.0000000000000000 1.1100000000000088 +93.1000000000000085 1.1100000000000088 +93.2000000000000028 1.1200000000000090 +93.3000000000000114 1.1200000000000090 +93.4000000000000057 1.1200000000000090 +93.5000000000000000 1.1200000000000090 +93.6000000000000085 1.1200000000000090 +93.7000000000000028 1.1200000000000090 +93.8000000000000114 1.1200000000000090 +93.9000000000000057 1.1200000000000090 +94.0000000000000000 1.1200000000000090 +94.1000000000000085 1.1200000000000090 +94.2000000000000028 1.1200000000000090 +94.3000000000000114 1.1200000000000090 +94.4000000000000057 1.1200000000000090 +94.5000000000000000 1.1200000000000090 +94.6000000000000085 1.1100000000000092 +94.7000000000000028 1.1100000000000092 +94.8000000000000114 1.1100000000000092 +94.9000000000000057 1.1000000000000092 +95.0000000000000000 1.1000000000000092 +95.1000000000000085 1.1000000000000092 +95.2000000000000028 1.0900000000000092 +95.3000000000000114 1.0900000000000092 +95.4000000000000057 1.0900000000000092 +95.5000000000000000 1.0900000000000092 +95.6000000000000085 1.0800000000000092 +95.7000000000000028 1.0800000000000092 +95.8000000000000114 1.0800000000000092 +95.9000000000000057 1.0800000000000092 +96.0000000000000000 1.0800000000000092 +96.1000000000000085 1.0800000000000092 +96.2000000000000028 1.0800000000000092 +96.3000000000000114 1.0800000000000092 +96.4000000000000057 1.0800000000000092 +96.5000000000000000 1.0800000000000092 +96.6000000000000085 1.0800000000000092 +96.7000000000000028 1.0800000000000092 +96.8000000000000114 1.0800000000000092 +96.9000000000000057 1.0800000000000092 +97.0000000000000000 1.0800000000000092 +97.1000000000000085 1.0800000000000092 +97.2000000000000028 1.0800000000000092 +97.3000000000000114 1.0800000000000092 +97.4000000000000057 1.0800000000000092 +97.5000000000000000 1.0800000000000092 +97.6000000000000085 1.0800000000000092 +97.7000000000000028 1.0800000000000092 +97.8000000000000114 1.0800000000000092 +97.9000000000000057 1.0800000000000092 +98.0000000000000000 1.0800000000000092 +98.1000000000000085 1.0800000000000092 +98.2000000000000028 1.0800000000000092 +98.3000000000000114 1.0800000000000092 +98.4000000000000057 1.0800000000000092 +98.5000000000000000 1.0800000000000092 +98.6000000000000085 1.0800000000000092 +98.7000000000000028 1.0700000000000094 +98.8000000000000114 1.0700000000000094 +98.9000000000000057 1.0600000000000089 +99.0000000000000000 1.0600000000000089 +99.1000000000000085 1.0500000000000091 +99.2000000000000028 1.0400000000000094 +99.3000000000000114 1.0400000000000094 +99.4000000000000057 1.0300000000000096 +99.5000000000000000 1.0200000000000091 +99.6000000000000085 1.0200000000000091 +99.7000000000000028 1.0100000000000093 +99.8000000000000114 1.0000000000000098 +99.9000000000000057 1.0000000000000098 +100.0000000000000000 0.9900000000000092 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[7].dat b/src/engine/tests/system/gt_data/virus_replication/X[7].dat new file mode 100644 index 00000000..145ccdee --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[7].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0000000000000000 +1.2000000000000002 0.0000000000000000 +1.3000000000000000 0.0000000000000000 +1.4000000000000001 0.0000000000000000 +1.5000000000000000 0.0000000000000000 +1.6000000000000001 0.0000000000000000 +1.7000000000000002 0.0000000000000000 +1.8000000000000000 0.0000000000000000 +1.9000000000000001 0.0000000000000000 +2.0000000000000000 0.0000000000000000 +2.1000000000000001 0.0000000000000000 +2.2000000000000002 0.0000000000000000 +2.3000000000000003 0.0000000000000000 +2.4000000000000004 0.0000000000000000 +2.5000000000000000 0.0000000000000000 +2.6000000000000001 0.0000000000000000 +2.7000000000000002 0.0000000000000000 +2.8000000000000003 0.0000000000000000 +2.9000000000000004 0.0000000000000000 +3.0000000000000000 0.0000000000000000 +3.1000000000000001 0.0000000000000000 +3.2000000000000002 0.0000000000000000 +3.3000000000000003 0.0000000000000000 +3.4000000000000004 0.0000000000000000 +3.5000000000000000 0.0100000000000000 +3.6000000000000001 0.0100000000000000 +3.7000000000000002 0.0100000000000000 +3.8000000000000003 0.0200000000000000 +3.9000000000000004 0.0200000000000000 +4.0000000000000000 0.0300000000000000 +4.1000000000000005 0.0300000000000000 +4.2000000000000002 0.0400000000000000 +4.2999999999999998 0.0400000000000000 +4.4000000000000004 0.0500000000000000 +4.5000000000000000 0.0500000000000000 +4.6000000000000005 0.0600000000000000 +4.7000000000000002 0.0700000000000000 +4.8000000000000007 0.0800000000000000 +4.9000000000000004 0.0900000000000000 +5.0000000000000000 0.0900000000000000 +5.1000000000000005 0.1000000000000000 +5.2000000000000002 0.1100000000000000 +5.3000000000000007 0.1200000000000000 +5.4000000000000004 0.1400000000000000 +5.5000000000000000 0.1499999999999999 +5.6000000000000005 0.1599999999999999 +5.7000000000000002 0.1700000000000000 +5.8000000000000007 0.1799999999999999 +5.9000000000000004 0.2000000000000000 +6.0000000000000000 0.2100000000000000 +6.1000000000000005 0.2200000000000000 +6.2000000000000002 0.2400000000000001 +6.3000000000000007 0.2500000000000001 +6.4000000000000004 0.2700000000000001 +6.5000000000000000 0.2800000000000001 +6.6000000000000005 0.2900000000000001 +6.7000000000000002 0.3100000000000001 +6.8000000000000007 0.3200000000000001 +6.9000000000000004 0.3400000000000000 +7.0000000000000000 0.3599999999999999 +7.1000000000000005 0.3699999999999999 +7.2000000000000002 0.3900000000000000 +7.3000000000000007 0.4000000000000000 +7.4000000000000004 0.4200000000000001 +7.5000000000000000 0.4300000000000002 +7.6000000000000005 0.4500000000000001 +7.7000000000000002 0.4700000000000001 +7.8000000000000007 0.4800000000000001 +7.9000000000000004 0.5000000000000001 +8.0000000000000000 0.5100000000000000 +8.0999999999999996 0.5299999999999999 +8.2000000000000011 0.5400000000000000 +8.3000000000000007 0.5600000000000001 +8.4000000000000004 0.5700000000000000 +8.5000000000000000 0.5899999999999997 +8.5999999999999996 0.5999999999999996 +8.7000000000000011 0.6199999999999998 +8.8000000000000007 0.6299999999999999 +8.9000000000000004 0.6500000000000001 +9.0000000000000000 0.6600000000000003 +9.0999999999999996 0.6800000000000002 +9.2000000000000011 0.6900000000000001 +9.3000000000000007 0.7000000000000000 +9.4000000000000004 0.7200000000000000 +9.5000000000000000 0.7300000000000000 +9.6000000000000014 0.7500000000000001 +9.7000000000000011 0.7600000000000002 +9.8000000000000007 0.7700000000000001 +9.9000000000000004 0.7900000000000000 +10.0000000000000000 0.8000000000000002 +10.1000000000000014 0.8100000000000002 +10.2000000000000011 0.8200000000000003 +10.3000000000000007 0.8400000000000004 +10.4000000000000004 0.8500000000000004 +10.5000000000000000 0.8600000000000005 +10.6000000000000014 0.8700000000000006 +10.7000000000000011 0.8800000000000006 +10.8000000000000007 0.9000000000000006 +10.9000000000000004 0.9100000000000006 +11.0000000000000000 0.9200000000000007 +11.1000000000000014 0.9300000000000007 +11.2000000000000011 0.9400000000000006 +11.3000000000000007 0.9500000000000006 +11.4000000000000004 0.9600000000000006 +11.5000000000000000 0.9700000000000005 +11.6000000000000014 0.9800000000000004 +11.7000000000000011 0.9900000000000004 +11.8000000000000007 1.0000000000000004 +11.9000000000000004 1.0100000000000005 +12.0000000000000000 1.0200000000000005 +12.1000000000000014 1.0300000000000005 +12.2000000000000011 1.0300000000000005 +12.3000000000000007 1.0400000000000005 +12.4000000000000004 1.0500000000000005 +12.5000000000000000 1.0600000000000005 +12.6000000000000014 1.0600000000000005 +12.7000000000000011 1.0700000000000005 +12.8000000000000007 1.0800000000000005 +12.9000000000000004 1.0800000000000005 +13.0000000000000000 1.0900000000000005 +13.1000000000000014 1.0900000000000005 +13.2000000000000011 1.1000000000000005 +13.3000000000000007 1.1000000000000005 +13.4000000000000004 1.1100000000000005 +13.5000000000000000 1.1100000000000005 +13.6000000000000014 1.1200000000000006 +13.7000000000000011 1.1200000000000006 +13.8000000000000007 1.1300000000000006 +13.9000000000000004 1.1300000000000006 +14.0000000000000000 1.1300000000000006 +14.1000000000000014 1.1300000000000006 +14.2000000000000011 1.1400000000000006 +14.3000000000000007 1.1400000000000006 +14.4000000000000004 1.1400000000000006 +14.5000000000000000 1.1400000000000006 +14.6000000000000014 1.1400000000000006 +14.7000000000000011 1.1500000000000006 +14.8000000000000007 1.1500000000000006 +14.9000000000000004 1.1500000000000006 +15.0000000000000000 1.1500000000000006 +15.1000000000000014 1.1500000000000006 +15.2000000000000011 1.1500000000000006 +15.3000000000000007 1.1500000000000006 +15.4000000000000004 1.1500000000000006 +15.5000000000000000 1.1600000000000006 +15.6000000000000014 1.1600000000000006 +15.7000000000000011 1.1600000000000006 +15.8000000000000007 1.1600000000000006 +15.9000000000000004 1.1600000000000006 +16.0000000000000000 1.1600000000000006 +16.1000000000000014 1.1600000000000006 +16.1999999999999993 1.1600000000000006 +16.3000000000000007 1.1600000000000006 +16.4000000000000021 1.1600000000000006 +16.5000000000000000 1.1600000000000006 +16.6000000000000014 1.1600000000000006 +16.6999999999999993 1.1600000000000006 +16.8000000000000007 1.1600000000000006 +16.9000000000000021 1.1600000000000006 +17.0000000000000000 1.1600000000000006 +17.1000000000000014 1.1600000000000006 +17.1999999999999993 1.1500000000000006 +17.3000000000000007 1.1500000000000006 +17.4000000000000021 1.1500000000000006 +17.5000000000000000 1.1400000000000006 +17.6000000000000014 1.1400000000000006 +17.6999999999999993 1.1300000000000006 +17.8000000000000007 1.1200000000000006 +17.9000000000000021 1.1200000000000006 +18.0000000000000000 1.1100000000000005 +18.1000000000000014 1.1000000000000008 +18.1999999999999993 1.1000000000000008 +18.3000000000000007 1.0900000000000007 +18.4000000000000021 1.0800000000000007 +18.5000000000000000 1.0700000000000007 +18.6000000000000014 1.0700000000000007 +18.6999999999999993 1.0600000000000007 +18.8000000000000007 1.0500000000000007 +18.9000000000000021 1.0400000000000007 +19.0000000000000000 1.0300000000000007 +19.1000000000000014 1.0200000000000007 +19.2000000000000028 1.0100000000000007 +19.3000000000000007 1.0000000000000007 +19.4000000000000021 0.9900000000000007 +19.5000000000000000 0.9900000000000007 +19.6000000000000014 0.9800000000000006 +19.7000000000000028 0.9700000000000005 +19.8000000000000007 0.9600000000000005 +19.9000000000000021 0.9500000000000005 +20.0000000000000000 0.9400000000000004 +20.1000000000000014 0.9400000000000004 +20.2000000000000028 0.9300000000000005 +20.3000000000000007 0.9200000000000004 +20.4000000000000021 0.9100000000000005 +20.5000000000000000 0.9100000000000005 +20.6000000000000014 0.9000000000000005 +20.7000000000000028 0.9000000000000005 +20.8000000000000007 0.8900000000000006 +20.9000000000000021 0.8900000000000006 +21.0000000000000000 0.8800000000000007 +21.1000000000000014 0.8800000000000007 +21.2000000000000028 0.8700000000000008 +21.3000000000000007 0.8700000000000008 +21.4000000000000021 0.8700000000000008 +21.5000000000000000 0.8700000000000008 +21.6000000000000014 0.8600000000000008 +21.7000000000000028 0.8600000000000008 +21.8000000000000007 0.8600000000000008 +21.9000000000000021 0.8600000000000008 +22.0000000000000000 0.8600000000000008 +22.1000000000000014 0.8600000000000008 +22.2000000000000028 0.8600000000000008 +22.3000000000000007 0.8600000000000008 +22.4000000000000021 0.8600000000000008 +22.5000000000000000 0.8700000000000008 +22.6000000000000014 0.8700000000000008 +22.7000000000000028 0.8700000000000008 +22.8000000000000007 0.8700000000000008 +22.9000000000000021 0.8800000000000009 +23.0000000000000000 0.8800000000000009 +23.1000000000000014 0.8900000000000008 +23.2000000000000028 0.8900000000000008 +23.3000000000000007 0.8900000000000008 +23.4000000000000021 0.9000000000000008 +23.5000000000000000 0.9000000000000008 +23.6000000000000014 0.9000000000000008 +23.7000000000000028 0.9100000000000007 +23.8000000000000007 0.9100000000000007 +23.9000000000000021 0.9200000000000007 +24.0000000000000000 0.9200000000000007 +24.1000000000000014 0.9300000000000007 +24.2000000000000028 0.9300000000000007 +24.3000000000000007 0.9300000000000007 +24.4000000000000021 0.9400000000000007 +24.5000000000000000 0.9400000000000007 +24.6000000000000014 0.9500000000000007 +24.7000000000000028 0.9500000000000007 +24.8000000000000007 0.9600000000000006 +24.9000000000000021 0.9600000000000006 +25.0000000000000000 0.9700000000000006 +25.1000000000000014 0.9700000000000006 +25.2000000000000028 0.9800000000000006 +25.3000000000000007 0.9800000000000006 +25.4000000000000021 0.9800000000000006 +25.5000000000000000 0.9900000000000008 +25.6000000000000014 0.9900000000000008 +25.7000000000000028 1.0000000000000009 +25.8000000000000007 1.0000000000000009 +25.9000000000000021 1.0100000000000009 +26.0000000000000000 1.0100000000000009 +26.1000000000000014 1.0100000000000009 +26.2000000000000028 1.0200000000000009 +26.3000000000000007 1.0200000000000009 +26.4000000000000021 1.0200000000000009 +26.5000000000000000 1.0300000000000009 +26.6000000000000014 1.0300000000000009 +26.7000000000000028 1.0300000000000009 +26.8000000000000007 1.0300000000000009 +26.9000000000000021 1.0300000000000009 +27.0000000000000000 1.0400000000000009 +27.1000000000000014 1.0400000000000009 +27.2000000000000028 1.0400000000000009 +27.3000000000000007 1.0400000000000009 +27.4000000000000021 1.0400000000000009 +27.5000000000000000 1.0400000000000009 +27.6000000000000014 1.0400000000000009 +27.7000000000000028 1.0400000000000009 +27.8000000000000007 1.0400000000000009 +27.9000000000000021 1.0400000000000009 +28.0000000000000000 1.0300000000000009 +28.1000000000000014 1.0300000000000009 +28.2000000000000028 1.0200000000000009 +28.3000000000000007 1.0200000000000009 +28.4000000000000021 1.0200000000000009 +28.5000000000000000 1.0100000000000009 +28.6000000000000014 1.0100000000000009 +28.7000000000000028 1.0000000000000009 +28.8000000000000007 1.0000000000000009 +28.9000000000000021 1.0000000000000009 +29.0000000000000000 0.9900000000000009 +29.1000000000000014 0.9900000000000009 +29.2000000000000028 0.9800000000000008 +29.3000000000000007 0.9800000000000008 +29.4000000000000021 0.9800000000000008 +29.5000000000000000 0.9700000000000008 +29.6000000000000014 0.9700000000000008 +29.7000000000000028 0.9600000000000007 +29.8000000000000007 0.9600000000000007 +29.9000000000000021 0.9600000000000007 +30.0000000000000000 0.9500000000000007 +30.1000000000000014 0.9500000000000007 +30.2000000000000028 0.9500000000000007 +30.3000000000000007 0.9500000000000007 +30.4000000000000021 0.9400000000000007 +30.5000000000000000 0.9400000000000007 +30.6000000000000014 0.9400000000000007 +30.7000000000000028 0.9400000000000007 +30.8000000000000007 0.9400000000000007 +30.9000000000000021 0.9300000000000007 +31.0000000000000000 0.9300000000000007 +31.1000000000000014 0.9300000000000007 +31.2000000000000028 0.9300000000000007 +31.3000000000000007 0.9300000000000007 +31.4000000000000021 0.9200000000000007 +31.5000000000000000 0.9200000000000007 +31.6000000000000014 0.9200000000000007 +31.7000000000000028 0.9200000000000007 +31.8000000000000007 0.9200000000000007 +31.9000000000000021 0.9200000000000007 +32.0000000000000000 0.9200000000000007 +32.1000000000000014 0.9100000000000006 +32.2000000000000028 0.9100000000000006 +32.3000000000000043 0.9100000000000006 +32.3999999999999986 0.9100000000000006 +32.5000000000000000 0.9100000000000006 +32.6000000000000014 0.9000000000000007 +32.7000000000000028 0.9000000000000007 +32.8000000000000043 0.9000000000000007 +32.8999999999999986 0.9000000000000007 +33.0000000000000000 0.8900000000000008 +33.1000000000000014 0.8900000000000008 +33.2000000000000028 0.8900000000000008 +33.3000000000000043 0.8800000000000007 +33.3999999999999986 0.8800000000000007 +33.5000000000000000 0.8800000000000007 +33.6000000000000014 0.8700000000000007 +33.7000000000000028 0.8700000000000007 +33.8000000000000043 0.8600000000000005 +33.8999999999999986 0.8600000000000005 +34.0000000000000000 0.8500000000000005 +34.1000000000000014 0.8500000000000005 +34.2000000000000028 0.8400000000000004 +34.3000000000000043 0.8400000000000004 +34.3999999999999986 0.8300000000000006 +34.5000000000000000 0.8300000000000006 +34.6000000000000014 0.8200000000000006 +34.7000000000000028 0.8100000000000005 +34.8000000000000043 0.8100000000000005 +34.8999999999999986 0.8000000000000007 +35.0000000000000000 0.8000000000000007 +35.1000000000000014 0.7900000000000005 +35.2000000000000028 0.7800000000000002 +35.3000000000000043 0.7800000000000002 +35.3999999999999986 0.7700000000000000 +35.5000000000000000 0.7600000000000000 +35.6000000000000014 0.7600000000000000 +35.7000000000000028 0.7500000000000001 +35.8000000000000043 0.7400000000000000 +35.8999999999999986 0.7299999999999999 +36.0000000000000000 0.7299999999999999 +36.1000000000000014 0.7199999999999998 +36.2000000000000028 0.7099999999999996 +36.3000000000000043 0.7099999999999996 +36.3999999999999986 0.6999999999999998 +36.5000000000000000 0.6999999999999998 +36.6000000000000014 0.6899999999999997 +36.7000000000000028 0.6799999999999998 +36.8000000000000043 0.6799999999999998 +36.8999999999999986 0.6699999999999999 +37.0000000000000000 0.6699999999999999 +37.1000000000000014 0.6699999999999999 +37.2000000000000028 0.6599999999999999 +37.3000000000000043 0.6599999999999999 +37.3999999999999986 0.6599999999999999 +37.5000000000000000 0.6599999999999999 +37.6000000000000014 0.6499999999999999 +37.7000000000000028 0.6499999999999999 +37.8000000000000043 0.6499999999999999 +37.8999999999999986 0.6499999999999999 +38.0000000000000000 0.6499999999999999 +38.1000000000000014 0.6499999999999999 +38.2000000000000028 0.6599999999999999 +38.3000000000000043 0.6599999999999999 +38.4000000000000057 0.6700000000000000 +38.5000000000000000 0.6700000000000000 +38.6000000000000014 0.6799999999999998 +38.7000000000000028 0.6799999999999998 +38.8000000000000043 0.6899999999999999 +38.9000000000000057 0.6999999999999998 +39.0000000000000000 0.6999999999999998 +39.1000000000000014 0.7099999999999996 +39.2000000000000028 0.7199999999999994 +39.3000000000000043 0.7199999999999994 +39.4000000000000057 0.7299999999999992 +39.5000000000000000 0.7399999999999990 +39.6000000000000014 0.7499999999999987 +39.7000000000000028 0.7499999999999987 +39.8000000000000043 0.7599999999999987 +39.9000000000000057 0.7699999999999986 +40.0000000000000000 0.7799999999999985 +40.1000000000000014 0.7799999999999985 +40.2000000000000028 0.7899999999999986 +40.3000000000000043 0.7999999999999987 +40.4000000000000057 0.7999999999999987 +40.5000000000000000 0.8099999999999988 +40.6000000000000014 0.8199999999999987 +40.7000000000000028 0.8199999999999987 +40.8000000000000043 0.8299999999999986 +40.9000000000000057 0.8299999999999986 +41.0000000000000000 0.8399999999999984 +41.1000000000000014 0.8399999999999984 +41.2000000000000028 0.8499999999999984 +41.3000000000000043 0.8499999999999984 +41.4000000000000057 0.8599999999999983 +41.5000000000000000 0.8599999999999983 +41.6000000000000014 0.8699999999999984 +41.7000000000000028 0.8699999999999984 +41.8000000000000043 0.8799999999999985 +41.9000000000000057 0.8799999999999985 +42.0000000000000000 0.8799999999999985 +42.1000000000000014 0.8899999999999986 +42.2000000000000028 0.8899999999999986 +42.3000000000000043 0.8999999999999985 +42.4000000000000057 0.8999999999999985 +42.5000000000000000 0.9099999999999984 +42.6000000000000014 0.9099999999999984 +42.7000000000000028 0.9199999999999984 +42.8000000000000043 0.9199999999999984 +42.9000000000000057 0.9299999999999983 +43.0000000000000000 0.9299999999999983 +43.1000000000000014 0.9399999999999982 +43.2000000000000028 0.9399999999999982 +43.3000000000000043 0.9399999999999982 +43.4000000000000057 0.9499999999999982 +43.5000000000000000 0.9499999999999982 +43.6000000000000014 0.9599999999999983 +43.7000000000000028 0.9599999999999983 +43.8000000000000043 0.9699999999999983 +43.9000000000000057 0.9699999999999983 +44.0000000000000000 0.9799999999999982 +44.1000000000000014 0.9799999999999982 +44.2000000000000028 0.9899999999999983 +44.3000000000000043 0.9899999999999983 +44.4000000000000057 0.9999999999999983 +44.5000000000000000 0.9999999999999983 +44.6000000000000014 1.0099999999999982 +44.7000000000000028 1.0099999999999982 +44.8000000000000043 1.0099999999999982 +44.9000000000000057 1.0199999999999982 +45.0000000000000000 1.0199999999999982 +45.1000000000000014 1.0299999999999983 +45.2000000000000028 1.0299999999999983 +45.3000000000000043 1.0299999999999983 +45.4000000000000057 1.0399999999999983 +45.5000000000000000 1.0399999999999983 +45.6000000000000014 1.0399999999999983 +45.7000000000000028 1.0399999999999983 +45.8000000000000043 1.0499999999999983 +45.9000000000000057 1.0499999999999983 +46.0000000000000000 1.0499999999999983 +46.1000000000000014 1.0499999999999983 +46.2000000000000028 1.0499999999999983 +46.3000000000000043 1.0599999999999983 +46.4000000000000057 1.0599999999999983 +46.5000000000000000 1.0599999999999983 +46.6000000000000014 1.0599999999999983 +46.7000000000000028 1.0599999999999983 +46.8000000000000043 1.0599999999999983 +46.9000000000000057 1.0599999999999983 +47.0000000000000000 1.0599999999999983 +47.1000000000000014 1.0599999999999983 +47.2000000000000028 1.0599999999999983 +47.3000000000000043 1.0599999999999983 +47.4000000000000057 1.0599999999999983 +47.5000000000000000 1.0599999999999983 +47.6000000000000014 1.0599999999999983 +47.7000000000000028 1.0599999999999983 +47.8000000000000043 1.0599999999999983 +47.9000000000000057 1.0599999999999983 +48.0000000000000000 1.0599999999999983 +48.1000000000000014 1.0599999999999983 +48.2000000000000028 1.0599999999999983 +48.3000000000000043 1.0599999999999983 +48.4000000000000057 1.0599999999999983 +48.5000000000000000 1.0599999999999983 +48.6000000000000014 1.0599999999999983 +48.7000000000000028 1.0599999999999983 +48.8000000000000043 1.0599999999999983 +48.9000000000000057 1.0699999999999983 +49.0000000000000000 1.0699999999999983 +49.1000000000000014 1.0699999999999983 +49.2000000000000028 1.0699999999999983 +49.3000000000000043 1.0699999999999983 +49.4000000000000057 1.0699999999999983 +49.5000000000000000 1.0799999999999983 +49.6000000000000014 1.0799999999999983 +49.7000000000000028 1.0799999999999983 +49.8000000000000043 1.0899999999999985 +49.9000000000000057 1.0899999999999985 +50.0000000000000000 1.0999999999999985 +50.1000000000000014 1.0999999999999985 +50.2000000000000028 1.1099999999999988 +50.3000000000000043 1.1099999999999988 +50.4000000000000057 1.1099999999999988 +50.5000000000000000 1.1199999999999990 +50.6000000000000014 1.1199999999999990 +50.7000000000000028 1.1299999999999990 +50.8000000000000043 1.1299999999999990 +50.9000000000000057 1.1399999999999988 +51.0000000000000000 1.1399999999999988 +51.1000000000000014 1.1499999999999988 +51.2000000000000028 1.1499999999999988 +51.3000000000000043 1.1599999999999988 +51.4000000000000057 1.1599999999999988 +51.5000000000000000 1.1699999999999988 +51.6000000000000014 1.1699999999999988 +51.7000000000000028 1.1799999999999990 +51.8000000000000043 1.1799999999999990 +51.9000000000000057 1.1799999999999990 +52.0000000000000000 1.1899999999999993 +52.1000000000000014 1.1899999999999993 +52.2000000000000028 1.1999999999999993 +52.3000000000000043 1.1999999999999993 +52.4000000000000057 1.1999999999999993 +52.5000000000000000 1.2099999999999993 +52.6000000000000014 1.2099999999999993 +52.7000000000000028 1.2099999999999993 +52.8000000000000043 1.2099999999999993 +52.9000000000000057 1.2199999999999993 +53.0000000000000000 1.2199999999999993 +53.1000000000000014 1.2199999999999993 +53.2000000000000028 1.2299999999999993 +53.3000000000000043 1.2299999999999993 +53.4000000000000057 1.2299999999999993 +53.5000000000000000 1.2299999999999993 +53.6000000000000014 1.2299999999999993 +53.7000000000000028 1.2399999999999993 +53.8000000000000043 1.2399999999999993 +53.9000000000000057 1.2399999999999993 +54.0000000000000000 1.2399999999999993 +54.1000000000000014 1.2399999999999993 +54.2000000000000028 1.2499999999999993 +54.3000000000000043 1.2499999999999993 +54.4000000000000057 1.2499999999999993 +54.5000000000000000 1.2499999999999993 +54.6000000000000014 1.2499999999999993 +54.7000000000000028 1.2499999999999993 +54.8000000000000043 1.2499999999999993 +54.9000000000000057 1.2499999999999993 +55.0000000000000000 1.2499999999999993 +55.1000000000000014 1.2499999999999993 +55.2000000000000028 1.2499999999999993 +55.3000000000000043 1.2499999999999993 +55.4000000000000057 1.2499999999999993 +55.5000000000000000 1.2499999999999993 +55.6000000000000014 1.2499999999999993 +55.7000000000000028 1.2499999999999993 +55.8000000000000043 1.2499999999999993 +55.9000000000000057 1.2399999999999993 +56.0000000000000000 1.2399999999999993 +56.1000000000000014 1.2299999999999991 +56.2000000000000028 1.2199999999999993 +56.3000000000000043 1.2199999999999993 +56.4000000000000057 1.2099999999999995 +56.5000000000000000 1.1999999999999997 +56.6000000000000014 1.1899999999999995 +56.7000000000000028 1.1899999999999995 +56.8000000000000043 1.1799999999999995 +56.9000000000000057 1.1699999999999990 +57.0000000000000000 1.1599999999999988 +57.1000000000000014 1.1499999999999988 +57.2000000000000028 1.1399999999999992 +57.3000000000000043 1.1299999999999992 +57.4000000000000057 1.1199999999999990 +57.5000000000000000 1.1099999999999992 +57.6000000000000014 1.0899999999999996 +57.7000000000000028 1.0800000000000001 +57.8000000000000043 1.0700000000000001 +57.9000000000000057 1.0600000000000001 +58.0000000000000000 1.0499999999999996 +58.1000000000000014 1.0399999999999994 +58.2000000000000028 1.0199999999999994 +58.3000000000000043 1.0099999999999996 +58.4000000000000057 0.9999999999999993 +58.5000000000000000 0.9899999999999994 +58.6000000000000014 0.9799999999999998 +58.7000000000000028 0.9599999999999996 +58.8000000000000043 0.9499999999999998 +58.9000000000000057 0.9399999999999996 +59.0000000000000000 0.9299999999999996 +59.1000000000000014 0.9199999999999996 +59.2000000000000028 0.9099999999999993 +59.3000000000000043 0.8999999999999992 +59.4000000000000057 0.8899999999999989 +59.5000000000000000 0.8799999999999991 +59.6000000000000014 0.8699999999999993 +59.7000000000000028 0.8599999999999993 +59.8000000000000043 0.8499999999999995 +59.9000000000000057 0.8399999999999994 +60.0000000000000000 0.8299999999999997 +60.1000000000000014 0.8199999999999998 +60.2000000000000028 0.8099999999999999 +60.3000000000000043 0.7999999999999998 +60.4000000000000057 0.7999999999999998 +60.5000000000000000 0.7899999999999997 +60.6000000000000014 0.7799999999999995 +60.7000000000000028 0.7799999999999995 +60.8000000000000043 0.7699999999999996 +60.9000000000000057 0.7599999999999995 +61.0000000000000000 0.7599999999999995 +61.1000000000000014 0.7499999999999993 +61.2000000000000028 0.7499999999999993 +61.3000000000000043 0.7499999999999993 +61.4000000000000057 0.7399999999999994 +61.5000000000000000 0.7399999999999994 +61.6000000000000014 0.7399999999999994 +61.7000000000000028 0.7399999999999994 +61.8000000000000043 0.7299999999999994 +61.9000000000000057 0.7299999999999994 +62.0000000000000000 0.7299999999999994 +62.1000000000000014 0.7299999999999994 +62.2000000000000028 0.7299999999999994 +62.3000000000000043 0.7299999999999994 +62.4000000000000057 0.7399999999999993 +62.5000000000000000 0.7399999999999993 +62.6000000000000014 0.7399999999999993 +62.7000000000000028 0.7499999999999994 +62.8000000000000043 0.7499999999999994 +62.9000000000000057 0.7599999999999993 +63.0000000000000000 0.7599999999999993 +63.1000000000000014 0.7699999999999994 +63.2000000000000028 0.7699999999999994 +63.3000000000000043 0.7799999999999995 +63.4000000000000057 0.7799999999999995 +63.5000000000000000 0.7899999999999994 +63.6000000000000014 0.7899999999999994 +63.7000000000000028 0.7999999999999992 +63.8000000000000043 0.8099999999999994 +63.9000000000000057 0.8099999999999994 +64.0000000000000000 0.8199999999999992 +64.1000000000000085 0.8299999999999991 +64.2000000000000028 0.8299999999999991 +64.2999999999999972 0.8399999999999993 +64.4000000000000057 0.8399999999999993 +64.5000000000000000 0.8499999999999996 +64.6000000000000085 0.8599999999999998 +64.7000000000000028 0.8599999999999998 +64.7999999999999972 0.8700000000000000 +64.9000000000000057 0.8700000000000000 +65.0000000000000000 0.8800000000000003 +65.1000000000000085 0.8800000000000003 +65.2000000000000028 0.8900000000000003 +65.2999999999999972 0.8900000000000003 +65.4000000000000057 0.8900000000000003 +65.5000000000000000 0.9000000000000001 +65.6000000000000085 0.9000000000000001 +65.7000000000000028 0.9000000000000001 +65.7999999999999972 0.9100000000000000 +65.9000000000000057 0.9100000000000000 +66.0000000000000000 0.9100000000000000 +66.1000000000000085 0.9100000000000000 +66.2000000000000028 0.9199999999999999 +66.2999999999999972 0.9199999999999999 +66.4000000000000057 0.9199999999999999 +66.5000000000000000 0.9199999999999999 +66.6000000000000085 0.9199999999999999 +66.7000000000000028 0.9300000000000000 +66.7999999999999972 0.9300000000000000 +66.9000000000000057 0.9300000000000000 +67.0000000000000000 0.9300000000000000 +67.1000000000000085 0.9300000000000000 +67.2000000000000028 0.9300000000000000 +67.2999999999999972 0.9300000000000000 +67.4000000000000057 0.9300000000000000 +67.5000000000000000 0.9300000000000000 +67.6000000000000085 0.9300000000000000 +67.7000000000000028 0.9300000000000000 +67.7999999999999972 0.9300000000000000 +67.9000000000000057 0.9300000000000000 +68.0000000000000000 0.9300000000000000 +68.1000000000000085 0.9300000000000000 +68.2000000000000028 0.9199999999999999 +68.2999999999999972 0.9199999999999999 +68.4000000000000057 0.9199999999999999 +68.5000000000000000 0.9199999999999999 +68.6000000000000085 0.9099999999999997 +68.7000000000000028 0.9099999999999997 +68.7999999999999972 0.8999999999999997 +68.9000000000000057 0.8999999999999997 +69.0000000000000000 0.8900000000000000 +69.1000000000000085 0.8900000000000000 +69.2000000000000028 0.8800000000000002 +69.2999999999999972 0.8800000000000002 +69.4000000000000057 0.8700000000000002 +69.5000000000000000 0.8600000000000003 +69.6000000000000085 0.8600000000000003 +69.7000000000000028 0.8500000000000000 +69.7999999999999972 0.8399999999999995 +69.9000000000000057 0.8399999999999995 +70.0000000000000000 0.8299999999999992 +70.1000000000000085 0.8199999999999987 +70.2000000000000028 0.8099999999999992 +70.2999999999999972 0.8099999999999992 +70.4000000000000057 0.7999999999999992 +70.5000000000000000 0.7899999999999996 +70.6000000000000085 0.7800000000000001 +70.7000000000000028 0.7699999999999997 +70.7999999999999972 0.7699999999999997 +70.9000000000000057 0.7599999999999998 +71.0000000000000000 0.7499999999999999 +71.1000000000000085 0.7400000000000003 +71.2000000000000028 0.7300000000000006 +71.2999999999999972 0.7200000000000012 +71.4000000000000057 0.7200000000000012 +71.5000000000000000 0.7100000000000016 +71.6000000000000085 0.7000000000000015 +71.7000000000000028 0.7000000000000015 +71.7999999999999972 0.6900000000000019 +71.9000000000000057 0.6800000000000015 +72.0000000000000000 0.6800000000000015 +72.1000000000000085 0.6700000000000018 +72.2000000000000028 0.6600000000000016 +72.2999999999999972 0.6600000000000016 +72.4000000000000057 0.6500000000000016 +72.5000000000000000 0.6500000000000016 +72.6000000000000085 0.6500000000000016 +72.7000000000000028 0.6400000000000017 +72.7999999999999972 0.6400000000000017 +72.9000000000000057 0.6400000000000017 +73.0000000000000000 0.6300000000000016 +73.1000000000000085 0.6300000000000016 +73.2000000000000028 0.6300000000000016 +73.2999999999999972 0.6300000000000016 +73.4000000000000057 0.6300000000000016 +73.5000000000000000 0.6300000000000016 +73.6000000000000085 0.6300000000000016 +73.7000000000000028 0.6300000000000016 +73.7999999999999972 0.6300000000000016 +73.9000000000000057 0.6400000000000018 +74.0000000000000000 0.6400000000000018 +74.1000000000000085 0.6500000000000020 +74.2000000000000028 0.6500000000000020 +74.2999999999999972 0.6600000000000017 +74.4000000000000057 0.6700000000000020 +74.5000000000000000 0.6700000000000020 +74.6000000000000085 0.6800000000000025 +74.7000000000000028 0.6900000000000019 +74.7999999999999972 0.7000000000000024 +74.9000000000000057 0.7100000000000030 +75.0000000000000000 0.7200000000000026 +75.1000000000000085 0.7200000000000026 +75.2000000000000028 0.7300000000000028 +75.2999999999999972 0.7400000000000032 +75.4000000000000057 0.7500000000000039 +75.5000000000000000 0.7600000000000038 +75.6000000000000085 0.7700000000000031 +75.7000000000000028 0.7800000000000030 +75.7999999999999972 0.7900000000000033 +75.9000000000000057 0.8000000000000034 +76.0000000000000000 0.8100000000000035 +76.1000000000000085 0.8200000000000036 +76.2000000000000028 0.8300000000000040 +76.2999999999999972 0.8400000000000037 +76.4000000000000057 0.8500000000000032 +76.5000000000000000 0.8600000000000038 +76.6000000000000085 0.8700000000000043 +76.7000000000000028 0.8800000000000040 +76.8000000000000114 0.8900000000000037 +76.9000000000000057 0.9000000000000030 +77.0000000000000000 0.9000000000000030 +77.1000000000000085 0.9100000000000035 +77.2000000000000028 0.9200000000000038 +77.3000000000000114 0.9300000000000033 +77.4000000000000057 0.9400000000000032 +77.5000000000000000 0.9500000000000031 +77.6000000000000085 0.9600000000000036 +77.7000000000000028 0.9700000000000031 +77.8000000000000114 0.9800000000000028 +77.9000000000000057 0.9900000000000032 +78.0000000000000000 1.0000000000000033 +78.1000000000000085 1.0100000000000036 +78.2000000000000028 1.0200000000000029 +78.3000000000000114 1.0200000000000029 +78.4000000000000057 1.0300000000000029 +78.5000000000000000 1.0400000000000036 +78.6000000000000085 1.0500000000000036 +78.7000000000000028 1.0600000000000036 +78.8000000000000114 1.0700000000000036 +78.9000000000000057 1.0800000000000041 +79.0000000000000000 1.0900000000000034 +79.1000000000000085 1.1000000000000039 +79.2000000000000028 1.1000000000000039 +79.3000000000000114 1.1100000000000043 +79.4000000000000057 1.1200000000000045 +79.5000000000000000 1.1300000000000046 +79.6000000000000085 1.1400000000000043 +79.7000000000000028 1.1500000000000041 +79.8000000000000114 1.1500000000000041 +79.9000000000000057 1.1600000000000046 +80.0000000000000000 1.1700000000000050 +80.1000000000000085 1.1800000000000048 +80.2000000000000028 1.1800000000000048 +80.3000000000000114 1.1900000000000053 +80.4000000000000057 1.2000000000000053 +80.5000000000000000 1.2000000000000053 +80.6000000000000085 1.2100000000000051 +80.7000000000000028 1.2200000000000046 +80.8000000000000114 1.2200000000000046 +80.9000000000000057 1.2300000000000046 +81.0000000000000000 1.2300000000000046 +81.1000000000000085 1.2400000000000047 +81.2000000000000028 1.2400000000000047 +81.3000000000000114 1.2500000000000044 +81.4000000000000057 1.2500000000000044 +81.5000000000000000 1.2600000000000044 +81.6000000000000085 1.2600000000000044 +81.7000000000000028 1.2600000000000044 +81.8000000000000114 1.2700000000000047 +81.9000000000000057 1.2700000000000047 +82.0000000000000000 1.2700000000000047 +82.1000000000000085 1.2800000000000047 +82.2000000000000028 1.2800000000000047 +82.3000000000000114 1.2800000000000047 +82.4000000000000057 1.2800000000000047 +82.5000000000000000 1.2800000000000047 +82.6000000000000085 1.2800000000000047 +82.7000000000000028 1.2800000000000047 +82.8000000000000114 1.2900000000000047 +82.9000000000000057 1.2900000000000047 +83.0000000000000000 1.2900000000000047 +83.1000000000000085 1.2900000000000047 +83.2000000000000028 1.2900000000000047 +83.3000000000000114 1.2900000000000047 +83.4000000000000057 1.2800000000000045 +83.5000000000000000 1.2800000000000045 +83.6000000000000085 1.2800000000000045 +83.7000000000000028 1.2700000000000047 +83.8000000000000114 1.2700000000000047 +83.9000000000000057 1.2600000000000047 +84.0000000000000000 1.2600000000000047 +84.1000000000000085 1.2500000000000047 +84.2000000000000028 1.2500000000000047 +84.3000000000000114 1.2400000000000042 +84.4000000000000057 1.2400000000000042 +84.5000000000000000 1.2300000000000042 +84.6000000000000085 1.2200000000000040 +84.7000000000000028 1.2200000000000040 +84.8000000000000114 1.2100000000000037 +84.9000000000000057 1.2000000000000037 +85.0000000000000000 1.1900000000000042 +85.1000000000000085 1.1800000000000046 +85.2000000000000028 1.1700000000000048 +85.3000000000000114 1.1700000000000048 +85.4000000000000057 1.1600000000000046 +85.5000000000000000 1.1500000000000044 +85.6000000000000085 1.1400000000000046 +85.7000000000000028 1.1300000000000050 +85.8000000000000114 1.1100000000000045 +85.9000000000000057 1.1000000000000050 +86.0000000000000000 1.0900000000000050 +86.1000000000000085 1.0800000000000043 +86.2000000000000028 1.0700000000000045 +86.3000000000000114 1.0600000000000038 +86.4000000000000057 1.0500000000000036 +86.5000000000000000 1.0400000000000031 +86.6000000000000085 1.0300000000000036 +86.7000000000000028 1.0200000000000031 +86.8000000000000114 1.0100000000000036 +86.9000000000000057 1.0000000000000040 +87.0000000000000000 0.9900000000000034 +87.1000000000000085 0.9800000000000039 +87.2000000000000028 0.9700000000000032 +87.3000000000000114 0.9600000000000033 +87.4000000000000057 0.9500000000000035 +87.5000000000000000 0.9400000000000028 +87.6000000000000085 0.9400000000000028 +87.7000000000000028 0.9300000000000030 +87.8000000000000114 0.9200000000000026 +87.9000000000000057 0.9100000000000021 +88.0000000000000000 0.9100000000000021 +88.1000000000000085 0.9000000000000024 +88.2000000000000028 0.8900000000000026 +88.3000000000000114 0.8900000000000026 +88.4000000000000057 0.8800000000000023 +88.5000000000000000 0.8700000000000021 +88.6000000000000085 0.8700000000000021 +88.7000000000000028 0.8600000000000018 +88.8000000000000114 0.8600000000000018 +88.9000000000000057 0.8600000000000018 +89.0000000000000000 0.8500000000000016 +89.1000000000000085 0.8500000000000016 +89.2000000000000028 0.8500000000000016 +89.3000000000000114 0.8500000000000016 +89.4000000000000057 0.8400000000000016 +89.5000000000000000 0.8400000000000016 +89.6000000000000085 0.8400000000000016 +89.7000000000000028 0.8400000000000016 +89.8000000000000114 0.8400000000000016 +89.9000000000000057 0.8400000000000016 +90.0000000000000000 0.8400000000000016 +90.1000000000000085 0.8500000000000015 +90.2000000000000028 0.8500000000000015 +90.3000000000000114 0.8600000000000017 +90.4000000000000057 0.8600000000000017 +90.5000000000000000 0.8700000000000013 +90.6000000000000085 0.8700000000000013 +90.7000000000000028 0.8800000000000018 +90.8000000000000114 0.8800000000000018 +90.9000000000000057 0.8900000000000022 +91.0000000000000000 0.9000000000000018 +91.1000000000000085 0.9000000000000018 +91.2000000000000028 0.9100000000000024 +91.3000000000000114 0.9200000000000019 +91.4000000000000057 0.9200000000000019 +91.5000000000000000 0.9300000000000017 +91.6000000000000085 0.9400000000000021 +91.7000000000000028 0.9500000000000020 +91.8000000000000114 0.9600000000000017 +91.9000000000000057 0.9600000000000017 +92.0000000000000000 0.9700000000000023 +92.1000000000000085 0.9800000000000026 +92.2000000000000028 0.9900000000000030 +92.3000000000000114 1.0000000000000029 +92.4000000000000057 1.0000000000000029 +92.5000000000000000 1.0100000000000033 +92.6000000000000085 1.0200000000000036 +92.7000000000000028 1.0200000000000036 +92.8000000000000114 1.0300000000000036 +92.9000000000000057 1.0400000000000040 +93.0000000000000000 1.0500000000000036 +93.1000000000000085 1.0500000000000036 +93.2000000000000028 1.0600000000000032 +93.3000000000000114 1.0600000000000032 +93.4000000000000057 1.0700000000000036 +93.5000000000000000 1.0700000000000036 +93.6000000000000085 1.0800000000000034 +93.7000000000000028 1.0800000000000034 +93.8000000000000114 1.0900000000000036 +93.9000000000000057 1.0900000000000036 +94.0000000000000000 1.0900000000000036 +94.1000000000000085 1.0900000000000036 +94.2000000000000028 1.1000000000000036 +94.3000000000000114 1.1000000000000036 +94.4000000000000057 1.1000000000000036 +94.5000000000000000 1.1000000000000036 +94.6000000000000085 1.1000000000000036 +94.7000000000000028 1.1100000000000037 +94.8000000000000114 1.1100000000000037 +94.9000000000000057 1.1100000000000037 +95.0000000000000000 1.1100000000000037 +95.1000000000000085 1.1100000000000037 +95.2000000000000028 1.1100000000000037 +95.3000000000000114 1.1100000000000037 +95.4000000000000057 1.1100000000000037 +95.5000000000000000 1.1000000000000036 +95.6000000000000085 1.1000000000000036 +95.7000000000000028 1.1000000000000036 +95.8000000000000114 1.1000000000000036 +95.9000000000000057 1.1000000000000036 +96.0000000000000000 1.1000000000000036 +96.1000000000000085 1.0900000000000036 +96.2000000000000028 1.0900000000000036 +96.3000000000000114 1.0900000000000036 +96.4000000000000057 1.0900000000000036 +96.5000000000000000 1.0900000000000036 +96.6000000000000085 1.0900000000000036 +96.7000000000000028 1.0900000000000036 +96.8000000000000114 1.0900000000000036 +96.9000000000000057 1.0900000000000036 +97.0000000000000000 1.0900000000000036 +97.1000000000000085 1.0800000000000036 +97.2000000000000028 1.0800000000000036 +97.3000000000000114 1.0800000000000036 +97.4000000000000057 1.0800000000000036 +97.5000000000000000 1.0800000000000036 +97.6000000000000085 1.0800000000000036 +97.7000000000000028 1.0800000000000036 +97.8000000000000114 1.0800000000000036 +97.9000000000000057 1.0800000000000036 +98.0000000000000000 1.0800000000000036 +98.1000000000000085 1.0800000000000036 +98.2000000000000028 1.0800000000000036 +98.3000000000000114 1.0800000000000036 +98.4000000000000057 1.0800000000000036 +98.5000000000000000 1.0800000000000036 +98.6000000000000085 1.0800000000000036 +98.7000000000000028 1.0800000000000036 +98.8000000000000114 1.0800000000000036 +98.9000000000000057 1.0800000000000036 +99.0000000000000000 1.0800000000000036 +99.1000000000000085 1.0800000000000036 +99.2000000000000028 1.0700000000000036 +99.3000000000000114 1.0700000000000036 +99.4000000000000057 1.0700000000000036 +99.5000000000000000 1.0600000000000038 +99.6000000000000085 1.0600000000000038 +99.7000000000000028 1.0500000000000038 +99.8000000000000114 1.0500000000000038 +99.9000000000000057 1.0500000000000038 +100.0000000000000000 1.0400000000000040 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[8].dat b/src/engine/tests/system/gt_data/virus_replication/X[8].dat new file mode 100644 index 00000000..92a89d43 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[8].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0000000000000000 +1.2000000000000002 0.0000000000000000 +1.3000000000000000 0.0000000000000000 +1.4000000000000001 0.0000000000000000 +1.5000000000000000 0.0000000000000000 +1.6000000000000001 0.0000000000000000 +1.7000000000000002 0.0000000000000000 +1.8000000000000000 0.0000000000000000 +1.9000000000000001 0.0000000000000000 +2.0000000000000000 0.0000000000000000 +2.1000000000000001 0.0000000000000000 +2.2000000000000002 0.0000000000000000 +2.3000000000000003 0.0000000000000000 +2.4000000000000004 0.0000000000000000 +2.5000000000000000 0.0000000000000000 +2.6000000000000001 0.0000000000000000 +2.7000000000000002 0.0000000000000000 +2.8000000000000003 0.0000000000000000 +2.9000000000000004 0.0000000000000000 +3.0000000000000000 0.0000000000000000 +3.1000000000000001 0.0000000000000000 +3.2000000000000002 0.0000000000000000 +3.3000000000000003 0.0000000000000000 +3.4000000000000004 0.0000000000000000 +3.5000000000000000 0.0000000000000000 +3.6000000000000001 0.0000000000000000 +3.7000000000000002 0.0000000000000000 +3.8000000000000003 0.0000000000000000 +3.9000000000000004 0.0000000000000000 +4.0000000000000000 0.0000000000000000 +4.1000000000000005 0.0100000000000000 +4.2000000000000002 0.0100000000000000 +4.2999999999999998 0.0100000000000000 +4.4000000000000004 0.0100000000000000 +4.5000000000000000 0.0200000000000000 +4.6000000000000005 0.0200000000000000 +4.7000000000000002 0.0300000000000000 +4.8000000000000007 0.0300000000000000 +4.9000000000000004 0.0400000000000000 +5.0000000000000000 0.0400000000000000 +5.1000000000000005 0.0500000000000000 +5.2000000000000002 0.0500000000000000 +5.3000000000000007 0.0600000000000000 +5.4000000000000004 0.0700000000000001 +5.5000000000000000 0.0700000000000001 +5.6000000000000005 0.0800000000000001 +5.7000000000000002 0.0900000000000000 +5.8000000000000007 0.1000000000000001 +5.9000000000000004 0.1100000000000000 +6.0000000000000000 0.1100000000000000 +6.1000000000000005 0.1200000000000000 +6.2000000000000002 0.1300000000000001 +6.3000000000000007 0.1400000000000001 +6.4000000000000004 0.1600000000000001 +6.5000000000000000 0.1700000000000001 +6.6000000000000005 0.1800000000000001 +6.7000000000000002 0.1900000000000001 +6.8000000000000007 0.2000000000000001 +6.9000000000000004 0.2100000000000001 +7.0000000000000000 0.2300000000000001 +7.1000000000000005 0.2400000000000002 +7.2000000000000002 0.2500000000000002 +7.3000000000000007 0.2700000000000002 +7.4000000000000004 0.2800000000000003 +7.5000000000000000 0.2900000000000003 +7.6000000000000005 0.3100000000000003 +7.7000000000000002 0.3200000000000003 +7.8000000000000007 0.3400000000000003 +7.9000000000000004 0.3500000000000004 +8.0000000000000000 0.3700000000000004 +8.0999999999999996 0.3800000000000003 +8.2000000000000011 0.4000000000000004 +8.3000000000000007 0.4100000000000005 +8.4000000000000004 0.4200000000000006 +8.5000000000000000 0.4400000000000006 +8.5999999999999996 0.4500000000000006 +8.7000000000000011 0.4700000000000005 +8.8000000000000007 0.4800000000000005 +8.9000000000000004 0.5000000000000007 +9.0000000000000000 0.5100000000000006 +9.0999999999999996 0.5300000000000006 +9.2000000000000011 0.5400000000000007 +9.3000000000000007 0.5600000000000006 +9.4000000000000004 0.5700000000000006 +9.5000000000000000 0.5900000000000005 +9.6000000000000014 0.6000000000000005 +9.7000000000000011 0.6200000000000006 +9.8000000000000007 0.6300000000000006 +9.9000000000000004 0.6400000000000005 +10.0000000000000000 0.6600000000000004 +10.1000000000000014 0.6700000000000003 +10.2000000000000011 0.6900000000000003 +10.3000000000000007 0.7000000000000003 +10.4000000000000004 0.7100000000000003 +10.5000000000000000 0.7300000000000001 +10.6000000000000014 0.7400000000000001 +10.7000000000000011 0.7500000000000000 +10.8000000000000007 0.7700000000000001 +10.9000000000000004 0.7800000000000002 +11.0000000000000000 0.7900000000000004 +11.1000000000000014 0.8000000000000004 +11.2000000000000011 0.8200000000000004 +11.3000000000000007 0.8300000000000003 +11.4000000000000004 0.8400000000000003 +11.5000000000000000 0.8500000000000004 +11.6000000000000014 0.8600000000000005 +11.7000000000000011 0.8800000000000004 +11.8000000000000007 0.8900000000000005 +11.9000000000000004 0.9000000000000005 +12.0000000000000000 0.9100000000000006 +12.1000000000000014 0.9200000000000006 +12.2000000000000011 0.9300000000000006 +12.3000000000000007 0.9400000000000006 +12.4000000000000004 0.9500000000000006 +12.5000000000000000 0.9600000000000005 +12.6000000000000014 0.9700000000000004 +12.7000000000000011 0.9800000000000005 +12.8000000000000007 0.9900000000000005 +12.9000000000000004 1.0000000000000004 +13.0000000000000000 1.0100000000000005 +13.1000000000000014 1.0100000000000005 +13.2000000000000011 1.0200000000000005 +13.3000000000000007 1.0300000000000005 +13.4000000000000004 1.0400000000000005 +13.5000000000000000 1.0400000000000005 +13.6000000000000014 1.0500000000000005 +13.7000000000000011 1.0600000000000005 +13.8000000000000007 1.0600000000000005 +13.9000000000000004 1.0700000000000005 +14.0000000000000000 1.0800000000000005 +14.1000000000000014 1.0800000000000005 +14.2000000000000011 1.0900000000000005 +14.3000000000000007 1.0900000000000005 +14.4000000000000004 1.1000000000000005 +14.5000000000000000 1.1000000000000005 +14.6000000000000014 1.1000000000000005 +14.7000000000000011 1.1100000000000005 +14.8000000000000007 1.1100000000000005 +14.9000000000000004 1.1200000000000006 +15.0000000000000000 1.1200000000000006 +15.1000000000000014 1.1200000000000006 +15.2000000000000011 1.1200000000000006 +15.3000000000000007 1.1300000000000006 +15.4000000000000004 1.1300000000000006 +15.5000000000000000 1.1300000000000006 +15.6000000000000014 1.1300000000000006 +15.7000000000000011 1.1400000000000006 +15.8000000000000007 1.1400000000000006 +15.9000000000000004 1.1400000000000006 +16.0000000000000000 1.1400000000000006 +16.1000000000000014 1.1400000000000006 +16.1999999999999993 1.1500000000000006 +16.3000000000000007 1.1500000000000006 +16.4000000000000021 1.1500000000000006 +16.5000000000000000 1.1500000000000006 +16.6000000000000014 1.1500000000000006 +16.6999999999999993 1.1500000000000006 +16.8000000000000007 1.1500000000000006 +16.9000000000000021 1.1500000000000006 +17.0000000000000000 1.1500000000000006 +17.1000000000000014 1.1500000000000006 +17.1999999999999993 1.1600000000000006 +17.3000000000000007 1.1600000000000006 +17.4000000000000021 1.1600000000000006 +17.5000000000000000 1.1600000000000006 +17.6000000000000014 1.1600000000000006 +17.6999999999999993 1.1600000000000006 +17.8000000000000007 1.1500000000000006 +17.9000000000000021 1.1500000000000006 +18.0000000000000000 1.1500000000000006 +18.1000000000000014 1.1400000000000006 +18.1999999999999993 1.1400000000000006 +18.3000000000000007 1.1300000000000006 +18.4000000000000021 1.1300000000000006 +18.5000000000000000 1.1300000000000006 +18.6000000000000014 1.1200000000000006 +18.6999999999999993 1.1100000000000005 +18.8000000000000007 1.1100000000000005 +18.9000000000000021 1.1000000000000003 +19.0000000000000000 1.1000000000000003 +19.1000000000000014 1.0900000000000005 +19.2000000000000028 1.0800000000000005 +19.3000000000000007 1.0800000000000005 +19.4000000000000021 1.0700000000000005 +19.5000000000000000 1.0600000000000005 +19.6000000000000014 1.0500000000000005 +19.7000000000000028 1.0500000000000005 +19.8000000000000007 1.0400000000000005 +19.9000000000000021 1.0300000000000005 +20.0000000000000000 1.0200000000000005 +20.1000000000000014 1.0100000000000005 +20.2000000000000028 1.0100000000000005 +20.3000000000000007 1.0000000000000004 +20.4000000000000021 0.9900000000000005 +20.5000000000000000 0.9800000000000005 +20.6000000000000014 0.9800000000000005 +20.7000000000000028 0.9700000000000004 +20.8000000000000007 0.9600000000000003 +20.9000000000000021 0.9500000000000004 +21.0000000000000000 0.9500000000000004 +21.1000000000000014 0.9400000000000004 +21.2000000000000028 0.9400000000000004 +21.3000000000000007 0.9300000000000005 +21.4000000000000021 0.9200000000000005 +21.5000000000000000 0.9200000000000005 +21.6000000000000014 0.9100000000000004 +21.7000000000000028 0.9100000000000004 +21.8000000000000007 0.9000000000000002 +21.9000000000000021 0.9000000000000002 +22.0000000000000000 0.9000000000000002 +22.1000000000000014 0.8900000000000002 +22.2000000000000028 0.8900000000000002 +22.3000000000000007 0.8900000000000002 +22.4000000000000021 0.8800000000000002 +22.5000000000000000 0.8800000000000002 +22.6000000000000014 0.8800000000000002 +22.7000000000000028 0.8800000000000002 +22.8000000000000007 0.8800000000000002 +22.9000000000000021 0.8800000000000002 +23.0000000000000000 0.8800000000000002 +23.1000000000000014 0.8800000000000002 +23.2000000000000028 0.8800000000000002 +23.3000000000000007 0.8800000000000002 +23.4000000000000021 0.8800000000000002 +23.5000000000000000 0.8800000000000002 +23.6000000000000014 0.8800000000000002 +23.7000000000000028 0.8800000000000002 +23.8000000000000007 0.8800000000000002 +23.9000000000000021 0.8900000000000002 +24.0000000000000000 0.8900000000000002 +24.1000000000000014 0.8900000000000002 +24.2000000000000028 0.9000000000000002 +24.3000000000000007 0.9000000000000002 +24.4000000000000021 0.9000000000000002 +24.5000000000000000 0.9100000000000001 +24.6000000000000014 0.9100000000000001 +24.7000000000000028 0.9100000000000001 +24.8000000000000007 0.9200000000000002 +24.9000000000000021 0.9200000000000002 +25.0000000000000000 0.9300000000000002 +25.1000000000000014 0.9300000000000002 +25.2000000000000028 0.9300000000000002 +25.3000000000000007 0.9400000000000001 +25.4000000000000021 0.9400000000000001 +25.5000000000000000 0.9500000000000001 +25.6000000000000014 0.9500000000000001 +25.7000000000000028 0.9500000000000001 +25.8000000000000007 0.9600000000000001 +25.9000000000000021 0.9600000000000001 +26.0000000000000000 0.9700000000000001 +26.1000000000000014 0.9700000000000001 +26.2000000000000028 0.9800000000000001 +26.3000000000000007 0.9800000000000001 +26.4000000000000021 0.9800000000000001 +26.5000000000000000 0.9900000000000001 +26.6000000000000014 0.9900000000000001 +26.7000000000000028 1.0000000000000002 +26.8000000000000007 1.0000000000000002 +26.9000000000000021 1.0000000000000002 +27.0000000000000000 1.0000000000000002 +27.1000000000000014 1.0100000000000002 +27.2000000000000028 1.0100000000000002 +27.3000000000000007 1.0100000000000002 +27.4000000000000021 1.0200000000000002 +27.5000000000000000 1.0200000000000002 +27.6000000000000014 1.0200000000000002 +27.7000000000000028 1.0200000000000002 +27.8000000000000007 1.0200000000000002 +27.9000000000000021 1.0300000000000002 +28.0000000000000000 1.0300000000000002 +28.1000000000000014 1.0300000000000002 +28.2000000000000028 1.0300000000000002 +28.3000000000000007 1.0300000000000002 +28.4000000000000021 1.0300000000000002 +28.5000000000000000 1.0300000000000002 +28.6000000000000014 1.0300000000000002 +28.7000000000000028 1.0300000000000002 +28.8000000000000007 1.0200000000000002 +28.9000000000000021 1.0200000000000002 +29.0000000000000000 1.0200000000000002 +29.1000000000000014 1.0200000000000002 +29.2000000000000028 1.0100000000000002 +29.3000000000000007 1.0100000000000002 +29.4000000000000021 1.0100000000000002 +29.5000000000000000 1.0000000000000002 +29.6000000000000014 1.0000000000000002 +29.7000000000000028 1.0000000000000002 +29.8000000000000007 0.9900000000000002 +29.9000000000000021 0.9900000000000002 +30.0000000000000000 0.9900000000000002 +30.1000000000000014 0.9800000000000002 +30.2000000000000028 0.9800000000000002 +30.3000000000000007 0.9800000000000002 +30.4000000000000021 0.9700000000000002 +30.5000000000000000 0.9700000000000002 +30.6000000000000014 0.9700000000000002 +30.7000000000000028 0.9700000000000002 +30.8000000000000007 0.9600000000000002 +30.9000000000000021 0.9600000000000002 +31.0000000000000000 0.9600000000000002 +31.1000000000000014 0.9500000000000002 +31.2000000000000028 0.9500000000000002 +31.3000000000000007 0.9500000000000002 +31.4000000000000021 0.9500000000000002 +31.5000000000000000 0.9500000000000002 +31.6000000000000014 0.9400000000000002 +31.7000000000000028 0.9400000000000002 +31.8000000000000007 0.9400000000000002 +31.9000000000000021 0.9400000000000002 +32.0000000000000000 0.9400000000000002 +32.1000000000000014 0.9300000000000002 +32.2000000000000028 0.9300000000000002 +32.3000000000000043 0.9300000000000002 +32.3999999999999986 0.9300000000000002 +32.5000000000000000 0.9300000000000002 +32.6000000000000014 0.9200000000000002 +32.7000000000000028 0.9200000000000002 +32.8000000000000043 0.9200000000000002 +32.8999999999999986 0.9200000000000002 +33.0000000000000000 0.9200000000000002 +33.1000000000000014 0.9100000000000000 +33.2000000000000028 0.9100000000000000 +33.3000000000000043 0.9100000000000000 +33.3999999999999986 0.9100000000000000 +33.5000000000000000 0.9000000000000000 +33.6000000000000014 0.9000000000000000 +33.7000000000000028 0.9000000000000000 +33.8000000000000043 0.9000000000000000 +33.8999999999999986 0.8899999999999999 +34.0000000000000000 0.8899999999999999 +34.1000000000000014 0.8799999999999999 +34.2000000000000028 0.8799999999999999 +34.3000000000000043 0.8799999999999999 +34.3999999999999986 0.8699999999999998 +34.5000000000000000 0.8699999999999998 +34.6000000000000014 0.8599999999999997 +34.7000000000000028 0.8599999999999997 +34.8000000000000043 0.8599999999999997 +34.8999999999999986 0.8499999999999994 +35.0000000000000000 0.8499999999999994 +35.1000000000000014 0.8399999999999996 +35.2000000000000028 0.8399999999999996 +35.3000000000000043 0.8299999999999996 +35.3999999999999986 0.8199999999999995 +35.5000000000000000 0.8199999999999995 +35.6000000000000014 0.8099999999999994 +35.7000000000000028 0.8099999999999994 +35.8000000000000043 0.7999999999999994 +35.8999999999999986 0.7999999999999994 +36.0000000000000000 0.7899999999999993 +36.1000000000000014 0.7799999999999991 +36.2000000000000028 0.7799999999999991 +36.3000000000000043 0.7699999999999991 +36.3999999999999986 0.7599999999999993 +36.5000000000000000 0.7599999999999993 +36.6000000000000014 0.7499999999999993 +36.7000000000000028 0.7499999999999993 +36.8000000000000043 0.7399999999999993 +36.8999999999999986 0.7299999999999991 +37.0000000000000000 0.7299999999999991 +37.1000000000000014 0.7199999999999992 +37.2000000000000028 0.7199999999999992 +37.3000000000000043 0.7099999999999993 +37.3999999999999986 0.7099999999999993 +37.5000000000000000 0.6999999999999993 +37.6000000000000014 0.6999999999999993 +37.7000000000000028 0.6899999999999994 +37.8000000000000043 0.6899999999999994 +37.8999999999999986 0.6899999999999994 +38.0000000000000000 0.6799999999999995 +38.1000000000000014 0.6799999999999995 +38.2000000000000028 0.6799999999999995 +38.3000000000000043 0.6699999999999995 +38.4000000000000057 0.6699999999999995 +38.5000000000000000 0.6699999999999995 +38.6000000000000014 0.6699999999999995 +38.7000000000000028 0.6699999999999995 +38.8000000000000043 0.6699999999999995 +38.9000000000000057 0.6699999999999995 +39.0000000000000000 0.6699999999999995 +39.1000000000000014 0.6799999999999994 +39.2000000000000028 0.6799999999999994 +39.3000000000000043 0.6799999999999994 +39.4000000000000057 0.6899999999999995 +39.5000000000000000 0.6899999999999995 +39.6000000000000014 0.6999999999999995 +39.7000000000000028 0.6999999999999995 +39.8000000000000043 0.7099999999999994 +39.9000000000000057 0.7099999999999994 +40.0000000000000000 0.7199999999999994 +40.1000000000000014 0.7199999999999994 +40.2000000000000028 0.7299999999999995 +40.3000000000000043 0.7399999999999995 +40.4000000000000057 0.7399999999999995 +40.5000000000000000 0.7499999999999997 +40.6000000000000014 0.7499999999999997 +40.7000000000000028 0.7599999999999995 +40.8000000000000043 0.7699999999999994 +40.9000000000000057 0.7699999999999994 +41.0000000000000000 0.7799999999999992 +41.1000000000000014 0.7899999999999994 +41.2000000000000028 0.7899999999999994 +41.3000000000000043 0.7999999999999992 +41.4000000000000057 0.7999999999999992 +41.5000000000000000 0.8099999999999992 +41.6000000000000014 0.8099999999999992 +41.7000000000000028 0.8199999999999991 +41.8000000000000043 0.8199999999999991 +41.9000000000000057 0.8299999999999991 +42.0000000000000000 0.8299999999999991 +42.1000000000000014 0.8399999999999990 +42.2000000000000028 0.8399999999999990 +42.3000000000000043 0.8499999999999990 +42.4000000000000057 0.8499999999999990 +42.5000000000000000 0.8599999999999989 +42.6000000000000014 0.8599999999999989 +42.7000000000000028 0.8699999999999990 +42.8000000000000043 0.8699999999999990 +42.9000000000000057 0.8799999999999991 +43.0000000000000000 0.8799999999999991 +43.1000000000000014 0.8899999999999992 +43.2000000000000028 0.8899999999999992 +43.3000000000000043 0.8999999999999992 +43.4000000000000057 0.8999999999999992 +43.5000000000000000 0.9099999999999991 +43.6000000000000014 0.9099999999999991 +43.7000000000000028 0.9199999999999992 +43.8000000000000043 0.9199999999999992 +43.9000000000000057 0.9299999999999990 +44.0000000000000000 0.9299999999999990 +44.1000000000000014 0.9399999999999991 +44.2000000000000028 0.9399999999999991 +44.3000000000000043 0.9499999999999992 +44.4000000000000057 0.9499999999999992 +44.5000000000000000 0.9599999999999992 +44.6000000000000014 0.9599999999999992 +44.7000000000000028 0.9599999999999992 +44.8000000000000043 0.9699999999999991 +44.9000000000000057 0.9699999999999991 +45.0000000000000000 0.9799999999999990 +45.1000000000000014 0.9799999999999990 +45.2000000000000028 0.9899999999999990 +45.3000000000000043 0.9899999999999990 +45.4000000000000057 0.9899999999999990 +45.5000000000000000 0.9999999999999990 +45.6000000000000014 0.9999999999999990 +45.7000000000000028 1.0099999999999991 +45.8000000000000043 1.0099999999999991 +45.9000000000000057 1.0099999999999991 +46.0000000000000000 1.0199999999999991 +46.1000000000000014 1.0199999999999991 +46.2000000000000028 1.0199999999999991 +46.3000000000000043 1.0299999999999991 +46.4000000000000057 1.0299999999999991 +46.5000000000000000 1.0299999999999991 +46.6000000000000014 1.0399999999999991 +46.7000000000000028 1.0399999999999991 +46.8000000000000043 1.0399999999999991 +46.9000000000000057 1.0399999999999991 +47.0000000000000000 1.0399999999999991 +47.1000000000000014 1.0499999999999992 +47.2000000000000028 1.0499999999999992 +47.3000000000000043 1.0499999999999992 +47.4000000000000057 1.0499999999999992 +47.5000000000000000 1.0499999999999992 +47.6000000000000014 1.0499999999999992 +47.7000000000000028 1.0499999999999992 +47.8000000000000043 1.0499999999999992 +47.9000000000000057 1.0499999999999992 +48.0000000000000000 1.0499999999999992 +48.1000000000000014 1.0599999999999992 +48.2000000000000028 1.0599999999999992 +48.3000000000000043 1.0599999999999992 +48.4000000000000057 1.0599999999999992 +48.5000000000000000 1.0599999999999992 +48.6000000000000014 1.0599999999999992 +48.7000000000000028 1.0599999999999992 +48.8000000000000043 1.0599999999999992 +48.9000000000000057 1.0599999999999992 +49.0000000000000000 1.0599999999999992 +49.1000000000000014 1.0599999999999992 +49.2000000000000028 1.0599999999999992 +49.3000000000000043 1.0599999999999992 +49.4000000000000057 1.0599999999999992 +49.5000000000000000 1.0599999999999992 +49.6000000000000014 1.0599999999999992 +49.7000000000000028 1.0699999999999992 +49.8000000000000043 1.0699999999999992 +49.9000000000000057 1.0699999999999992 +50.0000000000000000 1.0699999999999992 +50.1000000000000014 1.0699999999999992 +50.2000000000000028 1.0799999999999992 +50.3000000000000043 1.0799999999999992 +50.4000000000000057 1.0799999999999992 +50.5000000000000000 1.0899999999999992 +50.6000000000000014 1.0899999999999992 +50.7000000000000028 1.0899999999999992 +50.8000000000000043 1.0999999999999992 +50.9000000000000057 1.0999999999999992 +51.0000000000000000 1.0999999999999992 +51.1000000000000014 1.1099999999999992 +51.2000000000000028 1.1099999999999992 +51.3000000000000043 1.1199999999999992 +51.4000000000000057 1.1199999999999992 +51.5000000000000000 1.1299999999999992 +51.6000000000000014 1.1299999999999992 +51.7000000000000028 1.1299999999999992 +51.8000000000000043 1.1399999999999992 +51.9000000000000057 1.1399999999999992 +52.0000000000000000 1.1499999999999992 +52.1000000000000014 1.1499999999999992 +52.2000000000000028 1.1499999999999992 +52.3000000000000043 1.1599999999999990 +52.4000000000000057 1.1599999999999990 +52.5000000000000000 1.1699999999999990 +52.6000000000000014 1.1699999999999990 +52.7000000000000028 1.1699999999999990 +52.8000000000000043 1.1799999999999990 +52.9000000000000057 1.1799999999999990 +53.0000000000000000 1.1899999999999991 +53.1000000000000014 1.1899999999999991 +53.2000000000000028 1.1899999999999991 +53.3000000000000043 1.1999999999999991 +53.4000000000000057 1.1999999999999991 +53.5000000000000000 1.1999999999999991 +53.6000000000000014 1.1999999999999991 +53.7000000000000028 1.2099999999999989 +53.8000000000000043 1.2099999999999989 +53.9000000000000057 1.2099999999999989 +54.0000000000000000 1.2199999999999989 +54.1000000000000014 1.2199999999999989 +54.2000000000000028 1.2199999999999989 +54.3000000000000043 1.2199999999999989 +54.4000000000000057 1.2299999999999989 +54.5000000000000000 1.2299999999999989 +54.6000000000000014 1.2299999999999989 +54.7000000000000028 1.2299999999999989 +54.8000000000000043 1.2299999999999989 +54.9000000000000057 1.2399999999999989 +55.0000000000000000 1.2399999999999989 +55.1000000000000014 1.2399999999999989 +55.2000000000000028 1.2399999999999989 +55.3000000000000043 1.2399999999999989 +55.4000000000000057 1.2399999999999989 +55.5000000000000000 1.2399999999999989 +55.6000000000000014 1.2399999999999989 +55.7000000000000028 1.2399999999999989 +55.8000000000000043 1.2399999999999989 +55.9000000000000057 1.2399999999999989 +56.0000000000000000 1.2399999999999989 +56.1000000000000014 1.2399999999999989 +56.2000000000000028 1.2399999999999989 +56.3000000000000043 1.2399999999999989 +56.4000000000000057 1.2399999999999989 +56.5000000000000000 1.2399999999999989 +56.6000000000000014 1.2399999999999989 +56.7000000000000028 1.2399999999999989 +56.8000000000000043 1.2299999999999986 +56.9000000000000057 1.2299999999999986 +57.0000000000000000 1.2199999999999986 +57.1000000000000014 1.2099999999999986 +57.2000000000000028 1.2099999999999986 +57.3000000000000043 1.1999999999999986 +57.4000000000000057 1.1899999999999988 +57.5000000000000000 1.1799999999999988 +57.6000000000000014 1.1799999999999988 +57.7000000000000028 1.1699999999999988 +57.8000000000000043 1.1599999999999990 +57.9000000000000057 1.1499999999999992 +58.0000000000000000 1.1399999999999990 +58.1000000000000014 1.1299999999999986 +58.2000000000000028 1.1199999999999986 +58.3000000000000043 1.1099999999999983 +58.4000000000000057 1.0999999999999983 +58.5000000000000000 1.0899999999999987 +58.6000000000000014 1.0799999999999985 +58.7000000000000028 1.0699999999999985 +58.8000000000000043 1.0599999999999983 +58.9000000000000057 1.0499999999999980 +59.0000000000000000 1.0399999999999978 +59.1000000000000014 1.0299999999999976 +59.2000000000000028 1.0199999999999978 +59.3000000000000043 1.0099999999999978 +59.4000000000000057 0.9999999999999981 +59.5000000000000000 0.9799999999999981 +59.6000000000000014 0.9699999999999983 +59.7000000000000028 0.9599999999999980 +59.8000000000000043 0.9499999999999978 +59.9000000000000057 0.9399999999999982 +60.0000000000000000 0.9299999999999978 +60.1000000000000014 0.9199999999999976 +60.2000000000000028 0.9099999999999979 +60.3000000000000043 0.8999999999999980 +60.4000000000000057 0.8899999999999979 +60.5000000000000000 0.8799999999999977 +60.6000000000000014 0.8699999999999977 +60.7000000000000028 0.8599999999999975 +60.8000000000000043 0.8499999999999979 +60.9000000000000057 0.8499999999999979 +61.0000000000000000 0.8399999999999980 +61.1000000000000014 0.8299999999999982 +61.2000000000000028 0.8199999999999981 +61.3000000000000043 0.8199999999999981 +61.4000000000000057 0.8099999999999981 +61.5000000000000000 0.7999999999999978 +61.6000000000000014 0.7999999999999978 +61.7000000000000028 0.7899999999999978 +61.8000000000000043 0.7899999999999978 +61.9000000000000057 0.7799999999999978 +62.0000000000000000 0.7799999999999978 +62.1000000000000014 0.7699999999999977 +62.2000000000000028 0.7699999999999977 +62.3000000000000043 0.7599999999999976 +62.4000000000000057 0.7599999999999976 +62.5000000000000000 0.7599999999999976 +62.6000000000000014 0.7599999999999976 +62.7000000000000028 0.7599999999999976 +62.8000000000000043 0.7499999999999976 +62.9000000000000057 0.7499999999999976 +63.0000000000000000 0.7499999999999976 +63.1000000000000014 0.7499999999999976 +63.2000000000000028 0.7499999999999976 +63.3000000000000043 0.7499999999999976 +63.4000000000000057 0.7499999999999976 +63.5000000000000000 0.7599999999999976 +63.6000000000000014 0.7599999999999976 +63.7000000000000028 0.7599999999999976 +63.8000000000000043 0.7699999999999977 +63.9000000000000057 0.7699999999999977 +64.0000000000000000 0.7799999999999977 +64.1000000000000085 0.7799999999999977 +64.2000000000000028 0.7899999999999979 +64.2999999999999972 0.7899999999999979 +64.4000000000000057 0.7899999999999979 +64.5000000000000000 0.7999999999999977 +64.6000000000000085 0.7999999999999977 +64.7000000000000028 0.8099999999999979 +64.7999999999999972 0.8099999999999979 +64.9000000000000057 0.8199999999999980 +65.0000000000000000 0.8299999999999975 +65.1000000000000085 0.8299999999999975 +65.2000000000000028 0.8399999999999975 +65.2999999999999972 0.8399999999999975 +65.4000000000000057 0.8499999999999975 +65.5000000000000000 0.8499999999999975 +65.6000000000000085 0.8499999999999975 +65.7000000000000028 0.8599999999999972 +65.7999999999999972 0.8599999999999972 +65.9000000000000057 0.8699999999999973 +66.0000000000000000 0.8699999999999973 +66.1000000000000085 0.8799999999999975 +66.2000000000000028 0.8799999999999975 +66.2999999999999972 0.8799999999999975 +66.4000000000000057 0.8899999999999977 +66.5000000000000000 0.8899999999999977 +66.6000000000000085 0.8899999999999977 +66.7000000000000028 0.8999999999999977 +66.7999999999999972 0.8999999999999977 +66.9000000000000057 0.8999999999999977 +67.0000000000000000 0.8999999999999977 +67.1000000000000085 0.9099999999999975 +67.2000000000000028 0.9099999999999975 +67.2999999999999972 0.9099999999999975 +67.4000000000000057 0.9099999999999975 +67.5000000000000000 0.9099999999999975 +67.6000000000000085 0.9199999999999974 +67.7000000000000028 0.9199999999999974 +67.7999999999999972 0.9199999999999974 +67.9000000000000057 0.9199999999999974 +68.0000000000000000 0.9199999999999974 +68.1000000000000085 0.9199999999999974 +68.2000000000000028 0.9199999999999974 +68.2999999999999972 0.9199999999999974 +68.4000000000000057 0.9199999999999974 +68.5000000000000000 0.9199999999999974 +68.6000000000000085 0.9199999999999974 +68.7000000000000028 0.9199999999999974 +68.7999999999999972 0.9199999999999974 +68.9000000000000057 0.9199999999999974 +69.0000000000000000 0.9199999999999974 +69.1000000000000085 0.9199999999999974 +69.2000000000000028 0.9199999999999974 +69.2999999999999972 0.9099999999999975 +69.4000000000000057 0.9099999999999975 +69.5000000000000000 0.9099999999999975 +69.6000000000000085 0.8999999999999971 +69.7000000000000028 0.8999999999999971 +69.7999999999999972 0.8899999999999975 +69.9000000000000057 0.8899999999999975 +70.0000000000000000 0.8799999999999972 +70.1000000000000085 0.8799999999999972 +70.2000000000000028 0.8699999999999971 +70.2999999999999972 0.8699999999999971 +70.4000000000000057 0.8599999999999970 +70.5000000000000000 0.8499999999999970 +70.6000000000000085 0.8499999999999970 +70.7000000000000028 0.8399999999999974 +70.7999999999999972 0.8299999999999975 +70.9000000000000057 0.8299999999999975 +71.0000000000000000 0.8199999999999973 +71.1000000000000085 0.8099999999999968 +71.2000000000000028 0.8099999999999968 +71.2999999999999972 0.7999999999999965 +71.4000000000000057 0.7899999999999965 +71.5000000000000000 0.7799999999999961 +71.6000000000000085 0.7799999999999961 +71.7000000000000028 0.7699999999999964 +71.7999999999999972 0.7599999999999962 +71.9000000000000057 0.7499999999999961 +72.0000000000000000 0.7499999999999961 +72.1000000000000085 0.7399999999999956 +72.2000000000000028 0.7299999999999958 +72.2999999999999972 0.7299999999999958 +72.4000000000000057 0.7199999999999953 +72.5000000000000000 0.7099999999999953 +72.6000000000000085 0.7099999999999953 +72.7000000000000028 0.6999999999999956 +72.7999999999999972 0.6899999999999955 +72.9000000000000057 0.6899999999999955 +73.0000000000000000 0.6799999999999954 +73.1000000000000085 0.6799999999999954 +73.2000000000000028 0.6699999999999950 +73.2999999999999972 0.6699999999999950 +73.4000000000000057 0.6699999999999950 +73.5000000000000000 0.6599999999999949 +73.6000000000000085 0.6599999999999949 +73.7000000000000028 0.6599999999999949 +73.7999999999999972 0.6499999999999947 +73.9000000000000057 0.6499999999999947 +74.0000000000000000 0.6499999999999947 +74.1000000000000085 0.6499999999999947 +74.2000000000000028 0.6499999999999947 +74.2999999999999972 0.6499999999999947 +74.4000000000000057 0.6499999999999947 +74.5000000000000000 0.6499999999999947 +74.6000000000000085 0.6499999999999947 +74.7000000000000028 0.6499999999999947 +74.7999999999999972 0.6599999999999946 +74.9000000000000057 0.6599999999999946 +75.0000000000000000 0.6699999999999948 +75.1000000000000085 0.6699999999999948 +75.2000000000000028 0.6799999999999948 +75.2999999999999972 0.6799999999999948 +75.4000000000000057 0.6899999999999952 +75.5000000000000000 0.6899999999999952 +75.6000000000000085 0.6999999999999948 +75.7000000000000028 0.7099999999999944 +75.7999999999999972 0.7199999999999941 +75.9000000000000057 0.7199999999999941 +76.0000000000000000 0.7299999999999945 +76.1000000000000085 0.7399999999999941 +76.2000000000000028 0.7499999999999942 +76.2999999999999972 0.7599999999999941 +76.4000000000000057 0.7599999999999941 +76.5000000000000000 0.7699999999999937 +76.6000000000000085 0.7799999999999937 +76.7000000000000028 0.7899999999999936 +76.8000000000000114 0.7999999999999939 +76.9000000000000057 0.8099999999999936 +77.0000000000000000 0.8199999999999937 +77.1000000000000085 0.8199999999999937 +77.2000000000000028 0.8299999999999939 +77.3000000000000114 0.8399999999999940 +77.4000000000000057 0.8499999999999946 +77.5000000000000000 0.8599999999999951 +77.6000000000000085 0.8699999999999951 +77.7000000000000028 0.8799999999999947 +77.8000000000000114 0.8899999999999946 +77.9000000000000057 0.8999999999999939 +78.0000000000000000 0.9099999999999943 +78.1000000000000085 0.9099999999999943 +78.2000000000000028 0.9199999999999944 +78.3000000000000114 0.9299999999999937 +78.4000000000000057 0.9399999999999933 +78.5000000000000000 0.9499999999999940 +78.6000000000000085 0.9599999999999933 +78.7000000000000028 0.9699999999999936 +78.8000000000000114 0.9799999999999942 +78.9000000000000057 0.9899999999999943 +79.0000000000000000 0.9999999999999948 +79.1000000000000085 1.0099999999999947 +79.2000000000000028 1.0099999999999947 +79.3000000000000114 1.0199999999999947 +79.4000000000000057 1.0299999999999947 +79.5000000000000000 1.0399999999999945 +79.6000000000000085 1.0499999999999938 +79.7000000000000028 1.0599999999999936 +79.8000000000000114 1.0699999999999938 +79.9000000000000057 1.0799999999999939 +80.0000000000000000 1.0799999999999939 +80.1000000000000085 1.0899999999999945 +80.2000000000000028 1.0999999999999945 +80.3000000000000114 1.1099999999999948 +80.4000000000000057 1.1199999999999950 +80.5000000000000000 1.1299999999999955 +80.6000000000000085 1.1299999999999955 +80.7000000000000028 1.1399999999999957 +80.8000000000000114 1.1499999999999959 +80.9000000000000057 1.1599999999999961 +81.0000000000000000 1.1599999999999961 +81.1000000000000085 1.1699999999999962 +81.2000000000000028 1.1799999999999959 +81.3000000000000114 1.1799999999999959 +81.4000000000000057 1.1899999999999962 +81.5000000000000000 1.1899999999999962 +81.6000000000000085 1.1999999999999960 +81.7000000000000028 1.2099999999999960 +81.8000000000000114 1.2099999999999960 +81.9000000000000057 1.2199999999999960 +82.0000000000000000 1.2199999999999960 +82.1000000000000085 1.2299999999999958 +82.2000000000000028 1.2299999999999958 +82.3000000000000114 1.2399999999999958 +82.4000000000000057 1.2399999999999958 +82.5000000000000000 1.2399999999999958 +82.6000000000000085 1.2499999999999958 +82.7000000000000028 1.2499999999999958 +82.8000000000000114 1.2499999999999958 +82.9000000000000057 1.2599999999999958 +83.0000000000000000 1.2599999999999958 +83.1000000000000085 1.2599999999999958 +83.2000000000000028 1.2699999999999956 +83.3000000000000114 1.2699999999999956 +83.4000000000000057 1.2699999999999956 +83.5000000000000000 1.2699999999999956 +83.6000000000000085 1.2699999999999956 +83.7000000000000028 1.2699999999999956 +83.8000000000000114 1.2699999999999956 +83.9000000000000057 1.2699999999999956 +84.0000000000000000 1.2699999999999956 +84.1000000000000085 1.2699999999999956 +84.2000000000000028 1.2699999999999956 +84.3000000000000114 1.2699999999999956 +84.4000000000000057 1.2699999999999956 +84.5000000000000000 1.2699999999999956 +84.6000000000000085 1.2599999999999956 +84.7000000000000028 1.2599999999999956 +84.8000000000000114 1.2599999999999956 +84.9000000000000057 1.2499999999999958 +85.0000000000000000 1.2499999999999958 +85.1000000000000085 1.2399999999999960 +85.2000000000000028 1.2299999999999962 +85.3000000000000114 1.2299999999999962 +85.4000000000000057 1.2199999999999960 +85.5000000000000000 1.2199999999999960 +85.6000000000000085 1.2099999999999957 +85.7000000000000028 1.1999999999999955 +85.8000000000000114 1.1899999999999955 +85.9000000000000057 1.1899999999999955 +86.0000000000000000 1.1799999999999959 +86.1000000000000085 1.1699999999999957 +86.2000000000000028 1.1599999999999950 +86.3000000000000114 1.1499999999999948 +86.4000000000000057 1.1399999999999946 +86.5000000000000000 1.1299999999999939 +86.6000000000000085 1.1199999999999943 +86.7000000000000028 1.1099999999999937 +86.8000000000000114 1.0999999999999930 +86.9000000000000057 1.0999999999999930 +87.0000000000000000 1.0899999999999934 +87.1000000000000085 1.0799999999999930 +87.2000000000000028 1.0699999999999934 +87.3000000000000114 1.0599999999999929 +87.4000000000000057 1.0499999999999923 +87.5000000000000000 1.0399999999999929 +87.6000000000000085 1.0299999999999929 +87.7000000000000028 1.0199999999999931 +87.8000000000000114 1.0099999999999925 +87.9000000000000057 0.9999999999999920 +88.0000000000000000 0.9899999999999919 +88.1000000000000085 0.9799999999999913 +88.2000000000000028 0.9799999999999913 +88.3000000000000114 0.9699999999999908 +88.4000000000000057 0.9599999999999912 +88.5000000000000000 0.9499999999999914 +88.6000000000000085 0.9399999999999911 +88.7000000000000028 0.9399999999999911 +88.8000000000000114 0.9299999999999914 +88.9000000000000057 0.9199999999999912 +89.0000000000000000 0.9199999999999912 +89.1000000000000085 0.9099999999999910 +89.2000000000000028 0.8999999999999908 +89.3000000000000114 0.8999999999999908 +89.4000000000000057 0.8899999999999907 +89.5000000000000000 0.8899999999999907 +89.6000000000000085 0.8799999999999906 +89.7000000000000028 0.8799999999999906 +89.8000000000000114 0.8799999999999906 +89.9000000000000057 0.8699999999999904 +90.0000000000000000 0.8699999999999904 +90.1000000000000085 0.8699999999999904 +90.2000000000000028 0.8699999999999904 +90.3000000000000114 0.8599999999999905 +90.4000000000000057 0.8599999999999905 +90.5000000000000000 0.8599999999999905 +90.6000000000000085 0.8599999999999905 +90.7000000000000028 0.8599999999999905 +90.8000000000000114 0.8599999999999905 +90.9000000000000057 0.8599999999999905 +91.0000000000000000 0.8599999999999905 +91.1000000000000085 0.8699999999999908 +91.2000000000000028 0.8699999999999908 +91.3000000000000114 0.8799999999999908 +91.4000000000000057 0.8799999999999908 +91.5000000000000000 0.8799999999999908 +91.6000000000000085 0.8899999999999907 +91.7000000000000028 0.8899999999999907 +91.8000000000000114 0.8999999999999906 +91.9000000000000057 0.9099999999999904 +92.0000000000000000 0.9099999999999904 +92.1000000000000085 0.9199999999999899 +92.2000000000000028 0.9199999999999899 +92.3000000000000114 0.9299999999999898 +92.4000000000000057 0.9399999999999895 +92.5000000000000000 0.9399999999999895 +92.6000000000000085 0.9499999999999893 +92.7000000000000028 0.9599999999999889 +92.8000000000000114 0.9599999999999889 +92.9000000000000057 0.9699999999999892 +93.0000000000000000 0.9799999999999894 +93.1000000000000085 0.9799999999999894 +93.2000000000000028 0.9899999999999896 +93.3000000000000114 0.9999999999999896 +93.4000000000000057 0.9999999999999896 +93.5000000000000000 1.0099999999999898 +93.6000000000000085 1.0199999999999902 +93.7000000000000028 1.0199999999999902 +93.8000000000000114 1.0299999999999903 +93.9000000000000057 1.0299999999999903 +94.0000000000000000 1.0399999999999905 +94.1000000000000085 1.0399999999999905 +94.2000000000000028 1.0499999999999903 +94.3000000000000114 1.0499999999999903 +94.4000000000000057 1.0599999999999903 +94.5000000000000000 1.0599999999999903 +94.6000000000000085 1.0699999999999903 +94.7000000000000028 1.0699999999999903 +94.8000000000000114 1.0699999999999903 +94.9000000000000057 1.0799999999999903 +95.0000000000000000 1.0799999999999903 +95.1000000000000085 1.0799999999999903 +95.2000000000000028 1.0899999999999903 +95.3000000000000114 1.0899999999999903 +95.4000000000000057 1.0899999999999903 +95.5000000000000000 1.0899999999999903 +95.6000000000000085 1.0899999999999903 +95.7000000000000028 1.0899999999999903 +95.8000000000000114 1.0899999999999903 +95.9000000000000057 1.0999999999999903 +96.0000000000000000 1.0999999999999903 +96.1000000000000085 1.0999999999999903 +96.2000000000000028 1.0999999999999903 +96.3000000000000114 1.0999999999999903 +96.4000000000000057 1.0999999999999903 +96.5000000000000000 1.0999999999999903 +96.6000000000000085 1.0999999999999903 +96.7000000000000028 1.0999999999999903 +96.8000000000000114 1.0999999999999903 +96.9000000000000057 1.0999999999999903 +97.0000000000000000 1.0999999999999903 +97.1000000000000085 1.0900000000000003 +97.2000000000000028 1.0900000000000003 +97.3000000000000114 1.0900000000000003 +97.4000000000000057 1.0900000000000003 +97.5000000000000000 1.0900000000000003 +97.6000000000000085 1.0900000000000003 +97.7000000000000028 1.0900000000000003 +97.8000000000000114 1.0900000000000003 +97.9000000000000057 1.0900000000000003 +98.0000000000000000 1.0900000000000003 +98.1000000000000085 1.0800000000000003 +98.2000000000000028 1.0800000000000003 +98.3000000000000114 1.0800000000000003 +98.4000000000000057 1.0800000000000003 +98.5000000000000000 1.0800000000000003 +98.6000000000000085 1.0800000000000003 +98.7000000000000028 1.0800000000000003 +98.8000000000000114 1.0800000000000003 +98.9000000000000057 1.0800000000000003 +99.0000000000000000 1.0800000000000003 +99.1000000000000085 1.0800000000000003 +99.2000000000000028 1.0800000000000003 +99.3000000000000114 1.0800000000000003 +99.4000000000000057 1.0800000000000003 +99.5000000000000000 1.0800000000000003 +99.6000000000000085 1.0800000000000003 +99.7000000000000028 1.0800000000000003 +99.8000000000000114 1.0700000000000001 +99.9000000000000057 1.0700000000000001 +100.0000000000000000 1.0700000000000001 diff --git a/src/engine/tests/system/gt_data/virus_replication/X[9].dat b/src/engine/tests/system/gt_data/virus_replication/X[9].dat new file mode 100644 index 00000000..241c3625 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/X[9].dat @@ -0,0 +1,1001 @@ +0.0000000000000000 0.0000000000000000 +0.1000000000000000 0.0000000000000000 +0.2000000000000000 0.0000000000000000 +0.3000000000000000 0.0000000000000000 +0.4000000000000000 0.0000000000000000 +0.5000000000000000 0.0000000000000000 +0.6000000000000001 0.0000000000000000 +0.7000000000000001 0.0000000000000000 +0.8000000000000000 0.0000000000000000 +0.9000000000000000 0.0000000000000000 +1.0000000000000000 0.0000000000000000 +1.1000000000000001 0.0000000000000000 +1.2000000000000002 0.0000000000000000 +1.3000000000000000 0.0000000000000000 +1.4000000000000001 0.0000000000000000 +1.5000000000000000 0.0000000000000000 +1.6000000000000001 0.0000000000000000 +1.7000000000000002 0.0000000000000000 +1.8000000000000000 0.0000000000000000 +1.9000000000000001 0.0000000000000000 +2.0000000000000000 0.0000000000000000 +2.1000000000000001 0.0000000000000000 +2.2000000000000002 0.0000000000000000 +2.3000000000000003 0.0000000000000000 +2.4000000000000004 0.0000000000000000 +2.5000000000000000 0.0000000000000000 +2.6000000000000001 0.0000000000000000 +2.7000000000000002 0.0000000000000000 +2.8000000000000003 0.0000000000000000 +2.9000000000000004 0.0000000000000000 +3.0000000000000000 0.0000000000000000 +3.1000000000000001 0.0000000000000000 +3.2000000000000002 0.0000000000000000 +3.3000000000000003 0.0000000000000000 +3.4000000000000004 0.0000000000000000 +3.5000000000000000 0.0000000000000000 +3.6000000000000001 0.0000000000000000 +3.7000000000000002 0.0000000000000000 +3.8000000000000003 0.0000000000000000 +3.9000000000000004 0.0000000000000000 +4.0000000000000000 0.0000000000000000 +4.1000000000000005 0.0000000000000000 +4.2000000000000002 0.0000000000000000 +4.2999999999999998 0.0000000000000000 +4.4000000000000004 0.0000000000000000 +4.5000000000000000 0.0000000000000000 +4.6000000000000005 0.0000000000000000 +4.7000000000000002 0.0000000000000000 +4.8000000000000007 0.0100000000000000 +4.9000000000000004 0.0100000000000000 +5.0000000000000000 0.0100000000000000 +5.1000000000000005 0.0200000000000000 +5.2000000000000002 0.0200000000000000 +5.3000000000000007 0.0200000000000000 +5.4000000000000004 0.0300000000000000 +5.5000000000000000 0.0300000000000000 +5.6000000000000005 0.0300000000000000 +5.7000000000000002 0.0400000000000000 +5.8000000000000007 0.0400000000000000 +5.9000000000000004 0.0500000000000000 +6.0000000000000000 0.0600000000000000 +6.1000000000000005 0.0600000000000000 +6.2000000000000002 0.0700000000000000 +6.3000000000000007 0.0700000000000000 +6.4000000000000004 0.0800000000000000 +6.5000000000000000 0.0900000000000000 +6.6000000000000005 0.1000000000000000 +6.7000000000000002 0.1100000000000000 +6.8000000000000007 0.1100000000000000 +6.9000000000000004 0.1200000000000000 +7.0000000000000000 0.1300000000000000 +7.1000000000000005 0.1400000000000000 +7.2000000000000002 0.1500000000000000 +7.3000000000000007 0.1600000000000000 +7.4000000000000004 0.1700000000000000 +7.5000000000000000 0.1800000000000000 +7.6000000000000005 0.2000000000000000 +7.7000000000000002 0.2100000000000001 +7.8000000000000007 0.2200000000000001 +7.9000000000000004 0.2300000000000001 +8.0000000000000000 0.2400000000000001 +8.0999999999999996 0.2500000000000001 +8.2000000000000011 0.2700000000000003 +8.3000000000000007 0.2800000000000004 +8.4000000000000004 0.2900000000000003 +8.5000000000000000 0.3100000000000003 +8.5999999999999996 0.3200000000000003 +8.7000000000000011 0.3300000000000002 +8.8000000000000007 0.3500000000000001 +8.9000000000000004 0.3600000000000000 +9.0000000000000000 0.3700000000000000 +9.0999999999999996 0.3899999999999998 +9.2000000000000011 0.3999999999999999 +9.3000000000000007 0.4199999999999998 +9.4000000000000004 0.4299999999999999 +9.5000000000000000 0.4500000000000001 +9.6000000000000014 0.4600000000000001 +9.7000000000000011 0.4700000000000002 +9.8000000000000007 0.4900000000000002 +9.9000000000000004 0.5000000000000001 +10.0000000000000000 0.5200000000000004 +10.1000000000000014 0.5300000000000005 +10.2000000000000011 0.5400000000000005 +10.3000000000000007 0.5600000000000005 +10.4000000000000004 0.5700000000000004 +10.5000000000000000 0.5900000000000003 +10.6000000000000014 0.6000000000000002 +10.7000000000000011 0.6100000000000002 +10.8000000000000007 0.6300000000000004 +10.9000000000000004 0.6400000000000003 +11.0000000000000000 0.6600000000000001 +11.1000000000000014 0.6700000000000003 +11.2000000000000011 0.6800000000000003 +11.3000000000000007 0.7000000000000002 +11.4000000000000004 0.7100000000000002 +11.5000000000000000 0.7200000000000003 +11.6000000000000014 0.7400000000000002 +11.7000000000000011 0.7500000000000001 +11.8000000000000007 0.7600000000000002 +11.9000000000000004 0.7700000000000002 +12.0000000000000000 0.7900000000000001 +12.1000000000000014 0.8000000000000002 +12.2000000000000011 0.8100000000000002 +12.3000000000000007 0.8200000000000001 +12.4000000000000004 0.8300000000000001 +12.5000000000000000 0.8500000000000003 +12.6000000000000014 0.8600000000000004 +12.7000000000000011 0.8700000000000004 +12.8000000000000007 0.8800000000000003 +12.9000000000000004 0.8900000000000003 +13.0000000000000000 0.9000000000000002 +13.1000000000000014 0.9100000000000004 +13.2000000000000011 0.9200000000000004 +13.3000000000000007 0.9300000000000004 +13.4000000000000004 0.9400000000000004 +13.5000000000000000 0.9500000000000004 +13.6000000000000014 0.9600000000000005 +13.7000000000000011 0.9700000000000005 +13.8000000000000007 0.9800000000000006 +13.9000000000000004 0.9900000000000007 +14.0000000000000000 0.9900000000000007 +14.1000000000000014 1.0000000000000007 +14.2000000000000011 1.0100000000000007 +14.3000000000000007 1.0200000000000007 +14.4000000000000004 1.0200000000000007 +14.5000000000000000 1.0300000000000007 +14.6000000000000014 1.0400000000000007 +14.7000000000000011 1.0400000000000007 +14.8000000000000007 1.0500000000000007 +14.9000000000000004 1.0600000000000007 +15.0000000000000000 1.0600000000000007 +15.1000000000000014 1.0700000000000007 +15.2000000000000011 1.0700000000000007 +15.3000000000000007 1.0800000000000007 +15.4000000000000004 1.0800000000000007 +15.5000000000000000 1.0900000000000007 +15.6000000000000014 1.0900000000000007 +15.7000000000000011 1.1000000000000008 +15.8000000000000007 1.1000000000000008 +15.9000000000000004 1.1000000000000008 +16.0000000000000000 1.1100000000000008 +16.1000000000000014 1.1100000000000008 +16.1999999999999993 1.1100000000000008 +16.3000000000000007 1.1200000000000008 +16.4000000000000021 1.1200000000000008 +16.5000000000000000 1.1200000000000008 +16.6000000000000014 1.1300000000000008 +16.6999999999999993 1.1300000000000008 +16.8000000000000007 1.1300000000000008 +16.9000000000000021 1.1300000000000008 +17.0000000000000000 1.1300000000000008 +17.1000000000000014 1.1400000000000008 +17.1999999999999993 1.1400000000000008 +17.3000000000000007 1.1400000000000008 +17.4000000000000021 1.1400000000000008 +17.5000000000000000 1.1400000000000008 +17.6000000000000014 1.1500000000000008 +17.6999999999999993 1.1500000000000008 +17.8000000000000007 1.1500000000000008 +17.9000000000000021 1.1500000000000008 +18.0000000000000000 1.1500000000000008 +18.1000000000000014 1.1500000000000008 +18.1999999999999993 1.1500000000000008 +18.3000000000000007 1.1500000000000008 +18.4000000000000021 1.1500000000000008 +18.5000000000000000 1.1500000000000008 +18.6000000000000014 1.1500000000000008 +18.6999999999999993 1.1400000000000008 +18.8000000000000007 1.1400000000000008 +18.9000000000000021 1.1400000000000008 +19.0000000000000000 1.1300000000000008 +19.1000000000000014 1.1300000000000008 +19.2000000000000028 1.1300000000000008 +19.3000000000000007 1.1200000000000008 +19.4000000000000021 1.1200000000000008 +19.5000000000000000 1.1100000000000008 +19.6000000000000014 1.1100000000000008 +19.7000000000000028 1.1000000000000008 +19.8000000000000007 1.1000000000000008 +19.9000000000000021 1.0900000000000007 +20.0000000000000000 1.0800000000000010 +20.1000000000000014 1.0800000000000010 +20.2000000000000028 1.0700000000000010 +20.3000000000000007 1.0600000000000009 +20.4000000000000021 1.0600000000000009 +20.5000000000000000 1.0500000000000009 +20.6000000000000014 1.0400000000000009 +20.7000000000000028 1.0400000000000009 +20.8000000000000007 1.0300000000000009 +20.9000000000000021 1.0200000000000011 +21.0000000000000000 1.0200000000000011 +21.1000000000000014 1.0100000000000011 +21.2000000000000028 1.0000000000000011 +21.3000000000000007 1.0000000000000011 +21.4000000000000021 0.9900000000000010 +21.5000000000000000 0.9800000000000011 +21.6000000000000014 0.9800000000000011 +21.7000000000000028 0.9700000000000012 +21.8000000000000007 0.9600000000000012 +21.9000000000000021 0.9600000000000012 +22.0000000000000000 0.9500000000000012 +22.1000000000000014 0.9500000000000012 +22.2000000000000028 0.9400000000000012 +22.3000000000000007 0.9400000000000012 +22.4000000000000021 0.9300000000000012 +22.5000000000000000 0.9300000000000012 +22.6000000000000014 0.9200000000000013 +22.7000000000000028 0.9200000000000013 +22.8000000000000007 0.9100000000000013 +22.9000000000000021 0.9100000000000013 +23.0000000000000000 0.9100000000000013 +23.1000000000000014 0.9100000000000013 +23.2000000000000028 0.9000000000000012 +23.3000000000000007 0.9000000000000012 +23.4000000000000021 0.9000000000000012 +23.5000000000000000 0.9000000000000012 +23.6000000000000014 0.9000000000000012 +23.7000000000000028 0.8900000000000012 +23.8000000000000007 0.8900000000000012 +23.9000000000000021 0.8900000000000012 +24.0000000000000000 0.8900000000000012 +24.1000000000000014 0.8900000000000012 +24.2000000000000028 0.8900000000000012 +24.3000000000000007 0.8900000000000012 +24.4000000000000021 0.8900000000000012 +24.5000000000000000 0.8900000000000012 +24.6000000000000014 0.8900000000000012 +24.7000000000000028 0.8900000000000012 +24.8000000000000007 0.8900000000000012 +24.9000000000000021 0.9000000000000012 +25.0000000000000000 0.9000000000000012 +25.1000000000000014 0.9000000000000012 +25.2000000000000028 0.9000000000000012 +25.3000000000000007 0.9100000000000013 +25.4000000000000021 0.9100000000000013 +25.5000000000000000 0.9100000000000013 +25.6000000000000014 0.9200000000000012 +25.7000000000000028 0.9200000000000012 +25.8000000000000007 0.9200000000000012 +25.9000000000000021 0.9300000000000013 +26.0000000000000000 0.9300000000000013 +26.1000000000000014 0.9300000000000013 +26.2000000000000028 0.9400000000000012 +26.3000000000000007 0.9400000000000012 +26.4000000000000021 0.9500000000000012 +26.5000000000000000 0.9500000000000012 +26.6000000000000014 0.9500000000000012 +26.7000000000000028 0.9600000000000012 +26.8000000000000007 0.9600000000000012 +26.9000000000000021 0.9600000000000012 +27.0000000000000000 0.9700000000000011 +27.1000000000000014 0.9700000000000011 +27.2000000000000028 0.9800000000000011 +27.3000000000000007 0.9800000000000011 +27.4000000000000021 0.9800000000000011 +27.5000000000000000 0.9900000000000010 +27.6000000000000014 0.9900000000000010 +27.7000000000000028 0.9900000000000010 +27.8000000000000007 0.9900000000000010 +27.9000000000000021 1.0000000000000011 +28.0000000000000000 1.0000000000000011 +28.1000000000000014 1.0000000000000011 +28.2000000000000028 1.0100000000000011 +28.3000000000000007 1.0100000000000011 +28.4000000000000021 1.0100000000000011 +28.5000000000000000 1.0100000000000011 +28.6000000000000014 1.0100000000000011 +28.7000000000000028 1.0200000000000011 +28.8000000000000007 1.0200000000000011 +28.9000000000000021 1.0200000000000011 +29.0000000000000000 1.0200000000000011 +29.1000000000000014 1.0200000000000011 +29.2000000000000028 1.0200000000000011 +29.3000000000000007 1.0200000000000011 +29.4000000000000021 1.0200000000000011 +29.5000000000000000 1.0200000000000011 +29.6000000000000014 1.0200000000000011 +29.7000000000000028 1.0200000000000011 +29.8000000000000007 1.0200000000000011 +29.9000000000000021 1.0100000000000011 +30.0000000000000000 1.0100000000000011 +30.1000000000000014 1.0100000000000011 +30.2000000000000028 1.0100000000000011 +30.3000000000000007 1.0000000000000011 +30.4000000000000021 1.0000000000000011 +30.5000000000000000 1.0000000000000011 +30.6000000000000014 1.0000000000000011 +30.7000000000000028 0.9900000000000011 +30.8000000000000007 0.9900000000000011 +30.9000000000000021 0.9900000000000011 +31.0000000000000000 0.9900000000000011 +31.1000000000000014 0.9800000000000011 +31.2000000000000028 0.9800000000000011 +31.3000000000000007 0.9800000000000011 +31.4000000000000021 0.9700000000000011 +31.5000000000000000 0.9700000000000011 +31.6000000000000014 0.9700000000000011 +31.7000000000000028 0.9700000000000011 +31.8000000000000007 0.9600000000000011 +31.9000000000000021 0.9600000000000011 +32.0000000000000000 0.9600000000000011 +32.1000000000000014 0.9600000000000011 +32.2000000000000028 0.9500000000000011 +32.3000000000000043 0.9500000000000011 +32.3999999999999986 0.9500000000000011 +32.5000000000000000 0.9500000000000011 +32.6000000000000014 0.9500000000000011 +32.7000000000000028 0.9400000000000012 +32.8000000000000043 0.9400000000000012 +32.8999999999999986 0.9400000000000012 +33.0000000000000000 0.9400000000000012 +33.1000000000000014 0.9400000000000012 +33.2000000000000028 0.9300000000000013 +33.3000000000000043 0.9300000000000013 +33.3999999999999986 0.9300000000000013 +33.5000000000000000 0.9300000000000013 +33.6000000000000014 0.9200000000000012 +33.7000000000000028 0.9200000000000012 +33.8000000000000043 0.9200000000000012 +33.8999999999999986 0.9200000000000012 +34.0000000000000000 0.9100000000000013 +34.1000000000000014 0.9100000000000013 +34.2000000000000028 0.9100000000000013 +34.3000000000000043 0.9100000000000013 +34.3999999999999986 0.9000000000000014 +34.5000000000000000 0.9000000000000014 +34.6000000000000014 0.9000000000000014 +34.7000000000000028 0.8900000000000013 +34.8000000000000043 0.8900000000000013 +34.8999999999999986 0.8900000000000013 +35.0000000000000000 0.8800000000000014 +35.1000000000000014 0.8800000000000014 +35.2000000000000028 0.8800000000000014 +35.3000000000000043 0.8700000000000014 +35.3999999999999986 0.8700000000000014 +35.5000000000000000 0.8600000000000013 +35.6000000000000014 0.8600000000000013 +35.7000000000000028 0.8500000000000013 +35.8000000000000043 0.8500000000000013 +35.8999999999999986 0.8400000000000014 +36.0000000000000000 0.8400000000000014 +36.1000000000000014 0.8300000000000013 +36.2000000000000028 0.8300000000000013 +36.3000000000000043 0.8200000000000012 +36.3999999999999986 0.8200000000000012 +36.5000000000000000 0.8100000000000012 +36.6000000000000014 0.8100000000000012 +36.7000000000000028 0.8000000000000013 +36.8000000000000043 0.8000000000000013 +36.8999999999999986 0.7900000000000013 +37.0000000000000000 0.7900000000000013 +37.1000000000000014 0.7800000000000014 +37.2000000000000028 0.7700000000000015 +37.3000000000000043 0.7700000000000015 +37.3999999999999986 0.7600000000000013 +37.5000000000000000 0.7600000000000013 +37.6000000000000014 0.7500000000000013 +37.7000000000000028 0.7500000000000013 +37.8000000000000043 0.7400000000000013 +37.8999999999999986 0.7400000000000013 +38.0000000000000000 0.7300000000000012 +38.1000000000000014 0.7300000000000012 +38.2000000000000028 0.7200000000000011 +38.3000000000000043 0.7200000000000011 +38.4000000000000057 0.7100000000000010 +38.5000000000000000 0.7100000000000010 +38.6000000000000014 0.7000000000000008 +38.7000000000000028 0.7000000000000008 +38.8000000000000043 0.7000000000000008 +38.9000000000000057 0.7000000000000008 +39.0000000000000000 0.6900000000000007 +39.1000000000000014 0.6900000000000007 +39.2000000000000028 0.6900000000000007 +39.3000000000000043 0.6900000000000007 +39.4000000000000057 0.6900000000000007 +39.5000000000000000 0.6900000000000007 +39.6000000000000014 0.6900000000000007 +39.7000000000000028 0.6900000000000007 +39.8000000000000043 0.6900000000000007 +39.9000000000000057 0.6900000000000007 +40.0000000000000000 0.6900000000000007 +40.1000000000000014 0.6900000000000007 +40.2000000000000028 0.6900000000000007 +40.3000000000000043 0.7000000000000006 +40.4000000000000057 0.7000000000000006 +40.5000000000000000 0.7100000000000007 +40.6000000000000014 0.7100000000000007 +40.7000000000000028 0.7100000000000007 +40.8000000000000043 0.7200000000000009 +40.9000000000000057 0.7200000000000009 +41.0000000000000000 0.7300000000000010 +41.1000000000000014 0.7300000000000010 +41.2000000000000028 0.7400000000000011 +41.3000000000000043 0.7400000000000011 +41.4000000000000057 0.7500000000000011 +41.5000000000000000 0.7600000000000012 +41.6000000000000014 0.7600000000000012 +41.7000000000000028 0.7700000000000014 +41.8000000000000043 0.7700000000000014 +41.9000000000000057 0.7800000000000015 +42.0000000000000000 0.7800000000000015 +42.1000000000000014 0.7900000000000016 +42.2000000000000028 0.7900000000000016 +42.3000000000000043 0.8000000000000018 +42.4000000000000057 0.8000000000000018 +42.5000000000000000 0.8100000000000017 +42.6000000000000014 0.8100000000000017 +42.7000000000000028 0.8200000000000017 +42.8000000000000043 0.8200000000000017 +42.9000000000000057 0.8300000000000016 +43.0000000000000000 0.8300000000000016 +43.1000000000000014 0.8400000000000016 +43.2000000000000028 0.8400000000000016 +43.3000000000000043 0.8500000000000014 +43.4000000000000057 0.8500000000000014 +43.5000000000000000 0.8600000000000013 +43.6000000000000014 0.8600000000000013 +43.7000000000000028 0.8700000000000013 +43.8000000000000043 0.8700000000000013 +43.9000000000000057 0.8800000000000013 +44.0000000000000000 0.8800000000000013 +44.1000000000000014 0.8900000000000015 +44.2000000000000028 0.8900000000000015 +44.3000000000000043 0.9000000000000014 +44.4000000000000057 0.9000000000000014 +44.5000000000000000 0.9100000000000015 +44.6000000000000014 0.9100000000000015 +44.7000000000000028 0.9200000000000016 +44.8000000000000043 0.9200000000000016 +44.9000000000000057 0.9300000000000015 +45.0000000000000000 0.9300000000000015 +45.1000000000000014 0.9400000000000016 +45.2000000000000028 0.9400000000000016 +45.3000000000000043 0.9400000000000016 +45.4000000000000057 0.9500000000000016 +45.5000000000000000 0.9500000000000016 +45.6000000000000014 0.9600000000000017 +45.7000000000000028 0.9600000000000017 +45.8000000000000043 0.9700000000000016 +45.9000000000000057 0.9700000000000016 +46.0000000000000000 0.9800000000000018 +46.1000000000000014 0.9800000000000018 +46.2000000000000028 0.9800000000000018 +46.3000000000000043 0.9900000000000017 +46.4000000000000057 0.9900000000000017 +46.5000000000000000 1.0000000000000018 +46.6000000000000014 1.0000000000000018 +46.7000000000000028 1.0000000000000018 +46.8000000000000043 1.0100000000000018 +46.9000000000000057 1.0100000000000018 +47.0000000000000000 1.0100000000000018 +47.1000000000000014 1.0200000000000018 +47.2000000000000028 1.0200000000000018 +47.3000000000000043 1.0200000000000018 +47.4000000000000057 1.0200000000000018 +47.5000000000000000 1.0300000000000018 +47.6000000000000014 1.0300000000000018 +47.7000000000000028 1.0300000000000018 +47.8000000000000043 1.0300000000000018 +47.9000000000000057 1.0300000000000018 +48.0000000000000000 1.0400000000000018 +48.1000000000000014 1.0400000000000018 +48.2000000000000028 1.0400000000000018 +48.3000000000000043 1.0400000000000018 +48.4000000000000057 1.0400000000000018 +48.5000000000000000 1.0400000000000018 +48.6000000000000014 1.0500000000000018 +48.7000000000000028 1.0500000000000018 +48.8000000000000043 1.0500000000000018 +48.9000000000000057 1.0500000000000018 +49.0000000000000000 1.0500000000000018 +49.1000000000000014 1.0500000000000018 +49.2000000000000028 1.0500000000000018 +49.3000000000000043 1.0500000000000018 +49.4000000000000057 1.0500000000000018 +49.5000000000000000 1.0500000000000018 +49.6000000000000014 1.0600000000000018 +49.7000000000000028 1.0600000000000018 +49.8000000000000043 1.0600000000000018 +49.9000000000000057 1.0600000000000018 +50.0000000000000000 1.0600000000000018 +50.1000000000000014 1.0600000000000018 +50.2000000000000028 1.0600000000000018 +50.3000000000000043 1.0600000000000018 +50.4000000000000057 1.0700000000000018 +50.5000000000000000 1.0700000000000018 +50.6000000000000014 1.0700000000000018 +50.7000000000000028 1.0700000000000018 +50.8000000000000043 1.0700000000000018 +50.9000000000000057 1.0800000000000018 +51.0000000000000000 1.0800000000000018 +51.1000000000000014 1.0800000000000018 +51.2000000000000028 1.0800000000000018 +51.3000000000000043 1.0900000000000019 +51.4000000000000057 1.0900000000000019 +51.5000000000000000 1.0900000000000019 +51.6000000000000014 1.1000000000000019 +51.7000000000000028 1.1000000000000019 +51.8000000000000043 1.1000000000000019 +51.9000000000000057 1.1100000000000019 +52.0000000000000000 1.1100000000000019 +52.1000000000000014 1.1100000000000019 +52.2000000000000028 1.1200000000000019 +52.3000000000000043 1.1200000000000019 +52.4000000000000057 1.1200000000000019 +52.5000000000000000 1.1300000000000019 +52.6000000000000014 1.1300000000000019 +52.7000000000000028 1.1400000000000021 +52.8000000000000043 1.1400000000000021 +52.9000000000000057 1.1400000000000021 +53.0000000000000000 1.1500000000000021 +53.1000000000000014 1.1500000000000021 +53.2000000000000028 1.1600000000000024 +53.3000000000000043 1.1600000000000024 +53.4000000000000057 1.1600000000000024 +53.5000000000000000 1.1700000000000024 +53.6000000000000014 1.1700000000000024 +53.7000000000000028 1.1700000000000024 +53.8000000000000043 1.1800000000000024 +53.9000000000000057 1.1800000000000024 +54.0000000000000000 1.1800000000000024 +54.1000000000000014 1.1900000000000024 +54.2000000000000028 1.1900000000000024 +54.3000000000000043 1.1900000000000024 +54.4000000000000057 1.2000000000000022 +54.5000000000000000 1.2000000000000022 +54.6000000000000014 1.2000000000000022 +54.7000000000000028 1.2000000000000022 +54.8000000000000043 1.2100000000000022 +54.9000000000000057 1.2100000000000022 +55.0000000000000000 1.2100000000000022 +55.1000000000000014 1.2200000000000022 +55.2000000000000028 1.2200000000000022 +55.3000000000000043 1.2200000000000022 +55.4000000000000057 1.2200000000000022 +55.5000000000000000 1.2200000000000022 +55.6000000000000014 1.2300000000000022 +55.7000000000000028 1.2300000000000022 +55.8000000000000043 1.2300000000000022 +55.9000000000000057 1.2300000000000022 +56.0000000000000000 1.2300000000000022 +56.1000000000000014 1.2300000000000022 +56.2000000000000028 1.2300000000000022 +56.3000000000000043 1.2300000000000022 +56.4000000000000057 1.2300000000000022 +56.5000000000000000 1.2300000000000022 +56.6000000000000014 1.2400000000000022 +56.7000000000000028 1.2400000000000022 +56.8000000000000043 1.2400000000000022 +56.9000000000000057 1.2400000000000022 +57.0000000000000000 1.2400000000000022 +57.1000000000000014 1.2400000000000022 +57.2000000000000028 1.2400000000000022 +57.3000000000000043 1.2300000000000022 +57.4000000000000057 1.2300000000000022 +57.5000000000000000 1.2300000000000022 +57.6000000000000014 1.2200000000000022 +57.7000000000000028 1.2200000000000022 +57.8000000000000043 1.2100000000000022 +57.9000000000000057 1.2100000000000022 +58.0000000000000000 1.2000000000000024 +58.1000000000000014 1.1900000000000022 +58.2000000000000028 1.1900000000000022 +58.3000000000000043 1.1800000000000024 +58.4000000000000057 1.1700000000000024 +58.5000000000000000 1.1700000000000024 +58.6000000000000014 1.1600000000000026 +58.7000000000000028 1.1500000000000026 +58.8000000000000043 1.1400000000000026 +58.9000000000000057 1.1300000000000023 +59.0000000000000000 1.1300000000000023 +59.1000000000000014 1.1200000000000023 +59.2000000000000028 1.1100000000000021 +59.3000000000000043 1.1000000000000019 +59.4000000000000057 1.0900000000000019 +59.5000000000000000 1.0800000000000016 +59.6000000000000014 1.0700000000000016 +59.7000000000000028 1.0600000000000021 +59.8000000000000043 1.0500000000000018 +59.9000000000000057 1.0400000000000016 +60.0000000000000000 1.0300000000000014 +60.1000000000000014 1.0200000000000018 +60.2000000000000028 1.0100000000000018 +60.3000000000000043 1.0000000000000018 +60.4000000000000057 0.9900000000000015 +60.5000000000000000 0.9800000000000018 +60.6000000000000014 0.9700000000000021 +60.7000000000000028 0.9600000000000024 +60.8000000000000043 0.9500000000000021 +60.9000000000000057 0.9400000000000018 +61.0000000000000000 0.9300000000000020 +61.1000000000000014 0.9200000000000024 +61.2000000000000028 0.9100000000000020 +61.3000000000000043 0.9000000000000019 +61.4000000000000057 0.9000000000000019 +61.5000000000000000 0.8900000000000022 +61.6000000000000014 0.8800000000000026 +61.7000000000000028 0.8700000000000029 +61.8000000000000043 0.8600000000000028 +61.9000000000000057 0.8600000000000028 +62.0000000000000000 0.8500000000000029 +62.1000000000000014 0.8400000000000031 +62.2000000000000028 0.8300000000000031 +62.3000000000000043 0.8300000000000031 +62.4000000000000057 0.8200000000000033 +62.5000000000000000 0.8200000000000033 +62.6000000000000014 0.8100000000000033 +62.7000000000000028 0.8100000000000033 +62.8000000000000043 0.8000000000000034 +62.9000000000000057 0.8000000000000034 +63.0000000000000000 0.7900000000000036 +63.1000000000000014 0.7900000000000036 +63.2000000000000028 0.7800000000000035 +63.3000000000000043 0.7800000000000035 +63.4000000000000057 0.7800000000000035 +63.5000000000000000 0.7800000000000035 +63.6000000000000014 0.7700000000000036 +63.7000000000000028 0.7700000000000036 +63.8000000000000043 0.7700000000000036 +63.9000000000000057 0.7700000000000036 +64.0000000000000000 0.7700000000000036 +64.1000000000000085 0.7700000000000036 +64.2000000000000028 0.7700000000000036 +64.2999999999999972 0.7700000000000036 +64.4000000000000057 0.7700000000000036 +64.5000000000000000 0.7700000000000036 +64.6000000000000085 0.7800000000000035 +64.7000000000000028 0.7800000000000035 +64.7999999999999972 0.7800000000000035 +64.9000000000000057 0.7900000000000037 +65.0000000000000000 0.7900000000000037 +65.1000000000000085 0.7900000000000037 +65.2000000000000028 0.8000000000000039 +65.2999999999999972 0.8000000000000039 +65.4000000000000057 0.8000000000000039 +65.5000000000000000 0.8100000000000038 +65.6000000000000085 0.8100000000000038 +65.7000000000000028 0.8200000000000039 +65.7999999999999972 0.8200000000000039 +65.9000000000000057 0.8300000000000040 +66.0000000000000000 0.8300000000000040 +66.1000000000000085 0.8300000000000040 +66.2000000000000028 0.8400000000000036 +66.2999999999999972 0.8400000000000036 +66.4000000000000057 0.8500000000000036 +66.5000000000000000 0.8500000000000036 +66.6000000000000085 0.8500000000000036 +66.7000000000000028 0.8600000000000039 +66.7999999999999972 0.8600000000000039 +66.9000000000000057 0.8700000000000040 +67.0000000000000000 0.8700000000000040 +67.1000000000000085 0.8700000000000040 +67.2000000000000028 0.8800000000000038 +67.2999999999999972 0.8800000000000038 +67.4000000000000057 0.8800000000000038 +67.5000000000000000 0.8900000000000037 +67.6000000000000085 0.8900000000000037 +67.7000000000000028 0.8900000000000037 +67.7999999999999972 0.8900000000000037 +67.9000000000000057 0.9000000000000038 +68.0000000000000000 0.9000000000000038 +68.1000000000000085 0.9000000000000038 +68.2000000000000028 0.9000000000000038 +68.2999999999999972 0.9000000000000038 +68.4000000000000057 0.9100000000000037 +68.5000000000000000 0.9100000000000037 +68.6000000000000085 0.9100000000000037 +68.7000000000000028 0.9100000000000037 +68.7999999999999972 0.9100000000000037 +68.9000000000000057 0.9100000000000037 +69.0000000000000000 0.9100000000000037 +69.1000000000000085 0.9100000000000037 +69.2000000000000028 0.9100000000000037 +69.2999999999999972 0.9100000000000037 +69.4000000000000057 0.9100000000000037 +69.5000000000000000 0.9100000000000037 +69.6000000000000085 0.9100000000000037 +69.7000000000000028 0.9100000000000037 +69.7999999999999972 0.9100000000000037 +69.9000000000000057 0.9100000000000037 +70.0000000000000000 0.9100000000000037 +70.1000000000000085 0.9100000000000037 +70.2000000000000028 0.9100000000000037 +70.2999999999999972 0.9100000000000037 +70.4000000000000057 0.9000000000000036 +70.5000000000000000 0.9000000000000036 +70.6000000000000085 0.8900000000000036 +70.7000000000000028 0.8900000000000036 +70.7999999999999972 0.8800000000000036 +70.9000000000000057 0.8800000000000036 +71.0000000000000000 0.8700000000000035 +71.1000000000000085 0.8700000000000035 +71.2000000000000028 0.8600000000000034 +71.2999999999999972 0.8600000000000034 +71.4000000000000057 0.8500000000000039 +71.5000000000000000 0.8400000000000041 +71.6000000000000085 0.8400000000000041 +71.7000000000000028 0.8300000000000040 +71.7999999999999972 0.8300000000000040 +71.9000000000000057 0.8200000000000042 +72.0000000000000000 0.8100000000000044 +72.1000000000000085 0.8100000000000044 +72.2000000000000028 0.8000000000000044 +72.2999999999999972 0.7900000000000045 +72.4000000000000057 0.7900000000000045 +72.5000000000000000 0.7800000000000045 +72.6000000000000085 0.7700000000000040 +72.7000000000000028 0.7700000000000040 +72.7999999999999972 0.7600000000000041 +72.9000000000000057 0.7500000000000046 +73.0000000000000000 0.7500000000000046 +73.1000000000000085 0.7400000000000044 +73.2000000000000028 0.7300000000000044 +73.2999999999999972 0.7300000000000044 +73.4000000000000057 0.7200000000000043 +73.5000000000000000 0.7200000000000043 +73.6000000000000085 0.7100000000000042 +73.7000000000000028 0.7100000000000042 +73.7999999999999972 0.7000000000000043 +73.9000000000000057 0.7000000000000043 +74.0000000000000000 0.6900000000000042 +74.1000000000000085 0.6900000000000042 +74.2000000000000028 0.6800000000000040 +74.2999999999999972 0.6800000000000040 +74.4000000000000057 0.6800000000000040 +74.5000000000000000 0.6800000000000040 +74.6000000000000085 0.6700000000000040 +74.7000000000000028 0.6700000000000040 +74.7999999999999972 0.6700000000000040 +74.9000000000000057 0.6700000000000040 +75.0000000000000000 0.6700000000000040 +75.1000000000000085 0.6700000000000040 +75.2000000000000028 0.6700000000000040 +75.2999999999999972 0.6700000000000040 +75.4000000000000057 0.6700000000000040 +75.5000000000000000 0.6700000000000040 +75.6000000000000085 0.6700000000000040 +75.7000000000000028 0.6700000000000040 +75.7999999999999972 0.6700000000000040 +75.9000000000000057 0.6800000000000040 +76.0000000000000000 0.6800000000000040 +76.1000000000000085 0.6900000000000039 +76.2000000000000028 0.6900000000000039 +76.2999999999999972 0.7000000000000044 +76.4000000000000057 0.7000000000000044 +76.5000000000000000 0.7100000000000043 +76.6000000000000085 0.7200000000000040 +76.7000000000000028 0.7200000000000040 +76.8000000000000114 0.7300000000000036 +76.9000000000000057 0.7400000000000032 +77.0000000000000000 0.7400000000000032 +77.1000000000000085 0.7500000000000030 +77.2000000000000028 0.7600000000000032 +77.3000000000000114 0.7700000000000030 +77.4000000000000057 0.7700000000000030 +77.5000000000000000 0.7800000000000032 +77.6000000000000085 0.7900000000000033 +77.7000000000000028 0.8000000000000037 +77.8000000000000114 0.8100000000000044 +77.9000000000000057 0.8100000000000044 +78.0000000000000000 0.8200000000000043 +78.1000000000000085 0.8300000000000043 +78.2000000000000028 0.8400000000000044 +78.3000000000000114 0.8500000000000038 +78.4000000000000057 0.8600000000000041 +78.5000000000000000 0.8600000000000041 +78.6000000000000085 0.8700000000000037 +78.7000000000000028 0.8800000000000031 +78.8000000000000114 0.8900000000000030 +78.9000000000000057 0.9000000000000031 +79.0000000000000000 0.9100000000000034 +79.1000000000000085 0.9200000000000029 +79.2000000000000028 0.9300000000000033 +79.3000000000000114 0.9400000000000036 +79.4000000000000057 0.9400000000000036 +79.5000000000000000 0.9500000000000031 +79.6000000000000085 0.9600000000000025 +79.7000000000000028 0.9700000000000030 +79.8000000000000114 0.9800000000000031 +79.9000000000000057 0.9900000000000028 +80.0000000000000000 1.0000000000000022 +80.1000000000000085 1.0100000000000025 +80.2000000000000028 1.0100000000000025 +80.3000000000000114 1.0200000000000029 +80.4000000000000057 1.0300000000000027 +80.5000000000000000 1.0400000000000027 +80.6000000000000085 1.0500000000000029 +80.7000000000000028 1.0600000000000032 +80.8000000000000114 1.0700000000000032 +80.9000000000000057 1.0700000000000032 +81.0000000000000000 1.0800000000000027 +81.1000000000000085 1.0900000000000034 +81.2000000000000028 1.1000000000000036 +81.3000000000000114 1.1100000000000034 +81.4000000000000057 1.1100000000000034 +81.5000000000000000 1.1200000000000039 +81.6000000000000085 1.1300000000000041 +81.7000000000000028 1.1400000000000039 +81.8000000000000114 1.1400000000000039 +81.9000000000000057 1.1500000000000035 +82.0000000000000000 1.1600000000000030 +82.1000000000000085 1.1600000000000030 +82.2000000000000028 1.1700000000000028 +82.3000000000000114 1.1800000000000024 +82.4000000000000057 1.1800000000000024 +82.5000000000000000 1.1900000000000024 +82.6000000000000085 1.1900000000000024 +82.7000000000000028 1.2000000000000026 +82.8000000000000114 1.2000000000000026 +82.9000000000000057 1.2100000000000029 +83.0000000000000000 1.2100000000000029 +83.1000000000000085 1.2200000000000031 +83.2000000000000028 1.2200000000000031 +83.3000000000000114 1.2300000000000033 +83.4000000000000057 1.2300000000000033 +83.5000000000000000 1.2300000000000033 +83.6000000000000085 1.2400000000000031 +83.7000000000000028 1.2400000000000031 +83.8000000000000114 1.2400000000000031 +83.9000000000000057 1.2500000000000031 +84.0000000000000000 1.2500000000000031 +84.1000000000000085 1.2500000000000031 +84.2000000000000028 1.2500000000000031 +84.3000000000000114 1.2500000000000031 +84.4000000000000057 1.2600000000000031 +84.5000000000000000 1.2600000000000031 +84.6000000000000085 1.2600000000000031 +84.7000000000000028 1.2600000000000031 +84.8000000000000114 1.2600000000000031 +84.9000000000000057 1.2600000000000031 +85.0000000000000000 1.2600000000000031 +85.1000000000000085 1.2600000000000031 +85.2000000000000028 1.2600000000000031 +85.3000000000000114 1.2600000000000031 +85.4000000000000057 1.2600000000000031 +85.5000000000000000 1.2500000000000033 +85.6000000000000085 1.2500000000000033 +85.7000000000000028 1.2400000000000033 +85.8000000000000114 1.2400000000000033 +85.9000000000000057 1.2300000000000033 +86.0000000000000000 1.2300000000000033 +86.1000000000000085 1.2200000000000031 +86.2000000000000028 1.2200000000000031 +86.3000000000000114 1.2100000000000031 +86.4000000000000057 1.2100000000000031 +86.5000000000000000 1.2000000000000033 +86.6000000000000085 1.1900000000000033 +86.7000000000000028 1.1900000000000033 +86.8000000000000114 1.1800000000000030 +86.9000000000000057 1.1700000000000028 +87.0000000000000000 1.1600000000000035 +87.1000000000000085 1.1600000000000035 +87.2000000000000028 1.1500000000000030 +87.3000000000000114 1.1400000000000030 +87.4000000000000057 1.1300000000000028 +87.5000000000000000 1.1200000000000030 +87.6000000000000085 1.1100000000000034 +87.7000000000000028 1.1100000000000034 +87.8000000000000114 1.1000000000000034 +87.9000000000000057 1.0900000000000036 +88.0000000000000000 1.0800000000000038 +88.1000000000000085 1.0700000000000034 +88.2000000000000028 1.0600000000000034 +88.3000000000000114 1.0500000000000040 +88.4000000000000057 1.0500000000000040 +88.5000000000000000 1.0400000000000036 +88.6000000000000085 1.0300000000000038 +88.7000000000000028 1.0200000000000036 +88.8000000000000114 1.0100000000000036 +88.9000000000000057 1.0000000000000036 +89.0000000000000000 1.0000000000000036 +89.1000000000000085 0.9900000000000031 +89.2000000000000028 0.9800000000000030 +89.3000000000000114 0.9700000000000033 +89.4000000000000057 0.9700000000000033 +89.5000000000000000 0.9600000000000033 +89.6000000000000085 0.9500000000000037 +89.7000000000000028 0.9400000000000033 +89.8000000000000114 0.9400000000000033 +89.9000000000000057 0.9300000000000037 +90.0000000000000000 0.9300000000000037 +90.1000000000000085 0.9200000000000038 +90.2000000000000028 0.9200000000000038 +90.3000000000000114 0.9100000000000038 +90.4000000000000057 0.9100000000000038 +90.5000000000000000 0.9000000000000037 +90.6000000000000085 0.9000000000000037 +90.7000000000000028 0.8900000000000038 +90.8000000000000114 0.8900000000000038 +90.9000000000000057 0.8900000000000038 +91.0000000000000000 0.8900000000000038 +91.1000000000000085 0.8800000000000038 +91.2000000000000028 0.8800000000000038 +91.3000000000000114 0.8800000000000038 +91.4000000000000057 0.8800000000000038 +91.5000000000000000 0.8800000000000038 +91.6000000000000085 0.8800000000000038 +91.7000000000000028 0.8800000000000038 +91.8000000000000114 0.8800000000000038 +91.9000000000000057 0.8800000000000038 +92.0000000000000000 0.8800000000000038 +92.1000000000000085 0.8800000000000038 +92.2000000000000028 0.8900000000000035 +92.3000000000000114 0.8900000000000035 +92.4000000000000057 0.9000000000000034 +92.5000000000000000 0.9000000000000034 +92.6000000000000085 0.9000000000000034 +92.7000000000000028 0.9100000000000034 +92.8000000000000114 0.9100000000000034 +92.9000000000000057 0.9200000000000029 +93.0000000000000000 0.9200000000000029 +93.1000000000000085 0.9300000000000027 +93.2000000000000028 0.9400000000000029 +93.3000000000000114 0.9400000000000029 +93.4000000000000057 0.9500000000000032 +93.5000000000000000 0.9500000000000032 +93.6000000000000085 0.9600000000000035 +93.7000000000000028 0.9600000000000035 +93.8000000000000114 0.9700000000000037 +93.9000000000000057 0.9800000000000039 +94.0000000000000000 0.9800000000000039 +94.1000000000000085 0.9900000000000035 +94.2000000000000028 0.9900000000000035 +94.3000000000000114 1.0000000000000040 +94.4000000000000057 1.0000000000000040 +94.5000000000000000 1.0100000000000036 +94.6000000000000085 1.0100000000000036 +94.7000000000000028 1.0200000000000036 +94.8000000000000114 1.0200000000000036 +94.9000000000000057 1.0300000000000038 +95.0000000000000000 1.0300000000000038 +95.1000000000000085 1.0400000000000034 +95.2000000000000028 1.0400000000000034 +95.3000000000000114 1.0500000000000036 +95.4000000000000057 1.0500000000000036 +95.5000000000000000 1.0600000000000036 +95.6000000000000085 1.0600000000000036 +95.7000000000000028 1.0600000000000036 +95.8000000000000114 1.0600000000000036 +95.9000000000000057 1.0700000000000036 +96.0000000000000000 1.0700000000000036 +96.1000000000000085 1.0700000000000036 +96.2000000000000028 1.0800000000000038 +96.3000000000000114 1.0800000000000038 +96.4000000000000057 1.0800000000000038 +96.5000000000000000 1.0800000000000038 +96.6000000000000085 1.0800000000000038 +96.7000000000000028 1.0900000000000039 +96.8000000000000114 1.0900000000000039 +96.9000000000000057 1.0900000000000039 +97.0000000000000000 1.0900000000000039 +97.1000000000000085 1.0900000000000039 +97.2000000000000028 1.0900000000000039 +97.3000000000000114 1.0900000000000039 +97.4000000000000057 1.0900000000000039 +97.5000000000000000 1.0900000000000039 +97.6000000000000085 1.0900000000000039 +97.7000000000000028 1.0900000000000039 +97.8000000000000114 1.0900000000000039 +97.9000000000000057 1.0900000000000039 +98.0000000000000000 1.0900000000000039 +98.1000000000000085 1.0900000000000039 +98.2000000000000028 1.0900000000000039 +98.3000000000000114 1.0900000000000039 +98.4000000000000057 1.0900000000000039 +98.5000000000000000 1.0900000000000039 +98.6000000000000085 1.0900000000000039 +98.7000000000000028 1.0900000000000039 +98.8000000000000114 1.0900000000000039 +98.9000000000000057 1.0900000000000039 +99.0000000000000000 1.0900000000000039 +99.1000000000000085 1.0900000000000039 +99.2000000000000028 1.0900000000000039 +99.3000000000000114 1.0900000000000039 +99.4000000000000057 1.0800000000000038 +99.5000000000000000 1.0800000000000038 +99.6000000000000085 1.0800000000000038 +99.7000000000000028 1.0800000000000038 +99.8000000000000114 1.0800000000000038 +99.9000000000000057 1.0800000000000038 +100.0000000000000000 1.0800000000000038 diff --git a/src/engine/tests/system/gt_data/virus_replication/virus_replication.mo b/src/engine/tests/system/gt_data/virus_replication/virus_replication.mo new file mode 100644 index 00000000..eedbd0c7 --- /dev/null +++ b/src/engine/tests/system/gt_data/virus_replication/virus_replication.mo @@ -0,0 +1,66 @@ +model virus_replication + import math; + constant Integer N=10; +constant Integer M=10000; //number of samples +constant Integer SizeW=10000001; + Real I(start=0), X[N]; // random input , concentration of material in compartment i + parameter Real mu=1, sigma=0.5, omega=1; // mean, noise magnitude , reversion strength of the Ornstein-Uhlenbeck process +parameter Real tf=100; +parameter Real k=1; +parameter Real h(fixed=false); //progression rate of material from one compartment to the nex + discrete Real dW; +parameter Real W[SizeW](each fixed=false); +parameter Real dWval[M](each fixed=false); +parameter Real TEvent[M]; +parameter Integer di=SizeW/M; +parameter Real hmin(fixed=false); + +initial algorithm +h:=tf/M; +hmin:=tf/SizeW; +W[1]:=normal(1); +for i in 2:SizeW loop + W[i]:=W[i-1]+normal(1)*sqrt(hmin); //generate wiener process samples with dt=1e-4 +end for; +for i in 1:M loop + dWval[i]:=W[i*di+1]-W[(i-1)*di+1]; //compute the random increments + TEvent[i]:=i*h; + end for; +dW:=dWval[1]; + +equation + +der(I)=-omega*(I-mu)+sigma*dW/h; +der(X[1]) =I-k*X[1]; + +for i in 2:N loop + der(X[i])=k*X[i-1] - k*X[i]; +end for; + +algorithm + +for i in 1:M loop + when time>TEvent[i]-h then + dW:=dWval[i]; + end when; +end for; + annotation( + + experiment( + MMO_Description="", + MMO_Solver=QSS, + MMO_SymDiff=false, + MMO_Period={100/1000}, + MMO_PartitionMethod=Metis, + MMO_Output={X}, + MMO_OutputType=CI_Sampled, + Jacobian=Dense, + MMO_BDF_PDepth=1, + MMO_BDF_Max_Step=0, + MMO_RandomSeed=1, + StartTime=0.0, + StopTime=100, + Tolerance={0}, + AbsTolerance={1e-2} + )); +end virus_replication; diff --git a/src/engine/tests/system/models_test.cpp b/src/engine/tests/system/models_test.cpp index 5d8eeaec..65e318e5 100644 --- a/src/engine/tests/system/models_test.cpp +++ b/src/engine/tests/system/models_test.cpp @@ -62,10 +62,12 @@ const char* models[] = {"acousticsBase", "acousticsRiemann", "acousticsRiemDes", "adr", + "adr2D", "advection", "advection2D", "advectionFlux", "advectionUpwind", + "advection_x", "airconds", "aircondsDOPRI", "aircont", @@ -102,7 +104,8 @@ const char* models[] = {"acousticsBase", "testFor", "test_input", "TYSON", - "VIRplanoS"}; + "VIRplanoS", + "virus_replication"}; INSTANTIATE_TEST_SUITE_P(Models, SModelTests, testing::ValuesIn(models)); diff --git a/src/gui/.vscode/settings.json b/src/gui/.vscode/settings.json new file mode 100644 index 00000000..1526498b --- /dev/null +++ b/src/gui/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "sonarlint.pathToCompileCommands": "${workspaceFolder}/compile_commands.json" +} \ No newline at end of file diff --git a/src/gui/QSSSolverGUI.doxyfile b/src/gui/QSSSolverGUI.doxyfile index bd250580..336bf3f7 100644 --- a/src/gui/QSSSolverGUI.doxyfile +++ b/src/gui/QSSSolverGUI.doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "QSS Solver GUI" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 4.3.0 +PROJECT_NUMBER = 4.4.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/src/gui/mmohighlight.cpp b/src/gui/mmohighlight.cpp index b9a29c92..b0f6566d 100644 --- a/src/gui/mmohighlight.cpp +++ b/src/gui/mmohighlight.cpp @@ -114,6 +114,8 @@ MmoHighlighter::MmoHighlighter(QTextDocument *parent, h_type file) : QSyntaxHigh << "\\bMMO_SZ\\b" << "\\bMMO_Event_Id\\b" << "\\bMMO_RandomSeed\\b" + << "\\bMMO_XOutput\\b" + << "\\bMMO_CVODEMaxOrder\\b" << "\\bderivative\\b"; foreach (const QString &pattern, keywordPatterns) { diff --git a/src/gui/mmohighlight.h b/src/gui/mmohighlight.h index 5c4f6e60..7c898cae 100644 --- a/src/gui/mmohighlight.h +++ b/src/gui/mmohighlight.h @@ -17,12 +17,10 @@ ******************************************************************************/ -#ifndef MMOHIGHLIGHTER_H_ -#define MMOHIGHLIGHTER_H_ - -#include +#pragma once #include +#include #include class MmoHighlighter : public QSyntaxHighlighter { @@ -50,5 +48,3 @@ class MmoHighlighter : public QSyntaxHighlighter { QTextCharFormat multiLineCommentFormat; QTextCharFormat quotationFormat; }; - -#endif /* MMOHIGHLIGHTER_H_ */ diff --git a/src/gui/modeleditor.cpp b/src/gui/modeleditor.cpp index 44aad95d..b8c97f70 100644 --- a/src/gui/modeleditor.cpp +++ b/src/gui/modeleditor.cpp @@ -61,7 +61,6 @@ ModelEditor::ModelEditor(QWidget *parent, QString name) _BDFPart(), _BDFPartitionDepth(), _BDFMaxStep(), - _random_seed(), _semiStaticPartitioning(false), _hl(NULL) { @@ -729,10 +728,29 @@ QString ModelEditor::modelName() return ""; } +void ModelEditor::searchFixedAnnot(QStringList annotations) +{ + for (const auto &annotation : annotations) { + QString annot_value = getAnnotations(annotation); + if (!annot_value.isEmpty()) { + _fixed_annotations.insert(annotation, annot_value); + } + } +} + +void ModelEditor::addFixedAnnot() +{ + for (auto it = _fixed_annotations.begin(); it != _fixed_annotations.end(); ++it) { + setAnnotations(it.key(), it.value(), true); + } +} + void ModelEditor::writeAnnotations() { QString mName = modelName(); - _random_seed = randomSeed(); + // Search and store fixed user annotations to write them back later. + searchFixedAnnot({"MMO_RandomSeed", "MMO_XOutput", "MMO_CVODEMaxOrder"}); + deleteAnnotations(); int tab = _model_editor_tab->currentIndex(); CodeEditor *_textEditor = qobject_cast(_model_editor_tab->widget(tab)); @@ -768,7 +786,7 @@ void ModelEditor::writeAnnotations() if (!_BDFPart.isEmpty()) setAnnotations("MMO_BDF_Part", _BDFPart, true); if (!_BDFPartitionDepth.isEmpty()) setAnnotations("MMO_BDF_PDepth", _BDFPartitionDepth, true); if (!_BDFMaxStep.isEmpty()) setAnnotations("MMO_BDF_Max_Step", _BDFMaxStep, true); - if (!_random_seed.isEmpty()) setAnnotations("MMO_RandomSeed", _random_seed, true); + addFixedAnnot(); setAnnotations("StartTime", _startTime, true); setAnnotations("StopTime", _stopTime, true); setAnnotations("Tolerance", _tolerance, true); @@ -827,4 +845,5 @@ void ModelEditor::writeAnnotations() } } _annotations.clear(); + _fixed_annotations.clear(); } diff --git a/src/gui/modeleditor.h b/src/gui/modeleditor.h index 13b2f963..e744803c 100644 --- a/src/gui/modeleditor.h +++ b/src/gui/modeleditor.h @@ -120,7 +120,6 @@ class ModelEditor : public QDialog, public Ui::ModelEditorForm { inline void setBDFPartitionDepth(QString str) { _BDFPartitionDepth = str; }; inline QString BDFMaxStep() { return getAnnotations("MMO_BDF_Max_Step"); }; inline void setBDFMaxStep(QString str) { _BDFMaxStep = str; }; - inline QString randomSeed() { return getAnnotations("MMO_RandomSeed"); }; void keyReleaseEvent(QKeyEvent *event); void save(void); @@ -156,6 +155,11 @@ class ModelEditor : public QDialog, public Ui::ModelEditorForm { void setAnnotations(QString str, QString value, bool separator); void save(int tab); int tokenPosition(QString token); + /// Add any annotation that's not required in the run form here. + /// They will be added to the to the generated annotations without any modifications. + void searchFixedAnnot(QStringList annotations); + void addFixedAnnot(); + QStringList _annotations; QMap _defaultValues; QString _startTime; @@ -190,8 +194,8 @@ class ModelEditor : public QDialog, public Ui::ModelEditorForm { QString _BDFPart; QString _BDFPartitionDepth; QString _BDFMaxStep; - QString _random_seed; bool _semiStaticPartitioning; + QMap _fixed_annotations; QTabWidget *_model_editor_tab; QList *_models; Utils *_utils; diff --git a/src/gui/utils.cpp b/src/gui/utils.cpp index 5347b908..7003f3bf 100644 --- a/src/gui/utils.cpp +++ b/src/gui/utils.cpp @@ -19,90 +19,27 @@ #include "utils.h" -QString Utils::appCommand(AppCmds c) +QString Utils::appCommand(AppCmds cmd) { QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); - QString cmd; - switch (c) { - case CMD_COMPILE: - cmd = settings.value("Commands/comp", "Value not found in file qss-solver.ini").toString(); - break; - case CMD_BUILD: - cmd = settings.value("Commands/build", "Value not found in file qss-solver.ini").toString(); - break; - case CMD_SIMULATE: - cmd = settings.value("Commands/simulate", "Value not found in file qss-solver.ini").toString(); - break; - case CMD_PLOT: - cmd = settings.value("Commands/plot", "Value not found in file qss-solver.ini").toString(); - break; - case CMD_SBML: - cmd = settings.value("Commands/sbml", "Value not found in file qss-solver.ini").toString(); - break; - case CMD_LOG: - cmd = settings.value("Commands/log", "Value not found in file qss-solver.ini").toString(); - break; - default: - return QString(); - } - return cmd; + return settings.value(appCommandsName(cmd), "Value not found in file qss-solver.ini").toString(); } QString Utils::appDir(AppDirs d) { QDir dir(QCoreApplication::applicationDirPath()); - dir.cd(_getDir(d)); + dir.cd(getDir(d)); return dir.absolutePath(); } -bool Utils::isSet(AppFlags f) +bool Utils::isSet(AppFlags flag) { - QString _val; QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); - switch (f) { - case FLG_FLAGS: - _val = settings.value("Flags/flags", "Value not found in file qss-solver.ini").toString(); - break; - case FLG_DEBUG: - _val = settings.value("Flags/dbgflags", "Value not found in file qss-solver.ini").toString(); - break; - case FLG_DBG_ALL: - _val = settings.value("Flags/dbgAll", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_INIT_VALUES: - _val = settings.value("Flags/dbgInitValues", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_EXTERNAL_EVENT: - _val = settings.value("Flags/dbgExternalEvent", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_MEMORY: - _val = settings.value("Flags/dbgMemory", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_SYNCHRONIZE: - _val = settings.value("Flags/dbgSynchronize", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_STEP_INFO: - _val = settings.value("Flags/dbgStepInfo", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_VAR_CHANGES: - _val = settings.value("Flags/dbgVarChanges", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_WAIT_FOR: - _val = settings.value("Flags/dbgWaitFor", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_WEIGHTS: - _val = settings.value("Flags/dbgWeights", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - case FLG_DBG_DT: - _val = settings.value("Flags/dbgDt", "Value not found in file qss-solver.ini").toString(); - return _val == "true"; - default: - return _val.isEmpty(); - } - return _val.isEmpty(); + QString val = settings.value(appFlagName(flag), "Value not found in file qss-solver.ini").toString(); + return val == "true"; } -QString Utils::_getDebugValue() +QString Utils::getDebugValue() { QString dbg; if (isSet(FLG_DBG_ALL)) { @@ -138,212 +75,155 @@ QString Utils::_getDebugValue() return dbg; } -QString Utils::appFlag(AppFlags f) +QString Utils::appFlag(AppFlags flag) +{ + QString val; + QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); + if (flag == FLG_DEBUG) { + val = getDebugValue(); + } else { + val = settings.value(appFlagName(flag), "Value not found in file qss-solver.ini").toString(); + } + return val; +} + +QString Utils::relativePath(AppDirs d) { return getDir(d); } + +QString Utils::getDir(AppDirs dir) { - QString _val; QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); - switch (f) { + QString path = settings.value(appDirsName(dir), "Value not found in file qss-solver.ini").toString(); + return path; +} + +void Utils::setCommand(AppCmds cmd, QString value) +{ + QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); + settings.setValue(appCommandsName(cmd), value); +} + +QString Utils::appFlagName(AppFlags flag) +{ + QString flag_name("Flags/"); + switch (flag) { case FLG_FLAGS: - _val = settings.value("Flags/flags", "Value not found in file qss-solver.ini").toString(); - break; - case FLG_DEBUG: - _val = _getDebugValue(); + flag_name.append("flags"); break; case FLG_DBG_ALL: - _val = settings.value("Flags/dbgAll", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgAll"); break; case FLG_DBG_INIT_VALUES: - _val = settings.value("Flags/dbgInitValues", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgInitValues"); break; case FLG_DBG_EXTERNAL_EVENT: - _val = settings.value("Flags/dbgExternalEvent", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgExternalEvent"); break; case FLG_DBG_MEMORY: - _val = settings.value("Flags/dbgMemory", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgMemory"); break; case FLG_DBG_SYNCHRONIZE: - _val = settings.value("Flags/dbgSynchronize", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgSynchronize"); break; case FLG_DBG_STEP_INFO: - _val = settings.value("Flags/dbgStepInfo", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgStepInfo"); break; case FLG_DBG_VAR_CHANGES: - _val = settings.value("Flags/dbgVarChanges", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgVarChanges"); break; case FLG_DBG_WAIT_FOR: - _val = settings.value("Flags/dbgWaitFor", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgWaitFor"); break; case FLG_DBG_WEIGHTS: - _val = settings.value("Flags/dbgWeights", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgWeights"); break; case FLG_DBG_DT: - _val = settings.value("Flags/dbgDt", "Value not found in file qss-solver.ini").toString(); + flag_name.append("dbgDt"); break; case FLG_PLOT: - _val = settings.value("Flags/plotflags", "Value not found in file qss-solver.ini").toString(); - break; - case FLG_VERSION: - _val = settings.value("Flags/version", "Value not found in file qss-solver.ini").toString(); - break; - case FLG_BRANCH: - _val = settings.value("Flags/branch", "Value not found in file qss-solver.ini").toString(); + flag_name.append("plotflags"); break; default: break; } - return _val; + return flag_name; } -QString Utils::relativePath(AppDirs d) { return _getDir(d); } - -QString Utils::_getDir(AppDirs d) +QString Utils::appCommandsName(AppCmds cmd) { - QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); - QString path; - switch (d) { - case MMOC_SOURCE: - path = settings.value("src", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_MODELS: - path = settings.value("models", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_OUTPUT: - path = settings.value("output", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_BUILD: - path = settings.value("build", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_ENGINE: - path = settings.value("engine", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_LIBS: - path = settings.value("libs", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_BIN: - path = settings.value("bin", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_PACKAGES: - path = settings.value("packages", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_LIBRARIES: - path = settings.value("libraries", "Value not found in file qss-solver.ini").toString(); - break; - case MMOC_INCLUDE: - path = settings.value("include", "Value not found in file qss-solver.ini").toString(); - break; - default: - return QString(); - } - return path; -} - -void Utils::setCommand(AppCmds c, QString value) -{ - QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); - switch (c) { + QString command_name("Commands/"); + switch (cmd) { case CMD_COMPILE: - settings.setValue("Commands/comp", value); + command_name.append("comp"); break; case CMD_BUILD: - settings.setValue("Commands/build", value); + command_name.append("build"); break; case CMD_SIMULATE: - settings.setValue("Commands/simulate", value); + command_name.append("simulate"); break; case CMD_PLOT: - settings.setValue("Commands/plot", value); + command_name.append("plot"); break; case CMD_SBML: - settings.setValue("Commands/sbml", value); + command_name.append("sbml"); break; case CMD_LOG: - settings.setValue("Commands/log", value); + command_name.append("log"); break; default: break; } + return command_name; } -void Utils::setDir(AppDirs d, QString value) +QString Utils::appDirsName(AppDirs dir) { - QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); - switch (d) { + QString dir_name; + switch (dir) { case MMOC_SOURCE: - settings.setValue("src", value); + dir_name = "src"; break; case MMOC_MODELS: - settings.setValue("models", value); + dir_name = "models"; break; case MMOC_OUTPUT: - settings.setValue("output", value); + dir_name = "output"; break; case MMOC_BUILD: - settings.setValue("build", value); + dir_name = "build"; break; case MMOC_ENGINE: - settings.setValue("engine", value); + dir_name = "engine"; break; case MMOC_LIBS: - settings.setValue("libs", value); + dir_name = "libs"; break; case MMOC_BIN: - settings.setValue("bin", value); + dir_name = "bin"; break; case MMOC_PACKAGES: - settings.setValue("packages", value); + dir_name = "packages"; break; case MMOC_LIBRARIES: - settings.setValue("libraries", value); + dir_name = "libraries"; break; case MMOC_INCLUDE: - settings.setValue("include", value); + dir_name = "include"; break; default: break; } + return dir_name; } -void Utils::setFlag(AppFlags f, QString value) +void Utils::setDir(AppDirs dir, QString value) { QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); - switch (f) { - case FLG_FLAGS: - settings.setValue("Flags/flags", value); - break; - case FLG_DBG_ALL: - settings.setValue("Flags/dbgAll", value); - break; - case FLG_DBG_INIT_VALUES: - settings.setValue("Flags/dbgInitValues", value); - break; - case FLG_DBG_EXTERNAL_EVENT: - settings.setValue("Flags/dbgExternalEvent", value); - break; - case FLG_DBG_MEMORY: - settings.setValue("Flags/dbgMemory", value); - break; - case FLG_DBG_SYNCHRONIZE: - settings.setValue("Flags/dbgSynchronize", value); - break; - case FLG_DBG_STEP_INFO: - settings.setValue("Flags/dbgStepInfo", value); - break; - case FLG_DBG_VAR_CHANGES: - settings.setValue("Flags/dbgVarChanges", value); - break; - case FLG_DBG_WAIT_FOR: - settings.setValue("Flags/dbgWaitFor", value); - break; - case FLG_DBG_WEIGHTS: - settings.setValue("Flags/dbgWeights", value); - break; - case FLG_DBG_DT: - settings.setValue("Flags/dbgDt", value); - break; - case FLG_PLOT: - settings.setValue("Flags/plotflags", value); - break; - default: - break; - } + settings.setValue(appDirsName(dir), value); +} + +void Utils::setFlag(AppFlags flag, QString value) +{ + QSettings settings(QCoreApplication::applicationDirPath() + "/qss-solver.ini", QSettings::IniFormat); + settings.setValue(appFlagName(flag), value); } diff --git a/src/gui/utils.h b/src/gui/utils.h index a7f790f9..bd999c32 100644 --- a/src/gui/utils.h +++ b/src/gui/utils.h @@ -70,7 +70,10 @@ class Utils { void setDir(AppDirs d, QString value); void setFlag(AppFlags f, QString value); - private: - QString _getDir(AppDirs d); - QString _getDebugValue(); + protected: + QString getDir(AppDirs dir); + QString getDebugValue(); + QString appFlagName(AppFlags flag); + QString appDirsName(AppDirs dir); + QString appCommandsName(AppCmds cmd); }; diff --git a/src/mmoc/.gitignore b/src/mmoc/.gitignore index 23174845..f2faa350 100644 --- a/src/mmoc/.gitignore +++ b/src/mmoc/.gitignore @@ -22,3 +22,9 @@ tags # Local ChangeLog. ChangeLog + +# 3rd-party lib files. +3rd-party/boost/include/ +3rd-party/boost/lib/ +3rd-party/sbg/sb-graph-dev/ +3rd-party/sbg/*.tar.gz diff --git a/src/mmoc/.vscode/launch.json b/src/mmoc/.vscode/launch.json index 29e3b550..8e6e7470 100644 --- a/src/mmoc/.vscode/launch.json +++ b/src/mmoc/.vscode/launch.json @@ -575,6 +575,45 @@ "ignoreFailures": true } ] - } + }, + + // ADR 2D + { + "name": "ADR 2D Test model.", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/usr/bin/mmoc", + "args": ["-o /home/joaquin/work/qss-solver/build/adr2D/adr2D ", "/home/joaquin/work/qss-solver/src/mmoc/tests/system/gt_data/adr2D/adr2D.mo"], + "cwd": "${workspaceFolder}/usr/bin/", + "environment": [], + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + }, + + // Use time variable in initialization code + { + "name": "Init Code Time Test model.", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/usr/bin/mmoc", + "args": ["-o /home/joaquin/work/qss-solver/build/init_code_time/init_code_time ", "/home/joaquin/work/qss-solver/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.mo"], + "cwd": "${workspaceFolder}/usr/bin/", + "environment": [], + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] } \ No newline at end of file diff --git a/src/mmoc/.vscode/settings.json b/src/mmoc/.vscode/settings.json index 6ac21905..221ab129 100644 --- a/src/mmoc/.vscode/settings.json +++ b/src/mmoc/.vscode/settings.json @@ -78,5 +78,6 @@ "docwriter.progress.trackFunctions": true, "docwriter.progress.trackMethods": false, "docwriter.progress.trackClasses": false, - "docwriter.progress.trackTypes": false + "docwriter.progress.trackTypes": false, + "sonarlint.pathToCompileCommands": "${workspaceFolder}/compile_commands.json" } \ No newline at end of file diff --git a/src/mmoc/3rd-party/Makefile.include b/src/mmoc/3rd-party/Makefile.include new file mode 100644 index 00000000..ced5cda4 --- /dev/null +++ b/src/mmoc/3rd-party/Makefile.include @@ -0,0 +1,36 @@ +# Target variables +sbg_branch ?= sb-graph-dev +build_sbg ?= True +repo_checkout ?= ssh + +# The Directories, Source, Includes, Objects, Binary +3RD_PARTY_DIR := $(SRC_DIR)/3rd-party +SBG_LIB_PATH := $(3RD_PARTY_DIR)/sbg +SBG_DEV := sb-graph-dev +SBG_LIB := $(SBG_DEV).tar.gz +BOOST_LIB_PATH := $(3RD_PARTY_DIR)/boost +BOOST_LIB := boost-1.81.0.tar.xz +INCLUDE += -I$(SBG_LIB_PATH)/$(SBG_DEV)/usr/include -I$(BOOST_LIB_PATH)/include +LIB += -L$(SBG_LIB_PATH)/$(SBG_DEV)/usr/lib -lsbgraph + +# Rules +lib_sbg: lib-boost | create-folders +ifeq ("$(wildcard $(SBG_LIB_PATH)/$(SBG_DEV))","") + make update_sbg +endif +ifeq ($(build_sbg), True) + cd $(SBG_LIB_PATH)/$(SBG_DEV); autoconf + cd $(SBG_LIB_PATH)/$(SBG_DEV); ./configure + cd $(SBG_LIB_PATH)/$(SBG_DEV); make boost_libdir=../../boost + cd $(SBG_LIB_PATH)/$(SBG_DEV); mkdir -p usr + cd $(SBG_LIB_PATH)/$(SBG_DEV); make install prefix=./usr +endif + +lib-boost: +ifeq ("$(wildcard $(BOOST_LIB_PATH)/include)","") + cd $(BOOST_LIB_PATH); tar -xvf $(BOOST_LIB) +endif + +update_sbg: + cd $(SBG_LIB_PATH); ./update.py --branch_name $(sbg_branch) --repo_checkout $(repo_checkout) + cd $(SBG_LIB_PATH); tar -zxvf $(SBG_LIB) \ No newline at end of file diff --git a/src/mmoc/3rd-party/boost/boost-1.81.0.tar.xz b/src/mmoc/3rd-party/boost/boost-1.81.0.tar.xz new file mode 100644 index 00000000..a24d9fed Binary files /dev/null and b/src/mmoc/3rd-party/boost/boost-1.81.0.tar.xz differ diff --git a/src/mmoc/3rd-party/sbg/update.py b/src/mmoc/3rd-party/sbg/update.py new file mode 100755 index 00000000..fa97f53f --- /dev/null +++ b/src/mmoc/3rd-party/sbg/update.py @@ -0,0 +1,29 @@ +#!/usr/bin/python + +import argparse +import subprocess +import os +import shutil +import sys + +def main(): + + parser = argparse.ArgumentParser("update") + parser.add_argument("--branch_name", help="Checkout branch name.", type=str, default='sb-graph-dev') + parser.add_argument("--repo_checkout", help="Clone method for the repo, it could be: https or ssh.", type=str, default='https') + args = parser.parse_args() + branch_name = args.branch_name + repo_url = 'git@github.com:CIFASIS/sb-graph.git' + if args.repo_checkout == 'https': + repo_url = 'https://github.com/CIFASIS/sb-graph.git' + if os.path.isdir('./sb-graph'): + shutil.rmtree('./sb-graph') + subprocess.check_call(['git', 'clone', '-b' , branch_name, '--single-branch', repo_url]) + shutil.rmtree('./sb-graph-dev', True) + shutil.move('./sb-graph', './sb-graph-dev') + subprocess.check_call(['tar', '-czvf', 'sb-graph-dev.tar.gz', './sb-graph-dev']) + shutil.rmtree('./sb-graph-dev') + +if (__name__ == '__main__'): + main() + diff --git a/src/mmoc/MMOCompiler.doxyfile b/src/mmoc/MMOCompiler.doxyfile index d0d2e0f6..06529830 100644 --- a/src/mmoc/MMOCompiler.doxyfile +++ b/src/mmoc/MMOCompiler.doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = MicroModelica C Compiler # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 4.3.0 +PROJECT_NUMBER = 4.4.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/src/mmoc/Makefile b/src/mmoc/Makefile index cc343d95..ca435b71 100644 --- a/src/mmoc/Makefile +++ b/src/mmoc/Makefile @@ -28,6 +28,7 @@ RM := rm -rf default: mmoc +include 3rd-party/Makefile.include include ast/Makefile.include include deps/Makefile.include include generator/Makefile.include @@ -52,7 +53,7 @@ DEPS =\ $(DEPS_GRAPH_OBJ:.o=.d)\ $(DEPS_BUILDER_OBJ:.o=.d) -mmoc: | $(AST_OBJ) $(UTIL_OBJ) $(DEPS_OBJ) $(IR_OBJ) $(GENERATOR_OBJ) +mmoc: lib_sbg | $(AST_OBJ) $(UTIL_OBJ) $(DEPS_OBJ) $(IR_OBJ) $(GENERATOR_OBJ) $(CXX) $(INCLUDE) $(CXXFLAGS) main.cpp -o $(TARGET) $(AST_OBJ) $(PARSER_OBJ) $(GENERATOR_OBJ) $(IR_OBJ) $(UTIL_OBJ) $(VISITOR_OBJ) $(DEPS_OBJ) $(DEPS_GRAPH_OBJ) $(DEPS_BUILDER_OBJ) $(LIB) test: @@ -79,7 +80,10 @@ clean: $(RM) $(USR_DIR) help: - @echo "make MODE=" + @echo "make MODE= sbg_branch= build_sbg= repo_checkout=" @echo "Default values:" @echo "" @echo "MODE=Debug" + @echo "sbg_branch=sb-graph-dev" + @echo "build_sbg=True" + @echo "repo_checkout=ssh" diff --git a/src/mmoc/generator/files.cpp b/src/mmoc/generator/files.cpp index 49d3612d..044983df 100644 --- a/src/mmoc/generator/files.cpp +++ b/src/mmoc/generator/files.cpp @@ -51,22 +51,20 @@ using namespace Util; namespace Generator { Files::Files(ModelInstancePtr modelInstance, Model& model, CompileFlags& flags) - : _fname(model.name()), _model(model), _modelInstance(modelInstance), _writer(new FileWriter()), _flags(flags) + : _fname(model.name()), _model(model), _modelInstance(modelInstance), _writer(std::make_shared()), _flags(flags) { if (_flags.hasOutputFile()) { _fname = _flags.outputFile(); } } -Files::Files(string name, CompileFlags& flags) : _fname(name), _model(), _writer(new FileWriter()), _flags(flags) +Files::Files(string name, CompileFlags& flags) : _fname(name), _model(), _writer(std::make_shared()), _flags(flags) { if (_flags.hasOutputFile()) { _fname = _flags.outputFile(); } } -Files::~Files() {} - void Files::makefile() { stringstream buffer; @@ -99,11 +97,10 @@ void Files::makefile() } if (_flags.hasObjects()) { list objects = _flags.objects(); - for (list::iterator it = objects.begin(); it != objects.end(); it++) { - string inc = *it; - unsigned int f = inc.rfind("/"); - inc.erase(inc.begin() + f, inc.end()); - include.insert(inc, inc); + for (auto obj : objects) { + unsigned long f = obj.rfind("/"); + obj.erase(obj.begin() + f, obj.end()); + include.insert(obj, obj); } } string pinclude = Utils::instance().environmentVariable("MMOC_INCLUDE"); @@ -136,8 +133,8 @@ void Files::makefile() if (_flags.hasObjects()) { buffer << "SRC := "; list objects = _flags.objects(); - for (list::iterator it = objects.begin(); it != objects.end(); it++) { - buffer << *it << " "; + for (const auto& obj : objects) { + buffer << obj << " "; } _writer->print(buffer); } @@ -305,9 +302,10 @@ void Files::settings(ModelAnnotation annotation) _writer->print("sol=\"" + annotation.solverString() + "\";"); list dq = annotation.dqmin(); buffer << "dqmin=("; - int count = 0, size = dq.size(); - for (list::iterator it = dq.begin(); it != dq.end(); it++) { - buffer << *it; + unsigned long count = 0; + unsigned long size = dq.size(); + for (const auto& it : dq) { + buffer << it; if (++count < size) { buffer << ","; } @@ -318,8 +316,8 @@ void Files::settings(ModelAnnotation annotation) buffer << "dqrel=("; count = 0; size = dq.size(); - for (list::iterator it = dq.begin(); it != dq.end(); it++) { - buffer << *it; + for (const auto& it : dq) { + buffer << it; if (++count < size) { buffer << ","; } @@ -340,19 +338,31 @@ void Files::settings(ModelAnnotation annotation) _writer->print(buffer); buffer << "BDFMaxStep=" << annotation.BDFMaxStep() << ";"; _writer->print(buffer); + addAnnotation(annotation, "CVODEMaxOrder", IntegerAnnotations::CVODEMaxOrder); + addAnnotation(annotation, "XOutput", IntegerAnnotations::XOutput); _writer->clearFile(); } -void Files::printList(list ann, string tag) +void Files::addAnnotation(const IR::ModelAnnotation& annotation, const string& mmo_name, IntegerAnnotations name) +{ + if (annotation.hasAnnotation(name)) { + stringstream buffer; + buffer << mmo_name << "=" << annotation.getAnnotation(name) << ";"; + _writer->print(buffer); + } +} + +void Files::printList(const list& ann, const string& tag) const { stringstream buffer; if (ann.empty()) { return; } buffer << tag << "=("; - int count = 0, size = ann.size(); - for (list::iterator it = ann.begin(); it != ann.end(); it++) { - buffer << *it; + unsigned long count = 0; + unsigned long size = ann.size(); + for (const auto& it : ann) { + buffer << it; if (++count < size) { buffer << ","; } @@ -366,7 +376,6 @@ void Files::bdfPartition() AST_ExpressionList BDF_exps = _model.annotations().BDFPartition(); AST_ExpressionListIterator bdf_exp_it; list variables; - list::iterator var_it; foreach (bdf_exp_it, BDF_exps) { PartitionInterval partition_interval; list ret = partition_interval.apply(current_element(bdf_exp_it)); @@ -374,11 +383,10 @@ void Files::bdfPartition() } string file_name = _fname + "_BDF.part"; ofstream partition(file_name.c_str(), ios::out); - int partition_size = variables.size(); + unsigned long partition_size = variables.size(); partition << partition_size << endl; - for (var_it = variables.begin(); var_it != variables.end(); var_it++) { - int val = *var_it; - partition << val << endl; + for (const auto& var_it : variables) { + partition << var_it << endl; } partition.close(); } diff --git a/src/mmoc/generator/files.h b/src/mmoc/generator/files.h index 695ccdb2..57bce4f5 100644 --- a/src/mmoc/generator/files.h +++ b/src/mmoc/generator/files.h @@ -35,7 +35,7 @@ class Files { public: Files(ModelInstancePtr modelInstance, IR::Model& model, Util::CompileFlags& flags); Files(string name, Util::CompileFlags& flags); - ~Files(); + ~Files() = default; void makefile(); void run(); void plot(); @@ -43,9 +43,11 @@ class Files { void graph(); void bdfPartition(); - private: + protected: std::string variablePlotSettings(); - void printList(list ann, string tag); + void printList(const list& ann, const string& tag) const; + void addAnnotation(const IR::ModelAnnotation& annotation, const string& mmo_name, IR::IntegerAnnotations name); + string _fname; IR::Model _model; ModelInstancePtr _modelInstance; diff --git a/src/mmoc/generator/generator.cpp b/src/mmoc/generator/generator.cpp index 8408c7f5..48ef8460 100644 --- a/src/mmoc/generator/generator.cpp +++ b/src/mmoc/generator/generator.cpp @@ -36,13 +36,13 @@ using namespace IR; using namespace Util; namespace Generator { -Generator::Generator(const StoredDefinition& std, CompileFlags& flags) +Generator::Generator(const StoredDefinition& std, const CompileFlags& flags) : _std(std), _flags(flags), _model_instance(nullptr), _writer(nullptr), _includes(), _fheader() { if (_flags.output()) { - _writer = WriterPtr(new MemoryWriter()); + _writer = WriterPtr(std::make_shared()); } else { - _writer = WriterPtr(new FileWriter()); + _writer = WriterPtr(std::make_shared()); } } @@ -56,15 +56,15 @@ int Generator::generate() } _writer->setFile(base_name + ".c"); switch (model.annotations().solver()) { - case DOPRI: - case DASSL: - case CVODE_BDF: - case IDA: - case CVODE_AM: - _model_instance = ModelInstancePtr(new ClassicModelInstance(model, _flags, _writer)); + case Solver::DOPRI: + case Solver::DASSL: + case Solver::CVODE_BDF: + case Solver::IDA: + case Solver::CVODE_AM: + _model_instance = ModelInstancePtr(std::make_shared(model, _flags, _writer)); break; default: - _model_instance = ModelInstancePtr(new QSSModelInstance(model, _flags, _writer)); + _model_instance = ModelInstancePtr(std::make_shared(model, _flags, _writer)); } _model_instance->generate(); _writer->clearFile(); @@ -77,7 +77,7 @@ int Generator::generate() files.run(); files.plot(); files.settings(model.annotations()); - if (model.annotations().solver() == LIQSS_BDF && !model.annotations().BDFPartition()->empty()) { + if (model.annotations().solver() == Solver::LIQSS_BDF && !model.annotations().BDFPartition()->empty()) { files.bdfPartition(); } if (model.externalFunctions()) { @@ -103,7 +103,7 @@ int Generator::generate() return Error::instance().errors(); } -void Generator::generateIncludes(string name) +void Generator::generateIncludes(const string& name) { stringstream buffer; buffer << "#include " << endl; @@ -112,15 +112,13 @@ void Generator::generateIncludes(string name) _writer->write(buffer, WRITER::Function_Header); } -void Generator::generateModel() {} - -void Generator::calledFunctionHeader(string file_name) +void Generator::calledFunctionHeader(const string& file_name) { string indent = _writer->indent(1); string file = file_name; file.append(".h"); _writer->setFile(file); - for (list::iterator it = _fheader.begin(); it != _fheader.end(); it++) { + for (auto it = _fheader.begin(); it != _fheader.end(); it++) { _writer->print(*it); } _writer->clearFile(); diff --git a/src/mmoc/generator/generator.h b/src/mmoc/generator/generator.h index c4d9713c..249d55d2 100644 --- a/src/mmoc/generator/generator.h +++ b/src/mmoc/generator/generator.h @@ -17,7 +17,7 @@ ******************************************************************************/ -#pragma once +#pragma once #include #include @@ -37,14 +37,13 @@ namespace Generator { class Generator { public: - Generator(const IR::StoredDefinition& std, Util::CompileFlags& flags); + Generator(const IR::StoredDefinition& std, const Util::CompileFlags& flags); ~Generator() = default; int generate(); private: - void generateIncludes(string name); - void generateModel(); - void calledFunctionHeader(string file_name); + void generateIncludes(const string& name); + void calledFunctionHeader(const string& file_name); IR::StoredDefinition _std; IR::Function _function; IR::Package _package; @@ -57,4 +56,3 @@ class Generator { }; } // namespace Generator } // namespace MicroModelica - diff --git a/src/mmoc/generator/model_instance.cpp b/src/mmoc/generator/model_instance.cpp index 60bec48a..c4f63104 100644 --- a/src/mmoc/generator/model_instance.cpp +++ b/src/mmoc/generator/model_instance.cpp @@ -205,11 +205,11 @@ void ModelInstance::settings() buffer << "settings->hybrid = "; buffer << (_model.eventNbr() ? "TRUE" : "FALSE") << ";"; _writer->print(buffer); - buffer << "settings->method = " << _model.annotations().solver() << ";"; + buffer << "settings->method = " << static_cast(_model.annotations().solver()) << ";"; _writer->print(buffer); - unsigned long random_seed = _model.annotations().randomSeed(); + int random_seed = _model.annotations().getAnnotation(IntegerAnnotations::RandomSeed); if (random_seed) { - buffer << "settings->random_seed = " << _model.annotations().randomSeed() << ";"; + buffer << "settings->random_seed = " << random_seed << ";"; _writer->print(buffer); } } @@ -322,9 +322,9 @@ string ModelInstance::componentDefinition(MODEL_INSTANCE::Component c) { string handler_q_param = (ModelConfig::instance().isQss()) ? ", double* q" : ""; switch (c) { - case MODEL_INSTANCE::Model_Settings: + case MODEL_INSTANCE::Component::Model_Settings: return "void MOD_settings(SD_simulationSettings settings)"; - case MODEL_INSTANCE::Model: { + case MODEL_INSTANCE::Component::Model: { stringstream buffer; buffer << "void MOD_definition("; if (ModelConfig::instance().isQss()) { @@ -333,31 +333,31 @@ string ModelInstance::componentDefinition(MODEL_INSTANCE::Component c) buffer << "double *x, double *d, double *a, double t, double *dx)"; return buffer.str(); } - case MODEL_INSTANCE::Deps: + case MODEL_INSTANCE::Component::Deps: return "void MOD_dependencies(int idx, double *x, double *d, double *a, " "double t, double *dx, int *map)"; - case MODEL_INSTANCE::Zero_Crossing: + case MODEL_INSTANCE::Component::Zero_Crossing: return "void MOD_zeroCrossing(int idx, double *x, double *d, double *a, " "double t, double *zc)"; - case MODEL_INSTANCE::Handler_Pos: + case MODEL_INSTANCE::Component::Handler_Pos: return "void MOD_handlerPos(int idx, double *x" + handler_q_param + ", double *d, double *a, " "double t)"; - case MODEL_INSTANCE::Handler_Neg: + case MODEL_INSTANCE::Component::Handler_Neg: return "void MOD_handlerNeg(int idx, double *x" + handler_q_param + ", double *d, double *a, " "double t)"; - case MODEL_INSTANCE::Output: + case MODEL_INSTANCE::Component::Output: return "void MOD_output(int idx, double *x, double *d, double *a, double " "t, double *out)"; - case MODEL_INSTANCE::Jacobian: + case MODEL_INSTANCE::Component::Jacobian: return "void MOD_jacobian(double *x, double *d, double *a, double t, " "SD_jacMatrices dvdx, double *jac)"; - case MODEL_INSTANCE::BdfModel: + case MODEL_INSTANCE::Component::BdfModel: return "void MOD_BDF_definition(double *x, double *d, double *a, double t, double *dx, int *BDFMap, int nBDF)"; - case MODEL_INSTANCE::CLC_Init: + case MODEL_INSTANCE::Component::CLC_Init: return "void CLC_initializeDataStructs(CLC_simulator simulator)"; - case MODEL_INSTANCE::QSS_Init: + case MODEL_INSTANCE::Component::QSS_Init: return "void QSS_initializeDataStructs(QSS_simulator simulator)"; } return ""; @@ -367,7 +367,7 @@ void ModelInstance::initialCode() { StatementTable stms = _model.initialCode(); StatementTable::iterator it; - stringstream buffer; + bool autonomous = true; ModelConfig::instance().setLocalInitSymbols(); ModelConfig::instance().setInitialCode(true); VarSymbolTable symbols = _model.symbols(); @@ -380,6 +380,12 @@ void ModelInstance::initialCode() } for (Statement stm = stms.begin(it); !stms.end(it); stm = stms.next(it)) { _writer->write(stm, WRITER::Init_Code); + autonomous = autonomous && stm.autonomous(); + } + if (!autonomous) { + stringstream initial_time; + initial_time << "int t = " << _model.annotations().initialTime() << ";"; + ModelConfig::instance().addLocalSymbol(initial_time.str()); } ModelConfig::instance().setInitialCode(false); ModelConfig::instance().unsetLocalInitSymbols(); @@ -467,41 +473,41 @@ void ModelInstance::generate() jacobian(); // Print generated Model Instance. _writer->print(WRITER::Include); - _writer->print(componentDefinition(MODEL_INSTANCE::Model_Settings)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Model_Settings)); _writer->beginBlock(); settings(); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::Model)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Model)); _writer->beginBlock(); _writer->print(WRITER::Model); _writer->print(WRITER::Model_Simple); _writer->print(WRITER::Model_Generic); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::Zero_Crossing)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Zero_Crossing)); _writer->beginBlock(); _writer->print(WRITER::Zero_Crossing); _writer->print(WRITER::ZC_Simple); _writer->print(WRITER::ZC_Generic); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::Handler_Pos)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Handler_Pos)); _writer->beginBlock(); _writer->print(WRITER::Handler_Pos); _writer->print(WRITER::Handler_Pos_Simple); _writer->print(WRITER::Handler_Pos_Generic); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::Handler_Neg)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Handler_Neg)); _writer->beginBlock(); _writer->print(WRITER::Handler_Neg); _writer->print(WRITER::Handler_Neg_Simple); _writer->print(WRITER::Handler_Neg_Generic); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::Output)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Output)); _writer->beginBlock(); _writer->print(WRITER::Output); _writer->print(WRITER::Output_Simple); _writer->print(WRITER::Output_Generic); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::Jacobian)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Jacobian)); _writer->beginBlock(); _writer->print(WRITER::Jacobian); _writer->endBlock(); @@ -630,19 +636,19 @@ void QSSModelInstance::generate() bdfDefinition(); initializeDataStructures(); ModelInstance::generate(); - _writer->print(componentDefinition(MODEL_INSTANCE::Deps)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::Deps)); _writer->beginBlock(); _writer->print(WRITER::Model_Deps); _writer->print(WRITER::Model_Deps_Simple); _writer->print(WRITER::Model_Deps_Generic); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::BdfModel)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::BdfModel)); _writer->beginBlock(); _writer->print(WRITER::Model_Bdf); _writer->print(WRITER::Model_Bdf_Simple); _writer->print(WRITER::Model_Bdf_Generic); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::QSS_Init)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::QSS_Init)); _writer->beginBlock(); _writer->print(WRITER::Prologue); _writer->print(WRITER::Init_Code); @@ -654,7 +660,7 @@ void QSSModelInstance::generate() _writer->print(allocateModel()); _writer->print(WRITER::Epilogue); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::CLC_Init)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::CLC_Init)); _writer->beginBlock(); _writer->endBlock(); } @@ -670,7 +676,6 @@ void QSSModelInstance::header() _writer->write(buffer, WRITER::Model_Header); for (Variable var = symbols.begin(it); !symbols.end(it); var = symbols.next(it)) { if (var.isState()) { - stringstream buffer; Macros macros(_model, var); buffer << "// Derivative definition for variable: " << var.name() << endl; buffer << "#define _der" << var << macros.parameters() << " dx[coeff+1]"; @@ -764,7 +769,7 @@ void ClassicModelInstance::generate() definition(); initializeDataStructures(); ModelInstance::generate(); - _writer->print(componentDefinition(MODEL_INSTANCE::CLC_Init)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::CLC_Init)); _writer->beginBlock(); _writer->print(WRITER::Prologue); _writer->print(WRITER::Init_Code); @@ -776,7 +781,7 @@ void ClassicModelInstance::generate() _writer->print(allocateModel()); _writer->print(WRITER::Epilogue); _writer->endBlock(); - _writer->print(componentDefinition(MODEL_INSTANCE::QSS_Init)); + _writer->print(componentDefinition(MODEL_INSTANCE::Component::QSS_Init)); _writer->beginBlock(); _writer->endBlock(); } @@ -792,7 +797,8 @@ void ClassicModelInstance::header() _writer->write(buffer, WRITER::Model_Header); for (Variable var = symbols.begin(it); !symbols.end(it); var = symbols.next(it)) { if (var.isState()) { - stringstream buffer, arguments; + stringstream buffer; + stringstream arguments; Macros macros(_model, var); arguments << macros.engineIndexArguments(); buffer << "// Derivative definition for variable: " << var.name() << endl; diff --git a/src/mmoc/generator/model_instance.h b/src/mmoc/generator/model_instance.h index 5a81efb1..c2b5b8be 100644 --- a/src/mmoc/generator/model_instance.h +++ b/src/mmoc/generator/model_instance.h @@ -35,7 +35,7 @@ namespace Generator { namespace MODEL_INSTANCE { -typedef enum { +enum class Component { Model_Settings, Model, Deps, @@ -47,9 +47,10 @@ typedef enum { BdfModel, CLC_Init, QSS_Init -} Component; +}; + +enum class NodeType { SD, SZ, HD, HZ, DD }; -typedef enum { SD, SZ, HD, HZ, DD } NodeType; } // namespace MODEL_INSTANCE class ModelInstance { @@ -118,14 +119,14 @@ class QSSModelInstance : public ModelInstance { public: QSSModelInstance(); QSSModelInstance(IR::Model &model, Util::CompileFlags &flags, WriterPtr writer); - ~QSSModelInstance() = default; - void initializeDataStructures(); - Graph computationalGraph(); - void generate(); - void header(); + ~QSSModelInstance() override = default; + void initializeDataStructures() override; + Graph computationalGraph() override; + void generate() override; + void header() override; protected: - void definition(); + void definition() override; void dependencies(); void bdfDefinition(); @@ -142,13 +143,13 @@ class QSSModelInstance : public ModelInstance { class ClassicModelInstance : public ModelInstance { public: ClassicModelInstance(IR::Model &model, Util::CompileFlags &flags, WriterPtr writer); - ~ClassicModelInstance() = default; - void initializeDataStructures(); - void generate(); - void header(); + ~ClassicModelInstance() override = default; + void initializeDataStructures() override; + void generate() override; + void header() override; protected: - void definition(); + void definition() override; private: void allocateSolver(); @@ -159,6 +160,7 @@ class ClassicModelInstance : public ModelInstance { WriterPtr _writer; }; -typedef std::shared_ptr ModelInstancePtr; +using ModelInstancePtr = std::shared_ptr; + } // namespace Generator } // namespace MicroModelica diff --git a/src/mmoc/ir/annotation.cpp b/src/mmoc/ir/annotation.cpp index e4587339..d53227b1 100644 --- a/src/mmoc/ir/annotation.cpp +++ b/src/mmoc/ir/annotation.cpp @@ -17,31 +17,34 @@ ******************************************************************************/ -#include "annotation.h" - +#include #include -#include "../ast/element.h" -#include "../ast/expression.h" -#include "../ast/modification.h" -#include "../util/error.h" -#include "../util/model_config.h" -#include "../util/symbol_table.h" -#include "../util/util.h" +#include "annotation.h" +#include +#include +#include +#include "annotation.h" +#include +#include +#include +#include namespace MicroModelica { using namespace Util; namespace IR { -FunctionAnnotation::FunctionAnnotation() : _annotations(), _derivative(), _include() +FunctionAnnotation::FunctionAnnotation() : _annotations(), _derivative(), _include() { initialize(); } + +void FunctionAnnotation::initialize() { _libraryDirectory = Utils::instance().environmentVariable("MMOC_LIBRARIES"); _includeDirectory = Utils::instance().environmentVariable("MMOC_INCLUDE"); - _annotations.insert(pair("derivative", DERIVATIVE)); - _annotations.insert(pair("Include", INCLUDE)); - _annotations.insert(pair("IncludeDirectory", INCLUDE_DIRECTORY)); - _annotations.insert(pair("Library", LIBRARY)); - _annotations.insert(pair("LibraryDirectory", LIBRARY_DIRECTORY)); + _annotations.insert(pair("derivative", type::DERIVATIVE)); + _annotations.insert(pair("Include", type::INCLUDE)); + _annotations.insert(pair("IncludeDirectory", type::INCLUDE_DIRECTORY)); + _annotations.insert(pair("Library", type::LIBRARY)); + _annotations.insert(pair("LibraryDirectory", type::LIBRARY_DIRECTORY)); } bool FunctionAnnotation::hasDerivative() { return !_derivative.empty(); } @@ -61,48 +64,45 @@ bool FunctionAnnotation::insert(AST_Argument_Modification x) if (itf == _annotations.end()) { return false; } - AST_Expression mod = nullptr; - if (x->hasModification()) { - if (x->modification()->modificationType() == MODEQUAL) { - mod = x->modification()->getAsEqual()->exp(); - } - } - switch (itf->second) { - case INCLUDE: - if (mod->expressionType() == EXPSTRING) { - _include = mod->getAsString()->str(); - } - break; - case INCLUDE_DIRECTORY: - if (mod->expressionType() == EXPSTRING) { - _includeDirectory = mod->getAsString()->str(); - } - break; - case LIBRARY: - if (mod->expressionType() == EXPSTRING) { - string l = mod->getAsString()->str(); - _libraries.insert(l, l); - } else if (mod->expressionType() == EXPBRACE) { - AST_ExpressionList el = mod->getAsBrace()->arguments(); - AST_ExpressionListIterator eli; - foreach (eli, el) { - string l = current_element(eli)->getAsString()->str(); + if (x->hasModification() && (x->modification()->modificationType() == MODEQUAL)) { + AST_Expression mod = x->modification()->getAsEqual()->exp(); + switch (itf->second) { + case type::INCLUDE: + if (mod->expressionType() == EXPSTRING) { + _include = mod->getAsString()->str(); + } + break; + case type::INCLUDE_DIRECTORY: + if (mod->expressionType() == EXPSTRING) { + _includeDirectory = mod->getAsString()->str(); + } + break; + case type::LIBRARY: + if (mod->expressionType() == EXPSTRING) { + string l = mod->getAsString()->str(); _libraries.insert(l, l); + } else if (mod->expressionType() == EXPBRACE) { + AST_ExpressionList el = mod->getAsBrace()->arguments(); + AST_ExpressionListIterator eli; + foreach (eli, el) { + string l = current_element(eli)->getAsString()->str(); + _libraries.insert(l, l); + } } + break; + case type::LIBRARY_DIRECTORY: + if (mod->expressionType() == EXPSTRING) { + _libraryDirectory = mod->getAsString()->str(); + } + break; + case type::DERIVATIVE: + if (mod->expressionType() == EXPSTRING) { + _derivative = mod->getAsString()->str(); + } + break; + default: + break; } - break; - case LIBRARY_DIRECTORY: - if (mod->expressionType() == EXPSTRING) { - _libraryDirectory = mod->getAsString()->str(); - } - break; - case DERIVATIVE: - if (mod->expressionType() == EXPSTRING) { - _derivative = mod->getAsString()->str(); - } - break; - default: - break; } return true; } @@ -118,7 +118,7 @@ SymbolTable FunctionAnnotation::libraries() const { return _libraries; } string FunctionAnnotation::libraryDirectory() { return _libraryDirectory; } ModelAnnotation::ModelAnnotation() - : _solver(LIQSS2), + : _solver(Solver::LIQSS2), _solverString("LIQSS2"), _commInterval("CI_Step"), _symDiff(true), @@ -138,12 +138,12 @@ ModelAnnotation::ModelAnnotation() _output(), _initialTime(0), _finalTime(0), - _partitionMethod(Metis), - _partitionMethodString("Metis"), + _partitionMethod(PartitionMethod::Scotch), + _partitionMethodString("Scotch"), _parallel(false), _dt(0), _polyCoeffs(1), - _dtSynch(DT_Fixed), + _dtSynch(DT_Synch::DT_Fixed), _dtSynchString("SD_DT_Asynchronous"), _desc(), _patohSettings(), @@ -159,49 +159,58 @@ ModelAnnotation::ModelAnnotation() _sd_matrix(), _sz_matrix(), _event_ids(), - _current_exp_id(-1), - _random_seed(0) + _current_exp_id(-1) { - _annotations.insert(pair("experiment", EXPERIMENT)); - _annotations.insert(pair("MMO_Description", DESC)); - _annotations.insert(pair("Tolerance", DQREL)); - _annotations.insert(pair("AbsTolerance", DQMIN)); - _annotations.insert(pair("MMO_Weight", WEIGHT)); - _annotations.insert(pair("MMO_Solver", SOLVER)); - _annotations.insert(pair("StartTime", INITIAL_TIME)); - _annotations.insert(pair("StopTime", FINAL_TIME)); - _annotations.insert(pair("MMO_MinStep", MIN_STEP)); - _annotations.insert(pair("MMO_ZCHyst", ZCHYST)); - _annotations.insert(pair("MMO_DerDelta", DER_DELTA)); - _annotations.insert(pair("MMO_LPS", LPS)); - _annotations.insert(pair("MMO_NodeSize", NODE_SIZE)); - _annotations.insert(pair("MMO_OutputType", COMM_INTERVAL)); - _annotations.insert(pair("MMO_Period", STEP_SIZE)); - _annotations.insert(pair("Jacobian", JACOBIAN)); - _annotations.insert(pair("MMO_SymDiff", SYM_DIFF)); - _annotations.insert(pair("MMO_Scheduler", SCHEDULER)); - _annotations.insert(pair("MMO_Output", OUTPUT)); - _annotations.insert(pair("MMO_StoreData", STORE_DATA)); - _annotations.insert(pair("MMO_PartitionMethod", PARTITION_METHOD)); - _annotations.insert(pair("MMO_Parallel", PARALLEL)); - _annotations.insert(pair("MMO_DT_Min", DELTAT)); - _annotations.insert(pair("MMO_DT_Synch", DELTAT_SYNCH)); - _annotations.insert(pair("MMO_PatohSettings", PATOH_SETTINGS)); - _annotations.insert(pair("MMO_MetisSettings", METIS_SETTINGS)); - _annotations.insert(pair("MMO_ScotchSettings", SCOTCH_SETTINGS)); - _annotations.insert(pair("MMO_BDF_Part", BDF_PARTITION)); - _annotations.insert(pair("MMO_BDF_PDepth", BDF_PARTITION_DEPTH)); - _annotations.insert(pair("MMO_BDF_Max_Step", BDF_MAX_STEP)); - _annotations.insert(pair("MMO_Event_Id", EVENT_ID)); - _annotations.insert(pair("MMO_HD", HD_MATRIX)); - _annotations.insert(pair("MMO_HZ", HZ_MATRIX)); - _annotations.insert(pair("MMO_HH", HH_MATRIX)); - _annotations.insert(pair("MMO_LHS_ST", LHS_ST_MATRIX)); - _annotations.insert(pair("MMO_LHS_DSC", LHS_DSC_MATRIX)); - _annotations.insert(pair("MMO_RHS_ST", RHS_ST_MATRIX)); - _annotations.insert(pair("MMO_SD", SD_MATRIX)); - _annotations.insert(pair("MMO_SZ", SZ_MATRIX)); - _annotations.insert(pair("MMO_RandomSeed", RANDOM_SEED)); + initialize(); +} + +void ModelAnnotation::initialize() +{ + _annotations.insert(pair("experiment", type::EXPERIMENT)); + _annotations.insert(pair("MMO_Description", type::DESC)); + _annotations.insert(pair("Tolerance", type::DQREL)); + _annotations.insert(pair("AbsTolerance", type::DQMIN)); + _annotations.insert(pair("MMO_Weight", type::WEIGHT)); + _annotations.insert(pair("MMO_Solver", type::SOLVER)); + _annotations.insert(pair("StartTime", type::INITIAL_TIME)); + _annotations.insert(pair("StopTime", type::FINAL_TIME)); + _annotations.insert(pair("MMO_MinStep", type::MIN_STEP)); + _annotations.insert(pair("MMO_ZCHyst", type::ZCHYST)); + _annotations.insert(pair("MMO_DerDelta", type::DER_DELTA)); + _annotations.insert(pair("MMO_LPS", type::LPS)); + _annotations.insert(pair("MMO_NodeSize", type::NODE_SIZE)); + _annotations.insert(pair("MMO_OutputType", type::COMM_INTERVAL)); + _annotations.insert(pair("MMO_Period", type::STEP_SIZE)); + _annotations.insert(pair("Jacobian", type::JACOBIAN)); + _annotations.insert(pair("MMO_SymDiff", type::SYM_DIFF)); + _annotations.insert(pair("MMO_Scheduler", type::SCHEDULER)); + _annotations.insert(pair("MMO_Output", type::OUTPUT)); + _annotations.insert(pair("MMO_StoreData", type::STORE_DATA)); + _annotations.insert(pair("MMO_PartitionMethod", type::PARTITION_METHOD)); + _annotations.insert(pair("MMO_Parallel", type::PARALLEL)); + _annotations.insert(pair("MMO_DT_Min", type::DELTAT)); + _annotations.insert(pair("MMO_DT_Synch", type::DELTAT_SYNCH)); + _annotations.insert(pair("MMO_PatohSettings", type::PATOH_SETTINGS)); + _annotations.insert(pair("MMO_MetisSettings", type::METIS_SETTINGS)); + _annotations.insert(pair("MMO_ScotchSettings", type::SCOTCH_SETTINGS)); + _annotations.insert(pair("MMO_BDF_Part", type::BDF_PARTITION)); + _annotations.insert(pair("MMO_BDF_PDepth", type::BDF_PARTITION_DEPTH)); + _annotations.insert(pair("MMO_BDF_Max_Step", type::BDF_MAX_STEP)); + _annotations.insert(pair("MMO_Event_Id", type::EVENT_ID)); + _annotations.insert(pair("MMO_HD", type::HD_MATRIX)); + _annotations.insert(pair("MMO_HZ", type::HZ_MATRIX)); + _annotations.insert(pair("MMO_HH", type::HH_MATRIX)); + _annotations.insert(pair("MMO_LHS_ST", type::LHS_ST_MATRIX)); + _annotations.insert(pair("MMO_LHS_DSC", type::LHS_DSC_MATRIX)); + _annotations.insert(pair("MMO_RHS_ST", type::RHS_ST_MATRIX)); + _annotations.insert(pair("MMO_SD", type::SD_MATRIX)); + _annotations.insert(pair("MMO_SZ", type::SZ_MATRIX)); + _annotations.insert(pair("MMO_RandomSeed", type::RANDOM_SEED)); + _annotations.insert(pair("MMO_CVODEMaxOrder", type::CV_ODE_MAX_ORDER)); + _annotations.insert(pair("MMO_XOutput", type::X_OUTPUT)); + _integer_annotations_map.insert(pair("MMO_RandomSeed", IntegerAnnotations::RandomSeed)); + _integer_annotations_map.insert(pair("MMO_CVODEMaxOrder", IntegerAnnotations::CVODEMaxOrder)); + _integer_annotations_map.insert(pair("MMO_XOutput", IntegerAnnotations::XOutput)); _sample.push_back(1e-2); _DQMin.push_back(1e-3); _DQRel.push_back(1e-3); @@ -246,7 +255,7 @@ bool ModelAnnotation::insert(AST_Argument_Modification x) return false; } switch (itf->second) { - case EXPERIMENT: { + case type::EXPERIMENT: { if (x->hasModification()) { AST_Modification mod = x->modification(); if (mod->modificationType() == MODCLASS) { @@ -267,16 +276,16 @@ bool ModelAnnotation::insert(AST_Argument_Modification x) Error::instance().add(x->lineNum(), EM_IR | EM_ANNOTATION_NOT_FOUND, ER_Warning, "%s", x->name()->c_str()); } } break; - case WEIGHT: - case EVENT_ID: - case HD_MATRIX: - case HZ_MATRIX: - case HH_MATRIX: - case LHS_ST_MATRIX: - case LHS_DSC_MATRIX: - case RHS_ST_MATRIX: - case SD_MATRIX: - case SZ_MATRIX: + case type::WEIGHT: + case type::EVENT_ID: + case type::HD_MATRIX: + case type::HZ_MATRIX: + case type::HH_MATRIX: + case type::LHS_ST_MATRIX: + case type::LHS_DSC_MATRIX: + case type::RHS_ST_MATRIX: + case type::SD_MATRIX: + case type::SZ_MATRIX: processArgument(x); break; default: @@ -363,31 +372,31 @@ PartitionMethod ModelAnnotation::partitionMethod() { return _partitionMethod; } DT_Synch ModelAnnotation::getDtSynch(string s) { if (!s.compare("SD_DT_Fixed")) { - return DT_Fixed; + return DT_Synch::DT_Fixed; } else if (!s.compare("SD_DT_Asynchronous")) { - return DT_Asynchronous; + return DT_Synch::DT_Asynchronous; } - return DT_Fixed; + return DT_Synch::DT_Fixed; } PartitionMethod ModelAnnotation::getPartitionMethod(string s) { if (!s.compare("Metis")) { - return Metis; + return PartitionMethod::Metis; } else if (!s.compare("HMetis")) { - return HMetis; + return PartitionMethod::HMetis; } else if (!s.compare("Scotch")) { - return Scotch; + return PartitionMethod::Scotch; } else if (!s.compare("Patoh")) { - return Patoh; + return PartitionMethod::Patoh; } else if (!s.compare("MTPL")) { - return MTPL; + return PartitionMethod::MTPL; } else if (!s.compare("MTPL_IT")) { - return MTPL_IT; + return PartitionMethod::MTPL_IT; } else if (!s.compare("Manual")) { - return Manual; + return PartitionMethod::Manual; } - return Metis; + return PartitionMethod::Scotch; } Solver ModelAnnotation::getSolver(string s) @@ -395,69 +404,69 @@ Solver ModelAnnotation::getSolver(string s) if (!s.compare("QSS")) { _order = 1; _polyCoeffs = 2; - return QSS; + return Solver::QSS; } else if (!s.compare("CQSS")) { _order = 1; _polyCoeffs = 2; - return CQSS; + return Solver::CQSS; } else if (!s.compare("LIQSS")) { _order = 1; _polyCoeffs = 2; - return LIQSS; + return Solver::LIQSS; } else if (!s.compare("QSS2")) { _order = 2; _polyCoeffs = 3; - return QSS2; + return Solver::QSS2; } else if (!s.compare("LIQSS2")) { _order = 2; _polyCoeffs = 3; - return LIQSS2; + return Solver::LIQSS2; } else if (!s.compare("LIQSS_BDF")) { _order = 2; _polyCoeffs = 3; - return LIQSS_BDF; + return Solver::LIQSS_BDF; } else if (!s.compare("QSS3")) { _order = 3; _polyCoeffs = 4; - return QSS3; + return Solver::QSS3; } else if (!s.compare("LIQSS3")) { _order = 3; _polyCoeffs = 4; - return LIQSS3; + return Solver::LIQSS3; } else if (!s.compare("DASSL")) { _order = 1; _polyCoeffs = 1; - return DASSL; + return Solver::DASSL; } else if (!s.compare("DOPRI")) { _order = 1; _polyCoeffs = 1; - return DOPRI; + return Solver::DOPRI; } else if (!s.compare("CVODE_BDF")) { _order = 1; _polyCoeffs = 1; - return CVODE_BDF; + return Solver::CVODE_BDF; } else if (!s.compare("IDA")) { _order = 1; _polyCoeffs = 1; - return IDA; + return Solver::IDA; } else if (!s.compare("CVODE_AM")) { _order = 1; _polyCoeffs = 1; - return CVODE_AM; + return Solver::CVODE_AM; } else if (!s.compare("QSS4")) { _order = 4; _polyCoeffs = 5; - return QSS4; + return Solver::QSS4; } else if (!s.compare("mLIQSS")) { _order = 1; _polyCoeffs = 2; - return mLIQSS; + return Solver::mLIQSS; } else if (!s.compare("mLIQSS2")) { _order = 2; _polyCoeffs = 3; - return mLIQSS2; + return Solver::mLIQSS2; } - return QSS; + return Solver::QSS; } void ModelAnnotation::parseMatrix(AST_Expression exp, IR::MATRIX::UserDefMatrixExps &matrix) @@ -475,140 +484,158 @@ void ModelAnnotation::processAnnotation(string annot, AST_Modification_Equal x) } EvalAnnotation ea; AnnotationValue av; - if (itf->second != DQMIN && itf->second != DQREL && itf->second != STEP_SIZE) { + if (itf->second != type::DQMIN && itf->second != type::DQREL && itf->second != type::STEP_SIZE) { av = ea.apply(x->exp()); } switch (itf->second) { - case DESC: + case type::DESC: _desc = av.str(); break; - case DQMIN: + case type::DQMIN: processList(x->exp(), &_DQMin); break; - case DQREL: + case type::DQREL: processList(x->exp(), &_DQRel); break; - case WEIGHT: + case type::WEIGHT: _weight = av.real(); break; - case SOLVER: + case type::SOLVER: _solver = getSolver(av.str()); _solverString = av.str(); break; - case INITIAL_TIME: + case type::INITIAL_TIME: _initialTime = av.real(); break; - case FINAL_TIME: + case type::FINAL_TIME: _finalTime = av.real(); break; - case MIN_STEP: + case type::MIN_STEP: _minStep = av.real(); break; - case ZCHYST: + case type::ZCHYST: _ZCHyst = av.real(); break; - case DER_DELTA: + case type::DER_DELTA: _derDelta = av.real(); break; - case LPS: + case type::LPS: _lps = av.integer(); break; - case NODE_SIZE: + case type::NODE_SIZE: _nodeSize = av.integer(); break; - case COMM_INTERVAL: + case type::COMM_INTERVAL: _commInterval = av.str(); break; - case STEP_SIZE: + case type::STEP_SIZE: processList(x->exp(), &_sample); break; - case SCHEDULER: + case type::SCHEDULER: _scheduler = av.str(); break; - case JACOBIAN: + case type::JACOBIAN: _jacobian = ("Sparse" == av.str() ? 0 : 1); break; - case SYM_DIFF: + case type::SYM_DIFF: _symDiff = true; if (av.integer() == 0) { _symDiff = false; } break; - case OUTPUT: + case type::OUTPUT: processExpressionList(x->exp(), &_output); break; - case PARTITION_METHOD: + case type::PARTITION_METHOD: _partitionMethod = getPartitionMethod(av.str()); _partitionMethodString = av.str(); break; - case DELTAT_SYNCH: + case type::DELTAT_SYNCH: _dtSynch = getDtSynch(av.str()); _dtSynchString = av.str(); break; - case PARALLEL: + case type::PARALLEL: _parallel = true; if (av.integer() == 0) { _parallel = false; } break; - case DELTAT: + case type::DELTAT: _dt = av.real(); break; - case STORE_DATA: + case type::STORE_DATA: break; - case PATOH_SETTINGS: + case type::PATOH_SETTINGS: processList(x->exp(), &_patohSettings); break; - case SCOTCH_SETTINGS: + case type::SCOTCH_SETTINGS: processList(x->exp(), &_scotchSettings); break; - case METIS_SETTINGS: + case type::METIS_SETTINGS: processList(x->exp(), &_metisSettings); break; - case BDF_PARTITION: + case type::BDF_PARTITION: processExpressionList(x->exp(), _BDFPartition); break; - case BDF_PARTITION_DEPTH: + case type::BDF_PARTITION_DEPTH: _BDFPartitionDepth = av.integer(); break; - case BDF_MAX_STEP: + case type::BDF_MAX_STEP: _BDFMaxStep = av.real(); break; - case EVENT_ID: + case type::EVENT_ID: _event_ids = av.plainStr(); break; - case HD_MATRIX: + case type::HD_MATRIX: parseMatrix(x->exp(), _hd_matrix); break; - case HZ_MATRIX: + case type::HZ_MATRIX: parseMatrix(x->exp(), _hz_matrix); break; - case HH_MATRIX: + case type::HH_MATRIX: parseMatrix(x->exp(), _hh_matrix); break; - case LHS_ST_MATRIX: + case type::LHS_ST_MATRIX: parseMatrix(x->exp(), _lhs_st_matrix); break; - case RHS_ST_MATRIX: + case type::RHS_ST_MATRIX: parseMatrix(x->exp(), _rhs_st_matrix); break; - case LHS_DSC_MATRIX: + case type::LHS_DSC_MATRIX: parseMatrix(x->exp(), _lhs_dsc_matrix); break; - case SD_MATRIX: + case type::SD_MATRIX: parseMatrix(x->exp(), _sd_matrix); break; - case SZ_MATRIX: + case type::SZ_MATRIX: parseMatrix(x->exp(), _sz_matrix); break; - case RANDOM_SEED: - _random_seed = (unsigned long)av.integer(); + case type::RANDOM_SEED: + case type::CV_ODE_MAX_ORDER: + case type::X_OUTPUT: { + IntegerAnnotations int_annot = _integer_annotations_map[itf->first]; + _integer_annotations_val.insert(pair(int_annot, av.integer())); break; + } default: break; } } +/// @todo Fix annotations structure, see https://github.com/CIFASIS/qss-solver/issues/261 +int ModelAnnotation::getAnnotation(IntegerAnnotations annot) const +{ + if (hasAnnotation(annot)) { + return _integer_annotations_val.at(annot); + } + return 0; +} + +bool ModelAnnotation::hasAnnotation(IntegerAnnotations annot) const +{ + return _integer_annotations_val.find(annot) != _integer_annotations_val.end(); +} + string ModelAnnotation::desc() { return _desc; } list ModelAnnotation::dqmin() { return _DQMin; } @@ -645,7 +672,8 @@ int ModelAnnotation::jacobian() { return _jacobian; } bool ModelAnnotation::isClassic() { - return _solver == DASSL || _solver == DOPRI || _solver == CVODE_BDF || _solver == IDA || _solver == CVODE_AM; + return _solver == Solver::DASSL || _solver == Solver::DOPRI || _solver == Solver::CVODE_BDF || _solver == Solver::IDA || + _solver == Solver::CVODE_AM; } int ModelAnnotation::lps() { return _lps; } @@ -698,14 +726,10 @@ IR::MATRIX::UserDefMatrixExps ModelAnnotation::SDMatrix() { return _sd_matrix; } IR::MATRIX::UserDefMatrixExps ModelAnnotation::SZMatrix() { return _sz_matrix; } -unsigned long ModelAnnotation::randomSeed() { return _random_seed; } - /* AnnotationValue class */ AnnotationValue::AnnotationValue() : _integer(0), _real(0), _str(), _plain_str() {} -AnnotationValue::~AnnotationValue() {} - int AnnotationValue::integer() { return _integer; } void AnnotationValue::setInteger(int i) { _integer = i; } @@ -726,46 +750,46 @@ void AnnotationValue::setPlainStr(string plain_str) { _plain_str = plain_str; } EvalAnnotation::EvalAnnotation() : _tokens() { - _tokens.insert(pair("QSS", "QSS")); - _tokens.insert(pair("CQSS", "CQSS")); - _tokens.insert(pair("QSS2", "QSS2")); - _tokens.insert(pair("QSS3", "QSS3")); - _tokens.insert(pair("LIQSS", "LIQSS")); - _tokens.insert(pair("LIQSS2", "LIQSS2")); - _tokens.insert(pair("LIQSS_BDF", "LIQSS_BDF")); - _tokens.insert(pair("LIQSS3", "LIQSS3")); - _tokens.insert(pair("QSS4", "QSS4")); - _tokens.insert(pair("mLIQSS", "mLIQSS")); - _tokens.insert(pair("mLIQSS2", "mLIQSS2")); - _tokens.insert(pair("DASSL", "DASSL")); - _tokens.insert(pair("DOPRI", "DOPRI")); - _tokens.insert(pair("CVODE_AM", "CVODE_AM")); - _tokens.insert(pair("IDA", "IDA")); - _tokens.insert(pair("CVODE_BDF", "CVODE_BDF")); - _tokens.insert(pair("ST_Linear", "ST_Linear")); - _tokens.insert(pair("ST_Binary", "ST_Binary")); - _tokens.insert(pair("ST_Random", "ST_Random")); - _tokens.insert(pair("CI_Step", "CI_Step")); - _tokens.insert(pair("CI_Dense", "CI_Dense")); - _tokens.insert(pair("CI_Sampled", "CI_Sampled")); - _tokens.insert(pair("SD_File", "SD_File")); - _tokens.insert(pair("SD_Memory", "SD_Memory")); - _tokens.insert(pair("Metis", "Metis")); - _tokens.insert(pair("HMetis", "HMetis")); - _tokens.insert(pair("Scotch", "Scotch")); - _tokens.insert(pair("Patoh", "Patoh")); - _tokens.insert(pair("MTPL", "MTPL")); - _tokens.insert(pair("MTPL_IT", "MTPL_IT")); - _tokens.insert(pair("Manual", "Manual")); - _tokens.insert(pair("SD_DT_Fixed", "SD_DT_Fixed")); - _tokens.insert(pair("Sparse", "Sparse")); - _tokens.insert(pair("Dense", "Dense")); - _tokens.insert(pair("SD_DT_Asynchronous", "SD_DT_Asynchronous")); + _tokens.emplace_back("QSS"); + _tokens.emplace_back("CQSS"); + _tokens.emplace_back("QSS2"); + _tokens.emplace_back("QSS3"); + _tokens.emplace_back("LIQSS"); + _tokens.emplace_back("LIQSS2"); + _tokens.emplace_back("LIQSS_BDF"); + _tokens.emplace_back("LIQSS3"); + _tokens.emplace_back("QSS4"); + _tokens.emplace_back("mLIQSS"); + _tokens.emplace_back("mLIQSS2"); + _tokens.emplace_back("DASSL"); + _tokens.emplace_back("DOPRI"); + _tokens.emplace_back("CVODE_AM"); + _tokens.emplace_back("IDA"); + _tokens.emplace_back("CVODE_BDF"); + _tokens.emplace_back("ST_Linear"); + _tokens.emplace_back("ST_Binary"); + _tokens.emplace_back("ST_Random"); + _tokens.emplace_back("CI_Step"); + _tokens.emplace_back("CI_Dense"); + _tokens.emplace_back("CI_Sampled"); + _tokens.emplace_back("SD_File"); + _tokens.emplace_back("SD_Memory"); + _tokens.emplace_back("Metis"); + _tokens.emplace_back("HMetis"); + _tokens.emplace_back("Scotch"); + _tokens.emplace_back("Patoh"); + _tokens.emplace_back("MTPL"); + _tokens.emplace_back("MTPL_IT"); + _tokens.emplace_back("Manual"); + _tokens.emplace_back("SD_DT_Fixed"); + _tokens.emplace_back("Sparse"); + _tokens.emplace_back("Dense"); + _tokens.emplace_back("SD_DT_Asynchronous"); } AnnotationValue EvalAnnotation::foldTraverseElement(AST_Expression e) { - AnnotationValue av = AnnotationValue(); + auto av = AnnotationValue(); switch (e->expressionType()) { case EXPSTRING: av.setStr(e->getAsString()->print()); @@ -780,7 +804,7 @@ AnnotationValue EvalAnnotation::foldTraverseElement(AST_Expression e) av.setInteger(vi->value()); } } else { - if (_tokens.find(name) != _tokens.end()) { + if (std::find(_tokens.begin(), _tokens.end(), name) != _tokens.end()) { av.setStr(name); } } @@ -791,7 +815,7 @@ AnnotationValue EvalAnnotation::foldTraverseElement(AST_Expression e) break; case EXPREAL: av.setReal(e->getAsReal()->val()); - av.setInteger(e->getAsReal()->val()); + av.setInteger(static_cast(e->getAsReal()->val())); break; case EXPBOOLEAN: if (e->getAsBoolean()->value()) { @@ -826,7 +850,7 @@ void EvalAnnotation::setBoolean(bool condition, AnnotationValue *e) AnnotationValue EvalAnnotation::foldTraverseElement(AnnotationValue e1, AnnotationValue e2, BinOpType bot) { - AnnotationValue av = AnnotationValue(); + auto av = AnnotationValue(); switch (bot) { case BINOPOR: setBoolean(e1.integer() || e2.integer(), &av); diff --git a/src/mmoc/ir/annotation.h b/src/mmoc/ir/annotation.h index 1a7cae24..a4bc5295 100644 --- a/src/mmoc/ir/annotation.h +++ b/src/mmoc/ir/annotation.h @@ -32,7 +32,7 @@ namespace MicroModelica { namespace IR { -typedef enum { +enum class Solver { QSS, CQSS, LIQSS, @@ -49,11 +49,11 @@ typedef enum { IDA, mLIQSS, mLIQSS2 -} Solver; +}; -typedef enum { Metis, HMetis, Scotch, Patoh, MTPL, MTPL_IT, Manual } PartitionMethod; +enum class PartitionMethod { Metis, HMetis, Scotch, Patoh, MTPL, MTPL_IT, Manual }; -typedef enum { DT_Fixed, DT_Asynchronous } DT_Synch; +enum class DT_Synch { DT_Fixed, DT_Asynchronous }; class FunctionAnnotation { public: @@ -71,14 +71,11 @@ class FunctionAnnotation { Util::SymbolTable libraries() const; string libraryDirectory(); - private: - typedef enum { - INCLUDE, //!< INCLUDE - INCLUDE_DIRECTORY, //!< INCLUDE_DIRECTORY - LIBRARY, //!< LIBRARY - LIBRARY_DIRECTORY, //!< LIBRARY_DIRECTORY - DERIVATIVE //!< DERIVATIVE - } type; + protected: + enum class type { INCLUDE, INCLUDE_DIRECTORY, LIBRARY, LIBRARY_DIRECTORY, DERIVATIVE }; + + void initialize(); + map _annotations; std::string _derivative; std::string _include; @@ -87,6 +84,8 @@ class FunctionAnnotation { std::string _libraryDirectory; }; +enum class IntegerAnnotations { RandomSeed, CVODEMaxOrder, XOutput }; + class ModelAnnotation { public: ModelAnnotation(); @@ -138,10 +137,11 @@ class ModelAnnotation { IR::MATRIX::UserDefMatrixExps RHSSTMatrix(); IR::MATRIX::UserDefMatrixExps SDMatrix(); IR::MATRIX::UserDefMatrixExps SZMatrix(); - unsigned long randomSeed(); + int getAnnotation(IntegerAnnotations annot) const; + bool hasAnnotation(IntegerAnnotations annot) const; protected: - typedef enum { + enum class type { EXPERIMENT, DESC, DQMIN, @@ -181,9 +181,14 @@ class ModelAnnotation { LHS_DSC_MATRIX, SD_MATRIX, SZ_MATRIX, - RANDOM_SEED - } type; + RANDOM_SEED, + CV_ODE_MAX_ORDER, + X_OUTPUT + }; + + using IntAnnotValMap = std::map; + void initialize(); void processAnnotation(string annot, AST_Modification_Equal x); void processArgument(AST_Argument_Modification arg); void processList(AST_Expression x, list *l); @@ -239,15 +244,16 @@ class ModelAnnotation { IR::MATRIX::UserDefMatrixExps _sz_matrix; string _event_ids; int _current_exp_id; - unsigned long _random_seed; + map _integer_annotations_map; + IntAnnotValMap _integer_annotations_val; }; -typedef boost::variant AnnotationType; +using AnnotationType = boost::variant; class AnnotationValue { public: AnnotationValue(); - ~AnnotationValue(); + ~AnnotationValue() = default; int integer(); void setInteger(int i); double real(); @@ -257,7 +263,7 @@ class AnnotationValue { string plainStr(); void setPlainStr(string plain_str); - private: + protected: int _integer; double _real; string _str; @@ -267,14 +273,14 @@ class AnnotationValue { class EvalAnnotation : public AST_Expression_Fold { public: EvalAnnotation(); - ~EvalAnnotation() = default; + ~EvalAnnotation() override = default; private: void setBoolean(bool condition, AnnotationValue *e); - AnnotationValue foldTraverseElement(AST_Expression); - AnnotationValue foldTraverseElement(AnnotationValue, AnnotationValue, BinOpType); - AnnotationValue foldTraverseElementUMinus(AST_Expression); - map _tokens; + AnnotationValue foldTraverseElement(AST_Expression) override; + AnnotationValue foldTraverseElement(AnnotationValue, AnnotationValue, BinOpType) override; + AnnotationValue foldTraverseElementUMinus(AST_Expression) override; + std::vector _tokens; }; } // namespace IR } // namespace MicroModelica diff --git a/src/mmoc/ir/class.h b/src/mmoc/ir/class.h index 58235bd4..d093b403 100644 --- a/src/mmoc/ir/class.h +++ b/src/mmoc/ir/class.h @@ -42,7 +42,7 @@ typedef enum { DEC_PUBLIC, DEC_LOCAL } DEC_Type; class Class { public: - ~Class() = default; + virtual ~Class() = default; virtual string name() const = 0; virtual void insert(string n) = 0; virtual void insert(AST_Equation eq) = 0; @@ -60,7 +60,7 @@ class Function : public Class { public: Function(); Function(string name); - ~Function() = default; + virtual ~Function() = default; string name() const; void insert(AST_External_Function_Call efc); void insert(VarName n, Util::Variable& vi, DEC_Type type); @@ -99,7 +99,7 @@ class Package : public Class { public: Package(){}; Package(string name); - ~Package() = default; + virtual ~Package() = default; Util::VarSymbolTable symbols() const; string name() const; void insert(string n); @@ -127,7 +127,7 @@ class Model : public Class { public: Model(); Model(string name); - ~Model() = default; + virtual ~Model() = default; inline string name() const { return _name; }; void insert(string n); void insert(VarName n, Util::Variable& vi, DEC_Type type); diff --git a/src/mmoc/ir/equation.cpp b/src/mmoc/ir/equation.cpp index d6b3e7c6..c78dbd02 100644 --- a/src/mmoc/ir/equation.cpp +++ b/src/mmoc/ir/equation.cpp @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -131,8 +130,7 @@ void Equation::initialize(AST_Equation eq) void Equation::setup() { stringstream buffer; - Autonomous autonomous; - _autonomous = autonomous.apply(_rhs.expression()); + _autonomous = _rhs.autonomous(); CalledFunctions cf; _calledFunctions = cf.apply(_rhs.expression()); if (_range) { diff --git a/src/mmoc/ir/expression.cpp b/src/mmoc/ir/expression.cpp index 4f23957e..6b9c20ac 100644 --- a/src/mmoc/ir/expression.cpp +++ b/src/mmoc/ir/expression.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -177,5 +178,11 @@ std::multimap Expression::usedVariables() const return used_variables.apply(_exp); } +bool Expression::autonomous() const +{ + Autonomous autonomous; + return autonomous.apply(expression()); +} + } // namespace IR } // namespace MicroModelica diff --git a/src/mmoc/ir/expression.h b/src/mmoc/ir/expression.h index fb0ae688..c36b7df4 100644 --- a/src/mmoc/ir/expression.h +++ b/src/mmoc/ir/expression.h @@ -48,6 +48,7 @@ class Expression { friend std::ostream& operator<<(std::ostream& out, const Expression& s); std::multimap usedVariables() const; + bool autonomous() const; protected: std::vector usageExps() const; diff --git a/src/mmoc/ir/mmo_ir.cpp b/src/mmoc/ir/mmo_ir.cpp index 0afdd582..32564b2b 100644 --- a/src/mmoc/ir/mmo_ir.cpp +++ b/src/mmoc/ir/mmo_ir.cpp @@ -125,16 +125,17 @@ void MicroModelicaIR::visit(AST_Element x) Variable vi(newType_Integer(), tp, current_element(it)->modification(), nullptr, size, array); _class->insert(current_element(it)->name(), vi, t); } else { + Variable new_var; if ((tp & TP_PARAMETER) && c->isInteger()) { - Variable vi(newType_Integer(), tp, current_element(it)->modification(), nullptr, size, array); - _class->insert(current_element(it)->name(), vi, t); + new_var = Variable(newType_Integer(), tp, current_element(it)->modification(), nullptr, size, array); } else if (c->isString()) { - Variable vi(newType_String(), tp, current_element(it)->modification(), nullptr, size, array); - _class->insert(current_element(it)->name(), vi, t); + new_var = Variable(newType_String(), tp, current_element(it)->modification(), nullptr, size, array); + } else if ((tp & TP_DISCRETE) && c->isInteger()) { + new_var = Variable(newType_Integer(), tp, current_element(it)->modification(), nullptr, size, array); } else { - Variable vi(newType_Real(), tp, current_element(it)->modification(), nullptr, size, array); - _class->insert(current_element(it)->name(), vi, t); + new_var = Variable(newType_Real(), tp, current_element(it)->modification(), nullptr, size, array); } + _class->insert(current_element(it)->name(), new_var, t); } } } else if (e == ELCLASS) { diff --git a/src/mmoc/ir/statement.cpp b/src/mmoc/ir/statement.cpp index 493e7734..f0fe060a 100644 --- a/src/mmoc/ir/statement.cpp +++ b/src/mmoc/ir/statement.cpp @@ -18,14 +18,14 @@ ******************************************************************************/ #include -#include "../ast/ast_builder.h" -#include "../ast/statement.h" -#include "../util/model_config.h" -#include "../util/util.h" -#include "../util/process_statement.h" -#include "../util/visitors/called_functions.h" -#include "helpers.h" -#include "statement.h" +#include +#include +#include +#include +#include +#include +#include +#include namespace MicroModelica { using namespace Util; @@ -268,6 +268,15 @@ ExpressionList Statement::assignments(STATEMENT::AssignTerm asg) const return ExpressionList(); } +bool Statement::autonomous() const +{ + bool autonomous = true; + for (const auto& exp : _rhs_assignments) { + autonomous = autonomous && exp.autonomous(); + } + return autonomous; +} + std::ostream& operator<<(std::ostream& out, const Statement& s) { return out << s.print(); } } // namespace IR } // namespace MicroModelica diff --git a/src/mmoc/ir/statement.h b/src/mmoc/ir/statement.h index def08c55..3319d86c 100644 --- a/src/mmoc/ir/statement.h +++ b/src/mmoc/ir/statement.h @@ -17,12 +17,11 @@ ******************************************************************************/ -#ifndef MMO_STATEMENT_H_ -#define MMO_STATEMENT_H_ +#pragma once -#include "../ast/ast_types.h" -#include "../util/table.h" -#include "index.h" +#include +#include +#include namespace MicroModelica { @@ -38,8 +37,7 @@ typedef enum { LHS, RHS, LHS_DISCRETES, LHS_STATES } AssignTerm; class Statement { public: Statement(AST_Statement stm, bool initial = false, const std::string& block = ""); - Statement(AST_Statement stm, Option range, bool initial = false, - const std::string& block = ""); + Statement(AST_Statement stm, Option range, bool initial = false, const std::string& block = ""); Statement() : _stm(nullptr), _range(), _block(), _lhs_assignments(), _rhs_assignments(), _lhs_discretes(), _lhs_states(){}; ~Statement() = default; @@ -59,6 +57,7 @@ class Statement { bool isAssignment() const; bool isForStatement() const; inline Option range() { return _range; }; + bool autonomous() const; protected: void initialize(); @@ -82,5 +81,3 @@ class Statement { typedef ModelTable StatementTable; } // namespace IR } // namespace MicroModelica - -#endif /* MMO_STATEMENT_H_ */ diff --git a/src/mmoc/main.cpp b/src/mmoc/main.cpp index bb802070..62cd4132 100644 --- a/src/mmoc/main.cpp +++ b/src/mmoc/main.cpp @@ -89,7 +89,7 @@ void usage() void version() { - cout << "MicroModelica C Compiler 4.3.0" << endl; + cout << "MicroModelica C Compiler 4.4.0" << endl; cout << "License GPLv3+: GNU GPL version 3 or later " << endl; cout << "This is free software: you are free to change and redistribute it." << endl; cout << "There is NO WARRANTY, to the extent permitted by law." << endl; diff --git a/src/mmoc/tests/system/gt_data/adr2D/adr2D.c b/src/mmoc/tests/system/gt_data/adr2D/adr2D.c new file mode 100644 index 00000000..d526ec6f --- /dev/null +++ b/src/mmoc/tests/system/gt_data/adr2D/adr2D.c @@ -0,0 +1,1192 @@ +#include +#include +#include +#include + +#include "adr2D.h" +#include +#include +#include +#include +#include + +void MOD_settings(SD_simulationSettings settings) +{ + settings->debug = 0; + settings->parallel = FALSE; + settings->hybrid = FALSE; + settings->method = 11; +} + +void MOD_definition(double *x, double *d, double *a, double t, double *dx) +{ + int _d1; + int _d2; + int i; + int j; + _der_u(1,1) = -_a*(_u(1,1)-1)/_dx-_a*(_u(1,1)-1)/_dx+_d*(_u(2,1)-2*_u(1,1)+1)/pow(_dx,2)+_d*(_u(1,2)-2*_u(1,1)+1)/pow(_dx,2)+_r*(pow(_u(1,1),2)-pow(_u(1,1),3)); + _der_u(10,10) = -_a*(_u(10,10)-_u(9,10))/_dx-_a*(_u(10,10)-_u(10,9))/_dx+_d*(2*_u(9,10)-2*_u(10,10))/pow(_dx,2)+_d*(2*_u(10,9)-2*_u(10,10))/pow(_dx,2)+_r*(pow(_u(10,10),2)-pow(_u(10,10),3)); + _der_u(1,10) = -_a*(_u(1,10)-1)/_dx-_a*(_u(1,10)-_u(1,9))/_dx+_d*(_u(2,10)-2*_u(1,10)+1)/pow(_dx,2)+_d*(2*_u(1,9)-2*_u(1,10))/pow(_dx,2)+_r*(pow(_u(1,10),2)-pow(_u(1,10),3)); + _der_u(10,1) = -_a*(_u(10,1)-_u(9,1))/_dx-_a*(_u(10,1)-1)/_dx+_d*(2*_u(9,1)-2*_u(10,1))/pow(_dx,2)+_d*(_u(10,2)-2*_u(10,1)+1)/pow(_dx,2)+_r*(pow(_u(10,1),2)-pow(_u(10,1),3)); + for(i = 2; i<=9; i+=1) { + for(j = 2; j<=9; j+=1) { + _der_u(i,j) = -_a*(_u(i,j)-_u(i-1,j))/_dx-_a*(_u(i,j)-_u(i,j-1))/_dx+_d*(_u(i+1,j)-2*_u(i,j)+_u(i-1,j))/pow(_dx,2)+_d*(_u(i,j+1)-2*_u(i,j)+_u(i,j-1))/pow(_dx,2)+_r*(pow(_u(i,j),2)-pow(_u(i,j),3)); + } + } + for(j = 2; j<=9; j+=1) { + _der_u(1,j) = -_a*(_u(1,j)-1)/_dx-_a*(_u(1,j)-_u(1,j-1))/_dx+_d*(_u(2,j)-2*_u(1,j)+1)/pow(_dx,2)+_d*(_u(1,j+1)-2*_u(1,j)+_u(1,j-1))/pow(_dx,2)+_r*(pow(_u(1,j),2)-pow(_u(1,j),3)); + } + for(j = 2; j<=9; j+=1) { + _der_u(10,j) = -_a*(_u(10,j)-_u(9,j))/_dx-_a*(_u(10,j)-_u(10,j-1))/_dx+_d*(2*_u(9,j)-2*_u(1,j))/pow(_dx,2)+_d*(_u(10,j+1)-2*_u(10,j)+_u(10,j-1))/pow(_dx,2)+_r*(pow(_u(10,j),2)-pow(_u(10,j),3)); + } + for(i = 2; i<=9; i+=1) { + _der_u(i,1) = -_a*(_u(i,1)-_u(i-1,1))/_dx-_a*(_u(i,1)-1)/_dx+_d*(_u(i+1,1)-2*_u(i,1)+_u(i-1,1))/pow(_dx,2)+_d*(_u(i,2)-2*_u(i,1)+1)/pow(_dx,2)+_r*(pow(_u(i,1),2)-pow(_u(i,1),3)); + } + for(i = 2; i<=9; i+=1) { + _der_u(i,10) = -_a*(_u(i,10)-_u(i-1,10))/_dx-_a*(_u(i,10)-_u(i,9))/_dx+_d*(_u(i+1,10)-2*_u(i,10)+_u(i-1,10))/pow(_dx,2)+_d*(2*_u(i,9)-2*_u(i,10))/pow(_dx,2)+_r*(pow(_u(i,10),2)-pow(_u(i,10),3)); + } +} + +void MOD_zeroCrossing(int idx, double *x, double *d, double *a, double t, double *zc) +{ +} + +void MOD_handlerPos(int idx, double *x, double *d, double *a, double t) +{ +} + +void MOD_handlerNeg(int idx, double *x, double *d, double *a, double t) +{ +} + +void MOD_output(int idx, double *x, double *d, double *a, double t, double *out) +{ + switch(idx) { + case _eval_out_exp_1: { + _out = _u(2,2); + return; + } + } +} + +void MOD_jacobian(double *x, double *d, double *a, double t, SD_jacMatrices dvdx, double *jac) +{ + int row, row_t, eq_var, c_row, c_row_g; + int col, col_g, col_t; + int x_ind; + double aux; + int _d1; + int _d2; + int _rg_d1; + int _rg_d2; + int i; + int j; + SD_cleanJacMatrices(dvdx); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(1,1); + col = pos(dvdx->df_dx[0]->index[c_row], dvdx->df_dx[0]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[0]->value[c_row][col] += aux; + x_ind = _idx_u(1,2); + col = pos(dvdx->df_dx[0]->index[c_row], dvdx->df_dx[0]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[0]->value[c_row][col] += aux; + x_ind = _idx_u(2,1); + col = pos(dvdx->df_dx[0]->index[c_row], dvdx->df_dx[0]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[0]->value[c_row][col] += aux; + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_8_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (1 <= 1 && 1 <= 1)) { + x_ind = _idx_u(_d1+1,1); + col = pos(dvdx->df_dx[7]->index[c_row], dvdx->df_dx[7]->size[c_row], x_ind); + _apply_usage_eq_8(_d1,1); + aux = 0; + dvdx->df_dx[7]->value[c_row][col] += aux; + } + if((2 <= _d1 && _d1 <= 9) && (1 <= 1 && 1 <= 1)) { + x_ind = _idx_u(_d1,1); + col = pos(dvdx->df_dx[7]->index[c_row], dvdx->df_dx[7]->size[c_row], x_ind); + _apply_usage_eq_8(_d1,1); + aux = 0; + dvdx->df_dx[7]->value[c_row][col] += aux; + } + if((2 <= _d1 && _d1 <= 9) && (2 <= 2 && 2 <= 2)) { + x_ind = _idx_u(_d1,2); + col = pos(dvdx->df_dx[7]->index[c_row], dvdx->df_dx[7]->size[c_row], x_ind); + _apply_usage_eq_8(_d1,1); + aux = 0; + dvdx->df_dx[7]->value[c_row][col] += aux; + } + if((1 <= _d1-1 && _d1-1 <= 8) && (1 <= 1 && 1 <= 1)) { + x_ind = _idx_u(_d1-1,1); + col = pos(dvdx->df_dx[7]->index[c_row], dvdx->df_dx[7]->size[c_row], x_ind); + _apply_usage_eq_8(_d1,1); + aux = 0; + dvdx->df_dx[7]->value[c_row][col] += aux; + } + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_6_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((1 <= 1 && 1 <= 1) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(1,_d2); + col = pos(dvdx->df_dx[5]->index[c_row], dvdx->df_dx[5]->size[c_row], x_ind); + _apply_usage_eq_6(1,_d2); + aux = 0; + dvdx->df_dx[5]->value[c_row][col] += aux; + } + if((1 <= 1 && 1 <= 1) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + x_ind = _idx_u(1,_d2+1); + col = pos(dvdx->df_dx[5]->index[c_row], dvdx->df_dx[5]->size[c_row], x_ind); + _apply_usage_eq_6(1,_d2); + aux = 0; + dvdx->df_dx[5]->value[c_row][col] += aux; + } + if((1 <= 1 && 1 <= 1) && (1 <= _d2-1 && _d2-1 <= 8)) { + x_ind = _idx_u(1,_d2-1); + col = pos(dvdx->df_dx[5]->index[c_row], dvdx->df_dx[5]->size[c_row], x_ind); + _apply_usage_eq_6(1,_d2); + aux = 0; + dvdx->df_dx[5]->value[c_row][col] += aux; + } + if((2 <= 2 && 2 <= 2) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(2,_d2); + col = pos(dvdx->df_dx[5]->index[c_row], dvdx->df_dx[5]->size[c_row], x_ind); + _apply_usage_eq_6(1,_d2); + aux = 0; + dvdx->df_dx[5]->value[c_row][col] += aux; + } + } + for(row = 1; row <= 64; row++) { + c_row = _c_index(row); + _get_eq_5_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(_d1+1,_d2); + col = pos(dvdx->df_dx[4]->index[c_row], dvdx->df_dx[4]->size[c_row], x_ind); + _apply_usage_eq_5(_d1,_d2); + aux = 0; + dvdx->df_dx[4]->value[c_row][col] += aux; + } + if((2 <= _d1 && _d1 <= 9) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(_d1,_d2); + col = pos(dvdx->df_dx[4]->index[c_row], dvdx->df_dx[4]->size[c_row], x_ind); + _apply_usage_eq_5(_d1,_d2); + aux = 0; + dvdx->df_dx[4]->value[c_row][col] += aux; + } + if((2 <= _d1 && _d1 <= 9) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + x_ind = _idx_u(_d1,_d2+1); + col = pos(dvdx->df_dx[4]->index[c_row], dvdx->df_dx[4]->size[c_row], x_ind); + _apply_usage_eq_5(_d1,_d2); + aux = 0; + dvdx->df_dx[4]->value[c_row][col] += aux; + } + if((2 <= _d1 && _d1 <= 9) && (1 <= _d2-1 && _d2-1 <= 8)) { + x_ind = _idx_u(_d1,_d2-1); + col = pos(dvdx->df_dx[4]->index[c_row], dvdx->df_dx[4]->size[c_row], x_ind); + _apply_usage_eq_5(_d1,_d2); + aux = 0; + dvdx->df_dx[4]->value[c_row][col] += aux; + } + if((1 <= _d1-1 && _d1-1 <= 8) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(_d1-1,_d2); + col = pos(dvdx->df_dx[4]->index[c_row], dvdx->df_dx[4]->size[c_row], x_ind); + _apply_usage_eq_5(_d1,_d2); + aux = 0; + dvdx->df_dx[4]->value[c_row][col] += aux; + } + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(10,1); + col = pos(dvdx->df_dx[3]->index[c_row], dvdx->df_dx[3]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[3]->value[c_row][col] += aux; + x_ind = _idx_u(10,2); + col = pos(dvdx->df_dx[3]->index[c_row], dvdx->df_dx[3]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[3]->value[c_row][col] += aux; + x_ind = _idx_u(9,1); + col = pos(dvdx->df_dx[3]->index[c_row], dvdx->df_dx[3]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[3]->value[c_row][col] += aux; + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_7_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((1 <= 1 && 1 <= 1) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(1,_d2); + col = pos(dvdx->df_dx[6]->index[c_row], dvdx->df_dx[6]->size[c_row], x_ind); + _apply_usage_eq_7(10,_d2); + aux = 0; + dvdx->df_dx[6]->value[c_row][col] += aux; + } + if((10 <= 10 && 10 <= 10) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(10,_d2); + col = pos(dvdx->df_dx[6]->index[c_row], dvdx->df_dx[6]->size[c_row], x_ind); + _apply_usage_eq_7(10,_d2); + aux = 0; + dvdx->df_dx[6]->value[c_row][col] += aux; + } + if((10 <= 10 && 10 <= 10) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + x_ind = _idx_u(10,_d2+1); + col = pos(dvdx->df_dx[6]->index[c_row], dvdx->df_dx[6]->size[c_row], x_ind); + _apply_usage_eq_7(10,_d2); + aux = 0; + dvdx->df_dx[6]->value[c_row][col] += aux; + } + if((10 <= 10 && 10 <= 10) && (1 <= _d2-1 && _d2-1 <= 8)) { + x_ind = _idx_u(10,_d2-1); + col = pos(dvdx->df_dx[6]->index[c_row], dvdx->df_dx[6]->size[c_row], x_ind); + _apply_usage_eq_7(10,_d2); + aux = 0; + dvdx->df_dx[6]->value[c_row][col] += aux; + } + if((9 <= 9 && 9 <= 9) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(9,_d2); + col = pos(dvdx->df_dx[6]->index[c_row], dvdx->df_dx[6]->size[c_row], x_ind); + _apply_usage_eq_7(10,_d2); + aux = 0; + dvdx->df_dx[6]->value[c_row][col] += aux; + } + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(1,10); + col = pos(dvdx->df_dx[2]->index[c_row], dvdx->df_dx[2]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[2]->value[c_row][col] += aux; + x_ind = _idx_u(1,9); + col = pos(dvdx->df_dx[2]->index[c_row], dvdx->df_dx[2]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[2]->value[c_row][col] += aux; + x_ind = _idx_u(2,10); + col = pos(dvdx->df_dx[2]->index[c_row], dvdx->df_dx[2]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[2]->value[c_row][col] += aux; + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_9_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (10 <= 10 && 10 <= 10)) { + x_ind = _idx_u(_d1+1,10); + col = pos(dvdx->df_dx[8]->index[c_row], dvdx->df_dx[8]->size[c_row], x_ind); + _apply_usage_eq_9(_d1,10); + aux = 0; + dvdx->df_dx[8]->value[c_row][col] += aux; + } + if((2 <= _d1 && _d1 <= 9) && (10 <= 10 && 10 <= 10)) { + x_ind = _idx_u(_d1,10); + col = pos(dvdx->df_dx[8]->index[c_row], dvdx->df_dx[8]->size[c_row], x_ind); + _apply_usage_eq_9(_d1,10); + aux = 0; + dvdx->df_dx[8]->value[c_row][col] += aux; + } + if((2 <= _d1 && _d1 <= 9) && (9 <= 9 && 9 <= 9)) { + x_ind = _idx_u(_d1,9); + col = pos(dvdx->df_dx[8]->index[c_row], dvdx->df_dx[8]->size[c_row], x_ind); + _apply_usage_eq_9(_d1,10); + aux = 0; + dvdx->df_dx[8]->value[c_row][col] += aux; + } + if((1 <= _d1-1 && _d1-1 <= 8) && (10 <= 10 && 10 <= 10)) { + x_ind = _idx_u(_d1-1,10); + col = pos(dvdx->df_dx[8]->index[c_row], dvdx->df_dx[8]->size[c_row], x_ind); + _apply_usage_eq_9(_d1,10); + aux = 0; + dvdx->df_dx[8]->value[c_row][col] += aux; + } + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(10,10); + col = pos(dvdx->df_dx[1]->index[c_row], dvdx->df_dx[1]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[1]->value[c_row][col] += aux; + x_ind = _idx_u(10,9); + col = pos(dvdx->df_dx[1]->index[c_row], dvdx->df_dx[1]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[1]->value[c_row][col] += aux; + x_ind = _idx_u(9,10); + col = pos(dvdx->df_dx[1]->index[c_row], dvdx->df_dx[1]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[1]->value[c_row][col] += aux; + } + // Assign Jacobian Matrix values for equation: 0 + for (row = 0; row < 1; row++) { + for (col = 0; col < dvdx->df_dx[0]->size[row]; col++) { + row_t = dvdx->df_dx[0]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[0]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 7 + for (row = 0; row < 8; row++) { + for (col = 0; col < dvdx->df_dx[7]->size[row]; col++) { + row_t = dvdx->df_dx[7]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[7]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 5 + for (row = 0; row < 8; row++) { + for (col = 0; col < dvdx->df_dx[5]->size[row]; col++) { + row_t = dvdx->df_dx[5]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[5]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 4 + for (row = 0; row < 64; row++) { + for (col = 0; col < dvdx->df_dx[4]->size[row]; col++) { + row_t = dvdx->df_dx[4]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[4]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 3 + for (row = 0; row < 1; row++) { + for (col = 0; col < dvdx->df_dx[3]->size[row]; col++) { + row_t = dvdx->df_dx[3]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[3]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 6 + for (row = 0; row < 8; row++) { + for (col = 0; col < dvdx->df_dx[6]->size[row]; col++) { + row_t = dvdx->df_dx[6]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[6]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 2 + for (row = 0; row < 1; row++) { + for (col = 0; col < dvdx->df_dx[2]->size[row]; col++) { + row_t = dvdx->df_dx[2]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[2]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 8 + for (row = 0; row < 8; row++) { + for (col = 0; col < dvdx->df_dx[8]->size[row]; col++) { + row_t = dvdx->df_dx[8]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[8]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 1 + for (row = 0; row < 1; row++) { + for (col = 0; col < dvdx->df_dx[1]->size[row]; col++) { + row_t = dvdx->df_dx[1]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[1]->value[row][col]); + } + } +} + +void CLC_initializeDataStructs(CLC_simulator simulator) +{ + simulator->data = CLC_Data(100,0,0,0,0,9,0,"adr2D"); + CLC_data modelData = simulator->data; + MODEL_DATA_ACCESS(modelData) + int* states = (int*) malloc(100*sizeof(int)); + int* outputs = (int*) malloc(1*sizeof(int)); + int row, eq_var, c_row; + int x_ind; + int _d1; + int _d2; + int _rg_d1; + int _rg_d2; + int i; + int j; + _a = 1; + _d = 1.000000e-02; + _dx = 10/(double)10; + _r = 1000; + modelData->nSD[_idx_u(1,1)]++; + modelData->nSD[_idx_u(1,10)]++; + modelData->nSD[_idx_u(1,2)]++; + modelData->nSD[_idx_u(1,9)]++; + modelData->nSD[_idx_u(10,1)]++; + modelData->nSD[_idx_u(10,10)]++; + modelData->nSD[_idx_u(10,2)]++; + modelData->nSD[_idx_u(10,9)]++; + modelData->nSD[_idx_u(2,1)]++; + modelData->nSD[_idx_u(2,10)]++; + modelData->nSD[_idx_u(9,1)]++; + modelData->nSD[_idx_u(9,10)]++; + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nSD[_idx_u(_d1+1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nSD[_idx_u(_d1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nSD[_idx_u(_d1,_d2+1)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nSD[_idx_u(_d1,_d2-1)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nSD[_idx_u(_d1-1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(1,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(1,_d1+1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(1,_d1-1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(2,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(1,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(10,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(10,_d1+1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(10,_d1-1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(9,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1+1,1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1,1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1,2)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1-1,1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1+1,10)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1,10)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1,9)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nSD[_idx_u(_d1-1,10)]++; + } + modelData->nDS[_idx_u(1,1)]++; + modelData->nDS[_idx_u(1,10)]++; + modelData->nDS[_idx_u(1,1)]++; + modelData->nDS[_idx_u(1,10)]++; + modelData->nDS[_idx_u(10,1)]++; + modelData->nDS[_idx_u(10,10)]++; + modelData->nDS[_idx_u(10,1)]++; + modelData->nDS[_idx_u(10,10)]++; + modelData->nDS[_idx_u(1,1)]++; + modelData->nDS[_idx_u(1,10)]++; + modelData->nDS[_idx_u(10,1)]++; + modelData->nDS[_idx_u(10,10)]++; + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nDS[_idx_u(_d1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nDS[_idx_u(_d1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nDS[_idx_u(_d1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nDS[_idx_u(_d1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->nDS[_idx_u(_d1,_d2)]++; + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(1,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(1,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(1,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(1,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(10,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(10,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(10,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(10,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(10,_d1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,1)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,10)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,10)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,10)]++; + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->nDS[_idx_u(_d1,10)]++; + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + modelData->jac_matrices->df_dx[0]->size[c_row]++; + modelData->jac_matrices->df_dx[0]->size[c_row]++; + modelData->jac_matrices->df_dx[0]->size[c_row]++; + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_8_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (1 <= 1 && 1 <= 1)) { + modelData->jac_matrices->df_dx[7]->size[c_row]++; + } + if((2 <= _d1 && _d1 <= 9) && (1 <= 1 && 1 <= 1)) { + modelData->jac_matrices->df_dx[7]->size[c_row]++; + } + if((2 <= _d1 && _d1 <= 9) && (2 <= 2 && 2 <= 2)) { + modelData->jac_matrices->df_dx[7]->size[c_row]++; + } + if((1 <= _d1-1 && _d1-1 <= 8) && (1 <= 1 && 1 <= 1)) { + modelData->jac_matrices->df_dx[7]->size[c_row]++; + } + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_6_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((1 <= 1 && 1 <= 1) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[5]->size[c_row]++; + } + if((1 <= 1 && 1 <= 1) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + modelData->jac_matrices->df_dx[5]->size[c_row]++; + } + if((1 <= 1 && 1 <= 1) && (1 <= _d2-1 && _d2-1 <= 8)) { + modelData->jac_matrices->df_dx[5]->size[c_row]++; + } + if((2 <= 2 && 2 <= 2) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[5]->size[c_row]++; + } + } + for(row = 1; row <= 64; row++) { + c_row = _c_index(row); + _get_eq_5_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[4]->size[c_row]++; + } + if((2 <= _d1 && _d1 <= 9) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[4]->size[c_row]++; + } + if((2 <= _d1 && _d1 <= 9) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + modelData->jac_matrices->df_dx[4]->size[c_row]++; + } + if((2 <= _d1 && _d1 <= 9) && (1 <= _d2-1 && _d2-1 <= 8)) { + modelData->jac_matrices->df_dx[4]->size[c_row]++; + } + if((1 <= _d1-1 && _d1-1 <= 8) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[4]->size[c_row]++; + } + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + modelData->jac_matrices->df_dx[3]->size[c_row]++; + modelData->jac_matrices->df_dx[3]->size[c_row]++; + modelData->jac_matrices->df_dx[3]->size[c_row]++; + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_7_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((1 <= 1 && 1 <= 1) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[6]->size[c_row]++; + } + if((10 <= 10 && 10 <= 10) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[6]->size[c_row]++; + } + if((10 <= 10 && 10 <= 10) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + modelData->jac_matrices->df_dx[6]->size[c_row]++; + } + if((10 <= 10 && 10 <= 10) && (1 <= _d2-1 && _d2-1 <= 8)) { + modelData->jac_matrices->df_dx[6]->size[c_row]++; + } + if((9 <= 9 && 9 <= 9) && (2 <= _d2 && _d2 <= 9)) { + modelData->jac_matrices->df_dx[6]->size[c_row]++; + } + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + modelData->jac_matrices->df_dx[2]->size[c_row]++; + modelData->jac_matrices->df_dx[2]->size[c_row]++; + modelData->jac_matrices->df_dx[2]->size[c_row]++; + } + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_9_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (10 <= 10 && 10 <= 10)) { + modelData->jac_matrices->df_dx[8]->size[c_row]++; + } + if((2 <= _d1 && _d1 <= 9) && (10 <= 10 && 10 <= 10)) { + modelData->jac_matrices->df_dx[8]->size[c_row]++; + } + if((2 <= _d1 && _d1 <= 9) && (9 <= 9 && 9 <= 9)) { + modelData->jac_matrices->df_dx[8]->size[c_row]++; + } + if((1 <= _d1-1 && _d1-1 <= 8) && (10 <= 10 && 10 <= 10)) { + modelData->jac_matrices->df_dx[8]->size[c_row]++; + } + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + modelData->jac_matrices->df_dx[1]->size[c_row]++; + modelData->jac_matrices->df_dx[1]->size[c_row]++; + modelData->jac_matrices->df_dx[1]->size[c_row]++; + } + CLC_allocDataMatrix(modelData); + cleanVector(states, 0, 100); + modelData->SD[_idx_u(1,1)][states[_idx_u(1,1)]++] = _idx_u(1,1); + modelData->SD[_idx_u(1,10)][states[_idx_u(1,10)]++] = _idx_u(1,10); + modelData->SD[_idx_u(1,2)][states[_idx_u(1,2)]++] = _idx_u(1,1); + modelData->SD[_idx_u(1,9)][states[_idx_u(1,9)]++] = _idx_u(1,10); + modelData->SD[_idx_u(10,1)][states[_idx_u(10,1)]++] = _idx_u(10,1); + modelData->SD[_idx_u(10,10)][states[_idx_u(10,10)]++] = _idx_u(10,10); + modelData->SD[_idx_u(10,2)][states[_idx_u(10,2)]++] = _idx_u(10,1); + modelData->SD[_idx_u(10,9)][states[_idx_u(10,9)]++] = _idx_u(10,10); + modelData->SD[_idx_u(2,1)][states[_idx_u(2,1)]++] = _idx_u(1,1); + modelData->SD[_idx_u(2,10)][states[_idx_u(2,10)]++] = _idx_u(1,10); + modelData->SD[_idx_u(9,1)][states[_idx_u(9,1)]++] = _idx_u(10,1); + modelData->SD[_idx_u(9,10)][states[_idx_u(9,10)]++] = _idx_u(10,10); + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->SD[_idx_u(_d1+1,_d2)][states[_idx_u(_d1+1,_d2)]++] = _idx_u(_d1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->SD[_idx_u(_d1,_d2)][states[_idx_u(_d1,_d2)]++] = _idx_u(_d1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->SD[_idx_u(_d1,_d2+1)][states[_idx_u(_d1,_d2+1)]++] = _idx_u(_d1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->SD[_idx_u(_d1,_d2-1)][states[_idx_u(_d1,_d2-1)]++] = _idx_u(_d1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->SD[_idx_u(_d1-1,_d2)][states[_idx_u(_d1-1,_d2)]++] = _idx_u(_d1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(1,_d1)][states[_idx_u(1,_d1)]++] = _idx_u(1,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(1,_d1+1)][states[_idx_u(1,_d1+1)]++] = _idx_u(1,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(1,_d1-1)][states[_idx_u(1,_d1-1)]++] = _idx_u(1,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(2,_d1)][states[_idx_u(2,_d1)]++] = _idx_u(1,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(1,_d1)][states[_idx_u(1,_d1)]++] = _idx_u(10,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(10,_d1)][states[_idx_u(10,_d1)]++] = _idx_u(10,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(10,_d1+1)][states[_idx_u(10,_d1+1)]++] = _idx_u(10,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(10,_d1-1)][states[_idx_u(10,_d1-1)]++] = _idx_u(10,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(9,_d1)][states[_idx_u(9,_d1)]++] = _idx_u(10,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1+1,1)][states[_idx_u(_d1+1,1)]++] = _idx_u(_d1,1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1,1)][states[_idx_u(_d1,1)]++] = _idx_u(_d1,1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1,2)][states[_idx_u(_d1,2)]++] = _idx_u(_d1,1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1-1,1)][states[_idx_u(_d1-1,1)]++] = _idx_u(_d1,1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1+1,10)][states[_idx_u(_d1+1,10)]++] = _idx_u(_d1,10); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1,10)][states[_idx_u(_d1,10)]++] = _idx_u(_d1,10); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1,9)][states[_idx_u(_d1,9)]++] = _idx_u(_d1,10); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->SD[_idx_u(_d1-1,10)][states[_idx_u(_d1-1,10)]++] = _idx_u(_d1,10); + } + cleanVector(states, 0, 100); + modelData->DS[_idx_u(1,1)][states[_idx_u(1,1)]++] = _idx_u(1,1); + modelData->DS[_idx_u(1,10)][states[_idx_u(1,10)]++] = _idx_u(1,10); + modelData->DS[_idx_u(1,1)][states[_idx_u(1,1)]++] = _idx_u(1,2); + modelData->DS[_idx_u(1,10)][states[_idx_u(1,10)]++] = _idx_u(1,9); + modelData->DS[_idx_u(10,1)][states[_idx_u(10,1)]++] = _idx_u(10,1); + modelData->DS[_idx_u(10,10)][states[_idx_u(10,10)]++] = _idx_u(10,10); + modelData->DS[_idx_u(10,1)][states[_idx_u(10,1)]++] = _idx_u(10,2); + modelData->DS[_idx_u(10,10)][states[_idx_u(10,10)]++] = _idx_u(10,9); + modelData->DS[_idx_u(1,1)][states[_idx_u(1,1)]++] = _idx_u(2,1); + modelData->DS[_idx_u(1,10)][states[_idx_u(1,10)]++] = _idx_u(2,10); + modelData->DS[_idx_u(10,1)][states[_idx_u(10,1)]++] = _idx_u(9,1); + modelData->DS[_idx_u(10,10)][states[_idx_u(10,10)]++] = _idx_u(9,10); + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->DS[_idx_u(_d1,_d2)][states[_idx_u(_d1,_d2)]++] = _idx_u(_d1+1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->DS[_idx_u(_d1,_d2)][states[_idx_u(_d1,_d2)]++] = _idx_u(_d1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->DS[_idx_u(_d1,_d2)][states[_idx_u(_d1,_d2)]++] = _idx_u(_d1,_d2+1); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->DS[_idx_u(_d1,_d2)][states[_idx_u(_d1,_d2)]++] = _idx_u(_d1,_d2-1); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + for(_d2 = 2; _d2<=9; _d2+=1) { + modelData->DS[_idx_u(_d1,_d2)][states[_idx_u(_d1,_d2)]++] = _idx_u(_d1-1,_d2); + } + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(1,_d1)][states[_idx_u(1,_d1)]++] = _idx_u(1,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(1,_d1)][states[_idx_u(1,_d1)]++] = _idx_u(1,_d1+1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(1,_d1)][states[_idx_u(1,_d1)]++] = _idx_u(1,_d1-1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(1,_d1)][states[_idx_u(1,_d1)]++] = _idx_u(2,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(10,_d1)][states[_idx_u(10,_d1)]++] = _idx_u(1,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(10,_d1)][states[_idx_u(10,_d1)]++] = _idx_u(10,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(10,_d1)][states[_idx_u(10,_d1)]++] = _idx_u(10,_d1+1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(10,_d1)][states[_idx_u(10,_d1)]++] = _idx_u(10,_d1-1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(10,_d1)][states[_idx_u(10,_d1)]++] = _idx_u(9,_d1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,1)][states[_idx_u(_d1,1)]++] = _idx_u(_d1+1,1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,1)][states[_idx_u(_d1,1)]++] = _idx_u(_d1,1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,1)][states[_idx_u(_d1,1)]++] = _idx_u(_d1,2); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,1)][states[_idx_u(_d1,1)]++] = _idx_u(_d1-1,1); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,10)][states[_idx_u(_d1,10)]++] = _idx_u(_d1+1,10); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,10)][states[_idx_u(_d1,10)]++] = _idx_u(_d1,10); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,10)][states[_idx_u(_d1,10)]++] = _idx_u(_d1,9); + } + for(_d1 = 2; _d1<=9; _d1+=1) { + modelData->DS[_idx_u(_d1,10)][states[_idx_u(_d1,10)]++] = _idx_u(_d1-1,10); + } + cleanVector(states, 0, 100); + cleanVector(states, 0, 100); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(1,1); + if(in(modelData->jac_matrices->df_dx[0]->index[c_row],modelData->jac_matrices->df_dx[0]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[0]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[0]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(1,2); + if(in(modelData->jac_matrices->df_dx[0]->index[c_row],modelData->jac_matrices->df_dx[0]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[0]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[0]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(2,1); + if(in(modelData->jac_matrices->df_dx[0]->index[c_row],modelData->jac_matrices->df_dx[0]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[0]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[0]->index[c_row][states[c_row]++] = x_ind; + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_8_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (1 <= 1 && 1 <= 1)) { + x_ind = _idx_u(_d1+1,1); + if(in(modelData->jac_matrices->df_dx[7]->index[c_row],modelData->jac_matrices->df_dx[7]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[7]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[7]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= _d1 && _d1 <= 9) && (1 <= 1 && 1 <= 1)) { + x_ind = _idx_u(_d1,1); + if(in(modelData->jac_matrices->df_dx[7]->index[c_row],modelData->jac_matrices->df_dx[7]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[7]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[7]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= _d1 && _d1 <= 9) && (2 <= 2 && 2 <= 2)) { + x_ind = _idx_u(_d1,2); + if(in(modelData->jac_matrices->df_dx[7]->index[c_row],modelData->jac_matrices->df_dx[7]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[7]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[7]->index[c_row][states[c_row]++] = x_ind; + } + } + if((1 <= _d1-1 && _d1-1 <= 8) && (1 <= 1 && 1 <= 1)) { + x_ind = _idx_u(_d1-1,1); + if(in(modelData->jac_matrices->df_dx[7]->index[c_row],modelData->jac_matrices->df_dx[7]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[7]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[7]->index[c_row][states[c_row]++] = x_ind; + } + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_6_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((1 <= 1 && 1 <= 1) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(1,_d2); + if(in(modelData->jac_matrices->df_dx[5]->index[c_row],modelData->jac_matrices->df_dx[5]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[5]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[5]->index[c_row][states[c_row]++] = x_ind; + } + } + if((1 <= 1 && 1 <= 1) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + x_ind = _idx_u(1,_d2+1); + if(in(modelData->jac_matrices->df_dx[5]->index[c_row],modelData->jac_matrices->df_dx[5]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[5]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[5]->index[c_row][states[c_row]++] = x_ind; + } + } + if((1 <= 1 && 1 <= 1) && (1 <= _d2-1 && _d2-1 <= 8)) { + x_ind = _idx_u(1,_d2-1); + if(in(modelData->jac_matrices->df_dx[5]->index[c_row],modelData->jac_matrices->df_dx[5]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[5]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[5]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= 2 && 2 <= 2) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(2,_d2); + if(in(modelData->jac_matrices->df_dx[5]->index[c_row],modelData->jac_matrices->df_dx[5]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[5]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[5]->index[c_row][states[c_row]++] = x_ind; + } + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 64; row++) { + c_row = _c_index(row); + _get_eq_5_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(_d1+1,_d2); + if(in(modelData->jac_matrices->df_dx[4]->index[c_row],modelData->jac_matrices->df_dx[4]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[4]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[4]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= _d1 && _d1 <= 9) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(_d1,_d2); + if(in(modelData->jac_matrices->df_dx[4]->index[c_row],modelData->jac_matrices->df_dx[4]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[4]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[4]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= _d1 && _d1 <= 9) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + x_ind = _idx_u(_d1,_d2+1); + if(in(modelData->jac_matrices->df_dx[4]->index[c_row],modelData->jac_matrices->df_dx[4]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[4]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[4]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= _d1 && _d1 <= 9) && (1 <= _d2-1 && _d2-1 <= 8)) { + x_ind = _idx_u(_d1,_d2-1); + if(in(modelData->jac_matrices->df_dx[4]->index[c_row],modelData->jac_matrices->df_dx[4]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[4]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[4]->index[c_row][states[c_row]++] = x_ind; + } + } + if((1 <= _d1-1 && _d1-1 <= 8) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(_d1-1,_d2); + if(in(modelData->jac_matrices->df_dx[4]->index[c_row],modelData->jac_matrices->df_dx[4]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[4]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[4]->index[c_row][states[c_row]++] = x_ind; + } + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(10,1); + if(in(modelData->jac_matrices->df_dx[3]->index[c_row],modelData->jac_matrices->df_dx[3]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[3]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[3]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(10,2); + if(in(modelData->jac_matrices->df_dx[3]->index[c_row],modelData->jac_matrices->df_dx[3]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[3]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[3]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(9,1); + if(in(modelData->jac_matrices->df_dx[3]->index[c_row],modelData->jac_matrices->df_dx[3]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[3]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[3]->index[c_row][states[c_row]++] = x_ind; + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_7_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((1 <= 1 && 1 <= 1) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(1,_d2); + if(in(modelData->jac_matrices->df_dx[6]->index[c_row],modelData->jac_matrices->df_dx[6]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[6]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[6]->index[c_row][states[c_row]++] = x_ind; + } + } + if((10 <= 10 && 10 <= 10) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(10,_d2); + if(in(modelData->jac_matrices->df_dx[6]->index[c_row],modelData->jac_matrices->df_dx[6]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[6]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[6]->index[c_row][states[c_row]++] = x_ind; + } + } + if((10 <= 10 && 10 <= 10) && (3 <= _d2 + 1 && _d2 + 1 <= 10)) { + x_ind = _idx_u(10,_d2+1); + if(in(modelData->jac_matrices->df_dx[6]->index[c_row],modelData->jac_matrices->df_dx[6]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[6]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[6]->index[c_row][states[c_row]++] = x_ind; + } + } + if((10 <= 10 && 10 <= 10) && (1 <= _d2-1 && _d2-1 <= 8)) { + x_ind = _idx_u(10,_d2-1); + if(in(modelData->jac_matrices->df_dx[6]->index[c_row],modelData->jac_matrices->df_dx[6]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[6]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[6]->index[c_row][states[c_row]++] = x_ind; + } + } + if((9 <= 9 && 9 <= 9) && (2 <= _d2 && _d2 <= 9)) { + x_ind = _idx_u(9,_d2); + if(in(modelData->jac_matrices->df_dx[6]->index[c_row],modelData->jac_matrices->df_dx[6]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[6]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[6]->index[c_row][states[c_row]++] = x_ind; + } + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(1,10); + if(in(modelData->jac_matrices->df_dx[2]->index[c_row],modelData->jac_matrices->df_dx[2]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[2]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[2]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(1,9); + if(in(modelData->jac_matrices->df_dx[2]->index[c_row],modelData->jac_matrices->df_dx[2]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[2]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[2]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(2,10); + if(in(modelData->jac_matrices->df_dx[2]->index[c_row],modelData->jac_matrices->df_dx[2]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[2]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[2]->index[c_row][states[c_row]++] = x_ind; + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 8; row++) { + c_row = _c_index(row); + _get_eq_9_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + if((3 <= _d1 + 1 && _d1 + 1 <= 10) && (10 <= 10 && 10 <= 10)) { + x_ind = _idx_u(_d1+1,10); + if(in(modelData->jac_matrices->df_dx[8]->index[c_row],modelData->jac_matrices->df_dx[8]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[8]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[8]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= _d1 && _d1 <= 9) && (10 <= 10 && 10 <= 10)) { + x_ind = _idx_u(_d1,10); + if(in(modelData->jac_matrices->df_dx[8]->index[c_row],modelData->jac_matrices->df_dx[8]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[8]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[8]->index[c_row][states[c_row]++] = x_ind; + } + } + if((2 <= _d1 && _d1 <= 9) && (9 <= 9 && 9 <= 9)) { + x_ind = _idx_u(_d1,9); + if(in(modelData->jac_matrices->df_dx[8]->index[c_row],modelData->jac_matrices->df_dx[8]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[8]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[8]->index[c_row][states[c_row]++] = x_ind; + } + } + if((1 <= _d1-1 && _d1-1 <= 8) && (10 <= 10 && 10 <= 10)) { + x_ind = _idx_u(_d1-1,10); + if(in(modelData->jac_matrices->df_dx[8]->index[c_row],modelData->jac_matrices->df_dx[8]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[8]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[8]->index[c_row][states[c_row]++] = x_ind; + } + } + } + cleanVector(states, 0, 100); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_u(10,10); + if(in(modelData->jac_matrices->df_dx[1]->index[c_row],modelData->jac_matrices->df_dx[1]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[1]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[1]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(10,9); + if(in(modelData->jac_matrices->df_dx[1]->index[c_row],modelData->jac_matrices->df_dx[1]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[1]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[1]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_u(9,10); + if(in(modelData->jac_matrices->df_dx[1]->index[c_row],modelData->jac_matrices->df_dx[1]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[1]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[1]->index[c_row][states[c_row]++] = x_ind; + } + } + SD_setupJacMatrices(modelData->jac_matrices); + simulator->output = SD_Output("adr2D",1,0,100,NULL,0,0,CI_Step,SD_Memory,MOD_output); + SD_output modelOutput = simulator->output; + modelOutput->nOS[_idx_out_exp_1]++; + modelOutput->nSO[_idx_u(2,2)]++; + SD_allocOutputMatrix(modelOutput, 100, 0); + sprintf(modelOutput->variable[_idx_out_exp_1].name, "u[2,2]"); + cleanVector(outputs, 0, 1); + modelOutput->OS[_idx_out_exp_1][outputs[_idx_out_exp_1]++] = _idx_u(2,2); + cleanVector(states, 0, 100); + modelOutput->SO[_idx_u(2,2)][states[_idx_u(2,2)]++] = _idx_out_exp_1; + simulator->model = CLC_Model(MOD_definition, MOD_zeroCrossing, MOD_handlerPos, MOD_handlerNeg, MOD_jacobian); + free(states); + free(outputs); +} + +void QSS_initializeDataStructs(QSS_simulator simulator) +{ +} + diff --git a/src/mmoc/tests/system/gt_data/adr2D/adr2D.h b/src/mmoc/tests/system/gt_data/adr2D/adr2D.h new file mode 100644 index 00000000..2a908fe1 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/adr2D/adr2D.h @@ -0,0 +1,110 @@ +// Model data access macro. + +#define MODEL_DATA_ACCESS(m) \ + double* x = m->x; + +// Model Variables Macros + +// Macros definition for variable: _out_exp_1 +#define _idx_out_exp_1 0 +#define _eval_out_exp_1 0 + +// Macros definition for variable: a +#define _a __PAR__a + +// Macros definition for variable: d +#define _d __PAR__d + +// Macros definition for variable: dx +#define _dx __PAR__dx + +// Macros definition for variable: r +#define _r __PAR__r + +// Macros definition for variable: u +#define _idx_u(d1,d2) ((d1-1)*10+(d2-1)) +#define _u(d1,d2) x[_idx_u(d1,d2)] +#define _init_u(d1,d2) x[_idx_u(d1,d2)] +#define _eval_u(d1,d2) ((d1-1)*10+(d2-1)) +#define _is_var_u(idx) idx >= 0 && idx < 100 +#define _get_u_idxs(idx)\ + _d1 = ((idx)/10)+ 1;\ + _d2 = ((idx)%10)+ 1; + + +// Model Parameters Declaration + +// Macro for parameter: a +double __PAR__a; +// Macro for parameter: d +double __PAR__d; +// Macro for parameter: dx +double __PAR__dx; +// Macro for parameter: r +double __PAR__r; + +// Derivative Equations Macros + +// Macros for equation: 1 + +// Macros for equation: 2 + +// Macros for equation: 3 + +// Macros for equation: 4 + +// Macros for equation: 5 +#define _apply_usage_eq_5(_d1,_d2) \ + i = _d1;\ + j = _d2; +#define _get_eq_5_var_idxs(row, var)\ + _rg_d1 = 1 + ((row-1)/8)+ 1;\ + _rg_d2 = 1 + ((row-1)%8)+ 1;\ + var = _idx_u(_rg_d1,_rg_d2); +// Macros for equation: 6 +#define _apply_usage_eq_6(_d1,_d2) \ + j = _d2; +#define _get_eq_6_var_idxs(row, var)\ + _rg_d2 = 1 + (row-1)+ 1;\ + _rg_d1 = 1;\ + var = _idx_u(_rg_d1,_rg_d2); +// Macros for equation: 7 +#define _apply_usage_eq_7(_d1,_d2) \ + j = _d2; +#define _get_eq_7_var_idxs(row, var)\ + _rg_d2 = 1 + (row-1)+ 1;\ + _rg_d1 = 10;\ + var = _idx_u(_rg_d1,_rg_d2); +// Macros for equation: 8 +#define _apply_usage_eq_8(_d1,_d2) \ + i = _d1; +#define _get_eq_8_var_idxs(row, var)\ + _rg_d1 = 1 + (row-1)+ 1;\ + _rg_d2 = 1;\ + var = _idx_u(_rg_d1,_rg_d2); +// Macros for equation: 9 +#define _apply_usage_eq_9(_d1,_d2) \ + i = _d1; +#define _get_eq_9_var_idxs(row, var)\ + _rg_d1 = 1 + (row-1)+ 1;\ + _rg_d2 = 10;\ + var = _idx_u(_rg_d1,_rg_d2); + +// Output Equations Macros + +// Macros for output equation: 1 + +#define _out out[0] + +// Jacobian Macros definition. +#define _assign_jac(r, val) \ + col_t = dvdx->df_dx_t->size[r] + dvdx->df_dx_t->index[r][0]; \ + dvdx->df_dx_t->index[r][0]++; \ + jac[col_t] = val; +#define _c_index(i) (i-1) + +#define _time t + +// Derivative Macros definition. +// Derivative definition for variable: u +#define _der_u(d1,d2) dx[((d1-1)*10+(d2-1))] diff --git a/src/mmoc/tests/system/gt_data/adr2D/adr2D.ini b/src/mmoc/tests/system/gt_data/adr2D/adr2D.ini new file mode 100644 index 00000000..61fa2e12 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/adr2D/adr2D.ini @@ -0,0 +1,15 @@ +minstep=1.00000e-14; +zchyst=1.00000e-12; +derdelta=1.00000e-08; +symdiff=1; +lps=0; +nodesize=10000; +jacobian=1; +it=0.00000e+00; +ft=1.00000e+01; +sol="CVODE_BDF"; +dqmin=(1.00000e-06); +dqrel=(1.00000e-03); +bdf=0; +BDFPartitionDepth=1; +BDFMaxStep=0.00000e+00; diff --git a/src/mmoc/tests/system/gt_data/adr2D/adr2D.mo b/src/mmoc/tests/system/gt_data/adr2D/adr2D.mo new file mode 100644 index 00000000..a9b0c3cc --- /dev/null +++ b/src/mmoc/tests/system/gt_data/adr2D/adr2D.mo @@ -0,0 +1,41 @@ +model adr2D + parameter Real a=1,d=0.01,r=1000; + constant Integer N=10; + parameter Real dx=10/N; + Real u[N,N]; +equation + der(u[1,1])=-a*(u[1,1]-1)/dx-a*(u[1,1]-1)/dx+d*(u[2,1]-2*u[1,1]+1)/dx^2+d*(u[1,2]-2*u[1,1]+1)/dx^2+r*(u[1,1]^2-u[1,1]^3); + der(u[N,N])=-a*(u[N,N]-u[N-1,N])/dx-a*(u[N,N]-u[N,N-1])/dx+d*(2*u[N-1,N]-2*u[N,N])/dx^2+d*(2*u[N,N-1]-2*u[N,N])/dx^2+r*(u[N,N]^2-u[N,N]^3); + der(u[1,N])=-a*(u[1,N]-1)/dx-a*(u[1,N]-u[1,N-1])/dx+d*(u[2,N]-2*u[1,N]+1)/dx^2+d*(2*u[1,N-1]-2*u[1,N])/dx^2+r*(u[1,N]^2-u[1,N]^3); + der(u[N,1])=-a*(u[N,1]-u[N-1,1])/dx-a*(u[N,1]-1)/dx+d*(2*u[N-1,1]-2*u[N,1])/dx^2+d*(u[N,2]-2*u[N,1]+1)/dx^2+r*(u[N,1]^2-u[N,1]^3); + + for i in 2:N-1,j in 2:N-1 loop + der(u[i,j])=-a*(u[i,j]-u[i-1,j])/dx-a*(u[i,j]-u[i,j-1])/dx+d*(u[i+1,j]-2*u[i,j]+u[i-1,j])/dx^2+d*(u[i,j+1]-2*u[i,j]+u[i,j-1])/dx^2+r*(u[i,j]^2-u[i,j]^3); + end for; + for j in 2:N-1 loop + der(u[1,j])=-a*(u[1,j]-1)/dx-a*(u[1,j]-u[1,j-1])/dx+d*(u[2,j]-2*u[1,j]+1)/dx^2+d*(u[1,j+1]-2*u[1,j]+u[1,j-1])/dx^2+r*(u[1,j]^2-u[1,j]^3); + der(u[N,j])=-a*(u[N,j]-u[N-1,j])/dx-a*(u[N,j]-u[N,j-1])/dx+d*(2*u[N-1,j]-2*u[1,j])/dx^2+d*(u[N,j+1]-2*u[N,j]+u[N,j-1])/dx^2+r*(u[N,j]^2-u[N,j]^3); + end for; + for i in 2:N-1 loop + der(u[i,1])=-a*(u[i,1]-u[i-1,1])/dx-a*(u[i,1]-1)/dx+d*(u[i+1,1]-2*u[i,1]+u[i-1,1])/dx^2+d*(u[i,2]-2*u[i,1]+1)/dx^2+r*(u[i,1]^2-u[i,1]^3); + der(u[i,N])=-a*(u[i,N]-u[i-1,N])/dx-a*(u[i,N]-u[i,N-1])/dx+d*(u[i+1,N]-2*u[i,N]+u[i-1,N])/dx^2+d*(2*u[i,N-1]-2*u[i,N])/dx^2+r*(u[i,N]^2-u[i,N]^3); +end for; + annotation( + + experiment( + MMO_Description="", + MMO_Solver=CVODE_BDF, + MMO_PartitionMethod=Scotch, + MMO_LPS=4, + MMO_DT_Synch=SD_DT_Fixed, + MMO_DT_Min=1e-3, + MMO_Output={u[2,2]}, + Jacobian=Dense, + MMO_BDF_PDepth=1, + MMO_BDF_Max_Step=0, + StartTime=0.0, + StopTime=10, + Tolerance={1e-3}, + AbsTolerance={1e-6} + )); +end adr2D; diff --git a/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.c b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.c new file mode 100644 index 00000000..9bd85a4e --- /dev/null +++ b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.c @@ -0,0 +1,162 @@ +#include +#include +#include +#include + +#include "allow_discrete_integer.h" +#include +#include +#include +#include +#include + +void MOD_settings(SD_simulationSettings settings) +{ + settings->debug = 0; + settings->parallel = FALSE; + settings->hybrid = TRUE; + settings->method = 0; +} + +void MOD_definition(int idx, double *x, double *d, double *a, double t, double *dx) +{ + int _d1; + int i; + if (_is_var_u(idx)) { + _get_u_idxs(idx); + _apply_usage_eq_1(_d1); + if ((i >= 1 && i <= 1000)) { + _der_u(i,0) = _time; + + + } + return; + } +} + +void MOD_zeroCrossing(int idx, double *x, double *d, double *a, double t, double *zc) +{ + switch(idx) { + case _eval_event_1: { + _zc(0) = _time-(0); + + + return; + } + } +} + +void MOD_handlerPos(int idx, double *x, double* q, double *d, double *a, double t) +{ + switch(idx) { + case _eval_event_1: { + _init_u((int)_d,0) = 0; + return; + } + } +} + +void MOD_handlerNeg(int idx, double *x, double* q, double *d, double *a, double t) +{ +} + +void MOD_output(int idx, double *x, double *d, double *a, double t, double *out) +{ +} + +void MOD_jacobian(double *x, double *d, double *a, double t, SD_jacMatrices dvdx, double *jac) +{ + int row, row_t, eq_var, c_row, c_row_g; + int col, col_g, col_t; + int x_ind; + double aux; + int _d1; + int _rg_d1; + int i; + SD_cleanJacMatrices(dvdx); + for(row = 1; row <= 1000; row++) { + c_row = _c_index(row); + _get_eq_1_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + } + // Assign Jacobian Matrix values for equation: 0 + for (row = 0; row < 1000; row++) { + for (col = 0; col < dvdx->df_dx[0]->size[row]; col++) { + row_t = dvdx->df_dx[0]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[0]->value[row][col]); + } + } +} + +void MOD_dependencies(int idx, double *x, double *d, double *a, double t, double *dx, int *map) +{ +} + +void MOD_BDF_definition(double *x, double *d, double *a, double t, double *dx, int *BDFMap, int nBDF) +{ + int idx; + int __bdf_it; + for(__bdf_it = 0; __bdf_it < nBDF; __bdf_it++) { + idx = BDFMap[__bdf_it]; + int _d1; + int i; + if (_is_var_u(idx)) { + _get_u_idxs(idx); + _apply_usage_eq_1(_d1); + if ((i >= 1 && i <= 1000)) { + _eval_dep_u(i,1) = _time; + + + } + continue; + } + } +} + +void QSS_initializeDataStructs(QSS_simulator simulator) +{ + simulator->data = QSS_Data(1000,1,1,1000,0,1,0,"allow_discrete_integer"); + QSS_data modelData = simulator->data; + MODEL_DATA_ACCESS(modelData) + int* states = (int*) malloc(1000*sizeof(int)); + int* discretes = (int*) malloc(1*sizeof(int)); + int* events = (int*) malloc(1*sizeof(int)); + int row, eq_var, c_row; + int x_ind; + int _d1; + int _rg_d1; + int i; + for(row = 1; row <= 1000; row++) { + c_row = _c_index(row); + _get_eq_1_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + } + modelData->event[_idx_event_1].nLHSSt++; + QSS_allocDataMatrix(modelData); + cleanVector(states, 0, 1000); + for(row = 1; row <= 1000; row++) { + c_row = _c_index(row); + _get_eq_1_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + } + cleanVector(events, 0, 1); + modelData->event[_idx_event_1].LHSSt[events[_idx_event_1]++] = _idx_u(0,0); + modelData->event[_idx_event_1].direction = 1; + modelData->event[_idx_event_1].relation = 2; + SD_setupJacMatrices(modelData->jac_matrices); + simulator->time = QSS_Time(1000,1,1000,0,ST_Binary, NULL); + for(i = 1; i<=1000; i+=1) { + modelData->IT[_input_1(i)] = _idx_u(i,0); + } + simulator->output = SD_Output("allow_discrete_integer",0,1,1000,NULL,0,0,CI_Step,SD_Memory,NULL); + SD_output modelOutput = simulator->output; + simulator->model = QSS_Model(MOD_definition, MOD_dependencies, MOD_zeroCrossing, MOD_handlerPos, MOD_handlerNeg, MOD_jacobian, MOD_BDF_definition); + free(states); + free(discretes); + free(events); +} + +void CLC_initializeDataStructs(CLC_simulator simulator) +{ +} + diff --git a/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.h b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.h new file mode 100644 index 00000000..7dbedb9b --- /dev/null +++ b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.h @@ -0,0 +1,66 @@ +// Model data access macro. + +#define MODEL_DATA_ACCESS(m) \ + double* x = m->x; \ + double* d = m->d; + +// Coeff multipliers definition. + +#define COEFF_MULTIPLIER(c) COEFF_MULTIPLIER_##c +#define COEFF_MULTIPLIER_0 1 +#define COEFF_MULTIPLIER_1 1 + +// Model Variables Macros + +// Macros definition for variable: _event_1 +#define _idx_event_1 0 +#define _eval_event_1 0 + +// Macros definition for variable: d +#define _idx_d 0 +#define _d d[_idx_d] + +// Macros definition for variable: u +#define _idx_u(d1,coeff) ((d1-1)) +#define _state_idx_u(d1,coeff) ((d1-1))*2 + coeff +#define _u(d1,coeff) x[_state_idx_u(d1,coeff)] * COEFF_MULTIPLIER(coeff) +#define _init_u(d1,coeff) x[_state_idx_u(d1,coeff)] +#define _q_u(d1,coeff) q[_state_idx_u(d1,coeff)] * COEFF_MULTIPLIER(coeff) +#define _eval_u(d1,coeff) ((d1-1)) +#define _is_var_u(idx) idx >= 0 && idx < 1000 +#define _get_u_idxs(idx)\ + _d1 = (idx)+ 1; +#define _eval_dep_u(d1,coeff) dx[_state_idx_u(d1,coeff)] + + +// Derivative Equations Macros + +// Macros for equation: 1 +#define _apply_usage_eq_1(_d1) \ + i = _d1; +#define _get_eq_1_var_idxs(row, var)\ + _rg_d1 = 0 + (row-1)+ 1;\ + var = _idx_u(_rg_d1,0); + +// Event Macros + +// Macros for event: 1 + +#define _zc(coeff) zc[coeff] + +// Input Matrix Macros + +#define _input_1(i) ((i-1)) + +// Jacobian Macros definition. +#define _assign_jac(r, val) \ + col_t = dvdx->df_dx_t->size[r] + dvdx->df_dx_t->index[r][0]; \ + dvdx->df_dx_t->index[r][0]++; \ + jac[col_t] = val; +#define _c_index(i) (i-1) + +#define _time t + +// Derivative Macros definition. +// Derivative definition for variable: u +#define _der_u(d1,coeff) dx[coeff+1] diff --git a/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.ini b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.ini new file mode 100644 index 00000000..191278e7 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.ini @@ -0,0 +1,15 @@ +minstep=1.00000e-14; +zchyst=1.00000e-12; +derdelta=1.00000e-08; +symdiff=1; +lps=0; +nodesize=10000; +jacobian=1; +it=0.00000e+00; +ft=1.00000e+01; +sol="QSS"; +dqmin=(1.00000e-03); +dqrel=(1.00000e-03); +bdf=0; +BDFPartitionDepth=1; +BDFMaxStep=0.00000e+00; diff --git a/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.mo b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.mo new file mode 100644 index 00000000..62609124 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/allow_discrete_integer/allow_discrete_integer.mo @@ -0,0 +1,30 @@ +model allow_discrete_integer + constant Integer N=1000; + Real u[N]; + discrete Integer d; + +equation + for i in 1:N loop + der(u[i])=time; + end for; + +algorithm + when time > 0 then + reinit(u[d],0); + end when; + annotation( + experiment( + MMO_Description="Use time variable in initialization code.", + + MMO_Solver=QSS, + MMO_PartitionMethod=Metis, + Jacobian=Dense, + MMO_BDF_PDepth=1, + MMO_BDF_Max_Step=0, + MMO_RandomSeed=0, + StartTime=0, + StopTime=10, + Tolerance={1e-3}, + AbsTolerance={1e-3} + )); +end allow_discrete_integer; diff --git a/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.c b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.c new file mode 100644 index 00000000..d86a96ea --- /dev/null +++ b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.c @@ -0,0 +1,144 @@ +#include +#include +#include +#include + +#include "init_code_time.h" +#include +#include +#include +#include +#include + +void MOD_settings(SD_simulationSettings settings) +{ + settings->debug = 0; + settings->parallel = FALSE; + settings->hybrid = FALSE; + settings->method = 0; +} + +void MOD_definition(int idx, double *x, double *d, double *a, double t, double *dx) +{ + int _d1; + int i; + if (_is_var_u(idx)) { + _get_u_idxs(idx); + _apply_usage_eq_1(_d1); + if ((i >= 1 && i <= 1000)) { + _der_u(i,0) = _time; + + + } + return; + } +} + +void MOD_zeroCrossing(int idx, double *x, double *d, double *a, double t, double *zc) +{ +} + +void MOD_handlerPos(int idx, double *x, double* q, double *d, double *a, double t) +{ +} + +void MOD_handlerNeg(int idx, double *x, double* q, double *d, double *a, double t) +{ +} + +void MOD_output(int idx, double *x, double *d, double *a, double t, double *out) +{ +} + +void MOD_jacobian(double *x, double *d, double *a, double t, SD_jacMatrices dvdx, double *jac) +{ + int row, row_t, eq_var, c_row, c_row_g; + int col, col_g, col_t; + int x_ind; + double aux; + int _d1; + int _rg_d1; + int i; + SD_cleanJacMatrices(dvdx); + for(row = 1; row <= 1000; row++) { + c_row = _c_index(row); + _get_eq_1_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + } + // Assign Jacobian Matrix values for equation: 0 + for (row = 0; row < 1000; row++) { + for (col = 0; col < dvdx->df_dx[0]->size[row]; col++) { + row_t = dvdx->df_dx[0]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[0]->value[row][col]); + } + } +} + +void MOD_dependencies(int idx, double *x, double *d, double *a, double t, double *dx, int *map) +{ +} + +void MOD_BDF_definition(double *x, double *d, double *a, double t, double *dx, int *BDFMap, int nBDF) +{ + int idx; + int __bdf_it; + for(__bdf_it = 0; __bdf_it < nBDF; __bdf_it++) { + idx = BDFMap[__bdf_it]; + int _d1; + int i; + if (_is_var_u(idx)) { + _get_u_idxs(idx); + _apply_usage_eq_1(_d1); + if ((i >= 1 && i <= 1000)) { + _eval_dep_u(i,1) = _time; + + + } + continue; + } + } +} + +void QSS_initializeDataStructs(QSS_simulator simulator) +{ + simulator->data = QSS_Data(1000,0,0,1000,0,1,0,"init_code_time"); + QSS_data modelData = simulator->data; + MODEL_DATA_ACCESS(modelData) + int* states = (int*) malloc(1000*sizeof(int)); + int row, eq_var, c_row; + int x_ind; + int _d1; + int _rg_d1; + int i; + int t = 0; + for(i = 1; i<=999; i+=1) { + _init_u(i,0) = _time; + } + _init_u(1000,0) = _time; + for(row = 1; row <= 1000; row++) { + c_row = _c_index(row); + _get_eq_1_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + } + QSS_allocDataMatrix(modelData); + cleanVector(states, 0, 1000); + for(row = 1; row <= 1000; row++) { + c_row = _c_index(row); + _get_eq_1_var_idxs(row, eq_var); + _get_u_idxs(eq_var); + } + SD_setupJacMatrices(modelData->jac_matrices); + simulator->time = QSS_Time(1000,0,1000,0,ST_Binary, NULL); + for(i = 1; i<=1000; i+=1) { + modelData->IT[_input_1(i)] = _idx_u(i,0); + } + simulator->output = SD_Output("init_code_time",0,0,1000,NULL,0,0,CI_Step,SD_Memory,NULL); + SD_output modelOutput = simulator->output; + simulator->model = QSS_Model(MOD_definition, MOD_dependencies, MOD_zeroCrossing, MOD_handlerPos, MOD_handlerNeg, MOD_jacobian, MOD_BDF_definition); + free(states); +} + +void CLC_initializeDataStructs(CLC_simulator simulator) +{ +} + diff --git a/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.h b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.h new file mode 100644 index 00000000..737bb91b --- /dev/null +++ b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.h @@ -0,0 +1,51 @@ +// Model data access macro. + +#define MODEL_DATA_ACCESS(m) \ + double* x = m->x; + +// Coeff multipliers definition. + +#define COEFF_MULTIPLIER(c) COEFF_MULTIPLIER_##c +#define COEFF_MULTIPLIER_0 1 +#define COEFF_MULTIPLIER_1 1 + +// Model Variables Macros + +// Macros definition for variable: u +#define _idx_u(d1,coeff) ((d1-1)) +#define _state_idx_u(d1,coeff) ((d1-1))*2 + coeff +#define _u(d1,coeff) x[_state_idx_u(d1,coeff)] * COEFF_MULTIPLIER(coeff) +#define _init_u(d1,coeff) x[_state_idx_u(d1,coeff)] +#define _q_u(d1,coeff) q[_state_idx_u(d1,coeff)] * COEFF_MULTIPLIER(coeff) +#define _eval_u(d1,coeff) ((d1-1)) +#define _is_var_u(idx) idx >= 0 && idx < 1000 +#define _get_u_idxs(idx)\ + _d1 = (idx)+ 1; +#define _eval_dep_u(d1,coeff) dx[_state_idx_u(d1,coeff)] + + +// Derivative Equations Macros + +// Macros for equation: 1 +#define _apply_usage_eq_1(_d1) \ + i = _d1; +#define _get_eq_1_var_idxs(row, var)\ + _rg_d1 = 0 + (row-1)+ 1;\ + var = _idx_u(_rg_d1,0); + +// Input Matrix Macros + +#define _input_1(i) ((i-1)) + +// Jacobian Macros definition. +#define _assign_jac(r, val) \ + col_t = dvdx->df_dx_t->size[r] + dvdx->df_dx_t->index[r][0]; \ + dvdx->df_dx_t->index[r][0]++; \ + jac[col_t] = val; +#define _c_index(i) (i-1) + +#define _time t + +// Derivative Macros definition. +// Derivative definition for variable: u +#define _der_u(d1,coeff) dx[coeff+1] diff --git a/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.ini b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.ini new file mode 100644 index 00000000..191278e7 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.ini @@ -0,0 +1,15 @@ +minstep=1.00000e-14; +zchyst=1.00000e-12; +derdelta=1.00000e-08; +symdiff=1; +lps=0; +nodesize=10000; +jacobian=1; +it=0.00000e+00; +ft=1.00000e+01; +sol="QSS"; +dqmin=(1.00000e-03); +dqrel=(1.00000e-03); +bdf=0; +BDFPartitionDepth=1; +BDFMaxStep=0.00000e+00; diff --git a/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.mo b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.mo new file mode 100644 index 00000000..9b7d86ce --- /dev/null +++ b/src/mmoc/tests/system/gt_data/init_code_time/init_code_time.mo @@ -0,0 +1,30 @@ +model init_code_time + constant Integer N=1000; + Real u[N]; + +initial algorithm + for i in 1:N-1 loop + u[i]:=time; + end for; + u[N]:= time; + +equation + for i in 1:N loop + der(u[i])=time; + end for; + annotation( + + experiment( + MMO_Description="Use time variable in initialization code.", + MMO_Solver=QSS, + MMO_PartitionMethod=Metis, + Jacobian=Dense, + MMO_BDF_PDepth=1, + MMO_BDF_Max_Step=0, + MMO_RandomSeed=0, + StartTime=0, + StopTime=10, + Tolerance={1e-3}, + AbsTolerance={1e-3} + )); +end init_code_time; diff --git a/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.c b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.c new file mode 100644 index 00000000..f5598637 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.c @@ -0,0 +1,429 @@ +#include +#include +#include +#include + +#include "virus_replication.h" +#include "pkg_math.h" +#include +#include +#include +#include +#include + +void MOD_settings(SD_simulationSettings settings) +{ + settings->debug = 0; + settings->parallel = FALSE; + settings->hybrid = TRUE; + settings->method = 0; + settings->random_seed = 1; +} + +void MOD_definition(int idx, double *x, double *d, double *a, double t, double *dx) +{ + int _d1; + int i; + switch(idx) { + case _eval_I(0): { + _der_I(0) = -_omega*(_I(0)-_mu)+_sigma*_dW/_h; + + + return; + } + case _eval_X(1,0): { + _der_X(1,0) = _I(0)-_k*_X(1,0); + + + return; + } + } + if (_is_var_X(idx)) { + _get_X_idxs(idx); + _apply_usage_eq_3(_d1); + if ((i >= 2 && i <= 10)) { + _der_X(i,0) = _k*_X(i-1,0)-_k*_X(i,0); + + + } + return; + } +} + +void MOD_zeroCrossing(int idx, double *x, double *d, double *a, double t, double *zc) +{ + int _d1; + int i; + if (_is_var_event_1(idx)) { + _get_event_1_idxs(idx); + _apply_usage_event_1(_d1); + if ((i >= 1 && i <= 10000)) { + _zc(0) = _time-(_TEvent(i)-_h); + + + } + return; + } +} + +void MOD_handlerPos(int idx, double *x, double* q, double *d, double *a, double t) +{ + int _d1; + int i; + if (_is_var_event_1(idx)) { + _get_event_1_idxs(idx); + _apply_usage_event_1(_d1); + if ((i >= 1 && i <= 10000)) { + _dW = _dWval(i); + } + return; + } +} + +void MOD_handlerNeg(int idx, double *x, double* q, double *d, double *a, double t) +{ +} + +void MOD_output(int idx, double *x, double *d, double *a, double t, double *out) +{ + int _d1; + if (_is_var_out_exp_1(idx)) { + _get_out_exp_1_idxs(idx); + _apply_usage_out_exp_1(_d1); + if ((_d1 >= 1 && _d1 <= 10)) { + _out = _X(_d1,0); + } + return; + } +} + +void MOD_jacobian(double *x, double *d, double *a, double t, SD_jacMatrices dvdx, double *jac) +{ + int row, row_t, eq_var, c_row, c_row_g; + int col, col_g, col_t; + int x_ind; + double aux; + int _d1; + int _rg_d1; + int i; + SD_cleanJacMatrices(dvdx); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_I(0); + col = pos(dvdx->df_dx[0]->index[c_row], dvdx->df_dx[0]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[0]->value[c_row][col] += aux; + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_I(0); + col = pos(dvdx->df_dx[1]->index[c_row], dvdx->df_dx[1]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[1]->value[c_row][col] += aux; + x_ind = _idx_X(1,0); + col = pos(dvdx->df_dx[1]->index[c_row], dvdx->df_dx[1]->size[c_row], x_ind); + aux = 0; + dvdx->df_dx[1]->value[c_row][col] += aux; + } + for(row = 1; row <= 9; row++) { + c_row = _c_index(row); + _get_eq_3_var_idxs(row, eq_var); + _get_X_idxs(eq_var); + if((2 <= _d1 && _d1 <= 10)) { + x_ind = _idx_X(_d1,0); + col = pos(dvdx->df_dx[2]->index[c_row], dvdx->df_dx[2]->size[c_row], x_ind); + _apply_usage_eq_3(_d1); + aux = 0; + dvdx->df_dx[2]->value[c_row][col] += aux; + } + if((1 <= _d1-1 && _d1-1 <= 9)) { + x_ind = _idx_X(_d1-1,0); + col = pos(dvdx->df_dx[2]->index[c_row], dvdx->df_dx[2]->size[c_row], x_ind); + _apply_usage_eq_3(_d1); + aux = 0; + dvdx->df_dx[2]->value[c_row][col] += aux; + } + } + // Assign Jacobian Matrix values for equation: 0 + for (row = 0; row < 1; row++) { + for (col = 0; col < dvdx->df_dx[0]->size[row]; col++) { + row_t = dvdx->df_dx[0]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[0]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 1 + for (row = 0; row < 1; row++) { + for (col = 0; col < dvdx->df_dx[1]->size[row]; col++) { + row_t = dvdx->df_dx[1]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[1]->value[row][col]); + } + } + // Assign Jacobian Matrix values for equation: 2 + for (row = 0; row < 9; row++) { + for (col = 0; col < dvdx->df_dx[2]->size[row]; col++) { + row_t = dvdx->df_dx[2]->index[row][col]; + _assign_jac(row_t, dvdx->df_dx[2]->value[row][col]); + } + } +} + +void MOD_dependencies(int idx, double *x, double *d, double *a, double t, double *dx, int *map) +{ + int _d1; + int i; + switch(idx) { + case _eval_I(0): { + _eval_dep_I(1) = -_omega*(_I(0)-_mu)+_sigma*_dW/_h; + _eval_dep_X(1,1) = _I(0)-_k*_X(1,0); + break; + } + case _eval_X(1,0): { + _eval_dep_X(1,1) = _I(0)-_k*_X(1,0); + break; + } + } + if (_is_var_X(idx)) { + _get_X_idxs(idx); + _apply_usage_eq_3(_d1); + if ((i >= 2 && i <= 10)) { + _eval_dep_X(i,1) = _k*_X(i-1,0)-_k*_X(i,0); + + } + } + if (_is_var_X(idx)) { + _get_X_idxs(idx); + _apply_usage_eq_3(_d1+1); + if ((i >= 2 && i <= 10)) { + _eval_dep_X(i,1) = _k*_X(i-1,0)-_k*_X(i,0); + + } + } +} + +void MOD_BDF_definition(double *x, double *d, double *a, double t, double *dx, int *BDFMap, int nBDF) +{ + int idx; + int __bdf_it; + for(__bdf_it = 0; __bdf_it < nBDF; __bdf_it++) { + idx = BDFMap[__bdf_it]; + int _d1; + int i; + switch(idx) { + case _eval_I(0): { + _eval_dep_I(1) = -_omega*(_I(0)-_mu)+_sigma*_dW/_h; + + + continue; + } + case _eval_X(1,0): { + _eval_dep_X(1,1) = _I(0)-_k*_X(1,0); + + + continue; + } + } + if (_is_var_X(idx)) { + _get_X_idxs(idx); + _apply_usage_eq_3(_d1); + if ((i >= 2 && i <= 10)) { + _eval_dep_X(i,1) = _k*_X(i-1,0)-_k*_X(i,0); + + + } + continue; + } + } +} + +void QSS_initializeDataStructs(QSS_simulator simulator) +{ + simulator->data = QSS_Data(11,1,10000,0,0,3,0,"virus_replication"); + QSS_data modelData = simulator->data; + MODEL_DATA_ACCESS(modelData) + int* states = (int*) malloc(11*sizeof(int)); + int* discretes = (int*) malloc(1*sizeof(int)); + int* events = (int*) malloc(10000*sizeof(int)); + int* outputs = (int*) malloc(10*sizeof(int)); + int row, eq_var, c_row; + int x_ind; + int _d1; + int _rg_d1; + int i; + _init_I(0) = 0; + _di = 10000001/(double)10000; + _k = 1; + _mu = 1; + _omega = 1; + _sigma = 5.000000e-01; + _tf = 100; + _h = _tf/(double)10000; + _hmin = _tf/(double)10000001; + _W(1) = __math__normal(1); + for(i = 2; i<=10000001; i+=1) { + _W(i) = _W(i-1)+__math__normal(1)*sqrt(_hmin); + } + for(i = 1; i<=10000; i+=1) { + _dWval(i) = _W(i*_di+1)-_W((i-1)*_di+1); + _TEvent(i) = i*_h; + } + _dW = _dWval(1); + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->nSD[_idx_X(_d1,0)]++; + } + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->nSD[_idx_X(_d1-1,0)]++; + } + modelData->nSD[_idx_I(0)]++; + modelData->nSD[_idx_I(0)]++; + modelData->nSD[_idx_X(1,0)]++; + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->nDS[_idx_X(_d1,0)]++; + } + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->nDS[_idx_X(_d1,0)]++; + } + modelData->nDS[_idx_I(0)]++; + modelData->nDS[_idx_X(1,0)]++; + modelData->nDS[_idx_X(1,0)]++; + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + modelData->jac_matrices->df_dx[0]->size[c_row]++; + } + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + modelData->jac_matrices->df_dx[1]->size[c_row]++; + modelData->jac_matrices->df_dx[1]->size[c_row]++; + } + for(row = 1; row <= 9; row++) { + c_row = _c_index(row); + _get_eq_3_var_idxs(row, eq_var); + _get_X_idxs(eq_var); + if((2 <= _d1 && _d1 <= 10)) { + modelData->jac_matrices->df_dx[2]->size[c_row]++; + } + if((1 <= _d1-1 && _d1-1 <= 9)) { + modelData->jac_matrices->df_dx[2]->size[c_row]++; + } + } + for(_d1 = 1; _d1<=10000; _d1+=1) { + modelData->nHD[_idx_event_1(_d1)]++; + } + for(_d1 = 1; _d1<=10000; _d1+=1) { + modelData->event[_idx_event_1(_d1)].nLHSDsc++; + } + QSS_allocDataMatrix(modelData); + cleanVector(states, 0, 11); + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->SD[_idx_X(_d1,0)][states[_idx_X(_d1,0)]++] = _idx_X(_d1,0); + } + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->SD[_idx_X(_d1-1,0)][states[_idx_X(_d1-1,0)]++] = _idx_X(_d1,0); + } + modelData->SD[_idx_I(0)][states[_idx_I(0)]++] = _idx_I(0); + modelData->SD[_idx_I(0)][states[_idx_I(0)]++] = _idx_X(1,0); + modelData->SD[_idx_X(1,0)][states[_idx_X(1,0)]++] = _idx_X(1,0); + cleanVector(states, 0, 11); + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->DS[_idx_X(_d1,0)][states[_idx_X(_d1,0)]++] = _idx_X(_d1,0); + } + for(_d1 = 2; _d1<=10; _d1+=1) { + modelData->DS[_idx_X(_d1,0)][states[_idx_X(_d1,0)]++] = _idx_X(_d1-1,0); + } + modelData->DS[_idx_I(0)][states[_idx_I(0)]++] = _idx_I(0); + modelData->DS[_idx_X(1,0)][states[_idx_X(1,0)]++] = _idx_I(0); + modelData->DS[_idx_X(1,0)][states[_idx_X(1,0)]++] = _idx_X(1,0); + cleanVector(states, 0, 11); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_I(0); + if(in(modelData->jac_matrices->df_dx[0]->index[c_row],modelData->jac_matrices->df_dx[0]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[0]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[0]->index[c_row][states[c_row]++] = x_ind; + } + } + cleanVector(states, 0, 11); + for(row = 1; row <= 1; row++) { + c_row = _c_index(row); + x_ind = _idx_I(0); + if(in(modelData->jac_matrices->df_dx[1]->index[c_row],modelData->jac_matrices->df_dx[1]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[1]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[1]->index[c_row][states[c_row]++] = x_ind; + } + x_ind = _idx_X(1,0); + if(in(modelData->jac_matrices->df_dx[1]->index[c_row],modelData->jac_matrices->df_dx[1]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[1]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[1]->index[c_row][states[c_row]++] = x_ind; + } + } + cleanVector(states, 0, 11); + for(row = 1; row <= 9; row++) { + c_row = _c_index(row); + _get_eq_3_var_idxs(row, eq_var); + _get_X_idxs(eq_var); + if((2 <= _d1 && _d1 <= 10)) { + x_ind = _idx_X(_d1,0); + if(in(modelData->jac_matrices->df_dx[2]->index[c_row],modelData->jac_matrices->df_dx[2]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[2]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[2]->index[c_row][states[c_row]++] = x_ind; + } + } + if((1 <= _d1-1 && _d1-1 <= 9)) { + x_ind = _idx_X(_d1-1,0); + if(in(modelData->jac_matrices->df_dx[2]->index[c_row],modelData->jac_matrices->df_dx[2]->size[c_row], x_ind)){ + modelData->jac_matrices->df_dx[2]->size[c_row]--; + } else { + modelData->jac_matrices->df_dx[2]->index[c_row][states[c_row]++] = x_ind; + } + } + } + cleanVector(events, 0, 10000); + for(_d1 = 1; _d1<=10000; _d1+=1) { + modelData->HD[_idx_event_1(_d1)][events[_idx_event_1(_d1)]++] = _idx_I(0); + } + cleanVector(events, 0, 10000); + for(_d1 = 1; _d1<=10000; _d1+=1) { + modelData->event[_idx_event_1(_d1)].LHSDsc[events[_idx_event_1(_d1)]++] = _idx_dW; + } + for(i = 1; i<=10000; i+=1) { + modelData->event[_idx_event_1(i)].direction = 1; + modelData->event[_idx_event_1(i)].relation = 2; + } + SD_setupJacMatrices(modelData->jac_matrices); + simulator->time = QSS_Time(11,10000,0,0,ST_Binary, NULL); + double period[1]; + period[0] = 0.1; + simulator->output = SD_Output("virus_replication",10,1,11,period,1,0,CI_Sampled,SD_Memory,MOD_output); + SD_output modelOutput = simulator->output; + for(_d1 = 1; _d1<=10; _d1+=1) { + modelOutput->nOS[_idx_out_exp_1(_d1)]++; + } + for(_d1 = 1; _d1<=10; _d1+=1) { + modelOutput->nSO[_idx_X(_d1,0)]++; + } + SD_allocOutputMatrix(modelOutput, 11, 1); + for(_d1 = 1; _d1<=10; _d1+=1) { + sprintf(modelOutput->variable[_idx_out_exp_1(_d1)].name, "X[%d]",_d1); + } + cleanVector(outputs, 0, 10); + for(_d1 = 1; _d1<=10; _d1+=1) { + modelOutput->OS[_idx_out_exp_1(_d1)][outputs[_idx_out_exp_1(_d1)]++] = _idx_X(_d1,0); + } + cleanVector(states, 0, 11); + for(_d1 = 1; _d1<=10; _d1+=1) { + modelOutput->SO[_idx_X(_d1,0)][states[_idx_X(_d1,0)]++] = _idx_out_exp_1(_d1); + } + simulator->model = QSS_Model(MOD_definition, MOD_dependencies, MOD_zeroCrossing, MOD_handlerPos, MOD_handlerNeg, MOD_jacobian, MOD_BDF_definition); + free(states); + free(discretes); + free(events); + free(outputs); +} + +void CLC_initializeDataStructs(CLC_simulator simulator) +{ +} + diff --git a/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.h b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.h new file mode 100644 index 00000000..cf4eb202 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.h @@ -0,0 +1,162 @@ +// Model data access macro. + +#define MODEL_DATA_ACCESS(m) \ + double* x = m->x; \ + double* d = m->d; + +// Coeff multipliers definition. + +#define COEFF_MULTIPLIER(c) COEFF_MULTIPLIER_##c +#define COEFF_MULTIPLIER_0 1 +#define COEFF_MULTIPLIER_1 1 + +// Model Variables Macros + +// Macros definition for variable: I +#define _idx_I(coeff) 0 +#define _state_idx_I(coeff) 0*2 + coeff +#define _I(coeff) x[_state_idx_I(coeff)] * COEFF_MULTIPLIER(coeff) +#define _init_I(coeff) x[_state_idx_I(coeff)] +#define _q_I(coeff) q[_state_idx_I(coeff)] * COEFF_MULTIPLIER(coeff) +#define _eval_I(coeff) 0 +#define _eval_dep_I(coeff) dx[_state_idx_I(coeff)] + +// Macros definition for variable: TEvent +#define _idx_TEvent(d1) ((d1-1)) +#define _TEvent(d1) __PAR__TEvent[_idx_TEvent(d1)] + +// Macros definition for variable: W +#define _idx_W(d1) ((d1-1)) +#define _W(d1) __PAR__W[_idx_W(d1)] + +// Macros definition for variable: X +#define _idx_X(d1,coeff) (1+(d1-1)) +#define _state_idx_X(d1,coeff) (1+(d1-1))*2 + coeff +#define _X(d1,coeff) x[_state_idx_X(d1,coeff)] * COEFF_MULTIPLIER(coeff) +#define _init_X(d1,coeff) x[_state_idx_X(d1,coeff)] +#define _q_X(d1,coeff) q[_state_idx_X(d1,coeff)] * COEFF_MULTIPLIER(coeff) +#define _eval_X(d1,coeff) (1+(d1-1)) +#define _is_var_X(idx) idx >= 1 && idx < 11 +#define _get_X_idxs(idx)\ + _d1 = (idx-1)+ 1; +#define _eval_dep_X(d1,coeff) dx[_state_idx_X(d1,coeff)] + +// Macros definition for variable: _event_1 +#define _idx_event_1(d1) ((d1-1)) +#define _eval_event_1(d1) ((d1-1)) +#define _is_var_event_1(idx) idx >= 0 && idx < 10000 +#define _get_event_1_idxs(idx)\ + _d1 = (idx)+ 1; + +// Macros definition for variable: _out_exp_1 +#define _idx_out_exp_1(d1) ((d1-1)) +#define _eval_out_exp_1(d1) ((d1-1)) +#define _is_var_out_exp_1(idx) idx >= 0 && idx < 10 +#define _get_out_exp_1_idxs(idx)\ + _d1 = (idx)+ 1; + +// Macros definition for variable: dW +#define _idx_dW 0 +#define _dW d[_idx_dW] + +// Macros definition for variable: dWval +#define _idx_dWval(d1) ((d1-1)) +#define _dWval(d1) __PAR__dWval[_idx_dWval(d1)] + +// Macros definition for variable: di +#define _di __PAR__di + +// Macros definition for variable: h +#define _h __PAR__h + +// Macros definition for variable: hmin +#define _hmin __PAR__hmin + +// Macros definition for variable: k +#define _k __PAR__k + +// Macros definition for variable: mu +#define _mu __PAR__mu + +// Macros definition for variable: omega +#define _omega __PAR__omega + +// Macros definition for variable: sigma +#define _sigma __PAR__sigma + +// Macros definition for variable: tf +#define _tf __PAR__tf + + +// Model Parameters Declaration + +// Macro for parameter: TEvent +double __PAR__TEvent[10000]; +// Macro for parameter: W +double __PAR__W[10000001]; +// Macro for parameter: dWval +double __PAR__dWval[10000]; +// Macro for parameter: di +int __PAR__di; +// Macro for parameter: h +double __PAR__h; +// Macro for parameter: hmin +double __PAR__hmin; +// Macro for parameter: k +double __PAR__k; +// Macro for parameter: mu +double __PAR__mu; +// Macro for parameter: omega +double __PAR__omega; +// Macro for parameter: sigma +double __PAR__sigma; +// Macro for parameter: tf +double __PAR__tf; + +// Derivative Equations Macros + +// Macros for equation: 1 + +// Macros for equation: 2 + +// Macros for equation: 3 +#define _apply_usage_eq_3(_d1) \ + i = _d1; +#define _get_eq_3_var_idxs(row, var)\ + _rg_d1 = 1 + (row-1)+ 1;\ + var = _idx_X(_rg_d1,0); + +// Event Macros + +// Macros for event: 1 +#define _apply_usage_event_1(_d1) \ + i = _d1; +#define _get_event_1_var_idxs(row, var)\ + _rg_d1 = 0 + (row-1)+ 1;\ + var = _idx_event_1(_rg_d1); +#define _zc(coeff) zc[coeff] + +// Output Equations Macros + +// Macros for output equation: 1 +#define _apply_usage_out_exp_1(_d1) \ + _d1 = _d1; +#define _get_out_exp_1_var_idxs(row, var)\ + _rg_d1 = 0 + (row-1)+ 1;\ + var = _idx_out_exp_1(_rg_d1); +#define _out out[0] + +// Jacobian Macros definition. +#define _assign_jac(r, val) \ + col_t = dvdx->df_dx_t->size[r] + dvdx->df_dx_t->index[r][0]; \ + dvdx->df_dx_t->index[r][0]++; \ + jac[col_t] = val; +#define _c_index(i) (i-1) + +#define _time t + +// Derivative Macros definition. +// Derivative definition for variable: I +#define _der_I(coeff) dx[coeff+1] +// Derivative definition for variable: X +#define _der_X(d1,coeff) dx[coeff+1] diff --git a/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.ini b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.ini new file mode 100644 index 00000000..eafc40ad --- /dev/null +++ b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.ini @@ -0,0 +1,15 @@ +minstep=1.00000e-14; +zchyst=1.00000e-12; +derdelta=1.00000e-08; +symdiff=1; +lps=0; +nodesize=10000; +jacobian=1; +it=0.00000e+00; +ft=1.00000e+02; +sol="QSS"; +dqmin=(1.00000e-02); +dqrel=(0.00000e+00); +bdf=0; +BDFPartitionDepth=1; +BDFMaxStep=0.00000e+00; diff --git a/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.mo b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.mo new file mode 100644 index 00000000..95faae30 --- /dev/null +++ b/src/mmoc/tests/system/gt_data/virus_replication/virus_replication.mo @@ -0,0 +1,65 @@ +model virus_replication + import math; + constant Integer N=10; +constant Integer M=10000; //number of samples +constant Integer SizeW=10000001; + Real I(start=0), X[N]; // random input , concentration of material in compartment i + parameter Real mu=1, sigma=0.5, omega=1; // mean, noise magnitude , reversion strength of the Ornstein-Uhlenbeck process +parameter Real tf=100; +parameter Real k=1; +parameter Real h(fixed=false); //progression rate of material from one compartment to the nex + discrete Real dW; +parameter Real W[SizeW](each fixed=false); +parameter Real dWval[M](each fixed=false); +parameter Real TEvent[M]; +parameter Integer di=SizeW/M; +parameter Real hmin(fixed=false); + +initial algorithm +h:=tf/M; +hmin:=tf/SizeW; +W[1]:=normal(1); +for i in 2:SizeW loop + W[i]:=W[i-1]+normal(1)*sqrt(hmin); //generate wiener process samples with dt=1e-4 +end for; +for i in 1:M loop + dWval[i]:=W[i*di+1]-W[(i-1)*di+1]; //compute the random increments + TEvent[i]:=i*h; + end for; +dW:=dWval[1]; + +equation + +der(I)=-omega*(I-mu)+sigma*dW/h; +der(X[1]) =I-k*X[1]; + +for i in 2:N loop + der(X[i])=k*X[i-1] - k*X[i]; +end for; + +algorithm + +for i in 1:M loop + when time>TEvent[i]-h then + dW:=dWval[i]; + end when; +end for; + annotation( + + experiment( + MMO_Description="", + MMO_Solver=QSS, + MMO_Period={100/1000}, + MMO_PartitionMethod=Metis, + MMO_Output={X}, + MMO_OutputType=CI_Sampled, + Jacobian=Dense, + MMO_BDF_PDepth=1, + MMO_BDF_Max_Step=0, + MMO_RandomSeed=1, + StartTime=0.0, + StopTime=100, + Tolerance={0}, + AbsTolerance={1e-2} + )); +end virus_replication; diff --git a/src/mmoc/tests/system/models_test.cpp b/src/mmoc/tests/system/models_test.cpp index 525f3180..3b589b11 100644 --- a/src/mmoc/tests/system/models_test.cpp +++ b/src/mmoc/tests/system/models_test.cpp @@ -57,6 +57,7 @@ TEST_P(IModelTests, GenerateCode) } const char* models[] = {"adr", + "adr2D", "advection", "advection2D", "advection2D_LI", @@ -64,6 +65,7 @@ const char* models[] = {"adr", "advectionFlux", "airconds", "aircont", + "allow_discrete_integer", "bball_downstairs", "boost", "BouncingBall", @@ -74,6 +76,7 @@ const char* models[] = {"adr", "burgers", "cuk", "cuk2", + "init_code_time", "interleaved", "inverters", "lc_line", @@ -92,8 +95,8 @@ const char* models[] = {"adr", "testFor", "test_input", "TYSON", - "VIRplanoS"}; - + "VIRplanoS", + "virus_replication"}; INSTANTIATE_TEST_SUITE_P(Models, IModelTests, testing::ValuesIn(models)); /// @} diff --git a/src/mmoc/util/ast_util.cpp b/src/mmoc/util/ast_util.cpp index edafd44a..ca1b4c32 100644 --- a/src/mmoc/util/ast_util.cpp +++ b/src/mmoc/util/ast_util.cpp @@ -130,7 +130,7 @@ bool EqualExp::equalTraverseElement(AST_Expression a, AST_Expression b) case EXPCOMPREF: { AST_Expression_ComponentReference compRefA = a->getAsComponentReference(); Option varInfoA = ModelConfig::instance().lookup(CREF_NAME(compRefA)); - if (varInfoA && varInfoA->type()->getType() == TYARRAY) { + if (varInfoA && varInfoA->type()->getType() == SymbolType::TYARRAY) { return compareArrays(compRefA, b->getAsComponentReference()); } else { return CREF_NAME(a).compare(CREF_NAME(b)) == 0; diff --git a/src/mmoc/util/ast_util.h b/src/mmoc/util/ast_util.h index 46354838..338bcb13 100644 --- a/src/mmoc/util/ast_util.h +++ b/src/mmoc/util/ast_util.h @@ -17,18 +17,17 @@ ******************************************************************************/ -#ifndef AST_UTIL_H_ -#define AST_UTIL_H_ +#pragma once #include -#include "../ast/ast_types.h" -#include "../ast/ast_builder.h" -#include "../ast/expression.h" -#include "../ast/statement.h" -#include "../ast/equation.h" -#include "../ir/index.h" -#include "../ir/event.h" +#include +#include +#include +#include +#include +#include +#include #include "util_types.h" #define IS_CREF(X) ((X)->expressionType() == EXPCOMPREF) @@ -119,12 +118,12 @@ class AST_Expression_Visitor { template class AST_Statement_Visitor { public: - AST_Statement_Visitor(V v, bool lhs = true) : _visitor(v), _lhs(lhs){}; + AST_Statement_Visitor(V v, F c_init, bool lhs = true) : _visitor(v), _lhs(lhs), _c_init(c_init){}; virtual ~AST_Statement_Visitor() = default; F apply(AST_Statement stm) { - F c; + F c = _c_init; switch (stm->statementType()) { case STWHEN: { c = foldTraverse(_visitor.apply(stm->getAsWhen()->condition())); @@ -187,6 +186,7 @@ class AST_Statement_Visitor { private: V _visitor; bool _lhs; + F _c_init; virtual F foldTraverse(R) = 0; virtual F foldTraverse(F, F) = 0; }; @@ -337,5 +337,3 @@ class ReplaceReference : public AST_Expression_Fold { AST_Expression foldTraverseElement(AST_Expression, AST_Expression, BinOpType); AST_Expression foldTraverseElementUMinus(AST_Expression); }; - -#endif /* AST_UTIL_H_ */ diff --git a/src/mmoc/util/model_config.h b/src/mmoc/util/model_config.h index e9ceb94e..c1054ea6 100644 --- a/src/mmoc/util/model_config.h +++ b/src/mmoc/util/model_config.h @@ -85,6 +85,7 @@ class ModelConfig { inline void clearLocalSymbols() { _local_symbols.clear(); }; inline void setLocalInitSymbols() { _init_symbols = true; }; inline void unsetLocalInitSymbols() { _init_symbols = false; }; + inline void setEvents(IR::EventTable events) { _events = events; } inline IR::EventTable events() const { return _events; } inline bool functionOutputs() const { return _function_outputs; } diff --git a/src/mmoc/util/symbol_table.cpp b/src/mmoc/util/symbol_table.cpp index 775e727d..6ee60f23 100644 --- a/src/mmoc/util/symbol_table.cpp +++ b/src/mmoc/util/symbol_table.cpp @@ -37,7 +37,6 @@ namespace Util { Variable::Variable() : _unknown(false), - _discrete(false), _t(nullptr), _tp(TP_CONSTANT), _m(nullptr), @@ -59,7 +58,6 @@ Variable::Variable() Variable::Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c) : _unknown(false), - _discrete(false), _t(t), _tp(tp), _m(m), @@ -80,9 +78,8 @@ Variable::Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c) processModification(); } -Variable::Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c, vector s, bool array) +Variable::Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c, const vector &s, bool array) : _unknown(false), - _discrete(false), _t(t), _tp(tp), _m(m), @@ -105,7 +102,6 @@ Variable::Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c, Variable &Variable::operator=(const Variable &other) { - _discrete = other._discrete; _t = other._t; _tp = other._tp; _m = other._m; @@ -178,9 +174,8 @@ void Variable::setName(string name) { _name = name; } unsigned int Variable::size() { - vector::const_iterator it; unsigned int total = 1; - for (it = _size.begin(); it != _size.end(); it++) { + for (vector::const_iterator it = _size.begin(); it != _size.end(); it++) { total *= *it; } return total; @@ -208,6 +203,17 @@ string Variable::print() const return buffer.str(); } +bool Variable::isDiscreteInteger() const { return (_t->getType() == SymbolType::TYINTEGER) && isDiscrete(); } + +std::string Variable::castOperator() const +{ + string cast_operator; + if (isDiscreteInteger()) { + cast_operator = "(int)"; + } + return cast_operator; +} + ostream &operator<<(ostream &out, const Variable &v) { out << v.print(); @@ -234,7 +240,7 @@ string Variable::initialization() { stringstream buffer; if (hasAssignment() || hasStartModifier() || hasEachModifier()) { - Range range = Range(*this); + auto range = Range(*this); Expression ex(exp()); Expression var = Utils::instance().variableExpression(name(), range); if (hasEachModifier()) { @@ -299,7 +305,7 @@ void VarSymbolTable::insert(VarName name, Variable variable) } } -Option VarSymbolTable::lookup(string name) +Option VarSymbolTable::lookup(const string &name) const { std::map table = map(); Option var = table[name]; @@ -309,7 +315,7 @@ Option VarSymbolTable::lookup(string name) return Option(); } -unsigned int VarSymbolTable::maxDim() const { return _max_dims; } +unsigned long VarSymbolTable::maxDim() const { return _max_dims; } } // namespace Util } // namespace MicroModelica diff --git a/src/mmoc/util/symbol_table.h b/src/mmoc/util/symbol_table.h index 2181d945..b6feb5c0 100644 --- a/src/mmoc/util/symbol_table.h +++ b/src/mmoc/util/symbol_table.h @@ -42,7 +42,7 @@ class Variable { public: Variable(); Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c); - Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c, vector s, bool array); + Variable(Type t, AST_TypePrefix tp, AST_Modification m, AST_Comment c, const vector& s, bool array); Variable& operator=(const Variable& other); bool operator==(const Variable& other); bool operator!=(const Variable& other); @@ -50,7 +50,7 @@ class Variable { typedef enum { State, Algebraic, NotAssigned } RealType; inline void setRealType(RealType type) { _realType = type; }; - inline AST_TypePrefix typePrefix() { return _tp; }; + inline AST_TypePrefix typePrefix() const { return _tp; }; inline AST_Comment comment() { return _comm; }; inline void setComment(AST_Comment c) { _comm = c; }; inline AST_Modification modification() { return _m; }; @@ -67,13 +67,8 @@ class Variable { unsetStartEach(); }; inline bool isParameter() const { return _tp & TP_PARAMETER; }; - inline bool isDiscrete() const { return (_tp & TP_DISCRETE) || _discrete; }; + inline bool isDiscrete() const { return (_tp & TP_DISCRETE); }; inline bool builtIn() const { return _builtin; }; - inline void setDiscrete() - { - _discrete = true; - unsetAssignment(); - }; inline void setBuiltIn() { _builtin = true; }; inline bool isConstant() const { return _tp & TP_CONSTANT; }; inline bool isInput() const { return _tp & TP_INPUT; }; @@ -82,31 +77,31 @@ class Variable { inline bool isEqType() const { return _tp & TP_EQ; }; inline bool isLocal() const { return _tp & TP_LOCAL; }; inline bool isState() const { return _realType == State; }; - inline bool isString() const { return _t->getType() == TYSTRING; }; + inline bool isString() const { return _t->getType() == SymbolType::TYSTRING; }; inline void setState() { unsetAssignment(); }; - inline bool isUnknown() { return _unknown; }; + inline bool isUnknown() const { return _unknown; }; inline void setUnknown() { _unknown = true; }; - inline bool isTime() { return _name.compare("time") == 0; }; + inline bool isTime() const { return _name.compare("time") == 0; }; inline bool isAlgebraic() const { return _realType == Algebraic; }; inline void setValue(int val) { _value = val; }; - inline int value() { return _value; }; + inline int value() const { return _value; }; unsigned int size(); - inline bool hasAssignment() { return _hasAssigment; }; - inline bool hasStartModifier() { return _hasStart; }; - inline bool hasEachModifier() { return _hasEach; }; + inline bool hasAssignment() const { return _hasAssigment; }; + inline bool hasStartModifier() const { return _hasStart; }; + inline bool hasEachModifier() const { return _hasEach; }; inline void setEachModifier(bool each) { _hasEach = each; }; inline string name() const { return _name; }; void setName(string name); inline AST_Expression exp() { return _exp; }; inline bool isArray() const { return _isArray; }; - inline bool isScalar() { return !isArray(); }; + inline bool isScalar() const { return !isArray(); }; friend ostream& operator<<(ostream& os, const Variable& e); inline unsigned int size(int dim) const { return _size[dim]; }; unsigned int rowSize(unsigned int dim) const; - inline unsigned int dimensions() const { return _size.size(); }; + inline unsigned long dimensions() const { return _size.size(); }; std::string declaration(std::string prefix = ""); std::string initialization(); - inline bool hasOffset() { return _hasOffset; }; + inline bool hasOffset() const { return _hasOffset; }; inline void setOffset(int offset) { _offset = offset; @@ -115,9 +110,10 @@ class Variable { inline int offset() const { return _offset; }; inline bool isModelVar() const { return isState() || isDiscrete() || isAlgebraic() || isParameter() || isEqType() || isOutput(); }; std::string print() const; + std::string castOperator() const; friend std::ostream& operator<<(std::ostream& out, const Variable& v); - private: + protected: void processModification(); void unsetAssignment() { _hasAssigment = false; }; inline void unsetStartEach() @@ -125,9 +121,9 @@ class Variable { _hasEach = false; _hasStart = false; }; + bool isDiscreteInteger() const; bool _unknown; - bool _discrete; Type _t; AST_TypePrefix _tp; AST_Modification _m; @@ -157,16 +153,16 @@ class VarSymbolTable : public ModelTable { ~VarSymbolTable() = default; void initialize(TypeSymbolTable tst); void insert(VarName name, Variable variable); - inline bool parameters() { return _parameters; }; - Option lookup(std::string name); - unsigned int maxDim() const; + inline bool parameters() const { return _parameters; }; + Option lookup(const std::string& name) const; + unsigned long maxDim() const; private: bool _parameters; - unsigned int _max_dims; + unsigned long _max_dims; }; -typedef std::list VariableList; +using VariableList = std::list; } // namespace Util } // namespace MicroModelica diff --git a/src/mmoc/util/type.cpp b/src/mmoc/util/type.cpp index 065af537..377215fa 100644 --- a/src/mmoc/util/type.cpp +++ b/src/mmoc/util/type.cpp @@ -21,7 +21,7 @@ #include "type.h" -#include "../ast/ast_builder.h" +#include ostream &operator<<(ostream &os, const Type_ &e) { @@ -35,10 +35,6 @@ ostream &operator<<(ostream &os, const Type &e) return os; } -Type_Real_::Type_Real_() {} - -Type_Real_::~Type_Real_() {} - string Type_Real_::print() const { stringstream ret(stringstream::out); @@ -50,10 +46,6 @@ Type_Real newType_Real() { return new Type_Real_(); } void deleteType_Real(Type_Real m) { delete m; } -Type_Integer_::Type_Integer_() {} - -Type_Integer_::~Type_Integer_() {} - string Type_Integer_::print() const { stringstream ret(stringstream::out); @@ -72,8 +64,6 @@ string Type_Boolean_::print() const return ret.str(); } -Type_String_::~Type_String_() {} - string Type_String_::print() const { stringstream ret(stringstream::out); @@ -91,7 +81,7 @@ string Type_Array_::print() const AST_ExpressionList exls = newAST_ExpressionList(); Type tt = _t; AST_ListPrepend(exls, _dim); - while (tt->getType() == TYARRAY) { + while (tt->getType() == SymbolType::TYARRAY) { AST_ListPrepend(exls, tt->getAsArray()->dimension()); tt = tt->getAsArray()->arrayOf(); } @@ -107,8 +97,6 @@ string Type_Array_::print() const Type_Array_::Type_Array_(Type t, AST_Expression dim) : _t(t), _dim(dim){}; -Type_Array_::~Type_Array_() {} - Type Type_Array_::arrayOf() { return _t; } Type_Array Type_::getAsArray() { return dynamic_cast(this); } @@ -121,9 +109,9 @@ int operator==(Type_ &e1, Type_ &e2) { if (e1.getType() == e2.getType()) { switch (e1.getType()) { - case TYARRAY: + case SymbolType::TYARRAY: return *(e1.getAsArray()->arrayOf()) == e2.getAsArray()->arrayOf(); - case TYTUPLA: { + case SymbolType::TYTUPLA: { Type_Tupla t1 = e1.getAsTupla(), t2 = e2.getAsTupla(); if (t2->tupla()->size() != t1->tupla()->size()) return 0; TypeListIterator it1 = t1->tupla()->begin(), it2 = t1->tupla()->begin(); @@ -133,8 +121,7 @@ int operator==(Type_ &e1, Type_ &e2) } return 1; } - case TYFUNCTION: // No es necesario!! - { + case SymbolType::TYFUNCTION: { Type_Function f1 = e1.getAsFunction(), f2 = e2.getAsFunction(); return *(f1->output()) == f2->output(); } @@ -153,13 +140,12 @@ int operator!=(Type_ &e1, Type e2) { return !(e1 == *e2); } Type_Tupla_::Type_Tupla_(TypeList tyl) : _tyl(tyl){}; -Type_Tupla_::~Type_Tupla_() {} - string Type_Tupla_::print() const { stringstream ret(stringstream::out); TypeListIterator tyit; - int i = 0, s = _tyl->size(); + unsigned long i = 0; + unsigned long s = _tyl->size(); ret << "< "; foreach (tyit, _tyl) { i++; @@ -172,13 +158,12 @@ string Type_Tupla_::print() const Type_Function_::Type_Function_(Type o, TypeList i) : _input(i), _output(o){}; -Type_Function_::~Type_Function_() {} - string Type_Function_::print() const { stringstream ret(stringstream::out); TypeListIterator tyit; - int i = 0, s = _input->size(); + unsigned long i = 0; + unsigned long s = _input->size(); ret << _output << " function "; diff --git a/src/mmoc/util/type.h b/src/mmoc/util/type.h index 00d8df53..3a0a7dff 100644 --- a/src/mmoc/util/type.h +++ b/src/mmoc/util/type.h @@ -17,303 +17,91 @@ ******************************************************************************/ -#ifndef TYPE_H_ -#define TYPE_H_ +#pragma once #include #include #include -#include "../ast/ast_types.h" -#include "../ast/expression.h" -#include "macros.h" +#include +#include +#include -using namespace std; +enum class SymbolType { TYREAL, TYINTEGER, TYBOOLEAN, TYSTRING, TYARRAY, TYTUPLA, TYFUNCTION }; -/** - * - */ -enum TypesType { - TYREAL, //!< TYREAL - TYINTEGER, //!< TYINTEGER - TYBOOLEAN, //!< TYBOOLEAN - TYSTRING, //!< TYSTRING - TYARRAY, //!< TYARRAY - TYTUPLA, //!< TYTUPLA - TYFUNCTION //!< TYFUNCTION -}; - -/** - * - */ DEFINE_TYPE(Type); -/** - * - */ DEFINE_TYPE(Type_Real); -/** - * - */ DEFINE_TYPE(Type_Integer); -/** - * - */ DEFINE_TYPE(Type_Boolean); -/** - * - */ DEFINE_TYPE(Type_String); -/** - * - */ DEFINE_TYPE(Type_Array); -/** - * - */ DEFINE_TYPE(Type_Tupla); -/** - * - */ DEFINE_TYPE(Type_Function); -/** - * - */ DEFINE_LIST(Type); -/** - * - */ class Type_ { public: - /** - * - */ - virtual ~Type_(){}; - /** - * - * @return - */ - virtual TypesType getType() = 0; - /** - * - * @return - */ + virtual ~Type_() = default; + virtual SymbolType getType() = 0; virtual string print() const = 0; - /** - * - * @param os - * @param e - * @return - */ friend ostream &operator<<(ostream &os, const Type_ &e); - /** - * - * @param os - * @param e - * @return - */ friend ostream &operator<<(ostream &os, const Type &e); - /** - * - * @param e1 - * @param e2 - * @return - */ friend int operator==(Type_ &e1, Type_ &e2); - /** - * - * @param e1 - * @param e2 - * @return - */ friend int operator==(Type_ &e1, Type e2); - /** - * - * @param e1 - * @param e2 - * @return - */ friend int operator!=(Type_ &e1, Type_ &e2); - /** - * - * @param e1 - * @param e2 - * @return - */ friend int operator!=(Type_ &e1, Type e2); - /** - * - * @return - */ Type_Array getAsArray(); - /** - * - * @return - */ Type_Tupla getAsTupla(); - /** - * - * @return - */ Type_Function getAsFunction(); }; -/** - * - */ class Type_Real_ : public Type_ { public: - /** - * - */ - Type_Real_(); - /** - * - */ - virtual ~Type_Real_(); - /** - * - * @return - */ - TypesType getType() { return TYREAL; }; - /** - * - * @return - */ - string print() const; + Type_Real_() = default; + ~Type_Real_() override = default; + SymbolType getType() override { return SymbolType::TYREAL; }; + string print() const override; }; -/** - * - * @return - */ + Type_Real newType_Real(); -/** - * - * @param m - */ void deleteType_Real(Type_Real m); -/** - * - */ class Type_Integer_ : public Type_ { public: - /** - * - */ - Type_Integer_(); - /** - * - */ - virtual ~Type_Integer_(); - /** - * - * @return - */ - TypesType getType() { return TYINTEGER; }; - /** - * - * @return - */ - string print() const; + Type_Integer_() = default; + ~Type_Integer_() override = default; + SymbolType getType() override { return SymbolType::TYINTEGER; }; + string print() const override; }; -/** - * - * @return - */ + Type_Integer newType_Integer(); -/** - * - * @param m - */ void deleteType_Integer(Type_Integer m); -/** - * - */ class Type_Boolean_ : public Type_ { public: - /** - * - */ - virtual ~Type_Boolean_(){}; - /** - * - * @return - */ - TypesType getType() { return TYBOOLEAN; }; - /** - * - * @return - */ - string print() const; + ~Type_Boolean_() override = default; + ; + SymbolType getType() override { return SymbolType::TYBOOLEAN; }; + string print() const override; }; -/** - * - */ class Type_String_ : public Type_ { public: - /** - * - */ - virtual ~Type_String_(); - /** - * - * @return - */ - TypesType getType() { return TYSTRING; }; - /** - * - * @return - */ - string print() const; + ~Type_String_() override = default; + SymbolType getType() override { return SymbolType::TYSTRING; }; + string print() const override; }; -/** - * - * @return - */ + Type_String newType_String(); -/** - * - * @param m - */ void deleteType_String(Type_String m); -/** - * - */ class Type_Array_ : public Type_ { public: - /** - * - * @param t - * @param dim - */ Type_Array_(Type t, AST_Expression dim); - /** - * - */ - virtual ~Type_Array_(); - /** - * - * @return - */ - TypesType getType() { return TYARRAY; } - /** - * - * @return - */ - string print() const; - /** - * - * @return - */ + ~Type_Array_() override = default; + SymbolType getType() override { return SymbolType::TYARRAY; } + string print() const override; Type arrayOf(); - /** - * - * @return - */ AST_Expression dimension() { return _dim; }; private: @@ -321,79 +109,28 @@ class Type_Array_ : public Type_ { AST_Expression _dim; }; -/** - * - */ class Type_Tupla_ : public Type_ { public: - /** - * - * @param tyl - */ - Type_Tupla_(TypeList tyl); - /** - * - */ - virtual ~Type_Tupla_(); - /** - * - * @return - */ - string print() const; - /** - * - * @return - */ + explicit Type_Tupla_(TypeList tyl); + ~Type_Tupla_() override = default; + string print() const override; TypeList tupla() { return _tyl; }; - /** - * - * @return - */ - TypesType getType() { return TYTUPLA; } + SymbolType getType() override { return SymbolType::TYTUPLA; } private: TypeList _tyl; }; -/** - * - */ class Type_Function_ : public Type_ { public: - /** - * - * @param output - * @param input - */ Type_Function_(Type output, TypeList input); - /** - * - */ - virtual ~Type_Function_(); - /** - * - * @return - */ - string print() const; - /** - * - * @return - */ + ~Type_Function_() override = default; + string print() const override; TypeList input() { return _input; }; - /** - * - * @return - */ Type output() { return _output; }; - /** - * - * @return - */ - TypesType getType() { return TYFUNCTION; }; + SymbolType getType() override { return SymbolType::TYFUNCTION; }; private: TypeList _input; Type _output; }; - -#endif /* TYPE_H_ */ diff --git a/src/mmoc/util/visitors/array_use.h b/src/mmoc/util/visitors/array_use.h index e9395487..2d99f77f 100644 --- a/src/mmoc/util/visitors/array_use.h +++ b/src/mmoc/util/visitors/array_use.h @@ -36,7 +36,7 @@ class ArrayUse : public AST_Expression_Visitor { class StatementArrayUse : public AST_Statement_Visitor { public: - StatementArrayUse() : AST_Statement_Visitor(ArrayUse()){}; + StatementArrayUse() : AST_Statement_Visitor(ArrayUse(), false){}; ~StatementArrayUse() = default; private: diff --git a/src/mmoc/util/visitors/called_functions.h b/src/mmoc/util/visitors/called_functions.h index 02389c4a..daca20b8 100644 --- a/src/mmoc/util/visitors/called_functions.h +++ b/src/mmoc/util/visitors/called_functions.h @@ -17,12 +17,11 @@ ******************************************************************************/ -#ifndef CALLED_FUNCTIONS_H_ -#define CALLED_FUNCTIONS_H_ +#pragma once #include -#include "../ast_util.h" +#include namespace MicroModelica { namespace Util { @@ -40,7 +39,7 @@ class CalledFunctions : public AST_Expression_Visitor { class StatementCalledFunctions : public AST_Statement_Visitor { public: - StatementCalledFunctions() : AST_Statement_Visitor(CalledFunctions()){}; + StatementCalledFunctions() : AST_Statement_Visitor(CalledFunctions(), SymbolTable()){}; ~StatementCalledFunctions() = default; private: @@ -50,5 +49,3 @@ class StatementCalledFunctions : public AST_Statement_VisitorgetAsCall(); + const AST_Expression_Call call = exp->getAsCall(); CompiledFunctionTable fs = Utils::instance().compiledFunctions(); Option f = fs[*call->name()]; if (!f) { @@ -87,7 +87,7 @@ string ExpressionPrinter::foldTraverseElement(AST_Expression exp) Error::instance().add(exp->lineNum(), EM_IR | EM_VARIABLE_NOT_FOUND, ER_Error, "expression_printer.cpp:80 %s", ref->name().c_str()); break; } - VariablePrinter var_printer(var.get(), ref, _order); + VariablePrinter var_printer(var.get(), ref, _order, _array_index); buffer << var_printer; break; } @@ -110,7 +110,8 @@ string ExpressionPrinter::foldTraverseElement(AST_Expression exp) case EXPOUTPUT: { AST_Expression_Output out = exp->getAsOutput(); AST_ExpressionListIterator it; - int size = out->expressionList()->size(), i = 0; + unsigned long size = out->expressionList()->size(); + unsigned long i = 0; buffer << "("; foreach (it, out->expressionList()) { buffer << apply(current_element(it)); @@ -188,14 +189,22 @@ string ExpressionPrinter::foldTraverseElementUMinus(AST_Expression exp) return buffer.str(); } -VariablePrinter::VariablePrinter(Variable var, AST_Expression_ComponentReference ref, int order) - : _var(var), _ref(ref), _order(order), _exp(), _begin_delimiter("("), _end_delimiter(")"), _begin_index_access(), _end_index_access() +VariablePrinter::VariablePrinter(const Variable& var, AST_Expression_ComponentReference ref, int order, bool array_index) + : _var(var), + _ref(ref), + _order(order), + _exp(), + _begin_delimiter("("), + _end_delimiter(")"), + _begin_index_access(), + _end_index_access(), + _cast() { - config(); + config(array_index); generate(); } -void VariablePrinter::config() +void VariablePrinter::config(bool array_index) { if (ModelConfig::instance().functionCode()) { _begin_delimiter = "["; @@ -203,6 +212,9 @@ void VariablePrinter::config() _begin_index_access = "("; _end_index_access = "-1)"; } + if (array_index) { + _cast = _var.castOperator(); + } } string VariablePrinter::access(bool array_access) const @@ -238,12 +250,14 @@ void VariablePrinter::generate() } else if (config.isQss() && config.algorithm() && !config.reinit() && _var.isState()) { buffer << "_q"; } - buffer << _var; + buffer << _cast << _var; if (HAS_INDEXES) { - ExpressionPrinter printer(_order); + const bool ARRAY_INDEX = true; + ExpressionPrinter printer(_order, ARRAY_INDEX); AST_ExpressionList indexes = _ref->firstIndex(); AST_ExpressionListIterator it; - int size = indexes->size(), i = 0; + unsigned long size = indexes->size(); + unsigned long i = 0; buffer << _begin_delimiter; foreach (it, indexes) { buffer << _begin_index_access << printer.apply(current_element(it)) << _end_index_access << (++i < size ? "," : ""); diff --git a/src/mmoc/util/visitors/expression_printer.h b/src/mmoc/util/visitors/expression_printer.h index 9ad82835..63bb8e07 100644 --- a/src/mmoc/util/visitors/expression_printer.h +++ b/src/mmoc/util/visitors/expression_printer.h @@ -27,27 +27,28 @@ namespace MicroModelica { namespace Util { class ExpressionPrinter : public AST_Expression_Visitor { public: - ExpressionPrinter(int order); - ~ExpressionPrinter() = default; + explicit ExpressionPrinter(int order, bool array_index = false); + ~ExpressionPrinter() override = default; private: - std::string foldTraverseElement(AST_Expression exp); - std::string foldTraverseElement(std::string l, std::string r, BinOpType bot); - std::string foldTraverseElementUMinus(AST_Expression exp); + std::string foldTraverseElement(AST_Expression exp) override; + std::string foldTraverseElement(std::string l, std::string r, BinOpType bot) override; + std::string foldTraverseElementUMinus(AST_Expression exp) override; IR::Expression _exp; int _order; + bool _array_index; }; class VariablePrinter { public: - VariablePrinter(Variable var, AST_Expression_ComponentReference ref, int order); + VariablePrinter(const Variable &var, AST_Expression_ComponentReference ref, int order, bool array_index = false); ~VariablePrinter() = default; friend std::ostream &operator<<(std::ostream &out, const VariablePrinter &var); protected: void generate(); - void config(); + void config(bool array_index); std::string access(bool arrray_access) const; private: @@ -59,6 +60,7 @@ class VariablePrinter { std::string _end_delimiter; std::string _begin_index_access; std::string _end_index_access; + std::string _cast; }; } // namespace Util diff --git a/src/mmoc/util/visitors/get_index_variables.cpp b/src/mmoc/util/visitors/get_index_variables.cpp index 433661a5..2bc1bcc4 100644 --- a/src/mmoc/util/visitors/get_index_variables.cpp +++ b/src/mmoc/util/visitors/get_index_variables.cpp @@ -42,7 +42,7 @@ multimap GetIndexVariables::foldTraverseElement(AST_Expression Error::instance().add(exp->lineNum(), EM_IR | EM_VARIABLE_NOT_FOUND, ER_Error, "get_index_variables.cpp:41 %s", cr->name().c_str()); break; } - if (_in_index_list) { + if (_in_index_list && !var->isConstant()) { ret.insert(std::make_pair(cr->name(), _pos)); } bool parsing_parameter = _in_index_list && var->isParameter();