parallel netcdf version info
Wei-keng Liao
wkliao at ece.northwestern.edu
Thu Dec 31 13:53:35 CST 2009
Jim,
I should probably explain how pnetcdf.F90 is produced.
This file is created at "make" time, by concatenating files
pnetcdf.inc and pnetcdf_api.interface. Then pnetcdf.F90 is
compiled to produce pnetcdf.mod. I think you have already seen
this in src/libf/Makefile.in
I don't think src/libf/mpinetcdf.f90 is used anymore. So, if
you see anything needs to change, please use pnetcdf.inc and
pnetcdf_api.interface.
You are right about the pnetcdf.inc breaking the F77 programs.
I saved the original external declaration for all APIs in file
pnetcdf_api.external. Another way solve the F77 problem is to
append that file to pnetcdf.inc after the F90 module is created.
But then, we have to keep the two files pnetcdf_api.external and
pnetcdf_api.interface consistent manually.
I am not good at Fortran, but think your approach of using
#ifndef F90_INTERFACE can be a good idea.
As for your observation on the scalar arguments, one possibility
is to use Fortran90 function/subroutine overloading. I have never
tried it before, but merely know its availability.
Wei-keng
On Dec 31, 2009, at 12:51 PM, Jim Edwards wrote:
> Hi Wei-keng,
>
> Here is a modification of the F90 interface - I think that it can
> still be improved upon but I'd like your feedback before going any
> further. There are a couple of issues that I haven't yet addressed
>
> 1. The current form of pnetcdf.inc breaks the f77 interface because
> the function declarations need to be in the include file.
> I think that in order to solve this in pnetcdf.inc we can use a
> #ifndef F90_INTERFACE around the
> f77 function declarations and define F90_INTERFACE at the top
> of pnetcdf.F90
>
> 2. The F90 compiler is okay with declarations of the form
> real :: var(*)
> it allows var to be any dimension without complaint - except
> when var is a scalar. You can overcome this on intent(in)
> variables by using (/var/) in the call, but on intent(out)
> variables it requires an extra copy.
> I would like to find a solution that would not require this
> change, it might mean adding some dummy routines to the
> pnetcdf.F90 module.
>
> - Jim
>
>
>
> On Wed, Dec 30, 2009 at 5:48 PM, Jim Edwards <edwards.jim at gmail.com>
> wrote:
> Wei-keng,
>
> I was looking at mpinetcdf.f90 - I now see that that was the wrong
> file (you should delete it from your repository). I'll have a look
> at pnetcdf.F90 next week and get back to you. But I do use
> nfmpi_get_var_all and if the interface doesn't contain it, it won't
> work for my app. I do think that I know how to add this though,
> I'll look into it and get back to you.
>
> Happy New Year,
>
> Jim
>
>
>
> On Wed, Dec 30, 2009 at 4:41 PM, Wei-keng Liao <wkliao at ece.northwestern.edu
> > wrote:
>
> In the Fortran interface I wrote, all pnetcdf APIs are indeed
> functions,
> not subroutines.
>
> Those APIs without a data type in their names are not supposed to be
> visible to users. Each pnetcdf API is designed for a specific data
> type, so it is easy to keep a file portable. I did not add
> nfmpi_get_var_all to the interface on purpose.
>
> Actually, pnetcdf does not have nfmpi_put_var_all, in which this API
> makes little sense (every process writes the entire variable).
>
>
> Wei-keng
>
>
> On Dec 30, 2009, at 4:24 PM, Jim Edwards wrote:
>
> I gave it a try to write something into configure but then realized
> that I would need to be able to link mpi in order to call the
> ncmpi_inq_libvers function which is something that you cannot do
> from configure on all platforms. I added a call in my libraries
> init function to that function so that I will get a runtime failure
> with a descent error message if the version is too old.
>
> As for the f90 interface - I'm afraid what you have there won't
> work. All of the subroutines should be functions and you are
> missing the interface I am using - the nfmpi_get_var_all and
> nfmpi_put_var_all types. I'm not sure yet but I think that I have
> something that will generate the f90 interfaces from a template file
> - let me give it a little thought, I may be able to contribute
> something here.
>
>
>
>
>
>
> On Wed, Dec 30, 2009 at 2:50 PM, Wei-keng Liao <wkliao at ece.northwestern.edu
> > wrote:
> Hi, Jim,
>
> I just uploaded a few changes to pnetcdf SVN. The most notable is the
> Fortran module that contains the declaration of all the APIs and their
> arguments. They should be able to detected most of the argument type
> mismatch.
>
> This is my first attempt and may contain hidden problems.
> Please give it a try and let me know.
>
> As for your suggestion on the library version, I think it is
> a good idea. But I am not familiar with configure utility.
> I will leave it to Rob Latham.
>
> Wei-keng
>
>
> On Dec 30, 2009, at 9:32 AM, Jim Edwards wrote:
>
> I'm working on porting pio from parallel-netcdf 1.0.2 to 1.1.0 -
> the fortran API changed a length variable from type default integer
> to type mpi_offset_kind. This caused some errors
> that were a bit difficult to track down.
>
> So now my updated PIO won't work with an earlier version of pnetcdf
> and I want to build this into
> configure.ac Does anyone on this list already have this test?
> The string provided by the pnetcdf library
> isn't very parser friendly and the string in the svn trunk version
> is the same as the 1.1.0 release...
>
> const char *
> ncmpi_inq_libvers(void) {
> return "version = 1.1.0 of 02 November 2009";
> }
>
>
> Can I request a more parser friendly function and perhaps an svn
> generated version number so that we can distinguish between the
> release version and a repository check out?
>
> Thanks,
> Jim
>
>
>
>
>
>
> <f90interface.patch>
More information about the parallel-netcdf
mailing list