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.
cla.F90 in trunk/NEMO/OPA_SRC – NEMO

source: trunk/NEMO/OPA_SRC/cla.F90 @ 1629

Last change on this file since 1629 was 1146, checked in by rblod, 16 years ago

Add svn Id (first try), see ticket #210

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 29.7 KB
Line 
1MODULE cla
2   !!==============================================================================
3   !!                         ***  MODULE  cla  ***
4   !! Cross Land Advection : parameterize ocean exchanges through straits by a
5   !!                        specified advection across land.
6   !!==============================================================================
7#if defined key_orca_r2
8   !!----------------------------------------------------------------------
9   !!   'key_orca_r2'   :                             ORCA R2 configuration
10   !!----------------------------------------------------------------------
11   !!   tra_cla           : update the tracer trend with the horizontal
12   !!                       and vertical advection trends at straits
13   !!   tra_bab_el_mandeb :
14   !!   tra_gibraltar     :
15   !!   tra_hormuz        :
16   !!   tra_cla_init      :
17   !!----------------------------------------------------------------------
18   !! * Modules used
19   USE oce             ! ocean dynamics and tracers variables
20   USE dom_oce         ! ocean space and time domain variables
21   USE sbc_oce         ! surface boundary condition: ocean
22   USE in_out_manager  ! I/O manager
23   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
24   USE lib_mpp         ! distributed memory computing
25
26   IMPLICIT NONE
27   PRIVATE
28
29   !! * Routine accessibility
30   PUBLIC tra_cla        ! routine called by step.F90
31
32   !! * Modules variables   
33   REAL(wp) :: zempmed, zempred
34
35   REAL(wp) :: zisw_rs, zurw_rs, zbrw_rs          ! Imposed transport Red Sea
36   REAL(wp) :: zisw_ms, zmrw_ms, zurw_ms, zbrw_ms ! Imposed transport Med Sea
37   REAL(wp) :: zisw_pg, zbrw_pg                   ! Imposed transport Persic Gulf
38
39   REAL(wp), DIMENSION(jpk) ::   &
40      zu1_rs_i, zu2_rs_i, zu3_rs_i,              &  ! Red Sea velocities
41      zu1_ms_i, zu2_ms_i, zu3_ms_i,              &  ! Mediterranean Sea velocities
42      zu_pg                                         ! Persic Gulf velocities
43   REAL(wp), DIMENSION (jpk) :: zthor, zshor        ! Temperature, salinity Hormuz
44   
45   !! * Substitutions
46#  include "domzgr_substitute.h90"
47#  include "vectopt_loop_substitute.h90"
48   !!----------------------------------------------------------------------
49   !!   OPA 9.0 , LOCEAN-IPSL (2005)
50   !! $Id$
51   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
52   !!----------------------------------------------------------------------
53
54CONTAINS
55
56   SUBROUTINE tra_cla( kt )
57      !!----------------------------------------------------------------------
58      !!                 ***  ROUTINE tra_cla  ***
59      !!                   
60      !! ** Purpose :   Update the now trend due to the advection of tracers
61      !!      and add it to the general trend of passive tracer equations
62      !!      at some straits ( Bab el Mandeb, Gibraltar, Hormuz ).
63      !!
64      !! ** Method  :   ...
65      !!         Add this trend now to the general trend of tracer (ta,sa):
66      !!            (ta,sa) = (ta,sa) + ( zta , zsa )
67      !!
68      !! ** Action  :   update (ta,sa) with the now advective tracer trends
69      !!
70      !! History :
71      !!        !         (A. Bozec)  original code 
72      !!   8.5  !  02-11  (A. Bozec)  F90: Free form and module
73      !!----------------------------------------------------------------------
74      !! * Arguments
75      INTEGER, INTENT( in ) ::   kt         ! ocean time-step index
76      !!----------------------------------------------------------------------
77 
78      ! cross land advection for straits
79
80      ! Initialization
81      IF( kt == nit000 )   CALL tra_cla_init
82
83
84      ! Bab el Mandeb strait horizontal advection
85
86      CALL tra_bab_el_mandeb 
87
88      ! Gibraltar strait horizontal advection
89
90      CALL tra_gibraltar
91
92      ! Hormuz Strait ( persian Gulf) horizontal advection
93
94      CALL tra_hormuz 
95
96   END SUBROUTINE tra_cla
97
98
99   SUBROUTINE tra_bab_el_mandeb
100      !!---------------------------------------------------------------------
101      !!             ***  ROUTINE tra_bab_el_mandeb  ***
102      !!
103      !! ** Purpose :   Update the horizontal advective trend of tracers
104      !!      correction in Bab el Mandeb strait and
105      !!      add it to the general trend of tracer equations.
106      !!
107      !! ** Method :
108      !!     We impose transport at Bab el Mandeb and knowing T and S in
109      !!     surface and depth at each side of the  strait, we deduce T and S
110      !!     of the deep outflow of the Red Sea in the Indian ocean .
111      !!                                          |
112      !!            |/ \|            N          |\ /|
113      !!            |_|_|______      |          |___|______
114      !!        88  |   |<-       W - - E    88 |   |<-
115      !!        87  |___|______      |       87 |___|->____
116      !!             160 161         S           160 161
117      !!       horizontal view                horizontal view
118      !!          surface                        depth
119      !!   
120      !!     The horizontal advection is evaluated by a second order cen-
121      !!     tered scheme using now fields (leap-frog scheme). In specific
122      !!     areas (vicinity of major river mouths, some straits, or tn
123      !!     approaching the freezing point) it is mixed with an upstream
124      !!     scheme for stability reasons.
125      !!
126      !!         C A U T I O N : the trend saved is the centered trend only.
127      !!      It doesn't take into account the upstream part of the scheme.
128      !!
129      !! ** history :
130      !!           !  02-11  (A. Bozec) Original code
131      !!      8.5  !  02-11  (A. Bozec) F90: Free form and module
132      !!---------------------------------------------------------------------
133      !! * Local declarations
134      INTEGER ::  ji, jj, jk               ! dummy loop indices
135      REAL(wp) :: zsu, zvt
136      REAL(wp) :: zsumt, zsumt1, zsumt2, zsumt3, zsumt4
137      REAL(wp) :: zsums, zsums1, zsums2, zsums3, zsums4
138      REAL(wp) :: zt, zs
139      REAL(wp) :: zwei
140      REAL(wp), DIMENSION (jpk) ::  zu1_rs, zu2_rs, zu3_rs
141      !!---------------------------------------------------------------------
142
143      ! Initialization of vertical sum for T and S transport
144      ! ----------------------------------------------------
145
146      zsumt  = 0.e0       ! East  Bab el Mandeb surface north point (T)
147      zsums  = 0.e0       ! East  Bab el Mandeb surface north point (S)
148      zsumt1 = 0.e0       ! East  Bab el Mandeb depth   south point (T)
149      zsums1 = 0.e0       ! East  Bab el Mandeb depth   south point (S)
150      zsumt2 = 0.e0       ! West  Bab el Mandeb surface             (T)
151      zsums2 = 0.e0       ! West  Bab el Mandeb surface             (S)
152      zsumt3 = 0.e0       ! West  Bab el Mandeb depth               (T)
153      zsums3 = 0.e0       ! West  Bab el Mandeb depth               (S)
154      zsumt4 = 0.e0       ! East  Bab el Mandeb depth   north point (T)
155      zsums4 = 0.e0       ! East  Bab el Mandeb depth   north point (S)
156     
157      ! EMP of the Red Sea
158      ! ------------------
159
160      zempred = 0.e0
161      zwei = 0.e0
162      DO jj = mj0(87), mj1(96)
163         DO ji = mi0(148), mi1(160)
164            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj)
165            zempred = zempred + emp(ji,jj) * zwei
166         END DO
167      END DO
168      IF( lk_mpp )   CALL mpp_sum( zempred )      ! sum with other processors value
169
170      ! convert in m3
171      zempred = zempred * 1.e-3
172
173      ! Velocity profile at each point
174      ! ------------------------------
175
176      zu1_rs(:) = zu1_rs_i(:)
177      zu2_rs(:) = zu2_rs_i(:)
178      zu3_rs(:) = zu3_rs_i(:)
179
180      ! velocity profile at 161,88 East Bab el Mandeb North point
181      ! we imposed zisw_rs + EMP above the Red Sea
182      DO jk = 1, 8                                     
183         DO jj = mj0(88), mj1(88) 
184            DO ji = mi0(160), mi1(160) 
185               zu1_rs(jk) = zu1_rs(jk) - ( zempred / 8. ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )     
186            END DO
187         END DO
188      END DO
189
190      ! velocity profile at 161, 88 West Bab el Mandeb
191      ! we imposed zisw_rs + EMP above the Red Sea
192      DO jk = 1,  10                                     
193         DO jj = mj0(88), mj1(88) 
194            DO ji = mi0(160), mi1(160) 
195               zu3_rs(jk) = zu3_rs(jk) + ( zempred / 10. ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )
196            END DO
197         END DO
198      END DO
199     
200      ! Balance of temperature and salinity
201      ! -----------------------------------
202
203      ! east Bab el Mandeb surface vertical sum of transport* S,T
204      DO jk =  1, 19
205         DO jj = mj0(88), mj1(88) 
206            DO ji = mi0(161), mi1(161) 
207               zsumt  = zsumt  + tn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk) 
208               zsums  = zsums  + sn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk) 
209            END DO
210         END DO
211      END DO
212
213      ! west Bab el Mandeb surface vertical sum of transport* S,T
214      DO jk =  1, 10
215         DO jj = mj0(88), mj1(88) 
216            DO ji = mi0(161), mi1(161) 
217               zsumt2 = zsumt2 + tn(ji,jj,jk) * e1v(ji-1,jj) * fse3v(ji-1,jj,jk) * zu3_rs(jk)
218               zsums2 = zsums2 + sn(ji,jj,jk) * e1v(ji-1,jj) * fse3v(ji-1,jj,jk) * zu3_rs(jk)
219            END DO
220         END DO
221      END DO
222
223      ! west Bab el Mandeb deeper
224      DO jj = mj0(89), mj1(89) 
225         DO ji = mi0(160), mi1(160) 
226            zsumt3 = tn(ji,jj,16) * e1v(ji,jj-1) * fse3v(ji,jj-1,16) * zu3_rs(16)
227            zsums3 = sn(ji,jj,16) * e1v(ji,jj-1) * fse3v(ji,jj-1,16) * zu3_rs(16)
228         END DO
229      END DO
230
231      ! east  Bab el Mandeb deeper 
232      DO jk =  20, 21
233         DO jj = mj0(88), mj1(88) 
234            DO ji = mi0(161), mi1(161) 
235               zsumt4 =  zsumt4 + tn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk)
236               zsums4 =  zsums4 + sn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk) 
237            END DO
238         END DO
239      END DO
240
241      ! Total transport 
242      zsumt1 = -( zsumt3 + zsumt2 + zsumt + zsumt4 )
243      zsums1 = -( zsums3 + zsums2 + zsums + zsums4 )
244
245      ! Temperature and Salinity at East Bab el Mandeb, Level 21
246      DO jj = mj0(88), mj1(88) 
247         DO ji = mi0(160), mi1(160) 
248            zt = zsumt1 / ( zu2_rs(21) * e2u(ji,jj-1) * fse3u(ji,jj-1,21) )
249            zs = zsums1 / ( zu2_rs(21) * e2u(ji,jj-1) * fse3u(ji,jj-1,21) )
250         END DO
251      END DO
252     
253      ! New Temperature and Salinity at East Bab el Mandeb
254      ! --------------------------------------------------
255
256      ! north point 
257      DO jk = 1, jpk
258         DO jj = mj0(88), mj1(88) 
259            DO ji = mi0(161), mi1(161) 
260               zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
261               zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk)
262               ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu1_rs(jk) * tn(ji,jj,jk)
263               sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu1_rs(jk) * sn(ji,jj,jk)
264            END DO
265         END DO
266      END DO
267
268      ! south point
269      jk =  21
270      DO jj = mj0(87), mj1(87) 
271         DO ji = mi0(161), mi1(161) 
272            zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
273            zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk)
274            ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu2_rs(jk) * zt
275            sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu2_rs(jk) * zs
276         END DO
277      END DO
278
279
280      ! New Temperature and Salinity at West Bab el Mandeb
281      ! --------------------------------------------------
282
283      ! surface   
284      DO jk = 1, 10
285         DO jj = mj0(89), mj1(89) 
286            DO ji = mi0(160), mi1(160) 
287               zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
288               zsu = e1v(ji,jj-1) * fse3v(ji,jj-1,jk)
289               ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * tn(ji+1,jj-1,jk)
290               sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * sn(ji+1,jj-1,jk)
291            END DO
292         END DO
293      END DO
294      ! deeper
295      jk =  16
296      DO jj = mj0(89), mj1(89) 
297         DO ji = mi0(160), mi1(160) 
298            zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
299            zsu = e1v(ji,jj-1) * fse3v(ji,jj-1,jk)
300            ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * tn(ji,jj,jk)
301            sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * sn(ji,jj,jk)
302         END DO
303      END DO
304
305   END SUBROUTINE tra_bab_el_mandeb
306
307
308   SUBROUTINE tra_gibraltar
309      !!---------------------------------------------------------------------
310      !!               ***  ROUTINE tra_gibraltar  ***
311      !!
312      !! ** Purpose :
313      !!        Update the horizontal advective trend of tracers (t & s)
314      !!        correction in Gibraltar  and
315      !!        add it to the general trend of tracer equations.
316      !!
317      !! ** Method :
318      !!      We impose transport at Gibraltar and knowing T and S in
319      !!      surface and deeper at each side of the strait, we deduce T and S
320      !!      of the outflow of the Mediterranean Sea in the Atlantic ocean .
321      !!                               
322      !!          ________________      N        ________________
323      !! 102           |    |->         |           <-|    |<-
324      !! 101      ___->|____|_____   W - - E     ___->|____|_____
325      !!           139   140  141       |         139   140  141
326      !!          horizontal view       S        horizontal view
327      !!            surface                          depth
328      !!         C A U T I O N : the trend saved is the centered trend only.
329      !!      It doesn't take into account the upstream part of the scheme.
330      !!
331      !! ** history :
332      !!           !  02-06  (A. Bozec) Original code
333      !!      8.5  !  02-11  (A. Bozec) F90: Free form and module
334      !!---------------------------------------------------------------------
335      !! * Local declarations
336      INTEGER ::  ji, jj, jk               ! dummy loop indices
337      REAL(wp) :: zsu, zvt
338      REAL(wp) :: zsumt, zsumt1, zsumt2, zsumt3, zsumt4
339      REAL(wp) :: zsums, zsums1, zsums2, zsums3, zsums4
340      REAL(wp) :: zt, zs
341      REAL(wp) :: zwei
342      REAL(wp), DIMENSION (jpk) ::  zu1_ms, zu2_ms, zu3_ms
343      !!---------------------------------------------------------------------
344     
345      ! Initialization of vertical sum for T and S transport
346      ! ----------------------------------------------------
347
348      zsumt  = 0.e0        ! West Gib. surface south point ( T )
349      zsums  = 0.e0        ! West Gib. surface south point ( S )
350      zsumt1 = 0.e0        ! East Gib. surface north point ( T )
351      zsums1 = 0.e0        ! East Gib. surface north point ( S )
352      zsumt2 = 0.e0        ! East Gib. depth   north point ( T )
353      zsums2 = 0.e0        ! East Gib. depth   north point ( S )
354      zsumt3 = 0.e0        ! West Gib. depth   south point ( T )
355      zsums3 = 0.e0        ! West Gib. depth   south point ( S )
356      zsumt4 = 0.e0        ! West Gib. depth   north point ( T )
357      zsums4 = 0.e0        ! West Gib. depth   north point ( S )
358     
359      ! EMP of Mediterranean Sea
360      ! ------------------------
361 
362      zempmed = 0.e0
363      zwei = 0.e0
364      DO jj = mj0(96),mj1(110)
365         DO ji = mi0(141),mi1(181)
366            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj)
367            zempmed = zempmed + emp(ji,jj) * zwei
368         END DO
369      END DO
370      IF( lk_mpp )   CALL mpp_sum( zempmed )      ! sum with other processors value
371
372
373      ! minus 2 points in Red Sea and 3 in Atlantic ocean
374      DO jj = mj0(96),mj1(96)
375         DO ji = mi0(148),mi1(148)
376            zempmed = zempmed  -  emp(ji  ,jj) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   &
377                               -  emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)   
378         END DO
379      END DO
380
381      ! convert in m3
382      zempmed = zempmed * 1.e-3
383
384      ! Velocity profile at each point
385      ! ------------------------------
386
387      zu1_ms(:) = zu1_ms_i(:)
388      zu2_ms(:) = zu2_ms_i(:)
389      zu3_ms(:) = zu3_ms_i(:)
390
391      ! velocity profile at 139,101  South point + emp on surface
392      DO jk = 1, 14                     
393         DO jj = mj0(102), mj1(102) 
394            DO ji = mi0(140), mi1(140) 
395               zu1_ms(jk) = zu1_ms(jk) + ( zempmed / 14. ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,jk) ) 
396            END DO
397         END DO
398      END DO
399
400      ! profile at East Gibraltar   
401      ! velocity profile at 141,102  + emp on surface
402      DO  jk = 1, 14                     
403         DO jj = mj0(102), mj1(102) 
404            DO ji = mi0(140), mi1(140) 
405               zu3_ms(jk) = zu3_ms(jk) +  ( zempmed / 14. ) / ( e2u(ji, jj) * fse3u(ji, jj,jk) ) 
406            END DO
407         END DO
408      END DO
409     
410      ! Balance of temperature and salinity
411      ! -----------------------------------
412
413      ! west gibraltar surface vertical sum of transport* S,T
414      DO  jk =  1, 14 
415         DO jj = mj0(101), mj1(101) 
416            DO ji = mi0(139), mi1(139) 
417               zsumt  = zsumt + tn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk) 
418               zsums  = zsums + sn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk) 
419            END DO
420         END DO
421      END DO
422
423      ! east Gibraltar surface  vertical sum of transport* S,T
424      DO  jk =  1, 14 
425         DO jj = mj0(101), mj1(101) 
426            DO ji = mi0(139), mi1(139) 
427               zsumt1 = zsumt1 + tn(ji, jj,jk) * e2u(ji+1, jj+1) * fse3u(ji+1, jj+1,jk) * zu3_ms(jk)
428               zsums1 = zsums1 + sn(ji, jj,jk) * e2u(ji+1, jj+1) * fse3u(ji+1, jj+1,jk) * zu3_ms(jk)
429            END DO
430         END DO
431      END DO
432
433      ! east Gibraltar deeper  vertical sum of transport* S,T
434      DO jj = mj0(102), mj1(102) 
435         DO ji = mi0(141), mi1(141) 
436            zsumt2 = tn(ji, jj,21) * e2u(ji-1, jj) * fse3u(ji-1, jj,21) * zu3_ms(21)
437            zsums2 = sn(ji, jj,21) * e2u(ji-1, jj) * fse3u(ji-1, jj,21) * zu3_ms(21)
438         END DO
439      END DO
440     
441      ! west Gibraltar deeper vertical sum of transport* S,T
442      DO  jk =  21, 22 
443         DO jj = mj0(101), mj1(101) 
444            DO ji = mi0(139), mi1(139) 
445               zsumt3 = zsumt3 + tn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk)
446               zsums3 = zsums3 + sn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk)
447            END DO
448         END DO
449      END DO
450
451      ! Total transport = 0.
452      zsumt4 = zsumt2 + zsumt1 - zsumt - zsumt3
453      zsums4 = zsums2 + zsums1 - zsums - zsums3
454
455      ! Temperature and Salinity at West gibraltar , Level 22
456      DO jj = mj0(102), mj1(102) 
457         DO ji = mi0(140), mi1(140) 
458            zt = zsumt4 / ( zu2_ms(22) * e2u(ji-1, jj) * fse3u(ji-1, jj, 22) )
459            zs = zsums4 / ( zu2_ms(22) * e2u(ji-1, jj) * fse3u(ji-1, jj, 22) )
460         END DO
461      END DO
462     
463      ! New Temperature and Salinity trend at West Gibraltar
464      ! ----------------------------------------------------
465
466      ! south point 
467      DO jk = 1, 22
468         DO jj = mj0(101), mj1(101) 
469            DO ji = mi0(139), mi1(139) 
470               zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk)
471               zsu = e2u(ji, jj) * fse3u(ji, jj,jk)
472               ta(ji, jj,jk) = ta(ji, jj,jk) - ( 1. / zvt ) * zsu * zu1_ms(jk) * tn(ji, jj,jk)
473               sa(ji, jj,jk) = sa(ji, jj,jk) - ( 1. / zvt ) * zsu * zu1_ms(jk) * sn(ji, jj,jk)
474            END DO
475         END DO
476      END DO
477
478      ! north point
479      DO jk = 15, 20
480         DO jj = mj0(102), mj1(102) 
481            DO ji = mi0(139), mi1(139) 
482               zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk)
483               zsu = e2u(ji, jj) * fse3u(ji, jj,jk)
484               ta(ji, jj,jk) = ta(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * tn(ji, jj-1,jk)
485               sa(ji, jj,jk) = sa(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * sn(ji, jj-1,jk)
486            END DO
487         END DO
488      END DO
489
490      ! Gibraltar outflow, north point deeper
491      jk =  22
492      DO jj = mj0(102), mj1(102) 
493         DO ji = mi0(139), mi1(139) 
494            zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk)
495            zsu = e2u(ji, jj) * fse3u(ji, jj,jk)
496            ta(ji, jj,jk) = ta(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * zt
497            sa(ji, jj,jk) = sa(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * zs
498         END DO
499      END DO
500
501
502      ! New Temperature and Salinity at East Gibraltar
503      ! ----------------------------------------------
504
505      ! surface   
506      DO jk = 1, 14
507         DO jj = mj0(102), mj1(102) 
508            DO ji = mi0(141), mi1(141) 
509               zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk)
510               zsu = e2u(ji-1, jj) * fse3u(ji-1, jj,jk)
511               ta(ji, jj,jk) = ta(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * tn(ji-2, jj-1,jk)
512               sa(ji, jj,jk) = sa(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * sn(ji-2, jj-1,jk)
513            END DO
514         END DO
515      END DO
516      ! deeper
517      jk =  21
518      DO jj = mj0(102), mj1(102) 
519         DO ji = mi0(141), mi1(141) 
520            zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk)
521            zsu = e2u(ji-1, jj) * fse3u(ji-1, jj,jk)
522            ta(ji, jj,jk) = ta(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * tn(ji, jj,jk)
523            sa(ji, jj,jk) = sa(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * sn(ji, jj,jk)
524         END DO
525      END DO
526
527   END SUBROUTINE tra_gibraltar
528
529
530   SUBROUTINE tra_hormuz
531      !!---------------------------------------------------------------------
532      !!               ***  ROUTINE tra_hormuz  ***
533      !!
534      !! ** Purpose :   Update the horizontal advective trend of tracers
535      !!        correction in Hormuz.
536      !!
537      !! ** Method :   We impose transport at Hormuz .
538      !!                               
539      !! ** history :
540      !!           !  02-11  (A. Bozec) Original code
541      !!      8.5  !  02-11  (A. Bozec) F90: Free form and module
542      !!---------------------------------------------------------------------
543      !! * Local declarations
544      INTEGER ::  ji, jj, jk              ! dummy loop indices
545      REAL(wp) :: zsu, zvt
546      !!---------------------------------------------------------------------
547     
548      ! New trend at Hormuz strait
549      ! --------------------------
550      DO jk = 1, 8   
551         DO jj = mj0(94), mj1(94) 
552            DO ji = mi0(172), mi1(172) 
553               zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
554               zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk)
555               ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * tn(ji,jj,jk) 
556               sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * sn(ji,jj,jk) 
557            END DO
558         END DO
559      END DO
560      DO jk = 16, 18
561         DO jj = mj0(94), mj1(94) 
562            DO ji = mi0(172), mi1(172) 
563               zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)
564               zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk)
565               ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * zthor(jk)
566               sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * zshor(jk)
567            END DO
568         END DO
569      END DO
570
571   END SUBROUTINE tra_hormuz
572
573
574   SUBROUTINE tra_cla_init
575      !!---------------------------------------------------------------------
576      !!               ***  ROUTINE tra_cla_init  ***
577      !!
578      !! ** Purpose :   Initialization of variables
579      !!
580      !! ** history :
581      !!      9.0  !  02-11  (A. Bozec) Original code
582      !!---------------------------------------------------------------------
583      !! * Local declarations
584      INTEGER ::  ji, jj, jk              ! dummy loop indices
585      !!---------------------------------------------------------------------
586
587      ! Control print
588      ! -------------
589
590      IF(lwp) WRITE(numout,*)
591      IF(lwp) WRITE(numout,*) 'tra_cla_init : cross land advection on tracer '
592      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~'
593
594      ! Initialization at Bab el Mandeb
595      ! -------------------------------
596
597      ! imposed transport
598      zisw_rs = 0.4e6        ! inflow surface water
599      zurw_rs = 0.2e6        ! upper recirculation water
600!!Alex      zbrw_rs = 1.2e6        ! bottom  recirculation water
601      zbrw_rs = 0.5e6        ! bottom  recirculation water
602
603      ! initialization of the velocity at Bab el Mandeb
604      zu1_rs_i(:) = 0.e0      ! velocity profile at 161,88 South point
605      zu2_rs_i(:) = 0.e0      ! velocity profile at 161,87 North point
606      zu3_rs_i(:) = 0.e0      ! velocity profile at 160,88 East  point
607
608      ! velocity profile at 161,88 East Bab el Mandeb North point
609      ! we imposed zisw_rs + EMP above the Red Sea
610      DO jk = 1, 8                                     
611         DO jj = mj0(88), mj1(88) 
612            DO ji = mi0(160), mi1(160) 
613               zu1_rs_i(jk) = -( zisw_rs / 8. ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) )     
614            END DO
615         END DO
616      END DO
617
618      ! recirculation water
619      DO jj = mj0(88), mj1(88) 
620         DO ji = mi0(160), mi1(160) 
621            zu1_rs_i(20) = -(           zurw_rs ) / ( e2u(ji,jj) * fse3u(ji,jj,20) )
622            zu1_rs_i(21) = -( zbrw_rs - zurw_rs ) / ( e2u(ji,jj) * fse3u(ji,jj,21) )
623         END DO
624      END DO
625     
626      ! velocity profile at 161,87 East Bab el Mandeb South point
627      DO jj = mj0(87), mj1(87) 
628         DO ji = mi0(160), mi1(160) 
629            zu2_rs_i(21) =  ( zbrw_rs + zisw_rs ) / ( e2u(ji,jj) * fse3u(ji,jj,21) )
630         END DO
631      END DO
632
633      ! velocity profile at 161, 88 West Bab el Mandeb
634      ! we imposed zisw_rs + EMP above the Red Sea
635      DO jk = 1,  10                                     
636         DO jj = mj0(88), mj1(88) 
637            DO ji = mi0(160), mi1(160) 
638               zu3_rs_i(jk) =  ( zisw_rs / 10. ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) )
639            END DO
640         END DO
641      END DO
642
643      ! deeper
644      DO jj = mj0(88), mj1(88) 
645         DO ji = mi0(160), mi1(160) 
646            zu3_rs_i(16)  = - zisw_rs /( e1v(ji,jj) * fse3v(ji,jj,16) )
647         END DO
648      END DO
649
650
651      ! Initialization at Gibraltar
652      ! ---------------------------
653
654      ! imposed transport
655      zisw_ms = 0.8e6         ! atlantic-mediterranean  water
656      zmrw_ms = 0.7e6         ! middle recirculation water
657      zurw_ms = 2.5e6         ! upper  recirculation water
658      zbrw_ms = 3.5e6         ! bottom recirculation water
659
660      ! initialization of the velocity
661      zu1_ms_i(:) = 0.e0       ! velocity profile at 139,101 South point
662      zu2_ms_i(:) = 0.e0       ! velocity profile at 139,102 North point
663      zu3_ms_i(:) = 0.e0       ! velocity profile at 141,102 East  point
664
665      ! velocity profile at 139,101  South point
666      DO jk = 1, 14                     
667         DO jj = mj0(102), mj1(102) 
668            DO ji = mi0(140), mi1(140) 
669               zu1_ms_i(jk) = ( zisw_ms / 14. ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,jk)) 
670            END DO
671         END DO
672      END DO
673
674      ! middle recirculation ( uncounting in the balance )
675      DO jk = 15, 20                     
676         DO jj = mj0(102), mj1(102) 
677            DO ji = mi0(140), mi1(140) 
678               zu1_ms_i(jk) = ( zmrw_ms / 6. ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,jk) ) 
679            END DO
680         END DO
681      END DO
682
683      DO jj = mj0(102), mj1(102) 
684         DO ji = mi0(140), mi1(140) 
685            zu1_ms_i(21) =  (           zurw_ms ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,21) )
686            zu1_ms_i(22) =  ( zbrw_ms - zurw_ms ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,22) )
687         END DO
688      END DO
689
690      ! velocity profile at 139,102  North point
691      ! middle recirculation ( uncounting in the balance )
692      DO jk = 15, 20                     
693         DO jj = mj0(102), mj1(102) 
694            DO ji = mi0(140), mi1(140) 
695               zu2_ms_i(jk) = -( zmrw_ms / 6. ) / ( e2u(ji-1, jj) * fse3u(ji-1, jj,jk) ) 
696            END DO
697         END DO
698      END DO
699
700      DO jj = mj0(102), mj1(102) 
701         DO ji = mi0(140), mi1(140) 
702            zu2_ms_i(22) = -( zisw_ms + zbrw_ms ) / ( e2u(ji-1, jj) * fse3u(ji-1, jj,22) )
703         END DO
704      END DO 
705
706      ! profile at East Gibraltar   
707      ! velocity profile at 141,102
708      DO  jk = 1, 14                     
709         DO jj = mj0(102), mj1(102) 
710            DO ji = mi0(140), mi1(140) 
711               zu3_ms_i(jk) =  ( zisw_ms / 14. ) / ( e2u(ji, jj) * fse3u(ji, jj,jk) ) 
712            END DO
713         END DO
714      END DO
715
716      ! deeper
717      DO jj = mj0(102), mj1(102) 
718         DO ji = mi0(140), mi1(140) 
719            zu3_ms_i(21) = -zisw_ms / ( e2u(ji, jj) * fse3u(ji, jj,21) )
720         END DO
721      END DO
722
723
724      ! Initialization at Hormuz
725      ! ------------------------
726
727      ! imposed transport
728      zisw_pg = 4. * 0.25e6      ! surface and bottom  water
729
730      ! initialization of the velocity
731      zu_pg(:) = 0.e0       ! velocity profile at 139,101 South point
732
733      ! Velocity profile
734      DO jk = 1, 8 
735         DO jj = mj0(94), mj1(94) 
736            DO ji = mi0(172), mi1(172) 
737               zu_pg(jk) = -( zisw_pg / 8. ) /  ( e2u(ji-1,jj) * fse3u(ji-1,jj,jk) )
738            END DO
739         END DO
740      END DO
741     DO jk = 16, 18
742         DO jj = mj0(94), mj1(94) 
743            DO ji = mi0(172), mi1(172) 
744               zu_pg(jk) =  ( zisw_pg / 3. )  / ( e2u(ji-1,jj) * fse3u(ji-1,jj,jk) )
745            END DO
746         END DO
747      END DO
748
749      ! Temperature and Salinity at Hormuz
750      zthor(:) = 0.e0
751      zshor(:) = 0.e0
752
753      zthor(16) = 18.4
754      zshor(16) = 36.27
755      !
756      zthor(17) = 17.8
757      zshor(17) = 36.4
758      !
759      zthor(18) = 16.
760      zshor(18) = 36.27
761 
762   END SUBROUTINE tra_cla_init
763
764#else
765   !!----------------------------------------------------------------------
766   !!   Default option                              NO cross land advection
767   !!----------------------------------------------------------------------
768   USE in_out_manager  ! I/O manager
769CONTAINS
770   SUBROUTINE tra_cla( kt ) 
771      INTEGER, INTENT(in) ::   kt    ! ocean time-step indice
772      IF( kt == nit000 .AND. lwp ) THEN
773         WRITE(numout,*)
774         WRITE(numout,*) 'tra_cla : No use of cross land advection'
775         WRITE(numout,*) '~~~~~~~'
776      ENDIF
777   END SUBROUTINE tra_cla
778#endif
779
780   !!======================================================================
781END MODULE cla
Note: See TracBrowser for help on using the repository browser.