예제 #1
0
void txEmissionsBase::compareAlpha() {

    ma_diff_alpha.clear(); ma_diff_alpha.resize(m_numberOfPoints);

    if ( m_EGRcalc == EGRCALC_YES ) {

        double concO2mix = 0;
        const double concO2air = m_commonParameters->val_concO2air();
        if ( concO2air < 1 ) {
            throw txError("Incorrect \"concO2air\" parameter!");
        }

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

            concO2mix = concO2air * (1.0 - ma_rEGR[i] / 100.0) +
                    ma_CO2[i] * ma_rEGR[i] / 100.0;
            ma_alpha_O2[i] = (0.01 * concO2mix * (1.0 - 0.01 * ma_CO2[i]) +
                              0.0683185 * 0.01 * ma_CO2[i]) /
                    (0.01 * concO2mix - 0.01 * ma_CO2[i]);
            ma_diff_alpha[i] = (ma_alpha_res[i] - ma_alpha_O2[i]) /
                    ma_alpha_O2[i] * 100.0;
        }
    }
    else if ( m_EGRcalc == EGRCALC_NO ) {

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

            ma_diff_alpha[i] = (ma_alpha[i] - ma_alpha_O2[i]) /
                    ma_alpha_O2[i] * 100.0;
        }
    }
    else {
        throw txError("Incorrect task for EGR ratio calculation!");
    }
}
예제 #2
0
void txPointsOfCycle::prepSrcData(const QVector<QVector<double> > &srcdata) {

    if ( srcdata.isEmpty() ) {
        throw txError("Incorrect source data array!");
    }

    if ( srcdata[0].size() != SRCDATACAPTIONS_11.size() &&
         srcdata[0].size() != SRCDATACAPTIONS_6.size() ) {
        throw txError("Incorrect source data array!");
    }

    int currstd = m_calculationOptions->val_standard();

    if ( currstd == STD_EU6 || currstd == STD_EU5 ||
         currstd == STD_EU4 || currstd == STD_EU3 ) {

        m_n_hi        = srcdata[0][ 0];
        m_n_lo        = srcdata[0][ 1];
        m_idle        = srcdata[0][ 2];
        m_n_rated     = srcdata[0][ 3];
        m_N_fan_rated = srcdata[0][ 4];
        m_Ne_A        = srcdata[0][ 5];
        m_Ne_B        = srcdata[0][ 6];
        m_Ne_C        = srcdata[0][ 7];
        m_Ne_a1       = srcdata[0][ 8];
        m_Ne_a2       = srcdata[0][ 9];
        m_Ne_a3       = srcdata[0][10];

        ABC(m_n_hi, m_n_lo, &m_A, &m_B, &m_C, &m_a1, &m_a2, &m_a3, &m_n_ref);
    }
    else if ( (currstd == STD_EU2) || (currstd == STD_EU1)  || (currstd == STD_EU0) ||
              (currstd == STD_OST3700123481) || (currstd == STD_GOST17220597) ||
              (currstd == STD_R96E8) || (currstd == STD_R96F8) ||
              (currstd == STD_R96G8) || (currstd == STD_R96D8) ||
              (currstd == STD_R96E5) || (currstd == STD_R96F5) ||
              (currstd == STD_R96G5) || (currstd == STD_R96D5) ||
              (currstd == STD_R96H8) || (currstd == STD_R96I8) ||
              (currstd == STD_R96J8) || (currstd == STD_R96K8) ||
              (currstd == STD_R96H5) || (currstd == STD_R96I5) ||
              (currstd == STD_R96J5) || (currstd == STD_R96K5) ||
              (currstd == STD_C1) || (currstd == STD_D1) || (currstd == STD_D2) ||
              (currstd == STD_E1) || (currstd == STD_E2) || (currstd == STD_E3) ||
              (currstd == STD_E5) ||
              (currstd == STD_F)  || (currstd == STD_G1) || (currstd == STD_G2) ) {

        m_idle        = srcdata[0][ 0];
        m_n_interim   = srcdata[0][ 1];
        m_n_rated     = srcdata[0][ 2];
        m_N_fan_rated = srcdata[0][ 3];
        m_Ne_interim  = srcdata[0][ 4];
        m_Ne_rated    = srcdata[0][ 5];
    }
    else {
        throw txError("Unknown value of parameter \"standard\"!");
    }
}
예제 #3
0
파일: pda.cpp 프로젝트: pictographer/didah
void txAlfaBravoCharlie(MorseToken code) {
   //  uint8_t n(m2a(code) - 'A');
   uint8_t n(0);
   if (1 < symbolStackSize()) {
      n = 10 * s(1).m2i() + s(0).m2i();
      popN(2);
   } else if (symbolStackSize()) {
      n = m2i(s(0));
      popN(1);
   }
   if (0 <= n && n <= ('Z' - 'A')) {
      char letterName[1 + sizeof "NOVEMBER"];
      const char* p(alphaBravoCharlie);
      size_t i(0);
      while (*p) {
         if (*p == ' ') {
            if (n) {
               --n;
            } else {
               break;
            }
         } else if (!n) {
            letterName[i++] = *p;
         }
         ++p;
      }
      letterName[i] = '\000';
      txString(letterName);
   } else {
      txError();
      Serial.println("txAlfaBravoCharlie: Range error.");
   }
}
예제 #4
0
파일: pda.cpp 프로젝트: pictographer/didah
/// Just like txAlfaBravoCharlie, but adds digits from
/// the stack to expose the entire alphabet.
void txAlphaNNN(MorseToken) {
  uint8_t n(0);
  uint8_t k(symbolStackSize());
  if (0 < k) {
    n += s(0).m2i();
    popSymbolStack(MorseToken());
  }
  if (1 < k) {
    n += 10 * s(1).m2i();
    popSymbolStack(MorseToken());
  }
  if (0 <= n && n <= ('Z' - 'A')) {
    char letterName[1 + sizeof "NOVEMBER"];
    const char* p(alphaBravoCharlie);
    size_t i(0);
    while (*p) {
      if (*p == ' ') {
	if (n) {
	  --n;
	} else {
	  break;
	}
      } else if (!n) {
	letterName[i++] = *p;
      }
      ++p;
    }
    txString(letterName);
  } else {
    txError();
  }
}
예제 #5
0
QString txEmissionsBase::saveCalcOptions() const {

    QDir calcConfDir;

    const QString fullPath =
            calcConfDir.relativeFilePath(m_fullReportsPath)
            + QDir::separator()
            + m_currTime + ".conf";

    QFile confFile(fullPath);

    if ( !confFile.open(QFile::WriteOnly) ) {
        throw txError("Can not open file " + fullPath + "!");
    }

    QTextStream fout(&confFile);

    fout << "task"           << "=" << m_calculationOptions->val_task()           << "\n"
         << "Vh"             << "=" << m_calculationOptions->val_Vh()             << "\n"
         << "standard"       << "=" << m_calculationOptions->val_standard()       << "\n"
         << "chargingType"   << "=" << m_calculationOptions->val_chargingType()   << "\n"
         << "fuelType"       << "=" << m_calculationOptions->val_fuelType()       << "\n"
         << "NOxSample"      << "=" << m_calculationOptions->val_NOxSample()      << "\n"
         << "PTcalc"         << "=" << m_calculationOptions->val_PTcalc()         << "\n"
         << "PTmass"         << "=" << m_calculationOptions->val_PTmass()         << "\n"
         << "addPointsCalc"  << "=" << m_calculationOptions->val_addPointsCalc()  << "\n"
         << "testDate"       << "=" << m_calculationOptions->val_testDate()       << "\n"
         << "calcConfigFile" << "=" << m_calculationOptions->val_calcConfigFile() << "\n";

    confFile.close();

    return "libtoxic: Calculation config file \"" + fullPath + "\" created.\n";
}
예제 #6
0
파일: pda.cpp 프로젝트: pictographer/didah
/// Note: Since txTick() takes a significant amount of time, the
/// fastest the metronome will currently go is 240 bpm.
void txMetronome(MorseToken) {
  uint8_t bpm(60);
  switch (symbolStackSize()) {
  case 3: 
    bpm = 100 * s(2).m2i() + 10 * s(1).m2i() + s(0).m2i();
    popN(3);
    break;
  case 2: 
    bpm = 10 * s(1).m2i() + s(0).m2i();
    popN(2);
    break;
  case 1:
    bpm = s(0).m2i();
    popN(1);
    break;
  default: txError();
  }
  uint32_t timeout(60 * 1000000 / bpm);
  elapsedMicros sinceTick(0);
  while (!touchPoll(dahPin)) {
    if (timeout < sinceTick) {
      sinceTick = 0;
      txTick(MorseToken());
    }
  }
}
예제 #7
0
double pa(double t0) {

    const QVector< QVector<double> > arr =
    {
        // t0
        {-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100},
        // pa
        {0.1029076,0.113305,0.1246355,0.1368991,0.1503624,0.1650254,0.1808881,0.1980838,0.2168791,0.237274,0.2594018,0.2832625,0.3093893,0.3375156,0.3680413,0.4009664,0.4366908,0.4753478,0.5170707,0.5619928,0.6103807,0.657169,0.705157,0.758477,0.81313,0.871782,0.934433,1.001083,1.073065,1.147713,1.227693,1.311672,1.402316,1.496959,1.598267,1.704907,1.816879,1.936849,2.063484,2.196784,2.338082,2.486045,2.643339,2.808631,2.983254,3.167208,3.360493,3.564442,3.779055,4.004332,4.241606,4.49221,4.753478,5.029409,5.31867,5.622594,5.939848,6.274431,6.618345,6.990252,7.374156,7.776722,8.19795,8.63784,9.099058,9.581604,10.084145,10.61068,11.158543,11.733066,12.331583,12.95676,13.60993,14.28976,14.99625,15.7294,16.50254,17.30234,18.14213,19.00858,19.91502,20.84812,21.83454,22.84762,23.90069,24.99375,26.14013,27.3265,28.55286,29.81921,31.15221,32.51187,33.93818,35.41781,36.95076,38.53703,40.17662,41.86953,43.62909,45.4553,47.33483,49.28101,51.30717,53.39998,55.55944,57.79888,60.10497,62.47771,64.93043,67.46313,70.08914,72.79513,75.5811,78.46038,81.43297,84.49887,87.65808,90.92393,94.28309,97.73556,101.308}
    };

    if ( arr[0].size() != arr[1].size() ) {
        throw txError("Wrong dependence of \"pa\" to \"t0\"!");
    }

    for ( ptrdiff_t i=0; i<arr[0].size(); i++ ) {

        if ( t0 > arr[0][i] && t0 < arr[0][i+1] ) {
            return arr[1][i] +
                    (arr[1][i+1] - arr[1][i]) * (t0 - arr[0][i]) /
                    (arr[0][i+1] - arr[0][i]);
        }
        else if (t0 == arr[0][i]) {
            return arr[1][i];
        }
        else if (t0 == arr[0][i+1]) {
            return arr[1][i+1];
        }
    }

    return 0;
}
예제 #8
0
void ABC(double n_hi,
         double n_lo,
         double *A,
         double *B,
         double *C,
         double *a1,
         double *a2,
         double *a3,
         double *n_ref) {

    if (n_hi < n_lo) {
        throw txError("n_hi must be greater than n_lo!");
    }

    const double delta = (n_hi - n_lo) / 4.0;

    *A = n_lo + delta;
    *B = *A   + delta;
    *C = *B   + delta;

    *a1 = (*B + *C) / 2.0;
    *a2 = (*A + *B) / 2.0;
    *a3 = (*B + *C) / 2.0;

    *n_ref = n_lo + 0.95 * (n_hi - n_lo);
}
예제 #9
0
파일: pda.cpp 프로젝트: pictographer/didah
/// If the top two elements of the stack are digits, convert them to a
/// number between 0-99 inclusive. Play the corresponding note.
void playNote(MorseToken) {
  if (1 < symbolStackSize() && isdigit(s(0).toChar()) && isdigit(s(1).toChar())) {
    size_t note(10 * (s(1).toChar() - '0') + (s(0).toChar() - '0'));
    playTone(noteHz[note] + 0.5, getDitMicros() * 60);
    txUnsigned(note);
  } else {
    txError();
  }
}
예제 #10
0
QString txEmissionsBase::saveSourceData() const {

    QDir reportDir;

    const QString fullPath =
            reportDir.relativeFilePath(m_fullReportsPath)
            + QDir::separator()
            + "SourceData_"
            + m_calculationOptions->defStandardName(
                m_calculationOptions->val_standard()
                )
            + "_"
            + m_currTime
            + ".dat";

    QFile srcData(fullPath);

    if ( !srcData.open(QFile::WriteOnly) ) {
        throw txError("Can not open file " + fullPath + "!");
    }

    QTextStream fout(&srcData);

    fout << right
         << qSetFieldWidth(COLUMNWIDTH);

    for ( ptrdiff_t i=0; i<SRCDATACAPTIONS_EMISSIONS.size(); i++ ) {
        fout << SRCDATACAPTIONS_EMISSIONS[i];
    }

    fout << qSetFieldWidth(0)
         << "\n"
         << fixed
         << qSetFieldWidth(COLUMNWIDTH)
         << qSetRealNumberPrecision(PRECISION+1);

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        fout << qSetFieldWidth(COLUMNWIDTH);
        fout << i + 1;
        fout << ma_n[i]      << ma_Me_brutto[i] << ma_Ne_brutto[i]
             << ma_N_fan[i]  << ma_w[i]         << ma_t0[i]
             << ma_B0[i]     << ma_Ra[i]        << ma_dPn[i]
             << ma_Gair[i]   << ma_Gfuel[i]     << ma_CNOx[i]
             << ma_gNOx[i]   << ma_CCO[i]       << ma_CCH[i]
             << ma_CCO2in[i] << ma_CCO2out[i]   << ma_CO2[i]
             << ma_Ka1m[i]   << ma_KaPerc[i]    << ma_FSN[i]
             << ma_Pr[i]     << ma_ts[i]        << ma_tauf[i]
             << ma_qmdw[i]   << ma_qmdew[i]     << ma_rd[i];
        fout << qSetFieldWidth(0)
             << "\n";
    }

    srcData.close();

    return "libtoxic: Source data file \"" + fullPath + "\" created.\n";
}
예제 #11
0
void txCommonParameters::createNeededFiles() {

    QDir dir;
    QFileInfo fileInfo;
    QString absPath;

    if ( !dir.exists(m_commonDirName) ) {

        if ( !dir.mkdir(m_commonDirName) ) {
            throw txError("Can not create directory " + m_commonDirName);
        }
    }

    fileInfo.setFile(m_srcFileNameEU3);
    absPath = fileInfo.absoluteDir().absolutePath();

    if ( !dir.exists(absPath) ) {

        if ( !dir.mkdir(absPath) ) {
            throw txError("Can not create directory " + absPath);
        }
    }

    fileInfo.setFile(m_srcFileNameEU0);
    absPath = fileInfo.absoluteDir().absolutePath();

    if ( !dir.exists(absPath) ) {

        if ( !dir.mkdir(absPath) ) {
            throw txError("Can not create directory " + absPath);
        }
    }

    fileInfo.setFile(m_srcFileNamePoints);
    absPath = fileInfo.absoluteDir().absolutePath();

    if ( !dir.exists(absPath) ) {

        if ( !dir.mkdir(absPath) ) {
            throw txError("Can not create directory " + absPath);
        }
    }

    fileInfo.setFile(m_srcFileNameRedPwr);
    absPath = fileInfo.absoluteDir().absolutePath();

    if ( !dir.exists(absPath) ) {

        if ( !dir.mkdir(absPath) ) {
            throw txError("Can not create directory " + absPath);
        }
    }

    if ( !dir.exists(m_reportsDirName) ) {

        if ( !dir.mkdir(m_reportsDirName) ) {
            throw txError("Can not create directory " + m_reportsDirName);
        }
    }
}
예제 #12
0
파일: txReducedPower.cpp 프로젝트: pa23/r49
QString txReducedPower::saveSourceData() const {

    QDir reportDir;

    const QString fullPath =
            reportDir.relativeFilePath(m_fullReportsPath)
            + QDir::separator()
            + "SourceData_R85_"
            + m_currTime
            + ".dat";

    QFile srcData(fullPath);

    if ( !srcData.open(QFile::WriteOnly) ) {
        throw txError("Can not open file " + fullPath + "!");
    }

    QTextStream fout(&srcData);

    fout << right
         << qSetFieldWidth(COLUMNWIDTH);

    for ( ptrdiff_t i=0; i<SRCDATACAPTIONS_REDPOWER.size(); i++ ) {
        fout << SRCDATACAPTIONS_REDPOWER[i];
    }

    fout << qSetFieldWidth(0)
         << "\n"
         << fixed
         << qSetFieldWidth(COLUMNWIDTH)
         << qSetRealNumberPrecision(PRECISION+1);

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        fout << qSetFieldWidth(COLUMNWIDTH);
        fout << i + 1;
        fout << ma_n[i]     << ma_Me_brutto[i] << ma_t0[i]
             << ma_B0[i]    << ma_Ra[i]        << ma_S[i]
             << ma_pk[i]    << ma_Gfuel[i]     << ma_N_k[i]
             << ma_N_fan[i] << ma_t_cool[i]    << ma_t_oil[i]
             << ma_tk[i]    << ma_tks[i]       << ma_t_fuel[i]
             << ma_pks[i]   << ma_Gair[i];
        fout << qSetFieldWidth(0)
             << "\n";
    }

    srcData.close();

    return "libtoxic: Source data file \"" + fullPath + "\" created.\n";
}
예제 #13
0
파일: pda.cpp 프로젝트: pictographer/didah
void gradeNext(MorseToken) {
   if (1 < symbolStackSize()) {
      if (s(1) == s(0)) {
         txString("Y");
         popSymbolStack(MorseToken());
         popSymbolStack(MorseToken());
      } else {
         txString("N");
         popSymbolStack(MorseToken());
         txSymbolStackTop(MorseToken());
         popSymbolStack(MorseToken());
      }
   } else {
      txError();
   }
}
예제 #14
0
파일: txReducedPower.cpp 프로젝트: pa23/r49
void txReducedPower::setSourceData() {

    QSharedPointer<txDataReader> dataReader(new txDataReader());

    dataReader->readFile(m_commonParameters->val_srcFileNameRedPwr(), " ");
    QVector< QVector<double> > srcdata = dataReader->val_data();

    if ( srcdata.isEmpty() ) {
        throw txError("No data to calculate!");
    }

    //

    m_numberOfPoints = srcdata.size();

    prepSrcArrays(srcdata);
}
예제 #15
0
QString txPointsOfCycle::createReports() {

    const QString filenamePoints = m_commonParameters->val_srcFileNamePoints();

    QFile dataFile(filenamePoints);

    if ( !dataFile.open(QFile::WriteOnly) ) {
        throw txError("Can not open file " + filenamePoints + "!");
    }

    QTextStream fout(&dataFile);

    fout << right
         << qSetFieldWidth(COLUMNWIDTH);

    for ( ptrdiff_t i=0; i<SRCDATACAPTIONS_EMISSIONS.size(); i++ ) {
        fout << SRCDATACAPTIONS_EMISSIONS[i];
    }

    fout << qSetFieldWidth(0)
         << "\n"
         << fixed;

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        fout << qSetFieldWidth(COLUMNWIDTH)
             << qSetRealNumberPrecision(0);
        fout << (i + 1) << ma_n[i];
        fout << qSetRealNumberPrecision(PRECISION);
        fout << ma_Me_brutto[i] << ma_Ne_brutto[i] << ma_N_fan[i];
        fout << qSetRealNumberPrecision(PRECISION+1);
        fout << ma_w[i];
        fout << "0" << "0" << "0" << "0" << "0" << "0" << "0" << "0" << "0"
             << "0" << "0" << "0" << "0" << "0" << "0" << "0" << "0" << "0"
             << "0" << "0" << "0" << "0";
        fout << qSetFieldWidth(0) << "\n";
    }

    dataFile.close();

    return "libtoxic: File \"" + filenamePoints + "\" rewrited.\n";
}
예제 #16
0
void txPointsOfCycle::setSourceData() {

    const int currstd = m_calculationOptions->val_standard();

    QSharedPointer<txDataReader> dataReader(new txDataReader());

    if ( currstd == STD_EU6 || currstd == STD_EU5 ||
         currstd == STD_EU4 || currstd == STD_EU3 ) {
        dataReader->readFile(m_commonParameters->val_srcFileNameEU3(), " ");
    }
    else {
        dataReader->readFile(m_commonParameters->val_srcFileNameEU0(), " ");
    }

    QVector< QVector<double> > srcdata = dataReader->val_data();

    if ( srcdata.isEmpty() ) {
        throw txError("No data to calculate!");
    }

    prepSrcData(srcdata);
}
예제 #17
0
파일: txReducedPower.cpp 프로젝트: pa23/r49
void txReducedPower::calculate() {

    m_currTime = QDateTime::currentDateTime().toString("dd-MM-yyyy_hh-mm-ss");

    //

    ma_Ne_brutto.clear();          ma_Ne_brutto.resize(m_numberOfPoints);
    ma_ge_brutto.clear();          ma_ge_brutto.resize(m_numberOfPoints);
    ma_qcs.clear();                ma_qcs.resize(m_numberOfPoints);
    ma_fm.clear();                 ma_fm.resize(m_numberOfPoints);
    ma_pa.clear();                 ma_pa.resize(m_numberOfPoints);
    ma_ps.clear();                 ma_ps.resize(m_numberOfPoints);
    ma_fa.clear();                 ma_fa.resize(m_numberOfPoints);
    ma_alphad.clear();             ma_alphad.resize(m_numberOfPoints);
    ma_Ne_reduced.clear();         ma_Ne_reduced.resize(m_numberOfPoints);
    ma_Ne_netto_reduced.clear();   ma_Ne_netto_reduced.resize(m_numberOfPoints);
    ma_Me_netto_reduced.clear();   ma_Me_netto_reduced.resize(m_numberOfPoints);
    ma_ge_netto_reduced.clear();   ma_ge_netto_reduced.resize(m_numberOfPoints);

    defRate();

    const double Vh = m_calculationOptions->val_Vh();
    const int chargtype = m_calculationOptions->val_chargingType();

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        ma_Ne_brutto[i] = ma_Me_brutto[i] * ma_n[i] / 9550.0;
        ma_ge_brutto[i] = ma_Gfuel[i] / ma_Ne_brutto[i] * 1000.0;

        if ( chargtype == CHARGINGTYPE_NO ) {
            ma_qcs[i] = 1;
        }
        else {
            ma_qcs[i] = ( (ma_Gfuel[i] * 1000000.0) /
                          (30.0 * ma_n[i] * Vh) ) /
                    ( (ma_pk[i] + ma_B0[i]) / (ma_S[i] + ma_B0[i]) );
        }

        if ( ma_qcs[i] < 40.0 ) {
            ma_fm[i] = 0.3;
        }
        else if ( ma_qcs[i] > 65.0 ) {
            ma_fm[i] = 1.2;
        }
        else {
            ma_fm[i] = 0.036 * ma_qcs[i] - 1.14;
        }

        ma_pa[i] = (0.506 + 0.1 * ma_t0[i] - 0.00245 *
                    pow(ma_t0[i], 2.0) + 0.0001 * pow(ma_t0[i], 3.0)) *
                (ma_Ra[i] / 100.0);
        ma_ps[i] = ma_B0[i] - ma_pa[i];

        if ( chargtype == CHARGINGTYPE_NO ) {
            ma_fa[i] = (99.0 / ma_ps[i]) *
                    pow( (ma_t0[i] + 273.0) / 298.0, 0.7 );
        }
        else {
            ma_fa[i] = pow( 99.0 / ma_ps[i], 0.7 ) *
                    pow( (ma_t0[i] + 273.0) / 298.0, 1.5 );
        }

        ma_alphad[i] = pow(ma_fa[i], ma_fm[i]);

        if ( ma_alphad[i] < 0.9 || ma_alphad[i] > 1.1 ) {
            throw txError("Parameter \"alphad\" "
                          "is out-of-range (0.9..1.1)!");
        }

        ma_Ne_reduced[i] = ma_alphad[i] * ma_Ne_brutto[i];
        ma_N_fan[i] = N_fan(m_N_fan_rated, ma_n[i], m_n_rated);
        ma_Ne_netto_reduced[i] = ma_Ne_reduced[i] - ma_N_fan[i] + ma_N_k[i];
        ma_Me_netto_reduced[i] = ma_Ne_netto_reduced[i] * 9550.0 / ma_n[i];
        ma_ge_netto_reduced[i] = ma_Gfuel[i] / ma_Ne_netto_reduced[i] * 1000.0;
    }
}
예제 #18
0
파일: pda.cpp 프로젝트: pictographer/didah
/// The top three entries on the stack are two digits to add and their
/// proported sum mod 10. Transmit Y/N to indicate whether or not the
/// sum is correct. If the sum is not correct, transmit the correct
/// sum. Update the weights to bias future random number selection.
void gradeSum(MorseToken) {
  if (2 < symbolStackSize()) {
    uint8_t s1(s(1).m2i());
    uint8_t s2(s(2).m2i());
    uint8_t s0(s(0).toChar());
    uint8_t sum((s1 + s2) % 10);
    Serial.print(s2);
    Serial.print(" ");
    Serial.print(s1);
    Serial.print(" ");
    Serial.print(s0);
    Serial.print(" sum: ");
    Serial.println(sum);
    bool correct(s(0).m2i() == sum);
    if (correct) {
      txString("Y");
      // Decrease the error counts associated with the digits the user
      // just added incorrectly, taking care not to underflow.
      uint8_t d1(!!digitErr[s1]);
      uint8_t d2(!!digitErr[s2]);
      digitErr[s1] -= d1; 
      digitErr[s2] -= d2;
      digitErrCount -= (d1 + d2);
      Serial.print("Decrementing ");
      Serial.print(s1);
      Serial.print(". New weight is: ");
      Serial.println(digitErr[s1]);
      Serial.print("Decrementing ");
      Serial.print(s2);
      Serial.print(". New weight is: ");
      Serial.println(digitErr[s2]);
    } else {
      //            012345678901
      char buffer[] = "N  a + b = c";
      buffer[3] = s2 + '0';
      buffer[7] = s1 + '0';
      buffer[11] = sum + '0';
      txString(buffer);
      // Increase the error counts associated with the digits the user
      // just added incorrectly, taking care not to overflow.
      uint8_t d1(3 * (digitErr[s1] - 3 < 255));
      uint8_t d2(3 * (digitErr[s2] - 3 < 255));
      digitErr[s1] += d1;
      digitErr[s2] += d2;
      digitErrCount += d1 + d2;
      Serial.print("Incrementing ");
      Serial.print(s1);
      Serial.print(". New weight is: ");
      Serial.println(digitErr[s1]);
      Serial.print("Incrementing ");
      Serial.print(s2);
      Serial.print(". New weight is: ");
      Serial.println(digitErr[s2]);
    }
    // If the user plays long enough without a reset to saturate two
    // of the digits chosen at random, divide all the error counts
    // by 2.
    if (digitErr[s1] == 255 && digitErr[s2] == 255) {
      for (uint8_t i(0); i < 10; ++i) {
	digitErr[i] <<= 1;
      }
      digitErrCount <<= 1;
      Serial.println("Halving all weights.");
    }
    Serial.print("Digit error count is: ");
    Serial.println(digitErrCount);
    popN(3);
  } else {
    txError();
  }
}
예제 #19
0
void txEmissionsBase::baseCalc() {

    ma_alpha.clear();     ma_alpha.resize(m_numberOfPoints);
    ma_alpha_O2.clear();  ma_alpha_O2.resize(m_numberOfPoints);
    ma_Pb.clear();        ma_Pb.resize(m_numberOfPoints);
    ma_Pa.clear();        ma_Pa.resize(m_numberOfPoints);
    ma_fa.clear();        ma_fa.resize(m_numberOfPoints);
    ma_ge_brutto.clear(); ma_ge_brutto.resize(m_numberOfPoints);

    const double Dn = m_commonParameters->val_Dn();
    if ( Dn < 1 ) {
        throw txError("Incorrect \"Dn\" parameter!");
    }
    const double concO2air = m_commonParameters->val_concO2air();
    if ( concO2air < 1 ) {
        throw txError("Incorrect \"concO2air\" parameter!");
    }
    const int chargtype = m_calculationOptions->val_chargingType();

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        if ( m_NeCalcMethod == NECALCMETHOD_THROUGHNE ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }
        else if ( m_NeCalcMethod == NECALCMETHOD_THROUGHME ) {
            ma_Ne_brutto[i] = ma_Me_brutto[i] * ma_n[i] / 9550.0;
        }
        else {
            throw txError("Incorrect Ne_netto calculation method!");
        }

        if ( m_GairVals == GAIRVALS_THROUGHNOZZLE ) {
            ma_Gair[i] = Gair(Dn, ma_B0[i], ma_t0[i], ma_dPn[i]);
        }

        ma_alpha[i] = ma_Gair[i] / (ma_Gfuel[i] * m_commonParameters->val_L0());

        if ( m_checkMeas == CHECKMEAS_YES && m_EGRcalc == EGRCALC_NO ) {
            ma_alpha_O2[i] = (0.01 * concO2air * (1.0 - 0.01 * ma_CO2[i]) +
                              0.0683185 * 0.01 * ma_CO2[i]) /
                    (0.01 * concO2air - 0.01 * ma_CO2[i]);
        }

        ma_Pb[i] = ma_B0[i];
        ma_Pa[i] = pa(ma_t0[i]);

        if ( chargtype == CHARGINGTYPE_NO ) {
            ma_fa[i] = (99.0 / (ma_Pb[i] - ma_Ra[i] * ma_Pa[i] * 0.01)) *
                    pow((ma_t0[i] + 273.0) / 298, 0.7);
        }
        else if ( chargtype == CHARGINGTYPE_GASTURBINE ) {
            ma_fa[i] = pow(99.0 / (ma_Pb[i] - ma_Ra[i] * ma_Pa[i] * 0.01), 0.7) *
                    pow((ma_t0[i] + 273.0) / 298, 1.5);
        }
        else {
            throw txError("Incorrect charging type!");
        }

        ma_ge_brutto[i] = ma_Gfuel[i] / ma_Ne_brutto[i] * 1000.0;
    }
}
예제 #20
0
void txEmissionsBase::prepSrcArrays(
        const QVector< QVector<double> > &srcdata
        ) {

    if ( srcdata.isEmpty() ) {
        throw txError("Incorrect source data array!");
    }

    ma_n.clear();         ma_n.resize(m_numberOfPoints);
    ma_Me_brutto.clear(); ma_Me_brutto.resize(m_numberOfPoints);
    ma_Ne_brutto.clear(); ma_Ne_brutto.resize(m_numberOfPoints);
    ma_N_fan.clear();     ma_N_fan.resize(m_numberOfPoints);
    ma_w.clear();         ma_w.resize(m_numberOfPoints);
    ma_t0.clear();        ma_t0.resize(m_numberOfPoints);
    ma_B0.clear();        ma_B0.resize(m_numberOfPoints);
    ma_Ra.clear();        ma_Ra.resize(m_numberOfPoints);
    ma_dPn.clear();       ma_dPn.resize(m_numberOfPoints);
    ma_Gair.clear();      ma_Gair.resize(m_numberOfPoints);
    ma_Gfuel.clear();     ma_Gfuel.resize(m_numberOfPoints);
    ma_CNOx.clear();      ma_CNOx.resize(m_numberOfPoints);
    ma_gNOx.clear();      ma_gNOx.resize(m_numberOfPoints);
    ma_CCO.clear();       ma_CCO.resize(m_numberOfPoints);
    ma_CCH.clear();       ma_CCH.resize(m_numberOfPoints);
    ma_CCO2in.clear();    ma_CCO2in.resize(m_numberOfPoints);
    ma_CCO2out.clear();   ma_CCO2out.resize(m_numberOfPoints);
    ma_CO2.clear();       ma_CO2.resize(m_numberOfPoints);
    ma_Ka1m.clear();      ma_Ka1m.resize(m_numberOfPoints);
    ma_KaPerc.clear();    ma_KaPerc.resize(m_numberOfPoints);
    ma_FSN.clear();       ma_FSN.resize(m_numberOfPoints);
    ma_Pr.clear();        ma_Pr.resize(m_numberOfPoints);
    ma_ts.clear();        ma_ts.resize(m_numberOfPoints);
    ma_tauf.clear();      ma_tauf.resize(m_numberOfPoints);
    ma_qmdw.clear();      ma_qmdw.resize(m_numberOfPoints);
    ma_qmdew.clear();     ma_qmdew.resize(m_numberOfPoints);
    ma_rd.clear();        ma_rd.resize(m_numberOfPoints);

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        if ( srcdata[i].size() != SRCDATACAPTIONS_EMISSIONS.size() ) {
            throw txError("Incorrect source data array!");
        }

        ma_n        [i] = srcdata[i][ 1];
        ma_Me_brutto[i] = srcdata[i][ 2];
        ma_Ne_brutto[i] = srcdata[i][ 3];
        ma_N_fan    [i] = srcdata[i][ 4];
        ma_w        [i] = srcdata[i][ 5];
        ma_t0       [i] = srcdata[i][ 6];
        ma_B0       [i] = srcdata[i][ 7];
        ma_Ra       [i] = srcdata[i][ 8];
        ma_dPn      [i] = srcdata[i][ 9];
        ma_Gair     [i] = srcdata[i][10];
        ma_Gfuel    [i] = srcdata[i][11];
        ma_CNOx     [i] = srcdata[i][12];
        ma_gNOx     [i] = srcdata[i][13];
        ma_CCO      [i] = srcdata[i][14];
        ma_CCH      [i] = srcdata[i][15];
        ma_CCO2in   [i] = srcdata[i][16];
        ma_CCO2out  [i] = srcdata[i][17];
        ma_CO2      [i] = srcdata[i][18];
        ma_Ka1m     [i] = srcdata[i][19];
        ma_KaPerc   [i] = srcdata[i][20];
        ma_FSN      [i] = srcdata[i][21];
        ma_Pr       [i] = srcdata[i][22];
        ma_ts       [i] = srcdata[i][23];
        ma_tauf     [i] = srcdata[i][24];
        ma_qmdw     [i] = srcdata[i][25];
        ma_qmdew    [i] = srcdata[i][26];
        ma_rd       [i] = srcdata[i][27];
    }
}
예제 #21
0
파일: txReducedPower.cpp 프로젝트: pa23/r49
void txReducedPower::prepSrcArrays(
        const QVector< QVector<double> > &srcdata
        ) {

    if ( srcdata.isEmpty() ) {
        throw txError("Incorrect source data array!");
    }

    ma_n.clear();         ma_n.resize(m_numberOfPoints);
    ma_Me_brutto.clear(); ma_Me_brutto.resize(m_numberOfPoints);
    ma_t0.clear();        ma_t0.resize(m_numberOfPoints);
    ma_B0.clear();        ma_B0.resize(m_numberOfPoints);
    ma_Ra.clear();        ma_Ra.resize(m_numberOfPoints);
    ma_S.clear();         ma_S.resize(m_numberOfPoints);
    ma_pk.clear();        ma_pk.resize(m_numberOfPoints);
    ma_Gfuel.clear();     ma_Gfuel.resize(m_numberOfPoints);
    ma_N_k.clear();       ma_N_k.resize(m_numberOfPoints);
    ma_N_fan.clear();     ma_N_fan.resize(m_numberOfPoints);
    ma_t_cool.clear();    ma_t_cool.resize(m_numberOfPoints);
    ma_t_oil.clear();     ma_t_oil.resize(m_numberOfPoints);
    ma_tk.clear();        ma_tk.resize(m_numberOfPoints);
    ma_tks.clear();       ma_tks.resize(m_numberOfPoints);
    ma_t_fuel.clear();    ma_t_fuel.resize(m_numberOfPoints);
    ma_pks.clear();       ma_pks.resize(m_numberOfPoints);
    ma_Gair.clear();      ma_Gair.resize(m_numberOfPoints);

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        if ( srcdata[i].size() != SRCDATACAPTIONS_REDPOWER.size() ) {
            throw txError("Incorrect source data array!");
        }

        ma_n        [i] = srcdata[i][ 1];
        ma_Me_brutto[i] = srcdata[i][ 2];
        ma_t0       [i] = srcdata[i][ 3];
        ma_B0       [i] = srcdata[i][ 4];
        ma_Ra       [i] = srcdata[i][ 5];
        ma_S        [i] = srcdata[i][ 6];
        ma_pk       [i] = srcdata[i][ 7];
        ma_Gfuel    [i] = srcdata[i][ 8];
        ma_N_k      [i] = srcdata[i][ 9];
        ma_N_fan    [i] = srcdata[i][10];
        ma_t_cool   [i] = srcdata[i][11];
        ma_t_oil    [i] = srcdata[i][12];
        ma_tk       [i] = srcdata[i][13];
        ma_tks      [i] = srcdata[i][14];
        ma_t_fuel   [i] = srcdata[i][15];
        ma_pks      [i] = srcdata[i][16];
        ma_Gair     [i] = srcdata[i][17];

    }

    if ( zeroArray(ma_n) ||
         zeroArray(ma_Me_brutto) ||
         zeroArray(ma_t0) ||
         zeroArray(ma_B0) ||
         zeroArray(ma_Ra) ||
         zeroArray(ma_pk) ||
         zeroArray(ma_Gfuel) ||
         (m_calculationOptions->val_Vh() < 0.0000001) ) {

        throw txError("Incorrect source data!\n"
                      "Please check Vh value and arrays of values "
                      "n, Me, t0, B0, Ra, pk and Gfuel.");
    }
}
예제 #22
0
파일: pda.cpp 프로젝트: pictographer/didah
/// Play one of 10 sound effects based on the digit on the stack.
void playSoundEffect(MorseToken code) {
  pwmFrequency(noteHz[48]+0.5);
  pwmWrite(getDuty());
  delayMicroseconds(getDitMicros());
  pwmWrite(0);
  if (symbolStackSize()) {
    uint8_t n(s(0).m2i());
    elapsedMicros t;
    size_t steps[] = { 0, 2, 3, 5, 7, 8, 10 };
    switch (n) {
    case 0:
      t = 0;
      // Low pulsing static rumble
      while (t < 60 * getDitMicrosDefault()) {
	for (int i(1); i < 25; ++i) {
	  dWrite(HIGH);
	  delayMicroseconds((1 + random(i)) * 1136);
	  dWrite(LOW);
	  delayMicroseconds((1 + random(i)) * 1136);
	}
      }
      break;
    case 1:
      shufflingCash(120 * getDitMicrosDefault());
      break;
    case 2:
      t = 0;
      // Descending beats
      while (t < 120 * getDitMicrosDefault()) {
	for (int i(1); i < 75; ++i) {
	  dWrite(HIGH);
	  delayMicroseconds(i * 1136/12);
	  dWrite(LOW);
	  delayMicroseconds(i * 1136/12);
	}
      }
      break;
    case 3:
      t = 0;
      // Buzzer
      while (t < 60 * getDitMicrosDefault()) {
	playTone(noteHz[36], getDitMicrosDefault()/30);
	playTone(noteHz[48], getDitMicrosDefault()/30);
	playTone(noteHz[52], getDitMicrosDefault()/60);
	playTone(noteHz[57], getDitMicrosDefault()/60);
      }
      break;
    case 4:
      t = 0;
      // Humm, kinda like a machine hum.
      while (t < 60 * getDitMicrosDefault()) {
	for (int i(0); i < 49; ++i) {
	  playTone(noteHz[i], getDitMicrosDefault()/10);
	}
      }
      break;
    case 5:
      t = 0;
      // ascending and repeating 
      while (t < 60 * getDitMicrosDefault()) {
	for (int i(0); i < 49; ++i) {
	  playTone(noteHz[i], getDitMicrosDefault()/2);
	}
      }
      break;
    case 6:
      t = 0;
      // ascending more quickly
      while (t < 60 * getDitMicrosDefault()) {
	for (int i(0); i < 49; ++i) {
	  playTone(noteHz[random(1,96)], getDitMicrosDefault()/10);
	}
      }
      break;
    case 7:
      t = 0;
      // ?
      while (t < 60 * getDitMicrosDefault()) {
	for (int i(0); i < 7; ++i) {
	  playTone(noteHz[(24 + steps[i % 7]) % 97], getDitMicrosDefault());
	}
      }
      break;
    case 8:
      t = 0;
      // Almost white noise, like water from a tap
      while (t < 60 * getDitMicrosDefault()) {
	dWrite(HIGH);
	delayMicroseconds(random(100,1000));
	dWrite(LOW);
	delayMicroseconds(random(100,1000));
      }
      break;
    case 9:
      t = 0;
      // Almost white noise, like water from a tap
      while (t < 60 * getDitMicrosDefault()) {
	dWrite(HIGH);
	delayMicroseconds(random(10,8000));
	dWrite(LOW);
	delayMicroseconds(random(10,8000));
      }
      t = 0;
      // Sort of like a pinball machine
      { int i(2);
	while (t < 60 * getDitMicrosDefault()) {
	  for (int k(0); k < 10; ++k) {
	    dWrite(HIGH);
	    delayMicroseconds(i);
	    dWrite(LOW);
	    delayMicroseconds(i);
	  }
	  i <<= 2;
	  if (4000 < i) { i = 2; }
	}
      }
    }
    txString("K");
  } else {
    txError();
  }
}
예제 #23
0
void txCommonParameters::readConfigFile(const QString &cfgFileName) {

    createNeededFiles();

    QFile cfgFile1(cfgFileName);
    QFile cfgFile2(QDir::homePath() + QDir::separator() + cfgFileName);
    QFile cfgFile;

    if ( cfgFile1.exists() ) {
        cfgFile.setFileName(cfgFile1.fileName());
    }
    else if ( cfgFile2.exists() ) {
        cfgFile.setFileName(cfgFile2.fileName());
    }
    else {

        const QString myPreferences =
                "//\n// This is r49 configuration file. "
                "Parameter-Value delimeter is \"=\" symbol.\n// "
                "Text after \"//\" is comment.\n//\n\n"
                "// Temporary rewrited source data files\nsrc_file_name_EU3="
                + m_srcFileNameEU3
                + "\n"
                "src_file_name_EU0="
                + m_srcFileNameEU0
                + "\n"
                "src_file_name_points="
                + m_srcFileNamePoints
                + "\n"
                "src_file_name_redpwr="
                + m_srcFileNameRedPwr
                + "\n\n"
                "// Directory for calculation results\nreports_dir_name="
                + m_reportsDirName
                + "\n\n"
                "// Measuring nozzle diameter "
                "(engine inlet air mass flow calculation)\nDn="
                + QString::number(m_Dn)
                + "\n\n"
                "// Air oxygen concentration\nconc_O2air="
                + QString::number(m_concO2air)
                + "\n\n"
                "//\nRr="
                + QString::number(m_Rr)
                + "\n\n"
                "// Stoichiometric air/fuel ratio\nL0="
                + QString::number(m_L0)
                + "\n\n"
                "// Opacimeter effective base\nL="
                + QString::number(m_L)
                + "\n\n"
                "// Air carbon dioxide concentration\nconc_CO2air="
                + QString::number(m_concCO2air)
                + "\n\n"
                "// Fuel percentage\nWH="
                + QString::number(m_WH)
                + "\n"
                "WO2="
                + QString::number(m_WO2)
                + "\n"
                "WN="
                + QString::number(m_WN)
                + "\n\n"
                "// Molecular weights\nmuNO2="
                + QString::number(m_muNO2)
                + "\n"
                "muCO="
                + QString::number(m_muCO)
                + "\n"
                "muCH="
                + QString::number(m_muCH)
                + "\n";

        if ( cfgFile1.open(QIODevice::WriteOnly | QIODevice::Text) ) {

            cfgFile1.write(myPreferences.toUtf8());
            cfgFile1.close();

            cfgFile.setFileName(cfgFile1.fileName());
        }
        else if ( cfgFile2.open(QIODevice::WriteOnly | QIODevice::Text) ) {

            cfgFile2.write(myPreferences.toUtf8());
            cfgFile2.close();

            cfgFile.setFileName(cfgFile2.fileName());
        }
        else {
            throw txError("Can not create config file!");
        }

        return;
    }

    if ( !cfgFile.open(QIODevice::ReadOnly | QIODevice::Text) ) {
        throw txError("Can not open config file " + cfgFileName + "!");
    }

    QString s;
    QStringList elements;
    QRegExp rx("^//");

    while ( !cfgFile.atEnd() ) {

        s = cfgFile.readLine().trimmed();

        if ( s.isEmpty() || s.contains(rx) ) {
            continue;
        }

        elements = s.split("=");

        if ( elements[0] == "src_file_name_EU3" ) {
            m_srcFileNameEU3 = elements[1];
        }
        else if ( elements[0] == "src_file_name_EU0" ) {
            m_srcFileNameEU0 = elements[1];
        }
        else if ( elements[0] == "src_file_name_points" ) {
            m_srcFileNamePoints = elements[1];
        }
        else if ( elements[0] == "src_file_name_redpwr" ) {
            m_srcFileNameRedPwr = elements[1];
        }
        else if ( elements[0] == "reports_dir_name" ) {
            m_reportsDirName = elements[1];
        }
        else if ( elements[0] == "Dn" ) {
            m_Dn = (elements[1]).toDouble();
        }
        else if ( elements[0] == "conc_O2air" ) {
            m_concO2air = (elements[1]).toDouble();
        }
        else if ( elements[0] == "Rr" ) {
            m_Rr = (elements[1]).toDouble();
        }
        else if ( elements[0] == "L0" ) {
            m_L0 = (elements[1]).toDouble();
        }
        else if ( elements[0] == "L" ) {
            m_L = (elements[1]).toDouble();
        }
        else if ( elements[0] == "conc_CO2air" ) {
            m_concCO2air = (elements[1]).toDouble();
        }
        else if ( elements[0] == "WH" ) {
            m_WH = (elements[1]).toDouble();
        }
        else if ( elements[0] == "WO2" ) {
            m_WO2 = (elements[1]).toDouble();
        }
        else if ( elements[0] == "WN" ) {
            m_WN = (elements[1]).toDouble();
        }
        else if ( elements[0] == "muNO2" ) {
            m_muNO2 = (elements[1]).toDouble();
        }
        else if ( elements[0] == "muCO" ) {
            m_muCO = (elements[1]).toDouble();
        }
        else if ( elements[0] == "muCH" ) {
            m_muCH = (elements[1]).toDouble();
        }

        elements.clear();
    }

    elements.clear();

    cfgFile.close();
}
예제 #24
0
파일: txReducedPower.cpp 프로젝트: pa23/r49
QString txReducedPower::saveCheckoutData() const {

    QDir reportDir;

    const QString fullPath =
            reportDir.relativeFilePath(m_fullReportsPath)
            + QDir::separator()
            + "CheckoutData_R85_"
            + m_currTime
            + ".dat";

    QFile choutData(fullPath);

    if ( !choutData.open(QFile::WriteOnly) ) {
        throw txError("Can not open file " + fullPath + "!");
    }

    QTextStream fout(&choutData);

    fout << right
         << qSetFieldWidth(COLUMNWIDTH);

    for ( ptrdiff_t i=0; i<SRCDATACAPTIONS_REDPOWER.size(); i++ ) {
        fout << SRCDATACAPTIONS_REDPOWER[i];
    }

    fout << "Ne_b[kW]"      << "ge_b[g/kWh]"  << "qcs[mg/cyc.l]"
         << "fm[-]"         << "pa[kPa]"      << "ps[kPa]"
         << "fa[-]"         << "alphad[-]"    << "Ne_r[kW]"
         << "Ne_nr[kW]"     << "Me_nr[Nm]"     << "ge_nr[g/kWh]";
    fout << qSetFieldWidth(0)
         << "\n"
         << fixed
         << qSetFieldWidth(COLUMNWIDTH)
         << qSetRealNumberPrecision(PRECISION+1);

    for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {

        fout << qSetFieldWidth(COLUMNWIDTH)
             << qSetRealNumberPrecision(PRECISION);
        fout << (i + 1)
             << ma_n[i]         << ma_Me_brutto[i] << ma_t0[i]
             << ma_B0[i]        << ma_Ra[i]        << ma_S[i]
             << ma_pk[i]        << ma_Gfuel[i]     << ma_N_k[i]
             << ma_N_fan[i]     << ma_t_cool[i]    << ma_t_oil[i]
             << ma_tk[i]        << ma_tks[i]       << ma_t_fuel[i]
             << ma_pks[i]       << ma_Gair[i]      << ma_Ne_brutto[i]
             << ma_ge_brutto[i] << ma_qcs[i]       << ma_fm[i]
             << ma_pa[i]        << ma_ps[i];
        fout << qSetRealNumberPrecision(PRECISION+2);
        fout << ma_fa[i] << ma_alphad[i];
        fout << qSetRealNumberPrecision(PRECISION);
        fout << ma_Ne_reduced[i]       << ma_Ne_netto_reduced[i]
             << ma_Me_netto_reduced[i] << ma_ge_netto_reduced[i];
        fout << qSetFieldWidth(0)
             << "\n";
    }

    choutData.close();

    return "libtoxic: Checkout data file \"" + fullPath + "\" created.\n";
}
예제 #25
0
void txPointsOfCycle::calculate() {

    const int currstd = m_calculationOptions->val_standard();
    const int addpoints = m_calculationOptions->val_addPointsCalc();

    if ( currstd == STD_EU6 || currstd == STD_EU5 ||
         currstd == STD_EU4 || currstd == STD_EU3 ) {

        if ( addpoints == ADDPOINTSCALC_YES ) {
            m_numberOfPoints = ESCPOINTSNUMBER+ESCADDPOINTSNUMBER;
        }
        else {
            m_numberOfPoints = ESCPOINTSNUMBER;
        }

        prepArrays();

        ma_n[ 0] = m_idle;
        ma_n[ 1] = m_A;
        ma_n[ 2] = m_B;
        ma_n[ 3] = m_B;
        ma_n[ 4] = m_A;
        ma_n[ 5] = m_A;
        ma_n[ 6] = m_A;
        ma_n[ 7] = m_B;
        ma_n[ 8] = m_B;
        ma_n[ 9] = m_C;
        ma_n[10] = m_C;
        ma_n[11] = m_C;
        ma_n[12] = m_C;

        if ( addpoints == ADDPOINTSCALC_YES ) {
            ma_n[13] = m_a1;
            ma_n[14] = m_a2;
            ma_n[15] = m_a3;
        }

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_N_fan[i] = N_fan(m_N_fan_rated, ma_n[i], m_n_rated);
        }

        ma_Ne_brutto[ 0] = 0;
        ma_Ne_brutto[ 1] = m_Ne_A;
        ma_Ne_brutto[ 2] = 0.50 * (m_Ne_B - ma_N_fan[2]) + ma_N_fan[2];
        ma_Ne_brutto[ 3] = 0.75 * (m_Ne_B - ma_N_fan[3]) + ma_N_fan[3];
        ma_Ne_brutto[ 4] = 0.50 * (m_Ne_A - ma_N_fan[4]) + ma_N_fan[4];
        ma_Ne_brutto[ 5] = 0.75 * (m_Ne_A - ma_N_fan[5]) + ma_N_fan[5];
        ma_Ne_brutto[ 6] = 0.25 * (m_Ne_A - ma_N_fan[6]) + ma_N_fan[6];
        ma_Ne_brutto[ 7] = m_Ne_B;
        ma_Ne_brutto[ 8] = 0.25 * (m_Ne_B - ma_N_fan[8]) + ma_N_fan[8];
        ma_Ne_brutto[ 9] = m_Ne_C;
        ma_Ne_brutto[10] = 0.25 * (m_Ne_C - ma_N_fan[10]) + ma_N_fan[10];
        ma_Ne_brutto[11] = 0.75 * (m_Ne_C - ma_N_fan[11]) + ma_N_fan[11];
        ma_Ne_brutto[12] = 0.50 * (m_Ne_C - ma_N_fan[12]) + ma_N_fan[12];

        if ( addpoints == ADDPOINTSCALC_YES ) {
            ma_Ne_brutto[13] = 0.875 * (m_Ne_a1 - ma_N_fan[13]) + ma_N_fan[13];
            ma_Ne_brutto[14] = 0.625 * (m_Ne_a2 - ma_N_fan[14]) + ma_N_fan[14];
            ma_Ne_brutto[15] = 0.375 * (m_Ne_a3 - ma_N_fan[15]) + ma_N_fan[15];
        }

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[ 0] = 0.15;
        ma_w[ 1] = 0.08;
        ma_w[ 2] = 0.10;
        ma_w[ 3] = 0.10;
        ma_w[ 4] = 0.05;
        ma_w[ 5] = 0.05;
        ma_w[ 6] = 0.05;
        ma_w[ 7] = 0.09;
        ma_w[ 8] = 0.10;
        ma_w[ 9] = 0.08;
        ma_w[10] = 0.05;
        ma_w[11] = 0.05;
        ma_w[12] = 0.05;

        if ( addpoints == ADDPOINTSCALC_YES ) {
            ma_w[13] = 1.0;
            ma_w[14] = 1.0;
            ma_w[15] = 1.0;
        }
    }
    else if ( currstd == STD_EU2 || currstd == STD_EU1 || currstd == STD_EU0 ) {

        m_numberOfPoints = ESCPOINTSNUMBER;

        prepArrays();

        ma_n[ 0] = m_idle;
        ma_n[ 1] = m_n_interim;
        ma_n[ 2] = m_n_interim;
        ma_n[ 3] = m_n_interim;
        ma_n[ 4] = m_n_interim;
        ma_n[ 5] = m_n_interim;
        ma_n[ 6] = m_idle;
        ma_n[ 7] = m_n_rated;
        ma_n[ 8] = m_n_rated;
        ma_n[ 9] = m_n_rated;
        ma_n[10] = m_n_rated;
        ma_n[11] = m_n_rated;
        ma_n[12] = m_idle;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_N_fan[i] = N_fan(m_N_fan_rated, ma_n[i], m_n_rated);
        }

        ma_Ne_brutto[ 0] = 0;
        ma_Ne_brutto[ 1] = 0.10 * (m_Ne_interim - ma_N_fan[1]) + ma_N_fan[1];
        ma_Ne_brutto[ 2] = 0.25 * (m_Ne_interim - ma_N_fan[2]) + ma_N_fan[2];
        ma_Ne_brutto[ 3] = 0.50 * (m_Ne_interim - ma_N_fan[3]) + ma_N_fan[3];
        ma_Ne_brutto[ 4] = 0.75 * (m_Ne_interim - ma_N_fan[4]) + ma_N_fan[4];
        ma_Ne_brutto[ 5] = m_Ne_interim;
        ma_Ne_brutto[ 6] = 0;
        ma_Ne_brutto[ 7] = m_Ne_rated;
        ma_Ne_brutto[ 8] = 0.75 * (m_Ne_rated - ma_N_fan[8]) + ma_N_fan[8];
        ma_Ne_brutto[ 9] = 0.50 * (m_Ne_rated - ma_N_fan[9]) + ma_N_fan[9];
        ma_Ne_brutto[10] = 0.25 * (m_Ne_rated - ma_N_fan[10]) + ma_N_fan[10];
        ma_Ne_brutto[11] = 0.10 * (m_Ne_rated - ma_N_fan[11]) + ma_N_fan[11];
        ma_Ne_brutto[12] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[ 0] = 0.0833;
        ma_w[ 1] = 0.080;
        ma_w[ 2] = 0.080;
        ma_w[ 3] = 0.080;
        ma_w[ 4] = 0.080;
        ma_w[ 5] = 0.250;
        ma_w[ 6] = 0.0833;
        ma_w[ 7] = 0.100;
        ma_w[ 8] = 0.020;
        ma_w[ 9] = 0.020;
        ma_w[10] = 0.020;
        ma_w[11] = 0.020;
        ma_w[12] = 0.0833;
    }
    else if ( currstd == STD_OST3700123481 || currstd == STD_GOST17220597 ) {

        m_numberOfPoints = ESCPOINTSNUMBER;

        prepArrays();

        ma_n[ 0] = m_idle;
        ma_n[ 1] = m_n_interim;
        ma_n[ 2] = m_n_interim;
        ma_n[ 3] = m_n_interim;
        ma_n[ 4] = m_n_interim;
        ma_n[ 5] = m_n_interim;
        ma_n[ 6] = m_idle;
        ma_n[ 7] = m_n_rated;
        ma_n[ 8] = m_n_rated;
        ma_n[ 9] = m_n_rated;
        ma_n[10] = m_n_rated;
        ma_n[11] = m_n_rated;
        ma_n[12] = m_idle;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_N_fan[i] = N_fan(m_N_fan_rated, ma_n[i], m_n_rated);
        }

        ma_Ne_brutto[ 0] = 0;

        if ( currstd == STD_OST3700123481 ) {
            ma_Ne_brutto[ 1] = 0.02 * (m_Ne_interim - ma_N_fan[1]) + ma_N_fan[1];
        }
        else {
            ma_Ne_brutto[ 1] = 0.10 * (m_Ne_interim - ma_N_fan[1]) + ma_N_fan[1];
        }

        ma_Ne_brutto[ 2] = 0.25 * (m_Ne_interim - ma_N_fan[2]) + ma_N_fan[2];
        ma_Ne_brutto[ 3] = 0.50 * (m_Ne_interim - ma_N_fan[3]) + ma_N_fan[3];
        ma_Ne_brutto[ 4] = 0.75 * (m_Ne_interim - ma_N_fan[4]) + ma_N_fan[4];
        ma_Ne_brutto[ 5] = m_Ne_interim;
        ma_Ne_brutto[ 6] = 0;
        ma_Ne_brutto[ 7] = m_Ne_rated;
        ma_Ne_brutto[ 8] = 0.75 * (m_Ne_rated - ma_N_fan[8]) + ma_N_fan[8];
        ma_Ne_brutto[ 9] = 0.50 * (m_Ne_rated - ma_N_fan[9]) + ma_N_fan[9];
        ma_Ne_brutto[10] = 0.25 * (m_Ne_rated - ma_N_fan[10]) + ma_N_fan[10];

        if ( currstd == STD_OST3700123481 ) {
            ma_Ne_brutto[11] = 0.02 * (m_Ne_rated - ma_N_fan[11]) + ma_N_fan[11];
        }
        else {
            ma_Ne_brutto[11] = 0.10 * (m_Ne_rated - ma_N_fan[11]) + ma_N_fan[11];
        }

        ma_Ne_brutto[12] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        if ( currstd == STD_OST3700123481 ) {
            ma_w[ 0] = 0.066666667;
            ma_w[ 1] = 0.080;
            ma_w[ 2] = 0.080;
            ma_w[ 3] = 0.080;
            ma_w[ 4] = 0.080;
            ma_w[ 5] = 0.080;
            ma_w[ 6] = 0.066666667;
            ma_w[ 7] = 0.080;
            ma_w[ 8] = 0.080;
            ma_w[ 9] = 0.080;
            ma_w[10] = 0.080;
            ma_w[11] = 0.080;
            ma_w[12] = 0.066666667;
        }
        else {
            ma_w[ 0] = 0.0833;
            ma_w[ 1] = 0.080;
            ma_w[ 2] = 0.080;
            ma_w[ 3] = 0.080;
            ma_w[ 4] = 0.080;
            ma_w[ 5] = 0.250;
            ma_w[ 6] = 0.0833;
            ma_w[ 7] = 0.100;
            ma_w[ 8] = 0.020;
            ma_w[ 9] = 0.020;
            ma_w[10] = 0.020;
            ma_w[11] = 0.020;
            ma_w[12] = 0.0833;
        }
    }
    else if ( currstd == STD_R96E8 || currstd == STD_R96F8 ||
              currstd == STD_R96G8 || currstd == STD_R96D8 ||
              currstd == STD_R96H8 || currstd == STD_R96I8 ||
              currstd == STD_R96J8 || currstd == STD_R96K8 ) {

        m_numberOfPoints = H8POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_rated;
        ma_n[2] = m_n_rated;
        ma_n[3] = m_n_rated;
        ma_n[4] = m_n_interim;
        ma_n[5] = m_n_interim;
        ma_n[6] = m_n_interim;
        ma_n[7] = m_idle;

        ma_Ne_brutto[0] =         m_Ne_rated;
        ma_Ne_brutto[1] = 0.75  * m_Ne_rated;
        ma_Ne_brutto[2] = 0.50  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.10  * m_Ne_rated;
        ma_Ne_brutto[4] =         m_Ne_interim;
        ma_Ne_brutto[5] = 0.75  * m_Ne_interim;
        ma_Ne_brutto[6] = 0.50  * m_Ne_interim;
        ma_Ne_brutto[7] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
            ma_N_fan[i] = N_fan(m_N_fan_rated, ma_n[i], m_n_rated);
        }

        ma_w[0] = 0.15;
        ma_w[1] = 0.15;
        ma_w[2] = 0.15;
        ma_w[3] = 0.10;
        ma_w[4] = 0.10;
        ma_w[5] = 0.10;
        ma_w[6] = 0.10;
        ma_w[7] = 0.15;
    }
    else if ( currstd == STD_R96E5 || currstd == STD_R96F5 ||
              currstd == STD_R96G5 || currstd == STD_R96D5 ||
              currstd == STD_R96H5 || currstd == STD_R96I5 ||
              currstd == STD_R96J5 || currstd == STD_R96K5 ) {

        m_numberOfPoints = H5POINTSNUMBER;

        prepArrays();

        ma_Ne_brutto[0] =         m_Ne_rated;
        ma_Ne_brutto[1] = 0.75  * m_Ne_rated;
        ma_Ne_brutto[2] = 0.50  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.25  * m_Ne_rated;
        ma_Ne_brutto[4] = 0.10  * m_Ne_rated;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_n[i] = m_n_rated;
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
            ma_N_fan[i] = m_N_fan_rated;
        }

        ma_w[0] = 0.05;
        ma_w[1] = 0.25;
        ma_w[2] = 0.30;
        ma_w[3] = 0.30;
        ma_w[4] = 0.10;
    }
    else if ( currstd == STD_C1 ) {

        m_numberOfPoints = C1POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_rated;
        ma_n[2] = m_n_rated;
        ma_n[3] = m_n_rated;
        ma_n[4] = m_n_interim;
        ma_n[5] = m_n_interim;
        ma_n[6] = m_n_interim;
        ma_n[7] = m_idle;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.5  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.1  * m_Ne_rated;
        ma_Ne_brutto[4] =        m_Ne_interim;
        ma_Ne_brutto[5] = 0.75 * m_Ne_interim;
        ma_Ne_brutto[6] = 0.5  * m_Ne_interim;
        ma_Ne_brutto[7] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.15;
        ma_w[1] = 0.15;
        ma_w[2] = 0.15;
        ma_w[3] = 0.1;
        ma_w[4] = 0.1;
        ma_w[5] = 0.1;
        ma_w[6] = 0.1;
        ma_w[7] = 0.15;
    }
    else if ( currstd == STD_D1 ) {

        m_numberOfPoints = D1POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_rated;
        ma_n[2] = m_n_rated;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.5  * m_Ne_rated;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.3;
        ma_w[1] = 0.5;
        ma_w[2] = 0.2;
    }
    else if ( currstd == STD_D2 ) {

        m_numberOfPoints = D2POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_rated;
        ma_n[2] = m_n_rated;
        ma_n[3] = m_n_rated;
        ma_n[4] = m_n_rated;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.5  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.25 * m_Ne_rated;
        ma_Ne_brutto[4] = 0.1  * m_Ne_rated;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.05;
        ma_w[1] = 0.25;
        ma_w[2] = 0.3;
        ma_w[3] = 0.3;
        ma_w[4] = 0.1;
    }
    else if ( currstd == STD_E1 ) {

        m_numberOfPoints = E1POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_rated;
        ma_n[2] = m_n_interim;
        ma_n[3] = m_n_interim;
        ma_n[4] = m_idle;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.75 * m_Ne_interim;
        ma_Ne_brutto[3] = 0.5  * m_Ne_interim;
        ma_Ne_brutto[4] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.08;
        ma_w[1] = 0.11;
        ma_w[2] = 0.19;
        ma_w[3] = 0.32;
        ma_w[4] = 0.3;
    }
    else if ( currstd == STD_E2 ) {

        m_numberOfPoints = E2POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_rated;
        ma_n[2] = m_n_rated;
        ma_n[3] = m_n_rated;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.5  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.25 * m_Ne_rated;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.2;
        ma_w[1] = 0.5;
        ma_w[2] = 0.15;
        ma_w[3] = 0.15;
    }
    else if ( currstd == STD_E3 ) {

        m_numberOfPoints = E3POINTSNUMBER;

        prepArrays();

        ma_n[0] =        m_n_rated;
        ma_n[1] = 0.91 * m_n_rated;
        ma_n[2] = 0.8  * m_n_rated;
        ma_n[3] = 0.63 * m_n_rated;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.5  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.25 * m_Ne_rated;

        ma_w[0] = 0.2;
        ma_w[1] = 0.5;
        ma_w[2] = 0.15;
        ma_w[3] = 0.15;
    }
    else if ( currstd == STD_E5 ) {

        m_numberOfPoints = E5POINTSNUMBER;

        prepArrays();

        ma_n[0] =        m_n_rated;
        ma_n[1] = 0.91 * m_n_rated;
        ma_n[2] = 0.8  * m_n_rated;
        ma_n[3] = 0.63 * m_n_rated;
        ma_n[4] =        m_idle;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.5  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.25 * m_Ne_rated;
        ma_Ne_brutto[4] = 0;

        ma_w[0] = 0.08;
        ma_w[1] = 0.13;
        ma_w[2] = 0.17;
        ma_w[3] = 0.32;
        ma_w[4] = 0.3;
    }
    else if ( currstd == STD_F ) {

        m_numberOfPoints = FPOINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_interim;
        ma_n[2] = m_idle;

        ma_Ne_brutto[0] =       m_Ne_rated;
        ma_Ne_brutto[1] = 0.5 * m_Ne_interim;
        ma_Ne_brutto[2] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.25;
        ma_w[1] = 0.15;
        ma_w[2] = 0.6;
    }
    else if ( currstd == STD_G1 ) {

        m_numberOfPoints = G1POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_interim;
        ma_n[1] = m_n_interim;
        ma_n[2] = m_n_interim;
        ma_n[3] = m_n_interim;
        ma_n[4] = m_n_interim;
        ma_n[5] = m_idle;

        ma_Ne_brutto[0] = m_Ne_interim;
        ma_Ne_brutto[1] = 0.75 * m_Ne_interim;
        ma_Ne_brutto[2] = 0.5 * m_Ne_interim;
        ma_Ne_brutto[3] = 0.25 * m_Ne_interim;
        ma_Ne_brutto[4] = 0.1 * m_Ne_interim;
        ma_Ne_brutto[5] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.09;
        ma_w[1] = 0.2;
        ma_w[2] = 0.29;
        ma_w[3] = 0.3;
        ma_w[4] = 0.07;
        ma_w[5] = 0.05;
    }
    else if ( currstd == STD_G2 ) {

        m_numberOfPoints = G2POINTSNUMBER;

        prepArrays();

        ma_n[0] = m_n_rated;
        ma_n[1] = m_n_rated;
        ma_n[2] = m_n_rated;
        ma_n[3] = m_n_rated;
        ma_n[4] = m_n_rated;
        ma_n[5] = m_idle;

        ma_Ne_brutto[0] =        m_Ne_rated;
        ma_Ne_brutto[1] = 0.75 * m_Ne_rated;
        ma_Ne_brutto[2] = 0.5  * m_Ne_rated;
        ma_Ne_brutto[3] = 0.25 * m_Ne_rated;
        ma_Ne_brutto[4] = 0.1  * m_Ne_rated;
        ma_Ne_brutto[5] = 0;

        for ( ptrdiff_t i=0; i<m_numberOfPoints; i++ ) {
            ma_Me_brutto[i] = ma_Ne_brutto[i] * 9550.0 / ma_n[i];
        }

        ma_w[0] = 0.09;
        ma_w[1] = 0.2;
        ma_w[2] = 0.29;
        ma_w[3] = 0.3;
        ma_w[4] = 0.07;
        ma_w[5] = 0.05;
    }
    else {
        throw txError("Unknown value of parameter \"standard\"!");
    }
}
예제 #26
0
QString objDescr() {

    QFile engDescrFile("r49data/engdescr.conf");

    if ( !engDescrFile.exists() ) {
        return "...";
    }

    if ( !engDescrFile.open(QIODevice::ReadOnly | QIODevice::Text) ) {

        throw txError("Can not open engine description file "
                      + engDescrFile.fileName() + "!");
    }

    QString str;
    QStringList elements;
    QRegExp comment("^//");

    QStringList formattedBlocks;
    QString formattedDescr;

    while ( !engDescrFile.atEnd() ) {

        str = engDescrFile.readLine().trimmed();

        if ( str.isEmpty() || str.contains(comment) ) {
            continue;
        }

        elements = str.split("=");

        if ( elements.size() != 2 ) {
            continue;
        }

        formattedBlocks.push_back(elements[0] + " " + elements[1] + "; ");

        elements.clear();
    }

    engDescrFile.close();

    if ( formattedBlocks.isEmpty() ) {
        return "...";
    }

    if ( formattedBlocks.size() == 1 ) {

        QString retstr = formattedBlocks[0];
        retstr.truncate(retstr.size()-2);

        return retstr;
    }
    else {

        QString currStr = formattedBlocks[0];
        ptrdiff_t currStrNum = 0;
        ptrdiff_t maxStrWidth = 110;

        for ( ptrdiff_t i=1; i<formattedBlocks.size(); i++ ) {

            if ( currStrNum > 0 ) {
                maxStrWidth = 135;
            }

            if ( (currStr.size() + formattedBlocks[i].size()) <= maxStrWidth ) {

                currStr.append(formattedBlocks[i]);
            }
            else {

                formattedDescr.append(currStr);
                currStr = "\n                         ";
                currStr.append(formattedBlocks[i]);

                currStrNum++;
            }
        }

        formattedDescr.append(currStr);
    }

    formattedDescr.truncate(formattedDescr.size()-2);

    return formattedDescr;
}