<p><b>duda</b> 2012-10-26 13:58:26 -0600 (Fri, 26 Oct 2012)</p><p>BRANCH COMMIT<br>
<br>
 - Fix bug in interpolation of static fields (greenfrac, albedo12m, soiltemp, max_snoalb) to<br>
points that lie on the dateline.<br>
<br>
 - Mirror changes to nearest_cell and nearest_edge from the trunk to allow static data<br>
processing to run in parallel for convex blocks.<br>
<br>
<br>
M    src/core_init_nhyd_atmos/mpas_init_atm_test_cases.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics/src/core_init_nhyd_atmos/mpas_init_atm_test_cases.F
===================================================================
--- branches/atmos_physics/src/core_init_nhyd_atmos/mpas_init_atm_test_cases.F        2012-10-26 17:05:47 UTC (rev 2273)
+++ branches/atmos_physics/src/core_init_nhyd_atmos/mpas_init_atm_test_cases.F        2012-10-26 19:58:26 UTC (rev 2274)
@@ -2701,7 +2701,7 @@
       wordsize = 2
       scalefactor = 0.01
       allocate(rarray(nx,ny,nzz))
-      allocate(soiltemp_1deg(360,180))
+      allocate(soiltemp_1deg(-2:363,-2:183))
       grid % soiltemp % array(:) = 0.0
 
       call map_set(PROJ_LATLON, proj, &amp;
@@ -2720,7 +2720,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      soiltemp_1deg(1:180,1:180) = rarray(4:183,4:183,1)
+      soiltemp_1deg(-2:180,-2:183) = rarray(1:183,1:186,1)
 
       write(fname,'(a,i5.5,a1,i5.5,a1,i5.5,a1,i5.5)') trim(config_geog_data_path)//'soiltemp_1deg/',181,'-',360,'.',1,'-',180
 write(0,*) trim(fname)
@@ -2730,7 +2730,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      soiltemp_1deg(181:360,1:180) = rarray(4:183,4:183,1)
+      soiltemp_1deg(181:363,-2:183) = rarray(4:186,1:186,1)
 
       interp_list(1) = FOUR_POINT
       interp_list(2) = W_AVERAGE4
@@ -2754,7 +2754,7 @@
 if (y &lt; 1.0) y = 1.0
 if (y &gt; 179.0) y = 179.0
 !            grid % soiltemp % array(iCell) = interp_sequence(x, y, 1, soiltemp_1deg, 1, 360, 1, 180, 1, 1, -1.e30_RKIND, interp_list, 1)
-            grid % soiltemp % array(iCell) = interp_sequence(x, y, 1, soiltemp_1deg, 1, 360, 1, 180, 1, 1, 0.0_RKIND, interp_list, 1)
+            grid % soiltemp % array(iCell) = interp_sequence(x, y, 1, soiltemp_1deg, -2, 363, -2, 183, 1, 1, 0.0_RKIND, interp_list, 1)
          else
             grid % soiltemp % array(iCell) = 0.0
          end if
@@ -2776,7 +2776,7 @@
       wordsize = 1
       scalefactor = 1.0
       allocate(rarray(nx,ny,nzz))
-      allocate(maxsnowalb(360,180))
+      allocate(maxsnowalb(-2:363,-2:183))
       grid % snoalb % array(:) = 0.0
 
       call map_set(PROJ_LATLON, proj, &amp;
@@ -2795,7 +2795,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      maxsnowalb(1:180,1:180) = rarray(4:183,4:183,1)
+      maxsnowalb(-2:180,-2:183) = rarray(1:183,1:186,1)
 
       write(fname,'(a,i5.5,a1,i5.5,a1,i5.5,a1,i5.5)') trim(config_geog_data_path)//'maxsnowalb/',181,'-',360,'.',1,'-',180
 write(0,*) trim(fname)
@@ -2805,7 +2805,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      maxsnowalb(181:360,1:180) = rarray(4:183,4:183,1)
+      maxsnowalb(181:363,-2:183) = rarray(4:186,1:186,1)
 
       interp_list(1) = FOUR_POINT
       interp_list(2) = W_AVERAGE4
@@ -2829,7 +2829,7 @@
 if (y &lt; 1.0) y = 1.0
 if (y &gt; 179.0) y = 179.0
 !            grid % snoalb % array(iCell) = interp_sequence(x, y, 1, maxsnowalb, 1, 360, 1, 180, 1, 1, -1.e30_RKIND, interp_list, 1)
-            grid % snoalb % array(iCell) = interp_sequence(x, y, 1, maxsnowalb, 1, 360, 1, 180, 1, 1, 0.0_RKIND, interp_list, 1)
+            grid % snoalb % array(iCell) = interp_sequence(x, y, 1, maxsnowalb, -2, 363, -2, 183, 1, 1, 0.0_RKIND, interp_list, 1)
          else
             grid % snoalb % array(iCell) = 0.0
          end if
@@ -2853,7 +2853,7 @@
       wordsize = 1
       scalefactor = 1.0
       allocate(rarray(nx,ny,nzz))
-      allocate(vegfra(2500,1250,12))
+      allocate(vegfra(-2:2503,-2:1253,12))
 !     grid % vegfra % array(:) = 0.0
       grid % greenfrac % array(:,:) = 0.0
 
@@ -2873,7 +2873,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      vegfra(1:1250,1:1250,1:12) = rarray(4:1253,4:1253,1:12)
+      vegfra(-2:1250,-2:1253,1:12) = rarray(1:1253,1:1256,1:12)
 
       write(fname,'(a,i5.5,a1,i5.5,a1,i5.5,a1,i5.5)') trim(config_geog_data_path)//'greenfrac/',1251,'-',2500,'.',1,'-',1250
 write(0,*) trim(fname)
@@ -2883,7 +2883,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      vegfra(1251:2500,1:1250,1:12) = rarray(4:1253,4:1253,1:12)
+      vegfra(1251:2503,-2:1253,1:12) = rarray(4:1256,1:1256,1:12)
 
       do iCell=1,grid%nCells
          if (grid % landmask % array(iCell) == 1) then
@@ -2900,7 +2900,7 @@
 if (y &lt; 1.0) y = 1.0
 if (y &gt; 1249.0) y = 1249.0
             do k=1,12
-               grid % greenfrac % array(k,iCell) = interp_sequence(x, y, k, vegfra, 1, 2500, 1, 1250, 1, 12, -1.e30_RKIND, interp_list, 1)
+               grid % greenfrac % array(k,iCell) = interp_sequence(x, y, k, vegfra, -2, 2503, -2, 1253, 1, 12, -1.e30_RKIND, interp_list, 1)
             end do
          else
             grid % greenfrac % array(:,iCell) = 0.0
@@ -2925,7 +2925,7 @@
       wordsize = 1
       scalefactor = 1.0
       allocate(rarray(nx,ny,nzz))
-      allocate(vegfra(2500,1250,12))
+      allocate(vegfra(-2:2503,-2:1253,12))
       grid % albedo12m % array(:,:) = 0.0
 
       call map_set(PROJ_LATLON, proj, &amp;
@@ -2944,7 +2944,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      vegfra(1:1250,1:1250,1:12) = rarray(4:1253,4:1253,1:12)
+      vegfra(-2:1250,-2:1253,1:12) = rarray(1:1253,1:1256,1:12)
 
       write(fname,'(a,i5.5,a1,i5.5,a1,i5.5,a1,i5.5)') trim(config_geog_data_path)//'albedo_ncep/',1251,'-',2500,'.',1,'-',1250
 write(0,*) trim(fname)
@@ -2954,7 +2954,7 @@
                         isigned, endian, scalefactor, wordsize, istatus)
       call init_atm_check_read_error(istatus, fname, dminfo)
 
-      vegfra(1251:2500,1:1250,1:12) = rarray(4:1253,4:1253,1:12)
+      vegfra(1251:2503,-2:1253,1:12) = rarray(4:1256,1:1256,1:12)
 
       do iCell=1,grid%nCells
          if (grid % landmask % array(iCell) == 1) then
@@ -2971,7 +2971,7 @@
 if (y &lt; 1.0) y = 1.0
 if (y &gt; 1249.0) y = 1249.0
             do k=1,12
-               grid % albedo12m % array(k,iCell) = interp_sequence(x, y, k, vegfra, 1, 2500, 1, 1250, 1, 12, 0.0_RKIND, interp_list, 1)
+               grid % albedo12m % array(k,iCell) = interp_sequence(x, y, k, vegfra, -2, 2503, -2, 1253, 1, 12, 0.0_RKIND, interp_list, 1)
             end do
          else
             grid % albedo12m % array(:,iCell) = 8.0
@@ -4373,10 +4373,12 @@
          nearest_distance = current_distance
          do i = 1, nEdgesOnCell(current_cell)
             iCell = cellsOnCell(i,current_cell)
-            d = sphere_distance(latCell(iCell), lonCell(iCell), target_lat, target_lon, 1.0_RKIND)
-            if (d &lt; nearest_distance) then
-               nearest_cell = iCell
-               nearest_distance = d
+            if (iCell &lt;= nCells) then
+               d = sphere_distance(latCell(iCell), lonCell(iCell), target_lat, target_lon, 1.0_RKIND)
+               if (d &lt; nearest_distance) then
+                  nearest_cell = iCell
+                  nearest_distance = d
+               end if
             end if
          end do
       end do
@@ -4425,10 +4427,12 @@
          end if
          do i = 1, nEdgesOnCell(iCell)
             iEdge = edgesOnCell(i,iCell)
-            d = sphere_distance(latEdge(iEdge), lonEdge(iEdge), target_lat, target_lon, 1.0_RKIND)
-            if (d &lt; nearest_distance) then
-               nearest_edge = iEdge
-               nearest_distance = d
+            if (iEdge &lt;= nEdges) then
+               d = sphere_distance(latEdge(iEdge), lonEdge(iEdge), target_lat, target_lon, 1.0_RKIND)
+               if (d &lt; nearest_distance) then
+                  nearest_edge = iEdge
+                  nearest_distance = d
+               end if
             end if
          end do
       end do

</font>
</pre>