Professor Oops

Lucht die echt beweegt

Lucht die echt beweegt

Eén onzichtbare wind waait over de hele pagina

Boven elke tekening in Professor Oops ligt een laag bewegende lucht. Een ventilator, een föhn, een rollende voetbal en een hete beker duwen allemaal tegen diezelfde lucht. Bloem, rook, geuren, kaarsvlammen en plassen reageren er elk op hun eigen manier op. Daarom kan een kaars worden uitgeblazen door dingen waar niemand op had gerekend.

Stofjes die strepen trekken in de wind van het spel terwijl een ventilator rondjes draait boven een vel papier

Alles wat beweegt, duwt tegen dezelfde lucht

Houd de ventilator boven het papier. Zijn lucht komt recht naar beneden, raakt de pagina en waaiert erlangs uit, het snelst een eindje van waar je hem op richt, zoals de lucht van een echte ventilator zich over een tafel verspreidt. De föhn doet hetzelfde en voegt warmte toe. Een hand die laag over de pagina zwaait, een voetbal die voorbijrolt, een monstertruck of een rennend hondje duwen lucht voor zich uit en laten die om hun zijkanten krullen. Een klap perst lucht onder de handpalm vandaan. De stofzuiger zuigt lucht naar zich toe. Een geschrokken duif fladdert haar alle kanten op. Hete dingen op de pagina, zoals vuur, een hete beker of een heet strijkijzer, trekken lucht langs het papier naar zich toe terwijl hun warme lucht opstijgt.

Ze schrijven allemaal in één raster van bewegende lucht, met cellen van ongeveer 5 mm breed, over het hele vel heen. Nergens in het spel staat: “de ventilator blaast de kaars uit”. De ventilator schrijft alleen wind. De kaars kijkt alleen hoe snel de lucht bij haar vlam beweegt. Een voetbal die toevallig met de juiste snelheid voorbijrolt, blaast haar net zo goed uit, en een hand die ernaast neerklapt ook.

Als niets beweegt en niets warm is, gaat de lucht slapen en kost ze helemaal niets.

Eén onzichtbare wind waait over de hele pagina

Voor technici

Eén onzichtbare wind waait over de hele pagina

Een 2D-snelheidsveld boven het papier (64 × 48 cellen op een desktoppagina, ongeveer 5 mm per cel), met 60 Hz doorgerekend in een Web Worker: semi-Lagrangiaanse advectie, dan een afgeschermde drukoplossing met full multigrid in een WebAssembly-SIMD-kernel (13 tot 17 µs per tik toen hij werd gebouwd; het apparaat is niet vastgelegd), waarvan met opzet maar een deel wordt toegepast. Zo’n twaalf soorten bronnen schrijven het veld; deeltjes, snippers, kaarsen, vuur, gassen, dieren en de vloeistoffen op het papier lezen het. Geen lezer noemt een schrijver bij naam.

Onder de motorkap
Alles wat beweegt, duwt tegen dezelfde lucht

Onder de motorkap

Alles wat beweegt, duwt tegen dezelfde lucht

Elke luchtcel beslaat een vierkant van papiercellen: 3072 luchtcellen op een desktoppagina, minder op een telefoon. Elk ervan draagt de snelheid en richting van de wind, zijn warmte, en hoeveel van elk gas hij bevat. Wind wordt gemeten in papiercellen per seconde en 60 keer per seconde doorgerekend.

Wie schrijft wat:

  • Ventilator: een straal die zich langs het papier verspreidt, met een beetje wervel

  • Föhn: dezelfde straal, plus warmte

  • Hand, bal, auto, hond (laag): lucht die wordt meegenomen en om de zijkanten heen geveegd, een dipool

  • Klap, hamer: een puf die van onderen wordt weggeperst, een knijpfilm

  • Stofzuiger: een put die lucht naar binnen trekt

  • Duif die opvliegt: een korte klap naar buiten

  • Vuur, beker, strijkijzer, draad: een opwaartse trek naar de warmte toe

Een ventilator die stil wordt gehouden, telt zijn duw niet elke tik opnieuw op. Elke cel wordt naar het doel van de ventilator toe gestuurd, dus vasthouden kan niet uit de hand lopen. Als de lucht zo goed als stilstaat en niets warm is, maakt de stap het veld leeg en stopt hij.

De lucht van een ventilator is een eindje van het midden het snelst

De snelheid van de vlaag stijgt van 0 op het richtpunt tot haar piek, 0,841 van de vlaagsnelheid, op een kwart van de straal, en zakt terug tot 0 aan de rand van de straal.

De lucht van een ventilator is een eindje van het midden het snelst0,00,20,40,60,81,00,00,20,40,60,81,0afstand tot richtpunt ÷ straal (ventilator: 72 cellen)aandeel van de vlaagsnelheidpiek 0,841 bij 0,25De lucht van een ventilator is een eindje van het midden het snelst0,00,20,40,60,81,00,00,20,40,60,81,0afstand tot richtpunt ÷ straal (ventilator…aandeel van de vlaagsnelheidpiek 0,841 bij 0,25
Gegevenstabel
De lucht van een ventilator is een eindje van het midden het snelst
afstand tot richtpunt ÷ straal (ventilator: 72 cellen)de vlaag van de ventilator
00
0,020,079
0,040,1561
0,060,2313
0,080,3044
0,10,3755
0,120,4446
0,140,5115
0,160,5764
0,180,6392
0,20,6998
0,220,7581
0,240,8143
0,260,8347
0,280,8211
0,30,8073
0,320,7934
0,340,7793
0,360,7651
0,380,7506
0,40,736
0,420,7212
0,440,7062
0,460,6909
0,480,6755
0,50,6598
0,520,6438
0,540,6276
0,560,611
0,580,5942
0,60,5771
0,620,5596
0,640,5417
0,660,5235
0,680,5048
0,70,4856
0,720,4659
0,740,4456
0,760,4247
0,780,4031
0,80,3807
0,820,3574
0,840,333
0,860,3074
0,880,2802
0,90,2512
0,920,2197
0,940,1849
0,960,145
0,980,0956
10

Bron: De vorm van de vlaag van de ventilator in het spel. Op haar snelste ring mat een run van de echte engine 224 cellen/s.

De ventilator boven een leeg vel in het spel, zijn ronde omtrek in het midden, met korte lichte streepjes van stofjes die er alle kanten recht vanaf vliegen.
Stofjes laten de wind zien. De ventilator strooit een paar stofjes rond terwijl hij blaast. Die rijden mee op de lucht en worden getekend als streepjes langs hun eigen snelheid, dus je ziet de vlaag zich langs het papier verspreiden vanaf waar hij op gericht is.

Elk ding geeft mee bij zijn eigen windsnelheid, dus een ventilator tilt bloem op en laat zand liggen

Een veer glijdt weg in een briesje van 12 cellen per seconde. Confetti heeft 16 nodig, een blad 28. Een kaars gaat uit bij 40. Bloem komt van het papier bij 70, zout bij 171, zand bij 221. Elk van die getallen hoort bij het ding op de pagina. Geen ervan weet wat de wind heeft gemaakt. De ladder hieronder zet op een rij wat het eerst meegeeft.

Voor poeders komt het getal uit één eigenschap, de korrelgrootte: hoe fijner de korrel, hoe zachter de wind die hem optilt. De snelste ring lucht van de ventilator haalt in het spel ongeveer 224 cellen per seconde. Dat tilt bloem en zout op en haalt zand maar net. In een run van de echte engine bleef zand onder de ventilator overal liggen, behalve op één plek bij de rand van de pagina, waar 1% ervan opschoof. Dus een ventilator tilt bloem op en laat zand liggen.

De opgetilde bloem komt als bloem weer naar beneden. Ze rijdt mee op de wind als een wolkje stipjes en daalt verderop neer in lichte vlekken. Een test controleert dat er onderweg geen poeder wordt gemaakt of verloren. Dat laagje stuif hecht aan de ruwheid van het papier, dus een plekje geeft zijn poeder één keer af aan een tochtje, en de volgende vlaag vindt niets los meer om mee te nemen.

De ladder laat ook een naad zien die we hebben laten zitten. In het uitgebrachte spel is de lucht van de föhn iets langzamer dan die van de ventilator, omdat zijn snelheidsinstelling lager is. De volgende update volgende update zet de hand en de föhn op een schaal van echte snelheden, in de slowmotion van het spel, zodat de föhn harder blaast dan de ventilator en een zwaaiende hand zachter blijft dan allebei.

Onder de motorkap
Elk ding geeft mee bij zijn eigen windsnelheid

Onder de motorkap

Elk ding geeft mee bij zijn eigen windsnelheid

De opwaaisnelheid van elke korrel wordt alleen door zijn grootte bepaald, volgens de wortelwet die Bagnold vond voor stuifzand:

opwaaiwind ∝ √(korrelgrootte)

Maïzena gaat het eerst, dan bloem, peper, zout en ijzervijlsel, en als laatste zand en gist. Voorbij zijn opwaaisnelheid gaat los poeder sneller omhoog naarmate de wind er verder boven zit. Alleen poeder dat boven een dun vastgehouden laagje ligt, is los, en geland poeder zakt onder dat laagje, dus het blijft liggen.

Vloeistoffen op het papier worden door dezelfde wind verplaatst zodra hij over een drempel gaat: water eerst, dunne smurrie bij een sterkere wind en minder naarmate ze dikker is. Lucht die naar beneden komt en uitwaaiert, drukt harder dan lucht die erlangs glijdt.

Opgetild poeder vliegt als stipjes die de snelheid van de wind snel overnemen en zakken. Optillen en landen behouden het poeder tot op 10−5, en een tochtje tilt hetzelfde plekje maar een paar keer op; een test controleert allebei. Een andere test controleert dat de ventilator bloem verplaatst, dat het meeste ervan terug op de pagina landt en dat het midden ervan verder van de ventilator af eindigt.

Hoe hard de wind moet waaien voordat elk ding meegeeft
Wind, cellen/sWat meegeeft
0.5Hieronder gaat alle lucht slapen
3Een dier dat een geur volgt, draait de wind in
12Een veer glijdt; een vlieg schrikt van de vlaag die opsteekt
16Confetti glijdt
18De rand van een sticker komt omhoog (meer als hij goed vastzit)
25Een zittende vlieg vliegt op
28Een blad glijdt
30Plafond van de eigen trek van een vuur (zijn doel); een duif zet zich tot hier schrap tegen de wind
32Wind begint op het papier te werken: water beweegt
38Maïzena waait op
40Een kaars gaat uit; vlammen buigen en waaieren uit; rijpe schimmel laat sporen los
42Confetti waait de lucht in (2,6 × 16)
60Dunne verf begint te bewegen
70Bloem waait op
120Zeepsop wordt opgeklopt tot schuim
150Een losse vlam wordt uitgeblazen (meer als er vuur omheen is)
170▲ Föhn, zijn snelste ring (uitgebracht spel, gemeten)
171Zout waait op
221Zand waait op
224▲ Ventilator, zijn snelste ring (gemeten)

Snelheden in papiercellen per seconde (een cel is ongeveer een halve millimeter). Elke drempel hoort bij het ding dat meegeeft en is in zijn eigen deel van het spel ingesteld. ▲ Bronnen: piekwind met het gereedschap 3 s vastgehouden op een desktoppagina, één run van de echte engine, de uitgebrachte föhn zonder zijn warmte.

Probeer het: blaas op bloem, zout, zand en kaarsen De eigen regel van het spel

Een desktoppagina, 512 × 384 cellen, onder het luchtraster van 64 × 48 van het spel. De ventilator blaast al tussen de bloem en het zout. Kies een gereedschap en houd je vinger op de pagina (of zwaai de hand snel); zonder aanwijzer druk je op Nog eens blazen of Zwaai een hand erlangs. Waar je op let: bloem stroomt weg aan de rand van de vlaag, zout alleen waar de lucht het snelst is, zand bijna nooit. Kaarsen in de vlaag gaan uit bij 40 cellen/s. Dit draait de windstap van het spel, met zijn multigridoplossing, optilregel en drempels; de warmte van de föhn is weggelaten, en stipjes worden voor het plaatje vanaf 4 cellen hoog opgetild.

Een pagina met hoopjes bloem, zout en zand en vijf kaarsen onder een ventilator; pijlen laten de wind zien
  • bloem 70
  • zout 171
  • zand 221
Gereedschap
snelste wind
—
kaarsen aan
—
bloem van zijn hoopje geblazen
—
zout van zijn hoopje geblazen
—
zand van zijn hoopje geblazen
—
bloem teruggevonden
—
In het spel, nadat de ventilator tussen een hoopje bloem en een hoopje zand werd gehouden: lichte vlekken bloem die naar de verre kant van het bloemhoopje zijn geblazen, het ronde zandhoopje onaangeroerd.
Uitgekozen op korrelgrootte. Dezelfde vlaag tilt bloem van haar hoopje en laat het verderop neerdalen in lichte vlekken, en laat het zandhoopje zoals het was.

Hetzelfde briesje pakt stof, rook en druppels verschillend

Dingen in de lucht nemen de snelheid van de wind niet meteen over. Een stofje haalt hem in minder dan een tiende seconde in. Rook, stoom, vonken en gloeiende sintels doen er ongeveer een kwart seconde over. Een vliegende druppel verf houdt seconden lang het grootste deel van zijn eigen koers, dus een ventilator buigt zijn boog zonder hem te stoppen. Het spel geeft elke soort deeltje een eigen grip op de lucht, en dezelfde vlaag sorteert ze.

Confetti, bladeren en veren die op het papier liggen, glijden weg voorbij hun eigen windsnelheid, en waaien bij een sterkere wind de lucht in. In de lucht dwarrelen ze en warmen ze op in hete lucht. Confetti die bij een briesje uit een vuur opstijgt, kan in de vlucht vlam vatten en brandend neerkomen aan de overkant van een snee in het papier, en het daar aansteken. Zonder de confetti stopt hetzelfde vuur bij de snee. Een test controleert allebei.

Dezelfde vlaag, een andere grip

Na een halve seconde heeft stof op 0,2% na de snelheid van de wind overgenomen, rook 86%, vlammen 63% en een druppel verf 18%.

Dezelfde vlaag, een andere grip0,00,20,40,60,81,00,00,51,01,52,02,53,0seconden nadat een vlaag begintovergenomen deel van de windsnelheidDezelfde vlaag, een andere grip0,00,20,40,60,81,00123seconden nadat een vlaag begintovergenomen deel van de windsnelheid
  • stof en stofjes
  • rook, stoom, vonken, sintels
  • vlammen
  • druppels verf of water
Gegevenstabel
Dezelfde vlaag, een andere grip
seconden nadat een vlaag begintstof en stofjesrook, stoom, vonken, sintelsvlammendruppels verf of water
00000
0,050,45120,18130,09520,0198
0,10,69880,32970,18130,0392
0,150,83470,45120,25920,0582
0,20,90930,55070,32970,0769
0,250,95020,63210,39350,0952
0,30,97270,69880,45120,1131
0,350,9850,75340,50340,1306
0,40,99180,79810,55070,1479
0,450,99550,83470,59340,1647
0,50,99750,86470,63210,1813
0,550,99860,88920,66710,1975
0,60,99930,90930,69880,2134
0,650,99960,92570,72750,2289
0,70,99980,93920,75340,2442
0,750,99990,95020,77690,2592
0,80,99990,95920,79810,2739
0,8510,96660,81730,2882
0,910,97270,83470,3023
0,9510,97760,85040,3161
110,98170,86470,3297
1,0510,9850,87750,343
1,110,98770,88920,356
1,1510,98990,89970,3687
1,210,99180,90930,3812
1,2510,99330,91790,3935
1,310,99450,92570,4055
1,3510,99550,93280,4173
1,410,99630,93920,4288
1,4510,9970,9450,4401
1,510,99750,95020,4512
1,5510,9980,9550,4621
1,610,99830,95920,4727
1,6510,99860,96310,4831
1,710,99890,96660,4934
1,7510,99910,96980,5034
1,810,99930,97270,5132
1,8510,99940,97530,5229
1,910,99950,97760,5323
1,9510,99960,97980,5416
210,99970,98170,5507
2,0510,99970,98340,5596
2,110,99980,9850,5683
2,1510,99980,98640,5768
2,210,99980,98770,5852
2,2510,99990,98890,5934
2,310,99990,98990,6015
2,3510,99990,99090,6094
2,410,99990,99180,6171
2,4510,99990,99260,6247
2,5110,99330,6321
2,55110,99390,6394
2,6110,99450,6465
2,65110,9950,6535
2,7110,99550,6604
2,75110,99590,6671
2,8110,99630,6737
2,85110,99670,6802
2,9110,9970,6865
2,95110,99730,6927
3110,99750,6988

Bron: De eigen gripcurves van het spel: elke soort deeltje schuift met zijn eigen tempo naar de wind toe, ingesteld per soort, niet per grootte.

Lucht die naar voren wordt geduwd, moet ergens heen, dus ze wervelt om de zijkanten terug

Lucht kan zich niet op één plek ophopen. Duw er wat naar voren en de lucht eromheen moet uit de weg en wervelt terug. In een vloeistofsimulatie heet die tegendruk druk, en die uitrekenen is het dure deel, omdat elke cel van elke andere afhangt.

Het spel rekent hem uit op vier kopieën van het luchtraster, elk met cellen die twee keer zo groot zijn als de vorige. De grove rasters bepalen goedkoop de grote, trage vorm van de tegendruk, en de fijnere werken het detail bij. Deze truc heet multigrid. Elk zestigste van een seconde komt hij tot op ongeveer 3% van het volledig uitgerekende antwoord (op het windveld van de test), voor de prijs van ongeveer drieënhalve keer over het raster gaan. Gewone rondes over het raster zouden er ongeveer 128 nodig hebben om zo dichtbij te komen. Met al het extra boekhoudwerk meegeteld is dat nog steeds meer dan twintig keer minder werk.

Daarna past het spel maar een deel van die tegendruk toe, en alleen dichtbij. Dat is met opzet. Van boven gezien voegt een ventilator die naar beneden blaast echt lucht toe aan de laag boven het papier, en een vuur haalt er echt wat van weg naar boven. Druk die volledig over de hele pagina wordt opgelost, duwt terug op de vlaag van een ventilator en de trek van een vuur, tot ze een vijfde tot een derde zwakker blazen. Probeer de knoppen hieronder en je ziet de vlaag wegzakken.

De oplossing is ook precies eerlijk. Blaas naar links of blaas naar rechts, en de tegendruk komt uit als een volmaakt spiegelbeeld, tot op de laatste bit hetzelfde. De oudere oplosser die hij verving, helde over: tochtjes trokken 4% sneller naar binnen van links en van boven, en op het raster van de telefoon 13% sneller van onderen.

Onder de motorkap
Lucht die naar voren wordt geduwd, moet ergens heen

Onder de motorkap

Lucht die naar voren wordt geduwd, moet ergens heen

Een afgeschermde Poissonvergelijking met open randen:

(4 + σ) pi,j − pi±1,j − pi,j±1 = divi,j  ·  σ bepaalt hoe ver een duw wordt gevoeld

Het bereik wordt in papiercellen ingesteld, niet in luchtcellen, dus een fijner luchtraster geeft dezelfde wind: binnen 10%, waar de oude oplosser er 68% naast zat. Een test legt allebei vast. De correctie wordt daarna maar voor een deel toegepast, waar een volledige projectie haar helemaal zou toepassen.

Full multigrid: de oplossing begint op het grofste raster en werkt naar boven, waarbij elk fijner raster begint bij het antwoord eronder en één goedkope correctieronde krijgt. De afscherming bepaalt hoeveel niveaus de moeite waard zijn, dus elke paginagrootte krijgt er vier. Rasters met een oneven aantal cellen worden ook netjes grover, dus het raster van de telefoon heeft geen opvulling nodig.

Spiegelexact, omdat elke cel in een ronde alleen de vorige ronde leest, buren in passende paren worden opgeteld, en de grove rasters symmetrisch op de fijne liggen. Al het rekenwerk is in enkele precisie, bij elke stap op dezelfde manier afgerond, dus de WebAssembly-SIMD-kernel (vier cellen tegelijk) en het JavaScript komen tot op de bit overeen: op elke cel over 12 rastervormen, en op vier hele scènes na 150 tikken. Een automatische test controleert dit. De rest van de luchtstap, met zijn willekeurige wervelingen en de verspreiding van gassen, is niet spiegelexact.

Methode: semi-Lagrangiaanse advectie en een drukprojectie, naar Stam 1999, zonder diffusiestap en met maar een deel van een afgeschermde projectie. Multigrid zoals in Brandt 1977 en Briggs 2000, later gevonden en in lijn met de code. Alleen de drukoplossing is WebAssembly; advectie, gassen, oppervlaktewerk en deeltjes zijn JS.

Vier rasters delen één oplossing

De vier niveaus van de oplossing op een desktoppagina. Elke grove cel is vier fijne. De grove rasters bepalen goedkoop de grote vorm van de tegendruk, en de fijne werken het detail bij.

Luchtrasters van 64 bij 48, 32 bij 24, 16 bij 12 en 8 bij 6 cellen over dezelfde pagina
  • 64 × 48
  • 32 × 24
  • 16 × 12
  • 8 × 6
  • het fijne detail
  • middelgrote vormen
  • grote vormen
  • de hele pagina ineens
Multigrid komt dichtbij voor een fractie van het werkEén veld. Werk telt alleen rondes; multigrid besteedt ook wat werk aan residuen en overdracht tussen rasters. Een automatische test houdt de oplossing van het spel binnen een grens.

Full multigrid, zoals het spel het draait, zit er na 3,63 rondes 2,9% naast; gewone rondes zitten er na 64 nog 15,5% naast en na 128 3,1%.

Multigrid komt dichtbij voor een fractie van het werk0,010,1110100050100150200250werk, in rondes over het hele rasterfout, % (log)Multigrid komt dichtbij voor een fractie van het werk0,010,1110100050100150200250werk, in rondes over het hele rasterfout, % (log)
  • gewone gedempte Jacobi-rondes
  • V-cycli vanaf nul (2,69 per stuk)
  • full multigrid, zoals het spel het draait
Gegevenstabel
Multigrid komt dichtbij voor een fractie van het werk
werk, in rondes over het hele rastergewone gedempte Jacobi-rondesV-cycli vanaf nul (2,69 per stuk)full multigrid, zoals het spel het draait
196,3
293
2,6920,6
3,632,9
486,8
5,384,7
876,2
8,071,1
10,760,28
1659,5
16,140,02
3237,3
6415,5
1283,1
2560,18

Bron: Voor deze site berekend met een kopie van de oplosser van het spel op het windveld van zijn eigen test, tegenover een volledig geconvergeerd antwoord.

Een duw wordt alleen dichtbij gevoeldHet bereik is gekozen om te passen bij de wind van de oudere oplosser; het is geen gemeten eigenschap van lucht.

Een duw van één eenheid geeft 0,471 waar hij wordt gegeven, 0,084 op 24 cellen en minder dan 0,002 op 112 cellen.

Een duw wordt alleen dichtbij gevoeld0,00,10,20,30,40,5020406080100afstand tot een duw van één eenheid, papiercellendrukhet bereik van het spelEen duw wordt alleen dichtbij gevoeld0,00,10,20,30,40,5020406080100afstand tot een duw van één eenheid, papie…drukhet bereik van het spel
Gegevenstabel
Een duw wordt alleen dichtbij gevoeld
afstand tot een duw van één eenheid, papiercellenafgeschermde druk
00,471
80,231
160,133
240,084
320,055
400,038
480,026
560,018
640,013
720,0092
960,0034
1120,0018

Bron: Geconvergeerde oplossing van een duw van één eenheid op het raster van 64 × 48, voor deze site berekend met een kopie van de oplosser van het spel.

Probeer het: geef de lucht meer of minder tegendruk De eigen regel van het spel

Een ventilator wordt boven het midden van een desktoppagina gehouden; sleep om hem te verplaatsen, of druk op Verplaats de ventilator. Rood is lucht die uitwaaiert, blauw is lucht die naar binnen wordt getrokken (gemiddeld over 3 × 3 luchtcellen). Deze pagina draait een kopie van de oplosser van het spel. Waar je op let: bij de 0,2 van het spel waaiert de vlaag breed uit met wervelingen eromheen. Zet de tegendruk op 1 zonder afscherming en de snelste lucht van de vlaag zakt ongeveer een kwart. Elke halve seconde lost de pagina ook de wind en zijn spiegelbeeld op en telt de cellen die verschillen.

Een ventilator boven een desktoppagina; kleuren laten zien waar lucht uitwaaiert of naar binnen wordt getrokken, pijlen laten de wind zien
  • rood: lucht waaiert uit
  • blauw: lucht stroomt in
0,20
Bereik
snelste wind
—
piek sinds laatste wijziging
—
divergentie weggehaald deze tik
—
multigridniveaus
—
spiegeltest
—

Een bal die voorbijrolt, kan een kaars uitblazen die hij nooit raakt

Rol een voetbal snel langs een brandende kaars, met een paar millimeter vrij papier ertussen, en de kaars gaat uit. Rol hem langzaam langs dezelfde lijn en de kaars blijft branden. Een test controleert allebei. Klap op het papier vlak naast een kaars en de lucht die onder je handpalm vandaan wordt geperst, blaast haar ook uit. Het zog van een monstertruck laat confetti naast zijn pad opdwarrelen zonder die aan te raken.

De bal weet niets van kaarsen. Terwijl hij beweegt, neemt hij de lucht vlak bij hem mee en duwt hij de lucht eromheen naar voren en om zijn zijkanten terug, in het patroon uit het leerboek voor lucht die om een bewegende cilinder stroomt. De kaars leest de wind bij haar vlam. Boven 40 cellen per seconde is ze uit.

De hand werkt op dezelfde manier. In het uitgebrachte spel roert een hand de lucht met zijn volle snelheid op het scherm, dus een gewone zwaai blaast harder dan de föhn ernaast. De volgende update volgende update schaalt de tocht van een hand naar zijn echte snelheid, in de slowmotion van het spel, en een zwaaiende hand blijft onder de ventilator.

Onder de motorkap
Een bal die voorbijrolt, kan een kaars uitblazen die hij nooit raakt

Onder de motorkap

Een bal die voorbijrolt, kan een kaars uitblazen die hij nooit raakt

Alles wat laag over het papier beweegt, neemt de lucht vlak eronder mee. Buiten zijn omtrek, tot een paar stralen ver, volgt de lucht de 2D-potentiaalstroming van een doublet rond een bewegende cilinder, het patroon uit het leerboek:

doel = (r/d)² · (cos 2θ·ux + sin 2θ·uy, sin 2θ·ux − cos 2θ·uy)

Alleen de vorm komt uit het leerboek. De sterkte is een deel van de snelheid van het lichaam, met een plafond, en de lucht wordt er in een paar tikken naartoe gebracht. Onder een minimumsnelheid roert een beweger niets. Een beweger versnelt lucht alleen in zijn eigen richting, dus een bal in de stroom van een ventilator legt de ventilator niet stil, en elke tik duwen kan niet uit de hand lopen. Een zog telt niet als roeren, dus het krijgt geen willekeurige wervelingen.

Een klap van boven (klap, hamer) is een puf in alle richtingen, op maat van wat er neerkomt en hoe hard, en wordt in één keer toegevoegd.

Probeer het: rol een voetbal langs een kaars De eigen regel van het spel

Een voetbal (straal 18 cellen) rolt steeds opnieuw langs een kaars op een pagina van 320 × 160, de grootte van de eigen test van het spel. Pijlen laten de lucht zien die hij verplaatst. Waar je op let: bij 320 cellen/s en 24 cellen afstand gaat de kaars uit; bij 45 blijft ze branden, zoals in de eigen test van het spel. Zoek de langzaamste rol die haar nog uitblaast, en zet de kaars dan verder weg.

Een voetbal die langs een kaars rolt; pijlen laten de lucht zien die hij duwt
320 cellen/s
24 cellen
wind bij de vlam
—
piek deze keer
—
gaat uit bij
—
kaars
—
Een voetbal die in het spel snel over het papier rolt, een paar centimeter langs een taartkaarsje waarvan de vlam net is uitgegaan, met een grijs rookwolkje dat ernaast wegwaait en vrij papier tussen bal en kaars.
Uit zonder aanraking. De voetbal komt nooit bij de kaars. De lucht die hij duwt wel.

Geuren drijven met de wind mee, en het zware gas van een bruis kan een kaars doven

De lucht draagt meer dan snelheid. Ze bevat acht gassen: rook, het zware CO₂ van een bruis, chloor, vier geuren (zoet, vies, zuur en scherp) en schimmelsporen. Elk ervan drijft mee met de wind, verspreidt zich vanzelf en verdwijnt in zijn eigen tempo in de kamer.

CO₂ is zwaarder dan lucht. Giet azijn op zuiveringszout naast een kaars en het gas van het bruisen gaat op het papier liggen en kruipt naar buiten als gemorst water, sneller waar het dieper ligt. Als het rond de voet van de kaars diep genoeg wordt, krijgt de vlam geen lucht meer en gaat ze uit, zonder zuchtje wind. Een kaars aan de andere kant van de pagina blijft branden. Een vuur wordt gesmoord waar het gas een beetje dieper ligt. Kantel een tablet en het CO₂ loopt naar beneden, terwijl rook omhoog drijft.

Geuren werken op dezelfde manier. Eten op de pagina laat de lucht erboven blijven ruiken, de wind neemt de geur mee benedenwinds, en dieren volgen hem. In een test met een gelijkmatig briesje langs een banaan komen vliegen van benedenwinds aan en vliegen ze de geur op; tijdens het spelen blaast de ventilator alleen zolang je hem vasthoudt, en vliegen vinden eten dat blijft liggen binnen een paar minuten zelf. Een hondje vindt pindakaas ver bovenwinds, verder dan het zou kunnen zien. Echte vliegen draaien binnen een fractie van een seconde nadat ze een geur tegenkomen de wind in Vanbreugel 2014; dat onderzoek vonden we nadat de regel was geschreven, en het klopt ermee. Laat een bal stuiteren op beschimmeld brood in een briesje en na een sprong in de tijd groeit er benedenwinds nieuwe schimmel.

Chloor, van bleekmiddel dat azijn tegenkomt, drijft van de pagina de kamer in. Doe het raam open, zet een masker op of wapper de lucht in beweging, anders moet je uiteindelijk de kamer uit. Met de stofzuiger zwaaien lucht de kamer, omdat de kamer telt hoeveel de lucht beweegt, wat haar ook laat bewegen.

Onder de motorkap
Geuren drijven met de wind mee, en het zware gas van een bruis kan een kaars doven

Onder de motorkap

Geuren drijven met de wind mee, en het zware gas van een bruis kan een kaars doven

Elk gas leeft op het luchtraster en wordt alleen doorgerekend binnen het gebied waar er wat van is. Elke stap drijft het mee met de wind (een zwaar gas glijdt ook naar beneden), verspreidt het zich via een flux die behoudt wat zich verspreidt, lekt het weg aan de rand van de pagina, en vervaagt het.

∂h/∂t = ∇·((D + K h)∇h)

Bij een zwaar gas groeit het verspreiden met de diepte, de dunnelaagvorm van een zwaartekrachtstroming. CO₂ verspreidt zich zo en vervaagt langzaam. Rook is lichter dan lucht en vervaagt snel. Geuren verspreiden zich wijd en blijven hangen. Sporen vervagen nooit.

Een kaars gaat uit zodra het CO₂ rond haar voet dieper is dan een vast deel van de hoogte van haar vlam, en een vuur wordt gesmoord door een iets diepere laag. Het bruisen geeft CO₂ af in verhouding tot het zuiveringszout dat het verbruikt. Een test controleert dat zuiveringszout alleen en azijn alleen de kaars laten branden, dat ze samen haar doven, dat de wind al die tijd onder de uitblaassnelheid van een kaars blijft, en dat een kaars aan de andere kant van de pagina blijft branden.

Geuren: een langzame ronde bemonstert een klein deel van het papier onder elke luchtcel, en nog langzamer als alles rustig is. Die houdt de lucht boven eten minstens op een niveau dat wordt afgelezen van wat daar ligt. Dat is een ondergrens, dus het eten raakt nooit door zijn geur heen. Chloor dat van de pagina drijft, gaat naar één getal voor de kamer, die sneller uitlucht naarmate de lucht erin meer beweegt.

Probeer het: doof kaarsen zonder wind De eigen regel van het spel

Bij de start wordt azijn op een hoopje zuiveringszout gegoten. Drie kaarsen staan op 26, 50 en 84 cellen afstand; de 26 en de 84 komen overeen met de test van het spel. Het spel tekent CO₂ nooit; hier is het gekleurd zodat je het kunt zien. Er is in deze demo helemaal geen wind. Waar je op let: de plas kruipt naar buiten en de dichtstbijzijnde kaars gaat ongeveer een seconde na het gieten uit. Kantel de pagina en giet opnieuw: het gas loopt naar beneden en de diepte bij de verste kaars stijgt.

Zuiveringszout dat bruist naast drie kaarsen; een gekleurde plas CO₂ verspreidt zich over de pagina
  • zuiveringszout
  • kaars uit boven 2,6 cel CO₂
  • 26 cellen verder
  • 50 cellen verder
  • 84 cellen verder
0,00 g
26 cellen verderop
—
kaars
—
50 cellen verderop
—
kaars
—
84 cellen verderop
—
kaars
—
CO₂ op de pagina
—
dooft bij 0,1 × 26
—
In het spel azijn die in belletjes bruist op een hoopje zuiveringszout naast een taartkaarsje dat net is uitgegaan, met een zwarte pit.
Uit door scheikunde. Het bruisen naast de kaars geeft CO₂ af, dat op het papier gaat liggen en de voet van de vlam bereikt. De lucht heeft niet bewogen.

Warmte trekt lucht aan, en wind droogt nat papier en wakkert vlammen aan

Hete lucht stijgt op, dus de lucht langs het papier stroomt naar hete dingen toe, zoals een vuur, een hete beker of een heet strijkijzer. Zet een hete beker neer en in acht seconden trekt hij langzaam een veer naar zich toe; een koude beker doet dat niet, en een test controleert allebei. Het spel weet ook hoe hoog de warmte zit. De vlam van een kaars staat rechtop op haar pit, dus haar warme lucht stijgt daarboven op en laat de confetti rond haar voet met rust. In een run van de echte engine trok een hete beker lucht aan met 20 cellen per seconde, en een brandende kaars alleen trok niets.

Die trek wordt met opzet zacht gehouden. Zijn doel heeft een plafond net onder de snelheid waarbij wind plassen begint te duwen, dus de eigen trek van een vuur laat de verf eromheen grotendeels met rust. Het plafond geldt voor een doel, het is geen harde grens. In runs van de echte engine trok warmte midden op de pagina lucht aan met 23 tot 26 cellen per seconde, haalde een groot vuur (straal 40) 33,5, net over de lijn, en trok warmte bij de rand van de pagina 43 tot 48.

Wind droogt het papier, sneller naarmate hij harder waait. Hete wind droogt veel sneller: de hete lucht van de föhn droogt een paar keer zo snel als de koele lucht van de ventilator bij dezelfde snelheid. Een briesje wakkert een klein vuur aan tot een razend vuur, laat zijn vlammen overhellen en duwt zijn front benedenwinds. Een kaars gaat uit bij 40 cellen per seconde; een losse vlam op brandend papier heeft een veel sterkere wind nodig, en nog meer als er vuur omheen is.

Onder de motorkap
Warmte trekt lucht aan, en wind droogt nat papier en wakkert vlammen aan

Onder de motorkap

Warmte trekt lucht aan, en wind droogt nat papier en wakkert vlammen aan

Hete dingen schrijven warmte in de lucht. Een bron die kleiner is dan een luchtcel, verwarmt alleen zijn deel van de cel. Lucht dicht bij het papier stroomt de helling van een vervaagd warmteveld op, naar een doelsnelheid met een plafond, en de warmte vervaagt binnen een fractie van een seconde, dus bronnen moeten haar blijven aanvullen. Warme lucht stijgt op met een snelheid die groeit met de wortel uit haar warmte, de juiste schaling voor de snelheid van een pluim; de constanten zijn afgesteld. De lucht onthoudt ook van hoe hoog haar warmte kwam, dus warmte die hoog bij een vlam zit, trekt bijna niets aan langs het papier. Luchtwarmte gaat één kant op: de lucht schrijft nooit de temperatuur van het papier.

drogen ∝ windsnelheid × (1 + een extraatje voor hete lucht)

Wind begint net boven het plafond van de trek op het papier te werken, geleidelijk ingevoerd in plaats van ineens aangezet. Vuur leest dezelfde wind: vlammen hellen over en waaieren uit in een briesje, en een vlam wordt uitgeblazen door een sterkere wind, des te meer als er vuur omheen is. Tests controleren dat wind een vuurfront benedenwinds duwt, en dat de hete plek van een kaars met haar vlam meebeweegt.

De trek van warmte blijft meestal onder waar plassen gaan bewegenTwee staven waar meerdere runs uiteenliggen. Lijnen: het plafond van het doel van de trek, de snelheid waarbij wind water begint te verplaatsen, en de snelheid die een kaars uitblaast.

Een brandende kaars trekt 0, een hete beker 20, warmte midden op de pagina 23 tot 26, een groot vuur (straal 40) 33,5 en warmte bij de rand van de pagina 43 tot 48 cellen per seconde.

De trek van warmte blijft meestal onder waar plassen gaan bewegen0102030405060Een brandende kaa…Warmte in het mid…Warmte bij de randtrek naar de warmte, cellen/s30–32: doelplafond, dan beweegt water40 een kaars gaat uitDe trek van warmte blijft meestal onder waar plassen gaan bewegen0204060Een brandende…Een hete bekerWarmte in het…Een groot vuurWarmte bij de…trek naar de warmte, cellen/s30–32: doelplafond, dan bewee…40 een kaars gaat uit
  • laagste run
  • hoogste run
Gegevenstabel
De trek van warmte blijft meestal onder waar plassen gaan bewegen
laagste runhoogste run
Een brandende kaars00
Een hete beker2020
Warmte in het midden2326
Een groot vuur33,533,5
Warmte bij de rand4348

Bron: Trek naar de warmte in cellen per seconde, uit runs van de echte engine.

Dezelfde lucht verbindt kaarsen, vuur, plassen, vliegen en schimmel

Elke ketting hieronder loopt door de lucht en door niets anders. Geen code verbindt het eerste vakje met het laatste.

Gedeeld: zwaar gas (diepte CO₂)

Giet azijn op zuiveringszout naast een kaars

Het CO₂ van het bruisen kruipt naar de voet van de kaars en laat de vlam stikken, terwijl de wind onder de 40 blijft die een kaars uitblaast. Een test controleert het.

Scheikunde en pH

Gedeeld: wind

Houd de ventilator naast een klein vuur

Vlammen hellen over en waaieren uit, en het brandfront wordt benedenwinds geduwd. Een test controleert het.

Warmte en vuur

Gedeeld: wind op het papier

Blaas met een ventilator over een plas

Het water wordt meegeduwd, even ver welke kant je ook op blaast, binnen 10%. Een test controleert het.

Water in papier

Gedeeld: geurgas

Een gelijkmatig briesje langs een banaan, zoals de test het opzet

Vliegen komen van benedenwinds aan en vliegen de geur op naar de banaan. Een test controleert het.

Dieren met een eigen wil

Gedeeld: sporen (gas)

Laat een bal stuiteren op beschimmeld brood in een briesje

Het schudden laat sporen los, het briesje neemt ze mee, en na een sprong in de tijd groeit er nieuwe schimmel op eten benedenwinds. Een test controleert het.

Deeg, schimmel en tijd

Gedeeld: een knijpfilm

Klap op het papier naast confetti

Lucht die onder de handpalm vandaan wordt geperst, duwt de confetti een stukje naar buiten. Een test controleert het.

Dingen die dingen duwen

3,072
Luchtcellen boven een desktoppagina, 64 × 48, elk ongeveer 5 mm breed.
13–17 µs
De drukoplossing per tik in WebAssembly, gemeten toen de kernel werd gebouwd. Het apparaat is niet vastgelegd.
2.9%
Hoe ver de druk van één tik van de volledig opgeloste afligt, voor het werk van ongeveer drieënhalve keer over het raster gaan, plus wat boekhouding (berekend op het windveld van de test die het vastlegt).
0 bits
Verschil tussen de tegendruk op een wind en op zijn spiegelbeeld. Vastgelegd in een test.
10⁻⁵
Het meeste poeder dat wordt gemaakt of verloren terwijl wind het optilt en weer laat landen. Vastgelegd in een test.

Waar we vereenvoudigen, en waarom

Dit is een grove, platte wind op spelsnelheid, afgesteld om er goed uit te zien en goed te werken voor een kind op een tablet. Geen test vergelijkt hem met een echte stroming. Hier staat precies waar hij afwijkt van echte lucht.

In het echt. Lucht beweegt in drie dimensies

In het spel. Eén platte laag wind boven het papier. Hoogte bestaat alleen als getal voor het opstijgen van warme lucht, en om te bepalen of een beweger laag genoeg is om de lucht te roeren.

Waarom dat genoeg is. We kijken van boven op de pagina, en een 3D-raster zou vele malen meer kosten. Een ding dat hoog wordt gehouden, voelt dezelfde wind als een ding op het papier.

In het echt. Lucht is bijna onsamendrukbaar

In het spel. Elke tik maar een deel van een afgeschermde drukcorrectie, dus een deel van de divergentie blijft er met opzet in.

Waarom dat genoeg is. Van boven gezien is een ventilator een bron en een vuur een put. Een volledige oplossing zonder afscherming maakte vlagen en trek een vijfde tot een derde zwakker. Wervelingen zijn zwakker dan echte.

In het echt. Vaste dingen houden de lucht tegen en sturen haar

In het spel. Niets houdt de wind tegen. Er zijn geen muren en de randen van de pagina zijn open. Alleen dingen die bewegen, geven haar vorm.

Waarom dat genoeg is. Kosten en eenvoud. Een beker beschut een kaars niet, en wind gaat dwars door dieren heen.

In het echt. Een bewegend lichaam laat een ingewikkeld zog achter

In het spel. De 2D-potentiaalstroming van een doublet rond een cilinder, met een deel van de snelheid van het lichaam, afgekapt na een paar stralen.

Waarom dat genoeg is. De juiste vorm op afstand voor bijna niets. Geen loslating of wervelstraat, en de sterkte is niet die uit het leerboek.

In het echt. Turbulentie valt trapsgewijs uiteen van grote wervels naar kleine

In het spel. Een paar willekeurige kleine wervelingen plus vorticity confinement, de methode van Fedkiw 2001 (later gevonden, in lijn met de code), alleen even nadat iets de lucht heeft geroerd.

Waarom dat genoeg is. Ziet eruit als vlagen op een raster van 5 mm. Het is willekeurig, niet berekend; een willekeurig getal met een seed houdt het herhaalbaar.

In het echt. Of wind een korrel optilt, hangt af van zijn grootte, dichtheid en kleverigheid

In het spel. Een opwaaisnelheid die groeit met de wortel uit de korrelgrootte, de wet die Bagnold vond voor zand. Dichtheid en cohesie worden genegeerd.

Waarom dat genoeg is. Eén eigenschap, één regel, en fijn gaat voor grof. IJzervijlsel waait op als zout, en heel fijne echte poeders zijn moeilijker op te tillen dan dit zegt, omdat ze plakken. Hier gaat maïzena het eerst.

In het echt. Een geur is moleculen die het eten verlaten

In het spel. Het eten houdt de lucht erboven op een niveau dat wordt afgelezen van wat daar ligt. Er raakt niets op.

Waarom dat genoeg is. Stabiele bronnen uit een kleine steekproef. Een banaan raakt nooit door zijn geur heen.

In het echt. Grote druppels en fijne nevel voelen weerstand naar hun grootte

In het spel. Eén grip op de lucht per soort deeltje. Een druppel voelt de lucht alleen zolang er iets blaast.

Waarom dat genoeg is. Goedkoop, en bogen zien er goed uit. Fijne nevel blijft niet hangen in stilstaande lucht.