[cdftools] 120/228: JMM : clean julie's cdfvFWov.f90 for output.

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jun 12 08:21:38 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 35b486214d0571b5951db1958fd573a0776650ca
Author: molines <molines at 1055176f-818a-41d9-83e1-73fbe5b947c5>
Date:   Thu Dec 29 14:25:45 2011 +0000

    JMM : clean julie's cdfvFWov.f90 for output.
    
    
    git-svn-id: http://servforge.legi.grenoble-inp.fr/svn/CDFTOOLS/trunk@568 1055176f-818a-41d9-83e1-73fbe5b947c5
---
 cdfvFWov.f90 | 156 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 77 insertions(+), 79 deletions(-)

diff --git a/cdfvFWov.f90 b/cdfvFWov.f90
index a85a359..34d578b 100644
--- a/cdfvFWov.f90
+++ b/cdfvFWov.f90
@@ -25,43 +25,47 @@ PROGRAM cdfvFWov
   !!----------------------------------------------------------------------
   IMPLICIT NONE
 
-  INTEGER(KIND=4)   :: varid_time, varid_net, varid_tot, varid_ov
-  INTEGER(KIND=4)   :: dimid_time 
-  INTEGER(KIND=4)   :: ncin, ncout
-
-  INTEGER(KIND=4)                            :: narg, iargc
-  INTEGER(KIND=4)                            :: npt, npiglo, npjglo, npk
-  INTEGER(KIND=4)                            :: ji, jk, jt                           
-  INTEGER(KIND=4)                            :: istatus
-
-  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: rmasks, rmaskn, rmaskv
-  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: zsaln, zsals
-  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: zsalv, zvitv
-  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: zFWv
-
-  REAL(KIND=8), DIMENSION (:,:), ALLOCATABLE :: de3v
-  REAL(KIND=8), DIMENSION (:,:), ALLOCATABLE :: de1v
-  REAL(KIND=8), DIMENSION (:),   ALLOCATABLE :: dnetvFW, dtotvFW
-  REAL(KIND=8), DIMENSION (:),   ALLOCATABLE :: dovFW, dtime
-  REAL(KIND=8), DIMENSION (1)                :: dnetv, dnetFW
-  REAL(KIND=8), DIMENSION (1)                :: darea, dareak
+  INTEGER(KIND=4)                            :: narg, iargc         ! arguments on command line
+  INTEGER(KIND=4)                            :: npiglo, npjglo      ! size of the domain
+  INTEGER(KIND=4)                            :: npk, npt            ! size of the domain
+  INTEGER(KIND=4)                            :: ji, jk, jt          ! dummy loop index
+  INTEGER(KIND=4)                            :: ierr                ! error status of I/O
+  INTEGER(KIND=4)                            :: ncout               ! ncid of output file
+  INTEGER(KIND=4)                            :: ikx=1, iky=1, ikz=1 ! dims of netcdf output file
+  INTEGER(KIND=4)                            :: nboutput = 3        ! number of output variables
+  INTEGER(KIND=4), DIMENSION(:), ALLOCATABLE :: ipk, id_varout      ! output variables properties
+
+  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: rmaskn, rmasks      ! S-mask North and South of V-point
+  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: rmaskv              ! mask at V point
+  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: zsaln, zsals        ! salinity North and South of v point
+  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: zsalv, zvitv        ! salinity at V point, velocity
+  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: zFWv                ! work array
+  REAL(KIND=4), DIMENSION (:,:), ALLOCATABLE :: rdumlon, rdumlat    ! dummy arrays for I/O
+
+  REAL(KIND=8), DIMENSION (:,:), ALLOCATABLE :: de3v                ! vertical metrics
+  REAL(KIND=8), DIMENSION (:,:), ALLOCATABLE :: de1v                ! horizontal metrics
+  REAL(KIND=8), DIMENSION (:),   ALLOCATABLE :: dnetvFW, dtotvFW    ! transport array
+  REAL(KIND=8), DIMENSION (:),   ALLOCATABLE :: dovFW, dtime        ! overturning array, time
+  REAL(KIND=8), DIMENSION (1)                :: dnetv, dnetFW       ! total transport accross section (mass and FW)
+  REAL(KIND=8), DIMENSION (1)                :: darea, dareak       ! work space
   REAL(KIND=8), DIMENSION (1)                :: dzonalv, dzonalFW
   REAL(KIND=8)                               :: dztrp, dcellarea
-  REAL(KIND=8), PARAMETER                    :: dp_rsal=35.d0      ! reference salinity for freshwater calculation
-
-  CHARACTER(LEN=256)                         :: cf_vfil
-  CHARACTER(LEN=256)                         :: cf_sfil
-  CHARACTER(LEN=256)                         :: cf_zgr
-  CHARACTER(LEN=256)                         :: cf_hgr
-  CHARACTER(LEN=256)                         :: cf_mask
-  CHARACTER(LEN=256)                         :: cf_out    = 'vFWov.nc'
-  CHARACTER(LEN=256)                         :: cv_netvFW = 'netvFW'
-  CHARACTER(LEN=256)                         :: cv_totvFW = 'totvFW'
-  CHARACTER(LEN=256)                         :: cv_ovFW   = 'ovFW'
-
-  TYPE (variable), DIMENSION(4)              :: stypvar    
-
-  LOGICAL                                    :: lchk = .FALSE.
+  REAL(KIND=8), PARAMETER                    :: dp_rsal=35.d0       ! reference salinity for freshwater calculation
+
+  CHARACTER(LEN=256)                         :: cf_vfil             ! input V file
+  CHARACTER(LEN=256)                         :: cf_sfil             ! input S file
+  CHARACTER(LEN=256)                         :: cf_zgr              ! zgr file
+  CHARACTER(LEN=256)                         :: cf_hgr              ! hgr file
+  CHARACTER(LEN=256)                         :: cf_mask             ! mask file
+  CHARACTER(LEN=256)                         :: cf_out    = 'vFWov.nc'  ! output file
+  CHARACTER(LEN=256)                         :: cv_netvFW = 'netvFW'    ! output variable 1
+  CHARACTER(LEN=256)                         :: cv_totvFW = 'totvFW'    ! output variable 2
+  CHARACTER(LEN=256)                         :: cv_ovFW   = 'ovFW'      ! output variable 3
+  CHARACTER(LEN=256)                         :: cglobal             ! Global attribute for output file
+
+  TYPE (variable), DIMENSION(:), ALLOCATABLE :: stypvar             ! I/O data structure
+
+  LOGICAL                                    :: lchk = .FALSE.      ! flag for missing files
   !!----------------------------------------------------------------------
   CALL ReadCdfNames()
 
@@ -74,13 +78,13 @@ PROGRAM cdfvFWov
      PRINT *,'        a section specified by the input files (data and metrics).'
      PRINT *,'      '
      PRINT *,'     ARGUMENTS :'
-     PRINT *,'        All arguments are ''section file'', which are assumed to be files with'
-     PRINT *,'        2 zonal lines of data ( j and j+1). '
-     PRINT *,'        V_secfile : meridional velocity section file.'
-     PRINT *,'        S_secfile : salinity section file.'
-     PRINT *,'        ZGR_secfile : mesh_zgr section file '
-     PRINT *,'        HGR_secfile : mesh_hgr section file '
-     PRINT *,'        MSK_secfile : mask section file '
+     PRINT *,'        All arguments are ''section files'', which are assumed to be files with'
+     PRINT *,'        2 zonal lines of data ( j and j+1 ): '
+     PRINT *,'         - V_secfile : meridional velocity section file.'
+     PRINT *,'         - S_secfile : salinity section file.'
+     PRINT *,'         - ZGR_secfile : mesh_zgr section file '
+     PRINT *,'         - HGR_secfile : mesh_hgr section file '
+     PRINT *,'         - MSK_secfile : mask section file '
      PRINT *,'      '
      PRINT *,'     REQUIRED FILES :'
      PRINT *,'        none'
@@ -88,6 +92,9 @@ PROGRAM cdfvFWov
      PRINT *,'     OUTPUT : '
      PRINT *,'       netcdf file : ', TRIM(cf_out)
      PRINT *,'       variables : ',TRIM(cv_netvFW),', ',TRIM(cv_totvFW),', ',TRIM(cv_ovFW)
+     PRINT *,'       Output file only has time relevant dimension. Other dims are set to 1.'
+     PRINT *,'       Degenerated dimensions can be removed with :'
+     PRINT *,'           ncwga -a x,y,depthw ',TRIM(cf_out), ' -o out.nc'
      STOP
   ENDIF
 
@@ -123,16 +130,22 @@ PROGRAM cdfvFWov
      STOP
   ENDIF
 
-  ALLOCATE( dnetvFW(npt), dtotvFW(npt), dovFW(npt), dtime(npt) )
-  ALLOCATE( de1v(npiglo,npjglo), de3v(npiglo,npk))
-  ALLOCATE( zFWv(npiglo,npk), zvitv(npiglo,npk) )
-  ALLOCATE( zsals(npiglo,npk), zsaln(npiglo,npk), zsalv(npiglo,npk) )
-  ALLOCATE( rmasks(npiglo,npk), rmaskn(npiglo,npk), rmaskv(npiglo,npk))
+  ALLOCATE ( dnetvFW(npt), dtotvFW(npt), dovFW(npt), dtime(npt) )
+  ALLOCATE ( de1v(npiglo,npjglo), de3v(npiglo,npk))
+  ALLOCATE ( zFWv(npiglo,npk), zvitv(npiglo,npk) )
+  ALLOCATE ( zsals(npiglo,npk), zsaln(npiglo,npk), zsalv(npiglo,npk) )
+  ALLOCATE ( rmasks(npiglo,npk), rmaskn(npiglo,npk), rmaskv(npiglo,npk))
+  ALLOCATE ( stypvar(nboutput), ipk(nboutput), id_varout(nboutput) )
+  ALLOCATE ( rdumlon(1,1), rdumlat(1,1) )
+
+  rdumlon(:,:) = 0.e0  ! dummy longitude
+  rdumlat(:,:) = 0.e0  ! dummy latitude
 
   !! load data
   dtime = getvar1d(cf_vfil, cn_vtimec, npt)
 
   !! define output variables
+  ipk(:) = 1
   stypvar%rmissing_value    = 0.
   stypvar%valid_min         = -1000.
   stypvar%valid_max         = 1000.
@@ -150,14 +163,22 @@ PROGRAM cdfvFWov
   stypvar(2)%cunits         ='Sv'
   stypvar(3)%cunits         ='Sv'
 
-  stypvar(1)%clong_name     = 'Net_VFW'
-  stypvar(2)%clong_name     = 'Total_VFW'
-  stypvar(3)%clong_name     = 'Overturning_VFW'
+  stypvar(1)%clong_name     = 'Net transport of freshwater across section'
+  stypvar(2)%clong_name     = 'Transport of freshwater across section when net mass transport equals 0'
+  stypvar(3)%clong_name     = 'Overturning component of freshwater transport across section'
 
   stypvar(1)%cshort_name    = TRIM(cv_netvFW )
   stypvar(2)%cshort_name    = TRIM(cv_totvFW )
   stypvar(3)%cshort_name    = TRIM(cv_ovFW   )
 
+  WRITE(cglobal,'(a,f5.1,a)' ) 'comment : Reference salinity ', dp_rsal,' transport is positive northward'
+  
+  !! prepare output file
+  ncout = create      (cf_out, 'none',  ikx,      iky, ikz,       cdep='depthw'                    )
+  ierr  = createvar   (ncout,  stypvar, nboutput, ipk, id_varout, cdglobal=TRIM(cglobal)           )
+  ierr  = putheadervar(ncout,  cf_vfil, ikx,      iky, ikz,       pnavlon=rdumlon, pnavlat=rdumlat )
+
+  ierr  = putvar1d(ncout,   REAL(dtime),      npt, 'T')
 
   !! load scale factors 
   rmasks(:,:) = getvarxz(cf_mask, 'tmask', kj=1,   kpi=npiglo, kpz=npk,    kimin=1, kkmin=1)
@@ -226,36 +247,13 @@ PROGRAM cdfvFWov
      PRINT *,'netvFW = ', dnetvFW(jt), ' Sv'
      PRINT *,'totvFW = ', dtotvFW(jt), ' Sv'
      PRINT *,'ovFW   = ', dovFW(jt),   ' Sv'
+     
+     ierr = putvar0d( ncout, id_varout(1), REAL(dnetvFW(jt)), ktime = jt )
+     ierr = putvar0d( ncout, id_varout(2), REAL(dtotvFW(jt)), ktime = jt )
+     ierr = putvar0d( ncout, id_varout(3), REAL(dovFW(jt))  , ktime = jt )
 
   END DO  !jt
-
-  !! create output file
-  istatus = NF90_CREATE(cf_out, NF90_CLOBBER, ncout)
-  istatus = NF90_DEF_DIM(ncout, cn_vtimec, NF90_UNLIMITED, dimid_time)
-  istatus = NF90_OPEN(cf_vfil, NF90_NOWRITE, ncin)
-  istatus = NF90_DEF_VAR(ncout, cn_vtimec, NF90_FLOAT, (/dimid_time/), varid_time)
-  istatus = copyatt(cn_vtimec, varid_time, ncin, ncout)
-  istatus = closeout(ncin)
-  istatus = NF90_DEF_VAR(ncout, 'netvFW', NF90_FLOAT, (/dimid_time/), varid_net)
-  istatus = NF90_PUT_ATT(ncout, varid_net, 'units', 'Sv')
-  istatus = NF90_PUT_ATT(ncout, varid_net, 'long_name', 'Net transport of freshwater across section')
-  istatus = NF90_PUT_ATT(ncout, varid_net, 'comment', 'Reference salinity 35.0, transport is positive northward')
-  istatus = NF90_DEF_VAR(ncout, 'totvFW', NF90_FLOAT, (/dimid_time/), varid_tot)
-  istatus = NF90_PUT_ATT(ncout, varid_tot, 'units', 'Sv')
-  istatus = NF90_PUT_ATT(ncout, varid_tot, 'long_name', 'Transport of freshwater across section when net mass transport equals 0')
-  istatus = NF90_PUT_ATT(ncout, varid_tot, 'comment', 'Reference salinity 35.0, transport is positive northward')
-  istatus = NF90_DEF_VAR(ncout, 'ovFW', NF90_FLOAT, (/dimid_time/), varid_ov)
-  istatus = NF90_PUT_ATT(ncout, varid_ov, 'units', 'Sv')
-  istatus = NF90_PUT_ATT(ncout, varid_ov, 'long_name', 'Overturning component of freshwater transport across section')
-  istatus = NF90_PUT_ATT(ncout, varid_ov, 'comment', 'Reference salinity 35.0, transport is positive northward')
-  istatus = NF90_ENDDEF(ncout)
-
-  istatus = NF90_PUT_VAR(ncout, varid_time, dtime)
-  istatus = NF90_PUT_VAR(ncout, varid_net, dnetvFW)
-  istatus = NF90_PUT_VAR(ncout, varid_tot, dtotvFW)
-  istatus = NF90_PUT_VAR(ncout, varid_ov, dovFW)
-
-  IF ( istatus /= NF90_NOERR ) PRINT *, NF90_STRERROR(istatus)
-  istatus = closeout(ncout)
+  
+  ierr = closeout(ncout)
 
 END PROGRAM cdfvFWov

-- 
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