From ba65d04bb3699f3ace0f3e3b540810b94b4b0554 Mon Sep 17 00:00:00 2001 From: Pratheek Shanthraj Date: Fri, 10 Oct 2014 12:28:57 +0000 Subject: [PATCH] removed redundant crystallite_temperature/heat and materialpoint_heat and using temperature from the thermal module --- code/CPFEM.f90 | 7 +-- code/DAMASK_spectral_utilities.f90 | 3 -- code/constitutive.f90 | 52 +++++++++---------- code/crystallite.f90 | 81 ++++++++---------------------- code/homogenization.f90 | 34 ------------- 5 files changed, 46 insertions(+), 131 deletions(-) diff --git a/code/CPFEM.f90 b/code/CPFEM.f90 index d27709e65..6e4d118bf 100644 --- a/code/CPFEM.f90 +++ b/code/CPFEM.f90 @@ -99,7 +99,7 @@ subroutine CPFEM_initAll(temperature,el,ip) call lattice_init call material_init call constitutive_init - call crystallite_init(temperature) ! (have to) use temperature of first ip for whole model + call crystallite_init call homogenization_init call CPFEM_init #if defined(Marc4DAMASK) || defined(Abaqus) @@ -324,8 +324,7 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature, dt, elFE, ip) crystallite_dPdF0, & crystallite_dPdF, & crystallite_Tstar0_v, & - crystallite_Tstar_v, & - crystallite_temperature + crystallite_Tstar_v use homogenization, only: & materialpoint_F, & materialpoint_F0, & @@ -492,7 +491,6 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature, dt, elFE, ip) !* If no parallel execution is required, there is no need to collect FEM input if (.not. parallelExecution) then - crystallite_temperature(ip,elCP) = temperature materialpoint_F0(1:3,1:3,ip,elCP) = ffn materialpoint_F(1:3,1:3,ip,elCP) = ffn1 @@ -503,7 +501,6 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature, dt, elFE, ip) CPFEM_cs(1:6,ip,elCP) = rnd * CPFEM_odd_stress CPFEM_dcsde(1:6,1:6,ip,elCP) = CPFEM_odd_jacobian * math_identity2nd(6) #endif - crystallite_temperature(ip,elCP) = temperature materialpoint_F0(1:3,1:3,ip,elCP) = ffn materialpoint_F(1:3,1:3,ip,elCP) = ffn1 CPFEM_calc_done = .false. diff --git a/code/DAMASK_spectral_utilities.f90 b/code/DAMASK_spectral_utilities.f90 index bc31e9040..febcfd843 100644 --- a/code/DAMASK_spectral_utilities.f90 +++ b/code/DAMASK_spectral_utilities.f90 @@ -799,8 +799,6 @@ subroutine utilities_constitutiveResponse(F_lastInc,F,temperature,timeinc,& CPFEM_COLLECT, & CPFEM_CALCRESULTS, & CPFEM_AGERESULTS - use crystallite, only: & - crystallite_temperature use homogenization, only: & materialpoint_F0, & materialpoint_F, & @@ -840,7 +838,6 @@ subroutine utilities_constitutiveResponse(F_lastInc,F,temperature,timeinc,& call CPFEM_general(CPFEM_COLLECT,F_lastInc(1:3,1:3,1,1,1),F(1:3,1:3,1,1,1), & temperature,timeinc,1_pInt,1_pInt) - crystallite_temperature = temperature materialpoint_F = reshape(F,[3,3,1,product(grid)]) call debug_reset() diff --git a/code/constitutive.f90 b/code/constitutive.f90 index f15d2fbe6..882e52e96 100644 --- a/code/constitutive.f90 +++ b/code/constitutive.f90 @@ -418,7 +418,7 @@ end function constitutive_homogenizedC !-------------------------------------------------------------------------------------------------- !> @brief calls microstructure function of the different constitutive models !-------------------------------------------------------------------------------------------------- -subroutine constitutive_microstructure(temperature, Tstar_v, Fe, Fp, ipc, ip, el) +subroutine constitutive_microstructure(Tstar_v, Fe, Fp, ipc, ip, el) use prec, only: & pReal use material, only: & @@ -450,26 +450,23 @@ subroutine constitutive_microstructure(temperature, Tstar_v, Fe, Fp, ipc, ip, el ipc, & !< grain number ip, & !< integration point number el !< element number - real(pReal), intent(in) :: & - temperature real(pReal), intent(in), dimension(6) :: & Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel) real(pReal), intent(in), dimension(3,3) :: & Fe, & !< elastic deformation gradient Fp !< plastic deformation gradient - real(pReal) :: damage, Tstar_v_effective(6) + real(pReal) :: & + damage, & + Tstar_v_effective(6) - damage = constitutive_getDamage(ipc,ip,el) - Tstar_v_effective = Tstar_v/(damage*damage) - select case (phase_plasticity(material_phase(ipc,ip,el))) case (PLASTICITY_DISLOTWIN_ID) - call constitutive_dislotwin_microstructure(temperature,ipc,ip,el) + call constitutive_dislotwin_microstructure(constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - call constitutive_dislokmc_microstructure(temperature,ipc,ip,el) + call constitutive_dislokmc_microstructure(constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_TITANMOD_ID) - call constitutive_titanmod_microstructure (temperature,ipc,ip,el) + call constitutive_titanmod_microstructure (constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) call constitutive_nonlocal_microstructure (Fe,Fp, ip,el) @@ -477,6 +474,8 @@ subroutine constitutive_microstructure(temperature, Tstar_v, Fe, Fp, ipc, ip, el select case (phase_damage(material_phase(ipc,ip,el))) case (LOCAL_DAMAGE_BRITTLE_ID) + damage = constitutive_getDamage(ipc,ip,el) + Tstar_v_effective = Tstar_v/(damage*damage) call damage_brittle_microstructure(Tstar_v_effective, Fe, ipc, ip, el) case (LOCAL_DAMAGE_DUCTILE_ID) call damage_ductile_microstructure(ipc, ip, el) @@ -489,7 +488,7 @@ end subroutine constitutive_microstructure !-------------------------------------------------------------------------------------------------- !> @brief contains the constitutive equation for calculating the velocity gradient !-------------------------------------------------------------------------------------------------- -subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, temperature, ipc, ip, el) +subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, ipc, ip, el) use prec, only: & pReal use math, only: & @@ -524,8 +523,6 @@ subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, temperature, ip ipc, & !< grain number ip, & !< integration point number el !< element number - real(pReal), intent(in) :: & - Temperature real(pReal), intent(in), dimension(6) :: & Tstar_v !< 2nd Piola-Kirchhoff stress real(pReal), intent(out), dimension(3,3) :: & @@ -546,13 +543,13 @@ subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, temperature, ip case (PLASTICITY_PHENOPOWERLAW_ID) call constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) - call constitutive_nonlocal_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ip,el) + call constitutive_nonlocal_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,constitutive_getTemperature(ipc,ip,el),ip,el) case (PLASTICITY_DISLOTWIN_ID) - call constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ipc,ip,el) + call constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - call constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ipc,ip,el) + call constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_TITANMOD_ID) - call constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,temperature,ipc,ip,el) + call constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v_effective,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) end select @@ -641,7 +638,7 @@ end subroutine constitutive_hooke_TandItsTangent !-------------------------------------------------------------------------------------------------- !> @brief contains the constitutive equation for calculating the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, Temperature, subdt, subfracArray,& +subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, subdt, subfracArray,& ipc, ip, el) use prec, only: & pReal, & @@ -696,7 +693,6 @@ subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, Temperatu ip, & !< integration point number el !< element number real(pReal), intent(in) :: & - Temperature, & subdt !< timestep real(pReal), intent(in), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems) :: & subfracArray !< subfraction of timestep @@ -721,14 +717,14 @@ subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, Temperatu case (PLASTICITY_PHENOPOWERLAW_ID) call constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) case (PLASTICITY_DISLOTWIN_ID) - call constitutive_dislotwin_dotState (Tstar_v,Temperature,ipc,ip,el) + call constitutive_dislotwin_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - call constitutive_dislokmc_dotState (Tstar_v,Temperature,ipc,ip,el) + call constitutive_dislokmc_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_TITANMOD_ID) - call constitutive_titanmod_dotState (Tstar_v,Temperature,ipc,ip,el) + call constitutive_titanmod_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) - call constitutive_nonlocal_dotState (Tstar_v,FeArray,FpArray,Temperature, subdt, & - subfracArray,ip,el) + call constitutive_nonlocal_dotState (Tstar_v,FeArray,FpArray,constitutive_getTemperature(ipc,ip,el), & + subdt,subfracArray,ip,el) end select select case (phase_damage(material_phase(ipc,ip,el))) @@ -1021,7 +1017,7 @@ end function constitutive_getTemperature !-------------------------------------------------------------------------------------------------- !> @brief returns array of constitutive results !-------------------------------------------------------------------------------------------------- -function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el) +function constitutive_postResults(Tstar_v, FeArray, ipc, ip, el) use prec, only: & pReal use mesh, only: & @@ -1084,8 +1080,6 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el) real(pReal), dimension(plasticState(material_phase(ipc,ip,el))%sizePostResults) :: & constitutive_postResults #endif - real(pReal), intent(in) :: & - temperature real(pReal), intent(in), dimension(3,3,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems) :: & FeArray !< elastic deformation gradient real(pReal), intent(in), dimension(6) :: & @@ -1110,10 +1104,10 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el) constitutive_phenopowerlaw_postResults(Tstar_v_effective,ipc,ip,el) case (PLASTICITY_DISLOTWIN_ID) constitutive_postResults(startPos:endPos) = & - constitutive_dislotwin_postResults(Tstar_v_effective,Temperature,ipc,ip,el) + constitutive_dislotwin_postResults(Tstar_v_effective,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) constitutive_postResults(startPos:endPos) = & - constitutive_dislokmc_postResults(Tstar_v_effective,Temperature,ipc,ip,el) + constitutive_dislokmc_postResults(Tstar_v_effective,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) constitutive_postResults(startPos:endPos) = & constitutive_nonlocal_postResults (Tstar_v_effective,FeArray,ip,el) diff --git a/code/crystallite.f90 b/code/crystallite.f90 index c2079687b..71f3228de 100644 --- a/code/crystallite.f90 +++ b/code/crystallite.f90 @@ -24,10 +24,6 @@ module crystallite integer(pInt), dimension(:,:), allocatable, private :: & crystallite_sizePostResult !< description not available - real(pReal), dimension(:,:), allocatable, public :: & - crystallite_temperature !< temperature (same on all components on one IP) - real(pReal), dimension(:,:,:), allocatable, public, protected :: & - crystallite_heat !< heat source real(pReal), dimension(:,:,:), allocatable, public :: & crystallite_dt !< requested time increment of each grain real(pReal), dimension(:,:,:), allocatable, private :: & @@ -91,7 +87,6 @@ module crystallite grainrotationx_ID, & grainrotationy_ID, & grainrotationz_ID, & - heat_ID, & orientation_ID, & grainrotation_ID, & eulerangles_ID, & @@ -132,7 +127,7 @@ contains !-------------------------------------------------------------------------------------------------- !> @brief allocates and initialize per grain variables !-------------------------------------------------------------------------------------------------- -subroutine crystallite_init(temperature) +subroutine crystallite_init use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use debug, only: & debug_info, & @@ -180,7 +175,6 @@ subroutine crystallite_init(temperature) constitutive_microstructure ! derived (shortcut) quantities of given state implicit none - real(pReal), intent(in) :: temperature integer(pInt), parameter :: & FILEUNIT = 200_pInt, & MAXNCHUNKS = 2_pInt @@ -222,8 +216,6 @@ subroutine crystallite_init(temperature) nMax = mesh_maxNipNeighbors - allocate(crystallite_temperature(iMax,eMax), source=temperature) - allocate(crystallite_heat(gMax,iMax,eMax), source=0.0_pReal) allocate(crystallite_Tstar0_v(6,gMax,iMax,eMax), source=0.0_pReal) allocate(crystallite_partionedTstar0_v(6,gMax,iMax,eMax), source=0.0_pReal) allocate(crystallite_subTstar0_v(6,gMax,iMax,eMax), source=0.0_pReal) @@ -313,8 +305,6 @@ subroutine crystallite_init(temperature) crystallite_outputID(output,section) = grainrotationy_ID case ('grainrotationz') crystallite_outputID(output,section) = grainrotationx_ID - case ('heat') - crystallite_outputID(output,section) = heat_ID case ('orientation') crystallite_outputID(output,section) = orientation_ID case ('grainrotation') @@ -355,7 +345,7 @@ subroutine crystallite_init(temperature) do i = 1_pInt,material_Ncrystallite do j = 1_pInt,crystallite_Noutput(i) select case(crystallite_outputID(j,i)) - case(phase_ID,texture_ID,volume_ID,grainrotationx_ID,grainrotationy_ID,grainrotationz_ID,heat_ID) + case(phase_ID,texture_ID,volume_ID,grainrotationx_ID,grainrotationy_ID,grainrotationz_ID) mySize = 1_pInt case(orientation_ID,grainrotation_ID) ! orientation as quaternion, or deviation from initial grain orientation in axis-angle form (angle in degrees) mySize = 4_pInt @@ -429,7 +419,7 @@ subroutine crystallite_init(temperature) myNgrains = homogenization_Ngrains(mesh_element(3,e)) do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e) do g = 1_pInt,myNgrains - call constitutive_microstructure(temperature, & + call constitutive_microstructure( & crystallite_Tstar_v(1:6,g,i,e), & crystallite_Fe(1:3,1:3,g,i,e), & crystallite_Fp(1:3,1:3,g,i,e),g,i,e) ! update dependent state variables to be consistent with basic states @@ -444,8 +434,6 @@ subroutine crystallite_init(temperature) !-------------------------------------------------------------------------------------------------- ! debug output if (iand(debug_level(debug_crystallite), debug_levelBasic) /= 0_pInt) then - write(6,'(a35,1x,7(i8,1x))') 'crystallite_temperature: ', shape(crystallite_temperature) - write(6,'(a35,1x,7(i8,1x))') 'crystallite_heat: ', shape(crystallite_heat) write(6,'(a35,1x,7(i8,1x))') 'crystallite_Fe: ', shape(crystallite_Fe) write(6,'(a35,1x,7(i8,1x))') 'crystallite_Fp: ', shape(crystallite_Fp) write(6,'(a35,1x,7(i8,1x))') 'crystallite_Lp: ', shape(crystallite_Lp) @@ -1107,7 +1095,7 @@ subroutine crystallite_stressAndItsTangent(updateJaco) do g = 1_pInt,myNgrains call constitutive_TandItsTangent(junk,dSdFe,crystallite_Fe(1:3,1:3,g,i,e),g,i,e) ! call constitutive law to calculate 2nd Piola-Kirchhoff stress and its derivative call constitutive_LpAndItsTangent(junk,temp_99,crystallite_Tstar_v(1:6,g,i,e), & - crystallite_temperature(i,e),g,i,e) + g,i,e) dLpdS = reshape(temp_99,shape=[3,3,3,3]) rhs_3333 = 0.0_pReal forall(p=1_pInt:3_pInt, o=1_pInt:3_pInt) & @@ -1367,24 +1355,6 @@ subroutine crystallite_stressAndItsTangent(updateJaco) endif jacobianMethod endif computeJacobian !why not OMP? - elementLooping12: do e = FEsolving_execElem(1),FEsolving_execElem(2) - myNgrains = homogenization_Ngrains(mesh_element(3,e)) - do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e) ! iterate over IPs of this element to be processed - do g = 1,myNgrains - crystallite_heat(g,i,e) = 0.98_pReal* & - abs(math_mul33xx33(math_Mandel6to33(crystallite_Tstar_v(1:6,g,i,e)), & - crystallite_Lp(1:3,1:3,g,i,e))) -! constitutive_localDamage(g,i,e) = & -! 1.0_pReal* & -! sum(math_Mandel6to33(crystallite_Tstar_v(1:6,g,i,e)/constitutive_gradientDamage(g,i,e))* & -! (math_mul33x33(math_transpose33(crystallite_Fe(1:3,1:3,g,i,e)), & -! crystallite_Fe(1:3,1:3,g,i,e))-math_I3))/4.0_pReal + & -! 0.0_pReal* & -! sum(abs(math_mul33x33(math_transpose33(crystallite_Fp(1:3,1:3,g,i,e)), & -! crystallite_Fp(1:3,1:3,g,i,e))-math_I3)/2.0_pReal) - enddo - enddo - enddo elementLooping12 end subroutine crystallite_stressAndItsTangent @@ -1475,7 +1445,7 @@ subroutine crystallite_integrateStateRK4() if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) enddo; enddo; enddo !$OMP ENDDO @@ -1582,8 +1552,7 @@ subroutine crystallite_integrateStateRK4() !$OMP DO do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains if (crystallite_todo(g,i,e)) & - call constitutive_microstructure(crystallite_temperature(i,e), & - crystallite_Tstar_v(1:6,g,i,e), & + call constitutive_microstructure(crystallite_Tstar_v(1:6,g,i,e), & crystallite_Fe(1:3,1:3,g,i,e), & crystallite_Fp(1:3,1:3,g,i,e), g, i, e) ! update dependent state variables to be consistent with basic states enddo; enddo; enddo @@ -1616,7 +1585,7 @@ subroutine crystallite_integrateStateRK4() if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & timeStepFraction(n)*crystallite_subdt(g,i,e), & ! fraction of original timestep crystallite_subFrac, g,i,e) enddo; enddo; enddo @@ -1788,7 +1757,7 @@ subroutine crystallite_integrateStateRKCK45() if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) enddo; enddo; enddo !$OMP ENDDO @@ -1900,8 +1869,7 @@ subroutine crystallite_integrateStateRKCK45() !$OMP DO do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains if (crystallite_todo(g,i,e)) & - call constitutive_microstructure(crystallite_temperature(i,e), & - crystallite_Tstar_v(1:6,g,i,e), & + call constitutive_microstructure(crystallite_Tstar_v(1:6,g,i,e), & crystallite_Fe(1:3,1:3,g,i,e), & crystallite_Fp(1:3,1:3,g,i,e), g, i, e) ! update dependent state variables to be consistent with basic states enddo; enddo; enddo @@ -1936,7 +1904,7 @@ subroutine crystallite_integrateStateRKCK45() if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & C(stage)*crystallite_subdt(g,i,e), & ! fraction of original timestep crystallite_subFrac, g,i,e) enddo; enddo; enddo @@ -2149,8 +2117,7 @@ subroutine crystallite_integrateStateRKCK45() !$OMP DO do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains if (crystallite_todo(g,i,e)) & - call constitutive_microstructure(crystallite_temperature(i,e), & - crystallite_Tstar_v(1:6,g,i,e), & + call constitutive_microstructure(crystallite_Tstar_v(1:6,g,i,e), & crystallite_Fe(1:3,1:3,g,i,e), & crystallite_Fp(1:3,1:3,g,i,e), g, i, e) ! update dependent state variables to be consistent with basic states enddo; enddo; enddo @@ -2301,7 +2268,7 @@ subroutine crystallite_integrateStateAdaptiveEuler() if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) enddo; enddo; enddo !$OMP ENDDO @@ -2383,8 +2350,7 @@ subroutine crystallite_integrateStateAdaptiveEuler() !$OMP DO do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains if (crystallite_todo(g,i,e)) & - call constitutive_microstructure(crystallite_temperature(i,e), & - crystallite_Tstar_v(1:6,g,i,e), & + call constitutive_microstructure(crystallite_Tstar_v(1:6,g,i,e), & crystallite_Fe(1:3,1:3,g,i,e), & crystallite_Fp(1:3,1:3,g,i,e), g, i, e) ! update dependent state variables to be consistent with basic states enddo; enddo; enddo @@ -2421,7 +2387,7 @@ subroutine crystallite_integrateStateAdaptiveEuler() if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) enddo; enddo; enddo !$OMP ENDDO @@ -2634,7 +2600,7 @@ eIter = FEsolving_execElem(1:2) if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) enddo; enddo; enddo !$OMP ENDDO @@ -2720,8 +2686,7 @@ eIter = FEsolving_execElem(1:2) !$OMP DO do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) & - call constitutive_microstructure(crystallite_temperature(i,e), & - crystallite_Tstar_v(1:6,g,i,e), & + call constitutive_microstructure(crystallite_Tstar_v(1:6,g,i,e), & crystallite_Fe(1:3,1:3,g,i,e), & crystallite_Fp(1:3,1:3,g,i,e), g, i, e) ! update dependent state variables to be consistent with basic states enddo; enddo; enddo @@ -2902,7 +2867,7 @@ subroutine crystallite_integrateStateFPI() if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) enddo; enddo; enddo @@ -2968,8 +2933,7 @@ subroutine crystallite_integrateStateFPI() !$OMP DO PRIVATE(p,c) do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) & - call constitutive_microstructure(crystallite_temperature(i,e), & - crystallite_Tstar_v(1:6,g,i,e), & + call constitutive_microstructure(crystallite_Tstar_v(1:6,g,i,e), & crystallite_Fe(1:3,1:3,g,i,e), & crystallite_Fp(1:3,1:3,g,i,e), g, i, e) ! update dependent state variables to be consistent with basic states p = mappingConstitutive(2,g,i,e) @@ -3015,7 +2979,7 @@ subroutine crystallite_integrateStateFPI() if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Lp(1:3,1:3,g,i,e), & crystallite_Fe, & - crystallite_Fp, crystallite_temperature(i,e), & + crystallite_Fp, & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) enddo; enddo; enddo !$OMP ENDDO @@ -3497,7 +3461,7 @@ logical function crystallite_integrateStress(& endif call constitutive_LpAndItsTangent(Lp_constitutive, dLp_dT_constitutive, Tstar_v, & - crystallite_temperature(i,e), g, i, e) + g, i, e) if (iand(debug_level(debug_crystallite), debug_levelBasic) /= 0_pInt) then call system_clock(count=tock,count_rate=tickrate,count_max=maxticks) @@ -3866,9 +3830,6 @@ function crystallite_postResults(ipc, ip, el) detF = math_det33(crystallite_partionedF(1:3,1:3,ipc,ip,el)) ! V_current = det(F) * V_reference crystallite_postResults(c+1) = detF * mesh_ipVolume(ip,el) & / homogenization_Ngrains(mesh_element(3,el)) ! grain volume (not fraction but absolute) - case (heat_ID) - mySize = 1_pInt - crystallite_postResults(c+1) = crystallite_heat(ipc,ip,el) ! heat production case (orientation_ID) mySize = 4_pInt crystallite_postResults(c+1:c+mySize) = crystallite_orientation(1:4,ipc,ip,el) ! grain orientation as quaternion @@ -3953,7 +3914,7 @@ function crystallite_postResults(ipc, ip, el) if (size(crystallite_postResults)-c > 0_pInt) & crystallite_postResults(c+1:size(crystallite_postResults)) = & constitutive_postResults(crystallite_Tstar_v(1:6,ipc,ip,el), crystallite_Fe, & - crystallite_temperature(ip,el), ipc, ip, el) + ipc, ip, el) end function crystallite_postResults diff --git a/code/homogenization.f90 b/code/homogenization.f90 index 5548c1a90..1be553ecc 100644 --- a/code/homogenization.f90 +++ b/code/homogenization.f90 @@ -27,8 +27,6 @@ module homogenization materialpoint_sizeResults, & homogenization_maxSizePostResults, & field_maxSizePostResults - real(pReal), dimension(:,:), allocatable, public, protected :: & - materialpoint_heat real(pReal), dimension(:,:,:,:), allocatable, private :: & materialpoint_subF0, & !< def grad of IP at beginning of homogenization increment @@ -79,7 +77,6 @@ module homogenization homogenization_partitionDeformation, & homogenization_updateState, & homogenization_averageStressAndItsTangent, & - homogenization_averageHeat, & homogenization_postResults contains @@ -262,7 +259,6 @@ subroutine homogenization_init() !-------------------------------------------------------------------------------------------------- ! allocate and initialize global variables - allocate(materialpoint_heat(mesh_maxNips,mesh_NcpElems), source=0.0_pReal) allocate(materialpoint_dPdF(3,3,3,3,mesh_maxNips,mesh_NcpElems), source=0.0_pReal) allocate(materialpoint_F0(3,3,mesh_maxNips,mesh_NcpElems), source=0.0_pReal) materialpoint_F0 = spread(spread(math_I3,3,mesh_maxNips),4,mesh_NcpElems) ! initialize to identity @@ -335,7 +331,6 @@ subroutine homogenization_init() write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subF0: ', shape(materialpoint_subF0) write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subF: ', shape(materialpoint_subF) write(6,'(a32,1x,7(i8,1x))') 'materialpoint_P: ', shape(materialpoint_P) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_heat: ', shape(materialpoint_heat) write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subFrac: ', shape(materialpoint_subFrac) write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subStep: ', shape(materialpoint_subStep) write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subdt: ', shape(materialpoint_subdt) @@ -384,7 +379,6 @@ subroutine materialpoint_stressAndItsTangent(updateJaco,dt) use crystallite, only: & - crystallite_heat, & crystallite_F0, & crystallite_Fp0, & crystallite_Fp, & @@ -665,7 +659,6 @@ subroutine materialpoint_stressAndItsTangent(updateJaco,dt) elementLooping4: do e = FEsolving_execElem(1),FEsolving_execElem(2) IpLooping4: do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e) call homogenization_averageStressAndItsTangent(i,e) - materialpoint_heat(i,e) = homogenization_averageHeat(i,e) enddo IpLooping4 enddo elementLooping4 !$OMP END PARALLEL DO @@ -899,33 +892,6 @@ subroutine homogenization_averageStressAndItsTangent(ip,el) end subroutine homogenization_averageStressAndItsTangent - -!-------------------------------------------------------------------------------------------------- -!> @brief derive average heat from constituent quantities (does not depend on choosen -!! homogenization scheme) -!-------------------------------------------------------------------------------------------------- -real(pReal) function homogenization_averageHeat(ip,el) - use mesh, only: & - mesh_element - use material, only: & - homogenization_Ngrains - use crystallite, only: & - crystallite_heat - - implicit none - integer(pInt), intent(in) :: & - ip, & !< integration point number - el !< element number - integer(pInt) :: & - Ngrains - -!-------------------------------------------------------------------------------------------------- -! computing the average heat - Ngrains = homogenization_Ngrains(mesh_element(3,el)) - homogenization_averageHeat= sum(crystallite_heat(1:Ngrains,ip,el))/real(Ngrains,pReal) - -end function homogenization_averageHeat - !-------------------------------------------------------------------------------------------------- !> @brief Returns average specific heat at each integration point !--------------------------------------------------------------------------------------------------