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; }
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; }
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; }