Writes a PVD collection file to allow ParaView to load time-series data.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(case_params_t), | intent(in) | :: | params | |||
| type(flow_mpi_t), | intent(in) | :: | flow | |||
| integer, | intent(in) | :: | nsteps | |||
| integer, | intent(in) | :: | output_interval | |||
| real(kind=rk), | intent(in) | :: | dt |
subroutine write_pvd_collection(params, flow, nsteps, output_interval, dt) type(case_params_t), intent(in) :: params type(flow_mpi_t), intent(in) :: flow integer, intent(in) :: nsteps integer, intent(in) :: output_interval real(rk), intent(in) :: dt integer :: unit_id integer :: step character(len=path_len + 32) :: filename character(len=64) :: vtu_name if (flow%rank /= 0 .or. .not. params%write_vtu) return filename = trim(params%output_dir)//'/flow.pvd' open(newunit=unit_id, file=trim(filename), status='replace', action='write') write(unit_id,'(a)') '<?xml version="1.0"?>' write(unit_id,'(a)') '<VTKFile type="Collection" version="0.1" byte_order="LittleEndian">' write(unit_id,'(a)') ' <Collection>' call write_dataset_line(unit_id, 0, zero) do step = output_interval, nsteps, output_interval call write_dataset_line(unit_id, step, real(step, rk) * dt) end do if (mod(nsteps, output_interval) /= 0) then call write_dataset_line(unit_id, nsteps, real(nsteps, rk) * dt) end if write(unit_id,'(a)') ' </Collection>' write(unit_id,'(a)') '</VTKFile>' close(unit_id) contains !> Appends a Dataset entry to the PVD collection file. !! !! @param unit_id The file unit for the .pvd file. !! @param step_id The current simulation time step index. !! @param time_value The simulation time at this step. subroutine write_dataset_line(unit_id, step_id, time_value) integer, intent(in) :: unit_id integer, intent(in) :: step_id real(rk), intent(in) :: time_value character(len=32) :: time_text write(vtu_name,'("flow_",i6.6,".pvtu")') step_id write(time_text,'(es16.8)') time_value time_text = adjustl(time_text) write(unit_id,'(a,a,a,a,a)') ' <DataSet timestep="', trim(time_text), & '" group="" part="0" file="', trim(vtu_name), '"/>' end subroutine write_dataset_line end subroutine write_pvd_collection