diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C index 11f09d9697..7075f2152a 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C +++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C @@ -39,6 +39,13 @@ Foam::Analytical::Analytical {} +template +Foam::Analytical::Analytical(const Analytical& is) +: + IntegrationScheme(is) +{} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template @@ -59,8 +66,11 @@ Foam::Analytical::integrate ) const { typename IntegrationScheme::integrationResult retValue; - retValue.average() = alpha + (phi - alpha)*(1 - exp(-beta*dt))/(beta*dt); - retValue.value() = alpha + (phi - alpha)*exp(-beta*dt); + + const scalar expTerm = exp(min(50, -beta*dt)); + + retValue.average() = alpha + (phi - alpha)*(1 - expTerm)/(beta*dt); + retValue.value() = alpha + (phi - alpha)*expTerm; return retValue; } diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H index e18af027f9..39c6b3f823 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H +++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H @@ -59,6 +59,18 @@ public: //- Construct from components Analytical(const word& phiName, const dictionary& dict); + //- Copy constructor + Analytical(const Analytical& is); + + //- Construct and return clone + virtual autoPtr > clone() const + { + return autoPtr > + ( + new Analytical(*this) + ); + } + //- Destructor virtual ~Analytical(); diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C index e065b54780..0ae13e16e8 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C +++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C @@ -39,6 +39,13 @@ Foam::Euler::Euler {} +template +Foam::Euler::Euler(const Euler& is) +: + IntegrationScheme(is) +{} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H index 39989c22e6..b0ffb86ef2 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H +++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H @@ -59,6 +59,15 @@ public: //- Construct from components Euler(const word& phiName, const dictionary& dict); + //- Copy constructor + Euler(const Euler& is); + + //- Construct and return clone + virtual autoPtr > clone() const + { + return autoPtr >(new Euler(*this)); + } + //- Destructor virtual ~Euler(); diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C index 0388788c8e..33efb86687 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C +++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C @@ -39,6 +39,14 @@ Foam::IntegrationScheme::IntegrationScheme {} +template +Foam::IntegrationScheme::IntegrationScheme(const IntegrationScheme& is) +: + phiName_(is.phiName_), + dict_(is.dict_) +{} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * // template @@ -48,6 +56,38 @@ Foam::IntegrationScheme::~IntegrationScheme() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template +typename Foam::IntegrationScheme::integrationResult +Foam::IntegrationScheme::integrate +( + const Type phi, + const scalar dt, + const Type alpha, + const scalar beta +) const +{ + notImplemented + ( + "Foam::IntegrationScheme::integrationResult" + "Foam::IntegrationScheme::integrate" + "(" + "const Type, " + "const scalar, " + "const Type, " + "const scalar" + ") const" + ); + + typename IntegrationScheme::integrationResult retValue; + retValue.average() = pTraits::zero; + retValue.value() = pTraits::zero; + + return retValue; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "IntegrationSchemeNew.C" // ************************************************************************* // diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H index 6bf976d081..3558bdc83b 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H +++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H @@ -121,9 +121,6 @@ private: // Private Member Functions - //- Disallow default bitwise copy construct - IntegrationScheme(const IntegrationScheme&); - //- Disallow default bitwise assignment void operator=(const IntegrationScheme&); @@ -154,6 +151,18 @@ public: //- Construct from components IntegrationScheme(const word& phiName, const dictionary& dict); + //- Copy constructor + IntegrationScheme(const IntegrationScheme& is); + + //- Construct and return clone + virtual autoPtr > clone() const + { + return autoPtr > + ( + new IntegrationScheme(*this) + ); + } + // Selectors @@ -178,7 +187,7 @@ public: const scalar dt, const Type alpha, const scalar beta - ) const = 0; + ) const; };