bem_surface_current_model Module

外部モデルから species 別の固定表面電流を解決する。


Uses

  • module~~bem_surface_current_model~~UsesGraph module~bem_surface_current_model bem_surface_current_model ieee_arithmetic ieee_arithmetic module~bem_surface_current_model->ieee_arithmetic module~bem_app_config_types bem_app_config_types module~bem_surface_current_model->module~bem_app_config_types module~bem_config_helpers bem_config_helpers module~bem_surface_current_model->module~bem_config_helpers module~bem_constants bem_constants module~bem_surface_current_model->module~bem_constants module~bem_irradiation_cell_contract bem_irradiation_cell_contract module~bem_surface_current_model->module~bem_irradiation_cell_contract module~bem_kinds bem_kinds module~bem_surface_current_model->module~bem_kinds module~bem_outflow_spectrum bem_outflow_spectrum module~bem_surface_current_model->module~bem_outflow_spectrum module~bem_string_utils bem_string_utils module~bem_surface_current_model->module~bem_string_utils module~bem_surface_closure_contract bem_surface_closure_contract module~bem_surface_current_model->module~bem_surface_closure_contract sheath_model sheath_model module~bem_surface_current_model->sheath_model module~bem_app_config_types->module~bem_kinds module~bem_external_boundary_contract bem_external_boundary_contract module~bem_app_config_types->module~bem_external_boundary_contract module~bem_filesystem bem_filesystem module~bem_app_config_types->module~bem_filesystem module~bem_physics_config_types bem_physics_config_types module~bem_app_config_types->module~bem_physics_config_types module~bem_types bem_types module~bem_app_config_types->module~bem_types module~bem_config_helpers->module~bem_app_config_types module~bem_config_helpers->module~bem_kinds module~bem_config_helpers->module~bem_string_utils module~bem_config_helpers->module~bem_types module~bem_constants->module~bem_kinds module~bem_irradiation_cell_contract->module~bem_app_config_types module~bem_irradiation_cell_contract->module~bem_kinds module~bem_irradiation_cell_contract->module~bem_string_utils module~bem_irradiation_cell_contract->module~bem_types iso_fortran_env iso_fortran_env module~bem_kinds->iso_fortran_env module~bem_outflow_spectrum->module~bem_kinds module~bem_outflow_spectrum->sheath_model module~bem_surface_closure_contract->module~bem_kinds module~bem_runtime_modes bem_runtime_modes module~bem_surface_closure_contract->module~bem_runtime_modes module~bem_external_boundary_contract->module~bem_kinds module~bem_external_boundary_contract->module~bem_string_utils iso_c_binding iso_c_binding module~bem_filesystem->iso_c_binding module~bem_physics_config_types->ieee_arithmetic module~bem_physics_config_types->module~bem_kinds module~bem_physics_config_types->module~bem_string_utils module~bem_physics_config_types->module~bem_types module~bem_runtime_modes->module~bem_kinds module~bem_runtime_modes->module~bem_string_utils module~bem_types->module~bem_kinds module~bem_types->module~bem_outflow_spectrum

Used by

  • module~~bem_surface_current_model~~UsedByGraph module~bem_surface_current_model bem_surface_current_model module~bem_output_writer bem_output_writer module~bem_output_writer->module~bem_surface_current_model module~bem_output_writer_summary bem_output_writer_summary module~bem_output_writer_summary->module~bem_surface_current_model module~bem_output_writer_summary->module~bem_output_writer module~bem_simulator bem_simulator module~bem_simulator->module~bem_surface_current_model module~bem_simulator->module~bem_output_writer module~bem_run_outputs bem_run_outputs module~bem_simulator->module~bem_run_outputs module~bem_zhao_outflow_refresh bem_zhao_outflow_refresh module~bem_zhao_outflow_refresh->module~bem_surface_current_model module~bem_output_writer_files bem_output_writer_files module~bem_output_writer_files->module~bem_output_writer module~bem_output_writer_history bem_output_writer_history module~bem_output_writer_history->module~bem_output_writer module~bem_periodic_checkpoint bem_periodic_checkpoint module~bem_periodic_checkpoint->module~bem_output_writer module~bem_run_outputs->module~bem_output_writer module~bem_run_outputs->module~bem_periodic_checkpoint module~bem_simulator_charge bem_simulator_charge module~bem_simulator_charge->module~bem_simulator module~bem_simulator_io bem_simulator_io module~bem_simulator_io->module~bem_output_writer module~bem_simulator_io->module~bem_simulator module~bem_simulator_loop bem_simulator_loop module~bem_simulator_loop->module~bem_output_writer module~bem_simulator_loop->module~bem_simulator module~bem_simulator_loop->module~bem_zhao_outflow_refresh module~bem_simulator_loop->module~bem_periodic_checkpoint module~bem_simulator_loop->module~bem_run_outputs module~bem_simulator_particles bem_simulator_particles module~bem_simulator_particles->module~bem_simulator module~bem_simulator_stats bem_simulator_stats module~bem_simulator_stats->module~bem_simulator program~main main program~main->module~bem_output_writer program~main->module~bem_simulator program~main->module~bem_periodic_checkpoint program~main->module~bem_run_outputs

Derived Types

Components

Type Visibility Attributes Name Initial
logical, public :: active = .false.
logical, public, allocatable :: has_absorbed_target(:)
logical, public, allocatable :: has_emission_target(:)
logical, public, allocatable :: has_escape_target(:)
logical, public, allocatable :: has_inflow_kinetic_map(:)
logical, public, allocatable :: has_outflow_kinetic_barrier(:)
logical, public, allocatable :: has_inflow_number_flux(:)
real(kind=dp), public, allocatable :: absorbed_current_a(:)
real(kind=dp), public, allocatable :: emission_current_a(:)
real(kind=dp), public, allocatable :: escaped_particle_current_a(:)
real(kind=dp), public, allocatable :: inflow_reservoir_potential_v(:)
real(kind=dp), public, allocatable :: inflow_access_potential_v(:)
real(kind=dp), public, allocatable :: inflow_reservoir_density_m3(:)

流入写像の0 V貯留部にあるMaxwellianの密度。0以下ならspecies設定の密度を使う。

integer(kind=i32), public, allocatable :: inflow_kinetic_face(:)
real(kind=dp), public, allocatable :: outflow_barrier_potential_v(:)
integer(kind=i32), public, allocatable :: outflow_barrier_face(:)
real(kind=dp), public, allocatable :: inflow_number_flux_m2_s(:)
integer(kind=i32), public, allocatable :: escape_partner_species(:)

この species の脱出・帰還目標から、そのバッチで追跡した脱出電荷を差し引く species(0 なら無し)。 外部根の脱出束が複数の放出電子種の合算なら、追跡した側に充てた残りをこの species の目標にする。

logical, public, allocatable :: emission_target_from_tracked_source(:)

放出目標が、根が予測した放出ではなく、根に与えた外側源(追跡した放出の窓平均)である種(PE なしの SEE)。 raw channel が空のバッチでも止まらず、帰還目標は放出へ畳み、放出がなければ根の脱出分を未閉として記録する。

integer(kind=i32), public, allocatable :: reflected_electron_species(:)

この species の脱出・帰還・放出目標から差し引く、セル内で反射して H を抜けた上流電子の species(0 なら無し)。 外部根の源に反射電子を含めると根の脱出・帰還は放出電子と反射電子の合算なので、追跡で決まる反射分を先に充て、 残りをこの species に固定する。

logical, public, allocatable :: absorbed_target_credits_tracked_escape(:)

吸収目標に、この species 自身が外部障壁を越えて脱出した追跡電荷を足し戻す(反射して出た上流電子は壁に届かない)。

logical, public :: has_plane_gauge = .false.

照射セル契約の壁面の平均電位を外部シース解の壁電位へ固定する場合だけ有効。

real(kind=dp), public :: plane_gauge_potential_v = 0.0_dp
real(kind=dp), public :: top_field_v_m = 0.0_dp
logical, public :: outer_return_cell_uniform = .false.

外部障壁で戻る粒子を周期セル内の一様な位置へ戻す。

character(len=32), public :: model = 'none'
character(len=1), public :: zhao_branch = ' '
integer(kind=i32), public :: electron_species_idx = 0_i32
integer(kind=i32), public :: ion_species_idx = 0_i32
integer(kind=i32), public :: photoelectron_species_idx = 0_i32
logical, public :: photoelectron_active = .false.
integer(kind=i32), public :: secondary_electron_species_idx = 0_i32
real(kind=dp), public :: reference_area_m2 = 0.0_dp
real(kind=dp), public :: phi0_v = 0.0_dp
real(kind=dp), public :: phi_m_v = 0.0_dp
real(kind=dp), public :: upstream_negative_band_v = 0.0_dp

上流に接する E^2<0 の電位幅 [V] と、その内側の場の不足 sqrt(-min E^2) [V/m]。 電子drift時に許容幅または場の下限で受理したA/C根だけが非ゼロ。

real(kind=dp), public :: upstream_field_deficit_v_m = 0.0_dp
real(kind=dp), public :: ambient_electron_density_m3 = 0.0_dp
real(kind=dp), public :: electron_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: ion_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: photoelectron_emission_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: photoelectron_escape_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: photoelectron_return_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: net_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: photoelectron_budget_residual_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: surface_budget_residual_current_density_a_m2 = 0.0_dp
real(kind=dp), public :: outer_photoelectron_flux_m2_s = 0.0_dp

外部Zhaoシースが壁放出として見るPE束 [1/(m2 s)] と平均法線エネルギー [eV]。

real(kind=dp), public :: outer_photoelectron_mean_energy_ev = 0.0_dp
real(kind=dp), public :: outer_photoelectron_spectrum_m2_s(outflow_spectrum_bins) = 0.0_dp

外部源に使ったH外向きスペクトル [1/(m2 s)]、bin別。全て0は表面放出の半Maxwell源。

character(len=32), public :: kinetic_contract = 'none'

Subroutines

public subroutine evaluate_surface_closure(app, contract, cell)

モデル固有の診断値をシミュレータへ漏らさず、境界契約だけを返す。

Arguments

Type IntentOptional Attributes Name
type(app_config), intent(in) :: app
type(surface_closure_contract_type), intent(out) :: contract
type(irradiation_cell_contract_type), intent(in), optional :: cell

public subroutine evaluate_surface_current_model(app, result, cell, outer)

設定されたmodelをdispatchし、固定電流closure用のtarget配列を返す。 zhao_stationary で outer を渡すと、後の更新に使う外部解を返す。

Arguments

Type IntentOptional Attributes Name
type(app_config), intent(in) :: app
type(surface_current_model_result_type), intent(out) :: result
type(irradiation_cell_contract_type), intent(in), optional :: cell
type(sheath_matching_iteration), intent(out), optional :: outer

public subroutine solve_zhao_outflow_closure(app, outer_flux_m2_s, outer_mean_energy_ev, preferred_branch, result, success, message, outer_spectrum_m2_s, cell, outer)

表面放出はそのままに、matching planeで観測したPE流出を外部Zhaoシースの放出源として零電流根を解き直す。

Read more…

Arguments

Type IntentOptional Attributes Name
type(app_config), intent(in) :: app
real(kind=dp), intent(in) :: outer_flux_m2_s
real(kind=dp), intent(in) :: outer_mean_energy_ev
character(len=1), intent(in) :: preferred_branch
type(surface_current_model_result_type), intent(out) :: result
logical, intent(out) :: success
character(len=*), intent(out) :: message
real(kind=dp), intent(in), optional :: outer_spectrum_m2_s(outflow_spectrum_bins)

H外向きスペクトル [1/(m2 s)]、bin別。省略時は束と平均法線エネルギーの半Maxwell源とする。

type(irradiation_cell_contract_type), intent(in), optional :: cell
type(sheath_matching_iteration), intent(out), optional :: outer

public subroutine refresh_zhao_outflow_closure(app, outer, outer_flux_m2_s, outer_mean_energy_ev, outer_spectrum_m2_s, cell, result, success, message)

外部解を観測したH外向き流出で更新する。前回の根を初期値にし、同じbranchを先に試す。 根が解けないか、解けた根の closure を棄却したときは outer を前回のまま残し、success=.false. を返す。 呼出し側はこのとき前回の closure を使い続けるので、外部根もそれと揃えておく。

Arguments

Type IntentOptional Attributes Name
type(app_config), intent(in) :: app
type(sheath_matching_iteration), intent(inout) :: outer
real(kind=dp), intent(in) :: outer_flux_m2_s
real(kind=dp), intent(in) :: outer_mean_energy_ev
real(kind=dp), intent(in) :: outer_spectrum_m2_s(outflow_spectrum_bins)
type(irradiation_cell_contract_type), intent(in) :: cell
type(surface_current_model_result_type), intent(out) :: result
logical, intent(out) :: success
character(len=*), intent(out) :: message