New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
mpp_map.F90 in branches/2013/dev_r3987_UKMO4_OBS/NEMOGCM/NEMO/OPA_SRC/OBS – NEMO

source: branches/2013/dev_r3987_UKMO4_OBS/NEMOGCM/NEMO/OPA_SRC/OBS/mpp_map.F90 @ 6225

Last change on this file since 6225 was 4030, checked in by djlea, 11 years ago

Initial version of the offline observation operator and the required (online) observation operator changes.

  • Property svn:keywords set to Id
File size: 2.9 KB
Line 
1MODULE mpp_map
2   !!======================================================================
3   !!                       ***  MODULE mpp_mpa  ***
4   !! NEMOVAR: MPP global grid point mapping to processors
5   !!======================================================================
6   !! History :  2.0  ! 2007-08  (K. Mogensen)  Original code
7   !!----------------------------------------------------------------------
8
9   !!----------------------------------------------------------------------
10   !!  mppmap_init : Initialize mppmap.
11   !!----------------------------------------------------------------------
12   USE par_kind, ONLY :   wp            ! Precision variables
13   USE par_oce , ONLY :   jpi, jpj      ! Ocean parameters
14   USE dom_oce , ONLY :   mig, mjg, nldi, nlei, nldj, nlej, narea   ! Ocean space and time domain variables
15#if defined key_mpp_mpi
16   USE lib_mpp, ONLY :   mpi_comm_opa   ! MPP library
17#endif
18   USE in_out_manager   ! I/O manager
19
20   IMPLICIT NONE
21   PRIVATE
22
23   PUBLIC ::   mppmap_init, mppmap   !: ???
24
25   INTEGER, DIMENSION(:,:), ALLOCATABLE ::   mppmap   ! ???
26
27   !!----------------------------------------------------------------------
28   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
29   !! $Id$
30   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
31   !!----------------------------------------------------------------------
32CONTAINS
33
34   SUBROUTINE mppmap_init
35      !!----------------------------------------------------------------------
36      !!               ***  ROUTINE mppmap_init ***
37      !!         
38      !! ** Purpose : Setup a global map of processor rank for all gridpoints
39      !!
40      !! ** Method  : MPI all reduce.
41      !!
42      !! ** Action  : This does only work for MPI.
43      !!
44      !! References : http://www.mpi-forum.org
45      !!----------------------------------------------------------------------
46      INTEGER, DIMENSION(:,:), ALLOCATABLE ::   imppmap   !
47#if defined key_mpp_mpi
48      INTEGER :: ierr
49
50INCLUDE 'mpif.h'
51#endif
52      !!----------------------------------------------------------------------
53
54      IF (.NOT. ALLOCATED(mppmap)) THEN
55         ALLOCATE( &
56            & mppmap(jpiglo,jpjglo) &
57            & )
58      ENDIF
59      ! Initialize local imppmap
60
61      ALLOCATE( &
62         & imppmap(jpiglo,jpjglo) &
63         & )
64      imppmap(:,:) = 0
65
66      ! Setup local grid points
67      imppmap(mig(nldi):mig(nlei),mjg(nldj):mjg(nlej)) = narea 
68     
69      ! Get global data
70
71#if defined key_mpp_mpi
72
73      ! Call the MPI library to find the max across processors
74      CALL mpi_allreduce( imppmap, mppmap, jpiglo*jpjglo, mpi_integer,   &
75         &                mpi_max, mpi_comm_opa, ierr )
76#else     
77     
78      ! No MPP: Just copy the data
79      mppmap(:,:) = imppmap(:,:)
80#endif
81      !
82   END SUBROUTINE mppmap_init
83
84   !!======================================================================
85END MODULE mpp_map
Note: See TracBrowser for help on using the repository browser.