Example #1
0
/*!
 *  pick up start values from csv for states
 *  author: Vitalij Ruge
 **/
static inline void pickUpStates(OptData* optData){
  char* cflags;
  cflags = (char*)omc_flagValue[FLAG_INPUT_FILE_STATES];

  if(cflags){
    FILE * pFile = NULL;
    pFile = fopen(cflags,"r");
    if(pFile == NULL){
      warningStreamPrint(LOG_STDOUT, 0, "OMC can't find the file %s.",cflags);
    }else{
      int c, n = 0;
      modelica_boolean b;
      while(1){
          c = fgetc(pFile);
          if (c==EOF) break;
          if (c=='\n') ++n;
      }
      // check if csv file is empty!
      if(n == 0){
        fprintf(stderr, "External input file: externalInput.csv is empty!\n"); fflush(NULL);
        EXIT(1);
      }else{
        int i, j;
        double start_value;
        char buffer[200];
        const int nReal = optData->data->modelData.nVariablesReal;
        rewind(pFile);
        for(i =0; i< n; ++i){
          fscanf(pFile, "%s", buffer);
          if (fscanf(pFile, "%lf", &start_value) <= 0) continue;

          for(j = 0, b = 0; j < nReal; ++j){
            if(!strcmp(optData->data->modelData.realVarsData[j].info.name, buffer)){
              optData->data->localData[0]->realVars[j] = start_value;
              optData->data->localData[1]->realVars[j] = start_value;
              optData->data->localData[2]->realVars[j] = start_value;
              optData->v0[i] = start_value;
              b = 1;
              continue;
            }
          }
          if(!b)
            warningStreamPrint(LOG_STDOUT, 0, "it was impossible to set %s.start %g", buffer,start_value);
          else
          printf("\n[%i]set %s.start %g", i, buffer,start_value);

        }
        fclose(pFile);
        printf("\n");
        /*update system*/
        optData->data->callback->input_function(optData->data);
        /*optData->data->callback->functionDAE(optData->data);*/
        updateDiscreteSystem(optData->data);
      }
    }
  }
}
static void retrySimulationStep(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo)
{
  /* reduce step size by a half and try again */
  solverInfo->laststep = solverInfo->currentTime - solverInfo->laststep;

  /* restore old values and try another step with smaller step-size by dassl*/
  restoreOldValues(data);
  solverInfo->currentTime = data->localData[0]->timeValue;
  overwriteOldSimulationData(data);
  updateDiscreteSystem(data, threadData);
  warningStreamPrint(LOG_STDOUT, 0, "Integrator attempt to handle a problem with a called assert.");
  solverInfo->didEventStep = 1;
}
Example #3
0
/*!
 *  helper optData2ModelData
 *  author: Vitalij Ruge
 **/
static inline void updateDOSystem(OptData * optData, DATA * data, threadData_t *threadData,
                                   const int i, const int j, const int index, const int m){

    /* try */
  optData->scc = 0;
#if !defined(OMC_EMCC)
    MMC_TRY_INTERNAL(simulationJumpBuffer)
#endif
    data->callback->input_function(data);
    /*data->callback->functionDAE(data);*/
    updateDiscreteSystem(data);

    if(index){
      diffSynColoredOptimizerSystem(optData, optData->J[i][j], i, j, m);
    }
    optData->scc = 1;
#if !defined(OMC_EMCC)
    MMC_CATCH_INTERNAL(simulationJumpBuffer)
#endif
}
Example #4
0
/*!
 *  write results in result file
 *  author: Vitalij Ruge
 **/
void res2file(OptData *optData, SOLVER_INFO* solverInfo, double *vopt){
  const int nu = optData->dim.nu;
  const int nx = optData->dim.nx;
  const int nv = optData->dim.nv;
  const int nsi = optData->dim.nsi;
  const int np = optData->dim.np;
  const int nReal = optData->dim.nReal;
  const int nBoolean = optData->data->modelData.nVariablesBoolean;
  const int nInteger = optData->data->modelData.nVariablesInteger;
  const int nRelations =  optData->data->modelData.nRelations;
  const int nvnp = nv*np;
  long double a[np];
  modelica_real *** v = optData->v;
  float tmp_u;

  int i,j,k, ii, jj;
  char buffer[4096];
  DATA * data = optData->data;
  SIMULATION_DATA *sData = (SIMULATION_DATA*)data->localData[0];

  FILE * pFile = optData->pFile;
  double * v0 = optData->v0;
  double *vnom = optData->bounds.vnom;
  long double **t = optData->time.t;
  long double t0 = optData->time.t0;
  long double tmpv;

  if(np == 3){
    a[0] = 1.5580782047249223824319753706862790293163070736617;
    a[1] = -0.89141153805825571576530870401961236264964040699507;
    a[2] = 0.33333333333333333333333333333333333333333333333333;
  }else if(np == 1){
    a[0] = 1.000;
  }else{
    errorStreamPrint(LOG_STDOUT, 0, "Not support np = %i", np);
    assert(0);
  }

  optData2ModelData(optData, vopt, 0);

  /******************/
  fprintf(pFile, "%lf ",(double)t0);

  for(i=0,j = nx; i < nu; ++i,++j){
    for(k = 0, tmpv = 0.0; k < np; ++k){
      tmpv += a[k]*vopt[k*nv + j];
    }
    tmpv = fmin(fmax(tmpv,optData->bounds.vmin[j]),optData->bounds.vmax[j]);
    data->simulationInfo.inputVars[i] = (double)tmpv*vnom[j];
    fprintf(pFile, "%lf ", (float)data->simulationInfo.inputVars[i]);
  }
  fprintf(pFile, "%s", "\n");
  /******************/
  memcpy(sData->realVars, v0, nReal*sizeof(modelica_real));
  memcpy(data->localData[0]->integerVars, optData->i0, nInteger*sizeof(modelica_integer));
  memcpy(data->localData[0]->booleanVars, optData->b0, nBoolean*sizeof(modelica_boolean));
  memcpy(data->simulationInfo.integerVarsPre, optData->i0Pre, nInteger*sizeof(modelica_integer));
  memcpy(data->simulationInfo.booleanVarsPre, optData->b0Pre, nBoolean*sizeof(modelica_boolean));
  memcpy(data->simulationInfo.realVarsPre, optData->v0Pre, nReal*sizeof(modelica_real));
  memcpy(data->simulationInfo.relationsPre, optData->rePre, nRelations*sizeof(modelica_boolean));
  memcpy(data->simulationInfo.relations, optData->re, nRelations*sizeof(modelica_boolean));
  memcpy(data->simulationInfo.storedRelations, optData->storeR, nRelations*sizeof(modelica_boolean));
  /******************/
  solverInfo->currentTime = (double)t0;
  sData->timeValue = solverInfo->currentTime;

  /*updateDiscreteSystem(data);*/
  data->callback->input_function(data);
  /*data->callback->functionDAE(data);*/
  updateDiscreteSystem(data);

  sim_result.emit(&sim_result,data);
  /******************/

  for(ii = 0; ii < nsi; ++ii){
    for(jj = 0; jj < np; ++jj){
      /******************/
      memcpy(sData->realVars, v[ii][jj], nReal*sizeof(modelica_real));
      /******************/
      fprintf(pFile, "%lf ",(double)t[ii][jj]);
      for(i = 0; i < nu; ++i){
      tmp_u = (float)(vopt[ii*nvnp+jj*nv+nx+i]*vnom[i + nx]);
        fprintf(pFile, "%lf ", tmp_u);
      }
      fprintf(pFile, "%s", "\n");
      /******************/
      solverInfo->currentTime = (double)t[ii][jj];
      sData->timeValue = solverInfo->currentTime;
      sim_result.emit(&sim_result,data);
    }
  }
  fclose(pFile);
}