<p><b>duda</b> 2010-09-13 15:48:59 -0600 (Mon, 13 Sep 2010)</p><p>BRANCH COMMIT<br>
<br>
Add I/O support for time-varying, 1d integer fields.<br>
<br>
<br>
M src/registry/gen_inc.c<br>
M src/framework/module_io_input.F<br>
M src/framework/module_io_output.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics/src/framework/module_io_input.F
===================================================================
--- branches/atmos_physics/src/framework/module_io_input.F        2010-09-13 16:05:11 UTC (rev 496)
+++ branches/atmos_physics/src/framework/module_io_input.F        2010-09-13 21:48:59 UTC (rev 497)
@@ -34,6 +34,7 @@
module procedure io_input_field1dReal_time
module procedure io_input_field2dReal_time
module procedure io_input_field3dReal_time
+ module procedure io_input_field1dInteger_time
end interface io_input_field_time
@@ -1458,6 +1459,31 @@
end subroutine io_input_field2dInteger
+ subroutine io_input_field1dInteger_time(input_obj, field)
+
+ implicit none
+
+ type (io_input_object), intent(in) :: input_obj
+ type (field1dInteger), intent(inout) :: field
+
+ include 'netcdf.inc'
+
+ integer :: nferr
+ integer :: varID
+ integer, dimension(2) :: start2, count2
+
+ start2(1) = field % ioinfo % start(1)
+ start2(2) = input_obj % time
+ count2(1) = field % ioinfo % count(1)
+ count2(2) = 1
+
+#include "input_field1dinteger_time.inc"
+
+ nferr = nf_get_vara_int(input_obj % rd_ncid, varID, start2, count2, field % array)
+
+ end subroutine io_input_field1dInteger_time
+
+
subroutine io_input_finalize(input_obj, dminfo)
implicit none
Modified: branches/atmos_physics/src/framework/module_io_output.F
===================================================================
--- branches/atmos_physics/src/framework/module_io_output.F        2010-09-13 16:05:11 UTC (rev 496)
+++ branches/atmos_physics/src/framework/module_io_output.F        2010-09-13 21:48:59 UTC (rev 497)
@@ -41,6 +41,7 @@
module procedure io_output_field1dReal_time
module procedure io_output_field2dReal_time
module procedure io_output_field3dReal_time
+ module procedure io_output_field1dInteger_time
end interface io_output_field_time
@@ -671,6 +672,33 @@
end subroutine io_output_field2dInteger
+ subroutine io_output_field1dInteger_time(output_obj, field)
+
+ implicit none
+
+ type (io_output_object), intent(in) :: output_obj
+ type (field1dInteger), intent(inout) :: field
+
+ include 'netcdf.inc'
+
+ integer :: nferr
+ integer :: varID
+ integer, dimension(2) :: start2, count2
+
+ start2(1) = field % ioinfo % start(1)
+ start2(2) = output_obj % time
+ count2(1) = field % ioinfo % count(1)
+ count2(2) = 1
+
+#include "output_field1dinteger_time.inc"
+
+ nferr = nf_put_vara_int(output_obj % wr_ncid, varID, start2, count2, field % array)
+
+ nferr = nf_sync(output_obj % wr_ncid)
+
+ end subroutine io_output_field1dInteger_time
+
+
subroutine io_output_finalize(output_obj, dminfo)
implicit none
Modified: branches/atmos_physics/src/registry/gen_inc.c
===================================================================
--- branches/atmos_physics/src/registry/gen_inc.c        2010-09-13 16:05:11 UTC (rev 496)
+++ branches/atmos_physics/src/registry/gen_inc.c        2010-09-13 21:48:59 UTC (rev 497)
@@ -1225,29 +1225,38 @@
/*
- * Generate code to read 0d, 1d, 2d, 3d time-varying real fields
+ * Generate code to read 0d, 1d, 2d, 3d time-varying fields
*/
- for(i=0; i<=3; i++) {
- sprintf(fname, "input_field%idreal_time.inc", i);
- fd = fopen(fname, "w");
-
- var_ptr = vars;
- while (var_ptr && (var_ptr->ndims != i || var_ptr->vtype != REAL || !var_ptr->timedim)) var_ptr = var_ptr->next;
- if (var_ptr) {
- fortprintf(fd, " if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">", var_ptr->name_in_file);
- fortprintf(fd, " varID = input_obj %% rdVarID%s</font>
<font color="red">", var_ptr->name_in_file);
- var_ptr = var_ptr->next;
- while (var_ptr) {
- if (var_ptr->ndims == i && var_ptr->vtype == REAL && var_ptr->timedim) {
- fortprintf(fd, " else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">", var_ptr->name_in_file);
- fortprintf(fd, " varID = input_obj %% rdVarID%s</font>
<font color="blue">", var_ptr->name_in_file);
+ for(j=0; j<2; j++) {
+ for(i=0; i<=3; i++) {
+ if (j == 0) {
+ sprintf(fname, "input_field%idinteger_time.inc", i);
+ ivtype = INTEGER;
+ }
+ else {
+ sprintf(fname, "input_field%idreal_time.inc", i);
+ ivtype = REAL;
+ }
+ fd = fopen(fname, "w");
+
+ var_ptr = vars;
+ while (var_ptr && (var_ptr->ndims != i || var_ptr->vtype != ivtype || !var_ptr->timedim)) var_ptr = var_ptr->next;
+ if (var_ptr) {
+ fortprintf(fd, " if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">", var_ptr->name_in_file);
+ fortprintf(fd, " varID = input_obj %% rdVarID%s</font>
<font color="blue">", var_ptr->name_in_file);
+ var_ptr = var_ptr->next;
+ while (var_ptr) {
+ if (var_ptr->ndims == i && var_ptr->vtype == ivtype && var_ptr->timedim) {
+ fortprintf(fd, " else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">", var_ptr->name_in_file);
+ fortprintf(fd, " varID = input_obj %% rdVarID%s</font>
<font color="red">", var_ptr->name_in_file);
+ }
+ var_ptr = var_ptr->next;
}
- var_ptr = var_ptr->next;
+ fortprintf(fd, " end if</font>
<font color="red">");
}
- fortprintf(fd, " end if</font>
<font color="gray">");
- }
-
- fclose(fd);
+
+ fclose(fd);
+ }
}
}
@@ -1673,27 +1682,36 @@
/*
* Generate code to write 0d, 1d, 2d, 3d real time-varying fields
*/
- for(i=0; i<=3; i++) {
- sprintf(fname, "output_field%idreal_time.inc", i);
- fd = fopen(fname, "w");
-
- var_ptr = vars;
- while (var_ptr && (var_ptr->ndims != i || var_ptr->vtype != REAL || !var_ptr->timedim)) var_ptr = var_ptr->next;
- if (var_ptr) {
- fortprintf(fd, " if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">", var_ptr->name_in_file);
- fortprintf(fd, " varID = output_obj %% wrVarID%s</font>
<font color="red">", var_ptr->name_in_file);
- var_ptr = var_ptr->next;
- while (var_ptr) {
- if (var_ptr->ndims == i && var_ptr->vtype == REAL && var_ptr->timedim) {
- fortprintf(fd, " else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">", var_ptr->name_in_file);
- fortprintf(fd, " varID = output_obj %% wrVarID%s</font>
<font color="blue">", var_ptr->name_in_file);
+ for(j=0; j<2; j++) {
+ for(i=0; i<=3; i++) {
+ if (j == 0) {
+ sprintf(fname, "output_field%idinteger_time.inc", i);
+ ivtype = INTEGER;
+ }
+ else {
+ sprintf(fname, "output_field%idreal_time.inc", i);
+ ivtype = REAL;
+ }
+ fd = fopen(fname, "w");
+
+ var_ptr = vars;
+ while (var_ptr && (var_ptr->ndims != i || var_ptr->vtype != ivtype || !var_ptr->timedim)) var_ptr = var_ptr->next;
+ if (var_ptr) {
+ fortprintf(fd, " if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">", var_ptr->name_in_file);
+ fortprintf(fd, " varID = output_obj %% wrVarID%s</font>
<font color="blue">", var_ptr->name_in_file);
+ var_ptr = var_ptr->next;
+ while (var_ptr) {
+ if (var_ptr->ndims == i && var_ptr->vtype == ivtype && var_ptr->timedim) {
+ fortprintf(fd, " else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">", var_ptr->name_in_file);
+ fortprintf(fd, " varID = output_obj %% wrVarID%s</font>
<font color="red">", var_ptr->name_in_file);
+ }
+ var_ptr = var_ptr->next;
}
- var_ptr = var_ptr->next;
+ fortprintf(fd, " end if</font>
<font color="red">");
}
- fortprintf(fd, " end if</font>
<font color="red">");
+
+ fclose(fd);
}
-
- fclose(fd);
}
}
</font>
</pre>