Ejemplo n.º 1
0
bool SystemInterface::parse_options(int argc, char **argv)
{
    int option_index = options_.parse(argc, argv);
    if ( option_index < 1 )
        return false;

    // Get options from environment variable also...
    char *options = getenv("exomatlab");
    if (options != NULL) {
        std::cerr << "\nThe following options were specified via the EXOMATLAB_OPTIONS environment variable:\n"
                  << "\t" << options << "\n\n";
        options_.parse(options, options_.basename(*argv));
    }

    if (options_.retrieve("help")) {
        options_.usage();
        std::cerr << "\n\tCan also set options via EXOMATLAB_OPTIONS environment variable.\n";
        std::cerr << "\n\t->->-> Send email to [email protected] for exomatlab support.<-<-<-\n";

        exit(EXIT_SUCCESS);
    }

    if (options_.retrieve("version")) {
        // Version is printed up front, just exit...
        exit(0);
    }

    {
        const char *temp = options_.retrieve("field_suffix");
        if (strcmp("none", temp) == 0) {
            // This is ASCII 1 which means it won't be found so
            // vector/tensor won't be recognized by default.
            fieldSuffix_ = 1;
        } else {
            fieldSuffix_ = temp[0];
        }
    }

    {
        const char *temp = options_.retrieve("list");
        if (temp != NULL) {
            listVars_ = true;
            parse_variable_names(temp, &varsToList_);
        }
    }


    {
        const char *temp = options_.retrieve("gvar");
        parse_variable_names(temp, &globalVarNames_);
    }

#if 0
    {
        const char *temp = options_.retrieve("nvar");
        parse_variable_names(temp, &nodeVarNames_);
    }

    {
        const char *temp = options_.retrieve("evar");
        parse_variable_names(temp, &elemVarNames_);
    }

    {
        const char *temp = options_.retrieve("nsetvar");
        parse_variable_names(temp, &nsetVarNames_);
    }

    {
        const char *temp = options_.retrieve("ssetvar");
        parse_variable_names(temp, &ssetVarNames_);
    }
#endif

    {
        const char *temp = options_.retrieve("minimum_time");
        if (temp != NULL)
            minimumTime_  = strtod(temp, NULL);
    }

    {
        const char *temp = options_.retrieve("maximum_time");
        if (temp != NULL)
            maximumTime_  = strtod(temp, NULL);
    }

    if (options_.retrieve("copyright")) {
        std::cerr << "\n"
                  << "Copyright(C) 2011 Sandia Corporation.  Under the terms of Contract\n"
                  << "DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains\n"
                  << "certain rights in this software\n"
                  << "\n"
                  << "Redistribution and use in source and binary forms, with or without\n"
                  << "modification, are permitted provided that the following conditions are\n"
                  << "met:\n"
                  << "\n"
                  << "* Redistributions of source code must retain the above copyright\n"
                  << "   notice, this list of conditions and the following disclaimer.\n"
                  << "          \n"
                  << "* Redistributions in binary form must reproduce the above\n"
                  << "  copyright notice, this list of conditions and the following\n"
                  << "  disclaimer in the documentation and/or other materials provided\n"
                  << "  with the distribution.\n"
                  << "                        \n"
                  << "* Neither the name of Sandia Corporation nor the names of its\n"
                  << "  contributors may be used to endorse or promote products derived\n"
                  << "  from this software without specific prior written permission.\n"
                  << "                                                \n"
                  << "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
                  << "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
                  << "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
                  << "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n"
                  << "OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
                  << "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
                  << "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
                  << "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
                  << "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
                  << "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
                  << "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
                  << "\n";
        exit(EXIT_SUCCESS);
    }

    // Parse remaining options as input file.
    if (option_index < argc) {
        inputFile_ = argv[option_index++];
        if (option_index < argc) {
            outputFile_ = argv[option_index++];
        } else {
            outputFile_ = Ioss::FileInfo(inputFile_).basename() + ".m";
        }
    } else {
        options_.usage();
        std::cerr << "\nERROR: no files specified\n\n";
        return false;
    }
    return true;
}
Ejemplo n.º 2
0
bool Excn::SystemInterface::parse_options(int argc, char **argv)
{
  // Get options from environment variable also...
  char *options = getenv("EPU_OPTIONS");
  if (options != nullptr) {
    std::cout
        << "\nThe following options were specified via the EPU_OPTIONS environment variable:\n"
        << "\t" << options << "\n\n";
    options_.parse(options, options_.basename(*argv));
  }

  int option_index = options_.parse(argc, argv);
  if (option_index < 1)
    return false;

  if (options_.retrieve("help")) {
    options_.usage();
    std::cout << "\n\tCan also set options via EPU_OPTIONS environment variable.\n\n"
              << "\tWrites: current_directory/basename.suf\n"
              << "\tReads:  root#o/sub/basename.suf.#p.0 to\n"
              << "\t\troot(#o+#p)%#r/sub/basename.suf.#p.#p\n";
    std::cout << "\n\t->->-> Send email to [email protected] for epu support.<-<-<-\n";
    exit(EXIT_SUCCESS);
  }

  if (options_.retrieve("version")) {
    // Version is printed up front, just exit...
    exit(0);
  }

  {
    const char *temp = options_.retrieve("extension");
    if (temp != nullptr) {
      inExtension_ = temp;
    }
  }

  {
    const char *temp = options_.retrieve("output_extension");
    if (temp != nullptr) {
      outExtension_ = temp;
    }
  }

  {
    const char *temp = options_.retrieve("offset");
    if (temp != nullptr) {
      raidOffset_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("raid_count");
    if (temp != nullptr) {
      raidCount_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("processor_count");
    if (temp != nullptr) {
      processorCount_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("Part_count");
    if (temp != nullptr) {
      partCount_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("start_part");
    if (temp != nullptr) {
      startPart_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("current_directory");
    if (temp != nullptr) {
      cwd_ = temp;
    }
  }

  {
    const char *temp = options_.retrieve("Root_directory");
    if (temp != nullptr) {
      rootDirectory_ = temp;
    }
  }

  {
    const char *temp = options_.retrieve("Subdirectory");
    if (temp != nullptr) {
      subDirectory_ = temp;
    }
  }

  {
    const char *temp = options_.retrieve("debug");
    if (temp != nullptr) {
      debugLevel_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("width");
    if (temp != nullptr) {
      screenWidth_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("steps");
    if (temp != nullptr) {
      parse_step_option(temp);
    }
  }

  {
    const char *temp = options_.retrieve("gvar");
    parse_variable_names(temp, &globalVarNames_);
  }

  {
    const char *temp = options_.retrieve("nvar");
    parse_variable_names(temp, &nodeVarNames_);
  }

  {
    const char *temp = options_.retrieve("evar");
    parse_variable_names(temp, &elemVarNames_);
  }

  {
    const char *temp = options_.retrieve("nsetvar");
    parse_variable_names(temp, &nsetVarNames_);
  }

  {
    const char *temp = options_.retrieve("ssetvar");
    parse_variable_names(temp, &ssetVarNames_);
  }

  if (options_.retrieve("add_processor_id")) {
    addProcessorId_ = true;
  }
  else {
    addProcessorId_ = false;
  }

  if (options_.retrieve("large_model")) {
    useNetcdf4_ = true;
    std::cerr << "\nWARNING: the -large_model option is deprecated; please use -netcdf4 instead.\n";
  }

  if (options_.retrieve("netcdf4")) {
    useNetcdf4_ = true;
  }

  if (options_.retrieve("append")) {
    append_ = true;
  }

  if (options_.retrieve("64")) {
    intIs64Bit_ = true;
  }

  {
    const char *temp = options_.retrieve("compress_data");
    if (temp != nullptr) {
      compressData_ = strtol(temp, nullptr, 10);
    }
  }

  if (options_.retrieve("sum_shared_nodes")) {
    sumSharedNodes_ = true;
  }

  if (options_.retrieve("append")) {
    append_ = true;
  }

  {
    const char *temp = options_.retrieve("subcycle");
    if (temp != nullptr) {
      subcycle_ = strtol(temp, nullptr, 10);
    }
  }

  {
    const char *temp = options_.retrieve("cycle");
    if (temp != nullptr) {
      cycle_ = strtol(temp, nullptr, 10);
    }
  }

  if (options_.retrieve("join_subcycles")) {
    subcycleJoin_ = true;
  }

  if (options_.retrieve("map")) {
    mapIds_ = true;
  }

  if (options_.retrieve("nomap")) {
    mapIds_ = false;
  }

  if (options_.retrieve("omit_nodesets")) {
    omitNodesets_ = true;
  }
  else {
    omitNodesets_ = false;
  }

  if (options_.retrieve("omit_sidesets")) {
    omitSidesets_ = true;
  }
  else {
    omitSidesets_ = false;
  }

  if (options_.retrieve("output_shared_nodes")) {
    outputSharedNodes_ = true;
  }

  if (options_.retrieve("copyright")) {
    std::cout << "\n"
              << "Copyright(C) 2010 Sandia Corporation.  Under the terms of Contract\n"
              << "DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains\n"
              << "certain rights in this software\n"
              << "\n"
              << "Redistribution and use in source and binary forms, with or without\n"
              << "modification, are permitted provided that the following conditions are\n"
              << "met:\n"
              << "\n"
              << "    * Redistributions of source code must retain the above copyright\n"
              << "      notice, this list of conditions and the following disclaimer.\n"
              << "\n"
              << "    * Redistributions in binary form must reproduce the above\n"
              << "      copyright notice, this list of conditions and the following\n"
              << "      disclaimer in the documentation and/or other materials provided\n"
              << "      with the distribution.\n"
              << "\n"
              << "    * Neither the name of Sandia Corporation nor the names of its\n"
              << "      contributors may be used to endorse or promote products derived\n"
              << "      from this software without specific prior written permission.\n"
              << "\n"
              << "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
              << "'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
              << "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
              << "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n"
              << "OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
              << "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
              << "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
              << "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
              << "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
              << "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
              << "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n";
    exit(EXIT_SUCCESS);
  }

  // Parse remaining options as directory paths.
  if (option_index < argc) {
    basename_ = argv[option_index];

    if (options_.retrieve("auto")) {
      // Determine Root, Proc, Extension, and Basename automatically
      // by parsing the basename_ entered by the user.  Assumed to be
      // in the form: "/directory/sub/basename.ext.#proc.34"
      bool success = decompose_filename(basename_);
      if (!success) {
        std::cerr
            << "\nERROR: (EPU) If the '-auto' option is specified, the basename must specify an "
               "existing filename.\n"
            << "       The entered basename does not contain an extension or processor count.\n";
        return false;
      }
    }
  }
  else {
    std::cerr << "\nERROR: (EPU) basename not specified\n\n";
    return false;
  }
  return true;
}