49 logical :: EXECUTE_PREPROCESS = .true.
50 logical :: EXECUTE_MODEL = .false.
51 integer :: NUM_BULKJOB = 1
52 integer :: NUM_DOMAIN = 1
55 logical :: ABORT_ALL_JOBS = .false.
56 logical :: LOG_SPLIT = .false.
57 logical :: COLOR_REORDER = .true.
59 namelist / param_launcher / &
70 integer :: universal_comm
71 integer :: universal_nprocs
72 logical :: universal_master
73 character(len=H_LONG) :: universal_cnf_fname
75 integer :: global_comm
76 integer :: global_nprocs
79 integer :: intercomm_parent_null
80 integer :: intercomm_child_null
81 character(len=H_LONG) :: bulk_prefix
84 integer :: intercomm_parent
85 integer :: intercomm_child
86 character(len=H_LONG) :: local_cnf_fname
98 if( universal_master )
write(*,*)
'*** Start Launch System for SCALE-RM' 108 conf_files(1) = universal_cnf_fname
112 read(fid,nml=param_launcher,iostat=ierr)
115 elseif( ierr > 0 )
then 116 if( universal_master )
write(*,*)
'xxx Not appropriate names in namelist PARAM_LAUNCHER. Check!' 122 if ( execute_preprocess &
123 .OR. execute_model )
then 124 if( universal_master )
write(*,*)
"*** Execute preprocess? : ", execute_preprocess
125 if( universal_master )
write(*,*)
"*** Execute model? : ", execute_model
127 if( universal_master )
write(*,*)
'xxx No execution. please check PARAM_LAUNCHER. STOP' 133 if ( mod(universal_nprocs,num_bulkjob) /= 0 )
then 134 if( universal_master )
write(*,*)
'xxx Total Num of Processes must be divisible by NUM_BULKJOB. Check!' 135 if( universal_master )
write(*,*)
'xxx Total Num of Processes = ', universal_nprocs
136 if( universal_master )
write(*,*)
'xxx NUM_BULKJOB = ', num_bulkjob
140 global_nprocs = universal_nprocs / num_bulkjob
141 prc_bulkjob(1:num_bulkjob) = global_nprocs
142 if ( num_bulkjob > 1 )
then 143 if( universal_master )
write(*,
'(1x,A,I5)')
"*** TOTAL BULK JOB NUMBER = ", num_bulkjob
144 if( universal_master )
write(*,
'(1x,A,I5)')
"*** PROCESS NUM of EACH JOB = ", global_nprocs
156 intercomm_parent_null, &
157 intercomm_child_null, &
165 if ( num_domain > 1 )
then 166 if( universal_master )
write(*,
'(1x,A,I5)')
"*** TOTAL DOMAIN NUMBER = ", num_domain
167 if( universal_master )
write(*,
'(1x,A,L5)')
"*** Flag of ABORT ALL JOBS = ", abort_all_jobs
185 if ( num_bulkjob > 1 )
then 186 local_cnf_fname = trim(bulk_prefix)//
"/"//trim(local_cnf_fname)
189 if ( execute_preprocess )
then 191 intercomm_parent_null, &
192 intercomm_child_null, &
196 if ( execute_model )
then
subroutine, public prc_mpistop
Abort MPI.
subroutine, public scalerm(comm_world, intercomm_parent, intercomm_child, cnf_fname)
Setup.
subroutine, public prc_universal_setup(comm, nprocs, ismaster)
setup MPI in universal communicator
subroutine, public prc_mpisplit(ORG_COMM, NUM_DOMAIN, PRC_DOMAINS, CONF_FILES, LOG_SPLIT, bulk_split, color_reorder, INTRA_COMM, inter_parent, inter_child, fname_local)
MPI Communicator Split.
character(len=h_long) function, public io_arg_getfname(is_master)
get config filename from argument
subroutine, public loginit(fid_conf, fid_log, master)
module SCALE-RM (a main routine of regional model)
program scalerm_launcher
Program SCALE-RM (a launcher of main routine)
subroutine, public prc_global_setup(abortall, comm)
setup MPI in global communicator
subroutine, public scalerm_prep(comm_world, intercomm_parent, intercomm_child, cnf_fname)
Setup.
subroutine, public prc_mpistart(comm)
Start MPI.
integer, parameter, public prc_domain_nlim
max depth of domains
subroutine, public prc_mpifinish
Stop MPI peacefully.
integer function, public io_cnf_open(fname, is_master)
open config file