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 branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC – NEMO

source: branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/cla.F90 @ 2287

Last change on this file since 2287 was 2287, checked in by smasson, 13 years ago

update licence of all NEMO files...

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