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 @ 11274

Last change on this file since 11274 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
RevLine 
[3]1   !!----------------------------------------------------------------------
2   !!                      ***  ldftra_c2d.h90  ***
3   !!----------------------------------------------------------------------
4
5   !!----------------------------------------------------------------------
[2528]6   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
[6486]7   !! $Id$
[2528]8   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
[3]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      !!----------------------------------------------------------------------
[2715]28      LOGICAL, INTENT (in) ::   ld_print   ! If true, print arrays in numout
29      !
30      INTEGER ::   ji, jj   ! dummy loop indices
[901]31      REAL(wp) ::   za00, zd_max, zeumax, zevmax, zetmax
[3]32      !!----------------------------------------------------------------------
33
34      IF( lk_traldf_eiv ) THEN
35         IF(lwp) WRITE(numout,*)
[461]36         IF(lwp) WRITE(numout,*) ' ldf_tra_c2d : 2D eddy diffusivity and eddy'
37         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~   --  induced velocity coefficients'
[11101]38         IF(lwp .AND. lflush) CALL flush(numout)
[3]39      ELSE
40         IF(lwp) WRITE(numout,*)
[461]41         IF(lwp) WRITE(numout,*) ' ldf_tra2d : 2D eddy diffusivity coefficient'
42         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~   --'
[11101]43         IF(lwp .AND. lflush) CALL flush(numout)
[3]44      ENDIF
45
[901]46      zd_max = MAX( MAXVAL( e1t(:,:) ), MAXVAL( e2t(:,:) ) )
47      IF( lk_mpp ) CALL mpp_max( zd_max )   ! max over the global domain
[461]48
[117]49      ! harmonic operator : (U-, V-, W-points)
50      ! ==================
51      IF( ln_traldf_lap ) THEN
[2715]52         !
[901]53         za00 = aht0 / zd_max
[2715]54         !
[901]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
[3]65
[117]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. )
[3]69
[901]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'
[11101]79            IF(lwp .AND. lflush) CALL flush(numout)
[901]80         ENDIF
81
[117]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
[3]97      ENDIF
[117]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
[3]105
[901]106         zd_max = MAX( MAXVAL( e1t(:,:) ), MAXVAL( e2t(:,:) ) )
107         IF( lk_mpp )   CALL mpp_max( zd_max )   ! max over the global domain
[3]108
[901]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]117         CALL lbc_lnk( ahtt, 'T', 1. )   ! Lateral boundary conditions on ( ahtt )
[3]118
[117]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
[3]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
[2715]164      !
[3]165   END SUBROUTINE ldf_tra_c2d
Note: See TracBrowser for help on using the repository browser.