[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
951017: netCDF question
- Subject: 951017: netCDF question
- Date: Wed, 18 Oct 95 10:22:37 -0600
Jim,
> Subject: netCDF question
> To: address@hidden
> From: address@hidden (Jim Hines (awdnsun) 472-6708)
> Organization: .
> Keywords: 199510171555.AA05908
In the above message you wrote:
> I just started playing with netCDF and do not understand something.
> i wrote 2 netCDF
>
> exp1
> **************************************
> netcdf 3200proto {
> dimensions:
> time = UNLIMITED ;
> variables:
> short EVAP(time) ;
> short EVAPQ(time);
> }
>
> exp2
> **************************************
> netcdf 3200proto {
> dimensions:
> time = UNLIMITED ;
> variables:
> short EVAP(time);
> }
> ***************************************
>
>
> I then used ncgen (with -b option) to build the the netCDF file
>
> the size of the netCDF file of exp1 was 120 bytes long
> the size of the netCDF file of exp2 was 80 bytes long
> everything ok
>
>
> I then wrote the following fortran program and ran it on both netCDF file
> I think it added 100 values to the netCDF file
> *************************************************************
> c
> INCLUDE 'netcdf.inc'
> integer ncid,rcode
> integer evapid
> integer*2 ival
>
> integer index(1)
>
> ncid=ncopn('coop.nc',NCWRITE,rcode)
> write(*,*)"ncid=",ncid," rcode=",rcode
>
>
> c get variable ID's
> evapid=ncvid(ncid,'EVAP',rcode)
> write(*,*)"evap id=",evapid," rcode=",rcode
>
> do 10 i=1,100
> index(1)=i
> ival=i
> call ncvpt1 (ncid,evapid,index,ival,rcode)
> 10 write(*,*)"ncvpt1 rcode=",rcode,i
>
>
> c must use ncclos or ncdump does not work properly
>
> call ncclos(ncid,rcode)
> write(*,*)"rcode close =",rcode
>
> stop
> end
> ************************************************************
> the program seamed to work but
> the size of the netCDF file in exp1 was now 920 bytes
> the size of the netCDF file in exp2 was now 282 bytes
>
> the size of the exp2 example seamed to be about right..
> the increase in space of exp1 is about double of what
> i would have expected
>
> any ideas on what i might be doing wrong
You're not doing anything wrong. The discrepancy between the actual
sizes and the "expected" ones results from using a too-simple model of
the netCDF file format. In the case with two short variables in each
record, the netCDF library actually writes two 4-byte variables per
record (the 2-byte shorts are expanded to 4-bytes by the XDR library).
Consequently, the size of the data is 2*4*100 = 800 bytes. In the
case with a single short variable in each record, the netCDF library
is clever enough to optimize the I/O and write the entire array using
2-byte variables rather than 4-byte ones. Consequently, the size of the
data is just 2*100 = 200 bytes.
--------
Steve Emmerson <address@hidden>