// ============================================================================ // EXEMPLES de definitions de geometries 2D sous SCILAB // et preparation au maillage pour le logiciel DELOS // OS 07.11.2011 // // 1. geometrie simple : un seul contour (Pour Delos, avec DSutil.sci) // 2. geometrie simple : plusieurs contours d'une meme region (cavites) // 3. geometrie "complexe" (topologie) : plusieurs regions non simplement connexes // // =================================================================================== exec("DSutil.sci",-1); // pour charger des fonctions utiles (pour Delos) numfig=0 ; // numero des figures pour l'affichage // =================================================================================== // 1. geometrie simple : un seul contour (Pour Delos, avec DSutil.sci) // =================================================================================== // A) Definition de la geometrie XYcoord=[-10,-10;10,-10;10,10;-10,10]; // c'est le strict minimum, // B) Completion automatique de la definition dans des cas simples [code, reg, laretes]=DSDefaultGeom(XYcoord, "auto");// "auto" = par defaut on considere que le contour est ferme numfig=numfig+1; DSShowGeom(XYcoord,laretes,reg,code,numfig,"Exemple 1 : geometrie simple"); // C) Maillage nomf="mon_carre.geo" DSWriteGeom(nomf, XYcoord, laretes, reg, code ); // sauvegarde de la geometrie dans un fichier nommesh="mon_carre.mesh"; err=unix("delos v "+nomf+" - "+nommesh+" - - "); // Maillage = Appel d'un programme externe [XY,TRI,REG]=DSReadMesh(nommesh); // Lecture du maillage et affichage numfig=numfig+1; DSShowMesh(XY,TRI,REG,numfig); // visualisation sous SCILAB // =================================================================================== // 2. geometrie simple : plusieurs contours d'une meme region (contour externe, contours internes) // =================================================================================== // A) Definition de la geometrie XYcoord=[-10,-10;10,-10;10,10;-10,10]; XYtunnel1=[-1,0;1,0;1,1;-1,1]; XYtunnel1(:,1)=XYtunnel1(:,1)-2; // translation x=x-2 XYtunnel2=XYtunnel1; // on duplique le tunnel XYtunnel2(:,1)=XYtunnel2(:,1)+4; // translation x=x+4 XYcoord=[XYcoord;XYtunnel1;XYtunnel2]; // on fusionne toutes les coordonnees c1=[1:4,1] c2=[1:4,1]+4 ; // c2 et c3 devraient etre dans l'azutre sens ???? c3=[1:4,1]+8 laretes=list(c1,c2,c3) // B) Completion automatique de la definition dans des cas simples [code, reg]=DSDefaultGeom(XYcoord, laretes); // par defaut une seule region numfig=numfig+1; DSShowGeom(XYcoord,laretes,reg,code,numfig,"Exemple 2 : geometrie avec plusieurs contours"); // C) Maillage nom="2tunnels" nomf=nom+".geo" DSWriteGeom(nomf, XYcoord, laretes, reg, code ); // sauvegarde de la geometrie dans un fichier nommesh=nom+".mesh"; err=unix("delos v "+nomf+" - "+nommesh+" - - "); // Maillage = Appel d'un programme externe [XY,TRI,REG]=DSReadMesh(nommesh); // Lecture du maillage et affichage numfig=numfig+1; DSShowMesh(XY,TRI,REG,numfig); // visualisation sous SCILAB // =================================================================================== // 3. geometrie "complexe" (topologie) : plusieurs regions non simplement connexes // =================================================================================== // Il faut definir les regions "reg" (les materiaux) // A) Definition de la geometrie // Reprenons l'exemple precedent et Ajoutons une couche (un materiau) au dessus XYcoord=[-10,-10;10,-10;10,10;-10,10]; XYtunnel1=[-1,0;1,0;1,1;-1,1]; XYtunnel1(:,1)=XYtunnel1(:,1)-2; // translation x=x-2 XYtunnel2=XYtunnel1; // on duplique le tunnel XYtunnel2(:,1)=XYtunnel2(:,1)+4; // translation x=x+4 XYcoord=[XYcoord;XYtunnel1;XYtunnel2]; // on fusionne toutes les coordonnees c1=[1:4,1] c2=[1:4,1]+4 ; // c2 et c3 devraient etre dans l'azutre sens ???? c3=[1:4,1]+8 // A laquelle on donnera le numero "2" [nb,dim]=size(XYcoord) XYcoord=[XYcoord;-10,12;10,12]; c1=[4,1,2,3]; // Il faut modifier c1 car on ajoute un materiau au dessus reg1=[1,0]; // c1 frontiere de la region numero 1 c4=[4,3]; reg4=[2,1]; // region "2" a gauche, region "1" a droite c5=[3,nb+2,nb+1,4] reg5=[2,0] reg2=[1,0] reg3=[1,0] laretes=list(c1,c2,c3,c4,c5) reg=[reg1;reg2;reg3;reg4;reg5]; // B) Completion automatique de la definition (code) [code]=DSDefaultGeom(XYcoord, laretes, reg); // par defaut une seule region numfig=numfig+1; DSShowGeom(XYcoord,laretes,reg,code,numfig,"Exemple 3 : geometrie avec plusieurs regions"); // C) Maillage nom="2tunnels2M" nomf=nom+".geo" DSWriteGeom(nomf, XYcoord, laretes, reg, code ); // sauvegarde de la geometrie dans un fichier nommesh=nom+".mesh"; err=unix("delos v "+nomf+" - "+nommesh+" - - "); // Maillage = Appel d'un programme externe [XY,TRI,REG]=DSReadMesh(nommesh); // Lecture du maillage et affichage numfig=numfig+1; DSShowMesh(XY,TRI,REG,numfig); // visualisation sous SCILAB