MODULE cla !!============================================================================== !! *** MODULE cla *** !! Cross Land Advection : parameterize ocean exchanges through straits by a !! specified advection across land. !!============================================================================== #if defined key_orca_r2 !!---------------------------------------------------------------------- !! 'key_orca_r2' : ORCA R2 configuration !!---------------------------------------------------------------------- !! tra_cla : update the tracer trend with the horizontal !! and vertical advection trends at straits !! tra_bab_el_mandeb : !! tra_gibraltar : !! tra_hormuz : !! tra_cla_init : !!---------------------------------------------------------------------- !! * Modules used USE oce ! ocean dynamics and tracers variables USE dom_oce ! ocean space and time domain variables USE sbc_oce ! surface boundary condition: ocean USE in_out_manager ! I/O manager USE lbclnk ! ocean lateral boundary conditions (or mpp link) USE lib_mpp ! distributed memory computing IMPLICIT NONE PRIVATE !! * Routine accessibility PUBLIC tra_cla ! routine called by step.F90 !! * Modules variables REAL(wp) :: zempmed, zempred REAL(wp) :: zisw_rs, zurw_rs, zbrw_rs ! Imposed transport Red Sea REAL(wp) :: zisw_ms, zmrw_ms, zurw_ms, zbrw_ms ! Imposed transport Med Sea REAL(wp) :: zisw_pg, zbrw_pg ! Imposed transport Persic Gulf REAL(wp), DIMENSION(jpk) :: & zu1_rs_i, zu2_rs_i, zu3_rs_i, & ! Red Sea velocities zu1_ms_i, zu2_ms_i, zu3_ms_i, & ! Mediterranean Sea velocities zu_pg ! Persic Gulf velocities REAL(wp), DIMENSION (jpk) :: zthor, zshor ! Temperature, salinity Hormuz !! * Substitutions # include "domzgr_substitute.h90" # include "vectopt_loop_substitute.h90" !!---------------------------------------------------------------------- !! OPA 9.0 , LOCEAN-IPSL (2005) !! $Id: cla.F90 1146 2008-06-25 11:42:56Z rblod $ !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt !!---------------------------------------------------------------------- CONTAINS SUBROUTINE tra_cla( kt ) !!---------------------------------------------------------------------- !! *** ROUTINE tra_cla *** !! !! ** Purpose : Update the now trend due to the advection of tracers !! and add it to the general trend of passive tracer equations !! at some straits ( Bab el Mandeb, Gibraltar, Hormuz ). !! !! ** Method : ... !! Add this trend now to the general trend of tracer (ta,sa): !! (ta,sa) = (ta,sa) + ( zta , zsa ) !! !! ** Action : update (ta,sa) with the now advective tracer trends !! !! History : !! ! (A. Bozec) original code !! 8.5 ! 02-11 (A. Bozec) F90: Free form and module !!---------------------------------------------------------------------- !! * Arguments INTEGER, INTENT( in ) :: kt ! ocean time-step index !!---------------------------------------------------------------------- ! cross land advection for straits ! Initialization IF( kt == nit000 ) CALL tra_cla_init ! Bab el Mandeb strait horizontal advection CALL tra_bab_el_mandeb ! Gibraltar strait horizontal advection CALL tra_gibraltar ! Hormuz Strait ( persian Gulf) horizontal advection CALL tra_hormuz END SUBROUTINE tra_cla SUBROUTINE tra_bab_el_mandeb !!--------------------------------------------------------------------- !! *** ROUTINE tra_bab_el_mandeb *** !! !! ** Purpose : Update the horizontal advective trend of tracers !! correction in Bab el Mandeb strait and !! add it to the general trend of tracer equations. !! !! ** Method : !! We impose transport at Bab el Mandeb and knowing T and S in !! surface and depth at each side of the strait, we deduce T and S !! of the deep outflow of the Red Sea in the Indian ocean . !! | !! |/ \| N |\ /| !! |_|_|______ | |___|______ !! 88 | |<- W - - E 88 | |<- !! 87 |___|______ | 87 |___|->____ !! 160 161 S 160 161 !! horizontal view horizontal view !! surface depth !! !! The horizontal advection is evaluated by a second order cen- !! tered scheme using now fields (leap-frog scheme). In specific !! areas (vicinity of major river mouths, some straits, or tn !! approaching the freezing point) it is mixed with an upstream !! scheme for stability reasons. !! !! C A U T I O N : the trend saved is the centered trend only. !! It doesn't take into account the upstream part of the scheme. !! !! ** history : !! ! 02-11 (A. Bozec) Original code !! 8.5 ! 02-11 (A. Bozec) F90: Free form and module !!--------------------------------------------------------------------- !! * Local declarations INTEGER :: ji, jj, jk ! dummy loop indices REAL(wp) :: zsu, zvt REAL(wp) :: zsumt, zsumt1, zsumt2, zsumt3, zsumt4 REAL(wp) :: zsums, zsums1, zsums2, zsums3, zsums4 REAL(wp) :: zt, zs REAL(wp) :: zwei REAL(wp), DIMENSION (jpk) :: zu1_rs, zu2_rs, zu3_rs !!--------------------------------------------------------------------- ! Initialization of vertical sum for T and S transport ! ---------------------------------------------------- zsumt = 0.e0 ! East Bab el Mandeb surface north point (T) zsums = 0.e0 ! East Bab el Mandeb surface north point (S) zsumt1 = 0.e0 ! East Bab el Mandeb depth south point (T) zsums1 = 0.e0 ! East Bab el Mandeb depth south point (S) zsumt2 = 0.e0 ! West Bab el Mandeb surface (T) zsums2 = 0.e0 ! West Bab el Mandeb surface (S) zsumt3 = 0.e0 ! West Bab el Mandeb depth (T) zsums3 = 0.e0 ! West Bab el Mandeb depth (S) zsumt4 = 0.e0 ! East Bab el Mandeb depth north point (T) zsums4 = 0.e0 ! East Bab el Mandeb depth north point (S) ! EMP of the Red Sea ! ------------------ zempred = 0.e0 zwei = 0.e0 DO jj = mj0(87), mj1(96) DO ji = mi0(148), mi1(160) zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei END DO END DO IF( lk_mpp ) CALL mpp_sum( zempred ) ! sum with other processors value ! convert in m3 zempred = zempred * 1.e-3 ! Velocity profile at each point ! ------------------------------ zu1_rs(:) = zu1_rs_i(:) zu2_rs(:) = zu2_rs_i(:) zu3_rs(:) = zu3_rs_i(:) ! velocity profile at 161,88 East Bab el Mandeb North point ! we imposed zisw_rs + EMP above the Red Sea DO jk = 1, 8 DO jj = mj0(88), mj1(88) DO ji = mi0(160), mi1(160) zu1_rs(jk) = zu1_rs(jk) - ( zempred / 8. ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) END DO END DO END DO ! velocity profile at 161, 88 West Bab el Mandeb ! we imposed zisw_rs + EMP above the Red Sea DO jk = 1, 10 DO jj = mj0(88), mj1(88) DO ji = mi0(160), mi1(160) zu3_rs(jk) = zu3_rs(jk) + ( zempred / 10. ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) END DO END DO END DO ! Balance of temperature and salinity ! ----------------------------------- ! east Bab el Mandeb surface vertical sum of transport* S,T DO jk = 1, 19 DO jj = mj0(88), mj1(88) DO ji = mi0(161), mi1(161) zsumt = zsumt + tn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk) zsums = zsums + sn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk) END DO END DO END DO ! west Bab el Mandeb surface vertical sum of transport* S,T DO jk = 1, 10 DO jj = mj0(88), mj1(88) DO ji = mi0(161), mi1(161) zsumt2 = zsumt2 + tn(ji,jj,jk) * e1v(ji-1,jj) * fse3v(ji-1,jj,jk) * zu3_rs(jk) zsums2 = zsums2 + sn(ji,jj,jk) * e1v(ji-1,jj) * fse3v(ji-1,jj,jk) * zu3_rs(jk) END DO END DO END DO ! west Bab el Mandeb deeper DO jj = mj0(89), mj1(89) DO ji = mi0(160), mi1(160) zsumt3 = tn(ji,jj,16) * e1v(ji,jj-1) * fse3v(ji,jj-1,16) * zu3_rs(16) zsums3 = sn(ji,jj,16) * e1v(ji,jj-1) * fse3v(ji,jj-1,16) * zu3_rs(16) END DO END DO ! east Bab el Mandeb deeper DO jk = 20, 21 DO jj = mj0(88), mj1(88) DO ji = mi0(161), mi1(161) zsumt4 = zsumt4 + tn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk) zsums4 = zsums4 + sn(ji,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zu1_rs(jk) END DO END DO END DO ! Total transport zsumt1 = -( zsumt3 + zsumt2 + zsumt + zsumt4 ) zsums1 = -( zsums3 + zsums2 + zsums + zsums4 ) ! Temperature and Salinity at East Bab el Mandeb, Level 21 DO jj = mj0(88), mj1(88) DO ji = mi0(160), mi1(160) zt = zsumt1 / ( zu2_rs(21) * e2u(ji,jj-1) * fse3u(ji,jj-1,21) ) zs = zsums1 / ( zu2_rs(21) * e2u(ji,jj-1) * fse3u(ji,jj-1,21) ) END DO END DO ! New Temperature and Salinity at East Bab el Mandeb ! -------------------------------------------------- ! north point DO jk = 1, jpk DO jj = mj0(88), mj1(88) DO ji = mi0(161), mi1(161) zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk) ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu1_rs(jk) * tn(ji,jj,jk) sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu1_rs(jk) * sn(ji,jj,jk) END DO END DO END DO ! south point jk = 21 DO jj = mj0(87), mj1(87) DO ji = mi0(161), mi1(161) zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk) ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu2_rs(jk) * zt sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu2_rs(jk) * zs END DO END DO ! New Temperature and Salinity at West Bab el Mandeb ! -------------------------------------------------- ! surface DO jk = 1, 10 DO jj = mj0(89), mj1(89) DO ji = mi0(160), mi1(160) zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) zsu = e1v(ji,jj-1) * fse3v(ji,jj-1,jk) ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * tn(ji+1,jj-1,jk) sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * sn(ji+1,jj-1,jk) END DO END DO END DO ! deeper jk = 16 DO jj = mj0(89), mj1(89) DO ji = mi0(160), mi1(160) zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) zsu = e1v(ji,jj-1) * fse3v(ji,jj-1,jk) ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * tn(ji,jj,jk) sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu3_rs(jk) * sn(ji,jj,jk) END DO END DO END SUBROUTINE tra_bab_el_mandeb SUBROUTINE tra_gibraltar !!--------------------------------------------------------------------- !! *** ROUTINE tra_gibraltar *** !! !! ** Purpose : !! Update the horizontal advective trend of tracers (t & s) !! correction in Gibraltar and !! add it to the general trend of tracer equations. !! !! ** Method : !! We impose transport at Gibraltar and knowing T and S in !! surface and deeper at each side of the strait, we deduce T and S !! of the outflow of the Mediterranean Sea in the Atlantic ocean . !! !! ________________ N ________________ !! 102 | |-> | <-| |<- !! 101 ___->|____|_____ W - - E ___->|____|_____ !! 139 140 141 | 139 140 141 !! horizontal view S horizontal view !! surface depth !! C A U T I O N : the trend saved is the centered trend only. !! It doesn't take into account the upstream part of the scheme. !! !! ** history : !! ! 02-06 (A. Bozec) Original code !! 8.5 ! 02-11 (A. Bozec) F90: Free form and module !!--------------------------------------------------------------------- !! * Local declarations INTEGER :: ji, jj, jk ! dummy loop indices REAL(wp) :: zsu, zvt REAL(wp) :: zsumt, zsumt1, zsumt2, zsumt3, zsumt4 REAL(wp) :: zsums, zsums1, zsums2, zsums3, zsums4 REAL(wp) :: zt, zs REAL(wp) :: zwei REAL(wp), DIMENSION (jpk) :: zu1_ms, zu2_ms, zu3_ms !!--------------------------------------------------------------------- ! Initialization of vertical sum for T and S transport ! ---------------------------------------------------- zsumt = 0.e0 ! West Gib. surface south point ( T ) zsums = 0.e0 ! West Gib. surface south point ( S ) zsumt1 = 0.e0 ! East Gib. surface north point ( T ) zsums1 = 0.e0 ! East Gib. surface north point ( S ) zsumt2 = 0.e0 ! East Gib. depth north point ( T ) zsums2 = 0.e0 ! East Gib. depth north point ( S ) zsumt3 = 0.e0 ! West Gib. depth south point ( T ) zsums3 = 0.e0 ! West Gib. depth south point ( S ) zsumt4 = 0.e0 ! West Gib. depth north point ( T ) zsums4 = 0.e0 ! West Gib. depth north point ( S ) ! EMP of Mediterranean Sea ! ------------------------ zempmed = 0.e0 zwei = 0.e0 DO jj = mj0(96),mj1(110) DO ji = mi0(141),mi1(181) zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei END DO END DO IF( lk_mpp ) CALL mpp_sum( zempmed ) ! sum with other processors value ! minus 2 points in Red Sea and 3 in Atlantic ocean DO jj = mj0(96),mj1(96) DO ji = mi0(148),mi1(148) zempmed = zempmed - ( emp(ji ,jj) - rnf(ji ,jj) ) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) & - ( emp(ji+1,jj) - rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj) END DO END DO ! convert in m3 zempmed = zempmed * 1.e-3 ! Velocity profile at each point ! ------------------------------ zu1_ms(:) = zu1_ms_i(:) zu2_ms(:) = zu2_ms_i(:) zu3_ms(:) = zu3_ms_i(:) ! velocity profile at 139,101 South point + ( emp-rnf ) on surface DO jk = 1, 14 DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu1_ms(jk) = zu1_ms(jk) + ( zempmed / 14. ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,jk) ) END DO END DO END DO ! profile at East Gibraltar ! velocity profile at 141,102 + ( emp-rnf) on surface DO jk = 1, 14 DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu3_ms(jk) = zu3_ms(jk) + ( zempmed / 14. ) / ( e2u(ji, jj) * fse3u(ji, jj,jk) ) END DO END DO END DO ! Balance of temperature and salinity ! ----------------------------------- ! west gibraltar surface vertical sum of transport* S,T DO jk = 1, 14 DO jj = mj0(101), mj1(101) DO ji = mi0(139), mi1(139) zsumt = zsumt + tn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk) zsums = zsums + sn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk) END DO END DO END DO ! east Gibraltar surface vertical sum of transport* S,T DO jk = 1, 14 DO jj = mj0(101), mj1(101) DO ji = mi0(139), mi1(139) zsumt1 = zsumt1 + tn(ji, jj,jk) * e2u(ji+1, jj+1) * fse3u(ji+1, jj+1,jk) * zu3_ms(jk) zsums1 = zsums1 + sn(ji, jj,jk) * e2u(ji+1, jj+1) * fse3u(ji+1, jj+1,jk) * zu3_ms(jk) END DO END DO END DO ! east Gibraltar deeper vertical sum of transport* S,T DO jj = mj0(102), mj1(102) DO ji = mi0(141), mi1(141) zsumt2 = tn(ji, jj,21) * e2u(ji-1, jj) * fse3u(ji-1, jj,21) * zu3_ms(21) zsums2 = sn(ji, jj,21) * e2u(ji-1, jj) * fse3u(ji-1, jj,21) * zu3_ms(21) END DO END DO ! west Gibraltar deeper vertical sum of transport* S,T DO jk = 21, 22 DO jj = mj0(101), mj1(101) DO ji = mi0(139), mi1(139) zsumt3 = zsumt3 + tn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk) zsums3 = zsums3 + sn(ji, jj,jk) * e2u(ji, jj) * fse3u(ji, jj,jk) * zu1_ms(jk) END DO END DO END DO ! Total transport = 0. zsumt4 = zsumt2 + zsumt1 - zsumt - zsumt3 zsums4 = zsums2 + zsums1 - zsums - zsums3 ! Temperature and Salinity at West gibraltar , Level 22 DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zt = zsumt4 / ( zu2_ms(22) * e2u(ji-1, jj) * fse3u(ji-1, jj, 22) ) zs = zsums4 / ( zu2_ms(22) * e2u(ji-1, jj) * fse3u(ji-1, jj, 22) ) END DO END DO ! New Temperature and Salinity trend at West Gibraltar ! ---------------------------------------------------- ! south point DO jk = 1, 22 DO jj = mj0(101), mj1(101) DO ji = mi0(139), mi1(139) zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk) zsu = e2u(ji, jj) * fse3u(ji, jj,jk) ta(ji, jj,jk) = ta(ji, jj,jk) - ( 1. / zvt ) * zsu * zu1_ms(jk) * tn(ji, jj,jk) sa(ji, jj,jk) = sa(ji, jj,jk) - ( 1. / zvt ) * zsu * zu1_ms(jk) * sn(ji, jj,jk) END DO END DO END DO ! north point DO jk = 15, 20 DO jj = mj0(102), mj1(102) DO ji = mi0(139), mi1(139) zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk) zsu = e2u(ji, jj) * fse3u(ji, jj,jk) ta(ji, jj,jk) = ta(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * tn(ji, jj-1,jk) sa(ji, jj,jk) = sa(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * sn(ji, jj-1,jk) END DO END DO END DO ! Gibraltar outflow, north point deeper jk = 22 DO jj = mj0(102), mj1(102) DO ji = mi0(139), mi1(139) zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk) zsu = e2u(ji, jj) * fse3u(ji, jj,jk) ta(ji, jj,jk) = ta(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * zt sa(ji, jj,jk) = sa(ji, jj,jk) - ( 1. / zvt ) * zsu * zu2_ms(jk) * zs END DO END DO ! New Temperature and Salinity at East Gibraltar ! ---------------------------------------------- ! surface DO jk = 1, 14 DO jj = mj0(102), mj1(102) DO ji = mi0(141), mi1(141) zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk) zsu = e2u(ji-1, jj) * fse3u(ji-1, jj,jk) ta(ji, jj,jk) = ta(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * tn(ji-2, jj-1,jk) sa(ji, jj,jk) = sa(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * sn(ji-2, jj-1,jk) END DO END DO END DO ! deeper jk = 21 DO jj = mj0(102), mj1(102) DO ji = mi0(141), mi1(141) zvt = e1t(ji, jj) * e2t(ji, jj) * fse3t(ji, jj,jk) zsu = e2u(ji-1, jj) * fse3u(ji-1, jj,jk) ta(ji, jj,jk) = ta(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * tn(ji, jj,jk) sa(ji, jj,jk) = sa(ji, jj,jk) + ( 1. / zvt ) * zsu * zu3_ms(jk) * sn(ji, jj,jk) END DO END DO END SUBROUTINE tra_gibraltar SUBROUTINE tra_hormuz !!--------------------------------------------------------------------- !! *** ROUTINE tra_hormuz *** !! !! ** Purpose : Update the horizontal advective trend of tracers !! correction in Hormuz. !! !! ** Method : We impose transport at Hormuz . !! !! ** history : !! ! 02-11 (A. Bozec) Original code !! 8.5 ! 02-11 (A. Bozec) F90: Free form and module !!--------------------------------------------------------------------- !! * Local declarations INTEGER :: ji, jj, jk ! dummy loop indices REAL(wp) :: zsu, zvt !!--------------------------------------------------------------------- ! New trend at Hormuz strait ! -------------------------- DO jk = 1, 8 DO jj = mj0(94), mj1(94) DO ji = mi0(172), mi1(172) zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk) ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * tn(ji,jj,jk) sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * sn(ji,jj,jk) END DO END DO END DO DO jk = 16, 18 DO jj = mj0(94), mj1(94) DO ji = mi0(172), mi1(172) zvt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) zsu = e2u(ji-1,jj) * fse3u(ji-1,jj,jk) ta(ji,jj,jk) = ta(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * zthor(jk) sa(ji,jj,jk) = sa(ji,jj,jk) + ( 1. / zvt ) * zsu * zu_pg(jk) * zshor(jk) END DO END DO END DO END SUBROUTINE tra_hormuz SUBROUTINE tra_cla_init !!--------------------------------------------------------------------- !! *** ROUTINE tra_cla_init *** !! !! ** Purpose : Initialization of variables !! !! ** history : !! 9.0 ! 02-11 (A. Bozec) Original code !!--------------------------------------------------------------------- !! * Local declarations INTEGER :: ji, jj, jk ! dummy loop indices !!--------------------------------------------------------------------- ! Control print ! ------------- IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) 'tra_cla_init : cross land advection on tracer ' IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' ! Initialization at Bab el Mandeb ! ------------------------------- ! imposed transport zisw_rs = 0.4e6 ! inflow surface water zurw_rs = 0.2e6 ! upper recirculation water !!Alex zbrw_rs = 1.2e6 ! bottom recirculation water zbrw_rs = 0.5e6 ! bottom recirculation water ! initialization of the velocity at Bab el Mandeb zu1_rs_i(:) = 0.e0 ! velocity profile at 161,88 South point zu2_rs_i(:) = 0.e0 ! velocity profile at 161,87 North point zu3_rs_i(:) = 0.e0 ! velocity profile at 160,88 East point ! velocity profile at 161,88 East Bab el Mandeb North point ! we imposed zisw_rs + EMP above the Red Sea DO jk = 1, 8 DO jj = mj0(88), mj1(88) DO ji = mi0(160), mi1(160) zu1_rs_i(jk) = -( zisw_rs / 8. ) / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) END DO END DO END DO ! recirculation water DO jj = mj0(88), mj1(88) DO ji = mi0(160), mi1(160) zu1_rs_i(20) = -( zurw_rs ) / ( e2u(ji,jj) * fse3u(ji,jj,20) ) zu1_rs_i(21) = -( zbrw_rs - zurw_rs ) / ( e2u(ji,jj) * fse3u(ji,jj,21) ) END DO END DO ! velocity profile at 161,87 East Bab el Mandeb South point DO jj = mj0(87), mj1(87) DO ji = mi0(160), mi1(160) zu2_rs_i(21) = ( zbrw_rs + zisw_rs ) / ( e2u(ji,jj) * fse3u(ji,jj,21) ) END DO END DO ! velocity profile at 161, 88 West Bab el Mandeb ! we imposed zisw_rs + EMP above the Red Sea DO jk = 1, 10 DO jj = mj0(88), mj1(88) DO ji = mi0(160), mi1(160) zu3_rs_i(jk) = ( zisw_rs / 10. ) / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) END DO END DO END DO ! deeper DO jj = mj0(88), mj1(88) DO ji = mi0(160), mi1(160) zu3_rs_i(16) = - zisw_rs /( e1v(ji,jj) * fse3v(ji,jj,16) ) END DO END DO ! Initialization at Gibraltar ! --------------------------- ! imposed transport zisw_ms = 0.8e6 ! atlantic-mediterranean water zmrw_ms = 0.7e6 ! middle recirculation water zurw_ms = 2.5e6 ! upper recirculation water zbrw_ms = 3.5e6 ! bottom recirculation water ! initialization of the velocity zu1_ms_i(:) = 0.e0 ! velocity profile at 139,101 South point zu2_ms_i(:) = 0.e0 ! velocity profile at 139,102 North point zu3_ms_i(:) = 0.e0 ! velocity profile at 141,102 East point ! velocity profile at 139,101 South point DO jk = 1, 14 DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu1_ms_i(jk) = ( zisw_ms / 14. ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,jk)) END DO END DO END DO ! middle recirculation ( uncounting in the balance ) DO jk = 15, 20 DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu1_ms_i(jk) = ( zmrw_ms / 6. ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,jk) ) END DO END DO END DO DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu1_ms_i(21) = ( zurw_ms ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,21) ) zu1_ms_i(22) = ( zbrw_ms - zurw_ms ) / ( e2u(ji-1, jj-1) * fse3u(ji-1, jj-1,22) ) END DO END DO ! velocity profile at 139,102 North point ! middle recirculation ( uncounting in the balance ) DO jk = 15, 20 DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu2_ms_i(jk) = -( zmrw_ms / 6. ) / ( e2u(ji-1, jj) * fse3u(ji-1, jj,jk) ) END DO END DO END DO DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu2_ms_i(22) = -( zisw_ms + zbrw_ms ) / ( e2u(ji-1, jj) * fse3u(ji-1, jj,22) ) END DO END DO ! profile at East Gibraltar ! velocity profile at 141,102 DO jk = 1, 14 DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu3_ms_i(jk) = ( zisw_ms / 14. ) / ( e2u(ji, jj) * fse3u(ji, jj,jk) ) END DO END DO END DO ! deeper DO jj = mj0(102), mj1(102) DO ji = mi0(140), mi1(140) zu3_ms_i(21) = -zisw_ms / ( e2u(ji, jj) * fse3u(ji, jj,21) ) END DO END DO ! Initialization at Hormuz ! ------------------------ ! imposed transport zisw_pg = 4. * 0.25e6 ! surface and bottom water ! initialization of the velocity zu_pg(:) = 0.e0 ! velocity profile at 139,101 South point ! Velocity profile DO jk = 1, 8 DO jj = mj0(94), mj1(94) DO ji = mi0(172), mi1(172) zu_pg(jk) = -( zisw_pg / 8. ) / ( e2u(ji-1,jj) * fse3u(ji-1,jj,jk) ) END DO END DO END DO DO jk = 16, 18 DO jj = mj0(94), mj1(94) DO ji = mi0(172), mi1(172) zu_pg(jk) = ( zisw_pg / 3. ) / ( e2u(ji-1,jj) * fse3u(ji-1,jj,jk) ) END DO END DO END DO ! Temperature and Salinity at Hormuz zthor(:) = 0.e0 zshor(:) = 0.e0 zthor(16) = 18.4 zshor(16) = 36.27 ! zthor(17) = 17.8 zshor(17) = 36.4 ! zthor(18) = 16. zshor(18) = 36.27 END SUBROUTINE tra_cla_init #else !!---------------------------------------------------------------------- !! Default option NO cross land advection !!---------------------------------------------------------------------- USE in_out_manager ! I/O manager CONTAINS SUBROUTINE tra_cla( kt ) INTEGER, INTENT(in) :: kt ! ocean time-step indice IF( kt == nit000 .AND. lwp ) THEN WRITE(numout,*) WRITE(numout,*) 'tra_cla : No use of cross land advection' WRITE(numout,*) '~~~~~~~' ENDIF END SUBROUTINE tra_cla #endif !!====================================================================== END MODULE cla