void AddBoundary(T* mSystem, double L, double W, double H, double th, float mu1) { ChVector<> pos_p0(0, 0, 0); CHBODYSHAREDPTR BTM = CHBODYSHAREDPTR(new CHBODY); BTM->SetIdentifier(1); InitObject(BTM, 100, Vector(0, 0, 0), QUNIT, mu1, mu1, 0, true, true, -20, -20); AddCollisionGeometry(BTM, BOX, Vector(L / 2.0, th / 2.0, W / 2.0), VNULL, QUNIT); FinalizeObject(BTM, (CHSYS*) mSystem); CHBODYSHAREDPTR RIGHT = CHBODYSHAREDPTR(new CHBODY); RIGHT->SetIdentifier(2); InitObject(RIGHT, 100, Vector(L / 2.0, H / 2.0, 0), QUNIT, mu1, mu1, 0, true, true, -20, -20); AddCollisionGeometry(RIGHT, BOX, Vector(th / 2.0, H / 2.0, W / 2.0), VNULL, QUNIT); FinalizeObject(RIGHT, (CHSYS*) mSystem); CHBODYSHAREDPTR LEFT = CHBODYSHAREDPTR(new CHBODY); LEFT->SetIdentifier(3); InitObject(LEFT, 100, Vector(-L / 2.0, H / 2.0, 0), QUNIT, mu1, mu1, 0, true, true, -20, -20); AddCollisionGeometry(LEFT, BOX, Vector(th / 2.0, H / 2.0, W / 2.0), VNULL, QUNIT); FinalizeObject(LEFT, (CHSYS*) mSystem); CHBODYSHAREDPTR FRONT = CHBODYSHAREDPTR(new CHBODY); FRONT->SetIdentifier(4); InitObject(FRONT, 100, Vector(0.0, H / 2.0, W / 2.0), QUNIT, mu1, mu1, 0, true, true, -20, -20); AddCollisionGeometry(FRONT, BOX, Vector(L / 2.0, H / 2.0, th / 2.0), VNULL, QUNIT); FinalizeObject(FRONT, (CHSYS*) mSystem); CHBODYSHAREDPTR BACK = CHBODYSHAREDPTR(new CHBODY); BACK->SetIdentifier(5); InitObject(BACK, 100, Vector(0.0, H / 2.0, -W / 2.0), QUNIT, mu1, mu1, 0, true, true, -20, -20); AddCollisionGeometry(BACK, BOX, Vector(L / 2.0, H / 2.0, th / 2.0), VNULL, QUNIT); FinalizeObject(BACK, (CHSYS*) mSystem); }
void AddBall(T* mSystem, double Px, double Py, double Pz, double Vy, double bRad, double bMass, float mu1) { CHBODYSHAREDPTR theBall = CHBODYSHAREDPTR(new CHBODY); theBall->SetIdentifier(-1); theBall->GetCollisionModel()->SetDefaultSuggestedEnvelope(0.1 * bRad); InitObject(theBall, bMass, Vector(Px, Py, Pz), QUNIT, mu1, mu1, 0, true, false, 8, 16); ChVector<> inertias((2.0 / 5.0) * bMass * bRad * bRad, (2.0 / 5.0) * bMass * bRad * bRad, (2.0 / 5.0) * bMass * bRad * bRad); theBall->SetInertiaXX(inertias); AddCollisionGeometry(theBall, SPHERE, Vector(bRad, bRad, bRad), VNULL, QUNIT); theBall->SetPos_dt(Vector(0.0, Vy, 0.0)); FinalizeObject(theBall, (CHSYS*) mSystem); }
int add_particles_fromFile_V2(T* mSystem, int n_load, double body_radius, double particle_mass, float fric, std::string tfilename) { CHBODYSHAREDPTR mrigidBody; cout << tfilename; ChStreamInAsciiFile terrain_file(tfilename.c_str()); int num_p = 0; printf("Loading particles..."); int pid = 0; double xx = 0.0; double yy = 0.0; double zz = 0.0; double r1 = 0.0; double r2 = 0.0; double r3 = 0.0; double v1 = 0.0; double v2 = 0.0; double v3 = 0.0; while (num_p < n_load) { terrain_file >> pid; terrain_file >> xx; terrain_file >> yy; terrain_file >> zz; terrain_file >> r1; terrain_file >> r2; terrain_file >> r3; terrain_file >> v1; terrain_file >> v2; terrain_file >> v3; if (pid > 5) // { mrigidBody = CHBODYSHAREDPTR(new CHBODY); mrigidBody->SetIdentifier(num_p + 10); mrigidBody->GetCollisionModel()->SetDefaultSuggestedEnvelope(0.1 * body_radius); InitObject(mrigidBody, particle_mass, Vector(xx, yy, zz), QUNIT, fric, fric, 0, true, false, 32, 64); AddCollisionGeometry(mrigidBody, SPHERE, Vector(body_radius, body_radius, body_radius), VNULL, QUNIT); mrigidBody->SetInertiaXX((2.0 / 5.0) * particle_mass * pow(body_radius, 2) * ChVector<>(1, 1, 1)); mrigidBody->SetPos_dt(Vector(v1, v2, v3)); FinalizeObject(mrigidBody, (CHSYS*) mSystem); num_p++; } if (num_p % 4000 == 0) printf("loaded %i\n", num_p); } printf("Done loading %i particles\n", num_p); return num_p; }