diff --git a/code/DAMASK_marc.f90 b/code/DAMASK_marc.f90 index ba0709bd5..e3a776913 100644 --- a/code/DAMASK_marc.f90 +++ b/code/DAMASK_marc.f90 @@ -123,6 +123,7 @@ end module DAMASK_interface #include "mesh.f90" #include "material.f90" #include "lattice.f90" +#include "constitutive_none.f90" #include "constitutive_j2.f90" #include "constitutive_phenopowerlaw.f90" #include "constitutive_titanmod.f90" diff --git a/code/IO.f90 b/code/IO.f90 index 0811a4735..be8940d7e 100644 --- a/code/IO.f90 +++ b/code/IO.f90 @@ -1263,6 +1263,9 @@ subroutine IO_error(error_ID,e,i,g,ext_msg) case (205_pInt) msg = 'unknown lattice structure encountered' + case (208_pInt) + msg = 'unknown material parameter for no plasticity phase:' + case (210_pInt) msg = 'unknown material parameter for j2 plasticity phase:' case (211_pInt) diff --git a/code/config/material.config b/code/config/material.config index 02e1a3676..a4b7ba705 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -88,6 +88,16 @@ crystallite 2 #-------------------# +[Aluminium_elastic_only] + +elasticity hooke +plasticity none + +lattice_structure fcc +c11 106.75e9 +c12 60.41e9 +c44 28.34e9 + [Aluminum_J2isotropic] elasticity hooke diff --git a/code/constitutive.f90 b/code/constitutive.f90 index 06586c830..7d82fc6c5 100644 --- a/code/constitutive.f90 +++ b/code/constitutive.f90 @@ -104,6 +104,7 @@ subroutine constitutive_init phase_Noutput, & homogenization_Ngrains, & homogenization_maxNgrains + use constitutive_none use constitutive_j2 use constitutive_phenopowerlaw use constitutive_titanmod @@ -132,6 +133,7 @@ logical :: knownPlasticity if (.not. IO_open_jobFile_stat(fileunit,material_localFileExt)) then ! no local material configuration present... call IO_open_file(fileunit,material_configFile) ! ... open material.config file endif +call constitutive_none_init(fileunit) call constitutive_j2_init(fileunit) call constitutive_phenopowerlaw_init(fileunit) call constitutive_titanmod_init(fileunit) @@ -147,6 +149,9 @@ do p = 1_pInt,material_Nphase i = phase_plasticityInstance(p) ! which instance of a plasticity is present phase knownPlasticity = .true. ! assume valid select case(phase_plasticity(p)) ! split per constitiution + case (constitutive_none_label) + thisOutput => NULL() ! constitutive_none_output + thisSize => NULL() ! constitutive_none_sizePostResult case (constitutive_j2_label) thisOutput => constitutive_j2_output thisSize => constitutive_j2_sizePostResult @@ -223,6 +228,34 @@ endif myInstance = phase_plasticityInstance(material_phase(g,i,e)) select case(phase_plasticity(material_phase(g,i,e))) + case (constitutive_none_label) + allocate(constitutive_state0(g,i,e)%p(constitutive_none_sizeState(myInstance))) + allocate(constitutive_partionedState0(g,i,e)%p(constitutive_none_sizeState(myInstance))) + allocate(constitutive_subState0(g,i,e)%p(constitutive_none_sizeState(myInstance))) + allocate(constitutive_state(g,i,e)%p(constitutive_none_sizeState(myInstance))) + allocate(constitutive_state_backup(g,i,e)%p(constitutive_none_sizeState(myInstance))) + allocate(constitutive_aTolState(g,i,e)%p(constitutive_none_sizeState(myInstance))) + allocate(constitutive_dotState(g,i,e)%p(constitutive_none_sizeDotState(myInstance))) + allocate(constitutive_deltaState(g,i,e)%p(constitutive_none_sizeDotState(myInstance))) + allocate(constitutive_dotState_backup(g,i,e)%p(constitutive_none_sizeDotState(myInstance))) + if (any(numerics_integrator == 1_pInt)) then + allocate(constitutive_previousDotState(g,i,e)%p(constitutive_none_sizeDotState(myInstance))) + allocate(constitutive_previousDotState2(g,i,e)%p(constitutive_none_sizeDotState(myInstance))) + endif + if (any(numerics_integrator == 4_pInt)) then + allocate(constitutive_RK4dotState(g,i,e)%p(constitutive_none_sizeDotState(myInstance))) + endif + if (any(numerics_integrator == 5_pInt)) then + do s = 1_pInt,6_pInt + allocate(constitutive_RKCK45dotState(s,g,i,e)%p(constitutive_none_sizeDotState(myInstance))) + enddo + endif + constitutive_state0(g,i,e)%p = constitutive_none_stateInit(myInstance) + constitutive_aTolState(g,i,e)%p = constitutive_none_aTolState(myInstance) + constitutive_sizeState(g,i,e) = constitutive_none_sizeState(myInstance) + constitutive_sizeDotState(g,i,e) = constitutive_none_sizeDotState(myInstance) + constitutive_sizePostResults(g,i,e) = constitutive_none_sizePostResults(myInstance) + case (constitutive_j2_label) allocate(constitutive_state0(g,i,e)%p(constitutive_j2_sizeState(myInstance))) allocate(constitutive_partionedState0(g,i,e)%p(constitutive_j2_sizeState(myInstance))) @@ -428,6 +461,7 @@ function constitutive_homogenizedC(ipc,ip,el) !********************************************************************* use prec, only: pReal use material, only: phase_plasticity,material_phase + use constitutive_none use constitutive_j2 use constitutive_phenopowerlaw use constitutive_titanmod @@ -440,6 +474,9 @@ function constitutive_homogenizedC(ipc,ip,el) select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + constitutive_homogenizedC = constitutive_none_homogenizedC(constitutive_state,ipc,ip,el) + case (constitutive_j2_label) constitutive_homogenizedC = constitutive_j2_homogenizedC(constitutive_state,ipc,ip,el) @@ -471,6 +508,7 @@ function constitutive_averageBurgers(ipc,ip,el) !********************************************************************* use prec, only: pReal use material, only: phase_plasticity,material_phase + use constitutive_none use constitutive_j2 use constitutive_phenopowerlaw use constitutive_titanmod @@ -483,6 +521,9 @@ function constitutive_averageBurgers(ipc,ip,el) select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + constitutive_averageBurgers = 2.5e-10_pReal !constitutive_none_averageBurgers(constitutive_state,ipc,ip,el) + case (constitutive_j2_label) constitutive_averageBurgers = 2.5e-10_pReal !constitutive_j2_averageBurgers(constitutive_state,ipc,ip,el) @@ -512,6 +553,8 @@ subroutine constitutive_microstructure(Temperature, Fe, Fp, ipc, ip, el) use prec, only: pReal use material, only: phase_plasticity, & material_phase +use constitutive_none, only: constitutive_none_label, & + constitutive_none_microstructure use constitutive_j2, only: constitutive_j2_label, & constitutive_j2_microstructure use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_label, & @@ -539,6 +582,9 @@ real(pReal), dimension(3,3), intent(in) :: Fe, & ! elastic deformation gr select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + call constitutive_none_microstructure(Temperature,constitutive_state,ipc,ip,el) + case (constitutive_j2_label) call constitutive_j2_microstructure(Temperature,constitutive_state,ipc,ip,el) @@ -569,6 +615,8 @@ subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, Temperature, ip use prec, only: pReal use material, only: phase_plasticity, & material_phase +use constitutive_none, only: constitutive_none_label, & + constitutive_none_LpAndItsTangent use constitutive_j2, only: constitutive_j2_label, & constitutive_j2_LpAndItsTangent use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_label, & @@ -598,6 +646,9 @@ real(pReal), dimension(9,9), intent(out) :: dLp_dTstar ! derivative of Lp wit select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + call constitutive_none_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperature,constitutive_state,ipc,ip,el) + case (constitutive_j2_label) call constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperature,constitutive_state,ipc,ip,el) @@ -711,6 +762,8 @@ use mesh, only: mesh_NcpElems, & use material, only: phase_plasticity, & material_phase, & homogenization_maxNgrains +use constitutive_none, only: constitutive_none_dotState, & + constitutive_none_label use constitutive_j2, only: constitutive_j2_dotState, & constitutive_j2_label use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_dotState, & @@ -747,6 +800,9 @@ endif select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + constitutive_dotState(ipc,ip,el)%p = constitutive_none_dotState(Tstar_v,Temperature,constitutive_state,ipc,ip,el) + case (constitutive_j2_label) constitutive_dotState(ipc,ip,el)%p = constitutive_j2_dotState(Tstar_v,Temperature,constitutive_state,ipc,ip,el) @@ -796,6 +852,8 @@ use mesh, only: mesh_NcpElems, & use material, only: phase_plasticity, & material_phase, & homogenization_maxNgrains +use constitutive_none, only: constitutive_none_deltaState, & + constitutive_none_label use constitutive_j2, only: constitutive_j2_deltaState, & constitutive_j2_label use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_deltaState, & @@ -826,6 +884,9 @@ endif select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + constitutive_deltaState(ipc,ip,el)%p = constitutive_none_deltaState(Tstar_v,Temperature,constitutive_state,ipc,ip,el) + case (constitutive_j2_label) constitutive_deltaState(ipc,ip,el)%p = constitutive_j2_deltaState(Tstar_v,Temperature,constitutive_state,ipc,ip,el) @@ -871,6 +932,8 @@ use debug, only: debug_cumDotTemperatureCalls, & debug_levelBasic use material, only: phase_plasticity, & material_phase +use constitutive_none, only: constitutive_none_dotTemperature, & + constitutive_none_label use constitutive_j2, only: constitutive_j2_dotTemperature, & constitutive_j2_label use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_dotTemperature, & @@ -906,6 +969,9 @@ endif select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + constitutive_dotTemperature = constitutive_none_dotTemperature(Tstar_v,Temperature,constitutive_state,ipc,ip,el) + case (constitutive_j2_label) constitutive_dotTemperature = constitutive_j2_dotTemperature(Tstar_v,Temperature,constitutive_state,ipc,ip,el) @@ -953,6 +1019,8 @@ use mesh, only: mesh_NcpElems, & use material, only: phase_plasticity, & material_phase, & homogenization_maxNgrains +use constitutive_none, only: constitutive_none_postResults, & + constitutive_none_label use constitutive_j2, only: constitutive_j2_postResults, & constitutive_j2_label use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_postResults, & @@ -985,6 +1053,9 @@ real(pReal), dimension(constitutive_sizePostResults(ipc,ip,el)) :: constitutive_ constitutive_postResults = 0.0_pReal select case (phase_plasticity(material_phase(ipc,ip,el))) + case (constitutive_none_label) + constitutive_postResults = constitutive_none_postResults(Tstar_v,Temperature,dt,constitutive_state,ipc,ip,el) + case (constitutive_j2_label) constitutive_postResults = constitutive_j2_postResults(Tstar_v,Temperature,dt,constitutive_state,ipc,ip,el) diff --git a/code/constitutive_none.f90 b/code/constitutive_none.f90 new file mode 100644 index 000000000..784400041 --- /dev/null +++ b/code/constitutive_none.f90 @@ -0,0 +1,512 @@ +! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH +! +! This file is part of DAMASK, +! the Düsseldorf Advanced MAterial Simulation Kit. +! +! DAMASK is free software: you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation, either version 3 of the License, or +! (at your option) any later version. +! +! DAMASK is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with DAMASK. If not, see . +! +!############################################################## +!* $Id:$ +!***************************************************** +!* Module: CONSTITUTIVE_J2 * +!***************************************************** +!* contains: * +!* - constitutive equations * +!* - parameters definition * +!***************************************************** + +! [pure elasticity] +! elsticity hooke +! plasticity none +! lattice_structure hex +! covera_ratio 1.587 +! c11 106.75e9 +! c12 60.41e9 +! c44 28.34e9 + +module constitutive_none + + use prec, only: pReal,pInt + + implicit none + private + character (len=*), parameter, public :: constitutive_none_label = 'none' + + integer(pInt), dimension(:), allocatable, public :: & + constitutive_none_sizeDotState, & + constitutive_none_sizeState, & + constitutive_none_sizePostResults, & + constitutive_none_structure + + character(len=32), dimension(:), allocatable, private :: & + constitutive_none_structureName + + integer(pInt), dimension(:,:), allocatable, target, public :: & + constitutive_none_sizePostResult ! size of each post result output + + real(pReal), dimension(:), allocatable, private :: & + constitutive_none_CoverA, & + constitutive_none_C11, & + constitutive_none_C12, & + constitutive_none_C13, & + constitutive_none_C33, & + constitutive_none_C44 + + real(pReal), dimension(:,:,:), allocatable, private :: & + constitutive_none_Cslip_66 + + public :: constitutive_none_init, & + constitutive_none_stateInit, & + constitutive_none_aTolState, & + constitutive_none_homogenizedC, & + constitutive_none_microstructure, & + constitutive_none_LpAndItsTangent, & + constitutive_none_dotState, & + constitutive_none_deltaState, & + constitutive_none_dotTemperature, & + constitutive_none_postResults + +contains + +subroutine constitutive_none_init(myFile) +!************************************** +!* Module initialization * +!************************************** + use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) + use math, only: & + math_Mandel3333to66, & + math_Voigt66to3333 + use IO, only: & + IO_lc, & + IO_getTag, & + IO_isBlank, & + IO_stringPos, & + IO_stringValue, & + IO_floatValue, & + IO_error + use material + use debug, only: & + debug_what, & + debug_constitutive, & + debug_levelBasic + use lattice, only: lattice_initializeStructure, lattice_symmetryType + + implicit none + integer(pInt), intent(in) :: myFile + + integer(pInt), parameter :: maxNchunks = 7_pInt + integer(pInt), dimension(1_pInt+2_pInt*maxNchunks) :: positions + integer(pInt) :: section = 0_pInt, maxNinstance, i,j,k, mySize, myStructure + character(len=64) :: tag + character(len=1024) :: line + + !$OMP CRITICAL (write2out) + write(6,*) + write(6,*) '<<<+- constitutive_',trim(constitutive_none_label),' init -+>>>' + write(6,*) '$Id:$' +#include "compilation_info.f90" + !$OMP END CRITICAL (write2out) + + maxNinstance = int(count(phase_plasticity == constitutive_none_label),pInt) + if (maxNinstance == 0_pInt) return + + if (iand(debug_what(debug_constitutive),debug_levelBasic) /= 0_pInt) then + !$OMP CRITICAL (write2out) + write(6,'(a16,1x,i5)') '# instances:',maxNinstance + write(6,*) + !$OMP END CRITICAL (write2out) + endif + + allocate(constitutive_none_sizeDotState(maxNinstance)) + constitutive_none_sizeDotState = 0_pInt + allocate(constitutive_none_sizeState(maxNinstance)) + constitutive_none_sizeState = 0_pInt + allocate(constitutive_none_sizePostResults(maxNinstance)) + constitutive_none_sizePostResults = 0_pInt + allocate(constitutive_none_structureName(maxNinstance)) + constitutive_none_structureName = '' + allocate(constitutive_none_structure(maxNinstance)) + constitutive_none_structure = 0_pInt + allocate(constitutive_none_CoverA(maxNinstance)) + constitutive_none_CoverA = 0.0_pReal + allocate(constitutive_none_C11(maxNinstance)) + constitutive_none_C11 = 0.0_pReal + allocate(constitutive_none_C12(maxNinstance)) + constitutive_none_C12 = 0.0_pReal + allocate(constitutive_none_C13(maxNinstance)) + constitutive_none_C13 = 0.0_pReal + allocate(constitutive_none_C33(maxNinstance)) + constitutive_none_C33 = 0.0_pReal + allocate(constitutive_none_C44(maxNinstance)) + constitutive_none_C44 = 0.0_pReal + allocate(constitutive_none_Cslip_66(6,6,maxNinstance)) + constitutive_none_Cslip_66 = 0.0_pReal + + rewind(myFile) + + do while (IO_lc(IO_getTag(line,'<','>')) /= 'phase') ! wind forward to + read(myFile,'(a1024)',END=100) line + enddo + + do ! read thru sections of phase part + read(myFile,'(a1024)',END=100) line + if (IO_isBlank(line)) cycle ! skip empty lines + if (IO_getTag(line,'<','>') /= '') exit ! stop at next part + if (IO_getTag(line,'[',']') /= '') then ! next section + section = section + 1_pInt ! advance section counter + cycle + endif + if (section > 0_pInt .and. phase_plasticity(section) == constitutive_none_label) then ! one of my sections + i = phase_plasticityInstance(section) ! which instance of my plasticity is present phase + positions = IO_stringPos(line,maxNchunks) + tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key + select case(tag) + case ('plasticity','elasticity') + cycle + case ('lattice_structure') + constitutive_none_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('covera_ratio') + constitutive_none_CoverA(i) = IO_floatValue(line,positions,2_pInt) + case ('c11') + constitutive_none_C11(i) = IO_floatValue(line,positions,2_pInt) + case ('c12') + constitutive_none_C12(i) = IO_floatValue(line,positions,2_pInt) + case ('c13') + constitutive_none_C13(i) = IO_floatValue(line,positions,2_pInt) + case ('c33') + constitutive_none_C33(i) = IO_floatValue(line,positions,2_pInt) + case ('c44') + constitutive_none_C44(i) = IO_floatValue(line,positions,2_pInt) + case default + call IO_error(208_pInt,ext_msg=tag) + end select + endif + enddo + +100 do i = 1_pInt,maxNinstance ! sanity checks + constitutive_none_structure(i) = lattice_initializeStructure(constitutive_none_structureName(i), & ! get structure + constitutive_none_CoverA(i)) + if (constitutive_none_structure(i) < 1 ) call IO_error(205_pInt,e=i) +! if (constitutive_j2_tau0(i) < 0.0_pReal) call IO_error(211_pInt,ext_msg='tau0') +! if (constitutive_j2_gdot0(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='gdot0') +! if (constitutive_j2_n(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='n') +! if (constitutive_j2_tausat(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='tausat') +! if (constitutive_j2_a(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='a') +! if (constitutive_j2_fTaylor(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='taylorfactor') +! if (constitutive_j2_aTolResistance(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='aTol_resistance') + enddo + + do i = 1_pInt,maxNinstance +! do j = 1_pInt,constitutive_j2_Noutput(i) +! select case(constitutive_j2_output(j,i)) +! case('flowstress') +! mySize = 1_pInt +! case('strainrate') +! mySize = 1_pInt +! case default +! call IO_error(212_pInt,ext_msg=constitutive_j2_output(j,i)) +! end select +! +! if (mySize > 0_pInt) then ! any meaningful output found +! constitutive_j2_sizePostResult(j,i) = mySize +! constitutive_j2_sizePostResults(i) = & +! constitutive_j2_sizePostResults(i) + mySize +! endif +! enddo + +! constitutive_none_sizePostResults(i) = 0_pInt + constitutive_none_sizeDotState(i) = 1_pInt + constitutive_none_sizeState(i) = 1_pInt + + myStructure = constitutive_none_structure(i) + + select case (lattice_symmetryType(myStructure)) ! assign elasticity tensor + case(1_pInt) ! cubic(s) + forall(k=1_pInt:3_pInt) + forall(j=1_pInt:3_pInt) & + constitutive_none_Cslip_66(k,j,i) = constitutive_none_C12(i) + constitutive_none_Cslip_66(k,k,i) = constitutive_none_C11(i) + constitutive_none_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_none_C44(i) + end forall + case(2_pInt) ! hex + constitutive_none_Cslip_66(1,1,i) = constitutive_none_C11(i) + constitutive_none_Cslip_66(2,2,i) = constitutive_none_C11(i) + constitutive_none_Cslip_66(3,3,i) = constitutive_none_C33(i) + constitutive_none_Cslip_66(1,2,i) = constitutive_none_C12(i) + constitutive_none_Cslip_66(2,1,i) = constitutive_none_C12(i) + constitutive_none_Cslip_66(1,3,i) = constitutive_none_C13(i) + constitutive_none_Cslip_66(3,1,i) = constitutive_none_C13(i) + constitutive_none_Cslip_66(2,3,i) = constitutive_none_C13(i) + constitutive_none_Cslip_66(3,2,i) = constitutive_none_C13(i) + constitutive_none_Cslip_66(4,4,i) = constitutive_none_C44(i) + constitutive_none_Cslip_66(5,5,i) = constitutive_none_C44(i) + constitutive_none_Cslip_66(6,6,i) = 0.5_pReal*(constitutive_none_C11(i)- & + constitutive_none_C12(i)) + end select + constitutive_none_Cslip_66(:,:,i) = & + math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(:,:,i))) + + enddo + +end subroutine constitutive_none_init + + +!********************************************************************* +!* initial microstructural state * +!********************************************************************* +pure function constitutive_none_stateInit(myInstance) + + implicit none + integer(pInt), intent(in) :: myInstance + real(pReal), dimension(1) :: constitutive_none_stateInit + + constitutive_none_stateInit = 0.0_pReal + +end function constitutive_none_stateInit + + +!********************************************************************* +!* relevant microstructural state * +!********************************************************************* +pure function constitutive_none_aTolState(myInstance) + + implicit none + !*** input variables + integer(pInt), intent(in) :: myInstance ! number specifying the current instance of the plasticity + + !*** output variables + real(pReal), dimension(constitutive_none_sizeState(myInstance)) :: & + constitutive_none_aTolState ! relevant state values for the current instance of this plasticity + + constitutive_none_aTolState = 1.0_preal ! ensure convergence as state is always 0.0_pReal + +end function constitutive_none_aTolState + + +function constitutive_none_homogenizedC(state,ipc,ip,el) +!********************************************************************* +!* homogenized elacticity matrix * +!* INPUT: * +!* - state : state variables * +!* - ipc : component-ID of current integration point * +!* - ip : current integration point * +!* - el : current element * +!********************************************************************* + use prec, only: p_vec + use mesh, only: mesh_NcpElems,mesh_maxNips + use material, only: homogenization_maxNgrains,material_phase, phase_plasticityInstance + + implicit none + integer(pInt), intent(in) :: ipc,ip,el + integer(pInt) :: matID + real(pReal), dimension(6,6) :: constitutive_none_homogenizedC + type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems) :: state + + matID = phase_plasticityInstance(material_phase(ipc,ip,el)) + constitutive_none_homogenizedC = constitutive_none_Cslip_66(1:6,1:6,matID) + +end function constitutive_none_homogenizedC + + +subroutine constitutive_none_microstructure(Temperature,state,ipc,ip,el) +!********************************************************************* +!* calculate derived quantities from state (not used here) * +!* INPUT: * +!* - Tp : temperature * +!* - ipc : component-ID of current integration point * +!* - ip : current integration point * +!* - el : current element * +!********************************************************************* + use prec, only: p_vec + use mesh, only: mesh_NcpElems,mesh_maxNips + use material, only: homogenization_maxNgrains,material_phase, phase_plasticityInstance + + implicit none +!* Definition of variables + integer(pInt) ipc,ip,el, matID + real(pReal) Temperature + type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems) :: state + + matID = phase_plasticityInstance(material_phase(ipc,ip,el)) + +end subroutine constitutive_none_microstructure + + +!**************************************************************** +!* calculates plastic velocity gradient and its tangent * +!**************************************************************** +pure subroutine constitutive_none_LpAndItsTangent(Lp, dLp_dTstar_99, Tstar_dev_v, Temperature, state, g, ip, el) + + !*** variables and functions from other modules ***! + use prec, only: p_vec + use math, only: math_identity2nd + use mesh, only: mesh_NcpElems, & + mesh_maxNips + use material, only: homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance + + implicit none + !*** input variables ***! + real(pReal), dimension(6), intent(in):: Tstar_dev_v ! deviatoric part of the 2nd Piola Kirchhoff stress tensor in Mandel notation + real(pReal), intent(in):: Temperature + integer(pInt), intent(in):: g, & ! grain number + 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 + + !*** output variables ***! + 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 Tstar (9x9 matrix) + + ! Set Lp to zero and dLp_dTstar to Identity + Lp = 0.0_pReal + dLp_dTstar_99 = math_identity2nd(9) + +end subroutine constitutive_none_LpAndItsTangent + + +!**************************************************************** +!* calculates the rate of change of microstructure * +!**************************************************************** +pure function constitutive_none_dotState(Tstar_v, Temperature, state, g, ip, el) + + use prec, only: & + p_vec + use mesh, only: & + mesh_NcpElems, & + mesh_maxNips + use material, only: & + homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance + + implicit none + !*** input variables ***! + real(pReal), dimension(6), intent(in) :: Tstar_v ! 2nd Piola Kirchhoff stress tensor in Mandel notation + real(pReal), intent(in) :: Temperature + integer(pInt), intent(in):: g, & ! grain number + 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 + + !*** output variables ***! + real(pReal), dimension(1) :: constitutive_none_dotState ! evolution of state variable + + constitutive_none_dotState = 0.0_pReal + +end function constitutive_none_dotState + + + +!********************************************************************* +!* (instantaneous) incremental change of microstructure * +!********************************************************************* +function constitutive_none_deltaState(Tstar_v, Temperature, state, g,ip,el) + +use prec, only: pReal, & + pInt, & + p_vec +use mesh, only: mesh_NcpElems, & + mesh_maxNips +use material, only: homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance + +implicit none + +!*** input variables +integer(pInt), intent(in) :: g, & ! current grain number + ip, & ! current integration point + el ! current element number +real(pReal), intent(in) :: Temperature ! temperature +real(pReal), dimension(6), intent(in) :: Tstar_v ! current 2nd Piola-Kirchhoff stress in Mandel notation +type(p_vec), dimension(homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), intent(in) :: & + state ! current microstructural state + +!*** output variables +real(pReal), dimension(constitutive_none_sizeDotState(phase_plasticityInstance(material_phase(g,ip,el)))) :: & + constitutive_none_deltaState ! change of state variables / microstructure + +!*** local variables + + +constitutive_none_deltaState = 0.0_pReal + +endfunction + + +!**************************************************************** +!* calculates the rate of change of temperature * +!**************************************************************** +pure function constitutive_none_dotTemperature(Tstar_v, Temperature, state, g, ip, el) + + !*** variables and functions from other modules ***! + use prec, only: p_vec + use mesh, only: mesh_NcpElems,mesh_maxNips + use material, only: homogenization_maxNgrains + + implicit none + !*** input variables ***! + real(pReal), dimension(6), intent(in) :: Tstar_v ! 2nd Piola Kirchhoff stress tensor in Mandel notation + real(pReal), intent(in) :: Temperature + integer(pInt), intent(in):: g, & ! grain number + 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 + + !*** output variables ***! + real(pReal) constitutive_none_dotTemperature ! rate of change of temperature + + ! calculate dotTemperature + constitutive_none_dotTemperature = 0.0_pReal + +end function constitutive_none_dotTemperature + + +!********************************************************************* +!* return array of constitutive results * +!********************************************************************* +pure function constitutive_none_postResults(Tstar_v, Temperature, dt, state, g, ip, el) + +!*** variables and functions from other modules ***! + use prec, only: p_vec + use math, only: math_mul6x6 + use mesh, only: mesh_NcpElems, & + mesh_maxNips + use material, only: homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance, & + phase_Noutput + + implicit none + !*** input variables ***! + real(pReal), dimension(6), intent(in):: Tstar_v ! 2nd Piola Kirchhoff stress tensor in Mandel notation + real(pReal), intent(in):: Temperature, & + dt ! current time increment + integer(pInt), intent(in):: g, & ! grain number + 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 + + !*** output variables ***! + real(pReal), dimension(constitutive_none_sizePostResults(phase_plasticityInstance(material_phase(g,ip,el)))) :: & + constitutive_none_postResults + + + constitutive_none_postResults = 0.0_pReal + +end function constitutive_none_postResults + +end module constitutive_none