• Ei tuloksia

Elementin jäykkyysmatriisi ja geometrinen jäykkyysmatriisi

1 Yleistä Pilari-ohjelmasta

2.8 CJatk_vaa

2.8.1 Luokan asema

Luokka CJatk_vaa periytyy luokasta CJatkuva, joka taas on CKuorma-luokan perillinen.

2.8.2 Luokan julkiset toiminnot double alfa(int paa);

Tällä funktiolla lasketaan sauvanpäävääntymät.

double taipuma(double x);

Tämä funktio laskee vapaan väännön vääntömomentin pisteessä x.

double momentti(double x);

Tämä funktio laskee bimomentin pisteessä x.

double leikkVoima(double x);

Tämä funktio laskee estetyn väännön vääntömomentin pisteessä x.

Liite 3

2.9 CJatkKYDIg

2.9.1 L uokan asema

CJatkKYDlg-luokan oliota kutsutaan luokasta CKuormaDlg, kun halutaan avata dialogi, jossa kysytään tietoja y-suuntaisista jatkuvista kuormista.

2.9.2 Jäsenmuuttujat CListBox m_kuormaLista;

Tässä listassa ovat kaikki kysyttävät kuormatiedot.

CComboBox m_kuormTapLista;

Tässä listassa ovat kuormitustapausten nimet.

double m_pituus;

Kuorman pimus.

double m_ex;

double m_ey;

double m_ez;

Kuorman alkupisteen etäisyys x-, y- ja z-suunnassa.

double m_suuruus;

Kuorman ominaisarvo.

CArraycCKuormTapaus, CKuormTapaus&> kuormTapaukset;

Tässä taulukossa ovat kaikki kuormimstapaukset.

CList<CJatkuva, CJatkuva&> kuormat;

Tässä listassa ovat kaikki y-suuntaiset jatkuvat kuormat, double aukkopituus;

Jännevälin pituus.

2.9.3 Luokan sisäiset toiminnot

virtual void DoDataExchange(CDataExchange* pDX);

Tässä funktiossa liitetään dialogin kenttiin m_-alkuiset muuttujat. Muuttujille asetetaan rajoituksia.

Sen alkupisteen arvo ei saa olla aukkopituutta suurempi. Myöskään kuorman pimus ei saa ylittää aukkopituutta. Alkupisteen ja pituuden summan täytyy vielä olla korkeintaan aukkopituuden suuruinen.

virtual BOOL OnlnitDialogQ;

Tässä funktiossa alustetaan dialogi. Ensin täytetään dialogin kuormitustapauslista kuormimstapausten nimillä. Sitten käydään y-suuntaisten jatkuvien kuormien lista läpi, ja täytetään dialogin kuormalista.

Liite 3

afx_msg void OnLisaaQ;

Tässä funktiossa ensin lisätään rivi dialogin kuormalistaan ja sen jälkeen lisätään varsinaiseen kuormalistaan yksi olio.

afx_msg void OnPaivitaQ;

Tässä funktiossa ensin poistetaan dialogin kuormalistasta rivi ja lisätään sen tilalle päivitetty rivi.

Sitten päivitetään vastaava varsinaisen kuormalistan olio. Koska kuormat lisätään aina listan alkuun, täytyy m_kuormalistan indeksien laskeminen aloittaa lopusta.

afx_msg void OnPoistaf);

Poistetaan kuorma dialogista ja kuormalistasta.

afx_msg void OnSelchangeKuormaListaO;

Täytetään dialogin kentät m_kuormalistasta valitun rivin tiedoilla.

2.10 CJatkKZDIg

Tämä luokka on samanlainen kuin CJatkKYDlg. Ainoa ero on se, että käsiteltävät kuormat ovat z- suuntaisia. Etäisyys e_z puuttuu, koska z-suuntainen kuorma ei vaikuta kiepahdukseen. Kaikki funktiot ovat samanlaisia kuin luokassa CJatkKYDlg.

2.11 CJatkMXDIg

Tämä luokka on lähes samanlainen kuin CJatkKYDlg. Jäsenmuuttujia on vähemmän, sillä jatkuvan vääntömomentin tapauksessa ei tarvita muuttujia m_ey ja m_ez.

2.12 CJatkuva

2.12.1 L uokan asema

Luokka CJatkuva on johdettu luokasta CKuorma. Luokka CJatkuva on kantaluokka luokalle CJatk_vaa.

2.12.2 Jäsenmuuttujat double c;

Etäisyys kuorman päättymisestä jännevälin loppuun.

2.12.3 Luokan ulkoiset toiminnot virtual double taipuma (double x);

Funktio laskee jatkuvasta kuormasta aiheutuvan taipuman pisteessä x.

virtual double alfa (int paa);

Funktio laskee jatkuvasta kuormasta aiheutuvan sauvanpääkiertymän.

virtual double momentti (double);

Funktio laskee jatkuvasta kuormasta aiheutuvan momentin pisteessä x.

Liite 3

virtual double leikkVoima (double);

Funktio laskee jatkuvasta kuormasta aiheutuvan leikkausvoiman pisteessä x.

void SetPituus (double arvo);

Funktiossa asetetaan kuorman pituus b. Pistekuormalla b tarkoittaa matkaa kuormasta jännevälin loppuun. Nyt b onkin kuorman pituus ja c matka kuorman loppupäästä jännevälin loppuun.

double GetPituus 0;

Funktio palauttaa kuorman pituuden.

virtual void Serialize (CArchive& ar);

Serialisointifunktiossa kutsutaan ensin kantaluokan serialisointifunktiota ja serialisoidaan myös mitta b.

2.13 CKuorma

2.13.1 Luokan asema

Luokka CKuorma on abstrakti kantaluokka kaikille eri kuormaluokille. Tästä luokasta ei voi suoraan tehdä olioita.

2.13.2 Jäsenmuuttujat int tapausNro;

Kuormitustapauksen numero, double P;

Taivutuskuormilla normaalivoima, vääntökuormilla vapaan väännön vääntöjäykkyys.

double lambda;

Taivutuskuormilla X, vääntökuormilla k.

double suuruus;

Laskentakuorma.

double ominaiskuorma;

Ominaiskuorma, eli kuorma ilman varmuuskertoimia.

double a;

Kuorman alkupisteen etäisyys jännevälin alusta.

double b;

Kuorman alkupisteen etäisyys jännevälin lopusta, double l;

Jännevälin pituus.

Liite 3 double e_y;

Kuorman etäisyys vääntökeskiöstä y-suunnassa.

double e_z;

Kuorman etäisyys vääntökeskiöstä z-suunnassa.

2.13.3 Luokan julkiset toiminnot virtual double taipuma (double x) = 0;

virtual double alfa (int paa) = 0;

virtual double momentti (double x) = 0;

virtual double leikkVoima (double x) = 0;

Puhtaita virtuaalifunktioita taipumien, sauvanpääkiertymien, momenttien ja leikkausvoimien laskemista varten. Tässä kantaluokassa näille ei ole määritelty toteutusta. Funktioita kutsutaan luokan CAukko funktioista TaipumaY(), TaipumaZQ, ...

void SetSuuruus (double kuorma);

Asetetaan ominaiskuorman arvo. Funktiota kutsutaan kuormadialogien lisäys- ja päivitysfunktioista.

void SetLaskenta(int rajatila, CKuormTapaus tapaus);

Tässä funktiossa muutetaan ominaiskuorma laskentakuormaksi kertomalla se kuormitustapauksen varmuuskertoimella pyydetyssä rajatilassa. Funktiota kutsutaan luokan CAukko funktioista SetKuormatYO, SetKuormatZQ ja SetVaantokuoimat().

void SetAlkupistefdouble piste);

Asetetaan mitta a. Funktiota kutsutaan kuormadialogien lisäys- ja päivitysfunktioista.

void SetL (double L);

Asetetaan 1. Funktiota kutsutaan kuormadialogien lisäys- ja päivitysfunktioista.

void SetTapaus(int nro);

Asetetaan tapausNro. Funktiota kutsutaan kuormadialogien lisäys- ja päivitysfunktioista.

void SetP(double voima, double lambdan_arvo);

Asetetaan Pja X. Funktiota kutsutaan luokan CAukko funktioista SetP_y(), SetP_z() ja SetP_vQ.

void Set_e_y (double etäisyys);

void Set_e_z (double etäisyys);

Asetetaan etäisyydet e_y ja e_z. Luokan muodostimessa ne on alustettu nolliksi. Funktioita kutsutaan kuormadialogien lisäys- ja päivitysfunktioista.

int GetTapausQ;

Palauttaa kuormitustapauksen numeron tapausNro. Funktiota kutsutaan luokan CAukko funktioista SetVaantokuormat(), SetPistemomZQ ja SetPistemomYQ sekä kuormadialogien lisäys- ja päivitysfunktioista.

double GetSuuruusQ;

Palauttaa ominaiskuorman. Funktiota kutsutaan kuormadialogeista.

Liite 3

double GetLaskentaO;

Palauttaa laskentakuorman. Funktiota kutsutaan monesta CAukko-luokan funktiosta, double GetAlkupisteO;

Palauttaa a:n. Kutsutaan monesta paikasta, virtual void Serialize (CArchive& ar);

Serialisointifunktio. Serialisoidaan ominaiskuorma, kuorman koordinaatit ja kuormitustapauksen numero.

2.14 CKuormaDIg

2.14.1 Luokan asema

Luokkaa CKuormaDIg kutsutaan luokasta CTukiKuormaDlg.

2.14.2 Jäsenmuuttujat CAukko aukkotieto;

Yhden jännevälin tiedot, int aukkoNro;

Jännevälin numero. Alimman jännevälin numero on tässä 1. Tätä tarvitaan kuormien tiedostotulostamisessa.

CArray<CKuormTapaus, CKuormTapaus&> kuormTapaukset;

Taulukko kaikista kuormitustapauksista.

CString qyStr;

CString qzStr;

CString PyStr;

CString PzStr;

CString PxStr;

CString MxStr;

CString MyStr;

CString MzStr;

CString mxStr;

Merkkijonot kuormien tiedostotulostamista varten.

2.14.3 Luokan sisäiset toiminnot

virtual void DoDataExchange(CDataExchange* pDX);

Tämä funktio ei tee muuta kuin kutsuu kantaluokan (CDialog) funktiota.

afx_msg void OnJatkKYO;

Tässä funktiossa kopioidaan ensin CJatkKYDlg-dialogille kuormalista, aukkopimus ja kuormitustapaustaulukko. Kun kuormalistaa on käsitelty CJatkKYDlg-luokassa, vanha kuormalista mhotaan luokasta CKuormaDIg ja uusi lista kopioidaan tilalle. Kuormalista käydään läpi ja jokaisesta kuormasta kiijoitetaan tiedot puskuriin qyStr.

Liite 3

afx_msg void OnJatkKZQ;

afx_msg void OnJatkMXQ;

afx_msg void OnPistekXQ;

afx_msg void OnPistekYQ;

afx_msg void OnPistekZQ;

afx_msg void OnPistemXQ;

afx_msg void OnPistemYf);

afx_msg void OnPistemZQ;

Nämä funktiot ovat vastaavanlaisia kuin OnJatkKY().

2.15 CKuormTapaus

2.15.1 Luokan asema

Luokan CKuormTapaus olioita kutsutaan muutettaessa CKuorma-luokassa ominaiskuormaa laskentakuormaksi. Oliot ovat taulukossa (CArray).

2.15.2 Jäsenmuuttujat float murtoVarmuus;

Varmuuskerroin murtotilassa, float käyttövarmuus;

Varmuuskerroin käyttötilassa.

CString nimi;

Kuormitustapauksen nimi.

2.15.3 Luokan julkiset toiminnot virtual void Serialize(CArchive& ar);

Serialisointifunktio. Luokasta tallennetaan nimi, murtoVarmuus ja käyttövarmuus.

CKuormTapaus &operator=(const CKuormTapaus& arvo);

Yhtäsuumusoperaattori. Tässä funktiossa vain asetetaan jäsenmuuttujat yhtäsuureksi kuin olion arvo jäsenmuuttujat.

float Get_murtoVarmuu$0;

Palauttaa murtotilan varmuuskertoimen. Kutsutaan luokan CKuorma funktiossa SetLaskenta() sekä kuormitustapausdialogissa.

float Get_kayttoV'armuusO;

Palauttaa käyttötilan varmuuskertoimen.

CString Get_nimiQ;

Palauttaa kuormitustapauksen nimen.

Liite 3

void Set_murtoVarmuus (float kerroin);

void Set_kayttoVarmuus (float kerroin);

void Set_nimi(CString merkkijono);

Näissä funktioissa asetetaan varmuuskertoimet ja nimi. Funktioita kutsutaan luokassa CKuormTapDlg.

2.16 CKuormTapDlg

2.16.1 Luokan asema

Luokkaa CKuormTapDlg kutsutaan suoraan luokasta CMainFrame. Tällä dialogilla kysytään tietoja kuormitustapauksista. Luokassa ei ole jäsenfunktiota OnPoista(), koska jos kuormitustapaus poistettaisiin sen jälkeen, kun sitä on käytetty jossain kuormassa, tulisi virhetilanne.

2.16.2 Jäsenmuuttujat CListBox m_tapausLista;

Tähän listaan tulevat kaikki kuormitustapaukset.

CString m_nimi;

float m_kayttoVarmuus;

float m_murtoVarmuus;

Kuormitustapauksen nimi, varmuuskerroin käyttötilassa ja varmuuskerroin murtotilassa.

CArray<CKuormTapaus, CKuormTapaus&> tapaukset;

Tässä taulukossa ovat kaikki kuormitustapaukset.

2.16.3 Luokan sisäiset toiminnot

virtual void DoDataExchange (CDataExchange* pDX);

Tällä funktiolla liitetään luokan jäsenmuuttujat dialogin kenttiin. Kuormitustapauksen nimen maksimipituus on 30 merkkiä ja varmuuskertoimien maksimiarvo on 2. Varmuuskerroin voi olla myös negatiivinen (minimiarvo -2).

virtual BOOL OnlnitDialogO;

Alustetaan dialogi kiijoittamalla olemassaolevat kuormitustapaukset listaan.

afx_msg void OnLisaaQ;

Lisätään kuormitustapauslistaan rivi ja taulukkoon olio.

afx_msg void OnSelchangeTapausListaQ;

Sijoitetaan valitun rivin tiedot kenttiin.

afx_msg void OnUpdateQ;

Poistetaan valittu rivi listasta ja päivitetään sekä listan rivi että taulukon vastaava olio.

Liite 3

2.17 CLeikkLommahdus

2.17.1 Luokan asema

Luokan CLeikkLommahdus oliota kutsutaan luokasta CJannitys, kun halutaan laskea leikkauslommahduskestävyyden mitoitusarvo. Funktio, josta tätä kutsutaan, on CJannitykset::lommKestavyys().

2.17.2 Jäsenmuuttujat double gammal;

Materiaalin osavarmuuskerroin (1,1).

CMateriaali mMateriaali;

CProfiili mProfiili;

Materiaali- ja profiilitiedot

2.17.3 Luokan sisäiset toiminnot double tauO;

double lambda_viivaO;

double k_tauO;

double epsilonO;

Eurocode 3:n kaavoja.

2.17.4 L uokan julkiset toiminnot

double V_mitoitus (CMateriaali mMat, CProfiili mProf);

Tämä funktio laskee leikkauslommahduskestävyyden mitoitusarvon sisäisten funktioiden avulla ja palauttaa sen. Funktiota kutsutaan funktiosta CJannitykset::lommKestavyys().

2.18 CMainFrame

2.18.1 Luokan asema

Tämä luokka on se, josta kaikki dialogit avataan. Luokan jäsenmuuttujat ja virtuaaliset jäsenfimktiot ovat kääntäjästä tulleita, joten niitä ei luetella tässä.

2.18.2 Luokan sisäiset toiminnot

void kuormatulostus(CTukiKuormaDlg& dig);

Tässä funktiossa tulostetaan CKuormaDlg-luokasta kootut kuormapuskurit puskuriin

pDoc->kuormaPuskuri. Vain sellaisille kuormille, joita rakenteessa on, tulostetaan otsikkorivi. Kaikki eri tyyppiset kuormat tulevat omaan taulukkoonsa. Funktiota kutsutaan funktiosta OnTukiKuormaDlg.

void tukitulostusO

Tässä funktiossa tulostetaan jousivakiotaulukon arvot puskuriin pDoc->tukiPuskuri. Funktiota kutsutaan funktiosta OnTukiKuormaDlg.

Liite 3

afx_msg void OnMateriaaliQ;

Avaa materiaalidialogin CMateriaaliDlg. Tulokset tulevat dokumentin materiaalitietoihin. Lisäksi tulokset kirjoitetaan dokumentin merkkijonoon matPuskuri.

afx_msg void OnProfiiliO;

Avaa poikkileikkausdialogin CProfiiliDlg. Tulokset tulevat dokumentin profiilitietoihin. Tulokset kiijoitetaan myös dokumentin merkkijonoon profPuskuri.

afx_msg void OnAukkoQ;

Avaa dialogin CAukkoDlg, jossa kysytään jännevälien pituuksia. Kun jännevälien lukumäärä on tiedossa, voidaan antaa epätarkkuuksille kerrosten lukumäärätieto. Tulokset tulevat dokumentin aukkotietoihin. Jännevälien pituudet kirjoitetaan lisäksi dokumentin merkkijonoon aukkoPuskuri.

afx_msg void OnTukiKuormaQ;

Avaa dialogin CTukiKuormaDlg, jossa kysytään tukien jousivakioita ja jännevälien kuormia. Tulokset tulevat dokumentin tuki- ja aukkotietoihin. Funktiossa varataan tilaa dialogin merkkijonotaulukoille.

Lisäksi funktiosta kutsutaan funktioita kuormatulostusO ja tukitulostus(), joissa kirjoitetaan merkkijonot kuormaPuskuri ja tukiPuskuri.

afx_msg void OnKuormTapausQ;

Avaa kuormitustapausdialogin CKuormTapDlg. Tulokset mlevat dokumentin kuormitustapaustietoihin. Tiedot kirjoitetaan myös dokumentin merkkijonoon ktPuskuri.

afx_msg void OnLaskeQ;

Tässä funktiossa avavaan testidialogi CTestiDlg. Ensin annetaan dialogin mJannitys-oliolle kaikki tiedot, joita se tarvitsee, ja kutsutaan olion LaskeQ-funktiota. Ennen dialogin avaamista tarkistetaan leikkauslommahduskestävyys ja poikkileikkausluokka. Jos lommahduskestävyys tai poikkileikkauksen rajahoikkuus ylittyy, siitä tulostetaan ilmoitus sekä näytölle että tiedostoon. Tiedostoon kirjoitetaan myös maksimijännitys, ja jos myötöraja ylittyy, ilmoitetaan siitäkin. Epästabiiliuskerroinkin kirjoitetaan tiedostoon ja kerrotaan, onko rakenne stabiili vai ei. Testidialogissa kirjoitetaan momentti- ym. puskurit täyteen ja ne kopioidaan dokumentin puskureihin, kun testidialogi suljetaan.

afx_msg void OnJakoQ;

Avataan dialogi CJakoDlg, jossa kysytään tulostuspisteiden tiheyttä. Tulokset tulevat dokumentin jännitystietoihin.

afx_msg void OnRakennef);

Avataan dialogi CRakenneDlg, jossa kysytään pilarien lukumäärää. Tulokset mlevat dokumentin epätarkkuustietoihin. Tiedostoon kirjoitetaan (rakPuskuri), kuinka monta pilaria on koko rakenteessa.

afx_msg void OnTuloksetQ;

Tässä funktiossa ensin avataan CTiedostoDlg-dialogi, jossa kysytään tiedoston nimeä ja otsikkoa. Jos nimeä ei anneta, käytetään oletuksena tiedostoa tulokset.txt. Tiedosto avataan, ja jos avaaminen ei onnistu, siitä tulee virheilmoitus. Kaikki dokumentin puskurit yhdistetään merkkijonoon tulos, joka sitten kirjoitetaan tiedostoon.

Liite 3

2.19 C M ater i aa I i

2.19.1 Luokan asema

Luokan CMateriaali jäsenfunktioita kutsutaan luokista CEpatarkkuudet, CJannitykset, CLeikkLommahdus, CNuijahdus, CPLLuokka ja CSuunta.

2.19.2 Jäsenmuuttujat double f_y;

double E;

double nyy;

Materiaalin lujuus, kimmokerroin ja Poissonin vakio.

2.19.3 Luokan julkiset toiminnot void SetJLy (double lujuus);

void Set_E(double kimmokerroin);

void Set_nyy(double poisson);

Jäsenmuuttujien asetus.

double Get_fQ;

double Get_EQ;

double Get_nyyO;

Palauttaa lujuuden, kimmokertoimen tai Poissonin vakion, double Get_G0;

Laskee kimmokertoimesta ja Poissonin vakiosta liukukertoimen ja palauttaa sen.

double iso_d (double);

Levyn taivutusjäykkyys, jota tarvittaisiin, jos levyn lommahdus tutkittaisiin. Tällä hetkellä tätä funktiota ei kutsuta mistään.

virtual void Serialize (CArchive& ar);

Serialisointifunktio. Tässä luokassa tallennetaan kaikki jäsenmuuttujat.

2.20 CMateriaaliDIg

2.20.1 Luokan asema

Luokkaa CMateriaaliDIg kutsutaan suoraan luokasta CMainFrame.

2.20.2 Jäsenmuuttujat double m_kimmokerroin;

double m_Iujuus;

double m_poisson;

Vastaavat materiaaliluokan jäsenmuuttujia.

Liite 3

2.20.3 Luokan sisäiset toiminnot

virtual void DoDataExchange(CDataExchange* pDX);

Tässä funktiossa liitetään luokan jäsenmuuttujat dialogin kenttiin. Muuttujille on määritelty maksimiarvot: m_kimmokerroin 30000, m_lujuus 1000, m_poisson 0,5.

afx_msg void OnOletusMatQ;

Tämä funktio palauttaa kenttiin oletusarvot, eli samat arvot, jotka ovat olleet näkyvissä, kun dialogi on ensimmäistä kertaa avattu. Oletusarvot ovat tiedostossa Oletusarvot.h.

2.21 CMatriisi

2.21.1 Luokan asema

Tätä luokkaa kutsutaan luokasta CNutjahdus, kun halutaan laskea ominaisarvo, sekä luokasta CSuunta, kun halutaan ratkaista yhtälöryhmä.

2.21.2 Jäsenmuuttujat int n;

Alkuperäisen matriisin koko on n*n.

double * mat2;

Valmiina otetussa yhtälöryhmän ratkaisualgoritmissa taulukon indeksit olivat l...n, kun ne normaalisti ovat 0...M-1. Ylimääräisten ajatus- ym. virheiden välttämiseksi myös tässä käytettiin l...zz -matriiseja.

double * indx;

Vektori, jonka tarkoituksena on pitää kirjaa tehdyistä rivinvaihdoista.

2.21.3 Luokan sisäiset toiminnot void LU_Hajotelma(double * matriisi);

Tässä funktiossa ensin kopioidaan matriisi taulukkoon mat2. Loppu on otettu suoraan kirjasta Numerical Recipes in C. Funktion tarkoituksena on muuttaa mat2 LU-hajotettuun muotoon. Funktiota kutsutaan funktioista vakiotQ ja ominaisarvo().

void LU_bksb(double * rhs);

Tässä funktiossa kopioidaan vektori rhs vektoriksi b, jonka indeksit ovat 1 ...n. Funktion loppu on kirjasta Numerical Recipes in C. Funktion lopussa kopioidaan vektori b takaisin vektoriksi rhs, joka on nyt yhtälöryhmän ratkaisu. Funktiota kutsutaan funktioista vakiotQ ja ominaisarvoQ.

double ratkaise(double * tulo);

Tämä funktio ratkaisee tulo-matriisin suurimman ominaisarvon kääntseisluvun. Funktiossa ensin balansoidaan matriisi tulo (balancQ), sitten muutetaan se Hessenbergin muotoon (elmhesQ) ja ratkais­

taan ominaisarvot (hqr()). Ominaisarvoista etsitään suurin reaalinen ja palautetaan sen käänteisluku.

Tätä funktiota kutsutaan funktiosta ominaisarvot).

void balancfdouble * tulo);

Tämä algoritmi on otettu suoraan kirjasta Numerical Recipes in C. Funktio balansoi matriisin tulo, jonka indeksit alkavat ykkösestä. Funktiota kutsutaan funktiosta ratkaise().

Liite 3

void elmhes(double * tulo);

Tämä algoritmi on otettu suoraan kirjasta Numerical Recipes in C. Funktio muuttaa matriisin tulo Hessenbergin muotoon. Tätä funktiota kutsutaan funktiosta ratkaisef).

void hqrfdouble * tulo, double * reaali, double * imaginaari);

Tämäkin algoritmi on otettu suoraan kirjasta Numerical Recipes in C. Funktio ratkaisee Hessenbergin matriisin (tulo) ominaisarvot. Niiden reaaliosat talletetaan taulukkoon reaali ja imaginääriosat taulukkoon imaginaari.

2.21.4 Luokan julkiset toiminnot virtual ~CMatriisi();

Tässä funktiossa vapautetaan taulukot mat2 ja indx.

double * vakiot(double* vasen, double* oikea, int koko);

Tämä funktio ratkaisee lineaarisen yhtälöryhmän. Ensin tehdään matriisille vasen LU-hajotelma (LU_Hajotelma()). Sitten ratkaistaan takaisinsijoituksella vektori oikea (LU_bksb()). Palautusarvo on vektori oikea takaisinsijoituksen jälkeen. Funktiota kutsutaan funktiosta CSuunta::RatkaiseMatriisi().

double ominaisarvo(double* jaykk, double* geom, int koko);

Ratkaistaan lineaarinen yhtälöryhmä vuoronperään kunkin geom-matriisin pystyrivillä (LU_Hajotelma(), LU_bksb()). Tulokset tulevat matriisiin tulo, jossa indeksit alkavat ykkösestä. Tä­

män tulo-matriisin suurimman ominaisarvon käänteisluku, eli lambda, lasketaan funktiossa ratkaiset).

Palautusarvona on lambda. Funktiota kutsutaan funktiosta CNuijahdus::GetOminaisarvo().

2.22 CNurjahdus

2.22.1 Luokan asema

Luokkaa CNurjahdus kutsutaan luokasta CJannitys, kun halutaan selvittää epästabiiliuskerroin.

2.22.2 Jäsenmuuttujat

CArray<CAukko, CAukko&> mAukko;

CArray<CTuki, CTuki&> mTuki;

CProfiili mProfiili;

CMateriaali mMateriaali;

Jänneväli-, jousivakio-, poikkileikkaus- ja materiaalitiedot, int koko;

Elementtien lukumäärä.

int aukot;

Jännevälien lukumäärä, intjakoX;

Elementtien lukumäärä jännevälillä.

Liite 3

double* pituus;

Taulukko jännevälien pituuksista.

double* PP;

Taulukko jännevälien normaalivoimista, double* qy_ay;

Taulukko elementtien y-suuntaisista jatkuvista kuormista kerrottuna niiden y-suuntaisella etäisyydellä

• vääntökeskiöstä.

double* qy;

Taulukko elementtien y-suuntaisista jatkuvista kuormista.

double* momenttiZ;

double* momenttiY;

double* leikkVoimaY;

double* leikkVoimaZ;

double* momenttiX;

Taulukot solmupisteiden momenteista ja leikkausvoimista.

double* K_matriisi;

Systeemin jäykkyysmatriisi.

double* N_matriisi;

Systeemin geometrinen jäykkyysmatriisi.

double* a ... double * m;

Jäykkyysmatriisin alkioita. Taulukon koko on sama kuin jännevälien lukumäärä.

double* ga ... double * gd;

Geometrisen jäykkyysmatriisin alkioita. Taulukon koko on sama kuin jännevälien lukumäärä.

double* ge ... double * gj;

double* A ... double *P;

double* Ap ... double * Pp;

double Q, double R;

Geometrisen jäykkyysmatriisin alkioita. Taulukon koko on sama kuin elementtien lukumäärä.

2.22.3 Luokan sisäiset toiminnot void varaaQ;

Tässä funktiossa varataan tilaa kaikille dynaamisille taulukoille. Funktiota kutsutaan funktiosta SetP(), koska tässä funktiossa ensimmäisen kerran tarvitaan taulukoita.

void jaykkyysvakiotO;

Täytetään taulukot a-m. Vakioiden lausekkeet on esitetty diplomityön liitteessä 2. Funktiota kutsutaan funktiosta GetOminaisarvo().

Liite 3

void geomVakiotO;

Ensin kutsutaan funktiota Set_qy. Sen jälkeen täytetään kaikki geometrisen jäykkyysmatriisin alkioita sisältävät taulukot. Vakioiden lausekkeet on esitetty diplomityössä. Funktiota kutsutaan funktiosta

GetOminaisarvoO-void Set_qyO;

Tässä funktiossa täytetään taulukot qy ja qy_ay ensin nollilla. Sitten käydään jänneväleittäin läpi y- suuntaisen jatkuvan kuorman listaa ja katsotaan, löytyykö taulukkoon lisättävää. Kuorma otetaan mukaan, jos elementin pituudesta vähintään puolet on kuormitettuna. Tätä funktiota kutsutaan funktiosta

geomVakiotO-void KokoaNO;

Kootaan systeemin geometrinen jäykkyysmatriisi. Matriisi täytetään aluksi nollilla. Ensin kootaan yläkolmiomatriisi ja lopuksi symmetrisen matriisin toinen puoli. Elementillä on 14 vapausastetta.

Koska pilarissa kaikki elementit ovat peräkkäin, elementin viimeiset seitsemän vapausastetta ovat samat kuin seuraavan elementin seitsemän ensimmäistä vapausastetta. Tätä funktiota kutsutaan funktiosta GetOminaisarvoO.

void KokoaKO;

Kootaan systeemin jäykkyysmatriisi. Matriisi täytetään aluksi nollilla. Ensin kootaan yläkolmiomatriisi ja symmetrisen matriisin toinen puoli. Sitten lisätään tukien kohdalle diagonaalialkioihin tuen kyseisen vapausasteen jousivakio. Tätä funktiota kutsutaan funktiosta GetOminaisarvoO.

2.22.4 Luokan julkiset toiminnot virtual -CNurjahdusQ;

Tässä CNutjahdus-luokan tuhoajassa vapautetaan muisti kaikista taulukoista, joille sitä on luokassa varattu.

double GetOminaisarvoO;

Tässä funktiossa asetetaan ensin jäykkyysmatriisin ja geometrisen jäykkyysmatriisin vakiot (jaykkyysvakiotO, geomVakiotO). Sitten kootaan matriisit (KokoaKO, KokoaN()). Ominaisarvon laskemista varten kutsutaan luokasta CMatriisi sen jäsenfunktiota ominaisarvo(). Palautusarvo on epästabiiliuskerroin. Tätä funktiota kutsutaan luokasta CJannitykset jäsenfunktiosta Laske().

void SetJakoX(int jako);

Asetetaan jakoX. Tätä funktiota kutsutaan luokan CJannitykset jäsenfunktiosta

NuijArvotO-void SetMomentit(double * ml, double * m2, double * m3, double * m4, double * mS, double * m6);

Tässä funktiossa asetetaan jäsenmuuttujat momenttiZ...leikkVoimaZ osoittamaan taulukoihin ml. ..

m4. Taulukoissa m5 ja m6 on estetty ja vapaa vääntömomentti. Kokonaisvääntömomentti eli momenttiX on niiden summa. Ainoa uusi taulukko on momenttiX. Funktiota kutsutaan funktiosta CJannitykset: :Nuij Arvot().

void SetP(double * voima);

Tässä funktiossa varataan ensin tilaa kaikille taulukoille (varaa()). Sen jälkeen täytetään taulukko PP voima-taulukon arvoilla. Funktiota kutsutaan funktiosta CJannitykset::NmjArvot().

Liite 3

2.23 CPilariApp

Tämä luokka on MFC AppWizardista tullut, eikä sille ole tehty mitään.

2.24 CPilariDoc

Tämän luokan toteutukselle ei ole tehty juuri mitään. Serialisointifunktio kutsuu luokan CPilariLuokat serialisointi funktiota.

2.24.1 Jäsenmuuttujat CPilariLuokat mLuokat;

Kokoelma kaikista luokista, joita käsitellään dokumentista käsin. Tätä tarvitaan serialisoitaessa.

CString matPuskuri;

Puskurit tulostusta varten. Tulostus tapahtuu luokasta CMainFrame.

2.25 CPilariLuokat

2.25.1 Luokan asema

Tämä luokka on ehkä tarpeeton, mutta sen tarkoituksena on koota kaikki muut ohjelman luokat ja hoitaa serialisointi. Serialisoinnin vuoksi luokka CPilariLuokat on johdettu luokasta CObject.

2.25.2 Jäsenmuuttujat CProfiili mProfiili;

CMateriaali mMateriaali;

CEpatarkkuudet mEpa;

CArray<CTuki, CTuki&> mTuki;

CArray<CAukko, CAukko&> mAukko;

CArray<CKuormTapaus, CKuormTapaus&> mKuormTap;

CJannitykset mJannitys;

Liite 3

CEpatarkkuudet mEpatarkka;

Luokat, joita tarvitaan dokumentissa.

2.25.3 Luokan julkiset toiminnot virtual void Serialize (CArchive & ar);

Tässä serialisointifimktiossa kutsutaan ensin kantaluokan serialisointifunktiota ja sen jälkeen kaikkien muiden luokkien. Luokat CAukko, CKuormTapaus ja CTuki ovat taulukoissa. Taulukon koko seriali- soidaan ensin, ja sen jälkeen kutsutaan yksitellen taulukon alkioiden serialisointifunktioita.

2.26 CPilariView

Tämä luokka on MFC AppWizardista tullut, eikä sille ole tehty mitään.

2.27 CPistekDIg

Tämä luokka on samanlainen kuin CJatkKYDlg, paitsi että muuttujaa m_pituus ei tarvita. Tässä dialogissa kysytään y-suuntaisia pistekuormia.

2.28 CPistekuo

2.28.1 Luokan asema

Luokka CPistekuo periytyy luokasta CKuorma.

2.28.2 Luokan julkiset toiminnot double taipuma(double x);

Pistekuorman aiheuttama taipuma pisteessä x.

double alfa(int paa);

Pistekuorman aiheuttama sauvanpääkiertymä.

double momentti(double x);

Pistekuorman aiheuttama momentti pisteessä x.

double leikkVoima(double x);

Pistekuorman aiheuttama leikkausvoima pisteessä x.

Kaikkia näitä funktioita kutsutaan luokan CAukko vastaavista funktioista.

2.29 CPistekXDIg

Tämä luokka on samanlainen kuin CPistekDIg, paitsi,että muuttujaa m_ex ei tarvita. Dialogissa kysytään tietoja puristavista kuormista.

2.30 CPistekZDIg

Tämä luokka on samanlainen kuin CPistekDIg, mutta dialogissa kysytään tietoja z-suuntaisista pistekuormista ja muuttujaa m_ez ei tarvita.

Liite 3

2.31 C Pistem om

2.31.1 Luokan asema

Tämä luokka periytyy luokasta CKuorma.

2.31.2 Luokan julkiset toiminnot double taipuma(double x);

double alfa(int paa);

double momentti(double x);

double leikkVoima(doubIe x);

Pistemomentin aiheuttamat taipuma, sauvanpääkiertymä, momentti ja leikkausvoima. Näitä funktioita kutsutaan luokan CAukko vastaavista funktioista.

2.32 CPistemXDIg

Luokka CPistemXDIg on samanlainen kuin CPistekDlg, mutta muuttujia m_ey ja m_ez ei tarvita.

Dialogissa kysytään tietoja pistevääntömomenteista.

2.33 CPistemYDIg

Luokka CPistemYDIg on samanlainen kuin CPistekDlg, mutta muuttujia m_ey ja m_ez ei tarvita.

Dialogissa kysytään tietoja pistemomenteista y-akselin ympäri.

2.34 CPistemZDIg

Luokka CPistemZDIg on samanlainen kuin CPistemYDIg. Dialogissa kysytään tietoja pistemomenteista z-akselin ympäri.

2.35 CPistevaa

2.35.1 Luokan asema

Luokka CPistevaa periytyy luokasta CKuorma.

2.35.2 Luokan julkiset toiminnot double taipumafdouble x);

Pistevääntömomentin aiheuttama vapaan väännön vääntömomentti haarukkalaakeroidulla yksiaukkoisella sauvalla pisteessä x.

double alfafint paa);

Pistevääntömomentin aiheuttama sauvanpäävääntymä haarukkalaakeroidun yksiaukkoisen sauvan päässä.

double momenttifdouble x);

Pistevääntömomentin aiheuttama bimomentti haarukkalaakeroidun yksiaukkoisen sauvan pisteessä x.

double IeikkVoimafdouble x);

Pistevääntömomentin aiheuttama estetyn väännön vääntömomentti haarukkalaakeroidun yksiaukkoisen sauvan pisteessä x.

Liite 3

2.36 CPLLuokka

2.36.1 Luokan asema

Luokan CPLLuokka olio muodostetaan luokasta CJannitys, kun halutaan laskea levyjen hoikkuudet.

2.36.2 Jäsenmuuttujat double psii;

Jännityssuhde levyn reunoilla.

CMateriaali mMat;

CProfiili mProf;

Materiaali- ja poikkileikkaustiedot.

int solmut;

Jännitysten tulostuspisteiden lukumäärä pituussuimnassa.

int pl_solmut;

Jännitysten tulostuspisteiden lukumäärä levyn suunnassa, double* jännitykset;

Normaalijännitykset levyssä.

2.36.3 Luokan sisäiset toiminnot

double lambda_viiva(double b, double t, double psii_arvo, int levy);

Levyn hoikkuus. Funktiosta kutsutaan funktiota k_sigma(). Tätä funktiota kutsutaan funktiosta lambda_viivat().

double k_sigma(int levy);

Tätä funktiota kutsutaan funktiosta lambda_viiva(). k_sigma on Eurocode 3:ssa määritetty sen mukaan, onko levy tuettu yhdeltä vai kahdelta reunalta, ja onko yhdeltä reunalta tuetun levyn tuettu vai vapaa reuna enemmän puristettu.

2.36.4 Luokan julkiset toiminnot

CPLLuokkafCMateriaali m, CProfiili p, int pituuspisteet, int pl_pisteet, double* jann);

CPLLuokkafCMateriaali m, CProfiili p, int pituuspisteet, int pl_pisteet, double* jann);