doxygen comments
This commit is contained in:
parent
1f86e098ba
commit
42b96354db
|
@ -16,106 +16,111 @@
|
||||||
! You should have received a copy of the GNU General Public License
|
! You should have received a copy of the GNU General Public License
|
||||||
! along with DAMASK. If not, see <http://www.gnu.org/licenses/>.
|
! along with DAMASK. If not, see <http://www.gnu.org/licenses/>.
|
||||||
!
|
!
|
||||||
!##############################################################
|
!--------------------------------------------------------------------------------------------------
|
||||||
!* $Id$
|
! $Id$
|
||||||
!***************************************
|
!--------------------------------------------------------------------------------------------------
|
||||||
!* Module: CRYSTALLITE *
|
!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!***************************************
|
!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!* contains: *
|
!> @author Christoph Kords, Max-Planck-Institut für Eisenforschung GmbH
|
||||||
!* - _init *
|
!> @brief crystallite state integration functions and reporting of results
|
||||||
!* - materialpoint_stressAndItsTangent *
|
!--------------------------------------------------------------------------------------------------
|
||||||
!* - _partitionDeformation *
|
|
||||||
!* - _updateState *
|
|
||||||
!* - _stressAndItsTangent *
|
|
||||||
!* - _postResults *
|
|
||||||
!***************************************
|
|
||||||
|
|
||||||
module crystallite
|
module crystallite
|
||||||
|
|
||||||
use prec, only: pReal, pInt
|
use prec, only: pReal, pInt
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private :: crystallite_integrateStateFPI, &
|
private
|
||||||
crystallite_integrateStateEuler, &
|
character(len=64), dimension(:,:), allocatable, private :: &
|
||||||
crystallite_integrateStateAdaptiveEuler, &
|
crystallite_output !< name of each post result output
|
||||||
crystallite_integrateStateRK4, &
|
integer(pInt), public, protected :: &
|
||||||
crystallite_integrateStateRKCK45, &
|
crystallite_maxSizePostResults
|
||||||
crystallite_integrateStress, &
|
integer(pInt), dimension(:), allocatable, public, protected :: &
|
||||||
crystallite_stateJump
|
crystallite_sizePostResults
|
||||||
external :: dgesv
|
integer(pInt), dimension(:,:), allocatable, private :: &
|
||||||
|
crystallite_sizePostResult
|
||||||
! ****************************************************************
|
integer(pInt), dimension(:,:,:), allocatable, private :: &
|
||||||
! *** General variables for the crystallite calculation ***
|
|
||||||
! ****************************************************************
|
|
||||||
integer(pInt) crystallite_maxSizePostResults
|
|
||||||
integer(pInt), dimension(:), allocatable :: crystallite_sizePostResults
|
|
||||||
integer(pInt), dimension(:,:), allocatable :: crystallite_sizePostResult
|
|
||||||
character(len=64), dimension(:,:), allocatable :: crystallite_output !< name of each post result output
|
|
||||||
integer(pInt), dimension (:,:,:), allocatable :: &
|
|
||||||
crystallite_symmetryID !< crystallographic symmetry 1=cubic 2=hexagonal, needed in all orientation calcs
|
crystallite_symmetryID !< crystallographic symmetry 1=cubic 2=hexagonal, needed in all orientation calcs
|
||||||
|
|
||||||
real(pReal), dimension (:,:,:), allocatable :: &
|
real(pReal), dimension (:,:,:), allocatable, public :: &
|
||||||
crystallite_dt, & !< requested time increment of each grain
|
crystallite_dt, & !< requested time increment of each grain
|
||||||
|
crystallite_Temperature, & !< Temp of each grain
|
||||||
|
crystallite_partionedTemperature0 !< Temp of each grain at start of homog inc
|
||||||
|
real(pReal), dimension (:,:,:), allocatable, private :: &
|
||||||
crystallite_subdt, & !< substepped time increment of each grain
|
crystallite_subdt, & !< substepped time increment of each grain
|
||||||
crystallite_subFrac, & !< already calculated fraction of increment
|
crystallite_subFrac, & !< already calculated fraction of increment
|
||||||
crystallite_subStep, & !< size of next integration step
|
crystallite_subStep, & !< size of next integration step
|
||||||
crystallite_Temperature, & !< Temp of each grain
|
|
||||||
crystallite_partionedTemperature0, & !< Temp of each grain at start of homog inc
|
|
||||||
crystallite_subTemperature0, & !< Temp of each grain at start of crystallite inc
|
crystallite_subTemperature0, & !< Temp of each grain at start of crystallite inc
|
||||||
crystallite_dotTemperature !< evolution of Temperature of each grain
|
crystallite_dotTemperature !< evolution of Temperature of each grain
|
||||||
real(pReal), dimension (:,:,:,:), allocatable :: &
|
real(pReal), dimension (:,:,:,:), allocatable, public :: &
|
||||||
crystallite_Tstar_v, & !< current 2nd Piola-Kirchhoff stress vector (end of converged time step)
|
crystallite_Tstar_v, & !< current 2nd Piola-Kirchhoff stress vector (end of converged time step)
|
||||||
crystallite_Tstar0_v, & !< 2nd Piola-Kirchhoff stress vector at start of FE inc
|
crystallite_Tstar0_v, & !< 2nd Piola-Kirchhoff stress vector at start of FE inc
|
||||||
crystallite_partionedTstar0_v, & !< 2nd Piola-Kirchhoff stress vector at start of homog inc
|
crystallite_partionedTstar0_v !< 2nd Piola-Kirchhoff stress vector at start of homog inc
|
||||||
|
real(pReal), dimension (:,:,:,:), allocatable, private :: &
|
||||||
crystallite_subTstar0_v, & !< 2nd Piola-Kirchhoff stress vector at start of crystallite inc
|
crystallite_subTstar0_v, & !< 2nd Piola-Kirchhoff stress vector at start of crystallite inc
|
||||||
crystallite_orientation, & !< orientation as quaternion
|
crystallite_orientation, & !< orientation as quaternion
|
||||||
crystallite_orientation0, & !< initial orientation as quaternion
|
crystallite_orientation0, & !< initial orientation as quaternion
|
||||||
crystallite_rotation !< grain rotation away from initial orientation as axis-angle (in degrees) in crystal reference frame
|
crystallite_rotation !< grain rotation away from initial orientation as axis-angle (in degrees) in crystal reference frame
|
||||||
real(pReal), dimension (:,:,:,:,:), allocatable :: &
|
real(pReal), dimension (:,:,:,:,:), allocatable, public :: &
|
||||||
crystallite_Fe, & !< current "elastic" def grad (end of converged time step)
|
|
||||||
crystallite_subFe0,& !< "elastic" def grad at start of crystallite inc
|
|
||||||
crystallite_Fp, & !< current plastic def grad (end of converged time step)
|
crystallite_Fp, & !< current plastic def grad (end of converged time step)
|
||||||
crystallite_invFp, & !< inverse of current plastic def grad (end of converged time step)
|
|
||||||
crystallite_Fp0, & !< plastic def grad at start of FE inc
|
crystallite_Fp0, & !< plastic def grad at start of FE inc
|
||||||
crystallite_partionedFp0,& !< plastic def grad at start of homog inc
|
crystallite_partionedFp0,& !< plastic def grad at start of homog inc
|
||||||
crystallite_subFp0,& !< plastic def grad at start of crystallite inc
|
|
||||||
crystallite_F0, & !< def grad at start of FE inc
|
crystallite_F0, & !< def grad at start of FE inc
|
||||||
crystallite_partionedF, & !< def grad to be reached at end of homog inc
|
crystallite_partionedF, & !< def grad to be reached at end of homog inc
|
||||||
crystallite_partionedF0, & !< def grad at start of homog inc
|
crystallite_partionedF0, & !< def grad at start of homog inc
|
||||||
crystallite_subF, & !< def grad to be reached at end of crystallite inc
|
|
||||||
crystallite_subF0, & !< def grad at start of crystallite inc
|
|
||||||
crystallite_Lp, & !< current plastic velocitiy grad (end of converged time step)
|
crystallite_Lp, & !< current plastic velocitiy grad (end of converged time step)
|
||||||
crystallite_Lp0, & !< plastic velocitiy grad at start of FE inc
|
crystallite_Lp0, & !< plastic velocitiy grad at start of FE inc
|
||||||
crystallite_partionedLp0,& !< plastic velocity grad at start of homog inc
|
crystallite_partionedLp0,& !< plastic velocity grad at start of homog inc
|
||||||
|
crystallite_P !< 1st Piola-Kirchhoff stress per grain
|
||||||
|
real(pReal), dimension (:,:,:,:,:), allocatable, private :: &
|
||||||
|
crystallite_Fe, & !< current "elastic" def grad (end of converged time step)
|
||||||
|
crystallite_subFe0,& !< "elastic" def grad at start of crystallite inc
|
||||||
|
crystallite_invFp, & !< inverse of current plastic def grad (end of converged time step)
|
||||||
|
crystallite_subFp0,& !< plastic def grad at start of crystallite inc
|
||||||
|
crystallite_subF, & !< def grad to be reached at end of crystallite inc
|
||||||
|
crystallite_subF0, & !< def grad at start of crystallite inc
|
||||||
crystallite_subLp0,& !< plastic velocity grad at start of crystallite inc
|
crystallite_subLp0,& !< plastic velocity grad at start of crystallite inc
|
||||||
crystallite_P, & !< 1st Piola-Kirchhoff stress per grain
|
|
||||||
crystallite_disorientation !< disorientation between two neighboring ips (only calculated for single grain IPs)
|
crystallite_disorientation !< disorientation between two neighboring ips (only calculated for single grain IPs)
|
||||||
real(pReal), dimension (:,:,:,:,:,:,:), allocatable :: &
|
real(pReal), dimension (:,:,:,:,:,:,:), allocatable, public :: &
|
||||||
crystallite_dPdF, & !< current individual dPdF per grain (end of converged time step)
|
crystallite_dPdF, & !< current individual dPdF per grain (end of converged time step)
|
||||||
crystallite_dPdF0, & !< individual dPdF per grain at start of FE inc
|
crystallite_dPdF0, & !< individual dPdF per grain at start of FE inc
|
||||||
crystallite_partioneddPdF0, & !< individual dPdF per grain at start of homog inc
|
crystallite_partioneddPdF0 !< individual dPdF per grain at start of homog inc
|
||||||
|
real(pReal), dimension (:,:,:,:,:,:,:), allocatable, private :: &
|
||||||
crystallite_fallbackdPdF !< dPdF fallback for non-converged grains (elastic prediction)
|
crystallite_fallbackdPdF !< dPdF fallback for non-converged grains (elastic prediction)
|
||||||
logical, dimension (:,:,:), allocatable :: &
|
logical, dimension (:,:,:), allocatable, public :: &
|
||||||
crystallite_localPlasticity, & !< indicates this grain to have purely local constitutive law
|
crystallite_requested !< flag to request crystallite calculation
|
||||||
crystallite_requested, & !< flag to request crystallite calculation
|
logical, dimension (:,:,:), allocatable, public, protected :: &
|
||||||
crystallite_todo, & !< flag to indicate need for further computation
|
|
||||||
crystallite_converged !< convergence flag
|
crystallite_converged !< convergence flag
|
||||||
logical, dimension (:,:), allocatable :: &
|
logical, dimension (:,:,:), allocatable, private :: &
|
||||||
|
crystallite_localPlasticity, & !< indicates this grain to have purely local constitutive law
|
||||||
|
crystallite_todo !< flag to indicate need for further computation
|
||||||
|
logical, dimension (:,:), allocatable, private :: &
|
||||||
crystallite_clearToWindForward, &
|
crystallite_clearToWindForward, &
|
||||||
crystallite_clearToCutback, &
|
crystallite_clearToCutback, &
|
||||||
crystallite_syncSubFrac, &
|
crystallite_syncSubFrac, &
|
||||||
crystallite_syncSubFracCompleted, &
|
crystallite_syncSubFracCompleted, &
|
||||||
crystallite_neighborEnforcedCutback
|
crystallite_neighborEnforcedCutback
|
||||||
|
|
||||||
|
public :: &
|
||||||
|
crystallite_init, &
|
||||||
|
crystallite_stressAndItsTangent, &
|
||||||
|
crystallite_orientations, &
|
||||||
|
crystallite_postResults
|
||||||
|
private :: &
|
||||||
|
crystallite_integrateStateFPI, &
|
||||||
|
crystallite_integrateStateEuler, &
|
||||||
|
crystallite_integrateStateAdaptiveEuler, &
|
||||||
|
crystallite_integrateStateRK4, &
|
||||||
|
crystallite_integrateStateRKCK45, &
|
||||||
|
crystallite_integrateStress, &
|
||||||
|
crystallite_stateJump
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
|
|
||||||
!********************************************************************
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate and initialize per grain variables
|
!> @brief allocates and initialize per grain variables
|
||||||
!********************************************************************
|
!--------------------------------------------------------------------------------------------------
|
||||||
subroutine crystallite_init(Temperature)
|
subroutine crystallite_init(Temperature)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
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)
|
||||||
use debug, only: debug_info, &
|
use debug, only: debug_info, &
|
||||||
debug_reset, &
|
debug_reset, &
|
||||||
|
@ -149,12 +154,10 @@ subroutine crystallite_init(Temperature)
|
||||||
constitutive_nonlocal_structureName
|
constitutive_nonlocal_structureName
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
real(pReal), intent(in) :: Temperature
|
||||||
integer(pInt), parameter :: myFile = 200_pInt, &
|
integer(pInt), parameter :: myFile = 200_pInt, &
|
||||||
maxNchunks = 2_pInt
|
maxNchunks = 2_pInt
|
||||||
|
|
||||||
!*** input variables ***!
|
|
||||||
real(pReal) Temperature
|
|
||||||
|
|
||||||
!*** local variables ***!
|
!*** local variables ***!
|
||||||
integer(pInt), dimension(1+2*maxNchunks) :: positions
|
integer(pInt), dimension(1+2*maxNchunks) :: positions
|
||||||
integer(pInt) g, & ! grain number
|
integer(pInt) g, & ! grain number
|
||||||
|
@ -175,13 +178,9 @@ subroutine crystallite_init(Temperature)
|
||||||
character(len=64) tag
|
character(len=64) tag
|
||||||
character(len=1024) line
|
character(len=1024) line
|
||||||
|
|
||||||
|
write(6,'(/,a)') ' <<<+- crystallite init -+>>>'
|
||||||
!$OMP CRITICAL (write2out)
|
write(6,'(a)') ' $Id$'
|
||||||
write(6,*)
|
|
||||||
write(6,*) '<<<+- crystallite init -+>>>'
|
|
||||||
write(6,*) '$Id$'
|
|
||||||
#include "compilation_info.f90"
|
#include "compilation_info.f90"
|
||||||
!$OMP END CRITICAL (write2out)
|
|
||||||
|
|
||||||
|
|
||||||
gMax = homogenization_maxNgrains
|
gMax = homogenization_maxNgrains
|
||||||
|
@ -384,9 +383,8 @@ crystallite_orientation0 = crystallite_orientation ! Store initial o
|
||||||
call crystallite_stressAndItsTangent(.true.,.false.) ! request elastic answers
|
call crystallite_stressAndItsTangent(.true.,.false.) ! request elastic answers
|
||||||
crystallite_fallbackdPdF = crystallite_dPdF ! use initial elastic stiffness as fallback
|
crystallite_fallbackdPdF = crystallite_dPdF ! use initial elastic stiffness as fallback
|
||||||
|
|
||||||
! *** Output to MARC output file ***
|
! *** Output ***
|
||||||
if (iand(debug_level(debug_crystallite), debug_levelBasic) /= 0_pInt) then
|
if (iand(debug_level(debug_crystallite), debug_levelBasic) /= 0_pInt) then
|
||||||
!$OMP CRITICAL (write2out)
|
|
||||||
write(6,'(a35,1x,7(i8,1x))') 'crystallite_Temperature: ', shape(crystallite_Temperature)
|
write(6,'(a35,1x,7(i8,1x))') 'crystallite_Temperature: ', shape(crystallite_Temperature)
|
||||||
write(6,'(a35,1x,7(i8,1x))') 'crystallite_dotTemperature: ', shape(crystallite_dotTemperature)
|
write(6,'(a35,1x,7(i8,1x))') 'crystallite_dotTemperature: ', shape(crystallite_dotTemperature)
|
||||||
write(6,'(a35,1x,7(i8,1x))') 'crystallite_Fe: ', shape(crystallite_Fe)
|
write(6,'(a35,1x,7(i8,1x))') 'crystallite_Fe: ', shape(crystallite_Fe)
|
||||||
|
@ -433,7 +431,6 @@ if (iand(debug_level(debug_crystallite), debug_levelBasic) /= 0_pInt) then
|
||||||
write(6,*)
|
write(6,*)
|
||||||
write(6,*) 'Number of nonlocal grains: ',count(.not. crystallite_localPlasticity)
|
write(6,*) 'Number of nonlocal grains: ',count(.not. crystallite_localPlasticity)
|
||||||
flush(6)
|
flush(6)
|
||||||
!$OMP END CRITICAL (write2out)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call debug_info
|
call debug_info
|
||||||
|
@ -442,13 +439,10 @@ endif
|
||||||
end subroutine crystallite_init
|
end subroutine crystallite_init
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
!> @brief calculate stress (P) and tangent (dPdF) for crystallites
|
||||||
! calculate stress (P) and tangent (dPdF) for crystallites
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
|
||||||
subroutine crystallite_stressAndItsTangent(updateJaco,rate_sensitivity)
|
subroutine crystallite_stressAndItsTangent(updateJaco,rate_sensitivity)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use numerics, only: subStepMinCryst, &
|
use numerics, only: subStepMinCryst, &
|
||||||
subStepSizeCryst, &
|
subStepSizeCryst, &
|
||||||
stepIncreaseCryst, &
|
stepIncreaseCryst, &
|
||||||
|
@ -502,9 +496,7 @@ use constitutive, only: constitutive_sizeState, &
|
||||||
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
!*** input variables ***!
|
|
||||||
logical, intent(in) :: updateJaco, rate_sensitivity ! flag indicating wehther we want to update the Jacobian (stiffness) or not
|
logical, intent(in) :: updateJaco, rate_sensitivity ! flag indicating wehther we want to update the Jacobian (stiffness) or not
|
||||||
!*** local variables ***!
|
|
||||||
real(pReal) myPert, & ! perturbation with correct sign
|
real(pReal) myPert, & ! perturbation with correct sign
|
||||||
formerSubStep, &
|
formerSubStep, &
|
||||||
subFracIntermediate
|
subFracIntermediate
|
||||||
|
@ -1237,14 +1229,10 @@ endif
|
||||||
end subroutine crystallite_stressAndItsTangent
|
end subroutine crystallite_stressAndItsTangent
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
!> @brief integrate stress, state and Temperature with 4th order explicit Runge Kutta method
|
||||||
! integrate stress, state and Temperature with
|
!--------------------------------------------------------------------------------------------------
|
||||||
! 4h order explicit Runge Kutta method
|
|
||||||
!********************************************************************
|
|
||||||
subroutine crystallite_integrateStateRK4(gg,ii,ee)
|
subroutine crystallite_integrateStateRK4(gg,ii,ee)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use prec, only: pInt, &
|
use prec, only: pInt, &
|
||||||
pReal
|
pReal
|
||||||
use numerics, only: numerics_integrationMode
|
use numerics, only: numerics_integrationMode
|
||||||
|
@ -1512,15 +1500,11 @@ endif
|
||||||
end subroutine crystallite_integrateStateRK4
|
end subroutine crystallite_integrateStateRK4
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
!> @brief integrate stress, state and Temperature with 5th order Runge-Kutta Cash-Karp method with
|
||||||
! integrate stress, state and Temperature with
|
!> adaptive step size (use 5th order solution to advance = "local extrapolation")
|
||||||
! 5th order Runge-Kutta Cash-Karp method with adaptive step size
|
!--------------------------------------------------------------------------------------------------
|
||||||
! (use 5th order solution to advance = "local extrapolation")
|
|
||||||
!********************************************************************
|
|
||||||
subroutine crystallite_integrateStateRKCK45(gg,ii,ee)
|
subroutine crystallite_integrateStateRKCK45(gg,ii,ee)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use debug, only: debug_level, &
|
use debug, only: debug_level, &
|
||||||
debug_crystallite, &
|
debug_crystallite, &
|
||||||
debug_levelBasic, &
|
debug_levelBasic, &
|
||||||
|
@ -2035,14 +2019,10 @@ endif
|
||||||
end subroutine crystallite_integrateStateRKCK45
|
end subroutine crystallite_integrateStateRKCK45
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
!> @brief integrate stress, state and Temperature with 1st order Euler method with adaptive step size
|
||||||
! integrate stress, state and Temperature with
|
!--------------------------------------------------------------------------------------------------
|
||||||
! 1nd order Euler method with adaptive step size
|
|
||||||
!********************************************************************
|
|
||||||
subroutine crystallite_integrateStateAdaptiveEuler(gg,ii,ee)
|
subroutine crystallite_integrateStateAdaptiveEuler(gg,ii,ee)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use debug, only: debug_level, &
|
use debug, only: debug_level, &
|
||||||
debug_crystallite, &
|
debug_crystallite, &
|
||||||
debug_levelBasic, &
|
debug_levelBasic, &
|
||||||
|
@ -2074,7 +2054,6 @@ use constitutive, only: constitutive_sizeDotState, &
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
|
|
||||||
!*** input variables ***!
|
!*** input variables ***!
|
||||||
integer(pInt), optional, intent(in):: ee, & ! element index
|
integer(pInt), optional, intent(in):: ee, & ! element index
|
||||||
ii, & ! integration point index
|
ii, & ! integration point index
|
||||||
|
@ -2355,14 +2334,10 @@ endif
|
||||||
end subroutine crystallite_integrateStateAdaptiveEuler
|
end subroutine crystallite_integrateStateAdaptiveEuler
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
!> @brief integrate stress, state and Temperature with 1st order explicit Euler method
|
||||||
! integrate stress, state and Temperature with
|
!--------------------------------------------------------------------------------------------------
|
||||||
! 1st order explicit Euler method
|
|
||||||
!********************************************************************
|
|
||||||
subroutine crystallite_integrateStateEuler(gg,ii,ee)
|
subroutine crystallite_integrateStateEuler(gg,ii,ee)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use numerics, only: numerics_integrationMode, &
|
use numerics, only: numerics_integrationMode, &
|
||||||
numerics_timeSyncing
|
numerics_timeSyncing
|
||||||
use debug, only: debug_level, &
|
use debug, only: debug_level, &
|
||||||
|
@ -2563,15 +2538,11 @@ endif
|
||||||
end subroutine crystallite_integrateStateEuler
|
end subroutine crystallite_integrateStateEuler
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
!> @brief integrate stress, state and Temperature with adaptive 1st order explicit Euler method
|
||||||
! integrate stress, state and Temperature with
|
!> using Fixed Point Iteration to adapt the stepsize
|
||||||
! adaptive 1st order explicit Euler method
|
!--------------------------------------------------------------------------------------------------
|
||||||
! using Fixed Point Iteration to adapt the stepsize
|
|
||||||
!********************************************************************
|
|
||||||
subroutine crystallite_integrateStateFPI(gg,ii,ee)
|
subroutine crystallite_integrateStateFPI(gg,ii,ee)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use debug, only: debug_e, &
|
use debug, only: debug_e, &
|
||||||
debug_i, &
|
debug_i, &
|
||||||
debug_g, &
|
debug_g, &
|
||||||
|
@ -2603,14 +2574,10 @@ use constitutive, only: constitutive_subState0, &
|
||||||
constitutive_aTolState
|
constitutive_aTolState
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!*** input variables ***!
|
|
||||||
integer(pInt), optional, intent(in):: ee, & ! element index
|
integer(pInt), optional, intent(in):: ee, & ! element index
|
||||||
ii, & ! integration point index
|
ii, & ! integration point index
|
||||||
gg ! grain index
|
gg ! grain index
|
||||||
|
|
||||||
!*** output variables ***!
|
|
||||||
|
|
||||||
!*** local variables ***!
|
!*** local variables ***!
|
||||||
integer(pInt) NiterationState, & ! number of iterations in state loop
|
integer(pInt) NiterationState, & ! number of iterations in state loop
|
||||||
e, & ! element index in element loop
|
e, & ! element index in element loop
|
||||||
|
@ -2911,18 +2878,13 @@ do while (any(crystallite_todo .and. .not. crystallite_converged) .and. Niterati
|
||||||
|
|
||||||
enddo ! crystallite convergence loop
|
enddo ! crystallite convergence loop
|
||||||
|
|
||||||
|
|
||||||
end subroutine crystallite_integrateStateFPI
|
end subroutine crystallite_integrateStateFPI
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!***********************************************************
|
!> @brief calculates a jump in the state according to the current state and the current stress
|
||||||
!* calculates a jump in the state according to the current *
|
!--------------------------------------------------------------------------------------------------
|
||||||
!* state and the current stress *
|
|
||||||
!***********************************************************
|
|
||||||
function crystallite_stateJump(g,i,e)
|
function crystallite_stateJump(g,i,e)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use debug, only: debug_level, &
|
use debug, only: debug_level, &
|
||||||
debug_crystallite, &
|
debug_crystallite, &
|
||||||
debug_levelExtensive, &
|
debug_levelExtensive, &
|
||||||
|
@ -2942,8 +2904,6 @@ use constitutive, only: constitutive_sizeDotState, &
|
||||||
constitutive_microstructure
|
constitutive_microstructure
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!*** input variables ***!
|
|
||||||
integer(pInt), intent(in):: e, & ! element index
|
integer(pInt), intent(in):: e, & ! element index
|
||||||
i, & ! integration point index
|
i, & ! integration point index
|
||||||
g ! grain index
|
g ! grain index
|
||||||
|
@ -2987,19 +2947,16 @@ end function crystallite_stateJump
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!***********************************************************************
|
!--------------------------------------------------------------------------------------------------
|
||||||
!*** calculation of stress (P) with time integration ***
|
!> @brief calculation of stress (P) with time integration based on a residuum in Lp and
|
||||||
!*** based on a residuum in Lp and intermediate ***
|
!> intermediate acceleration of the Newton-Raphson correction
|
||||||
!*** acceleration of the Newton-Raphson correction ***
|
!--------------------------------------------------------------------------------------------------
|
||||||
!***********************************************************************
|
|
||||||
function crystallite_integrateStress(&
|
function crystallite_integrateStress(&
|
||||||
g,& ! grain number
|
g,& ! grain number
|
||||||
i,& ! integration point number
|
i,& ! integration point number
|
||||||
e,& ! element number
|
e,& ! element number
|
||||||
timeFraction &
|
timeFraction &
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
use prec, only: pLongInt
|
use prec, only: pLongInt
|
||||||
use numerics, only: nStress, &
|
use numerics, only: nStress, &
|
||||||
aTol_crystalliteStress, &
|
aTol_crystalliteStress, &
|
||||||
|
@ -3040,8 +2997,6 @@ use math, only: math_mul33x33, &
|
||||||
math_Plain9to33
|
math_Plain9to33
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!*** input variables ***!
|
|
||||||
integer(pInt), intent(in):: e, & ! element index
|
integer(pInt), intent(in):: e, & ! element index
|
||||||
i, & ! integration point index
|
i, & ! integration point index
|
||||||
g ! grain index
|
g ! grain index
|
||||||
|
@ -3094,7 +3049,7 @@ integer(pLongInt) tick, &
|
||||||
tock, &
|
tock, &
|
||||||
tickrate, &
|
tickrate, &
|
||||||
maxticks
|
maxticks
|
||||||
|
external :: dgesv
|
||||||
|
|
||||||
!* be pessimistic
|
!* be pessimistic
|
||||||
|
|
||||||
|
@ -3349,14 +3304,10 @@ endif
|
||||||
end function crystallite_integrateStress
|
end function crystallite_integrateStress
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
!> @brief calculates orientations and disorientations (in case of single grain ips)
|
||||||
! calculates orientations and disorientations (in case of single grain ips)
|
!--------------------------------------------------------------------------------------------------
|
||||||
!********************************************************************
|
|
||||||
subroutine crystallite_orientations
|
subroutine crystallite_orientations
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
|
|
||||||
use math, only: math_pDecomposition, &
|
use math, only: math_pDecomposition, &
|
||||||
math_RtoQ, &
|
math_RtoQ, &
|
||||||
math_qDisorientation, &
|
math_qDisorientation, &
|
||||||
|
@ -3376,12 +3327,6 @@ use constitutive_nonlocal, only: constitutive_nonlocal_structure, &
|
||||||
constitutive_nonlocal_updateCompatibility
|
constitutive_nonlocal_updateCompatibility
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!*** input variables ***!
|
|
||||||
|
|
||||||
!*** output variables ***!
|
|
||||||
|
|
||||||
!*** local variables ***!
|
|
||||||
integer(pInt) e, & ! element index
|
integer(pInt) e, & ! element index
|
||||||
i, & ! integration point index
|
i, & ! integration point index
|
||||||
g, & ! grain index
|
g, & ! grain index
|
||||||
|
@ -3475,17 +3420,15 @@ end subroutine crystallite_orientations
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!********************************************************************
|
!--------------------------------------------------------------------------------------------------
|
||||||
! return results of particular grain
|
!> @brief return results of particular grain
|
||||||
!********************************************************************
|
!--------------------------------------------------------------------------------------------------
|
||||||
function crystallite_postResults(&
|
function crystallite_postResults(&
|
||||||
dt,& ! time increment
|
dt,& ! time increment
|
||||||
g,& ! grain number
|
g,& ! grain number
|
||||||
i,& ! integration point number
|
i,& ! integration point number
|
||||||
e & ! element number
|
e & ! element number
|
||||||
)
|
)
|
||||||
|
|
||||||
!*** variables and functions from other modules ***!
|
|
||||||
use math, only: math_qToEuler, &
|
use math, only: math_qToEuler, &
|
||||||
math_qToAxisAngle, &
|
math_qToAxisAngle, &
|
||||||
math_mul33x33, &
|
math_mul33x33, &
|
||||||
|
@ -3508,8 +3451,6 @@ function crystallite_postResults(&
|
||||||
constitutive_homogenizedC
|
constitutive_homogenizedC
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
!*** input variables ***!
|
|
||||||
integer(pInt), intent(in):: e, & ! element index
|
integer(pInt), intent(in):: e, & ! element index
|
||||||
i, & ! integration point index
|
i, & ! integration point index
|
||||||
g ! grain index
|
g ! grain index
|
||||||
|
@ -3622,7 +3563,4 @@ function crystallite_postResults(&
|
||||||
|
|
||||||
end function crystallite_postResults
|
end function crystallite_postResults
|
||||||
|
|
||||||
|
end module crystallite
|
||||||
END MODULE
|
|
||||||
!##############################################################
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue