Due to the current gap in continued funding from the U.S. National Science Foundation (NSF), the NSF Unidata Program Center has temporarily paused most operations. See NSF Unidata Pause in Most Operations for details.
NOTE: The netcdf-hdf
mailing list is no longer active. The list archives are made available for historical reasons.
On Thu, Sep 13, 2007 at 02:05:07PM -0500, Quincey Koziol wrote: > On Sep 13, 2007, at 2:00 PM, Robert Latham wrote: > >Really? Call H5Close inside a netcdf4 code? Well, I can do that, > >sure. That seems to lack a certain symmetry, no? > > I agree with you, but I don't think there's a corresponding "shut > the netCDF-4 library down" API routine. :-) Here's a trick that we do in ROMIO: we attach an attribute to the communicator. This attribute has a hook for a function to run when it's deleted. We hook in a ROMIO cleanup routine there. Then when MPI_Finalize runs, the MPI implementation deletes attributes on all communicators before freeing them, and ROMIO's cleanup routine fires off. The code sort of looks like this: /* ADIO_Init_keyval: a global variable */ if (ADIO_Init_keyval == MPI_KEYVAL_INVALID) { MPI_Keyval_create(MPI_NULL_COPY_FN, ADIOI_End_call, &ADIO_Init_keyval, (void *)0); MPI_Attr_put(MPI_COMM_WORLD, ADIO_Initkeyval, (void *)0); ADIO_Init(&status); } ADIOI_End_call just wraps around ADIO_End, and ADIO_End deallocates memory, cleans up data structures, and shuts down any other interfaces ROMIO fired up. Note that we put the attribute on COMM_WORLD: we don't care what communicator the end-user fed ROMIO; we just want a cleanup routine to fire when MPI_Finalize is invoked. ROMIO puts this in the open and delete paths. For NetCDF, you could put this in nc_open_par and nc_create_par I don't know if this is a perfect fit for NetCDF-4, but at least it's one way to hide the H5Close call from NetCDF-4 end-users. ==rob -- Rob Latham Mathematics and Computer Science Division A215 0178 EA2D B059 8CDF Argonne National Lab, IL USA B29D F333 664A 4280 315B
netcdf-hdf
archives: