Description:
This routine USES the modules in WRF and then calls the init routines they provide to perform module specific initializations at the beginning of a run. Note, this is only once per run, not once per domain; domain specific initializations should be handled elsewhere, such as in start_domain.
Certain framework specific module initializations in this file are dependent on order they are called. For example, since the quilt module relies on internal I/O, the init routine for internal I/O must be called first. In the case of 'DM_PARALLEL' compiles, the quilt module calls MPI_INIT as part of setting up and dividing communicators between compute and I/O server tasks. Therefore, it must be called prior to module_dm, which will also try to call MPI_INIT if it sees that MPI has not be initialized yet (implementations of module_dm should in fact behave this way by first calling MPI_INITIALIZED before they try to call MPI_INIT). If MPI is already initialized before the the quilting module is called, quilting will not work.
The phase argument is used to allow other superstructures like ESMF to place their initialization calls following the WRF initialization call that calls MPI_INIT(). When used with ESMF, ESMF will call wrf_init() which in turn will call phase 2 of this routine. Phase 1 will be called earlier.
Called by :
ndown_em (main/ndown_em.F)Uses:
real_data (main/real_em.F)
wrf_init (share/module_wrf_top.F)
MODULE_BC (share/module_bc.F) MODULE_CONFIGURE (frame/module_configure.F) MODULE_DRIVER_CONSTANTS (frame/module_driver_constants.F) MODULE_MODEL_CONSTANTS (share/module_model_constants.F) MODULE_DOMAIN (frame/module_domain.F) MODULE_MACHINE (frame/module_machine.F) MODULE_NESTING (frame/module_nesting.F) MODULE_TIMING (frame/module_timing.F) MODULE_TILES (frame/module_tiles.F) MODULE_IO_WRF (share/module_io_wrf.F) MODULE_IO (frame/module_io.F) MODULE_WRF_QUILT MODULE_DM (frame/module_dm.F) MODULE_EXT_INTERNALArguments:
1. phase :: INTEGER , INTENT( IN )INIT_MODULES calls :