prepare_periodic_cache_and_stop Subroutine

subroutine prepare_periodic_cache_and_stop()

periodic2 の遠方補正 operator を作成(または cache から読込)して publish し、終了する。 本番 run より多い MPI rank で cold build だけを済ませる用途。target anchor が rank に分配されるので rank 数に応じて短くなる。結果ファイルや checkpoint は書かない。

Arguments

None

Calls

proc~~prepare_periodic_cache_and_stop~~CallsGraph proc~prepare_periodic_cache_and_stop prepare_periodic_cache_and_stop none~get_diagnostics electrostatic_snapshot_type%get_diagnostics proc~prepare_periodic_cache_and_stop->none~get_diagnostics none~init~6 electrostatic_snapshot_type%init proc~prepare_periodic_cache_and_stop->none~init~6 proc~derive_field_panel_config derive_field_panel_config proc~prepare_periodic_cache_and_stop->proc~derive_field_panel_config proc~mpi_is_root mpi_is_root proc~prepare_periodic_cache_and_stop->proc~mpi_is_root proc~mpi_shutdown mpi_shutdown proc~prepare_periodic_cache_and_stop->proc~mpi_shutdown proc~mpi_world_barrier mpi_world_barrier proc~prepare_periodic_cache_and_stop->proc~mpi_world_barrier proc~mpi_world_size mpi_world_size proc~prepare_periodic_cache_and_stop->proc~mpi_world_size none~build periodic_nonzero_upper_vacuum_plan_type%build none~init~6->none~build none~init~2 field_solver_type%init none~init~6->none~init~2 none~refresh~2 periodic_nonzero_upper_vacuum_plan_type%refresh none~init~6->none~refresh~2 proc~build_periodic_zero_mode_plan build_periodic_zero_mode_plan none~init~6->proc~build_periodic_zero_mode_plan proc~lower_ascii lower_ascii none~init~6->proc~lower_ascii proc~lower_boundary_model_id lower_boundary_model_id none~init~6->proc~lower_boundary_model_id proc~refresh_periodic_zero_mode_state refresh_periodic_zero_mode_state none~init~6->proc~refresh_periodic_zero_mode_state proc~symmetric_vacuum_bottom_field symmetric_vacuum_bottom_field none~init~6->proc~symmetric_vacuum_bottom_field proc~validate_upper_fourier_height validate_upper_fourier_height none~init~6->proc~validate_upper_fourier_height proc~derive_field_panel_config->proc~lower_ascii proc~build_periodic_zero_mode_height_plan build_periodic_zero_mode_height_plan proc~build_periodic_zero_mode_plan->proc~build_periodic_zero_mode_height_plan proc~lower_boundary_model_id->proc~lower_ascii proc~integrate_local_polynomial integrate_local_polynomial proc~refresh_periodic_zero_mode_state->proc~integrate_local_polynomial proc~locate_zero_mode_interval locate_zero_mode_interval proc~refresh_periodic_zero_mode_state->proc~locate_zero_mode_interval proc~zero_mode_charge_primitive zero_mode_charge_primitive proc~refresh_periodic_zero_mode_state->proc~zero_mode_charge_primitive proc~zero_mode_interval_origin zero_mode_interval_origin proc~refresh_periodic_zero_mode_state->proc~zero_mode_interval_origin proc~upper_fourier_auto_height_range upper_fourier_auto_height_range proc~validate_upper_fourier_height->proc~upper_fourier_auto_height_range proc~sort_real_ascending sort_real_ascending proc~build_periodic_zero_mode_height_plan->proc~sort_real_ascending proc~zero_mode_heights_coincide zero_mode_heights_coincide proc~build_periodic_zero_mode_height_plan->proc~zero_mode_heights_coincide proc~locate_zero_mode_interval->proc~zero_mode_heights_coincide proc~zero_mode_charge_primitive->proc~integrate_local_polynomial proc~zero_mode_charge_primitive->proc~zero_mode_interval_origin

Called by

proc~~prepare_periodic_cache_and_stop~~CalledByGraph proc~prepare_periodic_cache_and_stop prepare_periodic_cache_and_stop program~main main program~main->proc~prepare_periodic_cache_and_stop

Source Code

  subroutine prepare_periodic_cache_and_stop()
    type(electrostatic_snapshot_type) :: snapshot
    type(field_physics_config) :: field_config
    type(panel_kernel_config) :: panel_config
    type(electrostatic_diagnostics_type) :: diagnostics
    integer(8) :: clock_start, clock_end, clock_rate

    call system_clock(clock_start, clock_rate)
    call derive_field_panel_config(app%sim, field_config, panel_config)
    call snapshot%init(mesh, app%sim, field_config, app%periodic2, panel_config, mpi=mpi)
    call snapshot%get_diagnostics(diagnostics)
    call mpi_world_barrier(mpi)
    call system_clock(clock_end)
    if (mpi_is_root(mpi)) then
      print '(a,es12.4)', 'prepare_elapsed_s=', real(clock_end - clock_start, dp)/real(max(clock_rate, 1_8), dp)
      print '(a,a)', 'periodic2_status=', trim(diagnostics%status)
      print '(a,l1)', 'periodic2_split_periodic_active=', diagnostics%split_periodic_active
      print '(a,l1)', 'periodic2_cache_hit=', diagnostics%periodic_cache_hit
      print '(a,i0)', 'periodic2_operator_build_count=', diagnostics%periodic_operator_build_count
      print '(a,a)', 'periodic2_cache_fingerprint=', trim(diagnostics%periodic_cache_fingerprint)
      print '(a,a)', 'periodic2_cache_path=', trim(diagnostics%periodic_cache_path)
      print '(a,i0)', 'mpi_world_size=', mpi_world_size(mpi)
    end if
    call mpi_shutdown(mpi)
    stop
  end subroutine prepare_periodic_cache_and_stop