{"id":38941878,"url":"https://github.com/mwarzynski/uw_heatflow","last_synced_at":"2026-01-17T15:54:27.333Z","repository":{"id":80165164,"uuid":"160058516","full_name":"mwarzynski/uw_heatflow","owner":"mwarzynski","description":"Heatflow simulation written in Assembler.","archived":false,"fork":false,"pushed_at":"2018-12-20T15:01:11.000Z","size":7800,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-01-28T20:38:04.539Z","etag":null,"topics":["assembler","assembler-x86","c","flow","heat","university-of-warsaw"],"latest_commit_sha":null,"homepage":"","language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mwarzynski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-12-02T14:59:03.000Z","updated_at":"2022-04-08T22:40:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"eb450c88-f7bb-43a2-baac-0117a15b7253","html_url":"https://github.com/mwarzynski/uw_heatflow","commit_stats":{"total_commits":19,"total_committers":1,"mean_commits":19.0,"dds":0.0,"last_synced_commit":"c8318a783f044cad96c013cdd480c89f33a090b3"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mwarzynski/uw_heatflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwarzynski%2Fuw_heatflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwarzynski%2Fuw_heatflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwarzynski%2Fuw_heatflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwarzynski%2Fuw_heatflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mwarzynski","download_url":"https://codeload.github.com/mwarzynski/uw_heatflow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwarzynski%2Fuw_heatflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28511851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assembler","assembler-x86","c","flow","heat","university-of-warsaw"],"created_at":"2026-01-17T15:54:26.759Z","updated_at":"2026-01-17T15:54:27.326Z","avatar_url":"https://github.com/mwarzynski.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zadanie 2: symulacja rozchodzenia się ciepła\n\n![](animation.gif)\n\nNaszym celem będzie napisanie funkcji symulujących fikcyjny przepływ\npewnej wartości pseudofizycznej (o wartościach z dziedziny liczb \nrzeczywistych) przez prostokątną siatkę.  Dla ułatwienia nazwijmy tę\nwartość ciepłem.  Nasza symulacja będzie oczywiście bardzo uproszczona,\nale przypominająca tzw. metody elementów skończonych.\n\nDana jest prostokątna siatka w postaci tablicy dwuwymiarowej\n(oczywiście program może na swoje potrzeby trzymać to w innej postaci,\nale mówimy o zewnętrznej, ,,logicznej'' reprezentacji).  W każdej\nkomórce przechowujemy bieżącą wartość temperatury w tej okolicy.\n\nPowyżej górnego i dolnego brzegu siatki (,,na granicy'') znajdują się\ngrzejniki -- źródła dopływu ciepła o ustalonej na czas symulacji \ntemperaturze.  Natomiast na zewnątrz lewego i prawego brzegu są miejsca\nucieczki ciepła -- również o ustalonej, ale dużo niższej temperaturze.\nNazwijmy je chłodnicami.\n\nSymulacja odbywać się będzie krokowo.  W każdym kroku komórka siatki\noddaje ciepło tym sąsiadom, którzy mają niższą temperaturę niż ona.\nUtrata jest proporcjonalna do różnicy temperatur.  Równocześnie komórka\npobiera ciepło od tych sąsiadów, którzy mają wyższą temperaturę.\nMówiąc po prostu, zmiana wartości temperatury komórki jest proporcjonalna\ndo sumy różnic temperatur z jej sąsiadami.  Wielkość zmiany określa\nwspółczynnik proporcjonalności, jednakowy dla wszystkich komórek (czyli\nzakładamy jednakowe przewodnictwo cieplne wszystkich komórek).\n\nDla komórek wewnętrznych za sąsiednie uznajemy 2 komórki po lewej\ni prawej stronie oraz 2 komórki powyżej i poniżej.  Zewnętrzne komórki \nbrzegowe nie zmieniają temperatury (choć dostarczają ciepło lub je\n,,kradną'').  Na rysunku poniżej pokazano sąsiadów komórki oznaczonej \ngwiazdką.\n\nKażdy krok to równoczesne policzenie przyrostów dla każdej komórki.\nPo obliczeniu przyrostów dla wszystkich komórek są one do nich dodawane\ni rozpoczynamy kolejny krok. \n\nCzęść napisana w języku wewnętrznym powinna eksportować procedury\nwołane z C:\n```c\nvoid start (int szer, int wys, float *M, float *G, float *C, float waga)\n```\nPrzygotowuje symulację, np. inicjuje pomocnicze struktury.\nArgumentami są: rozmiary matrycy, początkowa zawartość matrycy\n(temperatury), grzejników i chłodnic oraz wspólczynnik proporcjonalności.\n```c\nvoid step ()\n```\nPrzeprowadza pojedynczy krok symulacji.  Po jej wykonaniu macierz\n\u003ccode\u003eM\u003c/code\u003e (przekazana przez parametr procedury \u003ccode\u003estart\u003c/code\u003e) zawiera nowy stan.\n\nProcedury w asemblerze powinny w jak największy stopniu wykorzystywać\nmożliwości instrukcji SSE (do SSE3).  W związku z tym dokładna postać \nwewnętrzna matrycy M nie jest określona (np. mogą to być dwie macierze), \npowinno być jednak możliwe jej łatwe zainicjowanie w programie w C \nprzez wczytanie początkowej zawartości z pliku.\n\nTestowy program główny napisany w C powinien zainicjować matrycę M\noraz wektory G i C (przez wczytanie ich zawartości z pliku).\nNazwę pliku, wspólczynnik proporcjonalności i liczbę kroków symulacji\npodajemy jako argumenty wywołania programu z linii poleceń.\n\nPo (prawie) każdym wywołaniu procedury `step()`\npowinno się wyświetlać aktualną sytuację, np. tekstowo, jako\nmacierz liczb, po czym czekać na naciśnięcie \u0026lt;Enter\u0026gt;.\n\nPostać danych na pliku\n```\nszerokość wysokość\npierwszy wiersz M\n....\nostatni wiersz M\nwiersz z wartościami grzejników\nwiersz z wartościami chłodnic\n```\n\nMile widziany prosty plik testowy z danymi.\n\nRozwiązania nie zawierające pliku `Makefile` nie będą sprawdzane.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwarzynski%2Fuw_heatflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmwarzynski%2Fuw_heatflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwarzynski%2Fuw_heatflow/lists"}