コード例 #1
0
Real
BimodalInverseSuperellipsoidsIC::value(const Point & p)
{
  Real value = _outvalue;
  Real val2 = 0.0;

  // First loop over the specified superellipsoids
  for (unsigned int ellip = 0; ellip < _x_positions.size() && value != _invalue; ++ellip)
  {
    val2 = computeSuperellipsoidValue(
        p, _centers[ellip], _as[ellip], _bs[ellip], _cs[ellip], _ns[ellip]);
    if ((val2 > value && _invalue > _outvalue) || (val2 < value && _outvalue > _invalue))
      value = val2;
  }

  // Then loop over the randomly positioned particles and set value inside them back to outvalue
  for (unsigned int ellip = _x_positions.size(); ellip < _x_positions.size() + _npart; ++ellip)
  {
    val2 = computeSuperellipsoidInverseValue(
        p, _centers[ellip], _as[ellip], _bs[ellip], _cs[ellip], _ns[ellip]);
    if ((val2 < value && _invalue > _outvalue) || (val2 > value && _outvalue > _invalue))
      value = val2;
  }

  return value;
}
コード例 #2
0
Real
SmoothSuperellipsoidBaseIC::value(const Point & p)
{
  Real value = _outvalue;
  Real val2 = 0.0;

  for (unsigned int ellip = 0; ellip < _centers.size() && value != _invalue; ++ellip)
  {
    val2 = computeSuperellipsoidValue(p, _centers[ellip], _as[ellip], _bs[ellip], _cs[ellip], _ns[ellip]);
    if ( (val2 > value && _invalue > _outvalue) || (val2 < value && _outvalue > _invalue) )
      value = val2;
  }

  return value;
}
コード例 #3
0
RealGradient
SmoothSuperellipsoidBaseIC::gradient(const Point & p)
{
  if (_zero_gradient)
    return 0.0;

  RealGradient gradient = 0.0;
  Real value = _outvalue;
  Real val2 = 0.0;

  for (unsigned int ellip = 0; ellip < _centers.size(); ++ellip)
  {
    val2 = computeSuperellipsoidValue(p, _centers[ellip], _as[ellip], _bs[ellip], _cs[ellip], _ns[ellip]);
    if ( (val2 > value && _invalue > _outvalue) || (val2 < value && _outvalue > _invalue) )
    {
      value = val2;
      gradient = computeSuperellipsoidGradient(p, _centers[ellip], _as[ellip], _bs[ellip], _cs[ellip], _ns[ellip]);
    }
  }

  return gradient;
}