[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