• Ei tuloksia

CSuunta .1 Luokan asema

Elementin jäykkyysmatriisi ja geometrinen jäykkyysmatriisi

1 Yleistä Pilari-ohjelmasta

2.40 CSuunta .1 Luokan asema

CSuunta on abstrakti kantaluokka luokille CTaivutus ja CVaanto. Sitä tarvitaan luokassa CJännitys.

Liite 3

2.40.2 Jäsenmuuttujat

CArray<CAukko, CAukko&> mAukko;

CArray<CTuki, CTuki&> mTuki;

CProfiili mProfiili;

CMateriaali mMateriaali;

Jännevälien, tukien, poikkileikkauksen ja materiaalin tiedot.

int n;

int m;

n on jännevälien lukumäärä, m on yhtälöryhmän tuntemattomien lukumäärä (m=3*n).

double* matriisi;

Yhtälöryhmän vasen puoli.

double* rhs;

Yhtälöryhmän oikea puoli.

double E;

double I;

double* a;

double* b;

Sauvanpäämomenttien tai -bimomenttien kertoimet momenttimenetelmän yhtälöissä, double* L;

Jännevälien pituudet.

double* P;

Jännevälien normaalivoimat.

double* lambda;

Jännevälien lambda-vakiot.

double* alfal;

double* alfal;

Sauvan alku- ja loppupään kiertymät (tai vääntymät).

double* k_M;

double* k_V;

Kiertymä- (vääntymä-) ja siirtymäjousivakiot.

double* M_nolla;

Ulkoiset pistemomentit tuilla.

Liite 3

double* Q_nollal;

double* Q_nolla2;

Ulkoisesta kuormituksesta aiheutuvat leikkausvoimat (tai kokonaisvääntömomentit) sauvan päissä, double* v_fii;

Alkuvinoudesta aiheumvat tukisiirtymät.

double* v_tuki;

Kuormituksesta aiheumvat tukisiirtymät.

2.40.3 Luokan sisäiset toiminnot virtual void varaaO;

Tällä funktiolla varataan muistia luokan taulukoita varten. Koska taivutustapaukset lasketaan kahteen kertaan (murto- ja käyttötilassa), tämän funktion alussa tarkistetaan, ettei muistia ole jo varattu.

Kahteen kertaan ei varata. Muodostimessa annetaan taulukolle a alkuarvo NULL. Jos a on nyt jotain muuta, muisti on jo varattu, ja tästä funktiosta voidaan poistua. Tätä funktiota kutsutaan funktiosta SetVakiot().

void KokoaMatriisiO;

Tässä funktiossa kootaan yhtälöryhmän vasen puoli. Aluksi käydään koko taulukko läpi ja asetetaan kaikki alkiot nolliksi. Myöhemmin voidaan käsitellä nollasta eroavia alkioita. Ensin täytetään matriisin riveistä ensimmäinen ja kaksi viimeistä. Jos rivejä on enemmän (enemmän kuin yksi jänneväli), ne täytetään for-silmukassa. Funktiota kutsutaan funktiosta RatkaiseMatriisi().

void KokoaRHSO;

Tässä funktiossa täytetään yhtälöryhmän oikea puoli. Ensin täytetään ensimmäinen ja kaksi viimeistä alkiota. Väliin jääviä alkioita täytetään kolmen alkion ryhmissä for-silmukassa. Funktiota kutsutaan funktiosta RatkaiseMatriisi().

void SetVakiot(int);

Tässä funktiossa asetetaan jäsenmuuttujat E, L, I, P, lambda, a, b, k_M ja k_V. Lisäksi kutsutaan varaa()-funktiota, jolla varataan taulukoille muistia. Funktiota kutsutaan funktiosta RatkaiseMatriisiQ.

virtual void Laskentakuormiksi(int) = 0;

virtual void SetP(int) = 0;

virtual void SetAlfatf) = 0;

virtual void a_ja_b() = 0;

Näille funktioille ei määritellä toteutusta tässä kantaluokassa, virtual void jousivakiot();

Tässä funktiossa tarkistetaan, onko joku jousivakioista nolla. Koska nollaa ei saa päästää nimittäjään, annetaan tällaiselle jousivakiolle pieni arvo.

virtual void setlQ = 0;

Kantaluokassa ei määritellä toteutusta tälle funktiolle.

Liite 3

2.40.4 Luokan julkiset toiminnot CSuuntaO;

Luokan muodostimessa annetaan taulukolle a osoitteeksi NULL. Sen avulla voidaan tarkistaa, onko muistia varattu. Kun u:lle varataan muistia, sen osoite muuttuu.

virtual -CSuuntaO;

Tässä funktiossa vapautetaan muisti varaaQ-funktiossa varattujen taulukoiden lisäksi aukko- ja tuki taulukoilta.

virtual void RatkaiseMatriisifint rajatila);

Tässä funktiossa ratkaistaan sauvanpäämomentit tai -bimomentit ja siirtymät tai vääntökulmat tuilla.

Tämä on kokoelmafunktio, josta kutsutaan funktioita Laskentakuormiksi(), SetVakiotQ, SetAlfat(), KokoaMatriisiQ, KokoaRHSQ ja CMatriisi::vakiotQ. Lopussa täytetään tukisiirtymätaulukko matriisiluokassa ratkaistun rhs-vektorin viimeisillä alkioilla. Ensimmäinen tuki on siirtymätön.

Funktiota kutsutaan funktiosta CJännitykset: :Laske().

virtual double Normaalijannitysfint i, double x, int levy, double x) = 0;

virtual double Leikkausjannitysfint i, double x, int levy, double x) = 0;

Näille ei määritellä kantaluokassa mitään toteutusta.

2.41 CTaivutus

2.41.1 Luokan asema

CTaivutus on abstrakti kantaluokka luokille CTaivutusY ja CTaivutusZ. Luokan CTaivutus kantaluokka on CSuunta.

2.41.2 Jäsenmuuttujat double * u;

Momenttimenetelmän yhteydessä käytettävissä Berryn funktioissa tarvittavat vakiot.

2.41.3 Luokan sisäiset toiminnot double psiifint i);

double fii (int i);

Berryn funktiot jännevälillä i. Funktioita kutsutaan funktiosta aja_b();

void SetP(int rajatila);

Tämä funktio laskee eri jänneväleillä vaikuttavat normaalivoimat ja niiden perusteella lambdat ja u:t.

Jänneväliltä tulevaan normaalivoimaan lisätään sen yläpuolisilta jänneväleiltä tulevat normaalivoimat.

Normaalivoiman on oltava puristava, eikä se saa myöskään puuttua kokonaan. Siksi tässä funktiossa varmistetaan normaalivoimalle pieni minimiarvo. Funktiota kutsutaan funktiosta

SetVakiotO-void varaaQ;

Tässä funktiossa varataan muistia taulukolle u, jos sitä ei vielä ole varattu. Muiden taulukoiden muistin varaamista varten kutsutaan kantaluokan varaaQ-funktiota. Tätä funktiota kutsutaan funktiosta SetVakiot().

Liite 3

void a_ja_bO;

Tässä funktiossa asetetaan sauvanpäämomenttien kertoimet. Funktiota kutsutaan funktiosta SetVakiot().

2.41.4 Luokan julkiset toiminnot CTaivutusQ;

Annetaan taulukon u osoitteeksi NULL, virtual -CTaivutusQ;

Tuhoajassa vapautetaan muisti taulukolta u.

virtual double Momenttifint i, double x);

Sauvanpäämomenttien aiheuttama taivutusmomentti jännevälillä i pisteessä x.

virtual double Leikkausvoimafint i, double x);

Sauvanpäämomenttien aiheuttama leikkausvoima jännevälillä i pisteessä x.

virtual double Taipumafint i, double x);

Sauvanpäämomenttien aiheuttama taipuma jännevälillä i pisteessä x.

2.42 CTaivutusY

2.42.1 Luokan asema

CTaivutusY periytyy luokasta CTaivutus.

2.42.2 Luokan sisäiset toiminnot void Laskentakuormiksifint rajatila);

Tässä funktiossa etsitään kaikki taivu tus kuormat ja muutetaan ne ominaiskuormista laskentakuormiksi.

Epäkeskiset puristuskuormat muutetaan pistemomenteiksi funktiolla CAukko::SetPistemomZ() ja kaikki kuormat laskentakuormiksi funktiolla CAukko:: SetKuormatY(). Tätä funktiota kutsutaan funktiosta RatkaiseMatriisiQ.

void SetPfint rajatila);

Tässä funktiossa kutsutaan ensin kantaluokan SetP()-funktiota, jotta saadaan P- ja lambda-taulukot täyteen. Näiden arvot viedään kuormatietoihin kutsumalla funktiota CAukko::SetP_y(). Tätä funktiota kutsutaan funktiosta SetVakiotQ.

void SetAlfatQ;

Tässä funktiossa täytetään taulukot alfal, alfa2, M_nolla, Q_nollal, Q_nolla2 ja v_fii. Funktiota kutsutaan funktiosta RatkaiseMatriisi().

void jousivakiotO;

Tässä täytetään jousivakiotaulukot oikeansuuntaisilla jousilla. Funktiota kutsutaan funktiosta SetVakiotQ.

Liite 3 void setIO;

Tässä valitaan poikkileikkaustiedoista oikea jäyhyysmomentti. Funktiota kutsutaan funktiosta SetVakiot().

2.42.3 Luokan julkiset toiminnot double Momenttifint i, double x);

Tässä funktiossa lisätään kantaluokassa laskettuun momenttiin kuormituksesta aiheutuva momentti jännevälillä i pisteessä x. Funktiota kutsutaan funktiosta CJannitykset::momentit().

double Leikkausvoimafint i, double x);

Tässä funktiossa lisätään kantaluokassa laskettuun leikkausvoimaan kuormituksesta aiheutuva leikkausvoima jännevälillä i pisteessä x. Funktiota kutsutaan funktiosta CJännitykset: :momentit().

double Taipumafint i, double x);

Tässä funktiossa lisätään kantaluokassa laskettuun taipumaan kuormituksesta aiheutuva taipuma jännevälillä i pisteessä x. Funktiota kutsutaan funktiosta CJännitykset: :taipumat().

double* GetPO;

Tämä funktio palauttaa osoittimen normaalivoimataulukkoon (P). Funktiota kutsutaan funktiosta C Jännitykset:: Laskef).

2.43 CTaivutusZ

Luokka on muuten samanlainen kuin CTaivutusY, mutta tässä luokassa ei ole funktiota GetPQ.

Kuormat ovat z-suuntaisia ja momentit y:n ympäri, kun luokassa CTaivutusY kuormat ovat y- suuntäisiä ja momentit z:n ympäri.

2.44 CTestiDIg

2.44.1 Luokan asema

Luokka on tarkoitettu momenttien ja jännitysten katsomiseen ruudulta. Dialogi avataan CMainFrame- luokasta funktiossa OnLaskeQ.

2.44.2 Jäsenmuuttujat CListBox m_siir_lista;

Tähän tulevat y- ja z-suuntaiset siirtymät sekä vapaan väännön vääntömomentit.

CListBox m_mom_lista;

Tähän tulevat momentit z:n ja y:n ympäri sekä bimomentit.

CListBox m_leik_lista;

Tähän tulevat y-ja z-suuntaiset leikkausvoimat sekä estetyn väännön vääntömomentit.

double mjambda;

Epästabiiliuskerroin.

Liite 3

CJannitykset mJannitys;

Tiedot jännityksistä ja momenteista.

CString MzStr;

CString MyStr;

CString QyStr;

CString QzStr;

CString VyStr;

CString VzStr;

CString BStr;

CString MeStr;

CString MvStr;

Merkkijonot momentteja varten.

CString normStr;

CString leikkStr;

CString vertStr;

Merkkijonot jännityksiä varten.

2.44.3 Luokan sisäiset toiminnot

virtual void DoDataExchange (CDataExchange* pDX);

Liitetään m_-alkuiset jäsenmuuttujat dialogin kenttiin.

afx_msg void OnYSuuntaQ;

Kirjoitetaan muuttujan mJannitys tiedoista otetut y-taivutuksen momentti-, leikkausvoima- ja taivutustiedot dialogin vastaaviin listoihin. Joka rivin alussa on pilkulla erotettuna jännevälin numero ja elementin numero (molempien numerointi alkaa tässä ykkösestä eikä nollasta). Momentin yksikkö on kNm, siksi siitä pitää poistaa kuusi nollaa. Leikkausvoimat ovat kilonewtoneita, joten kolmen nollan poisto riittää. Taipumat kelpaavat sellaisenaan. Samat rivit kirjoitetaan myös merkkijonoihin MzStr, QyStr ja VyStr. Rivien väliin lisätään rivinvaihtomerkki.

afx_msg void OnZSuuntaQ;

Kuten OnYSuunta().

afx_msg void OnVaantoQ;

Bimomentin yksikkö on kNm2. Siksi siitä pitää poistaa yhdeksän nollaa. Estetyn ja vapaan väännön vääntömomenttien yksiköt ovat kNm, joten niistä poistetaan kuusi nollaa. Muuten OnVaanto()-funktio on samanlainen kuin OnYSuunta().

afx_msg void OnJannitysQ;

Muuttujasta mJannitys kopioidut normaali-, leikkaus- ja vertailujännitykset kopioidaan CJannitysDlg- dialogin jäsenmuuttujiksi. Lisäksi mJannitys-muuttujasta tarvitaan aukkojen määrä sekä elementtijakotiedot. Tässä funktiossa myös tarkistetaan, ylittyykö myötöraja. CJannitysDlg:sta kopioidaan merkkijonot normStr, leikkStr ja vertStr.

2.45 CTiedostoDIg

Tässä dialogissa kysytään käyttäjältä tulostustiedoston nimi ja otsikko. Nimen maksimipituus on 8 merkkiä. Dialogi avataan funktiosta CMainFrame::OnTulokset().

Liite 3

2.46 CTuki

2.46.1 L uokan asema

Luokka CTuki sisältää vain tiedot tuen jousivakioista. Se ei laske mitään.

2.46.2 Jäsenmuuttujat double kVy;

double kVz;

Jousivakiot y- ja z-suuntaisille siirtymäjousille.

double kMx;

Jousivakio vääntöjouselle.

double kMy;

double kMz;

Jousivakio z- ja y-suuntaisen taivumksen kiertymäjousille.

double kB;

Jousivakio vääntymäjouselle.

2.46.3 Luokan julkiset toiminnot CTukiO;

Muodostimessa annetaan kaikille jousivakioille oletusarvo.

void Set_kVy(double k);

void Set_kVz(double k);

void Set_kMx(doubIe k);

void Set_kMy(double k);

void Set_kMz(double k);

void Set_kB(double k);

Annetaan jousivakioille arvot. Funktioita kutsutaan luokan CTukiKuormaDlg funktioissa OnTukiQ ja OnAlatukiQ.

double Get_kVyO;

double Get_kVzQ;

double GetJvMxO;

double Get_kMy();

double Get_kMzQ;

double Get_kB0;

Palautetaan jousivakioiden arvot. Funktioita kutsutaan luokan CTukiKuormaDlg funktioissa OnTukif) ja OnAlatukiQ.

virtual void Serialize (CArchive& ar);

Serialisointifunktio. Tallennetaan kaikki jousivakiot.

Liite 3

2.47 CTukiDIg

2.47.1 Luokan asema

CTukiDIg avataan luokasta CTukiKuormaDlg komennolla OnTuki() ja OnAlatuki().

2.47.2 Jäsenmuuttujat CStatic m_st_kvz;

CStatic m_st_kvy;

CStatic m_st_kmz;

CStatic m_st_kmy;

CStatic m_st_kmx;

CStatic m_st_kb;

Dialogin otsikkokentät.

CEdit m_kvz_edit;

CEdit m_kvy_edit;

CEdit m_kmz_edit;

CEdit m_kmy_edit;

CEdit m_kmx_edit;

CEdit m_kb_edit;

Dialogin editointikentät.

double m_kB;

double m_kMx;

double m_kMy;

double m_kMz;

double m_kVy;

double m_kVz;

Dialogin jousivakiotiedot.

int tukiNro;

Tuen numero.

int maxNro;

Tukien lukumäärä.

2.47.3 Luokan sisäiset toiminnot

virtual void DoDataExchange(CDataExchange* pDX);

Tässä funktiossa liitetään m_-alkuiset jäsenmuuttujat dialogin kenttiin. Jousivakioille annetaan suuri maksimiarvo.

virtual BOOL OnlnitDialogQ;

Dialogin alustaminen riippuu siitä, minkä tuen tietoja halutaan saada. Välituilla voi antaa ainoastaan siirtymäjousivakioita. Siksi silloin väritetään dialogin muut kentät harmaiksi. Alatuella siirtymäjousivakioita ei voi antaa, vaan nämä vakiot ovat aina suuria. Ylätuella voi antaa kaikkien jousien jousivakioita.

Liite 3

afx_msg void OnOletusQ;

Tällä funktiolla palautetaan dialogin kenttiin oletusarvot.

2.48 CTukiKuormaDIg

2.48.1 Luokan asema

CTukiKuormaDlg-dialogin kautta annetaan tukien jousivakioita ja jännevälien kuormatietoja. Dialogi avataan luokasta CMainFrame funktiossa OnTukiKuorma(). Tästä luokasta avataan dialogit CTukiDlg ja CKuormaDlg.

2.48.2 Jäsenmuuttujat CSpinButtonCtrl m_aukkoSpin;

Tästä voi valita käsiteltävän jännevälin.

int m_aukkoNro;

Jännevälin numero, int iMax;

Jännevälien lukumäärä.

CArray<CTuki, CTuki&> tukiarvot;

Jousivakiotaulukko.

CArray<CAukko, CAukko&> aukkotiedot;

Taulukko jännevälien tiedoista.

C Array<CKuormTapaus, CKuormTapaus&> kuormTapaukset;

Kuormitustapaustaulukko.

CArray<CString, CString&> qyStr;

CArray<CString, CString&> qzStr;

CArray<CString, CString&> PxStr;

CArray<CString, CString&> PyStr;

CArray<CString, CString&> PzStr;

CArray<CString, CString&> MxStr;

CArray<CString, CString&> MyStr;

CArray<CString, CString&> MzStr;

CArray<CString, CString&> mxStr;

Taulukot merkkijonoja varten. Taulukon yhteen alkioon kirjoitetaan yhden jännevälin kuormat.

2.48.3 Luokan sisäiset toiminnot

virtual void DoDataExchangefCDataExchange* pDX);

Tässä funktiossa liitetään m_-alkuiset jäsenmuuttujat dialogin kenttiin.

Liite 3

virtual BOOL OnlnitDialogQ;

Tässä funktiossa asetetaan m_aukkoSpin:lle rajat. Jännevälien numerointi aloitetaan ykkösestä ja suurin numero on jännevälien lukumäärä.

afx_msg void OnKuormaQ;

Tässä funktiossa avataan dialogi, jolla kysytään valitun jännevälin kuormia. Jännevälin numero on yhtä pienempi kuin m_aukkoSpin:stä valittu, koska oikeastihan numerointi alkaa nollasta eikä ykkösestä. CKuormaDlg:lle annettava jännevälin numero sen sijaan on sama kuin m_aukkoSpin:stä valittu, koska siinä numerointi alkaa ykkösestä. Kuormia varten kopioidaan myös kuormitustapaustaulukko ja olemassa olevat jännevälitiedot. Kun CKuormaDlg suljetaan, siitä kopioidaan merkkijonot qyStrji], qzStrfi] jne.

afx_msg void OnTukif);

Tämä funktio avaa dialogin, jolla kysytään valitun jännevälin yläpuolisen tuen jousivakioita.

afx_msg void OnAlatukif);

Tämä funktio avaa dialogin, jolla kysytään alimmaisen tuen jousivakioita.

2.48.4 Luokan julkiset toiminnot

CTukiKuormaDlgfCVVnd* pParent = NULL);

Luokan muodostimessa annetaan muuttujille m_aukkoNro ja iMax alkuarvo 1.

2.49 CVaanto

2.49.1 Luokan asema

CVaanto periytyy luokasta CSuunta.

2.49.2 Luokan sisäiset toiminnot void a_ja_bO;

Tässä funktiossa lasketaan sauvanpääbimomenttien kertoimet. Funktiota kutsutaan funktiosta SetVakiotQ.

void jousivakiotO;

Tässä funktiossa annetaan valitaan oikeat jousivakiot. Kiertymäjousen paikalle otetaan vääntymäjousi.

Siirtymäjousen paikalle tulee vääntöjousi. Funktiota kutsutaan funktiosta SetVakiot().

void setlQ;

Jäyhyysmomentin paikalle valitaan poikkileikkaustiedoista sektoriaalinen jäyhyysmomentti. Funktiota kutsutaan funktiosta SetVakiotQ.

void SetPfint rajatila);

Normaalivoiman tilalla vääntöyhtälöissä on vapaan väännön vääntöjäykkyys GI,. Lambdan paikalle pannaan vääntöyhtälöiden vakio k. Arvot siirretään myös kuormatietoihin funktiossa CAukko::SetP_v(). Funktiota kutsutaan funktiosta SetVakiotQ.

Liite 3

void SetAlfatO;

Tässä funktiossa täytetään taulukot alfal, alfa2, M_nolla, Q_nollal ja Q_nolla2. Taulukko v_fii on jo tilanvarausfunktiossa (varaa()) täytetty nollilla, alfal ja alfa2 ovat ulkoisen kuormituksen aiheuttamia sauvanpäävääntymiä. M_nolla on sauvanpään ulkoinen bimomentti, joka on nolla, koska tässä ohjel­

massa ei voi antaa pistebimomentteja. Q_nollal ja Q_nolla2 ovat ulkoisen kuormituksen aiheuttamia kokonaisvääntömomentteja sauvan päissä. Funktiota kutsutaan funktiosta RatkaiseMatnisi().

void Laskentakuormiksifint rajatila);

Tässä funktiossa kutsutaan jokaisella jännevälillä CAukko-luokan funktiota SetVaantokuormat. Tätä funktiota kutsutaan funktiosta RatkaiseMatriisi().

2.49.3 Luokan julkiset toiminnot double Bimomenttifint i, double x);

Funktiossa lasketaan yhteen sauvanpääbimomenttien ja ulkoisen vääntökuormituksen aiheuttama bimomentti jännevälillä i pisteessä x. Funktiota kutsutaan funktiosta CJännitykset: :momentit().

double EstMomentti(int i, double x);

Funktiossa lasketaan yhteen sauvanpääbimomenttien ja ulkoisen vääntökuormituksen aiheuttama estetyn väännön vääntömomentti jännevälillä i pisteessä x. Funktiota kutsutaan funktiosta CJannitykset: :momentit().

double VapMomenttifint i, double x);

Funktiossa lasketaan yhteen sauvanpääbimomenttien ja ulkoisen vääntökuormituksen aiheuttama vapaan väännön vääntömomentti jännevälillä i pisteessä x. Funktiota kutsutaan funktiosta CJannitykset: :momentit().

double Normaalijannitysfint i, double x, uit levy, double s);

Tässä funktiossa lasketaan bimomentista aiheutuva normaalijännitys. Funktiota kutsutaan funktiosta CJannitykset: :Normaalij annitys().

double Leikkausjannitys(int i, double x, int levy, double s);

Tässä funktiossa lasketaan yhteen estetyn ja vapaan väännön vääntömomentista aiheutuvat leikkausjännitykset. Funktiota kutsutaan funktiosta CJannitykset::Leikkausjannitys().