Example #1
0
double Energy::fb(const AMod::Arrow& arrowSR) {
  const AMod::Atom& ai = arrowSR.host();
  const AMod::Arrow& arij = arrowSR;
  const BondDatumSR& bdij = bondDataSR[arij.bond().id()];
  const double rij = arij.bond().r;
  const double Nij = bdij.N_[arij.position()];
  double costhijk;
  double Nijk;
  int k, kmax = ai.arrows.size();
  double sum = 0.0;
  for(k = 0; k < kmax; k++) {
    if(k == arij.id()) continue;
    const AMod::Arrow& arik = ai.arrows[k];
    const BondDatumSR& bdik = bondDataSR[arik.bond().id()];
    costhijk = costh(arij.dx,arik.dx);
    Nijk = Nij-bdik.SdN;
    sum += bdik.SdN*fH(rij-arik.bond().r)*fG(costhijk,Nijk);
  }
  return 1.0/std::sqrt(1.0+sum);
}
Example #2
0
int main(int argc, char* args[]) {
  extern FILE *yyin;  // файл module_lex.cpp
  extern QString resultH, resultCpp; // файл generator.cpp
  yyin = 0; //по умолчанию будет заполнено в функции yylex() в значение stdin

  const char *tsmName = args[0]; // имя запускаемого файла
  //обрабатываем входные параметры
  QString resname, filename, prefix;
  for ( int i=1; i<argc; ++i ) {
    if ( args[i][0] == '-' ) { // настроечный параметр
      switch (args[i][1]) {
      case 't': // установка типа формируемого выхода (клиент или сервер)
        ++i;
        if (strcmp(args[i], "client" )==0)
          tType = ttClient;
        else if (strcmp(args[i], "server" )==0)
          tType = ttServer;
        break;
      case 'r': // установка наименования результирующих файлов
        ++i;
        resname = args[i];
        break;
      case 'p':   // установка префикса выходного файла
        ++i;
        prefix = args[i];
        break;
      //case 's': // задаем имя файлов шаблонов
      // case 'x':
        // ...
        //break;
      case 'h': // запрос справки по использованию
      default:  // неизвестный параметр
        badUsage(tsmName);
        return 0;
      }
    } else { // последний параметр - имя файла для обработки
      filename = args[i];
#ifdef TSMDEBUG
      qDebug()<<"File to process "<<args[i];
      qDebug()<<"make "<< ( (tType==ttClient) ? "client" : "server" );
#endif
      break;
    }
  }
  if ( resname=="" ) {
    QRegExp rx("(\\w+)\\.\\w+");
    if ( rx.indexIn(filename)>=0 ) {
      resname = rx.cap(1);
    } else {
      resname = filename;
    }
  }
  if (prefix=="") prefix = "tsm_";
  QRegExp rx("^" + prefix + "\\w+");
  if ( !rx.exactMatch(resname) )  // если начинается не с $prefix
    resname = prefix + resname;
  qDebug() << "RES NAME = " << resname;

  if ( tType == ttUndefined || filename == "" ) {
    badUsage(tsmName);
    return -1;
  }

  yyin = fopen(filename.toLocal8Bit().data(), "r");
  if (yyin == 0) {
    qCritical() << "Unable to open file " << filename;
    return -1;
  }

  preDefined();
  int result = yyparse();

  if (yyin) fclose(yyin);

#ifdef TSMDEBUG
  //qDebug() << resultH << "\n";
  //qDebug() << resultCpp << "\n";
#endif

  QString hGuardian = "_" + resname.toUpper() + "_H_\n";

  QFile fH(resname+".h"), fCpp(resname+".cpp");

  fH.open(QIODevice::WriteOnly);
  QTextStream outH(&fH);
  outH << "#ifndef " << hGuardian;
  outH << "#define " << hGuardian << "\n";
  outH << "#include <QList>\n";
  outH << "#include <tsm/tsminterface.h>\n\n";
  //outH << "class Command;\n" ;    // -> см. файл <tsm/commander.h>
  //outH << "namespace TSM { class Commander; }\n\n" ;
  outH << resultH;
  outH << "\n#endif // " << hGuardian;

  fCpp.open(QIODevice::WriteOnly);
  QTextStream outCpp(&fCpp);
  outCpp << "#include <cmdparser.h>\n";
  outCpp << "#include <tsm/commander.h>\n\n";
  outCpp << "#include \"" + resname + ".h\"\n\n";
  outCpp << resultCpp << "\n";

  return result;
}