Changeset ef2fed95 in OpenModelica
- Timestamp:
- 2019-01-10T13:05:18+01:00 (5 years ago)
- Branches:
- Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
- Children:
- c68f4330
- Parents:
- 2f4f72e
- git-author:
- Lennart Ochel <lennart.ochel@…> (01/10/19 13:05:18)
- git-committer:
- hudson <openmodelica@…> (01/10/19 13:05:18)
- Location:
- SimulationRuntime
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
SimulationRuntime/c/simulation/solver/initialization/initialization.c
r090346b0 ref2fed95 606 606 infoStreamPrint(LOG_INIT, 0, "### START INITIALIZATION ###"); 607 607 608 setAllParamsToStart(data); 608 if (strcmp(pInitMethod, "fmi")) 609 setAllParamsToStart(data); 609 610 610 611 #if !defined(OMC_MINIMAL_RUNTIME) … … 622 623 #endif 623 624 /* set up all variables with their start-values */ 624 setAllVarsToStart(data); 625 if (strcmp(pInitMethod, "fmi")) 626 setAllVarsToStart(data); 625 627 626 628 if(!(pInitFile && strcmp(pInitFile, ""))) { … … 634 636 635 637 /* if there are user-specified options, use them! */ 636 if (pInitMethod && strcmp(pInitMethod, "")) {638 if (pInitMethod && (strcmp(pInitMethod, "") && strcmp(pInitMethod, "fmi"))) { 637 639 initMethod = IIM_UNKNOWN; 638 640 -
SimulationRuntime/fmi/export/fmi2/fmu2_model_interface.c
ra4086ba ref2fed95 563 563 fmi2Status fmi2EnterInitializationMode(fmi2Component c) 564 564 { 565 ModelInstance *comp = (ModelInstance *)c; 566 567 if (invalidState(comp, "fmi2EnterInitializationMode", modelInstantiated, ~0)) 568 return fmi2Error; 569 FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2EnterInitializationMode...") 570 571 setZCtol(comp->tolerance); /* set zero-crossing tolerance */ 572 setStartValues(comp); 573 copyStartValuestoInitValues(comp->fmuData); 574 comp->state = modelInitializationMode; 575 576 return fmi2OK; 577 } 578 579 fmi2Status fmi2ExitInitializationMode(fmi2Component c) 580 { 565 581 fmi2Status res = fmi2Error; 566 582 ModelInstance *comp = (ModelInstance *)c; … … 571 587 572 588 threadData->currentErrorStage = ERROR_SIMULATION; 573 if (invalidState(comp, "fmi2EnterInitializationMode", modelInstantiated, ~0)) 574 return fmi2Error; 589 if (invalidState(comp, "fmi2ExitInitializationMode", modelInitializationMode, ~0)) 590 return fmi2Error; 591 FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2ExitInitializationMode...") 575 592 576 593 setThreadData(comp); 577 578 FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2EnterInitializationMode...") 579 /* set zero-crossing tolerance */ 580 setZCtol(comp->tolerance); 581 582 setStartValues(comp); 583 copyStartValuestoInitValues(comp->fmuData); 594 comp->fmuData->callback->updateBoundParameters(comp->fmuData, comp->threadData); 595 comp->fmuData->callback->updateBoundVariableAttributes(comp->fmuData, comp->threadData); 584 596 585 597 /* try */ 586 598 MMC_TRY_INTERNAL(simulationJumpBuffer) 587 threadData->mmc_jumper = threadData->simulationJumpBuffer; 588 589 if (initialization(comp->fmuData, comp->threadData, "", "", 0.0)) { 590 comp->state = modelError; 591 FILTERED_LOG(comp, fmi2Error, LOG_FMI2_CALL, "fmi2EnterInitializationMode: failed") 599 threadData->mmc_jumper = threadData->simulationJumpBuffer; 600 601 if (initialization(comp->fmuData, comp->threadData, "fmi", "", 0.0)) 602 { 603 comp->state = modelError; 604 FILTERED_LOG(comp, fmi2Error, LOG_FMI2_CALL, "fmi2EnterInitializationMode: failed") 605 } 606 else 607 { 608 /* TODO: Simulation stop time is needed to calculate the sample events beforehand. */ 609 initSample(comp->fmuData, comp->threadData, comp->fmuData->localData[0]->timeValue, 100 /*should be stopTime*/); 610 #if !defined(OMC_NDELAY_EXPRESSIONS) || OMC_NDELAY_EXPRESSIONS>0 611 initDelay(comp->fmuData, comp->fmuData->localData[0]->timeValue); 612 #endif 613 /* overwrite old values due to an event */ 614 overwriteOldSimulationData(comp->fmuData); 615 616 comp->eventInfo.terminateSimulation = fmi2False; 617 comp->eventInfo.valuesOfContinuousStatesChanged = fmi2True; 618 619 /* get next event time (sample calls) */ 620 nextSampleEvent = 0; 621 nextSampleEvent = getNextSampleTimeFMU(comp->fmuData); 622 if (nextSampleEvent == -1) 623 { 624 comp->eventInfo.nextEventTimeDefined = fmi2False; 592 625 } 593 626 else 594 627 { 595 /*TODO: Simulation stop time is need to calculate in before hand all sample events 596 We shouldn't generate them all in beforehand */ 597 initSample(comp->fmuData, comp->threadData, comp->fmuData->localData[0]->timeValue, 100 /*should be stopTime*/); 598 #if !defined(OMC_NDELAY_EXPRESSIONS) || OMC_NDELAY_EXPRESSIONS>0 599 initDelay(comp->fmuData, comp->fmuData->localData[0]->timeValue); 600 #endif 601 /* due to an event overwrite old values */ 602 overwriteOldSimulationData(comp->fmuData); 603 604 comp->eventInfo.terminateSimulation = fmi2False; 605 comp->eventInfo.valuesOfContinuousStatesChanged = fmi2True; 606 607 /* Get next event time (sample calls)*/ 608 nextSampleEvent = 0; 609 nextSampleEvent = getNextSampleTimeFMU(comp->fmuData); 610 if (nextSampleEvent == -1) { 611 comp->eventInfo.nextEventTimeDefined = fmi2False; 612 } else { 613 comp->eventInfo.nextEventTimeDefined = fmi2True; 614 comp->eventInfo.nextEventTime = nextSampleEvent; 615 fmi2EventUpdate(comp, &(comp->eventInfo)); 616 } 617 comp->state = modelInitializationMode; 618 FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2EnterInitializationMode: succeed") 619 res = fmi2OK; 620 } 621 done = 1; 628 comp->eventInfo.nextEventTimeDefined = fmi2True; 629 comp->eventInfo.nextEventTime = nextSampleEvent; 630 fmi2EventUpdate(comp, &(comp->eventInfo)); 631 } 632 FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2EnterInitializationMode: succeed") 633 res = fmi2OK; 634 } 635 done = 1; 622 636 /* catch */ 623 637 MMC_CATCH_INTERNAL(simulationJumpBuffer) 624 638 threadData->mmc_jumper = old_jmp; 625 639 626 if (!done) { 640 if (!done) 641 { 627 642 FILTERED_LOG(comp, fmi2Error, LOG_FMI2_CALL, "fmi2EnterInitializationMode: terminated by an assertion.") 628 643 } 629 resetThreadData(comp); 630 return res; 631 } 632 633 fmi2Status fmi2ExitInitializationMode(fmi2Component c) 634 { 635 ModelInstance *comp = (ModelInstance *)c; 636 if (invalidState(comp, "fmi2ExitInitializationMode", modelInitializationMode, ~0)) 637 return fmi2Error; 638 FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2ExitInitializationMode...") 639 640 setThreadData(comp); 641 comp->fmuData->callback->updateBoundParameters(comp->fmuData, comp->threadData); 642 comp->fmuData->callback->updateBoundVariableAttributes(comp->fmuData, comp->threadData); 644 643 645 comp->state = modelEventMode; 644 646 resetThreadData(comp); 645 647 646 648 FILTERED_LOG(comp, fmi2OK, LOG_FMI2_CALL, "fmi2ExitInitializationMode: succeed") 647 return fmi2OK;649 return res; 648 650 } 649 651
Note: See TracChangeset
for help on using the changeset viewer.