7 #define PI 3.14159265358979323846 
  144   int IdSubdiviedElement1;
 
  145   int IdSubdiviedElement2;
 
  159   IdNgbhVortex1=LocMesh->
Edges[IdEdge].
V1;
 
  160   IdNgbhVortex2=LocMesh->
Edges[IdEdge].
V2;
 
  163   IdSubdiviedEdge=IdEdge;
 
  168   IdSubdiviedElement1=-1;
 
  169   IdSubdiviedElement2=-1;
 
  171     if (IdSubdiviedElement1==-1){
 
  172       IdSubdiviedElement1=i;
 
  200       IdSubdiviedElement2=i;
 
  237   LocMesh->
Edges[IdSubdiviedEdge].
V1=IdNgbhVortex1;
 
  238   LocMesh->
Edges[IdSubdiviedEdge].
V2=IdNewVortex;
 
  240   LocMesh->
Edges[IdNewEdge1].
V1=IdNewVortex;
 
  241   LocMesh->
Edges[IdNewEdge1].
V2=IdNgbhVortex2;
 
  244   LocMesh->
Edges[IdNewEdge2].
V1=IdNewVortex;
 
  245   LocMesh->
Edges[IdNewEdge2].
V2=IdNgbhVortex4;
 
  248   LocMesh->
Edges[IdNewEdge3].
V1=IdNewVortex;
 
  249   LocMesh->
Edges[IdNewEdge3].
V2=IdNgbhVortex3;
 
  254   LocMesh->
Elements[IdSubdiviedElement1].
E1=IdSubdiviedEdge;
 
  255   LocMesh->
Elements[IdSubdiviedElement1].
E2=IdNewEdge3;
 
  256   LocMesh->
Elements[IdSubdiviedElement1].
E3=IdNgbhEdge1;
 
  258   LocMesh->
Elements[IdSubdiviedElement2].
E1=IdNgbhEdge2;
 
  259   LocMesh->
Elements[IdSubdiviedElement2].
E2=IdNewEdge2;
 
  260   LocMesh->
Elements[IdSubdiviedElement2].
E3=IdSubdiviedEdge;
 
  262   LocMesh->
Elements[IdNewElement1].
E1=IdNewEdge1;
 
  263   LocMesh->
Elements[IdNewElement1].
E2=IdNgbhEdge3;
 
  264   LocMesh->
Elements[IdNewElement1].
E3=IdNewEdge3;
 
  266   LocMesh->
Elements[IdNewElement2].
E1=IdNgbhEdge4;
 
  267   LocMesh->
Elements[IdNewElement2].
E2=IdNewEdge1;
 
  268   LocMesh->
Elements[IdNewElement2].
E3=IdNewEdge2;
 
  274   double Xmax,Xmin,Ymax,Ymin,Zmax,Zmin,Xmean,Ymean,Zmean;
 
  313   int Ve1,Ed1,Ve2,Ed2,Ve3,Ed3;  
 
  315   double x1,x2,x3,y1,y2,y3,z1,z2,z3; 
 
  316   double u1,u2,u3,v1,v2,v3;  
 
  328       temp=Ed2; Ed2=Ed3; Ed3=temp;
 
  354       printf(
"This is not good!!!\n");
 
  362     u1=x2-x1; u2=y2-y1; u3=z2-z1;
 
  363     v1=x3-x1; v2=y3-y1; v3=z3-z1;
 
  372     if (x1*vp1+y1*vp2+z1*vp3<0){
 
  374       temp=Ed3; Ed3=Ed2; Ed2=temp;
 
  397   double SqLengthI,SqLengthJ;
 
  400   order=(
int*)malloc(LocMesh->
NbEdges*
sizeof(
int));
 
  402   for (i=0;i<LocMesh->
NbEdges;i++) order[i]=i;
 
  404   for (i=0;i<LocMesh->
NbEdges-1;i++)
 
  405     for (j=i+1;j<LocMesh->
NbEdges;j++){
 
  413     if (SqLengthI<SqLengthJ){
 
  421     for (i=0;i<OrigNbEdges;i++)  
CutEdge(LocMesh,order[i]);
 
  431   double SqLengthI,SqLengthJ;
 
  437   double EdgeV1_X,EdgeV1_Y,EdgeV1_Z,EdgeV2_X,EdgeV2_Y,EdgeV2_Z;
 
  440   order=(
int*)malloc(LocMesh->
NbEdges*
sizeof(
int));
 
  441   for (i=0;i<LocMesh->
NbEdges;i++) order[i]=i;
 
  451     order=(
int*)realloc(order,LocMesh->
NbEdges*
sizeof(
int));
 
  452     for (i=0;i<LocMesh->
NbEdges;i++) order[i]=i;
 
  455     for (i=0;i<LocMesh->
NbEdges-1;i++) 
for (j=i+1;j<LocMesh->
NbEdges;j++){
 
  463       if (SqLengthI<SqLengthJ){ k=order[i]; order[i]=order[j]; order[j]=k;}
 
  468     for (i=0;i<OrigNbEdges;i++){
 
  473       if (sqrt(SqLengthI)>MaxEdgeLength){
 
  488     for (i=0;i<LocMesh->
NbEdges;i++){
 
  506         LocMesh->
Edges[i].
SubiVertex[j].
X=EdgeV1_X*(dNbSubdiv-dj)/dNbSubdiv+EdgeV2_X*dj/dNbSubdiv;
 
  507         LocMesh->
Edges[i].
SubiVertex[j].
Y=EdgeV1_Y*(dNbSubdiv-dj)/dNbSubdiv+EdgeV2_Y*dj/dNbSubdiv;
 
  508         LocMesh->
Edges[i].
SubiVertex[j].
Z=EdgeV1_Z*(dNbSubdiv-dj)/dNbSubdiv+EdgeV2_Z*dj/dNbSubdiv;
 
  525   FILE * XmlMeshGeomFile;
 
  526   int i,j,NbCurvedEdge;
 
  532   XmlMeshGeomFile = fopen(FileName,
"w");
 
  535   fprintf(XmlMeshGeomFile,
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
 
  536   fprintf(XmlMeshGeomFile,
"\n");
 
  537   fprintf(XmlMeshGeomFile,
"<NEKTAR>\n");
 
  538   fprintf(XmlMeshGeomFile,
"<!-- Embed a 2-dimensional object in a 2-dimensional space -->\n");
 
  539   fprintf(XmlMeshGeomFile,
"<!-- DIM <= SPACE -->\n");
 
  540   fprintf(XmlMeshGeomFile,
"<!-- This provides a method of optimizing code for a 1-D curve embedded in 3-space. -->\n");
 
  541   fprintf(XmlMeshGeomFile,
"<GEOMETRY DIM=\"2\" SPACE=\"3\">\n");
 
  542   fprintf(XmlMeshGeomFile,
"\n");
 
  545   fprintf(XmlMeshGeomFile,
"  <VERTEX>\n");
 
  546   fprintf(XmlMeshGeomFile,
"    <!-- Always must have four values per entry. -->\n");
 
  549   fprintf(XmlMeshGeomFile,
"  </VERTEX>\n");
 
  550   fprintf(XmlMeshGeomFile,
"  \n");
 
  553   fprintf(XmlMeshGeomFile,
"  <EDGE>\n");
 
  554   fprintf(XmlMeshGeomFile,
"    <!--Edges are vertex pairs -->\n");
 
  555   for (i=0;i<LocMesh->
NbEdges;i++)
 
  556     fprintf(XmlMeshGeomFile,
"    <E ID=\"%d\">    %d  %d   </E>\n",i,LocMesh->
Edges[i].
V1,LocMesh->
Edges[i].
V2);
 
  557   fprintf(XmlMeshGeomFile,
"  </EDGE>\n");
 
  558   fprintf(XmlMeshGeomFile,
"  \n");
 
  561   fprintf(XmlMeshGeomFile,
"  <ELEMENT>\n");
 
  564   fprintf(XmlMeshGeomFile,
"  </ELEMENT>\n");
 
  565   fprintf(XmlMeshGeomFile,
"  \n");
 
  570   fprintf(XmlMeshGeomFile,
"  <CURVED>\n");
 
  573     fprintf(XmlMeshGeomFile,
"    <E ID=\"%d\" EDGEID=\"%d\" TYPE=\"PolyEvenlySpaced\" NUMPOINTS=\"%d\">\n",NbCurvedEdge,i,LocMesh->
Edges[i].
NbSubdiv+1);
 
  577     fprintf(XmlMeshGeomFile,
"   </E>\n\n");
 
  580   fprintf(XmlMeshGeomFile,
"   </CURVED>\n");
 
  584   fprintf(XmlMeshGeomFile,
"<!-- V - vertex, E - edge, F - face, L - element -->\n");
 
  585   fprintf(XmlMeshGeomFile,
"  <COMPOSITE>\n");
 
  586   fprintf(XmlMeshGeomFile,
"    <C ID=\"0\"> T[0-%d]\n",LocMesh->
NbElements-1);
 
  587   fprintf(XmlMeshGeomFile,
"    </C>\n");
 
  588   fprintf(XmlMeshGeomFile,
"    <C ID=\"1\"> E[2,3,4,5,7,8]\n");
 
  589   fprintf(XmlMeshGeomFile,
"    </C>\n");
 
  590   fprintf(XmlMeshGeomFile,
"  </COMPOSITE>\n");
 
  591   fprintf(XmlMeshGeomFile,
"  \n");
 
  592   fprintf(XmlMeshGeomFile,
"  <DOMAIN> C[0] </DOMAIN>\n");
 
  593   fprintf(XmlMeshGeomFile,
"  \n");
 
  596   fprintf(XmlMeshGeomFile,
"</GEOMETRY>\n");
 
  599   fclose(XmlMeshGeomFile);
 
  613   printf(
"Usage: makeSphereNektar <options>\n");
 
  614   printf(
"Where <options> are one or more of the following:\n");
 
  615   printf(
"\t<-NameFile n>     Name of the output file containg the sphere (default=\"toto.xml\")\n");
 
  616   printf(
"\t<-Radius n>       Radius of the sphere (default=1.)\n");
 
  617   printf(
"\t<-MaxLength n>    Maximum length allowed for an edge (default=0.5)\n");
 
  618   printf(
"\t<-NbSubdiv n>     Number of subdivisions of each edge to make it curved (default=1)\n");
 
  622 int main(
int argc, 
char **argv)
 
  625   char *output_name = 
"toto.xml";
 
  635     if ((ok == 0) && (strcmp(argv[1], 
"help") == 0)) {
 
  638     if ((ok == 0) && (strcmp(argv[1], 
"-NameFile") == 0)) {
 
  641       output_name  = argv[1];
 
  646     if ((ok == 0) && (strcmp(argv[1], 
"-Radius") == 0)) {
 
  649       Radius = atof(argv[1]);
 
  650       if (Radius<0) Radius=1.;
 
  655     if ((ok == 0) && (strcmp(argv[1], 
"-MaxLength") == 0)) {
 
  658       Prec = atof(argv[1]);
 
  659       if ((Prec<Radius*0.001)) Prec=Radius*0.001;
 
  664     if ((ok == 0) && (strcmp(argv[1], 
"-NbSubdiv") == 0)) {
 
  667       NbSubdiv = atoi(argv[1]);
 
  668       if ((NbSubdiv<1)) NbSubdiv=1;
 
  674       printf(
"Unknown option: \n");
 
  679   printf(
"Output file: %s / Radius: %lf / Precision: %lf / Subdivisions: %d\n",output_name,Radius,Prec,NbSubdiv);
 
for(iterator iter=lhs.begin();iter!=lhs.end();++iter)
 
void ProjectMeshSphere(Mesh *LocMesh, double R)
 
Mesh CreateBasicCubicMesh()
 
void ProjectMeshSphereAndRefine(Mesh *LocMesh, double R, double MaxEdgeLength, int NbSubdiv)
 
void MakeClockwiseOrder(Mesh *LocMesh)
 
Represents a vertex in the mesh. 
 
void WriteMesh(Mesh *LocMesh, char FileName[256])
 
void CutEdge(Mesh *LocMesh, int IdEdge)
 
int main(int argc, char **argv)
 
void RefineMesh(Mesh *LocMesh)