[Thread Prev][Thread Next][Index]

Re: Quicker loading into fortran?



To all Ferret users who like to 'filddle' with their data in Fortran.

You should consider using Ferret's external functions capability:

http://ferret.wrc.noaa.gov/Ferret/External_Functions/ferret_EF.html

This will allow you to write your own Fortran functions that act just as
Ferret's built in functions.  Once you've got your function working it's
trivial to make some changes and recompile it or create another function with
a different name.  This eliminates any writing-reading-writing-reading between
Ferret and your funciton.

-- Jonathan Callahan



Michel Beland wrote:

> Hello Richard,
>
> > I'm currently loading data into Fortran to do some fiddly analysis and
> > then dumping out again. Currently I'm saving to Fortran using:
> >
> > The data I have is on a grid with i=1:41, j=1:19, k=1:1 and l=1:7200
> >
> > After plenty of looking through the archive to find a way to load in
> > and out of fortran, my method is to:
> >
> > 1) Dump into fortran format using:
> >
> > list/file=jet.dat/format=unformatted/order=z mag[i=1:41,j=1:19,l=1:7200]
> >
> > 2) Read into fortran using:
> >
> >       parameter(ix=41,iy=19,it=7200)
> >       dimension u(ix,iy,it)
> >       open(11,file="c:jet.dat",form="unformatted",access="direct")
> >       do l=1,it
> >       do j=1,iy
> >       do i=1,ix
> >       read(11) u(i,j,l)
> >       end do
> >       end do
> >       end do
> >
> > However - the reading in of the data seems to take quite a while. Does
> > anybody know of a quicker method for reading ferret data into fortran?
>
> There are several things wrong with your Fortran code.  First, you
> should declare the record length with RECL= when you open a file with
> ACCESS='DIRECT'.  Second, you should specify the record being read in
> the read statement, with REC=, when the file is open with
> ACCESS='DIRECT'.  Third, maybe you should open the file with sequential
> access anyway.  It depends how Ferret's list command writes to the file.
> Fourth, it would be much faster to read the file in one READ statement
> instead of 5608800 READ statements, getting rid of the DO loops:
>
>        parameter(ix=41,iy=19,it=7200)
>        dimension u(ix,iy,it)
>        open(11,file='c:jet.dat',form='unformatted')
>        READ(11) u
>
> (provided that sequential access is correct and provided that you can
> write the file with list to have only one record).
>
> --
> Michel Béland (beland@CERCA.UMontreal.CA)  téléphone   : (514) 369-5223
> analyste en calcul scientifique            télécopieur : (514) 369-3880
> RQCHP (Réseau québécois de calcul de haute performance)  www.rqchp.qc.ca
> CERCA (Centre de recherche en calcul appliqué)    www.cerca.umontreal.ca
> 5160, boul. Décarie, bureau 400(423), Montréal (Québec), Canada, H3X 2H9



[Thread Prev][Thread Next][Index]

Dept of Commerce / NOAA / OAR / PMEL / TMAP

Contact Us | Privacy Policy | Disclaimer | Accessibility Statement