From 397db06fb3ec9370c0a11eefecc11729b916cac1 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Wed, 7 Jul 2010 09:58:18 +0000 Subject: [PATCH] cpfe_general now returns also Kirchhoff-stress P and dPdF added dummy variables P and dPdF to mpie_cpfe_* to be able to call cpfem_general correctly --- code/CPFEM.f90 | 17 ++++++++++++----- code/mpie_cpfem_abaqus_exp.f | 5 +++-- code/mpie_cpfem_abaqus_std.f | 4 +++- code/mpie_cpfem_marc.f90 | 5 ++++- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/code/CPFEM.f90 b/code/CPFEM.f90 index 915d7a776..e062a748f 100644 --- a/code/CPFEM.f90 +++ b/code/CPFEM.f90 @@ -63,7 +63,8 @@ endsubroutine !*** perform initialization at first call, update variables and *** !*** call the actual material model *** !*********************************************************************** -subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchyStress, jacobian) +subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchyStress,& + & jacobian, pstress, dPdF) ! note: cauchyStress = Cauchy stress cs(6) and jacobian = Consistent tangent dcs/dE !*** variables and functions from other modules ***! @@ -153,13 +154,15 @@ subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchySt !*** output variables ***! real(pReal), dimension(6), intent(out) :: cauchyStress ! stress vector in Mandel notation real(pReal), dimension(6,6), intent(out) :: jacobian ! jacobian in Mandel notation - + real(pReal), dimension (3,3), intent(out) :: pstress ! Piola-Kirchhoff stress in Matrix notation + real(pReal), dimension (3,3,3,3), intent(out) :: dPdF ! + !*** local variables ***! real(pReal) J_inverse, & ! inverse of Jacobian rnd - real(pReal), dimension (3,3) :: Kirchhoff - real(pReal), dimension (3,3,3,3) :: H, & - H_sym + real(pReal), dimension (3,3) :: Kirchhoff ! Piola-Kirchhoff stress in Matrix notation + real(pReal), dimension (3,3,3,3) :: H_sym, & + H integer(pInt) cp_en, & ! crystal plasticity element number i, & j, & @@ -356,6 +359,10 @@ subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchySt ! return the local stress and the jacobian from storage cauchyStress(:) = CPFEM_cs(:,IP,cp_en) jacobian(:,:) = CPFEM_dcsdE(:,:,IP,cp_en) + + ! copy P and dPdF to the output variables + pstress(:,:) = materialpoint_P(:,:,IP,cp_en) + dPdF(:,:,:,:) = materialpoint_dPdF(:,:,:,:,IP,cp_en) if (debugger .and. selectiveDebugger) then !$OMP CRITICAL (write2out) write(6,'(a16,x,i2,x,a2,x,i4,/,6(f10.3,x)/)') 'stress/MPa at ip', IP, 'el', cp_en, cauchyStress/1e6 diff --git a/code/mpie_cpfem_abaqus_exp.f b/code/mpie_cpfem_abaqus_exp.f index 209b4de6c..b0155ee05 100644 --- a/code/mpie_cpfem_abaqus_exp.f +++ b/code/mpie_cpfem_abaqus_exp.f @@ -159,7 +159,8 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, & dimension nElement(nblock),nMatPoint(nblock) character*80 cmname - + real(pReal), dimension (3,3) :: pstress ! not used, but needed for call of cpfem_general + real(pReal), dimension (3,3,3,3) :: dPdF ! not used, but needed for call of cpfem_general ! local variables real(pReal), dimension(3,3) :: defgrd0,defgrd1 real(pReal), dimension(6) :: stress @@ -241,7 +242,7 @@ subroutine vumat (jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, & defgrd1(3,2) = defgradNew(n,8) endif - call CPFEM_general(computationMode,defgrd0,defgrd1,temp,timeInc,nElement(n),nMatPoint(n),stress,ddsdde) + call CPFEM_general(computationMode,defgrd0,defgrd1,temp,timeInc,nElement(n),nMatPoint(n),stress,ddsdde, pstress, dPdF) ! Mandel: 11, 22, 33, SQRT(2)*12, SQRT(2)*23, SQRT(2)*13 ! straight: 11, 22, 33, 12, 23, 13 diff --git a/code/mpie_cpfem_abaqus_std.f b/code/mpie_cpfem_abaqus_std.f index e7d543927..9ab89b09f 100644 --- a/code/mpie_cpfem_abaqus_std.f +++ b/code/mpie_cpfem_abaqus_std.f @@ -117,6 +117,8 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& DFGRD0(3,3),DFGRD1(3,3) real(pReal) SSE, SPD, SCD, RPL, DRPLDT, DTIME, TEMP,& DTEMP, PNEWDT, CELENT + real(pReal), dimension (3,3) :: pstress ! not used, but needed for call of cpfem_general + real(pReal), dimension (3,3,3,3) :: dPdF ! not used, but needed for call of cpfem_general ! local variables real(pReal), dimension(6) :: stress_h @@ -209,7 +211,7 @@ subroutine UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,& !$OMP END CRITICAL (write2out) endif - call CPFEM_general(computationMode,dfgrd0,dfgrd1,temp,dtime,noel,npt,stress_h,ddsdde_h) + call CPFEM_general(computationMode,dfgrd0,dfgrd1,temp,dtime,noel,npt,stress_h,ddsdde_h, pstress, dPdF) ! Mandel: 11, 22, 33, SQRT(2)*12, SQRT(2)*23, SQRT(2)*13 ! straight: 11, 22, 33, 12, 23, 13 diff --git a/code/mpie_cpfem_marc.f90 b/code/mpie_cpfem_marc.f90 index 197f30884..aefd619cc 100644 --- a/code/mpie_cpfem_marc.f90 +++ b/code/mpie_cpfem_marc.f90 @@ -217,6 +217,9 @@ subroutine hypela2(& real(pReal), dimension(6) :: stress real(pReal), dimension(6,6) :: ddsdde + + real(pReal), dimension (3,3) :: pstress ! not used, but needed for call of cpfem_general + real(pReal), dimension (3,3,3,3) :: dPdF ! not used, but needed for call of cpfem_general integer(pInt) computationMode, i, cp_en @@ -286,7 +289,7 @@ subroutine hypela2(& lastMode = calcMode(nn,cp_en) ! record calculationMode endif - call CPFEM_general(computationMode,ffn,ffn1,t(1),timinc,n(1),nn,stress,ddsdde) + call CPFEM_general(computationMode,ffn,ffn1,t(1),timinc,n(1),nn,stress,ddsdde, pstress, dPdF) ! Mandel: 11, 22, 33, SQRT(2)*12, SQRT(2)*23, SQRT(2)*13 ! Marc: 11, 22, 33, 12, 23, 13