[cdftools] 181/228: JMM: merge cdfmhst with Magdalena's one: allow for computing mhst from V T [S] files, allow for saving vertical structure of mhst.

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jun 12 08:21:47 UTC 2015


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to branch master
in repository cdftools.

commit d326d9aaa7f28503032d9042208e975bc23c3649
Author: molines <molines at 1055176f-818a-41d9-83e1-73fbe5b947c5>
Date:   Fri Nov 2 23:23:39 2012 +0000

    JMM: merge cdfmhst with Magdalena's one: allow for computing mhst from V T [S] files, allow for saving vertical structure
         of mhst.
    
    
    git-svn-id: http://servforge.legi.grenoble-inp.fr/svn/CDFTOOLS/trunk@629 1055176f-818a-41d9-83e1-73fbe5b947c5
---
 cdfmhst.f90 | 263 +++++++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 179 insertions(+), 84 deletions(-)

diff --git a/cdfmhst.f90 b/cdfmhst.f90
index d986662..db5f51c 100644
--- a/cdfmhst.f90
+++ b/cdfmhst.f90
@@ -5,14 +5,19 @@ PROGRAM cdfmhst
   !!  ** Purpose : Compute Meridional Heat Salt  Transport.
   !!
   !!  ** Method  : Starts from the mean VT, VS fields computed by cdfvT.
+  !!               Optionally, it can read V, T  and S files in separate files
   !!               Zonal and vertical integration are performed for these
   !!               quantities. If a sub-basin mask is provided, then a
   !!               meridional H/S transoport is computed for each sub basin.
+  !!               Meridional H/S transports at different depths
   !!
   !! History : 2.1  : 01/2005  : J.M. Molines  : Original code
   !!                : 04/2005  : A.M. Treguier : adaptation to regional config
   !!                : 04/2007  : J.M. Molines  : add netcdf output
   !!           3.0  : 05/2011  : J.M. Molines  : Doctor norm + Lic.
+  !!                  10/2012  : M.A. Balmaseda: opt separate V,T,S infiles
+  !!                                             opt z dimension 
+  !!                                             add inp0
   !!----------------------------------------------------------------------
   USE cdfio
   USE modcdfnames
@@ -24,16 +29,19 @@ PROGRAM cdfmhst
   !!----------------------------------------------------------------------
   IMPLICIT NONE
 
-  INTEGER(KIND=4)                              :: jj, jk, jt       ! dummy loop index
+  INTEGER(KIND=4)                              :: ji, jj, jk, jt   ! dummy loop index
   INTEGER(KIND=4)                              :: jbasins, jvar    ! dummy loop index
   INTEGER(KIND=4)                              :: narg, iargc      ! command line 
+  INTEGER(KIND=4)                              :: ik0              ! working integer
+  INTEGER(KIND=4)                              :: ifile            ! dummuy loop
   INTEGER(KIND=4)                              :: ijarg            ! argument counter
   INTEGER(KIND=4)                              :: npiglo, npjglo   ! size of the domain
-  INTEGER(KIND=4)                              :: npk, npt         ! size of the domain
+  INTEGER(KIND=4)                              :: npk, npt, npko   ! size of the domain
   INTEGER(KIND=4)                              :: numouth = 10     ! logical unit for heat 
   INTEGER(KIND=4)                              :: numouts = 11     ! logical unit for salt
   INTEGER(KIND=4)                              :: npvar=1          ! number of variables type
   INTEGER(KIND=4)                              :: nbasins          ! number of basins
+  INTEGER(KIND=4)                              :: nbasinso         ! basins in output
   INTEGER(KIND=4)                              :: ierr             ! error status
   INTEGER(KIND=4)                              :: ncout            ! ncid of output file
   INTEGER(KIND=4)                              :: ivar             ! variable index
@@ -44,12 +52,13 @@ PROGRAM cdfmhst
   REAL(KIND=4), PARAMETER                      :: pprcp  = 4000.   ! specific heat
   REAL(KIND=4), PARAMETER                      :: ppspval= 9999.99 ! missing value
 
-  REAL(KIND=4), DIMENSION(1)                   :: gdep             ! dummy depth array
+  REAL(KIND=4), DIMENSION(:),      ALLOCATABLE :: gdep             ! depth array
   REAL(KIND=4), DIMENSION(:),      ALLOCATABLE :: tim              ! time counter
   REAL(KIND=4), DIMENSION(:),      ALLOCATABLE :: e31d             ! 1D e3t for full step
   REAL(KIND=4), DIMENSION(:,:),    ALLOCATABLE :: zmask            ! mask
   REAL(KIND=4), DIMENSION(:,:),    ALLOCATABLE :: e1v, e3v, gphiv  ! metrics and latitude
   REAL(KIND=4), DIMENSION(:,:),    ALLOCATABLE :: zvt, zvs         ! transport components
+  REAL(KIND=4), DIMENSION(:,:),    ALLOCATABLE :: zv, zt, zs       ! v,t,s
   REAL(KIND=4), DIMENSION(:,:),    ALLOCATABLE :: rdumlon          ! dummy longitude = 0.
   REAL(KIND=4), DIMENSION(:,:),    ALLOCATABLE :: rdumlat          ! latitude for i = north pole
 
@@ -71,26 +80,33 @@ PROGRAM cdfmhst
 
   TYPE(variable), DIMENSION(:),    ALLOCATABLE :: stypvar          ! structure for attributes
 
-  CHARACTER(LEN=256)                           :: cf_vtfil         ! input VT file name
+  CHARACTER(LEN=256)                           :: cf_vtfil         ! input VT or V file name
+  CHARACTER(LEN=256)                           :: cf_vfil          ! separate V files
+  CHARACTER(LEN=256)                           :: cf_tfil          ! separate T,S files
+  CHARACTER(LEN=256)                           :: cf_sfil          ! separate T,S files
   CHARACTER(LEN=256)                           :: cf_outh='zonal_heat_trp.dat'
   CHARACTER(LEN=256)                           :: cf_outs='zonal_salt_trp.dat'
   CHARACTER(LEN=256)                           :: cf_outnc='mhst.nc'
   CHARACTER(LEN=256)                           :: cv_zomht='zomht' ! MHT variable name
   CHARACTER(LEN=256)                           :: cv_zomst='zomst' ! MST variable name
   CHARACTER(LEN=256)                           :: cldum            ! dummy character variable
-  CHARACTER(LEN=4),  DIMENSION(5)              :: cbasin=(/'_glo','_atl','_inp','_ind','_pac'/)
+  CHARACTER(LEN=5),  DIMENSION(6)              :: cbasin=(/'_glo','_atl','_inp','_ind','_pac','_inp0'/)
   CHARACTER(LEN=80), DIMENSION(:), ALLOCATABLE :: cvarname         ! varname arrays
+  CHARACTER(LEN=256)                           :: cldimension      ! varname arrays
 
   LOGICAL                                      :: llglo = .FALSE.  ! flag for sub basin file
   LOGICAL                                      :: lchk  = .FALSE.  ! flag for missing files
   LOGICAL                                      :: lfull = .FALSE.  ! flag for missing files
+  LOGICAL                                      :: lsepf = .FALSE.  ! flag for separate files
+  LOGICAL                                      :: lzdim = .FALSE.  ! flag for separate files
   !!----------------------------------------------------------------------
   CALL ReadCdfNames()
 
   !!  Read command line and output usage message if not compliant.
   narg= iargc()
   IF ( narg == 0 ) THEN
-     PRINT *,' usage : cdfmhst  VT-file  [MST] [-full]'
+     PRINT *,' usage : cdfmhst  VT-file | (V-file T-file [S-file])  [MST] [-full] ...'
+     PRINT *,'              ...  [-Zdim] '
      PRINT *,'      '
      PRINT *,'     PURPOSE :'
      PRINT *,'       Compute the meridional heat/salt transport as a function of '
@@ -100,11 +116,15 @@ PROGRAM cdfmhst
      PRINT *,'     ARGUMENTS :'
      PRINT *,'       VT-file  : netcdf file containing the mean value of the products' 
      PRINT *,'                  U.S, U.T, V.S and V.T (obtained with cdfvT).'
+     PRINT *,'         or   '     
+     PRINT *,'       V-file T-file [S-file] : specify V, T S file as separate files. If'
+     PRINT *,'                 S-file is not specified, assume that salinity is in T-file.'
      PRINT *,'      '
      PRINT *,'     OPTIONS :'
-     PRINT *,'       [MST ] : output flag for meridional salt transport on netcdf files.'
-     PRINT *,'                If not specified, only the MHT is output.' 
+     PRINT *,'       [MST ]   : output flag for meridional salt transport on netcdf files.'
+     PRINT *,'                  If not specified, only the MHT is output.' 
      PRINT *,'       [-full ] : to be set for full step case.'
+     PRINT *,'       [-Zdim ] : to be set to output vertical structure of Heat/salt transport'
      PRINT *,'      '
      PRINT *,'     REQUIRED FILES :'
      PRINT *,'        ', TRIM(cn_fhgr),', ',TRIM(cn_fzgr),' and ',TRIM(cn_fmsk)
@@ -127,29 +147,57 @@ PROGRAM cdfmhst
      STOP
   ENDIF
 
-  npvar = 1    ! default value ( no MST output)
-  ijarg = 1
+  npvar   = 1    ! default value ( no MST output)
+  ijarg   = 1
+  ifile   = 0
+  ! browse command line and detect the file name as argument different from any option
+  ! count the number of files. Assume VT if 1 only, V TS if 2 and V T S if 3
   DO WHILE ( ijarg <= narg ) 
      CALL getarg(ijarg, cldum) ; ijarg = ijarg+1
      SELECT CASE ( cldum)
-     CASE ( 'MST' )   ; npvar    =2
+     CASE ( 'MST' )   ; npvar    = 2
      CASE ( '-full' ) ; lfull    = .TRUE.
-     CASE DEFAULT     ; cf_vtfil = cldum
+     CASE ( '-Zdim' ) ; lzdim    = .TRUE.
+     CASE DEFAULT     ; ifile = ifile + 1
+          SELECT CASE (ifile)
+          CASE ( 1) ; cf_vtfil = cldum
+          CASE ( 2) ; cf_tfil  = cldum
+          CASE ( 3) ; cf_sfil  = cldum
+          CASE DEFAULT ; PRINT *,' WARNING: more than 3 files in input : weird '
+          END SELECT
      END SELECT
   END DO
 
+  ! security check
+  SELECT CASE (ifile )
+  CASE ( 0 ) ; PRINT *, ' You must provide at least 1 file name (VT) ' ; STOP
+  CASE ( 1 ) ; lsepf = .false.; 
+  CASE ( 2 ) ; lsepf = .true. ; cf_vfil = cf_vtfil ; cf_sfil = cf_tfil
+  CASE ( 3 ) ; lsepf = .true. ; cf_vfil = cf_vtfil 
+  END SELECT
+
   ! check for missing files
   lchk = lchk .OR. chkfile( cn_fhgr )
   lchk = lchk .OR. chkfile( cn_fzgr )
   lchk = lchk .OR. chkfile( cn_fmsk )
   lchk = lchk .OR. chkfile( cf_vtfil)
+  IF ( lsepf ) THEN
+     lchk = lchk .OR. chkfile( cf_tfil)
+     lchk = lchk .OR. chkfile( cf_sfil)
+  ENDIF
+
   IF ( lchk ) STOP ! missing files
 
   ! check for sub basin file and set appropriate variables
-  nbasins = 1 
-  IF ( .NOT. chkfile(cn_fbasins) ) THEN
-     llglo   = .TRUE.
-     nbasins = 5 
+  IF ( .NOT. chkfile(cn_fbasins ) ) THEN
+     llglo    = .TRUE.
+     nbasins  = 5
+     nbasinso = 6
+  ELSE
+     PRINT *,' Only compute for GLOBAL basin'
+     llglo    = .FALSE.
+     nbasins  = 1
+     nbasinso = 1
   ENDIF
 
   npiglo = getdim (cf_vtfil, cn_x)
@@ -162,6 +210,14 @@ PROGRAM cdfmhst
   PRINT *, 'npk    = ', npk
   PRINT *, 'npt    = ', npt
 
+  IF ( lzdim ) THEN  ! output file hold heat/salt transport by levels
+     npko = npk
+     cldimension = 'TZY'
+  ELSE
+     npko = 1
+     cldimension = 'TY'
+  ENDIF
+
   ! Allocate arrays
   ALLOCATE ( tim(npt) )
   ALLOCATE ( dwkh(npiglo,npjglo), zmask(npiglo,npjglo), zvt(npiglo,npjglo) )
@@ -173,14 +229,24 @@ PROGRAM cdfmhst
   ALLOCATE ( dzonal_heat_ind(npjglo), dzonal_heat_aus(npjglo), dzonal_heat_med(npjglo) )
   ALLOCATE ( dzonal_salt_glo(npjglo), dzonal_salt_atl(npjglo), dzonal_salt_pac(npjglo) )
   ALLOCATE ( dzonal_salt_ind(npjglo), dzonal_salt_aus(npjglo), dzonal_salt_med(npjglo) )
-  ALLOCATE ( dmtrp(npjglo) )
   ALLOCATE ( rdumlon(1,npjglo), rdumlat(1,npjglo))
+  ALLOCATE ( dmtrp(npjglo) )
+  ALLOCATE ( gdep (npko) )
+
+  IF ( lsepf ) THEN
+     ALLOCATE ( zv(npiglo,npjglo), zt(npiglo,npjglo), zs(npiglo,npjglo) )
+  ENDIF
 
   IF ( lfull ) ALLOCATE ( e31d(npk) )
 
   e1v(:,:)   = getvar(cn_fhgr, cn_ve1v,  1, npiglo, npjglo)
   gphiv(:,:) = getvar(cn_fhgr, cn_gphiv, 1, npiglo, npjglo)
-  gdep(:)    = 0.  ! dummy depth for netcdf output
+
+  IF ( lzdim ) THEN
+     gdep(:)   = getvare3(cn_fzgr, cn_gdept, npk )
+  ELSE
+     gdep(:)    = 0.  ! dummy depth for netcdf output
+  ENDIF
 
   IF ( lfull ) e31d = getvare3(cn_fzgr, cn_ve3t, npk )
 
@@ -190,12 +256,11 @@ PROGRAM cdfmhst
 
   ! prepare output netcdf output file
   ! Allocate output variables
-  ALLOCATE(stypvar(nbasins*npvar),  cvarname(nbasins*npvar) )
-  ALLOCATE(    ipk(nbasins*npvar), id_varout(nbasins*npvar) )
-
-  ipk(:)=1               ! all output variables have only 1 level !
-  DO jbasins = 1,nbasins
-
+  ALLOCATE(stypvar(nbasinso*npvar),  cvarname(nbasinso*npvar) )
+  ALLOCATE(    ipk(nbasinso*npvar), id_varout(nbasinso*npvar) )
+  
+  ipk(:)=npko               ! all output variables either 1 or npko levels
+  DO jbasins = 1,nbasinso
      cvarname(jbasins)                  = TRIM(cv_zomht)//TRIM(cbasin(jbasins))
      stypvar(jbasins)%cname             = cvarname(jbasins)
      stypvar(jbasins)%cunits            = 'PW'
@@ -205,11 +270,11 @@ PROGRAM cdfmhst
      stypvar(jbasins)%clong_name        = 'Meridional Heat Transport '//TRIM(cbasin(jbasins))
      stypvar(jbasins)%cshort_name       = cvarname(jbasins)
      stypvar(jbasins)%conline_operation = 'N/A'
-     stypvar(jbasins)%caxis             = 'TY'
+     stypvar(jbasins)%caxis             = cldimension
 
      IF ( npvar == 2 ) THEN
         ! MST
-        ivar = nbasins+jbasins
+        ivar = nbasinso+jbasins
         cvarname(ivar)                   = TRIM(cv_zomst)//TRIM(cbasin(jbasins))
         stypvar(ivar )%cname             = cvarname(ivar)
         stypvar(ivar )%cunits            = 'T/sec'
@@ -219,30 +284,45 @@ PROGRAM cdfmhst
         stypvar(ivar )%clong_name        = 'Meridional Salt Transport '//TRIM(cbasin(jbasins))
         stypvar(ivar )%cshort_name       = cvarname(ivar)
         stypvar(ivar )%conline_operation = 'N/A'
-        stypvar(ivar )%caxis             = 'TY'
+        stypvar(ivar )%caxis             = cldimension
      ENDIF
   END DO
 
   ! create output fileset
-  ncout = create      (cf_outnc, cf_vtfil, 1,             npjglo, 1, cdep='depthv'                              )
-  ierr  = createvar   (ncout,    stypvar,  nbasins*npvar, ipk,    id_varout                                     )
-  ierr  = putheadervar(ncout,    cf_vtfil, 1,             npjglo, 1, pnavlon=rdumlon, pnavlat=rdumlat, pdep=gdep)
+  ncout = create      (cf_outnc, cf_vtfil, 1,             npjglo, npko, cdep='depthv'                              )
+  ierr  = createvar   (ncout,    stypvar,  nbasinso*npvar, ipk,    id_varout                                       )
+  ierr  = putheadervar(ncout,    cf_vtfil, 1,             npjglo, npko, pnavlon=rdumlon, pnavlat=rdumlat, pdep=gdep)
 
-  tim   = getvar1d (cf_vtfil, cn_vtimec, npt     )
+  tim   = getvar1d (cf_vtfil, cn_vtimec, npt     ) 
   ierr  = putvar1d (ncout,    tim,       npt, 'T')
 
   OPEN(numouth,FILE=cf_outh,FORM='FORMATTED', RECL=256)  ! to avoid wrapped line with ifort
   OPEN(numouts,FILE=cf_outs,FORM='FORMATTED', RECL=256)  ! to avoid wrapped line with ifort
 
+
   DO jt=1, npt
      dtrph(:,:) = 0.d0
      dtrps(:,:) = 0.d0
      DO jk = 1,npk
         PRINT *,'level ',jk
         ! Get temperature and salinity at jk
-        zvt(:,:)= getvar(cf_vtfil, cn_vomevt, jk, npiglo, npjglo, ktime=jt)
-        zvs(:,:)= getvar(cf_vtfil, cn_vomevs, jk, npiglo, npjglo, ktime=jt)
+        IF ( lsepf ) THEN
+          zv(:,:)= getvar(cf_vfil, cn_vomecrty, jk, npiglo, npjglo, ktime=jt)
+          zt(:,:)= getvar(cf_tfil, cn_votemper, jk, npiglo, npjglo, ktime=jt)
+          zs(:,:)= getvar(cf_sfil, cn_vosaline, jk, npiglo, npjglo, ktime=jt)
+          zvt(:,:)=0.
+          zvs(:,:)=0.
+           DO ji=1, npiglo
+              DO jj = 1, npjglo -1
+                 zvt(ji,jj) = 0.5 * ( zt(ji,jj) + zt(ji,jj+1) )*zv(ji,jj)  ! temper at Vpoint
+                 zvs(ji,jj) = 0.5 * ( zs(ji,jj) + zs(ji,jj+1) )*zv(ji,jj)  ! salinity at Vpoint
+              END DO
+           END DO
 
+        ELSE
+          zvt(:,:)= getvar(cf_vtfil, cn_vomevt, jk, npiglo, npjglo, ktime=jt)
+          zvs(:,:)= getvar(cf_vtfil, cn_vomevs, jk, npiglo, npjglo, ktime=jt)
+        ENDIF
         ! get e3v at level jk
         IF ( lfull ) THEN
            e3v(:,:) = e31d(jk)
@@ -256,9 +336,8 @@ PROGRAM cdfmhst
         dtrph(:,:) = dtrph(:,:) + dwkh(:,:) * pprau0 * pprcp
         dtrps(:,:) = dtrps(:,:) + dwks(:,:)  
 
-     END DO  ! loop to next level
 
-     ! global 
+     !global
      zmask(:,:) = getvar(cn_fmsk, 'vmask', 1, npiglo, npjglo)
      DO jj=1,npjglo
         dzonal_heat_glo(jj) = SUM( dtrph(2:npiglo-1,jj)*zmask(2:npiglo-1,jj) )
@@ -307,60 +386,76 @@ PROGRAM cdfmhst
         !       dzonal_salt_med(jj)= SUM( dtrps(:,jj)*zmask(:,jj))
         !    END DO
      ENDIF
-
-
-     DO jvar=1,npvar   !  MHT [ and MST ]  (1 or 2 )
-        IF ( jvar == 1 ) THEN
-           ! MHT
-           ivar=1
-           dmtrp(:) = dzonal_heat_glo(:)/1.d15                        ! GLO
-           WHERE ( dmtrp == 0 ) dmtrp = ppspval
-           ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-           ivar=ivar+1
-           IF ( nbasins == 5 ) THEN
-              dmtrp(:) = dzonal_heat_atl(:)/1.d15                      ! ATL
-              WHERE ( dmtrp == 0 ) dmtrp = ppspval         
-              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-              ivar=ivar+1
-              dmtrp(:) = (dzonal_heat_ind(:) + dzonal_heat_pac(:))/1.d15  ! INP
-              WHERE ( dmtrp == 0 ) dmtrp = ppspval
-              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-              ivar=ivar+1
-              dmtrp(:) = dzonal_heat_ind(:)/1.d15                      ! IND
-              WHERE ( dmtrp == 0 ) dmtrp = ppspval
-              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-              ivar=ivar+1
-              dmtrp(:) = dzonal_heat_pac(:)/1.d15                      ! PAC
-              WHERE ( dmtrp == 0 ) dmtrp = ppspval
-              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-              ivar=ivar+1
-           ENDIF
-        ELSE
-           ! MST
-           dmtrp(:) = dzonal_salt_glo(:)/1.d6                        ! GLO
-           WHERE ( dmtrp == 0 ) dmtrp = ppspval
-           ierr=putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-           ivar=ivar+1
-           IF ( nbasins == 5 ) THEN
-              dmtrp(:) = dzonal_salt_atl(:)/1.d6                      ! ATL
+      
+     IF (  lzdim  .OR. ( jk == npk ) ) THEN  !output this level
+        IF ( lzdim ) THEN ; ik0 = jk ;  ELSE ;  ik0 = 1  ; ENDIF
+     
+        DO jvar=1,npvar   !  MHT [ and MST ]  (1 or 2 )
+           IF ( jvar == 1 ) THEN
+              ! MHT
+              ivar=1
+              dmtrp(:) = dzonal_heat_glo(:)/1.d15                            ! GLO
               WHERE ( dmtrp == 0 ) dmtrp = ppspval
-              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
+              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
               ivar=ivar+1
-              dmtrp(:) = (dzonal_salt_ind(:) + dzonal_salt_pac(:))/1.d6  ! INP
+              IF ( nbasins == 5 ) THEN
+                 dmtrp(:) = dzonal_heat_atl(:)/1.d15                         ! ATL
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval         
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 dmtrp(:) = (dzonal_heat_ind(:) + dzonal_heat_pac(:))/1.d15  ! INP
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 dmtrp(:) = dzonal_heat_ind(:)/1.d15                         ! IND
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 dmtrp(:) = dzonal_heat_pac(:)/1.d15                         ! PAC
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 ! now inp0
+                 dmtrp(:) = ( dzonal_heat_glo(:) - dzonal_heat_atl(:) )/1.d15 ! INP0
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+              ENDIF
+           ELSE
+              ! MST
+              dmtrp(:) = dzonal_salt_glo(:)/1.d6                              ! GLO
               WHERE ( dmtrp == 0 ) dmtrp = ppspval
-              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-              ivar=ivar+1
-              dmtrp(:) = dzonal_salt_ind(:)/1.d6                      ! IND
-              WHERE ( dmtrp == 0 ) dmtrp = ppspval
-              ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
-              ivar=ivar+1
-              dmtrp(:) = dzonal_salt_pac(:)/1.d6                      ! PAC
-              WHERE ( dmtrp == 0 ) dmtrp = ppspval
-              ierr=putvar(ncout, id_varout(ivar), REAL(dmtrp), 1, 1, npjglo, ktime=jt)
+              ierr=putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
               ivar=ivar+1
+              IF ( nbasins == 5 ) THEN
+                 dmtrp(:) = dzonal_salt_atl(:)/1.d6                           ! ATL
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 dmtrp(:) = (dzonal_salt_ind(:) + dzonal_salt_pac(:))/1.d6    ! INP
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 dmtrp(:) = dzonal_salt_ind(:)/1.d6                           ! IND
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 dmtrp(:) = dzonal_salt_pac(:)/1.d6                           ! PAC
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr=putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+                 ! now inp0
+                 dmtrp(:) = ( dzonal_salt_glo(:) - dzonal_salt_atl(:) )/1.d6  ! INP0  
+                 WHERE ( dmtrp == 0 ) dmtrp = ppspval
+                 ierr = putvar(ncout, id_varout(ivar), REAL(dmtrp), ik0, 1, npjglo, ktime=jt)
+                 ivar=ivar+1
+              ENDIF
            ENDIF
-        ENDIF
-     END DO
+        END DO
+
+     ENDIF   ! end loop on check for ouptut
+  END DO  ! loop to next level
+
 
      WRITE(numouth,*)'! Zonal heat transport (integrated alon I-model coordinate) (in Pw)'
      IF ( llglo ) THEN

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/cdftools.git



More information about the debian-science-commits mailing list