From 5a658d1b820bafd4f4870ac2e355b627b52c226a Mon Sep 17 00:00:00 2001 From: Christoph Kords Date: Thu, 26 Jan 2012 07:43:36 +0000 Subject: [PATCH] dislocation velocity output for each dislocation type (edge+,edge-,screw+,screw-) for fcc constitutive_nonlocal_kinetics is called only once and the result is used for each dislocation type, for all other lattice structures we have one call for each dislocation type --- code/config/material.config | 6 ++-- code/constitutive_nonlocal.f90 | 56 +++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/code/config/material.config b/code/config/material.config index 17c423fbb..bd325ae37 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -205,8 +205,10 @@ constitution nonlocal (output) rho_dot_flux (output) rho_dot_flux_edge (output) rho_dot_flux_screw -(output) velocity_edge -(output) velocity_screw +(output) velocity_edge_pos +(output) velocity_edge_neg +(output) velocity_screw_pos +(output) velocity_screw_neg (output) fluxDensity_edge_pos_x (output) fluxDensity_edge_pos_y (output) fluxDensity_edge_pos_z diff --git a/code/constitutive_nonlocal.f90 b/code/constitutive_nonlocal.f90 index e2f64bd47..47c780f3c 100644 --- a/code/constitutive_nonlocal.f90 +++ b/code/constitutive_nonlocal.f90 @@ -618,8 +618,10 @@ do i = 1,maxNinstance 'rho_dot_flux', & 'rho_dot_flux_edge', & 'rho_dot_flux_screw', & - 'velocity_edge', & - 'velocity_screw', & + 'velocity_edge_pos', & + 'velocity_edge_neg', & + 'velocity_screw_pos', & + 'velocity_screw_neg', & 'fluxdensity_edge_pos_x', & 'fluxdensity_edge_pos_y', & 'fluxdensity_edge_pos_z', & @@ -1438,11 +1440,20 @@ enddo !*** get dislocation velocity and its tangent and store the velocity in the state array -do t = 1,4 - c = (t-1)/2+1 - call constitutive_nonlocal_kinetics(v(1:ns,t), tau, c, Temperature, state, g, ip, el, dv_dtau(1:ns,t)) - state%p((12+t)*ns+1:(13+t)*ns) = v(1:ns,t) -enddo +if (myStructure == 1_pInt) then ! for fcc all velcities are equal + call constitutive_nonlocal_kinetics(v(1:ns,1), tau, 1, Temperature, state, g, ip, el, dv_dtau(1:ns,1)) + do t = 1,4 + v(1:ns,t) = v(1:ns,1) + dv_dtau(1:ns,t) = dv_dtau(1:ns,1) + state%p((12+t)*ns+1:(13+t)*ns) = v(1:ns,1) + enddo +else ! for all other lattice structures the velcities may vary with character and sign + do t = 1,4 + c = (t-1)/2+1 + call constitutive_nonlocal_kinetics(v(1:ns,t), tau, c, Temperature, state, g, ip, el, dv_dtau(1:ns,t)) + state%p((12+t)*ns+1:(13+t)*ns) = v(1:ns,t) + enddo +endif !*** Bauschinger effect @@ -1654,10 +1665,8 @@ forall (s = 1:ns, c = 1:2) & rhoForest = state(g,ip,el)%p(10*ns+1:11*ns) tauThreshold = state(g,ip,el)%p(11*ns+1:12*ns) tauBack = state(g,ip,el)%p(12*ns+1:13*ns) -v(1:ns,1) = state(g,ip,el)%p(13*ns+1:14*ns) -v(1:ns,2) = state(g,ip,el)%p(13*ns+1:14*ns) -v(1:ns,3) = state(g,ip,el)%p(14*ns+1:15*ns) -v(1:ns,4) = state(g,ip,el)%p(14*ns+1:15*ns) +forall (t = 1:4) & + v(1:ns,t) = state(g,ip,el)%p((12+t)*ns+1:(13+t)*ns) !*** sanity check for timestep @@ -1813,14 +1822,9 @@ if (.not. phase_localConstitution(material_phase(g,ip,el))) then endif if (considerEnteringFlux) then - neighboring_fluxdensity(1:ns,1) = state(g,neighboring_ip,neighboring_el)%p(1:ns) & - * state(g,neighboring_ip,neighboring_el)%p(13*ns+1:14*ns) - neighboring_fluxdensity(1:ns,2) = state(g,neighboring_ip,neighboring_el)%p(ns+1:2*ns) & - * state(g,neighboring_ip,neighboring_el)%p(13*ns+1:14*ns) - neighboring_fluxdensity(1:ns,3) = state(g,neighboring_ip,neighboring_el)%p(2*ns+1:3*ns) & - * state(g,neighboring_ip,neighboring_el)%p(14*ns+1:15*ns) - neighboring_fluxdensity(1:ns,4) = state(g,neighboring_ip,neighboring_el)%p(3*ns+1:4*ns) & - * state(g,neighboring_ip,neighboring_el)%p(14*ns+1:15*ns) + forall (t = 1:4) & + neighboring_fluxdensity(1:ns,t) = state(g,neighboring_ip,neighboring_el)%p((t-1)*ns+1:t*ns) & + * state(g,neighboring_ip,neighboring_el)%p((12+t)*ns+1:(13+t)*ns) normal_neighbor2me_defConf = math_det3x3(Favg) & * math_mul33x3(math_inv3x3(transpose(Favg)), mesh_ipAreaNormal(1:3,neighboring_n,neighboring_ip,neighboring_el)) ! calculate the normal of the interface in (average) deformed configuration (now pointing from my neighbor to me!!!) normal_neighbor2me = math_mul33x3(transpose(neighboring_Fe), normal_neighbor2me_defConf) / math_det3x3(neighboring_Fe) ! interface normal in the lattice configuration of my neighbor @@ -2631,7 +2635,7 @@ tauThreshold = state(g,ip,el)%p(11*ns+1:12*ns) tauBack = state(g,ip,el)%p(12*ns+1:13*ns) forall (t = 1:8) rhoDotSgl(1:ns,t) = dotState%p((t-1)*ns+1:t*ns) forall (c = 1:2) rhoDotDip(1:ns,c) = dotState%p((7+c)*ns+1:(8+c)*ns) -forall (t = 1:4) v(1:ns,t) = state(g,ip,el)%p((13+(t-1)/2)*ns+1:(14+(t-1)/2)*ns) +forall (t = 1:4) v(1:ns,t) = state(g,ip,el)%p((12+t)*ns+1:(13+t)*ns) !* Calculate shear rate @@ -2917,14 +2921,22 @@ do o = 1,phase_Noutput(material_phase(g,ip,el)) + sum(abs(constitutive_nonlocal_rhoDotFlux(1:ns,7:8,g,ip,el)),2) cs = cs + ns - case ('velocity_edge') + case ('velocity_edge_pos') constitutive_nonlocal_postResults(cs+1:cs+ns) = v(1:ns,1) cs = cs + ns - case ('velocity_screw') + case ('velocity_edge_neg') + constitutive_nonlocal_postResults(cs+1:cs+ns) = v(1:ns,2) + cs = cs + ns + + case ('velocity_screw_pos') constitutive_nonlocal_postResults(cs+1:cs+ns) = v(1:ns,3) cs = cs + ns + case ('velocity_screw_neg') + constitutive_nonlocal_postResults(cs+1:cs+ns) = v(1:ns,4) + cs = cs + ns + case ('fluxdensity_edge_pos_x') constitutive_nonlocal_postResults(cs+1:cs+ns) = rhoSgl(1:ns,1) * v(1:ns,1) * m_currentconf(1,1:ns,1) cs = cs + ns