Changeset 2027acf in OpenModelica
- Timestamp:
- 2012-11-18T01:12:39+01:00 (11 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:
- d6f21deb
- Parents:
- fbc30a8d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Compiler/Template/CodegenAdevs.tpl
re1a595ae r2027acf 154 154 void restore_vars(); 155 155 void clear_event_flags(); 156 bool check_for_new_events(); 156 157 bool initial() const { return atInit; } 157 158 … … 415 416 case SIMCODE(modelInfo = MODELINFO(vars = vars as SIMVARS(__))) then 416 417 << 418 419 bool <%lastIdentOfPath(modelInfo.name)%>::check_for_new_events() 420 { 421 bool result = false; 422 double* z = new double[numZeroCrossings()]; 423 <%zeroCrossingEqns(relations)%> 424 for (int i = 0; i < numZeroCrossings(); i++) 425 { 426 if (z[i] < -epsilon && zc[i] == 1) 427 { 428 result = true; 429 zc[i] = 0; 430 } 431 else if (z[i] > epsilon && zc[i] == 0) 432 { 433 result = true; 434 zc[i] = 1; 435 } 436 } 437 delete [] z; 438 return result; 439 } 440 417 441 void <%lastIdentOfPath(modelInfo.name)%>::state_event_func(const double* q, double* z) 418 442 { … … 604 628 void <%lastIdentOfPath(modelInfo.name)%>::calc_vars(const double* q, bool doReinit) 605 629 { 606 bool iterate= false;630 bool reInit = false, newEvents = false; 607 631 active_model = this; 608 632 if (doReinit) clear_event_flags(); … … 615 639 // Calculate the odes 616 640 <%allEqns(allEquations,whenClauses)%> 617 if (iterate) 641 if (atEvent) 642 newEvents = check_for_new_events(); 643 if (reInit || newEvents) 618 644 { 619 645 save_vars(); 620 calc_vars(NULL, true);646 calc_vars(NULL,reInit); 621 647 } 622 648 } … … 821 847 double <%cref(stateVar)%>_tmp = <%cref(stateVar)%>; 822 848 <%cref(stateVar)%> = <%val%>; 823 iterate = iterate|| (<%cref(stateVar)%>_tmp != <%cref(stateVar)%>);849 reInit = reInit || (<%cref(stateVar)%>_tmp != <%cref(stateVar)%>); 824 850 >> 825 851 case TERMINATE(__) then
Note: See TracChangeset
for help on using the changeset viewer.