Slaan oor na inhoud

Gebruikersubroetine-uitbreidings

FrontISTR verskaf ’n stel gebruikersubroetines waarmee funksionaliteit uitgebrei kan word sonder om die hoofbronkode te wysig. Dit dek gebruikersimplementerings van konstitutiewe wette en die integrasie van gebruikergedefinieerde eksterne laste. Hierdie hoofstuk lys die beskikbare uitbreidingspunte en die sleutelwoorde in die analisebeheerfile waarmee elkeen aangeroep word. Vir besonderhede oor subroetine-argumente en herbouprosedures, sien Gebruikersubroetines (Koderingsgids).

Oorsig van funksies

Uitbreidingspunte vir gebruikersubroetines word in twee kategorieë verdeel: materiaalkonstitutiewe wette en eksterne laste. Aan die kant van konstitutiewe wette is daar vier aanroeppaaie—lineêre elastisiteit, hiperelastisiteit, elastoplastisiteit en ’n algemene konstitutiewe wet—waarvan elkeen deur ’n onafhanklike sleutelwoord geaktiveer word. Aan die kant van eksterne laste word ’n pad verskaf wat lasinligting uit ’n eksterne lêer lees wat deur die gebruiker voorberei is, en dit by die globale lasvektor en residuvektor voeg. Elke uitbreiding word beskikbaar nadat die sjabloonlêer wat saam met die FrontISTR-verspreiding ingesluit is, geredigeer en die hoofprogram herbou is.

Uitbreidingskategorie Sleutelwoord vir analisebeheer Belangrikste gebruikersubroetines Sjabloon om te redigeer
Gebruiker-lineêre elastisiteit !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Gebruiker-hiperelastisiteit !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Gebruiker-elastoplastisiteit (vloeifunksie en terugkartering) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Algemene gebruikerkonstitutiewe wet !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Gebruikergedefinieerde eksterne las !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Gebruikergedefinieerde verhardingswette (’n pad wat die ingeboude vloeifunksie behou maar slegs die verhardingskromme met ’n gebruikersimplementering vervang) word nie ondersteun nie. Indien ’n gebruikergedefinieerde verhardingskromme vereis word, kies !PLASTIC, YIELD=USER en vervang die volledige elastoplastiese konstitutiewe wet met ’n gebruikersimplementering. Gebruikerrandvoorwaardes en uitbreidingspunte vir gebruikerverwerking tydens herbegin word nie ondersteun nie.

!CREEP met TYPE=USER word nie ondersteun nie. Gebruik !USER_MATERIAL om ’n tydafhanklike konstitutiewe wet as ’n gebruikersuitbreiding te implementeer.

Gebruikerskonstitutiewe wette

Gebruikerskonstitutiewe wette verskaf ’n toegangspunt om spanning-rek-verhoudings wat nie deur die ingeboude materiaalmodelle voorgestel kan word nie, in ’n eksterne subroetine te implementeer. Vier paaie is beskikbaar volgens die raamwerk van die ooreenstemmende ingeboude konstitutiewe wet: gebruiker-lineêre elastisiteit, gebruiker-hiperelastisiteit, gebruiker-elastoplastisiteit en ’n algemene gebruikerkonstitutiewe wet. Spesifiseer in elke pad, binne die !MATERIAL-blok van die analisebeheerdata, TYPE=USER of YIELD=USER op die ooreenstemmende sleutelwoord. Tot 100 gebruikerkonstantes kan gespesifiseer word en word aan die subroetine oorgedra.

Gebruiker-lineêre elastisiteit

Gebruiker-lineêre elastisiteit is die pad waarin die gebruiker die elastiese matriks binne die infinitesimale vervormingsraamwerk bereken. Wanneer !ELASTIC, TYPE=USER in die analisebeheerdata gespesifiseer word, behandel FrontISTR dit as ’n infinitesimale-vervorming-konstitutiewe wet en roep uElasticMatrix (wat elastiese matriks \(D\) teruggee) tydens die berekening van elementstyfheid en uElasticUpdate (wat spanning teruggee) tydens die spanningopdatering aan. Moet dit nie saam met ’n bestaande hiperelastiese of elastoplastiese model gebruik nie.

Gebruiker-hiperelastisiteit

Gebruiker-hiperelastisiteit is die pad vir die berekening van spanning en raaklynstyfheid uit afgeleides van ’n rekenergie-funksie binne ’n grootvervorming- (Total Lagrange-) raamwerk. Spesifiseer !HYPERELASTIC, TYPE=USER in die analisebeheerdata. Die aangeroepte subroetines is dieselfde uElasticMatrix en uElasticUpdate as vir gebruiker-lineêre elastisiteit, en dieselfde fistr1/src/lib/user/uelastic.f90-sjabloon word gedeel. Omdat die sleutelwoordspesifikasie bepaal of FrontISTR die implementering as infinitesimale vervorming of Total Lagrange behandel, kan dieselfde sjabloon nie gelyktydig vir sowel infinitesimale- as grootvervorming-implementerings gebruik word nie. Implementeer dit as een van die twee konstitutiewe wette.

Gebruiker-elastoplastisiteit

Gebruiker-elastoplastisiteit is die pad waarin die gebruiker die vloeifunksie en terugkarteringsprosedure implementeer. Spesifiseer !PLASTIC, YIELD=USER in die analisebeheerdata. Dit betree ’n tak wat onafhanklik is van die ingeboude Mises-, Mohr-Coulomb- en Drucker-Prager-vloeifunksies. uElastoPlasticMatrix (wat elastoplastiese raaklynstyfheid \(D\) teruggee) word tydens die berekening van elementstyfheid aangeroep, uBackwardEuler (wat proefspanning na ware spanning karteer en toestandveranderlikes opdateer) tydens die spanningopdatering, en uElastoPlasticNumStatus (wat die aantal reële toestandveranderlikes wat behou moet word teruggee) tydens Gauss-punt-inisialisering. ’n Pad wat slegs die verhardingskromme met ’n gebruikersimplementering vervang, word nie ondersteun nie. Selfs wanneer slegs ’n gebruikergedefinieerde verhardingskromme nodig is, gebruik hierdie pad om die volledige elastoplastiese konstitutiewe wet met ’n gebruikersimplementering te vervang.

Algemene gebruikerkonstitutiewe wet

Die algemene gebruikerkonstitutiewe wet is ’n pad vir die implementering van konstitutiewe wette wat nie binne die elastiese, hiperelastiese of elastoplastiese raamwerke pas nie. Spesifiseer !USER_MATERIAL in die analisebeheerdata. By verstek word dit binne die Updated Lagrange-raamwerk behandel; wanneer KIRCHHOFF gespesifiseer word, word dit as Total Lagrange behandel. Die aantal toestandveranderlikes word deur NSTATUS gespesifiseer. uMatlMatrix (wat raaklynstyfheid \(D\) teruggee) word tydens die berekening van elementstyfheid aangeroep, en uUpdate (wat spanning en toestandveranderlikes opdateer) tydens die spanningopdatering.

Oordrag van gebruikerkonstantes en toestandveranderlikes

Vir elk van die !ELASTIC, TYPE=USER-, !HYPERELASTIC, TYPE=USER- en !USER_MATERIAL-paaie word die gebruikerkonstantes wat op datareëls in die analisebeheerdata geskryf is (tot 100), direk deur die matl-argument aan die subroetine oorgedra. Vir !PLASTIC, YIELD=USER word die elastiese konstantes wat deur !ELASTIC gespesifiseer is en die gebruikerkonstantes wat deur die !PLASTIC-datareëls verskaf word, oorgedra.

Vir die algemene gebruikerkonstitutiewe wet en !PLASTIC, YIELD=USER kan geskiedenisinligting van die vorige stap (soos plastiese rek, terugspanning en skade) deur die toestandveranderlike fstat aan die gebruikersimplementering oorgedra en aan die einde van die stap teruggeskryf word. Die aantal toestandveranderlikes word vir die algemene gebruikerkonstitutiewe wet deur !USER_MATERIAL en sy NSTATUS bepaal, en vir !PLASTIC, YIELD=USER deur die terugkeerwaarde van uElastoPlasticNumStatus.

Gebruikergedefinieerde eksterne laste

Gebruikergedefinieerde eksterne laste verskaf ’n pad om eksterne kragte te definieer wat nie deur die ingeboude gekonsentreerde laste, verspreide laste of liggaamskragte voorgestel kan word nie. Wanneer !ULOAD, FILE=<fname> in die analisebeheerdata geskryf word, gee FrontISTR die gespesifiseerde lêernaam aan ureadload, en die inligting wat deur die gebruikersimplementering gelees word, word as moduledata behou.

Die volgende drie subroetines stem ooreen met die aanroep van !ULOAD.

  • ureadload: Lees aan die begin van die analise gebruikergedefinieerde laste uit die eksterne lêer wat in die beheerlêer gespesifiseer is. Die gebruikersimplementering open die lêer en stoor die vereiste data in moduleveranderlikes.
  • uloading: Word aangeroep terwyl die eksterne lasvektor vir elke stap saamgestel word, en voeg die gebruikerslas by die globale lasvektor. Die huidige stapnommer en lasfaktor word as argumente oorgedra.
  • uResidual: Word aangeroep terwyl die residuvektor by elke iterasie saamgestel word, en voeg die bydrae van die gebruikerslas by die globale residuvektor. Dit word vanuit sowel nie-lineêre iterasies as ewewigsberekeninge aangeroep.

Geen uitbreidingspunt word vir gebruikerrandvoorwaardes (gebruikersuitbreidings van voorgeskrewe verplasing of kontakvoorwaardes) verskaf nie. Indien ’n gebruikersuitbreiding anders as ’n eksterne krag vereis word, gebruik die ooreenstemmende ingeboude sleutelwoord of ’n gebruikerkonstitutiewe-wet-pad.

Prosedure vir die implementering van gebruikersubroetines

Om ’n gebruikersubroetine te gebruik, redigeer die sjabloonlêer wat by die FrontISTR-bronverspreiding ingesluit is en herbou daarna FrontISTR. Gebruikersubroetines kan nie in verspreide binêre lêers vervang word nie; die gebruik van ’n gebruikersuitbreiding vereis dus ’n omgewing waarin FrontISTR vanaf bron gebou kan word.

Sjablone vir gebruikersubroetines is onder fistr1/src/lib/user/ geleë, met ’n spesifieke lêer wat vir elke uitbreidingskategorie geredigeer moet word (sien die tabel in Oorsig van funksies vir lêername). In hul aanvanklike toestand bevat die lêers óf leë subroetine-liggame óf ’n voorbeeld van ’n lineêr-elastiese implementering; gebruikers voeg hul eie konstitutiewe wet of lasdefinisie daar by. Nadat die sjabloon geredigeer is, herbou FrontISTR op die gewone manier met CMake en voer die analise uit met die resulterende fistr1-uitvoerbare lêer.

Besonderhede soos die betekenis van subroetine-argumente, hantering van toestandveranderlike-skikkings en voorsorgmaatreëls tydens herbou word op die ooreenstemmende bladsye van die koderingsgids verskaf.

Sien ook