diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C index cc0240be0b..0edc4f1273 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C @@ -614,9 +614,12 @@ Foam::sqr(const dimensioned& dt) } template -Foam::dimensioned Foam::magSqr(const dimensioned& dt) +Foam::dimensioned::type> +Foam::magSqr(const dimensioned& dt) { - return dimensioned + typedef typename typeOfMag::type magType; + + return dimensioned ( "magSqr(" + dt.name() + ')', magSqr(dt.dimensions()), @@ -625,9 +628,12 @@ Foam::dimensioned Foam::magSqr(const dimensioned& dt) } template -Foam::dimensioned Foam::mag(const dimensioned& dt) +Foam::dimensioned::type> +Foam::mag(const dimensioned& dt) { - return dimensioned + typedef typename typeOfMag::type magType; + + return dimensioned ( "mag(" + dt.name() + ')', dt.dimensions(), diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H index 2e768cbda5..b7bd77bccb 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H @@ -437,10 +437,12 @@ dimensioned::type> sqr(const dimensioned&); template -dimensioned magSqr(const dimensioned&); +dimensioned::type> +magSqr(const dimensioned& dt); template -dimensioned mag(const dimensioned&); +dimensioned::type> +mag(const dimensioned& dt); template dimensioned cmptMultiply diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C index 2573a39afb..ae637a7417 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C @@ -141,13 +141,13 @@ sqr(const tmp>& tdf) template -tmp> magSqr -( - const DimensionedField& df -) +tmp::type, GeoMesh>> +magSqr(const DimensionedField& df) { + typedef typename typeOfMag::type magType; + auto tres = - tmp>::New + tmp>::New ( IOobject ( @@ -165,15 +165,15 @@ tmp> magSqr } template -tmp> magSqr -( - const tmp>& tdf -) +tmp::type, GeoMesh>> +magSqr(const tmp>& tdf) { + typedef typename typeOfMag::type magType; + const DimensionedField& df = tdf(); auto tres = - reuseTmpDimensionedField::New + reuseTmpDimensionedField::New ( tdf, "magSqr(" + df.name() + ')', @@ -188,13 +188,13 @@ tmp> magSqr template -tmp> mag -( - const DimensionedField& df -) +tmp::type, GeoMesh>> +mag(const DimensionedField& df) { + typedef typename typeOfMag::type magType; + auto tres = - tmp>::New + tmp>::New ( IOobject ( @@ -212,15 +212,15 @@ tmp> mag } template -tmp> mag -( - const tmp>& tdf -) +tmp::type, GeoMesh>> +mag(const tmp>& tdf) { + typedef typename typeOfMag::type magType; + const DimensionedField& df = tdf(); auto tres = - reuseTmpDimensionedField::New + reuseTmpDimensionedField::New ( tdf, "mag(" + df.name() + ')', @@ -325,11 +325,10 @@ UNARY_REDUCTION_FUNCTION(Type, max, gMax) UNARY_REDUCTION_FUNCTION(Type, min, gMin) UNARY_REDUCTION_FUNCTION(Type, sum, gSum) UNARY_REDUCTION_FUNCTION(Type, average, gAverage) - UNARY_REDUCTION_FUNCTION(MinMax, minMax, gMinMax) UNARY_REDUCTION_FUNCTION(scalarMinMax, minMaxMag, gMinMaxMag) -UNARY_REDUCTION_FUNCTION(scalar, sumMag, gSumMag) +UNARY_REDUCTION_FUNCTION(typename typeOfMag::type, sumMag, gSumMag) #undef UNARY_REDUCTION_FUNCTION diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H index 198aa981eb..1b055d94bb 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H @@ -62,34 +62,29 @@ tmp::type, GeoMesh>> sqr(const tmp>& tdf); template -tmp> magSqr -( - const DimensionedField& df -); +tmp::type, GeoMesh>> +magSqr(const DimensionedField& df); template -tmp> magSqr -( - const tmp>& tdf -); +tmp::type, GeoMesh>> +magSqr(const tmp>& tdf); template -tmp> mag -( - const DimensionedField& df -); +tmp::type, GeoMesh>> +mag(const DimensionedField& df); template -tmp> mag -( - const tmp>& tdf -); +tmp::type, GeoMesh>> +mag(const tmp>& tdf); template tmp < DimensionedField - ::cmptType, GeoMesh> + < + typename DimensionedField::cmptType, + GeoMesh + > > cmptAv(const DimensionedField& df); @@ -97,7 +92,10 @@ template tmp < DimensionedField - ::cmptType, GeoMesh> + < + typename DimensionedField::cmptType, + GeoMesh + > > cmptAv(const tmp>& tdf); @@ -123,7 +121,7 @@ UNARY_REDUCTION_FUNCTION(Type, average, gAverage) UNARY_REDUCTION_FUNCTION(MinMax, minMax, gMinMax) UNARY_REDUCTION_FUNCTION(scalarMinMax, minMaxMag, gMinMaxMag) -UNARY_REDUCTION_FUNCTION(scalar, sumMag, gSumMag) +UNARY_REDUCTION_FUNCTION(typename typeOfMag::type, sumMag, gSumMag) #undef UNARY_REDUCTION_FUNCTION diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C index 159c223198..2a5abbb551 100644 --- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C +++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C @@ -158,7 +158,11 @@ sqr(const tmp>& tf) template class Field, class Type> -void magSqr(FieldField& sf, const FieldField& f) +void magSqr +( + FieldField::type>& sf, + const FieldField& f +) { forAll(sf, i) { @@ -167,11 +171,14 @@ void magSqr(FieldField& sf, const FieldField& f) } template class Field, class Type> -tmp> magSqr(const FieldField& f) +tmp::type>> +magSqr(const FieldField& f) { + typedef typename typeOfMag::type magType; + auto tres ( - FieldField::NewCalculatedType(f) + FieldField::NewCalculatedType(f) ); magSqr(tres.ref(), f); @@ -179,11 +186,14 @@ tmp> magSqr(const FieldField& f) } template class Field, class Type> -tmp> magSqr(const tmp>& tf) +tmp::type>> +magSqr(const tmp>& tf) { + typedef typename typeOfMag::type magType; + auto tres ( - reuseTmpFieldField::New(tf) + reuseTmpFieldField::New(tf) ); magSqr(tres.ref(), tf()); @@ -193,7 +203,11 @@ tmp> magSqr(const tmp>& tf) template class Field, class Type> -void mag(FieldField& sf, const FieldField& f) +void mag +( + FieldField::type>& sf, + const FieldField& f +) { forAll(sf, i) { @@ -202,11 +216,14 @@ void mag(FieldField& sf, const FieldField& f) } template class Field, class Type> -tmp> mag(const FieldField& f) +tmp::type>> +mag(const FieldField& f) { + typedef typename typeOfMag::type magType; + auto tres ( - FieldField::NewCalculatedType(f) + FieldField::NewCalculatedType(f) ); mag(tres.ref(), f); @@ -214,11 +231,14 @@ tmp> mag(const FieldField& f) } template class Field, class Type> -tmp> mag(const tmp>& tf) +tmp::type>> +mag(const tmp>& tf) { + typedef typename typeOfMag::type magType; + auto tres ( - reuseTmpFieldField::New(tf) + reuseTmpFieldField::New(tf) ); mag(tres.ref(), tf()); @@ -480,19 +500,21 @@ Type sum(const FieldField& f) TMP_UNARY_FUNCTION(Type, sum) template class Field, class Type> -scalar sumMag(const FieldField& f) +typename typeOfMag::type sumMag(const FieldField& f) { - scalar SumMag = 0.0; + typedef typename typeOfMag::type magType; + + magType result = Zero; forAll(f, i) { - SumMag += sumMag(f[i]); + result += sumMag(f[i]); } - return SumMag; + return result; } -TMP_UNARY_FUNCTION(scalar, sumMag) +TMP_UNARY_FUNCTION(typename typeOfMag::type, sumMag) template class Field, class Type> Type average(const FieldField& f) @@ -555,25 +577,24 @@ TMP_UNARY_FUNCTION(scalarMinMax, minMaxMag) // With reduction on ReturnType -#define G_UNARY_FUNCTION(returnType, gFunc, func, rFunc) \ +#define G_UNARY_FUNCTION(ReturnType, gFunc, func, rFunc) \ \ template class Field, class Type> \ -returnType gFunc(const FieldField& f) \ +ReturnType gFunc(const FieldField& f) \ { \ - returnType res = func(f); \ - reduce(res, rFunc##Op()); \ + ReturnType res = func(f); \ + reduce(res, rFunc##Op()); \ return res; \ } \ -TMP_UNARY_FUNCTION(returnType, gFunc) +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) +G_UNARY_FUNCTION(typename typeOfMag::type, gSumMag, sumMag, sum) #undef G_UNARY_FUNCTION diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.H b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.H index 18be310352..9b1dd6b459 100644 --- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.H +++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.H @@ -90,23 +90,35 @@ sqr(const tmp>& tf); template class Field, class Type> -void magSqr(FieldField& sf, const FieldField& f); +void magSqr +( + FieldField::type>& sf, + const FieldField& f +); template class Field, class Type> -tmp> magSqr(const FieldField& f); +tmp::type>> +magSqr(const FieldField& f); template class Field, class Type> -tmp> magSqr(const tmp>& tf); +tmp::type>> +magSqr(const tmp>& tf); template class Field, class Type> -void mag(FieldField& sf, const FieldField& f); +void mag +( + FieldField::type>& res, + const FieldField& f +); template class Field, class Type> -tmp> mag(const FieldField& f); +tmp::type>> +mag(const FieldField& f); template class Field, class Type> -tmp> mag(const tmp>& tf); +tmp::type>> +mag(const tmp>& tf); template class Field, class Type> @@ -214,9 +226,9 @@ TMP_UNARY_FUNCTION(Type, sum) template class Field, class Type> -scalar sumMag(const FieldField& f); +typename typeOfMag::type sumMag(const FieldField& f); -TMP_UNARY_FUNCTION(scalar, sumMag) +TMP_UNARY_FUNCTION(typename typeOfMag::type, sumMag) template class Field, class Type> @@ -239,20 +251,19 @@ TMP_UNARY_FUNCTION(scalarMinMax, minMaxMag) // With reduction on ReturnType -#define G_UNARY_FUNCTION(returnType, gFunc, func, rFunc) \ +#define G_UNARY_FUNCTION(ReturnType, gFunc, func, rFunc) \ \ template class Field, class Type> \ -returnType gFunc(const FieldField& f); \ -TMP_UNARY_FUNCTION(returnType, gFunc) +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) +G_UNARY_FUNCTION(typename typeOfMag::type, gSumMag, sumMag, sum) #undef G_UNARY_FUNCTION diff --git a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C index 9404946e07..b6a4986407 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C +++ b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.C @@ -146,23 +146,35 @@ sqr(const tmp>& tf) template -void magSqr(Field& res, const UList& f) +void magSqr +( + Field::type>& res, + const UList& f +) { - TFOR_ALL_F_OP_FUNC_F(scalar, res, =, magSqr, Type, f) + typedef typename typeOfMag::type magType; + + TFOR_ALL_F_OP_FUNC_F(magType, res, =, magSqr, Type, f) } template -tmp> magSqr(const UList& f) +tmp::type>> +magSqr(const UList& f) { - auto tres = tmp>::New(f.size()); + typedef typename typeOfMag::type magType; + + auto tres = tmp>::New(f.size()); magSqr(tres.ref(), f); return tres; } template -tmp> magSqr(const tmp>& tf) +tmp::type>> +magSqr(const tmp>& tf) { - auto tres = reuseTmp::New(tf); + typedef typename typeOfMag::type magType; + + auto tres = reuseTmp::New(tf); magSqr(tres.ref(), tf()); tf.clear(); return tres; @@ -170,23 +182,35 @@ tmp> magSqr(const tmp>& tf) template -void mag(Field& res, const UList& f) +void mag +( + Field::type>& res, + const UList& f +) { - TFOR_ALL_F_OP_FUNC_F(scalar, res, =, mag, Type, f) + typedef typename typeOfMag::type magType; + + TFOR_ALL_F_OP_FUNC_F(magType, res, =, mag, Type, f) } template -tmp> mag(const UList& f) +tmp::type>> +mag(const UList& f) { - auto tres = tmp>::New(f.size()); + typedef typename typeOfMag::type magType; + + auto tres = tmp>::New(f.size()); mag(tres.ref(), f); return tres; } template -tmp> mag(const tmp>& tf) +tmp::type>> +mag(const tmp>& tf) { - auto tres = reuseTmp::New(tf); + typedef typename typeOfMag::type magType; + + auto tres = reuseTmp::New(tf); mag(tres.ref(), tf()); tf.clear(); return tres; @@ -341,14 +365,14 @@ TMP_UNARY_FUNCTION(Type, min) template Type sum(const UList& f) { + Type Sum = Zero; + if (f.size()) { - Type Sum = Zero; TFOR_ALL_S_OP_F(Type, Sum, +=, Type, f) - return Sum; } - return Zero; + return Sum; } TMP_UNARY_FUNCTION(Type, sum) @@ -413,15 +437,15 @@ Type minMagSqr(const UList& f) TMP_UNARY_FUNCTION(Type, minMagSqr) template -typename pTraits::cmptType +typename scalarProduct::type sumProd(const UList& f1, const UList& f2) { - typedef typename pTraits::cmptType outType; + typedef typename scalarProduct::type prodType; - outType result = Zero; + prodType result = Zero; if (f1.size() && (f1.size() == f2.size())) { - TFOR_ALL_S_OP_F_OP_F(outType, result, +=, Type, f1, &&, Type, f2) + TFOR_ALL_S_OP_F_OP_F(prodType, result, +=, Type, f1, &&, Type, f2) } return result; } @@ -450,41 +474,54 @@ Type sumCmptProd(const UList& f1, const UList& f2) template -scalar sumSqr(const UList& f) +typename outerProduct1::type +sumSqr(const UList& f) { - scalar SumSqr = 0; + typedef typename outerProduct1::type prodType; + prodType result = Zero; if (f.size()) { - TFOR_ALL_S_OP_FUNC_F(scalar, SumSqr, +=, sqr, Type, f) + TFOR_ALL_S_OP_FUNC_F(prodType, result, +=, sqr, Type, f) } - return SumSqr; + return result; } -TMP_UNARY_FUNCTION(scalar, sumSqr) - template -scalar sumMag(const UList& f) +typename outerProduct1::type +sumSqr(const tmp>& tf) { - scalar SumMag = 0; - if (f.size()) - { - TFOR_ALL_S_OP_FUNC_F(scalar, SumMag, +=, mag, Type, f) - } - return SumMag; + typedef typename outerProduct1::type prodType; + prodType result = sumSqr(tf()); + tf.clear(); + return result; } -TMP_UNARY_FUNCTION(scalar, sumMag) + +template +typename typeOfMag::type +sumMag(const UList& f) +{ + typedef typename typeOfMag::type magType; + magType result = Zero; + if (f.size()) + { + TFOR_ALL_S_OP_FUNC_F(magType, result, +=, mag, Type, f) + } + return result; +} + +TMP_UNARY_FUNCTION(typename typeOfMag::type, sumMag) template Type sumCmptMag(const UList& f) { - Type SumMag = Zero; + Type result = Zero; if (f.size()) { - TFOR_ALL_S_OP_FUNC_F(scalar, SumMag, +=, cmptMag, Type, f) + TFOR_ALL_S_OP_FUNC_F(Type, result, +=, cmptMag, Type, f) } - return SumMag; + return result; } TMP_UNARY_FUNCTION(Type, sumCmptMag) @@ -530,24 +567,24 @@ G_UNARY_FUNCTION(Type, gSumCmptMag, sumCmptMag, sum) G_UNARY_FUNCTION(MinMax, gMinMax, minMax, sum) G_UNARY_FUNCTION(scalarMinMax, gMinMaxMag, minMaxMag, sum) -G_UNARY_FUNCTION(scalar, gSumSqr, sumSqr, sum) -G_UNARY_FUNCTION(scalar, gSumMag, sumMag, sum) +G_UNARY_FUNCTION(typename outerProduct1::type, gSumSqr, sumSqr, sum) +G_UNARY_FUNCTION(typename typeOfMag::type, gSumMag, sumMag, sum) #undef G_UNARY_FUNCTION template -typename pTraits::cmptType gSumProd +typename scalarProduct::type gSumProd ( const UList& f1, const UList& f2, const label comm ) { - typedef typename pTraits::cmptType outType; + typedef typename scalarProduct::type prodType; - outType result = sumProd(f1, f2); - reduce(result, sumOp(), Pstream::msgType(), comm); + prodType result = sumProd(f1, f2); + reduce(result, sumOp(), Pstream::msgType(), comm); return result; } diff --git a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.H b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.H index c64aa4798a..e80d01df2b 100644 --- a/src/OpenFOAM/fields/Fields/Field/FieldFunctions.H +++ b/src/OpenFOAM/fields/Fields/Field/FieldFunctions.H @@ -94,23 +94,35 @@ sqr(const tmp>& tf); template -void magSqr(Field& res, const UList& f); +void magSqr +( + Field::type>& res, + const UList& f +); template -tmp> magSqr(const UList& f); +tmp::type>> +magSqr(const UList& f); template -tmp> magSqr(const tmp>& tf); +tmp::type>> +magSqr(const tmp>& tf); template -void mag(Field& res, const UList& f); +void mag +( + Field::type>& res, + const UList& f +); template -tmp> mag(const UList& f); +tmp::type>> +mag(const UList& f); template -tmp> mag(const tmp>& tf); +tmp::type>> +mag(const tmp>& tf); template @@ -197,7 +209,8 @@ TMP_UNARY_FUNCTION(Type, minMagSqr) template -typename pTraits::cmptType sumProd +typename scalarProduct::type +sumProd ( const UList& f1, const UList& f2 @@ -207,14 +220,15 @@ template Type sumCmptProd(const UList& f1, const UList& f2); template -scalar sumSqr(const UList& f); - -TMP_UNARY_FUNCTION(scalar, sumSqr) +typename outerProduct1::type sumSqr(const UList& f); template -scalar sumMag(const UList& f); +typename outerProduct1::type sumSqr(const tmp>& tf); -TMP_UNARY_FUNCTION(scalar, sumMag) +template +typename typeOfMag::type sumMag(const UList& f); + +TMP_UNARY_FUNCTION(typename typeOfMag::type, sumMag) template Type sumCmptMag(const UList& f); @@ -244,13 +258,14 @@ G_UNARY_FUNCTION(Type, gSumCmptMag, sumCmptMag, sum) G_UNARY_FUNCTION(MinMax, gMinMax, minMax, sum) G_UNARY_FUNCTION(scalarMinMax, gMinMaxMag, minMaxMag, sum) -G_UNARY_FUNCTION(scalar, gSumSqr, sumSqr, sum) -G_UNARY_FUNCTION(scalar, gSumMag, sumMag, sum) +G_UNARY_FUNCTION(typename outerProduct1::type, gSumSqr, sumSqr, sum) +G_UNARY_FUNCTION(typename typeOfMag::type, gSumMag, sumMag, sum) #undef G_UNARY_FUNCTION + template -typename pTraits::cmptType gSumProd +typename scalarProduct::type gSumProd ( const UList& f1, const UList& f2, diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C index 6c2a4d3b0c..b750be483d 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C @@ -257,7 +257,7 @@ sqr(const tmp>& tgf) template class PatchField, class GeoMesh> void magSqr ( - GeometricField& gsf, + GeometricField::type, PatchField, GeoMesh>& gsf, const GeometricField& gf ) { @@ -268,13 +268,16 @@ void magSqr template class PatchField, class GeoMesh> -tmp> magSqr +tmp::type, PatchField, GeoMesh>> +magSqr ( const GeometricField& gf ) { + typedef typename typeOfMag::type magType; + auto tres = - tmp>::New + tmp>::New ( IOobject ( @@ -294,30 +297,13 @@ tmp> magSqr } template class PatchField, class GeoMesh> -tmp> magSqr +tmp::type, PatchField, GeoMesh>> +magSqr ( const tmp>& tgf ) { - const GeometricField& gf = tgf(); - - auto tres = - tmp>::New - ( - IOobject - ( - "magSqr(" + gf.name() + ')', - gf.instance(), - gf.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - gf.mesh(), - sqr(gf.dimensions()) - ); - - magSqr(tres.ref(), gf); - + auto tres = magSqr(tgf.cref()); tgf.clear(); return tres; @@ -327,7 +313,7 @@ tmp> magSqr template class PatchField, class GeoMesh> void mag ( - GeometricField& gsf, + GeometricField::type, PatchField, GeoMesh>& gsf, const GeometricField& gf ) { @@ -338,13 +324,16 @@ void mag template class PatchField, class GeoMesh> -tmp> mag +tmp::type, PatchField, GeoMesh>> +mag ( const GeometricField& gf ) { + typedef typename typeOfMag::type magType; + auto tres = - tmp>::New + tmp>::New ( IOobject ( @@ -364,30 +353,13 @@ tmp> mag } template class PatchField, class GeoMesh> -tmp> mag +tmp::type, PatchField, GeoMesh>> +mag ( const tmp>& tgf ) { - const GeometricField& gf = tgf(); - - auto tres = - tmp>::New - ( - IOobject - ( - "mag(" + gf.name() + ')', - gf.instance(), - gf.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - gf.mesh(), - gf.dimensions() - ); - - mag(tres.ref(), gf); - + auto tres = mag(tgf.cref()); tgf.clear(); return tres; @@ -559,7 +531,7 @@ dimensioned func \ UNARY_REDUCTION_FUNCTION(Type, sum, gSum) UNARY_REDUCTION_FUNCTION(Type, average, gAverage) -UNARY_REDUCTION_FUNCTION(scalar, sumMag, gSumMag) +UNARY_REDUCTION_FUNCTION(typename typeOfMag::type, sumMag, gSumMag) #undef UNARY_REDUCTION_FUNCTION diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H index 142ffbee1f..e617526c6d 100644 --- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H +++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H @@ -142,18 +142,20 @@ sqr(const tmp>& tgf); template class PatchField, class GeoMesh> void magSqr ( - GeometricField& gsf, + GeometricField::type, PatchField, GeoMesh>& gsf, const GeometricField& gf ); template class PatchField, class GeoMesh> -tmp> magSqr +tmp::type, PatchField, GeoMesh>> +magSqr ( const GeometricField& gf ); template class PatchField, class GeoMesh> -tmp> magSqr +tmp::type, PatchField, GeoMesh>> +magSqr ( const tmp>& tgf ); @@ -161,18 +163,20 @@ tmp> magSqr template class PatchField, class GeoMesh> void mag ( - GeometricField& gsf, + GeometricField::type, PatchField, GeoMesh>& gsf, const GeometricField& gf ); template class PatchField, class GeoMesh> -tmp> mag +tmp::type, PatchField, GeoMesh>> +mag ( const GeometricField& gf ); template class PatchField, class GeoMesh> -tmp> mag +tmp::type, PatchField, GeoMesh>> +mag ( const tmp>& tgf ); @@ -252,7 +256,7 @@ dimensioned func \ UNARY_REDUCTION_FUNCTION(Type, sum, gSum) UNARY_REDUCTION_FUNCTION(Type, average, gAverage) -UNARY_REDUCTION_FUNCTION(scalar, sumMag, gSumMag) +UNARY_REDUCTION_FUNCTION(typename typeOfMag::type, sumMag, gSumMag) #undef UNARY_REDUCTION_FUNCTION diff --git a/src/OpenFOAM/primitives/VectorSpace/products.H b/src/OpenFOAM/primitives/VectorSpace/products.H index 36a0ce0c3f..8e7de12508 100644 --- a/src/OpenFOAM/primitives/VectorSpace/products.H +++ b/src/OpenFOAM/primitives/VectorSpace/products.H @@ -103,6 +103,16 @@ public: }; +//- Outer-product of identical types +template +class outerProduct1 +: + public outerProduct +{ +public: +}; + + template class crossProduct {