Changeset 5870 for branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/BDY
- Timestamp:
- 2015-11-09T18:33:54+01:00 (9 years ago)
- Location:
- branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/BDY
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_oce.F90
r4699 r5870 8 8 !! 3.3 ! 2010-09 (D. Storkey) add ice boundary conditions 9 9 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 10 !! 3.6 ! 201 2-01 (C. Rousset) add ice boundary conditions for lim310 !! 3.6 ! 2014-01 (C. Rousset) add ice boundary conditions for lim3 11 11 !!---------------------------------------------------------------------- 12 12 #if defined key_bdy … … 22 22 23 23 TYPE, PUBLIC :: OBC_INDEX !: Indices and weights which define the open boundary 24 INTEGER , DIMENSION(jpbgrd) :: nblen25 INTEGER , DIMENSION(jpbgrd) :: nblenrim26 INTEGER , POINTER, DIMENSION(:,:):: nbi27 INTEGER , POINTER, DIMENSION(:,:):: nbj28 INTEGER , POINTER, DIMENSION(:,:):: nbr29 INTEGER , POINTER, DIMENSION(:,:):: nbmap30 REAL(wp) , POINTER, DIMENSION(:,:):: nbw31 REAL(wp) , POINTER, DIMENSION(:,:):: nbd32 REAL(wp) , POINTER, DIMENSION(:,:):: nbdout33 REAL(wp) , POINTER, DIMENSION(:,:):: flagu34 REAL(wp) , POINTER, DIMENSION(:,:):: flagv24 INTEGER , DIMENSION(jpbgrd) :: nblen 25 INTEGER , DIMENSION(jpbgrd) :: nblenrim 26 INTEGER , POINTER, DIMENSION(:,:) :: nbi 27 INTEGER , POINTER, DIMENSION(:,:) :: nbj 28 INTEGER , POINTER, DIMENSION(:,:) :: nbr 29 INTEGER , POINTER, DIMENSION(:,:) :: nbmap 30 REAL(wp), POINTER, DIMENSION(:,:) :: nbw 31 REAL(wp), POINTER, DIMENSION(:,:) :: nbd 32 REAL(wp), POINTER, DIMENSION(:,:) :: nbdout 33 REAL(wp), POINTER, DIMENSION(:,:) :: flagu 34 REAL(wp), POINTER, DIMENSION(:,:) :: flagv 35 35 END TYPE OBC_INDEX 36 36 … … 41 41 42 42 TYPE, PUBLIC :: OBC_DATA !: Storage for external data 43 INTEGER , DIMENSION(2):: nread44 LOGICAL :: ll_ssh45 LOGICAL :: ll_u2d46 LOGICAL :: ll_v2d47 LOGICAL :: ll_u3d48 LOGICAL :: ll_v3d49 LOGICAL :: ll_tem50 LOGICAL :: ll_sal51 REAL(wp), POINTER, DIMENSION(:) 52 REAL(wp), POINTER, DIMENSION(:) 53 REAL(wp), POINTER, DIMENSION(:) 54 REAL(wp), POINTER, DIMENSION(:,:) 55 REAL(wp), POINTER, DIMENSION(:,:) 56 REAL(wp), POINTER, DIMENSION(:,:) 57 REAL(wp), POINTER, DIMENSION(:,:) 43 INTEGER , DIMENSION(2) :: nread 44 LOGICAL :: ll_ssh 45 LOGICAL :: ll_u2d 46 LOGICAL :: ll_v2d 47 LOGICAL :: ll_u3d 48 LOGICAL :: ll_v3d 49 LOGICAL :: ll_tem 50 LOGICAL :: ll_sal 51 REAL(wp), POINTER, DIMENSION(:) :: ssh 52 REAL(wp), POINTER, DIMENSION(:) :: u2d 53 REAL(wp), POINTER, DIMENSION(:) :: v2d 54 REAL(wp), POINTER, DIMENSION(:,:) :: u3d 55 REAL(wp), POINTER, DIMENSION(:,:) :: v3d 56 REAL(wp), POINTER, DIMENSION(:,:) :: tem 57 REAL(wp), POINTER, DIMENSION(:,:) :: sal 58 58 #if defined key_lim2 59 LOGICAL ::ll_frld60 LOGICAL ::ll_hicif61 LOGICAL ::ll_hsnif62 REAL(wp), POINTER, DIMENSION(:) ::frld63 REAL(wp), POINTER, DIMENSION(:) ::hicif64 REAL(wp), POINTER, DIMENSION(:) ::hsnif59 LOGICAL :: ll_frld 60 LOGICAL :: ll_hicif 61 LOGICAL :: ll_hsnif 62 REAL(wp), POINTER, DIMENSION(:) :: frld 63 REAL(wp), POINTER, DIMENSION(:) :: hicif 64 REAL(wp), POINTER, DIMENSION(:) :: hsnif 65 65 #elif defined key_lim3 66 LOGICAL ::ll_a_i67 LOGICAL ::ll_ht_i68 LOGICAL ::ll_ht_s69 REAL , POINTER, DIMENSION(:,:) :: a_i!: now ice leads fraction climatology70 REAL , POINTER, DIMENSION(:,:) :: ht_i!: Now ice thickness climatology71 REAL , POINTER, DIMENSION(:,:) :: ht_s!: now snow thickness66 LOGICAL :: ll_a_i 67 LOGICAL :: ll_ht_i 68 LOGICAL :: ll_ht_s 69 REAL(wp), POINTER, DIMENSION(:,:) :: a_i !: now ice leads fraction climatology 70 REAL(wp), POINTER, DIMENSION(:,:) :: ht_i !: Now ice thickness climatology 71 REAL(wp), POINTER, DIMENSION(:,:) :: ht_s !: now snow thickness 72 72 #endif 73 73 END TYPE OBC_DATA … … 99 99 INTEGER, DIMENSION(jp_bdy) :: nn_tra_dta !: = 0 use the initial state as bdy dta ; 100 100 !: = 1 read it in a NetCDF file 101 LOGICAL , DIMENSION(jp_bdy) :: ln_tra_dmp!: =T Tracer damping102 LOGICAL , DIMENSION(jp_bdy) :: ln_dyn3d_dmp!: =T Baroclinic velocity damping103 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp!: Damping time scale in days104 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp_out!: Damping time scale in days at radiation outflow points101 LOGICAL , DIMENSION(jp_bdy) :: ln_tra_dmp !: =T Tracer damping 102 LOGICAL , DIMENSION(jp_bdy) :: ln_dyn3d_dmp !: =T Baroclinic velocity damping 103 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp !: Damping time scale in days 104 REAL(wp), DIMENSION(jp_bdy) :: rn_time_dmp_out !: Damping time scale in days at radiation outflow points 105 105 106 106 CHARACTER(len=20), DIMENSION(jp_bdy) :: cn_ice_lim ! Choice of boundary condition for sea ice variables 107 INTEGER , DIMENSION(jp_bdy):: nn_ice_lim_dta !: = 0 use the initial state as bdy dta ;107 INTEGER , DIMENSION(jp_bdy) :: nn_ice_lim_dta !: = 0 use the initial state as bdy dta ; 108 108 !: = 1 read it in a NetCDF file 109 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_tem!: choice of the temperature of incoming sea ice110 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_sal!: choice of the salinity of incoming sea ice111 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_age!: choice of the age of incoming sea ice109 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_tem !: choice of the temperature of incoming sea ice 110 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_sal !: choice of the salinity of incoming sea ice 111 REAL(wp), DIMENSION(jp_bdy) :: rn_ice_age !: choice of the age of incoming sea ice 112 112 ! 113 113 -
branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
r5656 r5870 59 59 !! 60 60 !!---------------------------------------------------------------------- 61 INTEGER, INTENT( in ) :: kt ! Main time step counter 62 INTEGER :: ib_bdy ! Loop index 63 61 INTEGER, INTENT( in ) :: kt ! Main time step counter 62 ! 63 INTEGER :: ib_bdy ! Loop index 64 !!---------------------------------------------------------------------- 65 ! 64 66 #if defined key_lim3 65 67 CALL lim_var_glo2eqv 66 68 #endif 67 69 ! 68 70 DO ib_bdy=1, nb_bdy 69 71 ! 70 72 SELECT CASE( cn_ice_lim(ib_bdy) ) 71 73 CASE('none') … … 76 78 CALL ctl_stop( 'bdy_ice_lim : unrecognised option for open boundaries for ice fields' ) 77 79 END SELECT 78 80 ! 79 81 END DO 80 82 ! 81 83 #if defined key_lim3 82 84 CALL lim_var_zapsmall 83 85 CALL lim_var_agg(1) 84 86 #endif 85 87 ! 86 88 END SUBROUTINE bdy_ice_lim 89 87 90 88 91 SUBROUTINE bdy_ice_frs( idx, dta, kt, ib_bdy ) … … 96 99 !! dimensional baroclinic ocean model with realistic topography. Tellus, 365-382. 97 100 !!------------------------------------------------------------------------------ 98 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices99 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data100 INTEGER, INTENT(in) :: kt ! main time-step counter101 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 102 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 103 INTEGER, INTENT(in) :: kt ! main time-step counter 101 104 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 102 105 ! 103 106 INTEGER :: jpbound ! 0 = incoming ice 104 107 ! ! 1 = outgoing ice 105 108 INTEGER :: jb, jk, jgrd, jl ! dummy loop indices 106 109 INTEGER :: ji, jj, ii, ij ! local scalar … … 111 114 USE ice_2, vt_i => hicm 112 115 #endif 113 114 !!------------------------------------------------------------------------------ 115 ! 116 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs') 116 !!------------------------------------------------------------------------------ 117 ! 118 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_frs') 117 119 ! 118 120 jgrd = 1 ! Everything is at T-points here … … 181 183 ! condition on ice thickness depends on the ice velocity 182 184 ! if velocity is outward (strictly), then ice thickness, volume... must be equal to adjacent values 183 jpbound = 0 ; ii = ji; ij = jj;184 185 jpbound = 0 ; ii = ji ; ij = jj 186 ! 185 187 IF( u_ice(ji+1,jj ) < 0. .AND. umask(ji-1,jj ,1) == 0. ) jpbound = 1; ii = ji+1; ij = jj 186 188 IF( u_ice(ji-1,jj ) > 0. .AND. umask(ji+1,jj ,1) == 0. ) jpbound = 1; ii = ji-1; ij = jj 187 189 IF( v_ice(ji ,jj+1) < 0. .AND. vmask(ji ,jj-1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj+1 188 190 IF( v_ice(ji ,jj-1) > 0. .AND. vmask(ji ,jj+1,1) == 0. ) jpbound = 1; ii = ji ; ij = jj-1 189 191 ! 190 192 IF( nn_ice_lim_dta(ib_bdy) == 0 ) jpbound = 0; ii = ji; ij = jj ! case ice boundaries = initial conditions 191 ! do not make state variables dependent on velocity 192 193 193 ! ! do not make state variables dependent on velocity 194 ! 194 195 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ii,ij) - 0.01 ) ) ! 0 if no ice 195 196 ! 196 197 ! concentration and thickness 197 198 a_i (ji,jj,jl) = a_i (ii,ij,jl) * rswitch 198 199 ht_i(ji,jj,jl) = ht_i(ii,ij,jl) * rswitch 199 200 ht_s(ji,jj,jl) = ht_s(ii,ij,jl) * rswitch 200 201 ! 201 202 ! Ice and snow volumes 202 203 v_i(ji,jj,jl) = ht_i(ji,jj,jl) * a_i(ji,jj,jl) 203 204 v_s(ji,jj,jl) = ht_s(ji,jj,jl) * a_i(ji,jj,jl) 204 205 ! 205 206 SELECT CASE( jpbound ) 206 207 CASE( 0 ) ! velocity is inward208 207 ! 208 CASE( 0 ) ! velocity is inward 209 ! 209 210 ! Ice salinity, age, temperature 210 211 sm_i(ji,jj,jl) = rswitch * rn_ice_sal(ib_bdy) + ( 1.0 - rswitch ) * rn_simin … … 218 219 s_i(ji,jj,jk,jl) = rswitch * rn_ice_sal(ib_bdy) + ( 1.0 - rswitch ) * rn_simin 219 220 END DO 220 221 CASE( 1 ) ! velocity is outward222 221 ! 222 CASE( 1 ) ! velocity is outward 223 ! 223 224 ! Ice salinity, age, temperature 224 225 sm_i(ji,jj,jl) = rswitch * sm_i(ii,ij,jl) + ( 1.0 - rswitch ) * rn_simin … … 232 233 s_i(ji,jj,jk,jl) = rswitch * s_i(ii,ij,jk,jl) + ( 1.0 - rswitch ) * rn_simin 233 234 END DO 234 235 ! 235 236 END SELECT 236 237 ! if salinity is constant, then overwrite rn_ice_sal 238 IF( nn_icesal == 1 ) THEN 239 sm_i(ji,jj,jl) = rn_icesal 237 ! 238 IF( nn_icesal == 1 ) THEN ! constant salinity : overwrite rn_ice_sal 239 sm_i(ji,jj ,jl) = rn_icesal 240 240 s_i (ji,jj,:,jl) = rn_icesal 241 241 ENDIF 242 242 ! 243 243 ! contents 244 244 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) … … 259 259 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * a_i(ji,jj,jl) * ht_i(ji,jj,jl) * r1_nlay_i 260 260 END DO 261 261 ! 262 262 END DO 263 263 ! 264 264 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) 265 265 CALL lbc_bdy_lnk( ht_i(:,:,jl), 'T', 1., ib_bdy ) … … 267 267 CALL lbc_bdy_lnk( v_i(:,:,jl), 'T', 1., ib_bdy ) 268 268 CALL lbc_bdy_lnk( v_s(:,:,jl), 'T', 1., ib_bdy ) 269 269 ! 270 270 CALL lbc_bdy_lnk( smv_i(:,:,jl), 'T', 1., ib_bdy ) 271 271 CALL lbc_bdy_lnk( sm_i(:,:,jl), 'T', 1., ib_bdy ) … … 280 280 CALL lbc_bdy_lnk(e_i(:,:,jk,jl), 'T', 1., ib_bdy ) 281 281 END DO 282 282 ! 283 283 END DO !jl 284 284 ! 285 285 #endif 286 286 ! 287 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs')287 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_frs') 288 288 ! 289 289 END SUBROUTINE bdy_ice_frs … … 300 300 !! 2013-06 : C. Rousset 301 301 !!------------------------------------------------------------------------------ 302 !!303 302 CHARACTER(len=1), INTENT(in) :: cd_type ! nature of velocity grid-points 303 ! 304 304 INTEGER :: jb, jgrd ! dummy loop indices 305 305 INTEGER :: ji, jj ! local scalar 306 306 INTEGER :: ib_bdy ! Loop index 307 307 REAL(wp) :: zmsk1, zmsk2, zflag 308 !!------------------------------------------------------------------------------308 !!------------------------------------------------------------------------------ 309 309 ! 310 310 IF( nn_timing == 1 ) CALL timing_start('bdy_ice_lim_dyn') … … 313 313 ! 314 314 SELECT CASE( cn_ice_lim(ib_bdy) ) 315 315 ! 316 316 CASE('none') 317 318 317 CYCLE 319 318 ! 320 319 CASE('frs') 321 320 ! 322 321 IF( nn_ice_lim_dta(ib_bdy) == 0 ) CYCLE ! case ice boundaries = initial conditions 323 ! do not change ice velocity (it is only computed by rheology) 324 322 ! ! do not change ice velocity (it is only computed by rheology) 325 323 SELECT CASE ( cd_type ) 326 327 CASE ( 'U' ) 328 324 ! 325 CASE ( 'U' ) 329 326 jgrd = 2 ! u velocity 330 327 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) … … 332 329 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 333 330 zflag = idx_bdy(ib_bdy)%flagu(jb,jgrd) 334 331 ! 335 332 IF ( ABS( zflag ) == 1. ) THEN ! eastern and western boundaries 336 333 ! one of the two zmsk is always 0 (because of zflag) 337 334 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji+1,jj) ) ) ! 0 if no ice 338 335 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji-1,jj) ) ) ! 0 if no ice 339 336 ! 340 337 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 341 338 u_ice (ji,jj) = u_ice(ji+1,jj) * 0.5_wp * ABS( zflag + 1._wp ) * zmsk1 + & … … 349 346 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ji,jj) - 0.01_wp ) ) ! 0 if no ice 350 347 u_ice(ji,jj) = rswitch * u_ice(ji,jj) 351 352 ENDDO 353 348 ! 349 END DO 354 350 CALL lbc_bdy_lnk( u_ice(:,:), 'U', -1., ib_bdy ) 355 351 ! 356 352 CASE ( 'V' ) 357 358 353 jgrd = 3 ! v velocity 359 354 DO jb = 1, idx_bdy(ib_bdy)%nblen(jgrd) … … 361 356 jj = idx_bdy(ib_bdy)%nbj(jb,jgrd) 362 357 zflag = idx_bdy(ib_bdy)%flagv(jb,jgrd) 363 358 ! 364 359 IF ( ABS( zflag ) == 1. ) THEN ! northern and southern boundaries 365 360 ! one of the two zmsk is always 0 (because of zflag) 366 361 zmsk1 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj+1) ) ) ! 0 if no ice 367 362 zmsk2 = 1._wp - MAX( 0.0_wp, SIGN ( 1.0_wp , - vt_i(ji,jj-1) ) ) ! 0 if no ice 368 363 ! 369 364 ! u_ice = u_ice of the adjacent grid point except if this grid point is ice-free (then u_ice = u_oce) 370 365 v_ice (ji,jj) = v_ice(ji,jj+1) * 0.5_wp * ABS( zflag + 1._wp ) * zmsk1 + & … … 378 373 rswitch = MAX( 0.0_wp , SIGN ( 1.0_wp , at_i(ji,jj) - 0.01 ) ) ! 0 if no ice 379 374 v_ice(ji,jj) = rswitch * v_ice(ji,jj) 380 381 ENDDO 382 375 ! 376 END DO 383 377 CALL lbc_bdy_lnk( v_ice(:,:), 'V', -1., ib_bdy ) 384 378 ! 385 379 END SELECT 386 380 ! 387 381 CASE DEFAULT 388 382 CALL ctl_stop( 'bdy_ice_lim_dyn : unrecognised option for open boundaries for ice fields' ) 389 383 END SELECT 390 391 END DO392 384 ! 385 END DO 386 ! 393 387 IF( nn_timing == 1 ) CALL timing_stop('bdy_ice_lim_dyn') 394 388 ! 395 389 END SUBROUTINE bdy_ice_lim_dyn 396 390 -
branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r5656 r5870 76 76 INTEGER :: ib_bdy, ii, ij, ik, igrd, ib, ir, iseg ! dummy loop indices 77 77 INTEGER :: icount, icountr, ibr_max, ilen1, ibm1 ! local integers 78 INTEGER :: iwe, ies, iso, ino, inum, id_dummy 78 INTEGER :: iwe, ies, iso, ino, inum, id_dummy ! - - 79 79 INTEGER :: igrd_start, igrd_end, jpbdta ! - - 80 80 INTEGER :: jpbdtau, jpbdtas ! - - -
branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90
r5643 r5870 15 15 !! 'key_dynspg_flt' filtered free surface 16 16 !!---------------------------------------------------------------------- 17 USE timing ! Timing18 17 USE oce ! ocean dynamics and tracers 19 USE sbcisf ! ice shelf 18 USE bdy_oce ! ocean open boundary conditions 19 USE sbc_oce ! ocean surface boundary conditions 20 20 USE dom_oce ! ocean space and time domain 21 21 USE phycst ! physical constants 22 USE bdy_oce ! ocean open boundary conditions 22 USE sbcisf ! ice shelf 23 ! 24 USE in_out_manager ! I/O manager 23 25 USE lib_mpp ! for mppsum 24 USE in_out_manager ! I/O manager25 USE sbc_oce ! ocean surface boundary conditions26 USE timing ! Timing 27 USE lib_fortran ! Fortran routines library 26 28 27 29 IMPLICIT NONE … … 33 35 # include "domzgr_substitute.h90" 34 36 !!---------------------------------------------------------------------- 35 !! NEMO/OPA 3. 3 , NEMO Consortium (2010)37 !! NEMO/OPA 3.6 , NEMO Consortium (2014) 36 38 !! $Id$ 37 39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 78 80 TYPE(OBC_INDEX), POINTER :: idx 79 81 !!----------------------------------------------------------------------------- 80 81 IF( nn_timing == 1 ) CALL timing_start('bdy_vol')82 82 ! 83 IF( nn_timing == 1 ) CALL timing_start('bdy_vol') 84 ! 83 85 IF( ln_vol ) THEN 84 86 ! 85 87 IF( kt == nit000 ) THEN 86 88 IF(lwp) WRITE(numout,*) … … 91 93 ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 92 94 ! ----------------------------------------------------------------------- 93 z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 95 !!gm replace these lines : 96 z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / rau0 94 97 IF( lk_mpp ) CALL mpp_sum( z_cflxemp ) ! sum over the global domain 98 !!gm by : 99 !!gm z_cflxemp = glob_sum( ( emp(:,:)-rnf(:,:)+fwfisf(:,:) ) * bdytmask(:,:) * e1e2t(:,:) ) / rau0 100 !!gm 95 101 96 102 ! Transport through the unstructured open boundary 97 103 ! ------------------------------------------------ 98 zubtpecor = 0. e0104 zubtpecor = 0._wp 99 105 DO ib_bdy = 1, nb_bdy 100 106 idx => idx_bdy(ib_bdy) 101 107 ! 102 108 jgrd = 2 ! cumulate u component contribution first 103 109 DO jb = 1, idx%nblenrim(jgrd) … … 116 122 END DO 117 123 END DO 118 124 ! 119 125 END DO 120 126 IF( lk_mpp ) CALL mpp_sum( zubtpecor ) ! sum over the global domain … … 123 129 ! ------------------------------ 124 130 IF( nn_volctl==1 ) THEN ; zubtpecor = ( zubtpecor - z_cflxemp) / bdysurftot 125 ELSE ; zubtpecor = zubtpecor / bdysurftot131 ELSE ; zubtpecor = zubtpecor / bdysurftot 126 132 END IF 127 133 128 134 ! Correction of the total velocity on the unstructured boundary to respect the mass flux conservation 129 135 ! ------------------------------------------------------------- 130 ztranst = 0. e0136 ztranst = 0._wp 131 137 DO ib_bdy = 1, nb_bdy 132 138 idx => idx_bdy(ib_bdy) 133 139 ! 134 140 jgrd = 2 ! correct u component 135 141 DO jb = 1, idx%nblenrim(jgrd) … … 150 156 END DO 151 157 END DO 152 158 ! 153 159 END DO 154 160 IF( lk_mpp ) CALL mpp_sum( ztranst ) ! sum over the global domain … … 169 175 ! 170 176 END IF ! ln_vol 171 177 ! 172 178 END SUBROUTINE bdy_vol 173 179
Note: See TracChangeset
for help on using the changeset viewer.