Bỏ qua

Mở rộng bằng chương trình con người dùng

FrontISTR cung cấp một tập hợp chương trình con người dùng để mở rộng chức năng mà không cần sửa mã nguồn chính. Các chương trình con này bao gồm việc người dùng tự triển khai quan hệ cấu thành và tích hợp tải ngoài do người dùng định nghĩa. Chương này liệt kê các điểm mở rộng có sẵn và các từ khóa trong tệp điều khiển phân tích dùng để gọi từng điểm mở rộng. Để biết chi tiết về đối số chương trình con và quy trình biên dịch lại, xem Chương trình con người dùng (hướng dẫn lập trình).

Tổng quan chức năng

Các điểm mở rộng bằng chương trình con người dùng được chia thành hai nhóm: quan hệ cấu thành vật liệu và tải ngoài. Ở phía quan hệ cấu thành có bốn đường gọi độc lập—đàn hồi tuyến tính, siêu đàn hồi, đàn dẻo và quan hệ cấu thành tổng quát—mỗi đường được kích hoạt bằng một từ khóa riêng. Ở phía tải ngoài, có một đường để đọc thông tin tải từ tệp ngoài do người dùng chuẩn bị rồi cộng vào vectơ tải toàn cục và vectơ phần dư. Mỗi chức năng mở rộng trở nên khả dụng sau khi chỉnh sửa tệp mẫu đi kèm bản phân phối FrontISTR và biên dịch lại chương trình chính.

Loại mở rộng Từ khóa điều khiển phân tích Chương trình con người dùng chính Tệp mẫu cần chỉnh sửa
Đàn hồi tuyến tính do người dùng định nghĩa !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Siêu đàn hồi do người dùng định nghĩa !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Đàn dẻo do người dùng định nghĩa (hàm chảy và ánh xạ trở về) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Quan hệ cấu thành tổng quát do người dùng định nghĩa !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Tải ngoài do người dùng định nghĩa !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Không hỗ trợ quy luật hóa bền do người dùng định nghĩa (đường giữ nguyên hàm chảy tích hợp sẵn và chỉ thay đường cong hóa bền bằng triển khai của người dùng). Nếu cần đường cong hóa bền do người dùng định nghĩa, hãy chọn !PLASTIC, YIELD=USER và thay toàn bộ quan hệ cấu thành đàn dẻo bằng triển khai của người dùng. Điều kiện biên do người dùng định nghĩa và các điểm mở rộng để xử lý tùy biến khi khởi động lại cũng không được hỗ trợ.

!CREEP với TYPE=USER không được hỗ trợ. Hãy dùng !USER_MATERIAL để triển khai quan hệ cấu thành phụ thuộc thời gian dưới dạng mở rộng của người dùng.

Quan hệ cấu thành do người dùng định nghĩa

Quan hệ cấu thành do người dùng định nghĩa là điểm vào để triển khai bằng chương trình con ngoài các quan hệ ứng suất–biến dạng mà các mô hình vật liệu tích hợp sẵn không biểu diễn được. Có bốn đường tương ứng với khuôn khổ của các quan hệ cấu thành tích hợp sẵn: đàn hồi tuyến tính do người dùng định nghĩa, siêu đàn hồi do người dùng định nghĩa, đàn dẻo do người dùng định nghĩa và quan hệ cấu thành tổng quát do người dùng định nghĩa. Với mọi đường, trong khối !MATERIAL của dữ liệu điều khiển phân tích, gắn TYPE=USER hoặc YIELD=USER vào từ khóa tương ứng. Có thể chỉ định tối đa 100 hằng số người dùng và các hằng số này được truyền sang chương trình con.

Đàn hồi tuyến tính do người dùng định nghĩa

Đây là đường trong đó người dùng tính ma trận đàn hồi trong khuôn khổ biến dạng nhỏ. Khi chỉ định !ELASTIC, TYPE=USER trong dữ liệu điều khiển phân tích, FrontISTR xử lý nó như một quan hệ cấu thành biến dạng nhỏ và gọi uElasticMatrix (trả về ma trận đàn hồi \(D\)) khi tính độ cứng phần tử, đồng thời gọi uElasticUpdate (trả về ứng suất) khi cập nhật ứng suất. Không dùng đồng thời với mô hình siêu đàn hồi hoặc đàn dẻo tích hợp sẵn.

Siêu đàn hồi do người dùng định nghĩa

Đây là đường dùng để tính ứng suất và độ cứng tiếp tuyến từ đạo hàm của hàm năng lượng biến dạng trong khuôn khổ biến dạng lớn (Total Lagrange). Chỉ định !HYPERELASTIC, TYPE=USER trong dữ liệu điều khiển phân tích. Các chương trình con được gọi là cùng uElasticMatrixuElasticUpdate như với đàn hồi tuyến tính do người dùng định nghĩa, và cùng dùng chung tệp mẫu fistr1/src/lib/user/uelastic.f90. Vì chỉ định từ khóa quyết định FrontISTR xử lý triển khai theo biến dạng nhỏ hay theo Total Lagrange, không thể dùng đồng thời cùng một tệp mẫu cho cả triển khai biến dạng nhỏ và biến dạng lớn. Hãy triển khai nó như một trong hai quan hệ cấu thành.

Đàn dẻo do người dùng định nghĩa

Đây là đường trong đó người dùng triển khai hàm chảy và thủ tục ánh xạ trở về (return-mapping). Chỉ định !PLASTIC, YIELD=USER trong dữ liệu điều khiển phân tích. Nó đi vào một nhánh độc lập với các hàm chảy tích hợp sẵn Mises, Mohr-Coulomb và Drucker-Prager. uElastoPlasticMatrix (trả về độ cứng tiếp tuyến đàn dẻo \(D\)) được gọi khi tính độ cứng phần tử, uBackwardEuler (ánh xạ ứng suất thử sang ứng suất thực và cập nhật biến trạng thái) được gọi khi cập nhật ứng suất, còn uElastoPlasticNumStatus (trả về số biến trạng thái kiểu số thực cần lưu giữ) được gọi khi khởi tạo điểm Gauss. Không hỗ trợ đường chỉ thay đường cong hóa bền bằng triển khai của người dùng. Ngay cả khi chỉ cần đường cong hóa bền do người dùng định nghĩa, cũng phải dùng đường này để thay toàn bộ quan hệ cấu thành đàn dẻo bằng triển khai của người dùng.

Quan hệ cấu thành tổng quát do người dùng định nghĩa

Đây là đường để triển khai tập trung các quan hệ cấu thành không nằm trong khuôn khổ đàn hồi, siêu đàn hồi hoặc đàn dẻo. Chỉ định !USER_MATERIAL trong dữ liệu điều khiển phân tích. Theo mặc định, nó được xử lý trong khuôn khổ Updated Lagrange; khi chỉ định KIRCHHOFF, nó được xử lý theo Total Lagrange. Số biến trạng thái được chỉ định bằng NSTATUS. uMatlMatrix (trả về độ cứng tiếp tuyến \(D\)) được gọi khi tính độ cứng phần tử, và uUpdate (cập nhật ứng suất và biến trạng thái) được gọi khi cập nhật ứng suất.

Truyền hằng số người dùng và biến trạng thái

Đối với các đường !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER!USER_MATERIAL, các hằng số người dùng ghi trong dòng dữ liệu của dữ liệu điều khiển phân tích (tối đa 100) được truyền nguyên trạng vào đối số matl của chương trình con. Với !PLASTIC, YIELD=USER, các hằng số đàn hồi chỉ định bằng !ELASTIC được truyền cùng với các hằng số người dùng cung cấp qua dòng dữ liệu của !PLASTIC.

Đối với quan hệ cấu thành tổng quát do người dùng định nghĩa và !PLASTIC, YIELD=USER, thông qua biến trạng thái fstat, có thể truyền thông tin lịch sử từ bước trước (như biến dạng dẻo, ứng suất ngược, lượng hư hỏng, v.v.) cho triển khai người dùng và ghi ngược lại khi kết thúc bước. Số biến trạng thái của quan hệ cấu thành tổng quát được xác định trong !USER_MATERIAL bằng NSTATUS, còn đối với !PLASTIC, YIELD=USER thì được xác định bằng giá trị trả về của uElastoPlasticNumStatus.

Tải ngoài do người dùng định nghĩa

Tải ngoài do người dùng định nghĩa là đường để định nghĩa bằng chương trình con người dùng các ngoại lực không thể biểu diễn bằng tải tập trung, tải phân bố hoặc lực thể tích tích hợp sẵn. Khi ghi !ULOAD, FILE=<fname> trong dữ liệu điều khiển phân tích, FrontISTR truyền tên tệp đã chỉ định cho ureadload, và thông tin do triển khai người dùng đọc vào được giữ dưới dạng dữ liệu trong mô-đun.

Ba chương trình con sau tương ứng với việc kích hoạt !ULOAD.

  • ureadload: Khi bắt đầu phân tích, đọc tải do người dùng định nghĩa từ tệp ngoài được chỉ định trong tệp điều khiển. Triển khai người dùng mở tệp và lưu dữ liệu cần thiết vào các biến trong mô-đun.
  • uloading: Được gọi khi lắp ráp vectơ tải ngoài ở mỗi bước và cộng tải người dùng vào vectơ tải toàn cục. Số bước hiện tại và hệ số tải được truyền dưới dạng đối số.
  • uResidual: Được gọi khi lắp ráp vectơ phần dư ở mỗi lần lặp và cộng đóng góp của tải người dùng vào vectơ phần dư toàn cục. Nó được gọi từ cả quá trình lặp phi tuyến và tính toán cân bằng.

Không có điểm mở rộng dành cho điều kiện biên do người dùng định nghĩa (mở rộng người dùng cho chuyển vị chỉ định hoặc điều kiện tiếp xúc). Nếu cần mở rộng người dùng ngoài ngoại lực, hãy sử dụng từ khóa tích hợp sẵn tương ứng hoặc một đường quan hệ cấu thành do người dùng định nghĩa.

Quy trình triển khai chương trình con người dùng

Để sử dụng chương trình con người dùng, hãy chỉnh sửa tệp mẫu có trong bản phân phối mã nguồn FrontISTR rồi biên dịch lại FrontISTR. Không thể thay thế chương trình con người dùng trong các bản nhị phân phân phối sẵn, vì vậy khi dùng mở rộng người dùng cần chuẩn bị môi trường có thể biên dịch FrontISTR từ mã nguồn.

Các tệp mẫu chương trình con người dùng nằm dưới fistr1/src/lib/user/, và tệp cần chỉnh sửa được xác định theo từng loại mở rộng (xem tên tệp trong bảng ở Tổng quan chức năng). Ở trạng thái ban đầu, mỗi tệp có phần thân chương trình con trống hoặc chứa triển khai mẫu của đàn hồi tuyến tính; người dùng bổ sung quan hệ cấu thành hoặc định nghĩa tải của mình vào đây. Sau khi chỉnh sửa tệp mẫu, biên dịch lại FrontISTR như thông thường bằng CMake và chạy phân tích bằng tệp thực thi fistr1 thu được.

Các chi tiết như ý nghĩa của đối số chương trình con, cách xử lý mảng biến trạng thái và các lưu ý khi biên dịch lại được trình bày riêng trên từng trang của hướng dẫn lập trình.

Chủ đề liên quan