75static void Tokenize(
const std::string& str, std::vector<std::string>& tokens,
 
   76              const std::string& delimiters = 
" ")
 
   79  std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
 
   81  std::string::size_type pos     = str.find_first_of(delimiters, lastPos);
 
   83  while (std::string::npos != pos || std::string::npos != lastPos)
 
   86    tokens.push_back(str.substr(lastPos, pos - lastPos));
 
   88    lastPos = str.find_first_not_of(delimiters, pos);
 
   90    pos = str.find_first_of(delimiters, lastPos);
 
 
  116  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  117                     "No file has been opened");
 
  121  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  123    const XMLObject& child = fileXML_->getChild(i);
 
  124    std::string tag = child.getTag();
 
  128      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  131        int NumGlobalRows = child.getRequiredInt(
"Rows");
 
  132        int NumGlobalCols = child.getRequiredInt(
"Columns");
 
  133        int NumGlobalEntries = child.getRequiredInt(
"Entries");
 
  134        int Offset = child.getRequiredInt(
"StartingIndex");
 
  135        if (debug) std::cout << NumGlobalCols << NumGlobalEntries << Offset << std::endl;
 
  140        for (
int j = 0; j < child.numContentLines(); ++j)
 
  142          std::vector<std::string> tokens;
 
  143          const std::string& line = child.getContentLine(j);
 
  145          if (tokens.size() < 2) 
continue;
 
  148          row = atoi((
char*)tokens[0].c_str());
 
  149          col = atoi((
char*)tokens[1].c_str());
 
  151          if (map.
LID(row) != -1)
 
 
  165  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  166                     "No file has been opened");
 
  170  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  172    const XMLObject& child = fileXML_->getChild(i);
 
  173    std::string tag = child.getTag();
 
  177      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  180        long long NumGlobalRows = child.getRequired<
long long>(
"Rows");
 
  181        long long NumGlobalCols = child.getRequired<
long long>(
"Columns");
 
  182        long long NumGlobalEntries = child.getRequired<
long long>(
"Entries");
 
  183        int Offset = child.getRequiredInt(
"StartingIndex");
 
  184        if (debug) std::cout << NumGlobalCols << NumGlobalEntries << Offset << std::endl;
 
  189        for (
int j = 0; j < child.numContentLines(); ++j)
 
  191          std::vector<std::string> tokens;
 
  192          const std::string& line = child.getContentLine(j);
 
  194          if (tokens.size() < 2) 
continue;
 
  200          row = _strtoi64((
char*)tokens[0].c_str(), &endp, base);
 
  201          col = _strtoi64((
char*)tokens[1].c_str(), &endp, base);
 
  204          std::istringstream ss_row(tokens[0]);
 
  206          std::istringstream ss_col(tokens[1]);
 
  209          row = strtoll((
char*)tokens[0].c_str(), &endp, base);
 
  210          col = strtoll((
char*)tokens[1].c_str(), &endp, base);
 
  214          if (map.
LID(row) != -1)
 
 
  229  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  230                     "No file has been opened");
 
  234  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  236    const XMLObject& child = fileXML_->getChild(i);
 
  237    std::string tag = child.getTag();
 
  239    if (tag == 
"PointMatrix")
 
  241      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  244        int NumGlobalRows = child.getRequiredInt(
"Rows");
 
  245        int NumGlobalCols = child.getRequiredInt(
"Columns");
 
  246        int NumGlobalNonzeros = child.getRequiredInt(
"Nonzeros");
 
  247        int Offset = child.getRequiredInt(
"StartingIndex");
 
  248        if (debug) std::cout << NumGlobalCols << NumGlobalNonzeros << Offset << std::endl;
 
  253        for (
int j = 0; j < child.numContentLines(); ++j)
 
  255          std::vector<std::string> tokens;
 
  256          const std::string& line = child.getContentLine(j);
 
  258          if (tokens.size() < 3) 
continue;
 
  262          row = atoi((
char*)tokens[0].c_str());
 
  263          col = atoi((
char*)tokens[1].c_str());
 
  264          sscanf((
char*)tokens[2].c_str(), 
"%lg", &val);
 
  267          if (map.
LID(row) != -1)
 
 
  281  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  282                     "No file has been opened");
 
  286  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  288    const XMLObject& child = fileXML_->getChild(i);
 
  289    std::string tag = child.getTag();
 
  291    if (tag == 
"PointMatrix")
 
  293      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  296        long long NumGlobalRows = child.getRequiredInt(
"Rows");
 
  297        long long NumGlobalCols = child.getRequiredInt(
"Columns");
 
  298        long long NumGlobalNonzeros = child.getRequiredInt(
"Nonzeros");
 
  299        int Offset = child.getRequiredInt(
"StartingIndex");
 
  300        if (debug) std::cout << NumGlobalCols << NumGlobalNonzeros << Offset << std::endl;
 
  305        for (
int j = 0; j < child.numContentLines(); ++j)
 
  307          std::vector<std::string> tokens;
 
  308          const std::string& line = child.getContentLine(j);
 
  310          if (tokens.size() < 3) 
continue;
 
  317          row = _strtoi64((
char*)tokens[0].c_str(), &endp, base);
 
  318          col = _strtoi64((
char*)tokens[1].c_str(), &endp, base);
 
  321          std::istringstream ss_row(tokens[0]);
 
  323          std::istringstream ss_col(tokens[1]);
 
  326          row = strtoll((
char*)tokens[0].c_str(), &endp, base);
 
  327          col = strtoll((
char*)tokens[1].c_str(), &endp, base);
 
  330          sscanf((
char*)tokens[2].c_str(), 
"%lg", &val);
 
  333          if (map.
LID(row) != -1)
 
 
  347  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  348                     "No file has been opened");
 
  353  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  355    const XMLObject& child = fileXML_->getChild(i);
 
  356    std::string tag = child.getTag();
 
  358    if (tag == 
"MultiVector")
 
  360      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  362        int GlobalLength = child.getRequiredInt(
"Length");
 
  363        int NumVectors = child.getRequiredInt(
"NumVectors");
 
  370        for (
int j = 0; j < child.numContentLines(); ++j)
 
  372          std::vector<std::string> tokens;
 
  374          const std::string& line = child.getContentLine(j);
 
  378          if (tokens.size() == 0) 
continue;
 
  380          TEUCHOS_TEST_FOR_EXCEPTION(tokens.size() != (
unsigned) NumVectors, std::logic_error,
 
  381                             "wrong number of tokens in line; " 
  382                             << 
"tokens.size() = " << tokens.size()
 
  383                             << 
", NumVectors = " << NumVectors);
 
  384          int tsize = (int) tokens.size();
 
  385          for (
int k = 0; k < tsize; ++k)
 
  387            if (Map.
LID(count) != -1)
 
  389              sscanf((
char*)(tokens[k].c_str()), 
"%lf", &val);
 
  391              (*MultiVector)[k][Map.
LID(count)] = val;
 
 
  406  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  407                     "No file has been opened");
 
  412  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  414    const XMLObject& child = fileXML_->getChild(i);
 
  415    std::string tag = child.getTag();
 
  417    if (tag == 
"MultiVector")
 
  419      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  421        long long GlobalLength = child.getRequired<
long long>(
"Length");
 
  422        int NumVectors = child.getRequiredInt(
"NumVectors");
 
  429        for (
long long j = 0; j < child.numContentLines(); ++j)
 
  431          std::vector<std::string> tokens;
 
  433          const std::string& line = child.getContentLine(j);
 
  437          if (tokens.size() == 0) 
continue;
 
  439          TEUCHOS_TEST_FOR_EXCEPTION(tokens.size() != (
unsigned) NumVectors, std::logic_error,
 
  440                             "wrong number of tokens in line; " 
  441                             << 
"tokens.size() = " << tokens.size()
 
  442                             << 
", NumVectors = " << NumVectors);
 
  443          int tsize = (int) tokens.size();
 
  444          for (
int k = 0; k < tsize; ++k)
 
  446            if (Map.
LID(count) != -1)
 
  448              sscanf((
char*)(tokens[k].c_str()), 
"%lf", &val);
 
  450              (*MultiVector)[k][Map.
LID(count)] = val;
 
 
  465  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  466                     "No file has been opened");
 
  471  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  473    const XMLObject& child = fileXML_->getChild(i);
 
  474    std::string tag = child.getTag();
 
  478      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  480        int NumGlobalElements = child.getRequiredInt(
"NumElements");
 
  481        int IndexBase = child.getRequiredInt(
"IndexBase");
 
  482        int NumProc = child.getRequiredInt(
"NumProc");
 
  484        TEUCHOS_TEST_FOR_EXCEPTION(NumProc != Comm_.NumProc(), std::logic_error,
 
  485                           "Requested map defined with different number of processors, " 
  486                           << 
"NumProc = " << NumProc << 
" while " 
  487                           << 
"Comm.NumProc() = " << Comm_.NumProc());
 
  490        sprintf(str, 
"ElementsOnProc%d", Comm_.MyPID());
 
  491        int NumMyElements = child.getRequiredInt(str);
 
  493        sprintf(str, 
"ElementsOnProc%d", Comm_.MyPID());
 
  495        std::vector<int> MyGlobalElements(NumMyElements);
 
  497        for (
int iproc = 0; iproc < child.numChildren(); ++iproc)
 
  499          const XMLObject& newChild = child.getChild(iproc);
 
  502          if (newChild.hasAttribute(
"ID") &&
 
  503              newChild.getRequiredInt(
"ID") == Comm_.MyPID())
 
  505            for (
int j = 0; j < newChild.numContentLines(); ++j)
 
  507              std::vector<std::string> tokens;
 
  509              const std::string& line = newChild.getContentLine(j);
 
  512              int tsize = (int) tokens.size();
 
  513              for (
int k = 0; k < tsize; ++k)
 
  515                MyGlobalElements[count++] = atoi((
char*)tokens[k].c_str());
 
  521        Map = 
new Epetra_Map(NumGlobalElements, NumMyElements,
 
  522                             &MyGlobalElements[0], IndexBase, Comm_);
 
 
  533  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  534                     "No file has been opened");
 
  539  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  541    const XMLObject& child = fileXML_->getChild(i);
 
  542    std::string tag = child.getTag();
 
  546      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  548        long long NumGlobalElements = child.getRequired<
long long>(
"NumElements");
 
  549        long long IndexBase = child.getRequired<
long long>(
"IndexBase");
 
  550        int NumProc = child.getRequiredInt(
"NumProc");
 
  552        TEUCHOS_TEST_FOR_EXCEPTION(NumProc != Comm_.NumProc(), std::logic_error,
 
  553                           "Requested map defined with different number of processors, " 
  554                           << 
"NumProc = " << NumProc << 
" while " 
  555                           << 
"Comm.NumProc() = " << Comm_.NumProc());
 
  558        sprintf(str, 
"ElementsOnProc%d", Comm_.MyPID());
 
  559        int NumMyElements = child.getRequiredInt(str);
 
  561        sprintf(str, 
"ElementsOnProc%d", Comm_.MyPID());
 
  563        std::vector<long long> MyGlobalElements(NumMyElements);
 
  565        for (
int iproc = 0; iproc < child.numChildren(); ++iproc)
 
  567          const XMLObject& newChild = child.getChild(iproc);
 
  570          if (newChild.hasAttribute(
"ID") &&
 
  571              newChild.getRequiredInt(
"ID") == Comm_.MyPID())
 
  573            for (
int j = 0; j < newChild.numContentLines(); ++j)
 
  575              std::vector<std::string> tokens;
 
  577              const std::string& line = newChild.getContentLine(j);
 
  580              int tsize = (int) tokens.size();
 
  581              for (
int k = 0; k < tsize; ++k)
 
  586                MyGlobalElements[count++] = _strtoi64((
char*)tokens[k].c_str(), &endp, base);
 
  589                std::istringstream ss(tokens[k]);
 
  590                ss >> MyGlobalElements[count++];
 
  592                MyGlobalElements[count++] = strtoll((
char*)tokens[k].c_str(), &endp, base);
 
  600        Map = 
new Epetra_Map(NumGlobalElements, NumMyElements,
 
  601                             &MyGlobalElements[0], IndexBase, Comm_);
 
 
  610Read(
const std::string& Label, std::vector<std::string>& Content)
 
  612  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  613                     "No file has been opened");
 
  615  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  617    const XMLObject& child = fileXML_->getChild(i);
 
  618    std::string tag = child.getTag();
 
  622      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  624        for (
int j = 0; j < child.numContentLines(); ++j)
 
  626          const std::string& line = child.getContentLine(j);
 
  627          if (line == 
"\n") 
continue;
 
  628          Content.push_back(line);
 
 
  637Read(
const std::string& Label, Teuchos::ParameterList& List)
 
  639  TEUCHOS_TEST_FOR_EXCEPTION(IsOpen_ == 
false, std::logic_error,
 
  640                     "No file has been opened");
 
  642  for (
int i = 0; i < fileXML_->numChildren(); ++i)
 
  644    const XMLObject& child = fileXML_->getChild(i);
 
  645    std::string tag = child.getTag();
 
  649      if (child.hasAttribute(
"Label") && child.getRequired(
"Label") == Label)
 
  651        Teuchos::XMLParameterListReader ListReader;
 
  652        List = ListReader.toParameterList(child.getChild(0));