Program Graw służy do obliczenia macierzy ruchu na podstawie zadanych potencjałów. Procedura obliczeniowa jest oparta na standardowym modelu grawitacyjnym, który można zapisać w postaci:
Tij = Ci * Dj * Pi * Aj * Fij
gdzie: Tij - liczba podróży z rejonu "i" do rejonu "j"
Fij - opór pomiędzy rejonami "i" i "j"
Pi - produkcja w rejonie "i"
Aj - atrakcja w rejonie "j"
Współczynniki Ci i Dj powinny być wybrane tak aby suma "i"-tego wiersza macierzy była równa produkcji w rejonie "i" - Pi, a suma "j"-tej kolumny była równa atrakcji w rejonie "j" - Ai. Wyznaczenie tych współczynników jest zadaniem programu.
Jeśli opór pomiędzy rejonami jest stały mamy wtedy do czynienia z tzw. modelem proporcjonalnym. Jest on znacznie prostszy obliczeniowo. Znajduje on zastosowanie dla stosunkowo niewielkich obszarów lub dla ruchu docelowo-źródłowego.
Dane wejściowe
Dane wejściowe to potencjały ruchu wewnętrznego i docelowo-źródłowego oraz macierz tranzytu. Dane te powinny być zapisane w standardowym pliku ASCII o następującej budowie.
Każda linia stanowi rekord danych podzielony na szereg pól. Pola mogą być oddzielane przecinkami, średnikami lub znakami tabulacji. Oczywiście nie trzeba tworzyć tego formatu ręcznie, gdyż praktycznie każdy arkusz kalkulacyjny pozwala zapisać dane przynajmniej na jeden z wymienionych wyżej sposobów.
Pierwsza linia to rekord nagłówkowy zawierający nazwy pól. Z kolei pierwsze pole w każdym rekordzie (za wyjątkiem pierwszego) zawiera numer rejonu. Dalej występują pary pól oznaczające wartości produkcji i atrakcji dla danego rejonu. Fragment przykładowych danych można obejrzeć poniżej.
Rejon D-P.P D-P.A P-D.P P-D.A
1 0,000 18,293 56,912 0,000
2 7,529 17,535 54,553 23,423
3 6,330 11,232 34,944 19,694
4 4,856 12,511 38,925 15,107
6 15,588 8,417 26,186 48,497
7 8,055 33,421 103,976 25,061
8 12,247 78,434 244,016 38,102
Macierz tranzytu jest wprowadzana w podobnym formacie. Ponieważ nie jest możliwe otrzymanie macierzy tranzytu za pomocą modelu grawitacyjnego, musi być ona określona przy pomocy innych metod (np. ankiet lub zapisywania numerów rejestracyjnych pojazdów). Fragment przykładowej macierzy wygląda następująco:
Wlot A-4 E-7 E-4 K938
101 0 25 77 6
102 25 0 72 6
103 77 72 0 19
104 6 6 19 0
W ten sposób przygotowane dane wejściowe wczytujemy do programu przez Plik|Otwórz (F3). Poprawność procesu konwersji można sprawdzić przeglądając wartości potencjałów: Potencjały|Ruch wewnętrzny (Alt-W), Potencjały|Ruch doc/źr. (Alt-D) i Potencjały|Ruch tranzytowy (Alt-T).

Funkcja oporu odzwierciedla nieliniową zależność oporu od odległości (po sieci lub w linii prostej) między rejonami. Przyjęto dwu-parametrową rodzinę funkcji:
F(x) = xalfa * exp( -x / beta )
Jeśli alfa jest równe zeru to jest zwykła funkcja wykładnicza. W przeciwnym przypadku jej kształt jest zbliżony do pokazanego na rysunku.

Oba parametry mogą przyjmować jedynie wartości nieujemne. W przypadku gdy są równe zeru, będzie wybrany rozkład proporcjonalny. Parametr beta ma wymiar odległości wyrażonej w metrach.
Parametry funkcji oporu podajemy dla każdej motywacji osobno.
Rozkład przestrzenny
W przypadku rozkładu proporcjonalnego można nie zwracać uwagi na opcje generacji macierzy (Plik|Generuj macierze), gdyż są one bez znaczenia. W przeciwnym przypadku należy podać nazwę pliku z siecią drogową, a także typ odległości (po sieci lub w linii prostej). Jeśli są generowane macierze ruchu ciężkiego a w sieci występują ograniczenia dla tego rodzaju ruchu, należy jeszcze zaznaczyć ograniczenia s.c.

Czas trwania procesu generacji macierzy zależy w dużym stopniu od rodzaju i wielkości danych. Po jego zakończeniu należy zapisać wygenerowane macierze. Podaje się trzy pliki dla:

Po wykonaniu tych wszystkich kroków można przejść do etapu przydziału ruchu.