[cdftools] 03/228: JMM modify cdfvT in order to handle multi timeframe input files

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jun 12 08:21:22 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 b3d90a8bf32d0b9221e08e6dcd0003517a1941d2
Author: molines <molines at 1055176f-818a-41d9-83e1-73fbe5b947c5>
Date:   Tue Feb 16 09:56:46 2010 +0000

    JMM modify cdfvT in order to handle multi timeframe input files
    
    
    git-svn-id: http://servforge.legi.grenoble-inp.fr/svn/CDFTOOLS/trunk@279 1055176f-818a-41d9-83e1-73fbe5b947c5
---
 cdfvT.f90 | 148 ++++++++++++++++++++++++++++++++++----------------------------
 1 file changed, 81 insertions(+), 67 deletions(-)

diff --git a/cdfvT.f90 b/cdfvT.f90
index ff4f2f7..ff8cfa5 100644
--- a/cdfvT.f90
+++ b/cdfvT.f90
@@ -5,10 +5,12 @@ PROGRAM cdfvT
   !!  **  Purpose: 
   !!  
   !!  **  Method: Try to avoid 3 d arrays 
+  !!              Assume that all input files have the same number of time frames
   !!
   !! history :
   !!   Original : J.M. Molines (Nov 2004 ) for ORCA025
-  !!              J.M. Molines  (apr 2005 ) : use of modules
+  !!              J.M. Molines (apr 2005 ) : use of modules
+  !!              J.M. Molines (Feb. 2010 ): handle multiframes input files.
   !!-------------------------------------------------------------------
   !!  $Rev$
   !!  $Date$
@@ -19,10 +21,12 @@ PROGRAM cdfvT
 
   !! * Local variables
   IMPLICIT NONE
-  INTEGER   :: ji,jj,jk,jt                         !: dummy loop index
+  INTEGER   :: ji,jj,jk,jt ,jkk,jtt                !: dummy loop index
   INTEGER   :: ierr                                !: working integer
-  INTEGER   :: narg, iargc , ntags                 !: 
-  INTEGER   :: npiglo,npjglo, npk                  !: size of the domain
+  INTEGER   :: narg, iargc
+  INTEGER   :: npiglo,npjglo, npk, nt              !: size of the domain
+  INTEGER   :: ntframe                             !: Cumul of time frame
+
   INTEGER, DIMENSION(4) ::  ipk, id_varout
   REAL(KIND=8) , DIMENSION (:,:), ALLOCATABLE :: zcumulut, zcumulus  !: Arrays for cumulated values
   REAL(KIND=8) , DIMENSION (:,:), ALLOCATABLE :: zcumulvt, zcumulvs  !: Arrays for cumulated values
@@ -31,7 +35,8 @@ PROGRAM cdfvT
        &                                         zvitu, zvitv,   &
        &                                         zworku, zworkv,   &
        &                                         rmean
-  REAL(KIND=4),DIMENSION(1)                   :: timean, tim
+  REAL(KIND=4),DIMENSION(1)                   :: timean
+  REAL(KIND=4),DIMENSION(:),ALLOCATABLE       :: tim
 
   CHARACTER(LEN=256) :: cfilet,cfileu,cfilev ,cfileout='vt.nc', config , ctag !:
   TYPE (variable), DIMENSION(4)     :: typvar     !: structure for attributes
@@ -39,6 +44,7 @@ PROGRAM cdfvT
 
   INTEGER    :: ncout
   INTEGER    :: istatus
+  LOGICAL    :: lcaltmean
 
   !!  Read command line
   narg= iargc()
@@ -51,7 +57,6 @@ PROGRAM cdfvT
      STOP
   ENDIF
 
-  ntags = narg -1   ! first argument is the config name
   !!
   !! Initialisation from 1st file (all file are assume to have the same geometry)
   CALL getarg (1, config)
@@ -59,12 +64,12 @@ PROGRAM cdfvT
   WRITE(cfilet,'(a,"_",a,"_gridT.nc")') TRIM(config),TRIM(ctag)
   INQUIRE(FILE=cfilet,EXIST=lexist)
   IF ( .NOT. lexist ) THEN
-    WRITE(cfilet,'(a,"_",a,"_grid_T.nc")') TRIM(config),TRIM(ctag)
-    INQUIRE(FILE=cfilet,EXIST=lexist)
-    IF ( .NOT. lexist ) THEN
-      PRINT *,' ERROR : missing gridT or even grid_T file '
-      STOP
-    ENDIF
+     WRITE(cfilet,'(a,"_",a,"_grid_T.nc")') TRIM(config),TRIM(ctag)
+     INQUIRE(FILE=cfilet,EXIST=lexist)
+     IF ( .NOT. lexist ) THEN
+        PRINT *,' ERROR : missing gridT or even grid_T file '
+        STOP
+     ENDIF
   ENDIF
 
   PRINT *,TRIM(cfilet)
@@ -121,10 +126,11 @@ PROGRAM cdfvT
   ierr= createvar(ncout ,typvar,4, ipk,id_varout )
   ierr= putheadervar(ncout, cfilet,npiglo, npjglo, npk )
 
+  lcaltmean=.TRUE.
   DO jk = 1, npk
      PRINT *,'level ',jk
      zcumulut(:,:) = 0.d0 ;  zcumulvt(:,:) = 0.d0 ; total_time = 0.
-     zcumulus(:,:) = 0.d0 ;  zcumulvs(:,:) = 0.d0 
+     zcumulus(:,:) = 0.d0 ;  zcumulvs(:,:) = 0.d0 ; ntframe = 0
 
      DO jt = 2, narg
         CALL getarg (jt, ctag)
@@ -132,89 +138,97 @@ PROGRAM cdfvT
         WRITE(cfilet,'(a,"_",a,"_gridT.nc")') TRIM(config),TRIM(ctag)
         INQUIRE(FILE=cfilet,EXIST=lexist)
         IF ( .NOT. lexist ) THEN
-          WRITE(cfilet,'(a,"_",a,"_grid_T.nc")') TRIM(config),TRIM(ctag)
-          INQUIRE(FILE=cfilet,EXIST=lexist)
-          IF ( .NOT. lexist ) THEN
-             PRINT *,' ERROR : missing gridT or even grid_T file '
-             STOP
-          ENDIF
+           WRITE(cfilet,'(a,"_",a,"_grid_T.nc")') TRIM(config),TRIM(ctag)
+           INQUIRE(FILE=cfilet,EXIST=lexist)
+           IF ( .NOT. lexist ) THEN
+              PRINT *,' ERROR : missing gridT or even grid_T file '
+              STOP
+           ENDIF
         ENDIF
+        nt=getdim (cfilet,'time_counter')
+        IF ( lcaltmean )  THEN
+           ALLOCATE (tim(nt) )
+           tim=getvar1d(cfilet,'time_counter',nt)
+           total_time = total_time + SUM(tim(1:nt) )
+           DEALLOCATE(tim)
+        END IF
 
+        ! assume U and V file have same time span ...
         WRITE(cfileu,'(a,"_",a,"_gridU.nc")') TRIM(config),TRIM(ctag)
         INQUIRE(FILE=cfileu,EXIST=lexist)
         IF ( .NOT. lexist ) THEN
-          WRITE(cfileu,'(a,"_",a,"_grid_U.nc")') TRIM(config),TRIM(ctag)
-          INQUIRE(FILE=cfileu,EXIST=lexist)
-          IF ( .NOT. lexist ) THEN
-             PRINT *,' ERROR : missing gridU or even grid_U file '
-             STOP
-          ENDIF
+           WRITE(cfileu,'(a,"_",a,"_grid_U.nc")') TRIM(config),TRIM(ctag)
+           INQUIRE(FILE=cfileu,EXIST=lexist)
+           IF ( .NOT. lexist ) THEN
+              PRINT *,' ERROR : missing gridU or even grid_U file '
+              STOP
+           ENDIF
         ENDIF
 
         WRITE(cfilev,'(a,"_",a,"_gridV.nc")') TRIM(config),TRIM(ctag)
         INQUIRE(FILE=cfilev,EXIST=lexist)
         IF ( .NOT. lexist ) THEN
-          WRITE(cfilev,'(a,"_",a,"_grid_V.nc")') TRIM(config),TRIM(ctag)
-          INQUIRE(FILE=cfilev,EXIST=lexist)
-          IF ( .NOT. lexist ) THEN
-             PRINT *,' ERROR : missing gridV or even grid_V file '
-             STOP
-          ENDIF
+           WRITE(cfilev,'(a,"_",a,"_grid_V.nc")') TRIM(config),TRIM(ctag)
+           INQUIRE(FILE=cfilev,EXIST=lexist)
+           IF ( .NOT. lexist ) THEN
+              PRINT *,' ERROR : missing gridV or even grid_V file '
+              STOP
+           ENDIF
         ENDIF
 
-        IF (jk == 1  )  THEN
-           tim=getvar1d(cfilet,'time_counter',1)
-           total_time = total_time + tim(1)
-        END IF
-
-        zvitu(:,:)= getvar(cfileu, 'vozocrtx' , jk ,npiglo, npjglo )
-        zvitv(:,:)= getvar(cfilev, 'vomecrty' , jk ,npiglo, npjglo )
-        ztemp(:,:)= getvar(cfilet, 'votemper',  jk ,npiglo, npjglo )
-        zsal(:,:) = getvar(cfilet, 'vosaline',  jk ,npiglo, npjglo )
-
-        ! temperature
-        zworku(:,:) = 0. ; zworkv(:,:) = 0.
-        DO ji=1, npiglo-1
-           DO jj = 1, npjglo -1
-              zworku(ji,jj) = 0.5 * ( ztemp(ji,jj) + ztemp(ji+1,jj) )  ! temper at Upoint
-              zworkv(ji,jj) = 0.5 * ( ztemp(ji,jj) + ztemp(ji,jj+1) )  ! temper at Vpoint
+        DO jtt=1,nt
+           ntframe=ntframe+1
+           jkk=jk
+           zvitu(:,:)= getvar(cfileu, 'vozocrtx' , jkk ,npiglo, npjglo, ktime=jtt )
+           zvitv(:,:)= getvar(cfilev, 'vomecrty' , jkk ,npiglo, npjglo, ktime=jtt )
+           ztemp(:,:)= getvar(cfilet, 'votemper',  jkk ,npiglo, npjglo, ktime=jtt )
+           zsal(:,:) = getvar(cfilet, 'vosaline',  jkk ,npiglo, npjglo, ktime=jtt )
+
+           ! temperature
+           zworku(:,:) = 0. ; zworkv(:,:) = 0.
+           DO ji=1, npiglo-1
+              DO jj = 1, npjglo -1
+                 zworku(ji,jj) = 0.5 * ( ztemp(ji,jj) + ztemp(ji+1,jj) )  ! temper at Upoint
+                 zworkv(ji,jj) = 0.5 * ( ztemp(ji,jj) + ztemp(ji,jj+1) )  ! temper at Vpoint
+              END DO
            END DO
-        END DO
 
-        zcumulut(:,:) = zcumulut(:,:) + zworku(:,:) * zvitu(:,:)
-        zcumulvt(:,:) = zcumulvt(:,:) + zworkv(:,:) * zvitv(:,:)
+           zcumulut(:,:) = zcumulut(:,:) + zworku(:,:) * zvitu(:,:)
+           zcumulvt(:,:) = zcumulvt(:,:) + zworkv(:,:) * zvitv(:,:)
 
-        ! salinity
-        zworku(:,:) = 0. ; zworkv(:,:) = 0.
-        DO ji=1, npiglo-1
-           DO jj = 1, npjglo -1
-              zworku(ji,jj) = 0.5 * ( zsal(ji,jj) + zsal(ji+1,jj) )  ! salinity  at Upoint
-              zworkv(ji,jj) = 0.5 * ( zsal(ji,jj) + zsal(ji,jj+1) )  ! salinity  at Vpoint
+           ! salinity
+           zworku(:,:) = 0. ; zworkv(:,:) = 0.
+           DO ji=1, npiglo-1
+              DO jj = 1, npjglo -1
+                 zworku(ji,jj) = 0.5 * ( zsal(ji,jj) + zsal(ji+1,jj) )  ! salinity  at Upoint
+                 zworkv(ji,jj) = 0.5 * ( zsal(ji,jj) + zsal(ji,jj+1) )  ! salinity  at Vpoint
+              END DO
            END DO
-        END DO
-
-        zcumulus(:,:) = zcumulus(:,:) + zworku(:,:) * zvitu(:,:)
-        zcumulvs(:,:) = zcumulvs(:,:) + zworkv(:,:) * zvitv(:,:)
 
-     END DO
+           zcumulus(:,:) = zcumulus(:,:) + zworku(:,:) * zvitu(:,:)
+           zcumulvs(:,:) = zcumulvs(:,:) + zworkv(:,:) * zvitv(:,:)
 
+        END DO  !jtt
+     END DO  ! jt
      ! finish with level jk ; compute mean (assume spval is 0 )
-     rmean(:,:) = zcumulvt(:,:)/ntags
+     rmean(:,:) = zcumulvt(:,:)/ntframe
      ierr = putvar(ncout, id_varout(1) ,rmean, jk,npiglo, npjglo )
 
-     rmean(:,:) = zcumulvs(:,:)/ntags
+     rmean(:,:) = zcumulvs(:,:)/ntframe
      ierr = putvar(ncout, id_varout(2) ,rmean, jk,npiglo, npjglo )
 
-     rmean(:,:) = zcumulut(:,:)/ntags
+     rmean(:,:) = zcumulut(:,:)/ntframe
      ierr = putvar(ncout, id_varout(3) ,rmean, jk,npiglo, npjglo )
 
-     rmean(:,:) = zcumulus(:,:)/ntags
+     rmean(:,:) = zcumulus(:,:)/ntframe
      ierr = putvar(ncout, id_varout(4) ,rmean, jk,npiglo, npjglo )
 
-     IF (jk == 1 )  THEN
-        timean(1)= total_time/ntags
+     IF (lcaltmean )  THEN
+        timean(1)= total_time/ntframe
         ierr=putvar1d(ncout,timean,1,'T')
      END IF
+     lcaltmean=.FALSE. ! tmean already computed
+
 
   END DO  ! loop to next level
 

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