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

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

CT : UPDATE001 : First major NEMO update

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