- Timestamp:
- 2013-06-26T09:54:16+02:00 (11 years ago)
- Location:
- branches/2013/dev_r3406_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r3406_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_oce.F90
r3294 r3938 8 8 !! 3.3 ! 2010-09 (D. Storkey) add ice boundary conditions 9 9 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 10 !! - ! 2012-01 (C. Rousset) add ice boundary conditions for lim3 10 11 !!---------------------------------------------------------------------- 11 12 #if defined key_bdy … … 44 45 REAL, POINTER, DIMENSION(:) :: hicif 45 46 REAL, POINTER, DIMENSION(:) :: hsnif 47 #elif defined key_lim3 48 REAL, POINTER, DIMENSION(:,:) :: a_i !: now ice leads fraction climatology 49 REAL, POINTER, DIMENSION(:,:) :: ht_i !: Now ice thickness climatology 50 REAL, POINTER, DIMENSION(:,:) :: ht_s !: now snow thickness 46 51 #endif 47 52 END TYPE OBC_DATA … … 73 78 INTEGER, DIMENSION(jp_bdy) :: nn_tra_dta !: = 0 use the initial state as bdy dta ; 74 79 !: = 1 read it in a NetCDF file 75 #if defined key_lim276 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim 2! Choice of boundary condition for sea ice variables77 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim 2_dta!: = 0 use the initial state as bdy dta ;80 #if ( defined key_lim2 || defined key_lim3 ) 81 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim ! Choice of boundary condition for sea ice variables 82 INTEGER, DIMENSION(jp_bdy) :: nn_ice_lim_dta !: = 0 use the initial state as bdy dta ; 78 83 !: = 1 read it in a NetCDF file 79 84 #endif -
branches/2013/dev_r3406_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r3294 r3938 11 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 12 12 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 13 !! - ! 2012-01 (C. Rousset) add ice boundary conditions for lim3 13 14 !!---------------------------------------------------------------------- 14 15 #if defined key_bdy … … 31 32 #if defined key_lim2 32 33 USE ice_2 34 #elif defined key_lim3 35 USE par_ice 36 USE ice 37 USE limcat_1D ! redistribute ice input into categories 33 38 #endif 34 39 … … 48 53 49 54 TYPE(MAP_POINTER), ALLOCATABLE, DIMENSION(:) :: nbmap_ptr ! array of pointers to nbmap 55 56 #if defined key_lim3 57 LOGICAL :: ll_bdylim3 ! determine whether ice input is lim2 (F) or lim3 (T) type 58 INTEGER :: jfld_hti, jfld_hts, jfld_ai ! indices of ice thickness, snow thickness and concentration in bf structure 59 #endif 50 60 51 61 # include "domzgr_substitute.h90" … … 76 86 ! etc. 77 87 !! 78 INTEGER :: ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd ! local indices88 INTEGER :: ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd, jl ! local indices 79 89 INTEGER, DIMENSION(jpbgrd) :: ilen1 80 90 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts … … 175 185 176 186 #if defined key_lim2 177 IF( nn_ice_lim 2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN178 IF( nn_ice_lim 2(ib_bdy) .eq. jp_frs ) THEN187 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 188 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 179 189 ilen1(:) = nblen(:) 180 190 ELSE … … 185 195 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 186 196 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 187 dta_bdy(ib_bdy)%frld (ib) =frld(ii,ij) * tmask(ii,ij,1)197 dta_bdy(ib_bdy)%frld (ib) = frld(ii,ij) * tmask(ii,ij,1) 188 198 dta_bdy(ib_bdy)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1) 189 199 dta_bdy(ib_bdy)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1) 190 200 END DO 201 ENDIF 202 #elif defined key_lim3 203 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 204 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 205 ilen1(:) = nblen(:) 206 ELSE 207 ilen1(:) = nblenrim(:) 208 ENDIF 209 igrd = 1 ! Everything is at T-points here 210 DO jl = 1, jpl 211 DO ib = 1, ilen1(igrd) 212 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 213 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 214 dta_bdy(ib_bdy)%a_i (ib,jl) = a_i(ii,ij,jl) * tmask(ii,ij,1) 215 dta_bdy(ib_bdy)%ht_i(ib,jl) = ht_i(ii,ij,jl) * tmask(ii,ij,1) 216 dta_bdy(ib_bdy)%ht_s(ib,jl) = ht_s(ii,ij,jl) * tmask(ii,ij,1) 217 END DO 218 END DO 191 219 ENDIF 192 220 #endif … … 237 265 CALL tide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta_bdy(ib_bdy), td=tides(ib_bdy), time_offset=time_offset ) 238 266 ENDIF 267 268 #if defined key_lim3 269 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN ! bdy ice input 270 IF ( .NOT. ll_bdylim3 ) THEN ! case input is lim2 type 271 CALL lim_cat_1D ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 272 & dta_bdy(ib_bdy)%ht_i, dta_bdy(ib_bdy)%ht_s, dta_bdy(ib_bdy)%a_i ) 273 ENDIF 274 ENDIF 275 #endif 276 239 277 ENDIF 240 278 jstart = jend+1 … … 311 349 INTEGER, ALLOCATABLE, DIMENSION(:) :: igrid ! index for grid type (1,2,3 = T,U,V) 312 350 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts 351 #if defined key_lim3 352 INTEGER, DIMENSION(3) :: zdimsz ! number of elements in each of the 4 dimensions (i.e. i,j,t,ice-cat) for an array 353 INTEGER :: zndims ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 354 INTEGER :: inum,id1 ! local integer 355 #endif 313 356 TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) :: blf_i ! array of namelist information structures 314 357 TYPE(FLD_N) :: bn_tem, bn_sal, bn_u3d, bn_v3d ! 315 358 TYPE(FLD_N) :: bn_ssh, bn_u2d, bn_v2d ! informations about the fields to be read 316 359 #if defined key_lim2 317 TYPE(FLD_N) :: bn_frld, bn_hicif, bn_hsnif ! 360 TYPE(FLD_N) :: bn_frld, bn_hicif, bn_hsnif 361 #elif defined key_lim3 362 TYPE(FLD_N) :: bn_a_i, bn_ht_i, bn_ht_s 318 363 #endif 319 364 NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d 320 365 #if defined key_lim2 321 366 NAMELIST/nambdy_dta/ bn_frld, bn_hicif, bn_hsnif 367 #elif defined key_lim3 368 NAMELIST/nambdy_dta/ bn_a_i, bn_ht_i, bn_ht_s 322 369 #endif 323 370 NAMELIST/nambdy_dta/ ln_full_vel … … 326 373 IF( nn_timing == 1 ) CALL timing_start('bdy_dta_init') 327 374 328 ! Set nn_dta 375 ! Set nn_dta to 0 or 1 329 376 DO ib_bdy = 1, nb_bdy 330 nn_dta(ib_bdy) = MAX( 331 332 333 #if defined key_lim2334 ,nn_ice_lim2_dta(ib_bdy) &377 nn_dta(ib_bdy) = MAX( nn_dyn2d_dta(ib_bdy) & 378 ,nn_dyn3d_dta(ib_bdy) & 379 ,nn_tra_dta(ib_bdy) & 380 #if ( defined key_lim2 || defined key_lim3 ) 381 ,nn_ice_lim_dta(ib_bdy) & 335 382 #endif 336 383 ) … … 352 399 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2 353 400 ENDIF 354 #if defined key_lim2355 IF( nn_ice_lim 2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN401 #if ( defined key_lim2 || defined key_lim3 ) 402 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 356 403 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3 357 404 ENDIF … … 377 424 ALLOCATE( igrid(nb_bdy_fld_sum) ) 378 425 379 426 ! Read namelists 380 427 ! -------------- 381 428 REWIND(numnam) … … 387 434 ln_full_vel = .false. 388 435 ! ... default values (NB: frequency positive => hours, negative => months) 389 ! ! file ! frequency ! variable! time intep ! clim ! 'yearly' or ! weights ! rotation !390 ! ! name ! hours ! name ! (T/F)! (T/F) ! 'monthly' ! filename ! pairs !391 bn_ssh = FLD_N( 'bdy_ssh' , 24 , 'sossheig' , .false., .false. , 'yearly' , '' , '' )392 bn_u2d = FLD_N( 'bdy_vel2d_u' , 24 , 'vobtcrtx' , .false., .false. , 'yearly' , '' , '' )393 bn_v2d = FLD_N( 'bdy_vel2d_v' , 24 , 'vobtcrty' , .false., .false. , 'yearly' , '' , '' )394 bn_u3d = FLD_N( 'bdy_vel3d_u' , 24 , 'vozocrtx' , .false., .false. , 'yearly' , '' , '' )395 bn_v3d = FLD_N( 'bdy_vel3d_v' , 24 , 'vomecrty' , .false., .false. , 'yearly' , '' , '' )396 bn_tem = FLD_N( 'bdy_tem' , 24 , 'votemper' , .false., .false. , 'yearly' , '' , '' )397 bn_sal = FLD_N( 'bdy_sal' , 24 , 'vosaline' , .false., .false. , 'yearly' , '' , '' )436 ! ! file ! frequency ! variable ! time intep ! clim ! 'yearly' or ! weights ! rotation ! 437 ! ! name ! hours ! name ! (T/F) ! (T/F) ! 'monthly' ! filename ! pairs ! 438 bn_ssh = FLD_N( 'bdy_ssh' , 24 , 'sossheig' , .false. , .false. , 'yearly' , '' , '' ) 439 bn_u2d = FLD_N( 'bdy_vel2d_u' , 24 , 'vobtcrtx' , .false. , .false. , 'yearly' , '' , '' ) 440 bn_v2d = FLD_N( 'bdy_vel2d_v' , 24 , 'vobtcrty' , .false. , .false. , 'yearly' , '' , '' ) 441 bn_u3d = FLD_N( 'bdy_vel3d_u' , 24 , 'vozocrtx' , .false. , .false. , 'yearly' , '' , '' ) 442 bn_v3d = FLD_N( 'bdy_vel3d_v' , 24 , 'vomecrty' , .false. , .false. , 'yearly' , '' , '' ) 443 bn_tem = FLD_N( 'bdy_tem' , 24 , 'votemper' , .false. , .false. , 'yearly' , '' , '' ) 444 bn_sal = FLD_N( 'bdy_sal' , 24 , 'vosaline' , .false. , .false. , 'yearly' , '' , '' ) 398 445 #if defined key_lim2 399 bn_frld = FLD_N( 'bdy_frld' , 24 , 'ildsconc' , .false. , .false. , 'yearly' , '' , '' ) 400 bn_hicif = FLD_N( 'bdy_hicif' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 401 bn_hsnif = FLD_N( 'bdy_hsnif' , 24 , 'isnothic' , .false. , .false. , 'yearly' , '' , '' ) 446 bn_frld = FLD_N( 'bdy_frld' , 24 , 'ildsconc' , .false. , .false. , 'yearly' , '' , '' ) 447 bn_hicif = FLD_N( 'bdy_hicif' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 448 bn_hsnif = FLD_N( 'bdy_hsnif' , 24 , 'isnothic' , .false. , .false. , 'yearly' , '' , '' ) 449 #elif defined key_lim3 450 bn_a_i = FLD_N( 'bdy_a_i' , 24 , 'ileadfra' , .false. , .false. , 'yearly' , '' , '' ) 451 bn_ht_i = FLD_N( 'bdy_ht_i' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 452 bn_ht_s = FLD_N( 'bdy_ht_s' , 24 , 'isnowthi' , .false. , .false. , 'yearly' , '' , '' ) 402 453 #endif 403 454 … … 515 566 #if defined key_lim2 516 567 ! sea ice 517 IF( nn_ice_lim 2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN568 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 518 569 519 570 jfld = jfld + 1 … … 521 572 ibdy(jfld) = ib_bdy 522 573 igrid(jfld) = 1 523 IF( nn_ice_lim 2(ib_bdy) .eq. jp_frs ) THEN574 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 524 575 ilen1(jfld) = nblen(igrid(jfld)) 525 576 ELSE … … 532 583 ibdy(jfld) = ib_bdy 533 584 igrid(jfld) = 1 534 IF( nn_ice_lim 2(ib_bdy) .eq. jp_frs ) THEN585 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 535 586 ilen1(jfld) = nblen(igrid(jfld)) 536 587 ELSE … … 543 594 ibdy(jfld) = ib_bdy 544 595 igrid(jfld) = 1 545 IF( nn_ice_lim 2(ib_bdy) .eq. jp_frs ) THEN596 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 546 597 ilen1(jfld) = nblen(igrid(jfld)) 547 598 ELSE … … 549 600 ENDIF 550 601 ilen3(jfld) = 1 602 603 ENDIF 604 #elif defined key_lim3 605 ! sea ice 606 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 607 608 ! Test for types of ice input (lim2 or lim3) 609 CALL iom_open ( bn_a_i%clname, inum ) 610 id1 = iom_varid ( inum, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. ) 611 CALL iom_close ( inum ) 612 !CALL fld_clopn ( bn_a_i, nyear, nmonth, nday, ldstop=.TRUE. ) 613 !CALL iom_open ( bn_a_i%clname, inum ) 614 !id1 = iom_varid ( bn_a_i%num, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. ) 615 IF ( zndims == 4 ) THEN 616 ll_bdylim3 = .TRUE. 617 ELSE 618 ll_bdylim3 = .FALSE. 619 ENDIF 620 ! End test 621 622 jfld = jfld + 1 623 blf_i(jfld) = bn_a_i 624 ibdy(jfld) = ib_bdy 625 igrid(jfld) = 1 626 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 627 ilen1(jfld) = nblen(igrid(jfld)) 628 ELSE 629 ilen1(jfld) = nblenrim(igrid(jfld)) 630 ENDIF 631 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 632 633 jfld = jfld + 1 634 blf_i(jfld) = bn_ht_i 635 ibdy(jfld) = ib_bdy 636 igrid(jfld) = 1 637 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 638 ilen1(jfld) = nblen(igrid(jfld)) 639 ELSE 640 ilen1(jfld) = nblenrim(igrid(jfld)) 641 ENDIF 642 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 643 644 jfld = jfld + 1 645 blf_i(jfld) = bn_ht_s 646 ibdy(jfld) = ib_bdy 647 igrid(jfld) = 1 648 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 649 ilen1(jfld) = nblen(igrid(jfld)) 650 ELSE 651 ilen1(jfld) = nblenrim(igrid(jfld)) 652 ENDIF 653 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 551 654 552 655 ENDIF … … 652 755 653 756 #if defined key_lim2 654 IF (nn_ice_lim 2(ib_bdy) .gt. 0) THEN655 IF( nn_ice_lim 2_dta(ib_bdy) .eq. 0 ) THEN656 IF( nn_ice_lim 2(ib_bdy) .eq. jp_frs ) THEN757 IF (nn_ice_lim(ib_bdy) .gt. 0) THEN 758 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 759 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 657 760 ilen0(1:3) = nblen(1:3) 658 761 ELSE … … 669 772 jfld = jfld + 1 670 773 dta_bdy(ib_bdy)%hsnif => bf(jfld)%fnow(:,1,1) 774 ENDIF 775 ENDIF 776 #elif defined key_lim3 777 IF (nn_ice_lim(ib_bdy) .gt. 0) THEN 778 IF( nn_ice_lim(ib_bdy) .eq. jp_frs ) THEN 779 ilen0(1:3) = nblen(1:3) 780 ELSE 781 ilen0(1:3) = nblenrim(1:3) 782 ENDIF 783 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 784 ALLOCATE( dta_bdy(ib_bdy)%a_i (ilen0(1),jpl) ) 785 ALLOCATE( dta_bdy(ib_bdy)%ht_i(ilen0(1),jpl) ) 786 ALLOCATE( dta_bdy(ib_bdy)%ht_s(ilen0(1),jpl) ) 787 ELSE 788 IF ( ll_bdylim3 ) THEN 789 jfld = jfld + 1 790 dta_bdy(ib_bdy)%a_i => bf(jfld)%fnow(:,1,:) 791 jfld = jfld + 1 792 dta_bdy(ib_bdy)%ht_i => bf(jfld)%fnow(:,1,:) 793 jfld = jfld + 1 794 dta_bdy(ib_bdy)%ht_s => bf(jfld)%fnow(:,1,:) 795 ELSE 796 jfld = jfld + 1 797 jfld_ai = jfld 798 ALLOCATE( dta_bdy(ib_bdy)%a_i (ilen0(1),jpl) ) 799 dta_bdy(ib_bdy)%a_i(:,:) = 0.0 800 jfld = jfld + 1 801 jfld_hti = jfld 802 ALLOCATE( dta_bdy(ib_bdy)%ht_i(ilen0(1),jpl) ) 803 dta_bdy(ib_bdy)%ht_i(:,:) = 0.0 804 jfld = jfld + 1 805 jfld_hts = jfld 806 ALLOCATE( dta_bdy(ib_bdy)%ht_s(ilen0(1),jpl) ) 807 dta_bdy(ib_bdy)%ht_s(:,:) = 0.0 808 ENDIF 809 671 810 ENDIF 672 811 ENDIF -
branches/2013/dev_r3406_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r3298 r3938 69 69 REAL , POINTER :: flagu, flagv ! - - 70 70 REAL(wp) :: zefl, zwfl, znfl, zsfl ! local scalars 71 INTEGER, DIMENSION ( 2) :: kdimsz71 INTEGER, DIMENSION (1) :: kdimsz 72 72 INTEGER, DIMENSION(jpbgrd,jp_bdy) :: nblendta ! Length of index arrays 73 73 INTEGER, ALLOCATABLE, DIMENSION(:,:,:) :: nbidta, nbjdta ! Index arrays: i and j indices of bdy dta 74 74 INTEGER, ALLOCATABLE, DIMENSION(:,:,:) :: nbrdta ! Discrete distance from rim points 75 REAL, ALLOCATABLE, DIMENSION(:) :: znblendta 75 76 REAL(wp), DIMENSION(jpidta,jpjdta) :: zmask ! global domain mask 76 77 CHARACTER(LEN=80),DIMENSION(jpbgrd) :: clfile … … 80 81 & ln_mask_file, cn_mask_file, nn_dyn2d, nn_dyn2d_dta, & 81 82 & nn_dyn3d, nn_dyn3d_dta, nn_tra, nn_tra_dta, & 82 #if defined key_lim283 & nn_ice_lim 2, nn_ice_lim2_dta, &83 #if ( defined key_lim2 || defined key_lim3 ) 84 & nn_ice_lim, nn_ice_lim_dta, & 84 85 #endif 85 86 & ln_vol, nn_volctl, nn_rimwidth … … 121 122 nn_tra(:) = 0 122 123 nn_tra_dta(:) = -1 ! uninitialised flag 123 #if defined key_lim2124 nn_ice_lim 2(:) = 0125 nn_ice_lim 2_dta(:)= -1 ! uninitialised flag124 #if ( defined key_lim2 || defined key_lim3 ) 125 nn_ice_lim(:) = 0 126 nn_ice_lim_dta(:)= -1 ! uninitialised flag 126 127 #endif 127 128 ln_vol = .false. … … 204 205 IF(lwp) WRITE(numout,*) 205 206 206 #if defined key_lim2207 #if ( defined key_lim2 || defined key_lim3 ) 207 208 IF(lwp) WRITE(numout,*) 'Boundary conditions for sea ice: ' 208 SELECT CASE( nn_ice_lim 2(ib_bdy) )209 SELECT CASE( nn_ice_lim(ib_bdy) ) 209 210 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' no open boundary condition' 210 211 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 211 212 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for nn_tra' ) 212 213 END SELECT 213 IF( nn_ice_lim 2(ib_bdy) .gt. 0 ) THEN214 SELECT CASE( nn_ice_lim 2_dta(ib_bdy) ) !214 IF( nn_ice_lim(ib_bdy) .gt. 0 ) THEN 215 SELECT CASE( nn_ice_lim_dta(ib_bdy) ) ! 215 216 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' 216 217 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' boundary data taken from file' 217 CASE DEFAULT ; CALL ctl_stop( 'nn_ice_lim 2_dta must be 0 or 1' )218 CASE DEFAULT ; CALL ctl_stop( 'nn_ice_lim_dta must be 0 or 1' ) 218 219 END SELECT 219 220 ENDIF … … 327 328 DO igrd = 1, jpbgrd 328 329 id_dummy = iom_varid( inum, 'nbi'//cgrid(igrd), kdimsz=kdimsz ) 329 nblendta(igrd,ib_bdy) = kdimsz(1) 330 jpbdta = MAX(jpbdta, kdimsz(1)) 331 ENDDO 330 !clem nblendta(igrd,ib_bdy) = kdimsz(1) 331 !clem jpbdta = MAX(jpbdta, kdimsz(1)) 332 nblendta(igrd,ib_bdy) = MAXVAL(kdimsz) 333 jpbdta = MAX(jpbdta, MAXVAL(kdimsz)) 334 ENDDO 335 CALL iom_close( inum ) 332 336 333 337 ENDIF … … 505 509 ENDDO 506 510 507 ELSE ! Read global index arrays from boundary coordinates file. 508 509 DO igrd = 1, jpbgrd 510 CALL iom_get( inum, jpdom_unknown, 'nbi'//cgrid(igrd), dta_global(1:nblendta(igrd,ib_bdy),:,1) ) 511 ELSE ! Read global index arrays from boundary coordinates file 512 513 CALL iom_open( cn_coords_file(ib_bdy), inum ) 514 DO igrd = 1, jpbgrd 515 ALLOCATE(znblendta(nblendta(igrd,ib_bdy))) 516 517 CALL iom_get( inum, jpdom_unknown, 'nbi'//cgrid(igrd), znblendta(1:nblendta(igrd,ib_bdy)) ) 511 518 DO ii = 1,nblendta(igrd,ib_bdy) 512 nbidta(ii,igrd,ib_bdy) = INT( dta_global(ii,1,1) )519 nbidta(ii,igrd,ib_bdy) = INT( znblendta(ii) ) 513 520 END DO 514 CALL iom_get( inum, jpdom_unknown, 'nbj'//cgrid(igrd), dta_global(1:nblendta(igrd,ib_bdy),:,1) )521 CALL iom_get( inum, jpdom_unknown, 'nbj'//cgrid(igrd), znblendta(1:nblendta(igrd,ib_bdy)) ) 515 522 DO ii = 1,nblendta(igrd,ib_bdy) 516 nbjdta(ii,igrd,ib_bdy) = INT( dta_global(ii,1,1) )523 nbjdta(ii,igrd,ib_bdy) = INT( znblendta(ii) ) 517 524 END DO 518 CALL iom_get( inum, jpdom_unknown, 'nbr'//cgrid(igrd), dta_global(1:nblendta(igrd,ib_bdy),:,1) )525 CALL iom_get( inum, jpdom_unknown, 'nbr'//cgrid(igrd), znblendta(1:nblendta(igrd,ib_bdy)) ) 519 526 DO ii = 1,nblendta(igrd,ib_bdy) 520 nbrdta(ii,igrd,ib_bdy) = INT( dta_global(ii,1,1) )527 nbrdta(ii,igrd,ib_bdy) = INT( znblendta(ii) ) 521 528 END DO 522 529 523 ibr_max = MAXVAL( nbrdta(:,igrd,ib_bdy) ) 530 ibr_max = MAXVAL( nbrdta(1:nblendta(igrd,ib_bdy),igrd,ib_bdy) ) 531 !WRITE(numout,*) nbrdta(1:nblendta(igrd,ib_bdy),igrd,ib_bdy) 524 532 IF(lwp) WRITE(numout,*) 525 533 IF(lwp) WRITE(numout,*) ' Maximum rimwidth in file is ', ibr_max … … 527 535 IF (ibr_max < nn_rimwidth(ib_bdy)) & 528 536 CALL ctl_stop( 'nn_rimwidth is larger than maximum rimwidth in file',cn_coords_file(ib_bdy) ) 529 537 DEALLOCATE(znblendta) 530 538 END DO 531 539 CALL iom_close( inum ) … … 680 688 tmask_i (:,:) = tmask(:,:,1) * tmask_i(:,:) 681 689 bdytmask(:,:) = tmask(:,:,1) 690 bdyumask(:,:) = umask(:,:,1) 691 bdyvmask(:,:) = vmask(:,:,1) 682 692 683 693 ! bdy masks and bmask are now set to zero on boundary points: … … 803 813 804 814 IF( nn_timing == 1 ) CALL timing_stop('bdy_init') 805 806 815 END SUBROUTINE bdy_init 807 816 -
branches/2013/dev_r3406_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90
r3294 r3938 9 9 !! 3.3 ! 2010-09 (D.Storkey and E.O'Dea) bug fixes 10 10 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 11 !! - ! 2012-02 (C. Rousset) tides reordered 11 12 !!---------------------------------------------------------------------- 12 13 #if defined key_bdy … … 89 90 NAMELIST/nambdy_tide/ln_tide_date, filtide, tide_cpt, tide_speed 90 91 !!---------------------------------------------------------------------- 91 92 IF( nn_timing == 1 ) CALL timing_start('tide_init') 92 IF( nn_timing == 1 ) CALL timing_start('bdy-tide_init') 93 93 94 94 IF(lwp) WRITE(numout,*) … … 125 125 DO itide = 1, td%ncpt 126 126 nindx(itide) = 0 127 IF( TRIM( tide_cpt(itide) ) == ' Q1' ) nindx(itide) = 1128 IF( TRIM( tide_cpt(itide) ) == ' O1' ) nindx(itide) = 2129 IF( TRIM( tide_cpt(itide) ) == ' P1' ) nindx(itide) = 3130 IF( TRIM( tide_cpt(itide) ) == ' S1' ) nindx(itide) = 4127 IF( TRIM( tide_cpt(itide) ) == 'M2' ) nindx(itide) = 1 128 IF( TRIM( tide_cpt(itide) ) == 'S2' ) nindx(itide) = 2 129 IF( TRIM( tide_cpt(itide) ) == 'N2' ) nindx(itide) = 3 130 IF( TRIM( tide_cpt(itide) ) == 'K2' ) nindx(itide) = 4 131 131 IF( TRIM( tide_cpt(itide) ) == 'K1' ) nindx(itide) = 5 132 IF( TRIM( tide_cpt(itide) ) == ' 2N2') nindx(itide) = 6133 IF( TRIM( tide_cpt(itide) ) == ' MU2') nindx(itide) = 7134 IF( TRIM( tide_cpt(itide) ) == ' N2' ) nindx(itide) = 8135 IF( TRIM( tide_cpt(itide) ) == ' NU2') nindx(itide) = 9136 IF( TRIM( tide_cpt(itide) ) == ' M2' ) nindx(itide) = 10137 IF( TRIM( tide_cpt(itide) ) == ' L2' ) nindx(itide) = 11138 IF( TRIM( tide_cpt(itide) ) == ' T2' ) nindx(itide) = 12139 IF( TRIM( tide_cpt(itide) ) == ' S2' ) nindx(itide) = 13140 IF( TRIM( tide_cpt(itide) ) == ' K2' ) nindx(itide) = 14132 IF( TRIM( tide_cpt(itide) ) == 'O1' ) nindx(itide) = 6 133 IF( TRIM( tide_cpt(itide) ) == 'P1' ) nindx(itide) = 7 134 IF( TRIM( tide_cpt(itide) ) == 'Q1' ) nindx(itide) = 8 135 IF( TRIM( tide_cpt(itide) ) == 'S1' ) nindx(itide) = 9 136 IF( TRIM( tide_cpt(itide) ) == '2N2' ) nindx(itide) = 10 137 IF( TRIM( tide_cpt(itide) ) == 'MU2' ) nindx(itide) = 11 138 IF( TRIM( tide_cpt(itide) ) == 'NU2' ) nindx(itide) = 12 139 IF( TRIM( tide_cpt(itide) ) == 'L2' ) nindx(itide) = 13 140 IF( TRIM( tide_cpt(itide) ) == 'T2' ) nindx(itide) = 14 141 141 IF( TRIM( tide_cpt(itide) ) == 'M4' ) nindx(itide) = 15 142 142 IF( nindx(itide) == 0 .AND. lwp ) THEN … … 225 225 ! 226 226 IF( nindx(itide) /= 0 ) THEN 227 !!gm use rpi and rad global variable 228 z_arg = 3.14159265d0 * z_vplu(nindx(itide)) / 180.0d0 227 z_arg = rad * z_vplu(nindx(itide)) 229 228 z_atde=z_ftc(nindx(itide))*cos(z_arg) 230 229 z_btde=z_ftc(nindx(itide))*sin(z_arg) … … 268 267 END DO ! loop on ib_bdy 269 268 270 IF( nn_timing == 1 ) CALL timing_stop(' tide_init')269 IF( nn_timing == 1 ) CALL timing_stop('bdy-tide_init') 271 270 272 271 END SUBROUTINE tide_init … … 299 298 !!---------------------------------------------------------------------- 300 299 301 IF( nn_timing == 1 ) CALL timing_start(' tide_update')300 IF( nn_timing == 1 ) CALL timing_start('bdy-tide_update') 302 301 303 302 time_add = 0 … … 338 337 END DO 339 338 ! 340 IF( nn_timing == 1 ) CALL timing_stop(' tide_update')339 IF( nn_timing == 1 ) CALL timing_stop('bdy-tide_update') 341 340 ! 342 341 END SUBROUTINE tide_update … … 361 360 CHARACTER(len=8), DIMENSION(nc) :: cname 362 361 INTEGER :: year, vd, ivdy, ndc, i, k 363 REAL(wp) :: ss, h, p, en, p1 , rtd362 REAL(wp) :: ss, h, p, en, p1 364 363 REAL(wp), DIMENSION(nc) :: f ! nodal correction 365 364 REAL(wp), DIMENSION(nc) :: z_vplu ! phase correction 366 365 REAL(wp), DIMENSION(nc) :: u, v, zig 367 366 !! 368 DATA cname/ ' q1' , 'o1' , 'p1' , 's1', 'k1' , &369 & ' 2n2' , 'mu2' , 'n2' , 'nu2' , 'm2', &370 & ' l2' , 't2' , 's2' , 'k2', 'm4' /371 DATA zig/ . 2338507481, .2433518789, .2610826055, .2617993878, .2625161701,&372 & .4868657873, .4881373225, .4963669182, .4976384533, .5058680490,&373 & .5153691799, .5228820265, .5235987756, .5250323419, 1.011736098/367 DATA cname/ 'm2' , 's2' , 'n2' , 'k2' , 'k1' , & 368 & 'o1' , 'p1' , 'q1' , 's1' , '2n2' , & 369 & 'mu2' , 'nu2' , 'l2' , 't2' , 'm4' / 370 DATA zig/ .5058680490, .5235987756, .4963669182, .5250323419, .2625161701, & 371 .2433518789, .2610826055, .2338507481, .2617993878, .4868657873, & 372 .4881373225, .4976384533, .5153691799, .5228820265, 1.011736098 / 374 373 !!---------------------------------------------------------------------- 375 374 ! … … 389 388 ndc = nc 390 389 !.....ndc = number of constituents allowed 391 !!gm use rpi ?392 rtd = 360.0 / 6.2831852393 390 DO i = 1, ndc 394 zig(i) = zig(i) *rtd391 zig(i) = zig(i) / rad 395 392 ! sigo(i)= zig(i) 396 393 END DO … … 535 532 ! 536 533 !!gm precision of the computation : example for s it should be replace by: 537 !!gm s = 218.3165 + (481267.8813 - 0.0016*t)*t + 152.0*deltat ==> more precise modify the last digits results 538 s = 218.3165 + 481267.8813*t - 0.0016*t*t + 152.0*deltat 539 h = 280.4661 + 36000.7698 *t + 0.0003*t*t + 11.0*deltat 540 p = 83.3535 + 4069.0139 *t - 0.0103*t*t + deltat 541 en = 234.9555 + 1934.1363 *t - 0.0021*t*t + deltat 542 p1 = 282.9384 + 1.7195 *t + 0.0005*t*t 534 s = 218.3165 + (481267.8813 - 0.0016*t)*t + 152.0*deltat 535 h = 280.4661 + (36000.7698 + 0.0003*t)*t + 11.0*deltat 536 p = 83.3535 + (4069.0139 - 0.0103*t)*t + deltat 537 en = 234.9555 + (1934.1363 - 0.0021*t)*t + deltat 538 p1 = 282.9384 + (1.7195 + 0.0005*t)*t 543 539 ! 544 540 nn = s / cycle … … 579 575 !! 580 576 581 !!gm rad is already a public variable defined in phycst.F90 .... ==> doctor norme local real start with "z" 582 REAL(wp) :: w1, w2, w3, w4, w5, w6, w7, w8, nw, pw, rad 577 REAL(wp) :: w1, w2, w3, w4, w5, w6, w7, w8, nw, pw 583 578 REAL(wp) :: a(nc), b(nc) 584 579 INTEGER :: ndc, k … … 589 584 ! a=f , b =u 590 585 ! t is zero as compared to tifa. 591 !! use rad defined in phycst (i.e. add a USE phycst at the begining of the module592 rad = 6.2831852d0/360.0593 586 pw = p * rad 594 587 nw = cn * rad … … 604 597 & - 0.0156 * SIN( 2*pw-2*nw ) - 0.037 * SIN( nw ) 605 598 ! 606 a(1) = 1.00 89 + 0.1871 * w1 - 0.0147 * w2 + 0.0014 * w3607 b(1) = 0.1885 * w4 - 0.0234 * w5 + 0.0033 * w6608 ! q1609 a(2) = a(1)610 b(2) = b(1)611 ! o1612 a(3) = 1.0 613 b(3) = 0.0614 ! p1615 a(4) = 1.0 616 b(4) = 0.0617 ! s1599 a(1) = 1.0004 -0.0373*w1+ 0.0002*w2 600 b(1) = -0.0374*w4 601 ! m2 602 a(2)= 1.0 603 b(2)= 0.0 604 ! s2 605 a(3) = 1.0004 -0.0373*w1+ 0.0002*w2 606 b(3) = -0.0374*w4 607 ! n2 608 a(4) = 1.0241+0.2863*w1+0.0083*w2 -0.0015*w3 609 b(4) = -0.3096*w4 + 0.0119*w5 - 0.0007*w6 610 ! k2 618 611 a(5) = 1.0060+0.1150*w1- 0.0088*w2 +0.0006*w3 619 612 b(5) = -0.1546*w4 + 0.0119*w5 -0.0012*w6 620 613 ! k1 621 a(6) =1.0004 -0.0373*w1+ 0.0002*w2 622 b(6) = -0.0374*w4 614 a(6) = 1.0089 + 0.1871 * w1 - 0.0147 * w2 + 0.0014 * w3 615 b(6) = 0.1885 * w4 - 0.0234 * w5 + 0.0033 * w6 616 ! o1 617 a(7) = 1.0 618 b(7) = 0.0 619 ! p1 620 a(8) = 1.0089 + 0.1871 * w1 - 0.0147 * w2 + 0.0014 * w3 621 b(8) = 0.1885 * w4 - 0.0234 * w5 + 0.0033 * w6 622 ! q1 623 a(9) = 1.0 624 b(9) = 0.0 625 ! s1 626 a(10) = 1.0004 -0.0373*w1+ 0.0002*w2 627 b(10) = -0.0374*w4 623 628 ! 2n2 624 a( 7) = a(6)625 b( 7) = b(6)629 a(11) = 1.0004 -0.0373*w1+ 0.0002*w2 630 b(11) = -0.0374*w4 626 631 ! mu2 627 a(8) = a(6) 628 b(8) = b(6) 629 ! n2 630 a(9) = a(6) 631 b(9) = b(6) 632 a(12) = 1.0004 -0.0373*w1+ 0.0002*w2 633 b(12) = -0.0374*w4 632 634 ! nu2 633 a(10) = a(6) 634 b(10) = b(6) 635 ! m2 636 a(11) = SQRT( w7 * w7 + w8 * w8 ) 637 b(11) = ATAN( w8 / w7 ) 635 a(13) = SQRT( w7 * w7 + w8 * w8 ) 636 b(13) = ATAN( w8 / w7 ) 638 637 !!gmuse rpi instead of 3.141992 ??? true pi is rpi=3.141592653589793_wp ..... ???? 639 IF( w7 < 0.e0 ) b(1 1) = b(11) + 3.141992638 IF( w7 < 0.e0 ) b(13) = b(13) + 3.141992 640 639 ! l2 641 a(1 2) = 1.0642 b(1 2) = 0.0640 a(14) = 1.0 641 b(14) = 0.0 643 642 ! t2 644 a(13)= a(12) 645 b(13)= b(12) 646 ! s2 647 a(14) = 1.0241+0.2863*w1+0.0083*w2 -0.0015*w3 648 b(14) = -0.3096*w4 + 0.0119*w5 - 0.0007*w6 649 ! k2 650 a(15) = a(6)*a(6) 651 b(15) = 2*b(6) 643 a(15) = a(10)*a(10) 644 b(15) = 2*b(10) 652 645 ! m4 653 646 !!gm old coding, remove GOTO and label of lines … … 686 679 ndc = nc 687 680 ! v s are computed here. 688 v(1) =-3*s +h +p +270 ! Q1689 v(2) =-2*s +h +270.0 ! O1690 v(3) =-h +270 ! P1691 v(4) =180 ! S1692 v(5) =h +90.0! K1693 v(6) =-4*s +2*h +2*p ! 2N2694 v(7) =-4*(s-h) ! MU2695 v(8) =-3*s +2*h +p ! N2696 v(9) =-3*s +4*h -p ! MU2697 v(10) =- 2*s +2*h ! M2698 v(11) =- s +2*h -p +180 ! L2699 v(12) =- h +p1 ! T2700 v(13) = 0 ! S2701 v(14) = h+h ! K2702 v(15) =2*v(1 0)! M4681 v(1) =-2*s +2*h ! M2 682 v(2) =0 ! S2 683 v(3) =-3*s +2*h +p ! N2 684 v(4) =h+h ! K2 685 v(5) =h +90.0 ! K1 686 v(6) =-2*s +h +270.0 ! O1 687 v(7) =-h +270 ! P1 688 v(8) =-3*s +h +p +270 ! Q1 689 v(9) =180 ! S1 690 v(10) =-4*s +2*h +2*p ! 2N2 691 v(11) =-4*(s-h) ! MU2 692 v(12) =-3*s +4*h -p ! NU2 693 v(13) =-s +2*h -p +180 ! L2 694 v(14) =-h +p1 ! T2 695 v(15) =2*v(1) ! M4 703 696 ! 704 697 !!gm old coding, remove GOTO and label of lines -
branches/2013/dev_r3406_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90
r3294 r3938 85 85 ij = idx%nbj(ib,igrd) 86 86 zwgt = idx%nbw(ib,igrd) 87 tsa(ii,ij,ik,jp_tem) = ( tsa(ii,ij,ik,jp_tem) + zwgt * ( dta%tem(ib,ik) - tsa(ii,ij,ik,jp_tem) ) ) * tmask(ii,ij,ik) 87 tsa(ii,ij,ik,jp_tem) = ( tsa(ii,ij,ik,jp_tem) + zwgt * ( dta%tem(ib,ik) - tsa(ii,ij,ik,jp_tem) ) ) * tmask(ii,ij,ik) 88 88 tsa(ii,ij,ik,jp_sal) = ( tsa(ii,ij,ik,jp_sal) + zwgt * ( dta%sal(ib,ik) - tsa(ii,ij,ik,jp_sal) ) ) * tmask(ii,ij,ik) 89 89 END DO -
branches/2013/dev_r3406_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90
r3294 r3938 77 77 TYPE(OBC_INDEX), POINTER :: idx 78 78 !!----------------------------------------------------------------------------- 79 80 79 IF( nn_timing == 1 ) CALL timing_start('bdy_vol') 81 80
Note: See TracChangeset
for help on using the changeset viewer.