more documentation and parameters capitalization unified and using ipc in all modules (sometimes called gr)

nonlocal: only missing line continuation in string fixed
This commit is contained in:
Martin Diehl 2013-07-01 06:10:42 +00:00
parent 89cea68bc5
commit 40ace5c666
4 changed files with 564 additions and 441 deletions

View File

@ -19,9 +19,9 @@
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! $Id$ ! $Id$
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH !> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
!> @brief Isotropic (J2) Plasticity !> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
!> @brief material subroutine for isotropic (J2) plasticity
!> @details Isotropic (J2) Plasticity which resembles the phenopowerlaw plasticity without !> @details Isotropic (J2) Plasticity which resembles the phenopowerlaw plasticity without
!! resolving the stress on the slip systems. Will give the response of phenopowerlaw for an !! resolving the stress on the slip systems. Will give the response of phenopowerlaw for an
!! untextured polycrystal !! untextured polycrystal
@ -47,11 +47,11 @@ module constitutive_j2
character(len=64), dimension(:,:), allocatable, target, public :: & character(len=64), dimension(:,:), allocatable, target, public :: &
constitutive_j2_output !< name of each post result output constitutive_j2_output !< name of each post result output
integer(pInt), dimension(:), allocatable, private :: &
constitutive_j2_Noutput !< ??
character(len=32), dimension(:), allocatable, private :: & character(len=32), dimension(:), allocatable, private :: &
constitutive_j2_structureName constitutive_j2_structureName
integer(pInt), dimension(:), allocatable, private :: &
constitutive_j2_Noutput !< ??
real(pReal), dimension(:), allocatable, private :: & real(pReal), dimension(:), allocatable, private :: &
constitutive_j2_fTaylor, & !< Taylor factor constitutive_j2_fTaylor, & !< Taylor factor
@ -72,7 +72,6 @@ module constitutive_j2
constitutive_j2_tausat_SinhFitC, & !< fitting parameter for normalized strain rate vs. stress function constitutive_j2_tausat_SinhFitC, & !< fitting parameter for normalized strain rate vs. stress function
constitutive_j2_tausat_SinhFitD !< fitting parameter for normalized strain rate vs. stress function constitutive_j2_tausat_SinhFitD !< fitting parameter for normalized strain rate vs. stress function
real(pReal), dimension(:,:,:), allocatable, private :: & real(pReal), dimension(:,:,:), allocatable, private :: &
constitutive_j2_Cslip_66 constitutive_j2_Cslip_66
@ -93,6 +92,7 @@ contains
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief module initialization !> @brief module initialization
!> @details reads in material parameters, allocates arrays, and does sanity checks
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
subroutine constitutive_j2_init(myFile) subroutine constitutive_j2_init(myFile)
use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment)
@ -100,6 +100,7 @@ subroutine constitutive_j2_init(myFile)
math_Mandel3333to66, & math_Mandel3333to66, &
math_Voigt66to3333 math_Voigt66to3333
use IO, only: & use IO, only: &
IO_read, &
IO_lc, & IO_lc, &
IO_getTag, & IO_getTag, &
IO_isBlank, & IO_isBlank, &
@ -107,8 +108,7 @@ subroutine constitutive_j2_init(myFile)
IO_stringValue, & IO_stringValue, &
IO_floatValue, & IO_floatValue, &
IO_error, & IO_error, &
IO_timeStamp, & IO_timeStamp
IO_read
use material use material
use debug, only: & use debug, only: &
debug_level, & debug_level, &
@ -133,12 +133,11 @@ subroutine constitutive_j2_init(myFile)
write(6,'(a15,a)') ' Current time: ',IO_timeStamp() write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
#include "compilation_info.f90" #include "compilation_info.f90"
maxNinstance = int(count(phase_plasticity == constitutive_j2_label),pInt) maxNinstance = int(count(phase_plasticity == CONSTITUTIVE_J2_label),pInt)
if (maxNinstance == 0_pInt) return if (maxNinstance == 0_pInt) return
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) then if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) &
write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance
endif
allocate(constitutive_j2_sizeDotState(maxNinstance)) allocate(constitutive_j2_sizeDotState(maxNinstance))
constitutive_j2_sizeDotState = 0_pInt constitutive_j2_sizeDotState = 0_pInt
@ -184,7 +183,6 @@ subroutine constitutive_j2_init(myFile)
constitutive_j2_tausat_SinhFitD = 0.0_pReal constitutive_j2_tausat_SinhFitD = 0.0_pReal
rewind(myFile) rewind(myFile)
do while (trim(line) /= '#EOF#' .and. IO_lc(IO_getTag(line,'<','>')) /= 'phase') ! wind forward to <phase> do while (trim(line) /= '#EOF#' .and. IO_lc(IO_getTag(line,'<','>')) /= 'phase') ! wind forward to <phase>
line = IO_read(myFile) line = IO_read(myFile)
enddo enddo
@ -195,12 +193,12 @@ subroutine constitutive_j2_init(myFile)
if (IO_getTag(line,'<','>') /= '') exit ! stop at next part if (IO_getTag(line,'<','>') /= '') exit ! stop at next part
if (IO_getTag(line,'[',']') /= '') then ! next section if (IO_getTag(line,'[',']') /= '') then ! next section
section = section + 1_pInt ! advance section counter section = section + 1_pInt ! advance section counter
cycle cycle ! skip to next line
endif endif
if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran
if (phase_plasticity(section) == CONSTITUTIVE_J2_label) then ! one of my sections if (phase_plasticity(section) == CONSTITUTIVE_J2_label) then ! one of my sections
i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase
positions = IO_stringPos(line,maxNchunks) positions = IO_stringPos(line,MAXNCHUNKS)
tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key
select case(tag) select case(tag)
case ('plasticity','elasticity') case ('plasticity','elasticity')
@ -256,7 +254,7 @@ subroutine constitutive_j2_init(myFile)
case ('atol_resistance') case ('atol_resistance')
constitutive_j2_aTolResistance(i) = IO_floatValue(line,positions,2_pInt) constitutive_j2_aTolResistance(i) = IO_floatValue(line,positions,2_pInt)
case default case default
call IO_error(210_pInt,ext_msg=trim(tag)//' ('//constitutive_j2_label//')') call IO_error(210_pInt,ext_msg=trim(tag)//' ('//CONSTITUTIVE_J2_label//')')
end select end select
endif endif
endif endif
@ -280,8 +278,8 @@ subroutine constitutive_j2_init(myFile)
//CONSTITUTIVE_J2_label//')') //CONSTITUTIVE_J2_label//')')
enddo sanityChecks enddo sanityChecks
do i = 1_pInt,maxNinstance instancesLoop: do i = 1_pInt,maxNinstance
do o = 1_pInt,constitutive_j2_Noutput(i) outputsLoop: do o = 1_pInt,constitutive_j2_Noutput(i)
select case(constitutive_j2_output(o,i)) select case(constitutive_j2_output(o,i))
case('flowstress') case('flowstress')
mySize = 1_pInt mySize = 1_pInt
@ -296,7 +294,7 @@ subroutine constitutive_j2_init(myFile)
constitutive_j2_sizePostResults(i) = & constitutive_j2_sizePostResults(i) = &
constitutive_j2_sizePostResults(i) + mySize constitutive_j2_sizePostResults(i) + mySize
endif endif
enddo enddo outputsLoop
constitutive_j2_sizeDotState(i) = 1_pInt constitutive_j2_sizeDotState(i) = 1_pInt
constitutive_j2_sizeState(i) = 1_pInt constitutive_j2_sizeState(i) = 1_pInt
@ -306,14 +304,14 @@ subroutine constitutive_j2_init(myFile)
constitutive_j2_Cslip_66(1:6,1:6,i) = & constitutive_j2_Cslip_66(1:6,1:6,i) = &
math_Mandel3333to66(math_Voigt66to3333(constitutive_j2_Cslip_66(1:6,1:6,i))) ! todo what is going on here? math_Mandel3333to66(math_Voigt66to3333(constitutive_j2_Cslip_66(1:6,1:6,i))) ! todo what is going on here?
enddo enddo instancesLoop
end subroutine constitutive_j2_init end subroutine constitutive_j2_init
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief initial microstructural state !> @brief sets the initial microstructural state for a given instance of this plasticity
!> @detail initial microstructural state is set to the value specified by tau0 !> @details initial microstructural state is set to the value specified by tau0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_j2_stateInit(myInstance) pure function constitutive_j2_stateInit(myInstance)
@ -327,12 +325,12 @@ end function constitutive_j2_stateInit
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief relevant state values for the current instance of this plasticity !> @brief sets the relevant state values for a given instance of this plasticity
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_j2_aTolState(myInstance) pure function constitutive_j2_aTolState(myInstance)
implicit none implicit none
integer(pInt), intent(in) :: myInstance !< number specifying the instance of the plasticity integer(pInt), intent(in) :: myInstance !< number specifying the instance of the plasticity
real(pReal), dimension(constitutive_j2_sizeState(myInstance)) :: & real(pReal), dimension(constitutive_j2_sizeState(myInstance)) :: &
constitutive_j2_aTolState constitutive_j2_aTolState
@ -343,20 +341,22 @@ end function constitutive_j2_aTolState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief homogenized elasticity matrix !> @brief returns the homogenized elasticity matrix
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_j2_homogenizedC(state,ipc,ip,el) pure function constitutive_j2_homogenizedC(state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use mesh, only: & use mesh, only: &
mesh_NcpElems,mesh_maxNips mesh_NcpElems, &
mesh_maxNips
use material, only: & use material, only: &
homogenization_maxNgrains,& homogenization_maxNgrains,&
material_phase, & material_phase, &
phase_plasticityInstance phase_plasticityInstance
implicit none implicit none
real(pReal), dimension(6,6) :: constitutive_j2_homogenizedC real(pReal), dimension(6,6) :: &
constitutive_j2_homogenizedC
integer(pInt), intent(in) :: & integer(pInt), intent(in) :: &
ipc, & !< component-ID of integration point ipc, & !< component-ID of integration point
ip, & !< integration point ip, & !< integration point
@ -371,18 +371,17 @@ end function constitutive_j2_homogenizedC
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculate derived quantities from state (not used here) !> @brief calculates derived quantities from state
!> @details dummy subroutine, does nothing
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure subroutine constitutive_j2_microstructure(temperature,state,ipc,ip,el) pure subroutine constitutive_j2_microstructure(temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use mesh, only: & use mesh, only: &
mesh_NcpElems,& mesh_NcpElems, &
mesh_maxNips mesh_maxNips
use material, only: & use material, only: &
homogenization_maxNgrains, & homogenization_maxNgrains
material_phase, &
phase_plasticityInstance
implicit none implicit none
integer(pInt), intent(in) :: & integer(pInt), intent(in) :: &
@ -419,6 +418,11 @@ pure subroutine constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar_99,Tstar_v,&
phase_plasticityInstance phase_plasticityInstance
implicit none implicit none
real(pReal), dimension(3,3), intent(out) :: &
Lp !< plastic velocity gradient
real(pReal), dimension(9,9), intent(out) :: &
dLp_dTstar_99 !< derivative of Lp with respect to 2nd Piola Kirchhoff stress
real(pReal), dimension(6), intent(in) :: & real(pReal), dimension(6), intent(in) :: &
Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation
real(pReal), intent(in) :: & real(pReal), intent(in) :: &
@ -430,11 +434,6 @@ pure subroutine constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar_99,Tstar_v,&
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: & type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state !< microstructure state state !< microstructure state
real(pReal), dimension(3,3), intent(out) :: &
Lp !< plastic velocity gradient
real(pReal), dimension(9,9), intent(out) :: &
dLp_dTstar_99 !< derivative of Lp with respect to 2nd Piola Kirchhoff stress
real(pReal), dimension(3,3) :: & real(pReal), dimension(3,3) :: &
Tstar_dev_33 !< deviatoric part of the 2nd Piola Kirchhoff stress tensor as 2nd order tensor Tstar_dev_33 !< deviatoric part of the 2nd Piola Kirchhoff stress tensor as 2nd order tensor
real(pReal), dimension(3,3,3,3) :: & real(pReal), dimension(3,3,3,3) :: &
@ -479,7 +478,7 @@ end subroutine constitutive_j2_LpAndItsTangent
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates the rate of change of microstructure !> @brief calculates the rate of change of microstructure
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_j2_dotState(Tstar_v,Temperature,state,ipc,ip, el) pure function constitutive_j2_dotState(Tstar_v,temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use math, only: & use math, only: &
@ -498,7 +497,7 @@ pure function constitutive_j2_dotState(Tstar_v,Temperature,state,ipc,ip, el)
real(pReal), dimension(6), intent(in):: & real(pReal), dimension(6), intent(in):: &
Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation
real(pReal), intent(in) :: & real(pReal), intent(in) :: &
Temperature !< temperature at integration point temperature !< temperature at integration point
integer(pInt), intent(in) :: & integer(pInt), intent(in) :: &
ipc, & !< component-ID of integration point ipc, & !< component-ID of integration point
ip, & !< integration point ip, & !< integration point
@ -561,13 +560,12 @@ end function constitutive_j2_dotState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief (instantaneous) incremental change of microstructure (dummy function) !> @brief (instantaneous) incremental change of microstructure
!> @details dummy function, returns 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_j2_deltaState(Tstar_v,temperature,state,ipc,ip,el) pure function constitutive_j2_deltaState(Tstar_v,temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use math, only: &
math_mul6x6
use mesh, only: & use mesh, only: &
mesh_NcpElems, & mesh_NcpElems, &
mesh_maxNips mesh_maxNips
@ -597,7 +595,8 @@ end function constitutive_j2_deltaState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates the rate of change of temperature (dummy function) !> @brief calculates the rate of change of temperature
!> @details dummy function, returns 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
real(pReal) pure function constitutive_j2_dotTemperature(Tstar_v,temperature,state,ipc,ip,el) real(pReal) pure function constitutive_j2_dotTemperature(Tstar_v,temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
@ -653,7 +652,8 @@ pure function constitutive_j2_postResults(Tstar_v,temperature,dt,state,ipc,ip,el
ip, & !< integration point ip, & !< integration point
el !< element el !< element
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: & type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state state !< microstructure state
real(pReal), dimension(constitutive_j2_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & real(pReal), dimension(constitutive_j2_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
constitutive_j2_postResults constitutive_j2_postResults

View File

@ -30,20 +30,21 @@ module constitutive_none
implicit none implicit none
private private
character (len=*), parameter, public :: constitutive_none_LABEL = 'none' character (len=*), parameter, public :: &
CONSTITUTIVE_NONE_label = 'none' !< label for this constitutive model
integer(pInt), dimension(:), allocatable, public :: & integer(pInt), dimension(:), allocatable, public :: &
constitutive_none_sizeDotState, & constitutive_none_sizeDotState, &
constitutive_none_sizeState, & constitutive_none_sizeState, &
constitutive_none_sizePostResults constitutive_none_sizePostResults
character(len=32), dimension(:), allocatable, private :: & integer(pInt), dimension(:,:), allocatable, target, public :: &
constitutive_none_sizePostResult !< size of each post result output
character(len=32), dimension(:), allocatable, private :: &
constitutive_none_structureName constitutive_none_structureName
integer(pInt), dimension(:,:), allocatable, target, public :: & real(pReal), dimension(:,:,:), allocatable, private :: &
constitutive_none_sizePostResult ! size of each post result output
real(pReal), dimension(:,:,:), allocatable, private :: &
constitutive_none_Cslip_66 constitutive_none_Cslip_66
public :: & public :: &
@ -58,11 +59,12 @@ module constitutive_none
constitutive_none_dotTemperature, & constitutive_none_dotTemperature, &
constitutive_none_postResults constitutive_none_postResults
contains contains
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief reads in material parameters and allocates arrays !> @brief module initialization
!> @details reads in material parameters, allocates arrays, and does sanity checks
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
subroutine constitutive_none_init(myFile) subroutine constitutive_none_init(myFile)
use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment)
@ -84,23 +86,26 @@ subroutine constitutive_none_init(myFile)
debug_level, & debug_level, &
debug_constitutive, & debug_constitutive, &
debug_levelBasic debug_levelBasic
use lattice, only: lattice_symmetrizeC66 use lattice, only: &
lattice_symmetrizeC66
implicit none implicit none
integer(pInt), intent(in) :: myFile integer(pInt), intent(in) :: myFile
integer(pInt), parameter :: MAXNCHUNKS = 7_pInt integer(pInt), parameter :: MAXNCHUNKS = 7_pInt
integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions
integer(pInt) :: section = 0_pInt, maxNinstance, i integer(pInt) :: section = 0_pInt, maxNinstance, i
character(len=65536) :: tag character(len=65536) :: &
character(len=65536) :: line = '' ! to start initialized tag = '', &
line = '' ! to start initialized
write(6,'(/,a)') ' <<<+- constitutive_'//trim(constitutive_none_LABEL)//' init -+>>>' write(6,'(/,a)') ' <<<+- constitutive_'//trim(CONSTITUTIVE_NONE_label)//' init -+>>>'
write(6,'(a)') ' $Id$' write(6,'(a)') ' $Id$'
write(6,'(a15,a)') ' Current time: ',IO_timeStamp() write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
#include "compilation_info.f90" #include "compilation_info.f90"
maxNinstance = int(count(phase_plasticity == constitutive_none_label),pInt) maxNinstance = int(count(phase_plasticity == CONSTITUTIVE_NONE_label),pInt)
if (maxNinstance == 0_pInt) return if (maxNinstance == 0_pInt) return
if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) &
@ -119,11 +124,11 @@ subroutine constitutive_none_init(myFile)
rewind(myFile) rewind(myFile)
do while (trim(line) /= '#EOF#' .and. IO_lc(IO_getTag(line,'<','>')) /= 'phase') ! wind forward to <phase> do while (trim(line) /= '#EOF#' .and. IO_lc(IO_getTag(line,'<','>')) /= 'phase') ! wind forward to <phase>
line = IO_read(myFile) line = IO_read(myFile)
enddo enddo
do while (trim(line) /= '#EOF#') ! read thru sections of phase part do while (trim(line) /= '#EOF#') ! read through sections of phase part
line = IO_read(myFile) line = IO_read(myFile)
if (IO_isBlank(line)) cycle ! skip empty lines if (IO_isBlank(line)) cycle ! skip empty lines
if (IO_getTag(line,'<','>') /= '') exit ! stop at next part if (IO_getTag(line,'<','>') /= '') exit ! stop at next part
@ -131,8 +136,8 @@ subroutine constitutive_none_init(myFile)
section = section + 1_pInt ! advance section counter section = section + 1_pInt ! advance section counter
cycle cycle
endif endif
if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if statemen). It's not safe in Fortran if (section > 0_pInt ) then ! do not short-circuit here (.and. with next if-statement). It's not safe in Fortran
if ( phase_plasticity(section) == constitutive_none_LABEL) then ! one of my sections if (phase_plasticity(section) == CONSTITUTIVE_NONE_label) then ! one of my sections
i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase
positions = IO_stringPos(line,MAXNCHUNKS) positions = IO_stringPos(line,MAXNCHUNKS)
tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key
@ -160,7 +165,7 @@ subroutine constitutive_none_init(myFile)
case ('c66') case ('c66')
constitutive_none_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) constitutive_none_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt)
case default case default
call IO_error(210_pInt,ext_msg=trim(tag)//' ('//constitutive_none_label//')') call IO_error(210_pInt,ext_msg=trim(tag)//' ('//CONSTITUTIVE_NONE_label//')')
end select end select
endif endif
endif endif
@ -170,7 +175,7 @@ subroutine constitutive_none_init(myFile)
if (constitutive_none_structureName(i) == '') call IO_error(205_pInt,e=i) if (constitutive_none_structureName(i) == '') call IO_error(205_pInt,e=i)
enddo enddo
do i = 1_pInt,maxNinstance instancesLoop: do i = 1_pInt,maxNinstance
constitutive_none_sizeDotState(i) = 1_pInt constitutive_none_sizeDotState(i) = 1_pInt
constitutive_none_sizeState(i) = 1_pInt constitutive_none_sizeState(i) = 1_pInt
@ -179,43 +184,45 @@ subroutine constitutive_none_init(myFile)
constitutive_none_Cslip_66(:,:,i) = & constitutive_none_Cslip_66(:,:,i) = &
math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(:,:,i))) math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(:,:,i)))
enddo enddo instancesLoop
end subroutine constitutive_none_init end subroutine constitutive_none_init
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief sets the initial microstructural state !> @brief sets the initial microstructural state for a given instance of this plasticity
!> @details dummy function, returns 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_none_stateInit(myInstance) pure function constitutive_none_stateInit(myInstance)
implicit none implicit none
integer(pInt), intent(in) :: myInstance real(pReal), dimension(1) :: constitutive_none_stateInit
integer(pInt), intent(in) :: myInstance !< number specifying the instance of the plasticity
real(pReal), dimension(1) :: constitutive_none_stateInit
constitutive_none_stateInit = 0.0_pReal constitutive_none_stateInit = 0.0_pReal
end function constitutive_none_stateInit end function constitutive_none_stateInit
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief relevant microstructural state (ensures convergence as state is always 0.0) !> @brief sets the relevant state values for a given instance of this plasticity
!> @details ensures convergence as state is always 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_none_aTolState(myInstance) pure function constitutive_none_aTolState(myInstance)
implicit none implicit none
integer(pInt), intent(in) :: myInstance !< number specifying the current instance of the plasticity integer(pInt), intent(in) :: myInstance !< number specifying the instance of the plasticity
real(pReal), dimension(constitutive_none_sizeState(myInstance)) :: & real(pReal), dimension(constitutive_none_sizeState(myInstance)) :: &
constitutive_none_aTolState !< relevant state values for the current instance of this plasticity constitutive_none_aTolState
constitutive_none_aTolState = 1.0_pReal constitutive_none_aTolState = 1.0_pReal
end function constitutive_none_aTolState end function constitutive_none_aTolState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief homogenized elacticity matrix !> @brief returns the homogenized elasticity matrix
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_none_homogenizedC(state,ipc,ip,el) pure function constitutive_none_homogenizedC(state,ipc,ip,el)
use prec, only: & use prec, only: &
@ -229,51 +236,53 @@ pure function constitutive_none_homogenizedC(state,ipc,ip,el)
phase_plasticityInstance phase_plasticityInstance
implicit none implicit none
real(pReal), dimension(6,6) :: constitutive_none_homogenizedC real(pReal), dimension(6,6) :: &
constitutive_none_homogenizedC
integer(pInt), intent(in) :: & integer(pInt), intent(in) :: &
ipc, & !< component-ID of current integration point ipc, & !< component-ID of integration point
ip, & !< current integration point ip, & !< integration point
el !< current element el !< element
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
integer(pInt) :: matID state !< microstructure state
matID = phase_plasticityInstance(material_phase(ipc,ip,el)) constitutive_none_homogenizedC = constitutive_none_Cslip_66(1:6,1:6,&
constitutive_none_homogenizedC = constitutive_none_Cslip_66(1:6,1:6,matID) phase_plasticityInstance(material_phase(ipc,ip,el)))
end function constitutive_none_homogenizedC end function constitutive_none_homogenizedC
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates derived quantities from state (not used here) !> @brief calculates derived quantities from state
!> @details dummy subroutine, does nothing
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure subroutine constitutive_none_microstructure(Temperature,state,ipc,ip,el) pure subroutine constitutive_none_microstructure(temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use mesh, only: & use mesh, only: &
mesh_NcpElems, & mesh_NcpElems, &
mesh_maxNips mesh_maxNips
use material, only: & use material, only: &
homogenization_maxNgrains, & homogenization_maxNgrains
material_phase, &
phase_plasticityInstance
implicit none implicit none
integer(pInt), intent(in) :: & integer(pInt), intent(in) :: &
ipc, & !< component-ID of current integration point ipc, & !< component-ID of integration point
ip, & !< current integration point ip, & !< integration point
el !< current element el !< element
real(pReal), intent(in) :: & real(pReal), intent(in) :: &
Temperature !< temperature temperature !< temperature at IP
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state !< microstructure state
end subroutine constitutive_none_microstructure end subroutine constitutive_none_microstructure
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates plastic velocity gradient and its tangent !> @brief calculates plastic velocity gradient and its tangent
!> @details dummy function, returns 0.0 and Identity
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure subroutine constitutive_none_LpAndItsTangent(Lp, dLp_dTstar_99, Tstar_dev_v, Temperature, & pure subroutine constitutive_none_LpAndItsTangent(Lp,dLp_dTstar_99,Tstar_dev_v, &
state, gr, ip, el) temperature, state, ipc, ip, el)
use prec, only: & use prec, only: &
p_vec p_vec
use math, only: & use math, only: &
@ -287,31 +296,35 @@ pure subroutine constitutive_none_LpAndItsTangent(Lp, dLp_dTstar_99, Tstar_dev_v
phase_plasticityInstance phase_plasticityInstance
implicit none implicit none
real(pReal), dimension(6), intent(in) :: Tstar_dev_v !< deviatoric part of the 2nd Piola Kirchhoff stress tensor in Mandel notation real(pReal), dimension(3,3), intent(out) :: &
real(pReal), intent(in) :: Temperature Lp !< plastic velocity gradient
integer(pInt), intent(in) :: & real(pReal), dimension(9,9), intent(out) :: &
gr, & !< grain number dLp_dTstar_99 !< derivative of Lp with respect to 2nd Piola Kirchhoff stress
ip, & !< integration point number
el !< element number
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state !< state of the current microstructure
real(pReal), dimension(3,3), intent(out) :: Lp !< plastic velocity gradient real(pReal), dimension(6), intent(in) :: &
real(pReal), dimension(9,9), intent(out) :: dLp_dTstar_99 !< derivative of Lp with respect to Tstar (9x9 matrix) Tstar_dev_v !< deviatoric part of 2nd Piola Kirchhoff stress tensor in Mandel notation
real(pReal), intent(in) :: &
temperature !< temperature at IP
integer(pInt), intent(in) :: &
ipc, & !< component-ID of integration point
ip, & !< integration point
el !< element
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state !< microstructure state
Lp = 0.0_pReal !< set Lp to zero Lp = 0.0_pReal ! set Lp to zero
dLp_dTstar_99 = math_identity2nd(9) !< set dLp_dTstar to Identity dLp_dTstar_99 = math_identity2nd(9) ! set dLp_dTstar to Identity
end subroutine constitutive_none_LpAndItsTangent end subroutine constitutive_none_LpAndItsTangent
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates the rate of change of microstructure !> @brief calculates the rate of change of microstructure
!> @details dummy function, returns 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_none_dotState(Tstar_v, Temperature, state, gr, ip, el) pure function constitutive_none_dotState(Tstar_v,temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use math, only: &
math_identity2nd
use mesh, only: & use mesh, only: &
mesh_NcpElems, & mesh_NcpElems, &
mesh_maxNips mesh_maxNips
@ -321,15 +334,18 @@ pure function constitutive_none_dotState(Tstar_v, Temperature, state, gr, ip, el
phase_plasticityInstance phase_plasticityInstance
implicit none implicit none
real(pReal), dimension(1) :: constitutive_none_dotState real(pReal), dimension(1) :: &
constitutive_none_dotState
real(pReal), dimension(6), intent(in) :: Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation real(pReal), dimension(6), intent(in):: &
real(pReal), intent(in) :: Temperature Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation
integer(pInt), intent(in) :: & real(pReal), intent(in) :: &
gr, & !< grain number temperature !< temperature at integration point
ip, & !< integration point number integer(pInt), intent(in) :: &
el !< element number ipc, & !< component-ID of integration point
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state !< state of the current microstructure ip, & !< integration point
el !< element
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state !< microstructure state
constitutive_none_dotState = 0.0_pReal constitutive_none_dotState = 0.0_pReal
@ -338,12 +354,11 @@ end function constitutive_none_dotState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief (instantaneous) incremental change of microstructure !> @brief (instantaneous) incremental change of microstructure
!> @details dummy function, returns 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function constitutive_none_deltaState(Tstar_v, Temperature, state, gr, ip, el) function constitutive_none_deltaState(Tstar_v,temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use math, only: &
math_identity2nd
use mesh, only: & use mesh, only: &
mesh_NcpElems, & mesh_NcpElems, &
mesh_maxNips mesh_maxNips
@ -353,16 +368,19 @@ function constitutive_none_deltaState(Tstar_v, Temperature, state, gr, ip, el)
phase_plasticityInstance phase_plasticityInstance
implicit none implicit none
real(pReal), dimension(6), intent(in) :: Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation real(pReal), dimension(6), intent(in):: &
real(pReal), intent(in) :: Temperature Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation
integer(pInt), intent(in) :: & real(pReal), intent(in) :: &
gr, & !< grain number Temperature !< temperature at integration point
ip, & !< integration point number integer(pInt), intent(in) :: &
el !< element number ipc, & !< component-ID of integration point
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state !< state of the current microstructure ip, & !< integration point
el !< element
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state !< microstructure state
real(pReal), dimension(constitutive_none_sizeDotState(phase_plasticityInstance(& real(pReal), dimension(constitutive_none_sizeDotState(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: &
material_phase(gr,ip,el)))) :: constitutive_none_deltaState constitutive_none_deltaState
constitutive_none_deltaState = 0.0_pReal constitutive_none_deltaState = 0.0_pReal
@ -372,12 +390,11 @@ end function constitutive_none_deltaState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates the rate of change of temperature !> @brief calculates the rate of change of temperature
!> @details dummy function, returns 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure real(pReal) function constitutive_none_dotTemperature(Tstar_v, Temperature, state, gr, ip, el) real(pReal) pure function constitutive_none_dotTemperature(Tstar_v,temperature,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use math, only: &
math_identity2nd
use mesh, only: & use mesh, only: &
mesh_NcpElems, & mesh_NcpElems, &
mesh_maxNips mesh_maxNips
@ -385,13 +402,16 @@ pure real(pReal) function constitutive_none_dotTemperature(Tstar_v, Temperature,
homogenization_maxNgrains homogenization_maxNgrains
implicit none implicit none
real(pReal), dimension(6), intent(in) :: Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation real(pReal), dimension(6), intent(in) :: &
real(pReal), intent(in) :: Temperature Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation
integer(pInt), intent(in) :: & real(pReal), intent(in) :: &
gr, & !< grain number temperature !< temperature at integration point
ip, & !< integration point number integer(pInt), intent(in) :: &
el !< element number ipc, & !< component-ID of integration point
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state !< state of the current microstructure ip, & !< integration point
el !< element
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state !< microstructure state
constitutive_none_dotTemperature = 0.0_pReal constitutive_none_dotTemperature = 0.0_pReal
@ -400,12 +420,11 @@ end function constitutive_none_dotTemperature
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief return array of constitutive results !> @brief return array of constitutive results
!> @details dummy function, returns 0.0
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_none_postResults(Tstar_v, Temperature, dt, state, gr, ip, el) pure function constitutive_none_postResults(Tstar_v,temperature,dt,state,ipc,ip,el)
use prec, only: & use prec, only: &
p_vec p_vec
use math, only: &
math_mul6x6
use mesh, only: & use mesh, only: &
mesh_NcpElems, & mesh_NcpElems, &
mesh_maxNips mesh_maxNips
@ -416,18 +435,20 @@ pure function constitutive_none_postResults(Tstar_v, Temperature, dt, state, gr,
phase_Noutput phase_Noutput
implicit none implicit none
real(pReal), dimension(6), intent(in) :: Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation real(pReal), dimension(6), intent(in) :: &
real(pReal), intent(in) :: & Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation
Temperature, & real(pReal), intent(in) :: &
dt !< current time increment temperature, & !< temperature at integration point
integer(pInt), intent(in) :: & dt
gr, & !< grain number integer(pInt), intent(in) :: &
ip, & !< integration point number ipc, & !< component-ID of integration point
el !< element number ip, & !< integration point
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: state !< state of the current microstructure el !< element
type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: &
state !< microstructure state
real(pReal), dimension(constitutive_none_sizePostResults(phase_plasticityInstance(& real(pReal), dimension(constitutive_none_sizePostResults(phase_plasticityInstance(&
material_phase(gr,ip,el)))) :: constitutive_none_postResults material_phase(ipc,ip,el)))) :: constitutive_none_postResults
constitutive_none_postResults = 0.0_pReal constitutive_none_postResults = 0.0_pReal

View File

@ -937,8 +937,8 @@ do i = 1,maxNinstance
case('dislocationstress') case('dislocationstress')
mySize = 6_pInt mySize = 6_pInt
case default case default
call IO_error(212_pInt,ext_msg=constitutive_nonlocal_output(o,i)//'& call IO_error(212_pInt,ext_msg=constitutive_nonlocal_output(o,i)//&
('//CONSTITUTIVE_NONLOCAL_LABEL//')') '('//CONSTITUTIVE_NONLOCAL_LABEL//')')
end select end select
if (mySize > 0_pInt) then ! any meaningful output found if (mySize > 0_pInt) then ! any meaningful output found

File diff suppressed because it is too large Load Diff