void peano::applications::navierstokes::prototype1::scenarios::configuration::FluidScenarioConfiguration::readMaximumElevationInNegGravitationDirection() const { // maximum elevation has been specified in the configuration if (isMaximumElevationSpecified()) { return; } double result = 0.0; assertion(isValid()); if ( !tarch::la::equals(getGravityVector().norm(),0.0) && ( // getScenarioName() == peano::applications::navierstokes::prototype1::scenarios::FluidPreCICEColdLeg::IDENTIFIER || getScenarioName() == peano::applications::navierstokes::prototype1::scenarios::FluidObstacleInChannel::IDENTIFIER // || // getScenarioName() == peano::applications::navierstokes::prototype1::scenarios::FluidObstacleInChannelWithSlipWalls::IDENTIFIER || // getScenarioName() == peano::applications::navierstokes::prototype1::scenarios::FluidObstacleInStationaryFlowField::IDENTIFIER || // getScenarioName() == peano::applications::navierstokes::prototype1::scenarios::FluidObstacleInTurbulentChannel::IDENTIFIER || // getScenarioName() == peano::applications::navierstokes::prototype1::scenarios::FluidFlatPlateInParallelFlow::IDENTIFIER ) ) { _log.warning("readMaximumElevationInNegGravitationDirection()", "Gravity is non-zero, if this scenario has Neumann boundaries you should define atrribute \"" + ATTRIBUTE_MAXIMUM_ELEVATION + "\" in tag <" + configuration::FluidScenarioConfiguration::TAG + "> to get the correct hydropressure correction."); bool isGravityInXDirection = true; bool isGravityInYDirection = true; bool isGravityInZDirection = DIMENSIONS >= 3; for (int d=0; d<DIMENSIONS; d++) { //only y-direction for gravity supported! if (d!=0 && !tarch::la::equals(getGravityVector()(d),0.0)) isGravityInXDirection = false; if (d!=1 && !tarch::la::equals(getGravityVector()(d),0.0)) isGravityInYDirection = false; if (d!=2 && !tarch::la::equals(getGravityVector()(d),0.0)) isGravityInZDirection = false; } if (isGravityInXDirection && !isGravityInYDirection && !isGravityInZDirection) { result = getInletOffset()(0) + getInletDimension()(0); } else if (isGravityInYDirection && !isGravityInXDirection && !isGravityInZDirection) { result = getInletOffset()(1) + getInletDimension()(1); } else if (isGravityInZDirection && !isGravityInXDirection && !isGravityInYDirection) { assertion(DIMENSIONS == 3); result = getInletOffset()(2) + getInletDimension()(2); } else { _log.error("getMaximumElevationInNegGravitationDirection()","only y- or z-direction (exclusive or) for gravity vector supported! Otherwise use attribute \"" + ATTRIBUTE_MAXIMUM_ELEVATION + "\" in tag <" + configuration::FluidScenarioConfiguration::TAG + ">."); exit(ASSERTION_EXIT_CODE); } } else { // assertionFail(""); } _maximumElevation = result; _maximumElevationSpecified = true; }
bool Bullet::setup() { broadphase_ = new btDbvtBroadphase; ghostPairCallback_ = new btGhostPairCallback; broadphase_->getOverlappingPairCache()->setInternalGhostPairCallback(ghostPairCallback_); collisionConfiguration_ = new btDefaultCollisionConfiguration; dispatcher_ = new btCollisionDispatcher(collisionConfiguration_); solver_ = new btSequentialImpulseConstraintSolver; dynamicsWorld_ = new btDiscreteDynamicsWorld(dispatcher_, broadphase_, solver_, collisionConfiguration_); dynamicsWorld_->setGravity(toBullet(getGravityVector())); LOG_INFO << "Initialized Bullet " << (btGetVersion() / 100) << "." << (btGetVersion() % 100); return true; }