Changeset 6568


Ignore:
Timestamp:
2016-05-19T10:50:32+02:00 (5 years ago)
Author:
mathiot
Message:

UKMO/dev_5518_shlat2d: add variable slip condition

Location:
branches/UKMO/dev_5518_shlat2d/NEMOGCM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_5518_shlat2d/NEMOGCM/CONFIG/SHARED/namelist_ref

    r5501 r6568  
    555555&namlbc        !   lateral momentum boundary condition 
    556556!----------------------------------------------------------------------- 
     557!              ! file name ! frequency (hours) !   variable   ! time interp.   !  clim   ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
     558!              !           !  (if <0  months)  !     name     !   (logical)    !  (T/F ) ! 'monthly' ! filename ! pairing  ! filename      ! 
     559   sn_shlat2d  =  'shlat_coef.nc',     -12     ,   'shlat2d'  ,    .false.     ,  .true. ,  'yearly' , ''       , ''       , '' 
     560   ln_shlat2d  = .false.   !  read lateral momentum boundary condition from a file (T) 
    557561   rn_shlat    =    2.     !  shlat = 0  !  0 < shlat < 2  !  shlat = 2  !  2 < shlat 
    558562                           !  free slip  !   partial slip  !   no slip   ! strong slip 
  • branches/UKMO/dev_5518_shlat2d/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90

    r6567 r6568  
    3131   USE wrk_nemo        ! Memory allocation 
    3232   USE timing          ! Timing 
     33   USE iom             ! For shlat2d 
     34   USE fldread         ! for sn_shlat2d 
    3335 
    3436   IMPLICIT NONE 
     
    137139      INTEGER , POINTER, DIMENSION(:,:) ::  imsk 
    138140      REAL(wp), POINTER, DIMENSION(:,:) ::  zwf 
    139       !! 
    140       NAMELIST/namlbc/ rn_shlat, ln_vorlat 
     141 
     142      INTEGER  :: inum             !  logical unit for shlat2d 
     143      REAL(wp) :: zshlat           !: locally modified shlat for some strait 
     144      REAL(wp), POINTER, DIMENSION(:,:) :: zshlat2d 
     145      LOGICAL  :: ln_shlat2d 
     146      TYPE(FLD_N) :: sn_shlat2d 
     147      !! 
     148      NAMELIST/namlbc/ rn_shlat, ln_vorlat, ln_shlat2d, sn_shlat2d 
    141149      !!--------------------------------------------------------------------- 
    142150      ! 
     
    173181      ENDIF 
    174182 
     183      IF ( ln_shlat2d ) THEN 
     184         IF(lwp) WRITE(numout,*) '         READ shlat as a 2D coefficient in a file ' 
     185         CALL wrk_alloc( jpi, jpj, zshlat2d  ) 
     186         CALL iom_open(sn_shlat2d%clname, inum) 
     187         CALL iom_get (inum, jpdom_data, sn_shlat2d%clvar, zshlat2d, 1) ! 
     188         CALL iom_close(inum) 
     189      ENDIF 
     190 
    175191      ! 1. Ocean/land mask at t-point (computed from mbathy) 
    176192      ! ----------------------------- 
     
    185201         END DO   
    186202      END DO   
    187        
     203 
    188204      ! (ISF) define barotropic mask and mask the ice shelf point 
    189205      ssmask(:,:)=tmask(:,:,1) ! at this stage ice shelf is not masked 
     
    349365      DO jk = 1, jpk 
    350366         zwf(:,:) = fmask(:,:,jk)          
    351          DO jj = 2, jpjm1 
    352             DO ji = fs_2, fs_jpim1   ! vector opt. 
    353                IF( fmask(ji,jj,jk) == 0._wp ) THEN 
    354                   fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
    355                      &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
    356                ENDIF 
    357             END DO 
    358          END DO 
     367         IF (  ln_shlat2d ) THEN 
     368            DO jj = 2, jpjm1 
     369               DO ji = fs_2, fs_jpim1   ! vector opt. 
     370                  IF( fmask(ji,jj,jk) == 0. ) THEN 
     371                     fmask(ji,jj,jk) = zshlat2d(ji,jj) * MIN( 1._wp, MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
     372                        &                                              zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
     373                  ENDIF 
     374               END DO 
     375            END DO 
     376         ELSE 
     377            DO jj = 2, jpjm1 
     378               DO ji = fs_2, fs_jpim1   ! vector opt. 
     379                  IF( fmask(ji,jj,jk) == 0._wp ) THEN 
     380                     fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
     381                        &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
     382                  ENDIF 
     383               END DO 
     384            END DO 
     385         ENDIF 
    359386         DO jj = 2, jpjm1 
    360387            IF( fmask(1,jj,jk) == 0._wp ) THEN 
     
    496523      CALL wrk_dealloc( jpi, jpj, imsk ) 
    497524      CALL wrk_dealloc( jpi, jpj, zwf  ) 
     525      IF ( ln_shlat2d ) THEN 
     526        CALL wrk_dealloc( jpi, jpj, zshlat2d  ) 
     527      ENDIF 
    498528      ! 
    499529      IF( nn_timing == 1 )  CALL timing_stop('dom_msk') 
Note: See TracChangeset for help on using the changeset viewer.