Line data Source code
1 : !||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 2 : 3 : module ice_communicate 4 : 5 : ! This module contains the necessary routines and variables for 6 : ! communicating between processors. This instance of the module 7 : ! is for serial execution so not much is done. 8 : ! 9 : ! author: Phil Jones, LANL 10 : ! Oct. 2004: Adapted from POP version by William H. Lipscomb, LANL 11 : 12 : use ice_kinds_mod 13 : use ice_exit, only: abort_ice 14 : use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted 15 : 16 : implicit none 17 : private 18 : 19 : public :: init_communicate, & 20 : get_num_procs, & ! LCOV_EXCL_LINE 21 : get_rank, & ! LCOV_EXCL_LINE 22 : ice_barrier, & ! LCOV_EXCL_LINE 23 : create_communicator 24 : 25 : integer (int_kind), public :: & 26 : MPI_COMM_ICE, &! MPI communicator for ice comms ! LCOV_EXCL_LINE 27 : mpi_dbl, &! MPI type for dbl_kind ! LCOV_EXCL_LINE 28 : my_task, &! MPI task number for this task ! LCOV_EXCL_LINE 29 : master_task ! task number of master task 30 : 31 : logical (log_kind), public :: & 32 : add_mpi_barriers = .false. ! turn on mpi barriers for throttling 33 : 34 : !*********************************************************************** 35 : 36 : contains 37 : 38 : !*********************************************************************** 39 : 40 1 : subroutine init_communicate 41 : 42 : ! This routine sets up MPI environment and defines ice communicator. 43 : 44 : !----------------------------------------------------------------------- 45 : ! 46 : ! local variables 47 : ! 48 : !----------------------------------------------------------------------- 49 : 50 : character(len=*), parameter :: subname = '(init_communicate)' 51 : 52 : !----------------------------------------------------------------------- 53 : ! 54 : ! initiate mpi environment and create communicator for internal 55 : ! ice communications 56 : ! 57 : !----------------------------------------------------------------------- 58 : 59 1 : my_task = 0 60 1 : master_task = 0 61 : 62 : !----------------------------------------------------------------------- 63 : 64 1 : end subroutine init_communicate 65 : 66 : !*********************************************************************** 67 : 68 2 : function get_num_procs() 69 : 70 : ! This function returns the number of processors assigned to 71 : ! the ice model. 72 : 73 : integer (int_kind) :: get_num_procs 74 : 75 : character(len=*), parameter :: subname = '(get_num_procs)' 76 : 77 : !----------------------------------------------------------------------- 78 : ! 79 : ! serial execution, must be only 1 80 : ! 81 : !----------------------------------------------------------------------- 82 : 83 2 : get_num_procs = 1 84 : 85 : !----------------------------------------------------------------------- 86 : 87 2 : end function get_num_procs 88 : 89 : !*********************************************************************** 90 : 91 0 : function get_rank() 92 : 93 : ! This function returns the number of processors assigned to 94 : ! the ice model. 95 : 96 : integer (int_kind) :: get_rank 97 : 98 : character(len=*), parameter :: subname = '(get_rank)' 99 : 100 : !----------------------------------------------------------------------- 101 : ! 102 : ! serial execution, must be only 1 103 : ! 104 : !----------------------------------------------------------------------- 105 : 106 0 : get_rank = 0 107 : 108 : !----------------------------------------------------------------------- 109 : 110 0 : end function get_rank 111 : 112 : !*********************************************************************** 113 : 114 2 : subroutine ice_barrier() 115 : 116 : ! This function is an MPI_BARRIER on the MPI side 117 : 118 : character(len=*), parameter :: subname = '(ice_barrier)' 119 : 120 : !----------------------------------------------------------------------- 121 : ! 122 : ! serial execution, no-op 123 : ! 124 : !----------------------------------------------------------------------- 125 : 126 : ! do nothing 127 : 128 : !----------------------------------------------------------------------- 129 : 130 2 : end subroutine ice_barrier 131 : 132 : !*********************************************************************** 133 : 134 1 : subroutine create_communicator(new_comm, num_procs) 135 : 136 : ! This routine creates a separate communicator for a subset of 137 : ! processors under default ice communicator. 138 : ! 139 : ! this routine should be called from init_domain1 when the 140 : ! domain configuration (e.g. nprocs_btrop) has been determined 141 : 142 : ! !INPUT PARAMETERS: 143 : 144 : integer (int_kind), intent(in) :: & 145 : num_procs ! num of procs in new distribution 146 : 147 : ! !OUTPUT PARAMETERS: 148 : 149 : integer (int_kind), intent(out) :: & 150 : new_comm ! new communicator for this distribution 151 : 152 1 : new_comm = MPI_COMM_ICE 153 : 154 : !----------------------------------------------------------------------- 155 : 156 1 : end subroutine create_communicator 157 : 158 : !*********************************************************************** 159 : 160 : end module ice_communicate 161 : 162 : !|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||