apply_particles_species_kv Subroutine

public subroutine apply_particles_species_kv(spec, line)

[[particles.species]] のキーを粒子種設定へ適用する。

Arguments

Type IntentOptional Attributes Name
type(particle_species_spec), intent(inout) :: spec

更新対象の粒子種設定。

character(len=*), intent(in) :: line

key = value 形式の設定行。


Calls

proc~~apply_particles_species_kv~~CallsGraph proc~apply_particles_species_kv apply_particles_species_kv interface~parse_int parse_int proc~apply_particles_species_kv->interface~parse_int interface~parse_logical parse_logical proc~apply_particles_species_kv->interface~parse_logical interface~parse_real parse_real proc~apply_particles_species_kv->interface~parse_real interface~parse_real3 parse_real3 proc~apply_particles_species_kv->interface~parse_real3 interface~parse_string parse_string proc~apply_particles_species_kv->interface~parse_string interface~split_key_value split_key_value proc~apply_particles_species_kv->interface~split_key_value proc~lower_ascii lower_ascii proc~apply_particles_species_kv->proc~lower_ascii

Called by

proc~~apply_particles_species_kv~~CalledByGraph proc~apply_particles_species_kv apply_particles_species_kv proc~load_toml_config load_toml_config proc~load_toml_config->proc~apply_particles_species_kv 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 apply_particles_species_kv(spec, line)
    type(particle_species_spec), intent(inout) :: spec
    character(len=*), intent(in) :: line
    character(len=64) :: k
    character(len=256) :: v

    call split_key_value(line, k, v)
    select case (trim(k))
    case ('enabled')
      call parse_logical(v, spec%enabled)
    case ('npcls_per_step')
      call parse_int(v, spec%npcls_per_step)
      spec%has_npcls_per_step = .true.
    case ('source_mode')
      call parse_string(v, spec%source_mode)
      spec%source_mode = lower_ascii(trim(spec%source_mode))
    case ('number_density_cm3')
      call parse_real(v, spec%number_density_cm3)
      spec%has_number_density_cm3 = .true.
    case ('number_density_m3')
      call parse_real(v, spec%number_density_m3)
      spec%has_number_density_m3 = .true.
    case ('q_particle')
      call parse_real(v, spec%q_particle)
    case ('m_particle')
      call parse_real(v, spec%m_particle)
    case ('w_particle')
      call parse_real(v, spec%w_particle)
      spec%has_w_particle = .true.
    case ('target_macro_particles_per_batch')
      call parse_int(v, spec%target_macro_particles_per_batch)
      spec%has_target_macro_particles_per_batch = .true.
    case ('pos_low')
      call parse_real3(v, spec%pos_low)
    case ('pos_high')
      call parse_real3(v, spec%pos_high)
    case ('drift_velocity')
      call parse_real3(v, spec%drift_velocity)
    case ('temperature_k')
      call parse_real(v, spec%temperature_k)
      spec%has_temperature_k = .true.
    case ('temperature_ev')
      call parse_real(v, spec%temperature_ev)
      spec%has_temperature_ev = .true.
    case ('emit_current_density_a_m2')
      call parse_real(v, spec%emit_current_density_a_m2)
    case ('rays_per_batch')
      call parse_int(v, spec%rays_per_batch)
    case ('deposit_opposite_charge_on_emit')
      call parse_logical(v, spec%deposit_opposite_charge_on_emit)
      spec%has_deposit_opposite_charge_on_emit = .true.
    case ('normal_drift_speed')
      call parse_real(v, spec%normal_drift_speed)
    case ('ray_direction')
      call parse_real3(v, spec%ray_direction)
      spec%has_ray_direction = .true.
    case ('inject_face')
      call parse_string(v, spec%inject_face)
      spec%inject_face = lower_ascii(trim(spec%inject_face))
    case default
      error stop 'Unknown key in [[particles.species]]: '//trim(k)
    end select
  end subroutine apply_particles_species_kv