From bd754dbefd3f9215af620ff9a6f070b29d4e266a Mon Sep 17 00:00:00 2001 From: Christoph Kords Date: Thu, 16 Aug 2012 09:13:38 +0000 Subject: [PATCH] corrected debug output of evolution rates; added possibility to change the safety factor for the CFL flux condition via the material.config file; updated the example material.config due to recent changes in nonlocal constitutive --- code/config/material.config | 6 +++-- code/constitutive_nonlocal.f90 | 48 ++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/code/config/material.config b/code/config/material.config index a4b7ba705..dae5580df 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -282,9 +282,11 @@ p 1 # exponent for thermal barrier q 1 # exponent for thermal barrier profile attackFrequency 50e9 # attack frequency in Hz surfaceTransmissivity 1.0 # transmissivity of free surfaces for dislocation flux +grainboundaryTransmissivity 0.0 # transmissivity of grain boundaries for dislocation flux (grain bundaries are identified as interfaces with different textures on both sides); if not set or set to negative number, the subroutine automatically determines the transmissivity at the grain boundary +shortRangeStressCorrection 0 # switch for use of short range correction stress +interaction_SlipSlip 0 0 0.625 0.07 0.137 0.122 # Dislocation interaction coefficient +CFLfactor 2.0 # safety factor for CFL flux check (numerical parameter) atol_rho 1e3 # dislocation density considered relevant in m/m**3 -interaction_SlipSlip 0.122 0.122 0.625 0.07 0.137 0.122 # Dislocation interaction coefficient -shortRangeStressCorrection 1 [BCC_Ferrite] diff --git a/code/constitutive_nonlocal.f90 b/code/constitutive_nonlocal.f90 index e8407b9ea..0f808fd27 100644 --- a/code/constitutive_nonlocal.f90 +++ b/code/constitutive_nonlocal.f90 @@ -126,7 +126,8 @@ constitutive_nonlocal_viscosity, & ! viscosity constitutive_nonlocal_fattack, & ! attack frequency in Hz constitutive_nonlocal_rhoSglScatter, & ! standard deviation of scatter in initial dislocation density constitutive_nonlocal_surfaceTransmissivity, & ! transmissivity at free surface -constitutive_nonlocal_grainboundaryTransmissivity ! transmissivity at grain boundary (identified by different texture) +constitutive_nonlocal_grainboundaryTransmissivity, & ! transmissivity at grain boundary (identified by different texture) +constitutive_nonlocal_CFLfactor ! safety factor for CFL flux condition real(pReal), dimension(:,:,:), allocatable, private :: & constitutive_nonlocal_Cslip_66 ! elasticity matrix in Mandel notation for each instance @@ -332,6 +333,7 @@ allocate(constitutive_nonlocal_rhoSglScatter(maxNinstance)) allocate(constitutive_nonlocal_surfaceTransmissivity(maxNinstance)) allocate(constitutive_nonlocal_grainboundaryTransmissivity(maxNinstance)) allocate(constitutive_nonlocal_shortRangeStressCorrection(maxNinstance)) +allocate(constitutive_nonlocal_CFLfactor(maxNinstance)) constitutive_nonlocal_CoverA = 0.0_pReal constitutive_nonlocal_C11 = 0.0_pReal constitutive_nonlocal_C12 = 0.0_pReal @@ -358,6 +360,7 @@ constitutive_nonlocal_fattack = 0.0_pReal constitutive_nonlocal_rhoSglScatter = 0.0_pReal constitutive_nonlocal_surfaceTransmissivity = 1.0_pReal constitutive_nonlocal_grainboundaryTransmissivity = -1.0_pReal +constitutive_nonlocal_CFLfactor = 2.0_pReal constitutive_nonlocal_shortRangeStressCorrection = .true. allocate(constitutive_nonlocal_rhoSglEdgePos0(lattice_maxNslipFamily,maxNinstance)) @@ -500,6 +503,8 @@ do constitutive_nonlocal_surfaceTransmissivity(i) = IO_floatValue(line,positions,2_pInt) case('grainboundarytransmissivity') constitutive_nonlocal_grainboundaryTransmissivity(i) = IO_floatValue(line,positions,2_pInt) + case('cflfactor') + constitutive_nonlocal_CFLfactor(i) = IO_floatValue(line,positions,2_pInt) case('shortrangestresscorrection') constitutive_nonlocal_shortRangeStressCorrection(i) = IO_floatValue(line,positions,2_pInt) > 0.0_pReal case default @@ -593,6 +598,8 @@ enddo //constitutive_nonlocal_label//')') if (constitutive_nonlocal_grainboundaryTransmissivity(i) > 1.0_pReal) call IO_error(211_pInt,& ext_msg='grainboundaryTransmissivity ('//constitutive_nonlocal_label//')') + if (constitutive_nonlocal_CFLfactor(i) < 0.0_pReal) call IO_error(211_pInt,ext_msg='CFLfactor (' & + //constitutive_nonlocal_label//')') !*** determine total number of active slip systems @@ -1939,23 +1946,6 @@ forall (t = 1_pInt:4_pInt) & -!**************************************************************************** -!*** check CFL (Courant-Friedrichs-Lewy) condition for flux - -if (any(abs(gdot) > 0.0_pReal .and. 2.0_pReal * abs(v) * timestep > mesh_ipVolume(ip,el) / maxval(mesh_ipArea(:,ip,el)))) then ! safety factor 2.0 (we use the reference volume and are for simplicity here) -#ifndef _OPENMP - if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) then - write(6,'(a,i5,a,i2)') '<< CONST >> CFL condition not fullfilled at el ',el,' ip ',ip - write(6,'(a,e10.3,a,e10.3)') '<< CONST >> velocity is at ',maxval(abs(v)),' at a timestep of ',timestep - write(6,'(a)') '<< CONST >> enforcing cutback !!!' - endif -#endif - constitutive_nonlocal_dotState = DAMASK_NaN - return -endif - - - !**************************************************************************** !*** calculate limits for stable dipole height @@ -1995,7 +1985,25 @@ rhoDotFlux = 0.0_pReal if (.not. phase_localPlasticity(material_phase(g,ip,el))) then ! only for nonlocal plasticity - !*** take care of the definition of lattice_st = lattice_sd x lattice_sn !!! + + !*** check CFL (Courant-Friedrichs-Lewy) condition for flux + + if (any( abs(gdot) > 0.0_pReal & ! any active slip system ... + .and. constitutive_nonlocal_CFLfactor(myInstance) * abs(v) * timestep & + > mesh_ipVolume(ip,el) / maxval(mesh_ipArea(:,ip,el)))) then ! ...with velocity above critical value (we use the reference volume and area for simplicity here) +#ifndef _OPENMP + if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) then + write(6,'(a,i5,a,i2)') '<< CONST >> CFL condition not fullfilled at el ',el,' ip ',ip + write(6,'(a,e10.3,a,e10.3)') '<< CONST >> velocity is at ',maxval(abs(v)),' at a timestep of ',timestep + write(6,'(a)') '<< CONST >> enforcing cutback !!!' + endif +#endif + constitutive_nonlocal_dotState = DAMASK_NaN ! -> return NaN and, hence, enforce cutback + return + endif + + + !*** 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 !!! m(1:3,1:ns,1) = lattice_sd(1:3, constitutive_nonlocal_slipSystemLattice(1:ns,myInstance), myStructure) @@ -2228,7 +2236,7 @@ endif write(6,'(a,/,8(12x,12(e12.5,1x),/))') '<< CONST >> dislocation flux', rhoDotFlux(1:ns,1:8) * timestep write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> dipole formation by glide', rhoDotSingle2DipoleGlide * timestep write(6,'(a,/,2(12x,12(e12.5,1x),/))') '<< CONST >> athermal dipole annihilation', & - rhoDotAthermalAnnihilation(1:ns,1:2) * timestep + rhoDotAthermalAnnihilation(1:ns,9:10) * timestep write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> thermally activated dipole annihilation', & rhoDotThermalAnnihilation * timestep write(6,'(a,/,10(12x,12(e12.5,1x),/))') '<< CONST >> total density change', rhoDot * timestep