don't parse material.config any more

This commit is contained in:
Martin Diehl 2019-02-20 19:03:20 +01:00
parent 6f135ea632
commit 2d51c0595b
3 changed files with 80 additions and 165 deletions

View File

@ -137,11 +137,6 @@ subroutine constitutive_init()
logical :: knownPlasticity, knownSource, nonlocalConstitutionPresent logical :: knownPlasticity, knownSource, nonlocalConstitutionPresent
nonlocalConstitutionPresent = .false. nonlocalConstitutionPresent = .false.
!--------------------------------------------------------------------------------------------------
! open material.config
if (.not. IO_open_jobFile_stat(FILEUNIT,material_localFileExt)) & ! no local material configuration present...
call IO_open_file(FILEUNIT,material_configFile) ! ... open material.config file
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! parse plasticities from config file ! parse plasticities from config file
if (any(phase_plasticity == PLASTICITY_NONE_ID)) call plastic_none_init if (any(phase_plasticity == PLASTICITY_NONE_ID)) call plastic_none_init
@ -150,12 +145,16 @@ subroutine constitutive_init()
if (any(phase_plasticity == PLASTICITY_KINEHARDENING_ID)) call plastic_kinehardening_init if (any(phase_plasticity == PLASTICITY_KINEHARDENING_ID)) call plastic_kinehardening_init
if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call plastic_dislotwin_init if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call plastic_dislotwin_init
if (any(phase_plasticity == PLASTICITY_DISLOUCLA_ID)) call plastic_disloucla_init if (any(phase_plasticity == PLASTICITY_DISLOUCLA_ID)) call plastic_disloucla_init
if (any(phase_plasticity == PLASTICITY_NONLOCAL_ID)) call plastic_nonlocal_init(FILEUNIT) if (any(phase_plasticity == PLASTICITY_NONLOCAL_ID)) call plastic_nonlocal_init
!--------------------------------------------------------------------------------------------------
! open material.config
if (.not. IO_open_jobFile_stat(FILEUNIT,material_localFileExt)) & ! no local material configuration present...
call IO_open_file(FILEUNIT,material_configFile) ! ... open material.config file
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! parse source mechanisms from config file ! parse source mechanisms from config file
call IO_checkAndRewind(FILEUNIT)
if (any(phase_source == SOURCE_thermal_dissipation_ID)) call source_thermal_dissipation_init(FILEUNIT) if (any(phase_source == SOURCE_thermal_dissipation_ID)) call source_thermal_dissipation_init(FILEUNIT)
if (any(phase_source == SOURCE_thermal_externalheat_ID)) call source_thermal_externalheat_init(FILEUNIT) if (any(phase_source == SOURCE_thermal_externalheat_ID)) call source_thermal_externalheat_init(FILEUNIT)
if (any(phase_source == SOURCE_damage_isoBrittle_ID)) call source_damage_isoBrittle_init if (any(phase_source == SOURCE_damage_isoBrittle_ID)) call source_damage_isoBrittle_init

View File

@ -550,7 +550,10 @@ module lattice
lattice_forestProjection_screw, & lattice_forestProjection_screw, &
lattice_slipProjection_modeI, & lattice_slipProjection_modeI, &
lattice_slipProjection_modeII, & lattice_slipProjection_modeII, &
lattice_slipProjection_modeIII lattice_slipProjection_modeIII, &
lattice_slip_normal, &
lattice_slip_direction, &
lattice_slip_transverse
contains contains

View File

@ -42,14 +42,6 @@ module plastic_nonlocal
slipSystemLattice, & !< lookup table relating active slip system index to lattice slip system index for each instance slipSystemLattice, & !< lookup table relating active slip system index to lattice slip system index for each instance
colinearSystem !< colinear system to the active slip system (only valid for fcc!) colinearSystem !< colinear system to the active slip system (only valid for fcc!)
real(pReal), dimension(:), allocatable, private :: &
rhoSglScatter, & !< standard deviation of scatter in initial dislocation density
rhoSglRandom, &
rhoSglRandomBinning
real(pReal), dimension(:,:), allocatable, private :: &
lambda0PerSlipFamily, & !< mean free path prefactor
lambda0 !< mean free path prefactor
real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: &
compatibility !< slip system compatibility between me and my neighbors compatibility !< slip system compatibility between me and my neighbors
@ -141,6 +133,9 @@ module plastic_nonlocal
burgers !< absolute length of burgers vector [m] for each slip system and instance burgers !< absolute length of burgers vector [m] for each slip system and instance
real(pReal), dimension(:,:), allocatable :: & real(pReal), dimension(:,:), allocatable :: &
slip_normal, &
slip_direction, &
slip_transverse, &
minDipoleHeight, & ! edge and screw minDipoleHeight, & ! edge and screw
peierlsstress, & ! edge and screw peierlsstress, & ! edge and screw
interactionSlipSlip ,& !< coefficients for slip-slip interaction for each interaction type and instance interactionSlipSlip ,& !< coefficients for slip-slip interaction for each interaction type and instance
@ -244,28 +239,18 @@ contains
!> @brief module initialization !> @brief module initialization
!> @details reads in material parameters, allocates arrays, and does sanity checks !> @details reads in material parameters, allocates arrays, and does sanity checks
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
subroutine plastic_nonlocal_init(fileUnit) subroutine plastic_nonlocal_init
use prec, only: dEq use prec, only: dEq
use math, only: math_Voigt66to3333, & use math, only: math_Voigt66to3333, &
math_mul3x3, & math_mul3x3, &
math_expand math_expand
use IO, only: IO_read, & use IO, only: IO_error
IO_lc, &
IO_getTag, &
IO_isBlank, &
IO_stringPos, &
IO_stringValue, &
IO_floatValue, &
IO_intValue, &
IO_warning, &
IO_error, &
IO_EOF
use debug, only: debug_level, & use debug, only: debug_level, &
debug_constitutive, & debug_constitutive, &
debug_levelBasic debug_levelBasic
use mesh, only: theMesh use mesh, only: theMesh
use material, only: phase_plasticity, & use material, only: phase_plasticity, &
homogenization_maxNgrains, &
phase_plasticityInstance, & phase_plasticityInstance, &
phase_Noutput, & phase_Noutput, &
PLASTICITY_NONLOCAL_label, & PLASTICITY_NONLOCAL_label, &
@ -279,30 +264,24 @@ use lattice
implicit none implicit none
integer(pInt), intent(in) :: fileUnit
character(len=65536), dimension(0), parameter :: emptyStringArray = [character(len=65536)::] character(len=65536), dimension(0), parameter :: emptyStringArray = [character(len=65536)::]
integer(pInt), dimension(0), parameter :: emptyInt = [integer(pInt)::] integer(pInt), dimension(0), parameter :: emptyInt = [integer(pInt)::]
real(pReal), dimension(0), parameter :: emptyRealArray = [real(pReal)::] real(pReal), dimension(0), parameter :: emptyRealArray = [real(pReal)::]
!*** local variables !*** local variables
integer(pInt), allocatable, dimension(:) :: chunkPos integer(pInt) :: ns, phase, &
integer(pInt) :: phase, &
maxNinstances, & maxNinstances, &
maxTotalNslip, p, i, & maxTotalNslip, p, i, &
f, & ! index of my slip family f, & ! index of my slip family
instance, & ! index of my instance of this plasticity instance, & ! index of my instance of this plasticity
l, & l, &
ns, & ! short notation for total number of active slip systems for the current instance
o, & ! index of my output o, & ! index of my output
s, & ! index of my slip system s, & ! index of my slip system
s1, & ! index of my slip system s1, & ! index of my slip system
s2, & ! index of my slip system s2, & ! index of my slip system
t, & ! index of dislocation type t, & ! index of dislocation type
c, & ! index of dislocation character c ! index of dislocation character
Nchunks_SlipFamilies
character(len=65536) :: &
tag = '', &
line = ''
integer(pInt) :: sizeState, sizeDotState,sizeDependentState, sizeDeltaState integer(pInt) :: sizeState, sizeDotState,sizeDependentState, sizeDeltaState
integer(kind(undefined_ID)) :: & integer(kind(undefined_ID)) :: &
@ -337,79 +316,15 @@ allocate(Nslip(lattice_maxNslipFamily,maxNinstances), source=0_pInt)
allocate(slipFamily(lattice_maxNslip,maxNinstances), source=0_pInt) allocate(slipFamily(lattice_maxNslip,maxNinstances), source=0_pInt)
allocate(slipSystemLattice(lattice_maxNslip,maxNinstances), source=0_pInt) allocate(slipSystemLattice(lattice_maxNslip,maxNinstances), source=0_pInt)
allocate(totalNslip(maxNinstances), source=0_pInt) allocate(totalNslip(maxNinstances), source=0_pInt)
allocate(rhoSglScatter(maxNinstances), source=0.0_pReal)
allocate(rhoSglRandom(maxNinstances), source=0.0_pReal)
allocate(rhoSglRandomBinning(maxNinstances), source=1.0_pReal)
allocate(lambda0PerSlipFamily(lattice_maxNslipFamily,maxNinstances), source=0.0_pReal)
rewind(fileUnit) do p=1_pInt, size(config_phase)
phase = 0_pInt if (phase_plasticity(p) /= PLASTICITY_NONLOCAL_ID) cycle
do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= MATERIAL_partPhase) ! wind forward to <phase> instance = phase_plasticityInstance(p)
line = IO_read(fileUnit) param(instance)%Nslip = config_phase(p)%getInts('nslip',defaultVal=emptyInt)
enddo Nslip(1:size(param(instance)%Nslip),instance) = param(instance)%Nslip
totalNslip(instance) = sum(Nslip(1:lattice_maxNslipFamily,instance))
parsingFile: do while (trim(line) /= IO_EOF) ! read through phases of phase part enddo
line = IO_read(fileUnit)
if (IO_isBlank(line)) cycle ! skip empty lines
if (IO_getTag(line,'<','>') /= '') then ! stop at next part
line = IO_read(fileUnit, .true.) ! reset IO_read
exit
endif
if (IO_getTag(line,'[',']') /= '') then ! next phase
phase = phase + 1_pInt ! advance phase section counter
if (phase_plasticity(phase) == PLASTICITY_NONLOCAL_ID) &
Nchunks_SlipFamilies = count(lattice_NslipSystem(:,phase) > 0_pInt)
cycle
endif
if (phase > 0_pInt ) then; if (phase_plasticity(phase) == PLASTICITY_NONLOCAL_ID) then ! one of my phases. do not short-circuit here (.and. with next if statement). It's not safe in Fortran
instance = phase_plasticityInstance(phase) ! which instance of my plasticity is present phase
chunkPos = IO_stringPos(line)
tag = IO_lc(IO_stringValue(line,chunkPos,1_pInt)) ! extract key
select case(tag)
case ('nslip')
if (chunkPos(1) < 1_pInt + Nchunks_SlipFamilies) &
call IO_warning(50_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_NONLOCAL_LABEL//')')
Nchunks_SlipFamilies = chunkPos(1) - 1_pInt
do f = 1_pInt, Nchunks_SlipFamilies
Nslip(f,instance) = IO_intValue(line,chunkPos,1_pInt+f)
enddo
case ('lambda0')
do f = 1_pInt, Nchunks_SlipFamilies
lambda0PerSlipFamily(f,instance) = IO_floatValue(line,chunkPos,1_pInt+f)
enddo
case('rhosglscatter')
rhoSglScatter(instance) = IO_floatValue(line,chunkPos,2_pInt)
case('rhosglrandom')
rhoSglRandom(instance) = IO_floatValue(line,chunkPos,2_pInt)
case('rhosglrandombinning')
rhoSglRandomBinning(instance) = IO_floatValue(line,chunkPos,2_pInt)
end select
endif; endif
enddo parsingFile
sanityChecks: do phase = 1_pInt, size(phase_plasticity)
myPhase: if (phase_plasticity(phase) == PLASTICITY_NONLOCAL_ID) then
instance = phase_plasticityInstance(phase)
if (sum(Nslip(:,instance)) <= 0_pInt) &
call IO_error(211_pInt,ext_msg='Nslip ('//PLASTICITY_NONLOCAL_label//')')
do f = 1_pInt,lattice_maxNslipFamily
if (Nslip(f,instance) > 0_pInt) then
if (lambda0PerSlipFamily(f,instance) <= 0.0_pReal) &
call IO_error(211_pInt,ext_msg='lambda0 ('//PLASTICITY_NONLOCAL_label//')')
endif
enddo
if (rhoSglScatter(instance) < 0.0_pReal) &
call IO_error(211_pInt,ext_msg='rhoSglScatter ('//PLASTICITY_NONLOCAL_label//')')
if (rhoSglRandom(instance) < 0.0_pReal) &
call IO_error(211_pInt,ext_msg='rhoSglRandom ('//PLASTICITY_NONLOCAL_label//')')
if (rhoSglRandomBinning(instance) <= 0.0_pReal) &
call IO_error(211_pInt,ext_msg='rhoSglRandomBinning ('//PLASTICITY_NONLOCAL_label//')')
totalNslip(instance) = sum(Nslip(1:lattice_maxNslipFamily,instance))
endif myPhase
enddo sanityChecks
!*** allocation of variables whose size depends on the total number of active slip systems !*** allocation of variables whose size depends on the total number of active slip systems
@ -426,8 +341,6 @@ allocate(iRhoF(maxTotalNslip,maxNinstances), source=0_pInt)
allocate(iTauF(maxTotalNslip,maxNinstances), source=0_pInt) allocate(iTauF(maxTotalNslip,maxNinstances), source=0_pInt)
allocate(iTauB(maxTotalNslip,maxNinstances), source=0_pInt) allocate(iTauB(maxTotalNslip,maxNinstances), source=0_pInt)
allocate(lambda0(maxTotalNslip,maxNinstances), source=0.0_pReal)
allocate(compatibility(2,maxTotalNslip,maxTotalNslip,theMesh%elem%nIPneighbors,theMesh%elem%nIPs,theMesh%nElems), & allocate(compatibility(2,maxTotalNslip,maxTotalNslip,theMesh%elem%nIPneighbors,theMesh%elem%nIPs,theMesh%nElems), &
source=0.0_pReal) source=0.0_pReal)
@ -552,10 +465,6 @@ allocate(colinearSystem(maxTotalNslip,maxNinstances),
do s1 = 1_pInt,ns do s1 = 1_pInt,ns
f = slipFamily(s1,instance) f = slipFamily(s1,instance)
!*** burgers vector, mean free path prefactor and minimum dipole distance for each slip system
lambda0(s1,instance) = lambda0PerSlipFamily(f,instance)
do s2 = 1_pInt,ns do s2 = 1_pInt,ns
!*** colinear slip system (only makes sense for fcc like it is defined here) !*** colinear slip system (only makes sense for fcc like it is defined here)
@ -588,7 +497,7 @@ allocate(colinearSystem(maxTotalNslip,maxNinstances),
param(instance)%shortRangeStressCorrection = .false. param(instance)%shortRangeStressCorrection = .false.
prm%Nslip = config_phase(p)%getInts('nslip',defaultVal=emptyInt)
prm%totalNslip = sum(prm%Nslip) prm%totalNslip = sum(prm%Nslip)
prm%Schmid = lattice_SchmidMatrix_slip(prm%Nslip,structure(1:3),& prm%Schmid = lattice_SchmidMatrix_slip(prm%Nslip,structure(1:3),&
config%getFloat('c/a',defaultVal=0.0_pReal)) config%getFloat('c/a',defaultVal=0.0_pReal))
@ -661,6 +570,13 @@ param(instance)%shortRangeStressCorrection = .false.
prm%q = config_phase(p)%getFloat('q') prm%q = config_phase(p)%getFloat('q')
prm%slip_direction = lattice_slip_direction(prm%Nslip,config%getString('lattice_structure'),&
config%getFloat('c/a',defaultVal=0.0_pReal))
prm%slip_transverse = lattice_slip_transverse(prm%Nslip,config%getString('lattice_structure'),&
config%getFloat('c/a',defaultVal=0.0_pReal))
prm%slip_normal = lattice_slip_normal(prm%Nslip,config%getString('lattice_structure'),&
config%getFloat('c/a',defaultVal=0.0_pReal))
prm%minDipoleHeight_edge = math_expand(prm%minDipoleHeight_edge,prm%Nslip) prm%minDipoleHeight_edge = math_expand(prm%minDipoleHeight_edge,prm%Nslip)
prm%minDipoleHeight_screw = math_expand(prm%minDipoleHeight_screw,prm%Nslip) prm%minDipoleHeight_screw = math_expand(prm%minDipoleHeight_screw,prm%Nslip)
allocate(prm%minDipoleHeight(prm%totalNslip,2)) allocate(prm%minDipoleHeight(prm%totalNslip,2))
@ -726,7 +642,12 @@ extmsg = trim(extmsg)//' surfaceTransmissivity'
! if (peierlsStressPerSlipFamily(f,2,instance) <= 0.0_pReal) & ! if (peierlsStressPerSlipFamily(f,2,instance) <= 0.0_pReal) &
! call IO_error(211_pInt,ext_msg='peierlsStressScrew ('//PLASTICITY_NONLOCAL_label//')') ! call IO_error(211_pInt,ext_msg='peierlsStressScrew ('//PLASTICITY_NONLOCAL_label//')')
! do f = 1_pInt,lattice_maxNslipFamily
! if (Nslip(f,instance) > 0_pInt) then
! if (lambda0PerSlipFamily(f,instance) <= 0.0_pReal) &
! call IO_error(211_pInt,ext_msg='lambda0 ('//PLASTICITY_NONLOCAL_label//')')
! endif
! enddo
! if (rhoSglEdgePos0(f,instance) < 0.0_pReal) & ! if (rhoSglEdgePos0(f,instance) < 0.0_pReal) &
! call IO_error(211_pInt,ext_msg='rhoSglEdgePos0 ('//PLASTICITY_NONLOCAL_label//')') ! call IO_error(211_pInt,ext_msg='rhoSglEdgePos0 ('//PLASTICITY_NONLOCAL_label//')')
! if (rhoSglEdgeNeg0(f,instance) < 0.0_pReal) & ! if (rhoSglEdgeNeg0(f,instance) < 0.0_pReal) &
@ -739,6 +660,14 @@ extmsg = trim(extmsg)//' surfaceTransmissivity'
! call IO_error(211_pInt,ext_msg='rhoDipEdge0 ('//PLASTICITY_NONLOCAL_label//')') ! call IO_error(211_pInt,ext_msg='rhoDipEdge0 ('//PLASTICITY_NONLOCAL_label//')')
! if (rhoDipScrew0(f,instance) < 0.0_pReal) & ! if (rhoDipScrew0(f,instance) < 0.0_pReal) &
! call IO_error(211_pInt,ext_msg='rhoDipScrew0 ('//PLASTICITY_NONLOCAL_label//')') ! call IO_error(211_pInt,ext_msg='rhoDipScrew0 ('//PLASTICITY_NONLOCAL_label//')')
! if (rhoSglScatter(instance) < 0.0_pReal) &
! call IO_error(211_pInt,ext_msg='rhoSglScatter ('//PLASTICITY_NONLOCAL_label//')')
! if (rhoSglRandom(instance) < 0.0_pReal) &
! call IO_error(211_pInt,ext_msg='rhoSglRandom ('//PLASTICITY_NONLOCAL_label//')')
! if (rhoSglRandomBinning(instance) <= 0.0_pReal) &
! call IO_error(211_pInt,ext_msg='rhoSglRandomBinning ('//PLASTICITY_NONLOCAL_label//')')
outputs = config_phase(p)%getStrings('(output)',defaultVal=emptyStringArray) outputs = config_phase(p)%getStrings('(output)',defaultVal=emptyStringArray)
allocate(prm%outputID(0)) allocate(prm%outputID(0))
@ -1052,11 +981,9 @@ use material, only: &
phaseAt, phasememberAt, & phaseAt, phasememberAt, &
phase_plasticityInstance phase_plasticityInstance
use lattice, only: & use lattice, only: &
lattice_sd, &
lattice_st, &
lattice_structure, &
LATTICE_bcc_ID, & LATTICE_bcc_ID, &
LATTICE_fcc_ID LATTICE_fcc_ID, &
lattice_structure
implicit none implicit none
@ -1072,13 +999,10 @@ real(pReal), dimension(3,3), intent(in) :: &
np, & !< neighbor phase np, & !< neighbor phase
no !< nieghbor offset no !< nieghbor offset
integer(pInt) neighbor_el, & ! element number of neighboring material point integer(pInt) ns, neighbor_el, & ! element number of neighboring material point
neighbor_ip, & ! integration point of neighboring material point neighbor_ip, & ! integration point of neighboring material point
instance, & ! my instance of this plasticity instance, & ! my instance of this plasticity
neighbor_instance, & ! instance of this plasticity of neighboring material point neighbor_instance, & ! instance of this plasticity of neighboring material point
neighbor_phase, &
ns, & ! total number of active slip systems at my material point
neighbor_ns, & ! total number of active slip systems at neighboring material point
c, & ! index of dilsocation character (edge, screw) c, & ! index of dilsocation character (edge, screw)
s, & ! slip system index s, & ! slip system index
t, & ! index of dilsocation type (e+, e-, s+, s-, used e+, used e-, used s+, used s-) t, & ! index of dilsocation type (e+, e-, s+, s-, used e+, used e-, used s+, used s-)
@ -1243,8 +1167,8 @@ if (.not. phase_localPlasticity(ph) .and. prm%shortRangeStressCorrection) then
!* 1. interpolation of the excess density in the neighorhood !* 1. interpolation of the excess density in the neighorhood
!* 2. interpolation of the dead dislocation density in the central volume !* 2. interpolation of the dead dislocation density in the central volume
m(1:3,1:ns,1) = lattice_sd(1:3,slipSystemLattice(1:ns,instance),ph) m(1:3,1:ns,1) = prm%slip_direction
m(1:3,1:ns,2) = -lattice_st(1:3,slipSystemLattice(1:ns,instance),ph) m(1:3,1:ns,2) = -prm%slip_transverse
do s = 1_pInt,ns do s = 1_pInt,ns
@ -1656,8 +1580,7 @@ integer(pInt) ::instance, & ! current instance of this plasticity
ns, & ! short notation for the total number of active slip systems ns, & ! short notation for the total number of active slip systems
c, & ! character of dislocation c, & ! character of dislocation
t, & ! type of dislocation t, & ! type of dislocation
s, & ! index of my current slip system s ! index of my current slip system
sLattice ! index of my current slip system according to lattice order
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1,ip,el))),10) :: & real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1,ip,el))),10) :: &
deltaRho, & ! density increment deltaRho, & ! density increment
deltaRhoRemobilization, & ! density increment by remobilization deltaRhoRemobilization, & ! density increment by remobilization
@ -1841,9 +1764,7 @@ use material, only: homogenization_maxNgrains, &
phaseAt, phasememberAt, & phaseAt, phasememberAt, &
phase_plasticity ,& phase_plasticity ,&
PLASTICITY_NONLOCAL_ID PLASTICITY_NONLOCAL_ID
use lattice, only: lattice_sd, & use lattice, only: lattice_structure, &
lattice_st ,&
lattice_structure, &
LATTICE_bcc_ID, & LATTICE_bcc_ID, &
LATTICE_fcc_ID LATTICE_fcc_ID
@ -1894,7 +1815,6 @@ real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1_pInt
rhoSgl, & !< current single dislocation densities (positive/negative screw and edge without dipoles) rhoSgl, & !< current single dislocation densities (positive/negative screw and edge without dipoles)
rhoSglOriginal, & rhoSglOriginal, &
neighbor_rhoSgl, & !< current single dislocation densities of neighboring ip (positive/negative screw and edge without dipoles) neighbor_rhoSgl, & !< current single dislocation densities of neighboring ip (positive/negative screw and edge without dipoles)
rhoSgl0, & !< single dislocation densities at start of cryst inc (positive/negative screw and edge without dipoles)
my_rhoSgl !< single dislocation densities of central ip (positive/negative screw and edge without dipoles) my_rhoSgl !< single dislocation densities of central ip (positive/negative screw and edge without dipoles)
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1_pInt,ip,el))),4) :: & real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1_pInt,ip,el))),4) :: &
v, & !< current dislocation glide velocity v, & !< current dislocation glide velocity
@ -1906,8 +1826,8 @@ real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1_pInt
tauThreshold, & !< threshold shear stress tauThreshold, & !< threshold shear stress
tau, & !< current resolved shear stress tau, & !< current resolved shear stress
tauBack, & !< current back stress from pileups on same slip system tauBack, & !< current back stress from pileups on same slip system
vClimb, & !< climb velocity of edge dipoles vClimb !< climb velocity of edge dipoles
nSources
real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1_pInt,ip,el))),2) :: & real(pReal), dimension(totalNslip(phase_plasticityInstance(material_phase(1_pInt,ip,el))),2) :: &
rhoDip, & !< current dipole dislocation densities (screw and edge dipoles) rhoDip, & !< current dipole dislocation densities (screw and edge dipoles)
rhoDipOriginal, & rhoDipOriginal, &
@ -1927,9 +1847,8 @@ real(pReal), dimension(3) :: normal_neighbor2me, &
real(pReal) area, & !< area of the current interface real(pReal) area, & !< area of the current interface
transmissivity, & !< overall transmissivity of dislocation flux to neighboring material point transmissivity, & !< overall transmissivity of dislocation flux to neighboring material point
lineLength, & !< dislocation line length leaving the current interface lineLength, & !< dislocation line length leaving the current interface
selfDiffusion, & !< self diffusion selfDiffusion !< self diffusion
rnd, &
meshlength
logical considerEnteringFlux, & logical considerEnteringFlux, &
considerLeavingFlux considerLeavingFlux
@ -2033,17 +1952,17 @@ rhoDotMultiplication = 0.0_pReal
if (lattice_structure(ph) == LATTICE_bcc_ID) then ! BCC if (lattice_structure(ph) == LATTICE_bcc_ID) then ! BCC
forall (s = 1:ns, sum(abs(v(s,1:4))) > 0.0_pReal) forall (s = 1:ns, sum(abs(v(s,1:4))) > 0.0_pReal)
rhoDotMultiplication(s,1:2) = sum(abs(gdot(s,3:4))) / prm%burgers(s) & ! assuming double-cross-slip of screws to be decisive for multiplication rhoDotMultiplication(s,1:2) = sum(abs(gdot(s,3:4))) / prm%burgers(s) & ! assuming double-cross-slip of screws to be decisive for multiplication
* sqrt(rhoForest(s)) / lambda0(s,instance) ! & ! mean free path * sqrt(rhoForest(s)) / prm%lambda0(s) ! & ! mean free path
! * 2.0_pReal * sum(abs(v(s,3:4))) / sum(abs(v(s,1:4))) ! ratio of screw to overall velocity determines edge generation ! * 2.0_pReal * sum(abs(v(s,3:4))) / sum(abs(v(s,1:4))) ! ratio of screw to overall velocity determines edge generation
rhoDotMultiplication(s,3:4) = sum(abs(gdot(s,3:4))) /prm%burgers(s) & ! assuming double-cross-slip of screws to be decisive for multiplication rhoDotMultiplication(s,3:4) = sum(abs(gdot(s,3:4))) /prm%burgers(s) & ! assuming double-cross-slip of screws to be decisive for multiplication
* sqrt(rhoForest(s)) / lambda0(s,instance) ! & ! mean free path * sqrt(rhoForest(s)) / prm%lambda0(s) ! & ! mean free path
! * 2.0_pReal * sum(abs(v(s,1:2))) / sum(abs(v(s,1:4))) ! ratio of edge to overall velocity determines screw generation ! * 2.0_pReal * sum(abs(v(s,1:2))) / sum(abs(v(s,1:4))) ! ratio of edge to overall velocity determines screw generation
endforall endforall
else ! ALL OTHER STRUCTURES else ! ALL OTHER STRUCTURES
rhoDotMultiplication(1:ns,1:4) = spread( & rhoDotMultiplication(1:ns,1:4) = spread( &
(sum(abs(gdot(1:ns,1:2)),2) * prm%fEdgeMultiplication + sum(abs(gdot(1:ns,3:4)),2)) & (sum(abs(gdot(1:ns,1:2)),2) * prm%fEdgeMultiplication + sum(abs(gdot(1:ns,3:4)),2)) &
* sqrt(rhoForest(1:ns)) / lambda0(1:ns,instance) / prm%burgers(1:ns), 2, 4) * sqrt(rhoForest(1:ns)) / prm%lambda0 / prm%burgers(1:ns), 2, 4)
endif endif
@ -2079,10 +1998,10 @@ if (.not. phase_localPlasticity(material_phase(1_pInt,ip,el))) then
!*** be aware of the definition of lattice_st = lattice_sd x lattice_sn !!! !*** be aware of the definition of lattice_st = lattice_sd x lattice_sn !!!
!*** opposite sign to our p vector in the (s,p,n) triplet !!! !*** opposite sign to our p vector in the (s,p,n) triplet !!!
m(1:3,1:ns,1) = lattice_sd(1:3, slipSystemLattice(1:ns,instance), ph) m(1:3,1:ns,1) = prm%slip_direction
m(1:3,1:ns,2) = -lattice_sd(1:3, slipSystemLattice(1:ns,instance), ph) m(1:3,1:ns,2) = -prm%slip_direction
m(1:3,1:ns,3) = -lattice_st(1:3, slipSystemLattice(1:ns,instance), ph) m(1:3,1:ns,3) = -prm%slip_transverse
m(1:3,1:ns,4) = lattice_st(1:3, slipSystemLattice(1:ns,instance), ph) m(1:3,1:ns,4) = prm%slip_transverse
my_Fe = Fe(1:3,1:3,1_pInt,ip,el) my_Fe = Fe(1:3,1:3,1_pInt,ip,el)
my_F = math_mul33x33(my_Fe, Fp(1:3,1:3,1_pInt,ip,el)) my_F = math_mul33x33(my_Fe, Fp(1:3,1:3,1_pInt,ip,el))
@ -2293,7 +2212,6 @@ rhoDot = rhoDotFlux &
+ rhoDotThermalAnnihilation + rhoDotThermalAnnihilation
results(instance)%rhoDotFlux(1:ns,1:8,o) = rhoDotFlux(1:ns,1:8) results(instance)%rhoDotFlux(1:ns,1:8,o) = rhoDotFlux(1:ns,1:8)
results(instance)%rhoDotMultiplication(1:ns,1:2,o) = rhoDotMultiplication(1:ns,[1,3]) results(instance)%rhoDotMultiplication(1:ns,1:2,o) = rhoDotMultiplication(1:ns,[1,3])
results(instance)%rhoDotSingle2DipoleGlide(1:ns,1:2,o) = rhoDotSingle2DipoleGlide(1:ns,9:10) results(instance)%rhoDotSingle2DipoleGlide(1:ns,1:2,o) = rhoDotSingle2DipoleGlide(1:ns,9:10)
results(instance)%rhoDotAthermalAnnihilation(1:ns,1:2,o) = rhoDotAthermalAnnihilation(1:ns,9:10) results(instance)%rhoDotAthermalAnnihilation(1:ns,1:2,o) = rhoDotAthermalAnnihilation(1:ns,9:10)
@ -2368,9 +2286,7 @@ use material, only: material_phase, &
homogenization_maxNgrains homogenization_maxNgrains
use mesh, only: mesh_ipNeighborhood, & use mesh, only: mesh_ipNeighborhood, &
theMesh theMesh
use lattice, only: lattice_sn, & use lattice, only: lattice_qDisorientation
lattice_sd, &
lattice_qDisorientation
implicit none implicit none
@ -2398,10 +2314,7 @@ real(pReal), dimension(2,totalNslip(phase_plasticityInstance(material_phase(1,i,
totalNslip(phase_plasticityInstance(material_phase(1,i,e))),& totalNslip(phase_plasticityInstance(material_phase(1,i,e))),&
theMesh%elem%nIPneighbors) :: & theMesh%elem%nIPneighbors) :: &
my_compatibility ! my_compatibility for current element and ip my_compatibility ! my_compatibility for current element and ip
real(pReal), dimension(3,totalNslip(phase_plasticityInstance(material_phase(1,i,e)))) :: & real(pReal) :: my_compatibilitySum, &
slipNormal, &
slipDirection
real(pReal) my_compatibilitySum, &
thresholdValue, & thresholdValue, &
nThresholdValues nThresholdValues
logical, dimension(totalNslip(phase_plasticityInstance(material_phase(1,i,e)))) :: & logical, dimension(totalNslip(phase_plasticityInstance(material_phase(1,i,e)))) :: &
@ -2413,8 +2326,6 @@ ph = material_phase(1,i,e)
textureID = material_texture(1,i,e) textureID = material_texture(1,i,e)
instance = phase_plasticityInstance(ph) instance = phase_plasticityInstance(ph)
ns = totalNslip(instance) ns = totalNslip(instance)
slipNormal(1:3,1:ns) = lattice_sn(1:3, slipSystemLattice(1:ns,instance), ph)
slipDirection(1:3,1:ns) = lattice_sd(1:3, slipSystemLattice(1:ns,instance), ph)
associate(prm => param(instance)) associate(prm => param(instance))
!*** start out fully compatible !*** start out fully compatible
@ -2480,10 +2391,14 @@ neighbors: do n = 1_pInt,Nneighbors
orientation(1:4,1,neighbor_i,neighbor_e)) ! no symmetry orientation(1:4,1,neighbor_i,neighbor_e)) ! no symmetry
mySlipSystems: do s1 = 1_pInt,ns mySlipSystems: do s1 = 1_pInt,ns
neighborSlipSystems: do s2 = 1_pInt,ns neighborSlipSystems: do s2 = 1_pInt,ns
my_compatibility(1,s2,s1,n) = math_mul3x3(slipNormal(1:3,s1), math_qRot(absoluteMisorientation, slipNormal(1:3,s2))) & my_compatibility(1,s2,s1,n) = math_mul3x3(prm%slip_normal(1:3,s1), &
* abs(math_mul3x3(slipDirection(1:3,s1), math_qRot(absoluteMisorientation, slipDirection(1:3,s2)))) math_qRot(absoluteMisorientation, prm%slip_normal(1:3,s2))) &
my_compatibility(2,s2,s1,n) = abs(math_mul3x3(slipNormal(1:3,s1), math_qRot(absoluteMisorientation, slipNormal(1:3,s2)))) & * abs(math_mul3x3(prm%slip_direction(1:3,s1), &
* abs(math_mul3x3(slipDirection(1:3,s1), math_qRot(absoluteMisorientation, slipDirection(1:3,s2)))) math_qRot(absoluteMisorientation, prm%slip_direction(1:3,s2))))
my_compatibility(2,s2,s1,n) = abs(math_mul3x3(prm%slip_normal(1:3,s1), &
math_qRot(absoluteMisorientation, prm%slip_normal(1:3,s2)))) &
* abs(math_mul3x3(prm%slip_direction(1:3,s1), &
math_qRot(absoluteMisorientation, prm%slip_direction(1:3,s2))))
enddo neighborSlipSystems enddo neighborSlipSystems
my_compatibilitySum = 0.0_pReal my_compatibilitySum = 0.0_pReal
@ -2522,8 +2437,6 @@ function plastic_nonlocal_postResults(Mp,ip,el) result(postResults)
math_mul33x3, & math_mul33x3, &
math_mul33xx33, & math_mul33xx33, &
pi pi
use mesh, only: &
theMesh
use material, only: & use material, only: &
material_phase, & material_phase, &
phaseAt, phasememberAt, & phaseAt, phasememberAt, &