Section on Special Construction Engineering N 03/Journal of Science and Technique N 204 (12 2019) Le Quy Don Technical University 36 NGHIÊN CỨU THUẬT TOÁN ĐÁNH LẠI SỐ NÚT KHI GIẢI BÀI TOÁN KHUNG KHÔNG[.]
Trang 1Section on Special Construction Engineering - N.03/Journal of Science and Technique - N.204 (12-2019) - Le Quy Don Technical University
NGHIÊN CỨU THUẬT TOÁN ĐÁNH LẠI SỐ NÚT KHI GIẢI BÀI TOÁN
KHUNG KHÔNG GIAN BẰNG PHẦN MỀM PHẦN TỬ HỮU HẠN
Trần Nhất Dũng *
Học viện KTQS
Tóm tắt
Bài báo đề cập đến vấn đề xây dựng thuật toán đánh lại số nút khi giải bài toán khung không
gian bằng phần mềm phần tử hữu hạn nhằm đạt được tốc độ tính toán cao và giảm nhẹ các đòi
hỏi về bộ nhớ khi tính toán các bài toán kết cấu có số bậc tự do lớn Với cách đánh số này,
thời gian tính của một bài toán có thể giảm hàng chục thậm chí hàng trăm lần, kích thước các
mảng ma trận cũng vì thế mà giảm đi nhiều lần khiến cho các bài toán lớn vẫn có thể giải
được trên các máy tính cá nhân thông thường
Từ khóa: Đánh lại số nút; ma trận độ cứng; kết cấu khung; phần tử hữu hạn
1 Vấn đề thời gian tính toán đối với bài toán kết cấu công trình
Khi xây dựng các chương trình tính toán kết cấu bằng phương pháp phần tử hữu
hạn các lập trình viên thường gặp một trong những trở ngại lớn là vấn đề tốc độ tính
toán Với các bài toán nhỏ và vừa, người ta thường không cảm thấy sự chờ đợi là đáng
kể tuy nhiên khi số lượng nút lên đến hàng ngàn hoặc hàng chục ngàn thì hệ phương
trình đại số tuyến tính [K].{d} = {Q} đối với bài toán kết cấu phẳng sẽ là khoảng 3000
phương trình; đối với kết cấu không gian sẽ là khoảng 6000 phương trình Khi đó, thời
gian tính toán bắt đầu gây cảm giác khó chịu cho người sử dụng Điều đó càng trở nên
rõ rệt hơn khi phải giải các bài toán động lực học với số lượng bước thời gian tính toán
lớn lúc đó hệ phương trình đại số tuyến tính trên sẽ phải giải lại rất nhiều lần và thời
gian tính toán cũng vì thế mà tăng lên đáng kể, đôi khi còn vượt quá khả năng chờ đợi
của người sử dụng, thậm chí không thể giải được [1, 8]
2 Vấn đề cấp phát bộ nhớ khi giải bài toán kết cấu công trình
Cùng với việc chiếm dụng nhiều thời gian tính toán khi giải các bài toán động, còn
là việc chiếm dụng bộ nhớ của các mảng số liệu Khi gặp bài toán lớn, các mảng ma trận
độ cứng, ma trận khối lượng, ma trận cản, ma trận chuyển vị động, ma trận gia tốc, đều
có kích thước khá lớn Ví dụ, một hệ khung không gian có 1000 nút tương ứng mỗi nút có
6 bậc tự do, khi đó mảng ma trận độ cứng nếu chưa qua xử lý sẽ có kích thước là:
* Email: trannhatdung01@gmail.com https://doi.org/10.56651/lqdtu.jst.v2.n02.231.sce
Trang 260006000 = 36.000.000 phần tử, mỗi phần tử đều là các số thực 64 bits
(8 bytes), do vậy kích thước đầy đủ của ma trận [K] sẽ là: 600060008 = 288.000.000
bytes (288 MB)
Tuy nhiên, sẽ có rất nhiều phần tử của ma trận [K] có trị số bằng 0 Chỉ có các
phần tử trên đường chéo chính và một số phần tử lân cận nó là có trị số khác 0 Bên cạnh đó, ma trận lại có tính đối xứng, điều này cho thấy có thể giảm bớt đáng kể kích thước ma trận độ cứng bằng việc chỉ lưu trữ một nửa (trên hoặc dưới) cùng các phần tử trên đường chéo, vả lại cũng không nhất thiết phải lưu trữ toàn bộ các phần tử thuộc nửa trên hay nửa dưới của ma trận mà chỉ cần lưu trữ các phần tử có trị số khác 0 Cho đến nay, các phần mềm phần tử hữu hạn vẫn thường sử dụng một trong hai cách lưu trữ sau:
2.1 Lưu trữ ma trận dưới dạng chiều rộng nửa dải
Cách lưu trữ này kiểm tra để tìm ra hàng nào của ma trận có số phần tử khác 0 lớn
nhất Khi đó ma trận [K] sẽ chuyển từ ma trận vuông nn thành ma trận chữ nhật nnw trong đó nw được gọi là chiều rộng nửa dải của ma trận độ cứng (Hình 1) [3]
n
M Y
S
0
0 0 0
0 0
0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0
Hình 1 Lưu trữ ma trận dưới dạng chiều rộng nửa dải
Chiều rộng nửa dải nw được xác định từ sự sai lệch cực đại của tên nút J và nút I
của tất cả các phần tử thuộc bài toán khung không gian, cụ thể là:
nw = (Max IJ + 1) NED
trong đó:
Max IJ - sai lệch lớn nhất của tên nút I và J trong cùng phần tử, xét cho mọi phần
tử thanh thuộc bài toán hiện xét;
NED - số bậc tự do của 01 nút: Bài toán phẳng NED = 3; bài toán không gian
NED = 6
Ghi chú
- phần tử có trị số 0
0 - phần tử có trị số = 0
nw - chiểu rộng nửa dải
n - tổng số phương trình
n
nw
Trang 32.2 Lưu trữ mảng số liệu dưới dạng ma trận răng cưa (SKYLINE)
Tư tưởng chung của phương pháp lưu trữ này là biến ma trận vuông (mảng 2 chiều) thành ma trận cột (vectơ) Nghĩa là các phần tử của ma trận vuông nếu có trị số khác 0 sẽ được lưu trữ liên tiếp nhau trong ma trận cột, và để quản lý việc truy xuất số liệu ta phải sử dụng một vài mảng phụ để ánh xạ vị trí của phần tử ma trận cột sang ma trận vuông và ngược lại Lúc đó ma trận vuông sẽ được lưu trữ dưới dạng ma trận cột như minh họa sau (Hình 2) [3, 8]:
Hình 2 Minh họa lưu trữ ma trận dưới dạng răng cưa (Skyline)
3 Đánh lại số nút để giảm kích thước ma trận [K]
Hình 3 Hai cách đánh số nút của cùng một bài toán cho hai trị số nw khác nhau
Như đã trình bày ở trên, kích thước ma trận [K] lưu trữ theo dạng chiều rộng nửa dải phụ thuộc rất nhiều vào tham số nw, còn cách lưu trữ theo dạng răng cưa thì phụ
thuộc vào chiều cao của từng cột trong ma trận [K] Song độ lớn của cả tham số nw lẫn
a) nw = ((11-1) + 1) 6 = 66
b) nw = ((5 - 1) + 1) 6 = 30
2
Trang 4
chiều cao cột trong cách lưu trữ dạng răng cưa đều phụ thuộc vào cách đánh số nút của người sử dụng khi lên sơ đồ tính và nhập số liệu Lấy ví dụ như bài toán kết cấu ở hình
4 dưới đây
a) Đánh số nút theo kiểu tuần tự: nw = 768; kích thước [K] = 1.759.656 byte
b) Đánh lại số nút bằng phần mềm: nw = 54; kích thước ma trận [K] = 292.872 byte
Hình 4 Hai cách đánh số nút của cùng một bài toán
Minh họa trên hình 3 và hình 4 cho thấy, cách đánh số như biểu diễn ở hình 3b và 4b có lợi cho việc tính toán hơn là cách đánh số như biểu diễn ở hình 3a, 4a Khi đó chiều rộng nửa dải của ma trận độ cứng theo cách đánh số như ở hình 3b, 4b đều rất nhỏ
so với cách đánh số như ở hình 3a, 4a; Kích thước ma trận độ cứng nếu lưu trữ theo
dạng nửa dải hoặc dạng skyline cũng sẽ giảm rất đáng kể
Minh họa trên hình 3 và hình 4 cũng cho thấy: Với bài toán khung ở hình 3 chỉ gồm 27 nút, người sử dụng có thể khá dễ dàng chọn đánh số lại cho từng nút sao cho
nw là nhỏ nhất Nhưng với ví dụ ở hình 4, bài toán có 149 nút (vẫn là bài toán khá nhỏ),
nhưng là kết cấu 3D, việc yêu cầu người sử dụng phải đánh số sao cho nw nhỏ nhất, sẽ
Trang 5rất khó nếu không nói là không thể Số liệu đánh lại số nút ở hình 4b, là do phần mềm thực hiện, nên hiệu quả đánh số lại cũng lớn hơn rất nhiều so với bài toán khung hình 3 Các minh họa và nhận xét trên cho thấy khi nhập số liệu nút và phần tử nếu biết lựa chọn cách đánh số nút một cách hợp lý thì sẽ rất có lợi cho tính toán và lưu trữ các mảng số liệu Tuy nhiên, việc buộc người sử dụng phải tự lựa chọn cách đánh số nút hợp lý là không thực tế bởi 02 lý do sau:
- Với các bài toán lớn nếu người sử dụng phải tự chọn cách đánh số nút hợp lý sẽ rất dễ dẫn đến các nhầm lẫn do con người luôn có thói quen đánh số theo các quy luật nhất định (hàng dọc hoặc hàng ngang ), mà các cách đánh số đó thông thường lại là bất lợi cho việc tính toán và lưu trữ ma trận
- Với các bài toán kết cấu không gian lớn, khi số lượng nút lên đến hàng ngàn, con người sẽ không thể tự nhận biết được đâu là cách đánh số nút hiệu quả nhất
Do vậy, việc tối ưu hoá đánh số nút cần được thực hiện một cách tự động Thuật toán sau đây được sử dụng để đáp ứng điều đó Thuật toán này không phụ thuộc vào cách đánh số ban đầu của người sử dụng và cũng không làm xáo trộn bất kỳ phần số liệu cũng như kết quả hiển thị nào của bài toán Với việc tối ưu hoá đánh số nút này thời gian thực thi của chương trình có thể giảm từ vài chục đến hàng trăm lần (tuỳ thuộc vào từng bài toán cụ thể) Nội dung của thuật toán đánh lại số nút được mô tả như sau:
- Khai báo các mảng phụ để tham chiếu từ tên nút “ban đầu” (do người sử dụng định nghĩa hoặc do các thuật toán tự sinh) sang tên nút tính toán (do chương trình quản lý) Các mảng phụ này đảm bảo cho việc truy xuất số liệu về tọa độ nút, thuộc tính nút, tải trọng nút, được bảo toàn mà không phải sửa đổi số liệu trong các mảng mô tả khác (mảng số liệu phần tử, mảng số liệu tải trọng, mảng số liệu tọa độ nút, mảng số liệu điều kiện biên )
- Xuất phát từ nút đầu tiên (nút 1) của số liệu “gốc”, đặt tên mới là 1, đặt chỉ số
bắt đầu nStart=1 Thực hiện chu trình đánh số lại theo sơ đồ khối hình 5
- Tính toán chiều rộng nửa dải nw o (khi chưa đánh số lại) và nw 1 (cho trường hợp
đã đánh số lại từ nút 1) So sánh trị số nw o và nw 1 nếu nw 1 < nw o , nghĩa là cách đánh
số lần này hiệu quả hơn lần đánh số trước nên ta lưu lại mảng nID[ ] trong thuật toán đánh số và giá trị nw 1 làm giá trị dự kiến tối ưu (nw = nw1 và RealID[ ] = nID[ ])
- Tăng chỉ số bắt đầu nStart = nStart + 1 Thực hiện lại chu trình đánh số theo sơ
đồ hình 5 Tính toán lại chiều rộng nửa dải của lần đánh số này và so sánh với giá trị đã
nw chọn từ các lần tính toán trước để xác định lại trị số dự kiến tối ưu nw và RealID[ ]
- Tiếp tục tăng trị số nStart = nStart + 1 và thực hiện lại cách đánh số và so sánh trên Dừng tính khi nStart > tổng số nút tính toán Khi đó nw và RealID[ ] chọn được sau n lần phương án đánh số nút sẽ là giá trị nhỏ nhất trong các cách đánh số đã làm
Trang 6Với cách đánh số lại như trên nw và RealID[ ] chọn được sẽ luôn là phương án đánh
số nút hợp lý nhất, cho kết quả kích thước ma trận độ cứng [K] là nhỏ nhất trong số các
phương án đã đánh số Sơ đồ khối của thuật toán đánh số lại được thể hiện trên hình 5
Hình 5 Sơ đồ khối của thuật toán đánh lại số nút
Thuật toán đánh số lại trên đây, được lập trình và tích hợp vào một hàm công cụ
(Function) của phần mềm chuyên dụng mang tên Vn3DPro Bài báo này sẽ sử dụng
phần mềm (xem giao diện hình 6), để thử nghiệm số đánh giá hiệu quả của đánh số lại cho một bài toán nhà khung 8 tầng (cao 29,2m) Khung nhà được thể hiện bởi các phần
tử thanh 3D; sàn các tầng thể hiện như các phần tử tấm 04 nút Sau khi nhập và phát
sinh số liệu, bài toán có: 1551 nút tính toán; 1880 phần tử thanh 3D; 1104 phần tử tấm
04 nút Dạng hình học và sơ đồ nút, sơ đồ phần tử của bài toán thử nghiệm được thể hiện trên hình 6
- Gán các trị số ban đầu cho các biến tham chiếu (mảng nID[ ], nStart = 1, bUse[ ] …);
- Tính chiều rộng nửa dải nw0 của bài toán hiện tại
- Đặt i=1; nw=nw0; RealID[ ]=nID; nContinue=1;
Đếm xem có bao nhiêu phần tử nối đến nút i Đánh
số lại bắt đầu từ nút i, số nút tiếp theo là của các phần tử có chung nút i (các nút i+1 i+n)
- Kiểm tra các nút từ i+1 đến i+n, đếm xem có phần
tử nào chưa đánh số mà có nối đến i+1 i+n không?
Nếu có thì đánh số tiếp i+n+1 i+n+m…
- Tính chiều rộng nửa dải nwi của lần đánh số thứ i
- Giữ lại các giá trị đã đánh số
của lượt tính này
- Đặt nw=nwi
- RealID[ ]=nID
- Đánh dấu lượt tính: nContinue
sai
đúng
(nwi < nw) ?
nContinue=nContinue+1 (nContinue >TS nút)?
Bắt đầu
Kết thúc
Trang 7Hình 6 Bài toán thử nghiệm và phần mềm VN3DPro
Sử dụng Vn3DPro, thực hiện 02 nội dung tính toán (tính nội lực; tính tần số, dạng
dao động riêng), trong 02 trường hợp: không đánh số lại và có đánh số lại Các kết quả đánh giá và thống kê cho 02 trường hợp tính được thể hiện trên hình 7 Kết quả cho thấy trong cả 02 trường hợp (có đánh số lại và không đánh số lại), nội lực, ứng suất và chuyển vị của hai trường hợp tính là hoàn toàn trùng khớp (nghĩa là việc đánh số lại không làm ảnh hướng sai lệch đến kết quả tính toán kết cấu của bài toán) Do khuôn khổ của bài báo nên các nội dung so sánh kết quả nội lực, chuyển vị… không thể trình bày chi tiết tại đây Bài báo sẽ chỉ tập trung phân tích, đánh giá hiệu quả của 02 trường hợp tính, với việc có hoặc không đánh lại số nút cho bài toán khảo sát
a) Phương án không đánh số lại b) Phương án có đánh số lại
Hình 7 Hiệu quả của phương án có đánh số lại so với không đánh số lại
Trang 8Nhận xét:
Khi có đánh số lại thì chiều rộng nửa dải nw đã giảm từ 4920 xuống chỉ còn là 864
(5,81 lần); kích thước ma trận độ cứng (lưu trữ dưới dạng Skyline) từ 125.937.192 byte giảm xuống chỉ còn 35.175.432 byte (3,58 lần)
Thời gian tính toán nội lực khi có đánh số lại giảm từ 24 giây xuống còn 06 giây (giảm 04 lần); thời gian tính toán tần số dao động riêng giảm từ 36 giây xuống còn
08 giây (4,5 lần)
4 Kết luận
Việc đánh lại số nút để giảm thời gian tính toán và giảm kích thước chiếm dụng
bộ nhớ máy tính, là cần thiết và khả thi Thuật toán đánh lại số nút như bài báo đề xuất
là tường minh và có thể lập trình
Đối với các bài toán nhỏ và vừa lợi ích của việc đánh số lại là không rõ rệt tuy nhiên với các bài toán lớn, khi số lượng nút tăng cao, kích thước các ma trận độ cứng
[K], ma trận khối lượng [M], ma trận cản [C],… có thể lên đến hàng chục hoặc hàng
trăm MB thì việc đánh lại số nút sẽ thực sự phát huy và tỏ rõ hiệu quả
Các thử nghiệm số mà bài báo đã trình bày đều cho thấy, việc đánh lại số nút, đã góp phần làm giảm thời gian tính toán từ vài lần, đến hàng chục lần Bài toán thử nghiệm càng lớn thì hiệu quả đánh lại số nút càng rõ rệt
Tài liệu tham khảo
1 Nguyễn Quốc Bảo, Trần Nhất Dũng (2012) Phương pháp phần tử hữu hạn, lý thuyết và lập
trình, tập 1, 2 Nxb Khoa học và Kỹ thuật
2 Bộ Xây dựng TCVN 2737 - 1995: Tải trọng và tác động tiêu chuẩn thiết kế Nxb Xây dựng
3 Trần Nhất Dũng (1999) Tối ưu hoá đánh số nút với việc giải bài toán động lực học công
trình bằng phương pháp phần tử hữu hạn Tạp chí Khoa học và Kỹ thuật, số 87(II-1999),
Học viện KTQS
4 Chu Quốc Thắng (1997) Phương pháp phần tử hữu hạn Nxb Khoa học và Kỹ thuật
5 Lều Thọ Trình (1997) Ổn định và động lực công trình Nxb Hà Nội
6 Đỗ Sanh, Nguyễn Văn Vượng (1997) Cơ học ứng dụng Nxb Hà Nội
7 Robert Sedgewick (1996) Cẩm nang thuật toán Nxb Hà Nội
8 C S Krishnamoorthy (1995) Finite Element Analysis - Theory and Programming New Delhi
9 K Bathe, E Wilson (1976) Numerical Methods in Finite Element Analysis New Jersey
10 David J Kruglinski (1995) Inside Visual C ++ Microsoft Press
Trang 9RESEARCHING ALGORITHM FOR REDEFINING NODE NUMBER
TO SOLVE 3D FRAMES BY FINITE ELEMENT SOFTWARE
Abstract: The paper builds an algorithm to redefine the number of nodes when solving
the 3 dimension frames problem by using finite element software to achieve high computing speed and mitigate memory requirements in the case of calculating large structural problems With this numbering, the calculation time of those problems can be reduced by dozens or hundreds of times, the size of matrix arrays also reduces many times so that large problems can still be solved on the PC
Keywords: Redefine node number; frame structure; finite element method
Ngày nhận bài: 15/11/2019; Ngày nhận bản sửa lần cuối: 15/12/2019; Ngày duyệt đăng: 24/12/2019