[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