Changeset 675
- Timestamp:
- 06/01/09 14:59:57 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/parallel/ProcessResults.cpp
r669 r675 46 46 int ismacayealpattyn; 47 47 int isstokes; 48 int dim; 48 49 49 50 /*intermediary: */ … … 83 84 84 85 /*some flags needed: */ 86 fem_dh->parameters->FindParam((void*)&dim,"dim"); 85 87 fem_dhu->parameters->FindParam((void*)&ishutter,"ishutter"); 86 88 fem_ds->parameters->FindParam((void*)&isstokes,"isstokes"); … … 91 93 fem_p=fems+0; 92 94 } 93 94 95 95 96 for(n=0;n<results->Size();n++){ … … 98 99 99 100 if(strcmp(result->GetFieldName(),"u_g")==0){ 100 /*Ok, are we dealing with velocities coming from MacAyeal, Pattyin, Hutter, on 2 dofs? or from101 /*Ok, are we dealing with velocities coming from MacAyeal, Pattyin, Hutter, on 2,3 dofs or 101 102 *Stokes on 4 dofs: */ 102 103 result->GetField(&u_g); 103 104 VecToMPISerial(&u_g_serial,u_g); 104 105 105 if(!isstokes){ 106 //2d results -> 2 dofs per node 107 if (dim==2){ 106 108 /*ok, 2 dofs, on number of nodes: */ 107 109 if(ismacayealpattyn){ … … 126 128 vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2)); 127 129 } 128 129 } 130 } 131 132 //3d results -> 3 or 4 (stokes) dofs per node 130 133 else{ 131 /* 4 dofs on number of nodes. discard pressure: */ 132 fem_ds->parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 133 VecToMPISerial(&partition,fem_ds->partition); 134 fem_ds->parameters->FindParam((void*)&yts,"yts"); 135 vx=(double*)xmalloc(numberofnodes*sizeof(double)); 136 vy=(double*)xmalloc(numberofnodes*sizeof(double)); 137 vz=(double*)xmalloc(numberofnodes*sizeof(double)); 138 vel=(double*)xmalloc(numberofnodes*sizeof(double)); 139 for(i=0;i<numberofnodes;i++){ 140 vx[i]=u_g_serial[4*(int)partition[i]+0]*yts; 141 vy[i]=u_g_serial[4*(int)partition[i]+1]*yts; 142 vz[i]=u_g_serial[4*(int)partition[i]+2]*yts; 143 vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2)); 134 135 if(!isstokes){ 136 /*ok, 3 dofs, on number of nodes: */ 137 if(ismacayealpattyn){ 138 fem_dh->parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 139 VecToMPISerial(&partition,fem_dh->partition); 140 fem_dh->parameters->FindParam((void*)&yts,"yts"); 141 } 142 else{ 143 fem_dhu->parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 144 VecToMPISerial(&partition,fem_dhu->partition); 145 fem_dhu->parameters->FindParam((void*)&yts,"yts"); 146 } 147 vx=(double*)xmalloc(numberofnodes*sizeof(double)); 148 vy=(double*)xmalloc(numberofnodes*sizeof(double)); 149 vz=(double*)xmalloc(numberofnodes*sizeof(double)); 150 vel=(double*)xmalloc(numberofnodes*sizeof(double)); 151 152 for(i=0;i<numberofnodes;i++){ 153 vx[i]=u_g_serial[3*(int)partition[i]+0]*yts; 154 vy[i]=u_g_serial[3*(int)partition[i]+1]*yts; 155 vz[i]=u_g_serial[3*(int)partition[i]+2]*yts; 156 vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2)); 157 } 158 } 159 160 else{ 161 /* 4 dofs on number of nodes. discard pressure: */ 162 fem_ds->parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 163 VecToMPISerial(&partition,fem_ds->partition); 164 fem_ds->parameters->FindParam((void*)&yts,"yts"); 165 vx=(double*)xmalloc(numberofnodes*sizeof(double)); 166 vy=(double*)xmalloc(numberofnodes*sizeof(double)); 167 vz=(double*)xmalloc(numberofnodes*sizeof(double)); 168 vel=(double*)xmalloc(numberofnodes*sizeof(double)); 169 for(i=0;i<numberofnodes;i++){ 170 vx[i]=u_g_serial[4*(int)partition[i]+0]*yts; 171 vy[i]=u_g_serial[4*(int)partition[i]+1]*yts; 172 vz[i]=u_g_serial[4*(int)partition[i]+2]*yts; 173 vel[i]=sqrt(pow(vx[i],2)+pow(vy[i],2)+pow(vz[i],2)); 174 } 144 175 } 145 176 } … … 162 193 xfree((void**)&partition); 163 194 } 195 164 196 else if(strcmp(result->GetFieldName(),"p_g")==0){ 165 197 /*easy, p_g is of size numberofnodes, on 1 dof, just repartition: */ … … 196 228 xfree((void**)&partition); 197 229 } 230 198 231 else if(strcmp(result->GetFieldName(),"h_g")==0){ 199 232 /*easy, h_g is of size numberofnodes, on 1 dof, just repartition: */ … … 217 250 xfree((void**)&partition); 218 251 } 252 219 253 else if(strcmp(result->GetFieldName(),"param_g")==0){ 220 254 /*easy, param_g is of size numberofnodes, on 1 dof, just repartition: */ … … 238 272 xfree((void**)&partition); 239 273 } 274 240 275 else{ 241 276 /*Just copy the result into the new results dataset: */
Note:
See TracChangeset
for help on using the changeset viewer.