source: branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/OFF_SRC/dommsk.F90 @ 2833

Last change on this file since 2833 was 2833, checked in by cetlod, 9 years ago

dev_r2787_LOCEAN3_TRA_TRP:correct minor bug to avoid compilation error

  • Property svn:keywords set to Id
File size: 4.4 KB
Line 
1MODULE dommsk
2   !!======================================================================
3   !!                       ***  MODULE dommsk   ***
4   !! Ocean initialization : domain land/sea masks, off-line case
5   !!======================================================================
6   !! History :  3.3  ! 2010-10  (C. Ethe)  adapted from OPA_SRC/DOM/dommsk
7   !!----------------------------------------------------------------------
8
9   !!----------------------------------------------------------------------
10   !!   dom_msk        : compute land/ocean mask
11   !!----------------------------------------------------------------------
12   USE oce             ! ocean dynamics and tracers
13   USE dom_oce         ! ocean space and time domain
14   USE lib_mpp         ! MPP library
15   USE in_out_manager  ! I/O manager
16
17   IMPLICIT NONE
18   PRIVATE
19
20   PUBLIC   dom_msk    ! routine called by inidom.F90
21
22   !! * Substitutions
23#  include "vectopt_loop_substitute.h90"
24   !!----------------------------------------------------------------------
25   !! NEMO/OFF 3.3 , NEMO Consortium (2010)
26   !! $Id$
27   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
28   !!----------------------------------------------------------------------
29CONTAINS
30
31   SUBROUTINE dom_msk
32      !!---------------------------------------------------------------------
33      !!                 ***  ROUTINE dom_msk  ***
34      !!
35      !! ** Purpose :   Off-line case: defines the interior domain T-mask.
36      !!
37      !! ** Method  :   The interior ocean/land mask is computed from tmask
38      !!              setting to zero the duplicated row and lines due to
39      !!              MPP exchange halos, est-west cyclic and north fold
40      !!              boundary conditions.
41      !!
42      !! ** Action :   tmask_i  : interiorland/ocean mask at t-point
43      !!               tpol     : ???
44      !!----------------------------------------------------------------------
45      USE wrk_nemo, ONLY:   iwrk_in_use, iwrk_not_released
46      USE wrk_nemo, ONLY:   imsk => iwrk_2d_1
47      !
48      INTEGER  ::   ji, jk                   ! dummy loop indices
49      INTEGER  ::   iif, iil, ijf, ijl       ! local integers
50      !!---------------------------------------------------------------------
51      !
52      IF( iwrk_in_use(2, 1) ) THEN
53         CALL ctl_stop('dom_msk: requested workspace arrays unavailable')   ;   RETURN
54      END IF
55      !
56      ! Interior domain mask (used for global sum)
57      ! --------------------
58      tmask_i(:,:) = tmask(:,:,1)
59      iif = jpreci                        ! thickness of exchange halos in i-axis
60      iil = nlci - jpreci + 1
61      ijf = jprecj                        ! thickness of exchange halos in j-axis
62      ijl = nlcj - jprecj + 1
63      !
64      tmask_i( 1 :iif,   :   ) = 0._wp    ! first columns
65      tmask_i(iil:jpi,   :   ) = 0._wp    ! last  columns (including mpp extra columns)
66      tmask_i(   :   , 1 :ijf) = 0._wp    ! first rows
67      tmask_i(   :   ,ijl:jpj) = 0._wp    ! last  rows (including mpp extra rows)
68      !
69      !                                   ! north fold mask
70      tpol(1:jpiglo) = 1._wp
71      !                               
72      IF( jperio == 3 .OR. jperio == 4 )   tpol(jpiglo/2+1:jpiglo) = 0._wp    ! T-point pivot
73      IF( jperio == 5 .OR. jperio == 6 )   tpol(     1    :jpiglo) = 0._wp    ! F-point pivot
74      IF( jperio == 3 .OR. jperio == 4 ) THEN      ! T-point pivot: only half of the nlcj-1 row
75         IF( mjg(ijl-1) == jpjglo-1 ) THEN
76            DO ji = iif+1, iil-1
77               tmask_i(ji,ijl-1) = tmask_i(ji,ijl-1) * tpol(mig(ji))
78            END DO
79         ENDIF
80      ENDIF 
81      !
82      IF( nprint == 1 .AND. lwp ) THEN    ! Control print
83         imsk(:,:) = INT( tmask_i(:,:) )
84         WRITE(numout,*) ' tmask_i : '
85         CALL prihin( imsk(:,:), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 1, numout)
86         WRITE (numout,*)
87         WRITE (numout,*) ' dommsk: tmask for each level'
88         WRITE (numout,*) ' ----------------------------'
89         DO jk = 1, jpk
90            imsk(:,:) = INT( tmask(:,:,jk) )
91            WRITE(numout,*)
92            WRITE(numout,*) ' level = ',jk
93            CALL prihin( imsk(:,:), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 1, numout)
94         END DO
95      ENDIF
96      !
97      IF( iwrk_not_released(2, 1) )   CALL ctl_stop('dom_msk: failed to release workspace arrays')
98      !
99   END SUBROUTINE dom_msk
100   !!======================================================================
101END MODULE dommsk
Note: See TracBrowser for help on using the repository browser.