ncdf4a13/fortran/fort-lib.c

Go to the documentation of this file.
00001 #include <stddef.h>     /* for NULL */
00002 #include <errno.h>
00003 
00004 #include "netcdf.h"
00005 #include "ncfortran.h"
00006 #include "fort-lib.h"
00007 
00008 
00009 /*
00010  * Convert a C dimension-ID vector into a FORTRAN dimension-ID vector.
00011  */
00012 NF_INTEGER*
00013 c2f_dimids(int ncid, int varid, const int* cdimids, NF_INTEGER* fdimids)
00014 {
00015     int i;
00016     int ndims;
00017 
00018     if (nc_inq_varndims(ncid, varid, &ndims) != 0)
00019         return NULL;
00020 
00021     for (i = 0; i < ndims; ++i)
00022         fdimids[ndims - 1 - i] = cdimids[i] + 1;
00023 
00024     return fdimids;
00025 }
00026 
00027 
00028 /*
00029  * Convert a FORTRAN dimension-ID vector into a C dimension-ID vector.
00030  */
00031 int*
00032 f2c_dimids(int ndims, const NF_INTEGER* fdimids, int* cdimids)
00033 {
00034     int i;
00035 
00036     for (i = 0; i < ndims; ++i)
00037         cdimids[i] = fdimids[ndims - 1 - i] - 1;
00038 
00039     return cdimids;
00040 }
00041 
00042 
00043 /*
00044  * Convert FORTRAN co-ordinates into C co-ordinates.
00045  */
00046 size_t*
00047 f2c_coords(int ncid, int varid, const NF_INTEGER* fcoords,
00048     size_t* ccoords)
00049 {
00050     int i;
00051     int ndims;
00052 
00053     if (nc_inq_varndims(ncid, varid, &ndims) != 0)
00054         return NULL;
00055 
00056     for (i = 0; i < ndims; ++i)
00057         ccoords[i] = fcoords[ndims - 1 - i] - 1;
00058 
00059     return ccoords;
00060 }
00061 
00062 
00063 /*
00064  * Convert FORTRAN counts into C counts.
00065  */
00066 size_t*
00067 f2c_counts(int ncid, int varid, const NF_INTEGER* fcounts,
00068     size_t* ccounts)
00069 {
00070     int i;
00071     int ndims;
00072 
00073     if (nc_inq_varndims(ncid, varid, &ndims) != 0)
00074         return NULL;
00075 
00076     for (i = 0; i < ndims; ++i)
00077         ccounts[i] = fcounts[ndims - 1 - i];
00078 
00079     return ccounts;
00080 }
00081 
00082 
00083 /*
00084  * Convert FORTRAN strides into C strides.
00085  *
00086  * Helper function.
00087  */
00088 ptrdiff_t*
00089 f2c_strides(int ncid, int varid, const NF_INTEGER* fstrides,
00090     ptrdiff_t* cstrides)
00091 {
00092     int i;
00093     int ndims;
00094 
00095     if (nc_inq_varndims(ncid, varid, &ndims) != 0)
00096         return NULL;
00097 
00098     for (i = 0; i < ndims; ++i)
00099         cstrides[i] = fstrides[ndims - 1 - i];
00100 
00101     return cstrides;
00102 }
00103 
00104 
00105 /*
00106  * Convert a FORTRAN mapping vector into a C mapping vector.
00107  */
00108 ptrdiff_t*
00109 f2c_maps(int ncid, int varid, const NF_INTEGER* fmaps, ptrdiff_t* cmaps)
00110 {
00111     return f2c_strides(ncid, varid, fmaps, cmaps);
00112 }

Generated on Thu Mar 16 18:10:08 2006 for nco by  doxygen 1.4.4