Function2s: Added 'function1', 'product' and 'radial'
The 'function1' function returns the result of a Function1 using just
one of the arguments given to the function2. The function1 is specified
as value1 or value2, depending on which argument it is to be evaluated
with. E.g.:
<name>
{
type function1;
value2 table
(
(0.00 (0 0 0))
(0.35 (0 0 1))
(0.71 (0 0 0))
);
}
The 'product' function returns the product of two independent
Function1-s of the two input arguments, again specified as value1 and
value2. For example, to scale a table of vectors in the first argument
with a ramp in the second argument:
<name>
{
type product;
value1<vector> table
(
(0.00 (0 0 0))
(0.25 (1 0 0))
(0.50 (0 0 0))
);
value2<scalar>
{
type linearRamp;
start 1;
duration 4;
}
}
Note that only one type specification (the <vector>/<scalar>/... part)
is needed in general for the value entries, and no type specifications
are needed if the function is scalar.
The 'radial' function returns a Function1 of the magnitude of the
two-dimensional vector with components equal to the input arguments.
E.g.:
<name>
{
type radial;
value table
(
(0.00 (0 0 0))
(0.35 (0 0 1))
(0.71 (0 0 0))
);
}
This commit is contained in:
@ -0,0 +1,91 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "Function12.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Function12<Type>::Function12
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
FieldFunction2<Type, Function12<Type>>(name),
|
||||||
|
index_(),
|
||||||
|
f_()
|
||||||
|
{
|
||||||
|
static const word name1 = "value1", name2 = "value2";
|
||||||
|
const bool found1 = dict.found(name1), found2 = dict.found(name2);
|
||||||
|
|
||||||
|
if (found1 && found2)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "Both keywords " << name1 << " and " << name2
|
||||||
|
<< " are undefined in dictionary " << dict.name()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found1 && !found2)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "Neither keywords " << name1 << " or " << name2
|
||||||
|
<< " are defined in dictionary " << dict.name()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
index_ = found2;
|
||||||
|
|
||||||
|
f_ = Function1<Type>::New(found2 ? name2 : name1, dict);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Function12<Type>::Function12(const Function12<Type>& se)
|
||||||
|
:
|
||||||
|
FieldFunction2<Type, Function12<Type>>(se),
|
||||||
|
index_(se.index_),
|
||||||
|
f_(se.f_, false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Function12<Type>::~Function12()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::Function2s::Function12<Type>::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
writeEntry(os, f_());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,148 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::Function2s::Function12
|
||||||
|
|
||||||
|
Description
|
||||||
|
Function2 which returns a Function1 using just one of the arguments given
|
||||||
|
to the function2. The function1 is specified as value1 or value2, depending
|
||||||
|
on which argument it is to be evaluated with.
|
||||||
|
|
||||||
|
Example for a scalar:
|
||||||
|
\verbatim
|
||||||
|
<name>
|
||||||
|
{
|
||||||
|
type function1;
|
||||||
|
value1 constant 10; // <-- The value1 function is evaluated with
|
||||||
|
// the first argument
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
Example for a vector:
|
||||||
|
\verbatim
|
||||||
|
<name>
|
||||||
|
{
|
||||||
|
type function1;
|
||||||
|
value2 table // <-- The value2 function is evaluated with
|
||||||
|
( // the second argument
|
||||||
|
(0.00 (0 0 0))
|
||||||
|
(0.35 (0 0 1))
|
||||||
|
(0.71 (0 0 0))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
Function12.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef Function12_H
|
||||||
|
#define Function12_H
|
||||||
|
|
||||||
|
#include "Function1.H"
|
||||||
|
#include "Function2.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace Function2s
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class Function12 Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class Function12
|
||||||
|
:
|
||||||
|
public FieldFunction2<Type, Function12<Type>>
|
||||||
|
{
|
||||||
|
// Private Data
|
||||||
|
|
||||||
|
//- The index of the argument to use. 0 or 1, hence a bool.
|
||||||
|
bool index_;
|
||||||
|
|
||||||
|
//- Function
|
||||||
|
autoPtr<Function1<Type>> f_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Runtime type information
|
||||||
|
TypeName("function1");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from name and dictionary
|
||||||
|
Function12
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Copy constructor
|
||||||
|
Function12(const Function12<Type>& se);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~Function12();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return value
|
||||||
|
virtual inline Type value(const scalar x, const scalar y) const;
|
||||||
|
|
||||||
|
//- Write data to dictionary stream
|
||||||
|
virtual void write(Ostream& os) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member Operators
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const Function12<Type>&) = delete;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Function2s
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "Function12I.H"
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
#include "Function12.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "Function12.H"
|
||||||
|
#include "vector2D.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Type Foam::Function2s::Function12<Type>::value
|
||||||
|
(
|
||||||
|
const scalar x,
|
||||||
|
const scalar y
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return f_->value(index_ ? y : x);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
314
src/OpenFOAM/primitives/functions/Function2/Product/Product2.C
Normal file
314
src/OpenFOAM/primitives/functions/Function2/Product/Product2.C
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "Product2.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type, Foam::direction rank>
|
||||||
|
Foam::Function2s::ProductFunction1s<Type, rank>::ProductFunction1s
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const Pair<Tuple2<word, label>>& typeAndRanks
|
||||||
|
)
|
||||||
|
:
|
||||||
|
ProductFunction1s<Type, rank - 1>(dict, typeAndRanks)
|
||||||
|
{
|
||||||
|
forAll(fs, i)
|
||||||
|
{
|
||||||
|
if (typeAndRanks[i].second() == rank)
|
||||||
|
{
|
||||||
|
fs[i] =
|
||||||
|
function1Type::New
|
||||||
|
(
|
||||||
|
valueName(i, typeAndRanks[i]),
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::ProductFunction1s<Type, 0>::ProductFunction1s
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const Pair<Tuple2<word, label>>& typeAndRanks
|
||||||
|
)
|
||||||
|
{
|
||||||
|
forAll(fs, i)
|
||||||
|
{
|
||||||
|
if (typeAndRanks[i].second() == 0)
|
||||||
|
{
|
||||||
|
fs[i] =
|
||||||
|
Function1<scalar>::New
|
||||||
|
(
|
||||||
|
valueName(i, typeAndRanks[i]),
|
||||||
|
dict
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type, Foam::direction rank>
|
||||||
|
Foam::Function2s::ProductFunction1s<Type, rank>::ProductFunction1s
|
||||||
|
(
|
||||||
|
const ProductFunction1s<Type, rank>& p2f1s
|
||||||
|
)
|
||||||
|
:
|
||||||
|
ProductFunction1s<Type, rank - 1>(p2f1s),
|
||||||
|
fs
|
||||||
|
(
|
||||||
|
autoPtr<function1Type>(p2f1s.fs.first(), false),
|
||||||
|
autoPtr<function1Type>(p2f1s.fs.second(), false)
|
||||||
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::ProductFunction1s<Type, 0>::ProductFunction1s
|
||||||
|
(
|
||||||
|
const ProductFunction1s<Type, 0>& p2f1s
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fs
|
||||||
|
(
|
||||||
|
autoPtr<Function1<scalar>>(p2f1s.fs.first(), false),
|
||||||
|
autoPtr<Function1<scalar>>(p2f1s.fs.second(), false)
|
||||||
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Product<Type>::Product
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
FieldFunction2<Type, Product<Type>>(name),
|
||||||
|
fs_(dict, lookupValueTypeAndRanks<Type>(dict))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Product<Type>::Product(const Product<Type>& se)
|
||||||
|
:
|
||||||
|
FieldFunction2<Type, Product<Type>>(se),
|
||||||
|
fs_(se.fs_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Product<Type>::~Product()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type, Foam::direction rank>
|
||||||
|
void Foam::Function2s::ProductFunction1s<Type, rank>::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
ProductFunction1s<Type, rank - 1>::write(os);
|
||||||
|
|
||||||
|
forAll(fs, i)
|
||||||
|
{
|
||||||
|
if (fs[i].valid())
|
||||||
|
{
|
||||||
|
writeEntry(os, fs[i]());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::Function2s::ProductFunction1s<Type, 0>::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
forAll(fs, i)
|
||||||
|
{
|
||||||
|
if (fs[i].valid())
|
||||||
|
{
|
||||||
|
writeEntry(os, fs[i]());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::Function2s::Product<Type>::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
fs_.write(os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type, class ValueType>
|
||||||
|
void Foam::Function2s::lookupValueTypeAndRank
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const direction argument,
|
||||||
|
Tuple2<word, label>& typeAndRank,
|
||||||
|
label& found
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (dict.found(valueName<ValueType>(argument)))
|
||||||
|
{
|
||||||
|
if (found != -1)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "Multiple " << valueName(argument) << " and/or "
|
||||||
|
<< valueName(argument, "Type") << "-s specified"
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
|
typeAndRank =
|
||||||
|
Tuple2<word, label>
|
||||||
|
(
|
||||||
|
pTraits<ValueType>::typeName,
|
||||||
|
pTraits<ValueType>::rank
|
||||||
|
);
|
||||||
|
|
||||||
|
found = ProductValueTypeIsValid<Type, ValueType>::value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Tuple2<Foam::word, Foam::label> Foam::Function2s::lookupValueTypeAndRank
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const direction argument
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Tuple2<word, label> typeAndRank(word::null, -1);
|
||||||
|
label found = dict.found(valueName(argument)) ? 1 : -1;
|
||||||
|
|
||||||
|
#define LOOKUP_VALUE_TYPE_AND_RANK(ValueType, nullArg) \
|
||||||
|
lookupValueTypeAndRank<Type, ValueType> \
|
||||||
|
( \
|
||||||
|
dict, \
|
||||||
|
argument, \
|
||||||
|
typeAndRank, \
|
||||||
|
found \
|
||||||
|
);
|
||||||
|
FOR_ALL_FIELD_TYPES(LOOKUP_VALUE_TYPE_AND_RANK);
|
||||||
|
#undef LOOKUP_VALUE_TYPE_AND_RANK
|
||||||
|
|
||||||
|
if (found == -1)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "Function " << valueName(argument)
|
||||||
|
<< " undefined in dictionary " << dict.name()
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found == 0)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "Function " << valueName(argument, typeAndRank)
|
||||||
|
<< " returns a type that cannot be used to produce a product"
|
||||||
|
<< " of type " << pTraits<Type>::typeName
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return typeAndRank;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Pair<Foam::Tuple2<Foam::word, Foam::label>>
|
||||||
|
Foam::Function2s::lookupValueTypeAndRanks(const dictionary& dict)
|
||||||
|
{
|
||||||
|
Pair<Tuple2<word, label>> typeAndRanks
|
||||||
|
(
|
||||||
|
lookupValueTypeAndRank<Type>(dict, 0),
|
||||||
|
lookupValueTypeAndRank<Type>(dict, 1)
|
||||||
|
);
|
||||||
|
|
||||||
|
// If this is a non-scalar type then at least one of the value entries must
|
||||||
|
// have specified the type
|
||||||
|
if
|
||||||
|
(
|
||||||
|
pTraits<Type>::rank > 0
|
||||||
|
&& typeAndRanks.first().second() == -1
|
||||||
|
&& typeAndRanks.second().second() == -1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "One of the functions " << valueName(0) << " and "
|
||||||
|
<< valueName(1) << " needs to specify the return type, e.g., as "
|
||||||
|
<< valueName<Type>(0) << exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If both types are specified then the sum of their ranks must equal the
|
||||||
|
// rank of the function
|
||||||
|
if
|
||||||
|
(
|
||||||
|
typeAndRanks.first().second() != -1
|
||||||
|
&& typeAndRanks.second().second() != -1
|
||||||
|
&& typeAndRanks.first().second()
|
||||||
|
+ typeAndRanks.second().second()
|
||||||
|
!= pTraits<Type>::rank
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "The functions " << valueName(0, typeAndRanks.first())
|
||||||
|
<< " and " << valueName(1, typeAndRanks.second()) << " return "
|
||||||
|
<< "types for which the product is not of type "
|
||||||
|
<< pTraits<Type>::typeName << exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this is a scalar type, then neither entry needs to specify the type.
|
||||||
|
// They both must be scalars.
|
||||||
|
if
|
||||||
|
(
|
||||||
|
pTraits<Type>::rank == 0
|
||||||
|
&& typeAndRanks.first().second() == -1
|
||||||
|
&& typeAndRanks.second().second() == -1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
typeAndRanks.first().second() = 0;
|
||||||
|
typeAndRanks.second().second() = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine remaining unspecified ranks
|
||||||
|
forAll(typeAndRanks, i)
|
||||||
|
{
|
||||||
|
if (typeAndRanks[i].second() == -1)
|
||||||
|
{
|
||||||
|
typeAndRanks[i].second() =
|
||||||
|
pTraits<Type>::rank - typeAndRanks[!i].second();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return typeAndRanks;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
348
src/OpenFOAM/primitives/functions/Function2/Product/Product2.H
Normal file
348
src/OpenFOAM/primitives/functions/Function2/Product/Product2.H
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::Function2s::Product
|
||||||
|
|
||||||
|
Description
|
||||||
|
Function2 which returns the product of two independent Function1-s of the
|
||||||
|
two input arguments. The two function1s are specified as value1 and value2.
|
||||||
|
|
||||||
|
Example to scale a table of vectors in the first argument with a ramp in
|
||||||
|
the second argument:
|
||||||
|
\verbatim
|
||||||
|
<name>
|
||||||
|
{
|
||||||
|
type product;
|
||||||
|
value1<vector> table
|
||||||
|
(
|
||||||
|
(0.00 (0 0 0))
|
||||||
|
(0.25 (1 0 0))
|
||||||
|
(0.50 (0 0 0))
|
||||||
|
);
|
||||||
|
value2<scalar>
|
||||||
|
{
|
||||||
|
type linearRamp;
|
||||||
|
start 1;
|
||||||
|
duration 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
Note that only one type specification (the <vector>/<scalar>/... part)
|
||||||
|
is needed in general for the value entries, and no type specifications
|
||||||
|
are needed if the function is scalar.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
Product.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef Product2_H
|
||||||
|
#define Product2_H
|
||||||
|
|
||||||
|
#include "Function1.H"
|
||||||
|
#include "Function2.H"
|
||||||
|
#include "fieldTypes.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace Function2s
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class ProductValueTypeIsValid Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type, class ValueType, class Enable = void>
|
||||||
|
struct ProductValueTypeIsValid
|
||||||
|
{
|
||||||
|
static const bool value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
struct ProductValueTypeIsValid<Type, scalar>
|
||||||
|
{
|
||||||
|
static const bool value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type, class ValueType>
|
||||||
|
struct ProductValueTypeIsValid
|
||||||
|
<
|
||||||
|
Type,
|
||||||
|
ValueType,
|
||||||
|
typename std::enable_if
|
||||||
|
<
|
||||||
|
(pTraits<ValueType>::rank > 0)
|
||||||
|
&& (pTraits<ValueType>::rank <= pTraits<Type>::rank)
|
||||||
|
>::type
|
||||||
|
>
|
||||||
|
{
|
||||||
|
static const bool value =
|
||||||
|
std::is_same
|
||||||
|
<
|
||||||
|
Type,
|
||||||
|
typename outerProduct
|
||||||
|
<
|
||||||
|
ValueType,
|
||||||
|
typename typeOfRank
|
||||||
|
<
|
||||||
|
scalar,
|
||||||
|
pTraits<Type>::rank - pTraits<ValueType>::rank
|
||||||
|
>::type
|
||||||
|
>::type
|
||||||
|
>::value;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class ProductFilter Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
struct ProductFilter
|
||||||
|
{
|
||||||
|
inline const Type& operator()(const Type& value) const
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class WrongType>
|
||||||
|
const Type& operator()(const WrongType& value) const
|
||||||
|
{
|
||||||
|
return NullObjectRef<Type>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class ProductFunction1s Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type, direction rank = pTraits<Type>::rank>
|
||||||
|
class ProductFunction1s
|
||||||
|
:
|
||||||
|
public ProductFunction1s<Type, rank - 1>
|
||||||
|
{
|
||||||
|
// Private Typedefs
|
||||||
|
|
||||||
|
//- Type of the function
|
||||||
|
typedef
|
||||||
|
Function1
|
||||||
|
<
|
||||||
|
typename std::conditional
|
||||||
|
<
|
||||||
|
rank == pTraits<Type>::rank,
|
||||||
|
Type,
|
||||||
|
typename typeOfRank<scalar, rank>::type
|
||||||
|
>::type
|
||||||
|
> function1Type;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public Data
|
||||||
|
|
||||||
|
//- Functions
|
||||||
|
Pair<autoPtr<function1Type>> fs;
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from a dictionary
|
||||||
|
ProductFunction1s
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const Pair<Tuple2<word, label>>& typeAndRanks
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Copy construct
|
||||||
|
ProductFunction1s(const ProductFunction1s<Type, rank>& p2f1s);
|
||||||
|
|
||||||
|
|
||||||
|
// Public Member Functions
|
||||||
|
|
||||||
|
//- Evaluate
|
||||||
|
inline Type value(const scalar x, const scalar y) const;
|
||||||
|
|
||||||
|
//- Write to a stream
|
||||||
|
void write(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class ProductFunction1s<0> Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class ProductFunction1s<Type, 0>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public Data
|
||||||
|
|
||||||
|
//- Functions
|
||||||
|
Pair<autoPtr<Function1<scalar>>> fs;
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from a dictionary
|
||||||
|
ProductFunction1s
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const Pair<Tuple2<word, label>>& typeAndRanks
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Copy construct
|
||||||
|
ProductFunction1s(const ProductFunction1s<Type, 0>& p2f1s);
|
||||||
|
|
||||||
|
|
||||||
|
// Public Member Functions
|
||||||
|
|
||||||
|
//- Evaluate
|
||||||
|
inline Type value(const scalar x, const scalar y) const;
|
||||||
|
|
||||||
|
//- Write to a stream
|
||||||
|
void write(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class Product Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class Product
|
||||||
|
:
|
||||||
|
public FieldFunction2<Type, Product<Type>>
|
||||||
|
{
|
||||||
|
// Private Data
|
||||||
|
|
||||||
|
//- Functions
|
||||||
|
ProductFunction1s<Type> fs_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Runtime type information
|
||||||
|
TypeName("product");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from name and dictionary
|
||||||
|
Product
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Copy constructor
|
||||||
|
Product(const Product<Type>& se);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~Product();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return value
|
||||||
|
virtual inline Type value(const scalar x, const scalar y) const;
|
||||||
|
|
||||||
|
//- Write data to dictionary stream
|
||||||
|
virtual void write(Ostream& os) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member Operators
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const Product<Type>&) = delete;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Global Functions
|
||||||
|
|
||||||
|
//- Return the name of the value entry for the given argument
|
||||||
|
inline word valueName(const direction argument);
|
||||||
|
|
||||||
|
//- Return the name of the value entry for the given argument and type name
|
||||||
|
inline word valueName(const direction argument, const word& typeName);
|
||||||
|
|
||||||
|
//- Return the name of the value entry for the given argument and type
|
||||||
|
template<class Type>
|
||||||
|
inline word valueName(const direction argument);
|
||||||
|
|
||||||
|
//- Return the name of the value entry for the given argument and type and rank
|
||||||
|
inline word valueName
|
||||||
|
(
|
||||||
|
const direction argument,
|
||||||
|
const Tuple2<word, label>& typeAndRank
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Lookup the type and rank for the value entry for the given argument
|
||||||
|
template<class Type, class ValueType>
|
||||||
|
void lookupValueTypeAndRank
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const direction argument,
|
||||||
|
Tuple2<word, label>& typeAndRank,
|
||||||
|
label& found
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Lookup the type and rank for the value entry for the given argument
|
||||||
|
template<class Type>
|
||||||
|
Tuple2<word, label> lookupValueTypeAndRank
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const direction argument
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Lookup the types and ranks for the value entries
|
||||||
|
template<class Type>
|
||||||
|
Pair<Tuple2<word, label>> lookupValueTypeAndRanks(const dictionary& dict);
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Function2s
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "Product2I.H"
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
#include "Product2.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
117
src/OpenFOAM/primitives/functions/Function2/Product/Product2I.H
Normal file
117
src/OpenFOAM/primitives/functions/Function2/Product/Product2I.H
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "Product2.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type, Foam::direction rank>
|
||||||
|
inline Type Foam::Function2s::ProductFunction1s<Type, rank>::value
|
||||||
|
(
|
||||||
|
const scalar x,
|
||||||
|
const scalar y
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const ProductFilter<Type> filter;
|
||||||
|
static const direction otherRank = pTraits<Type>::rank - rank;
|
||||||
|
const ProductFunction1s<Type, otherRank>& other = *this;
|
||||||
|
|
||||||
|
if (fs.first().valid())
|
||||||
|
{
|
||||||
|
return filter(fs.first()->value(x)*other.fs.second()->value(y));
|
||||||
|
}
|
||||||
|
else if (fs.second().valid())
|
||||||
|
{
|
||||||
|
return filter(other.fs.first()->value(x)*fs.second()->value(y));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ProductFunction1s<Type, rank - 1>::value(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Type Foam::Function2s::ProductFunction1s<Type, 0>::value
|
||||||
|
(
|
||||||
|
const scalar x,
|
||||||
|
const scalar y
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const ProductFilter<Type> filter;
|
||||||
|
return filter(fs.first()->value(x)*fs.second()->value(y));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Type Foam::Function2s::Product<Type>::value
|
||||||
|
(
|
||||||
|
const scalar x,
|
||||||
|
const scalar y
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return fs_.value(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline Foam::word Foam::Function2s::valueName(const direction argument)
|
||||||
|
{
|
||||||
|
return "value" + Foam::name(argument + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::word Foam::Function2s::valueName
|
||||||
|
(
|
||||||
|
const direction argument,
|
||||||
|
const word& typeName
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
typeName.empty()
|
||||||
|
? valueName(argument)
|
||||||
|
: valueName(argument) + "<" + typeName + ">";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Foam::word Foam::Function2s::valueName(const direction argument)
|
||||||
|
{
|
||||||
|
return valueName(argument, pTraits<Type>::typeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::word Foam::Function2s::valueName
|
||||||
|
(
|
||||||
|
const direction argument,
|
||||||
|
const Tuple2<word, label>& typeAndRank
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return valueName(argument, typeAndRank.first());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
66
src/OpenFOAM/primitives/functions/Function2/Radial/Radial2.C
Normal file
66
src/OpenFOAM/primitives/functions/Function2/Radial/Radial2.C
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "Radial2.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Radial<Type>::Radial
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
FieldFunction2<Type, Radial<Type>>(name),
|
||||||
|
value_(Function1<Type>::New("value", dict))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Radial<Type>::Radial(const Radial<Type>& se)
|
||||||
|
:
|
||||||
|
FieldFunction2<Type, Radial<Type>>(se),
|
||||||
|
value_(se.value_, false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::Function2s::Radial<Type>::~Radial()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::Function2s::Radial<Type>::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
value_->write(os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
134
src/OpenFOAM/primitives/functions/Function2/Radial/Radial2.H
Normal file
134
src/OpenFOAM/primitives/functions/Function2/Radial/Radial2.H
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::Function2s::Radial
|
||||||
|
|
||||||
|
Description
|
||||||
|
Function2 which returns a Function1 of the magnitude of the two-dimensional
|
||||||
|
vector with components equal to the input arguments.
|
||||||
|
|
||||||
|
Example
|
||||||
|
\verbatim
|
||||||
|
<name>
|
||||||
|
{
|
||||||
|
type radial;
|
||||||
|
value table
|
||||||
|
(
|
||||||
|
(0.00 (0 0 0))
|
||||||
|
(0.35 (0 0 1))
|
||||||
|
(0.71 (0 0 0))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
Radial.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef Radial2_H
|
||||||
|
#define Radial2_H
|
||||||
|
|
||||||
|
#include "Function1.H"
|
||||||
|
#include "Function2.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace Function2s
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class Radial Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class Radial
|
||||||
|
:
|
||||||
|
public FieldFunction2<Type, Radial<Type>>
|
||||||
|
{
|
||||||
|
// Private Data
|
||||||
|
|
||||||
|
//- Function of the radius
|
||||||
|
autoPtr<Function1<Type>> value_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Runtime type information
|
||||||
|
TypeName("radial");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from name and dictionary
|
||||||
|
Radial
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Copy constructor
|
||||||
|
Radial(const Radial<Type>& se);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~Radial();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return value
|
||||||
|
virtual inline Type value(const scalar x, const scalar y) const;
|
||||||
|
|
||||||
|
//- Write data to dictionary stream
|
||||||
|
virtual void write(Ostream& os) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member Operators
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const Radial<Type>&) = delete;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Function2s
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "Radial2I.H"
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
#include "Radial2.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "Radial2.H"
|
||||||
|
#include "vector2D.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
inline Type Foam::Function2s::Radial<Type>::value
|
||||||
|
(
|
||||||
|
const scalar x,
|
||||||
|
const scalar y
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return value_->value(mag(vector2D(x, y)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2020-2023 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2020-2024 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -37,6 +37,9 @@ Description
|
|||||||
#include "ZeroConstant2.H"
|
#include "ZeroConstant2.H"
|
||||||
#include "OneConstant2.H"
|
#include "OneConstant2.H"
|
||||||
#include "Scale2.H"
|
#include "Scale2.H"
|
||||||
|
#include "Function12.H"
|
||||||
|
#include "Product2.H"
|
||||||
|
#include "Radial2.H"
|
||||||
#include "UniformTable2.H"
|
#include "UniformTable2.H"
|
||||||
#include "CodedFunction2.H"
|
#include "CodedFunction2.H"
|
||||||
|
|
||||||
@ -53,6 +56,9 @@ Description
|
|||||||
addFunction2(ZeroConstant, Type); \
|
addFunction2(ZeroConstant, Type); \
|
||||||
addFunction2(OneConstant, Type); \
|
addFunction2(OneConstant, Type); \
|
||||||
addFunction2(Scale, Type); \
|
addFunction2(Scale, Type); \
|
||||||
|
addFunction2(Function12, Type); \
|
||||||
|
addFunction2(Product, Type); \
|
||||||
|
addFunction2(Radial, Type); \
|
||||||
addFunction2(UniformTable, Type); \
|
addFunction2(UniformTable, Type); \
|
||||||
addFunction2(Coded, Type); \
|
addFunction2(Coded, Type); \
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user