subroutine write_particle_output() use mod_global_parameters character(len=std_len) :: filename integer :: ipart,iipart ! type(particle_t), dimension(nparticles_per_cpu_hi) :: send_particles ! double precision, dimension(npayload,nparticles_per_cpu_hi) :: send_payload type(particle_t), allocatable, dimension(:) :: send_particles double precision, allocatable, dimension(:,:) :: send_payload integer :: send_n_particles_for_output, cc integer :: nout double precision :: tout if (write_individual) then call output_individual() end if if (write_ensemble) then send_n_particles_for_output = 0 do iipart=1,nparticles_on_mype ipart=particles_on_mype(iipart); ! have to send particle to rank zero for output if (mod(particle(ipart)%self%index,downsample_particles) .eq. 0) then send_n_particles_for_output = send_n_particles_for_output + 1 end if end do allocate(send_particles(1:send_n_particles_for_output)) allocate(send_payload(npayload,1:send_n_particles_for_output)) cc = 1 do iipart=1,nparticles_on_mype ipart=particles_on_mype(iipart); ! have to send particle to rank zero for output if (mod(particle(ipart)%self%index,downsample_particles) .eq. 0) then send_particles(cc) = particle(ipart)%self send_payload(1:npayload,cc) = particle(ipart)%payload(1:npayload) cc=cc+1 end if end do call output_ensemble(send_n_particles_for_output,send_particles,& send_payload,'ensemble') deallocate(send_particles) deallocate(send_payload) end if end subroutine write_particle_output