CPFEM.f90 contains the following modifications:

-Temperature is now defined as a CPFEM_Temperature, and filled for each new call of CPFEM_general according the value output by MARC
-constitutive_Microstructure(state_new,CPFEM_Temperature,grain,CPFEM_in,cp_en) is used in the state loop and before entering in the stress loop. This subroutine computes all parameters,arrays or matrices required from the state, i.e. forest or parallel or mobile dislocation densities from the statistically stored dislocation densities. Its definition is made in module constitutive.
This commit is contained in:
Luc Hantcherli 2007-10-16 08:33:59 +00:00
parent ab0fddf518
commit b476aa4028
1 changed files with 11 additions and 6 deletions

View File

@ -10,6 +10,7 @@
! **************************************************************** ! ****************************************************************
! *** General variables for the material behaviour calculation *** ! *** General variables for the material behaviour calculation ***
! **************************************************************** ! ****************************************************************
real(pReal) CPFEM_Temperature
real(pReal), dimension (:,:,:), allocatable :: CPFEM_stress_all real(pReal), dimension (:,:,:), allocatable :: CPFEM_stress_all
real(pReal), dimension (:,:,:,:), allocatable :: CPFEM_jacobi_all real(pReal), dimension (:,:,:,:), allocatable :: CPFEM_jacobi_all
real(pReal), dimension (:,:,:,:), allocatable :: CPFEM_ffn_all real(pReal), dimension (:,:,:,:), allocatable :: CPFEM_ffn_all
@ -44,6 +45,7 @@
integer(pInt) e,i,g integer(pInt) e,i,g
! !
! *** mpie.marc parameters *** ! *** mpie.marc parameters ***
CPFEM_Temperature = 0.0_pReal
allocate(CPFEM_ffn_all (3,3,mesh_maxNips,mesh_NcpElems)) ; CPFEM_ffn_all = 0.0_pReal allocate(CPFEM_ffn_all (3,3,mesh_maxNips,mesh_NcpElems)) ; CPFEM_ffn_all = 0.0_pReal
allocate(CPFEM_ffn1_all (3,3,mesh_maxNips,mesh_NcpElems)) ; CPFEM_ffn1_all = 0.0_pReal allocate(CPFEM_ffn1_all (3,3,mesh_maxNips,mesh_NcpElems)) ; CPFEM_ffn1_all = 0.0_pReal
allocate(CPFEM_stress_all( 6,mesh_maxNips,mesh_NcpElems)) ; CPFEM_stress_all = 0.0_pReal allocate(CPFEM_stress_all( 6,mesh_maxNips,mesh_NcpElems)) ; CPFEM_stress_all = 0.0_pReal
@ -90,7 +92,7 @@
!*** perform initialization at first call, update variables and *** !*** perform initialization at first call, update variables and ***
!*** call the actual material model *** !*** call the actual material model ***
!*********************************************************************** !***********************************************************************
SUBROUTINE CPFEM_general(ffn, ffn1, CPFEM_inc, CPFEM_subinc, CPFEM_cn, CPFEM_dt, CPFEM_en, CPFEM_in) SUBROUTINE CPFEM_general(ffn, ffn1, Temperature, CPFEM_inc, CPFEM_subinc, CPFEM_cn, CPFEM_dt, CPFEM_en, CPFEM_in)
! !
use prec, only: pReal,pInt use prec, only: pReal,pInt
use math, only: math_init use math, only: math_init
@ -99,7 +101,7 @@
use constitutive, only: constitutive_init,constitutive_state_old,constitutive_state_new use constitutive, only: constitutive_init,constitutive_state_old,constitutive_state_new
implicit none implicit none
! !
real(pReal) ffn(3,3), ffn1(3,3), CPFEM_dt real(pReal) ffn(3,3), ffn1(3,3), Temperature, CPFEM_dt
integer(pInt) CPFEM_inc, CPFEM_subinc, CPFEM_cn, CPFEM_en, CPFEM_in, cp_en integer(pInt) CPFEM_inc, CPFEM_subinc, CPFEM_cn, CPFEM_en, CPFEM_in, cp_en
! !
! initialization step ! initialization step
@ -129,6 +131,7 @@
endif endif
cp_en = mesh_FEasCP('elem',CPFEM_en) cp_en = mesh_FEasCP('elem',CPFEM_en)
CPFEM_Temperature = Temperature
CPFEM_ffn_all(:,:,CPFEM_in, cp_en) = ffn CPFEM_ffn_all(:,:,CPFEM_in, cp_en) = ffn
CPFEM_ffn1_all(:,:,CPFEM_in, cp_en) = ffn1 CPFEM_ffn1_all(:,:,CPFEM_in, cp_en) = ffn1
call CPFEM_stressIP(CPFEM_cn, CPFEM_dt, cp_en, CPFEM_in) call CPFEM_stressIP(CPFEM_cn, CPFEM_dt, cp_en, CPFEM_in)
@ -238,7 +241,7 @@
endif endif
CPFEM_results(1:3,grain,CPFEM_in,cp_en) = math_RtoEuler(transpose(R)) ! orientation CPFEM_results(1:3,grain,CPFEM_in,cp_en) = math_RtoEuler(transpose(R)) ! orientation
CPFEM_results(4:3+constitutive_Nresults(grain,CPFEM_in,cp_en),grain,CPFEM_in,cp_en) = & CPFEM_results(4:3+constitutive_Nresults(grain,CPFEM_in,cp_en),grain,CPFEM_in,cp_en) = &
constitutive_post_results(Tstar_v,state(:,i_then),CPFEM_dt,grain,CPFEM_in,cp_en) constitutive_post_results(Tstar_v,state(:,i_then),CPFEM_dt,CPFEM_Temperature,grain,CPFEM_in,cp_en)
! ---- contribute to IP result ---- ! ---- contribute to IP result ----
volfrac = constitutive_matVolFrac(grain,CPFEM_in,cp_en)*constitutive_texVolFrac(grain,CPFEM_in,cp_en) volfrac = constitutive_matVolFrac(grain,CPFEM_in,cp_en)*constitutive_texVolFrac(grain,CPFEM_in,cp_en)
@ -340,7 +343,8 @@
use prec use prec
use constitutive, only: constitutive_Nstatevars,& use constitutive, only: constitutive_Nstatevars,&
constitutive_homogenizedC,constitutive_dotState,constitutive_LpAndItsTangent constitutive_homogenizedC,constitutive_dotState,constitutive_LpAndItsTangent,
constitutive_Microstructure
use math use math
implicit none implicit none
@ -381,6 +385,7 @@ state: do ! outer iteration: state
msg = 'limit state iteration' msg = 'limit state iteration'
return return
endif endif
call constitutive_Microstructure(state_new,CPFEM_Temperature,grain,CPFEM_in,cp_en)
iStress = 0_pInt iStress = 0_pInt
stress: do ! inner iteration: stress stress: do ! inner iteration: stress
iStress = iStress+1 iStress = iStress+1
@ -390,7 +395,7 @@ stress: do ! inner iteration: stress
endif endif
p_hydro=(Tstar_v(1)+Tstar_v(2)+Tstar_v(3))/3.0_pReal p_hydro=(Tstar_v(1)+Tstar_v(2)+Tstar_v(3))/3.0_pReal
forall(i=1:3) Tstar_v(i)=Tstar_v(i)-p_hydro forall(i=1:3) Tstar_v(i)=Tstar_v(i)-p_hydro
call constitutive_LpAndItsTangent(Lp,dLp, Tstar_v,state_new,grain,CPFEM_in,cp_en) call constitutive_LpAndItsTangent(Lp,dLp,Tstar_v,state_new,CPFEM_Temperature,grain,CPFEM_in,cp_en)
B = math_I3-dt*Lp B = math_I3-dt*Lp
! B = B / math_det3x3(B)**(1.0_pReal/3.0_pReal) ! B = B / math_det3x3(B)**(1.0_pReal/3.0_pReal)
AB = matmul(A,B) AB = matmul(A,B)
@ -441,7 +446,7 @@ stress: do ! inner iteration: stress
enddo stress enddo stress
! write(6,*) 'istress', istress ! write(6,*) 'istress', istress
Tstar_v = 0.5_pReal*matmul(C_66,math_Mandel33to6(matmul(transpose(B),AB)-math_I3)) Tstar_v = 0.5_pReal*matmul(C_66,math_Mandel33to6(matmul(transpose(B),AB)-math_I3))
dstate = dt*constitutive_dotState(Tstar_v,state_new,grain,CPFEM_in,cp_en) ! evolution of microstructure dstate = dt*constitutive_dotState(Tstar_v,state_new,CPFEM_Temperature,grain,CPFEM_in,cp_en) ! evolution of microstructure
Rstate = state_new - (state_old+dstate) Rstate = state_new - (state_old+dstate)
RstateS = 0.0_pReal RstateS = 0.0_pReal
forall (i=1:constitutive_Nstatevars(grain,CPFEM_in,cp_en), state_new(i)/=0.0_pReal) & forall (i=1:constitutive_Nstatevars(grain,CPFEM_in,cp_en), state_new(i)/=0.0_pReal) &