[[particles.species]] の1要素を粒子種設定へ適用する。
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(particle_species_spec), | intent(inout) | :: | spec | |||
| type(toml_table), | intent(inout) | :: | table | |||
| type(particle_authoring_spec), | intent(inout) | :: | auth |
subroutine apply_particles_species_toml_table(spec, table, auth) type(particle_species_spec), intent(inout) :: spec type(toml_table), intent(inout) :: table type(particle_authoring_spec), intent(inout) :: auth type(toml_key), allocatable :: keys(:) integer :: ikey character(len=:), allocatable :: k call table%get_keys(keys) do ikey = 1, size(keys) k = lower_ascii(trim(keys(ikey)%key)) select case (trim(k)) case ('enabled') call get_toml_logical(table, keys(ikey), spec%enabled, 'particles.species.enabled') case ('npcls_per_step') call get_toml_int(table, keys(ikey), spec%npcls_per_step, 'particles.species.npcls_per_step') spec%has_npcls_per_step = .true. case ('source_mode') call get_toml_string(table, keys(ikey), spec%source_mode, 'particles.species.source_mode') spec%source_mode = lower_ascii(trim(spec%source_mode)) case ('number_density_cm3') call get_toml_real(table, keys(ikey), spec%number_density_cm3, 'particles.species.number_density_cm3') spec%has_number_density_cm3 = .true. case ('number_density_m3') call get_toml_real(table, keys(ikey), spec%number_density_m3, 'particles.species.number_density_m3') spec%has_number_density_m3 = .true. case ('q_particle') call get_toml_real(table, keys(ikey), spec%q_particle, 'particles.species.q_particle') case ('m_particle') call get_toml_real(table, keys(ikey), spec%m_particle, 'particles.species.m_particle') case ('w_particle') call get_toml_real(table, keys(ikey), spec%w_particle, 'particles.species.w_particle') spec%has_w_particle = .true. case ('target_macro_particles_per_batch') call get_toml_int( & table, keys(ikey), spec%target_macro_particles_per_batch, & 'particles.species.target_macro_particles_per_batch' & ) spec%has_target_macro_particles_per_batch = .true. case ('pos_low') call get_toml_real3(table, keys(ikey), spec%pos_low, 'particles.species.pos_low') auth%has_pos_low = .true. case ('pos_high') call get_toml_real3(table, keys(ikey), spec%pos_high, 'particles.species.pos_high') auth%has_pos_high = .true. case ('velocity_distribution') call get_toml_string(table, keys(ikey), spec%velocity_distribution, 'particles.species.velocity_distribution') spec%velocity_distribution = lower_ascii(trim(spec%velocity_distribution)) case ('velocity_grid_path') call get_toml_string(table, keys(ikey), spec%velocity_grid_path, 'particles.species.velocity_grid_path') case ('velocity_grid_pdf_kind') call get_toml_string(table, keys(ikey), spec%velocity_grid_pdf_kind, 'particles.species.velocity_grid_pdf_kind') spec%velocity_grid_pdf_kind = lower_ascii(trim(spec%velocity_grid_pdf_kind)) case ('velocity_grid_sampling') call get_toml_string(table, keys(ikey), spec%velocity_grid_sampling, 'particles.species.velocity_grid_sampling') spec%velocity_grid_sampling = lower_ascii(trim(spec%velocity_grid_sampling)) case ('particle_flux_m2_s') call get_toml_real(table, keys(ikey), spec%particle_flux_m2_s, 'particles.species.particle_flux_m2_s') spec%has_particle_flux_m2_s = .true. case ('current_density_a_m2') call get_toml_real(table, keys(ikey), spec%current_density_a_m2, 'particles.species.current_density_a_m2') spec%has_current_density_a_m2 = .true. case ('drift_velocity') call get_toml_real3(table, keys(ikey), spec%drift_velocity, 'particles.species.drift_velocity') case ('temperature_k') call get_toml_real(table, keys(ikey), spec%temperature_k, 'particles.species.temperature_k') spec%has_temperature_k = .true. case ('temperature_ev') call get_toml_real(table, keys(ikey), spec%temperature_ev, 'particles.species.temperature_ev') spec%has_temperature_ev = .true. case ('emit_current_density_a_m2') call get_toml_real(table, keys(ikey), spec%emit_current_density_a_m2, 'particles.species.emit_current_density_a_m2') case ('rays_per_batch') call get_toml_int(table, keys(ikey), spec%rays_per_batch, 'particles.species.rays_per_batch') case ('deposit_opposite_charge_on_emit') call get_toml_logical( & table, keys(ikey), spec%deposit_opposite_charge_on_emit, & 'particles.species.deposit_opposite_charge_on_emit' & ) spec%has_deposit_opposite_charge_on_emit = .true. case ('photo_escape_model') call get_toml_string(table, keys(ikey), spec%photo_escape_model, 'particles.species.photo_escape_model') spec%photo_escape_model = lower_ascii(trim(spec%photo_escape_model)) spec%has_photo_escape_model = .true. case ('normal_drift_speed') call get_toml_real(table, keys(ikey), spec%normal_drift_speed, 'particles.species.normal_drift_speed') case ('ray_direction') call get_toml_real3(table, keys(ikey), spec%ray_direction, 'particles.species.ray_direction') spec%has_ray_direction = .true. case ('inject_face') call get_toml_string(table, keys(ikey), spec%inject_face, 'particles.species.inject_face') spec%inject_face = lower_ascii(trim(spec%inject_face)) case ('inject_region_mode') call get_toml_string(table, keys(ikey), auth%inject_region_mode, 'particles.species.inject_region_mode') auth%inject_region_mode = lower_ascii(trim(auth%inject_region_mode)) auth%has_inject_region_mode = .true. case ('uv_low') call get_toml_real2(table, keys(ikey), auth%uv_low, 'particles.species.uv_low') auth%has_uv_low = .true. case ('uv_high') call get_toml_real2(table, keys(ikey), auth%uv_high, 'particles.species.uv_high') auth%has_uv_high = .true. case default error stop 'Unknown key in [[particles.species]]: '//trim(keys(ikey)%key) end select end do end subroutine apply_particles_species_toml_table