Changeset 2027acf in OpenModelica


Ignore:
Timestamp:
2012-11-18T01:12:39+01:00 (11 years ago)
Author:
Jim Nutaro <nutaro@…>
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
Message:

Updated adevs backend

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@13943 f25d12d1-65f4-0310-ae8a-bbce733d8d8e

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Compiler/Template/CodegenAdevs.tpl

    re1a595ae r2027acf  
    154154         void restore_vars();
    155155         void clear_event_flags();
     156     bool check_for_new_events();
    156157         bool initial() const { return atInit; }
    157158
     
    415416case SIMCODE(modelInfo = MODELINFO(vars = vars as SIMVARS(__))) then
    416417  <<
     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
    417441  void <%lastIdentOfPath(modelInfo.name)%>::state_event_func(const double* q, double* z)
    418442  {
     
    604628  void <%lastIdentOfPath(modelInfo.name)%>::calc_vars(const double* q, bool doReinit)
    605629  {
    606       bool iterate = false;
     630      bool reInit = false, newEvents = false;
    607631      active_model = this;
    608632      if (doReinit) clear_event_flags();
     
    615639      // Calculate the odes
    616640      <%allEqns(allEquations,whenClauses)%>
    617       if (iterate)
     641      if (atEvent)
     642      newEvents = check_for_new_events();
     643      if (reInit || newEvents)
    618644      {
    619645          save_vars();
    620           calc_vars(NULL,true);
     646          calc_vars(NULL,reInit);
    621647      }
    622648  }
     
    821847                double <%cref(stateVar)%>_tmp = <%cref(stateVar)%>;
    822848                <%cref(stateVar)%> = <%val%>;
    823                 iterate = iterate || (<%cref(stateVar)%>_tmp != <%cref(stateVar)%>);
     849                reInit = reInit || (<%cref(stateVar)%>_tmp != <%cref(stateVar)%>);
    824850                >>
    825851    case TERMINATE(__) then
Note: See TracChangeset for help on using the changeset viewer.