Mở rộng bằng chương trình con người dùng¶
FrontISTR cung cấp một nhóm 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. Phạm vi gồm triển khai quan hệ cấu thành do người dùng định nghĩa 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 có thể mở rộng 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 đó. Đối với đặc tả chi tiết của đối số chương trình con và quy trình biên dịch lại, hãy 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 hệ: 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 người dùng 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ó đường đọc thông tin tải từ tệp bên ngoài do người dùng chuẩn bị rồi cộng vào vectơ tải tổng thể và vectơ dư. Tất cả các đường này đều có thể sử dụng sau khi chỉnh sửa tệp mẫu đi kèm bản phân phối FrontISTR rồi biên dịch lại phần 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 | Mẫu cần chỉnh sửa |
|---|---|---|---|
| Đàn hồi tuyến tính người dùng | !ELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Siêu đàn hồi người dùng | !HYPERELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Đàn dẻo người dùng (hàm chảy dẻo và ánh xạ trở về) | !PLASTIC, YIELD=USER |
uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus |
fistr1/src/lib/user/uyield.f90 |
| Quan hệ cấu thành người dùng tổng quát | !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 cứng người dùng (đường giữ nguyên hàm chảy dẻo tích hợp và chỉ thay đường cong hóa cứng bằng triển khai của người dùng). Nếu cần tự triển khai đường cong hóa cứng, 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. Cũng không hỗ trợ điểm mở rộng cho điều kiện biên người dùng hoặc xử lý người dùng khi tái khởi động.
!CREEP không hỗ trợ TYPE=USER. Khi triển khai quan hệ cấu thành phụ thuộc thời gian bằng người dùng, hãy dùng !USER_MATERIAL.
Quan hệ cấu thành người dùng¶
Quan hệ cấu thành người dùng là điểm vào để triển khai bằng chương trình con bên ngoài các quan hệ ứng suất–biến dạng không thể biểu diễn bằng mô hình vật liệu tích hợp. Tùy theo khung quan hệ cấu thành tích hợp tương ứng, có bốn đường: đàn hồi tuyến tính người dùng, siêu đàn hồi người dùng, đàn dẻo người dùng và quan hệ cấu thành người dùng tổng quát. Trong mọi đường, trong khối !MATERIAL của dữ liệu điều khiển phân tích, thêm 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à chúng được truyền sang chương trình con.
Đàn hồi tuyến tính người dùng¶
Đàn hồi tuyến tính người dùng là đường trong đó người dùng tính ma trận đàn hồi trong khung 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ư quan hệ cấu thành biến dạng nhỏ và gọi uElasticMatrix (trả về ma trận đàn hồi \(D\)) và uElasticUpdate (trả về ứng suất) tại các thời điểm tính độ cứng phần tử và cập nhật ứng suất. Không sử dụng cùng với mô hình siêu đàn hồi hoặc đàn dẻo có sẵn.
Siêu đàn hồi người dùng¶
Siêu đàn hồi người dùng là đườ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 khung 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 giống với đàn hồi tuyến tính người dùng, tức uElasticMatrix và uElasticUpdate, và cùng dùng mẫu fistr1/src/lib/user/uelastic.f90. Do chỉ định ở phía từ khóa làm FrontISTR chuyển giữa xử lý biến dạng nhỏ và Total Lagrange, không thể dùng chung một mẫu đồng thời cho cả biến dạng nhỏ và biến dạng lớn. Hãy triển khai theo một trong hai quan hệ cấu thành.
Đàn dẻo người dùng¶
Đàn dẻo người dùng là đường để người dùng triển khai hàm chảy dẻo 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 dẻo tích hợp Mises, Mohr-Coulomb và Drucker-Prager. Khi tính độ cứng phần tử, uElastoPlasticMatrix được gọi để trả về độ cứng tiếp tuyến đàn dẻo \(D\); khi cập nhật ứng suất, uBackwardEuler được gọi để ánh xạ ứng suất thử về ứng suất thực và cập nhật biến trạng thái; khi khởi tạo điểm Gauss, uElastoPlasticNumStatus được gọi để trả về số biến trạng thái số thực cần lưu giữ. Không hỗ trợ đường chỉ thay đường cong hóa cứng bằng triển khai người dùng. Ngay cả khi chỉ cần tự triển khai đường cong hóa cứng, 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 người dùng.
Quan hệ cấu thành người dùng tổng quát¶
Quan hệ cấu thành người dùng tổng quát là đường dùng để triển khai một lần các quan hệ cấu thành không nằm trong khung đà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 khung Updated Lagrange; khi có chỉ định KIRCHHOFF, nó được xử lý theo Total Lagrange. Số biến trạng thái được chỉ định bằng NSTATUS. Khi tính độ cứng phần tử, uMatlMatrix được gọi để trả về độ cứng tiếp tuyến \(D\); khi cập nhật ứng suất, uUpdate được gọi để cập nhật ứng suất và biến trạng thái.
Truyền hằng số người dùng và biến trạng thái¶
Trong tất cả các đường !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER và !USER_MATERIAL, các hằng số người dùng (tối đa 100) ghi trong các dòng dữ liệu của dữ liệu điều khiển phân tích đượ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ùng với các hằng số đàn hồi chỉ định bởi !ELASTIC, các hằng số người dùng được cho qua các dòng dữ liệu của !PLASTIC cũng được truyền vào.
Trong quan hệ cấu thành người dùng tổng quát và !PLASTIC, YIELD=USER, có thể truyền thông tin lịch sử của bước trước (biến dạng dẻo, ứng suất ngược, lượng hư hỏng, v.v.) vào triển khai người dùng qua biến trạng thái fstat và ghi trở lại khi kết thúc bước. Số biến trạng thái đối với quan hệ cấu thành người dùng tổng quát được xác định trong !USER_MATERIAL bằng NSTATUS, còn đối với !PLASTIC, YIELD=USER đượ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 những 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. Khi ghi !ULOAD, FILE=<fname> trong dữ liệu điều khiển phân tích, FrontISTR truyền tên tệp được chỉ định cho ureadload, và thông tin do triển khai người dùng đọc được sẽ được lưu giữ dưới dạng dữ liệu trong mô-đun.
Việc kích hoạt !ULOAD tương ứng với ba chương trình con sau.
ureadload: Khi bắt đầu phân tích, đọc tải do người dùng định nghĩa từ tệp bên ngoài được chỉ định trong tệp điều khiển. Phía triển khai người dùng mở tệp và lưu dữ liệu cần thiết vào biến trong mô-đun.uloading: Được gọi khi lắp ráp vectơ tải ngoài của từng bước và cộng tải người dùng vào vectơ tải tổng thể. 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ơ dư trong mỗi lần lặp và cộng đóng góp của tải người dùng vào vectơ dư tổng thể. Nó được gọi từ cả lặp phi tuyến và tính toán cân bằng.
Không có điểm mở rộng cho điều kiện biên người dùng (mở rộng người dùng cho chuyển vị quy đị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 dùng từ khóa tích hợp tương ứng hoặc đường quan hệ cấu thành người dùng.
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, cần chỉnh sửa các tệp mẫu có trong bản phân phối mã nguồn FrontISTR rồi biên dịch lại phần chính của FrontISTR. Không thể thay thế chương trình con người dùng trong bản nhị phân phân phối sẵn, vì vậy khi sử dụng mở rộng người dùng cần chuẩn bị môi trường biên dịch từ mã nguồn.
Các mẫu chương trình con người dùng được đặt 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 bảng trong Tổng quan chức năng để biết tên tệp). Ở trạng thái ban đầu, phần thân chương trình con trong các tệp này để trống hoặc là triển khai mẫu đà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 đó. Sau khi chỉnh sửa mẫu, biên dịch lại phần chính FrontISTR bằng CMake như bình thường và thực hiện phân tích bằng tệp thực thi fistr1 thu được.
Chi tiết về ý nghĩa đối số chương trình con, cách xử lý mảng biến trạng thái và các điểm cần lưu ý khi biên dịch lại được chia theo từng trang trong hướng dẫn lập trình.
- Chương trình con người dùng (tổng quan)
- Quan hệ cấu thành người dùng tổng quát
umat.f - Đàn dẻo người dùng
uyield.f - Tải ngoài do người dùng định nghĩa
uload.f - Đàn hồi tuyến tính và siêu đàn hồi người dùng
uelastic.f
Mục liên quan¶
- Dữ liệu vật liệu — Các lựa chọn quan hệ cấu thành và danh sách mô hình tích hợp
- Điều kiện biên và tải — Điều kiện biên và tải tích hợp
- Chương trình con người dùng (Hướng dẫn lập trình) — Đặc tả đối số chương trình con và quy ước triển khai
- !USER_MATERIAL — Cú pháp từ khóa quan hệ cấu thành người dùng tổng quát
- !ELASTIC — Từ khóa đàn hồi tuyến tính gồm
TYPE=USER - !HYPERELASTIC — Từ khóa siêu đàn hồi gồm
TYPE=USER - !PLASTIC — Từ khóa đàn dẻo gồm
YIELD=USER