/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd. ------------------------------------------------------------------------------- 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 "GeometricScalarField.H" #define TEMPLATE \ template class PatchField, class GeoMesh> #include "GeometricFieldFunctionsM.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // * * * * * * * * * * * * * * * Global functions * * * * * * * * * * * * * // template class PatchField, class GeoMesh> void component ( GeometricField < typename GeometricField::cmptType, PatchField, GeoMesh >& gcf, const GeometricField& gf, const direction d ); template class PatchField, class GeoMesh> void T ( GeometricField& gf, const GeometricField& gf1 ); template < class Type, template class PatchField, class GeoMesh, direction r > void pow ( GeometricField::type, PatchField, GeoMesh>& gf, const GeometricField& gf1 ); template < class Type, template class PatchField, class GeoMesh, direction r > tmp < GeometricField ::type, PatchField, GeoMesh> > pow ( const GeometricField& gf, typename powProduct::type ); template < class Type, template class PatchField, class GeoMesh, direction r > tmp < GeometricField ::type, PatchField, GeoMesh> > pow ( const tmp>& tgf, typename powProduct::type ); template class PatchField, class GeoMesh> void sqr ( GeometricField ::type, PatchField, GeoMesh>& gf, const GeometricField& gf1 ); template class PatchField, class GeoMesh> tmp < GeometricField < typename outerProduct::type, PatchField, GeoMesh > > sqr(const GeometricField& gf); template class PatchField, class GeoMesh> tmp < GeometricField < typename outerProduct::type, PatchField, GeoMesh > > sqr(const tmp>& tgf); template class PatchField, class GeoMesh> void magSqr ( GeometricField& gsf, const GeometricField& gf ); template class PatchField, class GeoMesh> tmp> magSqr ( const GeometricField& gf ); template class PatchField, class GeoMesh> tmp> magSqr ( const tmp>& tgf ); template class PatchField, class GeoMesh> void mag ( GeometricField& gsf, const GeometricField& gf ); template class PatchField, class GeoMesh> tmp> mag ( const GeometricField& gf ); template class PatchField, class GeoMesh> tmp> mag ( const tmp>& tgf ); template class PatchField, class GeoMesh> void cmptAv ( GeometricField < typename GeometricField::cmptType, PatchField, GeoMesh >& gcf, const GeometricField& gf ); template class PatchField, class GeoMesh> tmp < GeometricField < typename GeometricField::cmptType, PatchField, GeoMesh > > cmptAv(const GeometricField& gf); template class PatchField, class GeoMesh> tmp < GeometricField < typename GeometricField::cmptType, PatchField, GeoMesh > > cmptAv(const tmp>& tgf); #define UNARY_REDUCTION_FUNCTION_WITH_BOUNDARY(returnType, func, binaryOp) \ \ template class PatchField, class GeoMesh> \ dimensioned func \ ( \ const GeometricField& gf \ ); \ \ template class PatchField, class GeoMesh> \ dimensioned func \ ( \ const tmp>& tgf1 \ ); UNARY_REDUCTION_FUNCTION_WITH_BOUNDARY(Type, max, maxOp) UNARY_REDUCTION_FUNCTION_WITH_BOUNDARY(Type, min, minOp) #undef UNARY_REDUCTION_FUNCTION_WITH_BOUNDARY #define UNARY_REDUCTION_FUNCTION(returnType, func, gFunc) \ \ template class PatchField, class GeoMesh> \ dimensioned func \ ( \ const GeometricField& gf \ ); \ \ template class PatchField, class GeoMesh> \ dimensioned func \ ( \ const tmp>& tgf1 \ ); UNARY_REDUCTION_FUNCTION(Type, sum, gSum) UNARY_REDUCTION_FUNCTION(scalar, sumMag, gSumMag) UNARY_REDUCTION_FUNCTION(Type, average, gAverage) #undef UNARY_REDUCTION_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) // * * * * * * * * * * * * * * * Global operators * * * * * * * * * * * * * // UNARY_OPERATOR(Type, Type, -, negate, transform) 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 \ class PatchField, class GeoMesh> \ void opFunc \ ( \ GeometricField \ ::type, PatchField, GeoMesh>& gf, \ const GeometricField& gf1, \ const GeometricField& gf2 \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const GeometricField& gf1, \ const GeometricField& gf2 \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const GeometricField& gf1, \ const tmp>& tgf2 \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const tmp>& tgf1, \ const GeometricField& gf2 \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const tmp>& tgf1, \ const tmp>& tgf2 \ ); \ \ template \ class PatchField, class GeoMesh> \ void opFunc \ ( \ GeometricField \ ::type, PatchField, GeoMesh>& gf, \ const GeometricField& gf1, \ const dimensioned
& dvs \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const GeometricField& gf1, \ const dimensioned& dvs \ ); \ \ template \ < \ class Form, \ class Cmpt, \ direction nCmpt, \ class Type, template class PatchField, \ class GeoMesh \ > \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const GeometricField& gf1, \ const VectorSpace& vs \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const tmp>& tgf1, \ const dimensioned& dvs \ ); \ \ template \ < \ class Form, \ class Cmpt, \ direction nCmpt, \ class Type, template class PatchField, \ class GeoMesh \ > \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const tmp>& tgf1, \ const VectorSpace& vs \ ); \ \ template \ class PatchField, class GeoMesh> \ void opFunc \ ( \ GeometricField \ ::type, PatchField, GeoMesh>& gf, \ const dimensioned& dvs, \ const GeometricField& gf1 \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const dimensioned& dvs, \ const GeometricField& gf1 \ ); \ \ template \ < \ class Form, \ class Cmpt, \ direction nCmpt, \ class Type, template class PatchField, \ class GeoMesh \ > \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const VectorSpace& vs, \ const GeometricField& gf1 \ ); \ \ template \ class PatchField, class GeoMesh> \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const dimensioned& dvs, \ const tmp>& tgf1 \ ); \ \ template \ < \ class Form, \ class Cmpt, \ direction nCmpt, \ class Type, template class PatchField, \ class GeoMesh \ > \ tmp \ < \ GeometricField \ ::type, PatchField, GeoMesh> \ > \ operator op \ ( \ const VectorSpace& vs, \ const tmp>& tgf1 \ ); 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" // ************************************************************************* //