added output of mesh statistics at end of input file parsing

This commit is contained in:
Philip Eisenlohr 2007-10-24 09:00:42 +00:00
parent 67a5711ed1
commit f0617b74f6
1 changed files with 54 additions and 5 deletions

View File

@ -26,7 +26,7 @@
! FE-solver specific part (different for MARC/ABAQUS)..! ! FE-solver specific part (different for MARC/ABAQUS)..!
! Hence, I suggest to prefix with "FE_" ! Hence, I suggest to prefix with "FE_"
! !
! _mapElementtype : map MARC/ABAQUS elemtype to 1-maxN ! _mapElementtype : map MARC/ABAQUS elemtype to 1...maxN
! !
! _Nnodes : # nodes in a specific type of element ! _Nnodes : # nodes in a specific type of element
! _Nips : # IPs in a specific type of element ! _Nips : # IPs in a specific type of element
@ -42,6 +42,7 @@
! --------------------------- ! ---------------------------
integer(pInt) mesh_Nelems,mesh_NcpElems,mesh_NelemSets,mesh_maxNelemInSet integer(pInt) mesh_Nelems,mesh_NcpElems,mesh_NelemSets,mesh_maxNelemInSet
integer(pInt) mesh_Nnodes,mesh_maxNnodes,mesh_maxNips,mesh_maxNipNeighbors,mesh_maxNsharedElems integer(pInt) mesh_Nnodes,mesh_maxNnodes,mesh_maxNips,mesh_maxNipNeighbors,mesh_maxNsharedElems
integer(pInt), dimension(2) :: mesh_maxValStateVar = 0_pInt
character(len=64), dimension(:), allocatable :: mesh_nameElemSet character(len=64), dimension(:), allocatable :: mesh_nameElemSet
integer(pInt), dimension(:,:), allocatable :: mesh_mapElemSet integer(pInt), dimension(:,:), allocatable :: mesh_mapElemSet
integer(pInt), dimension(:,:), allocatable, target :: mesh_mapFEtoCPelem,mesh_mapFEtoCPnode integer(pInt), dimension(:,:), allocatable, target :: mesh_mapFEtoCPelem,mesh_mapFEtoCPnode
@ -169,7 +170,6 @@
! subroutine mesh_init() ! subroutine mesh_init()
! function mesh_FEtoCPelement(FEid) ! function mesh_FEtoCPelement(FEid)
! function mesh_build_ipNeighorhood() ! function mesh_build_ipNeighorhood()
! subroutine mesh_parse_inputFile()
! --------------------------- ! ---------------------------
@ -193,13 +193,13 @@
mesh_NelemSets = 0_pInt mesh_NelemSets = 0_pInt
mesh_maxNelemInSet = 0_pInt mesh_maxNelemInSet = 0_pInt
FE_mapElemtype = 1 ! MISSING this should be zero... FE_mapElemtype = 1 ! MISSING this should be zero... Now all unknown types map to Marc type "7"
FE_mapElemtype( 7) = 1 FE_mapElemtype( 7) = 1
FE_mapElemtype(134) = 2 FE_mapElemtype(134) = 2
FE_mapElemtype( 11) = 3 FE_mapElemtype( 11) = 3
FE_mapElemtype( 27) = 4 FE_mapElemtype( 27) = 4
! call to various subrountes to parse the stuff from the input file... ! call to various subroutines to parse the stuff from the input file...
if (IO_open_inputFile(fileUnit)) then if (IO_open_inputFile(fileUnit)) then
call mesh_get_meshDimensions(fileUnit) call mesh_get_meshDimensions(fileUnit)
call mesh_build_nodeMapping(fileUnit) call mesh_build_nodeMapping(fileUnit)
@ -210,6 +210,7 @@
call mesh_build_elements(fileUnit) call mesh_build_elements(fileUnit)
call mesh_build_sharedElems(fileUnit) call mesh_build_sharedElems(fileUnit)
call mesh_build_ipNeighborhood() call mesh_build_ipNeighborhood()
call mesh_tell_statistics()
close (fileUnit) close (fileUnit)
else else
call IO_error(100) call IO_error(100)
@ -658,6 +659,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements
pos = IO_stringPos(line,1) pos = IO_stringPos(line,1)
do while (scan(IO_stringValue(line,pos,1),'+-',back=.true.)>1) ! is noEfloat value? do while (scan(IO_stringValue(line,pos,1),'+-',back=.true.)>1) ! is noEfloat value?
val = NINT(IO_fixedNoEFloatValue (line,(/0,20/),1)) ! state var's value val = NINT(IO_fixedNoEFloatValue (line,(/0,20/),1)) ! state var's value
mesh_maxValStateVar(sv-1) = max(val,mesh_maxValStateVar(sv-1)) ! remember max val of material and texture index
if (initialcondTableStyle == 2) then if (initialcondTableStyle == 2) then
read (unit,610,END=620) line ! read extra line read (unit,610,END=620) line ! read extra line
read (unit,610,END=620) line ! read extra line read (unit,610,END=620) line ! read extra line
@ -694,7 +696,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements
use IO use IO
implicit none implicit none
integer unit,i,j,CP_node,CP_elem integer(pint) unit,i,j,CP_node,CP_elem
integer(pInt), dimension (133) :: pos integer(pInt), dimension (133) :: pos
character*300 line character*300 line
@ -786,5 +788,52 @@ matchFace: do j = 1,FE_NfaceNodes(-neighbor,t) ! count over nodes on matc
END SUBROUTINE END SUBROUTINE
!***********************************************************
! write statistics regarding input file parsing
! to the output file
!
!***********************************************************
SUBROUTINE mesh_tell_statistics()
use prec, only: pInt
implicit none
integer(pInt) i,j
integer(pInt), dimension (:,:), allocatable :: mesh_MatTex
character(len=64) f
allocate (mesh_MatTex(mesh_maxValStateVar(1),mesh_maxValStateVar(2)))
mesh_MatTex = 0_pInt
do i=1,mesh_NcpElems
mesh_MatTex(mesh_element(3,i),mesh_element(4,i)) = &
mesh_MatTex(mesh_element(3,i),mesh_element(4,i)) + 1 ! count combinations of material and texture
enddo
write (6,*)
write (6,*) "Input Parser: STATISTICS"
write (6,*)
write (6,*) mesh_Nelems," : total number of elements in mesh"
write (6,*) mesh_NcpElems, " : total number of CP elements in mesh"
write (6,*) mesh_Nnodes, " : total number of nodes in mesh"
write (6,*) mesh_maxNnodes, " : max number of nodes in any CP element"
write (6,*) mesh_maxNips, " : max number of IPs in any CP element"
write (6,*) mesh_maxNipNeighbors, " : max number of IP neighbors in any CP element"
write (6,*) mesh_maxNsharedElems, " : max number of CP elements sharing a node"
write (6,*)
write (6,*) "Input Parser: MATERIAL/TEXTURE"
write (6,*)
write (f,"(I3)") 1+mesh_maxValStateVar(2)
f = f//"(I8)"
do i=1,mesh_maxValStateVar(1) ! loop over all (possibly assigned) materials
write (6,f) i,mesh_MatTex(i,:) ! loop over all (possibly assigned) textures
enddo
write (6,*)
return
END SUBROUTINE
END MODULE mesh END MODULE mesh