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 tags/start/NEMO/OPA_SRC – NEMO

source: tags/start/NEMO/OPA_SRC/cla.F90 @ 4100

Last change on this file since 4100 was 3, checked in by opalod, 20 years ago

Initial revision

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