[cdftools] 54/228: JMM add cdftransportiz_noheat_obc and some improvement to cdfclip, cdfmppini

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jun 12 08:21:28 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 f38da039db42fc58860ad8bc14e478b2e9eed234
Author: molines <molines at 1055176f-818a-41d9-83e1-73fbe5b947c5>
Date:   Tue Jun 8 15:51:34 2010 +0000

    JMM add cdftransportiz_noheat_obc and some improvement to cdfclip, cdfmppini
    
    
    git-svn-id: http://servforge.legi.grenoble-inp.fr/svn/CDFTOOLS/trunk@330 1055176f-818a-41d9-83e1-73fbe5b947c5
---
 Makefile                                           |  5 ++-
 cdfclip.f90                                        | 18 +++++---
 cdfio.f90                                          | 45 ++++++++++---------
 cdfmppini.f90                                      |  4 +-
 cdftransportiz_noheat.f90                          |  5 ++-
 ...tiz_noheat.f90 => cdftransportiz_noheat_obc.f90 | 52 ++++++++++++++++++----
 6 files changed, 90 insertions(+), 39 deletions(-)

diff --git a/Makefile b/Makefile
index b84b30d..aecd01b 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@ EXEC = cdfmoy cdfmoyt  cdfmoy_sp cdfstd cdfmoy_sal2_temp2  cdfmoy_annual cdfmoy_
        cdfbn2 cdfbn2-full  cdfsig0 cdfsigi cdfsiginsitu cdfbottomsig0 cdfbottomsigi cdfspice\
        cdfbottom cdfets cdfcurl cdfw cdfgeo-uv cdfmxl cdfmxl-full\
        cdfrhoproj cdfisopycdep cdfsigintegr cdfpv cdflspv cdfpvor cdfpvor-full\
-       cdfmhst cdfmhst-full cdfvhst cdfvhst-full cdftransportiz cdftransportiz_noheat cdftransportiz-full \
+       cdfmhst cdfmhst-full cdfvhst cdfvhst-full cdftransportiz cdftransportiz_noheat cdftransportiz_noheat_obc cdftransportiz-full \
        cdftransportizpm  \
        cdfmasstrp cdfmasstrp-full \
        cdfsigtrp cdfsigitrp cdfsigtrp-full cdftemptrp-full  cdftempvol-full\
@@ -255,6 +255,9 @@ cdftransportizpm: cdfio.o  cdftransportizpm.f90
 cdftransportiz_noheat: cdfio.o  cdftransportiz_noheat.f90
 	$(F90) cdftransportiz_noheat.f90 -o cdftransportiz_noheat cdfio.o $(FFLAGS)
 
+cdftransportiz_noheat_obc: cdfio.o  cdftransportiz_noheat_obc.f90
+	$(F90) cdftransportiz_noheat_obc.f90 -o cdftransportiz_noheat_obc cdfio.o $(FFLAGS)
+
 cdftransportiz-full: cdfio.o  cdftransportiz-full.f90
 	$(F90) cdftransportiz-full.f90 -o cdftransportiz-full cdfio.o $(FFLAGS)
 
diff --git a/cdfclip.f90 b/cdfclip.f90
index 5edfb05..9feb34b 100644
--- a/cdfclip.f90
+++ b/cdfclip.f90
@@ -36,7 +36,7 @@ PROGRAM cdfclip
   REAL(KIND=4), DIMENSION(:), ALLOCATABLE    :: timean, tim
 
   CHARACTER(LEN=256) :: cfile ,cfileout                         !: file name
-  CHARACTER(LEN=256) ::  cdep, cdum
+  CHARACTER(LEN=256) ::  cdep, cdum, ctim
   CHARACTER(LEN=256) ,DIMENSION(:), ALLOCATABLE:: cvarname   !: array of var name
   CHARACTER(LEN=255) :: cglobal !: global attribute to write on output file
   
@@ -120,7 +120,17 @@ PROGRAM cdfclip
   IF ( kmax < 0 ) kmax = npk
   npkk = kmax - kmin +1   ! number of extracted levels. If no level in file, it is 0: 0 -1 + 1 !
   IF (npk == 0 ) kmax = 1
-  nt     = getdim(cfile,'time_counter')
+  nt     = getdim(cfile,'time_counter', cdtrue=ctim, kstatus=istatus)
+  IF ( istatus /= 0 ) THEN
+     nt     = getdim(cfile,'time', cdtrue=ctim, kstatus=istatus)
+     IF ( istatus /= 0 ) THEN
+        nt     = getdim(cfile,'t', cdtrue=ctim, kstatus=istatus)
+        IF ( istatus /= 0 ) THEN
+          PRINT *, 'no time dimension found'
+          nt=1
+        ENDIF
+     ENDIF
+  ENDIF
   PRINT *, 'npiglo=', npiglo
   PRINT *, 'npjglo=', npjglo
   PRINT *, 'npk   =', npk ,' npkk  =', npkk
@@ -176,11 +186,11 @@ PROGRAM cdfclip
   ! create output fileset
   cfileout='cdfclip.nc'
   ! create output file taking the sizes in cfile
-
   ncout =create(cfileout, cfile,npiglo,npjglo,npkk,cdep=cdep)
   ierr= createvar(ncout , typvar,  nvars, ipkk, id_varout,cdglobal=cglobal)
   ierr= putheadervar(ncout , cfile, npiglo, npjglo, npkk,pnavlon=rlon, pnavlat=rlat,pdep=dep,cdep=cdep)
 
+
   DO jvar = 1,nvars
       ! skip dimension variables (already done when creating the output file)
       k1=MAX(1,kmin) ; k2=ipk(jvar)
@@ -190,7 +200,6 @@ PROGRAM cdfclip
       CASE DEFAULT
             IF ( lzonal ) THEN
               ALLOCATE( v2dxz(npiglo,ipk(jvar)) )
-              print *, TRIM(cvarname(jvar)), jmin,npiglo, ipk(jvar), imin
               DO jt=1,nt
               v2dxz=getvarxz(cfile,cvarname(jvar),jmin,npiglo,ipk(jvar), kimin=imin,kkmin=1,ktime=jt)
               DO jk=k1,k2
@@ -202,7 +211,6 @@ PROGRAM cdfclip
               DEALLOCATE ( v2dxz )
             ELSEIF (lmeridian) THEN
               ALLOCATE(  v2dyz(npjglo,ipk(jvar)) )
-              print *, TRIM(cvarname(jvar)), imin,npjglo, ipk(jvar), jmin
               DO jt=1,nt
               v2dyz=getvaryz(cfile,cvarname(jvar),imin,npjglo,ipk(jvar),kjmin=jmin,kkmin=1,ktime=jt)
               DO jk=k1, k2
diff --git a/cdfio.f90 b/cdfio.f90
index 3b9786c..6a714b6 100644
--- a/cdfio.f90
+++ b/cdfio.f90
@@ -1130,7 +1130,7 @@ CONTAINS
     LOGICAL :: llog=.FALSE. , lsf=.FALSE. , lao=.FALSE.
     REAL(KIND=4) :: sf=1., ao=0.        !: Scale factor and add_offset
     REAL(KIND=4)         :: spval       !: Missing values
-
+    INTEGER :: idum
 
     IF (PRESENT(kimin) ) THEN
        imin=kimin
@@ -1155,16 +1155,6 @@ CONTAINS
     lsf=.FALSE.
     lao=.FALSE.
 
-    istart(1) = imin
-    istart(2) = kj
-    istart(3) = kmin
-    ! JMM ! it workd for X Y Z T file,   not for X Y T .... try to found a fix !
-    istart(4) = itime
-
-    icount(1)=kpi
-    icount(2)=1
-    icount(3)=kpz
-    icount(4)=1
 
     CALL ERR_HDL(NF90_OPEN(cdfile,NF90_NOWRITE,ncid) )
     CALL ERR_HDL(NF90_INQ_VARID ( ncid,cdvar,id_var))
@@ -1198,6 +1188,17 @@ CONTAINS
        IF ( ao /= 0.) lao=.TRUE.
     ENDIF
 
+    ! detect if there is a y dimension in cdfile
+    istatus=NF90_INQ_DIMID(ncid,'y',idum)
+    IF ( istatus == NF90_NOERR ) THEN  ! the file has a 'y' dimension
+      istart=(/imin,kj,kmin,itime/)
+      ! JMM ! it workd for X Y Z T file,   not for X Y T .... try to found a fix !
+      icount=(/kpi,1,kpz,1/)
+    ELSE    ! no y dimension
+      istart=(/imin,kmin,itime,1/)
+      icount=(/kpi,kpz,1,1/)
+    ENDIF
+
     istatus=NF90_GET_VAR(ncid,id_var,getvarxz, start=istart,count=icount)
     IF ( istatus /= 0 ) THEN
        PRINT *,' Problem in getvarxz for ', TRIM(cdvar)
@@ -1243,6 +1244,7 @@ CONTAINS
     LOGICAL :: llog=.FALSE. , lsf=.FALSE. , lao=.FALSE.
     REAL(KIND=4) :: sf=1., ao=0.        !: Scale factor and add_offset
     REAL(KIND=4)         :: spval       !: Missing values
+    INTEGER :: idum
 
     IF (PRESENT(kjmin) ) THEN
        jmin=kjmin
@@ -1267,16 +1269,6 @@ CONTAINS
     lsf=.FALSE.
     lao=.FALSE.
 
-    istart(1) = ki
-    istart(2) = jmin
-    istart(3) = kmin
-    istart(4) = 1
-
-    icount(1)=1
-    icount(2)=kpj
-    icount(3)=kpz
-    ! JMM ! it workd for X Y Z T file,   not for X Y T .... try to found a fix !
-    icount(4)=itime
 
     CALL ERR_HDL(NF90_OPEN(cdfile,NF90_NOWRITE,ncid) )
     CALL ERR_HDL(NF90_INQ_VARID ( ncid,cdvar,id_var))
@@ -1310,6 +1302,17 @@ CONTAINS
        IF ( ao /= 0.) lao=.TRUE.
     ENDIF
 
+    ! detect if there is a x dimension in cdfile
+    istatus=NF90_INQ_DIMID(ncid,'x',idum)
+    IF ( istatus == NF90_NOERR ) THEN  ! the file has a 'x' dimension
+      istart=(/ki,jmin,kmin,itime/)
+      ! JMM ! it workd for X Y Z T file,   not for X Y T .... try to found a fix !
+      icount=(/1,kpj,kpz,1/)
+    ELSE    ! no x dimension
+      istart=(/jmin,kmin,itime,1/)
+      icount=(/kpj,kpz,1,1/)
+    ENDIF
+
     istatus=NF90_GET_VAR(ncid,id_var,getvaryz, start=istart,count=icount)
     IF ( istatus /= 0 ) THEN
        PRINT *,' Problem in getvaryz for ', TRIM(cdvar)
diff --git a/cdfmppini.f90 b/cdfmppini.f90
index ae19e13..83f85c6 100644
--- a/cdfmppini.f90
+++ b/cdfmppini.f90
@@ -418,7 +418,7 @@ CONTAINS
       IF (lwp) THEN
          OPEN (inum, FILE='mppini.txt', FORM='FORMATTED', RECL=255)
          WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpiglo,jpjglo
-         WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp nono noso nowe noea nbondi nbondj '
+         WRITE(inum,'(a)') 'RANK   nlci nlcj nldi nldj nlei nlej nimpp njmpp nono noso nowe noea nbondi nbondj '
 
         DO  jproc = 1, jpnij
          ii = iin(jproc)
@@ -427,7 +427,7 @@ CONTAINS
          nbondj(jproc) = ibondj(ii,ij)
          
 
-         WRITE(inum,'(15i5)') jproc, nlcit(jproc), nlcjt(jproc), &
+         WRITE(inum,'(15i5)') jproc-1, nlcit(jproc), nlcjt(jproc), &
                                      nldit(jproc), nldjt(jproc), &
                                      nleit(jproc), nlejt(jproc), &
                                      nimppt(jproc), njmppt(jproc),& 
diff --git a/cdftransportiz_noheat.f90 b/cdftransportiz_noheat.f90
index dd2b4e8..c337e55 100644
--- a/cdftransportiz_noheat.f90
+++ b/cdftransportiz_noheat.f90
@@ -111,9 +111,10 @@ PROGRAM cdftransportiz
      READ(cdum,*) imeter(jk)
   END DO
 
-  npiglo= getdim (cfileu,'x')
-  npjglo= getdim (cfileu,'y')
+  npiglo= MAX(1, getdim (cfileu,'x') )
+  npjglo= MAX(1 ,getdim (cfileu,'y') )
   npk   = getdim (cfileu,'depth')
+  
 
   PRINT *, 'npiglo=', npiglo
   PRINT *, 'npjglo=', npjglo
diff --git a/cdftransportiz_noheat.f90 b/cdftransportiz_noheat_obc.f90
similarity index 93%
copy from cdftransportiz_noheat.f90
copy to cdftransportiz_noheat_obc.f90
index dd2b4e8..7f22bc0 100644
--- a/cdftransportiz_noheat.f90
+++ b/cdftransportiz_noheat_obc.f90
@@ -24,9 +24,9 @@ PROGRAM cdftransportiz
   !!   Original :  J.M. Molines (jan. 2005)
   !!               J.M. Molines Apr 2005 : use modules
   !!---------------------------------------------------------------------
-  !!  $Rev$
-  !!  $Date$
-  !!  $Id$
+  !!  $Rev: 264 $
+  !!  $Date: 2009-09-08 17:49:35 +0200 (Tue, 08 Sep 2009) $
+  !!  $Id: cdftransportiz_noheat.f90 264 2009-09-08 15:49:35Z mathiot $
   !!--------------------------------------------------------------
   !! * Modules used
   USE cdfio
@@ -65,13 +65,14 @@ PROGRAM cdftransportiz
   REAL(KIND=4)                                 ::  udum, vdum
 
   REAL(KIND=8),   DIMENSION (:,:), ALLOCATABLE :: zwku,zwkv,    zwkut,zwkvt,   zwkus,zwkvs
+  REAL(KIND=8),   DIMENSION (:,:), ALLOCATABLE :: zuobc, zvobc
   REAL(KIND=8),   DIMENSION (:,:,:), ALLOCATABLE :: ztrpu, ztrpv, ztrput,ztrpvt, ztrpus,ztrpvs
 
   CHARACTER(LEN=256) :: cfileu, cfilev, csection, cfileout='section_trp.dat'
   CHARACTER(LEN=256) :: coordhgr='mesh_hgr.nc',  coordzgr='mesh_zgr.nc', cdum
 
   INTEGER    ::  nxtarg
-  LOGICAL    :: ltest=.FALSE.
+  LOGICAL    :: ltest=.FALSE., l_merid=.false.,  l_zonal=.false.
 
   ! constants
   REAL(KIND=4)   ::  rau0=1000.,  rcp=4000.
@@ -111,14 +112,32 @@ PROGRAM cdftransportiz
      READ(cdum,*) imeter(jk)
   END DO
 
-  npiglo= getdim (cfileu,'x')
-  npjglo= getdim (cfileu,'y')
+  npiglo= MAX(1, getdim (cfileu,'x') )
+  npjglo= MAX(1 ,getdim (cfileu,'y') )
   npk   = getdim (cfileu,'depth')
 
+  IF ( npiglo == 1 ) THEN
+    l_merid=.true.
+    PRINT *,' Meridional OBC'
+  ENDIF
+
+  IF ( npjglo == 1 ) THEN
+    l_zonal=.true.
+    PRINT *,' ZONAL OBC'
+  ENDIF
+  
+
   PRINT *, 'npiglo=', npiglo
   PRINT *, 'npjglo=', npjglo
   PRINT *, 'npk   =', npk
 
+  IF ( l_merid) THEN
+    ALLOCATE (zuobc(npjglo,npk), zvobc(npjglo,npk) )
+  ELSEIF (l_zonal) THEN
+    ALLOCATE (zuobc(npiglo,npk), zvobc(npiglo,npk) )
+  ENDIF
+    
+
   ! Allocate arrays
   ALLOCATE( zu (npiglo,npjglo), zut(npiglo,npjglo), zus(npiglo,npjglo) )
   ALLOCATE( zv (npiglo,npjglo), zvt(npiglo,npjglo), zvs(npiglo,npjglo) )
@@ -184,6 +203,18 @@ PROGRAM cdftransportiz
 
   ztrpus(:,:,:)= 0
   ztrpvs(:,:,:)= 0
+ 
+
+  ! read u, v on OBC
+    IF ( l_zonal ) THEN   ! (jpiglo,jpk)
+      zuobc(:,:)= getvarxz(cfileu, 'vozocrtx',1,npiglo,npk )
+      zvobc(:,:)= getvarxz(cfilev, 'vomecrty',1,npiglo,npk )
+    ENDIF
+    IF ( l_merid ) THEN   ! (jpjglo,jpk)
+      zuobc(:,:)= getvaryz(cfileu, 'vozocrtx',1,npjglo,npk )
+      zvobc(:,:)= getvaryz(cfilev, 'vomecrty',1,npjglo,npk )
+    ENDIF
+
   DO jclass = 1, nclass
      DO jk = ilev0(jclass),ilev1(jclass)
         PRINT *,'level ',jk
@@ -196,8 +227,13 @@ PROGRAM cdftransportiz
            zus(:,:)= udum
            zvs(:,:)= vdum
         ELSE
-           zu (:,:)= getvar(cfileu, 'vozocrtx',  jk ,npiglo,npjglo)
-           zv (:,:)= getvar(cfilev, 'vomecrty',  jk ,npiglo,npjglo)
+           IF ( l_zonal ) THEN
+           zu(:,1)=zuobc(:,jk)
+           zv(:,1)=zvobc(:,jk)
+           ELSE IF (l_merid ) THEN
+           zu(1,:)=zuobc(:,jk)
+           zv(1,:)=zvobc(:,jk)
+           ENDIF
            zut(:,:)= 0.
            zvt(:,:)= 0.
            zus(:,:)= 0.

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