diff --git a/src/OpenFOAM/primitives/Tensor/TensorI.H b/src/OpenFOAM/primitives/Tensor/TensorI.H index cb9fea259a6a07f589eff2b03cc7e482fd996145..1ee26efa021324f1044bc69ee774d94ddde56d32 100644 --- a/src/OpenFOAM/primitives/Tensor/TensorI.H +++ b/src/OpenFOAM/primitives/Tensor/TensorI.H @@ -514,6 +514,10 @@ inline Foam::Tensor<Cmpt> Foam::Tensor<Cmpt>::T() const template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Foam::Tensor<Cmpt> Foam::Tensor<Cmpt>::inner(const Tensor<Cmpt>& t2) const { @@ -537,6 +541,10 @@ Foam::Tensor<Cmpt>::inner(const Tensor<Cmpt>& t2) const template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Foam::Tensor<Cmpt> Foam::Tensor<Cmpt>::schur(const Tensor<Cmpt>& t2) const { @@ -645,7 +653,7 @@ template<class Cmpt> // Workaround for gcc (11+) that fails to handle tensor dot vector __attribute__((optimize("no-tree-vectorize"))) #endif -inline typename innerProduct<Tensor<Cmpt>, Vector<Cmpt>>::type +inline Vector<Cmpt> operator&(const Tensor<Cmpt>& t, const Vector<Cmpt>& v) { return Vector<Cmpt> @@ -658,7 +666,11 @@ operator&(const Tensor<Cmpt>& t, const Vector<Cmpt>& v) template<class Cmpt> -inline typename innerProduct<Vector<Cmpt>, Tensor<Cmpt>>::type +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif +inline Vector<Cmpt> operator&(const Vector<Cmpt>& v, const Tensor<Cmpt>& t) { return Vector<Cmpt> @@ -926,6 +938,10 @@ operator-(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2) //- Inner-product between a spherical tensor and a tensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const SphericalTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) { @@ -940,6 +956,10 @@ operator&(const SphericalTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) //- Inner-product between a tensor and a spherical tensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2) { @@ -1062,6 +1082,10 @@ operator-(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2) //- Inner-product between a symmetric tensor and a tensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) { @@ -1084,6 +1108,10 @@ operator&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) //- Inner-product between a tensor and a symmetric tensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2) {