- Timestamp:
- 2013-11-20T10:46:31+01:00 (10 years ago)
- Location:
- branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 1 added
- 1 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdy_oce.F90
r4267 r4278 8 8 !! 3.3 ! 2010-09 (D. Storkey) add ice boundary conditions 9 9 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 10 !! 3.6 ! 2012-01 (C. Rousset) add ice boundary conditions for lim3 10 11 !!---------------------------------------------------------------------- 11 12 #if defined key_bdy … … 62 63 REAL(wp), POINTER, DIMENSION(:) :: hicif 63 64 REAL(wp), POINTER, DIMENSION(:) :: hsnif 65 #elif defined key_lim3 66 LOGICAL :: ll_a_i 67 LOGICAL :: ll_ht_i 68 LOGICAL :: ll_ht_s 69 REAL, POINTER, DIMENSION(:,:) :: a_i !: now ice leads fraction climatology 70 REAL, POINTER, DIMENSION(:,:) :: ht_i !: Now ice thickness climatology 71 REAL, POINTER, DIMENSION(:,:) :: ht_s !: now snow thickness 64 72 #endif 65 73 END TYPE OBC_DATA -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r4254 r4278 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 !! 3.6 ! 2012-01 (C. Rousset) add ice boundary conditions for lim3 13 14 !!---------------------------------------------------------------------- 14 15 #if defined key_bdy … … 32 33 #if defined key_lim2 33 34 USE ice_2 35 #elif defined key_lim3 36 USE par_ice 37 USE ice 38 USE limcat_1D ! redistribute ice input into categories 34 39 #endif 35 40 USE sbcapr … … 50 55 51 56 TYPE(MAP_POINTER), ALLOCATABLE, DIMENSION(:) :: nbmap_ptr ! array of pointers to nbmap 57 58 #if defined key_lim3 59 LOGICAL :: ll_bdylim3 ! determine whether ice input is lim2 (F) or lim3 (T) type 60 INTEGER :: jfld_hti, jfld_hts, jfld_ai ! indices of ice thickness, snow thickness and concentration in bf structure 61 #endif 52 62 53 63 # include "domzgr_substitute.h90" … … 78 88 ! etc. 79 89 !! 80 INTEGER :: ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd ! local indices90 INTEGER :: ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd, jl ! local indices 81 91 INTEGER, DIMENSION(jpbgrd) :: ilen1 82 92 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts … … 213 223 END DO 214 224 END IF 225 ENDIF 226 #elif defined key_lim3 227 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 228 ilen1(:) = nblen(:) 229 IF( dta%ll_a_i ) THEN 230 igrd = 1 231 DO jl = 1, jpl 232 DO ib = 1, ilen1(igrd) 233 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 234 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 235 dta_bdy(ib_bdy)%a_i (ib,jl) = a_i(ii,ij,jl) * tmask(ii,ij,1) 236 END DO 237 END DO 238 ENDIF 239 IF( dta%ll_ht_i ) THEN 240 igrd = 1 241 DO jl = 1, jpl 242 DO ib = 1, ilen1(igrd) 243 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 244 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 245 dta_bdy(ib_bdy)%ht_i (ib,jl) = ht_i(ii,ij,jl) * tmask(ii,ij,1) 246 END DO 247 END DO 248 ENDIF 249 IF( dta%ll_ht_s ) THEN 250 igrd = 1 251 DO jl = 1, jpl 252 DO ib = 1, ilen1(igrd) 253 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 254 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 255 dta_bdy(ib_bdy)%ht_s (ib,jl) = ht_s(ii,ij,jl) * tmask(ii,ij,1) 256 END DO 257 END DO 258 ENDIF 215 259 ENDIF 216 260 #endif … … 346 390 347 391 ENDIF 392 #if defined key_lim3 393 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) 394 CALL lim_cat_1D ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 395 & dta_bdy(ib_bdy)%ht_i, dta_bdy(ib_bdy)%ht_s, dta_bdy(ib_bdy)%a_i ) 396 ENDIF 397 #endif 348 398 ENDIF 349 399 jstart = jstart + dta%nread(1) … … 400 450 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts 401 451 TYPE(OBC_DATA), POINTER :: dta ! short cut 452 #if defined key_lim3 453 INTEGER, DIMENSION(3) :: zdimsz ! number of elements in each of the 4 dimensions (i.e. i,j,t,ice-cat) for an array 454 INTEGER :: zndims ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 455 INTEGER :: inum,id1 ! local integer 456 #endif 402 457 TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) :: blf_i ! array of namelist information structures 403 458 TYPE(FLD_N) :: bn_tem, bn_sal, bn_u3d, bn_v3d ! … … 405 460 #if defined key_lim2 406 461 TYPE(FLD_N) :: bn_frld, bn_hicif, bn_hsnif ! 462 #elif defined key_lim3 463 TYPE(FLD_N) :: bn_a_i, bn_ht_i, bn_ht_s 407 464 #endif 408 465 NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d 409 466 #if defined key_lim2 410 467 NAMELIST/nambdy_dta/ bn_frld, bn_hicif, bn_hsnif 468 #elif defined key_lim3 469 NAMELIST/nambdy_dta/ bn_a_i, bn_ht_i, bn_ht_s 411 470 #endif 412 471 NAMELIST/nambdy_dta/ ln_full_vel … … 425 484 ,nn_dyn3d_dta(ib_bdy) & 426 485 ,nn_tra_dta(ib_bdy) & 427 #if defined key_lim2428 ,nn_ice_lim2_dta(ib_bdy) &486 #if ( defined key_lim2 || defined key_lim3 ) 487 ,nn_ice_lim_dta(ib_bdy) & 429 488 #endif 430 489 ) … … 446 505 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2 447 506 ENDIF 448 #if defined key_lim2449 IF( cn_ice_lim 2(ib_bdy) /= 'none' .and. nn_ice_lim2_dta(ib_bdy) .eq. 1 ) THEN507 #if ( defined key_lim2 || defined key_lim3 ) 508 IF( cn_ice_lim(ib_bdy) /= 'none' .and. nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 450 509 nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3 451 510 ENDIF … … 495 554 bn_hicif = FLD_N( 'bdy_hicif' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 496 555 bn_hsnif = FLD_N( 'bdy_hsnif' , 24 , 'isnothic' , .false. , .false. , 'yearly' , '' , '' ) 556 #elif defined key_lim3 557 bn_a_i = FLD_N( 'bdy_a_i' , 24 , 'ileadfra' , .false. , .false. , 'yearly' , '' , '' ) 558 bn_ht_i = FLD_N( 'bdy_ht_i' , 24 , 'iicethic' , .false. , .false. , 'yearly' , '' , '' ) 559 bn_ht_s = FLD_N( 'bdy_ht_s' , 24 , 'isnowthi' , .false. , .false. , 'yearly' , '' , '' ) 497 560 #endif 498 561 … … 633 696 634 697 ENDIF 698 #elif defined key_lim3 699 ! sea ice 700 IF( nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN 701 702 ! Test for types of ice input (lim2 or lim3) 703 CALL iom_open ( bn_a_i%clname, inum ) 704 id1 = iom_varid ( inum, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. ) 705 CALL iom_close ( inum ) 706 !CALL fld_clopn ( bn_a_i, nyear, nmonth, nday, ldstop=.TRUE. ) 707 !CALL iom_open ( bn_a_i %clname, inum ) 708 !id1 = iom_varid ( bn_a_i%num, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. ) 709 IF ( zndims == 4 ) THEN 710 ll_bdylim3 = .TRUE. ! lim3 input 711 ELSE 712 ll_bdylim3 = .FALSE. ! lim2 input 713 ENDIF 714 ! End test 715 716 IF( dta%ll_a_i ) THEN 717 jfld = jfld + 1 718 blf_i(jfld) = bn_a_i 719 ibdy(jfld) = ib_bdy 720 igrid(jfld) = 1 721 ilen1(jfld) = nblen(igrid(jfld)) 722 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 723 ENDIF 724 725 IF( dta%ll_ht_i ) THEN 726 jfld = jfld + 1 727 blf_i(jfld) = bn_ht_i 728 ibdy(jfld) = ib_bdy 729 igrid(jfld) = 1 730 ilen1(jfld) = nblen(igrid(jfld)) 731 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 732 ENDIF 733 734 IF( dta%ll_ht_s ) THEN 735 jfld = jfld + 1 736 blf_i(jfld) = bn_ht_s 737 ibdy(jfld) = ib_bdy 738 igrid(jfld) = 1 739 ilen1(jfld) = nblen(igrid(jfld)) 740 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 741 ENDIF 742 635 743 #endif 636 744 ! Recalculate field counts … … 758 866 759 867 #if defined key_lim2 760 IF (nn_ice_lim 2(ib_bdy) .gt. 0) THEN868 IF (nn_ice_lim(ib_bdy) .gt. 0) THEN 761 869 IF( nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN 762 870 ALLOCATE( dta_bdy(ib_bdy)%frld(nblen(1)) ) … … 770 878 jfld = jfld + 1 771 879 dta_bdy(ib_bdy)%hsnif => bf(jfld)%fnow(:,1,1) 880 ENDIF 881 ENDIF 882 #elif defined key_lim3 883 IF (nn_ice_lim(ib_bdy) .gt. 0) THEN 884 IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN 885 ALLOCATE( dta_bdy(ib_bdy)%a_i (nblen(1),jpl) ) 886 ALLOCATE( dta_bdy(ib_bdy)%ht_i(nblen(1),jpl) ) 887 ALLOCATE( dta_bdy(ib_bdy)%ht_s(nblen(1),jpl) ) 888 ELSE 889 IF ( ll_bdylim3 ) THEN ! case input is lim3 type 890 jfld = jfld + 1 891 dta_bdy(ib_bdy)%a_i => bf(jfld)%fnow(:,1,:) 892 jfld = jfld + 1 893 dta_bdy(ib_bdy)%ht_i => bf(jfld)%fnow(:,1,:) 894 jfld = jfld + 1 895 dta_bdy(ib_bdy)%ht_s => bf(jfld)%fnow(:,1,:) 896 ELSE ! case input is lim2 type 897 jfld_ai = jfld + 1 898 jfld_hti = jfld + 2 899 jfld_hts = jfld + 3 900 jfld = jfld + 3 901 ALLOCATE( dta_bdy(ib_bdy)%a_i (nblen(1),jpl) ) 902 ALLOCATE( dta_bdy(ib_bdy)%ht_i(nblen(1),jpl) ) 903 ALLOCATE( dta_bdy(ib_bdy)%ht_s(nblen(1),jpl) ) 904 dta_bdy(ib_bdy)%a_i (:,:) = 0.0 905 dta_bdy(ib_bdy)%ht_i(:,:) = 0.0 906 dta_bdy(ib_bdy)%ht_s(:,:) = 0.0 907 ENDIF 908 772 909 ENDIF 773 910 ENDIF -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r4254 r4278 100 100 & cn_dyn3d, nn_dyn3d_dta, cn_tra, nn_tra_dta, & 101 101 & ln_tra_dmp, ln_dyn3d_dmp, rn_time_dmp, rn_time_dmp_out, & 102 #if defined key_lim2103 & cn_ice_lim 2, nn_ice_lim2_dta, &102 #if ( defined key_lim2 || defined key_lim3 ) 103 & cn_ice_lim, nn_ice_lim_dta, & 104 104 #endif 105 105 & ln_vol, nn_volctl, nn_rimwidth … … 141 141 ln_dyn3d_dmp(:) = .false. 142 142 rn_time_dmp(:) = 1. 143 #if defined key_lim2144 cn_ice_lim 2(:) = ''145 nn_ice_lim 2_dta(:)= -1 ! uninitialised flag143 #if ( defined key_lim2 || defined key_lim3 ) 144 cn_ice_lim(:) = '' 145 nn_ice_lim_dta(:)= -1 ! uninitialised flag 146 146 #endif 147 147 ln_vol = .false. … … 333 333 #if defined key_lim2 334 334 IF(lwp) WRITE(numout,*) 'Boundary conditions for sea ice: ' 335 SELECT CASE( cn_ice_lim 2(ib_bdy) )335 SELECT CASE( cn_ice_lim(ib_bdy) ) 336 336 CASE('none') 337 337 IF(lwp) WRITE(numout,*) ' no open boundary condition' … … 344 344 dta_bdy(ib_bdy)%ll_hicif = .true. 345 345 dta_bdy(ib_bdy)%ll_hsnif = .true. 346 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for cn_ice_lim 2' )346 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for cn_ice_lim' ) 347 347 END SELECT 348 IF( cn_ice_lim 2(ib_bdy) /= 'none' ) THEN349 SELECT CASE( nn_ice_lim 2_dta(ib_bdy) ) !348 IF( cn_ice_lim(ib_bdy) /= 'none' ) THEN 349 SELECT CASE( nn_ice_lim_dta(ib_bdy) ) ! 350 350 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' 351 351 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' boundary data taken from file' 352 CASE DEFAULT ; CALL ctl_stop( 'nn_ice_lim2_dta must be 0 or 1' ) 352 CASE DEFAULT ; CALL ctl_stop( 'nn_ice_lim_dta must be 0 or 1' ) 353 END SELECT 354 ENDIF 355 IF(lwp) WRITE(numout,*) 356 #elif defined key_lim3 357 IF(lwp) WRITE(numout,*) 'Boundary conditions for sea ice: ' 358 SELECT CASE( cn_ice_lim(ib_bdy) ) 359 CASE('none') 360 IF(lwp) WRITE(numout,*) ' no open boundary condition' 361 dta_bdy(ib_bdy)%ll_a_i = .false. 362 dta_bdy(ib_bdy)%ll_ht_i = .false. 363 dta_bdy(ib_bdy)%ll_ht_s = .false. 364 CASE('frs') 365 IF(lwp) WRITE(numout,*) ' Flow Relaxation Scheme' 366 dta_bdy(ib_bdy)%ll_a_i = .true. 367 dta_bdy(ib_bdy)%ll_ht_i = .true. 368 dta_bdy(ib_bdy)%ll_ht_s = .true. 369 CASE DEFAULT ; CALL ctl_stop( 'unrecognised value for cn_ice_lim' ) 370 END SELECT 371 IF( cn_ice_lim(ib_bdy) /= 'none' ) THEN 372 SELECT CASE( nn_ice_lim_dta(ib_bdy) ) ! 373 CASE( 0 ) ; IF(lwp) WRITE(numout,*) ' initial state used for bdy data' 374 CASE( 1 ) ; IF(lwp) WRITE(numout,*) ' boundary data taken from file' 375 CASE DEFAULT ; CALL ctl_stop( 'nn_ice_lim_dta must be 0 or 1' ) 353 376 END SELECT 354 377 ENDIF -
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/step.F90
r4258 r4278 89 89 ! Update data, open boundaries, surface boundary condition (including sea-ice) 90 90 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 91 CALL sbc ( kstp ) ! Sea Boundary Condition (including sea-ice)92 91 IF( lk_tide ) CALL sbc_tide( kstp ) 93 92 IF( lk_obc ) CALL obc_dta ( kstp ) ! update dynamic and tracer data at open boundaries … … 95 94 IF( lk_bdy ) CALL bdy_dta ( kstp, time_offset=+1 ) ! update dynamic & tracer data at open boundaries 96 95 96 CALL sbc ( kstp ) ! Sea Boundary Condition (including sea-ice) 97 ! clem: moved here for bdy ice purpose 97 98 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 98 99 ! Ocean dynamics : hdiv, rot, ssh, e3, wn
Note: See TracChangeset
for help on using the changeset viewer.