write_particle_output Subroutine

public subroutine write_particle_output()

Uses

  • proc~~write_particle_output~~UsesGraph proc~write_particle_output write_particle_output module~mod_global_parameters mod_global_parameters proc~write_particle_output->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

None

Calls

proc~~write_particle_output~~CallsGraph proc~write_particle_output write_particle_output proc~output_ensemble output_ensemble proc~write_particle_output->proc~output_ensemble proc~output_individual output_individual proc~write_particle_output->proc~output_individual mpi_allgather mpi_allgather proc~output_ensemble->mpi_allgather proc~mpi_recv_wrapper mpi_recv_wrapper proc~output_ensemble->proc~mpi_recv_wrapper proc~mpi_send_wrapper mpi_send_wrapper proc~output_ensemble->proc~mpi_send_wrapper proc~output_particle output_particle proc~output_ensemble->proc~output_particle proc~output_individual->proc~output_particle mpi_recv mpi_recv proc~mpi_recv_wrapper->mpi_recv mpi_send mpi_send proc~mpi_send_wrapper->mpi_send proc~partcoord_to_cartesian partcoord_to_cartesian proc~output_particle->proc~partcoord_to_cartesian

Called by

proc~~write_particle_output~~CalledByGraph proc~write_particle_output write_particle_output proc~handle_particles handle_particles proc~handle_particles->proc~write_particle_output proc~advance advance proc~advance->proc~handle_particles proc~main main proc~main->proc~handle_particles proc~timeintegration timeintegration proc~main->proc~timeintegration proc~timeintegration->proc~advance program~agile agile program~agile->proc~main

Source Code

  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