diff --git a/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.C b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.C
new file mode 100644
index 0000000000..37342b2e57
--- /dev/null
+++ b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.C
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2017 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "Scale.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+void Foam::Function1Types::Scale::read(const dictionary& coeffs)
+{
+ scale_ = Function1::New("scale", coeffs);
+ value_ = Function1::New("value", coeffs);
+}
+
+
+template
+Foam::Function1Types::Scale::Scale
+(
+ const word& entryName,
+ const dictionary& dict
+)
+:
+ Function1(entryName)
+{
+ read(dict);
+}
+
+
+template
+Foam::Function1Types::Scale::Scale(const Scale& se)
+:
+ Function1(se),
+ scale_(se.scale_, false),
+ value_(se.value_, false)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+template
+Foam::Function1Types::Scale::~Scale()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+Type Foam::Function1Types::Scale::value(const scalar t) const
+{
+ return scale_->value(t)*value_->value(t);
+}
+
+
+template
+void Foam::Function1Types::Scale::writeData(Ostream& os) const
+{
+ Function1::writeData(os);
+ os << token::END_STATEMENT << nl;
+ os << indent << word(this->name() + "Coeffs") << nl;
+ os << indent << token::BEGIN_BLOCK << incrIndent << nl;
+ scale_->writeData(os);
+ value_->writeData(os);
+ os << decrIndent << indent << token::END_BLOCK << endl;
+}
+
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.H b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.H
new file mode 100644
index 0000000000..80f5f639bd
--- /dev/null
+++ b/src/OpenFOAM/primitives/functions/Function1/Scale/Scale.H
@@ -0,0 +1,165 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2017 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::Function1Types::Scale
+
+Description
+ Function1 which scales a given 'value' function by a scalar 'scale'
+ function.
+
+ This is particularly useful to ramp a time-varying value by one of the
+ monotonic ramp functions.
+
+ Usage for a vector:
+ \verbatim
+
+ {
+ type scale;
+
+ scale
+ {
+ type linearRamp;
+
+ start 0;
+ duration 10;
+ }
+
+ value
+ {
+ type sine;
+
+ frequency 10;
+ amplitude 1;
+ scale (1 0.1 0);
+ level (10 1 0);
+ }
+ }
+ \endverbatim
+
+ Where:
+ \table
+ Property | Description | Required
+ value | Function of type Function1 | yes
+ scale | Scaling function of type Function1 | yes
+ \endtable
+
+SourceFiles
+ Scale.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef Scale_H
+#define Scale_H
+
+#include "Function1.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace Function1Types
+{
+
+/*---------------------------------------------------------------------------*\
+ Class Scale Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class Scale
+:
+ public Function1
+{
+ // Private data
+
+ //- Scalar scaling function
+ autoPtr> scale_;
+
+ //- Value function
+ autoPtr> value_;
+
+
+ // Private Member Functions
+
+ //- Read the coefficients from the given dictionary
+ void read(const dictionary& coeffs);
+
+ //- Disallow default bitwise assignment
+ void operator=(const Scale&);
+
+
+public:
+
+ // Runtime type information
+ TypeName("scale");
+
+
+ // Constructors
+
+ //- Construct from entry name and dictionary
+ Scale
+ (
+ const word& entryName,
+ const dictionary& dict
+ );
+
+ //- Copy constructor
+ Scale(const Scale& se);
+
+ //- Construct and return a clone
+ virtual tmp> clone() const
+ {
+ return tmp>(new Scale(*this));
+ }
+
+
+ //- Destructor
+ virtual ~Scale();
+
+
+ // Member Functions
+
+ //- Return value for time t
+ Type value(const scalar t) const;
+
+ //- Write in dictionary format
+ virtual void writeData(Ostream& os) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Function1Types
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+ #include "Scale.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/functions/Function1/makeDataEntries.C b/src/OpenFOAM/primitives/functions/Function1/makeDataEntries.C
index 6c8db2ed8a..b7c93ca1b3 100644
--- a/src/OpenFOAM/primitives/functions/Function1/makeDataEntries.C
+++ b/src/OpenFOAM/primitives/functions/Function1/makeDataEntries.C
@@ -32,6 +32,7 @@ License
#include "CSV.H"
#include "Table.H"
#include "TableFile.H"
+#include "Scale.H"
#include "fieldTypes.H"
@@ -47,7 +48,8 @@ License
makeFunction1Type(Square, Type); \
makeFunction1Type(CSV, Type); \
makeFunction1Type(Table, Type); \
- makeFunction1Type(TableFile, Type);
+ makeFunction1Type(TableFile, Type); \
+ makeFunction1Type(Scale, Type);
namespace Foam
{