Index: /issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp
===================================================================
--- /issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp	(revision 7657)
+++ /issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp	(revision 7658)
@@ -15,12 +15,13 @@
 				   double* lat, double* lng,
 				   int* part,
-				   double* data,
+				   double* data, int mdata, int ndata,
 				   double* cmap, int mcmap, int ncmap,
 				   FILE* fid){
 
-	int i,ipt=0;
-	int lwidth=1;
-	double popac=0.50;
-	char indent[81]="  ";
+	int     i,j,k,ipt=0,jpt=0;
+	int     lwidth=1;
+	double  popac=0.50;
+	char    indent[81]="  ";
+	double* edata=NULL;
 	KML_Document*  kdoc=NULL;
 	KML_Style*     kstyle;
@@ -88,4 +89,5 @@
 	if (cmap) {
 		_printf_(true,"Writing %d Matlab colors as KML style templates.\n",mcmap);
+		ipt=0;
 		for (i=0; i<mcmap; i++) {
 			klsty=new KML_LineStyle();
@@ -105,8 +107,33 @@
 			kstyle->poly      =kpsty;
 			(kdoc->style     )->AddObject((Object*)kstyle);
-			ipt=ipt+ncmap;
+			ipt+=ncmap;
 		}
 	}
 //	kdoc->DeepEcho();
+
+/*  average nodal data to element data, if necessary  */
+
+	if (data) {
+		if      (mdata == melem)
+			edata=data;
+		else if (mdata == mncon) {
+			_printf_(true,"Averaging nodal data to element data.\n");
+			edata=(double *) xcalloc(melem*ndata,sizeof(double));
+			ipt=0;
+			jpt=0;
+			for (i=0; i<melem; i++) {
+				for (j=0; j<nelem; j++) {
+					for (k=0; k<ndata; k++)
+						edata[ipt+k]+=data[(elem[jpt]-1)*ndata+k];
+					jpt++;
+				}
+				for (k=0; k<ndata; k++)
+					edata[ipt+k]/=(double)nelem;
+				ipt+=ndata;
+			}
+		}
+		else
+			_error_("Data has incorrect number of %d rows.\n",mdata);
+	}
 
 /*  write folder for mesh  */
@@ -115,7 +142,8 @@
 														nodecon,mncon,nncon,
 														lat,lng,
-														data,
+														edata,
 														cmap,mcmap,ncmap));
 
+	if (mdata == mncon) xfree((void**)&edata);
 	clock0a=clock();
 	time0a =time(NULL);
@@ -156,9 +184,9 @@
 						double* cmap, int mcmap, int ncmap){
 
-	int    i,j,ipt=0;
-	double alt=10000;
-	double cmin= DBL_MAX,
-		   cmax=-DBL_MAX;
-	int    imap;
+	int     i,j,ipt=0;
+	double  alt=10000;
+	double  cmin= DBL_MAX,
+		    cmax=-DBL_MAX;
+	int     imap;
 	KML_Folder*     kfold =NULL;
 	KML_Placemark*  kplace=NULL;
@@ -234,7 +262,8 @@
 		(kfold ->feature   )->AddObject((Object*)kplace);
 
-		if (!(int)fmod((double)(i+1),1000) || (i+1)==melem)
-			_printf_(true,"  %d tria elements written.\n",(i+1));
+//		if (!(int)fmod((double)(i+1),1000))
+//			_printf_(true,"  %d tria elements written.\n",(i+1));
 	}
+	_printf_(true,"  %d tria elements written.\n",melem);
 
 	return(kfold);
Index: /issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.h
===================================================================
--- /issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.h	(revision 7657)
+++ /issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.h	(revision 7658)
@@ -17,5 +17,5 @@
 				   double* lat, double* lng,
 				   int* part,
-				   double* data,
+				   double* data, int mdata, int ndata,
 				   double* cmap, int mcmap, int ncmap,
 				   FILE* fid);
