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;
}
示例#2
0
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;
}