[cdftools] 109/228: JMM PM : correction in cdfmkmask
Alastair McKinstry
mckinstry at moszumanska.debian.org
Fri Jun 12 08:21:36 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 1496eeafdbcdaa71044c61e0760621e604cbb4e5
Author: molines <molines at 1055176f-818a-41d9-83e1-73fbe5b947c5>
Date: Mon Oct 17 15:25:17 2011 +0000
JMM PM : correction in cdfmkmask
git-svn-id: http://servforge.legi.grenoble-inp.fr/svn/CDFTOOLS/trunk@556 1055176f-818a-41d9-83e1-73fbe5b947c5
---
cdfmkmask.f90 | 74 ++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 58 insertions(+), 16 deletions(-)
diff --git a/cdfmkmask.f90 b/cdfmkmask.f90
index f5db2b1..51577c5 100644
--- a/cdfmkmask.f90
+++ b/cdfmkmask.f90
@@ -14,7 +14,7 @@ PROGRAM cdfmkmask
!!
!! History : 2.1 : 11/2005 : J.M. Molines : Original code
!! 3.0 : 01/2011 : J.M. Molines : Doctor norm + Lic.
- !! Modified : 3.0 : 08/2011 : P. Mathiot : Add zoomij and zoombat option
+ !! Modified : 3.0 : 08/2011 : P. Mathiot : Add zoomij, zoombat, zoomvar and time option
!!----------------------------------------------------------------------
USE cdfio
USE modcdfnames
@@ -26,10 +26,10 @@ PROGRAM cdfmkmask
!!----------------------------------------------------------------------
IMPLICIT NONE
- INTEGER(KIND=4) :: ji, jj, jk ! dummy loop index
+ INTEGER(KIND=4) :: ji, jj, jk, jt ! dummy loop index
INTEGER(KIND=4) :: ierr ! working integer
INTEGER(KIND=4) :: narg, iargc, ijarg !
- INTEGER(KIND=4) :: npiglo, npjglo, npk ! size of the domain
+ INTEGER(KIND=4) :: npiglo, npjglo, npk, nt ! size of the domain
INTEGER(KIND=4) :: iimin, iimax ! limit in i
INTEGER(KIND=4) :: ijmin, ijmax ! limit in j
INTEGER(KIND=4) :: ncout ! ncid of output file
@@ -38,7 +38,8 @@ PROGRAM cdfmkmask
REAL(KIND=4) :: rlonmin, rlonmax ! limit in longitude
REAL(KIND=4) :: rlatmin, rlatmax ! limit in latitude
REAL(KIND=4) :: rbatmin, rbatmax ! limit in latitude
- REAL(KIND=4), DIMENSION(1) :: tim ! time counter
+ REAL(KIND=4) :: rvarmin, rvarmax ! limit in variable
+ REAL(KIND=4), DIMENSION(:) , ALLOCATABLE :: tim ! time counter
REAL(KIND=4), DIMENSION(:,:), ALLOCATABLE :: tmask, zmask ! 2D mask at current level
REAL(KIND=4), DIMENSION(:,:), ALLOCATABLE :: rlon, rlat ! latitude and longitude
REAL(KIND=4), DIMENSION(:,:), ALLOCATABLE :: rbat ! bathymetry
@@ -53,6 +54,8 @@ PROGRAM cdfmkmask
LOGICAL :: lzoom = .false. ! zoom flag lat/lon
LOGICAL :: lzoomij = .false. ! zoom flag i/j
LOGICAL :: lzoombat = .false. ! zoom flag bat
+ LOGICAL :: lzoomvar = .false. ! zoom flag var
+ LOGICAL :: ltime = .false. ! time flag
!!----------------------------------------------------------------------
CALL ReadCdfNames()
@@ -83,6 +86,11 @@ PROGRAM cdfmkmask
PRINT *,' limit the area where the mask is builded. Outside'
PRINT *,' this area, the mask is set to 0.'
PRINT *,' Need mesh_zgr.nc'
+ PRINT *,' [-zoomvar varname varmin varmax] : range of varname used to'
+ PRINT *,' limit the area where the mask is builded. Outside'
+ PRINT *,' this area, the mask is set to 0.'
+ PRINT *,' [-time ] : If further time step is available'
+ PRINT *,' a mask for each time step is done'
PRINT *,' [-o OUT-file ] : output file name to be used in place of standard'
PRINT *,' name [ ',TRIM(cf_out),' ]'
PRINT *,' '
@@ -124,6 +132,13 @@ PROGRAM cdfmkmask
CALL getarg (ijarg, cldum) ; ijarg = ijarg + 1 ; READ(cldum,*) rbatmin
CALL getarg (ijarg, cldum) ; ijarg = ijarg + 1 ; READ(cldum,*) rbatmax
!
+ CASE ( '-zoomvar' ) ! read a zoom variable area
+ lzoomvar = .true.
+ CALL getarg (ijarg, cv_mask) ; ijarg = ijarg + 1 ;
+ CALL getarg (ijarg, cldum) ; ijarg = ijarg + 1 ; READ(cldum,*) rvarmin
+ CALL getarg (ijarg, cldum) ; ijarg = ijarg + 1 ; READ(cldum,*) rvarmax
+ CASE ( '-time' ) ! create a mask for each time step of the file
+ ltime=.true.
CASE ( '-o' ) ! change output file name
CALL getarg (ijarg, cf_out) ; ijarg = ijarg + 1
!
@@ -135,7 +150,7 @@ PROGRAM cdfmkmask
IF ( lzoom .AND. lzoomij ) PRINT *, 'WARNING 2 spatial condition for mask'
- cv_mask = cn_vosaline
+ IF (.NOT. lzoomvar) cv_mask = cn_vosaline
IF (TRIM(cf_tfil)=='-maskfile') THEN
cv_mask = 'tmask'
cf_tfil = cn_fmsk
@@ -147,10 +162,18 @@ PROGRAM cdfmkmask
npiglo = getdim (cf_tfil,cn_x)
npjglo = getdim (cf_tfil,cn_y)
npk = getdim (cf_tfil,cn_z)
+ nt = getdim (cf_tfil,cn_t)
PRINT *,' npiglo = ', npiglo
PRINT *,' npjglo = ', npjglo
PRINT *,' npk = ', npk
+ PRINT *,' nt = ', nt
+
+ IF ((nt .GT. 1) .AND. (.NOT. ltime)) THEN
+ PRINT *, "WARNING nt > 1"
+ PRINT *, "we used only the first time step"
+ nt=1
+ END IF
ipk(1:4) = npk
@@ -182,8 +205,8 @@ PROGRAM cdfmkmask
ierr = createvar (ncout, stypvar, 4, ipk, id_varout )
ierr = putheadervar(ncout, cf_tfil, npiglo, npjglo, npk)
- ALLOCATE (tmask(npiglo,npjglo), zmask(npiglo,npjglo) )
- IF ( lzoombat ) ALLOCATE ( rbat(npiglo,npjglo) )
+ !! Allocate only usefull variable and read only usefull variable
+ ALLOCATE (tmask(npiglo,npjglo), zmask(npiglo,npjglo), tim(nt))
IF ( lzoom ) THEN
ALLOCATE (rlon(npiglo,npjglo), rlat(npiglo,npjglo))
@@ -191,11 +214,27 @@ PROGRAM cdfmkmask
rlat(:,:) = getvar(cf_tfil, cn_vlat2d, 1, npiglo, npjglo)
ENDIF
+ IF ( lzoombat ) THEN
+ ALLOCATE ( rbat (npiglo,npjglo) )
+ rbat(:,:)= getvar(cn_fzgr, cn_hdepw, 1 ,npiglo, npjglo)
+ END IF
+
+ !! Now compute the mask
+ DO jt=1, nt
+ IF (MOD(jt,10)==0) PRINT *,jt,'/',nt,' ...'
DO jk=1, npk
! tmask
- tmask(:,:) = getvar(cf_tfil, cv_mask, jk, npiglo, npjglo)
- WHERE (tmask > 0 ) tmask = 1
- WHERE (tmask <=0 ) tmask = 0
+ tmask(:,:) = getvar(cf_tfil, cv_mask, jk, npiglo, npjglo, ktime=jt)
+
+ IF ( lzoomvar ) THEN
+ zmask=tmask
+ WHERE ((tmask .GE. rvarmin) .AND. (tmask .LE. rvarmax)) zmask = 1
+ WHERE ((tmask .LT. rvarmin) .OR. (tmask .GT. rvarmax)) zmask = 0
+ tmask=zmask
+ ELSE
+ WHERE (tmask > 0 ) tmask = 1
+ WHERE (tmask <=0 ) tmask = 0
+ ENDIF
IF ( lzoom ) THEN
IF (rlonmax > rlonmin) THEN
@@ -217,11 +256,10 @@ PROGRAM cdfmkmask
ENDIF
IF ( lzoombat ) THEN
- rbat(:,:)= getvar(cn_fzgr, cn_hdepw, 1 ,npiglo, npjglo)
WHERE (rbat < rbatmin .OR. rbat > rbatmax) tmask = 0
ENDIF
- ierr = putvar(ncout, id_varout(1), tmask, jk ,npiglo, npjglo)
+ ierr = putvar(ncout, id_varout(1), tmask, jk ,npiglo, npjglo, ktime=jt)
! umask
zmask = 0.
DO ji=1,npiglo-1
@@ -229,7 +267,7 @@ PROGRAM cdfmkmask
zmask(ji,jj) = tmask(ji,jj)*tmask(ji+1,jj)
END DO
END DO
- ierr = putvar(ncout, id_varout(2), zmask, jk ,npiglo, npjglo)
+ ierr = putvar(ncout, id_varout(2), zmask, jk ,npiglo, npjglo, ktime=jt)
! vmask
zmask=0.
DO ji=1,npiglo
@@ -237,7 +275,7 @@ PROGRAM cdfmkmask
zmask(ji,jj) = tmask(ji,jj)*tmask(ji,jj+1)
END DO
END DO
- ierr = putvar(ncout, id_varout(3), zmask, jk, npiglo, npjglo)
+ ierr = putvar(ncout, id_varout(3), zmask, jk, npiglo, npjglo, ktime=jt)
!fmask
zmask=0.
DO ji=1,npiglo-1
@@ -245,11 +283,15 @@ PROGRAM cdfmkmask
zmask(ji,jj) = tmask(ji,jj)*tmask(ji,jj+1)*tmask(ji+1,jj)*tmask(ji+1,jj+1)
END DO
END DO
- ierr = putvar(ncout, id_varout(4), zmask, jk, npiglo, npjglo)
+ ierr = putvar(ncout, id_varout(4), zmask, jk, npiglo, npjglo, ktime=jt)
END DO ! loop to next level
+ END DO
tim(:) = 0.
- ierr = putvar1d(ncout, tim, 1,'T')
+ ierr = putvar1d(ncout, tim, nt,'T')
ierr = closeout(ncout )
+ PRINT *,''
+ PRINT *,'Mask file ',TRIM(cf_out),' has been created'
+
END PROGRAM cdfmkmask
--
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