added specialized ipNeighborhood calculation for spectral solver case

This commit is contained in:
Philip Eisenlohr 2013-04-19 16:04:20 +00:00
parent 12760026a4
commit e8f238a413
1 changed files with 80 additions and 7 deletions

View File

@ -547,6 +547,7 @@ subroutine mesh_init(ip,el)
write(6,'(a,3(i12 ))') ' grid a b c: ', res write(6,'(a,3(i12 ))') ' grid a b c: ', res
write(6,'(a,3(f12.5))') ' size x y z: ', geomdim write(6,'(a,3(f12.5))') ' size x y z: ', geomdim
write(6,'(a,i5,/)') ' homogenization: ', homog write(6,'(a,i5,/)') ' homogenization: ', homog
call mesh_spectral_count_nodesAndElements call mesh_spectral_count_nodesAndElements
call mesh_spectral_count_cpElements call mesh_spectral_count_cpElements
call mesh_spectral_map_elements call mesh_spectral_map_elements
@ -554,6 +555,13 @@ subroutine mesh_init(ip,el)
call mesh_spectral_count_cpSizes call mesh_spectral_count_cpSizes
call mesh_spectral_build_nodes call mesh_spectral_build_nodes
call mesh_spectral_build_elements(fileUnit) call mesh_spectral_build_elements(fileUnit)
call mesh_get_damaskOptions(fileUnit)
close (fileUnit)
call mesh_build_cells
call mesh_build_ipCoordinates
call mesh_build_ipVolumes
call mesh_build_ipAreas
call mesh_spectral_build_ipNeighborhood
#endif #endif
#ifdef Marc #ifdef Marc
call IO_open_inputFile(fileUnit,modelName) ! parse info from input file... call IO_open_inputFile(fileUnit,modelName) ! parse info from input file...
@ -567,6 +575,15 @@ subroutine mesh_init(ip,el)
call mesh_marc_build_nodes(fileUnit) call mesh_marc_build_nodes(fileUnit)
call mesh_marc_count_cpSizes(fileunit) call mesh_marc_count_cpSizes(fileunit)
call mesh_marc_build_elements(fileUnit) call mesh_marc_build_elements(fileUnit)
call mesh_get_damaskOptions(fileUnit)
close (fileUnit)
call mesh_build_cells
call mesh_build_ipCoordinates
call mesh_build_ipVolumes
call mesh_build_ipAreas
call mesh_build_nodeTwins
call mesh_build_sharedElems
call mesh_build_ipNeighborhood
#endif #endif
#ifdef Abaqus #ifdef Abaqus
call IO_open_inputFile(fileUnit,modelName) ! parse info from input file... call IO_open_inputFile(fileUnit,modelName) ! parse info from input file...
@ -582,11 +599,8 @@ subroutine mesh_init(ip,el)
call mesh_abaqus_build_nodes(fileUnit) call mesh_abaqus_build_nodes(fileUnit)
call mesh_abaqus_count_cpSizes(fileunit) call mesh_abaqus_count_cpSizes(fileunit)
call mesh_abaqus_build_elements(fileUnit) call mesh_abaqus_build_elements(fileUnit)
#endif
call mesh_get_damaskOptions(fileUnit) call mesh_get_damaskOptions(fileUnit)
close (fileUnit) close (fileUnit)
call mesh_build_cells call mesh_build_cells
call mesh_build_ipCoordinates call mesh_build_ipCoordinates
call mesh_build_ipVolumes call mesh_build_ipVolumes
@ -594,8 +608,9 @@ subroutine mesh_init(ip,el)
call mesh_build_nodeTwins call mesh_build_nodeTwins
call mesh_build_sharedElems call mesh_build_sharedElems
call mesh_build_ipNeighborhood call mesh_build_ipNeighborhood
call mesh_tell_statistics #endif
call mesh_tell_statistics
call mesh_writeGeom call mesh_writeGeom
if (usePingPong .and. (mesh_Nelems /= mesh_NcpElems)) call IO_error(600_pInt) ! ping-pong must be disabled when havin non-DAMASK-elements if (usePingPong .and. (mesh_Nelems /= mesh_NcpElems)) call IO_error(600_pInt) ! ping-pong must be disabled when havin non-DAMASK-elements
@ -614,9 +629,9 @@ subroutine mesh_init(ip,el)
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! write description file for constitutive phase output ! write description file for constitutive phase output
call IO_write_jobFile(fileUnit,'mesh') call IO_write_jobFile(fileUnit,'mesh')
write(fileUnit,'(a,1x,i)') 'maxNcellnodes ', mesh_maxNcellnodes write(fileUnit,'(a,1x,i12)') 'maxNcellnodes ', mesh_maxNcellnodes
write(fileUnit,'(a,1x,i)') 'maxNips ', mesh_maxNips write(fileUnit,'(a,1x,i12)') 'maxNips ', mesh_maxNips
write(fileUnit,'(a,1x,i)') 'maxNcpElems', mesh_NcpElems write(fileUnit,'(a,1x,i12)') 'maxNcpElems', mesh_NcpElems
close(fileUnit) close(fileUnit)
end subroutine mesh_init end subroutine mesh_init
@ -3991,6 +4006,64 @@ subroutine mesh_build_ipNeighborhood
end subroutine mesh_build_ipNeighborhood end subroutine mesh_build_ipNeighborhood
!--------------------------------------------------------------------------------------------------
!> @brief build neighborhood relations for spectral
!> @details assign globals: mesh_ipNeighborhood
!--------------------------------------------------------------------------------------------------
subroutine mesh_spectral_build_ipNeighborhood
implicit none
integer(pInt) x,y,z, &
e
allocate(mesh_ipNeighborhood(3,mesh_maxNipNeighbors,mesh_maxNips,mesh_NcpElems))
mesh_ipNeighborhood = 0_pInt
e = 0_pInt
do x = 0_pInt,res(1)-1_pInt
do y = 0_pInt,res(2)-1_pInt
do z = 0_pInt,res(3)-1_pInt
e = e + 1_pInt
mesh_ipNeighborhood(1,1,1,e) = z * res(1) * res(2) &
+ y * res(1) &
+ modulo(x+1_pInt,res(1)) &
+ 1_pInt
mesh_ipNeighborhood(1,2,1,e) = z * res(1) * res(2) &
+ y * res(1) &
+ modulo(x-1_pInt,res(1)) &
+ 1_pInt
mesh_ipNeighborhood(1,3,1,e) = z * res(1) * res(2) &
+ modulo(y+1_pInt,res(2)) * res(1) &
+ x &
+ 1_pInt
mesh_ipNeighborhood(1,4,1,e) = z * res(1) * res(2) &
+ modulo(y-1_pInt,res(2)) * res(1) &
+ x &
+ 1_pInt
mesh_ipNeighborhood(1,5,1,e) = modulo(z+1_pInt,res(3)) * res(1) * res(2) &
+ y * res(1) &
+ x &
+ 1_pInt
mesh_ipNeighborhood(1,6,1,e) = modulo(z-1_pInt,res(3)) * res(1) * res(2) &
+ y * res(1) &
+ x &
+ 1_pInt
mesh_ipNeighborhood(2,1:6,1,e) = 1_pInt
mesh_ipNeighborhood(3,1,1,e) = 2_pInt
mesh_ipNeighborhood(3,2,1,e) = 1_pInt
mesh_ipNeighborhood(3,3,1,e) = 4_pInt
mesh_ipNeighborhood(3,4,1,e) = 3_pInt
mesh_ipNeighborhood(3,5,1,e) = 6_pInt
mesh_ipNeighborhood(3,6,1,e) = 5_pInt
enddo
enddo
enddo
end subroutine mesh_spectral_build_ipNeighborhood
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief write statistics regarding input file parsing to the output file !> @brief write statistics regarding input file parsing to the output file
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------