<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7652.24">
<TITLE>Parallel netcdf and multi-dimensioned fields</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P><FONT FACE="Arial">Hello,</FONT>
</P>

<P><FONT FACE="Arial">I'm experiencing some difficulty storing data in fields defined with 3 dimensions:</FONT>
</P>

<P><FONT FACE="Arial">Here is a sample of how &quot;ncdump&quot; presents the definition of the file structure in my example:</FONT>
</P>

<P><FONT FACE="Arial">netcdf gatm_y000001.g3 {</FONT>

<BR><FONT FACE="Arial">dimensions:</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time = UNLIMITED ; // (0 currently)</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char_len = 10 ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_cells = 2562 ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_size = 2562 ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_corners = 6 ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_rank = 1 ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; level = 21 ;</FONT>

<BR><FONT FACE="Arial">variables:</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double time(time) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time:quantity = &quot;time&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time:units = &quot;days since 1-1-1&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time:calendar = &quot;noleap&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char char_time(time, char_len) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char_time:format = &quot;mm/dd/yyyy&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double start_period(time) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start_period:long_name = &quot;start of averaged period&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start_period:units = &quot;days since 1-1-1&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double end_period(time) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end_period:long_name = &quot;end of averaged period&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end_period:units = &quot;days since 1-1-1&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double period_length(time) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; period_length:long_name = &quot;length of averaged period&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; period_length:units = &quot;days&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double grid_center_lat(grid_cells) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_center_lat:units = &quot;radians&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double grid_center_lon(grid_cells) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_center_lon:units = &quot;radians&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double grid_area(grid_cells) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_area:units = &quot;square radians&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int grid_dims(grid_rank) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double grid_corner_lat(grid_cells, grid_corners) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_corner_lat:units = &quot;radians&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double grid_corner_lon(grid_cells, grid_corners) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid_corner_lon:units = &quot;radians&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float level(level) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float mask(time, level, grid_cells) ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mask:long_name = &quot;fraction of time pressure surface is above earths surface&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mask:units = &quot;-&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mask:type = &quot;dyn&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mask:positions = &quot;center&quot; ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mask:missing_value = 1.e+36f ;</FONT>
</P>
<BR>

<P><FONT FACE="Arial">NOTE: I'm creating the file using Fortran 90.</FONT>
</P>

<P><FONT FACE="Arial">In plain netcdf (Fortran) code, I seem to recall that you have to specify the dimensions in reverse order. That is, when specifying the dimension order to define the 3d field, one would specify &quot;celldim, leveldim, timedim&quot;, not the expected &quot;timedim, leveldim, celldim&quot;. (This has always annoyed about the netcdf Fortran interface.)</FONT></P>

<P><FONT FACE="Arial">In a piece of test software provided with parallel netcdf, it looks like this bit of confusion has been eliminated. That is, in pnf_test.F, the logic to define the 3d field is:</FONT></P>

<P><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dim_id(1) = lon_id</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dim_id(2) = lat_id</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dim_id(3) = lev_id</FONT>
</P>

<P><FONT FACE="Arial">!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==================</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ierr = Nfmpi_Def_Var</FONT>

<BR><FONT FACE="Arial">!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==================</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp; &amp;&nbsp;&nbsp;&nbsp; (ncid, &quot;tt&quot;, NF_REAL, 3, dim_id, tt_id)</FONT>
</P>

<P><FONT FACE="Arial">This order (lon_id, lat_id, lev_id) matches the structure of the file, as shown in the ncdump output:</FONT>
</P>

<P><FONT FACE="Arial">netcdf pnf_test {</FONT>

<BR><FONT FACE="Arial">dimensions:</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; level = 256 ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; latitude = 256 ;</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; longitude = 256 ;</FONT>

<BR><FONT FACE="Arial">variables:</FONT>

<BR><FONT FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float tt(longitude, latitude, level) ;</FONT>

<BR><FONT FACE="Arial">data:</FONT>
</P>

<P><FONT FACE="Arial">I am just verifying that the fortran interface to define a multi-dimensional field in parallel netcdf uses the C order, not the Fortran order. I am having some difficulty either creating or putting data into a 3d field, and I want to make sure I understand the Fortran API.</FONT></P>
<BR>

<P><FONT FACE="Arial">Annette Koontz</FONT>

<BR><FONT FACE="Arial">PNNL</FONT>
</P>
<BR>

</BODY>
</HTML>