Lewati ke isi

Ekstensi Subrutin Pengguna

FrontISTR menyediakan sekumpulan subrutin pengguna untuk memperluas fungsionalitas tanpa memodifikasi kode sumber utama. Ekstensi tersebut mencakup implementasi hukum konstitutif oleh pengguna dan integrasi beban eksternal yang ditentukan pengguna. Bab ini mencantumkan titik ekstensi yang tersedia dan keyword pada file kontrol analisis yang digunakan untuk memanggil masing-masing titik tersebut. Untuk rincian argumen subrutin dan prosedur rebuild, lihat Subrutin Pengguna (Panduan Coding).

Ikhtisar Fitur

Titik ekstensi subrutin pengguna dibagi menjadi dua kategori: hukum konstitutif material dan beban eksternal. Pada sisi hukum konstitutif, terdapat empat jalur pemanggilan—elastisitas linear, hiperelastisitas, elastoplastisitas, dan hukum konstitutif serbaguna—yang masing-masing diaktifkan oleh keyword tersendiri. Pada sisi beban eksternal, tersedia jalur yang membaca informasi beban dari file eksternal yang disiapkan pengguna dan menambahkannya ke vektor beban global serta vektor residual. Setiap ekstensi tersedia setelah file template yang disertakan dalam distribusi FrontISTR diedit dan program utama dibangun ulang.

Kategori Ekstensi Keyword Kontrol Analisis Subrutin Pengguna Utama Template yang Diedit
Elastisitas linear pengguna !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Hiperelastisitas pengguna !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Elastoplastisitas pengguna (fungsi luluh dan return mapping) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Hukum konstitutif pengguna serbaguna !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Beban eksternal yang ditentukan pengguna !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Hukum pengerasan yang ditentukan pengguna (jalur yang mempertahankan fungsi luluh bawaan tetapi hanya mengganti kurva pengerasan dengan implementasi pengguna) tidak didukung. Jika diperlukan kurva pengerasan yang ditentukan pengguna, pilih !PLASTIC, YIELD=USER dan ganti seluruh hukum konstitutif elastoplastik dengan implementasi pengguna. Kondisi batas pengguna dan titik ekstensi untuk pemrosesan pengguna selama restart tidak didukung.

!CREEP dengan TYPE=USER tidak didukung. Gunakan !USER_MATERIAL untuk mengimplementasikan hukum konstitutif bergantung waktu sebagai ekstensi pengguna.

Hukum Konstitutif Pengguna

Hukum konstitutif pengguna menyediakan titik masuk untuk mengimplementasikan, dalam subrutin eksternal, hubungan tegangan-regangan yang tidak dapat direpresentasikan oleh model material bawaan. Tersedia empat jalur sesuai kerangka hukum konstitutif bawaan yang bersesuaian: elastisitas linear pengguna, hiperelastisitas pengguna, elastoplastisitas pengguna, dan hukum konstitutif pengguna serbaguna. Pada setiap jalur, di dalam blok !MATERIAL pada data kontrol analisis, tentukan TYPE=USER atau YIELD=USER pada keyword yang bersesuaian. Hingga 100 konstanta pengguna dapat ditentukan dan diteruskan ke subrutin.

Elastisitas Linear Pengguna

Elastisitas linear pengguna adalah jalur di mana pengguna menghitung matriks elastis dalam kerangka deformasi infinitesimal. Ketika !ELASTIC, TYPE=USER ditentukan dalam data kontrol analisis, FrontISTR memperlakukannya sebagai hukum konstitutif deformasi infinitesimal dan memanggil uElasticMatrix (yang mengembalikan matriks elastis \(D\)) selama perhitungan kekakuan elemen serta uElasticUpdate (yang mengembalikan tegangan) selama pembaruan tegangan. Jangan gunakan bersama model hiperelastik atau elastoplastik yang sudah ada.

Hiperelastisitas Pengguna

Hiperelastisitas pengguna adalah jalur untuk menghitung tegangan dan kekakuan tangen dari turunan fungsi energi regangan dalam kerangka deformasi besar (Total Lagrange). Tentukan !HYPERELASTIC, TYPE=USER dalam data kontrol analisis. Subrutin yang dipanggil sama dengan elastisitas linear pengguna, yaitu uElasticMatrix dan uElasticUpdate, dan template fistr1/src/lib/user/uelastic.f90 yang sama digunakan bersama. Karena spesifikasi keyword mengubah apakah FrontISTR memperlakukan implementasi sebagai deformasi infinitesimal atau Total Lagrange, template yang sama tidak dapat digunakan secara bersamaan untuk implementasi deformasi infinitesimal dan deformasi besar. Implementasikan sebagai salah satu dari kedua hukum konstitutif tersebut.

Elastoplastisitas Pengguna

Elastoplastisitas pengguna adalah jalur di mana pengguna mengimplementasikan fungsi luluh dan prosedur return mapping. Tentukan !PLASTIC, YIELD=USER dalam data kontrol analisis. Jalur ini masuk ke cabang yang independen dari fungsi luluh bawaan Mises, Mohr-Coulomb, dan Drucker-Prager. uElastoPlasticMatrix (yang mengembalikan kekakuan tangen elastoplastik \(D\)) dipanggil selama perhitungan kekakuan elemen, uBackwardEuler (yang memetakan trial stress ke true stress dan memperbarui variabel keadaan) selama pembaruan tegangan, dan uElastoPlasticNumStatus (yang mengembalikan jumlah variabel keadaan bernilai real yang harus dipertahankan) selama inisialisasi titik Gauss. Jalur yang hanya mengganti kurva pengerasan dengan implementasi pengguna tidak didukung. Bahkan jika hanya diperlukan kurva pengerasan yang ditentukan pengguna, gunakan jalur ini untuk mengganti seluruh hukum konstitutif elastoplastik dengan implementasi pengguna.

Hukum Konstitutif Pengguna Serbaguna

Hukum konstitutif pengguna serbaguna adalah jalur untuk mengimplementasikan hukum konstitutif yang tidak cocok dalam kerangka elastis, hiperelastik, atau elastoplastik. Tentukan !USER_MATERIAL dalam data kontrol analisis. Secara default, keyword ini ditangani dalam kerangka Updated Lagrange; bila KIRCHHOFF ditentukan, keyword ini ditangani sebagai Total Lagrange. Jumlah variabel keadaan ditentukan dengan NSTATUS. uMatlMatrix (yang mengembalikan kekakuan tangen \(D\)) dipanggil selama perhitungan kekakuan elemen, dan uUpdate (yang memperbarui tegangan dan variabel keadaan) selama pembaruan tegangan.

Meneruskan Konstanta Pengguna dan Variabel Keadaan

Untuk setiap jalur !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER, dan !USER_MATERIAL, konstanta pengguna yang ditulis pada baris data dalam data kontrol analisis (hingga 100) diteruskan langsung ke subrutin melalui argumen matl. Untuk !PLASTIC, YIELD=USER, konstanta elastis yang ditentukan oleh !ELASTIC dan konstanta pengguna yang diberikan melalui baris data !PLASTIC diteruskan.

Untuk hukum konstitutif pengguna serbaguna dan !PLASTIC, YIELD=USER, informasi riwayat dari step sebelumnya (seperti regangan plastik, back stress, dan damage) dapat diteruskan ke implementasi pengguna melalui variabel keadaan fstat dan ditulis kembali pada akhir step. Jumlah variabel keadaan ditentukan, untuk hukum konstitutif pengguna serbaguna, oleh !USER_MATERIAL dan NSTATUS-nya, dan untuk !PLASTIC, YIELD=USER, oleh nilai balik uElastoPlasticNumStatus.

Beban Eksternal yang Ditentukan Pengguna

Beban eksternal yang ditentukan pengguna menyediakan jalur untuk mendefinisikan gaya eksternal yang tidak dapat direpresentasikan oleh beban terpusat, beban terdistribusi, atau gaya benda bawaan. Ketika !ULOAD, FILE=<fname> ditulis dalam data kontrol analisis, FrontISTR meneruskan nama file yang ditentukan ke ureadload, dan informasi yang dibaca oleh implementasi pengguna dipertahankan sebagai data modul.

Tiga subrutin berikut bersesuaian dengan pemanggilan !ULOAD.

  • ureadload: Pada awal analisis, membaca beban yang ditentukan pengguna dari file eksternal yang ditentukan dalam file kontrol. Implementasi pengguna membuka file tersebut dan menyimpan data yang diperlukan dalam variabel modul.
  • uloading: Dipanggil saat merakit vektor beban eksternal untuk setiap step dan menambahkan beban pengguna ke vektor beban global. Nomor step saat ini dan faktor beban diteruskan sebagai argumen.
  • uResidual: Dipanggil saat merakit vektor residual pada setiap iterasi dan menambahkan kontribusi beban pengguna ke vektor residual global. Dipanggil baik dari iterasi nonlinear maupun perhitungan kesetimbangan.

Tidak disediakan titik ekstensi untuk kondisi batas pengguna (ekstensi pengguna terhadap perpindahan yang ditentukan atau kondisi kontak). Jika diperlukan ekstensi pengguna selain gaya eksternal, gunakan keyword bawaan yang bersesuaian atau jalur hukum konstitutif pengguna.

Prosedur Implementasi Subrutin Pengguna

Untuk menggunakan subrutin pengguna, edit file template yang disertakan dalam distribusi sumber FrontISTR, lalu build ulang FrontISTR. Subrutin pengguna tidak dapat diganti pada binary yang telah didistribusikan, sehingga penggunaan ekstensi pengguna memerlukan lingkungan tempat FrontISTR dapat dibangun dari source.

Template subrutin pengguna berada di bawah fistr1/src/lib/user/, dengan file tertentu yang harus diedit untuk setiap kategori ekstensi (lihat tabel pada Ikhtisar Fitur untuk nama file). Pada keadaan awal, file tersebut berisi body subrutin kosong atau contoh implementasi elastis-linear; pengguna menambahkan hukum konstitutif atau definisi bebannya sendiri di sana. Setelah mengedit template, build ulang FrontISTR secara normal dengan CMake dan jalankan analisis dengan executable fistr1 yang dihasilkan.

Rincian seperti arti argumen subrutin, penanganan array variabel keadaan, dan hal-hal yang perlu diperhatikan saat rebuild disediakan pada halaman terkait dalam panduan coding.

Lihat Juga