diff --git a/NonLinearSolver/internalPoints/ipField.cpp b/NonLinearSolver/internalPoints/ipField.cpp index 34b6c99cbf7a35bf9aea3dd550ce749fa0fea620..0bf49a6e404fe8291cc0e62051e2c145901b7e48 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 9ef8b3b46042298a7c260003c73cd44a98419a4c..acc9a937a0119508fe5b1e8ef6e2da7240d1b27c 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 f654e0fa33f89cba40a1d032f72bab2f66160d59..e13a221894971b2e663ee921f9251eaa859f5784 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 d119c9071c88c419811346a64d4f8b597a8b825f..624467dcc0c88306e54f1348b8b74ceac8bc9f63 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 a4f98f54443c93fbd61dc5356ae8e3baaf8d86ec..5996e752926c25808c5cd783a228f7b44635365c 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 c5c3875ee33b5b80b2d4da250943bc42333ba580..5f83b5992b5100ee99d0ba087735423d15949ec5 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 6ed9c64645d0c5bec195a60db135b56d76f3c012..0483ec109bc3066d9711853e0cf6ac739952f007 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");