From c2c5c0c5210273007e47ce152cc8afc2273dc2fb Mon Sep 17 00:00:00 2001 From: Pratheek Shanthraj Date: Tue, 23 Sep 2014 10:38:20 +0000 Subject: [PATCH] subsumed constitutive_damage/thermal into constitutive --- code/CPFEM.f90 | 6 -- code/DAMASK_marc.f90 | 2 - code/Makefile | 14 +-- code/constitutive.f90 | 193 ++++++++++++++++++++++++++++++--- code/crystallite.f90 | 233 +++++++--------------------------------- code/damage_brittle.f90 | 7 +- code/homogenization.f90 | 6 +- 7 files changed, 221 insertions(+), 240 deletions(-) diff --git a/code/CPFEM.f90 b/code/CPFEM.f90 index 930ebd580..12bd36306 100644 --- a/code/CPFEM.f90 +++ b/code/CPFEM.f90 @@ -75,10 +75,6 @@ subroutine CPFEM_initAll(temperature,el,ip) use FEZoo, only: & FEZoo_init #endif - use constitutive_thermal, only: & - constitutive_thermal_init - use constitutive_damage, only: & - constitutive_damage_init implicit none integer(pInt), intent(in) :: el, & ! FE el number @@ -103,8 +99,6 @@ subroutine CPFEM_initAll(temperature,el,ip) call lattice_init call material_init call constitutive_init - call constitutive_thermal_init - call constitutive_damage_init call crystallite_init(temperature) ! (have to) use temperature of first ip for whole model call homogenization_init call CPFEM_init diff --git a/code/DAMASK_marc.f90 b/code/DAMASK_marc.f90 index d3e0d306c..6dbbbf203 100644 --- a/code/DAMASK_marc.f90 +++ b/code/DAMASK_marc.f90 @@ -113,10 +113,8 @@ end module DAMASK_interface #include "lattice.f90" #include "damage_none.f90" #include "damage_brittle.f90" -#include "constitutive_damage.f90" #include "thermal_none.f90" #include "thermal_adiabatic.f90" -#include "constitutive_thermal.f90" #include "constitutive_none.f90" #include "constitutive_j2.f90" #include "constitutive_phenopowerlaw.f90" diff --git a/code/Makefile b/code/Makefile index a1ded14ea..ea7805359 100644 --- a/code/Makefile +++ b/code/Makefile @@ -361,8 +361,8 @@ THERMAL_FILES = \ CONSTITUTIVE_FILES = \ constitutive_dislotwin.o constitutive_dislokmc.o constitutive_j2.o constitutive_phenopowerlaw.o \ - constitutive_titanmod.o constitutive_nonlocal.o constitutive_none.o \ - constitutive_damage.o constitutive_thermal.o constitutive.o + constitutive_titanmod.o constitutive_nonlocal.o constitutive_none.o constitutive.o + HOMOGENIZATION_FILES = \ homogenization_RGC.o homogenization_isostrain.o homogenization_none.o homogenization.o @@ -480,8 +480,8 @@ constitutive.o: constitutive.f90 \ constitutive_phenopowerlaw.o \ constitutive_j2.o \ constitutive_none.o \ - constitutive_thermal.o \ - constitutive_damage.o + $(DAMAGE_FILES) \ + $(THERMAL_FILES) constitutive_nonlocal.o: constitutive_nonlocal.f90 \ lattice.o @@ -504,18 +504,12 @@ constitutive_j2.o: constitutive_j2.f90 \ constitutive_none.o: constitutive_none.f90 \ lattice.o -constitutive_damage.o: constitutive_damage.f90 \ - $(DAMAGE_FILES) - damage_none.o: damage_none.f90 \ lattice.o damage_brittle.o: damage_brittle.f90 \ lattice.o -constitutive_thermal.o: constitutive_thermal.f90 \ - $(THERMAL_FILES) - thermal_none.o: thermal_none.f90 \ lattice.o diff --git a/code/constitutive.f90 b/code/constitutive.f90 index 644fbf95e..230368b91 100644 --- a/code/constitutive.f90 +++ b/code/constitutive.f90 @@ -13,7 +13,11 @@ module constitutive private integer(pInt), public, protected :: & constitutive_maxSizePostResults, & - constitutive_maxSizeDotState + constitutive_maxSizeDotState, & + constitutive_damage_maxSizePostResults, & + constitutive_damage_maxSizeDotState, & + constitutive_thermal_maxSizePostResults, & + constitutive_thermal_maxSizeDotState public :: & constitutive_init, & @@ -79,6 +83,10 @@ subroutine constitutive_init phase_elasticity, & phase_plasticity, & phase_plasticityInstance, & + phase_damage, & + phase_damageInstance, & + phase_thermal, & + phase_thermalInstance, & phase_Noutput, & homogenization_Ngrains, & homogenization_maxNgrains, & @@ -98,7 +106,17 @@ subroutine constitutive_init PLASTICITY_DISLOKMC_label, & PLASTICITY_TITANMOD_label, & PLASTICITY_NONLOCAL_label, & + LOCAL_DAMAGE_NONE_ID, & + LOCAL_DAMAGE_BRITTLE_ID, & + LOCAL_THERMAL_none_ID, & + LOCAL_THERMAL_HEATGEN_ID, & + LOCAL_DAMAGE_NONE_label, & + LOCAL_DAMAGE_BRITTLE_label, & + LOCAL_THERMAL_none_label, & + LOCAL_THERMAL_HEATGEN_label, & plasticState, & + damageState, & + thermalState, & mappingConstitutive @@ -109,6 +127,10 @@ subroutine constitutive_init use constitutive_dislokmc use constitutive_titanmod use constitutive_nonlocal + use damage_none + use damage_brittle + use thermal_none + use thermal_adiabatic implicit none integer(pInt), parameter :: FILEUNIT = 200_pInt integer(pInt) :: & @@ -119,7 +141,7 @@ subroutine constitutive_init integer(pInt), dimension(:,:), pointer :: thisSize character(len=64), dimension(:,:), pointer :: thisOutput character(len=32) :: outputName !< name of output, intermediate fix until HDF5 output is ready - logical :: knownPlasticity, nonlocalConstitutionPresent + logical :: knownPlasticity, knownDamage, knownThermal, nonlocalConstitutionPresent nonlocalConstitutionPresent = .false. !-------------------------------------------------------------------------------------------------- @@ -137,7 +159,23 @@ subroutine constitutive_init call constitutive_nonlocal_stateInit() endif close(FILEUNIT) + +!-------------------------------------------------------------------------------------------------- +! parse damage from config file + 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 + if (any(phase_damage == LOCAL_DAMAGE_NONE_ID)) call damage_none_init(FILEUNIT) + if (any(phase_damage == LOCAL_DAMAGE_BRITTLE_ID)) call damage_brittle_init(FILEUNIT) + close(FILEUNIT) +!-------------------------------------------------------------------------------------------------- +! parse thermal from config file + 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 + if (any(phase_thermal == LOCAL_THERMAL_none_ID)) call thermal_none_init(FILEUNIT) +! if (any(phase_thermal == LOCAL_THERMAL_HEATGEN_ID)) call thermal_heatgen_init(FILEUNIT) + close(FILEUNIT) + write(6,'(/,a)') ' <<<+- constitutive init -+>>>' write(6,'(a)') ' $Id$' write(6,'(a15,a)') ' Current time: ',IO_timeStamp() @@ -190,17 +228,75 @@ subroutine constitutive_init enddo endif endif +#ifdef multiphysicsOut + instance = phase_damageInstance(phase) ! which instance of a plasticity is present phase + knownDamage = .true. + select case(phase_damage(phase)) ! split per constititution + case (LOCAL_DAMAGE_none_ID) + outputName = LOCAL_DAMAGE_NONE_label + thisOutput => null() + thisSize => null() + case (LOCAL_DAMAGE_BRITTLE_ID) + outputName = LOCAL_DAMAGE_BRITTLE_label + thisOutput => damage_brittle_output + thisSize => damage_brittle_sizePostResult + case default + knownDamage = .false. + end select + if (knownDamage) then + write(FILEUNIT,'(a)') '(damage)'//char(9)//trim(outputName) + if (phase_damage(phase) /= LOCAL_DAMAGE_none_ID) then + do e = 1_pInt,phase_Noutput(phase) + write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance) + enddo + endif + endif + instance = phase_thermalInstance(phase) ! which instance is present phase + knownThermal = .true. + select case(phase_thermal(phase)) ! split per constititution + case (LOCAL_THERMAL_none_ID) + outputName = LOCAL_THERMAL_NONE_label + thisOutput => null() + thisSize => null() + case (LOCAL_THERMAL_heatgen_ID) + outputName = LOCAL_THERMAL_HEATGEN_label + thisOutput => null() + thisSize => null() + case default + knownThermal = .false. + end select + if (knownThermal) then + write(FILEUNIT,'(a)') '(thermal)'//char(9)//trim(outputName) + if (phase_thermal(phase) /= LOCAL_THERMAL_none_ID) then + do e = 1_pInt,phase_Noutput(phase) + write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance) + enddo + endif + endif +#endif enddo close(FILEUNIT) constitutive_maxSizeDotState = 0_pInt constitutive_maxSizePostResults = 0_pInt + constitutive_damage_maxSizePostResults = 0_pInt + constitutive_damage_maxSizeDotState = 0_pInt + constitutive_thermal_maxSizePostResults = 0_pInt + constitutive_thermal_maxSizeDotState = 0_pInt PhaseLoop2:do phase = 1_pInt,material_Nphase plasticState(phase)%partionedState0 = plasticState(phase)%State0 plasticState(phase)%State = plasticState(phase)%State0 constitutive_maxSizeDotState = max(constitutive_maxSizeDotState, plasticState(phase)%sizeDotState) constitutive_maxSizePostResults = max(constitutive_maxSizePostResults, plasticState(phase)%sizePostResults) + damageState(phase)%partionedState0 = damageState(phase)%State0 + damageState(phase)%State = damageState(phase)%State0 + constitutive_damage_maxSizeDotState = max(constitutive_damage_maxSizeDotState, damageState(phase)%sizeDotState) + constitutive_damage_maxSizePostResults = max(constitutive_damage_maxSizePostResults, damageState(phase)%sizePostResults) + thermalState(phase)%partionedState0 = thermalState(phase)%State0 + thermalState(phase)%State = thermalState(phase)%State0 + constitutive_thermal_maxSizeDotState = max(constitutive_thermal_maxSizeDotState, thermalState(phase)%sizeDotState) + constitutive_thermal_maxSizePostResults = max(constitutive_thermal_maxSizePostResults, thermalState(phase)%sizePostResults) enddo PhaseLoop2 #ifdef HDF @@ -292,18 +388,18 @@ end function constitutive_homogenizedC !-------------------------------------------------------------------------------------------------- !> @brief calls microstructure function of the different constitutive models !-------------------------------------------------------------------------------------------------- -subroutine constitutive_microstructure(temperature, Fe, Fp, ipc, ip, el) +subroutine constitutive_microstructure(temperature, Tstar_v, Fe, Fp, ipc, ip, el) use prec, only: & pReal use material, only: & phase_plasticity, & + phase_damage, & material_phase, & PLASTICITY_DISLOTWIN_ID, & PLASTICITY_DISLOKMC_ID, & PLASTICITY_TITANMOD_ID, & PLASTICITY_NONLOCAL_ID, & - plasticState, & - mappingConstitutive + LOCAL_DAMAGE_BRITTLE_ID use constitutive_titanmod, only: & constitutive_titanmod_microstructure @@ -313,6 +409,8 @@ subroutine constitutive_microstructure(temperature, Fe, Fp, ipc, ip, el) constitutive_dislotwin_microstructure use constitutive_dislokmc, only: & constitutive_dislokmc_microstructure + use damage_brittle, only: & + damage_brittle_microstructure implicit none integer(pInt), intent(in) :: & @@ -321,6 +419,8 @@ subroutine constitutive_microstructure(temperature, Fe, Fp, ipc, ip, el) 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 @@ -337,6 +437,12 @@ subroutine constitutive_microstructure(temperature, Fe, Fp, ipc, ip, el) call constitutive_nonlocal_microstructure (Fe,Fp, ip,el) end select + + select case (phase_damage(material_phase(ipc,ip,el))) + case (LOCAL_DAMAGE_BRITTLE_ID) + call damage_brittle_microstructure(Tstar_v, Fe, ipc, ip, el) + + end select end subroutine constitutive_microstructure @@ -512,8 +618,8 @@ subroutine constitutive_collectDotState(Tstar_v, FeArray, FpArray, Temperature, mesh_maxNips use material, only: & phase_plasticity, & - plasticState, & - mappingConstitutive, & + phase_damage, & + phase_thermal, & material_phase, & homogenization_maxNgrains, & PLASTICITY_NONE_ID, & @@ -522,7 +628,9 @@ subroutine constitutive_collectDotState(Tstar_v, FeArray, FpArray, Temperature, PLASTICITY_DISLOTWIN_ID, & PLASTICITY_DISLOKMC_ID, & PLASTICITY_TITANMOD_ID, & - PLASTICITY_NONLOCAL_ID + PLASTICITY_NONLOCAL_ID, & + LOCAL_DAMAGE_BRITTLE_ID, & + LOCAL_THERMAL_HEATGEN_ID use constitutive_j2, only: & constitutive_j2_dotState use constitutive_phenopowerlaw, only: & @@ -535,6 +643,10 @@ subroutine constitutive_collectDotState(Tstar_v, FeArray, FpArray, Temperature, constitutive_titanmod_dotState use constitutive_nonlocal, only: & constitutive_nonlocal_dotState + use damage_brittle, only: & + damage_brittle_dotState + use thermal_adiabatic, only: & + thermal_adiabatic_dotState implicit none integer(pInt), intent(in) :: & @@ -575,6 +687,17 @@ subroutine constitutive_collectDotState(Tstar_v, FeArray, FpArray, Temperature, subfracArray,ip,el) end select + select case (phase_damage(material_phase(ipc,ip,el))) + case (LOCAL_DAMAGE_BRITTLE_ID) + call damage_brittle_dotState(ipc, ip, el) + + end select + + select case (phase_thermal(material_phase(ipc,ip,el))) + case (LOCAL_THERMAL_HEATGEN_ID) +! call thermal_adiabatic_dotState(Tstar_v, Lp, ipc, ip, el) + end select + if (iand(debug_level(debug_constitutive), debug_levelBasic) /= 0_pInt) then call system_clock(count=tock,count_rate=tickrate,count_max=maxticks) !$OMP CRITICAL (debugTimingDotState) @@ -848,8 +971,11 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el) mesh_maxNips use material, only: & plasticState, & - mappingConstitutive, & + damageState, & + thermalState, & phase_plasticity, & + phase_damage, & + phase_thermal, & material_phase, & homogenization_maxNgrains, & PLASTICITY_NONE_ID, & @@ -858,7 +984,9 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el) PLASTICITY_DISLOTWIN_ID, & PLASTICITY_DISLOKMC_ID, & PLASTICITY_TITANMOD_ID, & - PLASTICITY_NONLOCAL_ID + PLASTICITY_NONLOCAL_ID, & + LOCAL_DAMAGE_BRITTLE_ID, & + LOCAL_THERMAL_HEATGEN_ID use constitutive_j2, only: & #ifdef HDF constitutive_j2_postResults2,& @@ -874,13 +1002,27 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el) constitutive_titanmod_postResults use constitutive_nonlocal, only: & constitutive_nonlocal_postResults +#ifdef multiphysicsOut + use damage_brittle, only: & + damage_brittle_postResults +! use thermal_adiabatic, only: & +! thermal_adiabatic_postResults +#endif + implicit none integer(pInt), intent(in) :: & ipc, & !< grain number ip, & !< integration point number el !< element number +#ifdef multiphysicsOut + real(pReal), dimension(plasticState(material_phase(ipc,ip,el))%sizePostResults + & + damageState( material_phase(ipc,ip,el))%sizePostResults + & + thermalState(material_phase(ipc,ip,el))%sizePostResults) :: & + constitutive_postResults +#else 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) :: & @@ -888,30 +1030,49 @@ function constitutive_postResults(Tstar_v, FeArray, temperature, ipc, ip, el) real(pReal), intent(in), dimension(6) :: & Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel) real(pReal) :: damage, Tstar_v_effective(6) + integer(pInt) :: startPos, endPos damage = constitutive_getNonlocalDamage(ipc,ip,el) Tstar_v_effective = damage*damage*Tstar_v constitutive_postResults = 0.0_pReal + startPos = 1_pInt + endPos = plasticState(material_phase(ipc,ip,el))%sizePostResults select case (phase_plasticity(material_phase(ipc,ip,el))) case (PLASTICITY_TITANMOD_ID) - constitutive_postResults = constitutive_titanmod_postResults(ipc,ip,el) + constitutive_postResults(startPos:endPos) = constitutive_titanmod_postResults(ipc,ip,el) case (PLASTICITY_J2_ID) - constitutive_postResults= constitutive_j2_postResults(Tstar_v_effective,ipc,ip,el) + constitutive_postResults(startPos:endPos) = constitutive_j2_postResults(Tstar_v_effective,ipc,ip,el) case (PLASTICITY_PHENOPOWERLAW_ID) - constitutive_postResults = & + constitutive_postResults(startPos:endPos) = & constitutive_phenopowerlaw_postResults(Tstar_v_effective,ipc,ip,el) case (PLASTICITY_DISLOTWIN_ID) - constitutive_postResults = & + constitutive_postResults(startPos:endPos) = & constitutive_dislotwin_postResults(Tstar_v_effective,Temperature,ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - constitutive_postResults = & + constitutive_postResults(startPos:endPos) = & constitutive_dislokmc_postResults(Tstar_v_effective,Temperature,ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) - constitutive_postResults = & + constitutive_postResults(startPos:endPos) = & constitutive_nonlocal_postResults (Tstar_v_effective,FeArray,ip,el) end select + +#ifdef multiphysicsOut + startPos = endPos + 1_pInt + endPos = endPos + damageState(material_phase(ipc,ip,el))%sizePostResults + select case (phase_damage(material_phase(ipc,ip,el))) + case (LOCAL_DAMAGE_BRITTLE_ID) + constitutive_postResults(startPos:endPos) = damage_brittle_postResults(ipc, ip, el) + end select + + startPos = endPos + 1_pInt + endPos = endPos + thermalState(material_phase(ipc,ip,el))%sizePostResults + select case (phase_thermal(material_phase(ipc,ip,el))) + case (LOCAL_THERMAL_HEATGEN_ID) +! constitutive_postResults(startPos:endPos) = thermal_adiabatic_postResults(ipc, ip, el) + end select +#endif end function constitutive_postResults diff --git a/code/crystallite.f90 b/code/crystallite.f90 index df623ece7..ec27ba0d3 100644 --- a/code/crystallite.f90 +++ b/code/crystallite.f90 @@ -175,10 +175,6 @@ subroutine crystallite_init(temperature) lattice_structure use constitutive, only: & constitutive_microstructure ! derived (shortcut) quantities of given state - use constitutive_damage, only: & - constitutive_damage_microstructure - use constitutive_thermal, only: & - constitutive_thermal_microstructure implicit none real(pReal), intent(in) :: temperature @@ -425,14 +421,9 @@ subroutine crystallite_init(temperature) do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e) do g = 1_pInt,myNgrains call constitutive_microstructure(temperature, & + 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 - call constitutive_damage_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - call constitutive_thermal_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states enddo enddo enddo @@ -1422,12 +1413,6 @@ subroutine crystallite_integrateStateRK4() use constitutive, only: & constitutive_collectDotState, & constitutive_microstructure - use constitutive_damage, only: & - constitutive_damage_collectDotState, & - constitutive_damage_microstructure - use constitutive_thermal, only: & - constitutive_thermal_collectDotState, & - constitutive_thermal_microstructure implicit none real(pReal), dimension(4), parameter :: & @@ -1478,18 +1463,10 @@ subroutine crystallite_integrateStateRK4() !$OMP PARALLEL !$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)) then + if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - endif enddo; enddo; enddo !$OMP ENDDO @@ -1594,17 +1571,11 @@ 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)) then + if (crystallite_todo(g,i,e)) & call constitutive_microstructure(crystallite_temperature(i,e), & + 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 - call constitutive_damage_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - call constitutive_thermal_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - endif enddo; enddo; enddo !$OMP ENDDO @@ -1632,19 +1603,11 @@ subroutine crystallite_integrateStateRK4() first3steps: if (n < 4) then !$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)) then + if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & timeStepFraction(n)*crystallite_subdt(g,i,e), & ! fraction of original timestep crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - endif enddo; enddo; enddo !$OMP ENDDO @@ -1736,15 +1699,9 @@ subroutine crystallite_integrateStateRKCK45() use constitutive, only: & constitutive_collectDotState, & constitutive_maxSizeDotState, & + constitutive_damage_maxSizeDotState, & + constitutive_thermal_maxSizeDotState, & constitutive_microstructure - use constitutive_damage, only: & - constitutive_damage_collectDotState, & - constitutive_damage_microstructure, & - constitutive_damage_maxSizeDotState - use constitutive_thermal, only: & - constitutive_thermal_collectDotState, & - constitutive_thermal_microstructure, & - constitutive_thermal_maxSizeDotState implicit none @@ -1817,18 +1774,10 @@ subroutine crystallite_integrateStateRKCK45() !$OMP PARALLEL !$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)) then + if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - endif enddo; enddo; enddo !$OMP ENDDO !$OMP DO PRIVATE(p,cc) @@ -1938,17 +1887,11 @@ 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)) then - call constitutive_microstructure(crystallite_temperature(i,e), crystallite_Fe(1:3,1:3,g,i,e), & + if (crystallite_todo(g,i,e)) & + call constitutive_microstructure(crystallite_temperature(i,e), & + 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 - call constitutive_damage_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - call constitutive_thermal_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - - endif enddo; enddo; enddo !$OMP ENDDO @@ -1978,19 +1921,11 @@ subroutine crystallite_integrateStateRKCK45() #endif !$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)) then + if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & C(stage)*crystallite_subdt(g,i,e), & ! fraction of original timestep crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - endif enddo; enddo; enddo !$OMP ENDDO !$OMP DO PRIVATE(p,cc) @@ -2200,16 +2135,11 @@ subroutine crystallite_integrateStateRKCK45() ! --- UPDATE DEPENDENT STATES IF RESIDUUM BELOW TOLERANCE --- !$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)) then - call constitutive_microstructure(crystallite_temperature(i,e), crystallite_Fe(1:3,1:3,g,i,e), & + if (crystallite_todo(g,i,e)) & + call constitutive_microstructure(crystallite_temperature(i,e), & + 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 - call constitutive_damage_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - call constitutive_thermal_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - endif enddo; enddo; enddo !$OMP ENDDO @@ -2296,14 +2226,8 @@ subroutine crystallite_integrateStateAdaptiveEuler() use constitutive, only: & constitutive_collectDotState, & constitutive_microstructure, & - constitutive_maxSizeDotState - use constitutive_damage, only: & - constitutive_damage_collectDotState, & - constitutive_damage_microstructure, & - constitutive_damage_maxSizeDotState - use constitutive_thermal, only: & - constitutive_thermal_collectDotState, & - constitutive_thermal_microstructure, & + constitutive_maxSizeDotState, & + constitutive_damage_maxSizeDotState, & constitutive_thermal_maxSizeDotState implicit none @@ -2361,18 +2285,10 @@ 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)) then + if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e ) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - endif enddo; enddo; enddo !$OMP ENDDO !$OMP DO PRIVATE(p,c) @@ -2453,14 +2369,10 @@ 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_Fe(1:3,1:3,g,i,e), & + call constitutive_microstructure(crystallite_temperature(i,e), & + 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 - call constitutive_damage_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - call constitutive_thermal_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states enddo; enddo; enddo !$OMP ENDDO !$OMP END PARALLEL @@ -2496,13 +2408,6 @@ subroutine crystallite_integrateStateAdaptiveEuler() call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) enddo; enddo; enddo !$OMP ENDDO !$OMP DO PRIVATE(p,c) @@ -2675,12 +2580,6 @@ subroutine crystallite_integrateStateEuler() use constitutive, only: & constitutive_collectDotState, & constitutive_microstructure - use constitutive_damage, only: & - constitutive_damage_collectDotState, & - constitutive_damage_microstructure - use constitutive_thermal, only: & - constitutive_thermal_collectDotState, & - constitutive_thermal_microstructure implicit none @@ -2721,13 +2620,6 @@ eIter = FEsolving_execElem(1:2) call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) enddo; enddo; enddo !$OMP ENDDO !$OMP DO PRIVATE(p,c) @@ -2812,14 +2704,10 @@ 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_Fe(1:3,1:3,g,i,e), & + call constitutive_microstructure(crystallite_temperature(i,e), & + 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 - call constitutive_damage_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - call constitutive_thermal_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states enddo; enddo; enddo !$OMP ENDDO !$OMP END PARALLEL @@ -2910,14 +2798,8 @@ subroutine crystallite_integrateStateFPI() use constitutive, only: & constitutive_collectDotState, & constitutive_microstructure, & - constitutive_maxSizeDotState - use constitutive_damage, only: & - constitutive_damage_collectDotState, & - constitutive_damage_microstructure, & - constitutive_damage_maxSizeDotState - use constitutive_thermal, only: & - constitutive_thermal_collectDotState, & - constitutive_thermal_microstructure, & + constitutive_maxSizeDotState, & + constitutive_damage_maxSizeDotState, & constitutive_thermal_maxSizeDotState implicit none @@ -3001,18 +2883,10 @@ subroutine crystallite_integrateStateFPI() !$OMP PARALLEL !$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)) then + if (crystallite_todo(g,i,e)) & call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), crystallite_Fe, & crystallite_Fp, crystallite_temperature(i,e), & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - endif enddo; enddo; enddo !$OMP ENDDO @@ -3076,16 +2950,11 @@ 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)) then - call constitutive_microstructure(crystallite_temperature(i,e), crystallite_Fe(1:3,1:3,g,i,e), & + 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), & + 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 - call constitutive_damage_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - call constitutive_thermal_microstructure(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) ! update dependent state variables to be consistent with basic states - endif p = mappingConstitutive(2,g,i,e) c = mappingConstitutive(1,g,i,e) plasticState(p)%previousDotState2(:,c) = plasticState(p)%previousDotState(:,c) @@ -3126,18 +2995,10 @@ subroutine crystallite_integrateStateFPI() !$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)) then + 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_Fe, & crystallite_Fp, crystallite_temperature(i,e), & crystallite_subdt(g,i,e), crystallite_subFrac, g,i,e) - call constitutive_damage_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Fe(1:3,1:3,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - call constitutive_thermal_collectDotState(crystallite_Tstar_v(1:6,g,i,e), & - crystallite_Lp(1:3,1:3,g,i,e), & - g,i,e) - endif enddo; enddo; enddo !$OMP ENDDO @@ -3934,10 +3795,6 @@ function crystallite_postResults(ipc, ip, el) use constitutive, only: & constitutive_homogenizedC, & constitutive_postResults - use constitutive_damage, only: & - constitutive_damage_postResults - use constitutive_thermal, only: & - constitutive_thermal_postResults implicit none integer(pInt), intent(in):: & @@ -3968,6 +3825,7 @@ function crystallite_postResults(ipc, ip, el) crystID, & mySize, & n + crystID = microstructure_crystallite(mesh_element(4,el)) @@ -4074,27 +3932,10 @@ function crystallite_postResults(ipc, ip, el) crystallite_postResults(c+1) = real(plasticState(material_phase(ipc,ip,el))%sizePostResults,pReal) ! size of constitutive results c = c + 1_pInt - if (plasticState(material_phase(ipc,ip,el))%sizePostResults > 0_pInt) & - crystallite_postResults(c+1:c+plasticState(material_phase(ipc,ip,el))%sizePostResults) = & + 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) - c = c + plasticState(material_phase(ipc,ip,el))%sizePostResults - -#ifdef multiphysicsOut - crystallite_postResults(c+1) = real(damageState(material_phase(ipc,ip,el))%sizePostResults,pReal) ! size of constitutive results - c = c + 1_pInt - if (damageState(material_phase(ipc,ip,el))%sizePostResults > 0_pInt) & - crystallite_postResults(c+1:c+damageState(material_phase(ipc,ip,el))%sizePostResults) = & - constitutive_damage_postResults(ipc, ip, el) - c = c + damageState(material_phase(ipc,ip,el))%sizePostResults - - crystallite_postResults(c+1) = real(thermalState(material_phase(ipc,ip,el))%sizePostResults,pReal) ! size of constitutive results - c = c + 1_pInt - if (thermalState(material_phase(ipc,ip,el))%sizePostResults > 0_pInt) & - crystallite_postResults(c+1:c+thermalState(material_phase(ipc,ip,el))%sizePostResults) = & - constitutive_thermal_postResults(ipc, ip, el) - c = c + thermalState(material_phase(ipc,ip,el))%sizePostResults -#endif end function crystallite_postResults diff --git a/code/damage_brittle.f90 b/code/damage_brittle.f90 index 135a2eea7..19cd2adef 100644 --- a/code/damage_brittle.f90 +++ b/code/damage_brittle.f90 @@ -248,7 +248,7 @@ end subroutine damage_brittle_aTolState !-------------------------------------------------------------------------------------------------- !> @brief calculates derived quantities from state !-------------------------------------------------------------------------------------------------- -subroutine damage_brittle_dotState(Tstar_v, Fe, Lp, ipc, ip, el) +subroutine damage_brittle_dotState(ipc, ip, el) use material, only: & mappingConstitutive, & phase_damageInstance, & @@ -261,11 +261,6 @@ subroutine damage_brittle_dotState(Tstar_v, Fe, Lp, ipc, ip, el) ipc, & !< component-ID of integration point ip, & !< integration point el !< element - real(pReal), intent(in), dimension(6) :: & - Tstar_v !< 2nd Piola Kirchhoff stress tensor (Mandel) - real(pReal), intent(in), dimension(3,3) :: & - Lp, & - Fe integer(pInt) :: & phase, constituent diff --git a/code/homogenization.f90 b/code/homogenization.f90 index b43391f86..aab779f17 100644 --- a/code/homogenization.f90 +++ b/code/homogenization.f90 @@ -104,10 +104,8 @@ subroutine homogenization_init() use lattice, only: & lattice_referenceTemperature use constitutive, only: & - constitutive_maxSizePostResults - use constitutive_damage, only: & - constitutive_damage_maxSizePostResults - use constitutive_thermal, only: & + constitutive_maxSizePostResults, & + constitutive_damage_maxSizePostResults, & constitutive_thermal_maxSizePostResults use crystallite, only: & crystallite_maxSizePostResults