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.
domcfg.F90 in branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/DOM – NEMO

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/DOM/domcfg.F90 @ 11101

Last change on this file since 11101 was 11101, checked in by frrh, 5 years ago

Merge changes from Met Office GMED ticket 450 to reduce unnecessary
text output from NEMO.
This output, which is typically not switchable, is rarely of interest
in normal (non-debugging) runs and simply redunantley consumes extra
file space.
Further, the presence of this text output has been shown to
significantly degrade performance of models which are run during
Met Office HPC RAID (disk) checks.
The new code introduces switches which are configurable via the
changes made in the associated Met Office MOCI ticket 399.

File size: 10.3 KB
Line 
1MODULE domcfg
2   !!==============================================================================
3   !!                       ***  MODULE domcfg   ***
4   !! Ocean initialization : domain configuration initialization
5   !!==============================================================================
6   !! History :  1.0  ! 2003-09  (G. Madec)  Original code
7   !!            3.2  ! 2009-07  (R. Benshila) Suppression of rigid-lid option
8   !!----------------------------------------------------------------------
9
10   !!----------------------------------------------------------------------
11   !!   dom_cfg        : initialize the domain configuration
12   !!----------------------------------------------------------------------
13   USE dom_oce         ! ocean space and time domain
14   USE phycst          ! physical constants
15   USE in_out_manager  ! I/O manager
16   USE lib_mpp         ! distributed memory computing library
17   USE timing          ! Timing
18   USE c1d             ! 1D configuration
19   USE domc1d          ! 1D configuration: column location
20
21   IMPLICIT NONE
22   PRIVATE
23
24   PUBLIC   dom_cfg    ! called by opa.F90
25
26   !!----------------------------------------------------------------------
27   !! NEMO/OPA 3.2 , LODYC-IPSL  (2009)
28   !! $Id$
29   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
30   !!----------------------------------------------------------------------
31CONTAINS
32
33   SUBROUTINE dom_cfg
34      !!----------------------------------------------------------------------
35      !!                  ***  ROUTINE dom_cfg  ***
36      !!                   
37      !! ** Purpose :   set the domain configuration
38      !!
39      !!----------------------------------------------------------------------
40      !
41      IF( nn_timing == 1 )  CALL timing_start('dom_cfg')
42      !
43      IF(lwp) THEN                   ! Control print
44         WRITE(numout,*)
45         WRITE(numout,*) 'dom_cfg : set the ocean configuration'
46         WRITE(numout,*) '~~~~~~~ '
47         WRITE(numout,*) '   ocean model configuration used :   cp_cfg = ', cp_cfg, ' jp_cfg = ', jp_cfg
48         !
49         WRITE(numout,*) '   global domain lateral boundaries'
50         !
51         IF( jperio == 0 )   WRITE(numout,*) '      jperio= 0, closed'
52         IF( jperio == 1 )   WRITE(numout,*) '      jperio= 1, cyclic east-west'
53         IF( jperio == 2 )   WRITE(numout,*) '      jperio= 2, equatorial symmetric'
54         IF( jperio == 3 )   WRITE(numout,*) '      jperio= 3, north fold with T-point pivot'
55         IF( jperio == 4 )   WRITE(numout,*) '      jperio= 4, cyclic east-west and north fold with T-point pivot'
56         IF( jperio == 5 )   WRITE(numout,*) '      jperio= 5, north fold with F-point pivot'
57         IF( jperio == 6 )   WRITE(numout,*) '      jperio= 6, cyclic east-west and north fold with F-point pivot'
58         IF(lflush) CALL flush(numout)
59      ENDIF
60      !
61      IF( jperio <  0 .OR. jperio > 6 )   CALL ctl_stop( 'jperio is out of range' )
62      !
63      CALL dom_glo                   ! global domain versus zoom and/or local domain
64      !
65      IF( nn_timing == 1 )  CALL timing_stop('dom_cfg')
66      !
67   END SUBROUTINE dom_cfg
68
69
70   SUBROUTINE dom_glo
71      !!----------------------------------------------------------------------
72      !!                     ***  ROUTINE dom_glo  ***
73      !!
74      !! ** Purpose :   initialization for global domain, zoom and local domain
75      !!
76      !! ** Method  :   
77      !!
78      !! ** Action  : - mig  , mjg :
79      !!              - mi0  , mi1   :
80      !!              - mj0, , mj1   :
81      !!----------------------------------------------------------------------
82      INTEGER ::   ji, jj   ! dummy loop argument
83      !!----------------------------------------------------------------------
84      !                              ! recalculate jpizoom/jpjzoom given lat/lon
85      IF( lk_c1d .AND. ln_c1d_locpt )  CALL dom_c1d( rn_lat1d, rn_lon1d )
86      !
87      !                        ! ============== !
88      !                        !  Local domain  !
89      !                        ! ============== !
90      DO ji = 1, jpi                 ! local domain indices ==> data domain indices
91        mig(ji) = ji + jpizoom - 1 + nimpp - 1
92      END DO
93      DO jj = 1, jpj
94        mjg(jj) = jj + jpjzoom - 1 + njmpp - 1
95      END DO
96      !
97      !                              ! data domain indices ==> local domain indices
98      !                                   ! (return (m.0,m.1)=(1,0) if data domain gridpoint is to the west/south of the
99      !                                   !local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.
100      DO ji = 1, jpidta
101        mi0(ji) = MAX( 1, MIN( ji - jpizoom + 1 - nimpp + 1, jpi+1 ) )
102        mi1(ji) = MAX( 0, MIN( ji - jpizoom + 1 - nimpp + 1, jpi   ) )
103      END DO
104      DO jj = 1, jpjdta
105        mj0(jj) = MAX( 1, MIN( jj - jpjzoom + 1 - njmpp + 1, jpj+1 ) )
106        mj1(jj) = MAX( 0, MIN( jj - jpjzoom + 1 - njmpp + 1, jpj   ) )
107      END DO
108      IF(lwp .AND. nprint > 0) THEN                   ! control print
109         WRITE(numout,*)
110         WRITE(numout,*) 'dom_glo : domain: data / local '
111         WRITE(numout,*) '~~~~~~~ '
112         WRITE(numout,*) '          data input domain    : jpidta = ', jpidta,   &
113            &                                            ' jpjdta = ', jpjdta, ' jpkdta = ', jpkdta
114         WRITE(numout,*) '          global or zoom domain: jpiglo = ', jpiglo,   &
115            &                                            ' jpjglo = ', jpjglo, ' jpk    = ', jpk
116         WRITE(numout,*) '          local domain         : jpi    = ', jpi   ,   &
117            &                                            ' jpj    = ', jpj   , ' jpk    = ', jpk
118         WRITE(numout,*)
119         WRITE(numout,*) '          south-west indices    jpizoom = ', jpizoom,   &
120            &                                           ' jpjzoom = ', jpjzoom
121         WRITE(numout,*)
122         WRITE(numout,*) '          conversion local  ==> data i-index domain'
123         WRITE(numout,25)              (mig(ji),ji = 1,jpi)
124         WRITE(numout,*)
125         WRITE(numout,*) '          conversion data   ==> local  i-index domain'
126         WRITE(numout,*) '             starting index'
127         WRITE(numout,25)              (mi0(ji),ji = 1,jpidta)
128         WRITE(numout,*) '             ending index'
129         WRITE(numout,25)              (mi1(ji),ji = 1,jpidta)
130         WRITE(numout,*)
131         WRITE(numout,*) '          conversion local  ==> data j-index domain'
132         WRITE(numout,25)              (mjg(jj),jj = 1,jpj)
133         WRITE(numout,*)
134         WRITE(numout,*) '          conversion data  ==> local j-index domain'
135         WRITE(numout,*) '             starting index'
136         WRITE(numout,25)              (mj0(jj),jj = 1,jpjdta)
137         WRITE(numout,*) '             ending index'
138         WRITE(numout,25)              (mj1(jj),jj = 1,jpjdta)
139         IF(lflush) CALL flush(numout)
140      ENDIF
141 25   FORMAT( 100(10x,19i4,/) )
142
143      !                        ! ============== !
144      !                        !  Zoom domain   !
145      !                        ! ============== !
146      !                              ! zoom control
147      IF( jpiglo + jpizoom - 1  >  jpidta .OR.   &
148          jpjglo + jpjzoom - 1  >  jpjdta      ) &
149          &   CALL ctl_stop( ' global or zoom domain exceed the data domain ! ' )
150
151      !                              ! set zoom flag
152      IF( jpiglo < jpidta .OR. jpjglo < jpjdta )   lzoom = .TRUE.
153
154      !                              ! set zoom type flags
155      IF( lzoom .AND. jpizoom /= 1 )   lzoom_w = .TRUE.                     !
156      IF( lzoom .AND. jpjzoom /= 1 )   lzoom_s = .TRUE.
157      IF( lzoom .AND. jpiglo + jpizoom -1 /= jpidta )   lzoom_e = .TRUE.
158      IF( lzoom .AND. jpjglo + jpjzoom -1 /= jpjdta )   lzoom_n = .TRUE.
159      IF(lwp) THEN
160         WRITE(numout,*)
161         WRITE(numout,*) '          zoom flags : '
162         WRITE(numout,*) '             lzoom   = ', lzoom  , ' (T = zoom, F = global )'
163         WRITE(numout,*) '             lzoom_e = ', lzoom_e, ' (T = forced closed east  boundary)'
164         WRITE(numout,*) '             lzoom_w = ', lzoom_w, ' (T = forced closed west  boundary)'
165         WRITE(numout,*) '             lzoom_s = ', lzoom_s, ' (T = forced closed South boundary)'
166         WRITE(numout,*) '             lzoom_n = ', lzoom_n, ' (T = forced closed North boundary)'
167      ENDIF
168      IF(  ( lzoom_e .OR. lzoom_w )  .AND.  ( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 )  )   &
169           &   CALL ctl_stop( ' Your zoom choice is inconsistent with east-west cyclic boundary condition' )
170      IF(  lzoom_n  .AND.  ( 3 <= jperio .AND. jperio <= 6 )  )   &
171           &   CALL ctl_stop( ' Your zoom choice is inconsistent with North fold boundary condition' )
172
173      !                              ! Pre-defined arctic/antarctic zoom of ORCA configuration flag
174      IF( cp_cfg == "orca" ) THEN
175         SELECT CASE ( jp_cfg )
176         CASE ( 2 )                               !  ORCA_R2 configuration
177            IF(  cp_cfz == "arctic"    .AND. jpiglo  == 142    .AND. jpjglo  ==  53 .AND.   &
178               & jpizoom ==  21    .AND. jpjzoom ==  97         )   THEN
179              IF(lwp) WRITE(numout,*) '          ORCA configuration: arctic zoom '
180            ENDIF
181            IF(  cp_cfz == "antarctic" .AND. jpiglo  == jpidta .AND. jpjglo  ==  50 .AND.   &
182               & jpizoom ==   1    .AND. jpjzoom ==   1         )   THEN
183              IF(lwp) WRITE(numout,*) '          ORCA configuration: antarctic zoom '
184            ENDIF
185            !                             
186         CASE ( 05 )                              !  ORCA_R05 configuration
187            IF(    cp_cfz == "arctic"    .AND. jpiglo  == 562    .AND. jpjglo  == 202 .AND.   &
188               & jpizoom ==  81    .AND. jpjzoom == 301         )   THEN
189              IF(lwp) WRITE(numout,*) '          ORCA configuration: arctic zoom '
190            ENDIF
191            IF(    cp_cfz == "antarctic" .AND. jpiglo  == jpidta .AND. jpjglo  == 187 .AND.   &
192               & jpizoom ==   1    .AND. jpjzoom ==   1         )   THEN
193              IF(lwp) WRITE(numout,*) '          ORCA configuration: antarctic zoom '
194            ENDIF
195         END SELECT
196         !
197      ENDIF
198      !
199      IF(lwp .AND. lflush) CALL flush(numout)
200      !
201   END SUBROUTINE dom_glo
202
203   !!======================================================================
204END MODULE domcfg
Note: See TracBrowser for help on using the repository browser.