Changeset 6140 for trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdylib.F90
- Timestamp:
- 2015-12-21T12:35:23+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdylib.F90
r5215 r6140 4 4 !! Unstructured Open Boundary Cond. : Library module of generic boundary algorithms. 5 5 !!====================================================================== 6 !! History : 3.6 ! 2013 (D. Storkey) new module6 !! History : 3.6 ! 2013 (D. Storkey) original code 7 7 !!---------------------------------------------------------------------- 8 8 #if defined key_bdy … … 13 13 !! bdy_orlanski_3d 14 14 !!---------------------------------------------------------------------- 15 USE timing ! Timing 16 USE oce ! ocean dynamics and tracers 17 USE dom_oce ! ocean space and time domain 18 USE bdy_oce ! ocean open boundary conditions 19 USE phycst ! physical constants 20 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 21 USE in_out_manager ! 15 USE oce ! ocean dynamics and tracers 16 USE dom_oce ! ocean space and time domain 17 USE bdy_oce ! ocean open boundary conditions 18 USE phycst ! physical constants 19 ! 20 USE in_out_manager ! 21 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 22 USE timing ! Timing 22 23 23 24 IMPLICIT NONE … … 45 46 !! References: Marchesiello, McWilliams and Shchepetkin, Ocean Modelling vol. 3 (2001) 46 47 !!---------------------------------------------------------------------- 47 TYPE(OBC_INDEX), INTENT(in):: idx ! BDY indices48 INTEGER , INTENT(in):: igrd ! grid index49 REAL(wp), DIMENSION(:,:), INTENT(in):: phib ! model before 2D field50 REAL(wp), DIMENSION(:,:), INTENT(inout):: phia ! model after 2D field (to be updated)51 REAL(wp), DIMENSION(:) , INTENT(in):: phi_ext ! external forcing data52 LOGICAL , INTENT(in):: ll_npo ! switch for NPO version53 48 TYPE(OBC_INDEX), INTENT(in ) :: idx ! BDY indices 49 INTEGER , INTENT(in ) :: igrd ! grid index 50 REAL(wp), DIMENSION(:,:), INTENT(in ) :: phib ! model before 2D field 51 REAL(wp), DIMENSION(:,:), INTENT(inout) :: phia ! model after 2D field (to be updated) 52 REAL(wp), DIMENSION(:) , INTENT(in ) :: phi_ext ! external forcing data 53 LOGICAL , INTENT(in ) :: ll_npo ! switch for NPO version 54 ! 54 55 INTEGER :: jb ! dummy loop indices 55 56 INTEGER :: ii, ij, iibm1, iibm2, ijbm1, ijbm2 ! 2D addresses … … 70 71 REAL(wp), POINTER, DIMENSION(:,:) :: pe_ydif ! scale factors for y-derivatives 71 72 !!---------------------------------------------------------------------- 72 73 IF( nn_timing == 1 ) CALL timing_start('bdy_orlanski_2d')74 73 ! 74 IF( nn_timing == 1 ) CALL timing_start('bdy_orlanski_2d') 75 ! 75 76 ! ----------------------------------! 76 77 ! Orlanski boundary conditions :! … … 79 80 SELECT CASE(igrd) 80 81 CASE(1) 81 pmask => tmask(:,:,1)82 pmask => tmask(:,:,1) 82 83 pmask_xdif => umask(:,:,1) 83 84 pmask_ydif => vmask(:,:,1) 84 pe_xdif => e1u(:,:)85 pe_ydif => e2v(:,:)85 pe_xdif => e1u(:,:) 86 pe_ydif => e2v(:,:) 86 87 ii_offset = 0 87 88 ij_offset = 0 88 89 CASE(2) 89 pmask => umask(:,:,1)90 pmask => umask(:,:,1) 90 91 pmask_xdif => tmask(:,:,1) 91 92 pmask_ydif => fmask(:,:,1) 92 pe_xdif => e1t(:,:)93 pe_ydif => e2f(:,:)93 pe_xdif => e1t(:,:) 94 pe_ydif => e2f(:,:) 94 95 ii_offset = 1 95 96 ij_offset = 0 96 97 CASE(3) 97 pmask => vmask(:,:,1)98 pmask => vmask(:,:,1) 98 99 pmask_xdif => fmask(:,:,1) 99 100 pmask_ydif => tmask(:,:,1) 100 pe_xdif => e1f(:,:)101 pe_ydif => e2t(:,:)101 pe_xdif => e1f(:,:) 102 pe_ydif => e2t(:,:) 102 103 ii_offset = 0 103 104 ij_offset = 1 … … 188 189 END DO 189 190 ! 190 IF( nn_timing == 1 ) CALL timing_stop('bdy_orlanski_2d')191 191 IF( nn_timing == 1 ) CALL timing_stop('bdy_orlanski_2d') 192 ! 192 193 END SUBROUTINE bdy_orlanski_2d 193 194 … … 204 205 !! References: Marchesiello, McWilliams and Shchepetkin, Ocean Modelling vol. 3 (2001) 205 206 !!---------------------------------------------------------------------- 206 TYPE(OBC_INDEX), INTENT(in ):: idx ! BDY indices207 INTEGER , INTENT(in):: igrd ! grid index208 REAL(wp), DIMENSION(:,:,:), INTENT(in ):: phib ! model before 3D field209 REAL(wp), DIMENSION(:,:,:), INTENT(inout) 210 REAL(wp), DIMENSION(:,:) , INTENT(in):: phi_ext ! external forcing data211 LOGICAL , INTENT(in):: ll_npo ! switch for NPO version212 207 TYPE(OBC_INDEX), INTENT(in ) :: idx ! BDY indices 208 INTEGER , INTENT(in ) :: igrd ! grid index 209 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: phib ! model before 3D field 210 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: phia ! model after 3D field (to be updated) 211 REAL(wp), DIMENSION(:,:) , INTENT(in ) :: phi_ext ! external forcing data 212 LOGICAL , INTENT(in ) :: ll_npo ! switch for NPO version 213 ! 213 214 INTEGER :: jb, jk ! dummy loop indices 214 215 INTEGER :: ii, ij, iibm1, iibm2, ijbm1, ijbm2 ! 2D addresses … … 229 230 REAL(wp), POINTER, DIMENSION(:,:) :: pe_ydif ! scale factors for y-derivatives 230 231 !!---------------------------------------------------------------------- 231 232 IF( nn_timing == 1 ) CALL timing_start('bdy_orlanski_3d')233 232 ! 233 IF( nn_timing == 1 ) CALL timing_start('bdy_orlanski_3d') 234 ! 234 235 ! ----------------------------------! 235 236 ! Orlanski boundary conditions :! 236 237 ! ----------------------------------! 237 238 ! 238 239 SELECT CASE(igrd) 239 240 CASE(1) 240 pmask => tmask(:,:,:)241 pmask => tmask(:,:,:) 241 242 pmask_xdif => umask(:,:,:) 242 243 pmask_ydif => vmask(:,:,:) 243 pe_xdif => e1u(:,:)244 pe_ydif => e2v(:,:)244 pe_xdif => e1u(:,:) 245 pe_ydif => e2v(:,:) 245 246 ii_offset = 0 246 247 ij_offset = 0 247 248 CASE(2) 248 pmask => umask(:,:,:)249 pmask => umask(:,:,:) 249 250 pmask_xdif => tmask(:,:,:) 250 251 pmask_ydif => fmask(:,:,:) 251 pe_xdif => e1t(:,:)252 pe_ydif => e2f(:,:)252 pe_xdif => e1t(:,:) 253 pe_ydif => e2f(:,:) 253 254 ii_offset = 1 254 255 ij_offset = 0 255 256 CASE(3) 256 pmask => vmask(:,:,:)257 pmask => vmask(:,:,:) 257 258 pmask_xdif => fmask(:,:,:) 258 259 pmask_ydif => tmask(:,:,:) 259 pe_xdif => e1f(:,:)260 pe_ydif => e2t(:,:)260 pe_xdif => e1f(:,:) 261 pe_ydif => e2t(:,:) 261 262 ii_offset = 0 262 263 ij_offset = 1 … … 349 350 ! 350 351 END DO 351 352 IF( nn_timing == 1 ) CALL timing_stop('bdy_orlanski_3d')353 352 ! 353 IF( nn_timing == 1 ) CALL timing_stop('bdy_orlanski_3d') 354 ! 354 355 END SUBROUTINE bdy_orlanski_3d 355 356
Note: See TracChangeset
for help on using the changeset viewer.