phƣơng pháp giải
2.1.7.1 Cách thiết lập các hệ số của ma trận trong thực hành tính toán
Trong lập trình, để tính toán sẽ thực hiện quét lần lƣợt theo từng nhánh sông nối hai nút hợp lƣu (I, J) hoặc nối một nút I với một biên. Do cách qui định chiều dƣơng và cách đánh số thì I bao giờ cũng là nút trong (cũng có thể là nút thƣợng hạ lƣu công trình), còn J có thể là nút hợp lƣu (hay một nút thƣợng/hạ lƣu công trình), có thể là nút biên. Xét một nút I thì sẽ có các thành phần sau đây của ma trận hệ số: aii, aij và vế phải ký hiệu là ci, còn với nút J, một cách tƣơng tự, ma trận hệ số sẽ có các thành phần ajj, aji và vế phải cj. Nhƣ vậy, mỗi lần xét một nhánh sông nối 2 nút
I, J thì ta dùng các biểu thức từ (2-26) đến (2-30) để xây dựng một phần cho các hệ số aii, aij, ajj, aji, ci , cj khi quét tất cả các nhánh thì cũng hoàn tất thiết lập các ma trận trong phƣơng trình (2-36). Chẳng hạn từ (2-27) lƣu hệ số 1 1 i p vào ô nhớ chứa aii (bằng cách cộng dồn); lƣu hệ số 1 i1 i q
p vào ô nhớ chứa aij; lƣu hệ số 1 1 i i r p vào ô nhớ chứa ci; Từ (2-26) lƣu hệ số 1 kN
p vào ô nhớ chứa hệ số ajj ; lƣu hệ số
kN kN q p vào ô nhớ chứa aji ; lƣu hệ số k N k N r p vào ô nhớ chứa hệ số cj .
Với các nhánh biên có nút xuất phát là hợp lƣu, còn nút cuối là biên cho H hoặc cho Q ta sử dụng các công thức (2-30) và (2-31). Thủ tục thiết lập ma trận hệ số sẽ nhƣ sau:
Chẳng hạn từ công thức (2-30), biên lƣu lƣợng Q, lƣu hệ số 1 1 1 m m N m q q p vào ô nhớ chứa hệ số aii, còn hệ số 1 1 1 m m m m N mN b m r q r p Q
p đƣợc lƣu vào ô nhớ chứa
ci ;
Từ công thức (2-31), biên mực nƣớc H, lƣu hệ số
1 1 n p vào ô nhớ chứa hệ số aii , còn hệ số 1 1 1 n n n b n r q H
p đƣợc lƣu vào ô nhớ chứa ci . Lƣu ý rằng quá trình lƣu vào ô nhớ là quá trình cộng dồn, cho nên khi quét hết các nhánh sông thì ma trân hệ số cũng đƣợc thiết lập. Cũng lƣu ý rằng ma trận hệ số aii rất thƣa, vì thế để giải nhanh và tiết kiệm ô nhớ thì cần thêm một ma trận chứa các chỉ số dòng và cột của phần tử khác không trong ma trận nhƣ đƣợc trình bày trong thuật toángiải ở mục dƣới đây.
2.1.7.2 Cách giải hệ phương trình (2-36) hay (2-37)
Trong sơ đồ mạng sông kênh, tại một hợp lƣu I nào đó thƣờng có không quá chín nhánh sông gặp nhau (phổ biến là ba hoặc bốn), vì thế trên mỗi hàng của hệ (2- 37) không có quá mƣời phần tử khác không (thƣờng là bốn hoặc năm). Có nhiều cách giải khác nhau, chẳng hạn giải lặp, giải trực tiếp,... Ở đây sử dụng phƣơng pháp giải ma trận thƣa của Gupta [8]. Cũng có thể sử dụng phƣơng pháp thặng dƣ liên tiếp SOR (Successive OverRelaxation). Phƣơng pháp này giải rất nhanh, đặc biệt đối với bài toán hai chiều, tuy nhiên ngƣời sử dụng cần có kinh nghiệm xử lí khi chọn nhân tử hội tụ.
Phƣơng pháp của Gupta dùng để giải các ma trận thƣa không đối xứng và luôn bảo đảm hội tụ. Theo kết quả so sánh với các phƣơng pháp khác [8], phƣơng pháp của Gupta vừa ít tốn thời gian, ít tốn ô nhớ lƣu trữ, vừa bảo đảm hội tụ. Dƣới đây là tóm tắt phƣơng pháp với một số cải biên nhỏ để có thể sử dụng trong tính nhiều lần cho bài toán phụ thuộc thời gian. Trong tính toáncác phần tử khác không
của ma trận hệ số đƣợc lƣu giữ trong một ma trận, chẳng hạn ma trận A và dùng một ma trận khác, chẳng hạn NCOL, để giữ chỉ số cột của phần tử khác không đó. Cũng dùng một vector cột, chẳng hạn IBANDW, để chứa số các phần tử khác không trên mỗi hàng. Quá trình khử đƣợc bắt đầu với hàng có số phần tử khác không nhỏ nhất. Trong hàng đƣợc khử sẽ chọn phần tử có giá trị tuyệt đối lớn nhất làm phần tử để khử, do đó quá trình khử luôn hội tụ. Một số chi tiết của phƣơng pháp nhƣ sau:
(1)Số lƣợng phần tử khác zero (số không) trên mỗi hàng đƣợc chứa trong mảng
(véc tơ cột) IBANDW. Mảng này đƣợc dùng để tìm hàng trội cũng nhƣ để tính toánvới các hàng khác có chứa phần tử khác 0 trong cột trội.
(2)Hàng có số phần tử khác zero nhỏ nhất đƣợc xác định từ mảng IBANDW.
Hàng này trở thành hàng trội (MINROW). Nếu hàng này không nằm cùng
dãy với MINROW đứng trước, nó sẽ được đổi chỗ với hàng nằm cùng dãy với MINROW đứng trước.
(3)Những phần tử chứa trong MINROW đƣợc dùng để xác định phần tử có giá
trị tuyệt đối lớn nhất. Phần tử lớn nhất này sau đó trở thành phần tử trội. Nhận dạng cột (MAXCOL) của phần tử trội đối với mỗi MINROW đƣợc chứa trong mảng NPIV.
(4)MINROW đƣợc chuẩn hóa bằng cách chia nó cho phần tử trội.
(5)Vì hàng MINROW đƣợc sử dụng nhiều lần để khử cho các phần tử trong MAXCOL của những hàng còn lại, nên về căn bản, thời gian tính toánđƣợc giảm đi do sự tạo ra hai mảng một chiều riêng biệt mới của những phần tử MINROW và các chỉ số cột của chúng (NNCOL).
(6)Đối với mỗi hàng còn lại dƣới MINROW, việc tìm kiếm cột theo cột của NCOL đƣợc tiến hành, dù hàng đó chứa phần tử khác 0 trong MAXCOL hay không thông qua những khả năng sau:
(a)Nếu giá trị chứa trong cột của hàng đƣợc tìm kiếm nhỏ hơn MAXCOL thì
(b)Nếu giá trị chứa trong cột lớn hơn MAXCOL thì hàng này không chứa phần tử MAXCOL và một hàng mới đƣợc lựa chọn.
(c)Nếu giá trị chứa trong cột bằng với MAXCOL thì hàng này (NOPROW)
dùng để khử phần tử trong MAXCOL. Điều này đƣợc thực hiện nhƣ sau: (d)Các phần tử MINROW đƣợc nhân với phần tử âm trong MAXCOL của
NOPROW.
(e)NOPROW và MINROW đƣợc cộng thêm để đạt đƣợc những giá trị mới
của các phần tử trong NOPROW.
(f) Các phần tử nhập vào trong NOPROW nằm bên phải của phần tử bị khử
đƣợc di chuyển sang bên trái, vì vậy loại trừ phần tử khử từ ô chứa.
(g)Tất cả các phần tử còn lại trong NOPROW đƣợc so sánh với một giá trị
ZTEST (các phần tử nhỏ hơn giá trị này đƣợc coi là zero) để thấy bất kỳ phần tử nào dù có khác với phần tử trong MAXCOL hay không đều đƣợc khử. Nếu vậy, thì hàng đƣợc lấp đầy hơn nữa để khử ô chứa zero giữa các phần tử khác zero của hàng. Nếu số lƣợng phần tử khác zero của NOPROW đƣợc tìm thấy trở thành zero thì chƣơng trình dừng lại.
(7)Chƣơng trình tiếp tục lặp cho đến khi một phần tử trội đƣợc lựa chọn cho mỗi hàng và cột.
(8)Sự thay thế ngƣợc sẽ giải phƣơng trình. Nghiệm đƣợc giữ trong vector B.