From 51dea3d66d4f59a7339a42a014377d214b6b7612 Mon Sep 17 00:00:00 2001 From: FLE_Knight <ujwalkishore.jinaga@mail.polimi.it> Date: Mon, 29 Apr 2024 15:37:46 +0200 Subject: [PATCH] Added yieldSurface and SVM in ipHyperelastic --- NonLinearSolver/internalPoints/ipField.cpp | 1 + NonLinearSolver/internalPoints/ipField.h | 2 +- NonLinearSolver/internalPoints/ipHyperelastic.cpp | 8 ++++++-- NonLinearSolver/internalPoints/ipHyperelastic.h | 2 ++ .../materialLaw/mlawNonLinearTVENonLinearTVP.cpp | 11 +++++++++-- dG3D/src/dG3DIPVariable.cpp | 9 +++++++++ dG3D/src/dG3DMaterialLaw.cpp | 4 ++-- 7 files changed, 30 insertions(+), 7 deletions(-) diff --git a/NonLinearSolver/internalPoints/ipField.cpp b/NonLinearSolver/internalPoints/ipField.cpp index 34b6c99cb..0bf49a6e4 100644 --- a/NonLinearSolver/internalPoints/ipField.cpp +++ b/NonLinearSolver/internalPoints/ipField.cpp @@ -1061,6 +1061,7 @@ std::string IPField::ToString(const int i){ else if (i == PRESSURE) return "PRESSURE"; else if (i == viscousDissipatedEnergy) return "viscousDissipatedEnergy"; else if (i == mullinsDissipatedEnergy) return "mullinsDissipatedEnergy"; + else if (i == yieldSurface) return "yieldSurface"; else if (i == USER1) return "USER1"; else if (i == USER2) return "USER2"; else if (i == USER3) return "USER3"; diff --git a/NonLinearSolver/internalPoints/ipField.h b/NonLinearSolver/internalPoints/ipField.h index 9ef8b3b46..acc9a937a 100644 --- a/NonLinearSolver/internalPoints/ipField.h +++ b/NonLinearSolver/internalPoints/ipField.h @@ -342,7 +342,7 @@ class IPField : public elementsField { MAX_DEFO_ENERGY, MULLINS_DAMAGE, PRESSURE, // dissipated Energies - viscousDissipatedEnergy,mullinsDissipatedEnergy, + viscousDissipatedEnergy,mullinsDissipatedEnergy, yieldSurface, ONE, _EMEnergy, UNDEFINED}; enum Operator { MEAN_VALUE=1, MIN_VALUE, MAX_VALUE, CRUDE_VALUE}; diff --git a/NonLinearSolver/internalPoints/ipHyperelastic.cpp b/NonLinearSolver/internalPoints/ipHyperelastic.cpp index f654e0fa3..e13a22189 100644 --- a/NonLinearSolver/internalPoints/ipHyperelastic.cpp +++ b/NonLinearSolver/internalPoints/ipHyperelastic.cpp @@ -15,7 +15,7 @@ IPHyperViscoElastic::IPHyperViscoElastic(const int N):IPVariableMechanics(),_N(N),_elasticEnergy(0.),_Ee(0.),_kirchhoff(0.), _irreversibleEnergy(0.),_DirreversibleEnergyDF(0.), _viscousEnergyPart(0.), _dElasticEnergyPartdF(0.), _dViscousEnergyPartdF(0.), _elasticBulkPropertyScaleFactor(1.), _elasticShearPropertyScaleFactor(1.), - _intA(0.), _intB(0.), _Jacobian(1.) + _intA(0.), _intB(0.), _Jacobian(1.), _yieldSurface(0.), _SVM(0.) { _A.clear(); _B.clear(); @@ -32,7 +32,7 @@ IPHyperViscoElastic::IPHyperViscoElastic(const IPHyperViscoElastic& src): IPVari _irreversibleEnergy(src._irreversibleEnergy),_DirreversibleEnergyDF(src._DirreversibleEnergyDF), _viscousEnergyPart(src._viscousEnergyPart), _dElasticEnergyPartdF(src._dElasticEnergyPartdF), _dViscousEnergyPartdF(src._dViscousEnergyPartdF), _elasticBulkPropertyScaleFactor(src._elasticBulkPropertyScaleFactor), _elasticShearPropertyScaleFactor(src._elasticShearPropertyScaleFactor), - _intA(src._intA),_intB(src._intB), _psi_branch(src._psi_branch), _Jacobian(src._Jacobian) + _intA(src._intA),_intB(src._intB), _psi_branch(src._psi_branch), _Jacobian(src._Jacobian), _yieldSurface(src._yieldSurface), _SVM(src._SVM) { }; @@ -58,6 +58,8 @@ IPHyperViscoElastic& IPHyperViscoElastic::operator =(const IPVariable& src){ _intB= psrc->_intB; _psi_branch= psrc->_psi_branch; _Jacobian=psrc->_Jacobian; + _yieldSurface=psrc->_yieldSurface; + _SVM=psrc->_SVM; } return *this; }; @@ -81,6 +83,8 @@ void IPHyperViscoElastic::restart() { restartManager::restart(_intB); restartManager::restart(_psi_branch); restartManager::restart(_Jacobian); + restartManager::restart(_yieldSurface); + restartManager::restart(_SVM); }; void IPHyperViscoElastic::getViscoElasticStrain(int i, STensor3& Ev) const diff --git a/NonLinearSolver/internalPoints/ipHyperelastic.h b/NonLinearSolver/internalPoints/ipHyperelastic.h index d119c9071..624467dcc 100644 --- a/NonLinearSolver/internalPoints/ipHyperelastic.h +++ b/NonLinearSolver/internalPoints/ipHyperelastic.h @@ -36,6 +36,8 @@ class IPHyperViscoElastic : public IPVariableMechanics{ std::vector<double> _psi_branch; // N elements double _Jacobian; // NEW100 + double _yieldSurface; // NEW100 + double _SVM; // NEW100 von mises protected: //For energy sources diff --git a/NonLinearSolver/materialLaw/mlawNonLinearTVENonLinearTVP.cpp b/NonLinearSolver/materialLaw/mlawNonLinearTVENonLinearTVP.cpp index a4f98f544..5996e7529 100644 --- a/NonLinearSolver/materialLaw/mlawNonLinearTVENonLinearTVP.cpp +++ b/NonLinearSolver/materialLaw/mlawNonLinearTVENonLinearTVP.cpp @@ -762,6 +762,11 @@ void mlawNonLinearTVENonLinearTVP::predictorCorrector_TVP_nonAssociatedFlow_nonL } Ee *= 0.5; + // update yieldSurface in IP -> NEW100 + q1->_yieldSurface = f; + q1->_SVM = PhiEq; + q1->_pressure = ptilde; + // Corrected corKir, mandel, backStress are already in the IP due to getIterated_DPhi /* // Correct A, B @@ -2013,6 +2018,8 @@ void mlawNonLinearTVENonLinearTVP::getDho(const IPNonLinearTVP *q1, const double for (int p=0; p<3; p++) for (int q=0; q<3; q++) dMeDphi(i,j,k,l) += dMedGN(i,j,p,q)*Gamma*(3.*_Idev(p,q,k,l) + 2.*_b/3 * 1./3 * _I(p,q)*_I(k,l)); + + dMeDphi *= 1/q1->_Jacobian; // NEW100 // Get dXdPhi static STensor43 dXdPhi; @@ -2027,7 +2034,6 @@ void mlawNonLinearTVENonLinearTVP::getDho(const IPNonLinearTVP *q1, const double static STensor43 Dho2; Dho2 = _I4; Dho2 -= dMeDphi; - Dho2 *= 1/q1->_Jacobian; // NEW100 Dho2 += dXdPhi; STensorOperation::inverseSTensor43(Dho2,Dho2inv); @@ -2051,9 +2057,10 @@ void mlawNonLinearTVENonLinearTVP::getDho(const IPNonLinearTVP *q1, const double STensorOperation::zero(Ge_TrEeTensor_temp); Ge_TrEeTensor_temp = (*Ge_TrEeTensor); Ge_TrEeTensor_temp *= (1.5*Gamma); + Ge_TrEeTensor_temp *= 1/q1->_Jacobian; // NEW100 Dho2_u += Ge_TrEeTensor_temp; } - Dho2_u *= 1/q1->_Jacobian; // NEW100 + STensorOperation::inverseSTensor43(Dho2_u,Dho2_u_inv); // Get Dho2_v, Dho2_v_inv diff --git a/dG3D/src/dG3DIPVariable.cpp b/dG3D/src/dG3DIPVariable.cpp index c5c3875ee..5f83b5992 100644 --- a/dG3D/src/dG3DIPVariable.cpp +++ b/dG3D/src/dG3DIPVariable.cpp @@ -6240,6 +6240,7 @@ double NonLinearTVPDG3DIPVariable::get(const int i) const{ else if (i == IPField::Dev_corKir_Inf_YY){return _ipViscoElastoPlastic->_devCorKirinf_TVE(1,1);} else if (i == IPField::Dev_corKir_Inf_YZ){return _ipViscoElastoPlastic->_devCorKirinf_TVE(1,2);} else if (i == IPField::Dev_corKir_Inf_ZZ){return _ipViscoElastoPlastic->_devCorKirinf_TVE(2,2);} + else if (i == IPField::PRESSURE){return _ipViscoElastoPlastic->_pressure;} else if (i == IPField::viscousDissipatedEnergy){return _ipViscoElastoPlastic->_viscousDissipatedEnergy;} else if (i == IPField::mullinsDissipatedEnergy){return _ipViscoElastoPlastic->_mullinsDissipatedEnergy;} else if (i == IPField::Eve1_XX){ @@ -6379,6 +6380,14 @@ double NonLinearTVPDG3DIPVariable::get(const int i) const{ { return _ipViscoElastoPlastic->_mullinsDamage; } + else if (i == IPField::yieldSurface) + { + return _ipViscoElastoPlastic->_yieldSurface; + } + else if (i == IPField::SVM) + { + return _ipViscoElastoPlastic->_SVM; + } else { return dG3DIPVariable::get(i); diff --git a/dG3D/src/dG3DMaterialLaw.cpp b/dG3D/src/dG3DMaterialLaw.cpp index 6ed9c6464..0483ec109 100644 --- a/dG3D/src/dG3DMaterialLaw.cpp +++ b/dG3D/src/dG3DMaterialLaw.cpp @@ -247,7 +247,7 @@ void dG3DMaterialLawWithTangentByPerturbation::stress(IPVariable* ipv, const IPV _stressLaw->stress(ipvcur,ipvprev,false,checkfrac,dTangent); -#if 0 +#if 1 _stressLaw->stress(ipvcur,ipvprev,true,checkfrac,dTangent); ipvcur->getConstRefToDeformationGradient().print("F Analytique"); // FLE ipvcur->getConstRefToFirstPiolaKirchhoffStress().print("P Analytique"); // FLE @@ -622,7 +622,7 @@ void dG3DMaterialLawWithTangentByPerturbation::stress(IPVariable* ipv, const IPV } } -#if 0 +#if 1 ipvcur->getConstRefToDeformationGradient().print("F Numerique"); // FLE ipvcur->getConstRefToFirstPiolaKirchhoffStress().print("P Numerique"); // FLE ipvcur->getConstRefToTangentModuli().print("dPdE Numerique"); -- GitLab