Dynamique des Fluides, Simulation

Programmation d'applications complexes
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Dynamique des Fluides, Simulation

Message par graph100 »

Merci Fred :D

C'est définitif, j'adore PureBasic ! (en ce moment je tâte le C, alors ça souligne les bons points de PB, mais ça fait aussi ressortir des manques à combler --> templates, pointeurs sur tableaux etc...)

Dans le 1er post, une mise à jour qui améliore l'interface, la stabilité, et ajoute la possibilité de changer de condition limite : soit une boite fermée, soit un espace libre.

Si quelqu'un veut tester d'autres conditions limites, il suffit de modifier FS_SetBoundaryCondition_Libre()
Je ne suis pas sur que ma modif pour l'espace libre fonctionne vraiment comme il faut...


Quelques sélections pratiques du nouveau code :

Stabilisateur de FPS :

Code : Tout sélectionner

Tps_Loop_mini.d = 0.040 ; secondes
Define dt.d


OpenWindow(0, 0, 0, 600, 400, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CanvasGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), #PB_Canvas_Keyboard)


Repeat
	
	
	Repeat
		event = WindowEvent()
		
		;{ Gestion event
		
		
		;}
		
	Until event = 0 Or event = #PB_Event_CloseWindow
	
	
	;{ mise à jour du delta de temps et stabilisation des FPS
	
	dt = (ElapsedMilliseconds() - time) / 1000
	
	If dt < Tps_Loop_mini
		Delay(1000 * (Tps_Loop_mini - dt)) ; on sauve du Processeur
	EndIf
	
	dt = (ElapsedMilliseconds() - time) / 1000 ; on reprend le temps total de la boucle, delay compris
	time = ElapsedMilliseconds()
	
	;}
	
	
	
	;{ Affichage
	
	If StartDrawing(CanvasOutput(0))
		
		Box(0, 0, OutputWidth(), OutputHeight(), 0)
		
		If dt
			DrawText(10, 10, "FPS = " + StrD(1/dt, 1), $FFFFFF, 0)
		EndIf
		
		StopDrawing()
	EndIf
	
	;}
	
Until event = #PB_Event_CloseWindow
Ce code m'a permis d'enlever l'effet de latence qu'il y avait avec l'utilisation des touches du clavier pour gérer les sources de flux et particules

Il a également stabilisé le FPS à la variable 1/Tps_Loop_mini (ici = 25 FPS)
Et cela rend la simulation plus stable (puisque le dT réel est utilisé pour l'alimenter).


Procédure interchangeable :

Code : Tout sélectionner

Procedure FS_SetBoundaryCondition_Boite(*obj.SIM_FL, MODE.l, Array x.d(2))
	
	; un 1er code
	
EndProcedure

Procedure FS_SetBoundaryCondition_Libre(*obj.SIM_FL, MODE.l, Array x.d(2))
	
	; un autre code
	
EndProcedure

Procedure FS_SetBoundaryCondition_Autre(*obj.SIM_FL, MODE.l, Array x.d(2))
	
	; un autre code
	
EndProcedure


Prototype FS_SetBoundaryCondition(*obj.SIM_FL, MODE.l, Array x.d(2))
Global FS_SetBoundaryCondition.FS_SetBoundaryCondition = @FS_SetBoundaryCondition_Boite()



; utilisation dans le code : 


; BLABLABLA
FS_SetBoundaryCondition(mon_obj, 1, t())
; BLABLABLA



; On change les procedures comme ça :

If FS_SetBoundaryCondition = @FS_SetBoundaryCondition_Boite()
	
	FS_SetBoundaryCondition = @FS_SetBoundaryCondition_Libre()
	
	
ElseIf FS_SetBoundaryCondition = @FS_SetBoundaryCondition_Libre()
	
	FS_SetBoundaryCondition = @FS_SetBoundaryCondition_Autre()
	
	
ElseIf FS_SetBoundaryCondition = @FS_SetBoundaryCondition_Autre()
	
	FS_SetBoundaryCondition = @FS_SetBoundaryCondition_Boite()
	
	
EndIf
C'est vraiment super pratique ! Pour ajouter une autre procédure qui permet de tester un autre comportement je n'ai même pas eu besoin de modifier le reste du code qui utilise la procédure :D


Pointeurs vers tableaux, et Swap

Code : Tout sélectionner

Structure tableau
	Array tab.d(0, 0)
EndStructure



Macro Tableau_init(_adr_, _struct_)
	_adr_ = AllocateMemory(SizeOf(_struct_))
	InitializeStructure(_adr_, _struct_)
EndMacro

Macro Tableau_Free(_adr_, _struct_)
	ClearStructure(_adr_, _struct_)
	FreeMemory(_adr_)
EndMacro




Structure Fluide
	
	; Tableaux des vitesses du fluide
	*u.tableau
	*v.tableau
	
EndStructure


Define Mon_Fluide.Fluide


Tableau_init(Mon_Fluide\u, tableau)
Tableau_init(Mon_Fluide\v, tableau)

Dim Mon_Fluide\u\tab(20, 10)
Dim Mon_Fluide\v\tab(20, 10)


; On échange les tableaux avec un swap
Swap Mon_Fluide\u, Mon_Fluide\v



Tableau_Free(Mon_Fluide\u, tableau)
Tableau_Free(Mon_Fluide\v, tableau)
Depuis quelques version de PB, il n'est plus possible de "Swaper" 2 tableaux... Or c'est super pratique !
Mon alternative est quand même plus compliquée, mais une fois en place, ça fonctionne bien.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Dynamique des Fluides, Simulation

Message par Frenchy Pilou »

Ah oui, la touche [C] :oops:
Sinon on dirait presque aussi de la fumée! :D
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Dynamique des Fluides, Simulation

Message par venom »

Très joli code bravo 8)






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Dynamique des Fluides, Simulation

Message par graph100 »

La V3 du Simulateur de fluide.

Nouveautés : la Couleur !
Au lieu d'un seul canal de particule, il y en a 3 pour le Rouge, le Vert et le Bleu.
L'interface a changé aussi, toujours pas plus ergonomique en revanche :lol:

Autre modification majeure : la taille de la matrice des Particules n'est plus obligée d'être de celle de la matrice de vitesse, les vitesses sont interpolées pour correspondre. Cela permet d’accélérer un peu le calcul en simulant moins de fluide et plus de particules

Le code étant devenue trop long, et surtout avec un intérêt moindre par rapport à la simulation de fluide proprement dite, je laisse la V2 dans le 1er post, et je met le code avec un Exe tout fait dans une archive :

DF_GE_V3.zip

Image
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Re: Dynamique des Fluides, Simulation

Message par Torp »

Franchement une tuerie ! Bravo !
Avatar de l’utilisateur
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: Dynamique des Fluides, Simulation

Message par SPH »

Imbattable :idea:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Dynamique des Fluides, Simulation

Message par Backup »

tres joli prg :)

moi c'est ta generation de palette qui me branche :mrgreen:
vais peut etre te piquer du code pour l'integré dans mon Palette_Gadget :mrgreen:
Avatar de l’utilisateur
Mindphazer
Messages : 639
Inscription : mer. 24/août/2005 10:42

Re: Dynamique des Fluides, Simulation

Message par Mindphazer »

Pour une raison qui m'échappe, sur Mac, le compilo me retourne une erreur : structure not found : POINT

:?:
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Dynamique des Fluides, Simulation

Message par graph100 »

@Mindphazer : POINT ??? j'aurais penser que les #white serait plus problématique...

Normalement c'est la classique POINT\x.l et y.l

@Dobro : j'ai fouillé dans mes vieux codes pour ressortir ma palette :D Ca doit être la deuxième fois que je l'utilise depuis que je l'ai codée (sur PB3.xx)
Mais avec le canvas, la mise en pratique est vraiment rapide !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Dynamique des Fluides, Simulation

Message par Frenchy Pilou »

Un Verve en français! ;) 8)
Le nom du fichier est ésotérique! :mrgreen:
Dernière modification par Frenchy Pilou le mar. 17/juin/2014 13:49, modifié 2 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
Mindphazer
Messages : 639
Inscription : mer. 24/août/2005 10:42

Re: Dynamique des Fluides, Simulation

Message par Mindphazer »

graph100 a écrit :@Mindphazer : POINT ??? j'aurais penser que les #white serait plus problématique...

Normalement c'est la classique POINT\x.l et y.l
Oui
De toute évidence, elle n'existe pas en résident sur OS X !
En ajoutant ça en tout début du listing, ça fonctionne très bien :

Code : Tout sélectionner

Structure POINT
  x.l
  y.l
EndStructure

#red = $0000FF
#white = $FFFFFF
#blue= $FF0000
#green = $00FF00
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Dynamique des Fluides, Simulation

Message par Frenchy Pilou »

Une disposition des sources au hasard ?
Image
Est beau ce qui plaît sans concept :)
Speedy Galerie
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Re: Dynamique des Fluides, Simulation

Message par Fred »

Mindphazer a écrit :
graph100 a écrit :@Mindphazer : POINT ??? j'aurais penser que les #white serait plus problématique...

Normalement c'est la classique POINT\x.l et y.l
Oui
De toute évidence, elle n'existe pas en résident sur OS X !
En ajoutant ça en tout début du listing, ça fonctionne très bien :

Code : Tout sélectionner

Structure POINT
  x.l
  y.l
EndStructure

#red = $0000FF
#white = $FFFFFF
#blue= $FF0000
#green = $00FF00
C'est normal, c'est des structures et des constantes de l'API Windows
Avatar de l’utilisateur
Mindphazer
Messages : 639
Inscription : mer. 24/août/2005 10:42

Re: Dynamique des Fluides, Simulation

Message par Mindphazer »

Fred a écrit : C'est normal, c'est des structures et des constantes de l'API Windows
Pour les constantes, je savais déjà, du coup j'ai un fichier include dans lequel elles sont définies que j'inclus presque tout le temps dans mes programmes pour éviter les désagréments
pour la structures, c'est bon à savoir, merci Fred (y'en a t'il d'autres ?)

J'imagine qu'il faudra faire la même chose sous Linux
Dernière modification par Mindphazer le mar. 17/juin/2014 14:46, modifié 1 fois.
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Dynamique des Fluides, Simulation

Message par graph100 »

Tu peux modifier la position de chaque source [E], son diamètre [D], sa couleur (il suffit de la sélectionner, puis de changer la couleur)
Et la même chose avec les sources de flux.

Pour en placer de nouvelles, passer en mode édition [N], puis utiliser la souris, enfin, quitter le mode édition [N]


La simulation fonctionne bien lorsque l'ordinateur est assez rapide pour maintenir un temps de calcul assez bas, et stable.
Plus le temps entre deux simulations est élevé, moins elle sera précise (dt doit être petit).

En conséquence, pour éviter des résultats trop disparate sur tous nos ordi, et sachant que je code sur un bon processeur,
le 'dt' utiliser pour la simulation est plafonné à 40ms (si ça calcule plus vite, la vitesse d'animation du fluide est celle calculée, sinon elle sera plus lente)


Si le résultat est vraiment trop lent chez vous, baissez la taille du tableau de vitesse (le "100, 100" ci-dessous) :

Code : Tout sélectionner

Fluide_Init(Var\fluide, 100, 100, 0) : PostEvent(#PB_Event_Gadget, 0, #GD_viscosite)

@Mindphaser : j'ai ajouté tes corrections dans le code, merci

@Frenchy Pilou : le nom "DF_GE_V3" ? c'est l'abréviation de "Dynamique des fluide _ game engine_GDC03_V3"
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre