diff --git a/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.C b/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.C index ef2b529fe59598dcd6367c743bda850c58cb4de8..820799d702ffb9c46a6f5a2e3b15404936155b11 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.C +++ b/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.C @@ -32,10 +32,10 @@ template<class Type> void Foam::Function1Types::Sine<Type>::read(const dictionary& coeffs) { t0_ = coeffs.lookupOrDefault<scalar>("t0", 0); - amplitude_ = coeffs.lookupOrDefault<scalar>("amplitude", 1); - frequency_ = readScalar(coeffs.lookup("frequency")); - scale_ = pTraits<Type>(coeffs.lookup("scale")); - level_ = pTraits<Type>(coeffs.lookup("level")); + amplitude_ = Function1<scalar>::New("amplitude", coeffs); + frequency_ = Function1<scalar>::New("frequency", coeffs); + scale_ = Function1<Type>::New("scale", coeffs); + level_ = Function1<Type>::New("level", coeffs); } @@ -58,9 +58,10 @@ Foam::Function1Types::Sine<Type>::Sine(const Sine<Type>& se) : Function1<Type>(se), t0_(se.t0_), - amplitude_(se.amplitude_), - frequency_(se.frequency_), - level_(se.level_) + amplitude_(se.amplitude_, false), + frequency_(se.frequency_, false), + scale_(se.scale_, false), + level_(se.level_, false) {} @@ -77,9 +78,10 @@ template<class Type> Type Foam::Function1Types::Sine<Type>::value(const scalar t) const { return - amplitude_*sin(constant::mathematical::twoPi*frequency_*(t - t0_)) - *scale_ - + level_; + amplitude_->value(t) + *sin(constant::mathematical::twoPi*frequency_->value(t)*(t - t0_)) + *scale_->value(t) + + level_->value(t); } @@ -91,7 +93,7 @@ Type Foam::Function1Types::Sine<Type>::integrate ) const { NotImplemented; - return level_; + return level_->value(t1); } diff --git a/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.H b/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.H index c5e852742aea78b35c2af4e022e21e1a5fda02ec..18b2ca0bf4662088e176f89a109363e0025a8c34 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.H +++ b/src/OpenFOAM/primitives/functions/Function1/Sine/Sine.H @@ -34,12 +34,13 @@ Description where \vartable - a | Amplitude - f | Frequency [1/s] - s | Type scale factor - l | Type offset level - t_0 | Start time [s] - t | Time [s] + symbol | Description | Data type + a | Amplitude | Function1<scalar> + f | Frequency [1/s] | Function1<scalar> + s | Type scale factor | Function1<Type> + l | Type offset level | Function1<Type> + t_0 | Start time [s] | scalar + t | Time [s] | scalar \endvartable Example for a scalar: @@ -80,16 +81,6 @@ SourceFiles namespace Foam { - -// Forward declaration of friend functions and operators -namespace Function1Types -{ - template<class Type> class Sine; -}; - -template<class Type> -Ostream& operator<<(Ostream&, const Function1Types::Sine<Type>&); - namespace Function1Types { @@ -108,16 +99,16 @@ class Sine scalar t0_; //- Scalar amplitude of the sin function - scalar amplitude_; + autoPtr<Function1<scalar>> amplitude_; //- Frequency of the sin function - scalar frequency_; + autoPtr<Function1<scalar>> frequency_; //- Scaling factor of the sin function - Type scale_; + autoPtr<Function1<Type>> scale_; //- Level to which the sin function is added - Type level_; + autoPtr<Function1<Type>> level_; // Private Member Functions @@ -167,16 +158,6 @@ public: //- Integrate between the two time values t1 and t2 Type integrate(const scalar t1, const scalar t2) const; - - // I/O - - //- Ostream Operator - friend Ostream& operator<< <Type> - ( - Ostream& os, - const Sine<Type>& cnst - ); - //- Write in dictionary format virtual void writeData(Ostream& os) const; }; diff --git a/src/OpenFOAM/primitives/functions/Function1/Sine/SineIO.C b/src/OpenFOAM/primitives/functions/Function1/Sine/SineIO.C index dc1ba58d41a6822b5b929396a150188e95d3ea1a..ea2bfadbdbdbc2167b9d83712d2d1db265fc7f91 100644 --- a/src/OpenFOAM/primitives/functions/Function1/Sine/SineIO.C +++ b/src/OpenFOAM/primitives/functions/Function1/Sine/SineIO.C @@ -27,30 +27,6 @@ License // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // -template<class Type> -Foam::Ostream& Foam::operator<< -( - Ostream& os, - const Function1Types::Sine<Type>& se -) -{ - os << static_cast<const Function1<Type>& >(se) - << token::SPACE << se.t0_ - << token::SPACE << se.amplitude_ - << token::SPACE << se.frequency_ - << token::SPACE << se.scale_ - << token::SPACE << se.level_; - - // Check state of Ostream - os.check - ( - "Ostream& operator<<(Ostream&, const Sine<Type>&)" - ); - - return os; -} - - template<class Type> void Foam::Function1Types::Sine<Type>::writeData(Ostream& os) const { @@ -59,10 +35,10 @@ void Foam::Function1Types::Sine<Type>::writeData(Ostream& os) const os << indent << word(this->name() + "Coeffs") << nl; os << indent << token::BEGIN_BLOCK << incrIndent << nl; os.writeKeyword("t0") << t0_ << token::END_STATEMENT << nl; - os.writeKeyword("amplitude") << amplitude_ << token::END_STATEMENT << nl; - os.writeKeyword("frequency") << frequency_ << token::END_STATEMENT << nl; - os.writeKeyword("scale") << scale_ << token::END_STATEMENT << nl; - os.writeKeyword("level") << level_ << token::END_STATEMENT << nl; + amplitude_->writeData(os); + frequency_->writeData(os); + scale_->writeData(os); + level_->writeData(os); os << decrIndent << indent << token::END_BLOCK << endl; }