write_macro_residuals_file Subroutine

public subroutine write_macro_residuals_file(out_dir, state, mpi_rank, mpi_size, mpi)

マクロ粒子残差を macro_residuals.csv として保存する。

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: out_dir

出力ディレクトリ。

type(injection_state), intent(in) :: state

種別ごとのマクロ粒子残差を保持した注入状態。

integer(kind=i32), intent(in), optional :: mpi_rank
integer(kind=i32), intent(in), optional :: mpi_size
type(mpi_context), intent(in), optional :: mpi

Calls

proc~~write_macro_residuals_file~~CallsGraph proc~write_macro_residuals_file write_macro_residuals_file proc~mpi_get_rank_size mpi_get_rank_size proc~write_macro_residuals_file->proc~mpi_get_rank_size proc~restart_macro_residual_path restart_macro_residual_path proc~write_macro_residuals_file->proc~restart_macro_residual_path proc~restart_macro_residual_path->proc~mpi_get_rank_size

Called by

proc~~write_macro_residuals_file~~CalledByGraph proc~write_macro_residuals_file write_macro_residuals_file program~main main program~main->proc~write_macro_residuals_file

Source Code

  subroutine write_macro_residuals_file(out_dir, state, mpi_rank, mpi_size, mpi)
    character(len=*), intent(in) :: out_dir
    type(injection_state), intent(in) :: state
    integer(i32), intent(in), optional :: mpi_rank, mpi_size
    type(mpi_context), intent(in), optional :: mpi

    character(len=1024) :: path
    integer :: u, ios, i
    integer(i32) :: local_rank, world_size

    if (.not. allocated(state%macro_residual)) return

    call resolve_parallel_rank_size(local_rank, world_size, mpi_rank, mpi_size, mpi, 'write_macro_residuals_file')

    path = restart_macro_residual_path(trim(out_dir), mpi_rank=local_rank, mpi_size=world_size)
    open (newunit=u, file=trim(path), status='replace', action='write', iostat=ios)
    if (ios /= 0) error stop 'Failed to open macro_residuals.csv.'

    write (u, '(a)') 'species_idx,residual'
    do i = 1, size(state%macro_residual)
      write (u, '(i0,a,es24.16)') i, ',', state%macro_residual(i)
    end do
    close (u)
  end subroutine write_macro_residuals_file