示例#1
0
// -------------------------------------------------------------
// PETScConfigurable::p_unprocessOptions
// -------------------------------------------------------------
void
PETScConfigurable::p_unprocessOptions(void)
{
  boost::char_separator<char> sep(" \t\f\n\r\v", "");
  boost::tokenizer<boost::char_separator<char> > 
    opttok(p_loadedOptions, sep);
  boost::tokenizer<boost::char_separator<char> >::iterator o;
  for (o = opttok.begin(); o != opttok.end(); ++o) {
    if ((*o)[0] == '-' && islower((*o)[1])) {
      PetscErrorCode ierr(0);
      try {
        if (verbose) {
          std::cout << "p_unprocessOptions: removing \"" 
                    << *o << "\"" << std::endl;
        }
        ierr = PetscOptionsClearValue(
#if PETSC_VERSION_GE(3,7,0)
                                    NULL,
#endif
                                    o->c_str());
      } catch (const PETSC_EXCEPTION_TYPE& e) {
        throw PETScException(ierr, e);
      }
    }
  } 
  p_loadedOptions.clear();
}
示例#2
0
size_t parse_command_line(int argc, const char* argv[], info_t* out_info, filter_chain::filter_t* out_filters, size_t max_filters)
{
	size_t nfilters = 0;

	info_t info;
	info.random_seed = timer::now_msi();

	const char* value = nullptr;
	char ch = opttok(&value, argc, argv, s_cmdline_opts);
	while (ch)
	{
		int ivalue = atoi(value);
		switch (ch)
		{
			case 'i':
			case 'e':
			{
				if (out_filters && nfilters < max_filters)
				{
					out_filters[nfilters].regex = value;
					out_filters[nfilters].type = ch == 'i' ? filter_chain::inclusion::include1 : filter_chain::inclusion::exclude1;
				}
				nfilters++;
				break;
			}

			case 'r': info.random_seed = atoi(value);         break;
			case 'n': info.num_iterations = atoi(value);      break;
			case '_': info.enable_leak_tracking = false;      break;
			case 'c': info.capture_leak_callstack = true;     break;
			case '!': info.break_on_alloc = ivalue;           break;
			case 't': info.terminate_other_processes = false; break;

			default: break;
		}

		ch = opttok(&value);
	}

	if (out_info)
		*out_info = info;
	
	return nfilters;
}
示例#3
0
/** 
 * 
 * 
 * @param comm 
 * @param props 
 * 
 * @return PETSc options prefix to use
 */
void
PETScConfigurable::p_processOptions(utility::Configuration::CursorPtr props)
{
  if (!props) return;

  p_prefix = props->get(p_prefixKey, p_generatePrefix(p_comm));
  if (*p_prefix.rbegin() != '_') {
    p_prefix.append("_");
  }

  std::string optsorig, optsmod, optsfmt;
  optsorig = props->get(p_optionsKey, "");

  boost::char_separator<char> sep(" \t\f\n\r\v", "");
  boost::tokenizer<boost::char_separator<char> > 
    opttok(optsorig, sep);
  boost::tokenizer<boost::char_separator<char> >::iterator o;
  for (o = opttok.begin(); o != opttok.end(); ++o) {
    optsfmt.append(*o);
    optsfmt.append(" ");
    optsmod.append(prefixOptionMaybe(p_prefix, *o));
    optsmod.append(" ");
  }

  if (verbose) {
    std::cout << "p_processOptions:  in: " << optsorig << std::endl;
    std::cout << "p_processOptions: fmt: " << optsfmt << std::endl;
    std::cout << "p_processOptions: out: " << optsmod << std::endl;
  }
  p_loadedOptions = optsmod;

  PetscErrorCode ierr(0);
  try {
    ierr = PetscOptionsInsertString(
#if PETSC_VERSION_GE(3,7,0)
                                    NULL,
#endif
                                    p_loadedOptions.c_str()); CHKERRXX(ierr);
  } catch (const PETSC_EXCEPTION_TYPE& e) {
    throw PETScException(ierr, e);
  }
  return;
}