<p><b>duda</b> 2011-11-28 14:46:55 -0700 (Mon, 28 Nov 2011)</p><p>BRANCH COMMIT<br>
<br>
Generate calls to PIO_initdecomp only for those combinations of dimensions and type<br>
that will actually be written; this can lead to significant time savings.<br>
<br>
Add debugging print statements as fields are being written.<br>
<br>
<br>
M src/registry/gen_inc.c<br>
</p><hr noshade><pre><font color="gray">Modified: branches/pio/src/registry/gen_inc.c
===================================================================
--- branches/pio/src/registry/gen_inc.c        2011-11-28 16:43:40 UTC (rev 1215)
+++ branches/pio/src/registry/gen_inc.c        2011-11-28 21:46:55 UTC (rev 1216)
@@ -2217,12 +2217,18 @@
sprintf(temp, "%s_%s", temp, dimlist_ptr->dim->name_in_file);
dimlist_ptr = dimlist_ptr->next;
}
+
+ /* Add type information into symbol name */
+ if (var_ptr->vtype == INTEGER)
+ sprintf(temp, "%s_int", temp);
+ else if (var_ptr->vtype == REAL)
+ sprintf(temp, "%s_dbl", temp);
+ else
+ sprintf(temp, "%s_Unsupported", temp);
+
if (!dict_search(dictionary, temp)) {
-/* MGD NEED TO ADD IODESC TYPES FOR EACH FIELD TYPE */
- fortprintf(fd, " type (io_desc_t) :: iodesc%s_Dbl</font>
<font color="red">", temp);
- fortprintf(fd, " type (io_desc_t) :: iodesc%s_Int</font>
<font color="red">", temp);
- fortprintf(fd2, " call PIO_freedecomp(output_obj %% pio_iosystem, output_obj %% iodesc%s_Dbl)</font>
<font color="red">", temp);
- fortprintf(fd2, " call PIO_freedecomp(output_obj %% pio_iosystem, output_obj %% iodesc%s_Int)</font>
<font color="blue">", temp);
+ fortprintf(fd, " type (io_desc_t) :: iodesc%s</font>
<font color="blue">", temp);
+ fortprintf(fd2, " call PIO_freedecomp(output_obj %% pio_iosystem, output_obj %% iodesc%s)</font>
<font color="gray">", temp);
dict_insert(dictionary, temp);
}
}
@@ -2315,6 +2321,7 @@
else if (var_ptr->vtype == REAL) sprintf(vtype, "real");
else if (var_ptr->vtype == CHARACTER) sprintf(vtype, "char");
+
if (strncmp(var_ptr->super_array, "-", 1024) != 0) {
if (var_ptr->ndims > 0) {
fortprintf(fd, " allocate(super_%s%id(", vtype, var_ptr->ndims);
@@ -2378,14 +2385,19 @@
dimlist_ptr = dimlist_ptr->next;
}
}
+if (var_ptr->vtype == REAL)
+ fortprintf(fd, "write(0,*) \'PIO_write_darray for %s using %s_dbl\'</font>
<font color="blue">", var_ptr->name_in_file, temp);
+else
+ fortprintf(fd, "write(0,*) \'PIO_write_darray for %s using %s_int\'</font>
<font color="blue">", var_ptr->name_in_file, temp);
+
if (var_ptr->timedim) fortprintf(fd, " call PIO_setframe(output_obj %% pioVarID%s, pio_time)</font>
<font color="gray">", var_ptr->name_in_file);
fortprintf(fd, " call PIO_write_darray(output_obj %% pio_file, output_obj %% pioVarID%s, ", var_ptr->name_in_file);
if (var_ptr->ndims != 0) {
/* MGD NEED TO USE CORRECT IODESC FOR THE TYPE OF THIS VARIABLE */
if (var_ptr->vtype == REAL)
- fortprintf(fd, "output_obj %% iodesc%s_Dbl, ", temp);
+ fortprintf(fd, "output_obj %% iodesc%s_dbl, ", temp);
else
- fortprintf(fd, "output_obj %% iodesc%s_Int, ", temp);
+ fortprintf(fd, "output_obj %% iodesc%s_int, ", temp);
if (strncmp(var_ptr->super_array, "-", 1024) != 0)
fortprintf(fd, "super_%s%id(", vtype, var_ptr->ndims);
@@ -2471,6 +2483,16 @@
i++;
dimlist_ptr = dimlist_ptr->next;
}
+
+ /* Add type information into symbol name */
+ if (var_ptr->vtype == INTEGER)
+ sprintf(temp, "%s_int", temp);
+ else if (var_ptr->vtype == REAL)
+ sprintf(temp, "%s_dbl", temp);
+ else
+ sprintf(temp, "%s_Unsupported", temp);
+
+
if (!dict_search(dictionary, temp)) {
fortprintf(fd, "!!!!! %s</font>
<font color="gray">", temp);
dimlist_ptr = var_ptr->dimlist;
@@ -2551,11 +2573,13 @@
dimlist_ptr = dimlist_ptr->next;
}
-/* MGD NEED TO ADD MORE CODE HERE TO CREATE DECOMPS FOR EACH TYPE */
- fortprintf(fd, " write(0,*) \'Calling PIO_initdecomp for %s_Dbl\'</font>
<font color="red">", temp);
- fortprintf(fd, " call PIO_initdecomp(output_obj %% pio_iosystem, PIO_DOUBLE, dimids(1:%i), compdof, output_obj %% iodesc%s_Dbl)</font>
<font color="red">", var_ptr->ndims, temp);
- fortprintf(fd, " write(0,*) \'Calling PIO_initdecomp for %s_Int\'</font>
<font color="red">", temp);
- fortprintf(fd, " call PIO_initdecomp(output_obj %% pio_iosystem, PIO_INT, dimids(1:%i), compdof, output_obj %% iodesc%s_Int)</font>
<font color="blue">", var_ptr->ndims, temp);
+ fortprintf(fd, " write(0,*) \'Calling PIO_initdecomp for %s\'</font>
<font color="blue">", temp);
+ if (var_ptr->vtype == INTEGER)
+ fortprintf(fd, " call PIO_initdecomp(output_obj %% pio_iosystem, PIO_INT, dimids(1:%i), compdof, output_obj %% iodesc%s)</font>
<font color="blue">", var_ptr->ndims, temp);
+ else if (var_ptr->vtype == REAL)
+ fortprintf(fd, " call PIO_initdecomp(output_obj %% pio_iosystem, PIO_DOUBLE, dimids(1:%i), compdof, output_obj %% iodesc%s)</font>
<font color="blue">", var_ptr->ndims, temp);
+ else
+ fortprintf(fd, " call PIO_initdecomp(output_obj %% pio_iosystem, PIO_INT, dimids(1:%i), compdof, output_obj %% iodesc%s)</font>
<font color="black">", var_ptr->ndims, temp);
fortprintf(fd, " deallocate(compdof)</font>
<font color="black">");
fortprintf(fd, "</font>
<font color="black">");
</font>
</pre>