Remarques préliminaires:
Vous pouvez sauter ce passage.
Le résumé est : Pas de doc, mais des exemples; Sympa les mails; Pas de grosses modifs envisagées, pas de sources en ligne.
Le soft est assez simple à utiliser, mais je ne saurais pas exactement où le situer sur une droite qui relierait pacman à PaintShopPro.
La démarche, par contre, est classique. On crée un fichier simple qui décrit un objet, on lance le soft, on lit ce fichier, on règle quelques paramètres, et on regarde le résultat sur écran. On modifie le fichier, on sauve l'ancien, on recommence.
Je présente donc succinctement les points suivants :
Quelques grands principes :
Pour fonctionner, le soft nécessite un fichier dans lequel sont définis:
- des paramètres d'affichage
- des paramètres de simulation
- les objets.
Le fichier est un fichier en mode texte. Vous pouvez utiliser votre notepad ou emacs préféré.
Si le fichier n'est pas correct, le soft plante, le plus souvent en vous affichant la ligne ou se produit l'erreur. Parfois rien. Le maillage est rapide, surtout à échelle réduite.
Cependant, l'idée est de partir d'un fichier simple et correct, et de rajouter des instructions.
Vous pouvez avoir une fenêtre soufflerie, et le texte dans un notepad à coté.
Une session type :
Remarques importantes :
Il est possible de simuler des injections et absorptions intermittentes. On peut par exemple injecter du fluide pendant 1000 itérations, et cesser pendant les 1000 suivantes.
Une utilisation possible de ces horloges est de simuler une certaine pression de sortie et d'entrée. C'est un des points délicats de cette simulation, il n'est pas facile de fixer les "pressions" aux entrées et sorties de la veine.
Typiquement, pour simuler une résistance en sortie, on peut essayer CLKA 1 1. Dans ce cas, un pas de temps sur 2, la sortie est bloquée.
L'horloge sur la gravite est donnée à titre expérimental. On peut simuler un objet en rotation dans le champ terrestre. (ou une machine a vague...). Le résultat n'est pas très satisfaisant, mais on peut essayer.
A noter: Par le langage, on peut spécifier la direction et le temps pendant lequel la gravitation s'exerce, mais il faut donner dans l'interactif la probabilité d'application de la gravitation. Par défaut, cette valeur est 0. (pas de gravitation).
CLKI n1 n2 .... nk
Définit une horloge sur l'injecteur.
exemple : CLKI 10 500 100
L'injection a lieu pendant 10 itérations, cesse pendant 500 itérations, recommence pendant 100 itérations.
Puis on boucle sur cette séquence.
CLKA n1 n2 ....
Même chose pour l'absorption.
CLKG t1 a1 t2 a2 ...
t1 itérations avec une direction de gravite a1, t2 avec la direction a2....
Les angles ai sont donnes en degrés. 0: a gauche, 90 en haut,
180 à gauche ....
Remarque: Depuis la version 1.10, il est possible de régler la capacité des Absorbeurs, Injecteurs et Marqueurs à absorber, injecter et marquer. Je vous conseille donc de n'utiliser les horloges que dans le cas ou vous voulez des écoulements intermittents. Et même dans ce cas, vous pouvez piloter en interactif de façon ponctuelle. Voir l'utilisation de l'interactif plus bas).
Les objets sont construits à l'aide d'arbres CSG.
En gros, on construit des objets a partir d'objets simples (primitives) et de quelques opérations simples.
Les primitives sont :
- des rectangles
- des cercles
- des contours fermes
Les opérations entre deux objets sont:
- La fusion de deux objets
- La coupe d'un objet par un autre
- Le commun de deux objets
Les opérations sur un objet sont :
- La translation
- La rotation
- Le scale.
Tout ceci ressemble à de l'arithmétique.
Par exemple :
X = (a + b) + ( (c + d) * e) désigne :
la fusion entre les objets (a+b) et ((c+d)*e)
(a+b) désigne la fusion de a et b
((c+d)*e) désigne le commun entre e et (c+d)
On peu également représenter ceci par un arbre:
La description du "langage" serait un plus, mais je préfère dans un premier temps me limiter à des exemples plus ou moins simples.
Vous trouverez avec le soft une batterie de fichiers qui contiennent des formes diverses et variées.
Maintenant un exemple:
B rect1 0 0 30 50
B rect2 10 -10 40 40
- rect3 rect1 rect2
B rect1 0 0 30 50 signifie : rect1 <- Boite (x0=0, y0=0, x1=30, y1=50)
Pour rect2, le rectangle (la boite) va du point (10,-10) a (40,40)
La convention est : (0,0) en haut a gauche. X croit vers la droite, Y vers le bas.
- rect3 rect1 rect2 signifie formellement : rect3 = rect1 - rect2.
Le résultat est :
A noter, une translation a été effectuée pour décaler le rectangle au milieu de l'écran. La commande est :
TRAN rect3 rect3 100 100
La syntaxe de TRAN est : TRAN [résultat] [source] [dx][dy]
Ici source devient résultat.
On peut utiliser des commandes comme :
- a a b
si on veut effectuer la commande a <- a-b
Autre exemple:
B rect1 0 0 30 50
B rect2 10 -10 40 40
- rect3 rect1 rect2
B rect4 0 0 10 40
C c1 10 10 10
+ rect4 rect4 c1
C c1 10 30 10
+ rect4 rect4 c1
C c1 10 10 5
C c2 10 30 5
+ c3 c1 c2
- rect4 rect4 c3
TRAN rect4 rect4 40 10
+ rect3 rect3 rect4
TRAN rect3 rect3 100 100
donne l'objet rect3 suivant:
Il faut noter qu'il y a de nombreuses façons d'aboutir au même résultat.
L'essentiel est d'essayer et la règle est de procéder par étapes.
- Une pièce simple (qui marche)
- On ajoute une opération , une primitive ou une modification
- On teste.
- Si ca marche, on recommence.
Un dernier exemple simple:
P 100 100
PR 0 10
PR 10 10
PR 20 0
PR 0 20
PR 20 0
PR 0 -20
PR 20 0
PR 10 -10
PR 0 -10
P 100 100
ENDP Forme
Dans ce cas, P désigne un point "absolu" et PR, un point relatif par rapport au dernier point.
Quelques lignes :
TRAN Forme2 Forme -80 10
ROTA Forme1 Forme2 100 100 45
+ Forme Forme Forme1
ajoutées au précèdent exemple permettent de construire un objet un peu plus complexe:
et si on ajoute à l'exemple précèdent les lignes:
TRAN Forme3 Forme -150 0
SCAL Forme3 Forme3 100 100 0.3
+ Forme Forme Forme3
on obtient;
Je pense qu'avec ces quelques exemples de base, vous pouvez déjà avoir une idée de la façon de procéder pour créer vos propres pièces.
En fait, la façon de procéder est un peu plus "rigoureuse".
Le plus simple est de partir d'un fichier "vide", et d'ajouter vos objets.
Les lignes commentées ( qui débutent par //) peuvent être supprimées.
Une "veine d'essai" se compose:
- d'un objet qui se nomme Veine qui est l'objet dans lequel se trouve le fluide.
- d'un objet qui se nomme Absorbeur qui représente la sortie de la Veine.
- d'un objet qui se nomme Injecteur qui représente l'entrée de la Veine.
Ces trois objets sont nécessaires, et doivent porter ces noms.
Le fichier qui décrit "l'expérience" doit comporter également un certain nombre de paramètres comme:
Exemple:
// definition de l'echelle par defaut.
ECH 2
// definition de la couleur du vecteur vitesse et du maillage.
RVBV 100 0 0
RVBM 200 200 200
// les fichiers de sortie seront image001.tga image002.tga ...
FILE d:\image
// on calcule une moyenne sur 10 itérations avant d'afficher.
MOY 10
// Valeur par defaut pour la proba d'injection ( 0: pas d'injection 255: peu d'injection )
INJ 100
// Les Horloges: On va injecter , apres 0 iteration couper l'injection pendant 2 iteration puis recommencer...
// CLKI pour injection CLKA pour Absorbeur.
CLKI 0 2 1
CLKA 0 3 1
//-- Clock pour la gravite. 100 itérations avec une gravite dirigee vers 220 degrés
//-- puis 100 vers une direction a 270 ....
//-- CLKG 100 220 100 270 100 320 100 270
// remplissage de la veine par defaut. 0: vide 1: assez dense.
INIT 0.1
// Utilise pour l'affichage de la densite, l'energie et la vitesse.
// Vous pouvez essayer de modifier ces valeurs par defaut.
VMAX 0.6
LGV 25
// On va afficher sur une maille de 40 x 40 les vecteurs vitesse.
NX 40
NY 40
// Si on veut zoomer sur une partie de la veine.
//ZOOM 500 700 1300 1300
//---- Définition de la veine
B Veine 0 0 3000 2000
C obstacle 1000 1000 200
- Veine Veine obstacle
//-- définition de la source
B Injecteur 0 0 10 2000
//-- définition de l'absorbeur
B Absorbeur 2990 0 3000 2000
Et voici le résultat. En bleu, l'injecteur, en rouge l'absorbeur, et au milieu, un rectangle troue.
L'affichage de l'énergie cinétique et des vecteurs vitesse.
Il y a environ 130000 mailles, et la moyenne temporelle porte sur 50 itérations.
Si vous voulez placer des objets plus complexes, l'idée est de construire vos objets, pas nécessairement connexes
puis de les soustraire à la Veine.
Il va de soi que rien ne vous oblige à mettre l'injecteur à gauche et l'absorbeur à droite.
Par exemple, ci dessous vous trouverez l'image d'un "fluide" qui coule vers le bas.
Les absorbeurs sont la pour simuler deux trop-pleins.
Dans cet exemple, on stoppe l'injection (la douche) quand on estime qu'il y a assez de particules. On peut contrôler la probabilité d'injection à partir de l'interactif.
ou encore sur cet exemple un injecteur et un absorbeur constitues de plusieurs sous-objets.
(Attention à ceux qui seraient tentés en voyant cet exemple d'utiliser le soft pour visualiser des solutions de problèmes du type propagation de la chaleur ou de courants. Les écoulements sont très visqueux, et ne sont pas potentiels).
La veine elle même peut prendre des formes complexes:
Ici, sur cet exemple, le pas des affichages des vecteurs vitesse est de 80 dans la longueur, 40 dans la largeur.
Quelques remarques en vrac:
F1 donne accès a une page aide.
Je préfère vous la donner ici, au cas ou votre PC n'accepterait pas la résolution par défaut (800x600), lorsque le soft est lance sans arguments. Le mode 640x480 fonctionne parfaitement bien sur de vieux PCs.
Cet écran peut être différent suivant votre version.
Par exemple, depuis la version 1.10, il est possible de forcer et couper les injecteurs, marqueurs et absorbeurs.
Les touches utilisées pour cela sont (a b) pour l'absorbeur, (i j) pour l'injecteur et (m n) pour le marqueur. Attention, si vous utilisez un clavier azerty, la a est un q…. (faudra améliorer cela, et trouver le moyen de faire la différence entre le a et le A…).
L'écran principal est semblable à celui ci:
Les commandes principales sont répétées en bas d'écran.
Attention, pour quitter le soft, il faut faire ALT F, avec la simulation arrêtée. (Par F6=Stop).
Parfois, il faut rester avec une touche appuyée assez longtemps pour que la commande soit interceptée. Les touches sont lues au vol. Il faut le savoir, en particulier lorsque les itérations sont complexes.
La touche F2 donne accès à un écran permettant de choisir un fichier xxxx.csg. Attention, l'extension du fichier doit être csg.
Voici enfin l'écran des paramètres. A noter: certains paramètres ne sont accessibles qu'a travers le fichier de description des objets. (Les couleurs des vecteurs, du maillage, les horloges...)
Les paramètres essentiels pour l'instant sont:
La séquence usuelle est donc:
Ca vous a plu ? des remarques, des avis ?
Ecrivez-moi à :
l a u r e n t . b u c h a r d @ w a n a d o o . f r
et placez le mot clef Soufflerie dans le champ sujet pour éviter que votre mail ne subisse pas trop le filtrage par l'antispam.
a+.