Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/OBC
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- Location:
- trunk/NEMOGCM/NEMO/OPA_SRC/OBC
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obc_oce.F90
r2528 r2715 4 4 !! Open Boundary Cond. : define related variables 5 5 !!============================================================================== 6 !! history : OPA ! 1991-01 (CLIPPER) Original code 7 !! NEMO 1.0 ! 2002-02 (C. Talandier) modules, F90 8 !!---------------------------------------------------------------------- 9 #if defined key_obc 6 10 !!---------------------------------------------------------------------- 7 11 !! 'key_obc' : Open Boundary Condition 8 12 !!---------------------------------------------------------------------- 9 !! history :10 !! 8.0 01/91 (CLIPPER) Original code11 !! 8.5 06/02 (C. Talandier) modules12 !! 06/04 (F. Durand) ORCA2_ZIND config13 !!14 !!----------------------------------------------------------------------15 !! * Modules used16 13 USE par_oce ! ocean parameters 17 14 USE obc_par ! open boundary condition parameters 18 15 19 #if defined key_obc20 21 16 IMPLICIT NONE 22 17 PUBLIC 18 19 PUBLIC obc_oce_alloc ! called by obcini.F90 module 23 20 24 21 !!---------------------------------------------------------------------- … … 26 23 !!---------------------------------------------------------------------- 27 24 ! 28 ! !!* Namelist namobc: open boundary condition *25 ! !!* Namelist namobc: open boundary condition * 29 26 INTEGER :: nn_obcdta = 0 !: = 0 use the initial state as obc data 30 27 ! ! = 1 read obc data in obcxxx.dta files … … 63 60 !!General variables for open boundaries: 64 61 !!-------------------------------------- 65 LOGICAL :: & !: 66 lfbceast, lfbcwest, & !: logical flag for a fixed East and West open boundaries 67 lfbcnorth, lfbcsouth !: logical flag for a fixed North and South open boundaries 68 ! ! These logical flags are set to 'true' if damping time 69 ! ! scale are set to 0 in the namelist, for both inflow and outflow). 62 LOGICAL :: lfbceast, lfbcwest !: logical flag for a fixed East and West open boundaries 63 LOGICAL :: lfbcnorth, lfbcsouth !: logical flag for a fixed North and South open boundaries 64 ! ! These logical flags are set to 'true' if damping time 65 ! ! scale are set to 0 in the namelist, for both inflow and outflow). 70 66 71 67 REAL(wp), PUBLIC :: obcsurftot !: Total lateral surface of open boundaries 72 68 73 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !:69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: & !: 74 70 obctmsk, & !: mask array identical to tmask, execpt along OBC where it is set to 0 75 71 ! ! it used to calculate the cumulate flux E-P in the obcvol.F90 routine … … 87 83 INTEGER :: nje1m2, nje0m1 !: do loop index in mpp case for jpjefm1-1,jpjed 88 84 89 REAL(wp), DIMENSION(jpj) :: & !:85 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: & !: 90 86 sshfoe, & !: now climatology of the east boundary sea surface height 91 87 ubtfoe,vbtfoe !: now climatology of the east boundary barotropic transport 92 88 93 REAL(wp), DIMENSION(jpj,jpk) :: & !:89 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: & !: 94 90 ufoe, vfoe, & !: now climatology of the east boundary velocities 95 91 tfoe, sfoe, & !: now climatology of the east boundary temperature and salinity … … 97 93 ! ! in the obcdyn.F90 routine 98 94 99 REAL(wp), DIMENSION(jpi,jpj) :: sshfoe_b!: east boundary ssh correction averaged over the barotropic loop95 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshfoe_b !: east boundary ssh correction averaged over the barotropic loop 100 96 ! ! (if Flather's algoritm applied at open boundary) 101 97 … … 103 99 !! Arrays for radiative East OBC: 104 100 !!------------------------------- 105 REAL(wp), DIMENSION(jpj,jpk,3,3) :: uebnd, vebnd !: baroclinic u & v component of the velocity over 3 rows101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: uebnd, vebnd !: baroclinic u & v component of the velocity over 3 rows 106 102 ! ! and 3 time step (now, before, and before before) 107 REAL(wp), DIMENSION(jpj,jpk,2,2) :: tebnd, sebnd !: East boundary temperature and salinity over 2 rows103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tebnd, sebnd !: East boundary temperature and salinity over 2 rows 108 104 ! ! and 2 time step (now and before) 109 REAL(wp), DIMENSION(jpj,jpk) :: u_cxebnd, v_cxebnd !: Zonal component of the phase speed ratio computed with105 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_cxebnd, v_cxebnd !: Zonal component of the phase speed ratio computed with 110 106 ! ! radiation of u and v velocity (respectively) at the 111 107 ! ! east open boundary (u_cxebnd = cx rdt ) 112 REAL(wp), DIMENSION(jpj,jpk) :: uemsk, vemsk, temsk !: 2D mask for the East OB108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: uemsk, vemsk, temsk !: 2D mask for the East OB 113 109 114 110 ! Note that those arrays are optimized for mpp case … … 124 120 INTEGER :: njw1m2, njw0m1 !: do loop index in mpp case for jpjwfm2,jpjwd 125 121 126 REAL(wp), DIMENSION(jpj) :: & !:122 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: & !: 127 123 sshfow, & !: now climatology of the west boundary sea surface height 128 124 ubtfow,vbtfow !: now climatology of the west boundary barotropic transport 129 125 130 REAL(wp), DIMENSION(jpj,jpk) :: & !:126 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: & !: 131 127 ufow, vfow, & !: now climatology of the west velocities 132 128 tfow, sfow, & !: now climatology of the west temperature and salinity … … 134 130 ! ! in the obcdyn.F90 routine 135 131 136 REAL(wp), DIMENSION(jpi,jpj) :: sshfow_b !: west boundary ssh correction averaged over the barotropic loop132 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshfow_b !: west boundary ssh correction averaged over the barotropic loop 137 133 ! ! (if Flather's algoritm applied at open boundary) 138 134 … … 140 136 !! Arrays for radiative West OBC 141 137 !!------------------------------- 142 REAL(wp), DIMENSION(jpj,jpk,3,3) :: uwbnd, vwbnd !: baroclinic u & v components of the velocity over 3 rows138 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: uwbnd, vwbnd !: baroclinic u & v components of the velocity over 3 rows 143 139 ! ! and 3 time step (now, before, and before before) 144 REAL(wp), DIMENSION(jpj,jpk,2,2) :: twbnd, swbnd !: west boundary temperature and salinity over 2 rows and140 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: twbnd, swbnd !: west boundary temperature and salinity over 2 rows and 145 141 ! ! 2 time step (now and before) 146 REAL(wp), DIMENSION(jpj,jpk) :: u_cxwbnd, v_cxwbnd !: Zonal component of the phase speed ratio computed with142 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_cxwbnd, v_cxwbnd !: Zonal component of the phase speed ratio computed with 147 143 ! ! radiation of zonal and meridional velocity (respectively) 148 144 ! ! at the west open boundary (u_cxwbnd = cx rdt ) 149 REAL(wp), DIMENSION(jpj,jpk) :: uwmsk, vwmsk, twmsk !: 2D mask for the West OB145 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: uwmsk, vwmsk, twmsk !: 2D mask for the West OB 150 146 151 147 ! Note that those arrays are optimized for mpp case … … 162 158 INTEGER :: njn0m1, njn1m1 !: do loop index in mpp case for jpnob-1 163 159 164 REAL(wp), DIMENSION(jpi) :: & !:160 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: & !: 165 161 sshfon, & !: now climatology of the north boundary sea surface height 166 162 ubtfon,vbtfon !: now climatology of the north boundary barotropic transport 167 163 168 REAL(wp), DIMENSION(jpi,jpk) :: & !:164 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: & !: 169 165 ufon, vfon, & !: now climatology of the north boundary velocities 170 166 tfon, sfon, & !: now climatology of the north boundary temperature and salinity … … 172 168 ! ! in yhe obcdyn.F90 routine 173 169 174 REAL(wp), DIMENSION(jpi,jpj) :: sshfon_b !: north boundary ssh correction averaged over the barotropic loop170 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshfon_b !: north boundary ssh correction averaged over the barotropic loop 175 171 ! ! (if Flather's algoritm applied at open boundary) 176 172 … … 178 174 !! Arrays for radiative North OBC 179 175 !!-------------------------------- 180 REAL(wp), DIMENSION(jpi,jpk,3,3) :: unbnd, vnbnd !: baroclinic u & v components of the velocity over 3176 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: unbnd, vnbnd !: baroclinic u & v components of the velocity over 3 181 177 ! ! rows and 3 time step (now, before, and before before) 182 REAL(wp), DIMENSION(jpi,jpk,2,2) :: tnbnd, snbnd !: north boundary temperature and salinity over178 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tnbnd, snbnd !: north boundary temperature and salinity over 183 179 ! ! 2 rows and 2 time step (now and before) 184 REAL(wp), DIMENSION(jpi,jpk) :: u_cynbnd, v_cynbnd !: Meridional component of the phase speed ratio compu-180 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_cynbnd, v_cynbnd !: Meridional component of the phase speed ratio compu- 185 181 ! ! ted with radiation of zonal and meridional velocity 186 182 ! ! (respectively) at the north OB (u_cynbnd = cx rdt ) 187 REAL(wp), DIMENSION(jpi,jpk) :: unmsk, vnmsk, tnmsk !: 2D mask for the North OB183 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: unmsk, vnmsk, tnmsk !: 2D mask for the North OB 188 184 189 185 ! Note that those arrays are optimized for mpp case … … 199 195 INTEGER :: njs0p1, njs1p1 !: do loop index in mpp case for jpsob+1 200 196 201 REAL(wp), DIMENSION(jpi) :: & !:197 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: & !: 202 198 sshfos, & !: now climatology of the south boundary sea surface height 203 199 ubtfos,vbtfos !: now climatology of the south boundary barotropic transport 204 200 205 REAL(wp), DIMENSION(jpi,jpk) :: & !:201 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: & !: 206 202 ufos, vfos, & !: now climatology of the south boundary velocities 207 203 tfos, sfos, & !: now climatology of the south boundary temperature and salinity … … 209 205 ! ! in the obcdyn.F90 routine 210 206 211 REAL(wp), DIMENSION(jpi,jpj) :: sshfos_b !: south boundary ssh correction averaged over the barotropic loop207 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshfos_b !: south boundary ssh correction averaged over the barotropic loop 212 208 ! ! (if Flather's algoritm applied at open boundary) 213 209 … … 215 211 !! Arrays for radiative South OBC (computed by the forward time step in dynspg) 216 212 !!-------------------------------- 217 REAL(wp), DIMENSION(jpi,jpk,3,3) :: usbnd, vsbnd !: baroclinic u & v components of the velocity over 3213 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: usbnd, vsbnd !: baroclinic u & v components of the velocity over 3 218 214 ! ! rows and 3 time step (now, before, and before before) 219 REAL(wp), DIMENSION(jpi,jpk,2,2) :: tsbnd, ssbnd !: south boundary temperature and salinity over215 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tsbnd, ssbnd !: south boundary temperature and salinity over 220 216 ! ! 2 rows and 2 time step (now and before) 221 REAL(wp), DIMENSION(jpi,jpk) :: u_cysbnd, v_cysbnd !: Meridional component of the phase speed ratio217 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_cysbnd, v_cysbnd !: Meridional component of the phase speed ratio 222 218 ! ! computed with radiation of zonal and meridional velocity 223 219 ! ! (repsectively) at the south OB (u_cynbnd = cx rdt ) 224 REAL(wp), DIMENSION(jpi,jpk) :: usmsk, vsmsk, tsmsk !: 2D mask for the South OB 225 226 #else 227 !!---------------------------------------------------------------------- 228 !! Default option : Empty module 229 !!---------------------------------------------------------------------- 230 #endif 220 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: usmsk, vsmsk, tsmsk !: 2D mask for the South OB 231 221 232 222 !!---------------------------------------------------------------------- … … 234 224 !! $Id$ 235 225 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 226 !!---------------------------------------------------------------------- 227 CONTAINS 228 229 INTEGER FUNCTION obc_oce_alloc() 230 !!---------------------------------------------------------------------- 231 !! *** FUNCTION obc_oce_alloc *** 232 !!---------------------------------------------------------------------- 233 234 ALLOCATE( & 235 !! East open boundary 236 obctmsk(jpi,jpj), obcumask(jpi,jpj), obcvmask(jpi,jpj), & 237 sshfoe(jpjed:jpjef), ubtfoe(jpjed:jpjef), vbtfoe(jpjed:jpjef), & 238 ufoe(jpj,jpk), vfoe(jpj,jpk), tfoe(jpj,jpk), sfoe(jpj,jpk), & 239 uclie(jpj,jpk), sshfoe_b(jpjed:jpjef,jpj), & 240 !! Arrays for radiative East OBC 241 uebnd(jpj,jpk,3,3), vebnd(jpj,jpk,3,3) , & 242 tebnd(jpj,jpk,2,2), sebnd(jpj,jpk,2,2), & 243 u_cxebnd(jpj,jpk), v_cxebnd(jpj,jpk), & 244 uemsk(jpj,jpk), vemsk(jpj,jpk), temsk(jpj,jpk), & 245 !! West open boundary 246 sshfow(jpjwd:jpjwf), ubtfow(jpjwd:jpjwf), vbtfow(jpjwd:jpjwf), & 247 ufow(jpj,jpk), vfow(jpj,jpk), tfow(jpj,jpk), & 248 sfow(jpj,jpk), ucliw(jpj,jpk), sshfow_b(jpjwd:jpjwf,jpj), & 249 !! Arrays for radiative West OBC 250 uwbnd(jpj,jpk,3,3), vwbnd(jpj,jpk,3,3), & 251 twbnd(jpj,jpk,2,2), swbnd(jpj,jpk,2,2), & 252 u_cxwbnd(jpj,jpk), v_cxwbnd(jpj,jpk), & 253 uwmsk(jpj,jpk), vwmsk(jpj,jpk), twmsk(jpj,jpk), & 254 !! North open boundary 255 sshfon(jpind:jpinf), ubtfon(jpind:jpinf), vbtfon(jpind:jpinf), & 256 ufon(jpi,jpk), vfon(jpi,jpk), tfon(jpi,jpk), & 257 sfon(jpi,jpk), vclin(jpi,jpk), sshfon_b(jpind:jpinf,jpj), & 258 !! Arrays for radiative North OBC 259 unbnd(jpi,jpk,3,3), vnbnd(jpi,jpk,3,3), & 260 tnbnd(jpi,jpk,2,2), snbnd(jpi,jpk,2,2), & 261 u_cynbnd(jpi,jpk), v_cynbnd(jpi,jpk), & 262 unmsk(jpi,jpk), vnmsk(jpi,jpk), tnmsk (jpi,jpk), & 263 !! South open boundary 264 sshfos(jpisd:jpisf), ubtfos(jpisd:jpisf), vbtfos(jpisd:jpisf), & 265 ufos(jpi,jpk), vfos(jpi,jpk), tfos(jpi,jpk), & 266 sfos(jpi,jpk), vclis(jpi,jpk), & 267 sshfos_b(jpisd:jpisf,jpj), & 268 !! Arrays for radiative South OBC 269 usbnd(jpi,jpk,3,3), vsbnd(jpi,jpk,3,3), & 270 tsbnd(jpi,jpk,2,2), ssbnd(jpi,jpk,2,2), & 271 u_cysbnd(jpi,jpk), v_cysbnd(jpi,jpk), & 272 usmsk(jpi,jpk), vsmsk(jpi,jpk), tsmsk(jpi,jpk), & 273 !! 274 STAT=obc_oce_alloc ) 275 ! 276 END FUNCTION obc_oce_alloc 277 278 #else 279 !!---------------------------------------------------------------------- 280 !! Default option Empty module No OBC 281 !!---------------------------------------------------------------------- 282 #endif 283 236 284 !!====================================================================== 237 285 END MODULE obc_oce -
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obc_par.F90
r2528 r2715 4 4 !! Open Boundary Cond. : define related parameters 5 5 !!============================================================================== 6 !! history : OPA ! 1991-01 (CLIPPER) Original code 7 !! NEMO 1.0 ! 2002-04 (C. Talandier) modules 8 !! - ! 2004/06 (F. Durand) jptobc is defined as a parameter 9 !!---------------------------------------------------------------------- 6 10 #if defined key_obc 7 11 !!---------------------------------------------------------------------- 8 12 !! 'key_obc' : Open Boundary Condition 9 13 !!---------------------------------------------------------------------- 10 !! history :11 !! 8.0 01/91 (CLIPPER) Original code12 !! 9.0 06/02 (C. Talandier) modules13 !! 06/04 (F. Durand) ORCA_R2_ZIND config14 !! 06/04 (F. Durand) jptobc is defined as a parameter,15 !! in order to allow time-dependent OBCs fields on input16 !!----------------------------------------------------------------------17 !! * Modules used18 14 USE par_oce ! ocean parameters 19 15 20 16 IMPLICIT NONE 21 17 PUBLIC 22 !!---------------------------------------------------------------------- 23 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 24 !! $Id$ 25 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 26 !!---------------------------------------------------------------------- 18 27 19 #if ! defined key_agrif 28 20 LOGICAL, PUBLIC, PARAMETER :: lk_obc = .TRUE. !: Ocean Boundary Condition flag … … 47 39 !! open boundary parameter 48 40 !!--------------------------------------------------------------------- 49 INTEGER, PARAMETER :: &!: time dimension of the BCS fields on input50 jptobc = 241 INTEGER, PARAMETER :: jptobc = 2 !: time dimension of the BCS fields on input 42 51 43 !! * EAST open boundary 52 LOGICAL, PARAMETER :: & !: 53 lp_obc_east = .FALSE. !: to active or not the East open boundary 54 INTEGER & 44 LOGICAL, PARAMETER :: lp_obc_east = .FALSE. !: to active or not the East open boundary 45 INTEGER & 55 46 #if !defined key_agrif 56 47 , PARAMETER & … … 64 55 65 56 !! * WEST open boundary 66 LOGICAL, PARAMETER :: & !: 67 lp_obc_west = .FALSE. !: to active or not the West open boundary 68 INTEGER & 57 LOGICAL, PARAMETER :: lp_obc_west = .FALSE. !: to active or not the West open boundary 58 INTEGER & 69 59 #if !defined key_agrif 70 60 , PARAMETER & … … 78 68 79 69 !! * NORTH open boundary 80 LOGICAL, PARAMETER :: & !: 81 lp_obc_north = .FALSE. !: to active or not the North open boundary 70 LOGICAL, PARAMETER :: lp_obc_north = .FALSE. !: to active or not the North open boundary 82 71 INTEGER & 83 72 #if !defined key_agrif … … 92 81 93 82 !! * SOUTH open boundary 94 LOGICAL, PARAMETER :: & !: 95 lp_obc_south = .FALSE. !: to active or not the South open boundary 83 LOGICAL, PARAMETER :: lp_obc_south = .FALSE. !: to active or not the South open boundary 96 84 INTEGER & 97 85 #if !defined key_agrif … … 105 93 jpisfm1 = jpisf-1 !: last ocean point " " 106 94 107 INTEGER, PARAMETER :: & !: 108 jpnic = 2700 !: maximum number of isolated coastlines points 95 INTEGER, PARAMETER :: jpnic = 2700 !: maximum number of isolated coastlines points 109 96 110 97 # endif … … 117 104 #endif 118 105 106 !!---------------------------------------------------------------------- 107 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 108 !! $Id$ 109 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 119 110 !!====================================================================== 120 111 END MODULE obc_par -
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obcdta.F90
r2528 r2715 4 4 !! Open boundary data : read the data for the open boundaries. 5 5 !!============================================================================== 6 !! History : OPA ! 1998-05 (J.M. Molines) Original code 7 !! 8.5 ! 2002-10 (C. Talandier, A-M. Treguier) Free surface, F90 8 !! NEMO 1.0 ! 2004-06 (F. Durand, A-M. Treguier) Netcdf BC files on input 9 !! 3.0 ! 2007-2008 (C. Langlais, P. Mathiot, J.M. Molines) high frequency boundaries data 10 !!------------------------------------------------------------------------------ 6 11 #if defined key_obc 7 12 !!------------------------------------------------------------------------------ … … 10 15 !! obc_dta : read u, v, t, s data along each open boundary 11 16 !!------------------------------------------------------------------------------ 12 !! * Modules used13 17 USE oce ! ocean dynamics and tracers 14 18 USE dom_oce ! ocean space and time domain … … 19 23 USE in_out_manager ! I/O logical units 20 24 USE lib_mpp ! distributed memory computing 21 USE dynspg_oce 25 USE dynspg_oce ! ocean: surface pressure gradient 22 26 USE ioipsl ! now only for ymds2ju function 23 27 USE iom ! … … 26 30 PRIVATE 27 31 28 !! * Accessibility 29 PUBLIC obc_dta ! routines called by step.F90 30 PUBLIC obc_dta_bt ! routines called by dynspg_ts.F90 31 32 !! * Shared module variables 33 REAL(wp), DIMENSION(2) :: zjcnes_obc ! 34 REAL(wp), DIMENSION(:), ALLOCATABLE :: ztcobc 32 PUBLIC obc_dta ! routine called by step.F90 33 PUBLIC obc_dta_bt ! routine called by dynspg_ts.F90 34 PUBLIC obc_dta_alloc ! function called by obcini.F90 35 36 REAL(wp), DIMENSION(2) :: zjcnes_obc ! 37 REAL(wp), DIMENSION(:), ALLOCATABLE :: ztcobc 35 38 REAL(wp) :: rdt_obc 36 39 REAL(wp) :: zjcnes … … 39 42 INTEGER :: itobce, itobcw, itobcs, itobcn, itobc_b ! number of time steps in OBC files 40 43 41 INTEGER :: & 42 ntobc , & !: where we are in the obc file 43 ntobc_b , & !: first record used 44 ntobc_a !: second record used 45 46 CHARACTER (len=40) :: & ! name of data files 47 cl_obc_eTS , cl_obc_eU, & 48 cl_obc_wTS , cl_obc_wU, & 49 cl_obc_nTS , cl_obc_nV, & 50 cl_obc_sTS , cl_obc_sV 51 52 # if defined key_dynspg_ts 44 INTEGER :: ntobc ! where we are in the obc file 45 INTEGER :: ntobc_b ! first record used 46 INTEGER :: ntobc_a ! second record used 47 48 CHARACTER (len=40) :: cl_obc_eTS, cl_obc_eU ! name of data files 49 CHARACTER (len=40) :: cl_obc_wTS, cl_obc_wU ! - - 50 CHARACTER (len=40) :: cl_obc_nTS, cl_obc_nV ! - - 51 CHARACTER (len=40) :: cl_obc_sTS, cl_obc_sV ! - - 52 53 53 ! bt arrays for interpolating time dependent data on the boundaries 54 INTEGER :: nt_m=0, ntobc_m55 REAL(wp), DIMENSION(jpj,0:jptobc) :: ubtedta, vbtedta, sshedta! East56 REAL(wp), DIMENSION(jpj,0:jptobc) :: ubtwdta, vbtwdta, sshwdta! West57 REAL(wp), DIMENSION(jpi,0:jptobc) :: ubtndta, vbtndta, sshndta! North58 REAL(wp), DIMENSION(jpi,0:jptobc) :: ubtsdta, vbtsdta, sshsdta! South54 INTEGER :: nt_m=0, ntobc_m 55 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubtedta, vbtedta, sshedta ! East 56 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubtwdta, vbtwdta, sshwdta ! West 57 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubtndta, vbtndta, sshndta ! North 58 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubtsdta, vbtsdta, sshsdta ! South 59 59 ! arrays used for interpolating time dependent data on the boundaries 60 REAL(wp), DIMENSION(jpj,jpk,0:jptobc) :: uedta, vedta, tedta, sedta ! East 61 REAL(wp), DIMENSION(jpj,jpk,0:jptobc) :: uwdta, vwdta, twdta, swdta ! West 62 REAL(wp), DIMENSION(jpi,jpk,0:jptobc) :: undta, vndta, tndta, sndta ! North 63 REAL(wp), DIMENSION(jpi,jpk,0:jptobc) :: usdta, vsdta, tsdta, ssdta ! South 64 # else 65 ! bt arrays for interpolating time dependent data on the boundaries 66 REAL(wp), DIMENSION(jpj,jptobc) :: ubtedta, vbtedta, sshedta ! East 67 REAL(wp), DIMENSION(jpj,jptobc) :: ubtwdta, vbtwdta, sshwdta ! West 68 REAL(wp), DIMENSION(jpi,jptobc) :: ubtndta, vbtndta, sshndta ! North 69 REAL(wp), DIMENSION(jpi,jptobc) :: ubtsdta, vbtsdta, sshsdta ! South 70 ! arrays used for interpolating time dependent data on the boundaries 71 REAL(wp), DIMENSION(jpj,jpk,jptobc) :: uedta, vedta, tedta, sedta ! East 72 REAL(wp), DIMENSION(jpj,jpk,jptobc) :: uwdta, vwdta, twdta, swdta ! West 73 REAL(wp), DIMENSION(jpi,jpk,jptobc) :: undta, vndta, tndta, sndta ! North 74 REAL(wp), DIMENSION(jpi,jpk,jptobc) :: usdta, vsdta, tsdta, ssdta ! South 75 # endif 76 LOGICAL, DIMENSION (jpj,jpk ) :: ltemsk=.TRUE., luemsk=.TRUE., lvemsk=.TRUE. ! boolean msks 77 LOGICAL, DIMENSION (jpj,jpk ) :: ltwmsk=.TRUE., luwmsk=.TRUE., lvwmsk=.TRUE. ! used for outliers 78 LOGICAL, DIMENSION (jpi,jpk ) :: ltnmsk=.TRUE., lunmsk=.TRUE., lvnmsk=.TRUE. ! checks 79 LOGICAL, DIMENSION (jpi,jpk ) :: ltsmsk=.TRUE., lusmsk=.TRUE., lvsmsk=.TRUE. 60 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uedta, vedta, tedta, sedta ! East 61 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uwdta, vwdta, twdta, swdta ! West 62 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: undta, vndta, tndta, sndta ! North 63 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: usdta, vsdta, tsdta, ssdta ! South 64 65 ! Masks set to .TRUE. after successful allocation below 66 LOGICAL , ALLOCATABLE, SAVE, DIMENSION(:,:) :: ltemsk, luemsk, lvemsk ! boolean msks 67 LOGICAL , ALLOCATABLE, SAVE, DIMENSION(:,:) :: ltwmsk, luwmsk, lvwmsk ! used for outliers 68 LOGICAL , ALLOCATABLE, SAVE, DIMENSION(:,:) :: ltnmsk, lunmsk, lvnmsk ! checks 69 LOGICAL , ALLOCATABLE, SAVE, DIMENSION(:,:) :: ltsmsk, lusmsk, lvsmsk 80 70 81 71 !! * Substitutions … … 85 75 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 86 76 !! $Id$ 87 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)77 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 88 78 !!---------------------------------------------------------------------- 89 90 79 CONTAINS 80 81 INTEGER FUNCTION obc_dta_alloc() 82 !!------------------------------------------------------------------- 83 !! *** ROUTINE obc_dta_alloc *** 84 !!------------------------------------------------------------------- 85 INTEGER :: ierr(2) 86 !!------------------------------------------------------------------- 87 # if defined key_dynspg_ts 88 ALLOCATE( & ! time-splitting : 0:jptobc 89 ! bt arrays for interpolating time dependent data on the boundaries 90 & ubtedta (jpj,0:jptobc) , vbtedta (jpj,0:jptobc) , sshedta (jpj,0:jptobc) , & 91 & ubtwdta (jpj,0:jptobc) , vbtwdta (jpj,0:jptobc) , sshwdta (jpj,0:jptobc) , & 92 & ubtndta (jpi,0:jptobc) , vbtndta (jpi,0:jptobc) , sshndta (jpi,0:jptobc) , & 93 & ubtsdta (jpi,0:jptobc) , vbtsdta (jpi,0:jptobc) , sshsdta (jpi,0:jptobc) , & 94 ! arrays used for interpolating time dependent data on the boundaries 95 & uedta(jpj,jpk,0:jptobc) , vedta(jpj,jpk,0:jptobc) , & 96 & tedta(jpj,jpk,0:jptobc) , sedta(jpj,jpk,0:jptobc) , & 97 & uwdta(jpj,jpk,0:jptobc) , vwdta(jpj,jpk,0:jptobc) , & 98 & twdta(jpj,jpk,0:jptobc) , swdta(jpj,jpk,0:jptobc) , & 99 & undta(jpi,jpk,0:jptobc) , vndta(jpi,jpk,0:jptobc) , & 100 & tndta(jpi,jpk,0:jptobc) , sndta(jpi,jpk,0:jptobc) , & 101 & usdta(jpi,jpk,0:jptobc) , vsdta(jpi,jpk,0:jptobc) , & 102 & tsdta(jpi,jpk,0:jptobc) , ssdta(jpi,jpk,0:jptobc) , STAT=ierr(1) ) 103 # else 104 ALLOCATE( & ! no time splitting : 1:jptobc 105 ! bt arrays for interpolating time dependent data on the boundaries 106 & ubtedta (jpj,jptobc) , vbtedta (jpj,jptobc) , sshedta (jpj,jptobc) , & 107 & ubtwdta (jpj,jptobc) , vbtwdta (jpj,jptobc) , sshwdta (jpj,jptobc) , & 108 & ubtndta (jpi,jptobc) , vbtndta (jpi,jptobc) , sshndta (jpi,jptobc) , & 109 & ubtsdta (jpi,jptobc) , vbtsdta (jpi,jptobc) , sshsdta (jpi,jptobc) , & 110 ! arrays used for interpolating time dependent data on the boundaries 111 & uedta(jpj,jpk,jptobc) , vedta(jpj,jpk,jptobc) , & 112 & tedta(jpj,jpk,jptobc) , sedta(jpj,jpk,jptobc) , & 113 & uwdta(jpj,jpk,jptobc) , vwdta(jpj,jpk,jptobc) , & 114 & twdta(jpj,jpk,jptobc) , swdta(jpj,jpk,jptobc) , & 115 & undta(jpi,jpk,jptobc) , vndta(jpi,jpk,jptobc) , & 116 & tndta(jpi,jpk,jptobc) , sndta(jpi,jpk,jptobc) , & 117 & usdta(jpi,jpk,jptobc) , vsdta(jpi,jpk,jptobc) , & 118 & tsdta(jpi,jpk,jptobc) , ssdta(jpi,jpk,jptobc) , STAT=ierr(1) ) 119 # endif 120 121 ALLOCATE( ltemsk(jpj,jpk) , luemsk(jpj,jpk) , lvemsk(jpj,jpk) , & 122 & ltwmsk(jpj,jpk) , luwmsk(jpj,jpk) , lvwmsk(jpj,jpk) , & 123 & ltnmsk(jpj,jpk) , lunmsk(jpj,jpk) , lvnmsk(jpj,jpk) , & 124 & ltsmsk(jpj,jpk) , lusmsk(jpj,jpk) , lvsmsk(jpj,jpk) , STAT=ierr(2) ) 125 126 obc_dta_alloc = MAXVAL( ierr ) 127 IF( lk_mpp ) CALL mpp_sum( obc_dta_alloc ) 128 129 IF( obc_dta_alloc == 0 ) THEN ! Initialise mask values following successful allocation 130 ! east ! west ! north ! south ! 131 ltemsk(:,:) = .TRUE. ; ltwmsk(:,:) = .TRUE. ; ltnmsk(:,:) = .TRUE. ; ltsmsk(:,:) = .TRUE. 132 luemsk(:,:) = .TRUE. ; luwmsk(:,:) = .TRUE. ; lunmsk(:,:) = .TRUE. ; lusmsk(:,:) = .TRUE. 133 lvemsk(:,:) = .TRUE. ; lvwmsk(:,:) = .TRUE. ; lvnmsk(:,:) = .TRUE. ; lvsmsk(:,:) = .TRUE. 134 END IF 135 ! 136 END FUNCTION obc_dta_alloc 137 91 138 92 139 SUBROUTINE obc_dta( kt ) … … 106 153 !! attribute of variable time_counter). 107 154 !! 108 !!109 !! History :110 !! ! 98-05 (J.M. Molines) Original code111 !! 8.5 ! 02-10 (C. Talandier, A-M. Treguier) Free surface, F90112 !!113 !! 9.0 ! 04-06 (F. Durand, A-M. Treguier) Netcdf BC files on input114 !! ! 2007-2008 (C. Langlais, P. Mathiot, J.M. Molines) high frequency boundaries data115 155 !!--------------------------------------------------------------------------- 116 !! * Arguments117 156 INTEGER, INTENT( in ) :: kt ! ocean time-step index 118 119 !! * Local declarations 157 ! 120 158 INTEGER, SAVE :: immfile, iyyfile ! 121 159 INTEGER :: nt ! record indices (incrementation) 122 160 REAL(wp) :: zsec, zxy, znum, zden ! time interpolation weight 123 124 161 !!--------------------------------------------------------------------------- 125 162 … … 227 264 228 265 229 SUBROUTINE obc_dta_ini (kt)266 SUBROUTINE obc_dta_ini( kt ) 230 267 !!----------------------------------------------------------------------------- 231 268 !! *** SUBROUTINE obc_dta_ini *** 232 269 !! 233 !! ** Purpose : 234 !! When obc_dta first call, realize some data initialization 235 !! 236 !! ** Method : 237 !! 238 !! History : 239 !! 9.0 ! 07-10 (J.M. Molines ) 270 !! ** Purpose : When obc_dta first call, realize some data initialization 240 271 !!---------------------------------------------------------------------------- 241 !! * Argument242 272 INTEGER, INTENT(in) :: kt ! ocean time-step index 243 244 !! * Local declarations 273 ! 245 274 INTEGER :: ji, jj ! dummy loop indices 246 275 INTEGER, SAVE :: immfile, iyyfile ! … … 521 550 !! Data at the boundary must be in m2/s 522 551 !! 523 !! History : 524 !! 9.0 ! 05-11 (V. garnier) Original code 552 !! History : 9.0 ! 05-11 (V. garnier) Original code 525 553 !!--------------------------------------------------------------------------- 526 !! * Arguments527 554 INTEGER, INTENT( in ) :: kt ! ocean time-step index 528 555 INTEGER, INTENT( in ) :: kbt ! barotropic ocean time-step index 529 530 !! * Local declarations 556 ! 531 557 INTEGER :: ji, jj ! dummy loop indices 532 558 INTEGER :: i15 … … 534 560 REAL(wp) :: zxy 535 561 INTEGER :: isrel ! number of seconds since 1/1/1992 536 537 562 !!--------------------------------------------------------------------------- 538 563 … … 1096 1121 END SUBROUTINE obc_read 1097 1122 1123 1098 1124 INTEGER FUNCTION nrecbef() 1099 1125 !!----------------------------------------------------------------------- … … 1127 1153 END FUNCTION nrecbef 1128 1154 1129 !!============================================================================== 1155 1130 1156 SUBROUTINE obc_depth_average(nt_x) 1131 1157 !!----------------------------------------------------------------------- … … 1212 1238 END SUBROUTINE obc_dta 1213 1239 #endif 1240 !!============================================================================== 1214 1241 END MODULE obcdta -
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obcdyn_bt.F90
r2528 r2715 1 1 MODULE obcdyn_bt 2 !!====================================================================== 3 !! *** MODULE obcdyn_bt *** 4 !! Ocean dynamics: Radiation/prescription of sea surface heights on each open boundary 5 !!====================================================================== 6 !! History : 1.0 ! 2005-12 (V. Garnier) original code 7 !!---------------------------------------------------------------------- 2 8 #if ( defined key_dynspg_ts || defined key_dynspg_exp ) && defined key_obc 3 !!================================================================================= 4 !! *** MODULE obcdyn_bt *** 5 !! Ocean dynamics: Radiation/prescription of sea surface heights 6 !! on each open boundary 7 !!================================================================================= 8 9 !!--------------------------------------------------------------------------------- 9 !!---------------------------------------------------------------------- 10 !! 'key_dynspg_ts' OR time spliting free surface 11 !! 'key_dynspg_exp' AND explicit free surface 12 !! 'key_obc' Open Boundary Condition 13 !!---------------------------------------------------------------------- 10 14 !! obc_dyn_bt : call the subroutine for each open boundary 11 15 !! obc_dyn_bt_east : Flather's algorithm at the east open boundary … … 13 17 !! obc_dyn_bt_north : Flather's algorithm at the north open boundary 14 18 !! obc_dyn_bt_south : Flather's algorithm at the south open boundary 15 !!---------------------------------------------------------------------------------- 16 17 !!---------------------------------------------------------------------------------- 18 !! * Modules used 19 !!---------------------------------------------------------------------- 19 20 USE oce ! ocean dynamics and tracers 20 21 USE dom_oce ! ocean space and time domain … … 30 31 PRIVATE 31 32 32 !! * Accessibility 33 PUBLIC obc_dyn_bt ! routine called in dynnxt (explicit free surface case) 34 35 !!--------------------------------------------------------------------------------- 33 PUBLIC obc_dyn_bt ! routine called in dynnxt (explicit free surface case) 34 35 !!---------------------------------------------------------------------- 36 36 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 37 37 !! $Id$ 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 !!---------------------------------------------------------------------- 40 38 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 39 !!---------------------------------------------------------------------- 41 40 CONTAINS 42 41 43 SUBROUTINE obc_dyn_bt ( kt ) 44 !!------------------------------------------------------------------------------ 45 !! SUBROUTINE obc_dyn_bt 46 !! *********************** 47 !! ** Purpose : 48 !! Apply Flather's algorithm at open boundaries for the explicit 49 !! free surface case and free surface case with time-splitting 42 SUBROUTINE obc_dyn_bt( kt ) 43 !!---------------------------------------------------------------------- 44 !! *** SUBROUTINE obc_dyn_bt *** 45 !! 46 !! ** Purpose : Apply Flather's algorithm at open boundaries for the explicit 47 !! free surface case and free surface case with time-splitting 50 48 !! 51 49 !! This routine is called in dynnxt.F routine and updates ua, va and sshn. … … 55 53 !! open one (must be done in the param_obc.h90 file). 56 54 !! 57 !! ** Reference : 58 !! Flather, R. A., 1976, Mem. Soc. R. Sci. Liege, Ser. 6, 10, 141-164 59 !! 60 !! History : 61 !! 9.0 ! 05-12 (V. Garnier) original 62 !!---------------------------------------------------------------------- 63 !! * Arguments 64 INTEGER, INTENT( in ) :: kt 65 55 !! Reference : Flather, R. A., 1976, Mem. Soc. R. Sci. Liege, Ser. 6, 10, 141-164 56 !!---------------------------------------------------------------------- 57 INTEGER, INTENT(in) :: kt 66 58 !!---------------------------------------------------------------------- 67 59 … … 85 77 86 78 # if defined key_dynspg_exp 79 87 80 SUBROUTINE obc_dyn_bt_east 88 !!---------------------------------------------------------------------- --------81 !!---------------------------------------------------------------------- 89 82 !! *** SUBROUTINE obc_dyn_bt_east *** 90 83 !! … … 93 86 !! Fix sea surface height (sshn) on east open boundary 94 87 !! The logical lfbceast must be .TRUE. 95 !! 96 !! History : 97 !! 9.0 ! 05-12 (V. Garnier) original 98 !!------------------------------------------------------------------------------ 99 !! * Local declaration 100 INTEGER :: ji, jj, jk ! dummy loop indices 101 !!------------------------------------------------------------------------------ 88 !!---------------------------------------------------------------------- 89 INTEGER, INTENT(in) :: kt 90 !!---------------------------------------------------------------------- 91 INTEGER :: ji, jj, jk ! dummy loop indices 92 !!---------------------------------------------------------------------- 102 93 103 94 DO ji = nie0, nie1 … … 120 111 121 112 SUBROUTINE obc_dyn_bt_west 122 !!---------------------------------------------------------------------- --------113 !!---------------------------------------------------------------------- 123 114 !! *** SUBROUTINE obc_dyn_bt_west *** 124 115 !! … … 127 118 !! Fix sea surface height (sshn) on west open boundary 128 119 !! The logical lfbcwest must be .TRUE. 129 !! 130 !! History : 131 !! 9.0 ! 05-12 (V. Garnier) original 132 !!------------------------------------------------------------------------------ 133 !! * Local declaration 134 INTEGER :: ji, jj, jk ! dummy loop indices 135 !!------------------------------------------------------------------------------ 136 120 !!---------------------------------------------------------------------- 121 INTEGER :: ji, jj, jk ! dummy loop indices 122 !!---------------------------------------------------------------------- 123 ! 137 124 DO ji = niw0, niw1 138 125 DO jk = 1, jpkm1 … … 147 134 END DO 148 135 END DO 149 136 ! 150 137 END SUBROUTINE obc_dyn_bt_west 138 151 139 152 140 SUBROUTINE obc_dyn_bt_north … … 158 146 !! Fix sea surface height (sshn) on north open boundary 159 147 !! The logical lfbcnorth must be .TRUE. 160 !! 161 !! History : 162 !! 9.0 ! 05-12 (V. Garnier) original 163 !!------------------------------------------------------------------------------ 164 !! * Local declaration 165 INTEGER :: ji, jj, jk ! dummy loop indices 166 !!------------------------------------------------------------------------------ 167 148 !!---------------------------------------------------------------------- 149 INTEGER :: ji, jj, jk ! dummy loop indices 150 !!---------------------------------------------------------------------- 151 ! 168 152 DO jj = njn0, njn1 169 153 DO jk = 1, jpkm1 … … 180 164 END DO 181 165 END DO 182 166 ! 183 167 END SUBROUTINE obc_dyn_bt_north 184 168 169 185 170 SUBROUTINE obc_dyn_bt_south 186 !!---------------------------------------------------------------------- --------171 !!---------------------------------------------------------------------- 187 172 !! *** SUBROUTINE obc_dyn_bt_south *** 188 173 !! … … 191 176 !! Fix sea surface height (sshn) on south open boundary 192 177 !! The logical lfbcsouth must be .TRUE. 193 !! 194 !! History : 195 !! 9.0 ! 05-12 (V. Garnier) original 196 !!------------------------------------------------------------------------------ 197 !! * Local declaration 198 INTEGER :: ji, jj, jk ! dummy loop indices 199 200 !!------------------------------------------------------------------------------ 201 178 !!---------------------------------------------------------------------- 179 INTEGER :: ji, jj, jk ! dummy loop indices 180 !!---------------------------------------------------------------------- 181 ! 202 182 DO jj = njs0, njs1 203 183 DO jk = 1, jpkm1 … … 212 192 END DO 213 193 END DO 214 194 ! 215 195 END SUBROUTINE obc_dyn_bt_south 216 196 … … 225 205 !! Fix sea surface height (sshn) on east open boundary 226 206 !! The logical lfbceast must be .TRUE. 227 !! 228 !! History : 229 !! 9.0 ! 05-12 (V. Garnier) original 230 !!------------------------------------------------------------------------------ 231 !! * Local declaration 232 INTEGER :: ji, jj, jk ! dummy loop indices 233 !!------------------------------------------------------------------------------ 234 207 !!---------------------------------------------------------------------- 208 INTEGER :: ji, jj, jk ! dummy loop indices 209 !!---------------------------------------------------------------------- 210 ! 235 211 DO ji = nie0, nie1 236 212 DO jk = 1, jpkm1 … … 245 221 END DO 246 222 END DO 247 223 ! 248 224 END SUBROUTINE obc_dyn_bt_east 249 225 226 250 227 SUBROUTINE obc_dyn_bt_west 251 !!--------------------------------------------------------------------- ---------228 !!--------------------------------------------------------------------- 252 229 !! *** SUBROUTINE obc_dyn_bt_west *** 253 230 !! 254 !! ** Purpose : 255 !! ** Purpose : 256 !! Apply Flather algorithm on west OBC velocities ua, va 231 !! ** Purpose : Apply Flather algorithm on west OBC velocities ua, va 257 232 !! Fix sea surface height (sshn) on west open boundary 258 233 !! The logical lfbcwest must be .TRUE. 259 !! 260 !! History : 261 !! 9.0 ! 05-12 (V. Garnier) original 262 !!------------------------------------------------------------------------------ 263 !! * Local declaration 264 INTEGER :: ji, jj, jk ! dummy loop indices 265 !!------------------------------------------------------------------------------ 266 234 !!---------------------------------------------------------------------- 235 INTEGER :: ji, jj, jk ! dummy loop indices 236 !!---------------------------------------------------------------------- 237 ! 267 238 DO ji = niw0, niw1 268 239 DO jk = 1, jpkm1 … … 275 246 END DO 276 247 END DO 277 248 ! 278 249 END SUBROUTINE obc_dyn_bt_west 250 279 251 280 252 SUBROUTINE obc_dyn_bt_north 281 253 !!------------------------------------------------------------------------------ 282 !! SUBROUTINE obc_dyn_bt_north283 !! *************************254 !! *** SUBROUTINE obc_dyn_bt_north *** 255 !! 284 256 !! ** Purpose : 285 257 !! Apply Flather algorithm on north OBC velocities ua, va 286 258 !! Fix sea surface height (sshn) on north open boundary 287 259 !! The logical lfbcnorth must be .TRUE. 288 !! 289 !! History : 290 !! 9.0 ! 05-12 (V. Garnier) original 291 !!------------------------------------------------------------------------------ 292 !! * Local declaration 293 INTEGER :: ji, jj, jk ! dummy loop indices 294 !!------------------------------------------------------------------------------ 295 260 !!---------------------------------------------------------------------- 261 INTEGER :: ji, jj, jk ! dummy loop indices 262 !!---------------------------------------------------------------------- 263 ! 296 264 DO jj = njn0, njn1 297 265 DO jk = 1, jpkm1 … … 306 274 END DO 307 275 END DO 308 276 ! 309 277 END SUBROUTINE obc_dyn_bt_north 278 310 279 311 280 SUBROUTINE obc_dyn_bt_south 312 281 !!------------------------------------------------------------------------------ 313 !! SUBROUTINE obc_dyn_bt_south314 !! *************************282 !! *** SUBROUTINE obc_dyn_bt_south *** 283 !! 315 284 !! ** Purpose : 316 285 !! Apply Flather algorithm on south OBC velocities ua, va 317 286 !! Fix sea surface height (sshn) on south open boundary 318 287 !! The logical lfbcsouth must be .TRUE. 319 !! 320 !! History : 321 !! 9.0 ! 05-12 (V. Garnier) original 322 !!------------------------------------------------------------------------------ 323 !! * Local declaration 324 INTEGER :: ji, jj, jk ! dummy loop indices 325 326 !!------------------------------------------------------------------------------ 327 288 !!---------------------------------------------------------------------- 289 INTEGER :: ji, jj, jk ! dummy loop indices 290 !!---------------------------------------------------------------------- 291 ! 328 292 DO jj = njs0, njs1 329 293 DO jk = 1, jpkm1 … … 336 300 END DO 337 301 END DO 338 302 ! 339 303 END SUBROUTINE obc_dyn_bt_south 340 304 341 305 # endif 306 342 307 #else 343 !!================================================================================= 344 !! *** MODULE obcdyn_bt *** 345 !! Ocean dynamics: Radiation of velocities on each open boundary 346 !!================================================================================= 308 !!---------------------------------------------------------------------- 309 !! Default option No Open Boundaries or not explicit fre surface 310 !!---------------------------------------------------------------------- 347 311 CONTAINS 348 349 SUBROUTINE obc_dyn_bt 350 ! No open boundaries ==> empty routine 312 SUBROUTINE obc_dyn_bt ! Dummy routine 351 313 END SUBROUTINE obc_dyn_bt 352 314 #endif 353 315 316 !!====================================================================== 354 317 END MODULE obcdyn_bt -
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obcfla.F90
r2528 r2715 5 5 !!====================================================================== 6 6 !! History : 2.0 ! 2005-12 (V. Garnier) original code 7 !! 3.3 ! 2010-11 (G. Madec) 7 !! 3.3 ! 2010-11 (G. Madec) 8 !! 4.0 ! 2011-02 (G. Madec) velocity & ssh passed in argument 8 9 !!---------------------------------------------------------------------- 9 #if defined key_obc &&defined key_dynspg_ts10 #if defined key_obc && defined key_dynspg_ts 10 11 !!---------------------------------------------------------------------- 11 12 !! 'key_obc' and Open Boundary Condition … … 31 32 32 33 !!---------------------------------------------------------------------- 33 !! NEMO/OPA 3.3 , NEMO Consortium (2010)34 !! NEMO/OPA 4.0 , NEMO Consortium (2011) 34 35 !! $Id$ 35 36 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 37 38 CONTAINS 38 39 39 SUBROUTINE obc_fla_ts 40 SUBROUTINE obc_fla_ts( pua, pva, p_sshn, p_ssha ) 40 41 !!---------------------------------------------------------------------- 41 42 !! SUBROUTINE obc_fla_ts … … 52 53 !! ** Reference : Flather, R. A., 1976, Mem. Soc. R. Sci. Liege, Ser. 6, 10, 141-164 53 54 !!---------------------------------------------------------------------- 55 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pua , pva ! after barotropic velocities 56 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 57 !!---------------------------------------------------------------------- 54 58 ! 55 IF( lp_obc_east ) CALL obc_fla_ts_east 56 IF( lp_obc_west ) CALL obc_fla_ts_west 57 IF( lp_obc_north ) CALL obc_fla_ts_north 58 IF( lp_obc_south ) CALL obc_fla_ts_south 59 IF( lp_obc_east ) CALL obc_fla_ts_east ( pua, pva, p_sshn, p_ssha ) 60 IF( lp_obc_west ) CALL obc_fla_ts_west ( pua, pva, p_sshn, p_ssha ) 61 IF( lp_obc_north ) CALL obc_fla_ts_north( pua, pva, p_sshn, p_ssha ) 62 IF( lp_obc_south ) CALL obc_fla_ts_south( pua, pva, p_sshn, p_ssha ) 59 63 ! 60 64 END SUBROUTINE obc_fla_ts 61 65 62 66 63 SUBROUTINE obc_fla_ts_east 67 SUBROUTINE obc_fla_ts_east( pua, pva, p_sshn, p_ssha ) 64 68 !!---------------------------------------------------------------------- 65 69 !! *** SUBROUTINE obc_fla_ts_east *** 66 70 !! 67 71 !! ** Purpose : Apply Flather's algorithm on east OBC velocities ua, va 68 !! Fix sea surface height ( sshn_e) on east open boundary72 !! Fix sea surface height (p_sshn) on east open boundary 69 73 !!---------------------------------------------------------------------- 70 INTEGER :: ji, jj ! dummy loop indices 74 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pua , pva ! after barotropic velocities 75 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 76 ! 77 INTEGER :: ji, jj ! dummy loop indices 71 78 !!---------------------------------------------------------------------- 72 79 ! 73 80 DO ji = nie0, nie1 74 81 DO jj = 1, jpj 75 ua_e(ji,jj) = ( ubtfoe(jj) * hur(ji,jj) + SQRT( grav*hur(ji,jj) ) &76 & * ( ( sshn_e(ji,jj) + sshn_e(ji+1,jj) ) * 0.5 - sshfoe(jj) ) ) * uemsk(jj,1)82 pua (ji,jj) = ( ubtfoe(jj) * hur(ji,jj) + SQRT( grav*hur(ji,jj) ) & 83 & * ( ( p_sshn(ji,jj) + p_sshn(ji+1,jj) ) * 0.5 - sshfoe(jj) ) ) * uemsk(jj,1) 77 84 sshfoe_b(ji,jj) = sshfoe_b(ji,jj) + SQRT( grav*hur(ji,jj) ) & 78 & * ( ( sshn_e(ji,jj) + sshn_e(ji+1,jj) ) * 0.5 - sshfoe(jj) ) * uemsk(jj,1)85 & * ( ( p_sshn(ji,jj) + p_sshn(ji+1,jj) ) * 0.5 - sshfoe(jj) ) * uemsk(jj,1) 79 86 END DO 80 87 END DO 81 88 DO ji = nie0p1, nie1p1 82 89 DO jj = 1, jpj 83 ssha_e(ji,jj) = ssha_e(ji,jj) * ( 1. - temsk(jj,1) ) + temsk(jj,1) * sshfoe(jj)84 va_e(ji,jj) = vbtfoe(jj) * hvr(ji,jj) * uemsk(jj,1)90 p_ssha(ji,jj) = p_ssha(ji,jj) * ( 1. - temsk(jj,1) ) + temsk(jj,1) * sshfoe(jj) 91 pva (ji,jj) = vbtfoe(jj) * hvr(ji,jj) * uemsk(jj,1) 85 92 END DO 86 93 END DO … … 89 96 90 97 91 SUBROUTINE obc_fla_ts_west 98 SUBROUTINE obc_fla_ts_west( pua, pva, p_sshn, p_ssha ) 92 99 !!---------------------------------------------------------------------- 93 100 !! *** SUBROUTINE obc_fla_ts_west *** 94 101 !! 95 102 !! ** Purpose : Apply Flather's algorithm on west OBC velocities ua, va 96 !! Fix sea surface height ( sshn_e) on west open boundary103 !! Fix sea surface height (p_sshn) on west open boundary 97 104 !!---------------------------------------------------------------------- 98 INTEGER :: ji, jj ! dummy loop indices 105 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pua , pva ! after barotropic velocities 106 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 107 ! 108 INTEGER :: ji, jj ! dummy loop indices 99 109 !!---------------------------------------------------------------------- 100 110 ! 101 111 DO ji = niw0, niw1 102 112 DO jj = 1, jpj 103 ua_e(ji,jj) = ( ubtfow(jj) * hur(ji,jj) - sqrt( grav * hur(ji,jj) ) &104 & * ( ( sshn_e(ji,jj) + sshn_e(ji+1,jj) ) * 0.5 - sshfow(jj) ) ) * uwmsk(jj,1)105 va_e(ji,jj) = vbtfow(jj) * hvr(ji,jj) * uwmsk(jj,1)113 pua (ji,jj) = ( ubtfow(jj) * hur(ji,jj) - sqrt( grav * hur(ji,jj) ) & 114 & * ( ( p_sshn(ji,jj) + p_sshn(ji+1,jj) ) * 0.5 - sshfow(jj) ) ) * uwmsk(jj,1) 115 pva (ji,jj) = vbtfow(jj) * hvr(ji,jj) * uwmsk(jj,1) 106 116 sshfow_b(ji,jj) = sshfow_b(ji,jj) - SQRT( grav * hur(ji,jj) ) & 107 & * ( ( sshn_e(ji,jj) + sshn_e(ji+1,jj) ) * 0.5 - sshfow(jj) ) * uwmsk(jj,1)108 ssha_e (ji,jj) = ssha_e(ji,jj) * ( 1. - twmsk(jj,1) ) + twmsk(jj,1)*sshfow(jj)117 & * ( ( p_sshn(ji,jj) + p_sshn(ji+1,jj) ) * 0.5 - sshfow(jj) ) * uwmsk(jj,1) 118 p_ssha (ji,jj) = p_ssha(ji,jj) * ( 1. - twmsk(jj,1) ) + twmsk(jj,1)*sshfow(jj) 109 119 END DO 110 120 END DO … … 113 123 114 124 115 SUBROUTINE obc_fla_ts_north 125 SUBROUTINE obc_fla_ts_north( pua, pva, p_sshn, p_ssha ) 116 126 !!---------------------------------------------------------------------- 117 127 !! SUBROUTINE obc_fla_ts_north 118 128 !! 119 129 !! ** Purpose : Apply Flather's algorithm on north OBC velocities ua, va 120 !! Fix sea surface height ( sshn_e) on north open boundary130 !! Fix sea surface height (p_sshn) on north open boundary 121 131 !!---------------------------------------------------------------------- 122 INTEGER :: ji, jj ! dummy loop indices 132 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pua , pva ! after barotropic velocities 133 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 134 ! 135 INTEGER :: ji, jj ! dummy loop indices 123 136 !!---------------------------------------------------------------------- 124 137 ! 125 138 DO jj = njn0, njn1 126 139 DO ji = 1, jpi 127 va_e(ji,jj) = ( vbtfon(ji) * hvr(ji,jj) + sqrt( grav * hvr(ji,jj) ) &128 & * ( ( sshn_e(ji,jj) + sshn_e(ji,jj+1) ) * 0.5 - sshfon(ji) ) ) * vnmsk(ji,1)140 pva (ji,jj) = ( vbtfon(ji) * hvr(ji,jj) + sqrt( grav * hvr(ji,jj) ) & 141 & * ( ( p_sshn(ji,jj) + p_sshn(ji,jj+1) ) * 0.5 - sshfon(ji) ) ) * vnmsk(ji,1) 129 142 sshfon_b(ji,jj) = sshfon_b(ji,jj) + sqrt( grav * hvr(ji,jj) ) & 130 & * ( ( sshn_e(ji,jj) + sshn_e(ji,jj+1) ) * 0.5 - sshfon(ji) ) * vnmsk(ji,1)143 & * ( ( p_sshn(ji,jj) + p_sshn(ji,jj+1) ) * 0.5 - sshfon(ji) ) * vnmsk(ji,1) 131 144 END DO 132 145 END DO 133 146 DO jj = njn0p1, njn1p1 134 147 DO ji = 1, jpi 135 ssha_e(ji,jj) = ssha_e(ji,jj) * ( 1. - tnmsk(ji,1) ) + sshfon(ji) * tnmsk(ji,1)136 ua_e(ji,jj) = ubtfon(ji) * hur(ji,jj) * vnmsk(ji,1)148 p_ssha(ji,jj) = p_ssha(ji,jj) * ( 1. - tnmsk(ji,1) ) + sshfon(ji) * tnmsk(ji,1) 149 pua (ji,jj) = ubtfon(ji) * hur(ji,jj) * vnmsk(ji,1) 137 150 END DO 138 151 END DO … … 141 154 142 155 143 SUBROUTINE obc_fla_ts_south 156 SUBROUTINE obc_fla_ts_south( pua, pva, p_sshn, p_ssha ) 144 157 !!---------------------------------------------------------------------- 145 158 !! SUBROUTINE obc_fla_ts_south 146 159 !! 147 160 !! ** Purpose : Apply Flather's algorithm on south OBC velocities ua, va 148 !! Fix sea surface height ( sshn_e) on south open boundary161 !! Fix sea surface height (p_sshn) on south open boundary 149 162 !!---------------------------------------------------------------------- 150 INTEGER :: ji, jj ! dummy loop indices 163 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pua , pva ! after barotropic velocities 164 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_sshn, p_ssha ! before, now, after sea surface height 165 ! 166 INTEGER :: ji, jj ! dummy loop indices 151 167 !!---------------------------------------------------------------------- 152 168 ! 153 169 DO jj = njs0, njs1 154 170 DO ji = 1, jpi 155 va_e(ji,jj) = ( vbtfos(ji) * hvr(ji,jj) - sqrt( grav * hvr(ji,jj) ) &156 & * ( ( sshn_e(ji,jj) + sshn_e(ji,jj+1) ) * 0.5 - sshfos(ji) ) ) * vsmsk(ji,1)157 ua_e(ji,jj) = ubtfos(ji) * hur(ji,jj) * vsmsk(ji,1)171 pva (ji,jj) = ( vbtfos(ji) * hvr(ji,jj) - sqrt( grav * hvr(ji,jj) ) & 172 & * ( ( p_sshn(ji,jj) + p_sshn(ji,jj+1) ) * 0.5 - sshfos(ji) ) ) * vsmsk(ji,1) 173 pua (ji,jj) = ubtfos(ji) * hur(ji,jj) * vsmsk(ji,1) 158 174 sshfos_b(ji,jj) = sshfos_b(ji,jj) - sqrt( grav * hvr(ji,jj) ) & 159 & * ( ( sshn_e(ji,jj) + sshn_e(ji,jj+1) ) * 0.5 - sshfos(ji) ) * vsmsk(ji,1)160 ssha_e (ji,jj) = ssha_e(ji,jj) * (1. - tsmsk(ji,1) ) + tsmsk(ji,1) * sshfos(ji)175 & * ( ( p_sshn(ji,jj) + p_sshn(ji,jj+1) ) * 0.5 - sshfos(ji) ) * vsmsk(ji,1) 176 p_ssha (ji,jj) = p_ssha(ji,jj) * (1. - tsmsk(ji,1) ) + tsmsk(ji,1) * sshfos(ji) 161 177 END DO 162 178 END DO … … 169 185 !!---------------------------------------------------------------------- 170 186 CONTAINS 171 172 SUBROUTINE obc_fla_ts173 WRITE(*,*) 'obc_fla_ts: You should not have seen this print! error?' 187 SUBROUTINE obc_fla_ts( pua, pva, p_sshn, p_ssha ) 188 REAL, DIMENSION(:,:):: pua, pva, p_sshn, p_ssha 189 WRITE(*,*) 'obc_fla_ts: You should not have seen this print! error?', pua(1,1), pva(1,1), p_sshn(1,1), p_ssha(1,1) 174 190 END SUBROUTINE obc_fla_ts 175 191 #endif -
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obcini.F90
r2565 r2715 18 18 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 19 19 USE phycst ! physical constants 20 USE obc_oce ! o cean open boundary conditions21 USE lib_mpp ! for mpp_sum20 USE obc_oce ! open boundary condition: ocean 21 USE obcdta ! open boundary condition: data 22 22 USE in_out_manager ! I/O units 23 USE lib_mpp ! MPP library 23 24 USE dynspg_oce ! flag lk_dynspg_flt 24 25 … … 33 34 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 34 35 !! $Id$ 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)36 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 37 !!---------------------------------------------------------------------- 37 38 38 CONTAINS 39 39 … … 81 81 rdpnob = rn_dpnob 82 82 volemp = rn_volemp 83 84 83 84 ! ! allocate obc arrays 85 IF( obc_oce_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'obc_init : unable to allocate obc_oce arrays' ) 86 IF( obc_dta_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'obc_init : unable to allocate obc_dta arrays' ) 85 87 86 88 ! By security we set rdpxin and rdpxob respectively to 1. and 15. if the corresponding OBC is not activated -
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obcrad.F90
r2528 r2715 12 12 !! obc_rad_south : compute the south phase velocities 13 13 !!--------------------------------------------------------------------------------- 14 !! * Modules used15 14 USE oce ! ocean dynamics and tracers variables 16 15 USE dom_oce ! ocean space and time domain variables … … 24 23 PRIVATE 25 24 26 !! * Accessibility 27 PUBLIC obc_rad ! routine called by step.F90 28 29 !! * Module variables 25 PUBLIC obc_rad ! routine called by step.F90 26 30 27 INTEGER :: ji, jj, jk ! dummy loop indices 31 28 … … 69 66 !! J. Molines and G. Madec version 70 67 !!------------------------------------------------------------------------------ 71 !! * Arguments72 68 INTEGER, INTENT( in ) :: kt 73 69 !!---------------------------------------------------------------------- … … 143 139 END DO 144 140 END DO 145 IF( lk_mpp ) CALL mppobc(uebnd,jpjed,jpjef,jpieob,jpk*3*3,2,jpj )141 IF( lk_mpp ) CALL mppobc(uebnd,jpjed,jpjef,jpieob,jpk*3*3,2,jpj, numout ) 146 142 147 143 ! ... extremeties nie0, nie1 … … 185 181 END DO 186 182 END DO 187 IF( lk_mpp ) CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj )183 IF( lk_mpp ) CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj, numout ) 188 184 189 185 !... extremeties nie0, nie1 … … 226 222 END DO 227 223 END DO 228 IF( lk_mpp ) CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj )229 IF( lk_mpp ) CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj )224 IF( lk_mpp ) CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj, numout ) 225 IF( lk_mpp ) CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj, numout ) 230 226 231 227 ! ... extremeties nie0, nie1 … … 327 323 END DO 328 324 END DO 329 IF( lk_mpp ) CALL mppobc(v_cxebnd,jpjed,jpjef,jpieob+1,jpk,2,jpj )325 IF( lk_mpp ) CALL mppobc(v_cxebnd,jpjed,jpjef,jpieob+1,jpk,2,jpj, numout ) 330 326 331 327 ! ... extremeties nie0, nie1 … … 409 405 END DO 410 406 END DO 411 IF( lk_mpp ) CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj )407 IF( lk_mpp ) CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj, numout ) 412 408 413 409 ! ... extremeties niw0, niw1 … … 451 447 END DO 452 448 END DO 453 IF( lk_mpp ) CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj )449 IF( lk_mpp ) CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj, numout ) 454 450 455 451 ! ... extremeties niw0, niw1 … … 492 488 END DO 493 489 END DO 494 IF( lk_mpp ) CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj )495 IF( lk_mpp ) CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj )490 IF( lk_mpp ) CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj, numout ) 491 IF( lk_mpp ) CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj, numout ) 496 492 497 493 ! ... extremeties niw0, niw1 … … 596 592 END DO 597 593 END DO 598 IF( lk_mpp ) CALL mppobc(v_cxwbnd,jpjwd,jpjwf,jpiwob,jpk,2,jpj )594 IF( lk_mpp ) CALL mppobc(v_cxwbnd,jpjwd,jpjwf,jpiwob,jpk,2,jpj, numout ) 599 595 600 596 ! ... extremeties niw0, niw1 … … 673 669 END DO 674 670 END DO 675 IF( lk_mpp ) CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi )671 IF( lk_mpp ) CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi, numout ) 676 672 677 673 ! ... extremeties njn0,njn1 … … 720 716 END DO 721 717 END DO 722 IF( lk_mpp ) CALL mppobc(vnbnd,jpind,jpinf,jpjnob,jpk*3*3,1,jpi )718 IF( lk_mpp ) CALL mppobc(vnbnd,jpind,jpinf,jpjnob,jpk*3*3,1,jpi, numout ) 723 719 724 720 ! ... extremeties njn0,njn1 … … 761 757 END DO 762 758 END DO 763 IF( lk_mpp ) CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi )764 IF( lk_mpp ) CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi )759 IF( lk_mpp ) CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi, numout ) 760 IF( lk_mpp ) CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi, numout ) 765 761 766 762 ! ... extremeties njn0,njn1 … … 828 824 END DO 829 825 END DO 830 IF( lk_mpp ) CALL mppobc(u_cynbnd,jpind,jpinf,jpjnob+1,jpk,1,jpi )826 IF( lk_mpp ) CALL mppobc(u_cynbnd,jpind,jpinf,jpjnob+1,jpk,1,jpi, numout ) 831 827 832 828 ! ... extremeties njn0,njn1 … … 947 943 END DO 948 944 END DO 949 IF( lk_mpp ) CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi )945 IF( lk_mpp ) CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi, numout ) 950 946 951 947 ! ... extremeties njs0,njs1 … … 992 988 END DO 993 989 END DO 994 IF( lk_mpp ) CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi )990 IF( lk_mpp ) CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi, numout ) 995 991 996 992 ! ... extremeties njs0,njs1 … … 1033 1029 END DO 1034 1030 END DO 1035 IF( lk_mpp ) CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi )1036 IF( lk_mpp ) CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi )1031 IF( lk_mpp ) CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi, numout ) 1032 IF( lk_mpp ) CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi, numout ) 1037 1033 1038 1034 ! ... extremeties njs0,njs1 … … 1100 1096 END DO 1101 1097 END DO 1102 IF( lk_mpp ) CALL mppobc(u_cysbnd,jpisd,jpisf,jpjsob,jpk,1,jpi )1098 IF( lk_mpp ) CALL mppobc(u_cysbnd,jpisd,jpisf,jpjsob,jpk,1,jpi, numout ) 1103 1099 1104 1100 ! ... extremeties njs0,njs1 -
trunk/NEMOGCM/NEMO/OPA_SRC/OBC/obcrst.F90
r2528 r2715 7 7 8 8 !!--------------------------------------------------------------------------------- 9 !! * Modules used10 9 USE oce ! ocean dynamics and tracers variables 11 10 USE dom_oce ! ocean space and time domain variables … … 19 18 PRIVATE 20 19 21 !! * Accessibility 22 PUBLIC obc_rst_read ! routine called by obc_ini 23 PUBLIC obc_rst_write ! routine called by step 24 25 !!--------------------------------------------------------------------------------- 20 PUBLIC obc_rst_read ! routine called by obc_ini 21 PUBLIC obc_rst_write ! routine called by step 22 23 !!---------------------------------------------------------------------- 26 24 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 27 25 !! $Id$ 28 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)29 !!---------------------------------------------------------------------- -----------26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 27 !!---------------------------------------------------------------------- 30 28 31 29 CONTAINS … … 565 563 IF( lk_mpp ) THEN 566 564 IF( lp_obc_east ) THEN 567 CALL mppobc(uebnd,jpjed,jpjef,jpieob ,jpk*3*3,2,jpj)568 CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj )569 CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj )570 CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj )565 CALL mppobc(uebnd,jpjed,jpjef,jpieob ,jpk*3*3,2,jpj, numout ) 566 CALL mppobc(vebnd,jpjed,jpjef,jpieob+1,jpk*3*3,2,jpj, numout ) 567 CALL mppobc(tebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj, numout ) 568 CALL mppobc(sebnd,jpjed,jpjef,jpieob+1,jpk*2*2,2,jpj, numout ) 571 569 ENDIF 572 570 IF( lp_obc_west ) THEN 573 CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj )574 CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj )575 CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj )576 CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj )571 CALL mppobc(uwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj, numout ) 572 CALL mppobc(vwbnd,jpjwd,jpjwf,jpiwob,jpk*3*3,2,jpj, numout ) 573 CALL mppobc(twbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj, numout ) 574 CALL mppobc(swbnd,jpjwd,jpjwf,jpiwob,jpk*2*2,2,jpj, numout ) 577 575 ENDIF 578 576 IF( lp_obc_north ) THEN 579 CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi )580 CALL mppobc(vnbnd,jpind,jpinf,jpjnob ,jpk*3*3,1,jpi )581 CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi )582 CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi )577 CALL mppobc(unbnd,jpind,jpinf,jpjnob+1,jpk*3*3,1,jpi, numout ) 578 CALL mppobc(vnbnd,jpind,jpinf,jpjnob ,jpk*3*3,1,jpi, numout ) 579 CALL mppobc(tnbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi, numout ) 580 CALL mppobc(snbnd,jpind,jpinf,jpjnob+1,jpk*2*2,1,jpi, numout ) 583 581 ENDIF 584 582 IF( lp_obc_south ) THEN 585 CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi )586 CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi )587 CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi )588 CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi )583 CALL mppobc(usbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi, numout ) 584 CALL mppobc(vsbnd,jpisd,jpisf,jpjsob,jpk*3*3,1,jpi, numout ) 585 CALL mppobc(tsbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi, numout ) 586 CALL mppobc(ssbnd,jpisd,jpisf,jpjsob,jpk*2*2,1,jpi, numout ) 589 587 ENDIF 590 588 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.