apply_surface_model_charge_relaxation Subroutine

public subroutine apply_surface_model_charge_relaxation(mesh, softening, external_e, field_bc_mode)

表面モデルに応じて、電荷堆積後の要素電荷を緩和する。 conductor は mesh_id ごとの浮遊導体として、総電荷を保存しながら等電位化する。

Arguments

Type IntentOptional Attributes Name
type(mesh_type), intent(inout) :: mesh
real(kind=dp), intent(in) :: softening
real(kind=dp), intent(in) :: external_e(3)
character(len=*), intent(in), optional :: field_bc_mode

Calls

proc~~apply_surface_model_charge_relaxation~~CallsGraph proc~apply_surface_model_charge_relaxation apply_surface_model_charge_relaxation proc~lower_ascii lower_ascii proc~apply_surface_model_charge_relaxation->proc~lower_ascii

Source Code

  subroutine apply_surface_model_charge_relaxation(mesh, softening, external_e, field_bc_mode)
    type(mesh_type), intent(inout) :: mesh
    real(dp), intent(in) :: softening
    real(dp), intent(in) :: external_e(3)
    character(len=*), intent(in), optional :: field_bc_mode

    integer(i32), allocatable :: conductor_elems(:), conductor_mesh_ids(:), elem_group(:)
    integer(i32) :: ncond, ngroup

    if (.not. allocated(mesh%elem_surface_model)) return
    ncond = int(count(mesh%elem_surface_model == surface_model_conductor), kind=i32)
    if (ncond <= 0_i32) return
    call validate_conductor_field_bc(field_bc_mode)

    allocate (conductor_elems(ncond), elem_group(ncond), conductor_mesh_ids(ncond))
    call collect_conductor_elements(mesh, conductor_elems, conductor_mesh_ids, elem_group, ngroup)
    call solve_floating_conductor_charges(mesh, softening, external_e, conductor_elems, elem_group, ngroup)
  end subroutine apply_surface_model_charge_relaxation