Index: /issm/trunk/src/m/kml/kml_part_edges.m
===================================================================
--- /issm/trunk/src/m/kml/kml_part_edges.m	(revision 6465)
+++ /issm/trunk/src/m/kml/kml_part_edges.m	(revision 6466)
@@ -108,7 +108,7 @@
     kfold.descript  =sprintf('Partitions=%d, Nodes=%d',...
         md.npart,md.numberofgrids);
-    kfold.feature   ={repmat(kml_placemark(),0,0)};
-
-%  write each partition loop as a linestring placemark
+    kfold.feature   ={repmat(kml_placemark(),1,md.npart)};
+
+%  write each partition as a linestring multigeometry placemark
 
     disp(['Writing ' num2str(md.npart) ' partitions as KML linestrings.']);
@@ -152,28 +152,33 @@
         end
         
+%  set up the placemark with multigeometry
+
+        kplace=kml_placemark();
+        if (length(iloop)-1 > 1)
+            kplace.name      =sprintf('Partition %d (%d loops)',k,length(iloop)-1);
+        else
+            kplace.name      =sprintf('Partition %d',k);
+        end
+        kplace.visibility=1;
+        if exist('pdata','var')
+            kplace.descript  =sprintf('Partition data: %g',pdata(k));
+            imap = fix((pdata(k)-cmin)/(cmax-cmin)*size(cmap,1))+1;
+            if     (imap >= 1) && (imap <= size(cmap,1))
+                kplace.styleurl  =sprintf('#MatlabColor%d',imap);
+            elseif (pdata(k) == cmax)
+                kplace.styleurl  =sprintf('#MatlabColor%d',size(cmap,1));
+            else
+                kplace.styleurl  =sprintf('#BlackLineEmptyPoly');
+            end
+        else
+            kplace.styleurl  =sprintf('#BlackLineRandomPoly');
+        end
+
+        kmgeom=kml_multigeometry();
+        kmgeom.geometry  ={repmat(kml_linestring(),1,length(iloop)-1)};
+
 %  loop over each loop of the perimeter for the given partition
 
         for i=1:length(iloop)-1
-            kplace=kml_placemark();
-            if (length(iloop)-1 > 1)
-                kplace.name      =sprintf('Partition %d, Loop %d',k,i);
-            else
-                kplace.name      =sprintf('Partition %d',k);
-            end
-            kplace.visibility=1;
-            if exist('pdata','var')
-                kplace.descript  =sprintf('Partition data: %g',pdata(k));
-                imap = fix((pdata(k)-cmin)/(cmax-cmin)*size(cmap,1))+1;
-                if     (imap >= 1) && (imap <= size(cmap,1))
-                    kplace.styleurl  =sprintf('#MatlabColor%d',imap);
-                elseif (pdata(k) == cmax)
-                    kplace.styleurl  =sprintf('#MatlabColor%d',size(cmap,1));
-                else
-                    kplace.styleurl  =sprintf('#BlackLineEmptyPoly');
-                end
-            else
-                kplace.styleurl  =sprintf('#BlackLineRandomPoly');
-            end
-
             kline=kml_linestring();
             kline.extrude   =1;
@@ -454,11 +459,14 @@
             end
 
-            kplace.geometry=kline;
-            kfold.feature{1}(end+1)=kplace;
-            clear kline kplace
-        end
-    end
-end
-
-end
-
+            kmgeom.geometry{1}(i)=kline;
+            clear kline
+        end
+
+        kplace.geometry=kmgeom;
+        kfold.feature{1}(k)=kplace;
+        clear kmgeom kplace
+    end
+end
+
+end
+
Index: /issm/trunk/src/m/kml/kml_part_elems.m
===================================================================
--- /issm/trunk/src/m/kml/kml_part_elems.m	(revision 6465)
+++ /issm/trunk/src/m/kml/kml_part_elems.m	(revision 6466)
@@ -108,7 +108,7 @@
     kfold.descript  =sprintf('Partitions=%d, Nodes=%d\n',...
         md.npart,md.numberofgrids);
-    kfold.feature   ={repmat(kml_placemark(),0,0)};
-
-%  write each partition loop as a polygon placemark
+    kfold.feature   ={repmat(kml_placemark(),1,md.npart)};
+
+%  write each partition loop as a polygon multigeometry placemark
 
     disp(['Writing ' num2str(md.npart) ' partitions as KML polygons.']);
@@ -118,5 +118,12 @@
         pdata(:)=NaN;
     end
+
+%  loop over each partition
+
     for k=1:md.npart
+
+%  for each partition, find all the included elements and determine the
+%  perimeter (including those shared by another partition)
+
         [icol,irow]=find(epart'==k);
         irow=unique(irow);
@@ -125,4 +132,7 @@
         [edgeper,elemper,iloop]=edgeperimeter(elem,nodecon);
         iloop(end+1)=size(edgeper,1)+1;
+
+%  determine the data to be used for the colors (if any)
+
         if exist('ndata','var')
             pdata(k)=ndata(find(md.part+1==k,1));
@@ -138,26 +148,34 @@
             end
         end
+
+%  set up the placemark with multigeometry
+
+        kplace=kml_placemark();
+        if (length(iloop)-1 > 1)
+            kplace.name      =sprintf('Partition %d (%d loops)',k,length(iloop)-1);
+        else
+            kplace.name      =sprintf('Partition %d',k);
+        end
+        kplace.visibility=1;
+        if exist('pdata','var')
+            kplace.descript  =sprintf('Partition data: %g',pdata(k));
+            imap = fix((pdata(k)-cmin)/(cmax-cmin)*size(cmap,1))+1;
+            if     (imap >= 1) && (imap <= size(cmap,1))
+                kplace.styleurl  =sprintf('#MatlabColor%d',imap);
+            elseif (pdata(k) == cmax)
+                kplace.styleurl  =sprintf('#MatlabColor%d',size(cmap,1));
+            else
+                kplace.styleurl  =sprintf('#BlackLineEmptyPoly');
+            end
+        else
+            kplace.styleurl  =sprintf('#BlackLineRandomPoly');
+        end
+
+        kmgeom=kml_multigeometry();
+        kmgeom.geometry  ={repmat(kml_polygon(),1,length(iloop)-1)};
+
+%  loop over each loop of the perimeter for the given partition
+
         for i=1:length(iloop)-1
-            kplace=kml_placemark();
-            if (length(iloop)-1 > 1)
-                kplace.name      =sprintf('Partition %d, Loop %d',k,i);
-            else
-                kplace.name      =sprintf('Partition %d',k);
-            end
-            kplace.visibility=1;
-            if exist('pdata','var')
-                kplace.descript  =sprintf('Partition data: %g',pdata(k));
-                imap = fix((pdata(k)-cmin)/(cmax-cmin)*size(cmap,1))+1;
-                if     (imap >= 1) && (imap <= size(cmap,1))
-                    kplace.styleurl  =sprintf('#MatlabColor%d',imap);
-                elseif (pdata(k) == cmax)
-                    kplace.styleurl  =sprintf('#MatlabColor%d',size(cmap,1));
-                else
-                    kplace.styleurl  =sprintf('#BlackLineEmptyPoly');
-                end
-            else
-                kplace.styleurl  =sprintf('#BlackLineRandomPoly');
-            end
-
             kpoly=kml_polygon();
             kpoly.extrude   =1;
@@ -167,4 +185,6 @@
             kring.coords    =zeros(iloop(i+1)-iloop(i)+1,3);
 
+%  loop over the element edges on the loop of the partition
+
             for j=iloop(i):iloop(i+1)-1
                 [lat,long]=mapxy(md.x(edgeper(j,1)),md.y(edgeper(j,1)),'s');
@@ -174,11 +194,14 @@
 
             kpoly.outer=kring;
-            kplace.geometry=kpoly;
-            kfold.feature{1}(end+1)=kplace;
-            clear kring kpoly kplace
-        end
-    end
-end
-
-end
-
+            kmgeom.geometry{1}(i)=kpoly;
+            clear kring kpoly
+        end
+
+        kplace.geometry=kmgeom;
+        kfold.feature{1}(k)=kplace;
+        clear kmgeom kplace
+    end
+end
+
+end
+
Index: /issm/trunk/src/m/kml/kml_partitions.m
===================================================================
--- /issm/trunk/src/m/kml/kml_partitions.m	(revision 6465)
+++ /issm/trunk/src/m/kml/kml_partitions.m	(revision 6466)
@@ -109,7 +109,7 @@
     kfold.descript  =sprintf('Partitions=%d, Nodes=%d',...
         md.npart,md.numberofgrids);
-    kfold.feature   ={repmat(kml_placemark(),0,0)};
-
-%  write each partition loop as polygon placemark
+    kfold.feature   ={repmat(kml_placemark(),1,md.npart)};
+
+%  write each partition as a polygon multigeometry placemark
 
     disp(['Writing ' num2str(md.npart) ' partitions as KML polygons.']);
@@ -136,5 +136,5 @@
         [edgeper,elemper,iloop]=edgeperimeter(elemp,nodeconp,edgeadjp);
         iloop(end+1)=size(edgeper,1)+1;
-        
+
 %  determine the data to be used for the colors (if any)
 
@@ -153,28 +153,33 @@
         end
         
+%  set up the placemark with multigeometry
+
+        kplace=kml_placemark();
+        if (length(iloop)-1 > 1)
+            kplace.name      =sprintf('Partition %d (%d loops)',k,length(iloop)-1);
+        else
+            kplace.name      =sprintf('Partition %d',k);
+        end
+        kplace.visibility=1;
+        if exist('pdata','var')
+            kplace.descript  =sprintf('Partition data: %g',pdata(k));
+            imap = fix((pdata(k)-cmin)/(cmax-cmin)*size(cmap,1))+1;
+            if     (imap >= 1) && (imap <= size(cmap,1))
+                kplace.styleurl  =sprintf('#MatlabColor%d',imap);
+            elseif (pdata(k) == cmax)
+                kplace.styleurl  =sprintf('#MatlabColor%d',size(cmap,1));
+            else
+                kplace.styleurl  =sprintf('#BlackLineEmptyPoly');
+            end
+        else
+            kplace.styleurl  =sprintf('#BlackLineRandomPoly');
+        end
+
+        kmgeom=kml_multigeometry();
+        kmgeom.geometry  ={repmat(kml_polygon(),1,length(iloop)-1)};
+        
 %  loop over each loop of the perimeter for the given partition
 
         for i=1:length(iloop)-1
-            kplace=kml_placemark();
-            if (length(iloop)-1 > 1)
-                kplace.name      =sprintf('Partition %d, Loop %d',k,i);
-            else
-                kplace.name      =sprintf('Partition %d',k);
-            end
-            kplace.visibility=1;
-            if exist('pdata','var')
-                kplace.descript  =sprintf('Partition data: %g',pdata(k));
-                imap = fix((pdata(k)-cmin)/(cmax-cmin)*size(cmap,1))+1;
-                if     (imap >= 1) && (imap <= size(cmap,1))
-                    kplace.styleurl  =sprintf('#MatlabColor%d',imap);
-                elseif (pdata(k) == cmax)
-                    kplace.styleurl  =sprintf('#MatlabColor%d',size(cmap,1));
-                else
-                    kplace.styleurl  =sprintf('#BlackLineEmptyPoly');
-                end
-            else
-                kplace.styleurl  =sprintf('#BlackLineRandomPoly');
-            end
-
             kpoly=kml_polygon();
             kpoly.extrude   =1;
@@ -457,11 +462,14 @@
 
             kpoly.outer=kring;
-            kplace.geometry=kpoly;
-            kfold.feature{1}(end+1)=kplace;
-            clear kring kpoly kplace
-        end
-    end
-end
-
-end
-
+            kmgeom.geometry{1}(i)=kpoly;
+            clear kring kpoly
+        end
+
+        kplace.geometry=kmgeom;
+        kfold.feature{1}(k)=kplace;
+        clear kmgeom kplace
+    end
+end
+
+end
+
