Transfert des labels des surfaces entre GMSH et FreeFem.
Voila le message de Bernard...
Bonjour, Je voudrais publier sur ton site un article sur le transfert des labels des surfaces entre GMSH et FreeFem, car ce problème est mal documenté sur le net, et j’ai du chercher longtemps avant de trouver une solution. En référence, il faut mettre les articles suivants : Un TP de l’université de Bordeaux : http://www.math.u-bordeaux1.fr/~durufle/teaching/Fortran/tp4/tp4.php Et surtout, un tutorial d’OpenFoam : http://openfoamwiki.net/index.php/2D_Mesh_Tutorial_using_GMSH Dont voici l’extrait principal : Si GMSH ne contient que peu de Solveurs et n’est pas très adapté à la résolution de FEM, il est plus intuitif pour fabriquer une pièce. De base : GMSH manipule des dessins 2D et très vite 3D, tandis que FreeFem manipule des objets définis par leurs coordonnées 2D puis les déplace en 3D. Faire un pont entre les deux logiciels faciliteraient la vie des utilisateurs car FreeFem n’est pas très bavard quand il se crash dans le meshage.....
Full info here pdf file
Velocity | Pressure |
download example: essailectureGMSH.edp, download GMSH mesh essai.msh, or return to 3D examples
Thanks to Bernard Barrois bernard.barrois@mpsa.com
load "gmsh" load "medit" load "tetgen" verbosity = 1; // example gmsh // // Read from different directory // //mesh3 Th1 = gmshload3("C:/User/P013144/FreeFem/3D/GMSH/toto/essai..msh"); // // Read from the same directory // mesh3 Th1 = gmshload3("essai.msh"); plot (Th1,cmm="Th mesh read from GMSH",wait=1); // // Save mesh on different directory // //savemesh(Th1,"C:/User/P013144/FreeFem/3D/GMSH/toto/Th33.mesh"); // // Save mesh on same directory // savemesh(Th1,"Th33.mesh"); // // Transform to FreeFem++ format // mesh3 Th = tetg(Th1,switch="pqaAAYYQ");// discrétisation de la salle et des racks fespace VVh(Th,[P2,P2,P2,P1]); macro Grad(u) [dx(u),dy(u),dz(u)]// EOM macro div(u1,u2,u3) (dx(u1)+dy(u2)+dz(u3)) //EOM VVh [u1,u2,u3,p]; VVh [v1,v2,v3,q]; solve vStokes([u1,u2,u3,p],[v1,v2,v3,q]) = int3d(Th)( Grad(u1)'*Grad(v1) + Grad(u2)'*Grad(v2) + Grad(u3)'*Grad(v3) //)'; - div(u1,u2,u3)*q - div(v1,v2,v3)*p + 1e-10*q*p ) +on (30,p=0) /* Physical Surface(29) // top Physical Surface(30) // botton Physical Surface(31) // droite Physical Surface(32) // gauche Physical Surface(33) // derriere Physical Surface(34) // devant */ + on (29 , u1 = 0, u2 = 4, u3 = 0) //u2=4 Physical Surface(29) // top + on (30 , u1 = 0, u2 = -2, u3 = 0) //u2=-2 Physical Surface(30) // botton + on (31 , u1 = 0, u2 = 0, u3 = 6) //u3=6 Physical Surface(31) // droite + on (32 , u1 = 0, u2 = 0, u3 = -1) //u3=-1 Physical Surface(32) // gauche + on (33 , u1 = 1, u2 = 0, u3 = 0) //u1=1 Physical Surface(33) // derriere + on (34 , u1 = -1, u2 = 0, u3 = 0) //u1=-1 Physical Surface(34) // devant + on(20,u1=0,u2=0,u3=0) // etanche ; // fin des conditions aux limites medit("velocity",Th,[u1,u2,u3],order=1,wait=1); medit("pressure",Th,p,order=1,wait=1);