From c1678f897a75a5179139f796169e13e2ddba5d3e Mon Sep 17 00:00:00 2001 From: andy <a.heather@opencfd.co.uk> Date: Thu, 21 Oct 2010 11:18:50 +0100 Subject: [PATCH] ENH: Added copy/clone functionality to cloud integration schemes --- .../IntegrationScheme/Analytical/Analytical.C | 14 ++++++- .../IntegrationScheme/Analytical/Analytical.H | 12 ++++++ .../IntegrationScheme/Euler/Euler.C | 7 ++++ .../IntegrationScheme/Euler/Euler.H | 9 +++++ .../IntegrationScheme/IntegrationScheme.C | 40 +++++++++++++++++++ .../IntegrationScheme/IntegrationScheme.H | 17 ++++++-- 6 files changed, 93 insertions(+), 6 deletions(-) diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C index 11f09d9697b..7075f2152a8 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C +++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.C @@ -39,6 +39,13 @@ Foam::Analytical<Type>::Analytical {} +template<class Type> +Foam::Analytical<Type>::Analytical(const Analytical& is) +: + IntegrationScheme<Type>(is) +{} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template<class Type> @@ -59,8 +66,11 @@ Foam::Analytical<Type>::integrate ) const { typename IntegrationScheme<Type>::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 e18af027f9c..39c6b3f8230 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<IntegrationScheme<Type> > clone() const + { + return autoPtr<IntegrationScheme<Type> > + ( + new Analytical<Type>(*this) + ); + } + //- Destructor virtual ~Analytical(); diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C index e065b54780c..0ae13e16e83 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C +++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.C @@ -39,6 +39,13 @@ Foam::Euler<Type>::Euler {} +template<class Type> +Foam::Euler<Type>::Euler(const Euler& is) +: + IntegrationScheme<Type>(is) +{} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template<class Type> diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H index 39989c22e6a..b0ffb86ef22 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<IntegrationScheme<Type> > clone() const + { + return autoPtr<IntegrationScheme<Type> >(new Euler<Type>(*this)); + } + //- Destructor virtual ~Euler(); diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C index 0388788c8e2..33efb86687b 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C +++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.C @@ -39,6 +39,14 @@ Foam::IntegrationScheme<Type>::IntegrationScheme {} +template<class Type> +Foam::IntegrationScheme<Type>::IntegrationScheme(const IntegrationScheme& is) +: + phiName_(is.phiName_), + dict_(is.dict_) +{} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * // template<class Type> @@ -48,6 +56,38 @@ Foam::IntegrationScheme<Type>::~IntegrationScheme() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class Type> +typename Foam::IntegrationScheme<Type>::integrationResult +Foam::IntegrationScheme<Type>::integrate +( + const Type phi, + const scalar dt, + const Type alpha, + const scalar beta +) const +{ + notImplemented + ( + "Foam::IntegrationScheme<Type>::integrationResult" + "Foam::IntegrationScheme<Type>::integrate" + "(" + "const Type, " + "const scalar, " + "const Type, " + "const scalar" + ") const" + ); + + typename IntegrationScheme<Type>::integrationResult retValue; + retValue.average() = pTraits<Type>::zero; + retValue.value() = pTraits<Type>::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 6bf976d081f..3558bdc83be 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<IntegrationScheme<Type> > clone() const + { + return autoPtr<IntegrationScheme<Type> > + ( + new IntegrationScheme<Type>(*this) + ); + } + // Selectors @@ -178,7 +187,7 @@ public: const scalar dt, const Type alpha, const scalar beta - ) const = 0; + ) const; }; -- GitLab