mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#941 Added TP, FAULTMOB, PCRIT, TPinc as transformed stress results
This commit is contained in:
@@ -343,16 +343,25 @@ std::map<std::string, std::vector<std::string> > RigFemPartResultsCollection::sc
|
||||
fieldCompNames["SE"].push_back("SN");
|
||||
fieldCompNames["SE"].push_back("STH");
|
||||
fieldCompNames["SE"].push_back("STQV");
|
||||
fieldCompNames["SE"].push_back("TP");
|
||||
fieldCompNames["SE"].push_back("TPinc");
|
||||
fieldCompNames["SE"].push_back("TNH" );
|
||||
fieldCompNames["SE"].push_back("TNQV");
|
||||
fieldCompNames["SE"].push_back("THQV");
|
||||
fieldCompNames["SE"].push_back("FAULTMOB");
|
||||
fieldCompNames["SE"].push_back("PCRIT");
|
||||
|
||||
fieldCompNames["ST"].push_back("SN");
|
||||
fieldCompNames["ST"].push_back("STH");
|
||||
fieldCompNames["ST"].push_back("STQV");
|
||||
fieldCompNames["ST"].push_back("TP");
|
||||
fieldCompNames["ST"].push_back("TPinc");
|
||||
fieldCompNames["ST"].push_back("TNH");
|
||||
fieldCompNames["ST"].push_back("TNQV");
|
||||
fieldCompNames["ST"].push_back("THQV");
|
||||
fieldCompNames["ST"].push_back("FAULTMOB");
|
||||
fieldCompNames["ST"].push_back("PCRIT");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,7 +655,7 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateDSM(int partInde
|
||||
frameCountProgress.incrementProgress();
|
||||
|
||||
float tanFricAng = tan(m_frictionAngleRad);
|
||||
float cohPrFricAngle = (float)(m_cohesion/tanFricAng);
|
||||
float cohPrTanFricAngle = (float)(m_cohesion/tanFricAng);
|
||||
int frameCount = se1Frames->frameCount();
|
||||
for ( int fIdx = 0; fIdx < frameCount; ++fIdx )
|
||||
{
|
||||
@@ -661,7 +670,7 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateDSM(int partInde
|
||||
{
|
||||
float se1 = se1Data[vIdx];
|
||||
float se3 = se3Data[vIdx];
|
||||
float rho = 2.0f * atan( sqrt(( se1 + cohPrFricAngle)/(se3 + cohPrFricAngle)) - M_PI_4);
|
||||
float rho = 2.0f * atan( sqrt(( se1 + cohPrTanFricAngle)/(se3 + cohPrTanFricAngle)) - M_PI_4);
|
||||
|
||||
{
|
||||
dstFrameData[vIdx] = tan(rho)/tanFricAng;
|
||||
@@ -915,7 +924,9 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateDeviatoricStrain
|
||||
RigFemScalarResultFrames* RigFemPartResultsCollection::calculateSurfaceAlignedStress(int partIndex, const RigFemResultAddress& resVarAddr)
|
||||
{
|
||||
CVF_ASSERT( resVarAddr.componentName == "STH" || resVarAddr.componentName == "STQV" || resVarAddr.componentName == "SN"
|
||||
|| resVarAddr.componentName == "TNH" || resVarAddr.componentName == "TNQV" || resVarAddr.componentName == "THQV");
|
||||
|| resVarAddr.componentName == "TNH" || resVarAddr.componentName == "TNQV" || resVarAddr.componentName == "THQV"
|
||||
|| resVarAddr.componentName == "TP" || resVarAddr.componentName == "TPinc"
|
||||
|| resVarAddr.componentName == "FAULTMOB" || resVarAddr.componentName == "PCRIT");
|
||||
|
||||
caf::ProgressInfo frameCountProgress(this->frameCount() * 7, "");
|
||||
frameCountProgress.setProgressDescription("Calculating " + QString::fromStdString(resVarAddr.fieldName + ": " + resVarAddr.componentName));
|
||||
@@ -933,18 +944,25 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateSurfaceAlignedSt
|
||||
frameCountProgress.incrementProgress(); frameCountProgress.setNextProgressIncrement(this->frameCount());
|
||||
RigFemScalarResultFrames * s13Frames = this->findOrLoadScalarResult(partIndex, RigFemResultAddress(RIG_ELEMENT_NODAL, resVarAddr.fieldName, "S13"));
|
||||
|
||||
RigFemScalarResultFrames * sNormFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "SN"));
|
||||
RigFemScalarResultFrames * sHoriFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "STH"));
|
||||
RigFemScalarResultFrames * sVertFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "STQV"));
|
||||
RigFemScalarResultFrames * sNHFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "TNH" ));
|
||||
RigFemScalarResultFrames * sNVFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "TNQV"));
|
||||
RigFemScalarResultFrames * sHVFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "THQV"));
|
||||
RigFemScalarResultFrames * SNFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "SN"));
|
||||
RigFemScalarResultFrames * STHFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "STH"));
|
||||
RigFemScalarResultFrames * STQVFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "STQV"));
|
||||
RigFemScalarResultFrames * TNHFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "TNH" ));
|
||||
RigFemScalarResultFrames * TNQVFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "TNQV"));
|
||||
RigFemScalarResultFrames * THQVFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "THQV"));
|
||||
RigFemScalarResultFrames * TPFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "TP"));
|
||||
RigFemScalarResultFrames * TPincFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "TPinc"));
|
||||
RigFemScalarResultFrames * FAULTMOBFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "FAULTMOB"));
|
||||
RigFemScalarResultFrames * PCRITFrames = m_femPartResults[partIndex]->createScalarResult(RigFemResultAddress(resVarAddr.resultPosType, resVarAddr.fieldName, "PCRIT"));
|
||||
|
||||
frameCountProgress.incrementProgress();
|
||||
|
||||
const RigFemPart * femPart = m_femParts->part(partIndex);
|
||||
const std::vector<cvf::Vec3f>& nodeCoordinates = femPart->nodes().coordinates;
|
||||
|
||||
float tanFricAng = tan(m_frictionAngleRad);
|
||||
float cohPrTanFricAngle = (float)(m_cohesion/tanFricAng);
|
||||
|
||||
int frameCount = s11Frames->frameCount();
|
||||
for(int fIdx = 0; fIdx < frameCount; ++fIdx)
|
||||
{
|
||||
@@ -955,21 +973,30 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateSurfaceAlignedSt
|
||||
const std::vector<float>& s23 = s23Frames->frameData(fIdx);
|
||||
const std::vector<float>& s13 = s13Frames->frameData(fIdx);
|
||||
|
||||
std::vector<float>& sNorm = sNormFrames->frameData(fIdx);
|
||||
std::vector<float>& sHori = sHoriFrames->frameData(fIdx);
|
||||
std::vector<float>& sVert = sVertFrames->frameData(fIdx);
|
||||
std::vector<float>& sNH = sNHFrames->frameData(fIdx);
|
||||
std::vector<float>& sHV = sNVFrames->frameData(fIdx);
|
||||
std::vector<float>& sNV = sHVFrames->frameData(fIdx);
|
||||
std::vector<float>& SNDat = SNFrames->frameData(fIdx);
|
||||
std::vector<float>& STHDat = STHFrames->frameData(fIdx);
|
||||
std::vector<float>& STQVDat = STQVFrames->frameData(fIdx);
|
||||
std::vector<float>& TNHDat = TNHFrames->frameData(fIdx);
|
||||
std::vector<float>& TNQVDat = TNQVFrames->frameData(fIdx);
|
||||
std::vector<float>& THQVDat = THQVFrames->frameData(fIdx);
|
||||
std::vector<float>& TPDat = TPFrames->frameData(fIdx);
|
||||
std::vector<float>& TincDat = TPincFrames->frameData(fIdx);
|
||||
std::vector<float>& FAULTMOBDat = FAULTMOBFrames->frameData(fIdx);
|
||||
std::vector<float>& PCRITDat = PCRITFrames->frameData(fIdx);
|
||||
|
||||
// HACK ! Todo : make it robust against other elements than Hex8
|
||||
size_t valCount = s11.size() * 3; // Number of Elm Node Face results 24 = 4 * num faces = 3* numElmNodes
|
||||
sNorm.resize(valCount);
|
||||
sHori.resize(valCount);
|
||||
sVert.resize(valCount);
|
||||
sNH.resize(valCount);
|
||||
sHV.resize(valCount);
|
||||
sNV.resize(valCount);
|
||||
|
||||
SNDat.resize(valCount);
|
||||
STHDat.resize(valCount);
|
||||
STQVDat.resize(valCount);
|
||||
TNHDat.resize(valCount);
|
||||
TNQVDat.resize(valCount);
|
||||
THQVDat.resize(valCount);
|
||||
TPDat.resize(valCount);
|
||||
TincDat.resize(valCount);
|
||||
FAULTMOBDat.resize(valCount);
|
||||
PCRITDat.resize(valCount);
|
||||
|
||||
int elementCount = femPart->elementCount();
|
||||
for(int elmIdx = 0; elmIdx < elementCount; ++elmIdx)
|
||||
@@ -1017,12 +1044,31 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateSurfaceAlignedSt
|
||||
caf::Ten3f xfTen = tensor.rotated(rotMx);
|
||||
int elmNodFaceResIdx = elmNodFaceResIdxFaceStart + qIdx;
|
||||
|
||||
sHori[elmNodFaceResIdx]= xfTen[caf::Ten3f::SXX];
|
||||
sVert[elmNodFaceResIdx]= xfTen[caf::Ten3f::SYY];
|
||||
sNorm[elmNodFaceResIdx]= xfTen[caf::Ten3f::SZZ];
|
||||
sNH[elmNodFaceResIdx]= xfTen[caf::Ten3f::SZX];
|
||||
sHV[elmNodFaceResIdx]= xfTen[caf::Ten3f::SXY];
|
||||
sNV[elmNodFaceResIdx]= xfTen[caf::Ten3f::SYZ];
|
||||
float szx = xfTen[caf::Ten3f::SZX];
|
||||
float syz = xfTen[caf::Ten3f::SYZ];
|
||||
float szz = xfTen[caf::Ten3f::SZZ];
|
||||
|
||||
STHDat[elmNodFaceResIdx] = xfTen[caf::Ten3f::SXX];
|
||||
STQVDat[elmNodFaceResIdx] = xfTen[caf::Ten3f::SYY];
|
||||
SNDat[elmNodFaceResIdx] = xfTen[caf::Ten3f::SZZ];
|
||||
TNHDat[elmNodFaceResIdx] = xfTen[caf::Ten3f::SZX];
|
||||
TNQVDat[elmNodFaceResIdx] = xfTen[caf::Ten3f::SXY];
|
||||
THQVDat[elmNodFaceResIdx] = xfTen[caf::Ten3f::SYZ];
|
||||
|
||||
float TP = sqrt(szx*szx + syz*syz);
|
||||
TPDat[elmNodFaceResIdx] = TP;
|
||||
|
||||
if (TP > 1e-5)
|
||||
{
|
||||
TincDat[elmNodFaceResIdx] = cvf::Math::toDegrees( acos(syz/TP) );
|
||||
}
|
||||
else
|
||||
{
|
||||
TincDat[elmNodFaceResIdx] = std::numeric_limits<float>::infinity();
|
||||
}
|
||||
|
||||
FAULTMOBDat[elmNodFaceResIdx] = TP/(tanFricAng * (szz + cohPrTanFricAngle));
|
||||
PCRITDat[elmNodFaceResIdx] = szz - TP/tanFricAng;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user