homogenization: added enums and sourced allocation for RGC, some higher verbosity for isostrain
This commit is contained in:
parent
bc1ec5aa93
commit
6fa9ed8f48
|
@ -183,7 +183,7 @@ subroutine constitutive_init
|
||||||
thisOutput => constitutive_j2_output
|
thisOutput => constitutive_j2_output
|
||||||
thisSize => constitutive_j2_sizePostResult
|
thisSize => constitutive_j2_sizePostResult
|
||||||
case (PLASTICITY_PHENOPOWERLAW_ID)
|
case (PLASTICITY_PHENOPOWERLAW_ID)
|
||||||
outputName = 'phenopowerlaw'
|
outputName = PLASTICITY_PHENOPOWERLAW_label
|
||||||
thisOutput => constitutive_phenopowerlaw_output
|
thisOutput => constitutive_phenopowerlaw_output
|
||||||
thisSize => constitutive_phenopowerlaw_sizePostResult
|
thisSize => constitutive_phenopowerlaw_sizePostResult
|
||||||
case (PLASTICITY_DISLOTWIN_ID)
|
case (PLASTICITY_DISLOTWIN_ID)
|
||||||
|
|
|
@ -32,24 +32,40 @@ module homogenization_RGC
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
private
|
private
|
||||||
integer(pInt), dimension(:), allocatable, public :: &
|
integer(pInt), dimension(:), allocatable, public :: &
|
||||||
homogenization_RGC_sizeState, &
|
homogenization_RGC_sizeState, &
|
||||||
homogenization_RGC_sizePostResults
|
homogenization_RGC_sizePostResults
|
||||||
integer(pInt), dimension(:,:), allocatable,target, public :: &
|
integer(pInt), dimension(:,:), allocatable,target, public :: &
|
||||||
homogenization_RGC_sizePostResult
|
homogenization_RGC_sizePostResult
|
||||||
character(len=64), dimension(:,:), allocatable,target, public :: &
|
character(len=64), dimension(:,:), allocatable,target, public :: &
|
||||||
homogenization_RGC_output ! name of each post result output
|
homogenization_RGC_output ! name of each post result output
|
||||||
|
|
||||||
integer(pInt), dimension(:,:), allocatable, private :: &
|
integer(pInt), dimension(:,:), allocatable, private :: &
|
||||||
homogenization_RGC_Ngrains
|
homogenization_RGC_Ngrains
|
||||||
real(pReal), dimension(:,:), allocatable, private :: &
|
real(pReal), dimension(:,:), allocatable, private :: &
|
||||||
homogenization_RGC_dAlpha, &
|
homogenization_RGC_dAlpha, &
|
||||||
homogenization_RGC_angles
|
homogenization_RGC_angles
|
||||||
real(pReal), dimension(:,:,:,:), allocatable, private :: &
|
real(pReal), dimension(:,:,:,:), allocatable, private :: &
|
||||||
homogenization_RGC_orientation
|
homogenization_RGC_orientation
|
||||||
real(pReal), dimension(:), allocatable, private :: &
|
real(pReal), dimension(:), allocatable, private :: &
|
||||||
homogenization_RGC_xiAlpha, &
|
homogenization_RGC_xiAlpha, &
|
||||||
homogenization_RGC_ciAlpha
|
homogenization_RGC_ciAlpha
|
||||||
|
enum, bind(c)
|
||||||
|
enumerator :: undefined_ID, &
|
||||||
|
temperature_ID, &
|
||||||
|
constitutivework_ID, &
|
||||||
|
penaltyenergy_ID, &
|
||||||
|
volumediscrepancy_ID, &
|
||||||
|
averagerelaxrate_ID,&
|
||||||
|
maximumrelaxrate_ID,&
|
||||||
|
ipcoords_ID,&
|
||||||
|
magnitudemismatch_ID,&
|
||||||
|
avgdefgrad_ID,&
|
||||||
|
avgfirstpiola_ID
|
||||||
|
end enum
|
||||||
|
integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: &
|
||||||
|
homogenization_RGC_outputID !< ID of each post result output
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
homogenization_RGC_init, &
|
homogenization_RGC_init, &
|
||||||
homogenization_RGC_partitionDeformation, &
|
homogenization_RGC_partitionDeformation, &
|
||||||
|
@ -115,22 +131,23 @@ subroutine homogenization_RGC_init(fileUnit)
|
||||||
maxNinstance = int(count(homogenization_type == HOMOGENIZATION_RGC_ID),pInt)
|
maxNinstance = int(count(homogenization_type == HOMOGENIZATION_RGC_ID),pInt)
|
||||||
if (maxNinstance == 0_pInt) return
|
if (maxNinstance == 0_pInt) return
|
||||||
|
|
||||||
allocate(homogenization_RGC_sizeState(maxNinstance)); homogenization_RGC_sizeState = 0_pInt
|
allocate(homogenization_RGC_sizeState(maxNinstance), source=0_pInt)
|
||||||
allocate(homogenization_RGC_sizePostResults(maxNinstance)); homogenization_RGC_sizePostResults = 0_pInt
|
allocate(homogenization_RGC_sizePostResults(maxNinstance), source=0_pInt)
|
||||||
allocate(homogenization_RGC_Ngrains(3,maxNinstance)); homogenization_RGC_Ngrains = 0_pInt
|
allocate(homogenization_RGC_Ngrains(3,maxNinstance), source=0_pInt)
|
||||||
allocate(homogenization_RGC_ciAlpha(maxNinstance)); homogenization_RGC_ciAlpha = 0.0_pReal
|
allocate(homogenization_RGC_ciAlpha(maxNinstance), source=0.0_pReal)
|
||||||
allocate(homogenization_RGC_xiAlpha(maxNinstance)); homogenization_RGC_xiAlpha = 0.0_pReal
|
allocate(homogenization_RGC_xiAlpha(maxNinstance), source=0.0_pReal)
|
||||||
allocate(homogenization_RGC_dAlpha(3,maxNinstance)); homogenization_RGC_dAlpha = 0.0_pReal
|
allocate(homogenization_RGC_dAlpha(3,maxNinstance), source=0.0_pReal)
|
||||||
allocate(homogenization_RGC_angles(3,maxNinstance)); homogenization_RGC_angles = 400.0_pReal
|
allocate(homogenization_RGC_angles(3,maxNinstance), source=400.0_pReal)
|
||||||
allocate(homogenization_RGC_output(maxval(homogenization_Noutput),maxNinstance))
|
allocate(homogenization_RGC_output(maxval(homogenization_Noutput),maxNinstance))
|
||||||
homogenization_RGC_output = ''
|
homogenization_RGC_output=''
|
||||||
allocate(homogenization_RGC_sizePostResult(maxval(homogenization_Noutput),maxNinstance))
|
allocate(homogenization_RGC_outputID(maxval(homogenization_Noutput),maxNinstance),source=undefined_ID)
|
||||||
homogenization_RGC_sizePostResult = 0_pInt
|
allocate(homogenization_RGC_sizePostResult(maxval(homogenization_Noutput),maxNinstance),&
|
||||||
allocate(homogenization_RGC_orientation(3,3,mesh_maxNips,mesh_NcpElems))
|
source=0_pInt)
|
||||||
|
allocate(homogenization_RGC_orientation(3,3,mesh_maxNips,mesh_NcpElems), source=0.0_pReal)
|
||||||
homogenization_RGC_orientation = spread(spread(math_I3,3,mesh_maxNips),4,mesh_NcpElems) ! initialize to identity
|
homogenization_RGC_orientation = spread(spread(math_I3,3,mesh_maxNips),4,mesh_NcpElems) ! initialize to identity
|
||||||
|
|
||||||
rewind(fileUnit)
|
rewind(fileUnit)
|
||||||
do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partHomogenization) ! wind forward to <homogenization>
|
do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>'))/=material_partHomogenization) ! wind forward to <homogenization>
|
||||||
line = IO_read(fileUnit)
|
line = IO_read(fileUnit)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
@ -154,6 +171,31 @@ subroutine homogenization_RGC_init(fileUnit)
|
||||||
case ('(output)')
|
case ('(output)')
|
||||||
output = output + 1_pInt
|
output = output + 1_pInt
|
||||||
homogenization_RGC_output(output,i) = IO_lc(IO_stringValue(line,positions,2_pInt))
|
homogenization_RGC_output(output,i) = IO_lc(IO_stringValue(line,positions,2_pInt))
|
||||||
|
select case(homogenization_RGC_output(output,i))
|
||||||
|
case('constitutivework')
|
||||||
|
homogenization_RGC_outputID(output,i) = constitutivework_ID
|
||||||
|
case('penaltyenergy')
|
||||||
|
homogenization_RGC_outputID(output,i) = penaltyenergy_ID
|
||||||
|
case('volumediscrepancy')
|
||||||
|
homogenization_RGC_outputID(output,i) = volumediscrepancy_ID
|
||||||
|
case('averagerelaxrate')
|
||||||
|
homogenization_RGC_outputID(output,i) = averagerelaxrate_ID
|
||||||
|
case('maximumrelaxrate')
|
||||||
|
homogenization_RGC_outputID(output,i) = maximumrelaxrate_ID
|
||||||
|
case('magnitudemismatch')
|
||||||
|
homogenization_RGC_outputID(output,i) = magnitudemismatch_ID
|
||||||
|
case('temperature')
|
||||||
|
homogenization_RGC_outputID(output,i) = temperature_ID
|
||||||
|
case('ipcoords')
|
||||||
|
homogenization_RGC_outputID(output,i) = ipcoords_ID
|
||||||
|
case('avgdefgrad','avgf')
|
||||||
|
homogenization_RGC_outputID(output,i) = avgdefgrad_ID
|
||||||
|
case('avgp','avgfirstpiola','avg1stpiola')
|
||||||
|
homogenization_RGC_outputID(output,i) = avgfirstpiola_ID
|
||||||
|
case default
|
||||||
|
call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//&
|
||||||
|
' ('//HOMOGENIZATION_RGC_label//')')
|
||||||
|
end select
|
||||||
case ('clustersize')
|
case ('clustersize')
|
||||||
homogenization_RGC_Ngrains(1,i) = IO_intValue(line,positions,2_pInt)
|
homogenization_RGC_Ngrains(1,i) = IO_intValue(line,positions,2_pInt)
|
||||||
homogenization_RGC_Ngrains(2,i) = IO_intValue(line,positions,3_pInt)
|
homogenization_RGC_Ngrains(2,i) = IO_intValue(line,positions,3_pInt)
|
||||||
|
@ -170,6 +212,8 @@ subroutine homogenization_RGC_init(fileUnit)
|
||||||
homogenization_RGC_angles(1,i) = IO_floatValue(line,positions,2_pInt)
|
homogenization_RGC_angles(1,i) = IO_floatValue(line,positions,2_pInt)
|
||||||
homogenization_RGC_angles(2,i) = IO_floatValue(line,positions,3_pInt)
|
homogenization_RGC_angles(2,i) = IO_floatValue(line,positions,3_pInt)
|
||||||
homogenization_RGC_angles(3,i) = IO_floatValue(line,positions,4_pInt)
|
homogenization_RGC_angles(3,i) = IO_floatValue(line,positions,4_pInt)
|
||||||
|
case default
|
||||||
|
call IO_error(210_pInt,ext_msg=trim(tag)//' ('//HOMOGENIZATION_RGC_label//')')
|
||||||
end select
|
end select
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -180,7 +224,7 @@ subroutine homogenization_RGC_init(fileUnit)
|
||||||
elementLooping: do e = 1_pInt,mesh_NcpElems
|
elementLooping: do e = 1_pInt,mesh_NcpElems
|
||||||
if (homogenization_type(mesh_element(3,e)) == HOMOGENIZATION_RGC_ID) then
|
if (homogenization_type(mesh_element(3,e)) == HOMOGENIZATION_RGC_ID) then
|
||||||
myInstance = homogenization_typeInstance(mesh_element(3,e))
|
myInstance = homogenization_typeInstance(mesh_element(3,e))
|
||||||
if (all (homogenization_RGC_angles(:,myInstance) >= 399.9_pReal)) then
|
if (all (homogenization_RGC_angles(1:3,myInstance) >= 399.9_pReal)) then
|
||||||
homogenization_RGC_orientation(1:3,1:3,1,e) = math_EulerToR(math_sampleRandomOri())
|
homogenization_RGC_orientation(1:3,1:3,1,e) = math_EulerToR(math_sampleRandomOri())
|
||||||
do i = 1_pInt,FE_Nips(FE_geomtype(mesh_element(2,e)))
|
do i = 1_pInt,FE_Nips(FE_geomtype(mesh_element(2,e)))
|
||||||
if (microstructure_elemhomo(mesh_element(4,e))) then
|
if (microstructure_elemhomo(mesh_element(4,e))) then
|
||||||
|
@ -211,13 +255,13 @@ subroutine homogenization_RGC_init(fileUnit)
|
||||||
|
|
||||||
do i = 1_pInt,maxNinstance
|
do i = 1_pInt,maxNinstance
|
||||||
do j = 1_pInt,maxval(homogenization_Noutput)
|
do j = 1_pInt,maxval(homogenization_Noutput)
|
||||||
select case(homogenization_RGC_output(j,i))
|
select case(homogenization_RGC_outputID(j,i))
|
||||||
case('temperature','constitutivework','penaltyenergy','volumediscrepancy', &
|
case(temperature_ID,constitutivework_ID,penaltyenergy_ID,volumediscrepancy_ID, &
|
||||||
'averagerelaxrate','maximumrelaxrate')
|
averagerelaxrate_ID,maximumrelaxrate_ID)
|
||||||
mySize = 1_pInt
|
mySize = 1_pInt
|
||||||
case('ipcoords','magnitudemismatch')
|
case(ipcoords_ID,magnitudemismatch_ID)
|
||||||
mySize = 3_pInt
|
mySize = 3_pInt
|
||||||
case('avgdefgrad','avgf','avgp','avgfirstpiola','avg1stpiola')
|
case(avgdefgrad_ID,avgfirstpiola_ID)
|
||||||
mySize = 9_pInt
|
mySize = 9_pInt
|
||||||
case default
|
case default
|
||||||
mySize = 0_pInt
|
mySize = 0_pInt
|
||||||
|
@ -271,7 +315,7 @@ subroutine homogenization_RGC_partitionDeformation(F,avgF,state,ip,el)
|
||||||
real(pReal), dimension (3) :: aVect,nVect
|
real(pReal), dimension (3) :: aVect,nVect
|
||||||
integer(pInt), dimension (4) :: intFace
|
integer(pInt), dimension (4) :: intFace
|
||||||
integer(pInt), dimension (3) :: iGrain3
|
integer(pInt), dimension (3) :: iGrain3
|
||||||
integer(pInt) homID, iGrain,iFace,i,j
|
integer(pInt) :: homID, iGrain,iFace,i,j
|
||||||
integer(pInt), parameter :: nFace = 6_pInt
|
integer(pInt), parameter :: nFace = 6_pInt
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -373,8 +417,8 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
integer(pInt) homID,iNum,i,j,nIntFaceTot,iGrN,iGrP,iMun,iFace,k,l,ipert,iGrain,nGrain
|
integer(pInt) homID,iNum,i,j,nIntFaceTot,iGrN,iGrP,iMun,iFace,k,l,ipert,iGrain,nGrain
|
||||||
real(pReal), dimension (3,3,homogenization_maxNgrains) :: R,pF,pR,D,pD
|
real(pReal), dimension (3,3,homogenization_maxNgrains) :: R,pF,pR,D,pD
|
||||||
real(pReal), dimension (3,homogenization_maxNgrains) :: NN,pNN
|
real(pReal), dimension (3,homogenization_maxNgrains) :: NN,pNN
|
||||||
real(pReal), dimension (3) :: normP,normN,mornP,mornN
|
real(pReal), dimension (3) :: normP,normN,mornP,mornN
|
||||||
real(pReal) residMax,stresMax,constitutiveWork,penaltyEnergy,volDiscrep
|
real(pReal) :: residMax,stresMax,constitutiveWork,penaltyEnergy,volDiscrep
|
||||||
logical error
|
logical error
|
||||||
|
|
||||||
integer(pInt), parameter :: nFace = 6_pInt
|
integer(pInt), parameter :: nFace = 6_pInt
|
||||||
|
@ -397,11 +441,10 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate the size of the global relaxation arrays/jacobian matrices depending on the size of the cluster
|
! allocate the size of the global relaxation arrays/jacobian matrices depending on the size of the cluster
|
||||||
allocate(resid(3_pInt*nIntFaceTot)); resid = 0.0_pReal
|
allocate(resid(3_pInt*nIntFaceTot), source=0.0_pReal)
|
||||||
allocate(tract(nIntFaceTot,3)); tract = 0.0_pReal
|
allocate(tract(nIntFaceTot,3), source=0.0_pReal)
|
||||||
allocate(relax(3_pInt*nIntFaceTot)); relax = state%p(1:3_pInt*nIntFaceTot)
|
allocate(relax(3_pInt*nIntFaceTot)); relax=state%p(1:3_pInt*nIntFaceTot)
|
||||||
allocate(drelax(3_pInt*nIntFaceTot))
|
allocate(drelax(3_pInt*nIntFaceTot)); drelax=state%p(1:3_pInt*nIntFaceTot)-state0%p(1:3_pInt*nIntFaceTot)
|
||||||
drelax = state%p(1:3_pInt*nIntFaceTot) - state0%p(1:3_pInt*nIntFaceTot)
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! debugging the obtained state
|
! debugging the obtained state
|
||||||
|
@ -484,7 +527,7 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!!!------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! convergence check for stress residual
|
! convergence check for stress residual
|
||||||
stresMax = maxval(abs(P)) ! get the maximum of first Piola-Kirchhoff (material) stress
|
stresMax = maxval(abs(P)) ! get the maximum of first Piola-Kirchhoff (material) stress
|
||||||
stresLoc = int(maxloc(abs(P)),pInt) ! get the location of the maximum stress
|
stresLoc = int(maxloc(abs(P)),pInt) ! get the location of the maximum stress
|
||||||
|
@ -520,7 +563,6 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
flush(6)
|
flush(6)
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
! write(6,'(1x,a,1x,i3,1x,a6,1x,i3,1x,a12)')'RGC_updateState: ip',ip,'| el',el,'converged :)'
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! compute/update the state for postResult, i.e., all energy densities computed by time-integration
|
! compute/update the state for postResult, i.e., all energy densities computed by time-integration
|
||||||
|
@ -593,7 +635,7 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! ... of the constitutive stress tangent, assembled from dPdF or material constitutive model "smatrix"
|
! ... of the constitutive stress tangent, assembled from dPdF or material constitutive model "smatrix"
|
||||||
allocate(smatrix(3*nIntFaceTot,3*nIntFaceTot)); smatrix = 0.0_pReal
|
allocate(smatrix(3*nIntFaceTot,3*nIntFaceTot), source=0.0_pReal)
|
||||||
do iNum = 1_pInt,nIntFaceTot
|
do iNum = 1_pInt,nIntFaceTot
|
||||||
faceID = homogenization_RGC_interface1to4(iNum,homID) ! assembling of local dPdF into global Jacobian matrix
|
faceID = homogenization_RGC_interface1to4(iNum,homID) ! assembling of local dPdF into global Jacobian matrix
|
||||||
|
|
||||||
|
@ -607,7 +649,7 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
intFaceN = homogenization_RGC_getInterface(iFace,iGr3N) ! identifying all interfaces that influence relaxation of the above interface
|
intFaceN = homogenization_RGC_getInterface(iFace,iGr3N) ! identifying all interfaces that influence relaxation of the above interface
|
||||||
mornN = homogenization_RGC_interfaceNormal(intFaceN,ip,el) ! get normal of the interfaces
|
mornN = homogenization_RGC_interfaceNormal(intFaceN,ip,el) ! get normal of the interfaces
|
||||||
iMun = homogenization_RGC_interface4to1(intFaceN,homID) ! translate the interfaces ID into local 4-dimensional index
|
iMun = homogenization_RGC_interface4to1(intFaceN,homID) ! translate the interfaces ID into local 4-dimensional index
|
||||||
if (iMun > 0) then ! get the corresponding tangent
|
if (iMun > 0) then ! get the corresponding tangent
|
||||||
do i=1_pInt,3_pInt; do j=1_pInt,3_pInt; do k=1_pInt,3_pInt; do l=1_pInt,3_pInt
|
do i=1_pInt,3_pInt; do j=1_pInt,3_pInt; do k=1_pInt,3_pInt; do l=1_pInt,3_pInt
|
||||||
smatrix(3*(iNum-1)+i,3*(iMun-1)+j) = smatrix(3*(iNum-1)+i,3*(iMun-1)+j) + dPdF(i,k,j,l,iGrN)*normN(k)*mornN(l)
|
smatrix(3*(iNum-1)+i,3*(iMun-1)+j) = smatrix(3*(iNum-1)+i,3*(iMun-1)+j) + dPdF(i,k,j,l,iGrN)*normN(k)*mornN(l)
|
||||||
enddo;enddo;enddo;enddo
|
enddo;enddo;enddo;enddo
|
||||||
|
@ -651,9 +693,9 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! ... of the stress penalty tangent (mismatch penalty and volume penalty, computed using numerical
|
! ... of the stress penalty tangent (mismatch penalty and volume penalty, computed using numerical
|
||||||
! perturbation method) "pmatrix"
|
! perturbation method) "pmatrix"
|
||||||
allocate(pmatrix(3*nIntFaceTot,3*nIntFaceTot)); pmatrix = 0.0_pReal
|
allocate(pmatrix(3*nIntFaceTot,3*nIntFaceTot), source=0.0_pReal)
|
||||||
allocate(p_relax(3*nIntFaceTot)); p_relax = 0.0_pReal
|
allocate(p_relax(3*nIntFaceTot), source=0.0_pReal)
|
||||||
allocate(p_resid(3*nIntFaceTot)); p_resid = 0.0_pReal
|
allocate(p_resid(3*nIntFaceTot), source=0.0_pReal)
|
||||||
do ipert = 1_pInt,3_pInt*nIntFaceTot
|
do ipert = 1_pInt,3_pInt*nIntFaceTot
|
||||||
p_relax = relax
|
p_relax = relax
|
||||||
p_relax(ipert) = relax(ipert) + pPert_RGC ! perturb the relaxation vector
|
p_relax(ipert) = relax(ipert) + pPert_RGC ! perturb the relaxation vector
|
||||||
|
@ -711,7 +753,7 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! ... of the numerical viscosity traction "rmatrix"
|
! ... of the numerical viscosity traction "rmatrix"
|
||||||
allocate(rmatrix(3*nIntFaceTot,3*nIntFaceTot)); rmatrix = 0.0_pReal
|
allocate(rmatrix(3*nIntFaceTot,3*nIntFaceTot),source=0.0_pReal)
|
||||||
forall (i=1_pInt:3_pInt*nIntFaceTot) &
|
forall (i=1_pInt:3_pInt*nIntFaceTot) &
|
||||||
rmatrix(i,i) = viscModus_RGC*viscPower_RGC/(refRelaxRate_RGC*dt)* & ! tangent due to numerical viscosity traction appears
|
rmatrix(i,i) = viscModus_RGC*viscPower_RGC/(refRelaxRate_RGC*dt)* & ! tangent due to numerical viscosity traction appears
|
||||||
(abs(drelax(i))/(refRelaxRate_RGC*dt))**(viscPower_RGC - 1.0_pReal) ! only in the main diagonal term
|
(abs(drelax(i))/(refRelaxRate_RGC*dt))**(viscPower_RGC - 1.0_pReal) ! only in the main diagonal term
|
||||||
|
@ -746,9 +788,9 @@ function homogenization_RGC_updateState( state, state0,P,F,F0,avgF,dt,dPdF,ip,el
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
!!!------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! computing the update of the state variable (relaxation vectors) using the Jacobian matrix
|
! computing the update of the state variable (relaxation vectors) using the Jacobian matrix
|
||||||
allocate(jnverse(3_pInt*nIntFaceTot,3_pInt*nIntFaceTot)); jnverse = 0.0_pReal
|
allocate(jnverse(3_pInt*nIntFaceTot,3_pInt*nIntFaceTot),source=0.0_pReal)
|
||||||
call math_invert(size(jmatrix,1),jmatrix,jnverse,error) ! Compute the inverse of the overall Jacobian matrix
|
call math_invert(size(jmatrix,1),jmatrix,jnverse,error) ! Compute the inverse of the overall Jacobian matrix
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -886,37 +928,37 @@ pure function homogenization_RGC_postResults(state,ip,el,avgP,avgF)
|
||||||
c = 0_pInt
|
c = 0_pInt
|
||||||
homogenization_RGC_postResults = 0.0_pReal
|
homogenization_RGC_postResults = 0.0_pReal
|
||||||
do o = 1_pInt,homogenization_Noutput(mesh_element(3,el))
|
do o = 1_pInt,homogenization_Noutput(mesh_element(3,el))
|
||||||
select case(homogenization_RGC_output(o,homID))
|
select case(homogenization_RGC_outputID(o,homID))
|
||||||
case ('temperature')
|
case (temperature_ID)
|
||||||
homogenization_RGC_postResults(c+1_pInt) = crystallite_temperature(ip,el)
|
homogenization_RGC_postResults(c+1_pInt) = crystallite_temperature(ip,el)
|
||||||
c = c + 1_pInt
|
c = c + 1_pInt
|
||||||
case ('avgdefgrad','avgf')
|
case (avgdefgrad_ID)
|
||||||
homogenization_RGC_postResults(c+1_pInt:c+9_pInt) = reshape(avgF,[9])
|
homogenization_RGC_postResults(c+1_pInt:c+9_pInt) = reshape(avgF,[9])
|
||||||
c = c + 9_pInt
|
c = c + 9_pInt
|
||||||
case ('avgp','avgfirstpiola','avg1stpiola')
|
case (avgfirstpiola_ID)
|
||||||
homogenization_RGC_postResults(c+1_pInt:c+9_pInt) = reshape(avgP,[9])
|
homogenization_RGC_postResults(c+1_pInt:c+9_pInt) = reshape(avgP,[9])
|
||||||
c = c + 9_pInt
|
c = c + 9_pInt
|
||||||
case ('ipcoords')
|
case (ipcoords_ID)
|
||||||
homogenization_RGC_postResults(c+1_pInt:c+3_pInt) = mesh_ipCoordinates(1:3,ip,el) ! current ip coordinates
|
homogenization_RGC_postResults(c+1_pInt:c+3_pInt) = mesh_ipCoordinates(1:3,ip,el) ! current ip coordinates
|
||||||
c = c + 3_pInt
|
c = c + 3_pInt
|
||||||
case('constitutivework')
|
case (constitutivework_ID)
|
||||||
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+1)
|
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+1)
|
||||||
c = c + 1_pInt
|
c = c + 1_pInt
|
||||||
case('magnitudemismatch')
|
case (magnitudemismatch_ID)
|
||||||
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+2)
|
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+2)
|
||||||
homogenization_RGC_postResults(c+2) = state%p(3*nIntFaceTot+3)
|
homogenization_RGC_postResults(c+2) = state%p(3*nIntFaceTot+3)
|
||||||
homogenization_RGC_postResults(c+3) = state%p(3*nIntFaceTot+4)
|
homogenization_RGC_postResults(c+3) = state%p(3*nIntFaceTot+4)
|
||||||
c = c + 3_pInt
|
c = c + 3_pInt
|
||||||
case('penaltyenergy')
|
case (penaltyenergy_ID)
|
||||||
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+5)
|
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+5)
|
||||||
c = c + 1_pInt
|
c = c + 1_pInt
|
||||||
case('volumediscrepancy')
|
case (volumediscrepancy_ID)
|
||||||
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+6)
|
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+6)
|
||||||
c = c + 1_pInt
|
c = c + 1_pInt
|
||||||
case('averagerelaxrate')
|
case (averagerelaxrate_ID)
|
||||||
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+7)
|
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+7)
|
||||||
c = c + 1_pInt
|
c = c + 1_pInt
|
||||||
case('maximumrelaxrate')
|
case (maximumrelaxrate_ID)
|
||||||
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+8)
|
homogenization_RGC_postResults(c+1) = state%p(3*nIntFaceTot+8)
|
||||||
c = c + 1_pInt
|
c = c + 1_pInt
|
||||||
end select
|
end select
|
||||||
|
@ -960,7 +1002,7 @@ subroutine homogenization_RGC_stressPenalty(rPen,nMis,avgF,fDef,ip,el,homID)
|
||||||
real(pReal), dimension (3) :: nVect,surfCorr
|
real(pReal), dimension (3) :: nVect,surfCorr
|
||||||
real(pReal), dimension (2) :: Gmoduli
|
real(pReal), dimension (2) :: Gmoduli
|
||||||
integer(pInt) :: homID,iGrain,iGNghb,iFace,i,j,k,l
|
integer(pInt) :: homID,iGrain,iGNghb,iFace,i,j,k,l
|
||||||
real(pReal) :: muGrain,muGNghb,nDefNorm,bgGrain,bgGNghb
|
real(pReal) :: muGrain,muGNghb,nDefNorm,bgGrain,bgGNghb
|
||||||
|
|
||||||
integer(pInt), parameter :: nFace = 6_pInt
|
integer(pInt), parameter :: nFace = 6_pInt
|
||||||
real(pReal), parameter :: nDefToler = 1.0e-10_pReal
|
real(pReal), parameter :: nDefToler = 1.0e-10_pReal
|
||||||
|
|
|
@ -54,7 +54,7 @@ module homogenization_isostrain
|
||||||
integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: &
|
integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: &
|
||||||
homogenization_isostrain_outputID !< ID of each post result output
|
homogenization_isostrain_outputID !< ID of each post result output
|
||||||
integer(kind(average_ID)), dimension(:), allocatable, private :: &
|
integer(kind(average_ID)), dimension(:), allocatable, private :: &
|
||||||
homogenization_isostrain_mapping !< ID of each post result output
|
homogenization_isostrain_mapping !< mapping type
|
||||||
|
|
||||||
|
|
||||||
public :: &
|
public :: &
|
||||||
|
@ -144,8 +144,9 @@ subroutine homogenization_isostrain_init(fileUnit)
|
||||||
case('avgp','avgfirstpiola','avg1stpiola')
|
case('avgp','avgfirstpiola','avg1stpiola')
|
||||||
homogenization_isostrain_outputID(output,i) = avgfirstpiola_ID
|
homogenization_isostrain_outputID(output,i) = avgfirstpiola_ID
|
||||||
case default
|
case default
|
||||||
mySize = 0_pInt
|
call IO_error(105_pInt,ext_msg=IO_stringValue(line,positions,2_pInt)//&
|
||||||
end select
|
' ('//HOMOGENIZATION_isostrain_label//')')
|
||||||
|
end select
|
||||||
case ('nconstituents','ngrains')
|
case ('nconstituents','ngrains')
|
||||||
homogenization_isostrain_Ngrains(i) = IO_intValue(line,positions,2_pInt)
|
homogenization_isostrain_Ngrains(i) = IO_intValue(line,positions,2_pInt)
|
||||||
case ('mapping')
|
case ('mapping')
|
||||||
|
@ -156,6 +157,8 @@ subroutine homogenization_isostrain_init(fileUnit)
|
||||||
homogenization_isostrain_mapping(i) = average_ID
|
homogenization_isostrain_mapping(i) = average_ID
|
||||||
case default
|
case default
|
||||||
end select
|
end select
|
||||||
|
case default
|
||||||
|
call IO_error(210_pInt,ext_msg=trim(tag)//' ('//HOMOGENIZATION_isostrain_label//')')
|
||||||
end select
|
end select
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in New Issue