Hyppää sisältöön

Käyttäjäaliohjelmalaajennukset

FrontISTR tarjoaa joukon käyttäjäaliohjelmia, joilla toimintoja voidaan laajentaa muuttamatta pääohjelman lähdekoodia. Ne kattavat käyttäjän toteuttamat konstitutiiviset lait ja käyttäjän määrittämien ulkoisten kuormien integroinnin. Tässä luvussa luetellaan käytettävissä olevat laajennuspisteet ja analyysin ohjaustiedoston avainsanat, joilla kukin niistä kutsutaan. Katso aliohjelmien argumenttien ja uudelleenkäännön yksityiskohdat kohdasta Käyttäjäaliohjelmat (ohjelmointiopas).

Toimintojen yleiskatsaus

Käyttäjäaliohjelmien laajennuspisteet jakautuvat kahteen luokkaan: materiaalien konstitutiivisiin lakeihin ja ulkoisiin kuormiin. Konstitutiivisille laeille on neljä kutsupolkua—lineaarinen elastisuus, hyperelastisuus, elastoplastisuus ja yleiskäyttöinen konstitutiivinen laki—joista kukin aktivoidaan omalla avainsanallaan. Ulkoisille kuormille on polku, joka lukee kuormatiedot käyttäjän laatimasta ulkoisesta tiedostosta ja lisää ne globaaliin kuormavektoriin ja residuaalivektoriin. Kukin laajennus tulee käyttöön, kun FrontISTR-jakeluun sisältyvää mallipohjatiedostoa on muokattu ja pääohjelma on käännetty uudelleen.

Laajennusluokka Analyysin ohjauksen avainsana Keskeiset käyttäjäaliohjelmat Muokattava mallipohja
Käyttäjän lineaarinen elastisuus !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Käyttäjän hyperelastisuus !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
Käyttäjän elastoplastisuus (myötöfunktio ja palautuskuvaus) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
Yleiskäyttöinen käyttäjän konstitutiivinen laki !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
Käyttäjän määrittämä ulkoinen kuorma !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

Käyttäjän määrittämiä lujittumislakeja (polkua, jossa sisäinen myötöfunktio säilytetään ja vain lujittumiskäyrä korvataan käyttäjän toteutuksella) ei tueta. Jos käyttäjän määrittämä lujittumiskäyrä tarvitaan, valitse !PLASTIC, YIELD=USER ja korvaa koko elastoplastinen konstitutiivinen laki käyttäjän toteutuksella. Käyttäjän reunaehtoja ja restartin aikaisia käyttäjäkäsittelyn laajennuspisteitä ei tueta.

!CREEP ja TYPE=USER -yhdistelmää ei tueta. Toteuta ajasta riippuva konstitutiivinen laki käyttäjälaajennuksena käyttäen !USER_MATERIAL-määritystä.

Käyttäjän konstitutiiviset lait

Käyttäjän konstitutiiviset lait tarjoavat ulkoisen aliohjelman rajapinnan sellaisten jännitys–venymä-suhteiden toteuttamiseen, joita sisäiset materiaalimallit eivät pysty esittämään. Käytettävissä on neljä polkua vastaavan sisäisen konstitutiivisen lain kehyksen mukaan: käyttäjän lineaarinen elastisuus, käyttäjän hyperelastisuus, käyttäjän elastoplastisuus ja yleiskäyttöinen käyttäjän konstitutiivinen laki. Kussakin polussa analyysin ohjaustietojen !MATERIAL-lohkossa määritetään vastaavalla avainsanalla TYPE=USER tai YIELD=USER. Käyttäjävakioita voidaan määrittää enintään 100, ja ne välitetään aliohjelmalle.

Käyttäjän lineaarinen elastisuus

Käyttäjän lineaarinen elastisuus on polku, jossa käyttäjä laskee elastisen matriisin infinitesimaalisen muodonmuutoksen kehyksessä. Kun analyysin ohjaustiedoissa määritetään !ELASTIC, TYPE=USER, FrontISTR käsittelee sen infinitesimaalisen muodonmuutoksen konstitutiivisena lakina ja kutsuu elementin jäykkyyden laskennassa uElasticMatrix-aliohjelmaa (joka palauttaa elastisen matriisin \(D\)) sekä jännityksen päivityksessä uElasticUpdate-aliohjelmaa (joka palauttaa jännityksen). Älä käytä sitä yhdessä olemassa olevan hyperelastisen tai elastoplastisen mallin kanssa.

Käyttäjän hyperelastisuus

Käyttäjän hyperelastisuus on polku, jossa jännitys ja tangenttijäykkyys lasketaan venymäenergiafunktion derivaatoista suurten muodonmuutosten (Total Lagrange) kehyksessä. Määritä analyysin ohjaustiedoissa !HYPERELASTIC, TYPE=USER. Kutsuttavat aliohjelmat ovat samat uElasticMatrix ja uElasticUpdate kuin käyttäjän lineaarisessa elastisuudessa, ja yhteinen mallipohja on fistr1/src/lib/user/uelastic.f90. Koska avainsanamääritys vaihtaa sen, käsitteleekö FrontISTR toteutusta infinitesimaalisena muodonmuutoksena vai Total Lagrange -muotona, samaa mallipohjaa ei voi käyttää samanaikaisesti sekä infinitesimaalisen että suuren muodonmuutoksen toteutuksiin. Toteuta se jompanakumpana näistä kahdesta konstitutiivisesta laista.

Käyttäjän elastoplastisuus

Käyttäjän elastoplastisuus on polku, jossa käyttäjä toteuttaa myötöfunktion ja palautuskuvausmenettelyn. Määritä analyysin ohjaustiedoissa !PLASTIC, YIELD=USER. Tällöin käytetään haaraa, joka on riippumaton sisäisistä Mises-, Mohr-Coulomb- ja Drucker-Prager-myötöfunktioista. Elementin jäykkyyden laskennassa kutsutaan uElastoPlasticMatrix-aliohjelmaa (joka palauttaa elastoplastisen tangenttijäykkyyden \(D\)), jännityksen päivityksessä uBackwardEuler-aliohjelmaa (joka kuvaa koejännityksen todelliseksi jännitykseksi ja päivittää tilamuuttujat) ja Gauss-pisteiden alustuksessa uElastoPlasticNumStatus-funktiota (joka palauttaa säilytettävien reaalisten tilamuuttujien määrän). Polkua, joka korvaa käyttäjän toteutuksella vain lujittumiskäyrän, ei tueta. Vaikka tarvittaisiin vain käyttäjän määrittämä lujittumiskäyrä, käytä tätä polkua koko elastoplastisen konstitutiivisen lain korvaamiseen käyttäjän toteutuksella.

Yleiskäyttöinen käyttäjän konstitutiivinen laki

Yleiskäyttöinen käyttäjän konstitutiivinen laki on polku sellaisten konstitutiivisten lakien toteuttamiseen, jotka eivät sovi elastisen, hyperelastisen tai elastoplastisen kehyksen sisään. Määritä analyysin ohjaustiedoissa !USER_MATERIAL. Oletusarvoisesti sitä käsitellään Updated Lagrange -kehyksessä; kun KIRCHHOFF määritetään, sitä käsitellään Total Lagrange -kehyksessä. Tilamuuttujien määrä määritetään parametrilla NSTATUS. Elementin jäykkyyden laskennassa kutsutaan uMatlMatrix-aliohjelmaa (joka palauttaa tangenttijäykkyyden \(D\)) ja jännityksen päivityksessä uUpdate-aliohjelmaa (joka päivittää jännityksen ja tilamuuttujat).

Käyttäjävakioiden ja tilamuuttujien välittäminen

Poluissa !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER ja !USER_MATERIAL analyysin ohjaustietojen datariveille kirjoitetut käyttäjävakiot (enintään 100) välitetään suoraan aliohjelmalle argumentin matl kautta. Polussa !PLASTIC, YIELD=USER välitetään !ELASTIC-määrityksellä annetut elastiset vakiot sekä !PLASTIC-datariveillä annetut käyttäjävakiot.

Yleiskäyttöisessä käyttäjän konstitutiivisessa laissa ja polussa !PLASTIC, YIELD=USER edellisen vaiheen historiatiedot (kuten plastinen venymä, takajännitys ja vaurio) voidaan välittää käyttäjän toteutukselle tilamuuttujan fstat kautta ja kirjoittaa takaisin vaiheen lopussa. Tilamuuttujien määrän määrittää yleiskäyttöisessä käyttäjän konstitutiivisessa laissa !USER_MATERIAL ja sen NSTATUS, ja polussa !PLASTIC, YIELD=USER funktion uElastoPlasticNumStatus palautusarvo.

Käyttäjän määrittämät ulkoiset kuormat

Käyttäjän määrittämät ulkoiset kuormat tarjoavat polun sellaisten ulkoisten voimien määrittämiseen, joita sisäiset pistekuormat, hajautetut kuormat tai tilavuusvoimat eivät pysty esittämään. Kun analyysin ohjaustietoihin kirjoitetaan !ULOAD, FILE=<fname>, FrontISTR välittää määritetyn tiedostonimen ureadload-aliohjelmalle, ja käyttäjän toteutuksen lukemat tiedot säilytetään moduulitietoina.

Seuraavat kolme aliohjelmaa liittyvät !ULOAD-kutsuun.

  • ureadload: Lukee analyysin alussa käyttäjän määrittämät kuormat ohjaustiedostossa määritetystä ulkoisesta tiedostosta. Käyttäjän toteutus avaa tiedoston ja tallentaa tarvittavat tiedot moduulimuuttujiin.
  • uloading: Kutsutaan kunkin vaiheen ulkoisen kuormavektorin kokoamisen aikana, ja se lisää käyttäjäkuorman globaaliin kuormavektoriin. Nykyinen vaihenumero ja kuormakerroin välitetään argumentteina.
  • uResidual: Kutsutaan kunkin iteraation residuaalivektorin kokoamisen aikana, ja se lisää käyttäjäkuorman vaikutuksen globaaliin residuaalivektoriin. Sitä kutsutaan sekä epälineaarisista iteraatioista että tasapainolaskennasta.

Käyttäjän reunaehdoille (määrätyn siirtymän tai kontaktiehtojen käyttäjälaajennuksille) ei ole laajennuspistettä. Jos tarvitaan muu käyttäjälaajennus kuin ulkoinen voima, käytä vastaavaa sisäistä avainsanaa tai käyttäjän konstitutiivisen lain polkua.

Käyttäjäaliohjelmien toteutusmenettely

Käyttäjäaliohjelman käyttämiseksi muokkaa FrontISTR:n lähdekoodijakeluun sisältyvää mallipohjatiedostoa ja käännä FrontISTR sitten uudelleen. Käyttäjäaliohjelmia ei voi korvata jaelluissa binääreissä, joten käyttäjälaajennuksen käyttö edellyttää ympäristöä, jossa FrontISTR voidaan kääntää lähdekoodista.

Käyttäjäaliohjelmien mallipohjat sijaitsevat hakemistossa fistr1/src/lib/user/, ja kullekin laajennusluokalle on oma muokattava tiedosto (katso tiedostonimet taulukosta Toimintojen yleiskatsaus). Alkuperäisessä tilassaan tiedostot sisältävät joko tyhjiä aliohjelmarunkoja tai esimerkin lineaarisen elastisuuden toteutuksesta; käyttäjä lisää niihin oman konstitutiivisen lakinsa tai kuormamäärittelynsä. Kun mallipohjaa on muokattu, käännä FrontISTR normaalisti uudelleen CMake-ohjelmalla ja suorita analyysi syntyneellä fistr1-ohjelmalla.

Aliohjelmien argumenttien merkitys, tilamuuttujataulukoiden käsittely ja uudelleenkäännön varotoimet kuvataan ohjelmointioppaan vastaavilla sivuilla.

Katso myös

AI-assisted translation May contain errors Official docs Status