use new data structure to calculate cell node coordinates
This commit is contained in:
parent
2b65c888c4
commit
c41d8eb257
|
@ -65,8 +65,8 @@ subroutine mesh_init(ip,el)
|
||||||
integer :: &
|
integer :: &
|
||||||
mesh_NelemSets
|
mesh_NelemSets
|
||||||
real(pReal), dimension(:,:), allocatable :: &
|
real(pReal), dimension(:,:), allocatable :: &
|
||||||
mesh_node, & !< node x,y,z coordinates (after deformation! ONLY FOR MARC!!!
|
node0_elem, & !< node x,y,z coordinates (initially!)
|
||||||
mesh_node0 !< node x,y,z coordinates (initially!)
|
node0_cell
|
||||||
|
|
||||||
integer :: j, fileFormatVersion, elemType, &
|
integer :: j, fileFormatVersion, elemType, &
|
||||||
mesh_maxNelemInSet, &
|
mesh_maxNelemInSet, &
|
||||||
|
@ -88,7 +88,7 @@ subroutine mesh_init(ip,el)
|
||||||
real(pReal), dimension(:,:), allocatable :: &
|
real(pReal), dimension(:,:), allocatable :: &
|
||||||
ip_reshaped
|
ip_reshaped
|
||||||
integer,dimension(:,:,:), allocatable :: &
|
integer,dimension(:,:,:), allocatable :: &
|
||||||
connectivity_cell !< cell connectivity for each element,ip/cell
|
connectivity_cell !< cell connectivity for each element,ip/cell
|
||||||
integer, dimension(:,:), allocatable :: &
|
integer, dimension(:,:), allocatable :: &
|
||||||
connectivity_elem
|
connectivity_elem
|
||||||
|
|
||||||
|
@ -119,14 +119,13 @@ subroutine mesh_init(ip,el)
|
||||||
allocate (mesh_mapFEtoCPnode(2,mesh_Nnodes),source=0)
|
allocate (mesh_mapFEtoCPnode(2,mesh_Nnodes),source=0)
|
||||||
call mesh_marc_map_nodes(mesh_Nnodes,inputFile) !ToDo: don't work on global variables
|
call mesh_marc_map_nodes(mesh_Nnodes,inputFile) !ToDo: don't work on global variables
|
||||||
|
|
||||||
mesh_node0 = mesh_marc_build_nodes(mesh_Nnodes,inputFile)
|
node0_elem = mesh_marc_build_nodes(mesh_Nnodes,inputFile)
|
||||||
mesh_node = mesh_node0
|
|
||||||
|
|
||||||
elemType = mesh_marc_getElemType(mesh_nElems,FILEUNIT)
|
elemType = mesh_marc_getElemType(mesh_nElems,FILEUNIT)
|
||||||
|
|
||||||
call theMesh%init('mesh',elemType,mesh_node0)
|
call theMesh%init('mesh',elemType,node0_elem)
|
||||||
call theMesh%setNelems(mesh_nElems)
|
call theMesh%setNelems(mesh_nElems)
|
||||||
allocate(cellNodeDefinition(theMesh%elem%nNodes-1))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -148,9 +147,13 @@ subroutine mesh_init(ip,el)
|
||||||
call results_closeJobFile
|
call results_closeJobFile
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
allocate(connectivity_cell(theMesh%elem%NcellNodesPerCell,theMesh%elem%nIPs,theMesh%nElems))
|
allocate(cellNodeDefinition(theMesh%elem%nNodes-1))
|
||||||
|
allocate(connectivity_cell(theMesh%elem%NcellNodesPerCell,theMesh%elem%nIPs,theMesh%nElems))
|
||||||
call buildCells(connectivity_cell,cellNodeDefinition,&
|
call buildCells(connectivity_cell,cellNodeDefinition,&
|
||||||
mesh_Nnodes,theMesh%elem,connectivity_elem)
|
mesh_Nnodes,theMesh%elem,connectivity_elem)
|
||||||
|
allocate(node0_cell(3,maxval(connectivity_cell)))
|
||||||
|
call buildCellNodes(node0_cell,&
|
||||||
|
cellNodeDefinition,node0_elem)
|
||||||
|
|
||||||
allocate(mesh_ipCoordinates(3,theMesh%elem%nIPs,theMesh%nElems),source=0.0_pReal)
|
allocate(mesh_ipCoordinates(3,theMesh%elem%nIPs,theMesh%nElems),source=0.0_pReal)
|
||||||
|
|
||||||
|
@ -173,12 +176,12 @@ subroutine mesh_init(ip,el)
|
||||||
ip_reshaped = reshape(mesh_ipCoordinates,[3,theMesh%elem%nIPs*theMesh%nElems])
|
ip_reshaped = reshape(mesh_ipCoordinates,[3,theMesh%elem%nIPs*theMesh%nElems])
|
||||||
call discretization_init(microstructureAt,homogenizationAt,&
|
call discretization_init(microstructureAt,homogenizationAt,&
|
||||||
ip_reshaped,&
|
ip_reshaped,&
|
||||||
mesh_node0)
|
node0_elem)
|
||||||
#if defined(DAMASK_HDF5)
|
#if defined(DAMASK_HDF5)
|
||||||
call results_openJobFile
|
call results_openJobFile
|
||||||
call results_writeDataset('geometry',ip_reshaped,'x_c', &
|
call results_writeDataset('geometry',ip_reshaped,'x_c', &
|
||||||
'cell center coordinates','m')
|
'cell center coordinates','m')
|
||||||
call results_writeDataset('geometry',mesh_node0,'x_n', &
|
call results_writeDataset('geometry',node0_elem,'x_n', &
|
||||||
'nodal coordinates','m')
|
'nodal coordinates','m')
|
||||||
call results_closeJobFile()
|
call results_closeJobFile()
|
||||||
#endif
|
#endif
|
||||||
|
@ -835,6 +838,34 @@ subroutine buildCells(connectivity_cell,cellNodeDefinition, &
|
||||||
end subroutine buildCells
|
end subroutine buildCells
|
||||||
|
|
||||||
|
|
||||||
|
subroutine buildCellNodes(node_cell,&
|
||||||
|
definition,node_elem)
|
||||||
|
|
||||||
|
real(pReal), dimension(:,:), intent(out) :: node_cell
|
||||||
|
type(tCellNodeDefinition), dimension(:), intent(in) :: definition
|
||||||
|
real(pReal), dimension(:,:), intent(in) :: node_elem
|
||||||
|
|
||||||
|
integer :: i, j, k, n
|
||||||
|
|
||||||
|
n = size(node_elem,2)
|
||||||
|
node_cell(:,1:n) = node_elem
|
||||||
|
|
||||||
|
do i = 1, size(cellNodeDefinition,1)
|
||||||
|
do j = 1, size(cellNodeDefinition(i)%parents,1)
|
||||||
|
n = n+1
|
||||||
|
node_cell(:,n) = 0.0_pReal
|
||||||
|
do k = 1, size(cellNodeDefinition(i)%parents,2)
|
||||||
|
node_cell(:,n) = node_cell(:,n) &
|
||||||
|
+ node_cell(:,definition(i)%parents(j,k)) * real(definition(i)%weights(j,k),pReal)
|
||||||
|
enddo
|
||||||
|
node_cell(:,n) = node_cell(:,n)/real(sum(definition(i)%weights(j,:)),pReal)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end subroutine buildCellNodes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Gives the FE to CP ID mapping by binary search through lookup array
|
!> @brief Gives the FE to CP ID mapping by binary search through lookup array
|
||||||
!! valid questions (what) are 'elem', 'node'
|
!! valid questions (what) are 'elem', 'node'
|
||||||
|
|
Loading…
Reference in New Issue