ElmerFoamFSI  2.0
ElmerFoamFSI is fluid-solid interaction simulation application built up from OpenFOAM CFD and Elmer CSM coupled through the IMPACT multiphysics software integration infrastructure.
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Macros Groups Pages
int vtkDump ( double  timeMark)

Definition at line 337 of file SolverModuleDriverParallel.C.

References SolverModuleDriver::Conn, SolverModuleDriver::Coord, SolverModuleDriver::Disp, SolverModuleDriver::isFSI, SolverModuleDriver::Loads, SolverModuleDriver::locDisp, SolverModuleDriver::locLoads, SolverModuleDriver::locPress, SolverModuleDriver::myAgent, SolverModuleDriver::myAgentIsInit, SolverModuleDriver::myRank, SolverModuleDriver::nDisp, SolverModuleDriver::nElem, SolverModuleDriver::nElemNodes, SolverModuleDriver::nLoads, SolverModuleDriver::nNodes, SolverModuleDriver::nPress, SolverModuleDriver::Press, SolverModuleDriver::ss, SolverModuleDriver::typeDisp, SolverModuleDriver::typeLoads, SolverModuleDriver::typePress, and SolverModuleDriver::updateSolution().

Referenced by SolverModuleDriver::run().

337  {
338  // only for FSI problems
339  if (!isFSI)
340  return(0);
341  char getDataItemLoc;
342  COM_Type getDataItemType;
343  std::string getDataItemUnits;
344  // creating solverAgent if not yet
345  if (!myAgentIsInit) {
346  myAgentIsInit = true;
347  // put elements into a vector so we can build the solver agent
348  std::vector<unsigned int> connVector;
349  for (int i=0; i<nElem; ++i) {
350  for (int j=0; j<nElemNodes; ++j) {
351  connVector.push_back((Conn[i*nElemNodes+j]));
352  }
353  }
354  // make a solverAgent to store our data
355  myAgent.Solution().Meta().AddField("time", 's', 1, 8, "s");
356  myAgent.Solution().Meta().AddField("endTime", 's', 1, 8, "s");
357  myAgent.Mesh().nc.init(nNodes, Coord);
358  myAgent.Mesh().con.AddElements(nElem, nElemNodes, connVector);
359  }
360  // updating datastructures
361  updateSolution();
362  // displacements
363  myAgent.Solution().Meta().AddField("Displacement", locDisp, nDisp,
364  typeDisp, "");
365  // loads
366  myAgent.Solution().Meta().AddField("Load", locLoads, nLoads,
367  typeLoads, "");
368  // get pressures
369  myAgent.Solution().Meta().AddField("Pressure", locPress, nPress,
370  typePress, "");
371  // create buffers for the actual data
372  myAgent.CreateSoln();
373  unsigned int nnodes = myAgent.Mesh().nc.NNodes();
374  unsigned int nelem = myAgent.Mesh().con.Nelem();
375  // reset the buffers to be our own local buffers
376  myAgent.Solution().SetFieldBuffer("Displacement", Disp);
377  myAgent.Solution().SetFieldBuffer("Load", Loads);
378  myAgent.Solution().SetFieldBuffer("Pressure", Press);
379  // write initial mesh data out to a VTK file
380  std::ofstream Ouf;
381  ss.clear();
382  ss.str("");
383  ss << timeMark
384  << "_proc_"
385  << myRank;
386  std::string filename;
387  filename = "fsi_" + ss.str() +".vtk";
388  Ouf.open(filename.c_str());
389  if(!Ouf){
390  std::cerr << "ELMModuleDriver:main: DumpSolution: Error: Could not open output file, "
391  << filename << "." << std::endl;
392  return -1;
393  }
394  std::cout << "Rank #" << myRank
395  << ", ELMModuleDriver:main: WriteVTKToStream for " << timeMark << std::endl;
396  SolverUtils::WriteVTKToStream("ELMModule", myAgent, Ouf);
397  Ouf.close();
398  }

Here is the call graph for this function:

Here is the caller graph for this function: