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.
ldftra_c2d.h90 in branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/LDF – NEMO

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_c2d.h90

Last change on this file 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: 7.0 KB
Line 
1   !!----------------------------------------------------------------------
2   !!                      ***  ldftra_c2d.h90  ***
3   !!----------------------------------------------------------------------
4
5   !!----------------------------------------------------------------------
6   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
7   !! $Id$
8   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
9   !!----------------------------------------------------------------------
10
11   SUBROUTINE ldf_tra_c2d( ld_print )
12      !!----------------------------------------------------------------------
13      !!                  ***  ROUTINE ldftra_c2d  ***
14      !!             
15      !! ** Purpose :   initializations of horizontally non uniform eddy
16      !!      diffusivity coefficients
17      !!
18      !! ** Method :
19      !!       biharmonic operator    : ahtt = defined at T-level
20      !!                                ahtu,ahtv,ahtw never used
21      !!       harmonic operator (ahtt never used)
22      !!           iso-model level   : ahtu, ahtv defined at u-, v-points
23      !!         isopycnal         : ahtu, ahtv, ahtw defined at u-, v-, w-pts
24      !!         or geopotential   
25      !!       eddy induced velocity
26      !!           always harmonic   : aeiu, aeiv, aeiw defined at u-, v-, w-pts
27      !!----------------------------------------------------------------------
28      LOGICAL, INTENT (in) ::   ld_print   ! If true, print arrays in numout
29      !
30      INTEGER ::   ji, jj   ! dummy loop indices
31      REAL(wp) ::   za00, zd_max, zeumax, zevmax, zetmax
32      !!----------------------------------------------------------------------
33
34      IF( lk_traldf_eiv ) THEN
35         IF(lwp) WRITE(numout,*)
36         IF(lwp) WRITE(numout,*) ' ldf_tra_c2d : 2D eddy diffusivity and eddy'
37         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~   --  induced velocity coefficients'
38         IF(lwp .AND. lflush) CALL flush(numout)
39      ELSE
40         IF(lwp) WRITE(numout,*)
41         IF(lwp) WRITE(numout,*) ' ldf_tra2d : 2D eddy diffusivity coefficient'
42         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~   --'
43         IF(lwp .AND. lflush) CALL flush(numout)
44      ENDIF
45
46      zd_max = MAX( MAXVAL( e1t(:,:) ), MAXVAL( e2t(:,:) ) )
47      IF( lk_mpp ) CALL mpp_max( zd_max )   ! max over the global domain
48
49      ! harmonic operator : (U-, V-, W-points)
50      ! ==================
51      IF( ln_traldf_lap ) THEN
52         !
53         za00 = aht0 / zd_max
54         !
55         DO jj = 1, jpj
56            DO ji = 1, jpi
57               zeumax = MAX( e1u(ji,jj), e2u(ji,jj) )
58               zevmax = MAX( e1v(ji,jj), e2v(ji,jj) )
59               zetmax = MAX( e1t(ji,jj), e2t(ji,jj) )
60               ahtu(ji,jj) = za00 * zeumax ! set ahtu = ahtv at u- and v-points,
61               ahtv(ji,jj) = za00 * zevmax ! and ahtw at w-point (idem T-point)
62               ahtw(ji,jj) = za00 * zetmax !
63            END DO
64         END DO
65
66         CALL lbc_lnk( ahtu, 'U', 1. )   ! Lateral boundary conditions
67         CALL lbc_lnk( ahtv, 'V', 1. )   ! (no change of sign)
68         CALL lbc_lnk( ahtw, 'W', 1. )
69
70         ! Special case for ORCA R2 and R4 configurations (overwrite the value of ahtu ahtv ahtw)
71         ! ==============================================
72         IF( cp_cfg == "orca" .AND. ( jp_cfg == 2 .OR. jp_cfg == 4 ) )   THEN
73            ahtu(:,:) = aht0              ! set ahtu = ahtv at u- and v-points,
74            ahtv(:,:) = aht0              ! and ahtw at w-point
75            ahtw(:,:) = aht0              ! (here : no space variation)
76            IF(lwp) WRITE(numout,*) '               ORCA R2 or R4 case'
77            IF(lwp) WRITE(numout,*) '               Constant values used for eddy diffusivity coefficients'
78            IF(lwp) WRITE(numout,*) '               Variation lat/lon only for eddy induced velocity coefficients'
79            IF(lwp .AND. lflush) CALL flush(numout)
80         ENDIF
81
82         ! Control print
83         IF( lwp .AND. ld_print ) THEN
84            WRITE(numout,*)
85            WRITE(numout,*) 'inildf: ahtu array'
86            CALL prihre( ahtu, jpi, jpj, 1, jpi, 1,   &
87               &                         1, jpj, 1, 1.e-3, numout )
88            WRITE(numout,*)
89            WRITE(numout,*) 'inildf: ahtv array'
90            CALL prihre( ahtv, jpi, jpj, 1, jpi, 1,   &
91               &                         1, jpj, 1, 1.e-3, numout )
92            WRITE(numout,*)
93            WRITE(numout,*) 'inildf: ahtw array'
94            CALL prihre( ahtw, jpi, jpj, 1, jpi, 1,   &
95               &                         1, jpj, 1, 1.e-3, numout )
96         ENDIF
97      ENDIF
98     
99      ! biharmonic operator : (T-point)
100      ! ====================
101      IF( ln_traldf_bilap ) THEN
102         ! (USER: modify ahtt following your desiderata)
103         ! Here: ahm is proportional to the cube of the maximum of the gridspacing
104         !       in the to horizontal direction
105
106         zd_max = MAX( MAXVAL( e1t(:,:) ), MAXVAL( e2t(:,:) ) )
107         IF( lk_mpp )   CALL mpp_max( zd_max )   ! max over the global domain
108
109         za00 = aht0 / ( zd_max * zd_max * zd_max )
110         DO jj = 1, jpj
111            DO ji = 1, jpi
112               zetmax = MAX( e1t(ji,jj), e2t(ji,jj) )
113               ahtt(ji,jj) = za00 * zetmax * zetmax * zetmax      ! set ahtt at T-point
114            END DO
115         END DO
116
117         CALL lbc_lnk( ahtt, 'T', 1. )   ! Lateral boundary conditions on ( ahtt )
118
119         ! Control print
120         IF( lwp .AND. ld_print ) THEN
121            WRITE(numout,*)
122            WRITE(numout,*) 'inildf: 2D ahtt array'
123            CALL prihre( ahtt, jpi, jpj, 1, jpi, 1,   &
124               &                         1, jpj, 1, 1.e-3, numout )
125         ENDIF
126      ENDIF
127
128# if defined key_traldf_eiv
129      ! set aeiu = aeiv at u- and v-points, and aeiw at w-point (idem T-point)
130      ! (here no space variation)
131      aeiu(:,:) = aeiv0
132      aeiv(:,:) = aeiv0
133      aeiw(:,:) = aeiv0
134     
135      IF( cp_cfg == "orca" .AND. jp_cfg == 4 ) THEN
136         !                                 ! Cancel eiv in Gibraltar strait
137         aeiu( mi0(68):mi1(71) , mj0(50):mj1(53) ) = 0.e0
138         aeiv( mi0(68):mi1(71) , mj0(50):mj1(53) ) = 0.e0
139         aeiw( mi0(68):mi1(71) , mj0(50):mj1(53) ) = 0.e0
140         !                                 ! Cancel eiv in Mediterrannean sea
141         aeiu( mi0(70):mi1(90) , mj0(49):mj1(56) ) = 0.e0
142         aeiv( mi0(70):mi1(90) , mj0(49):mj1(56) ) = 0.e0
143         aeiw( mi0(70):mi1(90) , mj0(49):mj1(56) ) = 0.e0
144      ENDIF
145
146      ! Lateral boundary conditions on ( aeiu, aeiv, aeiw )
147      CALL lbc_lnk( aeiu, 'U', 1. )
148      CALL lbc_lnk( aeiv, 'V', 1. )
149      CALL lbc_lnk( aeiw, 'W', 1. )
150
151      ! Control print
152      IF( lwp .AND. ld_print ) THEN
153         WRITE(numout,*)
154         WRITE(numout,*) 'inildf: aeiu array'
155         CALL prihre(aeiu,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout)
156         WRITE(numout,*)
157         WRITE(numout,*) 'inildf: aeiv array'
158         CALL prihre(aeiv,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout)
159         WRITE(numout,*)
160         WRITE(numout,*) 'inildf: aeiw array'
161         CALL prihre(aeiw,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout)
162      ENDIF
163# endif
164      !
165   END SUBROUTINE ldf_tra_c2d
Note: See TracBrowser for help on using the repository browser.