Routine creates subTree for each tracking object and removes tracking objects on process which do not include any elements to track
Identify, how many and which elements exist on my local process and are requested from the trackers Empty tracking entities are removed, so the track(:) might be re-allocated
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_type), | intent(inout) | :: | me |
tracking entities |
||
type(treelmesh_type), | intent(in) | :: | tree |
Global mesh from which the elements are identified and then stored to sub-meshes inside the trackers |
||
type(tem_solveHead_type), | intent(in) | :: | solver |
Global solver information |
||
type(tem_BC_prop_type), | intent(in) | :: | bc_prop |
bc property that used to identify elements of certain BCs |
||
type(tem_stencilHeader_type), | intent(in), | optional | :: | stencil |
stencil used to create subTree of boundary type |
|
character(len=labelLen), | intent(in), | optional | :: | prefix |
Prefix for output filename Usually: solver%simName |
subroutine tem_init_tracker_subTree( me, tree, solver, bc_prop, stencil, & & prefix ) ! -------------------------------------------------------------------- ! !> tracking entities type(tem_tracking_type), intent(inout) :: me !> Global mesh from which the elements are identified and then stored to !! sub-meshes inside the trackers type(treelmesh_type), intent(in) :: tree !> bc property that used to identify elements of certain BCs type( tem_bc_prop_type ), intent(in) :: bc_prop !> Global solver information type(tem_solveHead_type), intent(in) :: solver !> stencil used to create subTree of boundary type type(tem_stencilHeader_type), optional, intent(in) :: stencil !> Prefix for output filename !! Usually: solver%simName character(len=labelLen), optional, intent(in) :: prefix ! -------------------------------------------------------------------- ! integer :: iLog, nActive ! temporary tracker array type( tem_tracking_instance_type ), allocatable :: tempTrack(:) ! prefix for tracking label character(len=pathLen) :: prefix_loc ! tracking%config%prefix//tracking%config%label character(len=pathLen) :: basename ! -------------------------------------------------------------------- ! call tem_horizontalSpacer(fUnit=logUnit(1)) write(logUnit(3),*) 'Initialize tracking subTree to remove empty objects' call tem_horizontalSpacer(fUnit=logUnit(1)) nActive = 0 if (present(prefix)) then prefix_loc = trim(prefix) else ! prefix for tracking label prefix_loc = trim(solver%simName)//'_' end if if( me%control%active ) then ! Allocate the temporary track allocate(tempTrack( me%control%nDefined ) ) do iLog = 1, me%control%nDefined basename = trim(me%config(iLog)%prefix) // trim(prefix_loc) // & & trim(me%config(iLog)%label) write(logUnit(3),*) 'Creating subTree for tracking object ' & & // trim( me%config(iLog)%label ) !----------------------------------------------------------------------- ! identify tracker elements !----------------------------------------------------------------------- call tem_create_subTree_of( inTree = tree, & & bc_prop = bc_prop, & & stencil = stencil, & & subTree = me%instance(iLog)%subTree, & & inShape = me%config(iLog)%geometry, & & storePnts = me%config(iLog) & & %output_config%useGetPoint, & & prefix = trim(basename) ) ! get rid of the empty track in order to avoid empty writes to disk if ( me%instance(iLog)%subTree%useGlobalMesh .or. & & ( me%instance(iLog)%subTree%nElems > 0 ) .or. & & ( me%instance(iLog)%subTree%nPoints > 0) ) then nActive = nActive + 1 tempTrack( nActive ) = me%instance(iLog) ! Pointer to array of tracking headers loaded from config file tempTrack( nActive )%pntConfig = iLog end if end do ! nActive deallocate(me%instance) allocate( me%instance(nActive) ) me%control%nActive = nActive do iLog = 1, nActive ! Copy the stuff from the temporary track me%instance(iLog) = temptrack(iLog) end do deallocate(temptrack) end if ! if tracking active end subroutine tem_init_tracker_subTree