Changeset 2093 for branches/DEV_r1986_BDY_updates/NEMO
- Timestamp:
- 2010-09-15T09:39:38+02:00 (14 years ago)
- Location:
- branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdy_oce.F90
r1170 r2093 6 6 !! History : 1.0 ! 2001-05 (J. Chanut, A. Sellar) Original code 7 7 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 8 !! 3.3 ! 2010-09 (D. Storkey) add ice boundary conditions 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_bdy … … 54 55 !! Unstructured open boundary data variables 55 56 !!---------------------------------------------------------------------- 56 INTEGER, DIMENSION(jpbgrd) :: nblen 57 INTEGER, DIMENSION(jpbgrd) :: nblenrim 58 INTEGER, DIMENSION(jpbgrd) :: nblendta 57 INTEGER, DIMENSION(jpbgrd) :: nblen = 0 !: Size of bdy data on a proc for each grid type 58 INTEGER, DIMENSION(jpbgrd) :: nblenrim = 0 !: Size of bdy data on a proc for first rim ind 59 INTEGER, DIMENSION(jpbgrd) :: nblendta = 0 !: Size of bdy data in file 59 60 60 61 INTEGER, DIMENSION(jpbdim,jpbgrd) :: nbi, nbj !: i and j indices of bdy dta … … 73 74 REAL(wp), DIMENSION(jpbdim) :: sshtide !: Tidal boundary array : SSH 74 75 REAL(wp), DIMENSION(jpbdim) :: utide, vtide !: Tidal boundary array : U and V 76 #if defined key_lim2 77 REAL(wp), DIMENSION(jpbdim) :: & 78 frld_bdy, hicif_bdy, & !: Now clim of ice leads fraction, ice 79 hsnif_bdy !: thickness and snow thickness 80 #endif 75 81 76 82 #else -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdy_par.F90
r1146 r2093 6 6 !! History : 1.0 ! 2005-01 (J. Chanut, A. Sellar) Original code 7 7 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 8 !! 3.3 ! 2010-09 (D. Storkey and E. O'Dea) update for Shelf configurations 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_bdy … … 17 18 18 19 LOGICAL, PUBLIC, PARAMETER :: lk_bdy = .TRUE. !: Unstructured Ocean Boundary Condition flag 19 INTEGER, PUBLIC, PARAMETER :: jpbdta = 5000 !: Max length of bdy field in file20 INTEGER, PUBLIC, PARAMETER :: jpbdim = 5000 !: Max length of bdy field on a processor20 INTEGER, PUBLIC, PARAMETER :: jpbdta = 20000 !: Max length of bdy field in file 21 INTEGER, PUBLIC, PARAMETER :: jpbdim = 20000 !: Max length of bdy field on a processor 21 22 INTEGER, PUBLIC, PARAMETER :: jpbtime = 1000 !: Max number of time dumps per file 22 INTEGER, PUBLIC, PARAMETER :: jpbgrd = 3!: Number of horizontal grid types used (T, u, v, f)23 INTEGER, PUBLIC, PARAMETER :: jpbgrd = 6 !: Number of horizontal grid types used (T, u, v, f) 23 24 #else 24 25 !!---------------------------------------------------------------------- -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdydta.F90
r1715 r2093 8 8 !! - ! 2007-07 (D. Storkey) add bdy_dta_bt 9 9 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 10 !! 3.3 ! 2010-09 (E.O'Dea) modifications for Shelf configurations 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 10 12 !!---------------------------------------------------------------------- 11 13 #if defined key_bdy … … 25 27 USE ioipsl 26 28 USE in_out_manager ! I/O logical units 29 if defined key_lim2 30 USE ice_2 31 #endif 27 32 28 33 IMPLICIT NONE … … 47 52 REAL(wp), DIMENSION(jpbdim,2) :: ubtbdydta, vbtbdydta !: Arrays used for time interpolation of bdy data 48 53 REAL(wp), DIMENSION(jpbdim,2) :: sshbdydta !: bdy data of ssh 54 55 #if defined key_lim2 56 REAL(wp), DIMENSION(jpbdim,2) :: frld_bdydta !: } 57 REAL(wp), DIMENSION(jpbdim,2) :: hicif_bdydta !: } Arrays used for time interpolation of bdy data for ice variables 58 REAL(wp), DIMENSION(jpbdim,2) :: hsnif_bdydta !: } 59 #endif 49 60 50 61 !!---------------------------------------------------------------------- … … 196 207 IF(lwp) WRITE(numout,*) 'offset: ',zoffset 197 208 IF(lwp) WRITE(numout,*) 'totime: ',totime 198 IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr 209 IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr(1:ntimes_bdy) 199 210 200 211 ! Check that there are not too many times in the file. … … 227 238 END IF 228 239 ! 229 IF ( igrd == 1 ) THEN 230 ntimes_bdyt = ntimes_bdy 231 zoffsett = zoffset 232 istept(:) = INT( zstepr(:) + zoffset ) 233 ELSEIF(igrd == 2 ) THEN 234 ntimes_bdyu = ntimes_bdy 235 zoffsetu = zoffset 236 istepu(:) = INT( zstepr(:) + zoffset ) 237 ELSEIF(igrd == 3 ) THEN 238 ntimes_bdyv = ntimes_bdy 239 zoffsetv = zoffset 240 istepv(:) = INT( zstepr(:) + zoffset ) 241 ENDIF 240 SELECT CASE( igrd ) 241 CASE (1) 242 ntimes_bdyt = ntimes_bdy 243 zoffsett = zoffset 244 istept(:) = INT( zstepr(:) + zoffset ) 245 numbdyt = inum 246 CASE (2) 247 ntimes_bdyu = ntimes_bdy 248 zoffsetu = zoffset 249 istepu(:) = INT( zstepr(:) + zoffset ) 250 numbdyu = inum 251 CASE (3) 252 ntimes_bdyv = ntimes_bdy 253 zoffsetv = zoffset 254 istepv(:) = INT( zstepr(:) + zoffset ) 255 numbdyv = inum 256 END SELECT 242 257 ! 243 258 END DO ! end loop over T, U & V grid … … 291 306 nbdy_b = it 292 307 ! 293 WRITE(numout,*) 'Time offset is ',zoffset294 WRITE(numout,*) 'First record to read is ',nbdy_b308 IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 309 IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b 295 310 296 311 ENDIF ! endif (nbdy_dta == 1) … … 334 349 ENDIF 335 350 ! 351 #if defined key_lim2 352 IF (ln_bdy_ice_frs) THEN 353 igrd = 1 ! T-points data 354 DO ib = 1, nblen(igrd) 355 frld_bdy(ib) = frld(nbi(ib,igrd), nbj(ib,igrd)) 356 hicif_bdy(ib) = hicif(nbi(ib,igrd), nbj(ib,igrd)) 357 hsnif_bdy(ib) = hsnif(nbi(ib,igrd), nbj(ib,igrd)) 358 END DO 359 ENDIF 360 #endif 336 361 ELSEIF( nbdy_dta == 1 ) THEN ! Set first record in the climatological case: 337 362 ! … … 357 382 nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 358 383 ENDIF 359 WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd)384 IF(lwp) WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd) 360 385 ipi = nblendta(igrd) 361 386 CALL iom_get ( numbdyt, jpdom_unknown, 'votemper', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) … … 372 397 nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 373 398 ENDIF 374 WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd)399 IF(lwp) WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd) 375 400 ipi = nblendta(igrd) 376 401 CALL iom_get ( numbdyt, jpdom_unknown, 'vosaline', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) … … 390 415 nblendta(igrd) = iom_file(numbdyu)%dimsz(1,idvar) 391 416 ENDIF 392 WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd)417 IF(lwp) WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd) 393 418 ipi = nblendta(igrd) 394 419 CALL iom_get ( numbdyu, jpdom_unknown,'vozocrtx',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) … … 404 429 nblendta(igrd) = iom_file(numbdyv)%dimsz(1,idvar) 405 430 ENDIF 406 WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd)431 IF(lwp) WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd) 407 432 ipi = nblendta(igrd) 408 433 CALL iom_get ( numbdyv, jpdom_unknown,'vomecrty',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) … … 414 439 ENDIF ! ln_bdy_dyn_frs 415 440 441 #if defined key_lim2 442 IF(ln_bdy_ice_frs) THEN 443 ! 444 igrd=1 ! leads fraction 445 IF(lwp) WRITE(numout,*) 'Dim size for ildsconc is ',nblendta(igrd) 446 ipi=nblendta(igrd) 447 CALL iom_get ( numbdyt, jpdom_unknown,'ildsconc',zdta(1:ipi,:,1),nbdy_a ) 448 DO ib=1, nblen(igrd) 449 frld_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 450 END DO 451 ! 452 igrd=1 ! ice thickness 453 IF(lwp) WRITE(numout,*) 'Dim size for iicethic is ',nblendta(igrd) 454 ipi=nblendta(igrd) 455 CALL iom_get ( numbdyt, jpdom_unknown,'iicethic',zdta(1:ipi,:,1),nbdy_a ) 456 DO ib=1, nblen(igrd) 457 hicif_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 458 END DO 459 ! 460 igrd=1 ! snow thickness 461 IF(lwp) WRITE(numout,*) 'Dim size for isnowthi is ',nblendta(igrd) 462 ipi=nblendta(igrd) 463 CALL iom_get ( numbdyt, jpdom_unknown,'isnowthi',zdta(1:ipi,:,1),nbdy_a ) 464 DO ib=1, nblen(igrd) 465 hsnif_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 466 END DO 467 ENDIF ! just if ln_bdy_ice_frs is set 468 #endif 416 469 417 470 IF ((.NOT.ln_bdy_clim) .AND. (istep(1) > 0)) THEN … … 427 480 vbdydta(:,:,1) = vbdydta(:,:,2) 428 481 ENDIF 482 #if defined key_lim2 483 IF( ln_bdy_ice_frs ) THEN 484 frld_bdydta (:,1) = frld_bdydta(:,2) 485 hicif_bdydta(:,1) = hicif_bdydta(:,2) 486 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 487 ENDIF 488 #endif 429 489 END IF 430 490 … … 441 501 vbdy (:,:) = vbdydta (:,:,2) 442 502 ENDIF 503 #if defined key_lim2 504 IF(ln_bdy_ice_frs) THEN 505 frld_bdy (:) = frld_bdydta (:,2) 506 hicif_bdy(:) = hicif_bdydta(:,2) 507 hsnif_bdy(:) = hsnif_bdydta(:,2) 508 ENDIF 509 #endif 443 510 444 511 IF(ln_bdy_tra_frs .or. ln_bdy_ice_frs) CALL iom_close( numbdyt ) … … 483 550 vbdydta(:,:,1) = vbdydta(:,:,2) 484 551 ENDIF 552 #if defined key_lim2 553 IF(ln_bdy_ice_frs) THEN 554 frld_bdydta (:,1) = frld_bdydta (:,2) 555 hicif_bdydta(:,1) = hicif_bdydta(:,2) 556 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 557 ENDIF 558 #endif 485 559 END IF ! nbdy_a < ntimes_bdy 486 560 … … 497 571 vbdydta(:,:,1) = vbdydta(:,:,2) 498 572 ENDIF 499 573 #if defined key_lim2 574 IF(ln_bdy_ice_frs) THEN 575 frld_bdydta (:,1) = frld_bdydta (:,2) 576 hicif_bdydta(:,1) = hicif_bdydta(:,2) 577 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 578 ENDIF 579 #endif 500 580 ! read another set 501 581 ipj = 1 … … 543 623 END DO 544 624 ENDIF ! ln_bdy_dyn_frs 545 625 ! 626 #if defined key_lim2 627 IF(ln_bdy_ice_frs) THEN 628 ! 629 igrd = 1 ! ice concentration 630 ipi=nblendta(igrd) 631 CALL iom_get ( numbdyt, jpdom_unknown,'ildsconc',zdta(1:ipi,:,1),nbdy_a ) 632 DO ib=1, nblen(igrd) 633 frld_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 634 END DO 635 ! 636 igrd=1 ! ice thickness 637 ipi=nblendta(igrd) 638 CALL iom_get ( numbdyt, jpdom_unknown,'iicethic',zdta(1:ipi,:,1),nbdy_a ) 639 DO ib=1, nblen(igrd) 640 hicif_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 641 END DO 642 ! 643 igrd=1 ! snow thickness 644 ipi=nblendta(igrd) 645 CALL iom_get ( numbdyt, jpdom_unknown,'isnowthi',zdta(1:ipi,:,1),nbdy_a ) 646 DO ib=1, nblen(igrd) 647 hsnif_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 648 END DO 649 ENDIF ! ln_bdy_ice_frs 650 #endif 546 651 ! 547 652 IF(lwp) WRITE(numout,*) 'bdy_dta : first record file used nbdy_b ',nbdy_b … … 559 664 ! ******************** 560 665 ! 561 IF( ln_bdy_clim ) THEN ; zxy = REAL( nday , wp ) / REAL( nmonth_len(nbdy_b), wp ) + 0.5 - i15 562 ELSE ; zxy = REAL( istep(nbdy_b) - itimer, wp ) / REAL( istep(nbdy_b) - istep(nbdy_a), wp ) 666 IF( ln_bdy_clim ) THEN ; zxy = REAL( nday ) / REAL( nmonth_len(nbdy_b) ) + 0.5 - i15 667 ELSEIF( istep(nbdy_b) == itimer ) THEN 668 zxy = 0.0_wp 669 ELSE ; zxy = REAL( istep(nbdy_b) - itimer ) / REAL( istep(nbdy_b) - istep(nbdy_a) ) 563 670 END IF 564 671 … … 589 696 ENDIF 590 697 698 #if defined key_lim2 699 IF(ln_bdy_ice_frs) THEN 700 igrd=1 701 DO ib=1, nblen(igrd) 702 frld_bdy(ib) = zxy * frld_bdydta(ib,2) + (1.-zxy) * frld_bdydta(ib,1) 703 hicif_bdy(ib) = zxy * hicif_bdydta(ib,2) + (1.-zxy) * hicif_bdydta(ib,1) 704 hsnif_bdy(ib) = zxy * hsnif_bdydta(ib,2) + (1.-zxy) * hsnif_bdydta(ib,1) 705 END DO 706 ENDIF ! just if ln_bdy_ice_frs is true 707 #endif 708 591 709 END IF !end if ((nbdy_dta==1).AND.(ntimes_bdy>1)) 592 710 … … 606 724 607 725 608 SUBROUTINE bdy_dta_bt( kt, jit )726 SUBROUTINE bdy_dta_bt( kt, jit, icycl ) 609 727 !!--------------------------------------------------------------------------- 610 728 !! *** SUBROUTINE bdy_dta_bt *** … … 620 738 INTEGER, INTENT( in ) :: kt ! ocean time-step index 621 739 INTEGER, INTENT( in ) :: jit ! barotropic time step index 740 INTEGER, INTENT( in ) :: icycl ! number of cycles need for final file close 622 741 ! ! (for timesplitting option, otherwise zero) 623 742 !! … … 639 758 REAL(wp), DIMENSION(jpbtime) :: zstepr ! REAL time array from data files 640 759 REAL(wp), DIMENSION(jpbdta,1) :: zdta ! temporary array for data fields 641 CHARACTER(LEN=80), DIMENSION( 3) :: clfile760 CHARACTER(LEN=80), DIMENSION(6) :: clfile 642 761 CHARACTER(LEN=70 ) :: clunits ! units attribute of time coordinate 643 762 !!--------------------------------------------------------------------------- … … 688 807 689 808 ! !-------------------! 690 IF( kt == nit000 ) THEN! First call only !809 IF( kt == nit000 .and. jit ==2 ) THEN ! First call only ! 691 810 ! !-------------------! 692 811 istep_bt(:) = 0 … … 712 831 ! necessary time dumps in file are included 713 832 714 clfile( 1) = filbdy_data_bt_T715 clfile( 2) = filbdy_data_bt_U716 clfile( 3) = filbdy_data_bt_V717 718 DO igrd = 1,3833 clfile(4) = filbdy_data_bt_T 834 clfile(5) = filbdy_data_bt_U 835 clfile(6) = filbdy_data_bt_V 836 837 DO igrd = 4,6 719 838 720 839 CALL iom_open( clfile(igrd), inum ) 721 CALL iom_gettime( inum, zstepr, kntime=ntimes_bdy , cdunits=clunits )840 CALL iom_gettime( inum, zstepr, kntime=ntimes_bdy_bt, cdunits=clunits ) 722 841 723 842 SELECT CASE( igrd ) 724 CASE ( 1)725 numbdyt = inum726 CASE ( 2)727 numbdyu = inum728 CASE ( 3)729 numbdyv = inum843 CASE (4) 844 numbdyt_bt = inum 845 CASE (5) 846 numbdyu_bt = inum 847 CASE (6) 848 numbdyv_bt = inum 730 849 END SELECT 731 850 … … 757 876 758 877 ! Check that time array increases (or interp will fail): 759 DO it = 2, ntimes_bdy 878 DO it = 2, ntimes_bdy_bt 760 879 IF ( zstepr(it-1) >= zstepr(it) ) THEN 761 880 CALL ctl_stop('Time array in unstructured boundary data file', & … … 778 897 ! The same applies to the last time level: see setting of lect below. 779 898 780 IF ( ntimes_bdy == 1 ) CALL ctl_stop( &899 IF ( ntimes_bdy_bt == 1 ) CALL ctl_stop( & 781 900 'There is only one time dump in data files', & 782 901 'Set ln_bdy_clim=.true. in namelist for constant bdy forcing.' ) 783 902 784 903 zinterval_s = zstepr(2) - zstepr(1) 785 zinterval_e = zstepr(ntimes_bdy) - zstepr(ntimes_bdy-1) 786 787 IF ( zstepr(1) - zinterval_s / 2.0 > 0 ) THEN 788 IF(lwp) WRITE(numout,*) 'First bdy time relative to nit000:', zstepr(1) 789 IF(lwp) WRITE(numout,*) 'Interval between first two times: ', zinterval_s 790 CALL ctl_stop( 'First data time is after start of run', & 791 'by more than half a meaning period', & 792 'Check file: ' // TRIM(clfile(igrd)) ) 904 zinterval_e = zstepr(ntimes_bdy_bt) - zstepr(ntimes_bdy_bt-1) 905 906 IF( zstepr(1) + zoffset > 0 ) THEN 907 WRITE(ctmp1,*) 'Check file: ', clfile(igrd) 908 CALL ctl_stop( 'First time dump in bdy file is after model initial time', ctmp1 ) 793 909 END IF 794 795 IF ( zstepr(ntimes_bdy) + zinterval_e / 2.0 < totime ) THEN 796 IF(lwp) WRITE(numout,*) 'Last bdy time relative to nit000:', zstepr(ntimes_bdy) 797 IF(lwp) WRITE(numout,*) 'Interval between last two times: ', zinterval_e 798 CALL ctl_stop( 'Last data time is before end of run', & 799 'by more than half a meaning period', & 800 'Check file: ' // TRIM(clfile(igrd)) ) 910 IF( zstepr(ntimes_bdy_bt) + zoffset < totime ) THEN 911 WRITE(ctmp1,*) 'Check file: ', clfile(igrd) 912 CALL ctl_stop( 'Last time dump in bdy file is before model final time', ctmp1 ) 801 913 END IF 802 803 914 END IF ! .NOT. ln_bdy_clim 804 915 805 IF ( igrd .EQ. 1) THEN916 IF ( igrd .EQ. 4) THEN 806 917 ntimes_bdyt = ntimes_bdy_bt 807 918 zoffsett = zoffset 808 919 istept(:) = INT( zstepr(:) + zoffset ) 809 ELSE IF (igrd .EQ. 2) THEN920 ELSE IF (igrd .EQ. 5) THEN 810 921 ntimes_bdyu = ntimes_bdy_bt 811 922 zoffsetu = zoffset 812 923 istepu(:) = INT( zstepr(:) + zoffset ) 813 ELSE IF (igrd .EQ. 3) THEN924 ELSE IF (igrd .EQ. 6) THEN 814 925 ntimes_bdyv = ntimes_bdy_bt 815 926 zoffsetv = zoffset … … 865 976 nbdy_b_bt = it 866 977 867 WRITE(numout,*) 'Time offset is ',zoffset868 WRITE(numout,*) 'First record to read is ',nbdy_b_bt978 IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 979 IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b_bt 869 980 870 981 ENDIF ! endif (nbdy_dta == 1) … … 875 986 IF ( nbdy_dta == 0) THEN 876 987 ! boundary data arrays are filled with initial conditions 877 igrd = 2! U-points data988 igrd = 5 ! U-points data 878 989 DO ib = 1, nblen(igrd) 879 990 ubtbdy(ib) = un(nbi(ib,igrd), nbj(ib,igrd), 1) 880 991 END DO 881 992 882 igrd = 3! V-points data993 igrd = 6 ! V-points data 883 994 DO ib = 1, nblen(igrd) 884 995 vbtbdy(ib) = vn(nbi(ib,igrd), nbj(ib,igrd), 1) 885 996 END DO 886 997 887 igrd = 1! T-points data998 igrd = 4 ! T-points data 888 999 DO ib = 1, nblen(igrd) 889 1000 sshbdy(ib) = sshn(nbi(ib,igrd), nbj(ib,igrd)) … … 910 1021 ! Read first record: 911 1022 ipj=1 912 igrd= 11023 igrd=4 913 1024 ipi=nblendta(igrd) 914 1025 915 1026 ! ssh 916 igrd= 11027 igrd=4 917 1028 IF ( nblendta(igrd) .le. 0 ) THEN 918 1029 idvar = iom_varid( numbdyt_bt,'sossheig' ) … … 929 1040 930 1041 ! u-velocity 931 igrd= 21042 igrd=5 932 1043 IF ( nblendta(igrd) .le. 0 ) THEN 933 1044 idvar = iom_varid( numbdyu_bt,'vobtcrtx' ) … … 944 1055 945 1056 ! v-velocity 946 igrd= 31057 igrd=6 947 1058 IF ( nblendta(igrd) .le. 0 ) THEN 948 1059 idvar = iom_varid( numbdyv_bt,'vobtcrty' ) … … 1010 1121 ipj=1 1011 1122 ipk=jpk 1012 igrd= 11123 igrd=4 1013 1124 ipi=nblendta(igrd) 1014 1125 1015 1126 1016 1127 ! ssh 1017 igrd= 11128 igrd=4 1018 1129 ipi=nblendta(igrd) 1019 1130 … … 1025 1136 1026 1137 ! u-velocity 1027 igrd= 21138 igrd=5 1028 1139 ipi=nblendta(igrd) 1029 1140 … … 1035 1146 1036 1147 ! v-velocity 1037 igrd= 31148 igrd=6 1038 1149 ipi=nblendta(igrd) 1039 1150 … … 1064 1175 END IF 1065 1176 1066 igrd= 11177 igrd=4 1067 1178 DO ib=1, nblen(igrd) 1068 1179 sshbdy(ib) = zxy * sshbdydta(ib,2) + & … … 1070 1181 END DO 1071 1182 1072 igrd= 21183 igrd=5 1073 1184 DO ib=1, nblen(igrd) 1074 1185 ubtbdy(ib) = zxy * ubtbdydta(ib,2) + & … … 1076 1187 END DO 1077 1188 1078 igrd= 31189 igrd=6 1079 1190 DO ib=1, nblen(igrd) 1080 1191 vbtbdy(ib) = zxy * vbtbdydta(ib,2) + & … … 1090 1201 1091 1202 ! Closing of the 3 files 1092 IF( kt == nitend ) THEN1203 IF( kt == nitend .and. jit == icycl ) THEN 1093 1204 CALL iom_close( numbdyt_bt ) 1094 1205 CALL iom_close( numbdyu_bt ) … … 1109 1220 WRITE(*,*) 'bdy_dta: You should not have seen this print! error?', kt 1110 1221 END SUBROUTINE bdy_dta 1111 SUBROUTINE bdy_dta_bt( kt, kit ) ! Empty routine1222 SUBROUTINE bdy_dta_bt( kt, kit, icycle ) ! Empty routine 1112 1223 WRITE(*,*) 'bdy_dta: You should not have seen this print! error?', kt, kit 1113 1224 END SUBROUTINE bdy_dta_bt -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdydyn.F90
r1740 r2093 8 8 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 9 9 !! 3.2 ! 2008-04 (R. Benshila) consider velocity instead of transport 10 !! 3.3 ! 2010-09 (E.O'Dea) modifications for Shelf configurations 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 10 12 !!---------------------------------------------------------------------- 11 13 #if defined key_bdy … … 132 134 133 135 ! Fill temporary array with ssh data (here spgu): 134 igrd = 1136 igrd = 4 135 137 spgu(:,:) = 0.0 136 138 DO ib = 1, nblenrim(igrd) … … 141 143 END DO 142 144 ! 143 igrd = 2! Flather bc on u-velocity;145 igrd = 5 ! Flather bc on u-velocity; 144 146 ! ! remember that flagu=-1 if normal velocity direction is outward 145 147 ! ! I think we should rather use after ssh ? … … 155 157 END DO 156 158 ! 157 igrd = 3! Flather bc on v-velocity159 igrd = 6 ! Flather bc on v-velocity 158 160 ! ! remember that flagv=-1 if normal velocity direction is outward 159 161 DO ib = 1, nblenrim(igrd) … … 167 169 va_e(ii,ij) = zforc + zcorr * vmask(ii,ij,1) 168 170 END DO 171 CALL lbc_lnk( ua_e, 'U', -1. ) ! Boundary points should be updated 172 CALL lbc_lnk( va_e, 'V', -1. ) ! 169 173 ! 170 174 ENDIF ! ln_bdy_dyn_fla .or. ln_bdy_tides -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdyini.F90
r1528 r2093 8 8 !! - ! 2007-01 (D. Storkey) Tidal forcing 9 9 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 10 !! 3.3 ! 2010-09 (E.O'Dea) updates for Shelf configurations 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 10 12 !!---------------------------------------------------------------------- 11 13 #if defined key_bdy … … 63 65 REAL(wp) , DIMENSION(jpidta,jpjdta) :: zmask ! global domain mask 64 66 REAL(wp) , DIMENSION(jpbdta,1) :: zdta ! temporary array 65 CHARACTER(LEN=80),DIMENSION( 3) :: clfile67 CHARACTER(LEN=80),DIMENSION(6) :: clfile 66 68 !! 67 69 NAMELIST/nambdy/filbdy_mask, filbdy_data_T, filbdy_data_U, filbdy_data_V, & 70 & filbdy_data_bt_T, filbdy_data_bt_U, filbdy_data_bt_V, & 68 71 & ln_bdy_tides, ln_bdy_clim, ln_bdy_vol, ln_bdy_mask, & 69 & ln_bdy_dyn_fla, ln_bdy_dyn_frs, ln_bdy_tra_frs, & 70 & nbdy_dta , nb_rimwidth , volbdy 72 & ln_bdy_dyn_fla, ln_bdy_dyn_frs, ln_bdy_tra_frs,ln_bdy_ice_frs, & 73 & nbdy_dta, nb_rimwidth, volbdy 74 71 75 !!---------------------------------------------------------------------- 72 76 … … 145 149 IF(lwp) WRITE(numout,*) ' ' 146 150 IF(lwp) WRITE(numout,*) 'FRS condition on T & S fields at unstructured open boundaries' 151 IF(lwp) WRITE(numout,*) ' ' 152 ENDIF 153 154 IF (ln_bdy_ice_frs) THEN 155 IF(lwp) WRITE(numout,*) ' ' 156 IF(lwp) WRITE(numout,*) 'FRS condition on ice fields at unstructured open boundaries' 147 157 IF(lwp) WRITE(numout,*) ' ' 148 158 ENDIF … … 226 236 ! Read tides input files for preference in case there are 227 237 ! no bdydata files. 228 clfile(1) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_T.nc' 229 clfile(2) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_U.nc' 230 clfile(3) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_V.nc' 231 ELSE 238 clfile(4) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_T.nc' 239 clfile(5) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_U.nc' 240 clfile(6) = TRIM(filtide)//TRIM(tide_cpt(1))//'_grid_V.nc' 241 ENDIF 242 IF( ln_bdy_dyn_fla .and. .not. ln_bdy_tides ) THEN 243 clfile(4) = filbdy_data_bt_T 244 clfile(5) = filbdy_data_bt_U 245 clfile(6) = filbdy_data_bt_V 246 ENDIF 247 248 IF( ln_bdy_tra_frs ) THEN 232 249 clfile(1) = filbdy_data_T 250 IF( .not. ln_bdy_dyn_frs ) THEN 251 clfile(2) = filbdy_data_T ! Dummy read re read T file for sake of 6 files 252 clfile(3) = filbdy_data_T ! 253 ENDIF 254 ENDIF 255 IF( ln_bdy_dyn_frs ) THEN 256 IF( .not. ln_bdy_tra_frs ) THEN 257 clfile(1) = filbdy_data_U ! Dummy Read 258 ENDIF 233 259 clfile(2) = filbdy_data_U 234 clfile(3) = filbdy_data_V 235 ENDIF 260 clfile(3) = filbdy_data_V 261 ENDIF 236 262 237 263 ! how many files are we to read in? 238 igrd_start = 1 239 igrd_end = 3 240 IF(.NOT. ln_bdy_tides ) THEN 241 IF(.NOT. (ln_bdy_dyn_fla) .AND..NOT. (ln_bdy_tra_frs)) THEN 242 ! No T-grid file. 243 igrd_start = 2 244 ELSEIF ( .NOT. ln_bdy_dyn_frs .AND..NOT. ln_bdy_dyn_fla ) THEN 245 ! No U-grid or V-grid file. 246 igrd_end = 1 247 ENDIF 264 IF(ln_bdy_tides .or. ln_bdy_dyn_fla) then 265 igrd_start = 4 266 ENDIF 267 268 IF(ln_bdy_tra_frs) then 269 igrd_start = 1 270 ELSEIF(ln_bdy_dyn_frs) then 271 igrd_start = 2 272 ENDIF 273 274 IF( ln_bdy_tra_frs ) then 275 igrd_end = 1 276 ENDIF 277 278 IF(ln_bdy_dyn_fla .or. ln_bdy_tides) THEN 279 igrd_end = 6 280 ELSEIF( ln_bdy_dyn_frs) THEN 281 igrd_end = 3 248 282 ENDIF 249 283 … … 251 285 CALL iom_open( clfile(igrd), inum ) 252 286 id_dummy = iom_varid( inum, 'nbidta', kdimsz=kdimsz ) 253 WRITE(numout,*) 'kdimsz : ',kdimsz287 IF(lwp) WRITE(numout,*) 'kdimsz : ',kdimsz 254 288 ib_len = kdimsz(1) 255 289 IF( ib_len > jpbdta) CALL ctl_stop( & … … 272 306 CALL iom_close( inum ) 273 307 274 ! Check that rimwidth in file is big enough: 275 ibr_max = MAXVAL( nbrdta(:,igrd) ) 276 IF(lwp) WRITE(numout,*) 277 IF(lwp) WRITE(numout,*) ' Maximum rimwidth in file is ', ibr_max 278 IF(lwp) WRITE(numout,*) ' nb_rimwidth from namelist is ', nb_rimwidth 279 IF (ibr_max < nb_rimwidth) CALL ctl_stop( & 280 'nb_rimwidth is larger than maximum rimwidth in file' ) 308 ! Check that rimwidth in file is big enough for Frs case(barotropic is one): 309 IF( igrd < 4) then 310 ibr_max = MAXVAL( nbrdta(:,igrd) ) 311 IF(lwp) WRITE(numout,*) 312 IF(lwp) WRITE(numout,*) ' Maximum rimwidth in file is ', ibr_max 313 IF(lwp) WRITE(numout,*) ' nb_rimwidth from namelist is ', nb_rimwidth 314 IF (ibr_max < nb_rimwidth) CALL ctl_stop( & 315 'nb_rimwidth is larger than maximum rimwidth in file' ) 316 ENDIF !Check igrd < 4 281 317 ! 282 318 END DO … … 468 504 ubtbdy(:) = 0.e0 469 505 vbtbdy(:) = 0.e0 506 #if defined key_lim2 507 frld_bdy(:) = 0.e0 508 hicif_bdy(:) = 0.e0 509 hsnif_bdy(:) = 0.e0 510 #endif 470 511 471 512 ! Read in tidal constituents and adjust for model start time -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdytides.F90
r1715 r2093 7 7 !! 2.3 ! 2008-01 (J.Holt) Add date correction. Origins POLCOMS v6.3 2007 8 8 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 9 !! 3.3 ! 2010-09 (D.Storkey and E.O'Dea) bug fixes 9 10 !!---------------------------------------------------------------------- 10 11 #if defined key_bdy … … 31 32 USE bdy_par ! Unstructured boundary parameters 32 33 USE bdy_oce ! ocean open boundary conditions 34 USE daymod ! calendar 33 35 34 36 IMPLICIT NONE … … 41 43 LOGICAL, PUBLIC :: ln_tide_date !: =T correct tide phases and amplitude for model start date 42 44 43 INTEGER, PARAMETER :: jptides_max = 15 !: Max number of tidal contituents44 INTEGER :: ntide !: Actual number of tidal constituents45 INTEGER, PARAMETER,PUBLIC :: jptides_max = 15 !: Max number of tidal contituents 46 INTEGER, PUBLIC :: ntide !: Actual number of tidal constituents 45 47 46 48 CHARACTER(len=80), PUBLIC :: filtide !: Filename root for tidal input files 47 49 CHARACTER(len= 4), PUBLIC, DIMENSION(jptides_max) :: tide_cpt !: Names of tidal components used. 48 50 49 INTEGER , DIMENSION(jptides_max) :: nindx !: ???50 REAL(wp), DIMENSION(jptides_max) :: tide_speed !: Phase speed of tidal constituent (deg/hr)51 INTEGER , DIMENSION(jptides_max), PUBLIC :: nindx !: ??? 52 REAL(wp), DIMENSION(jptides_max), PUBLIC :: tide_speed !: Phase speed of tidal constituent (deg/hr) 51 53 52 54 REAL(wp), DIMENSION(jpbdim,jptides_max) :: ssh1, ssh2 !: Tidal constituents : SSH … … 86 88 READ ( numnam, nambdy_tide ) 87 89 ! ! Count number of components specified 88 ntide = jptides_max 89 itide = 1 90 DO WHILE( tide_cpt(itide) /= '' ) 91 ntide = itide 92 itide = itide + 1 93 END DO 90 ntide=jptides_max 91 do itide = 1, jptides_max 92 if ( tide_cpt(itide) == '' ) then 93 ntide = itide-1 94 exit 95 endif 96 enddo 97 94 98 ! ! find constituents in standard list 95 99 DO itide = 1, ntide … … 145 149 CHARACTER(len=80) :: clfile ! full file name for tidal input file 146 150 INTEGER :: ipi, ipj, inum, idvar ! temporary integers (netcdf read) 147 INTEGER, DIMENSION( 3) :: lendta=0 ! length of data in the file (note may be different from nblendta!)151 INTEGER, DIMENSION(6) :: lendta=0 ! length of data in the file (note may be different from nblendta!) 148 152 REAL(wp) :: z_arg, z_atde, z_btde, z1t, z2t 149 153 REAL(wp), DIMENSION(jpbdta,1) :: zdta ! temporary array for data fields … … 161 165 IF(lwp) WRITE(numout,*) 'Reading data from file ', clfile 162 166 CALL iom_open( clfile, inum ) 163 igrd = 1167 igrd = 4 164 168 IF( nblendta(igrd) <= 0 ) THEN 165 169 idvar = iom_varid( inum,'z1' ) … … 183 187 IF(lwp) WRITE(numout,*) 'Reading data from file ', clfile 184 188 CALL iom_open( clfile, inum ) 185 igrd = 2189 igrd = 5 186 190 IF( lendta(igrd) <= 0 ) THEN 187 191 idvar = iom_varid( inum,'u1' ) … … 204 208 if(lwp) write(numout,*) 'Reading data from file ', clfile 205 209 CALL iom_open( clfile, inum ) 206 igrd = 3210 igrd = 6 207 211 IF( lendta(igrd) <= 0 ) THEN 208 212 idvar = iom_varid( inum,'v1' ) … … 252 256 ENDIF 253 257 ! ! elevation 254 igrd = 1258 igrd = 4 255 259 DO ib = 1, nblenrim(igrd) 256 260 z1t = z_atde * ssh1(ib,itide) + z_btde * ssh2(ib,itide) … … 260 264 END DO 261 265 ! ! u 262 igrd = 2266 igrd = 5 263 267 DO ib = 1, nblenrim(igrd) 264 268 z1t = z_atde * u1(ib,itide) + z_btde * u2(ib,itide) … … 268 272 END DO 269 273 ! ! v 270 igrd = 3274 igrd = 6 271 275 DO ib = 1, nblenrim(igrd) 272 276 z1t = z_atde * v1(ib,itide) + z_btde * v2(ib,itide) … … 320 324 ! 321 325 DO itide = 1, ntide 322 igrd= 1! SSH on tracer grid.326 igrd=4 ! SSH on tracer grid. 323 327 DO ib = 1, nblenrim(igrd) 324 328 sshtide(ib) =sshtide(ib)+ ssh1(ib,itide)*z_cost(itide) + ssh2(ib,itide)*z_sist(itide) 325 329 ! if(lwp) write(numout,*) 'z',ib,itide,sshtide(ib), ssh1(ib,itide),ssh2(ib,itide) 326 330 END DO 327 igrd= 2! U grid331 igrd=5 ! U grid 328 332 DO ib=1, nblenrim(igrd) 329 333 utide(ib) = utide(ib)+ u1(ib,itide)*z_cost(itide) + u2(ib,itide)*z_sist(itide) 330 334 ! if(lwp) write(numout,*) 'u',ib,itide,utide(ib), u1(ib,itide),u2(ib,itide) 331 335 END DO 332 igrd= 3! V grid336 igrd=6 ! V grid 333 337 DO ib=1, nblenrim(igrd) 334 338 vtide(ib) = vtide(ib)+ v1(ib,itide)*z_cost(itide) + v2(ib,itide)*z_sist(itide) -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/DYN/divcur.F90
r1792 r2093 14 14 USE in_out_manager ! I/O manager 15 15 USE obc_oce ! ocean lateral open boundary condition 16 USE bdy_oce ! Unstructured open boundaries variables17 16 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 18 17 … … 79 78 !! 9.0 ! 03-08 (G. Madec) merged of cur and div, free form, F90 80 79 !! ! 05-01 (J. Chanut, A. Sellar) unstructured open boundaries 80 !! NEMO 3.3 ! 2010-09 (D.Storkey and E.O'Dea) bug fixes for BDY module 81 81 !!---------------------------------------------------------------------- 82 82 !! * Arguments … … 131 131 IF( lp_obc_south ) hdivn(nis0 :nis1 ,njs0 :njs1 ,jk) = 0.e0 ! south 132 132 ENDIF 133 #endif134 #if defined key_bdy135 ! unstructured open boundaries (div must be zero behind the open boundary)136 DO jj = 1, jpj137 DO ji = 1, jpi138 hdivn(ji,jj,jk)=hdivn(ji,jj,jk)*bdytmask(ji,jj)139 END DO140 END DO141 133 #endif 142 134 IF( .NOT. AGRIF_Root() ) THEN … … 344 336 ENDIF 345 337 #endif 346 #if defined key_bdy347 ! unstructured open boundaries (div must be zero behind the open boundary)348 DO jj = 1, jpj349 DO ji = 1, jpi350 hdivn(ji,jj,jk)=hdivn(ji,jj,jk)*bdytmask(ji,jj)351 END DO352 END DO353 #endif354 338 IF( .NOT. AGRIF_Root() ) THEN 355 339 IF ((nbondi == 1).OR.(nbondi == 2)) hdivn(nlci-1 , : ,jk) = 0.e0 ! east -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/DYN/dynnxt.F90
r1876 r2093 15 15 !! 2.3 ! 2007-07 (D. Storkey) Calls to BDY routines. 16 16 !! 3.2 ! 2009-06 (G. Madec, R.Benshila) re-introduce the vvl option 17 !! 3.3 ! 2010-09 (D. Storkey, E.O'Dea) Bug fix for BDY module 17 18 !!------------------------------------------------------------------------- 18 19 … … 165 166 # elif defined key_bdy 166 167 ! !* BDY open boundaries 167 !RB all this part should be in a specific routine168 168 IF( lk_dynspg_exp .OR. lk_dynspg_ts ) THEN ! except for filtered option 169 !170 169 CALL bdy_dyn_frs( kt ) 171 !172 IF( ln_bdy_dyn_fla ) THEN173 ua_e(:,:) = 0.e0174 va_e(:,:) = 0.e0175 ! Set these variables for use in bdy_dyn_fla176 hur_e(:,:) = hur(:,:)177 hvr_e(:,:) = hvr(:,:)178 DO jk = 1, jpkm1 !! Vertically integrated momentum trends179 ua_e(:,:) = ua_e(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk)180 va_e(:,:) = va_e(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk)181 END DO182 ua_e(:,:) = ua_e(:,:) * hur(:,:)183 va_e(:,:) = va_e(:,:) * hvr(:,:)184 DO jk = 1 , jpkm1185 ua(:,:,jk) = ua(:,:,jk) - ua_e(:,:)186 va(:,:,jk) = va(:,:,jk) - va_e(:,:)187 END DO188 CALL bdy_dta_bt( kt+1, 0)189 CALL bdy_dyn_fla( sshn_b )190 CALL lbc_lnk( ua_e, 'U', -1. ) ! Boundary points should be updated191 CALL lbc_lnk( va_e, 'V', -1. ) !192 DO jk = 1 , jpkm1193 ua(:,:,jk) = ( ua(:,:,jk) + ua_e(:,:) ) * umask(:,:,jk)194 va(:,:,jk) = ( va(:,:,jk) + va_e(:,:) ) * vmask(:,:,jk)195 END DO196 ENDIF197 !198 170 ENDIF 199 171 # endif -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r1779 r2093 7 7 !! - ! 2008-01 (R. Benshila) change averaging method 8 8 !! 3.2 ! 2009-07 (R. Benshila, G. Madec) Complete revisit associated to vvl reactivation 9 !! 3.3 ! 2010-09 (D. Storkey, E. O'Dea) update for BDY for Shelf configurations 9 10 !!--------------------------------------------------------------------- 10 11 #if defined key_dynspg_ts || defined key_esopa … … 352 353 ! ! ------------------ 353 354 IF( lk_obc ) CALL obc_dta_bt( kt, jn ) 354 IF( lk_bdy .OR. ln_bdy_tides ) CALL bdy_dta_bt( kt, jn+1 )355 IF( lk_bdy .OR. ln_bdy_tides ) CALL bdy_dta_bt( kt, jn+1, icycle ) 355 356 356 357 ! !* after ssh_e -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/DYN/sshwzv.F90
r1792 r2093 5 5 !!============================================================================== 6 6 !! History : 3.1 ! 2009-02 (G. Madec, M. Leclair) Original code 7 !! 3.3 ! 2010-09 (D.Storkey and E.O'Dea) bug fixes for BDY module 7 8 !!---------------------------------------------------------------------- 8 9 … … 25 26 USE obc_par ! open boundary cond. parameter 26 27 USE obc_oce 28 USE bdy_oce 27 29 USE diaar5, ONLY : lk_diaar5 28 30 USE iom … … 163 165 #endif 164 166 167 #if defined key_bdy 168 ssha(:,:) = ssha(:,:) * bdytmask(:,:) 169 CALL lbc_lnk( ssha, 'T', 1. ) 170 #endif 171 165 172 ! ! Sea Surface Height at u-,v- and f-points (vvl case only) 166 173 IF( lk_vvl ) THEN ! (required only in key_vvl case) … … 191 198 & - ( fse3t_a(:,:,jk) & 192 199 & - fse3t_b(:,:,jk) ) * tmask(:,:,jk) / z2dt 200 #if defined key_bdy 201 wn(:,:,jk) = wn(:,:,jk) * bdytmask(:,:) 202 #endif 193 203 END DO 194 204 ! -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/SBC/sbcmod.F90
r1792 r2093 6 6 !! History : 3.0 ! 07-2006 (G. Madec) Original code 7 7 !! - ! 08-2008 (S. Masson, E. .... ) coupled interface 8 !! 3.3 ! 09-2010 (D. Storkey) add ice boundary conditions (BDY) 8 9 !!---------------------------------------------------------------------- 9 10 … … 32 33 USE sbcfwb ! surface boundary condition: freshwater budget 33 34 USE closea ! closed sea 35 USE bdy_par ! unstructured open boundary data variables 36 USE bdyice ! unstructured open boundary data (bdy_ice routine) 34 37 35 38 USE prtctl ! Print control (prt_ctl routine) … … 223 226 ! 224 227 CASE( 2 ) ; CALL sbc_ice_lim_2( kt, nsbc ) ! LIM 2.0 ice model 228 IF( lk_bdy ) CALL bdy_ice( kt ) 225 229 ! 226 230 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc, nn_ico_cpl) ! LIM 3.0 ice model -
branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/SOL/solmat.F90
r1876 r2093 15 15 !! 3.2 ! 2009-06 (S. Masson) distributed restart using iom 16 16 !! - ! 2009-07 (R. Benshila) suppression of rigid-lid option 17 !! 3.3 ! 2010-09 (D. Storkey) update for BDY module. 17 18 !!---------------------------------------------------------------------- 18 19 … … 26 27 USE phycst ! physical constants 27 28 USE obc_oce ! ocean open boundary conditions 29 USE bdy_oce ! unstructured open boundary conditions 28 30 USE lbclnk ! lateral boudary conditions 29 31 USE lib_mpp ! distributed memory computing … … 80 82 ENDIF 81 83 82 #if defined key_dynspg_flt && ! defined key_obc 84 #if defined key_dynspg_flt && ! defined key_obc && ! defined key_bdy 83 85 84 86 DO jj = 2, jpjm1 ! matrix of free surface elliptic system … … 141 143 END DO 142 144 ENDIF 145 146 # elif defined key_dynspg_flt && defined key_bdy 147 148 ! defined gcdmat in the case of unstructured open boundaries 149 DO jj = 2, jpjm1 150 DO ji = 2, jpim1 151 zcoef = z2dt * z2dt * grav * bmask(ji,jj) 152 153 ! south coefficient 154 zcoefs = -zcoef * hv(ji,jj-1) * e1v(ji,jj-1)/e2v(ji,jj-1) 155 zcoefs = zcoefs * bdyvmask(ji,jj-1) 156 gcp(ji,jj,1) = zcoefs 157 158 ! west coefficient 159 zcoefw = -zcoef * hu(ji-1,jj) * e2u(ji-1,jj)/e1u(ji-1,jj) 160 zcoefw = zcoefw * bdyumask(ji-1,jj) 161 gcp(ji,jj,2) = zcoefw 162 163 ! east coefficient 164 zcoefe = -zcoef * hu(ji,jj) * e2u(ji,jj)/e1u(ji,jj) 165 zcoefe = zcoefe * bdyumask(ji,jj) 166 gcp(ji,jj,3) = zcoefe 167 168 ! north coefficient 169 zcoefn = -zcoef * hv(ji,jj) * e1v(ji,jj)/e2v(ji,jj) 170 zcoefn = zcoefn * bdyvmask(ji,jj) 171 gcp(ji,jj,4) = zcoefn 172 173 ! diagonal coefficient 174 gcdmat(ji,jj) = e1t(ji,jj)*e2t(ji,jj)*bmask(ji,jj) & 175 - zcoefs -zcoefw -zcoefe -zcoefn 176 END DO 177 END DO 178 143 179 #endif 144 180
Note: See TracChangeset
for help on using the changeset viewer.