Ricardo,
I do not see the problem right off. In this statement:
real(KIND=8) , allocatable:: data_out(:,:,:)
Try using "double precision" instead of real(KIND=8). I am not an
expert on kind parameters, but I think using a straight integer 8 is
compiler dependent and can lead to trouble.
If that doesn't work, then please show the output from "ncdump
netCDFyxz.nc" after the program halts, and we can take a closer look.
What platform and version of Netcdf are you using?
Dave Allured
CU/CIRES Climate Diagnostics Center (CDC)
http://cires.colorado.edu/science/centers/cdc/
NOAA/ESRL/PSD, Climate Analysis Branch (CAB)
http://www.esrl.noaa.gov/psd/psd1/
rtorres@xxxxxxxxx wrote:
I'm doing a program in Fortran 95 to transform simple ascii information
into the netcdf format and when i try to run my program it does an error
in the writing function (nf90_put_var) and says NetCDF: Start+count
exceeds dimension bound.
I've searched a lot, tried to change the order of writing and some other
things, really don't know what more to do.
this is the program:
Program transf_netCDF
use netcdf
Implicit None
! This is the name of the data file we will create.
Character (len = *), parameter :: FILE_NAME = "netCDFyxz.nc"
! We are writing 4D data
integer, parameter :: NDIMS = 3
! When we create netCDF files, variables and dimensions, we get back
! an ID for each one.
integer :: ncid, varid, dimids(NDIMS)
integer :: x_dimid, y_dimid, z_dimid
!Integer, parameter :: ni=3 , nj=3 , nk=3
! This is the data array we will write. It will just be filled with
! a progression of integers for this example.
real(KIND=8) , allocatable:: data_out(:,:,:)
Integer :: i ,j ,k ,a
Integer :: ni, nj, nk
Real :: v
Character :: vfile3d
integer:: error
open(50,file="vfile.p",status="old") !Aqui terá de ser alterado o nome
do ficheiro a ser lido
read(50,*) ni ,nj ,nk
ALLOCATE ( data_out(ni,nj,nk) , stat=error )
if (error /= 0) then
print*, "Nao foi possivel alocar o espaço para o array"
stop
end if
!data_out = (/ ni, nj, nk /)
!Print*, "ni,nk,nj - numero de pontos nas direcções y (S-N), x (O-E) e Z
(vertical)"
! i->y / k->x / j->z
!read(*,*) ni ,nk ,nj
do i=1, ni
do j=1, nj
do k=1, nk
read(50,*) v
data_out(i,j,k)= v
end do
end do
end do
! Create the netCDF file. The nf90_clobber parameter tells netCDF to
! overwrite this file, if it already exists.
a=1
call check( nf90_create(FILE_NAME, NF90_CLOBBER, ncid) )
! Define the dimensions. NetCDF will hand back an ID for each.
a=2
call check( nf90_def_dim(ncid, "x", nk, x_dimid) )
a=3
call check( nf90_def_dim(ncid, "y", ni, y_dimid) )
a=4
call check( nf90_def_dim(ncid, "z", nj, z_dimid) )
! The dimids array is used to pass the IDs of the dimensions of
! the variables. Note that in fortran arrays are stored in
! column-major format.
dimids = (/ x_dimid, y_dimid , z_dimid /)
! Define the variable. The type of the variable in this case is
! NF90_INT (4-byte integer).
a=5
call check( nf90_def_var(ncid, "data", NF90_double, dimids, varid) )
! End define mode. This tells netCDF we are done defining metadata.
a=6
call check( nf90_enddef(ncid) )
! Write the pretend data to the file. Although netCDF supports
! reading and writing subsets of data, in this case we write all the
! data in one operation.
a=7
call check( nf90_put_var(ncid, varid, data_out) )
! Close the file. This frees up any internal netCDF resources
! associated with the file, and flushes any buffers.
a=8
call check( nf90_close(ncid) )
print *, "*** SUCCESS writing example file netCDFyxz.nc! "
deallocate(data_out)
contains
subroutine check(status)
integer, intent ( in) :: status
if(status /= nf90_noerr) then
print*, a
print *, trim(nf90_strerror(status))
stop "Stopped"
end if
end subroutine check
end program transf_netCDF
It's based in one example from the netcdf people. The reading file as in
the first line the size of each coordinate and in the rest of the file the
velocities to be written.
Thanks in advance
Ricardo Torres
_______________________________________________
netcdfgroup mailing list
netcdfgroup@xxxxxxxxxxxxxxxx
For list information or to unsubscribe, visit: http://www.unidata.ucar.edu/mailing_lists/