New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 2093 – NEMO

Changeset 2093


Ignore:
Timestamp:
2010-09-15T09:39:38+02:00 (14 years ago)
Author:
davestorkey
Message:

Main change set.

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  
    66   !! History :  1.0  !  2001-05  (J. Chanut, A. Sellar)  Original code 
    77   !!            3.0  !  2008-04  (NEMO team)  add in the reference version      
     8   !!            3.3  !  2010-09  (D. Storkey) add ice boundary conditions 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_bdy  
     
    5455   !! Unstructured open boundary data variables 
    5556   !!---------------------------------------------------------------------- 
    56    INTEGER, DIMENSION(jpbgrd) ::   nblen                  !: Size of bdy data on a proc for each grid type 
    57    INTEGER, DIMENSION(jpbgrd) ::   nblenrim               !: Size of bdy data on a proc for first rim ind 
    58    INTEGER, DIMENSION(jpbgrd) ::   nblendta               !: Size of bdy data in file 
     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 
    5960 
    6061   INTEGER, DIMENSION(jpbdim,jpbgrd) ::   nbi, nbj        !: i and j indices of bdy dta 
     
    7374   REAL(wp), DIMENSION(jpbdim) ::   sshtide               !: Tidal boundary array : SSH 
    7475   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 
    7581 
    7682#else 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdy_par.F90

    r1146 r2093  
    66   !! History :  1.0  !  2005-01  (J. Chanut, A. Sellar)  Original code 
    77   !!            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 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_bdy 
     
    1718 
    1819   LOGICAL, PUBLIC, PARAMETER ::   lk_bdy  = .TRUE.  !: Unstructured Ocean Boundary Condition flag 
    19    INTEGER, PUBLIC, PARAMETER ::   jpbdta  = 5000    !: Max length of bdy field in file 
    20    INTEGER, PUBLIC, PARAMETER ::   jpbdim  = 5000    !: Max length of bdy field on a processor 
     20   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 
    2122   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) 
    2324#else 
    2425   !!---------------------------------------------------------------------- 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdydta.F90

    r1715 r2093  
    88   !!             -   !  2007-07  (D. Storkey) add bdy_dta_bt 
    99   !!            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 
    1012   !!---------------------------------------------------------------------- 
    1113#if defined key_bdy 
     
    2527   USE ioipsl 
    2628   USE in_out_manager  ! I/O logical units 
     29if defined key_lim2 
     30   USE ice_2 
     31#endif 
    2732 
    2833   IMPLICIT NONE 
     
    4752   REAL(wp), DIMENSION(jpbdim,2)     ::   ubtbdydta, vbtbdydta !: Arrays used for time interpolation of bdy data    
    4853   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 
    4960 
    5061   !!---------------------------------------------------------------------- 
     
    196207               IF(lwp) WRITE(numout,*) 'offset: ',zoffset 
    197208               IF(lwp) WRITE(numout,*) 'totime: ',totime 
    198                IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr 
     209               IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr(1:ntimes_bdy) 
    199210 
    200211               ! Check that there are not too many times in the file.  
     
    227238               END IF 
    228239               ! 
    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 
    242257               ! 
    243258            END DO                                         ! end loop over T, U & V grid  
     
    291306            nbdy_b = it 
    292307            ! 
    293             WRITE(numout,*) 'Time offset is ',zoffset 
    294             WRITE(numout,*) 'First record to read is ',nbdy_b 
     308            IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 
     309            IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b 
    295310 
    296311         ENDIF ! endif (nbdy_dta == 1) 
     
    334349            ENDIF 
    335350            ! 
     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 
    336361         ELSEIF( nbdy_dta == 1 ) THEN    ! Set first record in the climatological case:    
    337362            ! 
     
    357382                  nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 
    358383               ENDIF 
    359                WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd) 
     384               IF(lwp) WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd) 
    360385               ipi = nblendta(igrd) 
    361386               CALL iom_get ( numbdyt, jpdom_unknown, 'votemper', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) 
     
    372397                  nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 
    373398               ENDIF 
    374                WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd) 
     399               IF(lwp) WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd) 
    375400               ipi = nblendta(igrd) 
    376401               CALL iom_get ( numbdyt, jpdom_unknown, 'vosaline', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) 
     
    390415                 nblendta(igrd) = iom_file(numbdyu)%dimsz(1,idvar) 
    391416               ENDIF 
    392                WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd) 
     417               IF(lwp) WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd) 
    393418               ipi = nblendta(igrd) 
    394419               CALL iom_get ( numbdyu, jpdom_unknown,'vozocrtx',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) 
     
    404429                 nblendta(igrd) = iom_file(numbdyv)%dimsz(1,idvar) 
    405430               ENDIF 
    406                WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd) 
     431               IF(lwp) WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd) 
    407432               ipi = nblendta(igrd) 
    408433               CALL iom_get ( numbdyv, jpdom_unknown,'vomecrty',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) 
     
    414439            ENDIF ! ln_bdy_dyn_frs 
    415440 
     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 
    416469 
    417470            IF ((.NOT.ln_bdy_clim) .AND. (istep(1) > 0)) THEN 
     
    427480                 vbdydta(:,:,1) = vbdydta(:,:,2) 
    428481               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 
    429489            END IF 
    430490 
     
    441501              vbdy  (:,:) = vbdydta  (:,:,2) 
    442502            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 
    443510 
    444511            IF(ln_bdy_tra_frs .or. ln_bdy_ice_frs) CALL iom_close( numbdyt ) 
     
    483550                vbdydta(:,:,1) =  vbdydta(:,:,2) 
    484551              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 
    485559            END IF ! nbdy_a < ntimes_bdy 
    486560 
     
    497571             vbdydta(:,:,1) =  vbdydta(:,:,2) 
    498572           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  
    500580           ! read another set 
    501581           ipj  = 1 
     
    543623              END DO 
    544624           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 
    546651           ! 
    547652           IF(lwp) WRITE(numout,*) 'bdy_dta : first record file used nbdy_b ',nbdy_b 
     
    559664       ! ******************** 
    560665       !  
    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) ) 
    563670       END IF 
    564671 
     
    589696          ENDIF 
    590697 
     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 
    591709      END IF                       !end if ((nbdy_dta==1).AND.(ntimes_bdy>1)) 
    592710     
     
    606724 
    607725 
    608    SUBROUTINE bdy_dta_bt( kt, jit ) 
     726   SUBROUTINE bdy_dta_bt( kt, jit, icycl ) 
    609727      !!--------------------------------------------------------------------------- 
    610728      !!                      ***  SUBROUTINE bdy_dta_bt  *** 
     
    620738      INTEGER, INTENT( in ) ::   kt          ! ocean time-step index 
    621739      INTEGER, INTENT( in ) ::   jit         ! barotropic time step index 
     740      INTEGER, INTENT( in ) ::   icycl       ! number of cycles need for final file close 
    622741      !                                      ! (for timesplitting option, otherwise zero) 
    623742      !! 
     
    639758      REAL(wp), DIMENSION(jpbtime)      ::   zstepr             ! REAL time array from data files 
    640759      REAL(wp), DIMENSION(jpbdta,1)     ::   zdta               ! temporary array for data fields 
    641       CHARACTER(LEN=80), DIMENSION(3)   ::   clfile 
     760      CHARACTER(LEN=80), DIMENSION(6)   ::   clfile 
    642761      CHARACTER(LEN=70 )                ::   clunits            ! units attribute of time coordinate 
    643762      !!--------------------------------------------------------------------------- 
     
    688807 
    689808      !                                                !-------------------! 
    690       IF( kt == nit000 ) THEN                          !  First call only  ! 
     809      IF( kt == nit000 .and. jit ==2 ) THEN            !  First call only  ! 
    691810         !                                             !-------------------! 
    692811         istep_bt(:) = 0 
     
    712831                                                     ! necessary time dumps in file are included 
    713832 
    714           clfile(1) = filbdy_data_bt_T 
    715           clfile(2) = filbdy_data_bt_U 
    716           clfile(3) = filbdy_data_bt_V 
    717  
    718           DO igrd = 1,3 
     833          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 
    719838 
    720839            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 )  
    722841 
    723842            SELECT CASE( igrd ) 
    724                CASE (1)  
    725                   numbdyt = inum 
    726                CASE (2)  
    727                   numbdyu = inum 
    728                CASE (3)  
    729                   numbdyv = inum 
     843               CASE (4)  
     844                  numbdyt_bt = inum 
     845               CASE (5)  
     846                  numbdyu_bt = inum 
     847               CASE (6)  
     848                  numbdyv_bt = inum 
    730849            END SELECT 
    731850 
     
    757876 
    758877            ! Check that time array increases (or interp will fail): 
    759             DO it = 2, ntimes_bdy 
     878            DO it = 2, ntimes_bdy_bt 
    760879               IF ( zstepr(it-1) >= zstepr(it) ) THEN 
    761880                  CALL ctl_stop('Time array in unstructured boundary data file', & 
     
    778897               ! The same applies to the last time level: see setting of lect below. 
    779898 
    780                IF ( ntimes_bdy == 1 ) CALL ctl_stop( & 
     899               IF ( ntimes_bdy_bt == 1 ) CALL ctl_stop( & 
    781900                    'There is only one time dump in data files', & 
    782901                    'Set ln_bdy_clim=.true. in namelist for constant bdy forcing.' ) 
    783902 
    784903               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 ) 
    793909               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 ) 
    801913               END IF 
    802  
    803914            END IF ! .NOT. ln_bdy_clim 
    804915 
    805             IF ( igrd .EQ. 1) THEN 
     916            IF ( igrd .EQ. 4) THEN 
    806917              ntimes_bdyt = ntimes_bdy_bt 
    807918              zoffsett = zoffset 
    808919              istept(:) = INT( zstepr(:) + zoffset ) 
    809             ELSE IF (igrd .EQ. 2) THEN 
     920            ELSE IF (igrd .EQ. 5) THEN 
    810921              ntimes_bdyu = ntimes_bdy_bt 
    811922              zoffsetu = zoffset 
    812923              istepu(:) = INT( zstepr(:) + zoffset ) 
    813             ELSE IF (igrd .EQ. 3) THEN 
     924            ELSE IF (igrd .EQ. 6) THEN 
    814925              ntimes_bdyv = ntimes_bdy_bt 
    815926              zoffsetv = zoffset 
     
    865976          nbdy_b_bt = it 
    866977 
    867           WRITE(numout,*) 'Time offset is ',zoffset 
    868           WRITE(numout,*) 'First record to read is ',nbdy_b_bt 
     978          IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 
     979          IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b_bt 
    869980 
    870981        ENDIF ! endif (nbdy_dta == 1) 
     
    875986        IF ( nbdy_dta == 0) THEN 
    876987          ! boundary data arrays are filled with initial conditions 
    877           igrd = 2            ! U-points data  
     988          igrd = 5            ! U-points data  
    878989          DO ib = 1, nblen(igrd)               
    879990            ubtbdy(ib) = un(nbi(ib,igrd), nbj(ib,igrd), 1) 
    880991          END DO 
    881992 
    882           igrd = 3            ! V-points data  
     993          igrd = 6            ! V-points data  
    883994          DO ib = 1, nblen(igrd)               
    884995            vbtbdy(ib) = vn(nbi(ib,igrd), nbj(ib,igrd), 1) 
    885996          END DO 
    886997 
    887           igrd = 1            ! T-points data  
     998          igrd = 4            ! T-points data  
    888999          DO ib = 1, nblen(igrd)               
    8891000            sshbdy(ib) = sshn(nbi(ib,igrd), nbj(ib,igrd)) 
     
    9101021         ! Read first record: 
    9111022          ipj=1 
    912           igrd=1 
     1023          igrd=4 
    9131024          ipi=nblendta(igrd) 
    9141025 
    9151026          ! ssh 
    916           igrd=1 
     1027          igrd=4 
    9171028          IF ( nblendta(igrd) .le. 0 ) THEN  
    9181029            idvar = iom_varid( numbdyt_bt,'sossheig' ) 
     
    9291040  
    9301041          ! u-velocity 
    931           igrd=2 
     1042          igrd=5 
    9321043          IF ( nblendta(igrd) .le. 0 ) THEN  
    9331044            idvar = iom_varid( numbdyu_bt,'vobtcrtx' ) 
     
    9441055 
    9451056          ! v-velocity 
    946           igrd=3 
     1057          igrd=6 
    9471058          IF ( nblendta(igrd) .le. 0 ) THEN  
    9481059            idvar = iom_varid( numbdyv_bt,'vobtcrty' ) 
     
    10101121          ipj=1 
    10111122          ipk=jpk 
    1012           igrd=1 
     1123          igrd=4 
    10131124          ipi=nblendta(igrd) 
    10141125 
    10151126           
    10161127          ! ssh 
    1017           igrd=1 
     1128          igrd=4 
    10181129          ipi=nblendta(igrd) 
    10191130 
     
    10251136 
    10261137          ! u-velocity 
    1027           igrd=2 
     1138          igrd=5 
    10281139          ipi=nblendta(igrd) 
    10291140 
     
    10351146 
    10361147          ! v-velocity 
    1037           igrd=3 
     1148          igrd=6 
    10381149          ipi=nblendta(igrd) 
    10391150 
     
    10641175        END IF 
    10651176 
    1066           igrd=1 
     1177          igrd=4 
    10671178          DO ib=1, nblen(igrd) 
    10681179            sshbdy(ib) = zxy      * sshbdydta(ib,2) + & 
     
    10701181          END DO 
    10711182 
    1072           igrd=2 
     1183          igrd=5 
    10731184          DO ib=1, nblen(igrd) 
    10741185            ubtbdy(ib) = zxy      * ubtbdydta(ib,2) + & 
     
    10761187          END DO 
    10771188 
    1078           igrd=3 
     1189          igrd=6 
    10791190          DO ib=1, nblen(igrd) 
    10801191            vbtbdy(ib) = zxy      * vbtbdydta(ib,2) + & 
     
    10901201 
    10911202      ! Closing of the 3 files 
    1092       IF( kt == nitend ) THEN 
     1203      IF( kt == nitend   .and. jit == icycl ) THEN 
    10931204          CALL iom_close( numbdyt_bt ) 
    10941205          CALL iom_close( numbdyu_bt ) 
     
    11091220      WRITE(*,*) 'bdy_dta: You should not have seen this print! error?', kt 
    11101221   END SUBROUTINE bdy_dta 
    1111    SUBROUTINE bdy_dta_bt( kt, kit )      ! Empty routine 
     1222   SUBROUTINE bdy_dta_bt( kt, kit, icycle )      ! Empty routine 
    11121223      WRITE(*,*) 'bdy_dta: You should not have seen this print! error?', kt, kit 
    11131224   END SUBROUTINE bdy_dta_bt 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdydyn.F90

    r1740 r2093  
    88   !!            3.0  !  2008-04  (NEMO team)  add in the reference version 
    99   !!            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 
    1012   !!---------------------------------------------------------------------- 
    1113#if defined key_bdy  
     
    132134 
    133135         ! Fill temporary array with ssh data (here spgu): 
    134          igrd = 1 
     136         igrd = 4 
    135137         spgu(:,:) = 0.0 
    136138         DO ib = 1, nblenrim(igrd) 
     
    141143         END DO 
    142144         ! 
    143          igrd = 2      ! Flather bc on u-velocity;  
     145         igrd = 5      ! Flather bc on u-velocity;  
    144146         !             ! remember that flagu=-1 if normal velocity direction is outward 
    145147         !             ! I think we should rather use after ssh ? 
     
    155157         END DO 
    156158         ! 
    157          igrd = 3      ! Flather bc on v-velocity 
     159         igrd = 6      ! Flather bc on v-velocity 
    158160         !             ! remember that flagv=-1 if normal velocity direction is outward 
    159161         DO ib = 1, nblenrim(igrd) 
     
    167169            va_e(ii,ij) = zforc + zcorr * vmask(ii,ij,1) 
    168170         END DO 
     171         CALL lbc_lnk( ua_e, 'U', -1. )   ! Boundary points should be updated 
     172         CALL lbc_lnk( va_e, 'V', -1. )   ! 
    169173         ! 
    170174      ENDIF ! ln_bdy_dyn_fla .or. ln_bdy_tides 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdyini.F90

    r1528 r2093  
    88   !!             -   !  2007-01  (D. Storkey) Tidal forcing 
    99   !!            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 
    1012   !!---------------------------------------------------------------------- 
    1113#if defined key_bdy 
     
    6365      REAL(wp) , DIMENSION(jpidta,jpjdta) ::   zmask           ! global domain mask 
    6466      REAL(wp) , DIMENSION(jpbdta,1)      ::   zdta            ! temporary array  
    65       CHARACTER(LEN=80),DIMENSION(3)      ::   clfile 
     67      CHARACTER(LEN=80),DIMENSION(6)      ::   clfile 
    6668      !! 
    6769      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,          & 
    6871         &            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 
    7175      !!---------------------------------------------------------------------- 
    7276 
     
    145149        IF(lwp) WRITE(numout,*) ' ' 
    146150        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' 
    147157        IF(lwp) WRITE(numout,*) ' ' 
    148158      ENDIF 
     
    226236            ! Read tides input files for preference in case there are 
    227237            ! 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  
    232249            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 
    233259            clfile(2) = filbdy_data_U 
    234             clfile(3) = filbdy_data_V 
    235          ENDIF           
     260            clfile(3) = filbdy_data_V  
     261         ENDIF 
    236262 
    237263         ! 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 
    248282         ENDIF 
    249283 
     
    251285            CALL iom_open( clfile(igrd), inum ) 
    252286            id_dummy = iom_varid( inum, 'nbidta', kdimsz=kdimsz )   
    253             WRITE(numout,*) 'kdimsz : ',kdimsz 
     287            IF(lwp) WRITE(numout,*) 'kdimsz : ',kdimsz 
    254288            ib_len = kdimsz(1) 
    255289            IF( ib_len > jpbdta) CALL ctl_stop(          & 
     
    272306            CALL iom_close( inum ) 
    273307 
    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 
    281317            ! 
    282318         END DO 
     
    468504      ubtbdy(:) = 0.e0 
    469505      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 
    470511 
    471512      ! Read in tidal constituents and adjust for model start time 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/BDY/bdytides.F90

    r1715 r2093  
    77   !!            2.3  !  2008-01  (J.Holt)  Add date correction. Origins POLCOMS v6.3 2007 
    88   !!            3.0  !  2008-04  (NEMO team)  add in the reference version 
     9   !!            3.3  !  2010-09  (D.Storkey and E.O'Dea)  bug fixes 
    910   !!---------------------------------------------------------------------- 
    1011#if defined key_bdy 
     
    3132   USE bdy_par         ! Unstructured boundary parameters 
    3233   USE bdy_oce         ! ocean open boundary conditions 
     34   USE daymod          ! calendar 
    3335 
    3436   IMPLICIT NONE 
     
    4143   LOGICAL, PUBLIC            ::   ln_tide_date            !: =T correct tide phases and amplitude for model start date 
    4244 
    43    INTEGER, PARAMETER ::   jptides_max = 15      !: Max number of tidal contituents 
    44    INTEGER            ::   ntide                 !: Actual number of tidal constituents 
     45   INTEGER, PARAMETER,PUBLIC ::   jptides_max = 15      !: Max number of tidal contituents 
     46   INTEGER, PUBLIC            ::   ntide                 !: Actual number of tidal constituents 
    4547 
    4648   CHARACTER(len=80), PUBLIC                         ::   filtide    !: Filename root for tidal input files 
    4749   CHARACTER(len= 4), PUBLIC, DIMENSION(jptides_max) ::   tide_cpt   !: Names of tidal components used. 
    4850 
    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) 
    5153    
    5254   REAL(wp), DIMENSION(jpbdim,jptides_max)  ::   ssh1, ssh2   !: Tidal constituents : SSH 
     
    8688      READ  ( numnam, nambdy_tide ) 
    8789      !                                               ! 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 
    9498      !                                               ! find constituents in standard list 
    9599      DO itide = 1, ntide 
     
    145149      CHARACTER(len=80) :: clfile         ! full file name for tidal input file  
    146150      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!) 
    148152      REAL(wp) ::  z_arg, z_atde, z_btde, z1t, z2t            
    149153      REAL(wp), DIMENSION(jpbdta,1) ::   zdta   ! temporary array for data fields 
     
    161165         IF(lwp) WRITE(numout,*) 'Reading data from file ', clfile 
    162166         CALL iom_open( clfile, inum ) 
    163          igrd = 1 
     167         igrd = 4 
    164168         IF( nblendta(igrd) <= 0 ) THEN  
    165169            idvar = iom_varid( inum,'z1' ) 
     
    183187         IF(lwp) WRITE(numout,*) 'Reading data from file ', clfile 
    184188         CALL iom_open( clfile, inum ) 
    185          igrd = 2 
     189         igrd = 5 
    186190         IF( lendta(igrd) <= 0 ) THEN  
    187191            idvar = iom_varid( inum,'u1' ) 
     
    204208         if(lwp) write(numout,*) 'Reading data from file ', clfile 
    205209         CALL iom_open( clfile, inum ) 
    206          igrd = 3 
     210         igrd = 6 
    207211         IF( lendta(igrd) <= 0 ) THEN  
    208212            idvar = iom_varid( inum,'v1' ) 
     
    252256            ENDIF 
    253257            !                                         !  elevation          
    254             igrd = 1 
     258            igrd = 4 
    255259            DO ib = 1, nblenrim(igrd)                 
    256260               z1t = z_atde * ssh1(ib,itide) + z_btde * ssh2(ib,itide) 
     
    260264            END DO 
    261265            !                                         !  u        
    262             igrd = 2 
     266            igrd = 5 
    263267            DO ib = 1, nblenrim(igrd)                 
    264268               z1t = z_atde * u1(ib,itide) + z_btde * u2(ib,itide) 
     
    268272            END DO 
    269273            !                                         !  v        
    270             igrd = 3 
     274            igrd = 6 
    271275            DO ib = 1, nblenrim(igrd)                 
    272276               z1t = z_atde * v1(ib,itide) + z_btde * v2(ib,itide) 
     
    320324      ! 
    321325      DO itide = 1, ntide 
    322          igrd=1                              ! SSH on tracer grid. 
     326         igrd=4                              ! SSH on tracer grid. 
    323327         DO ib = 1, nblenrim(igrd) 
    324328            sshtide(ib) =sshtide(ib)+ ssh1(ib,itide)*z_cost(itide) + ssh2(ib,itide)*z_sist(itide) 
    325329            !    if(lwp) write(numout,*) 'z',ib,itide,sshtide(ib), ssh1(ib,itide),ssh2(ib,itide) 
    326330         END DO 
    327          igrd=2                              ! U grid 
     331         igrd=5                              ! U grid 
    328332         DO ib=1, nblenrim(igrd) 
    329333            utide(ib) = utide(ib)+ u1(ib,itide)*z_cost(itide) + u2(ib,itide)*z_sist(itide) 
    330334            !    if(lwp) write(numout,*) 'u',ib,itide,utide(ib), u1(ib,itide),u2(ib,itide) 
    331335         END DO 
    332          igrd=3                              ! V grid 
     336         igrd=6                              ! V grid 
    333337         DO ib=1, nblenrim(igrd) 
    334338            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  
    1414   USE in_out_manager  ! I/O manager 
    1515   USE obc_oce         ! ocean lateral open boundary condition 
    16    USE bdy_oce        ! Unstructured open boundaries variables 
    1716   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    1817 
     
    7978      !!   9.0  !  03-08  (G. Madec)  merged of cur and div, free form, F90 
    8079      !!        !  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 
    8181      !!---------------------------------------------------------------------- 
    8282      !! * Arguments 
     
    131131            IF( lp_obc_south )   hdivn(nis0  :nis1  ,njs0  :njs1  ,jk) = 0.e0      ! south 
    132132         ENDIF 
    133 #endif          
    134 #if defined key_bdy 
    135          ! unstructured open boundaries (div must be zero behind the open boundary) 
    136          DO jj = 1, jpj 
    137             DO ji = 1, jpi 
    138                hdivn(ji,jj,jk)=hdivn(ji,jj,jk)*bdytmask(ji,jj) 
    139             END DO 
    140          END DO 
    141133#endif          
    142134         IF( .NOT. AGRIF_Root() ) THEN 
     
    344336         ENDIF 
    345337#endif          
    346 #if defined key_bdy 
    347          ! unstructured open boundaries (div must be zero behind the open boundary) 
    348          DO jj = 1, jpj 
    349            DO ji = 1, jpi 
    350              hdivn(ji,jj,jk)=hdivn(ji,jj,jk)*bdytmask(ji,jj) 
    351            END DO 
    352          END DO 
    353 #endif         
    354338         IF( .NOT. AGRIF_Root() ) THEN 
    355339            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  
    1515   !!            2.3  !  2007-07  (D. Storkey) Calls to BDY routines.  
    1616   !!            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 
    1718   !!------------------------------------------------------------------------- 
    1819   
     
    165166# elif defined key_bdy  
    166167      !                                !* BDY open boundaries 
    167       !RB all this part should be in a specific routine 
    168168      IF( lk_dynspg_exp .OR. lk_dynspg_ts ) THEN       ! except for filtered option 
    169          ! 
    170169         CALL bdy_dyn_frs( kt ) 
    171          ! 
    172          IF( ln_bdy_dyn_fla ) THEN 
    173             ua_e(:,:) = 0.e0 
    174             va_e(:,:) = 0.e0 
    175             ! Set these variables for use in bdy_dyn_fla 
    176             hur_e(:,:) = hur(:,:) 
    177             hvr_e(:,:) = hvr(:,:) 
    178             DO jk = 1, jpkm1   !! Vertically integrated momentum trends 
    179                ua_e(:,:) = ua_e(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk) 
    180                va_e(:,:) = va_e(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk) 
    181             END DO 
    182             ua_e(:,:) = ua_e(:,:) * hur(:,:) 
    183             va_e(:,:) = va_e(:,:) * hvr(:,:) 
    184             DO jk = 1 , jpkm1 
    185                ua(:,:,jk) = ua(:,:,jk) - ua_e(:,:) 
    186                va(:,:,jk) = va(:,:,jk) - va_e(:,:) 
    187             END DO 
    188             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 updated 
    191             CALL lbc_lnk( va_e, 'V', -1. )   ! 
    192             DO jk = 1 , jpkm1 
    193                ua(:,:,jk) = ( ua(:,:,jk) + ua_e(:,:) ) * umask(:,:,jk) 
    194                va(:,:,jk) = ( va(:,:,jk) + va_e(:,:) ) * vmask(:,:,jk) 
    195             END DO 
    196          ENDIF 
    197          ! 
    198170      ENDIF 
    199171# endif 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r1779 r2093  
    77   !!              -   ! 2008-01  (R. Benshila)  change averaging method 
    88   !!             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 
    910  !!--------------------------------------------------------------------- 
    1011#if defined key_dynspg_ts   ||   defined key_esopa 
     
    352353         !                                                !  ------------------ 
    353354         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 ) 
    355356 
    356357         !                                                !* after ssh_e 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/DYN/sshwzv.F90

    r1792 r2093  
    55   !!============================================================================== 
    66   !! 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 
    78   !!---------------------------------------------------------------------- 
    89 
     
    2526   USE obc_par         ! open boundary cond. parameter 
    2627   USE obc_oce 
     28   USE bdy_oce 
    2729   USE diaar5, ONLY :   lk_diaar5 
    2830   USE iom 
     
    163165#endif 
    164166 
     167#if defined key_bdy 
     168      ssha(:,:) = ssha(:,:) * bdytmask(:,:) 
     169      CALL lbc_lnk( ssha, 'T', 1. )  
     170#endif 
     171 
    165172      !                                                ! Sea Surface Height at u-,v- and f-points (vvl case only) 
    166173      IF( lk_vvl ) THEN                                ! (required only in key_vvl case) 
     
    191198              &                    - (  fse3t_a(:,:,jk)                   & 
    192199              &                       - fse3t_b(:,:,jk) ) * tmask(:,:,jk) / z2dt 
     200#if defined key_bdy 
     201         wn(:,:,jk) = wn(:,:,jk) * bdytmask(:,:) 
     202#endif 
    193203      END DO 
    194204      ! 
  • branches/DEV_r1986_BDY_updates/NEMO/OPA_SRC/SBC/sbcmod.F90

    r1792 r2093  
    66   !! History :  3.0   !  07-2006  (G. Madec)  Original code 
    77   !!             -    !  08-2008  (S. Masson, E. .... ) coupled interface 
     8   !!            3.3   !  09-2010  (D. Storkey) add ice boundary conditions (BDY) 
    89   !!---------------------------------------------------------------------- 
    910 
     
    3233   USE sbcfwb          ! surface boundary condition: freshwater budget 
    3334   USE closea          ! closed sea 
     35   USE bdy_par         ! unstructured open boundary data variables 
     36   USE bdyice          ! unstructured open boundary data  (bdy_ice routine) 
    3437 
    3538   USE prtctl          ! Print control                    (prt_ctl routine) 
     
    223226         !                                                       
    224227      CASE(  2 )   ;       CALL sbc_ice_lim_2( kt, nsbc )             ! LIM 2.0 ice model 
     228                           IF( lk_bdy ) CALL bdy_ice( kt ) 
    225229         !                                                      
    226230      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  
    1515   !!             3.2  ! 2009-06  (S. Masson)  distributed restart using iom 
    1616   !!              -   ! 2009-07  (R. Benshila)  suppression of rigid-lid option 
     17   !!             3.3  ! 2010-09  (D. Storkey) update for BDY module. 
    1718   !!---------------------------------------------------------------------- 
    1819 
     
    2627   USE phycst          ! physical constants 
    2728   USE obc_oce         ! ocean open boundary conditions 
     29   USE bdy_oce         ! unstructured open boundary conditions 
    2830   USE lbclnk          ! lateral boudary conditions 
    2931   USE lib_mpp         ! distributed memory computing 
     
    8082      ENDIF 
    8183 
    82 #if defined key_dynspg_flt && ! defined key_obc 
     84#if defined key_dynspg_flt && ! defined key_obc && ! defined key_bdy 
    8385 
    8486      DO jj = 2, jpjm1                      ! matrix of free surface elliptic system 
     
    141143         END DO 
    142144      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 
    143179#endif 
    144180 
Note: See TracChangeset for help on using the changeset viewer.