using theMesh (object oriented mesh description)

This commit is contained in:
Martin Diehl 2019-02-02 10:35:10 +01:00
parent f0b5b9fd59
commit 7a8d98d135
1 changed files with 32 additions and 30 deletions

View File

@ -12,8 +12,6 @@ module crystallite
use FEsolving, only: &
FEsolving_execElem, &
FEsolving_execIP
use mesh, only: &
mesh_element
use material, only: &
homogenization_Ngrains
use prec, only: &
@ -155,10 +153,8 @@ subroutine crystallite_init
math_inv33, &
math_mul33x33
use mesh, only: &
mesh_element, &
mesh_NcpElems, &
mesh_maxNips, &
mesh_maxNipNeighbors
theMesh, &
mesh_element
use IO, only: &
IO_timeStamp, &
IO_stringValue, &
@ -196,8 +192,8 @@ subroutine crystallite_init
#include "compilation_info.f90"
cMax = homogenization_maxNgrains
iMax = mesh_maxNips
eMax = mesh_NcpElems
iMax = theMesh%elem%nIPs
eMax = theMesh%nElems
! ---------------------------------------------------------------------------
! ToDo (when working on homogenization): should be 3x3 tensor called S
@ -333,7 +329,7 @@ subroutine crystallite_init
case(elasmatrix_ID)
mySize = 36_pInt
case(neighboringip_ID,neighboringelement_ID)
mySize = mesh_maxNipNeighbors
mySize = theMesh%elem%nIPneighbors
case default
mySize = 0_pInt
end select
@ -415,7 +411,7 @@ subroutine crystallite_init
write(6,'(a42,1x,i10)') ' # of elements: ', eMax
write(6,'(a42,1x,i10)') 'max # of integration points/element: ', iMax
write(6,'(a42,1x,i10)') 'max # of constituents/integration point: ', cMax
write(6,'(a42,1x,i10)') 'max # of neigbours/integration point: ', mesh_maxNipNeighbors
write(6,'(a42,1x,i10)') 'max # of neigbours/integration point: ', theMesh%elem%nIPneighbors
write(6,'(a42,1x,i10)') ' # of nonlocal constituents: ',count(.not. crystallite_localPlasticity)
flush(6)
endif
@ -458,10 +454,8 @@ function crystallite_stress()
math_6toSym33, &
math_sym33to6
use mesh, only: &
mesh_NcpElems, &
mesh_element, &
mesh_maxNips, &
FE_geomtype
theMesh, &
mesh_element
use material, only: &
homogenization_Ngrains, &
plasticState, &
@ -474,7 +468,7 @@ function crystallite_stress()
constitutive_LiAndItsTangents
implicit none
logical, dimension(mesh_maxNips,mesh_NcpElems) :: crystallite_stress
logical, dimension(theMesh%elem%nIPs,theMesh%Nelems) :: crystallite_stress
real(pReal) :: &
formerSubStep
integer(pInt) :: &
@ -541,7 +535,7 @@ function crystallite_stress()
endIP = startIP
else singleRun
startIP = 1_pInt
endIP = mesh_maxNips
endIP = theMesh%elem%nIPs
endif singleRun
NiterationCrystallite = 0_pInt
@ -727,8 +721,7 @@ subroutine crystallite_stressTangent()
math_invert2, &
math_det33
use mesh, only: &
mesh_element, &
FE_geomtype
mesh_element
use material, only: &
homogenization_Ngrains
use constitutive, only: &
@ -929,7 +922,7 @@ function crystallite_push33ToRef(ipc,ip,el, tensor33)
math_inv33, &
math_EulerToR
use material, only: &
material_EulerAngles
material_EulerAngles ! ToDo: Why stored? We also have crystallite_orientation0
implicit none
real(pReal), dimension(3,3) :: crystallite_push33ToRef
@ -960,13 +953,10 @@ function crystallite_postResults(ipc, ip, el)
inDeg, &
math_6toSym33
use mesh, only: &
theMesh, &
mesh_element, &
mesh_ipVolume, &
mesh_maxNipNeighbors, &
mesh_ipNeighborhood, &
FE_NipNeighbors, &
FE_geomtype, &
FE_celltype
mesh_ipNeighborhood
use material, only: &
plasticState, &
sourceState, &
@ -1070,14 +1060,14 @@ function crystallite_postResults(ipc, ip, el)
mySize = 36_pInt
crystallite_postResults(c+1:c+mySize) = reshape(constitutive_homogenizedC(ipc,ip,el),[mySize])
case(neighboringelement_ID)
mySize = mesh_maxNipNeighbors
mySize = theMesh%elem%nIPneighbors
crystallite_postResults(c+1:c+mySize) = 0.0_pReal
forall (n = 1_pInt:FE_NipNeighbors(FE_celltype(FE_geomtype(mesh_element(2,el))))) &
forall (n = 1_pInt:mySize) &
crystallite_postResults(c+n) = real(mesh_ipNeighborhood(1,n,ip,el),pReal)
case(neighboringip_ID)
mySize = mesh_maxNipNeighbors
mySize = theMesh%elem%nIPneighbors
crystallite_postResults(c+1:c+mySize) = 0.0_pReal
forall (n = 1_pInt:FE_NipNeighbors(FE_celltype(FE_geomtype(mesh_element(2,el))))) &
forall (n = 1_pInt:mySize) &
crystallite_postResults(c+n) = real(mesh_ipNeighborhood(2,n,ip,el),pReal)
end select
c = c + mySize
@ -2128,7 +2118,8 @@ end subroutine nonlocalConvergenceCheck
!> @details: For explicitEuler, RK4 and RKCK45, adaptive Euler and FPI have their on criteria
!--------------------------------------------------------------------------------------------------
subroutine setConvergenceFlag()
use mesh, only: &
mesh_element
implicit none
integer(pInt) :: &
e, & !< element index in element loop
@ -2168,7 +2159,8 @@ end subroutine setConvergenceFlag
!> @brief Standard forwarding of state as state = state0 + dotState * (delta t)
!--------------------------------------------------------------------------------------------------
subroutine update_stress(timeFraction)
use mesh, only: &
mesh_element
implicit none
real(pReal), intent(in) :: &
timeFraction
@ -2200,6 +2192,8 @@ end subroutine update_stress
!> @brief tbd
!--------------------------------------------------------------------------------------------------
subroutine update_dependentState()
use mesh, only: &
mesh_element
use constitutive, only: &
constitutive_dependentState => constitutive_microstructure
@ -2232,6 +2226,8 @@ subroutine update_state(timeFraction)
sourceState, &
phase_Nsources, &
phaseAt, phasememberAt
use mesh, only: &
mesh_element
implicit none
real(pReal), intent(in) :: &
@ -2281,6 +2277,8 @@ subroutine update_dotState(timeFraction)
sourceState, &
phaseAt, phasememberAt, &
phase_Nsources
use mesh, only: &
mesh_element
use constitutive, only: &
constitutive_collectDotState
@ -2334,6 +2332,8 @@ subroutine update_deltaState
IEEE_arithmetic
use prec, only: &
dNeq0
use mesh, only: &
mesh_element
use material, only: &
plasticState, &
sourceState, &
@ -2429,6 +2429,8 @@ logical function stateJump(ipc,ip,el)
sourceState, &
phase_Nsources, &
phaseAt, phasememberAt
use mesh, only: &
mesh_element
use constitutive, only: &
constitutive_collectDeltaState
use math, only: &