corrected special treatment of periodic images in calculation of stress correction

This commit is contained in:
Christoph Kords 2012-03-15 10:08:08 +00:00
parent d4463fe56a
commit 7330031579
1 changed files with 11 additions and 14 deletions

View File

@ -973,8 +973,7 @@ real(pReal), dimension(3,3) :: invFe, & ! inverse of elast
invFp, & ! inverse of plastic deformation gradient invFp, & ! inverse of plastic deformation gradient
connections connections
real(pReal), dimension(3,FE_maxNipNeighbors) :: & real(pReal), dimension(3,FE_maxNipNeighbors) :: &
connection_latticeConf, & connection_latticeConf
areaNormal_latticeConf
real(pReal), dimension(2,constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: & real(pReal), dimension(2,constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el)))) :: &
rhoExcess rhoExcess
real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),2) :: & real(pReal), dimension(constitutive_nonlocal_totalNslip(phase_plasticityInstance(material_phase(g,ip,el))),2) :: &
@ -1010,9 +1009,9 @@ forall (s = 1_pInt:ns, c = 1_pInt:2_pInt) &
!*** (= projection of screw and edge dislocations) !*** (= projection of screw and edge dislocations)
forall (s = 1_pInt:ns) & forall (s = 1_pInt:ns) &
rhoForest(s) = dot_product((sum(abs(rhoSgl(1:ns,(/1,2,5,6/))),2) + rhoDip(1:ns,1)), & rhoForest(s) = dot_product((sum(abs(rhoSgl(1:ns,[1,2,5,6])),2) + rhoDip(1:ns,1)), &
constitutive_nonlocal_forestProjectionEdge(s,1:ns,instance)) & constitutive_nonlocal_forestProjectionEdge(s,1:ns,instance)) &
+ dot_product((sum(abs(rhoSgl(1:ns,(/3,4,7,8/))),2) + rhoDip(1:ns,2)), & + dot_product((sum(abs(rhoSgl(1:ns,[3,4,7,8])),2) + rhoDip(1:ns,2)), &
constitutive_nonlocal_forestProjectionScrew(s,1:ns,instance)) constitutive_nonlocal_forestProjectionScrew(s,1:ns,instance))
@ -1046,8 +1045,6 @@ if (.not. phase_localPlasticity(phase)) then
do n = 1_pInt,FE_NipNeighbors(mesh_element(2,el)) do n = 1_pInt,FE_NipNeighbors(mesh_element(2,el))
neighboring_el = mesh_ipNeighborhood(1,n,ip,el) neighboring_el = mesh_ipNeighborhood(1,n,ip,el)
neighboring_ip = mesh_ipNeighborhood(2,n,ip,el) neighboring_ip = mesh_ipNeighborhood(2,n,ip,el)
areaNormal_latticeConf(1:3,n) = detFp * math_mul33x3(math_transpose33(invFp), mesh_ipAreaNormal(1:3,n,ip,el)) ! calculate the normal of the interface in lattice configuration
areaNormal_latticeConf(1:3,n) = areaNormal_latticeConf(1:3,n) / math_norm3(areaNormal_latticeConf(1:3,n)) ! normalize the surface normal to unit length
if (neighboring_el > 0 .and. neighboring_ip > 0) then if (neighboring_el > 0 .and. neighboring_ip > 0) then
neighboring_phase = material_phase(g,neighboring_ip,neighboring_el) neighboring_phase = material_phase(g,neighboring_ip,neighboring_el)
neighboring_instance = phase_plasticityInstance(neighboring_phase) neighboring_instance = phase_plasticityInstance(neighboring_phase)
@ -1061,11 +1058,11 @@ if (.not. phase_localPlasticity(phase)) then
if (neighboring_el /= el .or. neighboring_ip /= ip) then if (neighboring_el /= el .or. neighboring_ip /= ip) then
connection_latticeConf(1:3,n) = math_mul33x3(invFe, neighboring_ipCoords - ipCoords) connection_latticeConf(1:3,n) = math_mul33x3(invFe, neighboring_ipCoords - ipCoords)
forall (s = 1_pInt:ns, c = 1_pInt:2_pInt) & forall (s = 1_pInt:ns, c = 1_pInt:2_pInt) &
neighboring_rhoExcess(c,s,n) = state(g,neighboring_ip,neighboring_el)%p((2_pInt*c-2_pInt)*ns+s) & ! positive mobiles neighboring_rhoExcess(c,s,n) = state(g,neighboring_ip,neighboring_el)%p((2_pInt*c-2_pInt)*ns+s) & ! positive mobiles
- state(g,neighboring_ip,neighboring_el)%p((2_pInt*c-1_pInt)*ns+s) ! negative mobiles - state(g,neighboring_ip,neighboring_el)%p((2_pInt*c-1_pInt)*ns+s) ! negative mobiles
else else
! thats myself! probably using periodic images ! thats myself! probably using periodic images -> assume constant excess density
connection_latticeConf(1:3,n) = 0.0_pReal connection_latticeConf(1:3,n) = math_mul33x3(math_transpose33(invFp), mesh_ipAreaNormal(1:3,n,ip,el)) ! direction of area normal
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
endif endif
else else
@ -1073,13 +1070,13 @@ if (.not. phase_localPlasticity(phase)) then
call IO_error(-1_pInt,ext_msg='different number of active slip systems in neighboring IPs of same crystal structure') call IO_error(-1_pInt,ext_msg='different number of active slip systems in neighboring IPs of same crystal structure')
endif endif
else else
! local neighbor or different lattice structure or different plasticity instance ! local neighbor or different lattice structure or different constitution instance -> use central values instead
connection_latticeConf(1:3,n) = 0.0_pReal ! use central values instead connection_latticeConf(1:3,n) = 0.0_pReal
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
endif endif
else else
! free surface ! free surface -> use central values instead
connection_latticeConf(1:3,n) = 0.0_pReal ! use central values instead connection_latticeConf(1:3,n) = 0.0_pReal
neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess neighboring_rhoExcess(1:2,1:ns,n) = rhoExcess
endif endif
enddo enddo