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