43 template<
class PlaneSolver>
50 enum { dimension = 2 };
66 for (
size_t i = 1; i <
m_planes.size(); i++)
79 for (
size_t i = 0; i <
m_planes.size() && ok; i++)
101 bool preprocess(
const std::vector<int>& = {},
bool =
false)
override
104 if (!plane->preprocess())
115 for (
size_t i = 0; i <
m_planes.size(); i++)
121 MPI_INT, MPI_SUM, PETSC_COMM_WORLD);
126 std::string
getName()
const override {
return "Semi3D"; }
131 std::string name = exporter.
getName();
133 for (
size_t i = 0; i <
m_planes.size(); i++, plane++)
136 std::stringstream str;
137 str <<
"_plane" << plane;
139 m_planes[i]->getProcessAdm(),
false);
152 for (
size_t i = 0; i <
m_planes.size() && ok; i++)
173 bool serialize(std::map<std::string,std::string>&) {
return false; }
175 bool deSerialize(
const std::map<std::string,std::string>&) {
return false; }
181 for (
size_t i = 0; i <
m_planes.size() && ok; i++) {
193 for (
size_t i=0;i<
m_planes.size();++i)
202 for (
size_t i=0;i<
m_planes.size();++i)
208 bool read(
const char* fileName)
override
217 MPI_Comm_split(PETSC_COMM_WORLD,
222 size_t loc_planes =
planes;
225 for (
size_t i=0;i<loc_planes;++i) {
228 m_planes.back()->setCommunicator(&comm);
233 MPI_Comm_rank(comm, &pid);
236 std::stringstream str;
238 std::shared_ptr<std::ostream> file(
new std::ofstream(str.str()));
242 m_planes[i]->getProcessAdm().cout.setPIDs(0, pid);
245 m_planes[i]->getProcessAdm().cout.setNull();
247 m_planes[i]->getProcessAdm().cout.setStream(std::cout);
256 bool parse(
const tinyxml2::XMLElement* elem)
override
258 if (!strcasecmp(elem->Value(),
"postprocessing")) {
259 const tinyxml2::XMLElement* child = elem->FirstChildElement();
260 for (; child; child = child->NextSiblingElement())
263 if (strcasecmp(elem->Value(),
"semi3d"))
271 std::string dir(
"Z");
281 <<
"\n\tSemi3D: Printing output from ";
283 IFEM::cout <<
"all planes to screen."<< std::endl;
287 IFEM::cout <<
"\tSemi3D: Logging to files with prefix "
303 short int nvc,
const PatchVec& patches,
304 char diffBasis = 0,
int component = 0)
306 for (
size_t i=0;i<
m_planes.size(); ++i)
310 diffBasis, component);
350 for (
size_t i=0;i<
m_planes.size();++i)
358 for (
size_t i = 0; i <
m_planes.size() && ok; i++)
391 template<
class PlaneSolver>
398 const typename PlaneSolver::SetupProps& props,
401 int retval = simulator.
read(infile) ? 0 : 1;
403 for (
size_t i = 0; i < simulator.
getPlanes().size() && retval == 0; i++) {
Administer and write data using DataWriters.
Output of model and results to HDF5 file.
Initialization of the IFEM library.
Global algebraic operations on index 1-based matrices and vectors.
std::vector< std::shared_ptr< std::ostream > > plane_log_files
Log files for the planes.
Definition: SIMSemi3D.C:19
std::vector< DataExporter * > plane_exporters
Data exporters for the planes.
Definition: SIMSemi3D.C:18
Administration base class for FEM simulators.
Administration of simulators with dependencies to other simulators.
Representation of a point in 3D space with some basic operations.
Administer and write data using DataWriters.
Definition: DataExporter.h:38
std::string getName() const
Returns name from (first) data writer.
Definition: DataExporter.C:189
int getStride() const
Returns the data dump stride.
Definition: DataExporter.h:134
void registerWriter(DataWriter *writer)
Adds the data writer to the list of registered writers.
Definition: DataExporter.h:90
Write data to a HDF5 file.
Definition: HDF5Writer.h:30
static utl::LogStream cout
Combined standard out for parallel processes.
Definition: IFEM.h:62
Driver class for plane-decoupled 3D problems.
Definition: SIMSemi3D.h:45
std::string getName() const override
Returns the name of this simulator (for use in the HDF5 export).
Definition: SIMSemi3D.h:126
bool updateALE()
Updating the grid in an ALE solver.
Definition: SIMSemi3D.h:355
PlaneSolver::SetupProps SetupProps
Convenience type.
Definition: SIMSemi3D.h:47
bool parse(const tinyxml2::XMLElement *elem) override
Parses a data section from an XML element.
Definition: SIMSemi3D.h:256
void setVTF(VTF *)
Dummy method.
Definition: SIMSemi3D.h:340
std::vector< PlaneSolver * > m_planes
Planar solvers.
Definition: SIMSemi3D.h:376
VTF * getVTF()
Dummy method.
Definition: SIMSemi3D.h:338
int output_plane
Plane to print to screen for (-1 for all)
Definition: SIMSemi3D.h:382
bool saveStep(const TimeStep &tp, int &)
Dumps all registered fields for each plane.
Definition: SIMSemi3D.h:162
int getLocalNode(int) const
Dummy method.
Definition: SIMSemi3D.h:365
size_t getStartContext() const
Returns the context of the first plane on this process.
Definition: SIMSemi3D.h:326
void registerDependency(SIMSemi3D< T > *sim, const std::string &name, short int nvc, const PatchVec &patches, char diffBasis=0, int component=0)
Registers a dependency on a field from another SIM object.
Definition: SIMSemi3D.h:302
SIMSemi3D(const SetupProps &props_)
The constructor initializes the setup properties.
Definition: SIMSemi3D.h:53
SetupProps props
Setup properties to configure planar solvers.
Definition: SIMSemi3D.h:386
char getDirection() const
Returns the (unoriented) normal direction of the planes.
Definition: SIMSemi3D.h:335
bool read(const char *fileName) override
Reads model data from the specified input file.
Definition: SIMSemi3D.h:208
size_t getProcsPerPlane() const
Returns the number or processes participating in each planar solve.
Definition: SIMSemi3D.h:329
size_t procs_per_plane
Number of processes per plane.
Definition: SIMSemi3D.h:381
bool init(const TimeStep &tp)
Initializes for time-dependent simulation.
Definition: SIMSemi3D.h:149
size_t getNoSpaceDim() const override
Returns the spatial dimension of plane solvers.
Definition: SIMSemi3D.h:316
int getGlobalNode(int) const
Dummy method.
Definition: SIMSemi3D.h:367
size_t planes
Total number of planes.
Definition: SIMSemi3D.h:380
bool setInitialConditions()
Sets the initial conditions.
Definition: SIMSemi3D.h:190
size_t getNoSolutions() const
Returns the number of solution vectors.
Definition: SIMSemi3D.h:373
size_t startCtx
Context for first plane on this process.
Definition: SIMSemi3D.h:379
void printFinalNorms(const TimeStep &)
Dummy method.
Definition: SIMSemi3D.h:98
std::string log_files
Log file prefix for planes.
Definition: SIMSemi3D.h:384
void grabPlaneNodes()
Get FSI nodes for all planes.
Definition: SIMSemi3D.h:112
bool saveModel(char *, int &, int &)
Dummy method (VTF export is not supported).
Definition: SIMSemi3D.h:159
Vec3 getForce(int) const
Dummy method.
Definition: SIMSemi3D.h:343
void registerFields(const DataExporter &exporter)
Adds fields to a data exporter.
Definition: SIMSemi3D.h:129
bool advanceStep(TimeStep &tp)
Advances the time step one step forward.
Definition: SIMSemi3D.h:76
const std::vector< PlaneSolver * > & getPlanes() const
Returns a const reference to the plane solvers.
Definition: SIMSemi3D.h:323
void setupDependencies()
Setup inter-SIM dependencies.
Definition: SIMSemi3D.h:348
std::vector< int > planeNodes
FSI nodes for all planes.
Definition: SIMSemi3D.h:385
bool solveStep(TimeStep &tp)
Solves the nonlinear equations by Newton-Raphson iterations.
Definition: SIMSemi3D.h:178
int getDumpInterval() const
Returns the visualization dump interval.
Definition: SIMSemi3D.h:92
int getPlaneNodes(int plane) const
Returns the number of FSI nodes for a plane.
Definition: SIMSemi3D.h:332
int getNoBasis() const
Returns the number of bases in the model.
Definition: SIMSemi3D.h:370
virtual ~SIMSemi3D()
The destructor deletes the plane-wise sub-step solvers.
Definition: SIMSemi3D.h:61
PlaneSolver * getPlane(size_t i)
Returns a pointer to a given plane solver.
Definition: SIMSemi3D.h:321
bool serialize(std::map< std::string, std::string > &)
Dummy method, no serialization support.
Definition: SIMSemi3D.h:173
bool deSerialize(const std::map< std::string, std::string > &)
Dummy method, no deserialization support.
Definition: SIMSemi3D.h:175
const PatchVec & getFEModel()
Dummy method.
Definition: SIMSemi3D.h:345
int getBDForder() const
Returns the order of the BDF scheme.
Definition: SIMSemi3D.h:86
void initSystem()
Initialize the FEM system.
Definition: SIMSemi3D.h:200
char direction
(Unoriented) normal direction of plane
Definition: SIMSemi3D.h:383
bool preprocess(const std::vector< int > &={}, bool=false) override
Performs some pre-processing tasks on the FE model.
Definition: SIMSemi3D.h:101
size_t getNoPlanes() const
Returns the number of plane solvers.
Definition: SIMSemi3D.h:318
Administration base class for FEM simulators.
Definition: SIMadmin.h:32
std::string myHeading
Heading written before reading the input file.
Definition: SIMadmin.h:91
virtual bool read(const char *fileName)
Reads model data from the specified input file *fileName.
Definition: SIMadmin.C:68
int myPid
Processor ID in parallel simulations.
Definition: SIMadmin.h:89
int nProc
Number of processors in parallel simulations.
Definition: SIMadmin.h:90
SIMoptions & opt
Simulation control parameters.
Definition: SIMadmin.h:82
virtual bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition: SIMadmin.C:113
Class administering inter-SIM field dependencies.
Definition: SIMdependency.h:30
std::vector< ASMbase * > PatchVec
Spline patch container.
Definition: SIMdependency.h:33
virtual void registerDependency(SIMdependency *sim, const std::string &name, short int nvc, const PatchVec &patches, char diffBasis=0, int component=1)
Registers a dependency on a field from another SIM object.
Definition: SIMdependency.C:21
bool parseOutputTag(const tinyxml2::XMLElement *elem)
Parses a subelement of the resultoutput XML-tag.
Definition: SIMoptions.C:156
Class for encapsulation of general time stepping parameters.
Definition: TimeStep.h:31
Class for output of FE model and results to VTF file.
Definition: VTF.h:58
Simple class for representing a point in 3D space.
Definition: Vec3.h:27
int getAttribute(const tinyxml2::XMLElement *xml, const char *att, bool &val)
Extracts a boolean attribute value from the specified XML-element.
Definition: Utilities.C:188
int setup(SIMSemi3D< PlaneSolver > &simulator, const typename PlaneSolver::SetupProps &props, char *infile)
Configure a SIMSemi3D.
Definition: SIMSemi3D.h:397
Struct for configuring a given simulator.
Definition: SIMconfigure.h:24