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

Changeset 15737


Ignore:
Timestamp:
2022-03-04T15:23:00+01:00 (2 years ago)
Author:
jcastill
Message:

Adding in NOC changes straight from SEAsia_R36 model

Location:
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdy_oce.F90

    r14075 r15737  
    4343      INTEGER          , DIMENSION(2)   ::  nread 
    4444      LOGICAL                           ::  lneed_ssh 
     45      !--- davbyr 
     46      LOGICAL                           ::  lforced_ssh  
     47     !--- END davbyr 
    4548      LOGICAL                           ::  lneed_dyn2d 
    4649      LOGICAL                           ::  lneed_dyn3d 
     
    117120   REAL(wp), DIMENSION(jp_bdy) ::   rice_hpnd               !: pond thick. of incoming sea ice 
    118121   REAL(wp), DIMENSION(jp_bdy) ::   rice_hlid               !: pond lid thick. of incoming sea ice 
     122    
     123   !  davbyr  
     124   LOGICAL, DIMENSION(jp_bdy) ::   ln_ssh_bdy               !: =T USE SSH BDY - name list switch 
     125   REAL(wp), DIMENSION(jp_bdy) ::  rn_ssh_shift             !: =F SHIFT SSH AT A BORDER BY rn_ssh_shift m_ 
     126   !  END davbyr 
    119127   ! 
    120128   !!---------------------------------------------------------------------- 
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdydta.F90

    r14075 r15737  
    362362         ENDIF 
    363363      ENDIF 
     364       
     365      ! davbyr - add a shift to the boundary + free elevation Enda, JT from NEMO RAN 3.6 
     366      DO jbdy = 1, nb_bdy 
     367         IF( dta_bdy(jbdy)%lneed_ssh ) THEN 
     368            igrd  = 1 
     369            DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd)   ! ssh is used only on the rim 
     370                ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     371                ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     372                dta_bdy(jbdy)%ssh(ib) = dta_bdy(jbdy)%ssh(ib) + rn_ssh_shift(jbdy) * tmask(ii,ij,1) 
     373                IF( .NOT. dta_bdy(jbdy)%lforced_ssh ) dta_bdy(jbdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1) 
     374             END DO 
     375         END IF 
     376      END DO 
     377      !--- END davbyr 
     378       
    364379      ! 
    365380      IF( ln_timing )   CALL timing_stop('bdy_dta') 
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdyini.F90

    r14075 r15737  
    6969         &             ln_vol, nn_volctl, nn_rimwidth 
    7070         ! 
     71!     davbyr Propagating ENDA's stuff from 3.6 
     72      NAMELIST/nambdy_ssh/ ln_ssh_bdy, rn_ssh_shift 
     73      INTEGER  ::   ib_bdy 
     74!     END davbyr 
    7175      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    7276      !!---------------------------------------------------------------------- 
     
    97101902   IF( ios >  0 )   CALL ctl_nam ( ios , 'nambdy in configuration namelist' ) 
    98102      IF(lwm) WRITE ( numond, nambdy ) 
     103       
     104      ! davbyr Propagating ENDA's stuff from 3.6 
     105      REWIND( numnam_ref )              ! Namelist nambdy in reference namelist :Unstructured open boundaries 
     106      READ  ( numnam_ref, nambdy_ssh, IOSTAT = ios, ERR = 905) 
     107905   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy_ssh in reference namelist' ) 
     108 
     109      REWIND( numnam_cfg )              ! Namelist nambdy in configuration namelist :Unstructured open boundaries 
     110      READ  ( numnam_cfg, nambdy_ssh, IOSTAT = ios, ERR = 906) 
     111906   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy_ssh in configuration namelist' ) 
     112      IF(lwm) WRITE ( numond, nambdy_ssh ) 
     113 
     114      IF(lwp) WRITE(numout,*) 
     115      IF(lwp) WRITE(numout,*) 'nambdy_ssh : use of ssh boundaries' 
     116      IF(lwp) WRITE(numout,*) '~~~~~~~~' 
     117      IF(lwp) WRITE(numout,*) '      ln_ssh_bdy: ' 
     118      DO ib_bdy = 1,nb_bdy 
     119        IF(lwp) WRITE(numout,*) '      ln_ssh_bdy  (',ib_bdy,'): ',ln_ssh_bdy(ib_bdy) 
     120      IF(lwp) WRITE(numout,*) '      rn_ssh_shift: ' 
     121      ENDDO 
     122      DO ib_bdy = 1,nb_bdy 
     123        IF(lwp) WRITE(numout,*) '      rn_ssh_shift(',ib_bdy,'): ',rn_ssh_shift(ib_bdy) 
     124      ENDDO 
     125      IF(lwp) WRITE(numout,*) '~~~~~~~~' 
     126      IF(lwp) WRITE(numout,*) 
     127!     END davbyr 
    99128 
    100129      IF( .NOT. Agrif_Root() ) ln_bdy = .FALSE.   ! forced for Agrif children 
     
    201230         dta_bdy(ib_bdy)%lneed_ssh   = cn_dyn2d(ib_bdy) == 'flather' 
    202231         dta_bdy(ib_bdy)%lneed_dyn2d = cn_dyn2d(ib_bdy) /= 'none' 
     232 
     233       ! davbyr propagating JT override dta_bdy(ib_bdy)%ll_ssh with namelist value (ln_ssh_bdy) 
     234         dta_bdy(ib_bdy)%lforced_ssh = ln_ssh_bdy(ib_bdy) 
     235         IF(lwp) WRITE(numout,*) 'nambdy_ssh : use of ssh boundaries' 
     236         IF(lwp) WRITE(numout,*) '~~~~~~~~' 
     237         IF(lwp) WRITE(numout,*) '      ib_bdy: ',ib_bdy 
     238         IF(lwp) WRITE(numout,*) '      dta_bdy(ib_bdy)%lneed_ssh  : ',dta_bdy(ib_bdy)%lneed_ssh 
     239         IF(lwp) WRITE(numout,*) '      dta_bdy(ib_bdy)%lforced_ssh: ',dta_bdy(ib_bdy)%lforced_ssh 
     240         IF(lwp) WRITE(numout,*) '~~~~~~~~' 
     241         ! END davbyr 
    203242 
    204243         IF( lwp .AND. dta_bdy(ib_bdy)%lneed_dyn2d ) THEN 
     
    598637            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    599638               ir = MAX( 1, idx_bdy(ib_bdy)%nbr(ib,igrd) )   ! both rim 0 and rim 1 have the same weights 
    600                idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( REAL( ir - 1 ) *0.5 )      ! tanh formulation 
     639!               idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( REAL( ir - 1 ) *0.5 )      ! tanh formulation 
     640               idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( FLOAT( ir - 1 ) * 0.5 & 
     641                                                & *(10./FLOAT(nn_rimwidth(ib_bdy))) ) ! JGraham:modified for rim=15 
    601642               !               idx_bdy(ib_bdy)%nbw(ib,igrd) = (REAL(nn_rimwidth(ib_bdy)+1-ir)/REAL(nn_rimwidth(ib_bdy)))**2.  ! quadratic 
    602643               !               idx_bdy(ib_bdy)%nbw(ib,igrd) =  REAL(nn_rimwidth(ib_bdy)+1-ir)/REAL(nn_rimwidth(ib_bdy))       ! linear 
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdytides.F90

    r14075 r15737  
    147147               ! 
    148148               ! SSH fields 
    149                IF( ASSOCIATED(dta%ssh) ) THEN   ! we use bdy ssh on this mpi subdomain 
    150149                  clfile = TRIM(filtide)//'_grid_T.nc' 
    151150                  CALL iom_open( clfile , inum )  
     
    154153                     CALL iom_get( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_z1', ztr(:,:) ) 
    155154                     CALL iom_get( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_z2', zti(:,:) )  
     155                     IF( ASSOCIATED(dta%ssh) ) THEN   ! we use bdy ssh on this mpi subdomain 
    156156                     DO ib = 1, SIZE(dta%ssh) 
    157157                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     
    160160                        td%ssh0(ib,itide,2) = zti(ii,ij) 
    161161                     END DO 
     162                     ENDIF 
    162163                  END DO 
    163164                  CALL iom_close( inum ) 
    164                END IF 
    165165               ! 
    166166               ! U fields 
    167                IF( ASSOCIATED(dta%u2d) ) THEN   ! we use bdy u2d on this mpi subdomain 
    168167                  clfile = TRIM(filtide)//'_grid_U.nc' 
    169168                  CALL iom_open( clfile , inum )  
     
    172171                     CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_u1', ztr(:,:) ) 
    173172                     CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_u2', zti(:,:) ) 
     173                     IF( ASSOCIATED(dta%u2d) ) THEN   ! we use bdy u2d on this mpi subdomain 
    174174                     DO ib = 1, SIZE(dta%u2d) 
    175175                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     
    178178                        td%u0(ib,itide,2) = zti(ii,ij) 
    179179                     END DO 
     180                  END IF 
    180181                  END DO 
    181                   CALL iom_close( inum ) 
    182                END IF 
     182               CALL iom_close( inum ) 
    183183               ! 
    184184               ! V fields 
    185                IF( ASSOCIATED(dta%v2d) ) THEN   ! we use bdy v2d on this mpi subdomain 
    186185                  clfile = TRIM(filtide)//'_grid_V.nc' 
    187186                  CALL iom_open( clfile , inum )  
     
    190189                     CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_v1', ztr(:,:) ) 
    191190                     CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_v2', zti(:,:) ) 
     191                     IF( ASSOCIATED(dta%v2d) ) THEN   ! we use bdy v2d on this mpi subdomain 
    192192                     DO ib = 1, SIZE(dta%v2d) 
    193193                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     
    196196                        td%v0(ib,itide,2) = zti(ii,ij) 
    197197                     END DO 
     198                  END IF 
    198199                  END DO 
    199                   CALL iom_close( inum ) 
    200                END IF 
     200               CALL iom_close( inum ) 
    201201               ! 
    202202               DEALLOCATE( ztr, zti )  
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/DOM/dtatsd.F90

    r14075 r15737  
    2222   USE in_out_manager  ! I/O manager 
    2323   USE lib_mpp         ! MPP library 
    24  
     24   USE iom 
     25    
    2526   IMPLICIT NONE 
    2627   PRIVATE 
     
    3132   !                                  !!* namtsd  namelist : Temperature & Salinity Data * 
    3233   LOGICAL , PUBLIC ::   ln_tsd_init   !: T & S data flag 
     34   LOGICAL , PUBLIC ::   ln_tsd_interp !: vertical interpolation flag 
    3335   LOGICAL , PUBLIC ::   ln_tsd_dmp    !: internal damping toward input data flag 
     36   INTEGER , PUBLIC ::   nn_tsd_zone    !: 1=AMM7 July on-shelf, 2=AMM7 July off-shelf, 3=AMM7 Jan on-shelf, 4=AMM7 Jan off-shelf 
     37   REAL(wp), PUBLIC ::   rn_sal_sf, rn_mld_sf, rn_maxdep_sf, rn_c0_sf, rn_c1_sf 
    3438 
    3539   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_tsd   ! structure of input SST (file informations, fields read) 
     40   INTEGER                                 ::   jpk_init , inum_dta 
     41   INTEGER                                 ::   id ,linum   ! local integers 
     42   INTEGER                                 ::   zdim(4) 
     43 
    3644 
    3745   !!---------------------------------------------------------------------- 
    3846   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
    39    !! $Id$ 
     47   !! $Id: dtatsd.F90 10213 2018-10-23 14:40:09Z aumont $  
    4048   !! Software governed by the CeCILL license (see ./LICENSE) 
    4149   !!---------------------------------------------------------------------- 
     
    5361      LOGICAL, INTENT(in), OPTIONAL ::   ld_tradmp   ! force the initialization when tradp is used 
    5462      ! 
    55       INTEGER ::   ios, ierr0, ierr1, ierr2, ierr3   ! local integers 
     63      INTEGER ::   ios, ierr0, ierr1, ierr2, ierr3, ierr4, ierr5   ! local integers 
    5664      !! 
    5765      CHARACTER(len=100)            ::   cn_dir          ! Root directory for location of ssr files 
    58       TYPE(FLD_N), DIMENSION( jpts) ::   slf_i           ! array of namelist informations on the fields to read 
    59       TYPE(FLD_N)                   ::   sn_tem, sn_sal 
     66      TYPE(FLD_N), DIMENSION(jpts+2)::   slf_i           ! array of namelist informations on the fields to read 
     67      TYPE(FLD_N)                   ::   sn_tem, sn_sal, sn_dep, sn_msk 
     68       
    6069      !! 
    61       NAMELIST/namtsd/   ln_tsd_init, ln_tsd_dmp, cn_dir, sn_tem, sn_sal 
     70      NAMELIST/namtsd/   ln_tsd_init, ln_tsd_interp, ln_tsd_dmp, cn_dir, sn_tem, sn_sal, sn_dep, sn_msk, nn_tsd_zone,   & 
     71                         rn_sal_sf, rn_mld_sf, rn_maxdep_sf, rn_c0_sf, rn_c1_sf  
    6272      !!---------------------------------------------------------------------- 
    6373      ! 
    6474      !  Initialisation 
    65       ierr0 = 0  ;  ierr1 = 0  ;  ierr2 = 0  ;  ierr3 = 0 
     75      ierr0 = 0  ;  ierr1 = 0  ;  ierr2 = 0  ;  ierr3 = 0  ; ierr4 = 0  ;  ierr5 = 0  
    6676      ! 
    6777      REWIND( numnam_ref )              ! Namelist namtsd in reference namelist :  
     
    8090         WRITE(numout,*) '~~~~~~~~~~~~ ' 
    8191         WRITE(numout,*) '   Namelist namtsd' 
    82          WRITE(numout,*) '      Initialisation of ocean T & S with T &S input data   ln_tsd_init = ', ln_tsd_init 
    83          WRITE(numout,*) '      damping of ocean T & S toward T &S input data        ln_tsd_dmp  = ', ln_tsd_dmp 
     92         WRITE(numout,*) '      Initialisation of ocean T & S with T &S input data   ln_tsd_init   = ', ln_tsd_init 
     93         WRITE(numout,*) '      Interpolation of initial conditions in the vertical  ln_tsd_interp = ', ln_tsd_interp 
     94         WRITE(numout,*) '      damping of ocean T & S toward T &S input data        ln_tsd_dmp    = ', ln_tsd_dmp 
    8495         WRITE(numout,*) 
    8596         IF( .NOT.ln_tsd_init .AND. .NOT.ln_tsd_dmp ) THEN 
     
    94105         ln_tsd_init = .FALSE. 
    95106      ENDIF 
     107      IF( ln_tsd_interp .AND. ln_tsd_dmp ) THEN 
     108            CALL ctl_stop( 'dta_tsd_init: Tracer damping and vertical interpolation not yet configured' )   ;   RETURN 
     109      ENDIF 
     110      IF( ln_tsd_interp .AND. LEN(TRIM(sn_msk%wname)) > 0 ) THEN 
     111            CALL ctl_stop( 'dta_tsd_init: Using vertical interpolation and weights files not recommended' )   ;   RETURN 
     112      ENDIF 
    96113      ! 
    97114      !                             ! allocate the arrays (if necessary) 
    98115      IF( ln_tsd_init .OR. ln_tsd_dmp ) THEN 
    99116         ! 
    100          ALLOCATE( sf_tsd(jpts), STAT=ierr0 ) 
     117         IF( ln_tsd_interp ) THEN 
     118           ALLOCATE( sf_tsd(jpts+2), STAT=ierr0 ) ! to carry the addtional depth information 
     119         ELSE 
     120           ALLOCATE( sf_tsd(jpts  ), STAT=ierr0 )  
     121         ENDIF  
    101122         IF( ierr0 > 0 ) THEN 
    102123            CALL ctl_stop( 'dta_tsd_init: unable to allocate sf_tsd structure' )   ;   RETURN 
    103124         ENDIF 
    104125         ! 
    105                                 ALLOCATE( sf_tsd(jp_tem)%fnow(jpi,jpj,jpk)   , STAT=ierr0 ) 
    106          IF( sn_tem%ln_tint )   ALLOCATE( sf_tsd(jp_tem)%fdta(jpi,jpj,jpk,2) , STAT=ierr1 ) 
    107                                 ALLOCATE( sf_tsd(jp_sal)%fnow(jpi,jpj,jpk)   , STAT=ierr2 ) 
    108          IF( sn_sal%ln_tint )   ALLOCATE( sf_tsd(jp_sal)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 ) 
    109          ! 
    110          IF( ierr0 + ierr1 + ierr2 + ierr3 > 0 ) THEN 
     126         slf_i(jp_tem) = sn_tem   ;   slf_i(jp_sal) = sn_sal 
     127         IF( ln_tsd_interp ) slf_i(jp_dep) = sn_dep   ;   slf_i(jp_msk) = sn_msk 
     128         CALL fld_fill( sf_tsd, slf_i, cn_dir, 'dta_tsd', 'Temperature & Salinity data', 'namtsd' ) 
     129 
     130         IF( ln_tsd_interp ) THEN 
     131            CALL fld_clopn ( sf_tsd(jp_dep) )  
     132            IF(lwp) WRITE(numout,*) 'INFO: ', sf_tsd(jp_dep)%num, sn_dep%clvar 
     133            id = iom_varid( sf_tsd(jp_dep)%num, sn_dep%clvar, zdim ) 
     134            jpk_init = zdim(3) 
     135            IF(lwp) WRITE(numout,*) 'Dimension of veritcal coordinate in ICs: ', jpk_init 
     136            ! 
     137                                 ALLOCATE( sf_tsd(jp_tem)%fnow(jpi,jpj,jpk_init  ) , STAT=ierr0 ) 
     138            IF( sn_tem%ln_tint ) ALLOCATE( sf_tsd(jp_tem)%fdta(jpi,jpj,jpk_init,2) , STAT=ierr1 ) 
     139                                 ALLOCATE( sf_tsd(jp_sal)%fnow(jpi,jpj,jpk_init  ) , STAT=ierr2 ) 
     140            IF( sn_sal%ln_tint ) ALLOCATE( sf_tsd(jp_sal)%fdta(jpi,jpj,jpk_init,2) , STAT=ierr3 )   
     141                                 ALLOCATE( sf_tsd(jp_dep)%fnow(jpi,jpj,jpk_init  ) , STAT=ierr4 ) 
     142                                 ALLOCATE( sf_tsd(jp_msk)%fnow(jpi,jpj,jpk_init  ) , STAT=ierr5 ) 
     143         ELSE 
     144                                 ALLOCATE( sf_tsd(jp_tem)%fnow(jpi,jpj,jpk)   , STAT=ierr0 ) 
     145            IF( sn_tem%ln_tint ) ALLOCATE( sf_tsd(jp_tem)%fdta(jpi,jpj,jpk,2) , STAT=ierr1 ) 
     146                                 ALLOCATE( sf_tsd(jp_sal)%fnow(jpi,jpj,jpk)   , STAT=ierr2 ) 
     147            IF( sn_sal%ln_tint ) ALLOCATE( sf_tsd(jp_sal)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 )   
     148         ENDIF ! ln_tsd_interp 
     149 
     150         ! 
     151         IF( ierr0 + ierr1 + ierr2 + ierr3 + ierr4 + ierr5 > 0 ) THEN 
    111152            CALL ctl_stop( 'dta_tsd : unable to allocate T & S data arrays' )   ;   RETURN 
    112153         ENDIF 
     
    138179      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(  out) ::   ptsd   ! T & S data 
    139180      ! 
    140       INTEGER ::   ji, jj, jk, jl, jkk   ! dummy loop indicies 
     181      INTEGER ::   ji, jj, jk, jl, jk_init   ! dummy loop indicies 
    141182      INTEGER ::   ik, il0, il1, ii0, ii1, ij0, ij1   ! local integers 
    142183      REAL(wp)::   zl, zi                             ! local scalars 
    143       REAL(wp), DIMENSION(jpk) ::  ztp, zsp   ! 1D workspace 
    144184      !!---------------------------------------------------------------------- 
    145185      ! 
     
    176216!!gm end 
    177217      ! 
    178       ptsd(:,:,:,jp_tem) = sf_tsd(jp_tem)%fnow(:,:,:)    ! NO mask 
    179       ptsd(:,:,:,jp_sal) = sf_tsd(jp_sal)%fnow(:,:,:)  
    180       ! 
    181       IF( ln_sco ) THEN                   !==   s- or mixed s-zps-coordinate   ==! 
     218      IF( ln_tsd_interp ) THEN 
    182219         ! 
    183220         IF( kt == nit000 .AND. lwp )THEN 
    184221            WRITE(numout,*) 
    185             WRITE(numout,*) 'dta_tsd: interpolates T & S data onto the s- or mixed s-z-coordinate mesh' 
    186          ENDIF 
    187          ! 
    188          DO jj = 1, jpj                         ! vertical interpolation of T & S 
    189             DO ji = 1, jpi 
    190                DO jk = 1, jpk                        ! determines the intepolated T-S profiles at each (i,j) points 
     222            WRITE(numout,*) 'dta_tsd: interpolates T & S data onto current mesh' 
     223         ENDIF 
     224         DO jk = 1, jpk                        ! determines the intepolated T-S profiles at each (i,j) points 
     225            DO jj= 1, jpj 
     226               DO ji= 1, jpi 
    191227                  zl = gdept_0(ji,jj,jk) 
    192                   IF(     zl < gdept_1d(1  ) ) THEN          ! above the first level of data 
    193                      ztp(jk) =  ptsd(ji,jj,1    ,jp_tem) 
    194                      zsp(jk) =  ptsd(ji,jj,1    ,jp_sal) 
    195                   ELSEIF( zl > gdept_1d(jpk) ) THEN          ! below the last level of data 
    196                      ztp(jk) =  ptsd(ji,jj,jpkm1,jp_tem) 
    197                      zsp(jk) =  ptsd(ji,jj,jpkm1,jp_sal) 
    198                   ELSE                                      ! inbetween : vertical interpolation between jkk & jkk+1 
    199                      DO jkk = 1, jpkm1                                  ! when  gdept(jkk) < zl < gdept(jkk+1) 
    200                         IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 
    201                            zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 
    202                            ztp(jk) = ptsd(ji,jj,jkk,jp_tem) + ( ptsd(ji,jj,jkk+1,jp_tem) - ptsd(ji,jj,jkk,jp_tem) ) * zi  
    203                            zsp(jk) = ptsd(ji,jj,jkk,jp_sal) + ( ptsd(ji,jj,jkk+1,jp_sal) - ptsd(ji,jj,jkk,jp_sal) ) * zi 
     228                  IF( zl < sf_tsd(jp_dep)%fnow(ji,jj,1) ) THEN                     ! above the first level of data 
     229                     ptsd(ji,jj,jk,jp_tem) = sf_tsd(jp_tem)%fnow(ji,jj,1)  
     230                     ptsd(ji,jj,jk,jp_sal) = sf_tsd(jp_sal)%fnow(ji,jj,1) 
     231                  ELSEIF( zl > sf_tsd(jp_dep)%fnow(ji,jj,jpk_init) ) THEN          ! below the last level of data 
     232                     ptsd(ji,jj,jk,jp_tem) = sf_tsd(jp_tem)%fnow(ji,jj,jpk_init) 
     233                     ptsd(ji,jj,jk,jp_sal) = sf_tsd(jp_sal)%fnow(ji,jj,jpk_init) 
     234                  ELSE                                                             ! inbetween : vertical interpolation between jk_init & jk_init+1 
     235                     DO jk_init = 1, jpk_init-1                                    ! when  gdept(jk_init) < zl < gdept(jk_init+1) 
     236                        IF( sf_tsd(jp_msk)%fnow(ji,jj,jk_init+1) == 0 ) THEN       ! if there is no data fill down 
     237                           sf_tsd(jp_tem)%fnow(ji,jj,jk_init+1) = sf_tsd(jp_tem)%fnow(ji,jj,jk_init) 
     238                           sf_tsd(jp_sal)%fnow(ji,jj,jk_init+1) = sf_tsd(jp_sal)%fnow(ji,jj,jk_init) 
     239                        ENDIF 
     240                        IF( (zl-sf_tsd(jp_dep)%fnow(ji,jj,jk_init)) * (zl-sf_tsd(jp_dep)%fnow(ji,jj,jk_init+1)) <= 0._wp ) THEN 
     241                           zi = ( zl - sf_tsd(jp_dep)%fnow(ji,jj,jk_init) ) / & 
     242                        &       (sf_tsd(jp_dep)%fnow(ji,jj,jk_init+1)-sf_tsd(jp_dep)%fnow(ji,jj,jk_init)) 
     243                           ptsd(ji,jj,jk,jp_tem) = sf_tsd(jp_tem)%fnow(ji,jj,jk_init) + & 
     244                        &                          (sf_tsd(jp_tem)%fnow(ji,jj,jk_init+1)-sf_tsd(jp_tem)%fnow(ji,jj,jk_init)) * zi 
     245                           ptsd(ji,jj,jk,jp_sal) = sf_tsd(jp_sal)%fnow(ji,jj,jk_init) + & 
     246                        &                          (sf_tsd(jp_sal)%fnow(ji,jj,jk_init+1)-sf_tsd(jp_sal)%fnow(ji,jj,jk_init)) * zi 
    204247                        ENDIF 
    205248                     END DO 
    206249                  ENDIF 
    207                END DO 
    208                DO jk = 1, jpkm1 
    209                   ptsd(ji,jj,jk,jp_tem) = ztp(jk) * tmask(ji,jj,jk)     ! mask required for mixed zps-s-coord 
    210                   ptsd(ji,jj,jk,jp_sal) = zsp(jk) * tmask(ji,jj,jk) 
    211                END DO 
    212                ptsd(ji,jj,jpk,jp_tem) = 0._wp 
    213                ptsd(ji,jj,jpk,jp_sal) = 0._wp 
    214             END DO 
     250               ENDDO 
     251            ENDDO 
    215252         END DO 
    216          !  
    217       ELSE                                !==   z- or zps- coordinate   ==! 
    218          !                              
    219          ptsd(:,:,:,jp_tem) = ptsd(:,:,:,jp_tem) * tmask(:,:,:)    ! Mask 
    220          ptsd(:,:,:,jp_sal) = ptsd(:,:,:,jp_sal) * tmask(:,:,:) 
     253         ! 
     254         ptsd(:,:,:,jp_tem) = ptsd(:,:,:,jp_tem) *tmask(:,:,:) 
     255         ptsd(:,:,:,jp_sal) = ptsd(:,:,:,jp_sal) *tmask(:,:,:) 
     256      ELSE                                 
     257         ! 
     258         CALL ctl_warn('dta_tsd: T & S data are assumed to be on the current mesh. No interpolation performed') 
     259         !                   
     260         ptsd(:,:,:,jp_tem) = sf_tsd(jp_tem)%fnow(:,:,:)  * tmask(:,:,:)  ! Mask 
     261         ptsd(:,:,:,jp_sal) = sf_tsd(jp_sal)%fnow(:,:,:)  * tmask(:,:,:) 
    221262         ! 
    222263         IF( ln_zps ) THEN                      ! zps-coordinate (partial steps) interpolation at the last ocean level 
     
    248289                                        DEALLOCATE( sf_tsd(jp_sal)%fnow )     ! S arrays in the structure 
    249290         IF( sf_tsd(jp_sal)%ln_tint )   DEALLOCATE( sf_tsd(jp_sal)%fdta ) 
     291         IF( ln_tsd_interp )            DEALLOCATE( sf_tsd(jp_dep)%fnow )     ! T arrays in the structure 
     292         IF( ln_tsd_interp )            DEALLOCATE( sf_tsd(jp_msk)%fnow )     ! T arrays in the structure 
    250293                                        DEALLOCATE( sf_tsd              )     ! the structure itself 
    251294      ENDIF 
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/sbctide.F90

    r14075 r15737  
    1616   USE ioipsl         ! NetCDF IPSL library 
    1717   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     18 
     19   USE bdytides ! davbyr - Access to love number 
    1820 
    1921   IMPLICIT NONE 
     
    108110 
    109111      DO jk = 1, nb_harmo 
    110          zcons = 0.7_wp * Wave(ntide(jk))%equitide * ftide(jk) 
     112         ! davbyr - Insert variable Love number where once was 0.7 
     113         zcons = dn_love_number * Wave(ntide(jk))%equitide * ftide(jk) 
     114         ! END davbyr 
    111115         DO ji = 1, jpi 
    112116            DO jj = 1, jpj 
     
    119123               IF    ( Wave(ntide(jk))%nutide == 1 )  THEN  ;  zcs = zcons * SIN( 2._wp*zlat ) 
    120124               ELSEIF( Wave(ntide(jk))%nutide == 2 )  THEN  ;  zcs = zcons * COS( zlat )**2 
     125               ! davbyr - Include long period tidal forcing 
     126               ELSEIF( Wave(ntide(jk))%nutide == 0 )  THEN  ;  zcs = zcons * (0.5_wp-1.5_wp*SIN(zlat)**2._wp) 
     127               ! END - davbyr 
    121128               ELSE                                         ;  zcs = 0._wp 
    122129               ENDIF 
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/tide.h90

    r14075 r15737  
    22   !! History :  3.2  !  2007  (O. Le Galloudec)  Original code 
    33   !!---------------------------------------------------------------------- 
    4  
     4   !! TIDES ADDED  ! 2017 (Nico Bruneau)  
     5   !! Following this document that seems to match implemented code  
     6   !!    https://docs.lib.noaa.gov/rescue/cgs_specpubs/QB275U35no981924.pdf 
     7   !! see page 189 for some proposed values 
     8   !! 
     9   !! The convention which seems to have been chosen is the Shureman one and  
     10   !! not the Cartwright and Tayer (1971) 
     11   !! This is probably due to the fact the Schureman has a solar calendar  
     12   !! while Cartwright and Tayer is based on a lunar calendar 
     13   !! 
     14   !! Therefore the coefficient are not the Doodson number but the one  
     15   !! defined by Schureman. For example : 
     16   !! M2 : Doodson   : 2  0 0 0 0 0 
     17   !!      Schureman : 2 -2 2 0 0 0 
     18   !! 
     19   !! Components 1-34 are for FES 2014 
     20   !! Components >= 35 are the one that were initially present in NEMO and not in FES14 
     21   !!                  keep in mind than equitide coefficient have been ajusted for the 
     22   !!                  34 FES 2014 constituents 
     23   !!  
     24   !! The different coefficient are as follows 
     25   !!   - nt   = T  = Number of Julian centuries (36625 days) from Greenwich mean noon on December 31, 1899. 
     26   !!               = Hour angle of mean sun 
     27   !!   - ns   = s  = mean longitude of the moon 
     28   !!   - nh   = h  = mean longitude of the sun 
     29   !!   - np   = p  = mean longitude of the lunar perigee 
     30   !!   - np1  = p1 = mean longitude of the solar perigee 
     31   !!   - shift appears in table as a bias in degree 
     32   !!   - nksi Coefficient for the longitude in moon's orbit of lunar intersection 
     33   !!   - nu0 Coefficient for the right ascension of lunar intersection 
     34   !!   - nu1 Coefficient for the term in argument of lunisolar constituent K1 
     35   !!   - nu2 Coefficient for the term in argument of lunisolar constituent K2 
     36   !!   - R = ???  
     37   !!   - Formula = Nodal factor function; see the table of Schureman. Implemented in tide_mod.F90  
     38   !!  
     39   !! The equitide parameter seems to be the equilibrium tide amplitude corrected 
     40   !! with the C_n^m coefficient: see Cartwright and Tayer (1971) equation 12  
     41   !! and Table 2 
     42   !! As an example in their Table 4c (p66), M2 (200000) has an amplitude of  
     43   !! around 0.63186 m 
     44   !! Table 2, give us a correction of m = 2, n = 2 (semi-diurnal) 
     45   !! 0.63186*3*sqrt( 5 / 96 / pi ) = 0.24407  
     46   !! very close to the one define originally here : 0.242297 
     47   !! Third order terms are neglected 
     48   !! 
     49   !! So to correct (to match what is implemented in sbctide.F90 - take care CT71 uses co-latitude): 
     50   !!    - long wave : Amplitude from CT71 * [ -1   * sqrt( 5 /  4 / pi ) ] 
     51   !!    - diurnal   : Amplitude from CT71 * [ -3/2 * sqrt( 5 / 24 / pi ) ] 
     52   !!    - semi-diur : Amplitude from CT71 * [  3   * sqrt( 5 / 96 / pi ) ] 
     53   !! 
     54   !! ATTENTION: convention seems to be to have a positive coefficient and a 180 shift to  
     55   !!            represent negative value. to be confirmed though. 
     56   !! 
     57   !! All equtide were computed using the last epocs from Cartwright and Tayer (1971) multiply by 
     58   !! the corresponding coefficient of their table 2 
     59   !!  
     60   !! nutide is used to compute tide potential - it uses a different formulation depending of nutide 
     61   !! see sbctide.F90 in function tide_init_potential 
     62   !! 
     63   !! Some random note 
     64   !! in cnes fes tool: 
     65   !!        Msf has nksi = 2 and nnu0 = -2 which is reverse from Schureman (I kept the Schureman one) 
     66   !! 
     67   !!---------------------------------------------------------------------- 
     68   ! 
    569   !             !! name_tide , equitide , nutide , nt , ns , nh , np , np1 , shift , nksi , nnu0 , nnu1 , nnu2 , R , formula !! 
    670   !             !!           !          !        !    !    !    !    !     !       !      !      !      !      !   !         !! 
    7    Wave( 1) = tide(  'M2'     , 0.242297 ,    2   ,  2 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    8    Wave( 2) = tide(  'N2'     , 0.046313 ,    2   ,  2 , -3 ,  2 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    9    Wave( 3) = tide( '2N2'     , 0.006184 ,    2   ,  2 , -4 ,  2 ,  2 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    10    Wave( 4) = tide(  'S2'     , 0.113572 ,    2   ,  2 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
    11    Wave( 5) = tide(  'K2'     , 0.030875 ,    2   ,  2 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   , -2   , 0 ,   235   ) 
    12    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    13    Wave( 6) = tide(  'K1'     , 0.142408 ,    1   ,  1 ,  0 ,  1 ,  0 ,  0  ,  -90  ,  0   ,  0   , -1   ,  0   , 0 ,   227   ) 
    14    Wave( 7) = tide(  'O1'     , 0.101266 ,    1   ,  1 , -2 ,  1 ,  0 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
    15    Wave( 8) = tide(  'Q1'     , 0.019387 ,    1   ,  1 , -3 ,  1 ,  1 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
    16    Wave( 9) = tide(  'P1'     , 0.047129 ,    1   ,  1 ,  0 , -1 ,  0 ,  0  ,  +90  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
    17    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    18    Wave(10) = tide(  'M4'     , 0.000000 ,    4   ,  4 , -4 ,  4 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,    1    ) 
    19    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    20    Wave(11) = tide(  'Mf'     , 0.042017 ,    0   ,  0 ,  2 ,  0 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    21    Wave(12) = tide(  'Mm'     , 0.022191 ,    0   ,  0 ,  1 ,  0 , -1 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,   73    ) 
    22    Wave(13) = tide(  'Msqm'   , 0.000667 ,    0   ,  0 ,  4 , -2 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    23    Wave(14) = tide(  'Mtm'    , 0.008049 ,    0   ,  0 ,  3 ,  0 , -1 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    24    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    25    Wave(15) = tide(  'S1'     , 0.000000 ,    1   ,  1 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    )    
    26    Wave(16) = tide(  'MU2'    , 0.005841 ,    2   ,  2 , -4 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    ) 
    27    Wave(17) = tide(  'NU2'    , 0.009094 ,    2   ,  2 , -3 ,  4 , -1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    )  
    28    Wave(18) = tide(  'L2'     , 0.006694 ,    2   ,  2 , -1 ,  2 , -1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,  215    ) 
    29    Wave(19) = tide(  'T2'     , 0.006614 ,    2   ,  2 ,  0 , -1 ,  0 ,  1  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
     71   ! 
     72   ! Long Period Tides 
     73   Wave( 1) = tide(  'SA'     , 0.003103 ,    0   ,  0 ,  0 ,  1 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
     74   Wave( 2) = tide(  'SSA'    , 0.019523 ,    0   ,  0 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
     75   Wave( 3) = tide(  'MM'     , 0.022191 ,    0   ,  0 ,  1 ,  0 , -1 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,   73    ) 
     76   Wave( 4) = tide(  'MF'     , 0.042023 ,    0   ,  0 ,  2 ,  0 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     77   Wave( 5) = tide(  'MTM'    , 0.008042 ,    0   ,  0 ,  3 ,  0 , -1 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     78   Wave( 6) = tide(  'MSF'    , 0.003671 ,    0   ,  0 ,  2 , -2 ,  0 ,  0  ,    0  , -2   ,  2   ,  0   ,  0   , 0 ,   78    ) 
     79   Wave( 7) = tide(  'MSQM'   , 0.001293 ,    0   ,  0 ,  4 , -2 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     80   ! 
     81   ! Diurnal Tides 
     82   Wave( 8) = tide(  'K1'     , 0.142442 ,    1   ,  1 ,  0 ,  1 ,  0 ,  0  ,  -90  ,  0   ,  0   , -1   ,  0   , 0 ,   227   ) 
     83   Wave( 9) = tide(  'O1'     , 0.101277 ,    1   ,  1 , -2 ,  1 ,  0 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
     84   Wave(10) = tide(  'Q1'     , 0.019383 ,    1   ,  1 , -3 ,  1 ,  1 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
     85   Wave(11) = tide(  'P1'     , 0.047145 ,    1   ,  1 ,  0 , -1 ,  0 ,  0  ,  +90  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     86   Wave(12) = tide(  'S1'     ,-0.001116 ,    1   ,  1 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     87   Wave(13) = tide(  'J1'     ,-0.007961 ,    1   ,  1 ,  1 ,  1 , -1 ,  0  ,  -90  ,  0   , -1   ,  0   ,  0   , 0 ,    76   ) 
     88   ! 
     89   ! Semi-Diurnal Tides 
     90   Wave(14) = tide(  'M2'     , 0.244083 ,    2   ,  2 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     91   Wave(15) = tide(  'N2'     , 0.046720 ,    2   ,  2 , -3 ,  2 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     92   Wave(16) = tide(  'S2'     , 0.113565 ,    2   ,  2 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     93   Wave(17) = tide(  'K2'     , 0.030875 ,    2   ,  2 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   , -2   , 0 ,   235   ) 
     94   Wave(18) = tide(  'L2'     , 0.006903 ,    2   ,  2 , -1 ,  2 , -1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,   215   ) 
     95   Wave(19) = tide(  'T2'     , 0.006644 ,    2   ,  2 ,  0 , -1 ,  0 ,  1  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     96   Wave(20) = tide(  'R2'     , 0.000950 ,    2   ,  2 ,  0 ,  1 ,  0 , -1  , +180  ,  2   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     97   ! 
     98   Wave(21) = tide(  'MU2'    , 0.007451 ,    2   ,  2 , -4 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     99   Wave(22) = tide(  'NU2'    , 0.008873 ,    2   ,  2 , -3 ,  4 , -1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     100   Wave(23) = tide( '2N2'     , 0.006176 ,    2   ,  2 , -4 ,  2 ,  2 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     101   Wave(24) = tide(  'MKS2'   , 0.000000 ,    2   ,  2 , -2 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   , -2   , 0 ,     4   ) 
     102   Wave(25) = tide(  'LA2'    , 0.001800 ,    2   ,  2 , -1 ,  0 ,  1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     103   Wave(26) = tide(  'EPS2'   , 0.001796 ,    2   ,  2 , -5 ,  4 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     104   ! 
     105   ! Harmonic and others 
     106   Wave(27) = tide(  'M3'     , 0.000000 ,    3   ,  3 , -3 ,  3 ,  0 ,  0  ,    0  ,  3   , -3   ,  0   ,  0   , 0 ,   149   ) 
     107   Wave(28) = tide(  'M4'     , 0.000000 ,    4   ,  4 , -4 ,  4 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,     1   ) 
     108   Wave(29) = tide(  'M6'     , 0.000000 ,    6   ,  6 , -6 ,  6 ,  0 ,  0  ,    0  ,  6   , -6   ,  0   ,  0   , 0 ,    18   ) 
     109   Wave(30) = tide(  'M8'     , 0.000000 ,    8   ,  8 , -8 ,  8 ,  0 ,  0  ,    0  ,  8   , -8   ,  0   ,  0   , 0 ,    20   ) 
     110   Wave(31) = tide(  'N4'     , 0.000000 ,    4   ,  4 , -6 ,  4 ,  2 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,     1   ) 
     111   Wave(32) = tide(  'S4'     , 0.000000 ,    4   ,  4 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     112   Wave(33) = tide(  'MN4'    , 0.000000 ,    4   ,  4 , -5 ,  4 ,  1 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,     1   ) 
     113   Wave(34) = tide(  'MS4'    , 0.000000 ,    4   ,  4 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     114   !  
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/tide_mod.F90

    r14075 r15737  
    1616   PUBLIC   tide_init_Wave   ! called by tideini and diaharm modules 
    1717 
    18    INTEGER, PUBLIC, PARAMETER ::   jpmax_harmo = 19   !: maximum number of harmonic 
     18   ! davbyr: increase maximum number of harmonics from 19 to 34 
     19   INTEGER, PUBLIC, PARAMETER ::   jpmax_harmo = 34   !: maximum number of harmonic 
    1920 
    2021   TYPE, PUBLIC ::    tide 
     
    331332         zf = zf * zf1 * zf1 
    332333         ! 
     334          
     335      !--- davbyr 11/2017 
     336      CASE( 20 )                 !==  formule 20,  compound waves ( 78 x 78 x 78 x 78 ) 
     337         zf1 = nodal_factort(78) 
     338         zf  = zf1 * zf1 * zf1 * zf1 
     339      !--- END davbyr 
    333340      CASE( 73 )                 !==  formule 73 
    334341         zs = sin(sh_I) 
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/tideini.F90

    r14075 r15737  
    3434   REAL(wp), PUBLIC ::   rdttideramp     !: 
    3535   REAL(wp), PUBLIC ::   rn_scal_load    !: 
     36   ! davbyr - read love number from namelist 
     37   REAL(wp), PUBLIC ::   dn_love_number  !: 
     38   ! END davbyr 
    3639   CHARACTER(lc), PUBLIC ::   cn_tide_load   !:  
    3740 
     
    5457      ! 
    5558      NAMELIST/nam_tide/ln_tide, ln_tide_pot, ln_scal_load, ln_read_load, cn_tide_load, & 
    56                   &     ln_tide_ramp, rn_scal_load, rdttideramp, clname 
     59                  &     ln_tide_ramp, rn_scal_load, rdttideramp, dn_love_number, clname 
    5760      !!---------------------------------------------------------------------- 
    5861      ! 
     
    8083            WRITE(numout,*) '         Fraction of SSH used in scal. approx.   rn_scal_load = ', rn_scal_load 
    8184            WRITE(numout,*) '         Duration (days) of ramp                 rdttideramp  = ', rdttideramp 
     85            ! davbyr - Love number (one line) 
     86            WRITE(numout,*) '         Love Number                             dn_love_number = ', dn_love_number 
    8287         ENDIF 
    8388      ELSE 
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/ZDF/zdfgls.F90

    r14075 r15737  
    110110   !!---------------------------------------------------------------------- 
    111111   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
    112    !! $Id$ 
     112   !! $Id: zdfgls.F90 13511 2020-09-24 08:55:10Z smasson $ 
    113113   !! Software governed by the CeCILL license (see ./LICENSE) 
    114114   !!---------------------------------------------------------------------- 
     
    188188         DO jj = 2, jpjm1                      ! bottom friction 
    189189            DO ji = fs_2, fs_jpim1   ! vector opt.          
    190                zmsku = ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
    191                zmskv = ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) )     ! (CAUTION: CdU<0) 
     190               zmsku = 0.5_wp * ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
     191               zmskv = 0.5_wp * ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) )     ! (CAUTION: CdU<0) 
    192192               ustar2_bot(ji,jj) = - rCdU_bot(ji,jj) * SQRT(  ( zmsku*( ub(ji,jj,mbkt(ji,jj))+ub(ji-1,jj,mbkt(ji,jj)) ) )**2  & 
    193193                  &                                         + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2  ) 
     
    197197            DO jj = 2, jpjm1 
    198198               DO ji = fs_2, fs_jpim1   ! vector opt. 
    199                   zmsku = ( 2._wp - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
    200                   zmskv = ( 2._wp - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) )     ! (CAUTION: CdU<0) 
     199                  zmsku = 0.5_wp * ( 2._wp - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
     200                  zmskv = 0.5_wp * ( 2._wp - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) )     ! (CAUTION: CdU<0) 
    201201                  ustar2_top(ji,jj) = - rCdU_top(ji,jj) * SQRT(  ( zmsku*( ub(ji,jj,mikt(ji,jj))+ub(ji-1,jj,mikt(ji,jj)) ) )**2  & 
    202202                     &                                         + ( zmskv*( vb(ji,jj,mikt(ji,jj))+vb(ji,jj-1,mikt(ji,jj)) ) )**2  ) 
     
    413413               zdiag(ji,jj,ibot) = 1._wp   ;   zdiag(ji,jj,ibotm1) = zdiag(ji,jj,ibotm1) + zd_up(ji,jj,ibotm1) 
    414414               zd_up(ji,jj,ibot) = 0._wp   ;   zd_up(ji,jj,ibotm1) = 0._wp 
     415               en   (ji,jj,ibot) = z_en 
    415416            END DO 
    416417         END DO 
     
    429430                  zdiag(ji,jj,itop) = 1._wp   ;   zdiag(ji,jj,itopp1) = zdiag(ji,jj,itopp1) + zd_up(ji,jj,itopp1) 
    430431                  zd_up(ji,jj,itop) = 0._wp   ;   zd_up(ji,jj,itopp1) = 0._wp 
     432                  en   (ji,jj,itop) = z_en 
    431433               END DO 
    432434            END DO 
     
    12361238   !!====================================================================== 
    12371239END MODULE zdfgls 
    1238  
  • NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/par_oce.F90

    r14075 r15737  
    6464   INTEGER, PUBLIC, PARAMETER ::   jp_tem = 1    !: indice for temperature 
    6565   INTEGER, PUBLIC, PARAMETER ::   jp_sal = 2    !: indice for salinity 
    66  
     66   !annkat 
     67   INTEGER, PUBLIC, PARAMETER ::   jp_dep = 3    !: indice for depth 
     68   INTEGER, PUBLIC, PARAMETER ::   jp_msk = 4    !: indice for mask 
    6769   !!---------------------------------------------------------------------- 
    6870   !!   Domain decomposition 
Note: See TracChangeset for help on using the changeset viewer.