diff --git a/src/discretization.f90 b/src/discretization.f90 index c79c72b5e..5f4d1c5a6 100644 --- a/src/discretization.f90 +++ b/src/discretization.f90 @@ -12,7 +12,8 @@ module discretization integer, public, protected :: & discretization_nIPs, & - discretization_Nelems + discretization_Nelems, & + discretization_Ncells integer, public, protected, dimension(:), allocatable :: & discretization_materialAt !ToDo: discretization_ID_material @@ -53,6 +54,7 @@ subroutine discretization_init(materialAt,& discretization_Nelems = size(materialAt,1) discretization_nIPs = size(IPcoords0,2)/discretization_Nelems + discretization_Ncells = discretization_Nelems*discretization_nIPs discretization_materialAt = materialAt diff --git a/src/homogenization_mechanical.f90 b/src/homogenization_mechanical.f90 index d2ec08394..1280a9cf3 100644 --- a/src/homogenization_mechanical.f90 +++ b/src/homogenization_mechanical.f90 @@ -131,20 +131,15 @@ module subroutine mechanical_homogenize(Delta_t,ce) integer :: co - homogenization_P(1:3,1:3,ce) = phase_P(1,ce) - homogenization_dPdF(1:3,1:3,1:3,1:3,ce) = phase_mechanical_dPdF(Delta_t,1,ce) + homogenization_P(1:3,1:3,ce) = phase_P(1,ce)*material_v(1,ce) + homogenization_dPdF(1:3,1:3,1:3,1:3,ce) = phase_mechanical_dPdF(Delta_t,1,ce)*material_v(1,ce) do co = 2, homogenization_Nconstituents(material_homogenizationID(ce)) homogenization_P(1:3,1:3,ce) = homogenization_P(1:3,1:3,ce) & - + phase_P(co,ce) + + phase_P(co,ce)*material_v(co,ce) homogenization_dPdF(1:3,1:3,1:3,1:3,ce) = homogenization_dPdF(1:3,1:3,1:3,1:3,ce) & - + phase_mechanical_dPdF(Delta_t,co,ce) + + phase_mechanical_dPdF(Delta_t,co,ce)*material_v(co,ce) end do - homogenization_P(1:3,1:3,ce) = homogenization_P(1:3,1:3,ce) & - / real(homogenization_Nconstituents(material_homogenizationID(ce)),pReal) - homogenization_dPdF(1:3,1:3,1:3,1:3,ce) = homogenization_dPdF(1:3,1:3,1:3,1:3,ce) & - / real(homogenization_Nconstituents(material_homogenizationID(ce)),pReal) - end subroutine mechanical_homogenize diff --git a/src/homogenization_thermal.f90 b/src/homogenization_thermal.f90 index c5490d869..9aa727041 100644 --- a/src/homogenization_thermal.f90 +++ b/src/homogenization_thermal.f90 @@ -105,13 +105,11 @@ module function homogenization_mu_T(ce) result(mu) integer :: co - mu = phase_mu_T(1,ce) + mu = phase_mu_T(1,ce)*material_v(1,ce) do co = 2, homogenization_Nconstituents(material_homogenizationID(ce)) - mu = mu + phase_mu_T(co,ce) + mu = mu + phase_mu_T(co,ce)*material_v(co,ce) end do - mu = mu / real(homogenization_Nconstituents(material_homogenizationID(ce)),pReal) - end function homogenization_mu_T @@ -126,13 +124,11 @@ module function homogenization_K_T(ce) result(K) integer :: co - K = phase_K_T(1,ce) + K = phase_K_T(1,ce)*material_v(1,ce) do co = 2, homogenization_Nconstituents(material_homogenizationID(ce)) - K = K + phase_K_T(co,ce) + K = K + phase_K_T(co,ce)*material_v(co,ce) end do - K = K / real(homogenization_Nconstituents(material_homogenizationID(ce)),pReal) - end function homogenization_K_T @@ -147,13 +143,11 @@ module function homogenization_f_T(ce) result(f) integer :: co - f = phase_f_T(material_phaseID(1,ce),material_phaseEntry(1,ce)) + f = phase_f_T(material_phaseID(1,ce),material_phaseEntry(1,ce))*material_v(1,ce) do co = 2, homogenization_Nconstituents(material_homogenizationID(ce)) - f = f + phase_f_T(material_phaseID(co,ce),material_phaseEntry(co,ce)) + f = f + phase_f_T(material_phaseID(co,ce),material_phaseEntry(co,ce))*material_v(co,ce) end do - f = f/real(homogenization_Nconstituents(material_homogenizationID(ce)),pReal) - end function homogenization_f_T diff --git a/src/material.f90 b/src/material.f90 index bf78a77a6..3ff280b0d 100644 --- a/src/material.f90 +++ b/src/material.f90 @@ -45,6 +45,9 @@ module material material_phaseID, & ! TODO: rename to material_ID_phase material_phaseEntry ! TODO: rename to material_entry_phase + real(pReal), dimension(:,:), allocatable, public, protected :: & + material_v ! fraction + public :: & material_init @@ -123,11 +126,13 @@ subroutine parse() allocate(counterPhase(phases%length),source=0) allocate(counterHomogenization(homogenizations%length),source=0) - allocate(material_homogenizationID(discretization_nIPs*discretization_Nelems),source=0) - allocate(material_homogenizationEntry(discretization_nIPs*discretization_Nelems),source=0) + allocate(material_homogenizationID(discretization_Ncells),source=0) + allocate(material_homogenizationEntry(discretization_Ncells),source=0) - allocate(material_phaseID(homogenization_maxNconstituents,discretization_nIPs*discretization_Nelems),source=0) - allocate(material_phaseEntry(homogenization_maxNconstituents,discretization_nIPs*discretization_Nelems),source=0) + allocate(material_phaseID(homogenization_maxNconstituents,discretization_Ncells),source=0) + allocate(material_phaseEntry(homogenization_maxNconstituents,discretization_Ncells),source=0) + + allocate(material_v(homogenization_maxNconstituents,discretization_Ncells),source=0.0_pReal) do el = 1, discretization_Nelems material => materials%get(discretization_materialAt(el)) @@ -140,11 +145,11 @@ subroutine parse() material_homogenizationEntry(ce) = counterHomogenization(ho) end do - v = 0.0_pReal constituents => material%get('constituents') do co = 1, constituents%length constituent => constituents%get(co) - v = v + constituent%get_asFloat('v') + + v = constituent%get_asFloat('v') ph = phases%getIndex(constituent%get_asString('phase')) do ip = 1, discretization_nIPs @@ -152,10 +157,12 @@ subroutine parse() material_phaseID(co,ce) = ph counterPhase(ph) = counterPhase(ph) + 1 material_phaseEntry(co,ce) = counterPhase(ph) + material_v(co,ce) = v end do end do - if (dNeq(v,1.0_pReal,1.e-12_pReal)) call IO_error(153,ext_msg='constituent') + if (dNeq(sum(material_v(1:constituents%length,ce)),1.0_pReal,1.e-9_pReal)) & + call IO_error(153,ext_msg='constituent') end do