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 14770 for NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/tests/VORTEX/MY_SRC/usrdef_istate.F90 – NEMO

Ignore:
Timestamp:
2021-04-30T12:05:23+02:00 (3 years ago)
Author:
mcastril
Message:

[DiagGPU] Update with trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r13747_HPC-11_mcastril_HPDAonline_DiagGPU/tests/VORTEX/MY_SRC/usrdef_istate.F90

    r13295 r14770  
    88   !!====================================================================== 
    99   !! History :  NEMO ! 2017-11  (J. Chanut) Original code 
     10   !!                 ! 2020-11  (S. Techene, G. Madec) separate tsuv from ssh 
    1011   !!---------------------------------------------------------------------- 
    1112 
     
    1617   USE dom_oce , ONLY : glamt, gphit, glamu, gphiu, glamv, gphiv   
    1718   USE phycst         ! physical constants 
     19   USE eosbn2  , ONLY : rn_a0 
    1820   ! 
    1921   USE in_out_manager ! I/O manager 
     
    2628   PRIVATE 
    2729 
    28    PUBLIC   usr_def_istate   ! called by istate.F90 
     30   PUBLIC   usr_def_istate       ! called by istate.F90 
     31   PUBLIC   usr_def_istate_ssh   ! called by domqco.F90 
    2932 
    3033   !! * Substitutions 
     
    3740CONTAINS 
    3841   
    39    SUBROUTINE usr_def_istate( pdept, ptmask, pts, pu, pv, pssh ) 
     42   SUBROUTINE usr_def_istate( pdept, ptmask, pts, pu, pv ) 
    4043      !!---------------------------------------------------------------------- 
    4144      !!                   ***  ROUTINE usr_def_istate  *** 
     
    5255      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pu      ! i-component of the velocity  [m/s]  
    5356      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pv      ! j-component of the velocity  [m/s]  
    54       REAL(wp), DIMENSION(jpi,jpj)         , INTENT(  out) ::   pssh    ! sea-surface height 
    5557      ! 
    5658      INTEGER  :: ji, jj, jk  ! dummy loop indices 
     
    6769      zf0   = 2._wp * omega * SIN( rad * rn_ppgphi0 ) 
    6870      zumax = 1._wp * SIGN(1._wp, zf0) ! Here Anticyclonic: set zumax=-1 for cyclonic 
    69       zlambda = SQRT(2._wp)*60.e3      ! Horizontal scale in meters  
     71      zlambda = SQRT(2._wp)*60.e3      ! Horizontal scale in meters 
    7072      zn2 = 3.e-3**2 
    7173      zH = 0.5_wp * 5000._wp 
    7274      ! 
    7375      zP0 = rho0 * zf0 * zumax * zlambda * SQRT(EXP(1._wp)/2._wp) 
    74       ! 
    75       ! Sea level: 
    76       za = -zP0 * (1._wp-EXP(-zH)) / (grav*(zH-1._wp + EXP(-zH))) 
    77       DO_2D( 1, 1, 1, 1 ) 
    78          zx = glamt(ji,jj) * 1.e3 
    79          zy = gphit(ji,jj) * 1.e3 
    80          zrho1 = rho0 + za * EXP(-(zx**2+zy**2)/zlambda**2) 
    81          pssh(ji,jj) = zP0 * EXP(-(zx**2+zy**2)/zlambda**2)/(zrho1*grav) * ptmask(ji,jj,1) 
    82       END_2D 
    8376      ! 
    8477      ! temperature:          
     
    9386                  & * EXP(-(zx**2+zy**2)/zlambda**2) / (grav*(zH -1._wp + EXP(-zH))); 
    9487            ENDIF 
    95             pts(ji,jj,jk,jp_tem) = (20._wp + (rho0-zrho1) / 0.28_wp) * ptmask(ji,jj,jk) 
     88            pts(ji,jj,jk,jp_tem) = (20._wp + (rho0-zrho1) / rn_a0 ) * ptmask(ji,jj,jk) 
    9689         END DO 
    9790      END_2D 
    9891      ! 
    9992      ! salinity:   
    100       pts(:,:,:,jp_sal) = 35._wp  
     93      pts(:,:,:,jp_sal) = 35._wp * ptmask(:,:,:)  
    10194      ! 
    10295      ! velocities: 
     
    130123      END_2D 
    131124      ! 
    132       CALL lbc_lnk_multi( 'usrdef_istate', pu, 'U', -1., pv, 'V', -1. ) 
     125      CALL lbc_lnk( 'usrdef_istate', pu, 'U', -1., pv, 'V', -1. ) 
    133126      !    
    134127   END SUBROUTINE usr_def_istate 
    135128 
     129 
     130   SUBROUTINE usr_def_istate_ssh( ptmask, pssh ) 
     131      !!---------------------------------------------------------------------- 
     132      !!                   ***  ROUTINE usr_def_istate  *** 
     133      !!  
     134      !! ** Purpose :   Initialization of ssh 
     135      !!                Here VORTEX configuration  
     136      !! 
     137      !! ** Method  :   Set ssh according to a gaussian anomaly of pressure and associated 
     138      !!                geostrophic velocities 
     139      !!---------------------------------------------------------------------- 
     140      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(in   ) ::   ptmask  ! t-point ocean mask   [m] 
     141      REAL(wp), DIMENSION(jpi,jpj)         , INTENT(  out) ::   pssh    ! sea-surface height   [m] 
     142      ! 
     143      INTEGER  :: ji, jj ! dummy loop indices 
     144      REAL(wp) :: zx, zy, zP0, zumax, zlambda, zf0, zH, zrho1, za 
     145      !!---------------------------------------------------------------------- 
     146      ! 
     147      IF(lwp) WRITE(numout,*) 
     148      IF(lwp) WRITE(numout,*) 'usr_def_istate_ssh : VORTEX configuration, analytical definition of initial state' 
     149      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~   ' 
     150      ! 
     151      ! 
     152      ! 
     153      zf0   = 2._wp * omega * SIN( rad * rn_ppgphi0 ) 
     154      zumax = 1._wp * SIGN(1._wp, zf0) ! Here Anticyclonic: set zumax=-1 for cyclonic 
     155      zlambda = SQRT(2._wp)*60.e3      ! Horizontal scale in meters  
     156      zH = 0.5_wp * 5000._wp 
     157      ! 
     158      zP0 = rho0 * zf0 * zumax * zlambda * SQRT(EXP(1._wp)/2._wp) 
     159      ! 
     160      ! Sea level: 
     161      za = -zP0 * (1._wp-EXP(-zH)) / (grav*(zH-1._wp + EXP(-zH))) 
     162      DO_2D( 1, 1, 1, 1 ) 
     163         zx = glamt(ji,jj) * 1.e3 
     164         zy = gphit(ji,jj) * 1.e3 
     165         zrho1 = rho0 + za * EXP(-(zx**2+zy**2)/zlambda**2) 
     166         pssh(ji,jj) = zP0 * EXP(-(zx**2+zy**2)/zlambda**2)/(zrho1*grav) * ptmask(ji,jj,1) 
     167      END_2D 
     168       
     169   END SUBROUTINE usr_def_istate_ssh 
     170 
    136171   !!====================================================================== 
    137172END MODULE usrdef_istate 
Note: See TracChangeset for help on using the changeset viewer.