prevent twin volume fraction from going above 1.0

This commit is contained in:
Martin Diehl 2014-01-22 15:47:49 +00:00
parent 391d83fa2b
commit e6d88e4458
1 changed files with 27 additions and 30 deletions

View File

@ -720,8 +720,7 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar
p_vec
use math, only: &
math_Plain3333to99, &
math_Mandel6to33, &
math_mul33xx33
math_Mandel6to33
use lattice, only: &
lattice_Sslip, &
lattice_Sslip_v, &
@ -790,30 +789,28 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar
!--------------------------------------------------------------------------------------------------
! Calculation of Lp
tau_slip_pos(j) = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,structID))
tau_slip_neg(j) = tau_slip_pos(j)
nonSchmid_tensor(1:3,1:3,1) = lattice_Sslip(1:3,1:3,1,index_myFamily+i,structID)
nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,1)
do k = 1,lattice_NnonSchmid(structID)
nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) &
+ constitutive_phenopowerlaw_nonSchmidCoeff(k,matID) &
* lattice_Sslip(1:3,1:3,2*k,index_myFamily+i,structID)
nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) &
+ constitutive_phenopowerlaw_nonSchmidCoeff(k,matID) &
* lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,structID)
tau_slip_pos(j) = tau_slip_pos(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* &
dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,structID))
tau_slip_neg(j) = tau_slip_neg(j) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)* &
dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,structID))
nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)*&
lattice_Sslip(1:3,1:3,2*k,index_myFamily+i,structID)
nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + constitutive_phenopowerlaw_nonSchmidCoeff(k,matID)*&
lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,structID)
enddo
tau_slip_pos(j) = math_mul33xx33(math_Mandel6to33(Tstar_v), nonSchmid_tensor(1:3,1:3,1))
tau_slip_neg(j) = math_mul33xx33(math_Mandel6to33(Tstar_v), nonSchmid_tensor(1:3,1:3,2))
gdot_slip_pos(j) = 0.5_pReal * (1.0_pReal - state(ipc,ip,el)%p(index_F)) & ! 1-F
* constitutive_phenopowerlaw_gdot0_slip(matID) &
* (abs(tau_slip_pos(j)) / state(ipc,ip,el)%p(j)) &
**constitutive_phenopowerlaw_n_slip(matID) &
* sign(1.0_pReal,tau_slip_pos(j))
gdot_slip_neg(j) = 0.5_pReal * (1.0_pReal - state(ipc,ip,el)%p(index_F)) & ! 1-F
* constitutive_phenopowerlaw_gdot0_slip(matID) &
* (abs(tau_slip_neg(j)) / state(ipc,ip,el)%p(j)) &
**constitutive_phenopowerlaw_n_slip(matID) &
* sign(1.0_pReal,tau_slip_neg(j))
Lp = Lp + (gdot_slip_pos(j) + gdot_slip_neg(j)) &
* lattice_Sslip(1:3,1:3,1,index_myFamily+i,structID)
gdot_slip_pos(j) = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(matID)* &
((abs(tau_slip_pos(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID))*&
sign(1.0_pReal,tau_slip_pos(j))
gdot_slip_neg(j) = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(matID)* &
((abs(tau_slip_neg(j))/state(ipc,ip,el)%p(j))**constitutive_phenopowerlaw_n_slip(matID))*&
sign(1.0_pReal,tau_slip_neg(j))
Lp = Lp + (1.0_pReal-state(ipc,ip,el)%p(index_F))*& ! 1-F
(gdot_slip_pos(j)+gdot_slip_neg(j))*lattice_Sslip(1:3,1:3,1,index_myFamily+i,structID)
!--------------------------------------------------------------------------------------------------
! Calculation of the tangent of Lp
@ -844,11 +841,10 @@ pure subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar
!--------------------------------------------------------------------------------------------------
! Calculation of Lp
tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,structID))
gdot_twin(j) = (1.0_pReal - state(ipc,ip,el)%p(index_F)) & ! 1-F
* constitutive_phenopowerlaw_gdot0_twin(matID) &
* (abs(tau_twin(j)) / state(ipc,ip,el)%p(nSlip+j)) &
**constitutive_phenopowerlaw_n_twin(matID) &
* max(0.0_pReal,sign(1.0_pReal,tau_twin(j)))
gdot_twin(j) = (1.0_pReal-state(ipc,ip,el)%p(index_F))*& ! 1-F
constitutive_phenopowerlaw_gdot0_twin(matID)*&
(abs(tau_twin(j))/state(ipc,ip,el)%p(nSlip+j))**&
constitutive_phenopowerlaw_n_twin(matID)*max(0.0_pReal,sign(1.0_pReal,tau_twin(j)))
Lp = Lp + gdot_twin(j)*lattice_Stwin(1:3,1:3,index_myFamily+i,structID)
!--------------------------------------------------------------------------------------------------
@ -1029,6 +1025,7 @@ function constitutive_phenopowerlaw_dotState(Tstar_v,state,ipc,ip,el)
c_TwinTwin * left_TwinTwin(j) * &
dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(j,1:nTwin,matID), &
right_TwinTwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor
if (state(ipc,ip,el)%p(index_F) < 0.98_pReal) & ! ensure twin volume fractions stays below 1.0
constitutive_phenopowerlaw_dotState(index_F) = constitutive_phenopowerlaw_dotState(index_F) + &
gdot_twin(j)/lattice_shearTwin(index_myFamily+i,structID)
constitutive_phenopowerlaw_dotState(offset_accshear_twin+j) = abs(gdot_twin(j))