<p><b>duda</b> 2011-01-04 19:16:18 -0700 (Tue, 04 Jan 2011)</p><p>BRANCH COMMIT<br>
<br>
Merge changes from atmos_physics branch:<br>
<br>
1) Remove stray $(EXPAND_LEVELS) from top-level Makefile<br>
<br>
2) Add io_{in,out}put_field1dInteger_time() routines<br>
<br>
3) Remove unused definition of TEND in hyd_atmos solver<br>
<br>
4) In nhyd_atmos solver, print out min/max for each scalar, and<br>
   rename h_diabatic to rt_diabatic_tend<br>
<br>
<br>
M    src/core_hyd_atmos/module_time_integration.F<br>
M    src/registry/gen_inc.c<br>
M    src/core_nhyd_atmos/module_time_integration.F<br>
M    src/framework/module_io_input.F<br>
M    src/framework/module_io_output.F<br>
M    Makefile<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_nonhydrostatic/Makefile
===================================================================
--- branches/atmos_nonhydrostatic/Makefile        2011-01-05 01:34:05 UTC (rev 674)
+++ branches/atmos_nonhydrostatic/Makefile        2011-01-05 02:16:18 UTC (rev 675)
@@ -114,7 +114,7 @@
         &quot;CFLAGS = -O3 -m64&quot; \
         &quot;LDFLAGS = -O3 -m64&quot; \
         &quot;CORE = $(CORE)&quot; \
-        &quot;CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) $(EXPAND_LEVELS) -DUNDERSCORE -m64 $(FILE_OFFSET) $(ZOLTAN_DEFINE)&quot; )
+        &quot;CPPFLAGS = -DRKIND=8 $(MODEL_FORMULATION) -DUNDERSCORE -m64 $(FILE_OFFSET) $(ZOLTAN_DEFINE)&quot; )
 
 g95:
         ( make all \

Modified: branches/atmos_nonhydrostatic/src/core_hyd_atmos/module_time_integration.F
===================================================================
--- branches/atmos_nonhydrostatic/src/core_hyd_atmos/module_time_integration.F        2011-01-05 01:34:05 UTC (rev 674)
+++ branches/atmos_nonhydrostatic/src/core_hyd_atmos/module_time_integration.F        2011-01-05 02:16:18 UTC (rev 675)
@@ -65,7 +65,6 @@
       integer :: iCell, k
       type (block_type), pointer :: block
 
-      integer, parameter :: TEND   = 1
       integer :: rk_step, number_of_sub_steps
 
       real (kind=RKIND), dimension(3) :: rk_timestep, rk_sub_timestep

Modified: branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_time_integration.F
===================================================================
--- branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_time_integration.F        2011-01-05 01:34:05 UTC (rev 674)
+++ branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_time_integration.F        2011-01-05 02:16:18 UTC (rev 675)
@@ -66,6 +66,7 @@
       type (block_type), pointer :: block
 
       integer :: rk_step, number_of_sub_steps
+      integer :: iScalar
 
       real (kind=RKIND), dimension(3) :: rk_timestep, rk_sub_timestep
       integer, dimension(3) :: number_sub_steps
@@ -433,17 +434,17 @@
              enddo
              write(0,*) ' min, max u ',scalar_min, scalar_max
 
-             scalar_min = 0.
-             scalar_max = 0.
-             index_qc = block % state % time_levs(2) % state % index_qc
-             do iCell = 1, block % mesh % nCellsSolve
-             do k = 1, block % mesh % nVertLevels
-               scalar_min = min(scalar_min, block % state % time_levs(2) % state % scalars % array(index_qc,k,iCell))
-               scalar_max = max(scalar_max, block % state % time_levs(2) % state % scalars % array(index_qc,k,iCell))
-             enddo
-             enddo
-             write(0,*) ' min, max qc ',scalar_min, scalar_max
-
+             do iScalar = 1, block % state % time_levs(2) % state % num_scalars
+                scalar_min = 0.
+                scalar_max = 0.
+                do iCell = 1, block % mesh % nCellsSolve
+                do k = 1, block % mesh % nVertLevels
+                  scalar_min = min(scalar_min, block % state % time_levs(2) % state % scalars % array(iScalar,k,iCell))
+                  scalar_max = max(scalar_max, block % state % time_levs(2) % state % scalars % array(iScalar,k,iCell))
+                enddo
+                enddo
+                write(0,*) ' min, max scalar ',iScalar, scalar_min, scalar_max
+             end do
              block =&gt; block % next
 
           end do
@@ -1874,7 +1875,7 @@
       real (kind=RKIND), dimension(:), pointer ::  fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle
       real (kind=RKIND), dimension(:,:), pointer :: weightsOnEdge, kiteAreasOnVertex, zgrid, rho_edge, rho, ru, u, v, tend_u, &amp;
                                                     circulation, divergence, vorticity, ke, pv_edge, theta, rw, tend_rho, &amp;
-                                                    h_diabatic, tend_theta, tend_w, w, cqw, rb, rr, pp, pressure_b, zz, zx, cqu, &amp;
+                                                    rt_diabatic_tend, tend_theta, tend_w, w, cqw, rb, rr, pp, pressure_b, zz, zx, cqu, &amp; 
                                                     h_divergence, kdiff
       real (kind=RKIND), dimension(:,:,:), pointer :: deriv_two
       integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex
@@ -1963,7 +1964,7 @@
       tend_theta  =&gt; tend % theta % array
       tend_w      =&gt; tend % w % array
       tend_rho    =&gt; tend % rho % array
-      h_diabatic  =&gt; tend % rt_diabatic_tend % array
+      rt_diabatic_tend  =&gt; tend % rt_diabatic_tend % array
 
       t_init      =&gt; grid % t_init % array
       qv_init     =&gt; grid % qv_init % array
@@ -2902,7 +2903,7 @@
 
          do k=1,nVertLevels
             tend_theta(k,iCell) = tend_theta(k,iCell)/areaCell(iCell) -rdzw(k)*(wdtz(k+1)-wdtz(k))
-            tend_theta(k,iCell) = tend_theta(k,iCell) + h_diabatic(k,iCell)
+            tend_theta(k,iCell) = tend_theta(k,iCell) + rt_diabatic_tend(k,iCell)
          end do
       end do
 

Modified: branches/atmos_nonhydrostatic/src/framework/module_io_input.F
===================================================================
--- branches/atmos_nonhydrostatic/src/framework/module_io_input.F        2011-01-05 01:34:05 UTC (rev 674)
+++ branches/atmos_nonhydrostatic/src/framework/module_io_input.F        2011-01-05 02:16:18 UTC (rev 675)
@@ -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
  
 
@@ -1453,6 +1454,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 &quot;input_field1dinteger_time.inc&quot;
+
+      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_nonhydrostatic/src/framework/module_io_output.F
===================================================================
--- branches/atmos_nonhydrostatic/src/framework/module_io_output.F        2011-01-05 01:34:05 UTC (rev 674)
+++ branches/atmos_nonhydrostatic/src/framework/module_io_output.F        2011-01-05 02:16:18 UTC (rev 675)
@@ -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 &quot;output_field1dinteger_time.inc&quot;
+
+      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_nonhydrostatic/src/registry/gen_inc.c
===================================================================
--- branches/atmos_nonhydrostatic/src/registry/gen_inc.c        2011-01-05 01:34:05 UTC (rev 674)
+++ branches/atmos_nonhydrostatic/src/registry/gen_inc.c        2011-01-05 02:16:18 UTC (rev 675)
@@ -1167,29 +1167,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&lt;=3; i++) { 
-      sprintf(fname, &quot;input_field%idreal_time.inc&quot;, i);
-      fd = fopen(fname, &quot;w&quot;);
-   
-      var_ptr = vars;
-      while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-      if (var_ptr) {
-         fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         var_ptr = var_ptr-&gt;next;
-         while (var_ptr) {
-            if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-               fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-               fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+   for(j=0; j&lt;2; j++) {
+      for(i=0; i&lt;=3; i++) { 
+         if (j == 0) {
+            sprintf(fname, &quot;input_field%idinteger_time.inc&quot;, i);
+            ivtype = INTEGER;
+         }
+         else {
+            sprintf(fname, &quot;input_field%idreal_time.inc&quot;, i);
+            ivtype = REAL;
+         }
+         fd = fopen(fname, &quot;w&quot;);
+      
+         var_ptr = vars;
+         while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != ivtype || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
+         if (var_ptr) {
+            fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+            var_ptr = var_ptr-&gt;next;
+            while (var_ptr) {
+               if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == ivtype &amp;&amp; var_ptr-&gt;timedim) {
+                  fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+                  fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+               }
+               var_ptr = var_ptr-&gt;next;
             }
-            var_ptr = var_ptr-&gt;next;
+            fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
          }
-         fortprintf(fd, &quot;      end if</font>
<font color="gray">&quot;);
-      }
-   
-      fclose(fd);
+      
+         fclose(fd);
+      } 
    } 
    
 }
@@ -1614,29 +1623,38 @@
 
    
    /*
-    *  Generate code to write 0d, 1d, 2d, 3d real time-varying fields
+    *  Generate code to write 0d, 1d, 2d, 3d time-varying fields
     */
-   for(i=0; i&lt;=3; i++) {
-      sprintf(fname, &quot;output_field%idreal_time.inc&quot;, i);
-      fd = fopen(fname, &quot;w&quot;);
-
-      var_ptr = vars;
-      while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-      if (var_ptr) {
-         fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         var_ptr = var_ptr-&gt;next;
-         while (var_ptr) {
-            if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-               fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-               fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+   for(j=0; j&lt;2; j++) {
+      for(i=0; i&lt;=3; i++) {
+         if (j == 0) {
+            sprintf(fname, &quot;output_field%idinteger_time.inc&quot;, i);
+            ivtype = INTEGER;
+         }
+         else {
+            sprintf(fname, &quot;output_field%idreal_time.inc&quot;, i);
+            ivtype = REAL;
+         }
+         fd = fopen(fname, &quot;w&quot;);
+   
+         var_ptr = vars;
+         while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != ivtype || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
+         if (var_ptr) {
+            fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+            var_ptr = var_ptr-&gt;next;
+            while (var_ptr) {
+               if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == ivtype &amp;&amp; var_ptr-&gt;timedim) {
+                  fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+                  fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+               }
+               var_ptr = var_ptr-&gt;next;
             }
-            var_ptr = var_ptr-&gt;next;
+            fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
          }
-         fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
+      
+         fclose(fd);
       }
-   
-      fclose(fd);
    }
    
 }

</font>
</pre>