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

Changeset 15328


Ignore:
Timestamp:
2021-10-04T21:06:49+02:00 (3 years ago)
Author:
hadjt
Message:

DIA/diaar5.F90

Read in T and S climatology from the namtsd name list.

2d fields of steric, thermosteric and halosteric SSH now output (needing the associated filed_def_nemo-oce.F90 entries)

<field id="sshsteric_mat" long_name="ssh-steric" standard_name="steric_sea_level_change" unit="m" />
<field id="sshthster_mat" long_name="ssh-thermosteric" standard_name="thermosteric_sea_level_change" unit="dbar" />
<field id="sshhlster_mat" long_name="ssh-halosteric" standard_name="halosteric_sea_level_change" unit="dbar" />

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/DIA/diaar5.F90

    r14075 r15328  
    3434   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   thick0       ! ocean thickness (interior domain) 
    3535   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sn0          ! initial salinity 
     36   !JT 
     37   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tn0          ! initial temperature 
     38   !JT 
    3639 
    3740   LOGICAL  :: l_ar5 
     
    5457      ! 
    5558      ALLOCATE( thick0(jpi,jpj) , sn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 
    56       ! 
    5759      CALL mpp_sum ( 'diaar5', dia_ar5_alloc ) 
    5860      IF( dia_ar5_alloc /= 0 )   CALL ctl_stop( 'STOP', 'dia_ar5_alloc: failed to allocate arrays' ) 
     61 
     62      !JT 
     63      ALLOCATE( tn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 
     64      CALL mpp_sum ( 'diaar5', dia_ar5_alloc ) 
     65      IF( dia_ar5_alloc /= 0 )   CALL ctl_stop( 'STOP', 'dia_ar5_alloc: failed to allocate Temp arrays' ) 
     66      !JT 
    5967      ! 
    6068   END FUNCTION dia_ar5_alloc 
     
    125133      ENDIF 
    126134 
    127       IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' )  ) THEN     
     135      IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshhlster' )  .OR. iom_use( 'sshsteric' ) .OR. & 
     136         &  iom_use( 'sshthster_mat' )  .OR. iom_use( 'sshhlster_mat' )  .OR. iom_use( 'sshsteric_mat' )  ) THEN     
    128137         !                      
    129138         ztsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem)                    ! thermosteric ssh 
     
    154163         zssh_steric = - zarho / area_tot 
    155164         CALL iom_put( 'sshthster', zssh_steric ) 
     165         CALL iom_put( 'sshthster_mat', -zbotpres(:,:) ) 
     166 
     167 
     168 
     169         !JT 
     170 
     171   
     172         !                      
     173         ztsn(:,:,:,jp_tem) = tn0(:,:,:)                    ! halosteric ssh 
     174         ztsn(:,:,:,jp_sal) = tsn(:,:,:,jp_sal)                     
     175         CALL eos( ztsn, zrhd, gdept_n(:,:,:) )                       ! now in situ density using initial salinity 
     176         ! 
     177         zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     178         DO jk = 1, jpkm1 
     179            zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
     180         END DO 
     181         IF( ln_linssh ) THEN 
     182            IF( ln_isfcav ) THEN 
     183               DO ji = 1, jpi 
     184                  DO jj = 1, jpj 
     185                     iks = mikt(ji,jj) 
     186                     zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,iks) + riceload(ji,jj) 
     187                  END DO 
     188               END DO 
     189            ELSE 
     190               zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     191            END IF 
     192!!gm 
     193!!gm   riceload should be added in both ln_linssh=T or F, no? 
     194!!gm 
     195         END IF 
     196         !                                          
     197         zarho = glob_sum( 'diaar5', e1e2t(:,:) * zbotpres(:,:) )  
     198         zssh_steric = - zarho / area_tot 
     199         CALL iom_put( 'sshhlster', zssh_steric ) 
     200         CALL iom_put( 'sshhlster_mat', -zbotpres(:,:) ) 
     201 
     202         !JT 
     203 
     204 
     205 
     206 
     207 
     208 
     209 
     210 
     211 
     212 
     213 
    156214       
    157215         !                                         ! steric sea surface height 
     
    176234         zssh_steric = - zarho / area_tot 
    177235         CALL iom_put( 'sshsteric', zssh_steric ) 
     236         CALL iom_put( 'sshsteric_mat', - zbotpres(:,:) ) 
    178237         !                                         ! ocean bottom pressure 
    179238         zztmp = rau0 * grav * 1.e-4_wp               ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 
     
    381440      REAL(wp) ::   zztmp   
    382441      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   zsaldta   ! Jan/Dec levitus salinity 
     442      !JT 
     443      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztemdta   ! Jan/Dec levitus salinity 
     444      !JT 
    383445      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     ::   zvol0      
     446 
     447 
     448      !JT 
     449      !                                  !!* namtsd  namelist : Temperature & Salinity Data * 
     450      LOGICAL ::   ln_tsd_init   !: T & S data flag 
     451      LOGICAL ::   ln_tsd_dmp    !: internal damping toward input data flag 
     452      INTEGER ::   ios, ierr0, ierr1, ierr2, ierr3   ! local integers 
     453 
     454      CHARACTER(len=100)            ::   cn_dir          ! Root directory for location of ssr files 
     455      ! TYPE(FLD_N), DIMENSION( jpts) ::   slf_i           ! array of namelist informations on the fields to read 
     456      TYPE(FLD_N)                   ::   sn_tem, sn_sal 
     457      !JT 
    384458      ! 
    385459      !!---------------------------------------------------------------------- 
     
    389463         &  iom_use( 'masstot' ) .OR. iom_use( 'temptot'   )  .OR. iom_use( 'saltot' ) .OR.  &     
    390464         &  iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' ) .OR. & 
    391          &  iom_use( 'rhop' )  ) L_ar5 = .TRUE. 
     465         &  iom_use( 'rhop' )    .OR. iom_use( 'sshhlster' )  .OR. & 
     466         &  iom_use( 'sshthster_mat' )  .OR. iom_use( 'sshsteric_mat' ) .OR. iom_use( 'sshhlster_mat' )   ) L_ar5 = .TRUE. 
    392467   
    393468      IF( l_ar5 ) THEN 
     
    413488         DEALLOCATE( zvol0 ) 
    414489 
    415          IF( iom_use( 'sshthster' ) ) THEN 
    416             ALLOCATE( zsaldta(jpi,jpj,jpk,jpts) ) 
    417             CALL iom_open ( 'sali_ref_clim_monthly', inum ) 
    418             CALL iom_get  ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,1), 1  ) 
    419             CALL iom_get  ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,2), 12 ) 
    420             CALL iom_close( inum ) 
    421  
    422             sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) )         
    423             sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 
    424             IF( ln_zps ) THEN               ! z-coord. partial steps 
    425                DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
    426                   DO ji = 1, jpi 
    427                      ik = mbkt(ji,jj) 
    428                      IF( ik > 1 ) THEN 
    429                         zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
    430                         sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 
    431                      ENDIF 
    432                   END DO 
    433                END DO 
     490         !JT 
     491         IF( iom_use( 'sshthster' ) .OR. iom_use( 'sshthster_mat' ) .OR. &  
     492            & iom_use( 'sshhlster' ) .OR. iom_use( 'sshhlster_mat' )  ) THEN 
     493 
     494            NAMELIST/namtsd/   ln_tsd_init, ln_tsd_dmp, cn_dir, sn_tem, sn_sal 
     495            !!---------------------------------------------------------------------- 
     496            ! 
     497            !  Initialisation 
     498            ierr0 = 0  ;  ierr1 = 0  ;  ierr2 = 0  ;  ierr3 = 0 
     499            ! 
     500            REWIND( numnam_ref )              ! Namelist namtsd in reference namelist :  
     501            READ  ( numnam_ref, namtsd, IOSTAT = ios, ERR = 901) 
     502901         IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtsd in reference namelist' ) 
     503            REWIND( numnam_cfg )              ! Namelist namtsd in configuration namelist : Parameters of the run 
     504            READ  ( numnam_cfg, namtsd, IOSTAT = ios, ERR = 902 ) 
     505902         IF( ios >  0 )   CALL ctl_nam ( ios , 'namtsd in configuration namelist' ) 
     506            IF(lwm) WRITE ( numond, namtsd ) 
     507               
     508            IF(lwp) THEN                  ! control print 
     509                 WRITE(numout,*) 
     510                 WRITE(numout,*) 'dia_ar5_init : Temperature & Salinity data from namtsd ' 
     511                 WRITE(numout,*) '~~~~~~~~~~~~ ' 
     512                 WRITE(numout,*) '   Namelist namtsd' 
     513                 WRITE(numout,*) '      T data   ln_tsd_init = ', ln_tsd_init 
     514                 WRITE(numout,*) '      damping of ocean T & S toward T &S input data        ln_tsd_dmp  = ', ln_tsd_dmp 
     515                 WRITE(numout,*) 
    434516            ENDIF 
    435             ! 
    436             DEALLOCATE( zsaldta ) 
    437          ENDIF 
    438          ! 
    439       ENDIF 
     517               
     518          ENDIF 
     519          IF( iom_use( 'sshthster' ) .OR. iom_use( 'sshthster_mat' )   ) THEN 
     520               
     521              ALLOCATE( zsaldta(jpi,jpj,jpk,jpts) ) 
     522              CALL iom_open ( TRIM( cn_dir )//TRIM(sn_sal%clname), inum ) 
     523              CALL iom_get  ( inum, jpdom_data, TRIM(sn_sal%clvar), zsaldta(:,:,:,1), 1  ) 
     524              CALL iom_get  ( inum, jpdom_data, TRIM(sn_sal%clvar), zsaldta(:,:,:,2), 12 ) 
     525              CALL iom_close( inum ) 
     526               
     527              sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) )         
     528              sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 
     529               
     530              IF( ln_zps ) THEN               ! z-coord. partial steps 
     531                 DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
     532                    DO ji = 1, jpi 
     533                       ik = mbkt(ji,jj) 
     534                       IF( ik > 1 ) THEN 
     535                          zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
     536                          sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 
     537                       ENDIF 
     538                    END DO 
     539                 END DO 
     540              ENDIF 
     541              ! 
     542              DEALLOCATE( zsaldta ) 
     543          ENDIF 
     544          IF( iom_use( 'sshhlster' ) .OR. iom_use( 'sshhlster_mat' )   ) THEN 
     545           
     546              ALLOCATE( ztemdta(jpi,jpj,jpk,jpts) ) 
     547              CALL iom_open ( TRIM( cn_dir )//TRIM(sn_tem%clname), inum ) 
     548              CALL iom_get  ( inum, jpdom_data, TRIM(sn_tem%clvar), ztemdta(:,:,:,1), 1  ) 
     549              CALL iom_get  ( inum, jpdom_data, TRIM(sn_tem%clvar), ztemdta(:,:,:,2), 12 ) 
     550              CALL iom_close( inum ) 
     551 
     552              tn0(:,:,:) = 0.5_wp * ( ztemdta(:,:,:,1) + ztemdta(:,:,:,2) )         
     553              tn0(:,:,:) = tn0(:,:,:) * tmask(:,:,:) 
     554 
     555              IF( ln_zps ) THEN               ! z-coord. partial steps 
     556                 DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
     557                    DO ji = 1, jpi 
     558                       ik = mbkt(ji,jj) 
     559                       IF( ik > 1 ) THEN 
     560                          zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
     561                          tn0(ji,jj,ik) = ( 1._wp - zztmp ) * tn0(ji,jj,ik) + zztmp * tn0(ji,jj,ik-1) 
     562                       ENDIF 
     563                    END DO 
     564                 END DO 
     565              ENDIF 
     566              ! 
     567              DEALLOCATE( ztemdta ) 
     568          ENDIF 
     569       
     570      ENDIF 
     571         !JT 
     572         ! 
    440573      ! 
    441574   END SUBROUTINE dia_ar5_init 
Note: See TracChangeset for help on using the changeset viewer.