mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#914 Created stress tensor rotation method, including tests
This commit is contained in:
@@ -121,3 +121,118 @@ TEST(OffshoreSphericalCoords, OffshoreSphericalCoords)
|
||||
|
||||
}
|
||||
|
||||
#include "../cafTensor/cafTensor3.h"
|
||||
#include "cvfMath.h"
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST(TensorRotation, TensorRotation)
|
||||
{
|
||||
|
||||
{
|
||||
caf::Ten3f orgT(1.0f, 0.5f, 0.2f, 0, 0, 0);
|
||||
|
||||
cvf::Mat3f rotMx = cvf::Mat3f::fromRotation(cvf::Vec3f(1, 0, 0), cvf::PI_F);
|
||||
|
||||
caf::Ten3f rotT = orgT.rotate(rotMx);
|
||||
|
||||
EXPECT_NEAR(1.0f, rotT[caf::Ten3f::SXX], 1e-4);
|
||||
EXPECT_NEAR(0.5f, rotT[caf::Ten3f::SYY], 1e-4);
|
||||
EXPECT_NEAR(0.2f, rotT[caf::Ten3f::SZZ], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SXY], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SZX], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SYZ], 1e-4);
|
||||
}
|
||||
|
||||
{
|
||||
caf::Ten3f orgT(1.0f, 0.5f, 0.2f, 0, 0, 0);
|
||||
|
||||
cvf::Mat3f rotMx = cvf::Mat3f::fromRotation(cvf::Vec3f(1, 0, 0), 0.5*cvf::PI_F);
|
||||
|
||||
caf::Ten3f rotT = orgT.rotate(rotMx);
|
||||
|
||||
EXPECT_NEAR(1.0f, rotT[caf::Ten3f::SXX], 1e-4);
|
||||
EXPECT_NEAR(0.2f, rotT[caf::Ten3f::SYY], 1e-4);
|
||||
EXPECT_NEAR(0.5f, rotT[caf::Ten3f::SZZ], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SXY], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SZX], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SYZ], 1e-4);
|
||||
}
|
||||
|
||||
{
|
||||
caf::Ten3f orgT(1.0f, 0.5f, 0.2f, 0, 0, 0);
|
||||
|
||||
cvf::Mat3f rotMx = cvf::Mat3f::fromRotation(cvf::Vec3f(0, 0, 1), 0.5*cvf::PI_F);
|
||||
|
||||
caf::Ten3f rotT = orgT.rotate(rotMx);
|
||||
|
||||
EXPECT_NEAR(0.5f, rotT[caf::Ten3f::SXX], 1e-4);
|
||||
EXPECT_NEAR(1.0f, rotT[caf::Ten3f::SYY], 1e-4);
|
||||
EXPECT_NEAR(0.2f, rotT[caf::Ten3f::SZZ], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SXY], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SZX], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SYZ], 1e-4);
|
||||
}
|
||||
|
||||
{
|
||||
caf::Ten3f orgT(1.0f, 0.5f, 0.2f, 0, 0, 0);
|
||||
|
||||
cvf::Mat3f rotMx = cvf::Mat3f::fromRotation(cvf::Vec3f(0, 0, 1), 0.25*cvf::PI_F);
|
||||
|
||||
caf::Ten3f rotT = orgT.rotate(rotMx);
|
||||
|
||||
EXPECT_NEAR(0.75f,rotT[caf::Ten3f::SXX], 1e-4);
|
||||
EXPECT_NEAR(0.75f,rotT[caf::Ten3f::SYY], 1e-4);
|
||||
EXPECT_NEAR(0.2f, rotT[caf::Ten3f::SZZ], 1e-4);
|
||||
EXPECT_NEAR(0.25f,rotT[caf::Ten3f::SXY], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SZX], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SYZ], 1e-4);
|
||||
}
|
||||
|
||||
{
|
||||
caf::Ten3f orgT(0.75f, 0.75f, 0.2f, 0.25, 0, 0);
|
||||
|
||||
cvf::Mat3f rotMx = cvf::Mat3f::fromRotation(cvf::Vec3f(0, 0, 1), -0.25*cvf::PI_F);
|
||||
|
||||
caf::Ten3f rotT = orgT.rotate(rotMx);
|
||||
|
||||
EXPECT_NEAR(1.0f, rotT[caf::Ten3f::SXX], 1e-4);
|
||||
EXPECT_NEAR(0.5f, rotT[caf::Ten3f::SYY], 1e-4);
|
||||
EXPECT_NEAR(0.2f, rotT[caf::Ten3f::SZZ], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SXY], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SZX], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SYZ], 1e-4);
|
||||
}
|
||||
|
||||
{
|
||||
caf::Ten3f orgT(1.0f, 0.5f, 0.2f, 0, 0, 0);
|
||||
|
||||
cvf::Mat3f rotMx = cvf::Mat3f::fromRotation(cvf::Vec3f(1, 1, 1), 0.2*cvf::PI_F);
|
||||
|
||||
caf::Ten3f rotT = orgT.rotate(rotMx);
|
||||
|
||||
EXPECT_NEAR(0.8320561f, rotT[caf::Ten3f::SXX], 1e-4);
|
||||
EXPECT_NEAR(0.5584094f, rotT[caf::Ten3f::SYY], 1e-4);
|
||||
EXPECT_NEAR(0.3095343f, rotT[caf::Ten3f::SZZ], 1e-4);
|
||||
EXPECT_NEAR(0.2091861f, rotT[caf::Ten3f::SXY], 1e-4);
|
||||
EXPECT_NEAR(-0.2258091f, rotT[caf::Ten3f::SZX], 1e-4);
|
||||
EXPECT_NEAR(0.0166228f, rotT[caf::Ten3f::SYZ], 1e-4);
|
||||
}
|
||||
|
||||
{
|
||||
caf::Ten3f orgT(0.8320561f, 0.5584094f, 0.3095343f, 0.2091861f, 0.0166228f, -0.2258091f);
|
||||
|
||||
cvf::Mat3f rotMx = cvf::Mat3f::fromRotation(cvf::Vec3f(1, 1, 1), -0.2*cvf::PI_F);
|
||||
|
||||
caf::Ten3f rotT = orgT.rotate(rotMx);
|
||||
|
||||
EXPECT_NEAR(1.0f, rotT[caf::Ten3f::SXX], 1e-4);
|
||||
EXPECT_NEAR(0.5f, rotT[caf::Ten3f::SYY], 1e-4);
|
||||
EXPECT_NEAR(0.2f, rotT[caf::Ten3f::SZZ], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SXY], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SZX], 1e-4);
|
||||
EXPECT_NEAR(0.0f, rotT[caf::Ten3f::SYZ], 1e-4);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user