Commit 979452c1 by Timo Koch

### [math] (Re-)implement cross product in 2d/3d

```This makes the old cross-product more efficient. The old version
initialized a FieldVector with zeros and then filled it. The
new version builds it's directly using consise bracket notation.
The result can be moved without creating a copy.

Implement a cross product in 2d that returns a scalar.
Not mathematically clean but still useful.

2d and 3d cross products now explicitly only work in 2d and 3d.
Other dimensions will trigger a compiler error.```
parent 9794849e
 ... ... @@ -473,32 +473,31 @@ Scalar antoine(Scalar temperature, } /*! * \brief cross product of two vectors in three-dimensional Euclidean space * \brief Cross product of two vectors in three-dimensional Euclidean space * * \param vec1 The first vector * \param vec2 The second vector */ template Dune::FieldVector crossProduct(const Dune::FieldVector &vec1, const Dune::FieldVector &vec2) template Dune::FieldVector crossProduct(const Dune::FieldVector &vec1, const Dune::FieldVector &vec2) { Dune::FieldVector result(0); if (dim == 3) { result[0] = vec1[1]*vec2[2]-vec1[2]*vec2[1]; result[1] = vec1[2]*vec2[0]-vec1[0]*vec2[2]; result[2] = vec1[0]*vec2[1]-vec1[1]*vec2[0]; } else { DUNE_THROW(Dune::NotImplemented, "Cross product is so far only supported for three dimensions!"); } return result; return {vec1[1]*vec2[2]-vec1[2]*vec2[1], vec1[2]*vec2[0]-vec1[0]*vec2[2], vec1[0]*vec2[1]-vec1[1]*vec2[0]}; } } /*! * \brief Cross product of two vectors in two-dimensional Euclidean space retuning scalar * * \param vec1 The first vector * \param vec2 The second vector */ template Scalar crossProduct(const Dune::FieldVector &vec1, const Dune::FieldVector &vec2) { return vec1[0]*vec2[1]-vec1[1]*vec2[0]; } } // end namespace Dumux #endif
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!