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 2528 for trunk/NEMOGCM/NEMO/OPA_SRC/DTA/dtasal.F90 – NEMO

Ignore:
Timestamp:
2010-12-27T18:33:53+01:00 (13 years ago)
Author:
rblod
Message:

Update NEMOGCM from branch nemo_v3_3_beta

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/DTA/dtasal.F90

    • Property svn:eol-style deleted
    r1715 r2528  
    44   !! Ocean data  :  read ocean salinity data from monthly atlas data 
    55   !!===================================================================== 
     6   !! History :  OPA  ! 1991-03  ()  Original code 
     7   !!             -   ! 1992-07  (M. Imbard) 
     8   !!            8.0  ! 1999-10  (M.A. Foujols, M. Imbard)  NetCDF FORMAT  
     9   !!   NEMO     1.0  ! 2002-06  (G. Madec)  F90: Free form and module  
     10   !!            3.3  ! 2010-10  (C. Bricaud, S. Masson)  use of fldread 
     11   !!---------------------------------------------------------------------- 
    612#if defined key_dtasal   ||   defined key_esopa 
    713   !!---------------------------------------------------------------------- 
     
    1016   !!   dta_sal      : read ocean salinity data 
    1117   !!---------------------------------------------------------------------- 
    12    !! * Modules used 
    1318   USE oce             ! ocean dynamics and tracers 
    1419   USE dom_oce         ! ocean space and time domain 
     20   USE fldread         ! read input fields 
    1521   USE in_out_manager  ! I/O manager 
    1622   USE phycst          ! physical constants 
    17 #if defined key_orca_lev10 
    18    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    19 #endif 
    2023 
    2124   IMPLICIT NONE 
    2225   PRIVATE 
    2326 
    24    !! * Routine accessibility 
    25    PUBLIC dta_sal   ! called by step.F90 and inidta.F90 
     27   PUBLIC   dta_sal   ! called by step.F90 and inidta.F90 
    2628    
    27    !! * Shared module variables 
    2829   LOGICAL , PUBLIC, PARAMETER ::   lk_dtasal = .TRUE.    !: salinity data flag 
    29    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   &  !: 
    30       s_dta       !: salinity data at given time-step 
    31  
    32    !! * Module variables 
    33    INTEGER ::   & 
    34       numsdt,           &  !: logical unit for data salinity 
    35       nsal1, nsal2         ! first and second record used 
    36    REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   & 
    37       saldta    ! salinity data at two consecutive times 
     30   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   s_dta    !: salinity data at given time-step 
     31 
     32   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_sal       ! structure of input SST (file informations, fields read) 
    3833 
    3934   !! * Substitutions 
    4035#  include "domzgr_substitute.h90" 
    4136   !!---------------------------------------------------------------------- 
    42    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     37   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    4338   !! $Id$  
    44    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    45    !!---------------------------------------------------------------------- 
    46  
     39   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     40   !!---------------------------------------------------------------------- 
    4741CONTAINS 
    4842 
    49    !!---------------------------------------------------------------------- 
    50    !!   Default option:                                         NetCDF file 
    51    !!---------------------------------------------------------------------- 
    52  
    5343   SUBROUTINE dta_sal( kt ) 
    54      !!---------------------------------------------------------------------- 
    55      !!                   ***  ROUTINE dta_sal  *** 
    56      !!         
    57      !! ** Purpose :   Reads monthly salinity data 
    58      !!              
    59      !! ** Method  : - Read on unit numsdt the monthly salinity data interpo- 
    60      !!     lated onto the model grid. 
    61      !!              - At each time step, a linear interpolation is applied 
    62      !!     between two monthly values. 
    63      !! 
    64      !! History : 
    65      !!        !  91-03  ()  Original code 
    66      !!        !  92-07  (M. Imbard) 
    67      !!   9.0  !  02-06  (G. Madec)  F90: Free form and module  
    68      !!---------------------------------------------------------------------- 
    69      !! * Modules used 
    70      USE iom 
    71       
    72      !! * Arguments 
    73      INTEGER, INTENT(in) ::   kt             ! ocean time step 
    74       
    75      !! * Local declarations 
    76       
    77      INTEGER ::   ji, jj, jk, jl, jkk   ! dummy loop indicies 
    78      INTEGER ::   & 
    79           imois, iman, i15, ik           ! temporary integers 
    80 #  if defined key_tradmp 
    81      INTEGER ::   & 
    82           il0, il1, ii0, ii1, ij0, ij1   ! temporary integers          
    83 # endif 
    84      REAL(wp) ::   zxy, zl 
    85 #if defined key_orca_lev10 
    86      REAL(wp), DIMENSION(jpi,jpj,jpkdta,2) :: zsal 
    87      INTEGER   :: ikr, ikw, ikt, jjk 
    88      REAL(wp)  :: zfac 
     44      !!---------------------------------------------------------------------- 
     45      !!                   ***  ROUTINE dta_sal  *** 
     46      !!         
     47      !! ** Purpose :   Reads monthly salinity data 
     48      !!              
     49      !! ** Method  : - Read on unit numsdt the monthly salinity data interpo- 
     50      !!                lated onto the model grid. 
     51      !!              - At each time step, a linear interpolation is applied 
     52      !!                between two monthly values. 
     53      !!---------------------------------------------------------------------- 
     54      INTEGER, INTENT(in) ::   kt             ! ocean time step 
     55      ! 
     56      INTEGER ::   ji, jj, jk, jl, jkk            ! dummy loop indicies 
     57      INTEGER ::   ik, ierror                     ! temporary integers 
     58#if defined key_tradmp 
     59      INTEGER ::   il0, il1, ii0, ii1, ij0, ij1   ! temporary integers 
    8960#endif 
    90      REAL(wp), DIMENSION(jpk,2) ::   & 
    91           zsaldta            ! auxiliary array for interpolation 
    92      !!---------------------------------------------------------------------- 
    93       
    94      ! 0. Initialization 
    95      ! ----------------- 
    96       
    97      iman  = INT( raamo ) 
    98 !!! better but change the results     i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 
    99      i15   = nday / 16 
    100      imois = nmonth + i15 - 1 
    101      IF( imois == 0 ) imois = iman 
    102       
    103      ! 1. First call kt=nit000 
    104      ! ----------------------- 
    105       
    106      IF( kt == nit000 ) THEN 
    107          
    108         nsal1 = 0   ! initializations 
    109         IF(lwp) WRITE(numout,*) ' dta_sal : monthly salinity data in NetCDF file' 
    110         CALL iom_open ( 'data_1m_salinity_nomask', numsdt )  
    111          
    112      ENDIF 
    113       
    114       
    115      ! 2. Read monthly file 
    116      ! ------------------- 
    117       
    118      IF( kt == nit000 .OR. imois /= nsal1 ) THEN 
    119          
    120         ! 2.1 Calendar computation 
    121          
    122         nsal1 = imois        ! first file record used  
    123         nsal2 = nsal1 + 1    ! last  file record used 
    124         nsal1 = MOD( nsal1, iman ) 
    125         IF( nsal1 == 0 ) nsal1 = iman 
    126         nsal2 = MOD( nsal2, iman ) 
    127         IF( nsal2 == 0 ) nsal2 = iman 
    128         IF(lwp) WRITE(numout,*) 'first record file used nsal1 ', nsal1 
    129         IF(lwp) WRITE(numout,*) 'last  record file used nsal2 ', nsal2 
    130          
    131         ! 2.3 Read monthly salinity data Levitus  
    132          
    133 #if defined key_orca_lev10 
    134         if (ln_zps) stop 
    135         zsal(:,:,:,:) = 0. 
    136         CALL iom_get (numsdt,jpdom_data,'vosaline',zsal(:,:,:,1),nsal1) 
    137         CALL iom_get (numsdt,jpdom_data,'vosaline',zsal(:,:,:,2),nsal2) 
    138 #else 
    139         CALL iom_get (numsdt,jpdom_data,'vosaline',saldta(:,:,:,1),nsal1) 
    140         CALL iom_get (numsdt,jpdom_data,'vosaline',saldta(:,:,:,2),nsal2) 
    141 #endif 
    142          
    143         IF(lwp) THEN 
    144            WRITE(numout,*) 
    145            WRITE(numout,*) ' read Levitus salinity ok' 
    146            WRITE(numout,*) 
    147         ENDIF 
    148          
     61      REAL(wp)::   zl 
     62      REAL(wp), DIMENSION(jpk) :: zsaldta         ! auxiliary array for interpolation 
     63      CHARACTER(len=100)       :: cn_dir          ! Root directory for location of ssr files 
     64      TYPE(FLD_N)              :: sn_sal 
     65      LOGICAL , SAVE           :: linit_sal = .FALSE. 
     66      !! 
     67      NAMELIST/namdta_sal/   cn_dir, sn_sal 
     68      !!---------------------------------------------------------------------- 
     69      
     70      ! 1. Initialization 
     71      ! ----------------------- 
     72      
     73      IF( kt == nit000 .AND. ( .NOT. linit_sal ) ) THEN 
     74         
     75         !                         ! set file information 
     76         cn_dir = './'             ! directory in which the model is executed 
     77         ! ... default values (NB: frequency positive => hours, negative => months) 
     78         !            !   file    ! frequency ! variable ! time intep !  clim   ! 'yearly' or ! weights  ! rotation   ! 
     79         !            !   name    !  (hours)  !  name    !   (T/F)    !  (T/F)  !  'monthly'  ! filename ! pairs      ! 
     80         sn_sal = FLD_N( 'salinity',  -1.     ,'vosaline',  .false.   , .true.  ,  'monthly'  , ''       , ''         ) 
     81 
     82         REWIND ( numnam )         ! read in namlist namdta_sal  
     83         READ( numnam, namdta_sal )  
     84 
     85         IF(lwp) THEN              ! control print 
     86            WRITE(numout,*) 
     87            WRITE(numout,*) 'dta_sal : Salinity Climatology ' 
     88            WRITE(numout,*) '~~~~~~~ ' 
     89         ENDIF 
     90         ALLOCATE( sf_sal(1), STAT=ierror ) 
     91         IF( ierror > 0 ) THEN 
     92             CALL ctl_stop( 'dta_sal: unable to allocate sf_sal structure' )   ;   RETURN 
     93         ENDIF 
     94                                ALLOCATE( sf_sal(1)%fnow(jpi,jpj,jpk)   ) 
     95         IF( sn_sal%ln_tint )   ALLOCATE( sf_sal(1)%fdta(jpi,jpj,jpk,2) ) 
     96         !                         ! fill sf_sal with sn_sal and control print 
     97         CALL fld_fill( sf_sal, (/ sn_sal /), cn_dir, 'dta_sal', 'Salinity data', 'namdta_sal' ) 
     98         linit_sal = .TRUE.         
     99      ENDIF 
     100      
     101      ! 2. Read monthly file 
     102      ! ------------------- 
     103      
     104      CALL fld_read( kt, 1, sf_sal ) 
     105 
     106      IF( lwp .AND. kt == nit000 ) THEN 
     107         WRITE(numout,*) 
     108         WRITE(numout,*) ' read Levitus salinity ok' 
     109         WRITE(numout,*) 
     110      ENDIF 
     111 
    149112#if defined key_tradmp 
    150         IF( cp_cfg == "orca"  .AND. jp_cfg == 2 ) THEN 
     113      IF( cp_cfg == "orca"  .AND. jp_cfg == 2 ) THEN     !  ORCA_R2 configuration 
     114         ! 
     115         ij0 = 101   ;   ij1 = 109 
     116         ii0 = 141   ;   ii1 = 155    
     117         DO jj = mj0(ij0), mj1(ij1)                  ! Reduced salinity in the Alboran Sea 
     118            DO ji = mi0(ii0), mi1(ii1) 
     119               sf_sal(1)%fnow(ji,jj,13:13) = sf_sal(1)%fnow(ji,jj,13:13) - 0.15 
     120               sf_sal(1)%fnow(ji,jj,14:15) = sf_sal(1)%fnow(ji,jj,14:15) - 0.25 
     121               sf_sal(1)%fnow(ji,jj,16:17) = sf_sal(1)%fnow(ji,jj,16:17) - 0.30 
     122               sf_sal(1)%fnow(ji,jj,18:25) = sf_sal(1)%fnow(ji,jj,18:25) - 0.35 
     123            END DO 
     124         END DO 
     125         ! 
     126         IF( nn_cla == 1 ) THEN  
     127            !                                         ! New salinity profile at Gibraltar 
     128            il0 = 138   ;   il1 = 138    
     129            ij0 = 101   ;   ij1 = 102 
     130            ii0 = 139   ;   ii1 = 139    
     131            DO jl = mi0(il0), mi1(il1) 
     132               DO jj = mj0(ij0), mj1(ij1) 
     133                  DO ji = mi0(ii0), mi1(ii1) 
     134                        sf_sal(1)%fnow(ji,jj,:) = sf_sal(1)%fnow(jl,jj,:) 
     135                  END DO 
     136               END DO 
     137            END DO 
     138            !                                         ! New salinity profile at Bab el Mandeb 
     139            il0 = 164   ;   il1 = 164    
     140            ij0 =  87   ;   ij1 =  88 
     141            ii0 = 161   ;   ii1 = 163    
     142            DO jl = mi0(il0), mi1(il1) 
     143               DO jj = mj0(ij0), mj1(ij1) 
     144                  DO ji = mi0(ii0), mi1(ii1) 
     145                     sf_sal(1)%fnow(ji,jj,:) = sf_sal(1)%fnow(jl,jj,:) 
     146                  END DO 
     147               END DO 
     148            END DO 
     149            ! 
     150         ENDIF 
     151            ! 
     152      ENDIF 
     153#endif    
     154         
     155      s_dta(:,:,:)=sf_sal(1)%fnow(:,:,:) 
     156         
     157      IF( ln_sco ) THEN 
     158         DO jj = 1, jpj                  ! interpolation of salinites 
     159            DO ji = 1, jpi 
     160               DO jk = 1, jpk 
     161                  zl=fsdept_0(ji,jj,jk) 
     162                  IF(zl < gdept_0(1)  ) zsaldta(jk) =  s_dta(ji,jj,1    )  
     163                  IF(zl > gdept_0(jpk)) zsaldta(jk) =  s_dta(ji,jj,jpkm1)  
     164                  DO jkk = 1, jpkm1 
     165                     IF((zl-gdept_0(jkk))*(zl-gdept_0(jkk+1)).le.0.0) THEN 
     166                          zsaldta(jk) = s_dta(ji,jj,jkk)                                 & 
     167                                     &           + (zl-gdept_0(jkk))/(gdept_0(jkk+1)-gdept_0(jkk))      & 
     168                                     &                              *(s_dta(ji,jj,jkk+1) - s_dta(ji,jj,jkk)) 
     169                     ENDIF 
     170                  END DO 
     171               END DO 
     172               DO jk = 1, jpkm1 
     173                  s_dta(ji,jj,jk) = zsaldta(jk)  
     174               END DO 
     175               s_dta(ji,jj,jpk) = 0.0  
     176            END DO 
     177         END DO 
    151178            
    152            !                                        ! ======================= 
    153            !                                        !  ORCA_R2 configuration 
    154            !                                        ! ======================= 
    155            ij0 = 101   ;   ij1 = 109 
    156            ii0 = 141   ;   ii1 = 155    
    157            DO jj = mj0(ij0), mj1(ij1)                  ! Reduced salinity in the Alboran Sea 
    158               DO ji = mi0(ii0), mi1(ii1) 
    159 #if defined key_orca_lev10 
    160                  zsal  (ji,jj,13:13,:) = zsal  (ji,jj,13:13,:) - 0.15 
    161                  zsal  (ji,jj,14:15,:) = zsal  (ji,jj,14:15,:) - 0.25 
    162                  zsal  (ji,jj,16:17,:) = zsal  (ji,jj,16:17,:) - 0.30 
    163                  zsal  (ji,jj,18:25,:) = zsal  (ji,jj,18:25,:) - 0.35 
    164 #else 
    165                  saldta(ji,jj,13:13,:) = saldta(ji,jj,13:13,:) - 0.15 
    166                  saldta(ji,jj,14:15,:) = saldta(ji,jj,14:15,:) - 0.25 
    167                  saldta(ji,jj,16:17,:) = saldta(ji,jj,16:17,:) - 0.30 
    168                  saldta(ji,jj,18:25,:) = saldta(ji,jj,18:25,:) - 0.35 
    169 #endif 
    170               END DO 
    171            END DO 
    172  
    173            IF( n_cla == 1 ) THEN  
    174               !                                         ! New salinity profile at Gibraltar 
    175               il0 = 138   ;   il1 = 138    
    176               ij0 = 101   ;   ij1 = 102 
    177               ii0 = 139   ;   ii1 = 139    
    178               DO jl = mi0(il0), mi1(il1) 
    179                  DO jj = mj0(ij0), mj1(ij1) 
    180                     DO ji = mi0(ii0), mi1(ii1) 
    181 #if defined key_orca_lev10 
    182                        zsal  (ji,jj,:,:) = zsal  (jl,jj,:,:) 
    183 #else 
    184                        saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
    185 #endif 
    186                     END DO 
    187                  END DO 
    188               END DO 
    189               !                                         ! New salinity profile at Bab el Mandeb 
    190               il0 = 164   ;   il1 = 164    
    191               ij0 =  87   ;   ij1 =  88 
    192               ii0 = 161   ;   ii1 = 163    
    193               DO jl = mi0(il0), mi1(il1) 
    194                  DO jj = mj0(ij0), mj1(ij1) 
    195                     DO ji = mi0(ii0), mi1(ii1) 
    196 #if defined key_orca_lev10 
    197                        zsal  (ji,jj,:,:) = zsal  (jl,jj,:,:) 
    198 #else 
    199                        saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
    200 #endif 
    201                     END DO 
    202                  END DO 
    203               END DO 
    204               ! 
    205            ENDIF 
    206            ! 
    207         ENDIF 
    208 #endif    
    209          
    210 #if defined key_orca_lev10 
    211         !  interpolate from 31 to 301 level the zsal field result in saldta 
    212         DO jl = 1, 2 
    213            DO jjk = 1, 5 
    214               saldta(:,:,jjk,jl) = zsal(:,:,1,jl) 
    215            ENDDO 
    216            DO jk = 1, jpk - 20, 10 
    217               ikr = INT( jk / 10 ) + 1 
    218               ikw = (ikr-1) * 10 + 1 
    219               ikt = ikw + 5 
    220               DO jjk = ikt , ikt + 9 
    221                  zfac = ( gdept_0(jjk) - gdepw_0(ikt) ) / ( gdepw_0(ikt+10) - gdepw_0(ikt) ) 
    222                  saldta(:,:,jjk,jl) = zsal(:,:,ikr,jl) + ( zsal(:,:,ikr+1,jl) - zsal(:,:,ikr,jl) ) * zfac 
    223               END DO 
    224            END DO 
    225            DO jjk = jpk-5, jpk 
    226               saldta(:,:,jjk,jl) = zsal(:,:,jpkdta-1,jl) 
    227            END DO 
    228            ! fill the overlap areas 
    229            CALL lbc_lnk (saldta(:,:,:,jl),'Z',-999.,'no0') 
    230         END DO 
    231          
    232 #endif 
    233          
    234         IF( ln_sco ) THEN 
    235            DO jl = 1, 2 
    236               DO jj = 1, jpj                  ! interpolation of salinites 
    237                  DO ji = 1, jpi 
    238                     DO jk = 1, jpk 
    239                        zl=fsdept_0(ji,jj,jk) 
    240                        IF(zl <  gdept_0(1)) zsaldta(jk,jl) =  saldta(ji,jj,1,jl) 
    241                        IF(zl >  gdept_0(jpk)) zsaldta(jk,jl) =  saldta(ji,jj,jpkm1,jl) 
    242                        DO jkk = 1, jpkm1 
    243                           IF((zl-gdept_0(jkk))*(zl-gdept_0(jkk+1)).le.0.0) THEN 
    244                              zsaldta(jk,jl) = saldta(ji,jj,jkk,jl)                                  & 
    245                                   &           + (zl-gdept_0(jkk))/(gdept_0(jkk+1)-gdept_0(jkk))       & 
    246                                   &                              *(saldta(ji,jj,jkk+1,jl) - saldta(ji,jj,jkk,jl)) 
    247                           ENDIF 
    248                        END DO 
    249                     END DO 
    250                     DO jk = 1, jpkm1 
    251                        saldta(ji,jj,jk,jl) = zsaldta(jk,jl) 
    252                     END DO 
    253                     saldta(ji,jj,jpk,jl) = 0.0 
    254                  END DO 
    255               END DO 
    256            END DO 
    257             
    258            IF(lwp) WRITE(numout,*) 
    259            IF(lwp) WRITE(numout,*) ' Levitus salinity data interpolated to s-coordinate' 
    260            IF(lwp) WRITE(numout,*) 
    261             
    262         ELSE 
    263            !                                  ! Mask 
    264            DO jl = 1, 2 
    265               saldta(:,:,:,jl) = saldta(:,:,:,jl)*tmask(:,:,:) 
    266               saldta(:,:,jpk,jl) = 0. 
    267               IF( ln_zps ) THEN               ! z-coord. partial steps 
    268                  DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
    269                     DO ji = 1, jpi 
    270                        ik = mbathy(ji,jj) - 1 
    271                        IF( ik > 2 ) THEN 
    272                           zl = ( gdept_0(ik) - fsdept_0(ji,jj,ik) ) / ( gdept_0(ik) - gdept_0(ik-1) ) 
    273                           saldta(ji,jj,ik,jl) = (1.-zl) * saldta(ji,jj,ik,jl) +zl * saldta(ji,jj,ik-1,jl) 
    274                        ENDIF 
    275                     END DO 
    276                  END DO 
    277               ENDIF 
    278            END DO 
    279         ENDIF 
    280          
    281          
    282         IF(lwp) THEN 
    283            WRITE(numout,*)' salinity Levitus month ',nsal1,nsal2 
    284            WRITE(numout,*) 
    285            WRITE(numout,*) ' Levitus month = ',nsal1,'  level = 1' 
    286            CALL prihre(saldta(:,:,1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
    287            WRITE(numout,*) ' Levitus month = ',nsal1,'  level = ',jpk/2 
    288            CALL prihre(saldta(:,:,jpk/2,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
    289            WRITE(numout,*) ' Levitus month = ',nsal1,'  level = ',jpkm1 
    290            CALL prihre(saldta(:,:,jpkm1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
    291         ENDIF 
    292      ENDIF 
    293       
    294       
    295      ! 3. At every time step compute salinity data 
    296      ! ------------------------------------------- 
    297       
    298      zxy = FLOAT(nday + 15 - 30*i15)/30. 
    299      s_dta(:,:,:) = ( 1.- zxy ) * saldta(:,:,:,1) + zxy * saldta(:,:,:,2) 
    300       
    301      ! Close the file 
    302      ! -------------- 
    303       
    304      IF( kt == nitend )   CALL iom_close (numsdt) 
    305  
     179         IF( lwp .AND. kt==nn_it000 ) THEN 
     180            WRITE(numout,*) 
     181            WRITE(numout,*) ' Levitus salinity data interpolated to s-coordinate' 
     182            WRITE(numout,*) 
     183         ENDIF 
     184 
     185      ELSE 
     186         !                                  ! Mask 
     187         s_dta(:,:,:) = s_dta(:,:,:) * tmask(:,:,:) 
     188         s_dta(:,:,jpk) = 0.e0 
     189         IF( ln_zps ) THEN               ! z-coord. partial steps 
     190            DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
     191               DO ji = 1, jpi 
     192                  ik = mbkt(ji,jj) 
     193                  IF( ik > 1 ) THEN 
     194                     zl = ( gdept_0(ik) - fsdept_0(ji,jj,ik) ) / ( gdept_0(ik) - gdept_0(ik-1) ) 
     195                     s_dta(ji,jj,ik) = (1.-zl) * s_dta(ji,jj,ik) + zl * s_dta(ji,jj,ik-1) 
     196                  ENDIF 
     197               END DO 
     198            END DO 
     199         ENDIF 
     200      ENDIF 
     201         
     202      IF( lwp .AND. kt == nit000 ) THEN 
     203         WRITE(numout,*)' salinity Levitus ' 
     204         WRITE(numout,*) 
     205         WRITE(numout,*)'  level = 1' 
     206         CALL prihre(s_dta(:,:,1),    jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
     207         WRITE(numout,*)'  level = ',jpk/2 
     208         CALL prihre(s_dta(:,:,jpk/2),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout)            
     209         WRITE(numout,*) '  level = ',jpkm1 
     210         CALL prihre(s_dta(:,:,jpkm1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
     211      ENDIF 
     212      ! 
    306213   END SUBROUTINE dta_sal 
    307214 
Note: See TracChangeset for help on using the changeset viewer.