[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[netCDF #AOX-617597]: 2D character string array (Fortran 90)
- Subject: [netCDF #AOX-617597]: 2D character string array (Fortran 90)
- Date: Thu, 07 May 2009 09:18:46 -0600
Hi Ruslan,
> I've got an issue with writing (and reading) 2-dimensional character
> string arrays in Fortran 90. I found an example how to do it in
> java but it's not quite helpful because the language concept is
> different. Could you provide me with the example for Fortran 90,
> please?
Sure, it looks like our documentation is really lacking in examples of
writing character data using the f90 interface. I'll put the example
inline rather than as an attachment, so it can be found more easily by
others searching for such examples in the future.
----------------------------------
program chartst
use netcdf
integer :: ncid, var1id, var2id, dim1id, dim2id;
character (len = 1), dimension (15) :: ch = (/'a', 'b', 'c', 'd', 'e', &
'f', 'g', 'h', 'i', 'j', &
'k', 'l', 'm', 'n', 'o' /)
character (len = 15) :: ch15 = "abcdefghijklmno";
print *, 'Start: ', ch
call check(nf90_create('CharTest.nc', nf90_clobber, ncid))
call check(nf90_def_dim(ncid, 'Dim1', 5, dim1id))
call check(nf90_def_dim(ncid, 'Dim2', 3, dim2id))
call check(nf90_def_var(ncid, 'Var1', nf90_char, (/dim1id, dim2id/), var1id))
call check(nf90_def_var(ncid, 'Var2', nf90_char, (/dim2id, dim1id/), var2id))
call check(nf90_enddef(ncid))
call check(nf90_put_var(ncid, var1id, ch, start=(/ 1, 1/), count=(/ 5, 3 /)))
call check(nf90_put_var(ncid, var2id, ch15, start=(/ 1, 1/), count=(/ 3, 5 /)))
call check(nf90_close(ncid))
print *, 'End: ', dims
contains
subroutine check(status)
integer, intent ( in) :: status
if(status /= nf90_noerr) then
print *, trim(nf90_strerror(status))
stop 2
end if
end subroutine check
end program chartst
----------------------------------
When you compile and run the program above, it creates CharTest.nc.
Here's the result of running "ncdump CharTest.nc":
$ ncdump CharTest.nc
netcdf CharTest {
dimensions:
Dim1 = 5 ;
Dim2 = 3 ;
variables:
char Var1(Dim2, Dim1) ;
char Var2(Dim1, Dim2) ;
data:
Var1 =
"abcde",
"fghij",
"klmno" ;
Var2 =
"abc",
"def",
"ghi",
"jkl",
"mno" ;
}
--Russ
Russ Rew UCAR Unidata Program
address@hidden http://www.unidata.ucar.edu
Ticket Details
===================
Ticket ID: AOX-617597
Department: Support netCDF
Priority: Normal
Status: Closed