vectorized

There seems to be a bug in the interaction matrix, there should be no
transpose. However, the transpose recovers the old behavior (up to
machine precision)
This commit is contained in:
Martin Diehl 2020-03-16 16:02:14 +01:00
parent 8d5d31988a
commit 9d6bd1cb77
1 changed files with 4 additions and 5 deletions

View File

@ -706,9 +706,8 @@ module subroutine plastic_nonlocal_dependentState(F, Fp, ip, el)
myInteractionMatrix = prm%interactionSlipSlip myInteractionMatrix = prm%interactionSlipSlip
endif endif
forall (s = 1:ns) dst%tau_pass(s,of) = prm%mu * prm%burgers(s) & dst%tau_pass(:,of) = prm%mu * prm%burgers &
* sqrt(dot_product(sum(abs(rho),2), myInteractionMatrix(:,s))) * sqrt(matmul(transpose(myInteractionMatrix),sum(abs(rho),2))) ! ToDo: MD the transpose seems wrong here (cf other laws)
!*** calculate the dislocation stress of the neighboring excess dislocation densities !*** calculate the dislocation stress of the neighboring excess dislocation densities
!*** zero for material points of local plasticity !*** zero for material points of local plasticity
@ -754,8 +753,8 @@ module subroutine plastic_nonlocal_dependentState(F, Fp, ip, el)
connection_latticeConf(1:3,n) = matmul(invFe, discretization_IPcoords(1:3,neighbor_el+neighbor_ip-1) & connection_latticeConf(1:3,n) = matmul(invFe, discretization_IPcoords(1:3,neighbor_el+neighbor_ip-1) &
- discretization_IPcoords(1:3,el+neighbor_ip-1)) - discretization_IPcoords(1:3,el+neighbor_ip-1))
normal_latticeConf = matmul(transpose(invFp), IPareaNormal(1:3,n,ip,el)) normal_latticeConf = matmul(transpose(invFp), IPareaNormal(1:3,n,ip,el))
if (math_inner(normal_latticeConf,connection_latticeConf(1:3,n)) < 0.0_pReal) & ! neighboring connection points in opposite direction to face normal: must be periodic image if (math_inner(normal_latticeConf,connection_latticeConf(1:3,n)) < 0.0_pReal) & ! neighboring connection points in opposite direction to face normal: must be periodic image
connection_latticeConf(1:3,n) = normal_latticeConf * IPvolume(ip,el)/IParea(n,ip,el) ! instead take the surface normal scaled with the diameter of the cell connection_latticeConf(1:3,n) = normal_latticeConf * IPvolume(ip,el)/IParea(n,ip,el) ! instead take the surface normal scaled with the diameter of the cell
else else
! local neighbor or different lattice structure or different constitution instance -> use central values instead ! local neighbor or different lattice structure or different constitution instance -> use central values instead
connection_latticeConf(1:3,n) = 0.0_pReal connection_latticeConf(1:3,n) = 0.0_pReal