Changeset 7660
- Timestamp:
- 03/18/11 15:54:45 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp
r7658 r7660 19 19 FILE* fid){ 20 20 21 int i,j,k,ipt=0,jpt=0; 21 int i,j,k,ipt=0,jpt=0,nnodes; 22 int mxepg=25; 22 23 int lwidth=1; 23 24 double popac=0.50; 24 25 char indent[81]=" "; 25 26 double* edata=NULL; 27 bool ncfree=false, 28 edfree=false; 26 29 KML_Document* kdoc=NULL; 27 30 KML_Style* kstyle; … … 112 115 // kdoc->DeepEcho(); 113 116 114 /* average nodal data to element data, if necessary */ 117 /* create the node connectivity table, if necessary 118 (noting that rows do not need to be sorted, since the elements 119 are consecutively numbered) */ 120 121 if (!nodecon) { 122 _printf_(true,"Creating the node connectivity table.\n"); 123 nncon=mxepg+1; 124 nodecon=(int *) xcalloc(mncon*nncon,sizeof(int)); 125 ncfree=true; 126 127 jpt=0; 128 for (i=0; i<melem; i++) { 129 for (j=0; j<nelem; j++) { 130 if (elem[jpt]) { 131 ipt=(elem[jpt]-1)*nncon; 132 if (nodecon[ipt+(nncon-1)] < mxepg) { 133 nodecon[ipt+nodecon[ipt+(nncon-1)]]=i+1; 134 nodecon[ipt+(nncon-1)]++; 135 } 136 else 137 _error_("Nodal connectivity table needs more than specified %d columns.\n",mxepg); 138 } 139 jpt++; 140 } 141 } 142 } 143 144 /* average nodal data to element data, if necessary 145 (noting that multiple columns of data are handled here, but not 146 yet below) */ 115 147 116 148 if (data) { 117 149 if (mdata == melem) 118 150 edata=data; 151 119 152 else if (mdata == mncon) { 120 153 _printf_(true,"Averaging nodal data to element data.\n"); 121 154 edata=(double *) xcalloc(melem*ndata,sizeof(double)); 155 edfree=true; 156 122 157 ipt=0; 123 158 jpt=0; 124 159 for (i=0; i<melem; i++) { 160 nnodes=0; 125 161 for (j=0; j<nelem; j++) { 126 for (k=0; k<ndata; k++) 127 edata[ipt+k]+=data[(elem[jpt]-1)*ndata+k]; 162 if (elem[jpt]) { 163 for (k=0; k<ndata; k++) 164 edata[ipt+k]+=data[(elem[jpt]-1)*ndata+k]; 165 nnodes++; 166 } 128 167 jpt++; 129 168 } 130 for (k=0; k<ndata; k++) 131 edata[ipt+k]/=(double)nelem; 169 if (nnodes) 170 for (k=0; k<ndata; k++) 171 edata[ipt+k]/=(double)nnodes; 132 172 ipt+=ndata; 133 173 } 134 174 } 175 135 176 else 136 _error_("Data has incorrect number of %d rows.\n",mdata);177 _error_("Data matrix has incorrect number of %d rows.\n",mdata); 137 178 } 138 179 … … 145 186 cmap,mcmap,ncmap)); 146 187 147 if (mdata == mncon) xfree((void**)&edata); 188 if (edfree) xfree((void**)&edata); 189 if (ncfree) xfree((void**)&nodecon); 148 190 clock0a=clock(); 149 191 time0a =time(NULL); … … 187 229 double alt=10000; 188 230 double cmin= DBL_MAX, 189 231 cmax=-DBL_MAX; 190 232 int imap; 191 233 KML_Folder* kfold =NULL;
Note:
See TracChangeset
for help on using the changeset viewer.