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.
dommsk.F90 in branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OFF_SRC – NEMO

source: branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OFF_SRC/dommsk.F90 @ 2648

Last change on this file since 2648 was 2648, checked in by cetlod, 13 years ago

Changed OFF_SRC component to use dynamic memory

  • Property svn:keywords set to Id
File size: 5.0 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
15
16   IMPLICIT NONE
17   PRIVATE
18
19   PUBLIC   dom_msk    ! routine called by inidom.F90
20
21   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   facvol  !! volume for degraded regions
22
23   !! * Substitutions
24#  include "vectopt_loop_substitute.h90"
25   !!----------------------------------------------------------------------
26   !! NEMO/OFF 3.3 , NEMO Consortium (2010)
27   !! $Id$
28   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
29   !!----------------------------------------------------------------------
30CONTAINS
31
32   
33   SUBROUTINE dom_msk
34      !!---------------------------------------------------------------------
35      !!                 ***  ROUTINE dom_msk  ***
36      !!
37      !! ** Purpose :   Off-line case: defines the interior domain T-mask.
38      !!
39      !! ** Method  :   The interior ocean/land mask is computed from tmask
40      !!              setting to zero the duplicated row and lines due to
41      !!              MPP exchange halos, est-west cyclic and north fold
42      !!              boundary conditions.
43      !!
44      !! ** Action :   tmask_i  : interiorland/ocean mask at t-point
45      !!               tpol     : ???
46      !!----------------------------------------------------------------------
47      USE wrk_nemo, ONLY: iwrk_in_use, iwrk_not_released
48      USE wrk_nemo, ONLY: imsk => iwrk_2d_1
49      INTEGER  ::   ji, jk                   ! dummy loop indices
50      INTEGER  ::   iif, iil, ijf, ijl       ! local integers
51      !!---------------------------------------------------------------------
52      !
53      IF( iwrk_in_use(2, 1) ) THEN
54         CALL ctl_stop('dom_msk: ERROR: requested workspace arrays unavailable.')  ;  RETURN
55      END IF
56      !
57      CALL dom_msk_alloc
58
59      ! Interior domain mask (used for global sum)
60      ! --------------------
61      tmask_i(:,:) = tmask(:,:,1)
62      iif = jpreci                        ! thickness of exchange halos in i-axis
63      iil = nlci - jpreci + 1
64      ijf = jprecj                        ! thickness of exchange halos in j-axis
65      ijl = nlcj - jprecj + 1
66      !
67      tmask_i( 1 :iif,   :   ) = 0._wp    ! first columns
68      tmask_i(iil:jpi,   :   ) = 0._wp    ! last  columns (including mpp extra columns)
69      tmask_i(   :   , 1 :ijf) = 0._wp    ! first rows
70      tmask_i(   :   ,ijl:jpj) = 0._wp    ! last  rows (including mpp extra rows)
71      !
72      !                                   ! north fold mask
73      tpol(1:jpiglo) = 1._wp
74      !                               
75      IF( jperio == 3 .OR. jperio == 4 )   tpol(jpiglo/2+1:jpiglo) = 0._wp    ! T-point pivot
76      IF( jperio == 5 .OR. jperio == 6 )   tpol(     1    :jpiglo) = 0._wp    ! F-point pivot
77      IF( jperio == 3 .OR. jperio == 4 ) THEN      ! T-point pivot: only half of the nlcj-1 row
78         IF( mjg(ijl-1) == jpjglo-1 ) THEN
79            DO ji = iif+1, iil-1
80               tmask_i(ji,ijl-1) = tmask_i(ji,ijl-1) * tpol(mig(ji))
81            END DO
82         ENDIF
83      ENDIF 
84      !
85      IF( nprint == 1 .AND. lwp ) THEN    ! Control print
86         imsk(:,:) = INT( tmask_i(:,:) )
87         WRITE(numout,*) ' tmask_i : '
88         CALL prihin( imsk(:,:), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 1, numout)
89         WRITE (numout,*)
90         WRITE (numout,*) ' dommsk: tmask for each level'
91         WRITE (numout,*) ' ----------------------------'
92         DO jk = 1, jpk
93            imsk(:,:) = INT( tmask(:,:,jk) )
94            WRITE(numout,*)
95            WRITE(numout,*) ' level = ',jk
96            CALL prihin( imsk(:,:), jpi, jpj, 1, jpi, 1, 1, jpj, 1, 1, numout)
97         END DO
98      ENDIF
99      !
100      IF( iwrk_not_released(2, 1) ) CALL ctl_stop('dom_msk: failed to release workspace arrays.')
101      !
102   END SUBROUTINE dom_msk
103
104   SUBROUTINE dom_msk_alloc()
105      !!---------------------------------------------------------------------
106      !!                 ***  ROUTINE dom_msk_alloc  ***
107      !!---------------------------------------------------------------------
108#if defined key_degrad
109      INTEGER :: ierr 
110
111      ALLOCATE( facvol(jpi,jpj,jpk), STAT=ierr )
112      IF( ierr /= 0 )  &
113        &           CALL ctl_stop('STOP', 'dom_msk : unable to allocate facvol array')
114#endif
115
116   END SUBROUTINE dom_msk_alloc
117
118   !!======================================================================
119END MODULE dommsk
Note: See TracBrowser for help on using the repository browser.