diff --git a/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.C b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.C index d3d626d296..e38767f883 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.C +++ b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.C @@ -37,9 +37,13 @@ void Foam::Function1Types::Scale::read(const dictionary& coeffs) : autoPtr>(new Constant("xScale", 1)); value_ = Function1::New("value", coeffs); - integrable_ = + integrableScale_ = isA>(xScale_()) && isA>(scale_()); + + integrableValue_ = + isA>(xScale_()) + && isA>(value_()); } @@ -65,7 +69,8 @@ Foam::Function1Types::Scale::Scale(const Scale& se) scale_(se.scale_, false), xScale_(se.xScale_, false), value_(se.value_, false), - integrable_(se.integrable_) + integrableScale_(se.integrableScale_), + integrableValue_(se.integrableValue_) {} diff --git a/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.H b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.H index e9d6d4aaad..b972d66534 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.H +++ b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.H @@ -149,7 +149,10 @@ class Scale autoPtr> value_; //- Is this function integrable? - bool integrable_; + bool integrableScale_; + + //- Is this function integrable? + bool integrableValue_; // Private Member Functions diff --git a/src/OpenFOAM/primitives/functions/Function1/Scale/ScaleI.H b/src/OpenFOAM/primitives/functions/Function1/Scale/ScaleI.H index 01a5c28528..14f881d16e 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Scale/ScaleI.H +++ b/src/OpenFOAM/primitives/functions/Function1/Scale/ScaleI.H @@ -42,16 +42,25 @@ inline Type Foam::Function1Types::Scale::integrate const scalar x2 ) const { - if (!integrable_) + if (integrableScale_) { - FatalErrorInFunction - << "Integration is not defined for " << type() << " functions " - << "unless all scaling is constant" - << exit(FatalError); + const scalar sx = xScale_->value(NaN); + return scale_->value(NaN)*value_->integrate(sx*x1, sx*x2)/sx; } - const scalar sx = xScale_->value(NaN); - return scale_->value(NaN)/sx*value_->integrate(sx*x1, sx*x2); + if (integrableValue_) + { + const scalar sx = xScale_->value(NaN); + return scale_->integrate(sx*x1, sx*x2)/sx*value_->value(NaN); + } + + FatalErrorInFunction + << "Integration is not defined for " << type() << " functions " + << "unless x-scaling is constant and either scaling is constant or " + << "the value is constant" + << exit(FatalError); + + return Zero; } diff --git a/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C b/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C index 4af002804e..142ddf509e 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C +++ b/src/OpenFOAM/primitives/functions/Function1/Table/TableBase.C @@ -144,7 +144,7 @@ Foam::Function1Types::TableBase::TableBase ( dict.found("outOfBounds") ? tableBase::boundsHandlingNames_.read(dict.lookup("outOfBounds")) - : tableBase::boundsHandling::warn + : tableBase::boundsHandling::clamp ), interpolationScheme_ (