Write a spatial representation for elements into an ascii tracking file
Each time this routine is called, a new file is written Filename: {tracking_folder}{tracking_label}spatial_{timestamp}.res e.g.: tracking/lineProbe_spatial_00001_01_01378.1.res Each process writes its own files
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(hvs_asciiSpatial_type), | intent(inout) | :: | asciiSpatial |
The file description to open |
||
integer, | intent(in) | :: | varpos(:) |
Positions of the variables to write |
||
type(tem_varSys_type), | intent(in) | :: | varSys |
solver-provided variable systems |
||
real(kind=rk), | intent(in) | :: | bary(:,:) |
Barycenter of elements |
||
type(treelmesh_type), | intent(in) | :: | mesh |
Mesh to write the data on. |
||
type(tem_subTree_type), | intent(in), | optional | :: | subtree |
Optional restriction of the elements to output. |
|
type(tem_time_type), | intent(in) | :: | time |
current global time |
||
integer, | intent(in) | :: | nDofs |
The number of dofs for each scalar variable of the equation system |
subroutine hvs_asciiSpatial_dump_elem_data( asciiSpatial, varPos, varSys, &
& bary, mesh, subTree, time, nDofs )
! ---------------------------------------------------------------------------
!> The file description to open
type(hvs_asciiSpatial_type), intent(inout) :: asciiSpatial
!> solver-provided variable systems
type(tem_varSys_type), intent(in) :: varSys
!> Positions of the variables to write
integer, intent(in) :: varpos(:)
!> Barycenter of elements
real(kind=rk), intent(in) :: bary(:,:)
!> Mesh to write the data on.
type(treelmesh_type), intent(in) :: mesh
!> Optional restriction of the elements to output.
type(tem_subtree_type), optional, intent(in) :: subtree
!> current global time
type(tem_time_type ), intent(in) :: time
!> The number of dofs for each scalar variable of the equation system
integer, intent(in) :: nDofs
! ---------------------------------------------------------------------------
integer :: nVars, nElems, nScalars, elemOff, nChunkElems, elemSize
integer :: iElem, iChunk, iScalar, iDof
integer :: buf_start, buf_end
real(kind=rk), allocatable :: res(:)
integer, allocatable :: elemPos(:)
character(len=1024) :: buffer
! ---------------------------------------------------------------------------
allocate(res(io_buffer_size))
! Number of variables to dump
nVars = size(varPos)
! Number of scalars in current output
nScalars = sum(varSys%method%val(varPos(:))%nComponents)
! Size of a single element
elemsize = nScalars*nDofs
if (present(subTree)) then
nElems = subTree%nElems
else
nElems = mesh%nElems
end if
! allocate elemPos to size of chunkSize
allocate(elemPos(asciiSpatial%chunkSize))
! Process all chunks to derive the quantities defined in the tracking object
do iChunk = 1, asciiSpatial%nChunks
! Number of elements read so far in previous chunks.
elemOff = ((iChunk-1)*asciiSpatial%chunkSize)
! number of elements written to THIS chunk
nChunkElems = min(asciiSpatial%chunkSize, nElems-elemOff)
! Compute the element lower and upper bound for the current chunk
buf_start = elemOff + 1
buf_end = elemOff + nChunkElems
if (present(subTree)) then
elemPos(1:nChunkElems) = subTree%map2Global(buf_start:buf_end)
else
elemPos(1:nChunkElems) = (/ (iElem, iElem=buf_start, buf_end) /)
end if
! evaluate all variables on current chunk
call tem_get_element_chunk(varSys = varSys, &
& varPos = varPos, &
& elemPos = elemPos(1:nChunkElems), &
& time = time, &
& tree = mesh, &
& nElems = nChunkElems, &
& nDofs = nDofs, &
& res = res )
! Then gather contents into buffer, and write buffer to file
buffer = ''
do iElem = 1, nChunkElems
! write coordinates to buffer
write( buffer, '(3(1x,e24.16e3))' ) bary(elemOff+iElem, 1:3)
! append values in chuck to buffer
do iDof = 1, nDofs
do iScalar = 1, nScalars
write( buffer, '(a,1x,e24.16e3)' ) trim(buffer), &
& res( (iElem-1)*elemSize + (iDof-1)*nScalars + iScalar )
end do
end do
! write buffer to file
write ( asciiSpatial%outUnit , '(a)' ) trim(buffer)
end do !nChunkElems
end do ! iChunk
deallocate(elemPos)
deallocate(res)
end subroutine hvs_asciiSpatial_dump_elem_data