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/dev_1784_OBS/NEMO/OPA_SRC/OBS – NEMO

source: branches/dev_1784_OBS/NEMO/OPA_SRC/OBS/mpp_map.F90 @ 2001

Last change on this file since 2001 was 2001, checked in by djlea, 14 years ago

Adding observation operator code

File size: 2.7 KB
Line 
1MODULE mpp_map
2   !!======================================================================
3   !!                       ***  MODULE mpp_mpa  ***
4   !! NEMOVAR: MPP global grid point mapping to processors
5   !!======================================================================
6
7   !!----------------------------------------------------------------------
8   !! mppmap      : Global array which maps i,j to area number.
9   !! mppmap_init : Initialize mppmap.
10   !!----------------------------------------------------------------------
11   !! * Modules used   
12   USE par_kind, ONLY : &   ! Precision variables
13      & wp
14   USE par_oce, ONLY : &    ! Ocean parameters
15      & jpi,   &
16      & jpj
17   USE dom_oce, ONLY : &    ! Ocean space and time domain variables
18      & mig,   &
19      & mjg,   & 
20      & nldi,  &
21      & nlei,  &
22      & nldj,  &
23      & nlej,  &
24      & narea 
25#if defined key_mpp_mpi
26   USE lib_mpp, ONLY : &    ! MPP library
27      & mpi_comm_opa
28#endif
29   USE in_out_manager
30
31   IMPLICIT NONE
32
33   !! * Routine accessibility
34   PRIVATE
35
36   PUBLIC &
37      & mppmap_init,        &
38      & mppmap
39
40   !! * Module variables
41
42   INTEGER, DIMENSION(:,:), ALLOCATABLE :: &
43      & mppmap
44
45CONTAINS
46
47   SUBROUTINE mppmap_init
48      !!----------------------------------------------------------------------
49      !!               ***  ROUTINE mppmap_init ***
50      !!         
51      !! ** Purpose : Setup a global map of processor rank for all gridpoints
52      !!
53      !! ** Method  : MPI all reduce.
54      !!
55      !! ** Action  : This does only work for MPI.
56      !!              It does not work for SHMEM.
57      !!
58      !! References : http://www.mpi-forum.org
59      !!
60      !! History :
61      !!        !  07-08  (K. Mogensen)  Original code
62      !!----------------------------------------------------------------------
63
64      !! * Arguments
65      INTEGER, DIMENSION(:,:), ALLOCATABLE :: &
66         & imppmap
67#if defined key_mpp_mpi
68      !! * Local declarations
69      INTEGER :: &
70         & ierr
71#     include <mpif.h>
72#endif
73
74      ALLOCATE( &
75         & mppmap(jpiglo,jpjglo) &
76         & )
77
78      ! Initialize local imppmap
79
80      ALLOCATE( &
81         & imppmap(jpiglo,jpjglo) &
82         & )
83      imppmap(:,:) = 0
84
85      ! Setup local grid points
86      imppmap(mig(nldi):mig(nlei),mjg(nldj):mjg(nlej)) = narea 
87     
88      ! Get global data
89
90#if defined key_mpp_mpi
91
92      ! Call the MPI library to find the max across processors
93
94      CALL mpi_allreduce( imppmap, mppmap, jpiglo*jpjglo, mpi_integer, &
95         &                mpi_max, mpi_comm_opa, ierr )
96#elif defined key_mpp_shmem
97#error "Only MPI support for MPP in NEMOVAR"
98#else     
99     
100      ! Just copy the data
101
102      mppmap(:,:) = imppmap(:,:)
103
104#endif
105
106   END SUBROUTINE mppmap_init
107
108END MODULE mpp_map
Note: See TracBrowser for help on using the repository browser.