diff --git a/src/constitutive.f90 b/src/constitutive.f90 index 54dbe39fa..2549237d6 100644 --- a/src/constitutive.f90 +++ b/src/constitutive.f90 @@ -15,7 +15,6 @@ module constitutive use HDF5_utilities use lattice use discretization - use plastic_kinehardening use plastic_dislotwin use plastic_disloucla use plastic_nonlocal @@ -49,7 +48,9 @@ module constitutive module subroutine plastic_phenopowerlaw_init end subroutine plastic_phenopowerlaw_init - + + module subroutine plastic_kinehardening_init + end subroutine plastic_kinehardening_init module subroutine plastic_isotropic_LpAndItsTangent(Lp,dLp_dMp,Mp,instance,of) real(pReal), dimension(3,3), intent(out) :: & @@ -76,6 +77,19 @@ module constitutive instance, & of end subroutine plastic_phenopowerlaw_LpAndItsTangent + + pure module subroutine plastic_kinehardening_LpAndItsTangent(Lp,dLp_dMp,Mp,instance,of) + real(pReal), dimension(3,3), intent(out) :: & + Lp !< plastic velocity gradient + real(pReal), dimension(3,3,3,3), intent(out) :: & + dLp_dMp !< derivative of Lp with respect to the Mandel stress + + real(pReal), dimension(3,3), intent(in) :: & + Mp !< Mandel stress + integer, intent(in) :: & + instance, & + of + end subroutine plastic_kinehardening_LpAndItsTangent module subroutine plastic_isotropic_LiAndItsTangent(Li,dLi_dMi,Mi,instance,of) @@ -108,6 +122,23 @@ module constitutive of end subroutine plastic_phenopowerlaw_dotState + module subroutine plastic_kinehardening_dotState(Mp,instance,of) + real(pReal), dimension(3,3), intent(in) :: & + Mp !< Mandel stress + integer, intent(in) :: & + instance, & + of + end subroutine plastic_kinehardening_dotState + + + module subroutine plastic_kinehardening_deltaState(Mp,instance,of) + real(pReal), dimension(3,3), intent(in) :: & + Mp !< Mandel stress + integer, intent(in) :: & + instance, & + of + end subroutine plastic_kinehardening_deltaState + module subroutine plastic_isotropic_results(instance,group) integer, intent(in) :: instance @@ -117,8 +148,13 @@ module constitutive module subroutine plastic_phenopowerlaw_results(instance,group) integer, intent(in) :: instance character(len=*), intent(in) :: group - end subroutine plastic_phenopowerlaw_results - + end subroutine plastic_phenopowerlaw_results + + module subroutine plastic_kinehardening_results(instance,group) + integer, intent(in) :: instance + character(len=*), intent(in) :: group + end subroutine plastic_kinehardening_results + end interface public :: & diff --git a/src/plastic_isotropic.f90 b/src/constitutive_plastic_isotropic.f90 similarity index 100% rename from src/plastic_isotropic.f90 rename to src/constitutive_plastic_isotropic.f90 diff --git a/src/plastic_kinematichardening.f90 b/src/constitutive_plastic_kinehardening.f90 similarity index 96% rename from src/plastic_kinematichardening.f90 rename to src/constitutive_plastic_kinehardening.f90 index 2a3dc4640..39c3fc01a 100644 --- a/src/plastic_kinematichardening.f90 +++ b/src/constitutive_plastic_kinehardening.f90 @@ -5,19 +5,7 @@ !> @brief Phenomenological crystal plasticity using a power law formulation for the shear rates !! and a Voce-type kinematic hardening rule !-------------------------------------------------------------------------------------------------- -module plastic_kinehardening - use prec - use debug - use math - use IO - use material - use config - use lattice - use discretization - use results - - implicit none - private +submodule(constitutive) plastic_kinehardening enum, bind(c) enumerator :: & @@ -80,13 +68,6 @@ module plastic_kinehardening deltaState, & state - public :: & - plastic_kinehardening_init, & - plastic_kinehardening_LpAndItsTangent, & - plastic_kinehardening_dotState, & - plastic_kinehardening_deltaState, & - plastic_kinehardening_results - contains @@ -94,7 +75,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine plastic_kinehardening_init +module subroutine plastic_kinehardening_init integer :: & Ninstance, & @@ -304,7 +285,7 @@ end subroutine plastic_kinehardening_init !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -pure subroutine plastic_kinehardening_LpAndItsTangent(Lp,dLp_dMp,Mp,instance,of) +pure module subroutine plastic_kinehardening_LpAndItsTangent(Lp,dLp_dMp,Mp,instance,of) real(pReal), dimension(3,3), intent(out) :: & Lp !< plastic velocity gradient @@ -346,7 +327,7 @@ end subroutine plastic_kinehardening_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine plastic_kinehardening_dotState(Mp,instance,of) +module subroutine plastic_kinehardening_dotState(Mp,instance,of) real(pReal), dimension(3,3), intent(in) :: & Mp !< Mandel stress @@ -388,7 +369,7 @@ end subroutine plastic_kinehardening_dotState !-------------------------------------------------------------------------------------------------- !> @brief calculates (instantaneous) incremental change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine plastic_kinehardening_deltaState(Mp,instance,of) +module subroutine plastic_kinehardening_deltaState(Mp,instance,of) real(pReal), dimension(3,3), intent(in) :: & Mp !< Mandel stress @@ -436,11 +417,11 @@ end subroutine plastic_kinehardening_deltaState !-------------------------------------------------------------------------------------------------- !> @brief writes results to HDF5 output file !-------------------------------------------------------------------------------------------------- -subroutine plastic_kinehardening_results(instance,group) +module subroutine plastic_kinehardening_results(instance,group) #if defined(PETSc) || defined(DAMASK_HDF5) - integer, intent(in) :: instance - character(len=*) :: group + integer, intent(in) :: instance + character(len=*), intent(in) :: group integer :: o associate(prm => param(instance), stt => state(instance)) @@ -548,4 +529,4 @@ pure subroutine kinetics(Mp,instance,of, & end subroutine kinetics -end module plastic_kinehardening +end submodule plastic_kinehardening diff --git a/src/plastic_none.f90 b/src/constitutive_plastic_none.f90 similarity index 100% rename from src/plastic_none.f90 rename to src/constitutive_plastic_none.f90 diff --git a/src/plastic_phenopowerlaw.f90 b/src/constitutive_plastic_phenopowerlaw.f90 similarity index 100% rename from src/plastic_phenopowerlaw.f90 rename to src/constitutive_plastic_phenopowerlaw.f90 diff --git a/src/plastic_dislotwin.f90 b/src/plastic_dislotwin.f90 index 1f731a891..24b6bd3da 100644 --- a/src/plastic_dislotwin.f90 +++ b/src/plastic_dislotwin.f90 @@ -21,7 +21,7 @@ module plastic_dislotwin implicit none private - real(pReal), parameter :: & + real(pReal), parameter :: & kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin enum, bind(c)