/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2016 OpenFOAM Foundation ------------------------------------------------------------------------------- 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 "scalarFieldField.H" #define TEMPLATE template class Field, class Type> #include "FieldFieldFunctionsM.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /* * * * * * * * * * * * * * * * Global functions * * * * * * * * * * * * * */ template class Field, class Type> void component ( FieldField::cmptType>& sf, const FieldField& f, const direction d ); template class Field, class Type> void T(FieldField& f1, const FieldField& f2); template class Field, class Type, direction r> void pow ( FieldField::type>& f, const FieldField& vf ); template class Field, class Type, direction r> tmp::type>> pow ( const FieldField& f, typename powProduct::type = pTraits::type>::zero ); template class Field, class Type, direction r> tmp::type>> pow ( const tmp>& tf, typename powProduct::type = pTraits::type>::zero ); template class Field, class Type> void sqr ( FieldField::type>& f, const FieldField& vf ); template class Field, class Type> tmp::type>> sqr(const FieldField& f); template class Field, class Type> tmp::type>> sqr(const tmp>& tf); template class Field, class Type> void magSqr(FieldField& sf, const FieldField& f); template class Field, class Type> tmp> magSqr(const FieldField& f); template class Field, class Type> tmp> magSqr(const tmp>& tf); template class Field, class Type> void mag(FieldField& sf, const FieldField& f); template class Field, class Type> tmp> mag(const FieldField& f); template class Field, class Type> tmp> mag(const tmp>& tf); template class Field, class Type> void cmptMax ( FieldField::cmptType>& cf, const FieldField& f ); template class Field, class Type> tmp::cmptType>> cmptMax ( const FieldField& f ); template class Field, class Type> tmp::cmptType>> cmptMax ( const tmp>& tf ); template class Field, class Type> void cmptMin ( FieldField::cmptType>& cf, const FieldField& f ); template class Field, class Type> tmp::cmptType>> cmptMin ( const FieldField& f ); template class Field, class Type> tmp::cmptType>> cmptMin ( const tmp>& tf ); template class Field, class Type> void cmptAv ( FieldField::cmptType>& cf, const FieldField& f ); template class Field, class Type> tmp::cmptType>> cmptAv ( const FieldField& f ); template class Field, class Type> tmp::cmptType>> cmptAv ( const tmp>& tf ); template class Field, class Type> void cmptMag ( FieldField& cf, const FieldField& f ); template class Field, class Type> tmp> cmptMag ( const FieldField& f ); template class Field, class Type> tmp> cmptMag ( const tmp>& tf ); #define TMP_UNARY_FUNCTION(returnType, func) \ \ template class Field, class Type> \ returnType func(const tmp>& tf1); template class Field, class Type> Type max(const FieldField& f); TMP_UNARY_FUNCTION(Type, max) template class Field, class Type> Type min(const FieldField& f); TMP_UNARY_FUNCTION(Type, min) template class Field, class Type> Type sum(const FieldField& f); TMP_UNARY_FUNCTION(Type, sum) template class Field, class Type> scalar sumMag(const FieldField& f); TMP_UNARY_FUNCTION(scalar, sumMag) template class Field, class Type> Type average(const FieldField& f); TMP_UNARY_FUNCTION(Type, average) //- Return min/max for a field of fields template class Field, class Type> MinMax minMax(const FieldField& f); TMP_UNARY_FUNCTION(MinMax, minMax) //- Return mag min/max for a field of fields template class Field, class Type> scalarMinMax minMaxMag(const FieldField& f); TMP_UNARY_FUNCTION(scalarMinMax, minMaxMag) // With reduction on ReturnType #define G_UNARY_FUNCTION(returnType, gFunc, func, rFunc) \ \ template class Field, class Type> \ returnType gFunc(const FieldField& f); \ TMP_UNARY_FUNCTION(returnType, gFunc) G_UNARY_FUNCTION(Type, gMax, max, max) G_UNARY_FUNCTION(Type, gMin, min, min) G_UNARY_FUNCTION(Type, gSum, sum, sum) G_UNARY_FUNCTION(MinMax, gMinMax, minMax, sum) G_UNARY_FUNCTION(scalarMinMax, gMinMaxMag, minMaxMag, sum) G_UNARY_FUNCTION(scalar, gSumMag, sumMag, sum) #undef G_UNARY_FUNCTION template class Field, class Type> Type gAverage(const FieldField& f); TMP_UNARY_FUNCTION(Type, gAverage) #undef TMP_UNARY_FUNCTION BINARY_FUNCTION(Type, Type, Type, max) BINARY_FUNCTION(Type, Type, Type, min) BINARY_FUNCTION(Type, Type, Type, cmptMultiply) BINARY_FUNCTION(Type, Type, Type, cmptDivide) BINARY_TYPE_FUNCTION(Type, Type, Type, max) BINARY_TYPE_FUNCTION(Type, Type, Type, min) BINARY_TYPE_FUNCTION(Type, Type, Type, cmptMultiply) BINARY_TYPE_FUNCTION(Type, Type, Type, cmptDivide) BINARY_TYPE_FUNCTION_FS(Type, Type, MinMax, clip) /* * * * * * * * * * * * * * * * Global operators * * * * * * * * * * * * * */ UNARY_OPERATOR(Type, Type, -, negate) BINARY_OPERATOR(Type, Type, scalar, *, multiply) BINARY_OPERATOR(Type, scalar, Type, *, multiply) BINARY_OPERATOR(Type, Type, scalar, /, divide) BINARY_TYPE_OPERATOR_SF(Type, scalar, Type, *, multiply) BINARY_TYPE_OPERATOR_FS(Type, Type, scalar, *, multiply) BINARY_TYPE_OPERATOR_FS(Type, Type, scalar, /, divide) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #define PRODUCT_OPERATOR(product, op, opFunc) \ \ template \ < \ template class Field1, \ template class Field2, \ class Type1, \ class Type2 \ > \ void opFunc \ ( \ FieldField::type>& f, \ const FieldField& f1, \ const FieldField& f2 \ ); \ \ template \ < \ template class Field1, \ template class Field2, \ class Type1, \ class Type2 \ > \ tmp::type>> \ operator op \ ( \ const FieldField& f1, \ const FieldField& f2 \ ); \ \ template class Field, class Type1, class Type2> \ tmp::type>> \ operator op \ ( \ const FieldField& f1, \ const tmp>& tf2 \ ); \ \ template \ < \ template class Field1, \ template class Field2, \ class Type1, \ class Type2 \ > \ tmp::type>> \ operator op \ ( \ const FieldField& f1, \ const tmp>& tf2 \ ); \ \ template \ < \ template class Field1, \ template class Field2, \ class Type1, \ class Type2 \ > \ tmp::type>> \ operator op \ ( \ const tmp>& tf1, \ const FieldField& f2 \ ); \ \ template \ < \ template class Field1, \ template class Field2, \ class Type1, \ class Type2 \ > \ tmp::type>> \ operator op \ ( \ const tmp>& tf1, \ const tmp>& tf2 \ ); \ \ template \ < \ template class Field, \ class Type, \ class Form, \ class Cmpt, \ direction nCmpt \ > \ void opFunc \ ( \ FieldField::type>& f, \ const FieldField& f1, \ const VectorSpace& vs \ ); \ \ template \ < \ template class Field, \ class Type, \ class Form, \ class Cmpt, \ direction nCmpt \ > \ tmp::type>> \ operator op \ ( \ const FieldField& f1, \ const VectorSpace& vs \ ); \ \ template \ < \ template class Field, \ class Type, \ class Form, \ class Cmpt, \ direction nCmpt \ > \ tmp::type>> \ operator op \ ( \ const tmp>& tf1, \ const VectorSpace& vs \ ); \ \ template \ < \ template class Field, \ class Type, \ class Form, \ class Cmpt, \ direction nCmpt \ > \ void opFunc \ ( \ FieldField::type>& f, \ const VectorSpace& vs, \ const FieldField& f1 \ ); \ \ template \ < \ template class Field, \ class Type, \ class Form, \ class Cmpt, \ direction nCmpt \ > \ tmp::type>> \ operator op \ ( \ const VectorSpace& vs, \ const FieldField& f1 \ ); \ \ template \ < \ template class Field, \ class Type, \ class Form, \ class Cmpt, \ direction nCmpt \ > \ tmp::type>> \ operator op \ ( \ const VectorSpace& vs, \ const tmp>& tf1 \ ); PRODUCT_OPERATOR(typeOfSum, +, add) PRODUCT_OPERATOR(typeOfSum, -, subtract) PRODUCT_OPERATOR(outerProduct, *, outer) PRODUCT_OPERATOR(crossProduct, ^, cross) PRODUCT_OPERATOR(innerProduct, &, dot) PRODUCT_OPERATOR(scalarProduct, &&, dotdot) #undef PRODUCT_OPERATOR // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "undefFieldFunctionsM.H" // ************************************************************************* //