Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
cm3Libraries
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cm3
cm3Libraries
Commits
8188ab25
Commit
8188ab25
authored
2 months ago
by
Ujwal Kishore Jinaga
Browse files
Options
Downloads
Patches
Plain Diff
[NEX PATCH] Rotation implementation in StochTMDMN.. has been updated. Feature yet to be debugged.
parent
f1ec54c3
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
dG3D/src/dG3DMaterialLaw.cpp
+117
-42
117 additions, 42 deletions
dG3D/src/dG3DMaterialLaw.cpp
with
117 additions
and
42 deletions
dG3D/src/dG3DMaterialLaw.cpp
+
117
−
42
View file @
8188ab25
...
@@ -5733,6 +5733,9 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
...
@@ -5733,6 +5733,9 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
const SVector3& H_unrot = ipvcur->getConstRefToGradT();
const SVector3& H_unrot = ipvcur->getConstRefToGradT();
const double T = ipvcur->getConstRefToTemperature();
const double T = ipvcur->getConstRefToTemperature();
static STensor3 U, R_def; // R_def is the Rotation in F = R_def . U
STensorOperation::RUDecomposition(F_unrot,U,R_def);
static STensor3 F; STensorOperation::zero(F); F = F_unrot;
static STensor3 F; STensorOperation::zero(F); F = F_unrot;
static SVector3 H; STensorOperation::zero(H); H = H_unrot;
static SVector3 H; STensorOperation::zero(H); H = H_unrot;
if (_flag_rotation){
if (_flag_rotation){
...
@@ -5748,8 +5751,10 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
...
@@ -5748,8 +5751,10 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
static STensor3 RT; STensorOperation::zero(RT);
static STensor3 RT; STensorOperation::zero(RT);
STensorOperation::transposeSTensor3(R,RT);
STensorOperation::transposeSTensor3(R,RT);
STensorOperation::multSTensor3InPlace2nd(RT,F);
STensorOperation::multSTensor3InPlace2nd(R,U);
STensorOperation::multSTensor3SVector3InPlace2nd(RT,H);
STensorOperation::multSTensor3InPlace1st(U,RT);
F = U; // R_def in the rotated frame = I;
STensorOperation::multSTensor3SVector3InPlace2nd(R,H);
}
}
STensor3& P = ipvcur->getRefToFirstPiolaKirchhoffStress(); STensorOperation::zero(P);
STensor3& P = ipvcur->getRefToFirstPiolaKirchhoffStress(); STensorOperation::zero(P);
...
@@ -6055,12 +6060,6 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
...
@@ -6055,12 +6060,6 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
}
}
}
}
if (_flag_rotation){
const STensor3& R = ipvcur->getConstReftoRotationMatrix();
STensorOperation::multSTensor3InPlace2nd(R,P);
STensorOperation::multSTensor3SVector3InPlace2nd(R,Q);
}
if(stiff){
if(stiff){
NTVC.mult(_I, dRdF); dRdT = NTV_dPQdT;
NTVC.mult(_I, dRdF); dRdT = NTV_dPQdT;
...
@@ -6146,66 +6145,142 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
...
@@ -6146,66 +6145,142 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev,
}
}
}
}
}
}
}
if (_flag_rotation){
if (_flag_rotation){
const STensor3& R = ipvcur->getConstReftoRotationMatrix();
const STensor3& R = ipvcur->getConstReftoRotationMatrix();
static STensor3 RT; STensorOperation::zero(RT); STensorOperation::transposeSTensor3(R, RT);
static STensor3 RT; STensorOperation::zero(RT); STensorOperation::transposeSTensor3(R, RT);
static STensor3 Finvrot, S, Srot, Prot, dSdT;
Prot = P;
STensorOperation::inverseSTensor3(F,Finvrot); // Note that F is Frot here
STensorOperation::multSTensor3InPlace2nd(R,dPdT);
STensorOperation::multSTensor3(Finvrot,Prot,Srot);
STensorOperation::multSTensor3SVector3InPlace2nd(R,dqdT);
STensorOperation::multSTensor3InPlace2nd(RT,Srot);
STensorOperation::multSTensor3(Srot,R,S);
if(stiff){
static STensor43 dFinvrot_dFrot;
STensorOperation::inverseSTensor3(F,Finvrot,&dFinvrot_dFrot,false);
STensorOperation::multSTensor3(Finvrot,dPdT,dSdT); // Since dPdT is dProt_dT initially, dSdT is dSrot_dT is initially
STensorOperation::multSTensor3InPlace2nd(RT,dSdT);
STensorOperation::multSTensor3InPlace1st(dSdT,R); // Here dSrot_dT becomes dSdT
STensorOperation::multSTensor3(F_unrot,dSdT,dPdT);
STensorOperation::multSTensor3SVector3InPlace2nd(RT,dqdT);
static STensor3 I2; STensorOperation::zero(I2); I2(0,0) = I2(1,1) = I2(2,2) = 1.;
static STensor3 I2; STensorOperation::zero(I2); I2(0,0) = I2(1,1) = I2(2,2) = 1.;
const STensor43 I4_symm(1.,1.); // symmetric type of fourth order unit tensor
static STensor43 I4_first_type; STensorOperation::zero(I4_first_type); // first type of fourth order unit tensor
static STensor43 I4_first_type; STensorOperation::zero(I4_first_type); // first type of fourth order unit tensor
for(int m=0; m<3; m++)
for(int m=0; m<3; m++)
for(int n=0; n<3; n++)
for(int n=0; n<3; n++)
for(int k=0; k<3; k++)
for(int k=0; k<3; k++)
for(int l=0; l<3; l++)
for(int l=0; l<3; l++)
I4_first_type(m,n,k,l) = I2(m,k)*I2(n,l); // = dFrotdFrot
I4_first_type(m,n,k,l) = I2(m,k)*I2(n,l);
static STensor3 dHrot_dH; STensorOperation::zero(dHrot_dH);
static STensor43 dUdF, dUrot_dU, dUrot_dF, dFrot_dF, dFinvrot_dF;
STensorOperation::zero(dUdF);
STensorOperation::zero(dUrot_dU);
STensorOperation::zero(dUrot_dF);
STensorOperation::zero(dFrot_dF);
STensorOperation::zero(dFinvrot_dF);
for(int m=0; m<3; m++)
for(int n=0; n<3; n++)
for(int k=0; k<3; k++)
for(int l=0; l<3; l++)
for(int p=0; p<3; p++){
dUdF(m,n,k,l) += I4_first_type(m,p,k,l)*R_def(n,p);
for(int q=0; q<3; q++)
dUrot_dU(m,n,k,l) += R(m,p)*I4_symm(p,q,k,l)*RT(q,n);
}
static STensor3 dHdH_rot; STensorOperation::zero(dHdH_rot);
static STensor43 dFdF_rot; STensorOperation::zero(dFdF_rot);
for(int m=0; m<3; m++)
for(int m=0; m<3; m++)
for(int n=0; n<3; n++)
for(int n=0; n<3; n++)
for(int k=0; k<3; k++){
for(int k=0; k<3; k++){
dHdH_rot(m,n) += RT(m,k)*I2(k,n);
dHrot_dH(m,n) += R(m,k)*I2(k,n);
for(int l=0; l<3; l++){
for(int l=0; l<3; l++)
dFdF_rot(m,n,k,l) = 0.;
for(int p=0; p<3; p++)
for(int p=0; p<3; p++)
dFdF_rot(m,n,k,l) += RT(m,p)*I4_first_type(p,n,k,l);
for(int q=0; q<3; q++)
}
for(int r=0; r<3; r++)
for(int s=0; s<3; s++)
dUrot_dF(m,n,k,l) += I4_symm(m,n,p,q)*dUrot_dU(p,q,r,s)*dUdF(r,s,k,l);
}
}
static STensor43 L_rot;
dFrot_dF = dUrot_dF; // R_def_rot = I;
for(int m=0; m<3; m++)
for(int n=0; n<3; n++)
for(int k=0; k<3; k++)
for(int l=0; l<3; l++)
for(int p=0; p<3; p++)
for(int q=0; q<3; q++)
dFinvrot_dF(m,n,k,l) += dFinvrot_dFrot(m,n,p,q)*dFrot_dF(p,q,k,l);
// dPdF
static STensor43 dSdF, dSrot_dF, L_rot;
static STensor33 dqdF_rot;
static STensor33 dqdF_rot;
static STensor3 dqdgradT_rot, dwdf_rot, dmechSourcedf_rot;
static STensor3 dqdgradT_rot, dwdf_rot, dmechSourcedf_rot;
STensorOperation::multSTensor43InPlace(L,dFdF_rot);
STensorOperation::zero(L_rot);
STensorOperation::multSTensor33STensor43InPlace1st(dqdF,dFdF_rot);
STensorOperation::zero(dqdF_rot);
STensorOperation::multSTensor3InPlace1st(dqdgradT,dHdH_rot);
STensorOperation::zero(dSdF);
STensorOperation::multSTensor3STensor43(dwdf,dFdF_rot,dwdf_rot);
STensorOperation::zero(dSrot_dF);
STensorOperation::multSTensor3STensor43(dmechSourcedf,dFdF_rot,dmechSourcedf_rot);
for(int i=0; i<3; i++)
STensorOperation::multSTensor43InPlace(L,dFrot_dF); // L = dProt_dFrot and becomes dProt_dF
for(int k=0; k<3; k++){
for(int m=0; m<3; m++)
dqdgradT_rot(i,k) = 0.;
for(int n=0; n<3; n++)
for(int o=0; o<3; o++){
for(int k=0; k<3; k++)
dqdF_rot(i,k,o) = 0.;
for(int l=0; l<3; l++)
dqdgradT_rot(i,k) += R(i,o)*dqdgradT(o,k);
for(int p=0; p<3; p++)
for(int p=0; p<3; p++){
dSrot_dF(m,n,k,l) += dFinvrot_dF(m,p,k,l)*Prot(p,n) + Finvrot(m,p)*L(p,n,k,l);
L_rot(i,k,o,p) = 0.;
dqdF_rot(i,k,o) += R(i,p)*dqdF(p,k,o);
for(int m=0; m<3; m++)
for(int j=0; j<3; j++)
for(int n=0; n<3; n++)
L_rot(i,k,o,p) += R(i,j)*L(j,k,o,p);
for(int k=0; k<3; k++)
}
for(int l=0; l<3; l++)
}
for(int p=0; p<3; p++)
}
for(int q=0; q<3; q++)
dSdF(m,n,k,l) += RT(m,p)*dSrot_dF(p,q,k,l)*R(q,n);
for(int m=0; m<3; m++)
for(int n=0; n<3; n++)
for(int k=0; k<3; k++)
for(int l=0; l<3; l++)
for(int p=0; p<3; p++)
L_rot(m,n,k,l) += I4_first_type(m,p,k,l)*S(p,n) + F_unrot(m,p)*dSdF(p,n,k,l);
// dqdF
for(int m=0; m<3; m++)
for(int n=0; n<3; n++)
for(int k=0; k<3; k++)
for(int l=0; l<3; l++)
for(int p=0; p<3; p++)
for(int q=0; q<3; q++)
dqdF_rot(m,n,k) += RT(m,l)*dqdF(l,p,q)*dFrot_dF(p,q,n,k);
// dqdH
STensorOperation::multSTensor3InPlace1st(dqdgradT,dHrot_dH);
STensorOperation::multSTensor3InPlace2nd(RT,dqdgradT);
// thermSrc, mechSrc
STensorOperation::multSTensor3STensor43(dwdf,dFrot_dF,dwdf_rot);
STensorOperation::multSTensor3STensor43(dmechSourcedf,dFrot_dF,dmechSourcedf_rot);
// Reassign
L = L_rot; dqdF = dqdF_rot; dqdgradT = dqdgradT_rot; dwdf = dwdf_rot; dmechSourcedf = dmechSourcedf_rot;
L = L_rot; dqdF = dqdF_rot; dqdgradT = dqdgradT_rot; dwdf = dwdf_rot; dmechSourcedf = dmechSourcedf_rot;
}
}
}
STensorOperation::multSTensor3(F_unrot,S,P);
STensorOperation::multSTensor3SVector3InPlace2nd(RT,Q);
}
}
ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
ipvcur->setRefToDGElasticTangentModuli(this->elasticStiffness);
}
}
}
void StochTMDMNDG3DMaterialLaw::setTime(const double t,const double dtime){
void StochTMDMNDG3DMaterialLaw::setTime(const double t,const double dtime){
dG3DMaterialLaw::setTime(t,dtime);
dG3DMaterialLaw::setTime(t,dtime);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment