- Timestamp:
- 2013-12-11T15:38:42+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r3909 r4332 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 USE sbcapr … … 49 54 50 55 TYPE(MAP_POINTER), ALLOCATABLE, DIMENSION(:) :: nbmap_ptr ! array of pointers to nbmap 56 57 #if defined key_lim3 58 LOGICAL :: ll_bdylim3 ! determine whether ice input is lim2 (F) or lim3 (T) type 59 INTEGER :: jfld_hti, jfld_hts, jfld_ai ! indices of ice thickness, snow thickness and concentration in bf structure 60 #endif 51 61 52 62 # include "domzgr_substitute.h90" … … 77 87 ! etc. 78 88 !! 79 INTEGER :: ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd ! local indices89 INTEGER :: ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd, jl ! local indices 80 90 INTEGER, DIMENSION(jpbgrd) :: ilen1 81 91 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts … … 164 174 165 175 #if defined key_lim2 166 IF( nn_ice_lim 2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN176 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 167 177 ilen1(:) = nblen(:) 168 178 igrd = 1 ! Everything is at T-points here … … 170 180 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 171 181 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 172 dta_bdy(ib_bdy)%frld (ib) =frld(ii,ij) * tmask(ii,ij,1)182 dta_bdy(ib_bdy)%frld (ib) = frld(ii,ij) * tmask(ii,ij,1) 173 183 dta_bdy(ib_bdy)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1) 174 184 dta_bdy(ib_bdy)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1) 175 185 END DO 186 ENDIF 187 #elif defined key_lim3 188 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 189 ilen1(:) = nblen(:) 190 igrd = 1 ! Everything is at T-points here 191 DO jl = 1, jpl 192 DO ib = 1, ilen1(igrd) 193 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 194 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 195 dta_bdy(ib_bdy)%a_i (ib,jl) = a_i(ii,ij,jl) * tmask(ii,ij,1) 196 dta_bdy(ib_bdy)%ht_i(ib,jl) = ht_i(ii,ij,jl) * tmask(ii,ij,1) 197 dta_bdy(ib_bdy)%ht_s(ib,jl) = ht_s(ii,ij,jl) * tmask(ii,ij,1) 198 END DO 199 END DO 176 200 ENDIF 177 201 #endif … … 319 343 ENDIF 320 344 ENDIF 345 #if defined key_lim3 346 IF( .NOT. ll_bdylim3 .AND. nn_ice_lim(ib_bdy) > 0 .AND. nn_ice_lim_dta(ib_bdy) == 1 ) THEN ! bdy ice input (case input is lim2 type) 347 CALL lim_cat_1D ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 348 & dta_bdy(ib_bdy)%ht_i, dta_bdy(ib_bdy)%ht_s, dta_bdy(ib_bdy)%a_i ) 349 ENDIF 350 #endif 351 321 352 ENDIF 322 353 jstart = jend+1 … … 366 397 INTEGER, ALLOCATABLE, DIMENSION(:) :: igrid ! index for grid type (1,2,3 = T,U,V) 367 398 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts 399 #if defined key_lim3 400 INTEGER, DIMENSION(3) :: zdimsz ! number of elements in each of the 4 dimensions (i.e. i,j,t,ice-cat) for an array 401 INTEGER :: zndims ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 402 INTEGER :: inum,id1 ! local integer 403 #endif 368 404 TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) :: blf_i ! array of namelist information structures 369 405 TYPE(FLD_N) :: bn_tem, bn_sal, bn_u3d, bn_v3d ! 370 406 TYPE(FLD_N) :: bn_ssh, bn_u2d, bn_v2d ! informations about the fields to be read 371 407 #if defined key_lim2 372 TYPE(FLD_N) :: bn_frld, bn_hicif, bn_hsnif ! 408 TYPE(FLD_N) :: bn_frld, bn_hicif, bn_hsnif 409 #elif defined key_lim3 410 TYPE(FLD_N) :: bn_a_i, bn_ht_i, bn_ht_s 373 411 #endif 374 412 NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d 375 413 #if defined key_lim2 376 414 NAMELIST/nambdy_dta/ bn_frld, bn_hicif, bn_hsnif 415 #elif defined key_lim3 416 NAMELIST/nambdy_dta/ bn_a_i, bn_ht_i, bn_ht_s 377 417 #endif 378 418 NAMELIST/nambdy_dta/ ln_full_vel … … 388 428 ! Set nn_dta 389 429 DO ib_bdy = 1, nb_bdy 390 nn_dta(ib_bdy) = MAX( 391 392 393 #if defined key_lim2394 ,nn_ice_lim2_dta(ib_bdy) &430 nn_dta(ib_bdy) = MAX( nn_dyn2d_dta(ib_bdy) & 431 ,nn_dyn3d_dta(ib_bdy) & 432 ,nn_tra_dta(ib_bdy) & 433 #if ( defined key_lim2 || defined key_lim3 ) 434 ,nn_ice_lim_dta(ib_bdy) & 395 435 #endif 396 436 ) … … 412 452 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2 413 453 ENDIF 414 #if defined key_lim2415 IF( nn_ice_lim 2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN454 #if ( defined key_lim2 || defined key_lim3 ) 455 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 416 456 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3 417 457 ENDIF … … 448 488 ln_full_vel = .false. 449 489 ! ... default values (NB: frequency positive => hours, negative => months) 450 ! ! file ! frequency ! variable! time intep ! clim ! 'yearly' or ! weights ! rotation !451 ! ! name ! hours ! name ! (T/F)! (T/F) ! 'monthly' ! filename ! pairs !452 bn_ssh = FLD_N( 'bdy_ssh' , 24 , 'sossheig' , .false., .false. , 'yearly' , '' , '' )453 bn_u2d = FLD_N( 'bdy_vel2d_u' , 24 , 'vobtcrtx' , .false., .false. , 'yearly' , '' , '' )454 bn_v2d = FLD_N( 'bdy_vel2d_v' , 24 , 'vobtcrty' , .false., .false. , 'yearly' , '' , '' )455 bn_u3d = FLD_N( 'bdy_vel3d_u' , 24 , 'vozocrtx' , .false., .false. , 'yearly' , '' , '' )456 bn_v3d = FLD_N( 'bdy_vel3d_v' , 24 , 'vomecrty' , .false., .false. , 'yearly' , '' , '' )457 bn_tem = FLD_N( 'bdy_tem' , 24 , 'votemper' , .false., .false. , 'yearly' , '' , '' )458 bn_sal = FLD_N( 'bdy_sal' , 24 , 'vosaline' , .false., .false. , 'yearly' , '' , '' )490 ! ! file ! frequency ! variable ! time intep ! clim ! 'yearly' or ! weights ! rotation ! 491 ! ! name ! hours ! name ! (T/F) ! (T/F) ! 'monthly' ! filename ! pairs ! 492 bn_ssh = FLD_N( 'bdy_ssh' , 24 , 'sossheig' , .false. , .false. , 'yearly' , '' , '' ) 493 bn_u2d = FLD_N( 'bdy_vel2d_u' , 24 , 'vobtcrtx' , .false. , .false. , 'yearly' , '' , '' ) 494 bn_v2d = FLD_N( 'bdy_vel2d_v' , 24 , 'vobtcrty' , .false. , .false. , 'yearly' , '' , '' ) 495 bn_u3d = FLD_N( 'bdy_vel3d_u' , 24 , 'vozocrtx' , .false. , .false. , 'yearly' , '' , '' ) 496 bn_v3d = FLD_N( 'bdy_vel3d_v' , 24 , 'vomecrty' , .false. , .false. , 'yearly' , '' , '' ) 497 bn_tem = FLD_N( 'bdy_tem' , 24 , 'votemper' , .false. , .false. , 'yearly' , '' , '' ) 498 bn_sal = FLD_N( 'bdy_sal' , 24 , 'vosaline' , .false. , .false. , 'yearly' , '' , '' ) 459 499 #if defined key_lim2 460 bn_frld = FLD_N( 'bdy_frld' , 24 , 'ildsconc' , .false. , .false. , 'yearly' , '' , '' ) 461 bn_hicif = FLD_N( 'bdy_hicif' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 462 bn_hsnif = FLD_N( 'bdy_hsnif' , 24 , 'isnothic' , .false. , .false. , 'yearly' , '' , '' ) 500 bn_frld = FLD_N( 'bdy_frld' , 24 , 'ildsconc' , .false. , .false. , 'yearly' , '' , '' ) 501 bn_hicif = FLD_N( 'bdy_hicif' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 502 bn_hsnif = FLD_N( 'bdy_hsnif' , 24 , 'isnothic' , .false. , .false. , 'yearly' , '' , '' ) 503 #elif defined key_lim3 504 bn_a_i = FLD_N( 'bdy_a_i' , 24 , 'ileadfra' , .false. , .false. , 'yearly' , '' , '' ) 505 bn_ht_i = FLD_N( 'bdy_ht_i' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 506 bn_ht_s = FLD_N( 'bdy_ht_s' , 24 , 'isnowthi' , .false. , .false. , 'yearly' , '' , '' ) 463 507 #endif 464 508 … … 545 589 #if defined key_lim2 546 590 ! sea ice 547 IF( nn_ice_lim 2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN591 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 548 592 549 593 jfld = jfld + 1 … … 567 611 ilen1(jfld) = nblen(igrid(jfld)) 568 612 ilen3(jfld) = 1 613 614 ENDIF 615 #elif defined key_lim3 616 ! sea ice 617 IF( nn_ice_lim(ib_bdy) .gt. 0 .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 618 619 ! Test for types of ice input (lim2 or lim3) 620 CALL iom_open ( bn_a_i%clname, inum ) 621 id1 = iom_varid ( inum, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. ) 622 CALL iom_close ( inum ) 623 !CALL fld_clopn ( bn_a_i, nyear, nmonth, nday, ldstop=.TRUE. ) 624 !CALL iom_open ( bn_a_i%clname, inum ) 625 !id1 = iom_varid ( bn_a_i%num, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. ) 626 IF ( zndims == 4 ) THEN 627 ll_bdylim3 = .TRUE. ! lim3 input 628 ELSE 629 ll_bdylim3 = .FALSE. ! lim2 input 630 ENDIF 631 ! End test 632 633 jfld = jfld + 1 634 blf_i(jfld) = bn_a_i 635 ibdy(jfld) = ib_bdy 636 igrid(jfld) = 1 637 ilen1(jfld) = nblen(igrid(jfld)) 638 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 639 640 jfld = jfld + 1 641 blf_i(jfld) = bn_ht_i 642 ibdy(jfld) = ib_bdy 643 igrid(jfld) = 1 644 ilen1(jfld) = nblen(igrid(jfld)) 645 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 646 647 jfld = jfld + 1 648 blf_i(jfld) = bn_ht_s 649 ibdy(jfld) = ib_bdy 650 igrid(jfld) = 1 651 ilen1(jfld) = nblen(igrid(jfld)) 652 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 569 653 570 654 ENDIF … … 662 746 663 747 #if defined key_lim2 664 IF (nn_ice_lim 2(ib_bdy) .gt. 0) THEN665 IF( nn_ice_lim 2_dta(ib_bdy) .eq. 0 ) THEN748 IF (nn_ice_lim(ib_bdy) .gt. 0) THEN 749 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 666 750 ilen0(1:3) = nblen(1:3) 667 751 ALLOCATE( dta_bdy(ib_bdy)%frld(ilen0(1)) ) … … 675 759 jfld = jfld + 1 676 760 dta_bdy(ib_bdy)%hsnif => bf(jfld)%fnow(:,1,1) 761 ENDIF 762 ENDIF 763 #elif defined key_lim3 764 IF (nn_ice_lim(ib_bdy) .gt. 0) THEN 765 ilen0(1:3) = nblen(1:3) 766 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 767 ALLOCATE( dta_bdy(ib_bdy)%a_i (ilen0(1),jpl) ) 768 ALLOCATE( dta_bdy(ib_bdy)%ht_i(ilen0(1),jpl) ) 769 ALLOCATE( dta_bdy(ib_bdy)%ht_s(ilen0(1),jpl) ) 770 ELSE 771 IF ( ll_bdylim3 ) THEN ! case input is lim3 type 772 jfld = jfld + 1 773 dta_bdy(ib_bdy)%a_i => bf(jfld)%fnow(:,1,:) 774 jfld = jfld + 1 775 dta_bdy(ib_bdy)%ht_i => bf(jfld)%fnow(:,1,:) 776 jfld = jfld + 1 777 dta_bdy(ib_bdy)%ht_s => bf(jfld)%fnow(:,1,:) 778 ELSE ! case input is lim2 type 779 jfld_ai = jfld + 1 780 jfld_hti = jfld + 2 781 jfld_hts = jfld + 3 782 jfld = jfld + 3 783 ALLOCATE( dta_bdy(ib_bdy)%a_i (ilen0(1),jpl) ) 784 ALLOCATE( dta_bdy(ib_bdy)%ht_i(ilen0(1),jpl) ) 785 ALLOCATE( dta_bdy(ib_bdy)%ht_s(ilen0(1),jpl) ) 786 dta_bdy(ib_bdy)%a_i (:,:) = 0.0 787 dta_bdy(ib_bdy)%ht_i(:,:) = 0.0 788 dta_bdy(ib_bdy)%ht_s(:,:) = 0.0 789 ENDIF 790 677 791 ENDIF 678 792 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.