mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: enforce snGradTransformDiag() as zero for rotational-invariant
- the snGradTransformDiag() is used in this type of code:
```
if constexpr (!is_rotational_vectorspace_v<Type>)
{
// Rotational-invariant type
return tmp<Field<Type>>::New(this->size(), pTraits<Type>::one);
}
else
{
return pTraits<Type>::one - snGradTransformDiag();
}
```
This implies that a rotational-invariant form should return 0
and not 1 like the pow(..., 0) does.
This is a backstop for any code that may inadvertently hit it,
but also allows the possibility of having integer indicator fields
without upsetting the compiler.
STYLE: doTransform() logic now uses is_rotational_vectorspace
This commit is contained in:
committed by
Mattijs Janssens
parent
4cc8423c94
commit
202b448b8f
@ -117,7 +117,7 @@ public:
|
||||
|
||||
// Member functions
|
||||
|
||||
//- Constraint handling
|
||||
// Constraint handling
|
||||
|
||||
//- Return the constraint type this pointPatchField implements
|
||||
virtual const word& constraintType() const
|
||||
@ -125,12 +125,17 @@ public:
|
||||
return cyclicPointPatch::typeName;
|
||||
}
|
||||
|
||||
//- Cyclic coupled interface functions
|
||||
|
||||
// Cyclic coupled interface functions
|
||||
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !cyclicPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !cyclicPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -125,7 +125,7 @@ public:
|
||||
//- Return true if running parallel
|
||||
virtual bool coupled() const
|
||||
{
|
||||
return Pstream::parRun();
|
||||
return UPstream::parRun();
|
||||
}
|
||||
|
||||
//- Does the patch field perform the transformation
|
||||
@ -133,7 +133,7 @@ public:
|
||||
{
|
||||
return
|
||||
(
|
||||
pTraits<Type>::rank
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !procPatch_.procPolyPatch().parallel()
|
||||
);
|
||||
}
|
||||
|
||||
@ -133,7 +133,7 @@ public:
|
||||
//- Return true if running parallel
|
||||
virtual bool coupled() const
|
||||
{
|
||||
return Pstream::parRun();
|
||||
return UPstream::parRun();
|
||||
}
|
||||
|
||||
//- Does the patch field perform the transformation
|
||||
@ -141,7 +141,7 @@ public:
|
||||
{
|
||||
return
|
||||
(
|
||||
pTraits<Type>::rank
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !procPatch_.procPolyPatch().parallel()
|
||||
);
|
||||
}
|
||||
|
||||
@ -140,11 +140,22 @@ void Foam::basicSymmetryFaPatchField<Type>::evaluate(const Pstream::commsTypes)
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::basicSymmetryFaPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
// FatalErrorInFunction
|
||||
// << "Should not be called for this type"
|
||||
// << ::Foam::abort(FatalError);
|
||||
return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp<vectorField> diag(cmptMag(this->patch().edgeNormals()));
|
||||
|
||||
return transformFieldMask<Type>(pow<vector, pTraits<Type>::rank>(diag));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -231,6 +231,9 @@ public:
|
||||
const Pstream::commsTypes commsType
|
||||
) const = 0;
|
||||
|
||||
|
||||
// Other
|
||||
|
||||
//- Write
|
||||
virtual void write(Ostream&) const;
|
||||
};
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2016-2017 Wikki Ltd
|
||||
Copyright (C) 2025 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -86,9 +87,9 @@ Foam::transformFaPatchField<Type>::valueInternalCoeffs
|
||||
const tmp<scalarField>&
|
||||
) const
|
||||
{
|
||||
// OR (!is_rotational_vectorspace_v<Type>)
|
||||
if constexpr (std::is_arithmetic_v<Type>)
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
return tmp<Field<Type>>::New(this->size(), pTraits<Type>::one);
|
||||
}
|
||||
else
|
||||
@ -119,9 +120,9 @@ template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::transformFaPatchField<Type>::gradientInternalCoeffs() const
|
||||
{
|
||||
// OR (!is_rotational_vectorspace_v<Type>)
|
||||
if constexpr (std::is_arithmetic_v<Type>)
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
}
|
||||
else
|
||||
|
||||
@ -183,7 +183,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !cyclicPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !cyclicPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -287,7 +287,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !procPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !procPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2016-2017 Wikki Ltd
|
||||
Copyright (C) 2025 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -154,10 +155,20 @@ void Foam::wedgeFaPatchField<Type>::evaluate(const Pstream::commsTypes)
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::wedgeFaPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
// FatalErrorInFunction
|
||||
// << "Should not be called for this type"
|
||||
// << ::Foam::abort(FatalError);
|
||||
return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto& rot = refCast<const wedgeFaPatch>(this->patch()).faceT();
|
||||
|
||||
const vector diagV = 0.5*(I - rot).diag();
|
||||
const vector diag = 0.5*(I - rot).diag();
|
||||
|
||||
return tmp<Field<Type>>::New
|
||||
(
|
||||
@ -166,7 +177,7 @@ Foam::wedgeFaPatchField<Type>::snGradTransformDiag() const
|
||||
(
|
||||
pow
|
||||
(
|
||||
diagV,
|
||||
diag,
|
||||
pTraits
|
||||
<
|
||||
typename powProduct<vector, pTraits<Type>::rank>::type
|
||||
@ -175,6 +186,7 @@ Foam::wedgeFaPatchField<Type>::snGradTransformDiag() const
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -114,9 +114,7 @@ public:
|
||||
}
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
// Evaluation functions
|
||||
// Member Functions
|
||||
|
||||
//- Return gradient at boundary
|
||||
virtual tmp<Field<Type>> snGrad() const;
|
||||
@ -127,7 +125,6 @@ public:
|
||||
const Pstream::commsTypes commsType=Pstream::commsTypes::buffered
|
||||
);
|
||||
|
||||
|
||||
//- Return face-gradient transform diagonal
|
||||
virtual tmp<Field<Type>> snGradTransformDiag() const;
|
||||
};
|
||||
|
||||
@ -140,11 +140,22 @@ void Foam::basicSymmetryFvPatchField<Type>::evaluate(const Pstream::commsTypes)
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::basicSymmetryFvPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
// FatalErrorInFunction
|
||||
// << "Should not be called for this type"
|
||||
// << ::Foam::abort(FatalError);
|
||||
return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp<vectorField> diag(cmptMag(this->patch().nf()));
|
||||
|
||||
return transformFieldMask<Type>(pow<vector, pTraits<Type>::rank>(diag));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -178,27 +178,35 @@ void Foam::directionMixedFvPatchField<Type>::evaluate(const Pstream::commsTypes)
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::directionMixedFvPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
// static_assert(!std::is_arithmetic_v<T>, "direction-mixed with scalar??");
|
||||
// if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
// {
|
||||
// // Rotational-invariant type
|
||||
// return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
// }
|
||||
|
||||
{
|
||||
vectorField diag(valueFraction_.size());
|
||||
|
||||
diag.replace
|
||||
std::transform
|
||||
(
|
||||
vector::X,
|
||||
sqrt(mag(valueFraction_.component(symmTensor::XX)))
|
||||
valueFraction_.cbegin(),
|
||||
valueFraction_.cend(),
|
||||
diag.begin(),
|
||||
|
||||
[](const symmTensor& t)
|
||||
{
|
||||
return vector
|
||||
(
|
||||
sqrt(mag(t.xx())), sqrt(mag(t.yy())), sqrt(mag(t.zz()))
|
||||
);
|
||||
diag.replace
|
||||
(
|
||||
vector::Y,
|
||||
sqrt(mag(valueFraction_.component(symmTensor::YY)))
|
||||
);
|
||||
diag.replace
|
||||
(
|
||||
vector::Z,
|
||||
sqrt(mag(valueFraction_.component(symmTensor::ZZ)))
|
||||
}
|
||||
);
|
||||
|
||||
return transformFieldMask<Type>(pow<vector, pTraits<Type>::rank>(diag));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||
Copyright (C) 2025 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -97,9 +98,9 @@ Foam::transformFvPatchField<Type>::valueInternalCoeffs
|
||||
const tmp<scalarField>&
|
||||
) const
|
||||
{
|
||||
// OR (!is_rotational_vectorspace_v<Type>)
|
||||
if constexpr (std::is_arithmetic_v<Type>)
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
return tmp<Field<Type>>::New(this->size(), pTraits<Type>::one);
|
||||
}
|
||||
else
|
||||
@ -130,9 +131,9 @@ template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::transformFvPatchField<Type>::gradientInternalCoeffs() const
|
||||
{
|
||||
// OR (!is_rotational_vectorspace_v<Type>)
|
||||
if constexpr (std::is_arithmetic_v<Type>)
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
}
|
||||
else
|
||||
|
||||
@ -209,7 +209,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !cyclicPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !cyclicPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -333,7 +333,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !cyclicACMIPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !cyclicACMIPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -339,7 +339,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !cyclicAMIPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !cyclicAMIPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -298,7 +298,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !procPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !procPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -151,12 +151,14 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Access
|
||||
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !procPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !procPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -171,6 +171,16 @@ void Foam::symmetryPlaneFvPatchField<Type>::evaluate(const Pstream::commsTypes)
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::symmetryPlaneFvPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
// FatalErrorInFunction
|
||||
// << "Should not be called for this type"
|
||||
// << ::Foam::abort(FatalError);
|
||||
return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
}
|
||||
else
|
||||
{
|
||||
const vector diag(cmptMag(symmetryPlanePatch_.n()));
|
||||
|
||||
@ -191,6 +201,7 @@ Foam::symmetryPlaneFvPatchField<Type>::snGradTransformDiag() const
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -169,10 +169,20 @@ void Foam::wedgeFvPatchField<Type>::evaluate(const Pstream::commsTypes)
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::wedgeFvPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
// FatalErrorInFunction
|
||||
// << "Should not be called for this type"
|
||||
// << ::Foam::abort(FatalError);
|
||||
return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto& rot = refCast<const wedgeFvPatch>(this->patch()).cellT();
|
||||
|
||||
const vector diagV = 0.5*(I - rot).diag();
|
||||
const vector diag = 0.5*(I - rot).diag();
|
||||
|
||||
return tmp<Field<Type>>::New
|
||||
(
|
||||
@ -181,7 +191,7 @@ Foam::wedgeFvPatchField<Type>::snGradTransformDiag() const
|
||||
(
|
||||
pow
|
||||
(
|
||||
diagV,
|
||||
diag,
|
||||
pTraits
|
||||
<
|
||||
typename powProduct<vector, pTraits<Type>::rank>::type
|
||||
@ -190,6 +200,7 @@ Foam::wedgeFvPatchField<Type>::snGradTransformDiag() const
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -135,6 +135,12 @@ template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::fixedNormalSlipFvPatchField<Type>::snGrad() const
|
||||
{
|
||||
static_assert
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>,
|
||||
"normal-slip with vector, tensor only!"
|
||||
);
|
||||
|
||||
const vectorField nHat(this->patch().nf());
|
||||
const Field<Type> pif(this->patchInternalField());
|
||||
|
||||
@ -171,11 +177,24 @@ void Foam::fixedNormalSlipFvPatchField<Type>::evaluate
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::fixedNormalSlipFvPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
static_assert
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>,
|
||||
"normal-slip with vector, tensor only!"
|
||||
);
|
||||
// if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
// {
|
||||
// // Rotational-invariant type
|
||||
// return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
// }
|
||||
|
||||
{
|
||||
tmp<vectorField> diag(cmptMag(this->patch().nf()));
|
||||
|
||||
return transformFieldMask<Type>(pow<vector, pTraits<Type>::rank>(diag));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||
Copyright (C) 2017-2021 OpenCFD Ltd.
|
||||
Copyright (C) 2017-2025 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -142,17 +142,24 @@ template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::partialSlipFvPatchField<Type>::snGrad() const
|
||||
{
|
||||
tmp<vectorField> nHat = this->patch().nf();
|
||||
const Field<Type> pif(this->patchInternalField());
|
||||
|
||||
tmp<Field<Type>> rotated;
|
||||
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
rotated.cref(pif);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp<vectorField> nHat(this->patch().nf());
|
||||
rotated = transform(I - sqr(nHat), pif);
|
||||
}
|
||||
|
||||
return
|
||||
(
|
||||
lerp
|
||||
(
|
||||
transform(I - sqr(nHat), pif),
|
||||
refValue_,
|
||||
valueFraction_
|
||||
) - pif
|
||||
lerp(rotated, refValue_, valueFraction_) - pif
|
||||
)*this->patch().deltaCoeffs();
|
||||
}
|
||||
|
||||
@ -168,16 +175,23 @@ void Foam::partialSlipFvPatchField<Type>::evaluate
|
||||
this->updateCoeffs();
|
||||
}
|
||||
|
||||
tmp<vectorField> nHat = this->patch().nf();
|
||||
tmp<Field<Type>> rotated;
|
||||
|
||||
if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
{
|
||||
// Rotational-invariant type
|
||||
rotated = this->patchInternalField();
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp<vectorField> nHat(this->patch().nf());
|
||||
rotated = transform(I - sqr(nHat), this->patchInternalField());
|
||||
}
|
||||
|
||||
|
||||
Field<Type>::operator=
|
||||
(
|
||||
lerp
|
||||
(
|
||||
transform(I - sqr(nHat), this->patchInternalField()),
|
||||
refValue_,
|
||||
valueFraction_
|
||||
)
|
||||
lerp(rotated, refValue_, valueFraction_)
|
||||
);
|
||||
|
||||
parent_bctype::evaluate();
|
||||
@ -187,13 +201,24 @@ void Foam::partialSlipFvPatchField<Type>::evaluate
|
||||
template<class Type>
|
||||
Foam::tmp<Foam::Field<Type>>
|
||||
Foam::partialSlipFvPatchField<Type>::snGradTransformDiag() const
|
||||
{
|
||||
// static_assert(!std::is_arithmetic_v<T>, "partial-slip with scalar??");
|
||||
// if constexpr (!is_rotational_vectorspace_v<Type>)
|
||||
// {
|
||||
// // Rotational-invariant type
|
||||
// return tmp<Field<Type>>::New(this->size(), Foam::zero{});
|
||||
// }
|
||||
|
||||
{
|
||||
tmp<vectorField> diag(cmptMag(this->patch().nf()));
|
||||
|
||||
return
|
||||
(
|
||||
valueFraction_*pTraits<Type>::one
|
||||
+ (1.0 - valueFraction_)
|
||||
*transformFieldMask<Type>(pow<vector, pTraits<Type>::rank>(diag));
|
||||
* transformFieldMask<Type>(pow<vector, pTraits<Type>::rank>(diag))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -177,7 +177,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !cyclicACMIPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !cyclicACMIPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
@ -161,7 +161,7 @@ public:
|
||||
}
|
||||
|
||||
|
||||
// Member functions
|
||||
// Member Functions
|
||||
|
||||
// Constraint handling
|
||||
|
||||
@ -177,7 +177,11 @@ public:
|
||||
//- Does the patch field perform the transformation
|
||||
virtual bool doTransform() const
|
||||
{
|
||||
return (pTraits<Type>::rank && !cyclicAMIPatch_.parallel());
|
||||
return
|
||||
(
|
||||
is_rotational_vectorspace_v<Type>
|
||||
&& !cyclicAMIPatch_.parallel()
|
||||
);
|
||||
}
|
||||
|
||||
//- Return face transformation tensor
|
||||
|
||||
Reference in New Issue
Block a user