ensure_particle_species_capacity Subroutine

public subroutine ensure_particle_species_capacity(cfg, required_size)

[[particles.species]] の読み込み数に応じて粒子種配列容量を拡張する。

Arguments

Type IntentOptional Attributes Name
type(app_config), intent(inout) :: cfg

容量拡張対象のアプリ設定。

integer, intent(in) :: required_size

必要最小要素数。


Called by

proc~~ensure_particle_species_capacity~~CalledByGraph proc~ensure_particle_species_capacity ensure_particle_species_capacity proc~load_toml_config load_toml_config proc~load_toml_config->proc~ensure_particle_species_capacity proc~load_app_config load_app_config proc~load_app_config->proc~load_toml_config proc~load_or_init_run_state load_or_init_run_state proc~load_or_init_run_state->proc~load_app_config program~main main program~main->proc~load_or_init_run_state

Source Code

  subroutine ensure_particle_species_capacity(cfg, required_size)
    type(app_config), intent(inout) :: cfg
    integer, intent(in) :: required_size
    type(particle_species_spec), allocatable :: grown(:)
    integer :: old_capacity, new_capacity

    if (required_size <= 0) return
    if (allocated(cfg%particle_species)) then
      old_capacity = size(cfg%particle_species)
    else
      old_capacity = 0
    end if
    if (old_capacity >= required_size) return

    new_capacity = max(required_size, max(max_particle_species, max(1, 2*old_capacity)))
    allocate (grown(new_capacity))
    grown = particle_species_spec()
    if (old_capacity > 0) grown(1:old_capacity) = cfg%particle_species(1:old_capacity)
    call move_alloc(grown, cfg%particle_species)
  end subroutine ensure_particle_species_capacity