Changeset 4254
- Timestamp:
- 2013-11-19T15:37:49+01:00 (10 years ago)
- Location:
- branches/2013/dev_r3858_NOC_ZTC/NEMOGCM
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/CONFIG/AMM12/EXP00/namelist
r3795 r4254 35 35 ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart 36 36 ! = 2 nn_date0 read in restart ; nn_it000 : check consistancy between namelist and restart 37 cn_ocerst_in = " restart" ! suffix of ocean restart name (input)37 cn_ocerst_in = "amm12_restart_oce" ! suffix of ocean restart name (input) 38 38 cn_ocerst_out = "restart" ! suffix of ocean restart name (output) 39 39 nn_istate = 1 ! output the initial state (1) or not (0) … … 446 446 ln_mask_file = .false. ! =T : read mask from file 447 447 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 448 nn_dyn2d = 2! boundary conditions for barotropic fields448 cn_dyn2d = 'flather' ! boundary conditions for barotropic fields 449 449 nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state 450 450 ! = 1, bdy data are read in 'bdydata .nc' files 451 451 ! = 2, use tidal harmonic forcing data from files 452 452 ! = 3, use external data AND tidal harmonic forcing 453 nn_dyn3d = 0! boundary conditions for baroclinic velocities453 cn_dyn3d = 'none' ! boundary conditions for baroclinic velocities 454 454 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 455 ! = 1, bdy data are read in 'bdydata .nc' files456 nn_tra = 1! boundary conditions for T and S455 ! = 1, bdy data are read in 'bdydata .nc' files 456 cn_tra = 'frs' ! boundary conditions for T and S 457 457 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 458 ! = 1, bdy data are read in 'bdydata .nc' files459 nn_rimwidth = 10 458 ! = 1, bdy data are read in 'bdydata .nc' files 459 nn_rimwidth = 10 ! width of the relaxation zone 460 460 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 461 461 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/CONFIG/GYRE/EXP00/namelist
r3795 r4254 453 453 ln_mask_file = .false. ! =T : read mask from file 454 454 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 455 nn_dyn2d = 2! boundary conditions for barotropic fields455 cn_dyn2d = 'none' ! boundary conditions for barotropic fields 456 456 nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state 457 457 ! = 1, bdy data are read in 'bdydata .nc' files 458 458 ! = 2, use tidal harmonic forcing data from files 459 459 ! = 3, use external data AND tidal harmonic forcing 460 nn_dyn3d = 0! boundary conditions for baroclinic velocities460 cn_dyn3d = 'none' ! boundary conditions for baroclinic velocities 461 461 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 462 ! = 1, bdy data are read in 'bdydata .nc' files463 nn_tra = 1! boundary conditions for T and S462 ! = 1, bdy data are read in 'bdydata .nc' files 463 cn_tra = 'none' ! boundary conditions for T and S 464 464 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 465 ! = 1, bdy data are read in 'bdydata .nc' files466 nn_rimwidth = 10 465 ! = 1, bdy data are read in 'bdydata .nc' files 466 nn_rimwidth = 10 ! width of the relaxation zone 467 467 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 468 468 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/CONFIG/GYRE_BFM/EXP00/namelist
r3815 r4254 453 453 ln_mask_file = .false. ! =T : read mask from file 454 454 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 455 nn_dyn2d = 2! boundary conditions for barotropic fields455 cn_dyn2d = 'none' ! boundary conditions for barotropic fields 456 456 nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state 457 457 ! = 1, bdy data are read in 'bdydata .nc' files 458 458 ! = 2, use tidal harmonic forcing data from files 459 459 ! = 3, use external data AND tidal harmonic forcing 460 nn_dyn3d = 0! boundary conditions for baroclinic velocities460 cn_dyn3d = 'none' ! boundary conditions for baroclinic velocities 461 461 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 462 ! = 1, bdy data are read in 'bdydata .nc' files463 nn_tra = 1! boundary conditions for T and S462 ! = 1, bdy data are read in 'bdydata .nc' files 463 cn_tra = 'none' ! boundary conditions for T and S 464 464 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 465 ! = 1, bdy data are read in 'bdydata .nc' files466 nn_rimwidth = 10 465 ! = 1, bdy data are read in 'bdydata .nc' files 466 nn_rimwidth = 10 ! width of the relaxation zone 467 467 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 468 468 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/namelist
r3890 r4254 306 306 307 307 cn_dir = './' ! root directory for the location of the bulk files 308 rn_pref = 101000. e0! reference atmospheric pressure [N/m2]/308 rn_pref = 101000._wp ! reference atmospheric pressure [N/m2]/ 309 309 ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) 310 310 ln_apr_obc = .false. ! inverse barometer added to OBC ssh data … … 448 448 ln_mask_file = .false. ! =T : read mask from file 449 449 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 450 nn_dyn2d = 2! boundary conditions for barotropic fields450 cn_dyn2d = 'none' ! boundary conditions for barotropic fields 451 451 nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state 452 452 ! = 1, bdy data are read in 'bdydata .nc' files 453 453 ! = 2, use tidal harmonic forcing data from files 454 454 ! = 3, use external data AND tidal harmonic forcing 455 nn_dyn3d = 0! boundary conditions for baroclinic velocities455 cn_dyn3d = 'none' ! boundary conditions for baroclinic velocities 456 456 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 457 ! = 1, bdy data are read in 'bdydata .nc' files458 nn_tra = 1! boundary conditions for T and S457 ! = 1, bdy data are read in 'bdydata .nc' files 458 cn_tra = 'none' ! boundary conditions for T and S 459 459 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 460 ! = 1, bdy data are read in 'bdydata .nc' files461 nn_rimwidth = 10 460 ! = 1, bdy data are read in 'bdydata .nc' files 461 nn_rimwidth = 10 ! width of the relaxation zone 462 462 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 463 463 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/namelist
r3795 r4254 318 318 rn_alphdi = 0.72 ! (Pyane, 1972) 319 319 / 320 320 !----------------------------------------------------------------------- 321 &namberg ! iceberg parameters 322 !----------------------------------------------------------------------- 323 ln_icebergs = .false. 324 ln_bergdia = .true. ! Calculate budgets 325 nn_verbose_level = 1 ! Turn on more verbose output if level > 0 326 nn_verbose_write = 15 ! Timesteps between verbose messages 327 nn_sample_rate = 1 ! Timesteps between sampling for trajectory storage 328 ! Initial mass required for an iceberg of each class 329 rn_initial_mass = 8.8e7, 4.1e8, 3.3e9, 1.8e10, 3.8e10, 7.5e10, 1.2e11, 2.2e11, 3.9e11, 7.4e11 330 ! Proportion of calving mass to apportion to each class 331 rn_distribution = 0.24, 0.12, 0.15, 0.18, 0.12, 0.07, 0.03, 0.03, 0.03, 0.02 332 ! Ratio between effective and real iceberg mass (non-dim) 333 ! i.e. number of icebergs represented at a point 334 rn_mass_scaling = 2000, 200, 50, 20, 10, 5, 2, 1, 1, 1 335 ! thickness of newly calved bergs (m) 336 rn_initial_thickness = 40., 67., 133., 175., 250., 250., 250., 250., 250., 250. 337 rn_rho_bergs = 850. ! Density of icebergs 338 rn_LoW_ratio = 1.5 ! Initial ratio L/W for newly calved icebergs 339 ln_operator_splitting = .true. ! Use first order operator splitting for thermodynamics 340 rn_bits_erosion_fraction = 0. ! Fraction of erosion melt flux to divert to bergy bits 341 rn_sicn_shift = 0. ! Shift of sea-ice concn in erosion flux (0<sicn_shift<1) 342 ln_passive_mode = .false. ! iceberg - ocean decoupling 343 nn_test_icebergs = 10 ! Create test icebergs of this class (-1 = no) 344 ! Put a test iceberg at each gridpoint in box (lon1,lon2,lat1,lat2) 345 rn_test_box = 108.0, 116.0, -66.0, -58.0 346 rn_speed_limit = 0. ! CFL speed limit for a berg 347 348 ! filename ! freq (hours) ! variable ! time interp. ! clim !'yearly' or ! weights ! rotation ! 349 ! ! (<0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! 350 sn_icb = 'calving' , -1 , 'calvingmask', .true. , .true., 'yearly' , ' ' , ' ' 351 352 cn_dir = './' 353 / 321 354 !!====================================================================== 322 355 !! *** Lateral boundary condition *** … … 396 429 ln_mask_file = .false. ! =T : read mask from file 397 430 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 398 nn_dyn2d = 2! boundary conditions for barotropic fields431 cn_dyn2d = 'none' ! boundary conditions for barotropic fields 399 432 nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state 400 433 ! = 1, bdy data are read in 'bdydata .nc' files 401 434 ! = 2, use tidal harmonic forcing data from files 402 435 ! = 3, use external data AND tidal harmonic forcing 403 nn_dyn3d = 0! boundary conditions for baroclinic velocities436 cn_dyn3d = 'none' ! boundary conditions for baroclinic velocities 404 437 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 405 ! = 1, bdy data are read in 'bdydata .nc' files406 nn_tra = 1! boundary conditions for T and S438 ! = 1, bdy data are read in 'bdydata .nc' files 439 cn_tra = 'none' ! boundary conditions for T and S 407 440 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 408 ! = 1, bdy data are read in 'bdydata .nc' files409 nn_rimwidth = 10 441 ! = 1, bdy data are read in 'bdydata .nc' files 442 nn_rimwidth = 10 ! width of the relaxation zone 410 443 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 411 444 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist
r3795 r4254 429 429 ln_mask_file = .false. ! =T : read mask from file 430 430 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 431 nn_dyn2d = 2! boundary conditions for barotropic fields431 cn_dyn2d = 'none' ! boundary conditions for barotropic fields 432 432 nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state 433 433 ! = 1, bdy data are read in 'bdydata .nc' files 434 434 ! = 2, use tidal harmonic forcing data from files 435 435 ! = 3, use external data AND tidal harmonic forcing 436 nn_dyn3d = 0! boundary conditions for baroclinic velocities436 cn_dyn3d = 'none' ! boundary conditions for baroclinic velocities 437 437 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 438 ! = 1, bdy data are read in 'bdydata .nc' files439 nn_tra = 1! boundary conditions for T and S438 ! = 1, bdy data are read in 'bdydata .nc' files 439 cn_tra = 'none' ! boundary conditions for T and S 440 440 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 441 ! = 1, bdy data are read in 'bdydata .nc' files442 nn_rimwidth = 10 441 ! = 1, bdy data are read in 'bdydata .nc' files 442 nn_rimwidth = 10 ! width of the relaxation zone 443 443 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 444 444 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/CONFIG/ORCA2_SAS_LIM/EXP00/namelist
r3795 r4254 445 445 ln_mask_file = .false. ! =T : read mask from file 446 446 cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) 447 nn_dyn2d = 2! boundary conditions for barotropic fields447 cn_dyn2d = 'none' ! boundary conditions for barotropic fields 448 448 nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state 449 449 ! = 1, bdy data are read in 'bdydata .nc' files 450 450 ! = 2, use tidal harmonic forcing data from files 451 451 ! = 3, use external data AND tidal harmonic forcing 452 nn_dyn3d = 0! boundary conditions for baroclinic velocities452 cn_dyn3d = 'none' ! boundary conditions for baroclinic velocities 453 453 nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state 454 ! = 1, bdy data are read in 'bdydata .nc' files455 nn_tra = 1! boundary conditions for T and S454 ! = 1, bdy data are read in 'bdydata .nc' files 455 cn_tra = 'none' ! boundary conditions for T and S 456 456 nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state 457 ! = 1, bdy data are read in 'bdydata .nc' files458 nn_rimwidth = 10 457 ! = 1, bdy data are read in 'bdydata .nc' files 458 nn_rimwidth = 10 ! width of the relaxation zone 459 459 ln_vol = .false. ! total volume correction (see nn_volctl parameter) 460 460 nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/NST_SRC/agrif_oce.F90
r3680 r4254 40 40 INTEGER :: e1u_id, e2v_id, sshn_id, gcb_id 41 41 INTEGER :: trn_id, trb_id, tra_id 42 INTEGER :: unb_id, vnb_id 42 43 43 44 !!---------------------------------------------------------------------- -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90
r3294 r4254 27 27 USE agrif_opa_sponge 28 28 USE lib_mpp 29 USE wrk_nemo 29 USE wrk_nemo 30 USE dynspg_oce 30 31 31 32 IMPLICIT NONE 32 33 PRIVATE 34 35 ! Barotropic arrays used to store open boundary data during 36 ! time-splitting loop: 37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_w, vbdy_w, hbdy_w 38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_e, vbdy_e, hbdy_e 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_n, vbdy_n, hbdy_n 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: ubdy_s, vbdy_s, hbdy_s 33 41 34 PUBLIC Agrif_tra, Agrif_dyn, Agrif_ssh, interpu, interpv 42 PUBLIC Agrif_tra, Agrif_dyn, Agrif_ssh, Agrif_dyn_ts, Agrif_ssh_ts 43 PUBLIC interpu, interpv, interpunb, interpvnb, interpsshn 35 44 36 45 # include "domzgr_substitute.h90" … … 169 178 REAL(wp) :: timeref 170 179 REAL(wp) :: z2dt, znugdt 171 REAL(wp) :: zrhox, rhoy180 REAL(wp) :: zrhox, zrhoy 172 181 REAL(wp), POINTER, DIMENSION(:,:,:) :: zua, zva 173 182 REAL(wp), POINTER, DIMENSION(:,:) :: spgv1, spgu1, zua2d, zva2d … … 180 189 181 190 zrhox = Agrif_Rhox() 182 rhoy = Agrif_Rhoy()191 zrhoy = Agrif_Rhoy() 183 192 184 193 timeref = 1. … … 201 210 zva2d = 0. 202 211 212 #if defined key_dynspg_flt 203 213 Agrif_SpecialValue=0. 204 214 Agrif_UseSpecialValue = ln_spc_dyn 205 215 CALL Agrif_Bc_variable(zua2d,e1u_id,calledweight=1.,procname=interpu2d) 206 216 CALL Agrif_Bc_variable(zva2d,e2v_id,calledweight=1.,procname=interpv2d) 217 #endif 207 218 Agrif_UseSpecialValue = .FALSE. 208 219 … … 210 221 IF((nbondi == -1).OR.(nbondi == 2)) THEN 211 222 223 #if defined key_dynspg_flt 212 224 DO jj=1,jpj 213 laplacu(2,jj) = timeref * (zua2d(2,jj)/(rhoy*e2u(2,jj)))*umask(2,jj,1) 214 END DO 215 216 DO jk=1,jpkm1 217 DO jj=1,jpj 218 ua(1:2,jj,jk) = (zua(1:2,jj,jk)/(rhoy*e2u(1:2,jj))) 225 laplacu(2,jj) = timeref * (zua2d(2,jj)/(zrhoy*e2u(2,jj)))*umask(2,jj,1) 226 END DO 227 #endif 228 229 DO jk=1,jpkm1 230 DO jj=1,jpj 231 ua(1:2,jj,jk) = (zua(1:2,jj,jk)/(zrhoy*e2u(1:2,jj))) 219 232 ua(1:2,jj,jk) = ua(1:2,jj,jk) / fse3u(1:2,jj,jk) 220 233 END DO 221 234 END DO 222 235 236 #if defined key_dynspg_flt 223 237 DO jk=1,jpkm1 224 238 DO jj=1,jpj … … 240 254 ENDIF 241 255 END DO 256 #else 257 spgu(2,:) = ua_b(2,:) 258 #endif 242 259 243 260 DO jk=1,jpkm1 … … 278 295 279 296 IF((nbondi == 1).OR.(nbondi == 2)) THEN 280 297 #if defined key_dynspg_flt 281 298 DO jj=1,jpj 282 laplacu(nlci-2,jj) = timeref * (zua2d(nlci-2,jj)/(rhoy*e2u(nlci-2,jj))) 283 END DO 284 285 DO jk=1,jpkm1 286 DO jj=1,jpj 287 ua(nlci-2:nlci-1,jj,jk) = (zua(nlci-2:nlci-1,jj,jk)/(rhoy*e2u(nlci-2:nlci-1,jj))) 299 laplacu(nlci-2,jj) = timeref * (zua2d(nlci-2,jj)/(zrhoy*e2u(nlci-2,jj))) 300 END DO 301 #endif 302 303 DO jk=1,jpkm1 304 DO jj=1,jpj 305 ua(nlci-2:nlci-1,jj,jk) = (zua(nlci-2:nlci-1,jj,jk)/(zrhoy*e2u(nlci-2:nlci-1,jj))) 288 306 289 307 ua(nlci-2:nlci-1,jj,jk) = ua(nlci-2:nlci-1,jj,jk) / fse3u(nlci-2:nlci-1,jj,jk) … … 292 310 END DO 293 311 312 #if defined key_dynspg_flt 294 313 DO jk=1,jpkm1 295 314 DO jj=1,jpj … … 312 331 ENDIF 313 332 END DO 333 #else 334 spgu(nlci-2,:) = ua_b(nlci-2,:) 335 #endif 314 336 315 337 DO jk=1,jpkm1 … … 353 375 IF((nbondj == -1).OR.(nbondj == 2)) THEN 354 376 377 #if defined key_dynspg_flt 355 378 DO ji=1,jpi 356 379 laplacv(ji,2) = timeref * (zva2d(ji,2)/(zrhox*e1v(ji,2))) 357 380 END DO 381 #endif 358 382 359 383 DO jk=1,jpkm1 … … 364 388 END DO 365 389 390 #if defined key_dynspg_flt 366 391 DO jk=1,jpkm1 367 392 DO ji=1,jpi … … 383 408 ENDIF 384 409 END DO 410 #else 411 spgv(:,2)=va_b(:,2) 412 #endif 385 413 386 414 DO jk=1,jpkm1 … … 413 441 DO jk=1,jpkm1 414 442 DO ji=1,jpi 415 ua(ji,2,jk) = (zua(ji,2,jk)/( rhoy*e2u(ji,2)))*umask(ji,2,jk)443 ua(ji,2,jk) = (zua(ji,2,jk)/(zrhoy*e2u(ji,2)))*umask(ji,2,jk) 416 444 ua(ji,2,jk) = ua(ji,2,jk) / fse3u(ji,2,jk) 417 445 END DO … … 422 450 IF((nbondj == 1).OR.(nbondj == 2)) THEN 423 451 452 #if defined key_dynspg_flt 424 453 DO ji=1,jpi 425 454 laplacv(ji,nlcj-2) = timeref * (zva2d(ji,nlcj-2)/(zrhox*e1v(ji,nlcj-2))) 426 455 END DO 456 #endif 427 457 428 458 DO jk=1,jpkm1 … … 433 463 END DO 434 464 465 #if defined key_dynspg_flt 435 466 DO jk=1,jpkm1 436 467 DO ji=1,jpi … … 438 469 END DO 439 470 END DO 440 441 471 442 472 spgv(:,nlcj-2)=0. … … 453 483 ENDIF 454 484 END DO 485 #else 486 spgv(:,nlcj-2)=va_b(:,nlcj-2) 487 #endif 455 488 456 489 DO jk=1,jpkm1 … … 483 516 DO jk=1,jpkm1 484 517 DO ji=1,jpi 485 ua(ji,nlcj-1,jk) = (zua(ji,nlcj-1,jk)/( rhoy*e2u(ji,nlcj-1)))*umask(ji,nlcj-1,jk)518 ua(ji,nlcj-1,jk) = (zua(ji,nlcj-1,jk)/(zrhoy*e2u(ji,nlcj-1)))*umask(ji,nlcj-1,jk) 486 519 ua(ji,nlcj-1,jk) = ua(ji,nlcj-1,jk) / fse3u(ji,nlcj-1,jk) 487 520 END DO … … 495 528 END SUBROUTINE Agrif_dyn 496 529 530 SUBROUTINE Agrif_dyn_ts( kt, jn ) 531 !!---------------------------------------------------------------------- 532 !! *** ROUTINE Agrif_dyn_ts *** 533 !!---------------------------------------------------------------------- 534 !! 535 INTEGER, INTENT(in) :: kt, jn 536 !! 537 INTEGER :: ji, jj 538 REAL(wp) :: zrhox, zrhoy 539 REAL(wp), POINTER, DIMENSION(:,:) :: spgv1, spgu1 540 REAL(wp), POINTER, DIMENSION(:,:) :: zunb, zvnb, zsshn 541 !!---------------------------------------------------------------------- 542 543 IF( Agrif_Root() ) RETURN 544 545 IF ((kt==nit000).AND.(jn==1)) THEN 546 ALLOCATE( ubdy_w(jpj), vbdy_w(jpj), hbdy_w(jpj)) 547 ALLOCATE( ubdy_e(jpj), vbdy_e(jpj), hbdy_e(jpj)) 548 ALLOCATE( ubdy_n(jpi), vbdy_n(jpi), hbdy_n(jpi)) 549 ALLOCATE( ubdy_s(jpi), vbdy_s(jpi), hbdy_s(jpi)) 550 ENDIF 551 552 IF (jn==1) THEN 553 ! Fill boundary arrays at each baroclinic step 554 ! with Parent grid barotropic fluxes and sea level 555 ! 556 CALL wrk_alloc( jpi, jpj, zunb, zvnb, zsshn ) 557 558 zrhox = Agrif_Rhox() 559 zrhoy = Agrif_Rhoy() 560 561 !alt Agrif_SpecialValue = 0.e0 562 !alt Agrif_UseSpecialValue = .TRUE. 563 !alt CALL Agrif_Bc_variable(zsshn, sshn_id, procname=interpsshn ) 564 !alt Agrif_UseSpecialValue = .FALSE. 565 566 Agrif_SpecialValue=0. 567 Agrif_UseSpecialValue = ln_spc_dyn 568 zunb(:,:) = 0._wp ; zvnb(:,:) = 0._wp 569 CALL Agrif_Bc_variable(zunb,unb_id,procname=interpunb) 570 CALL Agrif_Bc_variable(zvnb,vnb_id,procname=interpvnb) 571 Agrif_UseSpecialValue = .FALSE. 572 573 IF((nbondi == -1).OR.(nbondi == 2)) THEN 574 DO jj=1,jpj 575 ubdy_w(jj) = (zunb(2,jj)/(zrhoy*e2u(2,jj))) 576 vbdy_w(jj) = (zvnb(2,jj)/(zrhox*e1v(2,jj))) 577 hbdy_w(jj) = zsshn(2,jj) 578 END DO 579 ENDIF 580 581 IF((nbondi == 1).OR.(nbondi == 2)) THEN 582 DO jj=1,jpj 583 ubdy_e(jj) = zunb(nlci-2,jj)/(zrhoy*e2u(nlci-2,jj)) 584 vbdy_e(jj) = zvnb(nlci-1,jj)/(zrhox*e1v(nlci-1,jj)) 585 hbdy_e(jj) = zsshn(nlci-1,jj) 586 END DO 587 ENDIF 588 589 IF((nbondj == -1).OR.(nbondj == 2)) THEN 590 DO ji=1,jpi 591 ubdy_s(ji) = zunb(ji,2)/(zrhoy*e2u(ji,2)) 592 vbdy_s(ji) = zvnb(ji,2)/(zrhox*e1v(ji,2)) 593 hbdy_s(ji) = zsshn(ji,2) 594 END DO 595 ENDIF 596 597 IF((nbondj == 1).OR.(nbondj == 2)) THEN 598 DO ji=1,jpi 599 ubdy_n(ji) = zunb(ji,nlcj-1)/(zrhoy*e2u(ji,nlcj-1)) 600 vbdy_n(ji) = zvnb(ji,nlcj-2)/(zrhox*e1v(ji,nlcj-2)) 601 hbdy_n(ji) = zsshn(ji,nlcj-1) 602 END DO 603 ENDIF 604 605 CALL wrk_dealloc( jpi, jpj, zunb, zvnb, zsshn ) 606 ENDIF ! jn==1 607 608 ! Then update velocities at each barotropic time step 609 IF((nbondi == -1).OR.(nbondi == 2)) THEN 610 DO jj=1,jpj 611 va_e(2,jj) = vbdy_w(jj) * hvr_e(2,jj) 612 ! Specified fluxes: 613 ua_e(2,jj) = ubdy_w(jj) * hur_e(2,jj) 614 ! Characteristics method: 615 !alt ua_e(2,jj) = 0.5_wp * ( ubdy_w(jj) * hur_e(2,jj) + ua_e(3,jj) & 616 !alt & - sqrt(grav * hur_e(2,jj)) * (sshn_e(3,jj) - hbdy_w(jj)) ) 617 END DO 618 ENDIF 619 620 IF((nbondi == 1).OR.(nbondi == 2)) THEN 621 DO jj=1,jpj 622 va_e(nlci-1,jj) = vbdy_e(jj) * hvr_e(nlci-1,jj) 623 ! Specified fluxes: 624 ua_e(nlci-2,jj) = ubdy_e(jj) * hur_e(nlci-2,jj) 625 ! Characteristics method: 626 !alt ua_e(nlci-2,jj) = 0.5_wp * ( ubdy_e(jj) * hur_e(nlci-2,jj) + ua_e(nlci-3,jj) & 627 !alt & + sqrt(grav * hur_e(nlci-2,jj)) * (sshn_e(nlci-2,jj) - hbdy_e(jj)) ) 628 END DO 629 ENDIF 630 631 IF((nbondj == -1).OR.(nbondj == 2)) THEN 632 DO ji=1,jpi 633 ua_e(ji,2) = ubdy_s(ji) * hur_e(ji,2) 634 ! Specified fluxes: 635 va_e(ji,2) = vbdy_s(ji) * hvr_e(ji,2) 636 ! Characteristics method: 637 !alt va_e(ji,2) = 0.5_wp * ( vbdy_s(ji) * hvr_e(ji,2) + va_e(ji,3) & 638 !alt & - sqrt(grav * hvr_e(ji,2)) * (sshn_e(ji,3) - hbdy_s(ji)) ) 639 END DO 640 ENDIF 641 642 IF((nbondj == 1).OR.(nbondj == 2)) THEN 643 DO ji=1,jpi 644 ua_e(ji,nlcj-1) = ubdy_n(ji) * hur_e(ji,nlcj-1) 645 ! Specified fluxes: 646 va_e(ji,nlcj-2) = vbdy_n(ji) * hvr_e(ji,nlcj-2) 647 ! Characteristics method: 648 !alt va_e(ji,nlcj-2) = 0.5_wp * ( vbdy_n(ji) * hvr_e(ji,nlcj-2) + va_e(ji,nlcj-3) & 649 !alt & + sqrt(grav * hvr_e(ji,nlcj-2)) * (sshn_e(ji,nlcj-2) - hbdy_n(ji)) ) 650 END DO 651 ENDIF 652 ! 653 END SUBROUTINE Agrif_dyn_ts 497 654 498 655 SUBROUTINE Agrif_ssh( kt ) … … 518 675 519 676 IF((nbondj == -1).OR.(nbondj == 2)) THEN 520 ssha(:,2)=ssh n(:,3)521 sshn(:,2)=ssh b(:,3)677 ssha(:,2)=ssha(:,3) 678 sshn(:,2)=sshn(:,3) 522 679 ENDIF 523 680 524 681 IF((nbondj == 1).OR.(nbondj == 2)) THEN 525 682 ssha(:,nlcj-1)=ssha(:,nlcj-2) 526 ssh a(:,nlcj-1)=sshn(:,nlcj-2)683 sshn(:,nlcj-1)=sshn(:,nlcj-2) 527 684 ENDIF 528 685 529 686 END SUBROUTINE Agrif_ssh 530 687 688 SUBROUTINE Agrif_ssh_ts( kt ) 689 !!---------------------------------------------------------------------- 690 !! *** ROUTINE Agrif_ssh_ts *** 691 !!---------------------------------------------------------------------- 692 INTEGER, INTENT(in) :: kt 693 !! 694 !!---------------------------------------------------------------------- 695 696 IF((nbondi == -1).OR.(nbondi == 2)) THEN 697 ssha_e(2,:) = ssha_e(3,:) 698 ENDIF 699 700 IF((nbondi == 1).OR.(nbondi == 2)) THEN 701 ssha_e(nlci-1,:) = ssha_e(nlci-2,:) 702 ENDIF 703 704 IF((nbondj == -1).OR.(nbondj == 2)) THEN 705 ssha_e(:,2) = ssha_e(:,3) 706 ENDIF 707 708 IF((nbondj == 1).OR.(nbondj == 2)) THEN 709 ssha_e(:,nlcj-1) = ssha_e(:,nlcj-2) 710 ENDIF 711 712 END SUBROUTINE Agrif_ssh_ts 713 714 SUBROUTINE interpsshn(tabres,i1,i2,j1,j2) 715 !!---------------------------------------------------------------------- 716 !! *** ROUTINE interpsshn *** 717 !!---------------------------------------------------------------------- 718 INTEGER, INTENT(in) :: i1,i2,j1,j2 719 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 720 !! 721 INTEGER :: ji,jj 722 !!---------------------------------------------------------------------- 723 724 tabres(i1:i2,j1:j2) = sshn(i1:i2,j1:j2) 725 726 END SUBROUTINE interpsshn 531 727 532 728 SUBROUTINE interpu(tabres,i1,i2,j1,j2,k1,k2) … … 611 807 612 808 END SUBROUTINE interpv2d 809 810 SUBROUTINE interpunb(tabres,i1,i2,j1,j2) 811 !!---------------------------------------------------------------------- 812 !! *** ROUTINE interpunb *** 813 !!---------------------------------------------------------------------- 814 INTEGER, INTENT(in) :: i1,i2,j1,j2 815 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 816 !! 817 INTEGER :: ji,jj,jk 818 !!---------------------------------------------------------------------- 819 820 tabres(:,:) = 0.e0 821 DO jk=1,jpkm1 822 DO jj=j1,j2 823 DO ji=i1,i2 824 tabres(ji,jj) = tabres(ji,jj) + e2u(ji,jj) * un(ji,jj,jk) & 825 * umask(ji,jj,jk) * fse3u(ji,jj,jk) 826 END DO 827 END DO 828 END DO 829 830 END SUBROUTINE interpunb 831 832 SUBROUTINE interpvnb(tabres,i1,i2,j1,j2) 833 !!---------------------------------------------------------------------- 834 !! *** ROUTINE interpvnb *** 835 !!---------------------------------------------------------------------- 836 INTEGER, INTENT(in) :: i1,i2,j1,j2 837 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 838 !! 839 INTEGER :: ji,jj,jk 840 !!---------------------------------------------------------------------- 841 842 tabres(:,:) = 0.e0 843 DO jk=1,jpkm1 844 DO jj=j1,j2 845 DO ji=i1,i2 846 tabres(ji,jj) = tabres(ji,jj) + e1v(ji,jj) * vn(ji,jj,jk) & 847 * vmask(ji,jj,jk) * fse3v(ji,jj,jk) 848 END DO 849 END DO 850 END DO 851 852 END SUBROUTINE interpvnb 613 853 614 854 #else -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_oce.F90
r3651 r4254 29 29 REAL , POINTER, DIMENSION(:,:) :: nbw 30 30 REAL , POINTER, DIMENSION(:,:) :: nbd 31 REAL , POINTER, DIMENSION(:) :: flagu 32 REAL , POINTER, DIMENSION(:) :: flagv 31 REAL , POINTER, DIMENSION(:,:) :: nbdout 32 REAL , POINTER, DIMENSION(:,:) :: flagu 33 REAL , POINTER, DIMENSION(:,:) :: flagv 33 34 END TYPE OBC_INDEX 34 35 36 !! Logicals in OBC_DATA structure are true if the chosen algorithm requires this 37 !! field as external data. If true the data can come from external files 38 !! or model initial conditions. If false then no "external" data array 39 !! is required for this field. 40 35 41 TYPE, PUBLIC :: OBC_DATA !: Storage for external data 42 INTEGER, DIMENSION(2) :: nread 43 LOGICAL :: ll_ssh 44 LOGICAL :: ll_u2d 45 LOGICAL :: ll_v2d 46 LOGICAL :: ll_u3d 47 LOGICAL :: ll_v3d 48 LOGICAL :: ll_tem 49 LOGICAL :: ll_sal 36 50 REAL, POINTER, DIMENSION(:) :: ssh 37 51 REAL, POINTER, DIMENSION(:) :: u2d … … 42 56 REAL, POINTER, DIMENSION(:,:) :: sal 43 57 #if defined key_lim2 58 LOGICAL :: ll_frld 59 LOGICAL :: ll_hicif 60 LOGICAL :: ll_hsnif 44 61 REAL, POINTER, DIMENSION(:) :: frld 45 62 REAL, POINTER, DIMENSION(:) :: hicif … … 63 80 INTEGER :: nn_volctl !: = 0 the total volume will have the variability of the surface Flux E-P 64 81 ! ! = 1 the volume will be constant during all the integration. 65 INTEGER, DIMENSION(jp_bdy) :: nn_dyn2d! Choice of boundary condition for barotropic variables (U,V,SSH)66 INTEGER, DIMENSION(jp_bdy) :: nn_dyn2d_dta!: = 0 use the initial state as bdy dta ;82 CHARACTER(len=20), DIMENSION(jp_bdy) :: cn_dyn2d ! Choice of boundary condition for barotropic variables (U,V,SSH) 83 INTEGER, DIMENSION(jp_bdy) :: nn_dyn2d_dta !: = 0 use the initial state as bdy dta ; 67 84 !: = 1 read it in a NetCDF file 68 85 !: = 2 read tidal harmonic forcing from a NetCDF file 69 86 !: = 3 read external data AND tidal harmonic forcing from NetCDF files 70 INTEGER, DIMENSION(jp_bdy) :: nn_dyn3d! Choice of boundary condition for baroclinic velocities71 INTEGER, DIMENSION(jp_bdy) :: nn_dyn3d_dta!: = 0 use the initial state as bdy dta ;87 CHARACTER(len=20), DIMENSION(jp_bdy) :: cn_dyn3d ! Choice of boundary condition for baroclinic velocities 88 INTEGER, DIMENSION(jp_bdy) :: nn_dyn3d_dta !: = 0 use the initial state as bdy dta ; 72 89 !: = 1 read it in a NetCDF file 73 INTEGER, DIMENSION(jp_bdy) :: nn_tra! Choice of boundary condition for active tracers (T and S)74 INTEGER, DIMENSION(jp_bdy) :: nn_tra_dta!: = 0 use the initial state as bdy dta ;90 CHARACTER(len=20), DIMENSION(jp_bdy) :: cn_tra ! Choice of boundary condition for active tracers (T and S) 91 INTEGER, DIMENSION(jp_bdy) :: nn_tra_dta !: = 0 use the initial state as bdy dta ; 75 92 !: = 1 read it in a NetCDF file 76 93 LOGICAL, DIMENSION(jp_bdy) :: ln_tra_dmp !: =T Tracer damping 77 94 LOGICAL, DIMENSION(jp_bdy) :: ln_dyn3d_dmp !: =T Baroclinic velocity damping 78 95 REAL, DIMENSION(jp_bdy) :: rn_time_dmp !: Damping time scale in days 96 REAL, DIMENSION(jp_bdy) :: rn_time_dmp_out !: Damping time scale in days at radiation outflow points 79 97 80 98 #if defined key_lim2 81 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim2! Choice of boundary condition for sea ice variables82 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim2_dta!: = 0 use the initial state as bdy dta ;83 !: = 1 read it in a NetCDF file99 CHARACTER(len=20), DIMENSION(jp_bdy) :: nn_ice_lim2 ! Choice of boundary condition for sea ice variables 100 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim2_dta !: = 0 use the initial state as bdy dta ; 101 !: = 1 read it in a NetCDF file 84 102 #endif 85 103 ! … … 88 106 !! Global variables 89 107 !!---------------------------------------------------------------------- 90 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: bdytmask !: Mask defining computational domain at T-points91 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: bdyumask !: Mask defining computational domain at U-points92 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: bdyvmask !: Mask defining computational domain at V-points108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), TARGET :: bdytmask !: Mask defining computational domain at T-points 109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), TARGET :: bdyumask !: Mask defining computational domain at U-points 110 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), TARGET :: bdyvmask !: Mask defining computational domain at V-points 93 111 94 112 REAL(wp) :: bdysurftot !: Lateral surface of unstructured open boundary 95 113 96 REAL(wp), POINTER, DIMENSION(:,:) :: pssh !:97 REAL(wp), POINTER, DIMENSION(:,:) :: phur !:98 REAL(wp), POINTER, DIMENSION(:,:) :: phvr !: Pointers for barotropic fields99 REAL(wp), POINTER, DIMENSION(:,:) :: pu 2d!:100 REAL(wp), POINTER, DIMENSION(:,:) :: pv 2d!:114 REAL(wp), POINTER, DIMENSION(:,:) :: pssh !: 115 REAL(wp), POINTER, DIMENSION(:,:) :: phur !: 116 REAL(wp), POINTER, DIMENSION(:,:) :: phvr !: Pointers for barotropic fields 117 REAL(wp), POINTER, DIMENSION(:,:) :: pub2d, pun2d, pua2d !: 118 REAL(wp), POINTER, DIMENSION(:,:) :: pvb2d, pvn2d, pva2d !: 101 119 102 120 !!---------------------------------------------------------------------- … … 109 127 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET :: dta_global2 !: workspace for reading in global data arrays (struct. bdy) 110 128 TYPE(OBC_INDEX), DIMENSION(jp_bdy), TARGET :: idx_bdy !: bdy indices (local process) 111 TYPE(OBC_DATA) , DIMENSION(jp_bdy) 129 TYPE(OBC_DATA) , DIMENSION(jp_bdy), TARGET :: dta_bdy !: bdy external data (local process) 112 130 113 131 !!---------------------------------------------------------------------- … … 125 143 !!---------------------------------------------------------------------- 126 144 ! 127 ALLOCATE( bdytmask(jpi,jpj) , bdyumask(jpi,jpj), bdyvmask(jpi,jpj), 145 ALLOCATE( bdytmask(jpi,jpj) , bdyumask(jpi,jpj), bdyvmask(jpi,jpj), & 128 146 & STAT=bdy_oce_alloc ) 129 147 ! -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_par.F90
r3294 r4254 23 23 # endif 24 24 INTEGER, PUBLIC, PARAMETER :: jp_bdy = 10 !: Maximum number of bdy sets 25 INTEGER, PUBLIC, PARAMETER :: jpbtime = 1000 !: Max number of time dumps per file26 25 INTEGER, PUBLIC, PARAMETER :: jpbgrd = 3 !: Number of horizontal grid types used (T, U, V) 27 26 28 !! Flags for choice of schemes29 INTEGER, PUBLIC, PARAMETER :: jp_none = 0 !: Flag for no open boundary condition30 INTEGER, PUBLIC, PARAMETER :: jp_frs = 1 !: Flag for Flow Relaxation Scheme31 INTEGER, PUBLIC, PARAMETER :: jp_flather = 2 !: Flag for Flather32 27 #else 33 28 !!---------------------------------------------------------------------- -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r4105 r4254 81 81 INTEGER, DIMENSION(jpbgrd) :: ilen1 82 82 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts 83 TYPE(OBC_DATA), POINTER :: dta ! short cut 83 84 !! 84 85 !!--------------------------------------------------------------------------- … … 92 93 ! Calculate depth-mean currents 93 94 !----------------------------- 94 CALL wrk_alloc(jpi,jpj,pu2d,pv2d) 95 96 pu2d(:,:) = 0._wp 97 pv2d(:,:) = 0._wp 98 95 CALL wrk_alloc(jpi,jpj,pun2d,pvn2d) 96 97 pun2d(:,:) = 0.e0 98 pvn2d(:,:) = 0.e0 99 99 DO ik = 1, jpkm1 !! Vertically integrated momentum trends 100 pu 2d(:,:) = pu2d(:,:) + fse3u(:,:,ik) * umask(:,:,ik) * un(:,:,ik)101 pv 2d(:,:) = pv2d(:,:) + fse3v(:,:,ik) * vmask(:,:,ik) * vn(:,:,ik)100 pun2d(:,:) = pun2d(:,:) + fse3u(:,:,ik) * umask(:,:,ik) * un(:,:,ik) 101 pvn2d(:,:) = pvn2d(:,:) + fse3v(:,:,ik) * vmask(:,:,ik) * vn(:,:,ik) 102 102 END DO 103 pu 2d(:,:) = pu2d(:,:) * hur(:,:)104 pv 2d(:,:) = pv2d(:,:) * hvr(:,:)103 pun2d(:,:) = pun2d(:,:) * hur(:,:) 104 pvn2d(:,:) = pvn2d(:,:) * hvr(:,:) 105 105 106 106 DO ib_bdy = 1, nb_bdy … … 108 108 nblen => idx_bdy(ib_bdy)%nblen 109 109 nblenrim => idx_bdy(ib_bdy)%nblenrim 110 111 IF( nn_dyn2d(ib_bdy) .gt. 0 .and. nn_dyn2d_dta(ib_bdy) .eq. 0 ) THEN 110 dta => dta_bdy(ib_bdy) 111 112 IF( nn_dyn2d_dta(ib_bdy) .eq. 0 ) THEN 112 113 ilen1(:) = nblen(:) 113 igrd = 1 114 DO ib = 1, ilen1(igrd) 115 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 116 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 117 dta_bdy(ib_bdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1) 118 END DO 119 igrd = 2 120 DO ib = 1, ilen1(igrd) 121 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 122 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 123 dta_bdy(ib_bdy)%u2d(ib) = pu2d(ii,ij) * umask(ii,ij,1) 124 END DO 125 igrd = 3 126 DO ib = 1, ilen1(igrd) 127 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 128 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 129 dta_bdy(ib_bdy)%v2d(ib) = pv2d(ii,ij) * vmask(ii,ij,1) 130 END DO 131 ENDIF 132 133 IF( nn_dyn3d(ib_bdy) .gt. 0 .and. nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN 134 ilen1(:) = nblen(:) 135 igrd = 2 136 DO ib = 1, ilen1(igrd) 137 DO ik = 1, jpkm1 114 IF( dta%ll_ssh ) THEN 115 igrd = 1 116 DO ib = 1, ilen1(igrd) 138 117 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 139 118 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 140 dta_bdy(ib_bdy)% u3d(ib,ik) = ( un(ii,ij,ik) - pu2d(ii,ij) ) * umask(ii,ij,ik)141 END DO 142 END DO143 igrd = 3144 DO ib = 1, ilen1(igrd)145 DO i k = 1, jpkm1119 dta_bdy(ib_bdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1) 120 END DO 121 END IF 122 IF( dta%ll_u2d ) THEN 123 igrd = 2 124 DO ib = 1, ilen1(igrd) 146 125 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 147 126 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 148 dta_bdy(ib_bdy)%v3d(ib,ik) = ( vn(ii,ij,ik) - pv2d(ii,ij) ) * vmask(ii,ij,ik) 149 END DO 150 END DO 151 ENDIF 152 153 IF( nn_tra(ib_bdy) .gt. 0 .and. nn_tra_dta(ib_bdy) .eq. 0 ) THEN 154 ilen1(:) = nblen(:) 155 igrd = 1 ! Everything is at T-points here 156 DO ib = 1, ilen1(igrd) 157 DO ik = 1, jpkm1 127 dta_bdy(ib_bdy)%u2d(ib) = pun2d(ii,ij) * umask(ii,ij,1) 128 END DO 129 END IF 130 IF( dta%ll_v2d ) THEN 131 igrd = 3 132 DO ib = 1, ilen1(igrd) 158 133 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 159 134 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 160 dta_bdy(ib_bdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik) 161 dta_bdy(ib_bdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik) 162 END DO 163 END DO 164 ENDIF 165 166 #if defined key_lim2 167 IF( nn_ice_lim2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN 135 dta_bdy(ib_bdy)%v2d(ib) = pvn2d(ii,ij) * vmask(ii,ij,1) 136 END DO 137 END IF 138 ENDIF 139 140 IF( nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN 168 141 ilen1(:) = nblen(:) 169 igrd = 1 ! Everything is at T-points here 170 DO ib = 1, ilen1(igrd) 171 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 172 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 173 dta_bdy(ib_bdy)%frld(ib) = frld(ii,ij) * tmask(ii,ij,1) 174 dta_bdy(ib_bdy)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1) 175 dta_bdy(ib_bdy)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1) 176 END DO 142 IF( dta%ll_u3d ) THEN 143 igrd = 2 144 DO ib = 1, ilen1(igrd) 145 DO ik = 1, jpkm1 146 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 147 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 148 dta_bdy(ib_bdy)%u3d(ib,ik) = ( un(ii,ij,ik) - pun2d(ii,ij) ) * umask(ii,ij,ik) 149 END DO 150 END DO 151 END IF 152 IF( dta%ll_v3d ) THEN 153 igrd = 3 154 DO ib = 1, ilen1(igrd) 155 DO ik = 1, jpkm1 156 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 157 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 158 dta_bdy(ib_bdy)%v3d(ib,ik) = ( vn(ii,ij,ik) - pvn2d(ii,ij) ) * vmask(ii,ij,ik) 159 END DO 160 END DO 161 END IF 162 ENDIF 163 164 IF( nn_tra_dta(ib_bdy) .eq. 0 ) THEN 165 ilen1(:) = nblen(:) 166 IF( dta%ll_tem ) THEN 167 igrd = 1 168 DO ib = 1, ilen1(igrd) 169 DO ik = 1, jpkm1 170 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 171 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 172 dta_bdy(ib_bdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik) 173 END DO 174 END DO 175 END IF 176 IF( dta%ll_sal ) THEN 177 igrd = 1 178 DO ib = 1, ilen1(igrd) 179 DO ik = 1, jpkm1 180 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 181 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 182 dta_bdy(ib_bdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik) 183 END DO 184 END DO 185 END IF 186 ENDIF 187 188 #if defined key_lim2 189 IF( nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN 190 ilen1(:) = nblen(:) 191 IF( dta%ll_frld ) THEN 192 igrd = 1 193 DO ib = 1, ilen1(igrd) 194 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 195 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 196 dta_bdy(ib_bdy)%frld(ib) = frld(ii,ij) * tmask(ii,ij,1) 197 END DO 198 END IF 199 IF( dta%ll_hicif ) THEN 200 igrd = 1 201 DO ib = 1, ilen1(igrd) 202 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 203 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 204 dta_bdy(ib_bdy)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1) 205 END DO 206 END IF 207 IF( dta%ll_hsnif ) THEN 208 igrd = 1 209 DO ib = 1, ilen1(igrd) 210 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 211 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 212 dta_bdy(ib_bdy)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1) 213 END DO 214 END IF 177 215 ENDIF 178 216 #endif … … 180 218 ENDDO ! ib_bdy 181 219 182 CALL wrk_dealloc(jpi,jpj,pu 2d,pv2d)220 CALL wrk_dealloc(jpi,jpj,pun2d,pvn2d) 183 221 184 222 ENDIF ! kt .eq. nit000 … … 189 227 jstart = 1 190 228 DO ib_bdy = 1, nb_bdy 229 dta => dta_bdy(ib_bdy) 191 230 IF( nn_dta(ib_bdy) .eq. 1 ) THEN ! skip this bit if no external data required 192 231 … … 194 233 ! Update barotropic boundary conditions only 195 234 ! jit is optional argument for fld_read and bdytide_update 196 IF( nn_dyn2d(ib_bdy) .gt. 0) THEN235 IF( cn_dyn2d(ib_bdy) /= 'none' ) THEN 197 236 IF( nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 198 dta_bdy(ib_bdy)%ssh(:) = 0._wp199 dta_bdy(ib_bdy)%u2d(:) = 0._wp200 dta_bdy(ib_bdy)%v2d(:) = 0._wp237 IF( dta%ll_ssh ) dta%ssh(:) = 0.0 238 IF( dta%ll_u2d ) dta%u2d(:) = 0.0 239 IF( dta%ll_u3d ) dta%v2d(:) = 0.0 201 240 ENDIF 202 IF (nn_tra(ib_bdy).ne.4) THEN 203 IF( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 .OR. & 204 & (ln_full_vel_array(ib_bdy) .AND. nn_dyn3d_dta(ib_bdy).eq.1) )THEN 205 206 ! For the runoff case, no need to update the forcing (already done in the baroclinic part) 207 jend = nb_bdy_fld(ib_bdy) 208 IF ( nn_tra(ib_bdy) .GT. 0 .AND. nn_tra_dta(ib_bdy) .GE. 1 ) jend = jend - 2 241 IF (cn_tra(ib_bdy) /= 'runoff') THEN 242 IF( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 ) THEN 243 244 jend = jstart + dta%nread(2) - 1 209 245 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), & 210 246 & kit=jit, kt_offset=time_offset ) 211 IF ( nn_tra(ib_bdy) .GT. 0 .AND. nn_tra_dta(ib_bdy) .GE. 1 ) jend = jend + 2 212 213 ! If full velocities in boundary data then split into barotropic and baroclinic data 247 248 ! If full velocities in boundary data then extract barotropic velocities from 3D fields 214 249 IF( ln_full_vel_array(ib_bdy) .AND. & 215 250 & ( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 .OR. & … … 217 252 218 253 igrd = 2 ! zonal velocity 219 dta _bdy(ib_bdy)%u2d(:) = 0._wp254 dta%u2d(:) = 0.0 220 255 DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 221 256 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 222 257 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 223 258 DO ik = 1, jpkm1 224 dta _bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) &225 & + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta _bdy(ib_bdy)%u3d(ib,ik)259 dta%u2d(ib) = dta%u2d(ib) & 260 & + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta%u3d(ib,ik) 226 261 END DO 227 dta_bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) * hur(ii,ij) 228 DO ik = 1, jpkm1 229 dta_bdy(ib_bdy)%u3d(ib,ik) = dta_bdy(ib_bdy)%u3d(ib,ik) - dta_bdy(ib_bdy)%u2d(ib) 230 END DO 262 dta%u2d(ib) = dta%u2d(ib) * hur(ii,ij) 231 263 END DO 232 264 igrd = 3 ! meridional velocity 233 dta _bdy(ib_bdy)%v2d(:) = 0._wp265 dta%v2d(:) = 0.0 234 266 DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 235 267 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 236 268 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 237 269 DO ik = 1, jpkm1 238 dta _bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) &239 & + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta _bdy(ib_bdy)%v3d(ib,ik)270 dta%v2d(ib) = dta%v2d(ib) & 271 & + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta%v3d(ib,ik) 240 272 END DO 241 dta_bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) * hvr(ii,ij) 242 DO ik = 1, jpkm1 243 dta_bdy(ib_bdy)%v3d(ib,ik) = dta_bdy(ib_bdy)%v3d(ib,ik) - dta_bdy(ib_bdy)%v2d(ib) 244 END DO 273 dta%v2d(ib) = dta%v2d(ib) * hvr(ii,ij) 245 274 END DO 246 275 ENDIF 247 276 ENDIF 248 277 IF( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing 249 CALL bdytide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta _bdy(ib_bdy), td=tides(ib_bdy), &278 CALL bdytide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta, td=tides(ib_bdy), & 250 279 & jit=jit, time_offset=time_offset ) 251 280 ENDIF … … 253 282 ENDIF 254 283 ELSE 255 IF ( nn_tra(ib_bdy).eq.4) then ! runoff condition284 IF (cn_tra(ib_bdy) == 'runoff') then ! runoff condition 256 285 jend = nb_bdy_fld(ib_bdy) 257 286 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & … … 262 291 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 263 292 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 264 dta _bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) )293 dta%u2d(ib) = dta%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) ) 265 294 END DO 266 295 ! … … 269 298 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 270 299 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 271 dta _bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) )300 dta%v2d(ib) = dta%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) ) 272 301 END DO 273 302 ELSE 274 IF( nn_dyn2d (ib_bdy) .gt. 0 .and. nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays275 dta_bdy(ib_bdy)%ssh(:) = 0._wp276 dta_bdy(ib_bdy)%u2d(:) = 0._wp277 dta_bdy(ib_bdy)%v2d(:) = 0._wp303 IF( nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 304 IF( dta%ll_ssh ) dta%ssh(:) = 0.0 305 IF( dta%ll_u2d ) dta%u2d(:) = 0.0 306 IF( dta%ll_v2d ) dta%v2d(:) = 0.0 278 307 ENDIF 279 IF( nb_bdy_fld(ib_bdy) .gt. 0 ) THEN ! update external data280 jend = nb_bdy_fld(ib_bdy)308 IF( dta%nread(1) .gt. 0 ) THEN ! update external data 309 jend = jstart + dta%nread(1) - 1 281 310 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & 282 311 & map=nbmap_ptr(jstart:jend), kt_offset=time_offset ) … … 287 316 & nn_dyn3d_dta(ib_bdy) .EQ. 1 ) ) THEN 288 317 igrd = 2 ! zonal velocity 289 dta _bdy(ib_bdy)%u2d(:) = 0._wp318 dta%u2d(:) = 0.0 290 319 DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 291 320 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 292 321 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 293 322 DO ik = 1, jpkm1 294 dta _bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) &295 & + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta _bdy(ib_bdy)%u3d(ib,ik)323 dta%u2d(ib) = dta%u2d(ib) & 324 & + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta%u3d(ib,ik) 296 325 END DO 297 dta _bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) * hur(ii,ij)326 dta%u2d(ib) = dta%u2d(ib) * hur(ii,ij) 298 327 DO ik = 1, jpkm1 299 dta _bdy(ib_bdy)%u3d(ib,ik) = dta_bdy(ib_bdy)%u3d(ib,ik) - dta_bdy(ib_bdy)%u2d(ib)328 dta%u3d(ib,ik) = dta%u3d(ib,ik) - dta%u2d(ib) 300 329 END DO 301 330 END DO 302 331 igrd = 3 ! meridional velocity 303 dta _bdy(ib_bdy)%v2d(:) = 0._wp332 dta%v2d(:) = 0.0 304 333 DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 305 334 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 306 335 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 307 336 DO ik = 1, jpkm1 308 dta _bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) &309 & + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta _bdy(ib_bdy)%v3d(ib,ik)337 dta%v2d(ib) = dta%v2d(ib) & 338 & + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta%v3d(ib,ik) 310 339 END DO 311 dta _bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) * hvr(ii,ij)340 dta%v2d(ib) = dta%v2d(ib) * hvr(ii,ij) 312 341 DO ik = 1, jpkm1 313 dta _bdy(ib_bdy)%v3d(ib,ik) = dta_bdy(ib_bdy)%v3d(ib,ik) - dta_bdy(ib_bdy)%v2d(ib)342 dta%v3d(ib,ik) = dta%v3d(ib,ik) - dta%v2d(ib) 314 343 END DO 315 344 END DO 316 345 ENDIF 317 ENDIF 318 ENDIF 319 jstart = jend+1 346 347 ENDIF 348 ENDIF 349 jstart = jstart + dta%nread(1) 320 350 END IF ! nn_dta(ib_bdy) = 1 321 351 END DO ! ib_bdy 322 352 353 ! bg jchanut tschanges 323 354 #if defined key_tide 324 355 ! Add tides if not split-explicit free surface else this is done in ts loop 325 356 IF (.NOT.lk_dynspg_ts) CALL bdy_dta_tides( kt=kt, time_offset=time_offset ) 326 357 #endif 358 ! end jchanut tschanges 359 327 360 IF ( ln_apr_obc ) THEN 328 361 DO ib_bdy = 1, nb_bdy 329 IF ( nn_tra(ib_bdy).NE.4)THEN362 IF (cn_tra(ib_bdy) /= 'runoff')THEN 330 363 igrd = 1 ! meridional velocity 331 364 DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) … … 350 383 !! for open boundary conditions 351 384 !! 352 !! ** Method : Use fldread.F90385 !! ** Method : 353 386 !! 354 387 !!---------------------------------------------------------------------- … … 362 395 ! =F => baroclinic velocities in 3D boundary data 363 396 INTEGER :: ilen_global ! Max length required for global bdy dta arrays 364 INTEGER, DIMENSION(jpbgrd) :: ilen0 ! size of local arrays365 397 INTEGER, ALLOCATABLE, DIMENSION(:) :: ilen1, ilen3 ! size of 1st and 3rd dimensions of local arrays 366 398 INTEGER, ALLOCATABLE, DIMENSION(:) :: ibdy ! bdy set for a particular jfld 367 399 INTEGER, ALLOCATABLE, DIMENSION(:) :: igrid ! index for grid type (1,2,3 = T,U,V) 368 400 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts 401 TYPE(OBC_DATA), POINTER :: dta ! short cut 369 402 TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) :: blf_i ! array of namelist information structures 370 403 TYPE(FLD_N) :: bn_tem, bn_sal, bn_u3d, bn_v3d ! … … 404 437 nb_bdy_fld(:) = 0 405 438 DO ib_bdy = 1, nb_bdy 406 IF( nn_dyn2d(ib_bdy) .gt. 0.and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) THEN439 IF( cn_dyn2d(ib_bdy) /= 'none' .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) THEN 407 440 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3 408 441 ENDIF 409 IF( nn_dyn3d(ib_bdy) .gt. 0.and. nn_dyn3d_dta(ib_bdy) .eq. 1 ) THEN442 IF( cn_dyn3d(ib_bdy) /= 'none' .and. nn_dyn3d_dta(ib_bdy) .eq. 1 ) THEN 410 443 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2 411 444 ENDIF 412 IF( nn_tra(ib_bdy) .gt. 0.and. nn_tra_dta(ib_bdy) .eq. 1 ) THEN445 IF( cn_tra(ib_bdy) /= 'none' .and. nn_tra_dta(ib_bdy) .eq. 1 ) THEN 413 446 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2 414 447 ENDIF 415 448 #if defined key_lim2 416 IF( nn_ice_lim2(ib_bdy) .gt. 0.and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN449 IF( cn_ice_lim2(ib_bdy) /= 'none' .and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN 417 450 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3 418 451 ENDIF … … 472 505 nblen => idx_bdy(ib_bdy)%nblen 473 506 nblenrim => idx_bdy(ib_bdy)%nblenrim 507 dta => dta_bdy(ib_bdy) 508 dta%nread(2) = 0 474 509 475 510 ! Only read in necessary fields for this set. 476 511 ! Important that barotropic variables come first. 477 IF( nn_dyn2d(ib_bdy) .gt. 0 .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) THEN 478 479 IF( nn_dyn2d(ib_bdy) .ne. jp_frs .and. nn_tra(ib_bdy) .ne. 4 ) THEN ! runoff condition : no ssh reading 512 IF( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) THEN 513 514 IF( dta%ll_ssh ) THEN 515 if(lwp) write(numout,*) '++++++ reading in ssh field' 480 516 jfld = jfld + 1 481 517 blf_i(jfld) = bn_ssh … … 484 520 ilen1(jfld) = nblen(igrid(jfld)) 485 521 ilen3(jfld) = 1 486 ENDIF 487 488 IF( .not. ln_full_vel_array(ib_bdy) ) THEN 522 dta%nread(2) = dta%nread(2) + 1 523 ENDIF 524 525 IF( dta%ll_u2d .and. .not. ln_full_vel_array(ib_bdy) ) THEN 526 if(lwp) write(numout,*) '++++++ reading in u2d field' 489 527 jfld = jfld + 1 490 528 blf_i(jfld) = bn_u2d … … 493 531 ilen1(jfld) = nblen(igrid(jfld)) 494 532 ilen3(jfld) = 1 495 533 dta%nread(2) = dta%nread(2) + 1 534 ENDIF 535 536 IF( dta%ll_v2d .and. .not. ln_full_vel_array(ib_bdy) ) THEN 537 if(lwp) write(numout,*) '++++++ reading in v2d field' 496 538 jfld = jfld + 1 497 539 blf_i(jfld) = bn_v2d … … 500 542 ilen1(jfld) = nblen(igrid(jfld)) 501 543 ilen3(jfld) = 1 502 ENDIF 503 504 ENDIF 505 506 ! baroclinic velocities 507 IF( ( nn_dyn3d(ib_bdy) .gt. 0 .and. nn_dyn3d_dta(ib_bdy) .eq. 1 ) .or. & 508 & ( ln_full_vel_array(ib_bdy) .and. nn_dyn2d(ib_bdy) .gt. 0 .and. & 509 & ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) ) THEN 510 511 jfld = jfld + 1 512 blf_i(jfld) = bn_u3d 513 ibdy(jfld) = ib_bdy 514 igrid(jfld) = 2 515 ilen1(jfld) = nblen(igrid(jfld)) 516 ilen3(jfld) = jpk 517 518 jfld = jfld + 1 519 blf_i(jfld) = bn_v3d 520 ibdy(jfld) = ib_bdy 521 igrid(jfld) = 3 522 ilen1(jfld) = nblen(igrid(jfld)) 523 ilen3(jfld) = jpk 544 dta%nread(2) = dta%nread(2) + 1 545 ENDIF 546 547 ENDIF 548 549 ! read 3D velocities if baroclinic velocities require OR if 550 ! barotropic velocities required and ln_full_vel set to .true. 551 IF( nn_dyn3d_dta(ib_bdy) .eq. 1 .or. & 552 & ( ln_full_vel_array(ib_bdy) .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) ) THEN 553 554 IF( dta%ll_u3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) ) THEN 555 if(lwp) write(numout,*) '++++++ reading in u3d field' 556 jfld = jfld + 1 557 blf_i(jfld) = bn_u3d 558 ibdy(jfld) = ib_bdy 559 igrid(jfld) = 2 560 ilen1(jfld) = nblen(igrid(jfld)) 561 ilen3(jfld) = jpk 562 IF( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) dta%nread(2) = dta%nread(2) + 1 563 ENDIF 564 565 IF( dta%ll_v3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) ) THEN 566 if(lwp) write(numout,*) '++++++ reading in v3d field' 567 jfld = jfld + 1 568 blf_i(jfld) = bn_v3d 569 ibdy(jfld) = ib_bdy 570 igrid(jfld) = 3 571 ilen1(jfld) = nblen(igrid(jfld)) 572 ilen3(jfld) = jpk 573 IF( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) dta%nread(2) = dta%nread(2) + 1 574 ENDIF 524 575 525 576 ENDIF 526 577 527 578 ! temperature and salinity 528 IF( nn_tra(ib_bdy) .gt. 0 .and. nn_tra_dta(ib_bdy) .eq. 1 ) THEN 529 530 jfld = jfld + 1 531 blf_i(jfld) = bn_tem 532 ibdy(jfld) = ib_bdy 533 igrid(jfld) = 1 534 ilen1(jfld) = nblen(igrid(jfld)) 535 ilen3(jfld) = jpk 536 537 jfld = jfld + 1 538 blf_i(jfld) = bn_sal 539 ibdy(jfld) = ib_bdy 540 igrid(jfld) = 1 541 ilen1(jfld) = nblen(igrid(jfld)) 542 ilen3(jfld) = jpk 579 IF( nn_tra_dta(ib_bdy) .eq. 1 ) THEN 580 581 IF( dta%ll_tem ) THEN 582 if(lwp) write(numout,*) '++++++ reading in tem field' 583 jfld = jfld + 1 584 blf_i(jfld) = bn_tem 585 ibdy(jfld) = ib_bdy 586 igrid(jfld) = 1 587 ilen1(jfld) = nblen(igrid(jfld)) 588 ilen3(jfld) = jpk 589 ENDIF 590 591 IF( dta%ll_sal ) THEN 592 if(lwp) write(numout,*) '++++++ reading in sal field' 593 jfld = jfld + 1 594 blf_i(jfld) = bn_sal 595 ibdy(jfld) = ib_bdy 596 igrid(jfld) = 1 597 ilen1(jfld) = nblen(igrid(jfld)) 598 ilen3(jfld) = jpk 599 ENDIF 543 600 544 601 ENDIF … … 546 603 #if defined key_lim2 547 604 ! sea ice 548 IF( nn_ice_lim2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN 549 550 jfld = jfld + 1 551 blf_i(jfld) = bn_frld 552 ibdy(jfld) = ib_bdy 553 igrid(jfld) = 1 554 ilen1(jfld) = nblen(igrid(jfld)) 555 ilen3(jfld) = 1 556 557 jfld = jfld + 1 558 blf_i(jfld) = bn_hicif 559 ibdy(jfld) = ib_bdy 560 igrid(jfld) = 1 561 ilen1(jfld) = nblen(igrid(jfld)) 562 ilen3(jfld) = 1 563 564 jfld = jfld + 1 565 blf_i(jfld) = bn_hsnif 566 ibdy(jfld) = ib_bdy 567 igrid(jfld) = 1 568 ilen1(jfld) = nblen(igrid(jfld)) 569 ilen3(jfld) = 1 605 IF( nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN 606 607 IF( dta%ll_frld ) THEN 608 jfld = jfld + 1 609 blf_i(jfld) = bn_frld 610 ibdy(jfld) = ib_bdy 611 igrid(jfld) = 1 612 ilen1(jfld) = nblen(igrid(jfld)) 613 ilen3(jfld) = 1 614 ENDIF 615 616 IF( dta%ll_hicif ) THEN 617 jfld = jfld + 1 618 blf_i(jfld) = bn_hicif 619 ibdy(jfld) = ib_bdy 620 igrid(jfld) = 1 621 ilen1(jfld) = nblen(igrid(jfld)) 622 ilen3(jfld) = 1 623 ENDIF 624 625 IF( dta%ll_hsnif ) THEN 626 jfld = jfld + 1 627 blf_i(jfld) = bn_hsnif 628 ibdy(jfld) = ib_bdy 629 igrid(jfld) = 1 630 ilen1(jfld) = nblen(igrid(jfld)) 631 ilen3(jfld) = 1 632 ENDIF 570 633 571 634 ENDIF … … 582 645 ENDIF 583 646 647 dta%nread(1) = nb_bdy_fld(ib_bdy) 648 584 649 ENDIF ! nn_dta .eq. 1 585 650 ENDDO ! ib_bdy … … 610 675 611 676 nblen => idx_bdy(ib_bdy)%nblen 612 nblenrim => idx_bdy(ib_bdy)%nblenrim 613 614 IF (nn_dyn2d(ib_bdy) .gt. 0) THEN 615 IF( nn_dyn2d_dta(ib_bdy) .eq. 0 .or. nn_dyn2d_dta(ib_bdy) .eq. 2 .or. ln_full_vel_array(ib_bdy) ) THEN 616 ilen0(1:3) = nblen(1:3) 617 ALLOCATE( dta_bdy(ib_bdy)%u2d(ilen0(2)) ) 618 ALLOCATE( dta_bdy(ib_bdy)%v2d(ilen0(3)) ) 619 IF ( nn_dyn2d(ib_bdy) .ne. jp_frs .and. (nn_dyn2d_dta(ib_bdy).eq.1.or.nn_dyn2d_dta(ib_bdy).eq.3) ) THEN 620 jfld = jfld + 1 621 dta_bdy(ib_bdy)%ssh => bf(jfld)%fnow(:,1,1) 677 dta => dta_bdy(ib_bdy) 678 679 if(lwp) then 680 write(numout,*) '++++++ dta%ll_ssh = ',dta%ll_ssh 681 write(numout,*) '++++++ dta%ll_u2d = ',dta%ll_u2d 682 write(numout,*) '++++++ dta%ll_v2d = ',dta%ll_v2d 683 write(numout,*) '++++++ dta%ll_u3d = ',dta%ll_u3d 684 write(numout,*) '++++++ dta%ll_v3d = ',dta%ll_v3d 685 write(numout,*) '++++++ dta%ll_tem = ',dta%ll_tem 686 write(numout,*) '++++++ dta%ll_sal = ',dta%ll_sal 687 endif 688 689 IF ( nn_dyn2d_dta(ib_bdy) .eq. 0 .or. nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN 690 if(lwp) write(numout,*) '++++++ dta%ssh/u2d/u3d allocated space' 691 IF( dta%ll_ssh ) ALLOCATE( dta%ssh(nblen(1)) ) 692 IF( dta%ll_u2d ) ALLOCATE( dta%u2d(nblen(2)) ) 693 IF( dta%ll_v2d ) ALLOCATE( dta%v2d(nblen(3)) ) 694 ENDIF 695 IF ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) THEN 696 IF( dta%ll_ssh ) THEN 697 if(lwp) write(numout,*) '++++++ dta%ssh pointing to fnow' 698 jfld = jfld + 1 699 dta%ssh => bf(jfld)%fnow(:,1,1) 700 ENDIF 701 IF ( dta%ll_u2d ) THEN 702 IF ( ln_full_vel_array(ib_bdy) ) THEN 703 if(lwp) write(numout,*) '++++++ dta%u2d allocated space' 704 ALLOCATE( dta%u2d(nblen(2)) ) 622 705 ELSE 623 ALLOCATE( dta_bdy(ib_bdy)%ssh(nblen(1)) ) 624 ENDIF 625 ELSE 626 IF( nn_dyn2d(ib_bdy) .ne. jp_frs ) THEN 627 jfld = jfld + 1 628 dta_bdy(ib_bdy)%ssh => bf(jfld)%fnow(:,1,1) 629 ENDIF 706 if(lwp) write(numout,*) '++++++ dta%u2d pointing to fnow' 707 jfld = jfld + 1 708 dta%u2d => bf(jfld)%fnow(:,1,1) 709 ENDIF 710 ENDIF 711 IF ( dta%ll_v2d ) THEN 712 IF ( ln_full_vel_array(ib_bdy) ) THEN 713 if(lwp) write(numout,*) '++++++ dta%v2d allocated space' 714 ALLOCATE( dta%v2d(nblen(3)) ) 715 ELSE 716 if(lwp) write(numout,*) '++++++ dta%v2d pointing to fnow' 717 jfld = jfld + 1 718 dta%v2d => bf(jfld)%fnow(:,1,1) 719 ENDIF 720 ENDIF 721 ENDIF 722 723 IF ( nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN 724 if(lwp) write(numout,*) '++++++ dta%u3d/v3d allocated space' 725 IF( dta%ll_u3d ) ALLOCATE( dta_bdy(ib_bdy)%u3d(nblen(2),jpk) ) 726 IF( dta%ll_v3d ) ALLOCATE( dta_bdy(ib_bdy)%v3d(nblen(3),jpk) ) 727 ENDIF 728 IF ( nn_dyn3d_dta(ib_bdy) .eq. 1 .or. & 729 & ( ln_full_vel_array(ib_bdy) .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) ) THEN 730 IF ( dta%ll_u3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) ) THEN 731 if(lwp) write(numout,*) '++++++ dta%u3d pointing to fnow' 630 732 jfld = jfld + 1 631 dta_bdy(ib_bdy)%u2d => bf(jfld)%fnow(:,1,1) 733 dta_bdy(ib_bdy)%u3d => bf(jfld)%fnow(:,1,:) 734 ENDIF 735 IF ( dta%ll_v3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) ) THEN 736 if(lwp) write(numout,*) '++++++ dta%v3d pointing to fnow' 632 737 jfld = jfld + 1 633 dta_bdy(ib_bdy)%v2d => bf(jfld)%fnow(:,1,1) 634 ENDIF 635 ENDIF 636 637 IF ( nn_dyn3d(ib_bdy) .gt. 0 .and. nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN 638 ilen0(1:3) = nblen(1:3) 639 ALLOCATE( dta_bdy(ib_bdy)%u3d(ilen0(2),jpk) ) 640 ALLOCATE( dta_bdy(ib_bdy)%v3d(ilen0(3),jpk) ) 641 ENDIF 642 IF ( ( nn_dyn3d(ib_bdy) .gt. 0 .and. nn_dyn3d_dta(ib_bdy) .eq. 1 ).or. & 643 & ( ln_full_vel_array(ib_bdy) .and. nn_dyn2d(ib_bdy) .gt. 0 .and. & 644 & ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) ) THEN 645 jfld = jfld + 1 646 dta_bdy(ib_bdy)%u3d => bf(jfld)%fnow(:,1,:) 647 jfld = jfld + 1 648 dta_bdy(ib_bdy)%v3d => bf(jfld)%fnow(:,1,:) 649 ENDIF 650 651 IF (nn_tra(ib_bdy) .gt. 0) THEN 652 IF( nn_tra_dta(ib_bdy) .eq. 0 ) THEN 653 ilen0(1:3) = nblen(1:3) 654 ALLOCATE( dta_bdy(ib_bdy)%tem(ilen0(1),jpk) ) 655 ALLOCATE( dta_bdy(ib_bdy)%sal(ilen0(1),jpk) ) 656 ELSE 738 dta_bdy(ib_bdy)%v3d => bf(jfld)%fnow(:,1,:) 739 ENDIF 740 ENDIF 741 742 IF( nn_tra_dta(ib_bdy) .eq. 0 ) THEN 743 if(lwp) write(numout,*) '++++++ dta%tem/sal allocated space' 744 IF( dta%ll_tem ) ALLOCATE( dta_bdy(ib_bdy)%tem(nblen(1),jpk) ) 745 IF( dta%ll_sal ) ALLOCATE( dta_bdy(ib_bdy)%sal(nblen(1),jpk) ) 746 ELSE 747 IF( dta%ll_tem ) THEN 748 if(lwp) write(numout,*) '++++++ dta%tem pointing to fnow' 657 749 jfld = jfld + 1 658 750 dta_bdy(ib_bdy)%tem => bf(jfld)%fnow(:,1,:) 751 ENDIF 752 IF( dta%ll_sal ) THEN 753 if(lwp) write(numout,*) '++++++ dta%sal pointing to fnow' 659 754 jfld = jfld + 1 660 755 dta_bdy(ib_bdy)%sal => bf(jfld)%fnow(:,1,:) … … 665 760 IF (nn_ice_lim2(ib_bdy) .gt. 0) THEN 666 761 IF( nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN 667 ilen0(1:3) = nblen(1:3) 668 ALLOCATE( dta_bdy(ib_bdy)%frld(ilen0(1)) ) 669 ALLOCATE( dta_bdy(ib_bdy)%hicif(ilen0(1)) ) 670 ALLOCATE( dta_bdy(ib_bdy)%hsnif(ilen0(1)) ) 762 ALLOCATE( dta_bdy(ib_bdy)%frld(nblen(1)) ) 763 ALLOCATE( dta_bdy(ib_bdy)%hicif(nblen(1)) ) 764 ALLOCATE( dta_bdy(ib_bdy)%hsnif(nblen(1)) ) 671 765 ELSE 672 766 jfld = jfld + 1 -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn.F90
r4105 r4254 30 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 31 USE in_out_manager ! 32 USE domvvl ! variable volume32 USE domvvl 33 33 34 34 IMPLICIT NONE … … 57 57 LOGICAL, INTENT( in ), OPTIONAL :: dyn3d_only ! T => only update baroclinic velocities 58 58 !! 59 INTEGER :: jk,ii,ij,ib ,igrd ! Loop counter60 LOGICAL :: ll_dyn2d, ll_dyn3d 59 INTEGER :: jk,ii,ij,ib_bdy,ib,igrd ! Loop counter 60 LOGICAL :: ll_dyn2d, ll_dyn3d, ll_orlanski 61 61 !! 62 62 … … 70 70 ENDIF 71 71 72 ll_orlanski = .false. 73 DO ib_bdy = 1, nb_bdy 74 IF ( cn_dyn2d(ib_bdy) == 'orlanski' .or. cn_dyn2d(ib_bdy) == 'orlanski_npo' & 75 & .or. cn_dyn3d(ib_bdy) == 'orlanski' .or. cn_dyn3d(ib_bdy) == 'orlanski_npo') ll_orlanski = .true. 76 ENDDO 77 72 78 !------------------------------------------------------- 73 79 ! Set pointers … … 77 83 phur => hur 78 84 phvr => hvr 79 CALL wrk_alloc(jpi,jpj,pu2d,pv2d) 85 CALL wrk_alloc(jpi,jpj,pua2d,pva2d) 86 IF ( ll_orlanski ) CALL wrk_alloc(jpi,jpj,pub2d,pvb2d) 80 87 81 88 !------------------------------------------------------- … … 83 90 !------------------------------------------------------- 84 91 85 pu2d(:,:) = 0._wp 86 pv2d(:,:) = 0._wp 87 ! bg jchanut tschanges (not specifically related to ts; this is a bug) 92 ! "After" velocities: 93 94 pua2d(:,:) = 0.e0 95 pva2d(:,:) = 0.e0 96 88 97 IF (lk_vvl) THEN 89 DO jk = 1, jpkm1 !! Vertically integrated momentum trends90 pu 2d(:,:) = pu2d(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) * ua(:,:,jk)91 pv 2d(:,:) = pv2d(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) * va(:,:,jk)98 DO jk = 1, jpkm1 99 pua2d(:,:) = pua2d(:,:) + fse3u_a(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 100 pva2d(:,:) = pva2d(:,:) + fse3v_a(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 92 101 END DO 93 pu2d(:,:) = pu2d(:,:) / ( hu_0(:,:) + sshu_a(:,:) + 1._wp - umask(:,:,1) ) 94 pv2d(:,:) = pv2d(:,:) / ( hv_0(:,:) + sshv_a(:,:) + 1._wp - vmask(:,:,1) ) 95 ! end jchanut tschanges 102 pua2d(:,:) = pua2d(:,:) / ( hu_0(:,:) + sshu_a(:,:) + 1._wp - umask(:,:,1) ) 103 pva2d(:,:) = pva2d(:,:) / ( hv_0(:,:) + sshv_a(:,:) + 1._wp - vmask(:,:,1) ) 96 104 ELSE 97 DO jk = 1, jpkm1 !! Vertically integrated momentum trends98 pu 2d(:,:) = pu2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk)99 pv 2d(:,:) = pv2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk)105 DO jk = 1, jpkm1 106 pua2d(:,:) = pua2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 107 pva2d(:,:) = pva2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 100 108 END DO 101 pu 2d(:,:) = pu2d(:,:) * phur(:,:)102 pv 2d(:,:) = pv2d(:,:) * phvr(:,:)109 pua2d(:,:) = pua2d(:,:) * phur(:,:) 110 pva2d(:,:) = pva2d(:,:) * phvr(:,:) 103 111 ENDIF 104 112 105 113 DO jk = 1 , jpkm1 106 ua(:,:,jk) = ua(:,:,jk) - pu 2d(:,:) * umask(:,:,jk)107 va(:,:,jk) = va(:,:,jk) - pv 2d(:,:) * vmask(:,:,jk)114 ua(:,:,jk) = ua(:,:,jk) - pua2d(:,:) 115 va(:,:,jk) = va(:,:,jk) - pva2d(:,:) 108 116 END DO 117 118 ! "Before" velocities (required for Orlanski condition): 119 120 IF ( ll_orlanski ) THEN 121 pub2d(:,:) = 0.e0 122 pvb2d(:,:) = 0.e0 123 124 IF (lk_vvl) THEN 125 DO jk = 1, jpkm1 !! Vertically integrated momentum trends 126 pub2d(:,:) = pub2d(:,:) + fse3u_b(:,:,jk) * umask(:,:,jk) * ub(:,:,jk) 127 pvb2d(:,:) = pvb2d(:,:) + fse3v_b(:,:,jk) * vmask(:,:,jk) * vb(:,:,jk) 128 END DO 129 pub2d(:,:) = pub2d(:,:) / ( hu_0(:,:) + sshu_b(:,:) + 1._wp - umask(:,:,1) ) 130 pvb2d(:,:) = pvb2d(:,:) / ( hv_0(:,:) + sshv_b(:,:) + 1._wp - vmask(:,:,1) ) 131 ELSE 132 DO jk = 1, jpkm1 !! Vertically integrated momentum trends 133 pub2d(:,:) = pub2d(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ub(:,:,jk) 134 pvb2d(:,:) = pvb2d(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * vb(:,:,jk) 135 END DO 136 pub2d(:,:) = pub2d(:,:) * phur(:,:) 137 pvb2d(:,:) = pvb2d(:,:) * phvr(:,:) 138 ENDIF 139 140 DO jk = 1 , jpkm1 141 ub(:,:,jk) = ub(:,:,jk) - pub2d(:,:) 142 vb(:,:,jk) = vb(:,:,jk) - pvb2d(:,:) 143 END DO 144 END IF 109 145 110 146 !------------------------------------------------------- … … 122 158 123 159 DO jk = 1 , jpkm1 124 ua(:,:,jk) = ( ua(:,:,jk) + pu 2d(:,:) ) * umask(:,:,jk)125 va(:,:,jk) = ( va(:,:,jk) + pv 2d(:,:) ) * vmask(:,:,jk)160 ua(:,:,jk) = ( ua(:,:,jk) + pua2d(:,:) ) * umask(:,:,jk) 161 va(:,:,jk) = ( va(:,:,jk) + pva2d(:,:) ) * vmask(:,:,jk) 126 162 END DO 127 163 128 CALL wrk_dealloc(jpi,jpj,pu2d,pv2d) 164 IF ( ll_orlanski ) THEN 165 DO jk = 1 , jpkm1 166 ub(:,:,jk) = ( ub(:,:,jk) + pub2d(:,:) ) * umask(:,:,jk) 167 vb(:,:,jk) = ( vb(:,:,jk) + pvb2d(:,:) ) * vmask(:,:,jk) 168 END DO 169 END IF 170 171 CALL wrk_dealloc(jpi,jpj,pua2d,pva2d) 172 IF ( ll_orlanski ) CALL wrk_dealloc(jpi,jpj,pub2d,pvb2d) 129 173 130 174 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn') -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn2d.F90
r4105 r4254 12 12 !! 'key_bdy' : Unstructured Open Boundary Condition 13 13 !!---------------------------------------------------------------------- 14 !! bdy_dyn2d : Apply open boundary conditions to barotropic variables. 15 !! bdy_dyn2d_fla : Apply Flather condition 14 !! bdy_dyn2d : Apply open boundary conditions to barotropic variables. 15 !! bdy_dyn2d_frs : Apply Flow Relaxation Scheme 16 !! bdy_dyn2d_fla : Apply Flather condition 17 !! bdy_dyn2d_orlanski : Orlanski Radiation 18 !! bdy_ssh : Duplicate sea level across open boundaries 16 19 !!---------------------------------------------------------------------- 17 20 USE timing ! Timing … … 19 22 USE dom_oce ! ocean space and time domain 20 23 USE bdy_oce ! ocean open boundary conditions 24 USE bdylib ! BDY library routines 21 25 USE dynspg_oce ! for barotropic variables 22 26 USE phycst ! physical constants … … 27 31 PRIVATE 28 32 29 PUBLIC bdy_dyn2d 33 PUBLIC bdy_dyn2d ! routine called in dynspg_ts and bdy_dyn 30 34 PUBLIC bdy_ssh ! routine called in dynspg_ts or sshwzv 31 35 … … 50 54 DO ib_bdy=1, nb_bdy 51 55 52 SELECT CASE( nn_dyn2d(ib_bdy) )53 CASE( jp_none)56 SELECT CASE( cn_dyn2d(ib_bdy) ) 57 CASE('none') 54 58 CYCLE 55 CASE( jp_frs)59 CASE('frs') 56 60 CALL bdy_dyn2d_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy ) 57 CASE( jp_flather)61 CASE('flather') 58 62 CALL bdy_dyn2d_fla( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy ) 63 CASE('orlanski') 64 CALL bdy_dyn2d_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, ll_npo=.false. ) 65 CASE('orlanski_npo') 66 CALL bdy_dyn2d_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, ll_npo=.true. ) 59 67 CASE DEFAULT 60 68 CALL ctl_stop( 'bdy_dyn2d : unrecognised option for open boundaries for barotropic variables' ) … … 91 99 ij = idx%nbj(jb,igrd) 92 100 zwgt = idx%nbw(jb,igrd) 93 pu 2d(ii,ij) = ( pu2d(ii,ij) + zwgt * ( dta%u2d(jb) - pu2d(ii,ij) ) ) * umask(ii,ij,1)101 pua2d(ii,ij) = ( pua2d(ii,ij) + zwgt * ( dta%u2d(jb) - pua2d(ii,ij) ) ) * umask(ii,ij,1) 94 102 END DO 95 103 ! … … 99 107 ij = idx%nbj(jb,igrd) 100 108 zwgt = idx%nbw(jb,igrd) 101 pv 2d(ii,ij) = ( pv2d(ii,ij) + zwgt * ( dta%v2d(jb) - pv2d(ii,ij) ) ) * vmask(ii,ij,1)109 pva2d(ii,ij) = ( pva2d(ii,ij) + zwgt * ( dta%v2d(jb) - pva2d(ii,ij) ) ) * vmask(ii,ij,1) 102 110 END DO 103 CALL lbc_bdy_lnk( pu 2d, 'U', -1., ib_bdy )104 CALL lbc_bdy_lnk( pv 2d, 'V', -1., ib_bdy) ! Boundary points should be updated111 CALL lbc_bdy_lnk( pua2d, 'U', -1., ib_bdy ) 112 CALL lbc_bdy_lnk( pva2d, 'V', -1., ib_bdy) ! Boundary points should be updated 105 113 ! 106 114 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn2d_frs') … … 135 143 INTEGER :: jb, igrd ! dummy loop indices 136 144 INTEGER :: ii, ij, iim1, iip1, ijm1, ijp1 ! 2D addresses 145 REAL(wp), POINTER :: flagu, flagv ! short cuts 137 146 REAL(wp) :: zcorr ! Flather correction 138 147 REAL(wp) :: zforc ! temporary scalar … … 152 161 ! Fill temporary array with ssh data (here spgu): 153 162 igrd = 1 154 spgu(:,:) = 0. _wp163 spgu(:,:) = 0.0 155 164 DO jb = 1, idx%nblenrim(igrd) 156 165 ii = idx%nbi(jb,igrd) … … 165 174 ii = idx%nbi(jb,igrd) 166 175 ij = idx%nbj(jb,igrd) 167 iim1 = ii + MAX( 0, INT( idx%flagu(jb) ) ) ! T pts i-indice inside the boundary 168 iip1 = ii - MIN( 0, INT( idx%flagu(jb) ) ) ! T pts i-indice outside the boundary 176 flagu => idx%flagu(jb,igrd) 177 iim1 = ii + MAX( 0, INT( flagu ) ) ! T pts i-indice inside the boundary 178 iip1 = ii - MIN( 0, INT( flagu ) ) ! T pts i-indice outside the boundary 169 179 ! 170 zcorr = - idx%flagu(jb) * SQRT( grav * phur(ii, ij) ) * ( pssh(iim1, ij) - spgu(iip1,ij) ) 171 ! bg jchanut tschanges: Set zflag to 0 below to revert to Flather scheme 172 !! zforc = dta%u2d(jb) 173 zflag = ABS(idx%flagu(jb)) 174 iim1 = ii + idx%flagu(jb) 175 zforc = dta%u2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pu2d(iim1,ij) 176 pu2d(ii,ij) = zforc + (1._wp - z1_2*zflag) * zcorr * umask(ii,ij,1) 177 ! end jchanut tschanges 180 zcorr = - flagu * SQRT( grav * phur(ii, ij) ) * ( pssh(iim1, ij) - spgu(iip1,ij) ) 181 182 ! jchanut tschanges: Set zflag to 0 below to revert to Flather scheme 183 ! Use characteristics method instead 184 zflag = ABS(flagu) 185 zforc = dta%u2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pua2d(iim1,ij) 186 pua2d(ii,ij) = zforc + (1._wp - z1_2*zflag) * zcorr * umask(ii,ij,1) 178 187 END DO 179 188 ! … … 183 192 ii = idx%nbi(jb,igrd) 184 193 ij = idx%nbj(jb,igrd) 185 ijm1 = ij + MAX( 0, INT( idx%flagv(jb) ) ) ! T pts j-indice inside the boundary 186 ijp1 = ij - MIN( 0, INT( idx%flagv(jb) ) ) ! T pts j-indice outside the boundary 194 flagv => idx%flagv(jb,igrd) 195 ijm1 = ij + MAX( 0, INT( flagv ) ) ! T pts j-indice inside the boundary 196 ijp1 = ij - MIN( 0, INT( flagv ) ) ! T pts j-indice outside the boundary 187 197 ! 188 zcorr = - idx%flagv(jb) * SQRT( grav * phvr(ii, ij) ) * ( pssh(ii, ijm1) - spgu(ii,ijp1) ) 189 ! bg jchanut tschanges: Set zflag to 0 below to revert to std Flather scheme 190 !! zforc = dta%v2d(jb) 191 zflag = ABS(idx%flagv(jb)) 192 ijm1 = ij + idx%flagv(jb) 193 zforc = dta%v2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pv2d(ii,ijm1) 194 pv2d(ii,ij) = zforc + (1._wp - z1_2*zflag) * zcorr * vmask(ii,ij,1) 195 ! end jchanut tschanges 196 END DO 197 CALL lbc_bdy_lnk( pu2d, 'U', -1., ib_bdy ) ! Boundary points should be updated 198 CALL lbc_bdy_lnk( pv2d, 'V', -1., ib_bdy ) ! 198 zcorr = - flagv * SQRT( grav * phvr(ii, ij) ) * ( pssh(ii, ijm1) - spgu(ii,ijp1) ) 199 200 ! jchanut tschanges: Set zflag to 0 below to revert to std Flather scheme 201 ! Use characteristics method instead 202 zflag = ABS(flagv) 203 zforc = dta%v2d(jb) * (1._wp - z1_2*zflag) + z1_2 * zflag * pva2d(ii,ijm1) 204 pva2d(ii,ij) = zforc + (1._wp - z1_2*zflag) * zcorr * vmask(ii,ij,1) 205 END DO 206 CALL lbc_bdy_lnk( pua2d, 'U', -1., ib_bdy ) ! Boundary points should be updated 207 CALL lbc_bdy_lnk( pva2d, 'V', -1., ib_bdy ) ! 199 208 ! 200 209 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn2d_fla') 201 210 ! 202 211 END SUBROUTINE bdy_dyn2d_fla 212 213 214 SUBROUTINE bdy_dyn2d_orlanski( idx, dta, ib_bdy, ll_npo ) 215 !!---------------------------------------------------------------------- 216 !! *** SUBROUTINE bdy_dyn2d_orlanski *** 217 !! 218 !! - Apply Orlanski radiation condition adaptively: 219 !! - radiation plus weak nudging at outflow points 220 !! - no radiation and strong nudging at inflow points 221 !! 222 !! 223 !! References: Marchesiello, McWilliams and Shchepetkin, Ocean Modelling vol. 3 (2001) 224 !!---------------------------------------------------------------------- 225 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 226 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 227 INTEGER, INTENT(in) :: ib_bdy ! number of current open boundary set 228 LOGICAL, INTENT(in) :: ll_npo ! flag for NPO version 229 230 INTEGER :: ib, igrd ! dummy loop indices 231 INTEGER :: ii, ij, iibm1, ijbm1 ! indices 232 !!---------------------------------------------------------------------- 233 234 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn2d_orlanski') 235 ! 236 igrd = 2 ! Orlanski bc on u-velocity; 237 ! 238 CALL bdy_orlanski_2d( idx, igrd, pub2d, pua2d, dta%u2d, ll_npo ) 239 240 igrd = 3 ! Orlanski bc on v-velocity 241 ! 242 CALL bdy_orlanski_2d( idx, igrd, pvb2d, pva2d, dta%v2d, ll_npo ) 243 ! 244 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn2d_orlanski') 245 ! 246 CALL lbc_bdy_lnk( pua2d, 'U', -1., ib_bdy ) ! Boundary points should be updated 247 CALL lbc_bdy_lnk( pva2d, 'V', -1., ib_bdy ) ! 248 ! 249 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn2d_orlanski') 250 ! 251 END SUBROUTINE bdy_dyn2d_orlanski 203 252 204 253 SUBROUTINE bdy_ssh( zssh ) … … 248 297 249 298 END SUBROUTINE bdy_ssh 299 250 300 #else 251 301 !!---------------------------------------------------------------------- … … 257 307 WRITE(*,*) 'bdy_dyn2d: You should not have seen this print! error?', kt 258 308 END SUBROUTINE bdy_dyn2d 309 259 310 #endif 260 311 261 312 !!====================================================================== 262 313 END MODULE bdydyn2d 314 -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdydyn3d.F90
r3703 r4254 19 19 USE dom_oce ! ocean space and time domain 20 20 USE bdy_oce ! ocean open boundary conditions 21 USE bdylib ! for orlanski library routines 21 22 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 22 23 USE in_out_manager ! … … 52 53 DO ib_bdy=1, nb_bdy 53 54 54 !!$ IF ( using Orlanski radiation conditions ) THEN 55 !!$ CALL bdy_rad( kt, bdyidx(ib_bdy) ) 56 !!$ ENDIF 57 58 SELECT CASE( nn_dyn3d(ib_bdy) ) 59 CASE(jp_none) 55 SELECT CASE( cn_dyn3d(ib_bdy) ) 56 CASE('none') 60 57 CYCLE 61 CASE( jp_frs)58 CASE('frs') 62 59 CALL bdy_dyn3d_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy ) 63 CASE( 2)60 CASE('specified') 64 61 CALL bdy_dyn3d_spe( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy ) 65 CASE( 3)62 CASE('zero') 66 63 CALL bdy_dyn3d_zro( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy ) 64 CASE('orlanski') 65 CALL bdy_dyn3d_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, ll_npo=.false. ) 66 CASE('orlanski_npo') 67 CALL bdy_dyn3d_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, ll_npo=.true. ) 67 68 CASE DEFAULT 68 69 CALL ctl_stop( 'bdy_dyn3d : unrecognised option for open boundaries for baroclinic velocities' ) … … 109 110 END DO 110 111 END DO 111 CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy ) ; CALL lbc_bdy_lnk( va, 'V', -1.,ib_bdy ) ! Boundary points should be updated 112 CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy ) ! Boundary points should be updated 113 CALL lbc_bdy_lnk( va, 'V', -1., ib_bdy ) 112 114 ! 113 115 IF( kt .eq. nit000 ) CLOSE( unit = 102 ) … … 204 206 END DO 205 207 END DO 206 CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy ) ; CALL lbc_bdy_lnk( va, 'V', -1.,ib_bdy ) ! Boundary points should be updated 208 CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy ) ! Boundary points should be updated 209 CALL lbc_bdy_lnk( va, 'V', -1., ib_bdy ) 207 210 ! 208 211 IF( kt .eq. nit000 ) CLOSE( unit = 102 ) … … 211 214 212 215 END SUBROUTINE bdy_dyn3d_frs 216 217 SUBROUTINE bdy_dyn3d_orlanski( idx, dta, ib_bdy, ll_npo ) 218 !!---------------------------------------------------------------------- 219 !! *** SUBROUTINE bdy_dyn3d_orlanski *** 220 !! 221 !! - Apply Orlanski radiation to baroclinic velocities. 222 !! - Wrapper routine for bdy_orlanski_3d 223 !! 224 !! 225 !! References: Marchesiello, McWilliams and Shchepetkin, Ocean Modelling vol. 3 (2001) 226 !!---------------------------------------------------------------------- 227 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 228 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 229 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 230 LOGICAL, INTENT(in) :: ll_npo ! switch for NPO version 231 232 INTEGER :: jb, igrd ! dummy loop indices 233 !!---------------------------------------------------------------------- 234 235 IF( nn_timing == 1 ) CALL timing_start('bdy_dyn3d_orlanski') 236 ! 237 !! Note that at this stage the ub and ua arrays contain the baroclinic velocities. 238 ! 239 igrd = 2 ! Orlanski bc on u-velocity; 240 ! 241 CALL bdy_orlanski_3d( idx, igrd, ub, ua, dta%u3d, ll_npo ) 242 243 igrd = 3 ! Orlanski bc on v-velocity 244 ! 245 CALL bdy_orlanski_3d( idx, igrd, vb, va, dta%v3d, ll_npo ) 246 ! 247 CALL lbc_bdy_lnk( ua, 'U', -1., ib_bdy ) ! Boundary points should be updated 248 CALL lbc_bdy_lnk( va, 'V', -1., ib_bdy ) 249 ! 250 IF( nn_timing == 1 ) CALL timing_stop('bdy_dyn3d_orlanski') 251 ! 252 END SUBROUTINE bdy_dyn3d_orlanski 253 213 254 214 255 SUBROUTINE bdy_dyn3d_dmp( kt ) … … 232 273 ! Remove barotropic part from before velocity 233 274 !------------------------------------------------------- 234 CALL wrk_alloc(jpi,jpj,pu 2d,pv2d)235 236 pu 2d(:,:) = 0.e0237 pv 2d(:,:) = 0.e0275 CALL wrk_alloc(jpi,jpj,pub2d,pvb2d) 276 277 pub2d(:,:) = 0.e0 278 pvb2d(:,:) = 0.e0 238 279 239 280 DO jk = 1, jpkm1 240 281 #if defined key_vvl 241 pu 2d(:,:) = pu2d(:,:) + fse3u_b(:,:,jk)* ub(:,:,jk) *umask(:,:,jk)242 pv 2d(:,:) = pv2d(:,:) + fse3v_b(:,:,jk)* vb(:,:,jk) *vmask(:,:,jk)282 pub2d(:,:) = pub2d(:,:) + fse3u_b(:,:,jk)* ub(:,:,jk) *umask(:,:,jk) 283 pvb2d(:,:) = pvb2d(:,:) + fse3v_b(:,:,jk)* vb(:,:,jk) *vmask(:,:,jk) 243 284 #else 244 pu 2d(:,:) = pu2d(:,:) + fse3u_0(:,:,jk) * ub(:,:,jk) * umask(:,:,jk)245 pv 2d(:,:) = pv2d(:,:) + fse3v_0(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk)285 pub2d(:,:) = pub2d(:,:) + fse3u_0(:,:,jk) * ub(:,:,jk) * umask(:,:,jk) 286 pvb2d(:,:) = pvb2d(:,:) + fse3v_0(:,:,jk) * vb(:,:,jk) * vmask(:,:,jk) 246 287 #endif 247 288 END DO 248 289 249 290 IF( lk_vvl ) THEN 250 pu 2d(:,:) = pu2d(:,:) * umask(:,:,1) / ( hu_0(:,:) + sshu_b(:,:) + 1._wp - umask(:,:,1) )251 pv 2d(:,:) = pv2d(:,:) * vmask(:,:,1) / ( hv_0(:,:) + sshv_b(:,:) + 1._wp - vmask(:,:,1) )291 pub2d(:,:) = pub2d(:,:) * umask(:,:,1) / ( hu_0(:,:) + sshu_b(:,:) + 1._wp - umask(:,:,1) ) 292 pvb2d(:,:) = pvb2d(:,:) * vmask(:,:,1) / ( hv_0(:,:) + sshv_b(:,:) + 1._wp - vmask(:,:,1) ) 252 293 ELSE 253 pu 2d(:,:) = pv2d(:,:) * hur(:,:)254 pv 2d(:,:) = pu2d(:,:) * hvr(:,:)294 pub2d(:,:) = pvb2d(:,:) * hur(:,:) 295 pvb2d(:,:) = pub2d(:,:) * hvr(:,:) 255 296 ENDIF 256 297 257 298 DO ib_bdy=1, nb_bdy 258 IF ( ln_dyn3d_dmp(ib_bdy) .and.nn_dyn3d(ib_bdy).gt.0) THEN299 IF ( ln_dyn3d_dmp(ib_bdy) .and. cn_dyn3d(ib_bdy) /= 'none' ) THEN 259 300 igrd = 2 ! Relaxation of zonal velocity 260 301 DO jb = 1, idx_bdy(ib_bdy)%nblen(igrd) … … 264 305 DO jk = 1, jpkm1 265 306 ua(ii,ij,jk) = ( ua(ii,ij,jk) + zwgt * ( dta_bdy(ib_bdy)%u3d(jb,jk) - & 266 ub(ii,ij,jk) + pu 2d(ii,ij)) ) * umask(ii,ij,jk)307 ub(ii,ij,jk) + pub2d(ii,ij)) ) * umask(ii,ij,jk) 267 308 END DO 268 309 END DO … … 275 316 DO jk = 1, jpkm1 276 317 va(ii,ij,jk) = ( va(ii,ij,jk) + zwgt * ( dta_bdy(ib_bdy)%v3d(jb,jk) - & 277 vb(ii,ij,jk) + pv 2d(ii,ij)) ) * vmask(ii,ij,jk)318 vb(ii,ij,jk) + pvb2d(ii,ij)) ) * vmask(ii,ij,jk) 278 319 END DO 279 320 END DO … … 281 322 ENDDO 282 323 ! 283 CALL wrk_dealloc(jpi,jpj,pu 2d,pv2d)324 CALL wrk_dealloc(jpi,jpj,pub2d,pvb2d) 284 325 ! 285 326 CALL lbc_lnk( ua, 'U', -1. ) ; CALL lbc_lnk( va, 'V', -1. ) ! Boundary points should be updated -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim2.F90
r3680 r4254 32 32 !!---------------------------------------------------------------------- 33 33 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 34 !! $Id: bdyice .F90 2715 2011-03-30 15:58:35Z rblod $34 !! $Id: bdyice_lim2.F90 4223 2013-11-15 17:21:46Z cbricaud $ 35 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 36 !!---------------------------------------------------------------------- … … 50 50 DO ib_bdy=1, nb_bdy 51 51 52 SELECT CASE( nn_ice_lim2(ib_bdy) )53 CASE( jp_none)52 SELECT CASE( cn_ice_lim2(ib_bdy) ) 53 CASE('none') 54 54 CYCLE 55 CASE( jp_frs)55 CASE('frs') 56 56 CALL bdy_ice_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy ) 57 57 CASE DEFAULT … … 76 76 INTEGER, INTENT(in) :: ib_bdy ! BDY set index 77 77 !! 78 INTEGER :: jb, j k, jgrd ! dummy loop indices78 INTEGER :: jb, jgrd ! dummy loop indices 79 79 INTEGER :: ii, ij ! local scalar 80 80 REAL(wp) :: zwgt, zwgt1 ! local scalar … … 86 86 ! 87 87 DO jb = 1, idx%nblen(jgrd) 88 DO jk = 1, jpkm189 88 ii = idx%nbi(jb,jgrd) 90 89 ij = idx%nbj(jb,jgrd) … … 94 93 hicif(ii,ij) = ( hicif(ii,ij) * zwgt1 + dta%hicif(jb) * zwgt ) * tmask(ii,ij,1) ! Ice depth 95 94 hsnif(ii,ij) = ( hsnif(ii,ij) * zwgt1 + dta%hsnif(jb) * zwgt ) * tmask(ii,ij,1) ! Snow depth 96 END DO97 95 END DO 98 96 CALL lbc_bdy_lnk( frld, 'T', 1., ib_bdy ) ! lateral boundary conditions -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r4105 r4254 21 21 !! bdy_init : Initialization of unstructured open boundaries 22 22 !!---------------------------------------------------------------------- 23 USE wrk_nemo ! Memory Allocation 23 24 USE timing ! Timing 24 25 USE oce ! ocean dynamics and tracers variables … … 79 80 INTEGER :: jpbdtau, jpbdtas ! - - 80 81 INTEGER :: ib_bdy1, ib_bdy2, ib1, ib2 ! - - 82 INTEGER :: i_offset, j_offset ! - - 81 83 INTEGER, POINTER :: nbi, nbj, nbr ! short cuts 82 REAL , POINTER :: flagu, flagv ! - - 84 REAL(wp), POINTER :: flagu, flagv ! - - 85 REAL(wp), POINTER, DIMENSION(:,:) :: pmask ! pointer to 2D mask fields 83 86 REAL(wp) :: zefl, zwfl, znfl, zsfl ! local scalars 84 87 INTEGER, DIMENSION (2) :: kdimsz … … 90 93 INTEGER :: com_east_b, com_west_b, com_south_b, com_north_b ! Flags for boundaries receiving 91 94 INTEGER :: iw_b(4), ie_b(4), is_b(4), in_b(4) ! Arrays for neighbours coordinates 95 REAL(wp), POINTER, DIMENSION(:,:) :: zfmask ! temporary fmask array excluding coastal boundary condition (shlat) 92 96 93 97 !! 94 NAMELIST/nambdy/ nb_bdy, ln_coords_file, cn_coords_file, &95 & ln_mask_file, cn_mask_file, nn_dyn2d, nn_dyn2d_dta,&96 & nn_dyn3d, nn_dyn3d_dta, nn_tra, nn_tra_dta,&97 & ln_tra_dmp, ln_dyn3d_dmp, rn_time_dmp, 98 NAMELIST/nambdy/ nb_bdy, ln_coords_file, cn_coords_file, & 99 & ln_mask_file, cn_mask_file, cn_dyn2d, nn_dyn2d_dta, & 100 & cn_dyn3d, nn_dyn3d_dta, cn_tra, nn_tra_dta, & 101 & ln_tra_dmp, ln_dyn3d_dmp, rn_time_dmp, rn_time_dmp_out, & 98 102 #if defined key_lim2 99 & nn_ice_lim2, nn_ice_lim2_dta,&103 & cn_ice_lim2, nn_ice_lim2_dta, & 100 104 #endif 101 105 & ln_vol, nn_volctl, nn_rimwidth … … 128 132 ln_mask_file = .false. 129 133 cn_mask_file(:) = '' 130 nn_dyn2d(:) = 0134 cn_dyn2d(:) = '' 131 135 nn_dyn2d_dta(:) = -1 ! uninitialised flag 132 nn_dyn3d(:) = 0136 cn_dyn3d(:) = '' 133 137 nn_dyn3d_dta(:) = -1 ! uninitialised flag 134 nn_tra(:) = 0138 cn_tra(:) = '' 135 139 nn_tra_dta(:) = -1 ! uninitialised flag 136 140 ln_tra_dmp(:) = .false. … … 138 142 rn_time_dmp(:) = 1. 139 143 #if defined key_lim2 140 nn_ice_lim2(:) = 0144 cn_ice_lim2(:) = '' 141 145 nn_ice_lim2_dta(:)= -1 ! uninitialised flag 142 146 #endif … … 161 165 162 166 DO ib_bdy = 1,nb_bdy 163 icount = 0 ! flag to set max rimwidth to 1 if no relaxation164 167 IF(lwp) WRITE(numout,*) ' ' 165 168 IF(lwp) WRITE(numout,*) '------ Open boundary data set ',ib_bdy,'------' … … 173 176 174 177 IF(lwp) WRITE(numout,*) 'Boundary conditions for barotropic solution: ' 175 SELECT CASE( nn_dyn2d(ib_bdy) ) 176 CASE(jp_none) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 177 CASE(jp_frs) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 178 icount = icount + 1 179 CASE(jp_flather) ; IF(lwp) WRITE(numout,*) ' Flather radiation condition' 180 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_dyn2d' ) 178 SELECT CASE( cn_dyn2d(ib_bdy) ) 179 CASE('none') 180 IF(lwp) WRITE(numout,*) ' no open boundary condition' 181 dta_bdy(ib_bdy)%ll_ssh = .false. 182 dta_bdy(ib_bdy)%ll_u2d = .false. 183 dta_bdy(ib_bdy)%ll_v2d = .false. 184 CASE('frs') 185 IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 186 dta_bdy(ib_bdy)%ll_ssh = .false. 187 dta_bdy(ib_bdy)%ll_u2d = .true. 188 dta_bdy(ib_bdy)%ll_v2d = .true. 189 CASE('flather') 190 IF(lwp) WRITE(numout,*) ' Flather radiation condition' 191 dta_bdy(ib_bdy)%ll_ssh = .true. 192 dta_bdy(ib_bdy)%ll_u2d = .true. 193 dta_bdy(ib_bdy)%ll_v2d = .true. 194 CASE('orlanski') 195 IF(lwp) WRITE(numout,*) ' Orlanski (fully oblique) radiation condition with adaptive nudging' 196 dta_bdy(ib_bdy)%ll_ssh = .false. 197 dta_bdy(ib_bdy)%ll_u2d = .true. 198 dta_bdy(ib_bdy)%ll_v2d = .true. 199 CASE('orlanski_npo') 200 IF(lwp) WRITE(numout,*) ' Orlanski (NPO) radiation condition with adaptive nudging' 201 dta_bdy(ib_bdy)%ll_ssh = .false. 202 dta_bdy(ib_bdy)%ll_u2d = .true. 203 dta_bdy(ib_bdy)%ll_v2d = .true. 204 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for cn_dyn2d' ) 181 205 END SELECT 182 IF( nn_dyn2d(ib_bdy) .gt. 0) THEN206 IF( cn_dyn2d(ib_bdy) /= 'none' ) THEN 183 207 SELECT CASE( nn_dyn2d_dta(ib_bdy) ) ! 184 208 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' … … 195 219 196 220 IF(lwp) WRITE(numout,*) 'Boundary conditions for baroclinic velocities: ' 197 SELECT CASE( nn_dyn3d(ib_bdy) ) 198 CASE(jp_none) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 199 CASE(jp_frs) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 200 icount = icount + 1 201 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Specified value' 202 CASE( 3 ) ; IF(lwp) WRITE(numout,*) ' Zero baroclinic velocities (runoff case)' 203 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_dyn3d' ) 221 SELECT CASE( cn_dyn3d(ib_bdy) ) 222 CASE('none') 223 IF(lwp) WRITE(numout,*) ' no open boundary condition' 224 dta_bdy(ib_bdy)%ll_u3d = .false. 225 dta_bdy(ib_bdy)%ll_v3d = .false. 226 CASE('frs') 227 IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 228 dta_bdy(ib_bdy)%ll_u3d = .true. 229 dta_bdy(ib_bdy)%ll_v3d = .true. 230 CASE('specified') 231 IF(lwp) WRITE(numout,*) ' Specified value' 232 dta_bdy(ib_bdy)%ll_u3d = .true. 233 dta_bdy(ib_bdy)%ll_v3d = .true. 234 CASE('zero') 235 IF(lwp) WRITE(numout,*) ' Zero baroclinic velocities (runoff case)' 236 dta_bdy(ib_bdy)%ll_u3d = .false. 237 dta_bdy(ib_bdy)%ll_v3d = .false. 238 CASE('orlanski') 239 IF(lwp) WRITE(numout,*) ' Orlanski (fully oblique) radiation condition with adaptive nudging' 240 dta_bdy(ib_bdy)%ll_u3d = .true. 241 dta_bdy(ib_bdy)%ll_v3d = .true. 242 CASE('orlanski_npo') 243 IF(lwp) WRITE(numout,*) ' Orlanski (NPO) radiation condition with adaptive nudging' 244 dta_bdy(ib_bdy)%ll_u3d = .true. 245 dta_bdy(ib_bdy)%ll_v3d = .true. 246 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for cn_dyn3d' ) 204 247 END SELECT 205 IF( nn_dyn3d(ib_bdy) .gt. 0) THEN248 IF( cn_dyn3d(ib_bdy) /= 'none' ) THEN 206 249 SELECT CASE( nn_dyn3d_dta(ib_bdy) ) ! 207 250 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' … … 212 255 213 256 IF ( ln_dyn3d_dmp(ib_bdy) ) THEN 214 IF ( nn_dyn3d(ib_bdy).EQ.0) THEN257 IF ( cn_dyn3d(ib_bdy) == 'none' ) THEN 215 258 IF(lwp) WRITE(numout,*) 'No open boundary condition for baroclinic velocities: ln_dyn3d_dmp is set to .false.' 216 259 ln_dyn3d_dmp(ib_bdy)=.false. 217 ELSEIF ( nn_dyn3d(ib_bdy).EQ.1) THEN260 ELSEIF ( cn_dyn3d(ib_bdy) == 'frs' ) THEN 218 261 CALL ctl_stop( 'Use FRS OR relaxation' ) 219 262 ELSE 220 icount = icount + 1221 263 IF(lwp) WRITE(numout,*) ' + baroclinic velocities relaxation zone' 222 264 IF(lwp) WRITE(numout,*) ' Damping time scale: ',rn_time_dmp(ib_bdy),' days' 223 265 IF((lwp).AND.rn_time_dmp(ib_bdy)<0) CALL ctl_stop( 'Time scale must be positive' ) 266 dta_bdy(ib_bdy)%ll_u3d = .true. 267 dta_bdy(ib_bdy)%ll_v3d = .true. 224 268 ENDIF 225 269 ELSE … … 229 273 230 274 IF(lwp) WRITE(numout,*) 'Boundary conditions for temperature and salinity: ' 231 SELECT CASE( nn_tra(ib_bdy) ) 232 CASE(jp_none) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 233 CASE(jp_frs) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 234 icount = icount + 1 235 CASE( 2 ) ; IF(lwp) WRITE(numout,*) ' Specified value' 236 CASE( 3 ) ; IF(lwp) WRITE(numout,*) ' Neumann conditions' 237 CASE( 4 ) ; IF(lwp) WRITE(numout,*) ' Runoff conditions : Neumann for T and specified to 0.1 for salinity' 238 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_tra' ) 275 SELECT CASE( cn_tra(ib_bdy) ) 276 CASE('none') 277 IF(lwp) WRITE(numout,*) ' no open boundary condition' 278 dta_bdy(ib_bdy)%ll_tem = .false. 279 dta_bdy(ib_bdy)%ll_sal = .false. 280 CASE('frs') 281 IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 282 dta_bdy(ib_bdy)%ll_tem = .true. 283 dta_bdy(ib_bdy)%ll_sal = .true. 284 CASE('specified') 285 IF(lwp) WRITE(numout,*) ' Specified value' 286 dta_bdy(ib_bdy)%ll_tem = .true. 287 dta_bdy(ib_bdy)%ll_sal = .true. 288 CASE('neumann') 289 IF(lwp) WRITE(numout,*) ' Neumann conditions' 290 dta_bdy(ib_bdy)%ll_tem = .false. 291 dta_bdy(ib_bdy)%ll_sal = .false. 292 CASE('runoff') 293 IF(lwp) WRITE(numout,*) ' Runoff conditions : Neumann for T and specified to 0.1 for salinity' 294 dta_bdy(ib_bdy)%ll_tem = .false. 295 dta_bdy(ib_bdy)%ll_sal = .false. 296 CASE('orlanski') 297 IF(lwp) WRITE(numout,*) ' Orlanski (fully oblique) radiation condition with adaptive nudging' 298 dta_bdy(ib_bdy)%ll_tem = .true. 299 dta_bdy(ib_bdy)%ll_sal = .true. 300 CASE('orlanski_npo') 301 IF(lwp) WRITE(numout,*) ' Orlanski (NPO) radiation condition with adaptive nudging' 302 dta_bdy(ib_bdy)%ll_tem = .true. 303 dta_bdy(ib_bdy)%ll_sal = .true. 304 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for cn_tra' ) 239 305 END SELECT 240 IF( nn_tra(ib_bdy) .gt. 0) THEN306 IF( cn_tra(ib_bdy) /= 'none' ) THEN 241 307 SELECT CASE( nn_tra_dta(ib_bdy) ) ! 242 308 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' … … 247 313 248 314 IF ( ln_tra_dmp(ib_bdy) ) THEN 249 IF ( nn_tra(ib_bdy).EQ.0) THEN315 IF ( cn_tra(ib_bdy) == 'none' ) THEN 250 316 IF(lwp) WRITE(numout,*) 'No open boundary condition for tracers: ln_tra_dmp is set to .false.' 251 317 ln_tra_dmp(ib_bdy)=.false. 252 ELSEIF ( nn_tra(ib_bdy).EQ.1) THEN318 ELSEIF ( cn_tra(ib_bdy) == 'frs' ) THEN 253 319 CALL ctl_stop( 'Use FRS OR relaxation' ) 254 320 ELSE 255 icount = icount + 1256 321 IF(lwp) WRITE(numout,*) ' + T/S relaxation zone' 257 322 IF(lwp) WRITE(numout,*) ' Damping time scale: ',rn_time_dmp(ib_bdy),' days' 323 IF(lwp) WRITE(numout,*) ' Outflow damping time scale: ',rn_time_dmp_out(ib_bdy),' days' 258 324 IF((lwp).AND.rn_time_dmp(ib_bdy)<0) CALL ctl_stop( 'Time scale must be positive' ) 325 dta_bdy(ib_bdy)%ll_tem = .true. 326 dta_bdy(ib_bdy)%ll_sal = .true. 259 327 ENDIF 260 328 ELSE … … 265 333 #if defined key_lim2 266 334 IF(lwp) WRITE(numout,*) 'Boundary conditions for sea ice: ' 267 SELECT CASE( nn_ice_lim2(ib_bdy) ) 268 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 269 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 270 icount = icount + 1 271 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_tra' ) 335 SELECT CASE( cn_ice_lim2(ib_bdy) ) 336 CASE('none') 337 IF(lwp) WRITE(numout,*) ' no open boundary condition' 338 dta_bdy(ib_bdy)%ll_frld = .false. 339 dta_bdy(ib_bdy)%ll_hicif = .false. 340 dta_bdy(ib_bdy)%ll_hsnif = .false. 341 CASE('frs') 342 IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 343 dta_bdy(ib_bdy)%ll_frld = .true. 344 dta_bdy(ib_bdy)%ll_hicif = .true. 345 dta_bdy(ib_bdy)%ll_hsnif = .true. 346 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for cn_ice_lim2' ) 272 347 END SELECT 273 IF( nn_ice_lim2(ib_bdy) .gt. 0) THEN348 IF( cn_ice_lim2(ib_bdy) /= 'none' ) THEN 274 349 SELECT CASE( nn_ice_lim2_dta(ib_bdy) ) ! 275 350 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' … … 280 355 IF(lwp) WRITE(numout,*) 281 356 #endif 282 IF ( icount>0 ) THEN 283 IF(lwp) WRITE(numout,*) ' Width of relaxation zone = ', nn_rimwidth(ib_bdy) 284 IF(lwp) WRITE(numout,*) 285 ELSE 286 nn_rimwidth(ib_bdy) = 1 ! no relaxation 287 ENDIF 357 358 IF(lwp) WRITE(numout,*) ' Width of relaxation zone = ', nn_rimwidth(ib_bdy) 359 IF(lwp) WRITE(numout,*) 288 360 289 361 ENDDO … … 456 528 ENDIF 457 529 458 ENDDO 530 ENDDO 459 531 460 532 ! 2. Now fill indices corresponding to straight open boundary arrays: … … 754 826 IF(lwp) THEN ! Since all procs read global data only need to do this check on one proc... 755 827 IF( nbrdta(ib,igrd,ib_bdy) < nbrdta(ibm1,igrd,ib_bdy) ) THEN 756 CALL ctl_stop('bdy_init : ERROR : boundary data in file & 757 must be defined in order of distance from edge nbr.', & 758 'A utility for re-ordering boundary coordinates and data & 759 files exists in the TOOLS/OBC directory') 828 CALL ctl_stop('bdy_init : ERROR : boundary data in file must be defined in order of distance from edge nbr.', & 829 'A utility for re-ordering boundary coordinates and data files exists in the TOOLS/OBC directory') 760 830 ENDIF 761 831 ENDIF 762 832 ! check if point is in local domain 763 833 IF( nbidta(ib,igrd,ib_bdy) >= iw .AND. nbidta(ib,igrd,ib_bdy) <= ie .AND. & 764 & nbjdta(ib,igrd,ib_bdy) >= is .AND. nbjdta(ib,igrd,ib_bdy) <= in .AND. & 765 & nbrdta(ib,igrd,ib_bdy) <= nn_rimwidth(ib_bdy) ) THEN 834 & nbjdta(ib,igrd,ib_bdy) >= is .AND. nbjdta(ib,igrd,ib_bdy) <= in ) THEN 766 835 ! 767 836 icount = icount + 1 … … 776 845 ! Allocate index arrays for this boundary set 777 846 !-------------------------------------------- 778 779 ilen1 = MAXVAL(idx_bdy(ib_bdy)%nblen(1:jpbgrd)) 780 ilen1 = MAX(1,ilen1) 847 ilen1 = MAXVAL(idx_bdy(ib_bdy)%nblen(:)) 781 848 ALLOCATE( idx_bdy(ib_bdy)%nbi(ilen1,jpbgrd) ) 782 849 ALLOCATE( idx_bdy(ib_bdy)%nbj(ilen1,jpbgrd) ) 783 850 ALLOCATE( idx_bdy(ib_bdy)%nbr(ilen1,jpbgrd) ) 784 851 ALLOCATE( idx_bdy(ib_bdy)%nbd(ilen1,jpbgrd) ) 852 ALLOCATE( idx_bdy(ib_bdy)%nbdout(ilen1,jpbgrd) ) 785 853 ALLOCATE( idx_bdy(ib_bdy)%nbmap(ilen1,jpbgrd) ) 786 854 ALLOCATE( idx_bdy(ib_bdy)%nbw(ilen1,jpbgrd) ) 787 ALLOCATE( idx_bdy(ib_bdy)%flagu(ilen1 ) )788 ALLOCATE( idx_bdy(ib_bdy)%flagv(ilen1 ) )855 ALLOCATE( idx_bdy(ib_bdy)%flagu(ilen1,jpbgrd) ) 856 ALLOCATE( idx_bdy(ib_bdy)%flagv(ilen1,jpbgrd) ) 789 857 790 858 ! Dispatch mapping indices and discrete distances on each processor … … 954 1022 ENDDO 955 1023 ENDDO 1024 956 1025 ! definition of the i- and j- direction local boundaries arrays 957 1026 ! used for sending the boudaries … … 1008 1077 idx_bdy(ib_bdy)%nbd(ib,igrd) = 1. / ( rn_time_dmp(ib_bdy) * rday ) & 1009 1078 & *(FLOAT(nn_rimwidth(ib_bdy)+1-nbr)/FLOAT(nn_rimwidth(ib_bdy)))**2. ! quadratic 1079 idx_bdy(ib_bdy)%nbdout(ib,igrd) = 1. / ( rn_time_dmp_out(ib_bdy) * rday ) & 1080 & *(FLOAT(nn_rimwidth(ib_bdy)+1-nbr)/FLOAT(nn_rimwidth(ib_bdy)))**2. ! quadratic 1010 1081 END DO 1011 1082 END DO … … 1021 1092 ! bdytmask = 1 on the computational domain AND on open boundaries 1022 1093 ! = 0 elsewhere 1023 bdytmask(:,:) = 1.e0 1024 bdyumask(:,:) = 1.e0 1025 bdyvmask(:,:) = 1.e0 1026 1094 1027 1095 IF( ln_mask_file ) THEN 1028 1096 CALL iom_open( cn_mask_file, inum ) … … 1069 1137 1070 1138 bdytmask(:,:) = tmask(:,:,1) 1139 IF( .not. ln_mask_file ) THEN 1140 ! If .not. ln_mask_file then we need to derive mask on U and V grid 1141 ! from mask on T grid here. 1142 bdyumask(:,:) = 0.e0 1143 bdyvmask(:,:) = 0.e0 1144 DO ij=1, jpjm1 1145 DO ii=1, jpim1 1146 bdyumask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii+1, ij ) 1147 bdyvmask(ii,ij)=bdytmask(ii,ij)*bdytmask(ii ,ij+1) 1148 END DO 1149 END DO 1150 CALL lbc_lnk( bdyumask(:,:), 'U', 1. ) ; CALL lbc_lnk( bdyvmask(:,:), 'V', 1. ) ! Lateral boundary cond. 1151 ENDIF 1071 1152 1072 1153 ! bdy masks and bmask are now set to zero on boundary points: … … 1099 1180 ENDDO 1100 1181 1182 ! For the flagu/flagv calculation below we require a version of fmask without 1183 ! the land boundary condition (shlat) included: 1184 CALL wrk_alloc(jpi,jpj,zfmask) 1185 DO ij = 2, jpjm1 1186 DO ii = 2, jpim1 1187 zfmask(ii,ij) = tmask(ii,ij ,1) * tmask(ii+1,ij ,1) & 1188 & * tmask(ii,ij+1,1) * tmask(ii+1,ij+1,1) 1189 END DO 1190 END DO 1191 1101 1192 ! Lateral boundary conditions 1193 CALL lbc_lnk( zfmask , 'F', 1. ) 1102 1194 CALL lbc_lnk( fmask , 'F', 1. ) ; CALL lbc_lnk( bdytmask(:,:), 'T', 1. ) 1103 1195 CALL lbc_lnk( bdyumask(:,:), 'U', 1. ) ; CALL lbc_lnk( bdyvmask(:,:), 'V', 1. ) … … 1105 1197 DO ib_bdy = 1, nb_bdy ! Indices and directions of rim velocity components 1106 1198 1107 idx_bdy(ib_bdy)%flagu(: ) = 0.e01108 idx_bdy(ib_bdy)%flagv(: ) = 0.e01199 idx_bdy(ib_bdy)%flagu(:,:) = 0.e0 1200 idx_bdy(ib_bdy)%flagv(:,:) = 0.e0 1109 1201 icount = 0 1110 1202 1111 !flagu = -1 : u component is normal to the dynamical boundary but its direction is outward 1112 !flagu = 0 : u is tangential 1113 !flagu = 1 : u is normal to the boundary and is direction is inward 1203 ! Calculate relationship of U direction to the local orientation of the boundary 1204 ! flagu = -1 : u component is normal to the dynamical boundary and its direction is outward 1205 ! flagu = 0 : u is tangential 1206 ! flagu = 1 : u is normal to the boundary and is direction is inward 1114 1207 1115 igrd = 2 ! u-component 1116 DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 1117 nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 1118 nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 1119 zefl = bdytmask(nbi ,nbj) 1120 zwfl = bdytmask(nbi+1,nbj) 1121 IF( zefl + zwfl == 2 ) THEN 1122 icount = icount + 1 1123 ELSE 1124 idx_bdy(ib_bdy)%flagu(ib)=-zefl+zwfl 1125 ENDIF 1208 DO igrd = 1,jpbgrd 1209 SELECT CASE( igrd ) 1210 CASE( 1 ) 1211 pmask => umask(:,:,1) 1212 i_offset = 0 1213 CASE( 2 ) 1214 pmask => bdytmask 1215 i_offset = 1 1216 CASE( 3 ) 1217 pmask => zfmask(:,:) 1218 i_offset = 0 1219 END SELECT 1220 icount = 0 1221 DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 1222 nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 1223 nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 1224 zefl = pmask(nbi+i_offset-1,nbj) 1225 zwfl = pmask(nbi+i_offset,nbj) 1226 ! This error check only works if you are using the bdyXmask arrays 1227 IF( i_offset == 1 .and. zefl + zwfl == 2 ) THEN 1228 icount = icount + 1 1229 IF(lwp) WRITE(numout,*) 'Problem with igrd = ',igrd,' at (global) nbi, nbj : ',mig(nbi),mjg(nbj) 1230 ELSE 1231 idx_bdy(ib_bdy)%flagu(ib,igrd) = -zefl + zwfl 1232 ENDIF 1233 END DO 1234 IF( icount /= 0 ) THEN 1235 IF(lwp) WRITE(numout,*) 1236 IF(lwp) WRITE(numout,*) ' E R R O R : Some ',cgrid(igrd),' grid points,', & 1237 ' are not boundary points (flagu calculation). Check nbi, nbj, indices for boundary set ',ib_bdy 1238 IF(lwp) WRITE(numout,*) ' ========== ' 1239 IF(lwp) WRITE(numout,*) 1240 nstop = nstop + 1 1241 ENDIF 1126 1242 END DO 1127 1243 1128 !flagv = -1 : u component is normal to the dynamical boundary but its direction is outward 1129 !flagv = 0 : u is tangential 1130 !flagv = 1 : u is normal to the boundary and is direction is inward 1131 1132 igrd = 3 ! v-component 1133 DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 1134 nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 1135 nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 1136 znfl = bdytmask(nbi,nbj ) 1137 zsfl = bdytmask(nbi,nbj+1) 1138 IF( znfl + zsfl == 2 ) THEN 1139 icount = icount + 1 1140 ELSE 1141 idx_bdy(ib_bdy)%flagv(ib) = -znfl + zsfl 1142 END IF 1244 ! Calculate relationship of V direction to the local orientation of the boundary 1245 ! flagv = -1 : v component is normal to the dynamical boundary but its direction is outward 1246 ! flagv = 0 : v is tangential 1247 ! flagv = 1 : v is normal to the boundary and is direction is inward 1248 1249 DO igrd = 1,jpbgrd 1250 SELECT CASE( igrd ) 1251 CASE( 1 ) 1252 pmask => vmask(:,:,1) 1253 j_offset = 0 1254 CASE( 2 ) 1255 pmask => zfmask(:,:) 1256 j_offset = 0 1257 CASE( 3 ) 1258 pmask => bdytmask 1259 j_offset = 1 1260 END SELECT 1261 icount = 0 1262 DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 1263 nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 1264 nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 1265 znfl = pmask(nbi,nbj+j_offset-1 ) 1266 zsfl = pmask(nbi,nbj+j_offset) 1267 ! This error check only works if you are using the bdyXmask arrays 1268 IF( j_offset == 1 .and. znfl + zsfl == 2 ) THEN 1269 IF(lwp) WRITE(numout,*) 'Problem with igrd = ',igrd,' at (global) nbi, nbj : ',mig(nbi),mjg(nbj) 1270 icount = icount + 1 1271 ELSE 1272 idx_bdy(ib_bdy)%flagv(ib,igrd) = -znfl + zsfl 1273 END IF 1274 END DO 1275 IF( icount /= 0 ) THEN 1276 IF(lwp) WRITE(numout,*) 1277 IF(lwp) WRITE(numout,*) ' E R R O R : Some ',cgrid(igrd),' grid points,', & 1278 ' are not boundary points (flagv calculation). Check nbi, nbj, indices for boundary set ',ib_bdy 1279 IF(lwp) WRITE(numout,*) ' ========== ' 1280 IF(lwp) WRITE(numout,*) 1281 nstop = nstop + 1 1282 ENDIF 1143 1283 END DO 1144 1284 1145 IF( icount /= 0 ) THEN 1146 IF(lwp) WRITE(numout,*) 1147 IF(lwp) WRITE(numout,*) ' E R R O R : Some data velocity points,', & 1148 ' are not boundary points. Check nbi, nbj, indices for boundary set ',ib_bdy 1149 IF(lwp) WRITE(numout,*) ' ========== ' 1150 IF(lwp) WRITE(numout,*) 1151 nstop = nstop + 1 1152 ENDIF 1153 1154 ENDDO 1285 END DO 1155 1286 1156 1287 ! Compute total lateral surface for volume correction: … … 1164 1295 nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 1165 1296 nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 1166 flagu => idx_bdy(ib_bdy)%flagu(ib )1297 flagu => idx_bdy(ib_bdy)%flagu(ib,igrd) 1167 1298 bdysurftot = bdysurftot + hu (nbi , nbj) & 1168 1299 & * e2u (nbi , nbj) * ABS( flagu ) & … … 1177 1308 nbi => idx_bdy(ib_bdy)%nbi(ib,igrd) 1178 1309 nbj => idx_bdy(ib_bdy)%nbj(ib,igrd) 1179 flagv => idx_bdy(ib_bdy)%flagv(ib )1310 flagv => idx_bdy(ib_bdy)%flagv(ib,igrd) 1180 1311 bdysurftot = bdysurftot + hv (nbi, nbj ) & 1181 1312 & * e1v (nbi, nbj ) * ABS( flagv ) & … … 1193 1324 DEALLOCATE(nbidta, nbjdta, nbrdta) 1194 1325 ENDIF 1326 1327 CALL wrk_dealloc(jpi,jpj,zfmask) 1195 1328 1196 1329 IF( nn_timing == 1 ) CALL timing_stop('bdy_init') … … 1587 1720 itest = 0 1588 1721 1589 IF ( nn_dyn2d(ib1)/=nn_dyn2d(ib2)) itest = itest + 11590 IF ( nn_dyn3d(ib1)/=nn_dyn3d(ib2)) itest = itest + 11591 IF ( nn_tra(ib1)/=nn_tra(ib2)) itest = itest + 11722 IF (cn_dyn2d(ib1)/=cn_dyn2d(ib2)) itest = itest + 1 1723 IF (cn_dyn3d(ib1)/=cn_dyn3d(ib2)) itest = itest + 1 1724 IF (cn_tra(ib1)/=cn_tra(ib2)) itest = itest + 1 1592 1725 ! 1593 1726 IF (nn_dyn2d_dta(ib1)/=nn_dyn2d_dta(ib2)) itest = itest + 1 -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90
r4105 r4254 132 132 ! JC: If FRS scheme is used, we assume that tidal is needed over the whole 133 133 ! relaxation area 134 IF( nn_dyn2d(ib_bdy) .eq. jp_frs) THEN134 IF( cn_dyn2d(ib_bdy) == 'frs' ) THEN 135 135 ilen0(:)=nblen(:) 136 136 ELSE … … 414 414 415 415 ! line below should be simplified (runoff case) 416 IF (( nn_dyn2d_dta(ib_bdy) .ge. 2 ).AND.(nn_tra(ib_bdy).NE.4)) THEN 416 !! CHANUT: TO BE SORTED OUT 417 !! IF (( nn_dyn2d_dta(ib_bdy) .ge. 2 ).AND.(nn_tra(ib_bdy).NE.4)) THEN 418 IF ( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN 417 419 418 420 nblen(1:jpbgrd) = idx_bdy(ib_bdy)%nblen(1:jpbgrd) 419 421 nblenrim(1:jpbgrd) = idx_bdy(ib_bdy)%nblenrim(1:jpbgrd) 420 422 421 IF( nn_dyn2d(ib_bdy) .eq. jp_frs) THEN423 IF( cn_dyn2d(ib_bdy) == 'frs' ) THEN 422 424 ilen0(:)=nblen(:) 423 425 ELSE … … 604 606 !!====================================================================== 605 607 END MODULE bdytides 608 -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90
r3777 r4254 20 20 USE dom_oce ! ocean space and time domain variables 21 21 USE bdy_oce ! ocean open boundary conditions 22 USE bdylib ! for orlanski library routines 22 23 USE bdydta, ONLY: bf 23 24 USE lbclnk ! ocean lateral boundary conditions (or mpp link) … … 51 52 DO ib_bdy=1, nb_bdy 52 53 53 SELECT CASE( nn_tra(ib_bdy) )54 CASE( jp_none)54 SELECT CASE( cn_tra(ib_bdy) ) 55 CASE('none') 55 56 CYCLE 56 CASE( jp_frs)57 CASE('frs') 57 58 CALL bdy_tra_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 58 CASE( 2)59 CASE('specified') 59 60 CALL bdy_tra_spe( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 60 CASE( 3)61 CASE('neumann') 61 62 CALL bdy_tra_nmn( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 62 CASE(4) 63 CASE('orlanski') 64 CALL bdy_tra_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ll_npo=.false. ) 65 CASE('orlanski_npo') 66 CALL bdy_tra_orlanski( idx_bdy(ib_bdy), dta_bdy(ib_bdy), ll_npo=.true. ) 67 CASE('runoff') 63 68 CALL bdy_tra_rnf( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 64 69 CASE DEFAULT … … 196 201 ! 197 202 END SUBROUTINE bdy_tra_nmn 203 204 205 SUBROUTINE bdy_tra_orlanski( idx, dta, ll_npo ) 206 !!---------------------------------------------------------------------- 207 !! *** SUBROUTINE bdy_tra_orlanski *** 208 !! 209 !! - Apply Orlanski radiation to temperature and salinity. 210 !! - Wrapper routine for bdy_orlanski_3d 211 !! 212 !! 213 !! References: Marchesiello, McWilliams and Shchepetkin, Ocean Modelling vol. 3 (2001) 214 !!---------------------------------------------------------------------- 215 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 216 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 217 LOGICAL, INTENT(in) :: ll_npo ! switch for NPO version 218 219 INTEGER :: igrd ! grid index 220 !!---------------------------------------------------------------------- 221 222 IF( nn_timing == 1 ) CALL timing_start('bdy_tra_orlanski') 223 ! 224 igrd = 1 ! Orlanski bc on temperature; 225 ! 226 CALL bdy_orlanski_3d( idx, igrd, tsb(:,:,:,jp_tem), tsa(:,:,:,jp_tem), dta%tem, ll_npo ) 227 228 igrd = 1 ! Orlanski bc on salinity; 229 ! 230 CALL bdy_orlanski_3d( idx, igrd, tsb(:,:,:,jp_sal), tsa(:,:,:,jp_sal), dta%sal, ll_npo ) 231 ! 232 IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_orlanski') 233 ! 234 235 END SUBROUTINE bdy_tra_orlanski 236 198 237 199 238 SUBROUTINE bdy_tra_rnf( idx, dta, kt ) -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90
r3294 r4254 104 104 ii = idx%nbi(jb,jgrd) 105 105 ij = idx%nbj(jb,jgrd) 106 zubtpecor = zubtpecor + idx%flagu(jb ) * ua(ii,ij, jk) * e2u(ii,ij) * fse3u(ii,ij,jk)106 zubtpecor = zubtpecor + idx%flagu(jb,jgrd) * ua(ii,ij, jk) * e2u(ii,ij) * fse3u(ii,ij,jk) 107 107 END DO 108 108 END DO … … 112 112 ii = idx%nbi(jb,jgrd) 113 113 ij = idx%nbj(jb,jgrd) 114 zubtpecor = zubtpecor + idx%flagv(jb ) * va(ii,ij, jk) * e1v(ii,ij) * fse3v(ii,ij,jk)114 zubtpecor = zubtpecor + idx%flagv(jb,jgrd) * va(ii,ij, jk) * e1v(ii,ij) * fse3v(ii,ij,jk) 115 115 END DO 116 116 END DO … … 136 136 ii = idx%nbi(jb,jgrd) 137 137 ij = idx%nbj(jb,jgrd) 138 ua(ii,ij,jk) = ua(ii,ij,jk) - idx%flagu(jb ) * zubtpecor * umask(ii,ij,jk)139 ztranst = ztranst + idx%flagu(jb ) * ua(ii,ij,jk) * e2u(ii,ij) * fse3u(ii,ij,jk)138 ua(ii,ij,jk) = ua(ii,ij,jk) - idx%flagu(jb,jgrd) * zubtpecor * umask(ii,ij,jk) 139 ztranst = ztranst + idx%flagu(jb,jgrd) * ua(ii,ij,jk) * e2u(ii,ij) * fse3u(ii,ij,jk) 140 140 END DO 141 141 END DO … … 145 145 ii = idx%nbi(jb,jgrd) 146 146 ij = idx%nbj(jb,jgrd) 147 va(ii,ij,jk) = va(ii,ij,jk) -idx%flagv(jb ) * zubtpecor * vmask(ii,ij,jk)148 ztranst = ztranst + idx%flagv(jb ) * va(ii,ij,jk) * e1v(ii,ij) * fse3v(ii,ij,jk)147 va(ii,ij,jk) = va(ii,ij,jk) -idx%flagv(jb,jgrd) * zubtpecor * vmask(ii,ij,jk) 148 ztranst = ztranst + idx%flagv(jb,jgrd) * va(ii,ij,jk) * e1v(ii,ij) * fse3v(ii,ij,jk) 149 149 END DO 150 150 END DO -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90
r3865 r4254 117 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: gphit, gphiu !: latitude of t-, u-, v- and f-points (degre) 118 118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: gphiv, gphif !: 119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1t, e2t !: horizontal scale factors at t-point (m)120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1u, e2u !: horizontal scale factors at u-point (m)121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1v, e2v !: horizontal scale factors at v-point (m)122 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1f, e2f !: horizontal scale factors at f-point (m)119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1t, e2t !: horizontal scale factors at t-point (m) 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1u, e2u !: horizontal scale factors at u-point (m) 121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1v, e2v !: horizontal scale factors at v-point (m) 122 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1f, e2f !: horizontal scale factors at f-point (m) 123 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: e1e2t !: surface at t-point (m2) 124 124 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ff !: coriolis factor (2.*omega*sin(yphi) ) (s-1) … … 203 203 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: bmask !: land/ocean mask of barotropic stream function 204 204 205 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tmask, umask, vmask, fmask !: land/ocean mask at T-, U-, V- and F-pts205 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:), TARGET :: tmask, umask, vmask, fmask !: land/ocean mask at T-, U-, V- and F-pts 206 206 207 207 REAL(wp), PUBLIC, DIMENSION(jpiglo) :: tpol, fpol !: north fold mask (jperio= 3 or 4) -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r3951 r4254 930 930 !! 931 931 ! ! ===================== 932 IF( cp_cfg == "orca" .AND. jp_cfg == 3) THEN ! ORCA R2 configuration932 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! ORCA R2 configuration 933 933 ! ! ===================== 934 934 !! acc -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_oce.F90
r3294 r4254 39 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:), TARGET :: hur_e , hvr_e ! inverse of hu_e and hv_e 40 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:), TARGET :: sshn_b ! before field without time-filter 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ua_b, va_b ! after averaged velocities 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: un_b, vn_b ! now averaged velocities 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ub_b, vb_b ! before averaged velocities 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: un_adv, vn_adv ! Advection vel. at "now" barocl. step 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ub2_b, vb2_b ! Advection vel. at "now-0.5" barocl. step 41 46 42 47 !!---------------------------------------------------------------------- … … 53 58 ALLOCATE( sshn_e(jpi,jpj) , ua_e(jpi,jpj) , hu_e(jpi,jpj) , hur_e(jpi,jpj) , & 54 59 & ssha_e(jpi,jpj) , va_e(jpi,jpj) , hv_e(jpi,jpj) , hvr_e(jpi,jpj) , & 60 & ub_b(jpi,jpj) , vb_b(jpi,jpj) , un_b(jpi,jpj) , vn_b(jpi,jpj) , & 61 & ua_b(jpi,jpj) , va_b(jpi,jpj) , & 62 & ub2_b(jpi,jpj) , vb2_b(jpi,jpj) , & 63 & un_adv(jpi,jpj) , vn_adv(jpi,jpj) , & 55 64 & sshn_b(jpi,jpj) , STAT = dynspg_oce_alloc ) 56 65 ! -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r4246 r4254 43 43 USE sbcapr ! surface boundary condition: atmospheric pressure 44 44 USE dynadv, ONLY: ln_dynadv_vec 45 #if defined key_agrif 46 USE agrif_opa_interp ! agrif 47 #endif 45 48 46 49 … … 105 108 ierr(:) = 0 106 109 107 ALLOCATE( ub_b(jpi,jpj) , vb_b(jpi,jpj) , & 108 & un_b(jpi,jpj) , vn_b(jpi,jpj) , & 109 & ua_b(jpi,jpj) , va_b(jpi,jpj) , & 110 & un_adv(jpi,jpj), vn_adv(jpi,jpj) , & 111 & sshb_e(jpi,jpj), sshbb_e(jpi,jpj), & 110 ALLOCATE( sshb_e(jpi,jpj), sshbb_e(jpi,jpj), & 112 111 & ub_e(jpi,jpj) , vb_e(jpi,jpj) , & 113 & ubb_e(jpi,jpj) , vbb_e(jpi,jpj) , & 114 & wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), & 115 & zwz(jpi,jpj), STAT= ierr(1) ) 116 117 IF( ln_bt_fw ) ALLOCATE( ub2_b(jpi,jpj), vb2_b(jpi,jpj), STAT=ierr(2) ) 112 & ubb_e(jpi,jpj) , vbb_e(jpi,jpj) , STAT= ierr(1) ) 113 114 ALLOCATE( wgtbtp1(3*nn_baro), wgtbtp2(3*nn_baro), zwz(jpi,jpj), STAT= ierr(2) ) 118 115 119 116 IF( ln_dynvor_een ) ALLOCATE( ftnw(jpi,jpj) , ftne(jpi,jpj) , & … … 626 623 IF (lk_bdy) CALL bdy_ssh( ssha_e ) 627 624 #endif 625 #if defined key_agrif 626 IF( .NOT.Agrif_Root() ) CALL agrif_ssh_ts( jn ) 627 #endif 628 628 ! 629 629 ! Sea Surface Height at u-,v-points (vvl case only) … … 815 815 phur => hur_e 816 816 phvr => hvr_e 817 pu2d => ua_e 818 pv2d => va_e 817 pua2d => ua_e 818 pva2d => va_e 819 pub2d => zun_e 820 pvb2d => zvn_e 819 821 820 822 IF( lk_bdy ) CALL bdy_dyn2d( kt ) ! open boundaries 823 #endif 824 #if defined key_agrif 825 IF( .NOT.Agrif_Root() ) CALL agrif_dyn_ts( kt, jn ) ! Agrif 821 826 #endif 822 827 ! !* Swap -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r4250 r4254 31 31 USE obc_oce 32 32 USE bdy_oce 33 USE bdy_par 34 USE bdydyn2d ! bdy_ssh routine 33 35 USE diaar5, ONLY: lk_diaar5 34 36 USE iom … … 125 127 #endif 126 128 #if defined key_bdy 127 ssha(:,:) = ssha(:,:) * bdytmask(:,:) 128 CALL lbc_lnk( ssha, 'T', 1. ) 129 #endif 129 ! bg jchanut tschanges 130 ! These lines are not necessary with time splitting since 131 ! boundary condition on sea level is set during ts loop 132 IF (lk_bdy) THEN 133 CALL lbc_lnk( ssha, 'T', 1. ) ! Not sure that's necessary 134 CALL bdy_ssh( ssha ) ! Duplicate sea level across open boundaries 135 ENDIF 136 #endif 137 ! end jchanut tschanges 130 138 #if defined key_asminc 131 139 ! ! Include the IAU weighted SSH increment -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/SETTE/sette.sh
r3708 r4254 594 594 set_namelist namelist ln_ctl .false. 595 595 set_namelist namelist ln_clobber .true. 596 set_namelist namelist nn_dyn2d 2597 set_namelist namelist nn_tra_dta 0598 596 set_namelist namelist cn_ocerst_in \"amm12.restart_20070101\" 599 597 set_namelist namelist jpni 8 … … 612 610 set_namelist namelist ln_ctl .false. 613 611 set_namelist namelist ln_clobber .true. 614 set_namelist namelist nn_dyn2d 2615 set_namelist namelist nn_tra_dta 0616 612 set_namelist namelist jpni 8 617 613 set_namelist namelist jpnj 4 … … 649 645 set_namelist namelist ln_ctl .false. 650 646 set_namelist namelist ln_clobber .true. 651 set_namelist namelist nn_dyn2d 2652 set_namelist namelist nn_tra_dta 0653 647 set_namelist namelist cn_ocerst_in \"amm12.restart_20070101\" 654 648 set_namelist namelist jpni 8 … … 668 662 set_namelist namelist nn_fwb 0 669 663 set_namelist namelist ln_ctl .false. 670 set_namelist namelist nn_dyn2d 2671 set_namelist namelist nn_tra_dta 0672 664 set_namelist namelist ln_clobber .true. 673 665 set_namelist namelist cn_ocerst_in \"amm12.restart_20070101\"
Note: See TracChangeset
for help on using the changeset viewer.