Changeset 7658


Ignore:
Timestamp:
03/18/11 14:21:54 (14 years ago)
Author:
jschierm
Message:

KML: added averaging of nodal data to element data for KMLMeshWritex.

Location:
issm/trunk/src/c/modules/KMLMeshWritex
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp

    r7654 r7658  
    1515                                   double* lat, double* lng,
    1616                                   int* part,
    17                                    double* data,
     17                                   double* data, int mdata, int ndata,
    1818                                   double* cmap, int mcmap, int ncmap,
    1919                                   FILE* fid){
    2020
    21         int i,ipt=0;
    22         int lwidth=1;
    23         double popac=0.50;
    24         char indent[81]="  ";
     21        int     i,j,k,ipt=0,jpt=0;
     22        int     lwidth=1;
     23        double  popac=0.50;
     24        char    indent[81]="  ";
     25        double* edata=NULL;
    2526        KML_Document*  kdoc=NULL;
    2627        KML_Style*     kstyle;
     
    8889        if (cmap) {
    8990                _printf_(true,"Writing %d Matlab colors as KML style templates.\n",mcmap);
     91                ipt=0;
    9092                for (i=0; i<mcmap; i++) {
    9193                        klsty=new KML_LineStyle();
     
    105107                        kstyle->poly      =kpsty;
    106108                        (kdoc->style     )->AddObject((Object*)kstyle);
    107                         ipt=ipt+ncmap;
     109                        ipt+=ncmap;
    108110                }
    109111        }
    110112//      kdoc->DeepEcho();
     113
     114/*  average nodal data to element data, if necessary  */
     115
     116        if (data) {
     117                if      (mdata == melem)
     118                        edata=data;
     119                else if (mdata == mncon) {
     120                        _printf_(true,"Averaging nodal data to element data.\n");
     121                        edata=(double *) xcalloc(melem*ndata,sizeof(double));
     122                        ipt=0;
     123                        jpt=0;
     124                        for (i=0; i<melem; i++) {
     125                                for (j=0; j<nelem; j++) {
     126                                        for (k=0; k<ndata; k++)
     127                                                edata[ipt+k]+=data[(elem[jpt]-1)*ndata+k];
     128                                        jpt++;
     129                                }
     130                                for (k=0; k<ndata; k++)
     131                                        edata[ipt+k]/=(double)nelem;
     132                                ipt+=ndata;
     133                        }
     134                }
     135                else
     136                        _error_("Data has incorrect number of %d rows.\n",mdata);
     137        }
    111138
    112139/*  write folder for mesh  */
     
    115142                                                                                                                nodecon,mncon,nncon,
    116143                                                                                                                lat,lng,
    117                                                                                                                 data,
     144                                                                                                                edata,
    118145                                                                                                                cmap,mcmap,ncmap));
    119146
     147        if (mdata == mncon) xfree((void**)&edata);
    120148        clock0a=clock();
    121149        time0a =time(NULL);
     
    156184                                                double* cmap, int mcmap, int ncmap){
    157185
    158         int    i,j,ipt=0;
    159         double alt=10000;
    160         double cmin= DBL_MAX,
    161                    cmax=-DBL_MAX;
    162         int    imap;
     186        int     i,j,ipt=0;
     187        double  alt=10000;
     188        double  cmin= DBL_MAX,
     189                    cmax=-DBL_MAX;
     190        int     imap;
    163191        KML_Folder*     kfold =NULL;
    164192        KML_Placemark*  kplace=NULL;
     
    234262                (kfold ->feature   )->AddObject((Object*)kplace);
    235263
    236                 if (!(int)fmod((double)(i+1),1000) || (i+1)==melem)
    237                         _printf_(true,"  %d tria elements written.\n",(i+1));
     264//              if (!(int)fmod((double)(i+1),1000))
     265//                      _printf_(true,"  %d tria elements written.\n",(i+1));
    238266        }
     267        _printf_(true,"  %d tria elements written.\n",melem);
    239268
    240269        return(kfold);
  • issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.h

    r7654 r7658  
    1717                                   double* lat, double* lng,
    1818                                   int* part,
    19                                    double* data,
     19                                   double* data, int mdata, int ndata,
    2020                                   double* cmap, int mcmap, int ncmap,
    2121                                   FILE* fid);
Note: See TracChangeset for help on using the changeset viewer.