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 15156 for NEMO/branches/UKMO/NEMO_4.0.4_idealised_ovf – NEMO

Ignore:
Timestamp:
2021-07-28T18:29:17+02:00 (3 years ago)
Author:
dbruciaferri
Message:

adding initial condition for Denmark Strait

Location:
NEMO/branches/UKMO/NEMO_4.0.4_idealised_ovf/src/OCE
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_idealised_ovf/src/OCE/DOM/dtatsd.F90

    r14075 r15156  
    3232   LOGICAL , PUBLIC ::   ln_tsd_init   !: T & S data flag 
    3333   LOGICAL , PUBLIC ::   ln_tsd_dmp    !: internal damping toward input data flag 
    34  
     34   ! 
     35   !                          !!* parameters for the idealised ovf experiment  
     36   INTEGER , PUBLIC ::   nn_ovf_loc    !: 0 = DS  (Denmark Strait) 
     37                                       !: 1 = IFR (Iceland-Faroe Ridge)   
     38                                       !: 2 = BOTH 
     39   REAL(wp), PUBLIC ::   rn_tem_env    !: Environment ocean temperature 
     40   REAL(wp), PUBLIC ::   rn_tem_ovf    !: Temperature of the cold overflow 
     41   REAL(wp), PUBLIC ::   rn_sal_env    !: Environment ocean salinity  
     42   REAL(wp), PUBLIC ::   rn_sal_ovf    !: Salinity of the cold overflow  
     43   ! 
     44   ! 
    3545   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_tsd   ! structure of input SST (file informations, fields read) 
    3646 
     
    5969      TYPE(FLD_N)                   ::   sn_tem, sn_sal 
    6070      !! 
    61       NAMELIST/namtsd/   ln_tsd_init, ln_tsd_dmp, cn_dir, sn_tem, sn_sal 
     71      NAMELIST/namtsd/   ln_tsd_init, ln_tsd_dmp, cn_dir, sn_tem, sn_sal, nn_ovf_loc, & 
     72                      &  rn_tem_env , rn_tem_ovf, rn_sal_env, rn_sal_ovf 
    6273      !!---------------------------------------------------------------------- 
    6374      ! 
     
    8798            WRITE(numout,*) '   ===>>   T & S data not used' 
    8899         ENDIF 
     100         WRITE(numout,*) 
     101         WRITE(numout,*) 'dta_tsd_init : Idealised North Atlantic overflow parameters' 
     102         WRITE(numout,*) '~~~~~~~~~~~~ ' 
     103         WRITE(numout,*) '   Namelist namtsd' 
     104         WRITE(numout,*) '      Area of the overflow   nn_ovf_loc = ', nn_ovf_loc 
     105         WRITE(numout,*) '      Ambient ocean T        rn_tem_env = ', rn_tem_env 
     106         WRITE(numout,*) '      Ambient ocean S        rn_sal_env = ', rn_sal_env 
     107         WRITE(numout,*) '      Overflow T             rn_tem_ovf = ', rn_tem_ovf 
     108         WRITE(numout,*) '      Overflow S             rn_sal_ovf = ', rn_sal_ovf 
    89109      ENDIF 
    90110      ! 
  • NEMO/branches/UKMO/NEMO_4.0.4_idealised_ovf/src/OCE/USR/usrdef_istate.F90

    r14075 r15156  
    33   !!                   ***  MODULE  usrdef_istate   *** 
    44   !! 
    5    !!                     ===  GYRE configuration  === 
     5   !!          ===  NORTH ATALNTIC ORCA025 IDEALISED OVERFLOWS  === 
    66   !! 
    77   !! User defined : set the initial state of a user configuration 
    88   !!====================================================================== 
    9    !! History :  4.0 ! 2016-03  (S. Flavoni) Original code 
     9   !! History :  4.0    ! 2016-03  (S. Flavoni) Original code 
     10   !!            4.0.4  ! 2021-07  (D. Bruciaferri) Overflows code 
    1011   !!---------------------------------------------------------------------- 
    1112 
     
    1516   USE par_oce        ! ocean space and time domain 
    1617   USE phycst         ! physical constants 
     18   USE dom_oce 
     19   USE dtatsd      
    1720   ! 
    1821   USE in_out_manager ! I/O manager 
     
    3639      !!  
    3740      !! ** Purpose :   Initialization of the dynamics and tracers 
    38       !!                Here GYRE configuration example : (double gyre with rotated domain) 
     41      !!                North Atlantic idealised overflows  
    3942      !! 
    4043      !! ** Method  : - set temprature field 
     
    4851      REAL(wp), DIMENSION(jpi,jpj)         , INTENT(  out) ::   pssh    ! sea-surface height 
    4952      ! 
    50       INTEGER :: ji, jj, jk  ! dummy loop indices 
     53      INTEGER                                              ::   ji, jj, kk, num_pnt, ierr0, ierr1 
     54      INTEGER, ALLOCATABLE                 , DIMENSION(:)  ::   ovf_ji, ovf_jj ! arrays for overflow 
    5155      !!---------------------------------------------------------------------- 
    5256      ! 
    5357      IF(lwp) WRITE(numout,*) 
    5458      IF(lwp) WRITE(numout,*) 'usr_def_istate : analytical definition of initial state ' 
    55       IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~   Ocean at rest, with an horizontally uniform T and S profiles' 
     59      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~   Ocean at rest, with a 3D uniform T and S' 
     60      IF(lwp) WRITE(numout,*) '                 and cold dense blobs in the DS and/or IFR' 
    5661      ! 
    5762      pu  (:,:,:) = 0._wp        ! ocean at rest 
     
    5964      pssh(:,:)   = 0._wp 
    6065      ! 
    61       DO jk = 1, jpk             ! horizontally uniform T & S profiles 
    62          DO jj = 1, jpj 
    63             DO ji = 1, jpi 
    64                pts(ji,jj,jk,jp_tem) =  (  (  16. - 12. * TANH( (pdept(ji,jj,jk) - 400) / 700 ) )   & 
    65                     &           * (-TANH( (500. - pdept(ji,jj,jk)) / 150. ) + 1.) / 2.             & 
    66                     &           + ( 15. * ( 1. - TANH( (pdept(ji,jj,jk)-50.) / 1500.) )            & 
    67                     &           - 1.4 * TANH((pdept(ji,jj,jk)-100.) / 100.)                        & 
    68                     &           + 7.  * (1500. - pdept(ji,jj,jk) ) / 1500.)                        & 
    69                     &           * (-TANH( (pdept(ji,jj,jk) - 500.) / 150.) + 1.) / 2.  ) * ptmask(ji,jj,jk) 
     66      ! 3D uniform T & S profiles 
     67      pts(:, :, :, jp_tem) = rn_tem_env 
     68      pts(:, :, :, jp_sal) = rn_sal_env 
     69      ! 
     70      SELECT CASE(nn_ovf_loc) 
    7071 
    71                pts(ji,jj,jk,jp_sal) =  (  (  36.25 - 1.13 * TANH( (pdept(ji,jj,jk) - 305) / 460 ) )  & 
    72                     &         * (-TANH((500. - pdept(ji,jj,jk)) / 150.) + 1.) / 2                  & 
    73                     &         + ( 35.55 + 1.25 * (5000. - pdept(ji,jj,jk)) / 5000.                 & 
    74                     &         - 1.62 * TANH( (pdept(ji,jj,jk) - 60.  ) / 650. )                    & 
    75                     &         + 0.2  * TANH( (pdept(ji,jj,jk) - 35.  ) / 100. )                    & 
    76                     &         + 0.2  * TANH( (pdept(ji,jj,jk) - 1000.) / 5000.) )                  & 
    77                     &         * (-TANH( (pdept(ji,jj,jk) - 500.) / 150.) + 1.) / 2  ) * ptmask(ji,jj,jk) 
    78             END DO 
    79          END DO 
    80       END DO 
     72         CASE(0) ! Denmark Strait 
     73            num_pnt = 17 
     74            ALLOCATE( ovf_ji(num_pnt), STAT=ierr0 ) 
     75            ALLOCATE( ovf_jj(num_pnt), STAT=ierr1 ) 
     76            IF( ierr0 + ierr1 > 0 ) THEN 
     77               CALL ctl_stop( 'dta_tsd : unable to allocate T & S data arrays' );   RETURN 
     78            ENDIF 
     79            ovf_ji = (/ & 
     80                        &       1045, 1046, & 
     81                        & 1044, 1045, 1046, & 
     82                        & 1043, 1044, 1045, & 
     83                        & 1042, 1043, 1044, & 
     84                        & 1041, 1042, 1043, & 
     85                        & 1040, 1041, 1042  & 
     86                        & /) 
     87            ovf_jj = (/ & 
     88                        &       1020, 1020, & 
     89                        & 1019, 1019, 1019, & 
     90                        & 1018, 1018, 1018, & 
     91                        & 1017, 1017, 1017, & 
     92                        & 1016, 1016, 1016, & 
     93                        & 1015, 1015, 1015  & 
     94                        & /) 
     95      END SELECT 
     96      ! 
     97      IF( lk_mpp ) CALL mppsync 
     98      DO kk = 1, num_pnt 
     99         ji = ovf_ji(kk) 
     100         jj = ovf_jj(kk) 
     101         IF ((mi0(ji)>1 .AND. mi0(ji)<jpi) .AND. (mj0(jj)>1 .AND. mj0(jj)<jpj)) THEN 
     102            pts(mi0(ji), mj0(jj), :, jp_tem) = rn_tem_ovf 
     103            pts(mi0(ji), mj0(jj), :, jp_sal) = rn_sal_ovf 
     104         ENDIF 
     105      END DO            
    81106      !    
    82107   END SUBROUTINE usr_def_istate 
Note: See TracChangeset for help on using the changeset viewer.