// =================================================================================== // EXEMPLES de definitions de densites 2D sous SCILAB // et preparation au maillage pour le logiciel DELOS // OS 07.11.2011 // // LA DENSITE DU MAILLAGE // La "densite" permet de fixer localement la taille des mailles (triangles) // La taille est definie comme une fonction de l'espace : TS(x,y) // Plusieurs concentrations peuvent etre definies, TS(x,y) = MINi( Ci(x,y)) // Une concentration ponctuelle definie par un point P : // C(x,y) = [ [Xp,Yp], TS, R, 'POIN' ] // Une concentration axiale definie par 2 points sur l'axe P1, P2 : // C(x,y) = [ [Xp1,Yp1; Xp2, Yp2] , TS, R, 'DROI' ] // Ou sur un segment : // C(x,y) = [ [Xp1,Yp1; Xp2, Yp2] , TS, R, 'SEGM' ] // // TODO : enlever les parametres inutiles... // =================================================================================== exec("DSutil.sci",-1); // pour charger des fonctions utiles (pour Delos) numfig=0 ; // numero des figures pour l'affichage // Reprenons la geometrie de l'exemple 1 : // 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"); // =================================================================================== // 1. Maillage sans densite de maillage // =================================================================================== nomgeo="mon_carre.geo" DSWriteGeom(nomgeo, XYcoord, laretes, reg, code ); // sauvegarde de la geometrie dans un fichier nommesh="mon_carre.mesh"; err=unix("delos v "+nomgeo+" - "+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. densite simple : taille maximale des mailles // =================================================================================== // definition des densites : construction du fichier "nomden" Taille=[2.01]; [XYGeo,SUI,TDEN]=AddDENSITY(Taille); // ou, pour ajouter aux densites deja definies : // [XYGeo,SUI,TDEN]=AddDENSITY(Taille,XYGeo,SUI,TDEN); // ou au contraire pour une re-initialisation des definitions // [XYGeo,SUI,TDEN]=AddDENSITY(); // (re)initialisation nomden="min201.den" nommesh="mon_carre_taillemax.mesh"; [err]=DSWriteDens(nomden,XYGeo,SUI,TDEN) err=unix("delos v "+nomgeo+" "+nomden+" "+nommesh+" - - "); [XY,TRI,REG]=DSReadMesh(nommesh); numfig=numfig+1; DSShowMesh(XY,TRI,REG,numfig); // visualisation sous SCILAB // =================================================================================== // 3. densite composee : plusieurs concentrations // =================================================================================== // Garder de l'exemple precedent : XYGeo,SUI,TDEN // On ajoute une concentration sur un segment XYcoord=[0,0;-10,-10]; Taille=[0.1]; RaisonSUI=[1.1]; TypeDEN='SEGM' ; // TypeDEN='DROI' ; TypeDEN='POIN' ; dens=list(XYcoord, Taille, RaisonSUI , TypeDEN); [XYGeo,SUI,TDEN]=AddDENSITY(dens,XYGeo,SUI,TDEN); XYcoord=[-5,5]; Taille=[0.1]; RaisonSUI=[1.1]; TypeDEN='POIN' ; // TypeDEN='DROI' ; TypeDEN='POIN' ; dens=list(XYcoord, Taille, RaisonSUI , TypeDEN); [XYGeo,SUI,TDEN]=AddDENSITY(dens,XYGeo,SUI,TDEN); nomden="compose.den" nommesh="mon_carre_concentrations.mesh"; [err]=DSWriteDens(nomden,XYGeo,SUI,TDEN) err=unix("delos v "+nomgeo+" "+nomden+" "+nommesh+" - - "); [XY,TRI,REG]=DSReadMesh(nommesh); numfig=numfig+1; DSShowMesh(XY,TRI,REG,numfig); // visualisation sous SCILAB