Create all the necessary subcommunicators
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(fieldmat_type), | intent(inout) | :: | self |
subroutine fm_make_subcom_1(self)
use mp, only: iproc, nproc, mp_comm, proc0
implicit none
class(fieldmat_type), intent(inout) :: self
integer :: ik
!Set the all comm to be mp_comm
self%fm_sub_all%id=mp_comm
self%fm_sub_all%iproc=iproc
self%fm_sub_all%nproc=nproc
self%fm_sub_all%proc0=proc0
!NOTE: We may actually want to allow a communicator to be given as input
!as this would allow us to split off a group of procs to do the field
!calculations for separate fieldmat objects. This may be one way to look
!at preparing response matrices for different time steps etc.
!NOTE: We'd need to take this into account in the decomposition routines
!as well where we split up the work. and also in any fieldmat routine which uses
!iproc,nproc,proc0 etc.
!NOTE: Best way to achieve this is to always reference self%fm_sub_all when wanting
!iproc,nproc,proc0 etc.
!Set the parents and make their subcommunicators
do ik=1,self%naky
!Set parent subcom
self%kyb(ik)%parent_sub=self%fm_sub_all
!Make individual subcom
call self%kyb(ik)%make_subcom_1
enddo
end subroutine fm_make_subcom_1