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 2128 – NEMO

Changeset 2128


Ignore:
Timestamp:
2010-09-28T14:29:51+02:00 (14 years ago)
Author:
rfurner
Message:

merged branches OBS, ASM, Rivers, BDY & mixed_dynldf ready for vn3.3 merge

Location:
branches/devukmo2010
Files:
63 added
47 edited

Legend:

Unmodified
Added
Removed
  • branches/devukmo2010/CONFIG/GYRE/EXP00/namelist

    r1741 r2128  
    214214   sn_rnf      = 'runoff_1m_nomask' ,  -1         , 'sorunoff' ,    .true.      , .true.  , 'yearly'  , ''       , '' 
    215215   sn_cnf      = 'runoff_1m_nomask' ,   0         , 'socoefr'  ,    .false.     , .true.  , 'yearly'  , ''       , '' 
     216   sn_sal_rnf  = 'runoffs'          ,  24         , 'rosaline' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     217   sn_tmp_rnf  = 'runoffs'          ,  24         , 'rotemper' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     218   sn_dep_rnf  = 'runoffs'          ,   0         , 'rodepth'  ,    .false.     , .true.  ,   'yearly', ''       , '' 
    216219  
    217220   cn_dir       = './'      !  root directory for the location of the runoff files 
    218221   ln_rnf_emp   =   .false. !  runoffs included into precipitation field (T) or into a file (F) 
    219222   ln_rnf_mouth =   .false. !  specific treatment at rivers mouths 
     223   ln_rnf_att   =   .false. !  apply temperature, salinity and depth attributes to runoff input 
    220224   rn_hrnf      =   0.e0    !  depth over which enhanced vertical mixing is used 
    221225   rn_avt_rnf   =   1.e-3   !  value of the additional vertical mixing coef. [m2/s] 
  • branches/devukmo2010/CONFIG/GYRE_LOBSTER/EXP00/namelist

    r1741 r2128  
    214214   sn_rnf      = 'runoff_1m_nomask' ,  -1         , 'sorunoff' ,    .true.      , .true.  , 'yearly'  , ''       , '' 
    215215   sn_cnf      = 'runoff_1m_nomask' ,   0         , 'socoefr'  ,    .false.     , .true.  , 'yearly'  , ''       , '' 
     216   sn_sal_rnf  = 'runoffs'          ,  24         , 'rosaline' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     217   sn_tmp_rnf  = 'runoffs'          ,  24         , 'rotemper' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     218   sn_dep_rnf  = 'runoffs'          ,   0         , 'rodepth'  ,    .false.     , .true.  ,   'yearly', ''       , '' 
    216219  
    217220   cn_dir       = './'      !  root directory for the location of the runoff files 
    218221   ln_rnf_emp   =   .false. !  runoffs included into precipitation field (T) or into a file (F) 
    219222   ln_rnf_mouth =   .false. !  specific treatment at rivers mouths 
     223   ln_rnf_att   =   .false. !  apply temperature, salinity and depth attributes to runoff input 
    220224   rn_hrnf      =   0.e0    !  depth over which enhanced vertical mixing is used 
    221225   rn_avt_rnf   =   1.e-3   !  value of the additional vertical mixing coef. [m2/s] 
  • branches/devukmo2010/CONFIG/ORCA2_LIM/EXP00/namelist

    r1759 r2128  
    241241   sn_rnf      = 'runoff_1m_nomask' ,  -1         , 'sorunoff' ,    .true.      , .true.  , 'yearly'  , ''       , '' 
    242242   sn_cnf      = 'runoff_1m_nomask' ,   0         , 'socoefr'  ,    .false.     , .true.  , 'yearly'  , ''       , '' 
     243   sn_sal_rnf  = 'runoffs'          ,  24         , 'rosaline' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     244   sn_tmp_rnf  = 'runoffs'          ,  24         , 'rotemper' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     245   sn_dep_rnf  = 'runoffs'          ,   0         , 'rodepth'  ,    .false.     , .true.  ,   'yearly', ''       , '' 
     246 
    243247  
    244248   cn_dir       = './'      !  root directory for the location of the runoff files 
    245249   ln_rnf_emp   =   .false. !  runoffs included into precipitation field (T) or into a file (F) 
    246250   ln_rnf_mouth =   .false. !  specific treatment at rivers mouths 
     251   ln_rnf_att   =   .false. !  apply temperature, salinity and depth attributes to runoff input   
    247252   rn_hrnf      =  15.e0    !  depth over which enhanced vertical mixing is used 
    248253   rn_avt_rnf   =   1.e-3   !  value of the additional vertical mixing coef. [m2/s] 
     
    505510   ln_dynldf_iso    =  .false.  !  iso-neutral                          (require "key_ldfslp") 
    506511                           !  Coefficient 
    507    rn_ahm_0    = 40000.         !  horizontal eddy viscosity   [m2/s] 
    508    rn_ahmb_0   =     0.         !  background eddy viscosity for ldf_iso [m2/s] 
     512   rn_ahm_0         = 40000.    !  horizontal laplacian eddy viscosity   [m2/s] 
     513   rn_ahmb_0        =     0.    !  background eddy viscosity for ldf_iso [m2/s] 
     514   rn_ahm_0_blp     =     0.    !  horizontal bilaplacian eddy viscosity [m4/s]  
    509515/ 
    510516!!====================================================================== 
  • branches/devukmo2010/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist

    r1759 r2128  
    241241   sn_rnf      = 'runoff_1m_nomask' ,  -1         , 'sorunoff' ,    .true.      , .true.  , 'yearly'  , ''       , '' 
    242242   sn_cnf      = 'runoff_1m_nomask' ,   0         , 'socoefr'  ,    .false.     , .true.  , 'yearly'  , ''       , '' 
     243   sn_sal_rnf  = 'runoffs'          ,  24         , 'rosaline' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     244   sn_tmp_rnf  = 'runoffs'          ,  24         , 'rotemper' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     245   sn_dep_rnf  = 'runoffs'          ,   0         , 'rodepth'  ,    .false.     , .true.  ,   'yearly', ''       , '' 
    243246  
    244247   cn_dir       = './'      !  root directory for the location of the runoff files 
    245248   ln_rnf_emp   =   .false. !  runoffs included into precipitation field (T) or into a file (F) 
    246249   ln_rnf_mouth =   .false. !  specific treatment at rivers mouths 
     250   ln_rnf_att   =   .false. !  apply temperature, salinity and depth attributes to runoff input 
    247251   rn_hrnf      =  15.e0    !  depth over which enhanced vertical mixing is used 
    248252   rn_avt_rnf   =   1.e-3   !  value of the additional vertical mixing coef. [m2/s] 
  • branches/devukmo2010/CONFIG/POMME/EXP00/namelist

    r1875 r2128  
    240240   sn_rnf      = 'runoff_1m_nomask' ,  -1         , 'sorunoff' ,    .true.      , .true.  , 'yearly'  , ''       , '' 
    241241   sn_cnf      = 'runoff_1m_nomask' ,   0         , 'socoefr'  ,    .false.     , .true.  , 'yearly'  , ''       , '' 
     242   sn_sal_rnf  = 'runoffs'          ,  24         , 'rosaline' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     243   sn_tmp_rnf  = 'runoffs'          ,  24         , 'rotemper' ,    .true.      , .true.  ,   'yearly', ''       , '' 
     244   sn_dep_rnf  = 'runoffs'          ,   0         , 'rodepth'  ,    .false.     , .true.  ,   'yearly', ''       , '' 
    242245  
    243246   cn_dir       = './'      !  root directory for the location of the runoff files 
    244247   ln_rnf_emp   =   .false. !  runoffs included into precipitation field (T) or into a file (F) 
    245248   ln_rnf_mouth =   .false. !  specific treatment at rivers mouths 
     249   ln_rnf_att   =   .false. !  apply temperature, salinity and depth attributes to runoff input 
    246250   rn_hrnf      =  0.e0    !  depth over which enhanced vertical mixing is used 
    247251   rn_avt_rnf   =   1.e-3   !  value of the additional vertical mixing coef. [m2/s] 
  • branches/devukmo2010/DOC/TexFiles/Chapters/Chap_LDF.tex

    r1224 r2128  
    147147 
    148148(5) the eddy coefficient associated with a biharmonic operator must be set to a \emph{negative} value. 
     149 
     150(6) it is possible to use both the laplacian and biharmonic operators concurrently. 
     151 
     152(7) for testing purposes it is possible to run without lateral diffusion on momentum. 
    149153 
    150154 
  • branches/devukmo2010/DOC/TexFiles/Namelist/nam_dynldf

    r1225 r2128  
    1010   ln_dynldf_iso    =  .false.  !     iso-neutral                      (require "key_ldfslp") 
    1111                                !  Coefficient 
    12    ahm0    = 40000.             !     horizontal eddy viscosity   [m2/s] 
    13    ahmb0   =     0.             !     background eddy viscosity for ldf_iso [m2/s] 
     12   rn_ahm_0         = 40000.    !     horizontal laplacian eddy viscosity   [m2/s] 
     13   rn_ahmb_0        =     0.    !     background eddy viscosity for ldf_iso [m2/s] 
     14   rn_ahm_0_blp     =     0.    !     horizontal bilaplacian eddy viscosity [m4/s]  
    1415/ 
  • branches/devukmo2010/NEMO/OPA_SRC/BDY/bdy_oce.F90

    r1170 r2128  
    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/devukmo2010/NEMO/OPA_SRC/BDY/bdy_par.F90

    r1146 r2128  
    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/devukmo2010/NEMO/OPA_SRC/BDY/bdydta.F90

    r1715 r2128  
    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 
     29#if 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) == istep(nbdy_a) ) 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/devukmo2010/NEMO/OPA_SRC/BDY/bdydyn.F90

    r1740 r2128  
    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/devukmo2010/NEMO/OPA_SRC/BDY/bdyini.F90

    r1528 r2128  
    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/devukmo2010/NEMO/OPA_SRC/BDY/bdytides.F90

    r1715 r2128  
    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/devukmo2010/NEMO/OPA_SRC/BDY/bdyvol.F90

    r1739 r2128  
    8686      z_cflxemp = 0.e0 
    8787      zraur = 1.e0 / rau0 
    88       z_cflxemp = SUM ( emp(:,:) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur ) 
     88      z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur )  
    8989      IF( lk_mpp )   CALL mpp_sum( z_cflxemp )   ! sum over the global domain 
    9090 
  • branches/devukmo2010/NEMO/OPA_SRC/DIA/diafwb.F90

    r1581 r2128  
    3030   LOGICAL, PUBLIC, PARAMETER ::   lk_diafwb = .TRUE.    !: fresh water budget flag 
    3131 
    32    REAL(wp)               ::   a_emp ,          & 
     32   REAL(wp)               ::   a_fwf ,          & 
    3333      &                        a_sshb, a_sshn, a_salb, a_saln 
    3434   REAL(wp), DIMENSION(4) ::   a_flxi, a_flxo, a_temi, a_temo, a_sali, a_salo 
     
    5959      REAL(wp) ::  ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 
    6060      REAL(wp) ::  zt, zs, zu   
    61       REAL(wp) ::  zsm0, zempnew 
     61      REAL(wp) ::  zsm0, zfwfnew 
    6262      !!---------------------------------------------------------------------- 
    6363 
     
    6565      zsm0 = 34.72654 
    6666 
    67       ! To compute emp mean value mean emp 
     67      ! To compute fwf mean value mean fwf 
    6868 
    6969      IF( kt == nit000 ) THEN 
    7070 
    71          a_emp    = 0.e0 
     71         a_fwf    = 0.e0 
    7272         a_sshb   = 0.e0 ! valeur de ssh au debut de la simulation 
    7373         a_salb   = 0.e0 ! valeur de sal au debut de la simulation 
     
    8787      ENDIF 
    8888       
    89       a_emp    = SUM( e1t(:,:) * e2t(:,:) * emp   (:,:) * tmask_i(:,:) ) 
    90       IF( lk_mpp )   CALL mpp_sum( a_emp    )       ! sum over the global domain 
     89      a_fwf    = SUM( e1t(:,:) * e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) )  
     90      IF( lk_mpp )   CALL mpp_sum( a_fwf    )       ! sum over the global domain 
    9191 
    9292      IF( kt == nitend ) THEN 
     
    9595         zarea = 0.e0 
    9696         zvol  = 0.e0 
    97          zempnew = 0.e0 
     97         zfwfnew = 0.e0 
    9898         ! Mean sea level at nitend 
    9999         a_sshn = SUM( e1t(:,:) * e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) 
     
    115115          
    116116         ! Conversion in m3 
    117          a_emp    = a_emp * rdttra(1) * 1.e-3  
     117         a_fwf    = a_fwf * rdttra(1) * 1.e-3  
    118118          
    119          ! emp correction to bring back the mean ssh to zero 
    120          zempnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea 
     119         ! fwf correction to bring back the mean ssh to zero 
     120         zfwfnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea 
    121121 
    122122      ENDIF 
     
    362362         WRITE(inum,*) 
    363363         WRITE(inum,*)    'Net freshwater budget ' 
    364          WRITE(inum,9010) '  emp    = ',a_emp,   ' m3 =', a_emp   /(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv' 
     364         WRITE(inum,9010) '  fwf    = ',a_fwf,   ' m3 =', a_fwf   /(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv' 
    365365         WRITE(inum,*) 
    366366         WRITE(inum,9010) '  zarea =',zarea 
  • branches/devukmo2010/NEMO/OPA_SRC/DIA/diawri.F90

    r1792 r2128  
    346346!!$            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    347347!!$#endif 
    348          CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux"              , "Kg/m2/s",   &  ! emp 
     348         CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux"              , "Kg/m2/s",   &  ! (emp-rnf) 
    349349            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    350350!!$         CALL histdef( nid_T, "sorunoff", "Runoffs"                            , "Kg/m2/s",   &  ! runoffs 
    351351!!$            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    352          CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux"  , "kg/m2/s",   &  ! emps 
    353             &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    354          CALL histdef( nid_T, "sosalflx", "Surface Salt Flux"                  , "Kg/m2/s",   &  ! emps * sn 
     352         CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux"  , "kg/m2/s",   &  ! (emps-rnf) 
     353            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
     354         CALL histdef( nid_T, "sosalflx", "Surface Salt Flux"                  , "Kg/m2/s",   &  ! (emps-rnf) * sn 
    355355            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    356356         CALL histdef( nid_T, "sohefldo", "Net Downward Heat Flux"             , "W/m2"   ,   &  ! qns + qsr 
     
    498498!!$      CALL histwrite( nid_T, "sowaflep", it, fmass(:,:)    , ndim_hT, ndex_hT )   ! atmos=>ocean water flux 
    499499!!$#endif 
    500       CALL histwrite( nid_T, "sowaflup", it, emp           , ndim_hT, ndex_hT )   ! upward water flux 
     500      CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf )   , ndim_hT, ndex_hT )   ! upward water flux 
    501501!!$      CALL histwrite( nid_T, "sorunoff", it, runoff        , ndim_hT, ndex_hT )   ! runoff 
    502       CALL histwrite( nid_T, "sowaflcd", it, emps          , ndim_hT, ndex_hT )   ! c/d water flux 
    503       zw2d(:,:) = emps(:,:) * sn(:,:,1) * tmask(:,:,1) 
     502      CALL histwrite( nid_T, "sowaflcd", it, ( emps-rnf )  , ndim_hT, ndex_hT )   ! c/d water flux 
     503      zw2d(:,:) = ( emps(:,:) - rnf(:,:) ) * sn(:,:,1) * tmask(:,:,1) 
    504504      CALL histwrite( nid_T, "sosalflx", it, zw2d          , ndim_hT, ndex_hT )   ! c/d salt flux 
    505505      CALL histwrite( nid_T, "sohefldo", it, qns + qsr     , ndim_hT, ndex_hT )   ! total heat flux 
     
    700700      CALL histwrite( id_i, "vomecrty", kt, vn       , jpi*jpj*jpk, idex )    ! now j-velocity 
    701701      CALL histwrite( id_i, "vovecrtz", kt, wn       , jpi*jpj*jpk, idex )    ! now k-velocity 
    702       CALL histwrite( id_i, "sowaflup", kt, emp      , jpi*jpj    , idex )    ! freshwater budget 
     702      CALL histwrite( id_i, "sowaflup", kt, (emp-rnf), jpi*jpj    , idex )    ! freshwater budget 
    703703      CALL histwrite( id_i, "sohefldo", kt, qsr + qns, jpi*jpj    , idex )    ! total heat flux 
    704704      CALL histwrite( id_i, "soshfldo", kt, qsr      , jpi*jpj    , idex )    ! solar heat flux 
  • branches/devukmo2010/NEMO/OPA_SRC/DIA/diawri_dimg.h90

    r1685 r2128  
    4242    !!  level 2:  vtau(:,:) * vmask(:,:,1) meridional stress in N. m-2 
    4343    !!  level 3:  qsr + qns                total heat flux (W/m2) 
    44     !!  level 4:  emp (:,:)               E-P flux (mm/day) 
     44    !!  level 4:  ( emp (:,:)-rnf(:,:) )   E-P flux (mm/day) 
    4545    !!  level 5:  tb  (:,:,1)-sst          model SST -forcing sst (degree C) ! deprecated 
    4646    !!  level 6:  bsfb(:,:)         streamfunction (m**3/s) 
     
    5454    !!  level 14: qct(:,:)                 equivalent flux due to treshold SST 
    5555    !!  level 15: fbt(:,:)                 feedback term . 
    56     !!  level 16: emps(:,:)                concentration/dilution water flux 
     56    !!  level 16: ( emps(:,:) - rnf(:,:) ) concentration/dilution water flux 
    5757    !!  level 17: fsalt(:,:)               Ice=>ocean net freshwater 
    5858    !!  level 18: gps(:,:)                 the surface pressure (m). 
     
    167167       fsel(:,:,2 ) = fsel(:,:,2 ) + vtau(:,:) * vmask(:,:,1) 
    168168       fsel(:,:,3 ) = fsel(:,:,3 ) + qsr (:,:) + qns  (:,:)  
    169        fsel(:,:,4 ) = fsel(:,:,4 ) + emp (:,:) 
     169       fsel(:,:,4 ) = fsel(:,:,4 ) + ( emp(:,:)-rnf(:,:) )  
    170170       !        fsel(:,:,5 ) = fsel(:,:,5 ) + tb  (:,:,1)  !RB not used 
    171171       fsel(:,:,6 ) = fsel(:,:,6 ) + sshn(:,:)  
     
    179179       !        fsel(:,:,14) = fsel(:,:,14) + qct(:,:) 
    180180       !        fsel(:,:,15) = fsel(:,:,15) + fbt(:,:) 
    181        fsel(:,:,16) = fsel(:,:,16) + emps(:,:) 
     181       fsel(:,:,16) = fsel(:,:,16) + ( emps(:,:)-rnf(:,:) )  
    182182#ifdef key_diaspr    
    183183       fsel(:,:,18) = fsel(:,:,18) + gps(:,:)/g  
     
    242242          fsel(:,:,2 ) = vtau(:,:) * vmask(:,:,1) 
    243243          fsel(:,:,3 ) = (qsr (:,:) + qns (:,:)) * tmask(:,:,1) 
    244           fsel(:,:,4 ) = emp (:,:) * tmask(:,:,1) 
     244          fsel(:,:,4 ) = ( emp(:,:)-rnf(:,:) ) * tmask(:,:,1)  
    245245          !         fsel(:,:,5 ) = (tb  (:,:,1) - sf_sst(1)%fnow(:,:) ) *tmask(:,:,1) !RB not used 
    246246 
     
    255255          !         fsel(:,:,14) =  qct(:,:) 
    256256          !         fsel(:,:,15) =  fbt(:,:) 
    257           fsel(:,:,16) =  emps(:,:) * tmask(:,:,1) 
     257          fsel(:,:,16) = ( emps(:,:)-rnf(:,:) ) * tmask(:,:,1)  
    258258#ifdef key_diaspr            
    259259          fsel(:,:,18) =      gps(:,:) /g 
  • branches/devukmo2010/NEMO/OPA_SRC/DOM/closea.F90

    r1601 r2128  
    180180      INTEGER                     ::   ji, jj, jc, jn   ! dummy loop indices 
    181181      REAL(wp)                    ::   zze2 
    182       REAL(wp), DIMENSION (jpncs) ::   zemp 
     182      REAL(wp), DIMENSION (jpncs) ::   zfwf  
     183  
    183184      !!---------------------------------------------------------------------- 
    184185      ! 
     
    216217      !                                                   !--------------------! 
    217218      !                                                   !  update emp, emps  ! 
    218       zemp = 0.e0                                         !--------------------! 
     219      zfwf = 0.e0                                         !--------------------! 
    219220      DO jc = 1, jpncs 
    220221         DO jj = ncsj1(jc), ncsj2(jc) 
    221222            DO ji = ncsi1(jc), ncsi2(jc) 
    222                zemp(jc) = zemp(jc) + e1t(ji,jj) * e2t(ji,jj) * emp(ji,jj) * tmask_i(ji,jj) 
     223               zfwf(jc) = zfwf(jc) + e1t(ji,jj) * e2t(ji,jj) * ( emp(ji,jj)-rnf(ji,jj) ) * tmask_i(ji,jj)  
    223224            END DO   
    224225         END DO  
    225226      END DO 
    226       IF( lk_mpp )   CALL mpp_sum ( zemp(:) , jpncs )       ! mpp: sum over all the global domain 
     227      IF( lk_mpp )   CALL mpp_sum ( zfwf(:) , jpncs )       ! mpp: sum over all the global domain 
    227228 
    228229      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN      ! Black Sea case for ORCA_R2 configuration 
    229          zze2    = ( zemp(3) + zemp(4) ) / 2. 
    230          zemp(3) = zze2 
    231          zemp(4) = zze2 
     230         zze2    = ( zfwf(3) + zfwf(4) ) / 2. 
     231         zfwf(3) = zze2 
     232         zfwf(4) = zze2 
    232233      ENDIF 
    233234 
     
    236237         IF( ncstt(jc) == 0 ) THEN  
    237238            ! water/evap excess is shared by all open ocean 
    238             emp (:,:) = emp (:,:) + zemp(jc) / surf(jpncs+1) 
    239             emps(:,:) = emps(:,:) + zemp(jc) / surf(jpncs+1) 
     239            emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 
     240            emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 
    240241         ELSEIF( ncstt(jc) == 1 ) THEN  
    241242            ! Excess water in open sea, at outflow location, excess evap shared 
    242             IF ( zemp(jc) <= 0.e0 ) THEN  
     243            IF ( zfwf(jc) <= 0.e0 ) THEN  
    243244                DO jn = 1, ncsnr(jc) 
    244245                  ji = mi0(ncsir(jc,jn)) 
     
    246247                  IF (      ji > 1 .AND. ji < jpi   & 
    247248                      .AND. jj > 1 .AND. jj < jpj ) THEN  
    248                       emp (ji,jj) = emp (ji,jj) + zemp(jc) /   & 
     249                      emp (ji,jj) = emp (ji,jj) + zfwf(jc) /   & 
    249250                         (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 
    250                       emps(ji,jj) = emps(ji,jj) + zemp(jc) /   & 
     251                      emps(ji,jj) = emps(ji,jj) + zfwf(jc) /   & 
    251252                          (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 
    252253                  END IF  
    253254                END DO  
    254255            ELSE  
    255                 emp (:,:) = emp (:,:) + zemp(jc) / surf(jpncs+1) 
    256                 emps(:,:) = emps(:,:) + zemp(jc) / surf(jpncs+1) 
     256                emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 
     257                emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 
    257258            ENDIF 
    258259         ELSEIF( ncstt(jc) == 2 ) THEN  
     
    263264                  ji = mi0(ncsir(jc,jn)) 
    264265                  jj = mj0(ncsjr(jc,jn)) ! Location of outflow in open ocean 
    265                   emp (ji,jj) = emp (ji,jj) + zemp(jc)   & 
     266                  emp (ji,jj) = emp (ji,jj) + zfwf(jc)   & 
    266267                      / (FLOAT(ncsnr(jc)) *  e1t(ji,jj) * e2t(ji,jj) ) 
    267                   emps(ji,jj) = emps(ji,jj) + zemp(jc)   & 
     268                  emps(ji,jj) = emps(ji,jj) + zfwf(jc)   & 
    268269                      / (FLOAT(ncsnr(jc)) *  e1t(ji,jj) * e2t(ji,jj) ) 
    269270                END DO  
     
    273274         DO jj = ncsj1(jc), ncsj2(jc) 
    274275            DO ji = ncsi1(jc), ncsi2(jc) 
    275                emp (ji,jj) = emp (ji,jj) - zemp(jc) / surf(jc) 
    276                emps(ji,jj) = emps(ji,jj) - zemp(jc) / surf(jc) 
     276               emp (ji,jj) = emp (ji,jj) - zfwf(jc) / surf(jc) 
     277               emps(ji,jj) = emps(ji,jj) - zfwf(jc) / surf(jc) 
    277278            END DO   
    278279         END DO  
  • branches/devukmo2010/NEMO/OPA_SRC/DYN/divcur.F90

    r1792 r2128  
    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) 
     17   USE sbcrnf, ONLY  : rnf_dep, rnf_mod_dep  ! River runoff 
     18   USE phycst,  ONLY : rau0                  ! physical constant 
     19   USE sbc_oce, ONLY : ln_rnf, rnf           ! surface boundary condition: ocean 
    1820 
    1921   IMPLICIT NONE 
     
    7981      !!   9.0  !  03-08  (G. Madec)  merged of cur and div, free form, F90 
    8082      !!        !  05-01  (J. Chanut, A. Sellar) unstructured open boundaries 
     83      !! NEMO 3.3  !  2010-09  (D.Storkey and E.O'Dea) bug fixes for BDY module 
    8184      !!---------------------------------------------------------------------- 
    8285      !! * Arguments 
     
    8992      REAL(wp), DIMENSION(   jpi  ,1:jpj+2) ::   zwu   ! workspace 
    9093      REAL(wp), DIMENSION(-1:jpi+2,  jpj  ) ::   zwv   ! workspace 
     94      REAL(wp) ::  zraur,  zdep   ! temporary scalar 
    9195      !!---------------------------------------------------------------------- 
    9296 
     
    131135            IF( lp_obc_south )   hdivn(nis0  :nis1  ,njs0  :njs1  ,jk) = 0.e0      ! south 
    132136         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 
    141137#endif          
    142138         IF( .NOT. AGRIF_Root() ) THEN 
     
    244240      END DO                                           !   End of slab 
    245241      !                                                ! =============== 
     242 
     243      IF ( ln_rnf ) THEN 
     244      zraur = 1. / rau0 
     245        DO ji=1,jpi 
     246          DO jj=1,jpj 
     247            zdep = 1. / rnf_dep(ji,jj) 
     248            DO jk=1,rnf_mod_dep(ji,jj) 
     249              hdivn(ji,jj,jk) = hdivn(ji,jj,jk) - rnf(ji,jj)*zraur*zdep 
     250            ENDDO 
     251          ENDDO 
     252        ENDDO 
     253      ENDIF 
    246254       
    247255      ! 4. Lateral boundary conditions on hdivn and rotn 
     
    301309      !! * Local declarations 
    302310      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
     311      REAL(wp) ::  zraur,  zdep   ! temporary scalar 
    303312      !!---------------------------------------------------------------------- 
    304313 
     
    344353         ENDIF 
    345354#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         
    354355         IF( .NOT. AGRIF_Root() ) THEN 
    355356            IF ((nbondi ==  1).OR.(nbondi == 2)) hdivn(nlci-1 , :     ,jk) = 0.e0      ! east 
     
    372373      END DO                                           !   End of slab 
    373374      !                                                ! =============== 
    374        
     375 
     376      IF ( ln_rnf ) THEN 
     377      zraur = 1. / rau0 
     378        DO ji=1,jpi 
     379          DO jj=1,jpj 
     380            zdep = 1. / rnf_dep(ji,jj) 
     381            DO jk=1,rnf_mod_dep(ji,jj) 
     382              hdivn(ji,jj,jk) = hdivn(ji,jj,jk) - rnf(ji,jj)*zraur*zdep 
     383            ENDDO 
     384          ENDDO 
     385        ENDDO 
     386      ENDIF 
     387 
    375388      ! 4. Lateral boundary conditions on hdivn and rotn 
    376389      ! ---------------------------------=======---====== 
  • branches/devukmo2010/NEMO/OPA_SRC/DYN/dynldf.F90

    r1152 r2128  
    6969      CASE ( 2 )    ;   CALL dyn_ldf_bilap  ( kt )      ! iso-level bilaplacian 
    7070      CASE ( 3 )    ;   CALL dyn_ldf_bilapg ( kt )      ! s-coord. horizontal bilaplacian 
     71      CASE ( 4 )                                        ! iso-level laplacian + bilaplacian 
     72         CALL dyn_ldf_lap    ( kt ) 
     73         CALL dyn_ldf_bilap  ( kt ) 
     74      CASE ( 5 )                                        ! rotated laplacian + bilaplacian (s-coord) 
     75         CALL dyn_ldf_iso    ( kt ) 
     76         CALL dyn_ldf_bilapg ( kt ) 
    7177      ! 
    7278      CASE ( -1 )                                       ! esopa: test all possibility with control print 
     
    8389                        CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf3 - Ua: ', mask1=umask,   & 
    8490            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     91      ! 
     92      CASE ( -2 )                                       ! neither laplacian nor bilaplacian schemes used 
     93         IF( kt == nit000 ) THEN 
     94            IF(lwp) WRITE(numout,*) 
     95            IF(lwp) WRITE(numout,*) 'dyn_ldf : no lateral diffusion on momentum setup' 
     96            IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     97         ENDIF 
    8598      END SELECT 
    8699 
     
    124137      IF( ln_dynldf_lap   )   ioptio = ioptio + 1 
    125138      IF( ln_dynldf_bilap )   ioptio = ioptio + 1 
    126       IF( ioptio /= 1 ) CALL ctl_stop( '          use ONE of the 2 lap/bilap operator type on dynamics' ) 
     139      IF( ioptio <  1 ) CALL ctl_warn( '          neither laplacian nor bilaplacian operator set for dynamics' ) 
    127140      ioptio = 0 
    128141      IF( ln_dynldf_level )   ioptio = ioptio + 1 
     
    144157            IF ( ln_dynldf_iso   )   nldf = 1      ! isoneutral (   rotation) 
    145158         ENDIF 
    146          IF ( ln_sco ) THEN             ! z-coordinate 
     159         IF ( ln_sco ) THEN             ! s-coordinate 
    147160            IF ( ln_dynldf_level )   nldf = 0      ! iso-level  (no rotation) 
    148161            IF ( ln_dynldf_hor   )   nldf = 1      ! horizontal (   rotation) 
     
    162175            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
    163176         ENDIF 
    164          IF ( ln_sco ) THEN             ! z-coordinate 
     177         IF ( ln_sco ) THEN             ! s-coordinate 
    165178            IF ( ln_dynldf_level )   nldf = 2      ! iso-level  (no rotation) 
    166179            IF ( ln_dynldf_hor   )   nldf = 3      ! horizontal (   rotation) 
     
    169182      ENDIF 
    170183       
     184      IF( ln_dynldf_lap .AND. ln_dynldf_bilap ) THEN  ! mixed laplacian and bilaplacian operators 
     185         IF ( ln_zco ) THEN                ! z-coordinate 
     186            IF ( ln_dynldf_level )   nldf = 4      ! iso-level  (no rotation) 
     187            IF ( ln_dynldf_hor   )   nldf = 4      ! horizontal (no rotation) 
     188            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
     189         ENDIF 
     190         IF ( ln_zps ) THEN             ! z-coordinate 
     191            IF ( ln_dynldf_level )   ierr = 1      ! iso-level not allowed  
     192            IF ( ln_dynldf_hor   )   nldf = 4      ! horizontal (no rotation) 
     193            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
     194         ENDIF 
     195         IF ( ln_sco ) THEN             ! s-coordinate 
     196            IF ( ln_dynldf_level )   nldf = 4      ! iso-level  (no rotation) 
     197            IF ( ln_dynldf_hor   )   nldf = 5      ! horizontal (   rotation) 
     198            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation) 
     199         ENDIF 
     200      ENDIF 
     201 
    171202      IF( lk_esopa )                 nldf = -1     ! esopa test 
    172203 
     
    179210      IF(lwp) THEN 
    180211         WRITE(numout,*) 
     212         IF( nldf == -2 )   WRITE(numout,*) '              neither laplacian nor bilaplacian schemes used' 
    181213         IF( nldf == -1 )   WRITE(numout,*) '              ESOPA test All scheme used' 
    182214         IF( nldf ==  0 )   WRITE(numout,*) '              laplacian operator' 
    183          IF( nldf ==  1 )   WRITE(numout,*) '              Rotated laplacian operator' 
     215         IF( nldf ==  1 )   WRITE(numout,*) '              rotated laplacian operator' 
    184216         IF( nldf ==  2 )   WRITE(numout,*) '              bilaplacian operator' 
    185          IF( nldf ==  3 )   WRITE(numout,*) '              Rotated bilaplacian' 
     217         IF( nldf ==  3 )   WRITE(numout,*) '              rotated bilaplacian' 
     218         IF( nldf ==  4 )   WRITE(numout,*) '              laplacian and bilaplacian operators' 
     219         IF( nldf ==  5 )   WRITE(numout,*) '              rotated laplacian and bilaplacian operators' 
    186220      ENDIF 
    187221      ! 
  • branches/devukmo2010/NEMO/OPA_SRC/DYN/dynldf_lap.F90

    r1152 r2128  
    7878      IF( kt == nit000 ) THEN 
    7979         IF(lwp) WRITE(numout,*) 
    80          IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacien) operator' 
     80         IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacian) operator' 
    8181         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
    8282      ENDIF 
  • branches/devukmo2010/NEMO/OPA_SRC/DYN/dynnxt.F90

    r1876 r2128  
    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/devukmo2010/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r1876 r2128  
    8585      !!         where (spgu,spgv) are given by: 
    8686      !!            spgu = vertical sum[ e3u (ub+ 2 rdt ua ) ] 
    87       !!                 - grav 2 rdt hu /e1u di[sshn + emp] 
     87      !!                 - grav 2 rdt hu /e1u di[sshn + (emp-rnf)] 
    8888      !!            spgv = vertical sum[ e3v (vb+ 2 rdt va) ] 
    89       !!                 - grav 2 rdt hv /e2v dj[sshn + emp] 
     89      !!                 - grav 2 rdt hv /e2v dj[sshn + (emp-rnf)] 
    9090      !!         and define the first guess from previous computation : 
    9191      !!            zbtd = btda 
  • branches/devukmo2010/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r1779 r2128  
    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 
     
    379380         DO jj = 2, jpjm1                                      ! leap-frog on ssh_e 
    380381            DO ji = fs_2, fs_jpim1   ! vector opt. 
    381                ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * emp(ji,jj) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1) 
     382               ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * ( emp(ji,jj)-rnf(ji,jj) ) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1)  
    382383            END DO 
    383384         END DO 
  • branches/devukmo2010/NEMO/OPA_SRC/DYN/sshwzv.F90

    r1792 r2128  
    55   !!============================================================================== 
    66   !! History :  3.1  !  2009-02  (G. Madec, M. Leclair)  Original code 
     7   !!            3.3  !  2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface 
     8   !!            3.3  !  2010-09  (D.Storkey and E.O'Dea) bug fixes for BDY module 
    79   !!---------------------------------------------------------------------- 
    810 
     
    2527   USE obc_par         ! open boundary cond. parameter 
    2628   USE obc_oce 
     29   USE bdy_oce 
    2730   USE diaar5, ONLY :   lk_diaar5 
    2831   USE iom 
     32   USE sbcrnf, ONLY  : rnf_dep, rnf_mod_dep  ! River runoff  
     33#if defined key_asminc    
     34   USE asminc          ! Assimilation increment 
     35#endif 
    2936 
    3037   IMPLICIT NONE 
     
    134141         hvr(:,:) = vmask(:,:,1) / ( hv(:,:) + 1.e0 - vmask(:,:,1) ) 
    135142         ! 
     143         DO jj=1,jpj   
     144           DO ji=1,jpi   
     145             rnf_dep(ji,jj)=0  
     146             DO jk=1,rnf_mod_dep(ji,jj)                          ! recalculates rnf_dep to be the depth  
     147               rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk)    ! in metres to the bottom of the relevant grid box  
     148             ENDDO  
     149           ENDDO  
     150         ENDDO  
     151         !  
    136152      ENDIF 
    137153 
     
    161177         CALL lbc_lnk( ssha, 'T', 1. )  ! absolutly compulsory !! (jmm) 
    162178      ENDIF 
     179#endif 
     180 
     181#if defined key_bdy 
     182      ssha(:,:) = ssha(:,:) * bdytmask(:,:) 
     183      CALL lbc_lnk( ssha, 'T', 1. )  
    163184#endif 
    164185 
     
    183204      ENDIF 
    184205 
     206! Include the IAU weighted SSH increment 
     207#if defined key_asminc 
     208      IF( ( lk_asminc ).AND.( ln_sshinc ).AND.( ln_asmiau ) ) THEN 
     209         CALL ssh_asm_inc( kt ) 
     210         ssha(:,:) = ssha(:,:) + z2dt * ssh_iau(:,:) 
     211      ENDIF 
     212#endif 
     213 
    185214      !                                           !------------------------------! 
    186215      !                                           !     Now Vertical Velocity    ! 
     
    191220              &                    - (  fse3t_a(:,:,jk)                   & 
    192221              &                       - fse3t_b(:,:,jk) ) * tmask(:,:,jk) / z2dt 
     222#if defined key_bdy 
     223         wn(:,:,jk) = wn(:,:,jk) * bdytmask(:,:) 
     224#endif 
    193225      END DO 
    194226      ! 
  • branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn.F90

    r1601 r2128  
    6767      NAMELIST/namdyn_ldf/ ln_dynldf_lap  , ln_dynldf_bilap,                  & 
    6868         &                 ln_dynldf_level, ln_dynldf_hor  , ln_dynldf_iso,   & 
    69          &                 rn_ahm_0       , rn_ahmb_0 
     69         &                 rn_ahm_0       , rn_ahmb_0      , rn_ahm_0_blp 
    7070      !!---------------------------------------------------------------------- 
    7171 
     
    7878         WRITE(numout,*) '~~~~~~~' 
    7979         WRITE(numout,*) '   Namelist nam_dynldf : set lateral mixing parameters' 
    80          WRITE(numout,*) '      laplacian operator          ln_dynldf_lap   = ', ln_dynldf_lap 
    81          WRITE(numout,*) '      bilaplacian operator        ln_dynldf_bilap = ', ln_dynldf_bilap 
    82          WRITE(numout,*) '      iso-level                   ln_dynldf_level = ', ln_dynldf_level 
    83          WRITE(numout,*) '      horizontal (geopotential)   ln_dynldf_hor   = ', ln_dynldf_hor 
    84          WRITE(numout,*) '      iso-neutral                 ln_dynldf_iso   = ', ln_dynldf_iso 
    85          WRITE(numout,*) '      horizontal eddy viscosity   rn_ahm_0        = ', rn_ahm_0 
    86          WRITE(numout,*) '      background viscosity        rn_ahmb_0       = ', rn_ahmb_0 
    87       ENDIF 
    88  
    89       ahm0  = rn_ahm_0                  ! OLD namelist variables defined from DOCTOR namelist variables 
    90       ahmb0 = rn_ahmb_0 
     80         WRITE(numout,*) '      laplacian operator                      ln_dynldf_lap   = ', ln_dynldf_lap 
     81         WRITE(numout,*) '      bilaplacian operator                    ln_dynldf_bilap = ', ln_dynldf_bilap 
     82         WRITE(numout,*) '      iso-level                               ln_dynldf_level = ', ln_dynldf_level 
     83         WRITE(numout,*) '      horizontal (geopotential)               ln_dynldf_hor   = ', ln_dynldf_hor 
     84         WRITE(numout,*) '      iso-neutral                             ln_dynldf_iso   = ', ln_dynldf_iso 
     85         WRITE(numout,*) '      horizontal laplacian eddy viscosity     rn_ahm_0        = ', rn_ahm_0 
     86         WRITE(numout,*) '      background viscosity                    rn_ahmb_0       = ', rn_ahmb_0 
     87         WRITE(numout,*) '      horizontal bilaplacian eddy viscosity   rn_ahm_0        = ', rn_ahm_0 
     88 
     89      ENDIF 
     90 
     91      ahm0     = rn_ahm_0                  ! OLD namelist variables defined from DOCTOR namelist variables 
     92      ahmb0    = rn_ahmb_0 
     93      ahm0_blp = rn_ahm_0_blp 
    9194 
    9295      ! ... check of lateral diffusive operator on tracers 
     
    117120      IF( ln_dynldf_bilap ) THEN 
    118121         IF(lwp) WRITE(numout,*) '   biharmonic momentum diffusion' 
    119          IF( ahm0 > 0 .AND. .NOT. lk_esopa )   CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 
     122         IF( ahm0_blp == 0.0 ) ahm0_blp = ahm0       ! Old namelist method: bilap specified with ahm0 
     123         IF( .NOT. ln_dynldf_lap ) ahm0 = ahm0_blp   ! Allow spatially varying coefs, which use ahm0 as input 
     124         IF( ahm0_blp > 0 .AND. .NOT. lk_esopa )   CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 
    120125      ELSE 
    121126         IF(lwp) WRITE(numout,*) '   harmonic momentum diff. (default)' 
  • branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_c1d.h90

    r1152 r2128  
    1717      !! ** Method  :   1D eddy viscosity coefficients ( depth ) 
    1818      !!      ahm3, ahm4 never used 
    19       !!      biharmonic or harmonic operator : ahm1=ahm2 defined at T-level 
     19      !!      harmonic   operator : ahm1 defined at T-level 
     20      !!      biharmonic operator : ahm2 defined at T-level 
    2021      !!      isopycnal or geopotential harmonic operator 
    2122      !!                                      : ahm1 defined at T-level 
     
    2728 
    2829      !! * Local variables 
    29       REAL(wp) ::   zdam, zwam, zm00, zm01, zmhf, zmhs 
     30      REAL(wp) ::    zdam,  zwam,  zm00,  zm01,  zmhf,  zmhs 
     31      REAL(wp) ::   zdam2, zwam2, zm200, zm201, zmh2f, zmh2s 
    3032      REAL(wp) ::   zahmf, zahms 
    3133      !!---------------------------------------------------------------------- 
     
    3638      IF(lwp) WRITE(numout,*) 
    3739 
    38       ! Set ahm1=ahm2   (always at t-level) 
     40      ! Set ahm1 for laplacian     (always at t-level) 
    3941      ! ============= 
    4042      ! (USER: modify ahm1 following your desiderata) 
     
    5355      zmhs = zahms-zmhf * zm00 
    5456 
    55       ! set ahm1=ahm2 at T-level 
     57      ! Set ahm2 for bilaplacian   (always at t-level) 
     58      ! ============= 
     59      ! (USER: modify ahm2 following your desiderata) 
     60 
     61      ! initialization of the profile 
     62      ! ahms, ahmf: surface and bottom values 
     63      zahm2s = ahm0_blp 
     64      zahm2f = ahm0_blp/4. 
     65      ! zdam, zwam: depth of the inflection pt and width of inflection 
     66      zdam2  = -300. 
     67      zwam2  =  300. 
     68      ! computation coefficients 
     69      zm200 = TANH( (0-zdam2)/zwam2 ) 
     70      zm201 = TANH( (-fsdept(1,1,jpk)-zdam2)/zwam2 ) 
     71      zmh2f = (zahm2s-zahm2f)/(zm200-zm201) 
     72      zmh2s = zahm2s-zmh2f * zm00 
     73 
     74 
     75      ! set ahm1 and ahm2 at T-level 
    5676      DO jk = 1, jpk 
    57          ahm1(jk) = zmhs + zmhf * TANH( (-fsdept(1,1,jk)-zdam) / zwam ) 
    58          ahm2(jk) = ahm1(jk) 
     77         ahm1(jk) = zmhs  + zmhf  * TANH( (-fsdept(1,1,jk)-zdam ) / zwam ) 
     78         ahm2(jk) = zmh2s + zmh2f * TANH( (-fsdept(1,1,jk)-zdam2) / zwam2 ) 
    5979      END DO 
    6080 
     
    6282      IF(lwp .AND. ld_print ) THEN 
    6383         WRITE(numout,*) 
    64          WRITE(numout,*) '         ahm profile : ' 
     84         WRITE(numout,*) '         ahm profile (laplacian): ' 
    6585         WRITE(numout,*) 
    6686         WRITE(numout,9100) 
    6787         DO jk = 1, jpk 
    6888            WRITE(numout,9110) jk, ahm1(jk), fsdept(1,1,jk) 
     89         END DO 
     90         WRITE(numout,*) 
     91         WRITE(numout,*) '         ahm profile (bilaplacian): ' 
     92         WRITE(numout,*) 
     93         WRITE(numout,9100) 
     94         DO jk = 1, jpk 
     95            WRITE(numout,9110) jk, ahm2(jk), fsdept(1,1,jk) 
    6996         END DO 
    7097      ENDIF 
  • branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90

    r1694 r2128  
    2727      !!           iso-model level : ahm3, ahm4 not used 
    2828      !! 
    29       !!       biharmonic operator : ahm1 is defined at u-point 
    30       !!                             ahm2 is defined at v-point 
    31       !!                           : ahm3, ahm4 not used 
     29      !!       biharmonic operator : ahm3 is defined at u-point 
     30      !!                             ahm4 is defined at v-point 
     31      !!                           : ahm1, ahm2 not used 
    3232      !! 
    3333      !!---------------------------------------------------------------------- 
     
    102102         IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 
    103103 
    104          za00 = ahm0 / ( zd_max * zd_max * zd_max ) 
     104         za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 
    105105         DO jj = 1, jpj 
    106106            DO ji = 1, jpi 
  • branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90

    r1694 r2128  
    122122         IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 
    123123 
    124          za00 = ahm0 / ( zd_max * zd_max * zd_max ) 
     124         za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 
    125125         DO jj = 1, jpj 
    126126            DO ji = 1, jpi 
  • branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_oce.F90

    r1601 r2128  
    1717   LOGICAL , PUBLIC ::   ln_dynldf_hor   = .TRUE.      !: horizontal (geopotential) direction 
    1818   LOGICAL , PUBLIC ::   ln_dynldf_iso   = .FALSE.     !: iso-neutral direction 
    19    REAL(wp), PUBLIC ::   rn_ahm_0        = 40000._wp   !: lateral eddy viscosity (m2/s) 
    20    REAL(wp), PUBLIC ::   rn_ahmb_0       =     0._wp   !: lateral background eddy viscosity (m2/s) 
     19   REAL(wp), PUBLIC ::   rn_ahm_0        = 40000._wp   !: lateral laplacian eddy viscosity (m2/s) 
     20   REAL(wp), PUBLIC ::   rn_ahmb_0       =     0._wp   !: lateral laplacian background eddy viscosity (m2/s) 
     21   REAL(wp), PUBLIC ::   rn_ahm_0_blp    =     0._wp   !: lateral bilaplacian eddy viscosity (m4/s) 
    2122 
    22    REAL(wp), PUBLIC ::   ahm0, ahmb0                 ! OLD namelist names 
     23   REAL(wp), PUBLIC ::   ahm0, ahmb0, ahm0_blp       ! OLD namelist names 
    2324 
    2425#if defined key_dynldf_c3d 
  • branches/devukmo2010/NEMO/OPA_SRC/LDF/ldfdyn_substitute.h90

    r1152 r2128  
    1010   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    1111   !!---------------------------------------------------------------------- 
     12   !! 
     13   !! fsahmt, fsahmf - used for laplaian operator only 
     14   !! fsahmu, fsahmv - used for bilaplacian operator only 
     15   !! 
    1216#if defined key_dynldf_c3d 
    1317!   ' key_dynldf_c3d' :                  3D coefficient 
     
    2630#  define   fsahmt(i,j,k)    ahm1(k) 
    2731#  define   fsahmf(i,j,k)    ahm1(k) 
    28 #  define   fsahmu(i,j,k)    ahm1(k) 
    29 #  define   fsahmv(i,j,k)    ahm1(k) 
     32#  define   fsahmu(i,j,k)    ahm2(k) 
     33#  define   fsahmv(i,j,k)    ahm2(k) 
    3034#else 
    3135!   default option :               Constant coefficient 
    3236#  define   fsahmt(i,j,k)   ahm0 
    3337#  define   fsahmf(i,j,k)   ahm0 
    34 #  define   fsahmu(i,j,k)   ahm0 
    35 #  define   fsahmv(i,j,k)   ahm0 
     38#  define   fsahmu(i,j,k)   ahm0_blp 
     39#  define   fsahmv(i,j,k)   ahm0_blp 
    3640#endif 
  • branches/devukmo2010/NEMO/OPA_SRC/OBC/obcvol.F90

    r1739 r2128  
    9797      ! --------------------------------------------------------------------------- 
    9898 
    99       zCflxemp = SUM ( emp(:,:)*obctmsk(:,:)* e1t(:,:) * e2t(:,:)  / rau0 ) 
     99      zCflxemp = SUM ( ( emp(:,:)-rnf(:,:) )*obctmsk(:,:)* e1t(:,:) * e2t(:,:)  / rau0 )  
    100100 
    101101      IF( lk_mpp )   CALL mpp_sum( zCflxemp )   ! sum over the global domain 
  • branches/devukmo2010/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r1705 r2128  
    4949   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   emp       !: freshwater budget: volume flux               [Kg/m2/s] 
    5050   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   emps      !: freshwater budget: concentration/dillution   [Kg/m2/s] 
     51   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   rnf       !: river runoff   [Kg/m2/s]   
    5152   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   emp_tot   !: total evaporation - (liquid + solid) precpitation over oce and ice 
    5253   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   tprecip   !: total precipitation           [Kg/m2/s] 
  • branches/devukmo2010/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r1822 r2128  
    3131   REAL(wp) ::   a_fwb_b            ! annual domain averaged freshwater budget 
    3232   REAL(wp) ::   a_fwb              ! for 2 year before (_b) and before year. 
    33    REAL(wp) ::   empold             ! empold to be suppressed 
     33   REAL(wp) ::   fwfold             ! fwfold to be suppressed 
    3434   REAL(wp) ::   area               ! global mean ocean surface (interior domain) 
    3535 
     
    6565      INTEGER  ::   inum                  ! temporary logical unit 
    6666      INTEGER  ::   ikty, iyear           !  
    67       REAL(wp) ::   z_emp, z_emp_nsrf, zsum_emp, zsum_erp       ! temporary scalars 
     67      REAL(wp) ::   z_fwf, z_fwf_nsrf, zsum_fwf, zsum_erp       ! temporary scalars 
    6868      REAL(wp) ::   zsurf_neg, zsurf_pos, zsurf_tospread 
    6969      REAL(wp), DIMENSION(jpi,jpj) ::   ztmsk_neg, ztmsk_pos, ztmsk_tospread 
     
    7979            IF( kn_fwb == 1 )   WRITE(numout,*) '          instantaneously set to zero' 
    8080            IF( kn_fwb == 2 )   WRITE(numout,*) '          adjusted from previous year budget' 
    81             IF( kn_fwb == 3 )   WRITE(numout,*) '          emp set to zero and spread out over erp area' 
     81            IF( kn_fwb == 3 )   WRITE(numout,*) '          fwf set to zero and spread out over erp area' 
    8282            ! 
    8383            IF( kn_fwb == 3 .AND. nn_sssr /= 2 )   & 
     
    101101          
    102102      ! 
    103       CASE ( 1 )                               ! global mean emp set to zero 
     103      CASE ( 1 )                               ! global mean fwf set to zero 
    104104         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    105             z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 
    106             IF( lk_mpp )   CALL  mpp_sum( z_emp    )   ! sum over the global domain 
    107             emp (:,:) = emp (:,:) - z_emp 
    108             emps(:,:) = emps(:,:) - z_emp 
    109          ENDIF 
    110          ! 
    111       CASE ( 2 )                               ! emp budget adjusted from the previous year 
     105            z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area  
     106            IF( lk_mpp )   CALL  mpp_sum( z_fwf    )   ! sum over the global domain  
     107            emp (:,:) = emp (:,:) - z_fwf  
     108            emps(:,:) = emps(:,:) - z_fwf  
     109         ENDIF 
     110         ! 
     111      CASE ( 2 )                               ! fwf budget adjusted from the previous year 
    112112         ! initialisation 
    113113         IF( kt == nit000 ) THEN 
    114             ! Read the corrective factor on precipitations (empold) 
     114            ! Read the corrective factor on precipitations (fwfold) 
    115115            CALL ctl_opn( inum, 'EMPave_old.dat', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    116116            READ ( inum, "(24X,I8,2ES24.16)" ) iyear, a_fwb_b, a_fwb 
    117117            CLOSE( inum ) 
    118             empold = a_fwb                  ! current year freshwater budget correction 
     118            fwfold = a_fwb                  ! current year freshwater budget correction 
    119119            !                               ! estimate from the previous year budget 
    120120            IF(lwp)WRITE(numout,*) 
    121             IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear  , ' freshwater budget correction = ', empold 
     121            IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear  , ' freshwater budget correction = ', fwfold 
    122122            IF(lwp)WRITE(numout,*)'          year = ',iyear-1, ' freshwater budget read       = ', a_fwb 
    123123            IF(lwp)WRITE(numout,*)'          year = ',iyear-2, ' freshwater budget read       = ', a_fwb_b 
    124124         ENDIF    
    125125         !  
    126          ! Update empold if new year start 
     126         ! Update fwfold if new year start 
    127127         ikty = 365 * 86400 / rdttra(1)    !!bug  use of 365 days leap year or 360d year !!!!!!! 
    128128         IF( MOD( kt, ikty ) == 0 ) THEN 
     
    132132            a_fwb   = a_fwb * 1.e+3 / ( area * 86400. * 365. )     ! convert in Kg/m3/s = mm/s 
    133133!!gm        !                                                      !!bug 365d year  
    134             empold =  a_fwb                 ! current year freshwater budget correction 
     134            fwfold =  a_fwb                 ! current year freshwater budget correction 
    135135            !                               ! estimate from the previous year budget 
    136136         ENDIF 
     
    138138         ! correct the freshwater fluxes 
    139139         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    140             emp (:,:) = emp (:,:) + empold 
    141             emps(:,:) = emps(:,:) + empold 
    142          ENDIF 
    143          ! 
    144          ! save empold value in a file 
     140            emp (:,:) = emp (:,:) + fwfold 
     141            emps(:,:) = emps(:,:) + fwfold 
     142         ENDIF 
     143         ! 
     144         ! save fwfold value in a file 
    145145         IF( kt == nitend .AND. lwp ) THEN 
    146146            CALL ctl_opn( inum, 'EMPave.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 
     
    149149         ENDIF 
    150150         ! 
    151       CASE ( 3 )                               ! global emp set to zero and spread out over erp area 
     151      CASE ( 3 )                               ! global fwf set to zero and spread out over erp area 
    152152         ! 
    153153         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
     
    161161            zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:) ) 
    162162         
    163             ! emp global mean  
    164             z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 
     163            ! fwf global mean  
     164            z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area  
    165165            ! 
    166             IF( lk_mpp )   CALL  mpp_sum( z_emp ) 
     166            IF( lk_mpp )   CALL  mpp_sum( z_fwf ) 
    167167            IF( lk_mpp )   CALL  mpp_sum( zsurf_neg ) 
    168168            IF( lk_mpp )   CALL  mpp_sum( zsurf_pos ) 
    169169             
    170             IF( z_emp < 0.e0 ) THEN 
     170            IF( z_fwf < 0.e0 ) THEN 
    171171                ! to spread out over >0 erp area to increase evaporation damping process 
    172172                zsurf_tospread = zsurf_pos 
     
    178178            ENDIF 
    179179 
    180             ! emp global mean over <0 or >0 erp area 
    181             zsum_emp = SUM( e1e2_i(:,:) * z_emp ) 
    182             IF( lk_mpp )   CALL  mpp_sum( zsum_emp ) 
    183             z_emp_nsrf =  zsum_emp / ( zsurf_tospread + rsmall ) 
     180            ! fwf global mean over <0 or >0 erp area 
     181            zsum_fwf = SUM( e1e2_i(:,:) * z_fwf ) 
     182            IF( lk_mpp )   CALL  mpp_sum( zsum_fwf ) 
     183            z_fwf_nsrf =  zsum_fwf / ( zsurf_tospread + rsmall ) 
    184184            ! weight to respect erp field 2D structure  
    185185            zsum_erp = SUM( ztmsk_tospread(:,:) * erp(:,:) * e1e2_i(:,:) ) 
     
    188188 
    189189            ! final correction term to apply 
    190             zerp_cor(:,:) = -1. * z_emp_nsrf * zsurf_tospread * z_wgt(:,:) 
     190            zerp_cor(:,:) = -1. * z_fwf_nsrf * zsurf_tospread * z_wgt(:,:) 
    191191 
    192192            CALL lbc_lnk( zerp_cor, 'T', 1. ) 
     
    197197             
    198198            IF( nprint == 1 .AND. lwp ) THEN 
    199                IF( z_emp < 0.e0 ) THEN 
    200                   WRITE(numout,*)'       z_emp < 0' 
     199               IF( z_fwf < 0.e0 ) THEN 
     200                  WRITE(numout,*)'       z_fwf < 0' 
    201201                  WRITE(numout,*)'       SUM(erp+)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
    202202               ELSE 
    203                    WRITE(numout,*)'      z_emp >= 0' 
     203                   WRITE(numout,*)'      z_fwf >= 0' 
    204204                   WRITE(numout,*)'      SUM(erp-)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
    205205               ENDIF 
    206                WRITE(numout,*)'      SUM(empG)        = ', SUM( z_emp*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
    207                WRITE(numout,*)'      z_emp            = ', z_emp      ,' mm.s-1' 
    208                WRITE(numout,*)'      z_emp_nsrf       = ', z_emp_nsrf ,' mm.s-1' 
     206               WRITE(numout,*)'      SUM(empG)        = ', SUM( z_fwf*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
     207               WRITE(numout,*)'      z_fwf            = ', z_fwf      ,' mm.s-1' 
     208               WRITE(numout,*)'      z_fwf_nsrf       = ', z_fwf_nsrf ,' mm.s-1' 
    209209               WRITE(numout,*)'      MIN(zerp_cor)    = ', MINVAL(zerp_cor)  
    210210               WRITE(numout,*)'      MAX(zerp_cor)    = ', MAXVAL(zerp_cor)  
  • branches/devukmo2010/NEMO/OPA_SRC/SBC/sbcmod.F90

    r1792 r2128  
    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 
     
    237241      ! 
    238242      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 
    239          CALL iom_put( "emp"    , emp       )                   ! upward water flux 
    240          CALL iom_put( "emps"   , emps      )                   ! c/d water flux 
    241          CALL iom_put( "qns+qsr", qns + qsr )                   ! total heat flux   (caution if ln_dm2dc=true, to be  
    242          CALL iom_put( "qns"    , qns       )                   ! solar heat flux    moved after the call to iom_setkt) 
    243          CALL iom_put( "qsr"    ,       qsr )                   ! solar heat flux    moved after the call to iom_setkt) 
     243         CALL iom_put( "emp-rnf"  , (emp-rnf)  )                ! upward water flux  
     244         CALL iom_put( "emps-rnf" , (emps-rnf) )                ! c/d water flux  
     245         CALL iom_put( "qns+qsr"  , qns + qsr  )                ! total heat flux   (caution if ln_dm2dc=true, to be  
     246         CALL iom_put( "qns"      , qns        )                ! solar heat flux    moved after the call to iom_setkt) 
     247         CALL iom_put( "qsr"      ,       qsr  )                ! solar heat flux    moved after the call to iom_setkt) 
    244248         IF(  nn_ice > 0 )   CALL iom_put( "ice_cover", fr_i )  ! ice fraction  
    245249      ENDIF 
     
    254258      IF(ln_ctl) THEN         ! print mean trends (used for debugging) 
    255259         CALL prt_ctl(tab2d_1=fr_i   , clinfo1=' fr_i - : ', mask1=tmask, ovlap=1 ) 
    256          CALL prt_ctl(tab2d_1=emp    , clinfo1=' emp  - : ', mask1=tmask, ovlap=1 ) 
    257          CALL prt_ctl(tab2d_1=emps   , clinfo1=' emps - : ', mask1=tmask, ovlap=1 ) 
     260         CALL prt_ctl(tab2d_1=(emp-rnf) , clinfo1=' emp-rnf  - : ', mask1=tmask, ovlap=1 )  
     261         CALL prt_ctl(tab2d_1=(emps-rnf), clinfo1=' emps-rnf - : ', mask1=tmask, ovlap=1 )  
    258262         CALL prt_ctl(tab2d_1=qns    , clinfo1=' qns  - : ', mask1=tmask, ovlap=1 ) 
    259263         CALL prt_ctl(tab2d_1=qsr    , clinfo1=' qsr  - : ', mask1=tmask, ovlap=1 ) 
  • branches/devukmo2010/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r1730 r2128  
    3232   TYPE(FLD_N)       , PUBLIC ::   sn_rnf                 !: information about the runoff file to be read 
    3333   TYPE(FLD_N)       , PUBLIC ::   sn_cnf                 !: information about the runoff mouth file to be read 
     34   TYPE(FLD_N)                ::   sn_sal_rnf             !: information about the salinities of runoff file to be read   
     35   TYPE(FLD_N)                ::   sn_tmp_rnf             !: information about the temperatures of runoff file to be read   
     36   TYPE(FLD_N)                ::   sn_dep_rnf             !: information about the depth which river inflow affects 
    3437   LOGICAL           , PUBLIC ::   ln_rnf_mouth = .false. !: specific treatment in mouths vicinity 
    3538   REAL(wp)          , PUBLIC ::   rn_hrnf      = 0.e0    !: runoffs, depth over which enhanced vertical mixing is used 
    3639   REAL(wp)          , PUBLIC ::   rn_avt_rnf   = 0.e0    !: runoffs, value of the additional vertical mixing coef. [m2/s] 
     40   LOGICAL           , PUBLIC ::   ln_rnf_att   = .false. !: river runoffs attributes (temp, sal & depth) are specified in a file  
    3741   REAL(wp)          , PUBLIC ::   rn_rfact     = 1.e0    !: multiplicative factor for runoff 
    3842 
     
    4145   REAL(wp), PUBLIC, DIMENSION(jpk)     ::   rnfmsk_z    !: river mouth mask (vert.) 
    4246 
    43    TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_rnf   ! structure of input SST (file information, fields read) 
     47   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_rnf        !: structure of input river runoff (file information, fields read) 
     48 
     49   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_sal_rnf    !: structure of input river runoff salinity (file information, fields read)   
     50   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_tmp_rnf    !: structure of input river runoff temperature (file information, fields read)   
     51  
     52   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::  rnf_dep         !: depth of runoff in m 
     53   INTEGER,  PUBLIC, DIMENSION(jpi,jpj) ::  rnf_mod_dep     !: depth of runoff in model levels 
     54   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::  rnf_sal         !: salinity of river runoff 
     55   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::  rnf_tmp         !: temperature of river runoff 
     56   
     57   INTEGER  ::  ji, jj ,jk    ! dummy loop indices   
     58   INTEGER  ::  inum          ! temporary logical unit   
     59   
     60   !! * Substitutions   
     61#  include "domzgr_substitute.h90"   
    4462 
    4563   !!---------------------------------------------------------------------- 
     
    6684      !! 
    6785      INTEGER  ::   ji, jj   ! dummy loop indices 
    68       INTEGER  ::   ierror   ! temporary integer 
    6986      !!---------------------------------------------------------------------- 
    7087      !                                    
    7188      IF( kt == nit000 ) THEN   
    72          IF( .NOT. ln_rnf_emp ) THEN 
    73             ALLOCATE( sf_rnf(1), STAT=ierror ) 
    74             IF( ierror > 0 ) THEN 
    75                CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' )   ;   RETURN 
    76             ENDIF 
    77             ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 
    78             ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 
    79          ENDIF 
    80          CALL sbc_rnf_init(sf_rnf) 
     89         CALL sbc_rnf_init                      ! Read namelist and allocate structures 
    8190      ENDIF 
    8291 
     
    8796         CALL fld_read( kt, nn_fsbc, sf_rnf )   ! Read Runoffs data and provides it 
    8897         !                                      ! at the current time-step 
     98         IF ( ln_rnf_att ) THEN   
     99            CALL fld_read ( kt, nn_fsbc, sf_sal_rnf )   
     100            CALL fld_read ( kt, nn_fsbc, sf_tmp_rnf )   
     101         ENDIF   
    89102 
    90103         ! Runoff reduction only associated to the ORCA2_LIM configuration 
     
    101114 
    102115         IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 
    103             emp (:,:) = emp (:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 
    104             emps(:,:) = emps(:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 
    105             CALL iom_put( "runoffs", sf_rnf(1)%fnow )         ! runoffs 
     116            rnf(:,:)  = rn_rfact * ( sf_rnf(1)%fnow(:,:) )   
     117            IF ( ln_rnf_att ) THEN   
     118               rnf_sal(:,:) = ( sf_sal_rnf(1)%fnow(:,:) )   
     119               rnf_tmp(:,:) = ( sf_tmp_rnf(1)%fnow(:,:) )   
     120            ELSE   
     121               rnf_sal(:,:) = 0.0 
     122               rnf_tmp(:,:) = -999   
     123            ENDIF   
     124            CALL iom_put( "runoffs", rnf )         ! runoffs 
    106125         ENDIF 
    107126         ! 
     
    111130 
    112131 
    113    SUBROUTINE sbc_rnf_init( sf_rnf ) 
     132   SUBROUTINE sbc_rnf_init 
    114133      !!---------------------------------------------------------------------- 
    115134      !!                  ***  ROUTINE sbc_rnf_init  *** 
     
    121140      !! ** Action  : - read parameters 
    122141      !!---------------------------------------------------------------------- 
    123       TYPE(FLD), INTENT(inout), DIMENSION(:) :: sf_rnf   ! input data 
    124       !! 
    125       NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, ln_rnf_mouth,   & 
    126          &                 rn_hrnf, rn_avt_rnf, rn_rfact 
     142      CHARACTER(len=32) ::   rn_dep_file   ! runoff file name   
     143      INTEGER  ::   ierror   ! temporary integer 
     144      !!  
     145      NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, sn_sal_rnf, sn_tmp_rnf, sn_dep_rnf,   &   
     146         &                 ln_rnf_mouth, ln_rnf_att, rn_hrnf, rn_avt_rnf, rn_rfact   
    127147      !!---------------------------------------------------------------------- 
    128148 
     
    136156      sn_cnf = FLD_N( 'runoffs',     0     , 'sorunoff' ,  .FALSE.   , .true. ,   'yearly'  , ''       , ''         ) 
    137157 
     158      sn_sal_rnf = FLD_N( 'runoffs',  24.  , 'rosaline' ,  .TRUE.    , .true. ,   'yearly'  , ''    , ''  )   
     159      sn_tmp_rnf = FLD_N( 'runoffs',  24.  , 'rotemper' ,  .TRUE.    , .true. ,   'yearly'  , ''    , ''  )   
     160      sn_dep_rnf = FLD_N( 'runoffs',   0.  , 'rodepth'  ,  .FALSE.   , .true. ,   'yearly'  , ''    , ''  )   
    138161      ! 
    139162      REWIND ( numnam )                         ! Read Namelist namsbc_rnf 
     
    160183         IF(lwp) WRITE(numout,*) 
    161184         IF(lwp) WRITE(numout,*) '          runoffs directly provided in the precipitations' 
     185         IF ( ln_rnf_att ) THEN 
     186           CALL ctl_warn( 'runoffs already included in precipitations & so runoff attributes will not be used' )  
     187           ln_rnf_att = .FALSE. 
     188         ENDIF 
    162189         ! 
    163190      ELSE                                      ! runoffs read in a file : set sf_rnf structure  
    164191         ! 
    165          ! sf_rnf already allocated in main routine 
     192         ! Allocate sf_rnf structure and (if required) sf_sal_rnf and sf_tmp_rnf structures 
     193         ALLOCATE( sf_rnf(1), STAT=ierror ) 
     194         IF( ierror > 0 ) THEN 
     195            CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' )   ;   RETURN 
     196         ENDIF 
     197         ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 
     198         ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 
     199 
     200         IF( ln_rnf_att ) THEN 
     201            ALLOCATE( sf_sal_rnf(1), STAT=ierror ) 
     202            IF( ierror > 0 ) THEN 
     203               CALL ctl_stop( 'sbc_sal_rnf: unable to allocate sf_sal_rnf structure' )   ;   RETURN 
     204            ENDIF 
     205            ALLOCATE( sf_sal_rnf(1)%fnow(jpi,jpj) ) 
     206            ALLOCATE( sf_sal_rnf(1)%fdta(jpi,jpj,2) ) 
     207 
     208            ALLOCATE( sf_tmp_rnf(1), STAT=ierror ) 
     209            IF( ierror > 0 ) THEN 
     210                CALL ctl_stop( 'sbc_tmp_rnf: unable to allocate sf_tmp_rnf structure' )   ;   RETURN 
     211            ENDIF 
     212            ALLOCATE( sf_tmp_rnf(1)%fnow(jpi,jpj) ) 
     213            ALLOCATE( sf_tmp_rnf(1)%fdta(jpi,jpj,2) ) 
     214         ENDIF 
    166215         ! fill sf_rnf with sn_rnf and control print 
    167216         CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 
    168          ! 
    169       ENDIF 
    170  
     217  
     218         IF ( ln_rnf_att ) THEN   
     219            CALL fld_fill (sf_sal_rnf, (/ sn_sal_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' )   
     220            CALL fld_fill (sf_tmp_rnf, (/ sn_tmp_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' )   
     221   
     222            rn_dep_file = TRIM( cn_dir )//TRIM( sn_dep_rnf%clname )   
     223            CALL iom_open ( rn_dep_file, inum )                           ! open file   
     224            CALL iom_get  ( inum, jpdom_data, sn_dep_rnf%clvar, rnf_dep )    ! read the river mouth array   
     225            CALL iom_close( inum )                                      ! close file   
     226   
     227            rnf_mod_dep(:,:)=0   
     228            DO jj=1,jpj   
     229              DO ji=1,jpi   
     230                IF ( rnf_dep(ji,jj) > 0.e0 ) THEN   
     231                  jk=2   
     232                  DO WHILE ( jk/=(mbathy(ji,jj)-1) .AND. fsdept(ji,jj,jk) < rnf_dep(ji,jj) );  jk=jk+1;   ENDDO   
     233                  rnf_mod_dep(ji,jj)=jk   
     234                ELSE IF ( rnf_dep(ji,jj) .eq. -1 ) THEN   
     235                  rnf_mod_dep(ji,jj)=1   
     236                ELSE IF ( rnf_dep(ji,jj) .eq. -999 ) THEN   
     237                  rnf_mod_dep(ji,jj)=mbathy(ji,jj)-1 
     238                ELSE IF ( rnf_dep(ji,jj) /= 0 ) THEN   
     239                  CALL ctl_stop( 'runoff depth not positive, and not -999 or -1, rnf value in file fort.999'  )   
     240                  WRITE(999,*) 'ji, jj, rnf(ji,jj) :', ji, jj, rnf(ji,jj)   
     241                ENDIF   
     242              ENDDO   
     243            ENDDO   
     244         ELSE   
     245            rnf_mod_dep(:,:)=1   
     246         ENDIF   
     247      !  
     248      ENDIF 
     249       
     250      ! recalculate rnf_dep to be the depth in metres to the bottom of the relevant grid box 
     251      DO jj=1,jpj  
     252        DO ji=1,jpi  
     253          rnf_dep(ji,jj)=0 
     254          DO jk=1,rnf_mod_dep(ji,jj)                         
     255            rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk)   
     256          ENDDO 
     257        ENDDO 
     258      ENDDO 
    171259      !                                   ! ======================== 
    172260      !                                   !   River mouth vicinity 
     
    179267         ! 
    180268         !                                          ! Number of level over which Kz increase 
     269         IF ( ln_rnf_att )  &   
     270              &  CALL ctl_warn( 'increased mixing turned on but effects may already be spread through depth by ln_rnf_att' )  
    181271         nkrnf = 0 
    182272         IF( rn_hrnf > 0.e0 ) THEN 
  • branches/devukmo2010/NEMO/OPA_SRC/SOL/solmat.F90

    r2031 r2128  
    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  
    83 #   if ! defined key_obc 
     84#if defined key_dynspg_flt && ! defined key_obc && ! defined key_bdy 
    8485 
    8586      DO jj = 2, jpjm1                      ! matrix of free surface elliptic system 
     
    158159    ENDIF 
    159160#   endif 
     161 
     162#  elif defined key_dynspg_flt && defined key_bdy  
     163 
     164      !   defined gcdmat in the case of unstructured open boundaries 
     165      DO jj = 2, jpjm1 
     166         DO ji = 2, jpim1 
     167            zcoef = z2dt * z2dt * grav * bmask(ji,jj) 
     168 
     169            !  south coefficient 
     170            zcoefs = -zcoef * hv(ji,jj-1) * e1v(ji,jj-1)/e2v(ji,jj-1) 
     171            zcoefs = zcoefs * bdyvmask(ji,jj-1) 
     172            gcp(ji,jj,1) = zcoefs 
     173 
     174            !  west coefficient 
     175            zcoefw = -zcoef * hu(ji-1,jj) * e2u(ji-1,jj)/e1u(ji-1,jj) 
     176            zcoefw = zcoefw * bdyumask(ji-1,jj) 
     177            gcp(ji,jj,2) = zcoefw 
     178 
     179            !  east coefficient 
     180            zcoefe = -zcoef * hu(ji,jj) * e2u(ji,jj)/e1u(ji,jj) 
     181            zcoefe = zcoefe * bdyumask(ji,jj) 
     182            gcp(ji,jj,3) = zcoefe 
     183 
     184            !  north coefficient 
     185            zcoefn = -zcoef * hv(ji,jj) * e1v(ji,jj)/e2v(ji,jj) 
     186            zcoefn = zcoefn * bdyvmask(ji,jj) 
     187            gcp(ji,jj,4) = zcoefn 
     188 
     189            ! diagonal coefficient 
     190            gcdmat(ji,jj) = e1t(ji,jj)*e2t(ji,jj)*bmask(ji,jj) & 
     191                            - zcoefs -zcoefw -zcoefe -zcoefn 
     192         END DO 
     193      END DO 
     194 
    160195#endif 
    161196 
  • branches/devukmo2010/NEMO/OPA_SRC/TRA/tradmp.F90

    r1601 r2128  
    4747   LOGICAL, PUBLIC            ::   lk_tradmp = .TRUE.     !: internal damping flag 
    4848#endif 
     49   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   strdmp   !: damping salinity trend (psu/s) 
     50   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   ttrdmp   !: damping temperature trend (Centigrade/s) 
    4951   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   resto    !: restoring coeff. on T and S (s-1) 
    5052    
     
    9193      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    9294      !! 
     95      REAL(wp) ::   zta, zsa       ! temporary scalars 
    9396      INTEGER ::   ji, jj, jk   ! dummy loop indices 
    9497      !!---------------------------------------------------------------------- 
     
    107110            DO jj = 2, jpjm1 
    108111               DO ji = fs_2, fs_jpim1   ! vector opt. 
    109                   ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
    110                   sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     112                  zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
     113                  zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     114                  ! add the trends to the general tracer trends 
     115                  ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     116                  sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     117                  ! save the salinity trend (used in asmtrj) 
     118                  strdmp(ji,jj,jk) = zsa 
     119                  ttrdmp(ji,jj,jk) = zta 
    111120               END DO 
    112121            END DO 
     
    118127               DO ji = fs_2, fs_jpim1   ! vector opt. 
    119128                  IF( avt(ji,jj,jk) <= 5.e-4 ) THEN 
    120                      ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
    121                      sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     129                     zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
     130                     zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     131                  ELSE 
     132                     zta = 0.e0 
     133                     zsa = 0.e0    
    122134                  ENDIF 
     135                  ! add the trends to the general tracer trends 
     136                  ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     137                  sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     138                  ! save the salinity trend (used in asmtrj) 
     139                  strdmp(ji,jj,jk) = zsa 
     140                  ttrdmp(ji,jj,jk) = zta 
    123141               END DO 
    124142            END DO 
     
    130148               DO ji = fs_2, fs_jpim1   ! vector opt. 
    131149                  IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    132                      ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
    133                      sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     150                     zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
     151                     zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     152                  ELSE 
     153                     zta = 0.e0 
     154                     zsa = 0.e0    
    134155                  ENDIF 
     156                  ! add the trends to the general tracer trends 
     157                  ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     158                  sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     159                  ! save the salinity trend (used in asmtrj) 
     160                  strdmp(ji,jj,jk) = zsa 
     161                  ttrdmp(ji,jj,jk) = zta 
    135162               END DO 
    136163            END DO 
     
    199226         &   CALL ctl_stop( 'no temperature and/or salinity data define key_dtatem and key_dtasal' ) 
    200227 
     228      strdmp(:,:,:) = 0.e0       ! internal damping salinity trend (used in asmtrj) 
     229      ttrdmp(:,:,:) = 0.e0 
    201230      !                          ! Damping coefficients initialization 
    202231      IF( lzoom ) THEN   ;   CALL dtacof_zoom 
  • branches/devukmo2010/NEMO/OPA_SRC/TRA/trasbc.F90

    r1892 r2128  
    2121   USE in_out_manager  ! I/O manager 
    2222   USE prtctl          ! Print control 
     23   USE sbcrnf          ! River runoff   
     24   USE sbcmod          ! ln_rnf   
    2325 
    2426   IMPLICIT NONE 
     
    103105      INTEGER, INTENT(in) ::   kt     ! ocean time-step index 
    104106      !! 
    105       INTEGER  ::   ji, jj                   ! dummy loop indices 
    106       REAL(wp) ::   zta, zsa, zsrau, zse3t   ! temporary scalars 
     107      INTEGER  ::   ji, jj, jk           ! dummy loop indices   
     108      REAL(wp) ::   zta, zsa             ! temporary scalars, adjustment to temperature and salinity   
     109      REAL(wp) ::   zata, zasa           ! temporary scalars, calculations of automatic change to temp & sal due to vvl (done elsewhere)   
     110      REAL(wp) ::   zsrau, zse3t, zdep   ! temporary scalars, 1/density, 1/height of box, 1/height of effected water column   
     111      REAL(wp) ::   zdheat, zdsalt       ! total change of temperature and salinity   
    107112      !!---------------------------------------------------------------------- 
    108113 
     
    125130      IF( .NOT.ln_traqsr )   qsr(:,:) = 0.e0   ! no solar radiation penetration 
    126131 
    127       ! Concentration dillution effect on (t,s) 
     132      ! Concentration dilution effect on (t,s) due to evapouration, precipitation and qns, but not river runoff   
    128133      DO jj = 2, jpj 
    129134         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    132137#endif 
    133138            IF( lk_vvl) THEN 
    134                zta = ro0cpr * qns(ji,jj) * zse3t &                   ! temperature : heat flux 
    135                 &    - emp(ji,jj) * zsrau * tn(ji,jj,1)  * zse3t     ! & cooling/heating effet of EMP flux 
     139               zta =  ro0cpr * qns(ji,jj) * zse3t &                  ! temperature : heat flux  
     140                &    - emp(ji,jj) * zsrau * tn(ji,jj,1) * zse3t      ! & cooling/heating effet of EMP flux  
    136141               zsa = ( emps(ji,jj) - emp(ji,jj) ) & 
    137142                &                 * zsrau * sn(ji,jj,1)  * zse3t     ! concent./dilut. effect due to sea-ice  
    138143                                                                     ! melt/formation and (possibly) SSS restoration 
    139144            ELSE 
    140                zta = ro0cpr * qns(ji,jj) * zse3t     ! temperature : heat flux 
    141                zsa = emps(ji,jj) * zsrau * sn(ji,jj,1)   * zse3t     ! salinity :  concent./dilut. effect 
     145               zta =  ro0cpr * qns(ji,jj) * zse3t                    ! temperature : heat flux  
     146               zsa =  emps(ji,jj) * zsrau * sn(ji,jj,1) * zse3t      ! salinity :  concent./dilut. effect  
    142147            ENDIF 
    143148            ta(ji,jj,1) = ta(ji,jj,1) + zta                          ! add the trend to the general tracer trend 
     
    145150         END DO 
    146151      END DO 
     152 
     153      IF ( ln_rnf ) THEN   
     154 
     155      ! Effect on (t,s) due to river runoff (dilution effect automatically applied via vertical tracer advection)  
     156        DO jj=1,jpj   
     157           DO ji=1,jpi   
     158              zdep = 1. / rnf_dep(ji,jj)   
     159              zse3t= 1. / fse3t(ji,jj,1)   
     160 
     161              IF ( rnf(ji,jj) .gt. 0.0 ) THEN 
     162                 ! ammend t and s due to direct tracer flux 
     163                 IF ( rnf_tmp(ji,jj) == -999 )   rnf_tmp(ji,jj)=tn(ji,jj,1)        ! if not specified set runoff temp to be sst 
     164                 DO jk=1, rnf_mod_dep(ji,jj) 
     165                    ta(ji,jj,jk) = ta(ji,jj,jk) + rnf_tmp(ji,jj) * rnf(ji,jj) * zsrau * zdep 
     166                    sa(ji,jj,jk) = sa(ji,jj,jk) + rnf_sal(ji,jj) * rnf(ji,jj) * zsrau * zdep 
     167                 ENDDO 
     168              ELSEIF (rnf(ji,jj) .lt. 0.) THEN   !! for use in baltic when flow is out of domain, want no change in temp and sal 
     169                 ! negate concentration/dilution effect from traadv, as the tracer leaves domain 
     170                 DO jk=1, rnf_mod_dep(ji,jj) 
     171                    ta(ji,jj,jk) = ta(ji,jj,jk) + tn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 
     172                    sa(ji,jj,jk) = sa(ji,jj,jk) + sn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 
     173                 ENDDO 
     174              ENDIF 
     175 
     176           ENDDO   
     177        ENDDO   
     178 
     179      ENDIF   
    147180 
    148181      IF( l_trdtra ) THEN      ! save the sbc trends for diagnostic 
  • branches/devukmo2010/NEMO/OPA_SRC/ZDF/zdfkpp.F90

    r1695 r2128  
    453453            zBosol(ji,jj) = grav * zthermal * qsr(ji,jj) 
    454454            ! Non radiative surface buoyancy force 
    455             zBo   (ji,jj) = grav * zthermal * qns(ji,jj) -  grav * zhalin * emps(ji,jj) 
     455            zBo   (ji,jj) = grav * zthermal * qns(ji,jj) -  grav * zhalin * ( emps(ji,jj)-rnf(ji,jj) )  
    456456            ! Surface Temperature flux for non-local term 
    457457            wt0(ji,jj) = - ( qsr(ji,jj) + qns(ji,jj) )* ro0cpr * tmask(ji,jj,1) 
    458458            ! Surface salinity flux for non-local term 
    459             ws0(ji,jj) = - ( emps(ji,jj) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1) 
     459            ws0(ji,jj) = - ( ( emps(ji,jj)-rnf(ji,jj) ) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1)  
    460460         ENDDO 
    461461      ENDDO 
  • branches/devukmo2010/NEMO/OPA_SRC/ZDF/zdftke.F90

    r1756 r2128  
    8787 
    8888   REAL(wp), DIMENSION(jpi,jpj)     ::   htau      ! depth of tke penetration (nn_htau) 
    89    REAL(wp), DIMENSION(jpi,jpj,jpk) ::   en        ! now turbulent kinetic energy   [m2/s2] 
     89   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   en        ! now turbulent kinetic energy   [m2/s2] 
    9090   REAL(wp), DIMENSION(jpi,jpj,jpk) ::   dissl     ! now mixing lenght of dissipation 
    9191 
  • branches/devukmo2010/NEMO/OPA_SRC/cla.F90

    r1146 r2128  
    163163         DO ji = mi0(148), mi1(160) 
    164164            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    165             zempred = zempred + emp(ji,jj) * zwei 
     165            zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    166166         END DO 
    167167      END DO 
     
    365365         DO ji = mi0(141),mi1(181) 
    366366            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    367             zempmed = zempmed + emp(ji,jj) * zwei 
     367            zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    368368         END DO 
    369369      END DO 
     
    374374      DO jj = mj0(96),mj1(96) 
    375375         DO ji = mi0(148),mi1(148) 
    376             zempmed = zempmed  -  emp(ji  ,jj) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   & 
    377                                -  emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)    
     376            zempmed = zempmed  -  ( emp(ji  ,jj)-rnf(ji  ,jj) ) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   &  
     377                               -  ( emp(ji+1,jj)-rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)     
    378378         END DO 
    379379      END DO 
     
    389389      zu3_ms(:) = zu3_ms_i(:) 
    390390 
    391       ! velocity profile at 139,101  South point + emp on surface  
     391      ! velocity profile at 139,101  South point + (emp-rnf) on surface  
    392392      DO jk = 1, 14                       
    393393         DO jj = mj0(102), mj1(102)  
     
    399399 
    400400      ! profile at East Gibraltar     
    401       ! velocity profile at 141,102  + emp on surface  
     401      ! velocity profile at 141,102  + (emp-rnf) on surface  
    402402      DO  jk = 1, 14                      
    403403         DO jj = mj0(102), mj1(102)  
  • branches/devukmo2010/NEMO/OPA_SRC/cla_div.F90

    r1146 r2128  
    124124         DO ji = mi0(148), mi1(160)  
    125125            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    126             zempred = zempred + emp(ji,jj) * zwei 
     126            zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    127127         END DO 
    128128      END DO 
     
    234234         DO ji = mi0(141),mi1(181) 
    235235            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    236             zempmed = zempmed + emp(ji,jj) * zwei 
     236            zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    237237         END DO 
    238238      END DO 
     
    242242      DO jj = mj0(96), mj1(96) 
    243243         DO ji = mi0(148),mi1(148) 
    244             zempmed = zempmed -  emp(ji  , jj) * tmask(ji  , jj,1) * e1t(ji  , jj) * e2t(ji  , jj)   & 
    245                               -  emp(ji+1, jj) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj)    
     244            zempmed = zempmed -  ( emp(ji  , jj) - rnf(ji  ,jj) ) * tmask(ji  , jj,1) * e1t(ji  , jj) * e2t(ji  , jj)   &  
     245                              -  ( emp(ji+1, jj) - rnf(ji+1,jj) ) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj)     
    246246         END DO 
    247247      END DO 
  • branches/devukmo2010/NEMO/OPA_SRC/cla_dynspg.F90

    r1556 r2128  
    7979      ! EMP on Mediterranean Sea and Red Sea  
    8080      ! ------------------------------------ 
    81       ! compute the emp in Mediterranean Sea 
     81      ! compute the (emp-rnf) in Mediterranean Sea 
    8282      zempmed = 0.e0 
    8383      zwei = 0.e0 
     
    8787         DO ji = mi0(ii0),mi1(ii1) 
    8888            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    89             zempmed = zempmed + emp(ji,jj) * zwei 
     89            zempmed = zempmed + ( emp(ji,jj)-rnf(ji,jj) ) * zwei  
    9090         END DO 
    9191      END DO 
     
    9797      DO jj = mj0(ij0), mj1(ij1) 
    9898         DO ji = mi0(ii0),mi1(ii1) 
    99             zempmed = zempmed - emp(ji  ,jj) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   & 
    100                &              - emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)    
     99            zempmed = zempmed - ( emp(ji  ,jj) - rnf(ji  ,jj) ) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   &  
     100               &              - ( emp(ji+1,jj) - rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)     
    101101         END DO 
    102102      END DO 
     
    104104      zempmed = zempmed * 1.e-3 
    105105 
    106       ! compute the emp in Red Sea    
     106      ! compute the (emp-rnf) in Red Sea    
    107107      zempred = 0.e0 
    108108      zwei = 0.e0 
     
    112112         DO ji = mi0(ii0),mi1(ii1) 
    113113            zwei      = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    114             zempred   = zempred + emp(ji,jj) * zwei 
     114            zempred   = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    115115         END DO 
    116116      END DO 
  • branches/devukmo2010/NEMO/OPA_SRC/lib_mpp.F90

    r1921 r2128  
    7171   PUBLIC   mpprecv, mppsend, mppscatter, mppgather 
    7272   PUBLIC   mppobc, mpp_ini_ice, mpp_ini_znl 
    73 #if defined key_oasis3 || defined key_oasis4 
    74    PUBLIC   mppsize, mpprank 
    75 #endif 
     73   PUBLIC   mppsize, mpprank, mpi_comm_opa 
    7674 
    7775   !! * Interfaces 
  • branches/devukmo2010/NEMO/OPA_SRC/opa.F90

    r1793 r2128  
    2525   !!             -   ! 2007-07  (J. Chanut, A. Sellar) Unstructured open boundaries (BDY) 
    2626   !!            3.2  ! 2009-08  (S. Masson)  open/write in the listing file in mpp 
     27   !!            3.3  ! 2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface  
    2728   !!---------------------------------------------------------------------- 
    2829 
     
    5354   USE phycst          ! physical constant                  (par_cst routine) 
    5455   USE trdmod          ! momentum/tracers trends       (trd_mod_init routine) 
     56   USE asminc          ! assimilation increments       (asm_inc_init routine) 
     57   USE asmtrj          ! writing out state trajectory 
     58   USE sshwzv          ! vertical velocity used in asm 
    5559   USE diaptr          ! poleward transports           (dia_ptr_init routine) 
    5660   USE step            ! OPA time-stepping                  (stp     routine) 
     
    133137         END DO 
    134138      ELSE                              !==  3D ocean with  ==! 
     139          IF( lk_asminc ) THEN 
     140             IF( ln_bkgwri ) CALL asm_bkg_wri( nit000 - 1 )    ! Output background fields 
     141             IF( ln_trjwri ) CALL asm_trj_wri( nit000 - 1 )    ! Output trajectory fields 
     142             IF( ln_asmdin ) THEN                        ! Direct initialization 
     143                IF( ln_trainc ) CALL tra_asm_inc( nit000 - 1 )    ! Tracers 
     144                IF( ln_dyninc ) THEN  
     145                   CALL dyn_asm_inc( nit000 - 1 )    ! Dynamics 
     146                   IF ( ln_asmdin ) CALL ssh_wzv ( nit000 - 1 )      ! update vertical velocity  
     147                ENDIF 
     148                IF( ln_sshinc ) CALL ssh_asm_inc( nit000 - 1 )    ! SSH 
     149             ENDIF 
     150          ENDIF 
     151         
    135152         DO WHILE ( istp <= nitend .AND. nstop == 0 ) 
    136153#if defined key_agrif 
     
    279296      CALL dia_ptr_init                         ! Poleward TRansports initialization 
    280297      CALL trd_mod_init                         ! Mixed-layer/Vorticity/Integral constraints trends 
     298 
     299      IF( lk_asminc ) CALL asm_inc_init     ! Initialize assimilation increments 
     300      IF(lwp) WRITE(numout,*)'Euler time step switch is ', neuler 
     301 
    281302      ! 
    282303   END SUBROUTINE opa_init 
  • branches/devukmo2010/NEMO/OPA_SRC/step.F90

    r1793 r2128  
    2121   !!            3.2  !  2009-02  (G. Madec, R. Benshila)  reintroduicing z*-coordinate 
    2222   !!             -   !  2009-06  (S. Masson, G. Madec)  TKE restart compatible with key_cpl 
     23   !!            3.3  !  2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface 
    2324   !!---------------------------------------------------------------------- 
    2425 
     
    113114   USE floats          ! floats computation               (flo_stp routine) 
    114115 
     116   USE asminc          ! assimilation increments    (tra_asm_inc, dyn_asm_inc routines) 
    115117   USE stpctl          ! time stepping control            (stp_ctl routine) 
    116118   USE restart         ! ocean restart                    (rst_wri routine) 
     
    265267                             sa(:,:,:) = 0.e0 
    266268 
     269      IF(  ln_asmiau .AND. & 
     270         & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment 
    267271                             CALL tra_sbc    ( kstp )       ! surface boundary condition 
    268272      IF( ln_traqsr      )   CALL tra_qsr    ( kstp )       ! penetrative solar radiation qsr 
     
    303307                               va(:,:,:) = 0.e0 
    304308 
     309      IF(  ln_asmiau .AND. & 
     310         & ln_dyninc     )     CALL dyn_asm_inc( kstp )       ! apply dynamics assimilation increment 
    305311                               CALL dyn_adv( kstp )         ! advection (vector or flux form) 
    306312                               CALL dyn_vor( kstp )         ! vorticity term including Coriolis 
Note: See TracChangeset for help on using the changeset viewer.