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

source: trunk/NEMO/OPA_SRC/cla_dynspg.F90 @ 3

Last change on this file since 3 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: 8.0 KB
Line 
1MODULE cla_dynspg
2   !!----------------------------------------------------------------------
3   !!                 ***  dynspg_freesurf_cstvol.h90  ***
4   !!----------------------------------------------------------------------
5   !!   dyn_spg      : update the momentum trend with the surface pressure
6   !!                  gradient in the free surface constant volume case
7   !!                  with vector optimization
8   !!----------------------------------------------------------------------
9   !! * Modules used
10   USE oce             ! ocean dynamics and tracers
11   USE dom_oce         ! ocean space and time domain
12   USE trdtra_oce     ! ocean active tracer   trend
13   USE trddyn_oce     ! ocean active dynamics trend
14   USE zdf_oce         ! ocean vertical physics
15   USE obc_oce         ! Lateral open boundary condition
16   USE sol_oce         ! solver variables
17   USE phycst          ! physical constants
18   USE ocesbc          ! ocean surface boundary condition (fluxes)
19   USE flxrnf          ! ???
20   USE solpcg          ! preconditionned conjugate gradient solver
21   USE solsor          ! Successive Over-relaxation solver
22   USE solfet          ! FETI solver
23   USE obcdyn          ! ocean open boundary condition (obc_dyn routines)
24   USE obcvol          ! ocean open boundary condition (obc_vol routines)
25   USE in_out_manager  ! I/O manager
26   USE lib_mpp         ! ???
27   USE lbclnk          ! ???
28
29   IMPLICIT NONE
30   PRIVATE
31
32   !! * Accessibility
33   PUBLIC dyn_spg_cla   ! routine called by step.F90
34
35   !! * Substitutions
36#  include "domzgr_substitute.h90"
37#  include "vectopt_loop_substitute.h90"
38   !!----------------------------------------------------------------------
39   !!   OPA 9.0 , LODYC-IPSL  (2003)
40   !!----------------------------------------------------------------------
41
42CONTAINS
43
44   SUBROUTINE dyn_spg_cla( kt ) 
45      !!----------------------------------------------------------------------
46      !!              ***  routine dyn_spg_cross_land  ***
47      !!
48      !! ** Purpose :
49      !!
50      !! ** Method :
51      !!
52      !! ** Action :
53      !!
54      !! History :
55      !!        !         (A. Bozec)  Original code
56      !!   8.5  !  02-11  (A. Bozec)  F90: Free form and module
57      !!---------------------------------------------------------------------
58      !! * Arguments
59      INTEGER, INTENT( in ) ::   kt           ! ocean time-step
60      !! * Local declarations
61      INTEGER ::   ji, jj, jk                 ! dummy loop indices
62      REAL(wp) ::    &   
63         zempmed, zempred,   &                ! EMP on Med Sea ans Red Sea
64         zwei,   &                            !             
65         zisw_rs, zurw_rs, zbrw_rs,      &    ! imposed transport Red sea
66         zisw_ms, zurw_ms, zbrw_ms, zmrw_ms   ! imposed transport Med Sea
67      !!----------------------------------------------------------------------
68
69      ! Different velocities for straits ( Gibraltar, Bab el Mandeb...)
70         
71      ! Control print
72      ! -------------
73      IF( kt == nit000 ) THEN
74         IF(lwp) WRITE(numout,*)
75         IF(lwp) WRITE(numout,*) 'dynspg_cross_land : cross land advection on surface '
76         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~   pressure '
77         IF(lwp) WRITE(numout,*) ' '
78      ENDIF
79
80      ! EMP on Mediterranean Sea and Red Sea
81      ! ------------------------------------
82      ! compute the emp in Mediterranean Sea
83      zempmed = 0.e0
84      zwei = 0.e0
85      DO jj = mj0(96), mj1(110)
86         DO ji = mi0(141),mi1(181)
87            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj)
88            zempmed = zempmed + emp(ji,jj) * zwei
89         END DO
90      END DO
91
92      ! mpp
93# if defined key_mpp
94      CALL mpp_sum( zempmed )
95# endif
96
97      ! minus 2 points in Red Sea and 3 in Atlantic
98      DO jj = mj0(96), mj1(96)
99         DO ji = mi0(148),mi1(148)
100            zempmed = zempmed - emp(ji  ,jj) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   &
101               &              - emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)   
102         END DO
103      END DO
104      ! we convert in m3
105      zempmed = zempmed * 1.e-3
106
107      ! compute the emp in Red Sea   
108      zempred = 0.e0
109      zwei = 0.e0
110      DO jj = mj0(87), mj1(96)
111         DO ji = mi0(148), mi1(160) 
112            zwei      = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj)
113            zempred   = zempred + emp(ji,jj) * zwei
114         END DO
115      END DO
116
117      ! mpp
118# if defined key_mpp
119      CALL mpp_sum( zempred )
120# endif
121
122      ! we convert in m3
123      zempred = zempred * 1.e-3
124
125      ! New Transport at Bab el Mandeb and Gibraltar
126      ! --------------------------------------------
127
128      ! imposed transport at Bab el Mandeb
129      zisw_rs = 0.4e6        ! inflow surface water
130      zurw_rs = 0.2e6        ! upper recirculation water
131!!Alex      zbrw_rs = 1.2e6        ! bottom  recirculation water
132      zbrw_rs = 0.5e6        ! bottom  recirculation water
133
134      ! imposed transport at Gibraltar
135      zisw_ms  = 0.8e6          ! atlantic-mediterranean  water
136      zmrw_ms  = 0.7e6          ! middle recirculation water
137      zurw_ms  = 2.5e6          ! upper  recirculation water
138      zbrw_ms  = 3.5e6          ! bottom recirculation water
139
140      ! Different velocities for straits ( Gibraltar, Bab el Mandeb )
141      ! -------------------------------------------------------------
142
143      ! Bab el Mandeb
144      ! -------------
145      DO jj = mj0(88), mj1(88) 
146         DO ji = mi0(160), mi1(160) 
147            ua(ji,jj  ,: ) = 0.e0  !  North East Bab el Mandeb
148            ua(ji,jj-1,: ) = 0.e0  !  South East Bab el Mandeb
149         END DO
150      END DO
151 
152      ! 160,87 north point Bab el Mandeb
153      ! surface
154      DO jk = 1,  8                                     
155         DO jj = mj0(88), mj1(88) 
156            DO ji = mi0(160), mi1(160) 
157               ua(ji, jj,jk) = -( ( zisw_rs + zempred ) / 8. ) / ( e2u(ji, jj) * fse3t(ji, jj,jk) )     
158            END DO
159         END DO
160      END DO
161
162      ! deeper
163      DO jj = mj0(88), mj1(88) 
164         DO ji = mi0(160), mi1(160) 
165            ua(ji, jj,21) = - zbrw_rs / ( e2u(ji, jj) * fse3t(ji, jj,21) )
166         END DO
167      END DO
168
169      ! 160,87 south point Bab el Mandeb
170      DO jj = mj0(87), mj1(87) 
171         DO ji = mi0(160), mi1(160) 
172            ua(ji, jj,21) =  ( zisw_rs + zbrw_rs ) / ( e2u(ji,jj )*fse3t(ji, jj,21) )     
173         END DO
174      END DO
175
176      ! Gibraltar
177      ! ---------
178
179      ! initialisation of velocity at concerned points
180      DO jj = mj0(101), mj1(101) 
181         DO ji = mi0(139), mi1(139) 
182            ua(ji,jj  ,: ) = 0.e0  !  South West Gibraltar
183            ua(ji,jj+1,: ) = 0.e0  !  North West Gibraltar
184         END DO
185      END DO
186
187      ! 139, 101 south point in Gibraltar
188      ! surface
189      DO jk = 1, 14                     
190         DO jj = mj0(101), mj1(101) 
191            DO ji = mi0(139), mi1(139) 
192               ua(ji,jj,jk) =  ( ( zisw_ms + zempmed ) / 14. ) / ( e2u(ji,jj) * fse3t(ji,jj,jk) ) 
193            END DO
194         END DO
195      END DO
196
197      ! middle circulation
198      DO jk = 15, 20                     
199         DO jj = mj0(101), mj1(101) 
200            DO ji = mi0(139), mi1(139) 
201               ua(ji,jj,jk) =  ( zmrw_ms / 6. ) / ( e2u(ji,jj) * fse3t(ji,jj,jk) ) 
202            END DO
203         END DO
204      END DO
205
206      ! deeper
207      DO jj = mj0(101), mj1(101) 
208         DO ji = mi0(139), mi1(139) 
209            ua(ji,jj,21) =             zurw_ms   / ( e2u(ji,jj) * fse3t(ji,jj,21) )
210            ua(ji,jj,22) = ( zbrw_ms - zurw_ms ) / ( e2u(ji,jj) * fse3t(ji,jj,22) )
211         END DO
212      END DO
213
214      ! 139,102 north point in Gibraltar
215      DO jk = 15, 20                     
216         DO jj = mj0(102), mj1(102) 
217            DO ji = mi0(139), mi1(139) 
218               ua(ji,jj,jk) = -( zmrw_ms / 6. ) / ( e2u(ji,jj) * fse3t(ji,jj,jk) ) 
219            END DO
220         END DO
221      END DO
222
223      ! deeper
224      DO jj = mj0(102), mj1(102) 
225         DO ji = mi0(139), mi1(139) 
226            ua(ji,jj,22) = -( zisw_ms + zbrw_ms ) / ( e2u(ji,jj) * fse3t(ji,jj,22) )
227         END DO
228      END DO
229
230   END SUBROUTINE dyn_spg_cla
231END MODULE cla_dynspg
Note: See TracBrowser for help on using the repository browser.