evaluate_surface_current_model Subroutine

public subroutine evaluate_surface_current_model(app, result)

設定されたmodelをdispatchし、固定電流closure用のtarget配列を返す。

Arguments

Type IntentOptional Attributes Name
type(app_config), intent(in) :: app
type(surface_current_model_result_type), intent(out) :: result

Calls

proc~~evaluate_surface_current_model~~CallsGraph proc~evaluate_surface_current_model evaluate_surface_current_model proc~build_zhao_params build_zhao_params proc~evaluate_surface_current_model->proc~build_zhao_params proc~lower_ascii lower_ascii proc~evaluate_surface_current_model->proc~lower_ascii proc~species_number_density_m3~2 species_number_density_m3 proc~evaluate_surface_current_model->proc~species_number_density_m3~2 proc~species_temperature_k~2 species_temperature_k proc~evaluate_surface_current_model->proc~species_temperature_k~2 proc~swe_free_current_term swe_free_current_term proc~evaluate_surface_current_model->proc~swe_free_current_term proc~try_solve_zhao_unknowns try_solve_zhao_unknowns proc~evaluate_surface_current_model->proc~try_solve_zhao_unknowns proc~try_solve_zhao_branch_a try_solve_zhao_branch_a proc~try_solve_zhao_unknowns->proc~try_solve_zhao_branch_a proc~try_solve_zhao_branch_b try_solve_zhao_branch_b proc~try_solve_zhao_unknowns->proc~try_solve_zhao_branch_b proc~try_solve_zhao_branch_c try_solve_zhao_branch_c proc~try_solve_zhao_unknowns->proc~try_solve_zhao_branch_c proc~solve_nonlinear_system solve_nonlinear_system proc~try_solve_zhao_branch_a->proc~solve_nonlinear_system proc~try_solve_zhao_branch_b->proc~solve_nonlinear_system proc~try_solve_zhao_monotonic_scalar try_solve_zhao_monotonic_scalar proc~try_solve_zhao_branch_b->proc~try_solve_zhao_monotonic_scalar proc~try_solve_zhao_branch_c->proc~solve_nonlinear_system proc~try_solve_zhao_branch_c->proc~try_solve_zhao_monotonic_scalar proc~try_newton_solve try_newton_solve proc~solve_nonlinear_system->proc~try_newton_solve proc~evaluate_monotonic_stationary_phi evaluate_monotonic_stationary_phi proc~try_solve_zhao_monotonic_scalar->proc~evaluate_monotonic_stationary_phi proc~residual_norm residual_norm proc~try_solve_zhao_monotonic_scalar->proc~residual_norm proc~zhao_residuals_type_b zhao_residuals_type_b proc~try_solve_zhao_monotonic_scalar->proc~zhao_residuals_type_b proc~zhao_residuals_type_c zhao_residuals_type_c proc~try_solve_zhao_monotonic_scalar->proc~zhao_residuals_type_c proc~evaluate_monotonic_stationary_phi->proc~swe_free_current_term proc~evaluate_monotonic_stationary_phi->proc~zhao_residuals_type_b proc~evaluate_monotonic_stationary_phi->proc~zhao_residuals_type_c proc~try_newton_solve->proc~residual_norm proc~numerical_jacobian numerical_jacobian proc~try_newton_solve->proc~numerical_jacobian proc~solve_small_linear_system solve_small_linear_system proc~try_newton_solve->proc~solve_small_linear_system proc~zhao_residuals_type_b->proc~swe_free_current_term proc~zhao_residuals_type_c->proc~swe_free_current_term

Called by

proc~~evaluate_surface_current_model~~CalledByGraph proc~evaluate_surface_current_model evaluate_surface_current_model proc~evaluate_surface_closure evaluate_surface_closure proc~evaluate_surface_closure->proc~evaluate_surface_current_model

Source Code

  subroutine evaluate_surface_current_model(app, result)
    type(app_config), intent(in) :: app
    type(surface_current_model_result_type), intent(out) :: result

    allocate ( &
      result%has_absorbed_target(app%n_particle_species), &
      result%has_emission_target(app%n_particle_species), &
      result%has_escape_target(app%n_particle_species), &
      result%has_inflow_kinetic_map(app%n_particle_species), &
      result%has_outflow_kinetic_barrier(app%n_particle_species), &
      result%has_inflow_number_flux(app%n_particle_species), &
      result%absorbed_current_a(app%n_particle_species), &
      result%emission_current_a(app%n_particle_species), &
      result%escaped_particle_current_a(app%n_particle_species), &
      result%inflow_reservoir_potential_v(app%n_particle_species), &
      result%inflow_access_potential_v(app%n_particle_species), &
      result%inflow_kinetic_face(app%n_particle_species), &
      result%outflow_barrier_potential_v(app%n_particle_species), &
      result%outflow_barrier_face(app%n_particle_species), &
      result%inflow_number_flux_m2_s(app%n_particle_species) &
      )
    result%has_absorbed_target = .false.
    result%has_emission_target = .false.
    result%has_escape_target = .false.
    result%has_inflow_kinetic_map = .false.
    result%has_outflow_kinetic_barrier = .false.
    result%has_inflow_number_flux = .false.
    result%absorbed_current_a = 0.0_dp
    result%emission_current_a = 0.0_dp
    result%escaped_particle_current_a = 0.0_dp
    result%inflow_reservoir_potential_v = 0.0_dp
    result%inflow_access_potential_v = 0.0_dp
    result%inflow_kinetic_face = 0_i32
    result%outflow_barrier_potential_v = 0.0_dp
    result%outflow_barrier_face = 0_i32
    result%inflow_number_flux_m2_s = 0.0_dp
    result%model = trim(lower_ascii(app%surface_current%model))

    select case (trim(result%model))
    case ('none')
      return
    case ('zhao_stationary')
      call evaluate_zhao_stationary_current(app, result)
    case ('matching_plane_quasistatic')
      ! Batch-local response evaluation is owned by the simulator fixed point.
      ! Keep this static dispatch side-effect free for output/config callers.
      result%active = .true.
      result%kinetic_contract = 'matching_plane_v1'
    case default
      error stop 'Unknown surface current model dispatch.'
    end select
  end subroutine evaluate_surface_current_model