The Higher Education and Research forge

Home My Page Projects Code Snippets Project Openings MMD
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

authorAlain <alain.bastide@univ-reunion.fr>
Sun, 28 Jun 2020 02:23:12 +0000 (06:23 +0400)
committerAlain <alain.bastide@univ-reunion.fr>
Sun, 28 Jun 2020 02:58:45 +0000 (06:58 +0400)
src/main.c
src/mmd.h

index 24e4ead..9cdd9c7 100644 (file)
@@ -1031,7 +1031,7 @@ void setHexahedreCellToVertex(struct primalMesh * myPrimalMesh)
               myPrimalMesh->cellToVertex[it_cell][6],
               myPrimalMesh->cellToVertex[it_cell][7] );
 #endif
-        
+          
         }
   endFunction(__FUNCTION__, t);
 }
@@ -1323,7 +1323,7 @@ void setHexahedreCellToCells(struct primalMesh * myPrimalMesh)
               
             }
         }
-
+  
 #ifdef DEBUG  
   for(connectivity_int k=0;k<myPrimalMesh->cellNumber;k++)
     {
@@ -2680,7 +2680,13 @@ void setDualFacesCentres(struct primalMesh * myPrimalMesh, struct dualMesh * myD
   connectivity_int nextPoint;
   
   dataType *fC;
-  
+
+  dataType  * result1 = (dataType * ) malloc(sizeof (dataType)*DIM3D);
+  dataType  * result2 = (dataType * ) malloc(sizeof (dataType)*DIM3D);
+  dataType    result3 = 0.0;
+  dataType    result4 = 0.0;
+  connectivity_int  face  =0.0;  
+  connectivity_int * segmentVector=NULL;
   
   fC =(dataType *) calloc(DIM3D, sizeof(dataType));
   
@@ -2720,7 +2726,7 @@ void setDualFacesCentres(struct primalMesh * myPrimalMesh, struct dualMesh * myD
       
       
       scalarDivVector(&(myDualMesh->internalDualFaceCentres[faceAi]), QUAD,fC);
-
+      
 #ifdef DEBUG      
       debug_print( "%-40s : %ld %d ( ","myDualMesh->internalDualFaceCentres Esti", faceAi, QUAD);
       
@@ -2760,7 +2766,8 @@ void setDualFacesCentres(struct primalMesh * myPrimalMesh, struct dualMesh * myD
           
           
           
-          for(connectivity_int vertexAi=0;vertexAi<QUAD;vertexAi++) {
+          for(connectivity_int vertexAi=0;vertexAi<QUAD;vertexAi++) 
+            {
               
               actualPoint = vertexAi;
               nextPoint = (vertexAi + 1) % QUAD;
@@ -2801,11 +2808,47 @@ void setDualFacesCentres(struct primalMesh * myPrimalMesh, struct dualMesh * myD
         }
       
     }
   
+  // correct direction of seg and area vector of dual mesh
   for(connectivity_int segmenti=0;segmenti<myPrimalMesh->segmentNumber;segmenti++)
     {    
-      dataType * segmentVector = myPrimalMesh->segmentToVertex[segmenti];
+      segmentVector = myPrimalMesh->segments[segmenti];
+      
+
+      subTwoVectors(&result1, myPrimalMesh->vertex[segmentVector[PT2]], myPrimalMesh->vertex[segmentVector[PT1]]);      
+      
+      for(connectivity_int facei=0;facei<myDualMesh->segmentToInternalDualFaceNumber[segmenti];facei++)
+        {
+          face  = myDualMesh->segmentToInternalDualFace[segmenti][facei];
+          
+          dotProduct(&result4, result1, myDualMesh->internalDualFaceArea[face]) ;     
+          if(result4<0.0)
+            {
+              for(connectivity_int pointi=0;pointi<DIM3D;pointi++)
+                {
+                  myDualMesh->internalDualFaceArea[face][pointi] *= -1.0;
+                }              
+            }
+        }
+      
+      
+#ifdef DEBUG      
+      
+      dotProduct(&result4, result1, myDualMesh->internalDualFaceArea[face]) ;     
+
+      debug_print( "%-40s : %ld ( ","VECTOR", segmenti);
+      
+      for(connectivity_int ii=0;ii<DIM3D;ii++)
+        {
+          debug_print( "%lf " , result1[ii]);
+        }
+      
+      debug_print(") ");     
+      
+      debug_print( "%lf ", result4);
+      
+      debug_print("\n");      
+#endif      
     }
   
   
@@ -2837,11 +2880,10 @@ void setDualFacesCentres(struct primalMesh * myPrimalMesh, struct dualMesh * myD
     }     
 #endif          
   
   
-  
-  
-  
-  
+  free(result1);
+  free(result2);
   free(fC);    
   endFunction(__FUNCTION__, t);
   
@@ -3141,7 +3183,7 @@ void setHexahedreEstimateVolumeCentroid(struct primalMesh * myPrimalMesh)
       scalarDivVector(&(myPrimalMesh->volumeCentroid[celli]) , myPrimalMesh->cellToFacesNeighbourNumber[celli]+myPrimalMesh->cellToFacesOwnerNumber[celli], result);
       
     }
-
+  
 #ifdef DEBUG  
   for(connectivity_int celli=0;celli<myPrimalMesh->cellNumber;celli++)
     {
@@ -3249,7 +3291,7 @@ void setHexahedreVolumeCentroid(struct primalMesh * myPrimalMesh)
       
       
       myPrimalMesh->volume[celli] *= (1.0/3.0);
-
+      
 #ifdef DEBUG      
       debug_print("%-40s : %ld (%lf) (%lf %lf %lf)\n",
                   "myPrimalMesh->volumeCentroid",
@@ -3360,8 +3402,8 @@ int main (void)
 #ifdef DEBUG
   
   myPrimalMesh.M = 2; // cell number on X
-  myPrimalMesh.N = 2; // cell number on Y
-  myPrimalMesh.P = 2; // cell number on Z
+  myPrimalMesh.N = 1; // cell number on Y
+  myPrimalMesh.P = 1; // cell number on Z
   
 #else
   
@@ -3389,7 +3431,7 @@ int main (void)
   myPrimalMesh.volumeCentroid         = NULL;
   myPrimalMesh.cellToFacesNumber      = NULL;
   myPrimalMesh.volume                 = NULL;
-  myPrimalMesh.segmentToVertex        = NULL;
+//  myPrimalMesh.segmentToVertex        = NULL;
   myPrimalMesh.faceToSegments         = NULL;
   myPrimalMesh.vertexToSegmentNumber  = NULL;
   myPrimalMesh.vertexToSegments       = NULL;
index 877dc9f..291b3a0 100644 (file)
--- a/src/mmd.h
+++ b/src/mmd.h
@@ -94,7 +94,7 @@ struct primalMesh {
 
 
     // Segments
-    connectivity_int **     segmentToVertex;
+//    connectivity_int **     segmentToVertex;
     connectivity_int **     faceToSegment;
 
     connectivity_int **     segments;