void init(std::string fileName) { xmin_ = -2.5f; ymin_ = -2.5f; zmin_ = -4.5f; xmax_ = 2.5f; ymax_ = 2.5f; zmax_ = 1.5f; size_t pos = fileName.find("."); std::string ending = fileName.substr(pos); std::transform(ending.begin(), ending.end(), ending.begin(), ::tolower); if (ending == ".txt") { Reader myReader; //Get the name of the mesh file from the //configuration data file. myReader.readParameters(fileName, this->dataFileParams_); }//end if else if (ending == ".xml") { FileParserXML myReader; //Get the name of the mesh file from the //configuration data file. myReader.parseDataXML(this->dataFileParams_, fileName); }//end if else { std::cerr << "Invalid data file ending: " << ending << std::endl; exit(1); }//end else if (hasMeshFile_) { std::string fileName; grid_.initMeshFromFile(fileName.c_str()); } else { if (dataFileParams_.hasExtents_) { grid_.initCube(dataFileParams_.extents_[0], dataFileParams_.extents_[2], dataFileParams_.extents_[4], dataFileParams_.extents_[1], dataFileParams_.extents_[3], dataFileParams_.extents_[5]); } else grid_.initCube(xmin_, ymin_, zmin_, xmax_, ymax_, zmax_); } //initialize rigid body parameters and //placement in the domain configureRigidBodies(); configureCylinderBoundary(); //assign the rigid body ids for (int j = 0; j<myWorld_.rigidBodies_.size(); j++) myWorld_.rigidBodies_[j]->iID_ = j; configureTimeDiscretization(); //link the boundary to the world myWorld_.setBoundary(&myBoundary_); //set the time control myWorld_.setTimeControl(&myTimeControl_); //set the gravity myWorld_.setGravity(dataFileParams_.gravity_); //Set the collision epsilon myPipeline_.setEPS(0.02); //initialize the collision pipeline myPipeline_.init(&myWorld_, dataFileParams_.solverType_, dataFileParams_.maxIterations_, dataFileParams_.pipelineIterations_); //set the broad phase to simple spatialhashing myPipeline_.setBroadPhaseHSpatialHash(); if (dataFileParams_.solverType_ == 2) { //set which type of rigid motion we are dealing with myMotion_ = new MotionIntegratorSI(&myWorld_); } else { //set which type of rigid motion we are dealing with myMotion_ = new RigidBodyMotion(&myWorld_); } //set the integrator in the pipeline myPipeline_.integrator_ = myMotion_; myWorld_.densityMedium_ = dataFileParams_.densityMedium_; myPipeline_.response_->m_pGraph = myPipeline_.graph_; }
void init(std::string fileName) { using namespace std; xmin_ = -2.5f; ymin_ = -2.5f; zmin_ = -4.5f; xmax_ = 2.5f; ymax_ = 2.5f; zmax_ = 1.5f; FileParserXML myReader; //Get the name of the mesh file from the //configuration data file. myReader.parseDataXML(this->dataFileParams_, fileName); if (hasMeshFile_) { std::string fileName; grid_.initMeshFromFile(fileName.c_str()); } else { if (dataFileParams_.hasExtents_) { grid_.initCube(dataFileParams_.extents_[0], dataFileParams_.extents_[2], dataFileParams_.extents_[4], dataFileParams_.extents_[1], dataFileParams_.extents_[3], dataFileParams_.extents_[5]); } else grid_.initCube(xmin_, ymin_, zmin_, xmax_, ymax_, zmax_); } cout<<"startType = "<<dataFileParams_.startType_<<endl; cout<<"solution = "<<dataFileParams_.solutionFile_<<endl; cout<<"nBodies = "<<dataFileParams_.bodies_<<endl; cout<<"bodyInit = "<<dataFileParams_.bodyInit_<<endl; cout<<"bodyFile = "<<dataFileParams_.bodyConfigurationFile_<<endl; cout<<"defaultDensity = "<<dataFileParams_.defaultDensity_<<endl; cout<<"defaultRadius = "<<dataFileParams_.defaultRadius_<<endl; cout<<"gravity = "<<dataFileParams_.gravity_; cout<<"totalTimesteps = "<<dataFileParams_.nTimesteps_<<endl; cout<<"lcpSolverIterations = "<<dataFileParams_.maxIterations_<<endl; cout<<"collPipelineIterations = "<<dataFileParams_.pipelineIterations_<<endl; if(dataFileParams_.hasExtents_) { cout << "domain extents = " << dataFileParams_.extents_[0] << " " << dataFileParams_.extents_[1] << " " << dataFileParams_.extents_[2] << " " << dataFileParams_.extents_[3] << " " << dataFileParams_.extents_[4] << " " << dataFileParams_.extents_[5] << endl; } if(dataFileParams_.bodies_ > 0) { cout<<"type = "<< dataFileParams_.rigidBodies_[0].shapeId_ <<endl; cout<<"position = "<< dataFileParams_.rigidBodies_[0].com_ <<endl; cout<<"velocity = "<< dataFileParams_.rigidBodies_[0].velocity_ <<endl; cout<<"density = "<< dataFileParams_.rigidBodies_[0].density_ <<endl; cout<<"meshfile = "<< dataFileParams_.rigidBodies_[0].fileName_ <<endl; } bull.init(); std::ostringstream name; std::ostringstream name2; int step = 0; name << "output/line." << std::setfill('0') << std::setw(5) << step << ".vtk"; name2 << "output/head." << std::setfill('0') << std::setw(5) << step << ".vtk"; CVtkWriter writer; writer.WriteParamLine(bull.geom_[0], name.str().c_str()); writer.WriteParamLine(bull.geom_[1], name2.str().c_str()); }