Plan i program dobiva obrise

Plan i program dobiva obrise

Moja ideja da uronim u opću teoriju relativnosti “na naglo” je bila ko da kažem da idem za par mjeseci istrčati Bostonski maraton🙂.

Ne mere to baš samo tako.

Pogotovo ne mere ukoliko ti je (utimativni) cilj napisati C++ kôd  za numeričku simulaciju jednadžbi opće teorije relativnosti.

Back to basic traje već neko vrijeme, i kao što naslov posta kaže, polako dobiva obrise.

Prvo, ono elementarno. Pusti ti tenzore i nijihove transformacije, skalarna i vektorska polja, gradijente i laplacijane, diferencijalne i parcijalne diferencijalne jednadžbe, ajmo mi viditi što ti Zvone znaš odsimulirati s bazična tri Newtonova zakona?

Ergo, točka jedan – collision simulator (za početak u 2D, a onda, ako mi se bude dalo ići u tu matematiku i u 3D). Skup kugli, dane mase i radijusa, u danom volumenu, sa zadanim početnim brzinama.

Go.

“It’s elementary, dear Watson”.

Yep, slažem se. I, kao što će pronicljivo oko uočiti, još daleko od savršenog. Ali je početak.

Kad ga usavršim (što znači optimizaciju da se u razumnom vremenu može odvrtiti simulacija za recimo milijun kugli), slijedi proces “skaliranja”, odnosno svođenja na termodinamičke veličine tlaka i temperature, s ciljem simuliranja realnih (idealnih) plinova u skladu s kinetičkom teorijom plinova.

Preciznije, plan je simulacijom provjeriti sasvim pouzdano točne jednadžbe termodinamike i vidjeti kakve vrijednosti odnosa tlaka, volumena i temperature daje moja simulaciju u odnosu na real thing.

Naravno, svi znamo da atomi u plinu NISU biljarske kugle, i onda se logično nameće pitanje “a kako bi izgledala ta simulacija s realni(ji)m modelom atoma/molekula”?

A kad se nametne neko pitanje, uvijek treba slijediti savjet našeg, sad već pomalo zaboravljenog Ćaće:

Srećom po mene, pa je odgovor na to pitanje jasan – Van der Waalsova sila! Ipak, dodavanje proračuna VdW sile u interakciju “kugli” u simulatoru će biti jedan vrlo, vrlo izazovan poduhvat i ukoliko u turbo paraleliziranoj i optimiziranoj verziji CollisionSimulatora u C++ možda i mogu očekivati da će se moći odsimulirati milijun kugli, s VdW silom to sasvim sigurno neće biti moguće 😂.

Nakon apsolviranja elementarne mehanike i Newtonovih zakona, plan mi je u mix dodati gravitaciju i rotirajuće sustave kao začin (i primjer ne-inercijalnog sustava) … ergo, simulacije na Zemljinoj površini i orbiti. U biti, tu me primarno zanima igranje s koordinatnim sustavima i transformacijama među njima, i hoće li mi se Coriolisova sila pojaviti automatski 😎. Konkretni primjeri koji su u todo listi su kosi hitac, Foucaltovo njihalo i simulacija lansiranja rakete i pozicioniranja satelita u orbitu.

Pod točkom tri je proširenje simulacije na cijeli Solarni sustav, odnosno implementacija pravog N-body gravity simulatora, što je s konceptualnog stajališta isto kao i sve dosad prilično jasno, ali je efikasna numerička simulacija pravi izazov.

I onda dolazimo do elektromagnetizma, gdje konačno planiram pošteno uroniti u stvari koje me doista zanimaju i iskoristiti EM teoriju za temeljito upoznavanje s tenzorskim računom, diferencijalnim formama i geometrijom. Specijalna relativnost, kao integralni dio, će biti pod “posebnim povećalom” ❤️.

Čitajući sve ovo, pažljivi, i ponešto upućeniji čitaoc će postaviti pitanje: “Zašto sve to raditi i implementirati ručno u C++u, kad možeš (skoro) sve to izračunati Mathematicom sto puta jednostavnije?

I to je istina 1-kroz-1! Otprilike 1% vremena koje ću posvetiti izgradnji svojih simulatora bi bilo dovoljno za dovoljno temeljito upoznavanje s Wolfram Mathematicom da sve navedeno izračunam bez problema.

Ali, to je isto k’o s kumpirima ❤️❤️❤️.

Da samo 10% vremena koje potrošim na krumpire (od pripreme, preko sadnje i održavanja do vađenja), potrošim na kucanje nekakvog C++ kôda za šolde, mogao bi cijelu godinu jesti najbolje kumpire koje novac može kupiti.

Al meni je svejedno draže posaditi svoje.

Komentiraj