60 int main(
int argc,
char** argv )
66 MPI_Init( &argc, &argv );
78 if( NULL ==
mb )
return 1;
83 int nprocs = pcomm->
size();
89 options =
"PARALLEL=READ_PART;PARTITION=PARALLEL_PARTITION;PARALLEL_RESOLVE_SHARED_ENTS;"
90 "PARALLEL_GHOSTS=2.0.1;DEBUG_IO=0;DEBUG_PIO=0";
102 Range verts, faces, skin_verts;
112 skinner.
find_skin( 0, faces,
true, skin_verts ) );
114 vector< int > fix_tag( skin_verts.
size(), 1 );
126 options =
"PARALLEL=WRITE_PART";
147 int nprocs = pcomm->
size();
157 vector< double > vcentroids( 3 * verts.
size() );
165 Range owned_verts, shared_owned_verts;
174 vector< int > fix_tag( owned_verts.
size() );
179 vcentroids.resize( 3 * owned_verts.
size() );
187 if( shared_owned_verts.
empty() ) shared_owned_verts.
insert( *verts.
begin() );
191 vector< double > fcentroids( 3 * faces.
size() );
197 vector< EntityHandle > adj_faces;
200 for(
int nit = 0; nit < num_its; nit++ )
202 double mxdelta = 0.0;
205 for( fit = faces.
begin(), f = 0; fit != faces.
end(); ++fit, f++ )
211 fcentroids[3 * f + 0] = fcentroids[3 * f + 1] = fcentroids[3 * f + 2] = 0.0;
212 for( v = 0; v < nconn; v++ )
214 fcentroids[3 * f + 0] += ctag[3 * v + 0];
215 fcentroids[3 * f + 1] += ctag[3 * v + 1];
216 fcentroids[3 * f + 2] += ctag[3 * v + 2];
218 for( v = 0; v < 3; v++ )
219 fcentroids[3 * f + v] /= nconn;
224 for( vit = owned_verts.
begin(), v = 0; vit != owned_verts.
end(); ++vit, v++ )
227 if( fix_tag[v] )
continue;
232 double vnew[] = { 0.0, 0.0, 0.0 };
233 for( f = 0; f < (int)adj_faces.size(); f++ )
235 vnew[0] += fcentroids[3 * f + 0];
236 vnew[1] += fcentroids[3 * f + 1];
237 vnew[2] += fcentroids[3 * f + 2];
239 for( f = 0; f < 3; f++ )
240 vnew[f] /= adj_faces.size();
242 mxdelta = std::max( delta, mxdelta );
243 for( f = 0; f < 3; f++ )
244 vcentroids[3 * v + f] = vnew[f];
259 if( !( nit % report_its ) )
262 double global_max = mxdelta;
265 if( nprocs > 1 ) MPI_Reduce( &mxdelta, &global_max, 1, MPI_DOUBLE, MPI_MAX, 0, pcomm->
comm() );
266 myrank = pcomm->
rank();
268 if( 1 == nprocs || 0 == myrank ) cout <<
"Max delta = " << global_max << endl;