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

authoralainbastide <alain.bastide@univ-reunion.fr>
Mon, 13 Jul 2020 11:44:53 +0000 (15:44 +0400)
committeralainbastide <alain.bastide@univ-reunion.fr>
Mon, 13 Jul 2020 11:44:53 +0000 (15:44 +0400)
test/test_flux_chaleur.c [new file with mode: 0644]

diff --git a/test/test_flux_chaleur.c b/test/test_flux_chaleur.c
new file mode 100644 (file)
index 0000000..7cde8ae
--- /dev/null
@@ -0,0 +1,217 @@
+/*---------------------------------------------------------------------------*\
+    \o/\o/\o/
+    MMD
+    Version : 0.0.3
+    Web : https://github.com/alainbastide/MMD
+-------------------------------------------------------------------------------
+License
+
+    MMD is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation, either version 3 of the License, or (at your
+    option) any later version.
+
+    MMD is distributed in the hope that it will be useful, but
+    WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    explain
+
+Description
+    explain
+
+Author
+    Alain Bastide, Université de La Réunion, FRANCE.  All rights reserved
+
+\*---------------------------------------------------------------------------*/
+
+
+
+#include "mmd.h"
+#include "tensor.h"
+#include "primal.h"
+#include "listop.h"
+#include "memory.h"
+#include "dual.h"
+
+
+
+int main (void)
+{
+  
+  // Primal Mesh
+  struct simulationData mySimulationData;
+  
+  struct primalMesh myPrimalMesh;
+  struct dualMesh myDualMesh;
+  struct readWriteVTK myReadWriteVTK;
+  
+  myReadWriteVTK.mySimulationData = &mySimulationData;
+  
+  mySimulationData.simulationName = "Ma simulation";
+  
+  myPrimalMesh.L = 1; // cell number on X
+  myPrimalMesh.l = 1; // cell number on Y
+  myPrimalMesh.H = 1; // cell number on Z
+  
+#ifdef DEBUG
+  
+  myPrimalMesh.M = 2; // cell number on X
+  myPrimalMesh.N = 2; // cell number on Y
+  myPrimalMesh.P = 2; // cell number on Z
+  
+#else
+  
+#ifdef OPTIMCODE
+  affiche("OPTIM finded\n");
+  myPrimalMesh.M = 50; // cell number on X
+  myPrimalMesh.N = 50; // cell number on Y
+  myPrimalMesh.P = 50; // cell number on Z
+#else
+  myPrimalMesh.M = 200; // cell number on X
+  myPrimalMesh.N = 200; // cell number on Y
+  myPrimalMesh.P = 200; // cell number on Z
+  
+#endif
+  
+#endif
+  myPrimalMesh.vertex                 = NULL;
+  myPrimalMesh.cellToVertexNumber     = NULL;
+  myPrimalMesh.cellToVertex           = NULL;
+  myPrimalMesh.faceToVertex           = NULL;
+  myPrimalMesh.faceToVertexNumber     = NULL;
+  myPrimalMesh.faceCentres            = NULL;
+  myPrimalMesh.faceAreas              = NULL;
+  myPrimalMesh.cellToFaces            = NULL;
+  myPrimalMesh.volumeCentroid         = NULL;
+  myPrimalMesh.cellToFacesNumber      = NULL;
+  myPrimalMesh.volume                 = NULL;
+//  myPrimalMesh.segmentToVertex        = NULL;
+  myPrimalMesh.faceToSegments         = NULL;
+  myPrimalMesh.vertexToSegmentNumber  = NULL;
+  myPrimalMesh.vertexToSegments       = NULL;
+  myPrimalMesh.cellToCells            = NULL;
+  myPrimalMesh.cellToCellsNumbers     = NULL;
+  myPrimalMesh.cellToSegmentOwner     = NULL;
+  myPrimalMesh.cellToSegmentNeighbour = NULL;
+  myPrimalMesh.cellToSegmentOwnerNumber       = NULL;
+  myPrimalMesh.cellToSegmentNeighbourNumber   = NULL;  
+  
+  
+  // FACES
+  myPrimalMesh.faces                  = NULL;
+  myPrimalMesh.cellToFacesOwner       = NULL;
+  myPrimalMesh.cellToFacesNeighbour   = NULL;
+  
+  //  SEGMENTS
+  myPrimalMesh.segments                       = NULL;
+  myPrimalMesh.vertexToSegmentOwner           = NULL;
+  myPrimalMesh.vertexToSegmentOwnerNumber     = NULL;
+  myPrimalMesh.vertexToSegmentNeighbour       = NULL;
+  myPrimalMesh.vertexToSegmentNeighbourNumber = NULL;
+  
+  myPrimalMesh.segmentToFaceOwner            = NULL;
+  myPrimalMesh.segmentToFaceOwnerNumber      = NULL;
+  myPrimalMesh.segmentToFaceNeighbour        = NULL;
+  myPrimalMesh.segmentToFaceNeighbourNumber  = NULL;
+  myPrimalMesh.segmentCentres                = NULL;
+  
+  myDualMesh.internalDualFaces               = NULL;
+  myDualMesh.segmentToInternalDualFace       = NULL;
+  myDualMesh.segmentToInternalDualFaceNumber = NULL;
+  myDualMesh.internalDualFaceArea            = NULL;
+  myDualMesh.internalDualFaceCentres         = NULL;
+  
+  // BOUNDARY
+  myPrimalMesh.faceBoundary                    = NULL;
+  myPrimalMesh.faceBoundaryNumber              = 0;
+  
+  
+  // Rectangular mesh with an ...
+  myPrimalMesh.cellNumber   = myPrimalMesh.M * myPrimalMesh.N * myPrimalMesh.P;
+  myPrimalMesh.vertexNumber = (myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
+  myPrimalMesh.faceNumber = 0;//HEXAHEDRON_FACES*myPrimalMesh.cellNumber;//(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
+  myPrimalMesh.segmentNumber = 0;//QUAD*myPrimalMesh.faceNumber;//HEXAHEDRON_SEGMENTS * myPrimalMesh.cellNumber;; //2*(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
+  
+  setHandler(fault_handler);   
+  
+  myDualMesh.internalDualFacesNumber = 0;
+  
+  // création de **vertex
+  setHexahedreVertex(&myPrimalMesh);
+  
+  // nombre de vertex par cellules **cellToVertexNumber
+  setHexahedreCellToVertexNumber(&myPrimalMesh);
+  
+  // création du lien cellules vers vertex **cellToVertex 
+  setHexahedreCellToVertex(&myPrimalMesh);
+  
+  // lien vertex vers cellules
+  setHexahedreVertexToCellNumbers(&myPrimalMesh);
+  
+  setHexahedreVertexToCells(&myPrimalMesh);
+  
+  // cell to cells
+  setHexahedreCellToCells(&myPrimalMesh);
+  
+  setHexahedreCellToFacesOwnerNeighbour(&myPrimalMesh);
+  
+  setHexahedreFaceToCells(&myPrimalMesh);
+  
+  //  OLD
+  
+  setHexahedreSegments(&myPrimalMesh);
+  
+  setHexahedreVertexToSegments(&myPrimalMesh);
+  
+  setHexahedreSegmentToFaces(&myPrimalMesh);
+  
+  // centres
+  
+  setHexahedreSegmentsCentres(&myPrimalMesh);
+  
+  setHexahedreFaceCentersAreas(&myPrimalMesh);
+  
+  
+  setHexahedreVolumeCentroid(&myPrimalMesh);
+  
+  // DUAL MESH
+  setDualFaces(&myPrimalMesh,&myDualMesh);
+  
+  setDualFacesCentres(&myPrimalMesh, &myDualMesh);
+  
+  
+  setHexahedreBoundaryFaces(&myPrimalMesh);
+  
+  
+  warning("VOIR TO DO FILE");
+  
+  fflush(stderr);
+  fflush(stdout);
+  
+  affiche("%-40s : %ld\n","Cell number",myPrimalMesh.cellNumber);
+  affiche("%-40s : %ld\n","Vertex number",myPrimalMesh.vertexNumber);
+  affiche("%-40s : %ld\n","Surface number",myPrimalMesh.faceNumber);
+  affiche("%-40s : %ld\n","Segment number",myPrimalMesh.segmentNumber);
+  affiche("%-40s : %ld\n","Dual Face number",myDualMesh.internalDualFacesNumber);
+  
+  freeMemory(&myPrimalMesh, &myDualMesh);
+  todo();
+
+#ifdef MMD_PARALLEL
+#pragma omp parallel
+{
+  printf("Hello from process: %d\n", omp_get_thread_num());  
+
+}
+#endif
+}
+
+
+
+