Changeset 7678


Ignore:
Timestamp:
2017-02-13T18:28:39+01:00 (4 years ago)
Author:
mathiot
Message:

add option to read shlat2d

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

Legend:

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

    r7540 r7678  
    563563&namlbc        !   lateral momentum boundary condition 
    564564!----------------------------------------------------------------------- 
     565!              ! file name ! frequency (hours) !   variable   ! time interp.   !  clim   ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
     566!              !           !  (if <0  months)  !     name     !   (logical)    !  (T/F ) ! 'monthly' ! filename ! pairing  ! filename      ! 
     567   sn_shlat2d  =  'shlat_coef.nc',     -12     ,   'shlat2d'  ,    .false.     ,  .true. ,  'yearly' , ''       , ''       , '' 
     568   ln_shlat2d  = .false.   !  read lateral momentum boundary condition from a file (T) 
    565569   rn_shlat    =    2.     !  shlat = 0  !  0 < shlat < 2  !  shlat = 2  !  2 < shlat 
    566570                           !  free slip  !   partial slip  !   no slip   ! strong slip 
  • branches/UKMO/dev_r7651_GO6pck_shlat2d/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90

    r6491 r7678  
    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 
     
    138140      REAL(wp) ::  zphi_drake_passage, zshlat_antarc 
    139141      REAL(wp), POINTER, DIMENSION(:,:) ::  zwf 
    140       !! 
    141       NAMELIST/namlbc/ rn_shlat, ln_vorlat 
     142 
     143      INTEGER  :: inum             !  logical unit for shlat2d 
     144      REAL(wp) :: zshlat           !: locally modified shlat for some strait 
     145      REAL(wp), POINTER, DIMENSION(:,:) :: zshlat2d 
     146      LOGICAL  :: ln_shlat2d 
     147      TYPE(FLD_N) :: sn_shlat2d 
     148      !! 
     149      NAMELIST/namlbc/ rn_shlat, ln_vorlat, ln_shlat2d, sn_shlat2d 
    142150      !!--------------------------------------------------------------------- 
    143151      ! 
     
    172180         WRITE(ctmp1,*) ' rn_shlat is negative = ', rn_shlat 
    173181         CALL ctl_stop( ctmp1 ) 
     182      ENDIF 
     183 
     184      IF ( ln_shlat2d ) THEN 
     185         IF(lwp) WRITE(numout,*) '         READ shlat as a 2D coefficient in a file ' 
     186         CALL wrk_alloc( jpi, jpj, zshlat2d  ) 
     187         CALL iom_open(sn_shlat2d%clname, inum) 
     188         CALL iom_get (inum, jpdom_data, sn_shlat2d%clvar, zshlat2d, 1) ! 
     189         CALL iom_close(inum) 
    174190      ENDIF 
    175191 
     
    350366      DO jk = 1, jpk 
    351367         zwf(:,:) = fmask(:,:,jk)          
    352          DO jj = 2, jpjm1 
    353             DO ji = fs_2, fs_jpim1   ! vector opt. 
    354                IF( fmask(ji,jj,jk) == 0._wp ) THEN 
    355                   fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
    356                      &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
    357                ENDIF 
    358             END DO 
    359          END DO 
     368         IF (  ln_shlat2d ) THEN 
     369            DO jj = 2, jpjm1 
     370               DO ji = fs_2, fs_jpim1   ! vector opt. 
     371                  IF( fmask(ji,jj,jk) == 0. ) THEN 
     372                     fmask(ji,jj,jk) = zshlat2d(ji,jj) * MIN( 1._wp, MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
     373                        &                                              zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
     374                  ENDIF 
     375               END DO 
     376            END DO 
     377         ELSE 
     378            DO jj = 2, jpjm1 
     379               DO ji = fs_2, fs_jpim1   ! vector opt. 
     380                  IF( fmask(ji,jj,jk) == 0._wp ) THEN 
     381                     fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
     382                        &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
     383                  ENDIF 
     384               END DO 
     385            END DO 
     386         ENDIF 
    360387         DO jj = 2, jpjm1 
    361388            IF( fmask(1,jj,jk) == 0._wp ) THEN 
     
    520547      CALL wrk_dealloc( jpi, jpj, imsk ) 
    521548      CALL wrk_dealloc( jpi, jpj, zwf  ) 
     549      IF ( ln_shlat2d ) THEN 
     550        CALL wrk_dealloc( jpi, jpj, zshlat2d  ) 
     551      ENDIF 
    522552      ! 
    523553      IF( nn_timing == 1 )  CALL timing_stop('dom_msk') 
Note: See TracChangeset for help on using the changeset viewer.