УНИВЕРЗИТЕТ У КРАГУЈЕВЦУ ФАКУЛТЕТ ЗА МАШИНСТВО И ГРАЂЕВИНАРСТВО У КРАЉЕВУ Небојша М. Богојевић РАЗВОЈ МЕТОДЕ ЗА ОЦЕНУ КВАЛИТЕТА СИМУЛАЦИЈЕ ДИНАМИЧКОГ ПОНАШАЊА ЖЕЛЕЗНИЧКИХ ВОЗИЛА Докторска дисертација Краљево, 2015. год. ИДЕНТИФИКАЦИОНА СТРАНИЦА ДОКТОРСКЕ ДИСЕРТАЦИЈЕ I. Аутор Име и презиме: Небојша Богојевић Датум и место рођења: 19.3.1974. Краљево Садашње запослење: асистент на Факултету за машинство и грађевинарство у Краљеву II. Докторска дисертација Наслов: Развој методе за оцену квалитета симулације динамичког понашања железничких возила Број страница: 216 Број слика: 95 Број библиографских података: 96 Установа и место где је рад израђен: Факултет за машинство и грађевинарство у Краљеву, Краљево Научна област (УДК): Железничко машинство (629.4.027.4:625.143(043.3)) Ментор: проф др Војкан Лучанин III. Оцена и одбрана Датум пријаве теме: 25.9.2012. год. Број одлуке и датум прихватања докторске дисертације: 1/6 9.1.2013. год Комисија за оцену подобности теме и кандидата: проф др Мирослав Демић, ред. проф, проф др Срђан Русов, ред. проф, проф др Драган Петровић, ван. проф, проф др Златан Шошкић, ван. проф, проф др Војкан Лучанин, ред. проф Комисија за оцену и одбрану докторске дисертације: проф др Срђан Русов, ред. проф, проф др Драган Петровић, ван. проф, проф др Златан Шошкић, ван. проф, проф др Војкан Лучанин, ред. проф Датум одбране дисертације: Захваљујем се својој породици на несебичној подршци током израде овог рада. РАЗВОЈ МЕТОДЕ ЗА ОЦЕНУ КВАЛИТЕТА СИМУЛАЦИЈЕ ДИНАМИЧКОГ ПОНАШАЊА ЖЕЛЕЗНИЧКИХ ВОЗИЛА Резиме Експериментална испитивања железничких возила представљају најпоузданији начин за утврђивање њихових својстава и пресудни критеријум за одобрење њихове експлоатације. Међутим, експериментална испитивања су обимна, дуготрајна и скупа, па су алтернативни методи, који се користе током пројектовања возила, од највећег интереса. У том циљу се развијају нумеричке симулације кретања железничких возила, које на основу математичког модела возила и колосека омогућавају израчунавања динамичких величина у временском и фреквентном домену. Циљ овог истраживања је дефинисање методологије за валидацију модела динамичког понашања железничког возила. Придржавајући се препоруке тренутно важећих стандарда за експериментална испитивања динамичког понашања железничког возила (UIC 518 и EN14363), а на основу досадашњих истраживања верификације и валидације модела железничких возила и нумеричких модела уопште, предложена је нова метрика за оцену валидности нумеричког модела железничког возила. Предложена валидациона метрика оцену о слагању резултата добијених симулацијом и експерименталним испитивањем формира на основу поређења кумулативних функција вероватноћа изабраних величина за поређење. У оквиру дисертације дефинисана је валидациона хијерархија, валидациона метрика, величине за поређење и граничне вредности валидационе оцене за прихватање валидности нумеричког модела. Предложена методологија валидације примењена је на модел железничког возила за превоз руде гвожђа типа „Fanoo 040“. Резултати валидације модела добијени методологијом предложеном у овој дисертацији дати су упоредо резултатима добијеним методологијом валидације предложене у оквиру пројекта “DYNOTrain”. Новопредложена валидациона метрика омогућава да се изврши објективна оцена слагања резултата симулације и експеримента за сваку од изабраних величина за поређење. Анализом добијених резултата показано је да новопредложена методологија валидације поставља строжије услове валидације у односу на методологију валидације приказане у оквиру пројекта “DYNOTrain”. Валидација модела извршена коришћењем новопредложене методологије даје могућност да се смањи обим експерименталних испитивања. Кључне речи: валидација, моделирање, симулација, експериментално испитивање DEVELOPMENT OF METHOD FOR ASSESSING THE QUALITY OF SIMULATIONS OF DYNAMIC BEHAVIOR OF RAILWAY VEHICLES Abstract Experimental investigations of railway vehicles represent the most reliable way to determine their properties and decisive criterion for the approval of their exploitation. However, experimental tests are extensive, time-consuming and expensive, so alternative methods, which are used in the design of vehicles, are of the greatest interest. With this goal are developed numerical simulations of the dynamic behavior of railway vehicles that, on the basis of mathematical models, allow calculation of dynamic values in the time and frequency domain. The aim of this study is to define a methodology for the validation of models od railway vehicles dynamics. By adhering to the recommendations of actual standards for experimental investigation of the dynamic behavior of railway vehicles (UIC 518 and EN14363), and based on previous research of verification and validation of railway vehicles model and numerical models in general, a new validation metrics is proposed for assessment of the numerical models of railway vehicles. The proposed validation metrics assesses the agreement between the results obtained by simulation and experimental testing on the basis of comparison between cumulative probability functions of the assessment quantities. In this dissertation is defined the validation hierarchy, validation metrics, assesment quantities and validation limits for estimation of acceptance of a numerical model of a railway vehicle. The proposed methodology was applied to the validation of a model of railway wagon of type "Fanno 040", which is used for transport of iron ore. The results obtained with the methodology for model validation proposed in this thesis are compared to the results obtained by the methodology proposed in the international project "DYNOTrain". The newly proposed validation metrics enabled an objective assessment of the agreement between simulation and experimental results for each of the selected assesment quantities. The obtained results showed that the newly proposed methodology for validation of model of railway vehicles represents a more severe estimation of agreement between the simulation and experimental results than the metrics proposed in the project "DYNOTrain". Model validation performed using the newly proposed methodology provides an opportunity for reduction of the volume of expensive experimental tests. Keywords: validation, modeling, simulation, experimental investigation Садржај Номенклатура ................................................................................................................ 1 1 Увод .......................................................................................................................... 6 2 Валидација и верификација модела .................................................................. 9 2.1 Увод .................................................................................................................. 9 2.2 Модел, верификација и валидација ............................................................. 11 2.3 Активности верификације ............................................................................ 16 2.4 Активности валидације ................................................................................ 17 2.5 Валидациона хијерархија ............................................................................. 19 2.6 Експеримент намењен за валидацију .......................................................... 20 2.7 Валидациона метрика ................................................................................... 21 2.8 Значај валидације у области железничког машинства .............................. 24 3 Преглед метода за валидацију модела ............................................................. 28 3.1 Категоризација валидационих метода ........................................................ 28 3.1.1 Графичке методе валидације модела ...................................................... 29 3.1.2 Методе валидација поређењем својстава сигнала ................................. 30 3.1.2.1 Средња апсолутна грешка ................................................................ 31 3.1.2.2 Средња квадратна грешка ................................................................ 31 3.1.2.3 Раселова метрика .............................................................................. 31 3.1.2.4 Спраг и Гир метрика ......................................................................... 32 3.1.2.5 EARTH метрика ................................................................................ 33 3.1.3 Методе валидације базиране на функцијама вероватноће ................... 35 3.1.3.1 Колмогоrов-Смирнов метрика ......................................................... 35 3.1.3.2 Андерсон-Дарлинг метрика ............................................................. 36 3.1.3.3 Кулбак-Лајблерова дивергенција .................................................... 36 3.1.3.4 Валидациона метрика базирана на површинама ........................... 36 3.1.4 Методе валидације модела базиране на тестирању хипотеза............... 37 3.1.4.1 Студентов t-тест ................................................................................ 39 3.1.4.2 Пирсонов Хи-квадрат тест ............................................................... 42 3.1.4.3 Фишеров F -тест ................................................................................ 43 3.1.5 Методе валидације модела базиране на Бајесовој формули................. 45 3.1.5.1 Дефиниција условне вероватноће ................................................... 46 3.1.5.2 Независност догађаја ........................................................................ 46 3.1.5.3 Формула потпуне вероватноће и Бајесова формула ...................... 47 3.2 Преглед метода валидације модела железничког возила ......................... 48 4 Методологија валидације модела железничког возила ............................... 58 4.1 Валидациона метрика ................................................................................... 60 4.1.1 Предлог нове валидационе метрике ........................................................ 62 4.2 Избор параметра за валидацију модела ...................................................... 66 4.3 Граничне вредности ...................................................................................... 67 4.4 Валидациона хијерархија ............................................................................. 68 5 Моделирање железничких возила .................................................................... 70 5.1 Симулација динамичког понашања железничког возила ......................... 70 5.2 Вагон за превоз руде гвожђа ........................................................................ 72 5.2.1 Претпоставке приликом формирања модела ......................................... 73 5.2.2 Модел примарног вешајног система ....................................................... 75 5.2.3 Модел секундарног вешајног система .................................................... 77 5.2.4 Модел везе обртног постоља са сандуком вагона ................................. 80 5.2.5 Осовински склоп ....................................................................................... 81 5.3 Модел колосека ............................................................................................. 83 5.4 Коефицијент трења у контакту точак шина ............................................... 87 5.5 Неправилности колосека .............................................................................. 88 6 Експериментално испитивање .......................................................................... 90 6.1 Мерене величине и распоред мерних места ............................................... 90 6.2 Профили точкова и шина ............................................................................. 91 6.3 Траса колосека на којој је извршено експериментално испитивање ....... 94 6.4 Резултати испитивања .................................................................................. 95 7 Имплементација валидационе метрике .......................................................... 97 7.1 Избор деоница за валидацију ....................................................................... 97 7.2 Натоварен вагон у кривини .......................................................................... 98 7.3 Натоварен вагон на правцу ........................................................................ 105 7.4 Празан вагон у кривини ............................................................................. 110 7.5 Празан вагон на правцу .............................................................................. 116 7.6 Граничне вредности валидационе оцене .................................................. 121 8 Закључак ............................................................................................................. 123 Списак слика ................................................................................................................. I Списак табела ............................................................................................................ IV Прилог 1 ....................................................................................................................... VI Прилог 2 ...................................................................................................................... XV Прилог 3 ..................................................................................................................... LVI 1 НОМЕНКЛАТУРА UIC – Union Internationale des Chemins de fer - Међународна железничка унија EN - European Standard - Европскe норме ФП7 – The seventh framework programme - Седми оквирни програм WP – work package – радни пакет MAE - mean absolute error - средња апсолутна грешка RMS – root mean square – средња квадратна вредност RMSE - root mean square error - средња квадратна грешка RMSD - root-mean-square deviation - средња квадратна девијација MAE - mean absolute error - Средња апсолутна грешка ANOVA – поступак анализе варијанси поређених сигнала SCDF – кумулативне функције вероватноће формиране од података добијених симулацијом ECDF – кумулативне функције вероватноће формиране од података добијених експерименталним испитивањем ei – грешка pi – вредности сигнала добијене експерименталним мерењем si – вредности сигнала добијене симулацијом MR – разлика амплитуда два поређена сигнала према Раселовој валидационој метрици PR – корелација између фаза два поређена сигнала према Раселовој валидационој метрици MSG – одступања између амплитуда два поређена сигнала према Спра и Гир валидационој метрици PSG – разлика између фаза два поређена сигнала према Спра и Гир валидационој метрици CSG – разумљиви фактор одступања DTW – Алгоритам динамичке трансформације времена (Dynamic Time Warping) 2 Errorrmag – разлика у амплитудама поређених сигнала према EARTH валидационој метрици Errorrphase – разлика у амплитудама поређених сигнала према EARTH валидационој метрици Errorrtopology – Разлика облика два поређена сигнала према EARTH валидационој метрици PDF – Функција густине вероватноће CDF – Кумулативна функција густине вероватноће d – Колморгонов-Смирнов валидациона оцена AD – Андерсон - Дарлинг валидациона оцена 𝜔(𝑥) - Тежинска функција DKL - Кулбак-Лајблерова валидациона оцена pmf - probability mass function – Функција вероватноће дискретних сигнала D(F, Sn) – Ферсон – Оберкампф валидациона оцена F(x) – Функција вероватноће промељиве добијене симулацијом Sn(x) - Функција вероватноће промељиве добијене експерименталним испитивањем H0 – Нулта хипотеза H1 – Алтернативна хипотеза ?̅? – Средња вредност α – Грешка прве врсте β – Грешка друге врсте 𝛾 – Снага теста p – Праг значајности sd – Стандардна девијација sg - Стандардна грешка t - Студентова статистика df - Статистички број степени слободе Fs – Фишерова статистика Ω - Скуп свих догађаја Е - Расподела случајних променљивих P - Вероватноћа променљивих 3 Y – Сила у бочном правцу у контакту точак шина Q – Сила у вертикалном правцу у контакту точак шина Yqst - Квази-статичка сила у бочном правцу Qqst - Квази-статичка сила у вертикалном правцу ∑Yqst – Сума квази-статичких сила у бочном правцу Ymax - Максимална вредност силе у бочном правцу Qmax - Максимална вредност силе у вертикалне силе (Y/Q)max - Максимална вредност односа сила у бочном и вертиклном правцу ?̈?𝑟𝑚𝑠 ∗ - RMS-вредност убрзања сандука вагона у бочном правцу ?̈?𝑟𝑚𝑠 ∗ - RMS-вредност убрзања сандука вагона у вертикалном правцу правцу ?̈?𝑚𝑎𝑥 ∗ - Максимална вредност убрзања сандука вагона у бочном правцу ?̈?𝑚𝑎𝑥 ∗ - Максимална вредност убрзања сандука вагона у вертикалном правцу x – тест статистика за оцену разлика две кумулативне функције s1, s2 – варијансе променљиве d1, d2 - степени слободе променљивих M – оцена слагања средњих вредности две кумулативне функције ОS – валидациона оцена ?̈?∗ -Убрзања сандука вагона у бочном правцу ?̈?∗ - Убрзања сандука вагона у вертикалном правцу ?̈?+ -Убрзања бочном правцу на обртном постољу ?̈?+ - Убрзања бочном правцу на обртном постољу 𝑌𝐼1 1 – Сила у бочном правцу при чему је у експоненту означено са 1 водеће а са 2 вођено обртно постоље, са I у индексу је означена прва а са II друга осовина у обртном постољу док је са 1 и 2 у индексу означена сила на левом односно десном точку 𝑄𝐼1 1 – Сила у бочном правцу при чему је у експоненту означено са 1 водеће а са 2 вођено обртно постоље, са I у индексу је означена прва а са II друга осовина у обртном постољу док је са 1 и 2 у индексу означена сила на левом односно десном точку cmbaz – Коефицијент пригушења између бочног носача и еластичног адаптера у z правцу 4 kmbaz - Коефицијент крутости између бочног носача и еластичног адаптера у z правцу cmbax - Коефицијент пригушења између бочног носача и еластичног адаптера у x правцу kmbax - Коефицијент крутости између бочног носача и еластичног адаптера у x правцу F – Сила 𝜇- Коефицијент трења 𝜇0 – Статичка вредност коефицијента трења 𝜇𝑑 – Динамичка вредност коефицијента трења k - Крутост еластичног елемента kzyw – Коефицијент крутости између клина и попречног носача kzys – Коефицијент крутости између попречног носача и бочног носача k3zws – Коефицијент крутости између клина и бочног носача у вертикалном правцу kxws – Коефицијент крутости између клина и бочног носача у подужном правцу kf2yzws - Коефицијент крутости између клина и бочног носача у бочном правцу Nbw – Нормална сила којом попречни носач делује на клин Nsfw – Нормална сила којом бочни носач делује на клин Fµbw – Сила трења између клина и попречног носача Fµsfw – Сила трења између клина и бочног носача Fz – Сила у вертикалном правцу која делује на клин kzrt – Крутост колосека у вертикалном правцу 0k - Статичка вредност крутости у вертикалном правцу fs - Фреквенција преласка возила преко прагова kyrt – Коефицијент крутости између шине и прага у бочном правцу cyrt – Коефицијент пригушења између шине и прага у бочном правцу kzrt – Коефицијент крутости између шине и прага у вертикалном правцу czrt – Коефицијент пригушења између шине и прага у вертикалном правцу 5 kytg – Коефицијент крутости између прага и земљаног трупа у бочном правцу cytg –– Коефицијент пригушења између прага и земљаног трупа у бочном правцу kztb – Коефицијент крутости између прага и застора у вертикалном правцу cztb – Коефицијент пригушења између прага и застора у вертикалном правцу kzbg – Коефицијент крутости између застора и земљаног трупа у вертикалном правцу czbg - Коефицијент пригушења између застора и земљаног трупа у вертикалном правцу H(f) – Динамичка крутост колосека у вертикалном правцу ?̈?∗1𝐼 - Убрзање на раму сандука вагона изнад водећег обртног постоља у хотизонталном правцу ?̈?∗1I - Убрзања на раму сандука вагона изнад водећег обртног постоља у вертикалном правцу ?̈?∗1II – Убрзањe на раму сандука вагона изнад вођеног обртног постоља у хотизонталном правцу ?̈?∗1II − Убрзањe на раму сандука вагона изнад вођеног обртног постоља у вертикалном лном правцу ?̈?+11, ?̈?+21 – Убрзања у бочном правцу на крајевима бочних носача на водећем обртном постољу ?̈?+31, ?̈?+41 – Убрзања у бочном правцу на крајевима бочних носача на вођеном обртном постољу 𝑌11, 𝑌12 – Силе у контакту точак-шина у хоризонталном правцу на точковим на водећој осовини водећег обртног постоља 𝑄11, 𝑄12 – Силе у контакту точак-шина у вертикалном правцу на точковим на водећој осовини водећег обртног постоља 𝑌21, 𝑌22 – Силе у контакту точак-шина у хоризонталном правцу на точковим на вођеној осовини водећег обртног постоља 𝑄21, 𝑄22 – Силе у контакту точак-шина у вертикалном правцу на точковим на вођеној осовини водећег обртног постоља 𝑦?̈? – Убрзање у бочном правцу водеће осовине на водећем обртном постољу 6 1 УВОД Са развојем рачунара у употребу су ушли различити нумерички модели за симулацију квазистатичког и динамичког понашања возила у различитим условима. На основу тих нумеричких модела могуће је предвидети понашање возила у различитим ситуацијама, што је од највећег научног и техничког интереса када експериментално испитивање није могуће или је економски неисплативо (нпр. при истраживању исклизнућа железничког возила са шина). За предвиђање понашања железничких возила користе се модели израђени у различитим софтверским пакетима као што су MatLab, UmLab, Simpack, Nucars, Medinа, Gensys, итд. Валидација софтверских пакета се најчешће врши применом тестова, као што су Manchester Benchmark 1 и 2, док је метода валидације и валидација различитих модела железничких возила парцијално дефинисана од стране различитих истраживача [1,2,3,4,5], у зависности од параметара који су били од интереса приликом формирања модела и изучавања понашања реалног система. Различити модели за симулацију динамичког понашања вагона дају резултате који се у већој или мањој мери разликују. Обзиром да се резултати симулација и експерименталних испитивања никада не могу потпуно поклопити, поставља се питање у којој мери резултати одређеног модела могу релевантно да представе реално понашање железничког возила. С обзиром да је главни циљ досадашњих истраживања применом симулације кретања био проучавање феномена везаних за кретање железничких возила, нису чињени систематски напори посвећени развијању јединствених критеријума за оцену квалитета симулације. Међутим, свесни значаја тог питања, низ аутора је у оквиру својих истраживања кретања железничких возила независно развијао различите методе валидације и верификације резултата симулације. У почетној фази интензивне примене симулације кретања железничких возила, током прве половине претходне деценије, методи валидације и верификације су заснивани на поређењу временских промена сигнала добијених симулацијом и експерименталним мерењима. У те сврхе су кориштени сигнали убрзања сандука железничког возила и сигнали сила у вешајном систему возила. Најважнији пример таквог приступа проблему верификације и валидације резултата симулације у фреквентном домену је дат у референци [3]. 7 Стохастички карактер сигнала, међутим, чини оцену временских записа кориштених сигнала сложеном, па су у другој половини претходне деценије развијани методи поређења мерних сигнала у фреквентном домену. Најважнији резултати везани за верификацију и валидацију резултата симулације у фреквентном домену су дати у референцама [2 – 4]. На значај и важност, као и на потребу, дефинисања јединствене методологије верификације и валидације нумеричких модела железничких возила указују радови водећих истраживача у овој области као што су S. Stichel [6], M.Berg [7], S.D. Iwnicky [8] и други. Једну од најобимнијих истраживања у области валидације и верификације модела железничких возила извршена је у оквиру радног пакета WP-5 „Model building and validation“ ФП7 пројектa „DynoTrain“ . У циљу дефинисања методологије за оцену квалитета симулације динамичког понашања железничких возила, у овој дисертацији су строго дефинисани појмови валидације и верификације модела, а затим је извршен преглед методологија валидације и валидационих метрика. Основни циљ тога посла је развој теоретских основа за формирање нове валидационе метрике која би се могла применити за оцену слагања резултата нумеричке симулације и експерименталног испитивања при кретању железничких возила. Основни циљ дисертације је дефинисање методологије валидације модела железничких возила, што подразумева дефинисање параметара, граничних вредности и валидационе метрике за оцену квалитета симулације динамичког понашања железничких возила. Развијена методологија валидације примењена ја за валидацију модела вагона за превоз руде гвожђа, при чему су поређени резултати добијени нумеричком симулацијом и резултати експерименталног испитивања железничког возила. Нумерички модел железничког возила је формиран у софтверском пакету „Gensys“. Да би се минимизовале грешке обраде сигнала, исти софтверски пакет је кориштен за обраду сигнала добијених и симулацијом и експерименталним испитивањем у складу са препорукама UIC-а. Експериментално испитивање железничког возила за превоз руде гвожђа извршено је од стране предузећа „Interfleet“ из Солне (Шведска), при чему ће у овом раду бити кориштени необрађени резултати из два теста, и то за експериментално испитивање натовареног и празног железничког возила. Резултати валидације модела железничког возила за превоз руде гвожђа према новопредложеној метрици су поређени са резултатима валидације методологије чији је аутор O. Polach [10], а који су проистекли из истраживања спроведених у оквиру ФП7 пројекта „DynoTrain“. 8 Предложена валидациона метрика је примењена за поређење резултата добијених симулацијом и са резултатима експерименталних испитивања кретања натовареног и празног возила на правцу и у кривини. Поређењем резултата валидационие метрике коју је предложио O. Polach и новопредложене метрике, на основу сигнала у просторном домену и на основу одоговарајућих кумулативних функција вероватноће, извршена је анализа њихове применљивости. 9 2 ВАЛИДАЦИЈА И ВЕРИФИКАЦИЈА МОДЕЛА 2.1 УВОД Нумерички модели за симулацију понашања механичких система заузимају све значајнију улогу, како у области пројектовања, тако и у предвиђању понашања система у различитим експлоатационим условима. Са проширењем могућности да се моделирају различите појаве и феномени, са употребом једноставнијих и лакших интерфејса за моделирање система и релативно ниском ценом рачунарске технике, употреба модела за предвиђање понашања механичких система је све већа. Нумерички модели за предвиђање понашања знатно смањују време развоја нових и унапређења старих система, а поред тога отварају могућност предвиђања понашања у случајевима када није могуће, или је веома скупо, извршити експериментално испитивање реалног механичког система. Са све већом употребом нумеричких модела за симулацију понашања механичких система, поставља се питање: „Колико су тачна предвиђања понашања посматраног система на основу развијеног модела?“. Најчешће се тачност предвиђања одређује поређењем резултата добијених из нумеричких модела са експерименталним испитивањем посматраног система, када је то могуће. Поређења се најчешће приказују у форми x-y дијаграма, дводимензионих контура и слично. Приликом оцене слагања резултата суочавамо се са два основна питања:  Када сматрамо да постоји добро слагање између експерименталних резултата и резултата добијених нумеричким моделима?  Која је мера слагања? Апсолутни стандарди за валидацију модела, који би се могли применити на све моделе и за све услове у којима желимо да изучавамо понашање реалних објеката или система, не постоје. Хтели то или не, валидација одређеног модела зависи од тога где и како ће се тај модел употребити у даљем истраживању. Због свега наведеног, валидација модела је још увек отворено питање. На пример, један модел механичког система може бити задовољавајући приликом пројектовања прототипа јер показује одговарајући тренд понашања система, док тај исти модел може бити потпуно неупотребљив за предвиђање понашања система 10 у реалним условима. Такође, одређени модел може бити сасвим задовољавајући за предвиђање понашање система у статичким и квази-статичким условима, док за предвиђање понашања система у динамичким условима развијени модел није прихватљив. Генерално гледајући, приликом валидације модела успоставља се корелација између резултата добијених предвиђањем-симулацијом и резултата добијених експерименталним испитивањем. Да би модел могао довољно добро да предвиђа понашање реалног објекта, потребно је да резултати симулације понашања модела буду што је могуће ближе резултатима испитивања. Валидација модела је итеративан процес чији су основни кораци: 1. Дефиниција критеријума за валидацију модела, 2. Поређење резултата симулације и резултата испитивања, 3. Подешавање параметара модела. Након извршене валидације модела потребно је резимирати резултате валидације, наводећи да ли посматрани модел може представљати физички систем за: 1. Одговарајућу намену, 2. Одговарајући систем или класу система, 3. Одговарајуће експлоатационе услове. Једном када је извршена валидација, модел се може користити уместо експерименталног испитивања реалног система за предвиђање понашања у условима за које је извршена валидација модела. Модел се не може користити за предвиђање понашање система за услове који нису обухваћени у процесу валидације. Секвенца планирања, експерименталног испитивања, обраде и анализе података потребних за валидацију модела, представља дуготрајан и временски захтеван процес. Валидација модела је оправдана само у случајевима када се може добити вишеструка корист од развијеног модела. Оправданост развијања и спровођења процеса верификације и валидације модела зависи од времена и труда потребног да се изврши валидација, као и трошкова и могућности да се изврше додатна експериментална испитивања. Уколико је модел намењен за ограничене услове и за предвиђање понашања система за ограничени опсег – домен интересовања, треба размотрити опцију да се изврше додатна експериментална испитивања. Међутим, уколико је модел намењен да предвиђа понашање у великом броју различитих експлоатационих услова, значајно смањујући трошкове настале додатним експерименталним испитивањима или елиминишући потенцијално опасна експериментална испитивања, онда су развој и валидација модела оправдани. Трошкови развоја и валидације модела могу знатно да варирају, па у неком случају да буду чак и већи од трошкова експерименталног испитивања. Трошкови 11 валидације зависе од природе посматраног система и модела над којим се врши валидација, од намене модела, врсте система који се представља моделом, од услова за који модел треба да предвиди понашање система, од доступних алата да се изврши валидација, као и од услова под којима се могу извршити потребна експериментална испитивања потребна за валидацију модела. Генерално гледајући, највећи део трошкова везаних за валидацију модела може бити умањен кроз добро планиран експеримент, намењен валидацији посматраног система за одређене експлоатационе услове. Процес валидације модела најчешће захтева планирање експеримента намењеног искључиво валидацији модела, у коме се прикупљају подаци за величине које често нису од интереса приликом стандардног експерименталног испитивања. Из тих разлога су анализа и обрада података приликом валидације модела често знатно сложеније од оних које су потребне при експерименталним испитивањима намењеним проучавању динамичког понашања железничких возила. Примена симулације кретања железничких возила, према томе, отвара велике могућности у железничком машинству, али захтева допунске напоре који могу довести у питање њихову оправданост. Методе за валидацију модела играју одлучујућу улогу у процени њихове употребљивости, што њихово изучавање ставља у жижу савремених теоријских истраживања у динамици железничких возила. 2.2 МОДЕЛ, ВЕРИФИКАЦИЈА И ВАЛИДАЦИЈА Процес формирања, верификације и валидације модела механичког система је први пут представљен 1979 год. од стране „Друштва за компјутерске симулације“ (Society for Computer Simulation). Упрошћени приказ процеса верификације и валидације модела дат је на слици 2-1 у виду “Sargent Circle”[11]. Питање валидације модела је веома сложено и вероватно постоји онолико мишљења о валидацији модела колико има и истраживача који се баве овом проблематиком. У овом раду, посебна пажња је посвећена аспекту валидације модела - процес упоређивања резултата добијених симулацијом понашања модела и резултата добијених експерименталним испитивањима. Очекивани резултат процеса верификације и валидације модела је квантитативна оцена о слагању резултата експерименталних испитивања и резултата добијених симулацијом, као и оцена у којој мери развијени модел тачно представља реални систем. 12 Реални систем Математички модел Компјутерски модел Валидација Имплементација Моделирање Резултати симулације Слика 2-1. Графички приказ процеса валидације и верификације модела Процес верификације и валидације модела је итеративни процес који се понавља онолико пута док се не постигне задовољавајућа тачност и прецизност у поступку развијања нумеричког модела. Реални систем, приказан на Слици 2-1, представља физички систем, склоп, део или проблем који се проучава. Математички модел обухвата концептуални модел, одговарајући математички запис и друге потребне податке да би се нумерички описао реални систем [11],[12],[13]. Модел је најчешће описан у форми диференцијалних једначина, законима физике, геометријом и граничним условима потребним да се дефинише понашање реалног система. Компјутерски модел представља имплементацију једначина развијених у математичком моделу, најчешће у облику нумеричке дискретизације, алгоритама и критеријума конвергенције. Процес у коме се одређују битне особине физичког система као и начин на који ће одабране особине бити математички представљене у оквиру математичког модела назива се моделирање. Процес верификације се у највећој мери фокусира на идентификацију и уклањање грешака у процесу софтверске имплементације математичког и рачунарског модела [11]. Верификација може даље бити подељена у верификацију рачунарског кода и верификацију прорачуна. Верификација рачунарског кода фокусира се на проналажење и исправљање грешака насталих приликом описивања модела у неком од софтверских пакета. Верификација прорачуна бави се оценом грешака насталих приликом извршења софтверског кода за одређену симулацију. Најважнија активност верификације прорачуна је провера конвергенције резултата прорачуна, односно, могућности да се прорачуни изврше са финијом мрежом или 13 мањим временским кораком док се не постигне решење у прихватљивим границама, односно са унапред задатим толеранцијама. Као завршна фаза, активности валидације покушавају да формирају оцену тачности модела поређењем резултата експеримента са резултатима симулације добијеним из одговарајућег компјутерског модела. Валидација је активност која се спроводи све док се модел или експеримент унапређује, или док се проширује број значајних параметара којима се реални систем описује [12], [13]. Док су на слици 2-1 приказани основни концепти, на слици 2-2 детаљније је приказан процес развоја, верификације и валидације модела, где лева грана илуструје процес прикупљања експерименталних података, док је десном граном приказан процес формирања математичког модела. Математички модел, приказан на слици 2-1, може се приказати кроз концептуални модел и математички модел, као што је приказано на слици 2-2. Концептуални модел представља један апстрактни модел чија је основна намена да се опише и боље разуме понашање посматраног објекта или система. У идеалном случају, у фази развоја концептуалног модела учествују, истовремено, инжењери задужени за развој математичког модела као и тим одговоран за експериментално испитивање реалног система. Развој концептуалног модела захтева да се идентификују циљеви, захтевани ниво слагања између резултата добијених симулацијом и експерименталним испитивањем, област за коју се развија модел, сви релевантни физички процеси, претпоставке, ограничења, као и да се дефинише валидациона метрика (величине које ће бити мерене и које представљају основу за поређење резултата добијених симулацијом и експериментом). Након што је формиран концептуални модел, са једне стране се приступа планирању експеримента–експеримент за валидацију, а са друге стране се формира математички модел. Као што је већ речено, математички модел представља скуп математичких једначина којима се описује физички објекат. У механици, математички модел садржи законе одржања масе, момената и енергије, дефиниције просторног и временског домена, почетне и граничне услове као и конститутивне једначине битне за формирање модела. 14 Реални систем Концептуални модел Експеримент за валидацију Математички модел Експериментални подаци Компјутерски модел Експериментални резултати Резултати симулације Наредни реални систем Прихватљиво слагање Поређење Физичко моделирање Експеримент Математичко моделирање Имплементација Утврђивање поузданости ДА НЕ Ревизија модела или експеримента Верификација кода и прорачуна Валидација модела Апстракција Претходни прорачуни Утврђивање поузданости Слика 2-2. Приказ процеса валидације и верификације модела Компјутерски модел представља математички модел у форми погодној за компјутерско представљање, најчешће у нумерички дискретизованом облику, описом одговарајућим алгоритмима, потребним параметрима за нумеричке апроксимације и критеријуме конвергенције. Компјутерски модел садржи компјутерски програм – код, концептуални модел, одговарајуће математичке апроксимације и претпоставке, конститутивне моделе и улазе, одговарајуће опције за решавање математичких проблема као и толеранције у којима се захтева решење математичких проблема [11]. Након формирања компјутерског модела потребно је утврди какав утицај имају улазни параметри модела на резултате симулације. Овај утицај се најчешће утврђује у оквиру утврђивања стабилности развијеног модела. 15 Сврха експеримента за валидацију је да се обезбеде информације за валидацију модела. Због тога је потребно да се разумеју све уведене претпоставке, да се добро планира и контролише сама реализација експеримента. Након дефинисања експеримента за валидацију, приступа се извођењу експеримента, током кога се прикупљају подаци са различитих сензора. Овако прикупљени експериментални подаци представљају необрађене податке (подаци над којима нису примењена никаква нумеричка обрада). Типични подаци који се прикупљају приликом експерименталног испитивања механичких система су механички напони, убрзања и помераји у временском или просторном домену. После утврђивања прецизности предложеног експерименталног метода, односно, утврђивања колико је сам експеримент осетљив на промену појединих параметара битних за реализацију експеримента, прилази се обради података и формирају се подаци за оцену (енглески „assessment quantities”). Одступања овако добијених података од предвиђања модела представљају основ за валидацију модела. Уколико су квантитативна поређења резултата симулације и резултата експеримента, дефинисана на основу претходних тестирања, сагласна у унапред усвојеним границама, процес валидације и верификације модела је завршен. Претходни прорачуни, приказани на слици 2, представљају веома битну везу између планирања валидационог експеримента и процеса формирања модела. Успостављање везе између планирања експеримента и израде модела, већ у првим корацима, може дефинисати значајне величине, које ће се пратити током експеримента и у фази моделирања. Када су одређене значајне величине, даљи процес извођења експеримента, као и процес моделирања и симулације се изводе независно, све до момента када се формирају подаци за поређење. Уколико поређење резултата експеримента и симулације није у прихватљивим границама, приступа се процесу ревизије модела или се , уколико је то потребно и могуће, врши ревизија и експеримента и модела. Ревизија модела представља процес у коме се допуњују или мењају основне претпоставке модела, структура модела, бирају групни или допуњују већ постојећи параметри, мењају гранични услови и/или почетни услови у циљу постизања бољег слагања експерименталних резултата и резултата симулације. Ревизија експеримента представља промену плана реализације експеримента, промену процедура или начина мерења појединих величина ради олакшавања поређења експерименталних резултата са резултатима симулације применом ревидираног модела. Која врста ревизије ће бити извршена зависи од заједничке процене тимова који су укључени у процесе верификације, валидације и извођења експеримента. Веома често није могуће добити одговарајућу сагласност резултата симулације и експеримента већ у првој итерацији, па се најчешће процес приказан на слици 2 понавља неколико пута. Такође, уколико се у току процеса валидације и 16 верификације модела утврди да је потребно увести нови параметар за оцену, а да при томе тај параметар није могуће добити једноставном обрадом добијених података, онда се цео поступак валидације и верификације понавља. 2.3 АКТИВНОСТИ ВЕРИФИКАЦИЈЕ Верификација је процес, у коме се утврђује, да ли је извршена добра имплементација концептуалног модела [11]. Приликом верификације модела је корисно процес поделити на делове (Табела 1), препознајући основне функције софтверског пакета као и развоја модела, са тежњом да се оформи што бољи модел, који има добру поновљивост резултата и даје решења у прихватљивим границама тачности [13]. Табела 1. Активности процеса верификације модела Врста Фокус Одговорност Методе Верификација софтвера Осигурање квалитета софтверског пакета Поузданост и робусност Програмер Развој различитих конфигурација компјутерског модела, избор нумеричких метода, итд… Верификација нумеричког алгоритма Тачност нумеричког алгоритма Програмер и моделар Провера аналитичких решења, поређења са постојећим моделима, итд.. Верификација прорачуна Оцена нумеричке грешке Оцена нумеричке тачности решавања једначина Моделар Конвергенција решења једначина и сл. Верификација софтвера има за задатак да утврди да ли софтверски пакет који се користи за формирање модела, ради на начин на који је предвиђено. Основни фокус ове активности је, да се утврде и елиминишу грешке које настају приликом формирања и имплементације софтверског пакета (осигурање квалитета софтверског пакета) и да обезбеди тачност решавања нумеричких алгоритама, 17 који су имплементирани у софтверском коду. Због тога је одговорност за проверу ове активности додељена програмеру. Сврха верификације прорачуна је да се утврде вредности грешке настале нумеричким решавањем одговарајућих једначина којима је описан модел, као и да оцени грешке, настале услед конвергенције решења формираног система једначина, за дати модел. Наведене врсте грешака могуће је утврдити у активности верификације прорачуна и у знатној мери их смањити увођењем боље дискретизације простора или времена приликом нумеричког решавања једначина, прилагођавањем услова конвергенције решења, изменом погрешних улазних података и/или променом методе решавања система једначина. Погрешни улазни подаци и недовољна дискретизација простора и/или времена за решавање система једначина, имају највећи утицај на смањење грешака, приликом верификације прорачуна. Најчешће коришћени метод за верификацију прорачуна је поређење резултата прорачуна за задати проблем добијених коришћењем различитих софтверских решења. Проблем који се јавља приликом овакве верификације кода се огледа у томе што за различите софтверске пакете најчешће није могуће дефинисати граничне услове, или дефинисати цео модел, на исти начин. Чак и када се добију слични резултати прорачуна за исте моделе, овако спроведена верификација не даје потврду да су резултати прорачуна тачни. Описана методологија поређења софтверских пакета може бити прихваћена као одговарајућа само у одсуству других метода верификације кода. Обзиром да се нумеричка грешка не може потпуно уклонити, циљ верификације прорачуна је да оцени нумеричку тачност модела. Верификација прорачуна треба да буде документована, доступна и поновљива. 2.4 АКТИВНОСТИ ВАЛИДАЦИЈЕ Валидација представља процес у коме се утврђује у ком степену развијени модел тачно представља реални систем са аспекта његове даље намене. Циљ процеса валидације је да се квантификује ниво поверења у способност нумеричког модела да предвиди понашања физичког система. Класичан приступ валидацији модела је поређење резултата симулације са резултатима валидационог експеримента. Мера слагања резултата најчешће се оцењује израчунавањем одступања (грешке) између резултата симулације модела и експерименталних података. Појава мерних грешака у експерименту и нумеричких грешака током симулације само додатно компликује процес валидације модела и уводи додатну несигурност. 18 Дефиниција валидације модела, дата у претходним параграфима, захтева појашњења појединих фраза. Фраза „представља процес у коме се утврђује“, у суштини, значи да је процес валидације процес који траје док се не оствари жељено слагање резултата симулације и експерименталних резултата. Процес валидације, може, у специјалним случајевима, да се заврши након првог поређења резултата, али најчешће је потребно извршити неколико итерација, након промена и усклађивања параметара модела. Фраза „у ком степену“ значи да у резултатима симулације и у резултатима експеримента постоје грешке, настале као случајне или систематске грешке мерења. Због тога је неопходно да се резултати мерења и симулације, као и оцена њиховог слагања, искажу у одговарајућим границама. На крају, фраза „са аспекта његове даље намене“ значи да се валидација модела, врши за одређени домен, сагласно расположивим улазним подацима и параметрима модела. Ова чињеница у значајној мери, ограничава употребу модела за предвиђање понашања реалног система. Веза између домена валидације модела и најчешће области где се користе предвиђања моделом, приказана је на слици 3, за модел са два параметра П1 и П2. П1 П2 Тачке валидације модела Област валидације модела Предвиђање модела Слика 2-3. Област валидације и предвиђања за модел са 2 параметра П1 и П2 Важно је напоменути, да процес подешавања параметара модела, у циљу побољшања слагања резултата симулације и експерименталних резултата, сам по себи не представља валидацију модела. Активност подешавања параметара назива се калибрација модела, и представља део фазе изградње модела, а не процеса валидације модела. 19 2.5 ВАЛИДАЦИОНА ХИЈЕРАРХИЈА Реални – физички систем, приказан на слици 2-2, представља сложен систем. који се састоји од низа мањих подсистема и компонената, од којих сваки може бити посебно моделиран и валидиран. У пракси jе најчешће заступљен приступ валидације комплетног модела поређењем резултата симулације и експерименталног испитивања целокупног система [14]. Овакав приступ у неким случајевима, када се ради о моделима са великим бројем подсистема и компоненти, када су везе између елемената комплексне, и када је дисипацијa енергије велика, може бити неадекватан. Уколико је слабо слагање резултата симулације и експеримента, може бити тешко, а врло често и готово немогуће, изоловати поједине подсистеме и компоненте и утврдити узрок неслагања резултата. Чак и у случајевима када је слагање резултата симулације и експеримента добро, често није могуће у потпуности извршити валидацију модела и његових подсистема. Валидациона хијерархија је приказана на слици 2-4, и првенствено зависи од комплексности физичког система, од сложености развијеног модела, и од начина реализације експеримента за валидацију. У основи, слика 4 приказује начин декомпозиције комплексног система на низ основних физичких проблема. Број нивоа и компоненти зависи од комплексности развијеног модела и реалног система. У хијерархијском приступу валидације модела свака компонената и сваки подсистем представљају реални систем за себе, за који је потребно извршити валидацију. На сваком од приказаних нивоа је потребно је извршити валидацију тако да се валидација изврши прво за сваку компоненту, након тога за сваки подсистем, па на крају и за цео комплексни реални систем. Систем ПодсистемиПодсистемиПодсистеми Компоненте система Компоненте система Компоненте система Компоненте система Компоненте система Слика 2-4. Валидациона хијерархија 20 2.6 ЕКСПЕРИМЕНТ НАМЕЊЕН ЗА ВАЛИДАЦИЈУ Експерименти се најчешће изводе да би се унапредило разумевање физичког објекта који се проучава, да би се унапредио математички модел, боље одредили параметри модела и/или оценило понашање компоненти и подсистема посматраног физичког система. Генерално, подаци добијени из овако организованих експеримента, најчешће нису довољно добри да би се са њима извршила валидација модела. Недостатак документације о појединим параметрима, недостатак информација о условима под којим су се изводили експерименти, неадекватни мерни опсези, или недовољна или непозната тачност мерења појединих параметара су најчешћи узроци зашто традиционални експерименти нису адекватни за валидацију модела. С обзиром да је немогуће извршити апсолутно тачно мерење, приликом извођења експеримента за валидацију потребно је установити и квантификовати грешку мерења сваке мерене величине понаособ. Грешка мерења и поузданост добијених резултата треба да обухвати утицај променљивости свих релевантних параметара на експериментално испитивање, као што су неодређености у конструкцији (укључујући толеранције), заостале напоне у конструкцији и слично. У експерименталним испитивањима грешке настале током мерења можемо класификовати у две основне групе, и то као случајне и систематске грешке. Систематске грешке су грешке, које при поновљеним мерењима остају константне, или се мењају по одређеном закону. Оне могу бити условљене недостацима методике мерења или нетачношћу формула за рачунање (методичке грешке), а такође и несавршеношћу мерних уређаја (грешке уређаја). Ове грешке увек имају исти знак, те се увођењем одређене корекције могу, у доброј мери, отклонити. При томе, повећање броја мерења неће смањити систематску грешку. Случајне грешке су последица многобројних различитих и променљивих узрока, који се не могу контролисати и између којих, у општем случају, не постоји никаква корелација. Случајне грешке прате сва мерења и не могу се отклонити, као што је то изводљиво код систематских грешака. Међутим, захваљујући чињеници да за случајне грешке важе статистички закони расподеле, при великом броју мерења, увек се могу одредити границе, унутар којих се налази права вредност мерене величине са изабраном вероватноћом. Истраживачи из “Sandia National Laboratories”[15] су формулисали следећих шест препорука, у циљу формирања одговарајућег експеримента за валидацију: Препорука 1: Експеримент за валидацију треба да дефинишу истраживачи који су учествовали на развијању математичког модела, пројектанти система који се изучава, истраживачи који су задужени за дефинисање и извођење експеримента. Препорука 2: Експеримент за валидацију треба да буде организован и спроведен тако да се прикупе све релевантне информације које су предмет интересовања, 21 параметри који су релевантни за формирање модела, сва ограничења реалног објекта у мери у којој је то могуће. Препорука 3: Експеримент за валидацију треба да тежи да нагласи повезаност – интеракцију између рачунског и експерименталног приступа решавања проблема. Препорука 4: Треба тежити да се дефиниција експеримента за валидацију изврши кооперативно, али, са друге стране, треба да постоји независност у добијању резултата симулацијом и експериментом. Препорука 5: Одговарајућа хијерархија експерименталног мерења би требала да се успостави током експеримента за валидацију и то на тај начин да се изврше мерења од глобалних до локалних параметара. Препорука 6: Експеримент за валидацију треба да буде тако организован да је могуће утврдити прецизност и тачност мерења. 2.7 ВАЛИДАЦИОНА МЕТРИКА Приликом валидације модела, посебно код сложених система, обрађују се велике количине података из којих је потребно издвојити најзначајније информације за процес валидације. Избор и опис изабраних величина за процес валидације у великој мери зависи од захтева дефинисаних избором домена за који се врши валидација модела. Избор параметара за валидацију мора бити пажљиво извршен на основу модела и експеримента за валидацију. Величине којима се изабрани параметри описују такође зависе од начина на који се врши валидација модела, од особина изабраних параметара у временском и фреквентном домену, од особина улазних параметара и од низа других утицајних величина. Овако изабрани параметри се могу даље поредити и користити као валидациона метрика, или што је чешће у употреби, може се извршити њихова даља математичка обрада за изналажење величина које су погодне за поређење. Валидациона метрика представља основу за поређење резултата добијених симулацијом и експерименталним испитивањем [15]. Веома је битно да се она дефинише у раним фазама планирања изградње модела и валидационог експеримента. Формирана у раној фази формирања концептуалног модела и валидационог експеримента, валидациона метрика даје могућност да се правилно одаберу параметри и величине параметара за валидацију модела. Након што се изврши избор параметара за валидацију, потребно је дефинисати меру која ће приказати разлику између предвиђања понашања система добијених математичким моделом и резултата добијених експерименталним испитивањем. 22 С обзиром да постоји велики број истраживача, данас се користи велики број начина поређења резултата добијених симулацијом и резултата добијених експерименталним испитивањем, како субјективних, тако и објективних метода поређења. Субјективне методе поређења оцену валидације квалитативно исказују стручњаци, док се код објективних метода поређења оцена валидације исказује квантитативно резултатима одговарајућих математичких процедура. Субјективна поређења су првенствено везана за визуелна поређења различитих величина добијених симулацијом и експерименталним испитивањем. Предност субјективних метода поређења је брзина којом се долази до резултата валидације. Нажалост, резултати оваквих поређења у великој мери зависе од искуства истраживача, па оцене истих резултата, које су дали различити стручњаци, показују велику несагласност [65]. У групу објективних метода поређења спадају методе које користе различите математичке мере за установљавање разлике између резултата предвиђања понашања система, добијених симулацијом и резултата добијеним експерименталним испитивањем система. Уобичајене мере за установљавање разлика су корелациони коефицијенти, крос-корелациони коефицијенти, методе разлика и друге пондерисане и непондерисане норме. Овако дефинисане мере се најчешће називају „дистанца“ између резултата предвиђања понашања модела симулацијом и резултата добијених експерименталним испитивањем реалног система. Важно је напоменути да код ових метода поређења такође постоји субјективност која се огледа у избору граничних вредности које ће одредити да ли је посматрани модел валидан. Као што је већ наведено, метрика представља меру неслагања између резултата добијених симулацијом и резултата добијених експерименталним испитивањем. Пожељно је да метрика буде интуитивна за примену, како за инжењере, тако и за руководиоце пројеката. Постоји низ пожељних особина које би метрика требала да поседује, а које су дефинисане од низа истраживача [14], [15], [17], [18]. Неке од пожељних особина валидационе метрике, које су опште су:  Домен валидације треба да се у што већој мери поклапа са доменом применљивости математичког модела,  Применљивост на скаларе,  Применљивост на векторе,  Детерминистички карактер,  Пожељно је да метрика осликава разлику између предвиђања и експерименталних података у целом опсегу посматраних величина, односно, метрика би требало да буде осетљива не само на промене у средњим вредностима, средње квадратне вредности, или варијансе.  Физичке јединице – тренутно постоје два мишљења о јединицама у којима треба да се искаже метрика. Заговорници једног од њих струје предлажу да 23 се разлика искаже у физичким јединицама у којима су исказани параметри који се пореде. Други приступ је да се разлика искаже у нормализованим или статистичким јединцима.  Објективност мере – најчешћи извор неслагања у оцени ваљаности – прихватању модела, огледа се у субјективности током оцене модела. Објективност подразумева да ће предложена метрика, за исте скупове посматраних података, дати увек исту оцену, без обзира на субјекат који примењује изабрану метрику. Субјективност, у већој или мањој мери, ће увек бити присутна приликом формирања метрике, али треба тежити да се та субјективност смањи.  Граничне вредности за прихватање ваљаности модела треба да буду независно дефинисане од предложене метрике  Мишљење експерата – Приликом дефинисања граничних вредности за прихватање валидности модела пожељно је да се узме у обзир и мишљење експерата из одређене области  Метрика треба да је осетљива на грешку – с обзиром да су грешке присутне како код експерименталног испитивања, тако и при симулацији, пожељно је да метрика укључује грешке и да је осетљива на њихове промене.  Метрика треба да буде математички добро описана и разумљива. Пoжељно је да се метрика заснива на мери у математичком смислу, односно на некој математичкој функцији која описује разлику између величина које се пореде. По дефиницији, математичка мера d има следеће особине [17]: o Ненегативност, 𝑑(𝑥, 𝑦) ≥ 0 o Симетрија, 𝑑(𝑥, 𝑦) = 𝑑(𝑦, 𝑥) o Неједнакост троугла, 𝑑(𝑥, 𝑦) + 𝑑(𝑦, 𝑧) ≥ 𝑑(𝑥, 𝑧) o Осетљивост на сваку разлику, 𝑑(𝑥, 𝑦) = 0 ако и само ако је 𝑥 = 𝑦 У појединим случајевима није могуће да метрика испуни све наведене захтеве, али је пожељно да има већину наведених особина. Метрика може бити употребљива и у случају да не испуњава наведене математичке услове. Уколико метрика није симетрична онда говоримо о „квазиметрици“. Уколико метрика не испуњава други и четврти услов онда се метрика назива „хемиметрика“, а уколико не испуњава услов неједнакости троугла метрику називамо „семиметрика“. Ако метрика не испуњава последњи услов онда говоримо о „псеудометрици“, а уколико метрика не испуњава услове симетрије и троугаоне неједнакости метрику називамо „праметрика“. 24 2.8 ЗНАЧАЈ ВАЛИДАЦИЈЕ У ОБЛАСТИ ЖЕЛЕЗНИЧКОГ МАШИНСТВА Врло често се поставља питање: „Због чега је потребно да се изврши валидација и верификација модела?“. Као што је приказано у овом поглављу, правилном верификацијом и валидацијом модела приказује се колико тачно, и са којом сигурношћу, је могуће да се предвиди будуће понашање система, а које се базира на резултатима добијених на основу развијеног модела. У области железничког машинства врло често се користе различите врсте модела, од једноставних линеарних система са два и три степена слободе [19], [21], [23], па до изразито нелинеарних модела са неколико десетинa степени слободе, за предвиђање понашања возила у различитим условима експлоатације. Значај употребе нумеричких модела у проучавању понашања железничких возила огледа се кроз:  Предвиђање, у фази развоја и пројектовања, понашања возила у различитим експлоатационим условима, у циљу да се достигну прописани услови везани за квалитет вожње, вредности одговарајућих сила и убрзања,  Анализу утицаја измена (како на самом возилу тако и на колосеку) на понашање возила у реалним условима,  Анализу понашања возила у условима које није могуће, или би било веома опасно, извести приликом експерименталног испитивања реалног возила,  Редуковање обима експерименталних испитивања С обзиром да зависи од великог броја параметара и услова под којима се спроводи, експериментално испитивање врло често не одсликава у потпуности понашање железничког возила. Како се и приликом симулације понашања возила усваја велики број претпоставки, тако ни симулације не представљају у потпуности реални објекат, као што је то приказано на слици 2-6. Треба напоменути да циљ валидације модела није да добијемо најбоље могуће слагање резултата симулације са експерименталним резултатима, већ да испитамо да ће развијени модел адекватно-верно приказати понашање реалног објекта, у овом случају железничког возила [16]. 25 Симулација 1 Експериментално испитивање Реалност Симулација 2 Боље слагање са експерименталним испитивањем Боље слагање са реалним објектом Распон услова под којима је извршено мерење Мерна величина Слика 2-5. Однос симулације понашања, експерименталног испитивања и реалног понашања железничког возила Експериментална испитивања железничких возила, у општем случају, су врло скупа и дуготрајна. Она изискују ангажовање великог броја људи, прецизну организацију, као и планирање испитивања. Поред тога, потребно је да се изврши испитивање колосека пре него што се изврши испитивање понашања железничког возила. Испитивање колосека са своје стране такође мора да задовољи одговарајуће прописе дефинисане међународним прописима [30], [31]. Произвођачи возила покушавају да експериментално испитивање, које је једини и основни услов за сертификацију возила према важећим прописима, сведу на најмањи могући обим. Пројектовање и сертификација возила се данас заснива мањим делом на симулацији понашања (симулацијом методом коначних елемената, симулацијом кретања система тела), а у много већој мери на експерименталном испитивању возила. Нажалост, приликом пројектовања новог возила, користи се веома мало повратних информација из експерименталних симулационих истраживања претходних модела. Уобичајена пракса је да се процесу пројектовања новог возила приступа од почетка, што је приказано на слици 2-7. 26 Симулација Пројектовање Експериментално испитивање Симулација Пројектовање Експериментално испитивање В о зи л о 1 В о зи л о 2 Слика 2-6. Тренутно место симулације понашања возила у пројектовању железничких возила Увођење математичких модела у процес пројектовања и сертификације возила, отворило би могућност смањења, мада не и потпуног укидања, експерименталног испитивања. Симулација Пројектовање Експериментално испитивање Валидација модела Симулација Пројектовање Сертификација В о зи л о 1 В о зи л о 2 Слика 2-7. Значај симулације у будућности у процесу пројектовања и сертификације железничких возила Уколико би постојала добро дефинисана процедура за валидацију и верификацију нумеричких модела, било би могуће у појединим случајевима и потпуно извршити сертификацију возила [34] засновано на симулацији кретања, како је то описано сликом 2-8. Основа за умањење обима испитивања или, у ближој или даљој будућности, потпуно укидање експерименталног испитивања, заменом експеримента одговарајућом симулацијом - виртуалним тестирањем - према резултатима пројекта ФП7 “DynoTrain”, представља правилно и адекватно спроведен поступак валидације и верификације модела железничког возила. Уколико би модел железничког возила задовољио услове процедура валидације и верификације, онда би резултати симулације понашања модела или његових компоненти могли у потпуности да замене експеримент, како је то приказано на слици 2-9. 27 Услови под којима се изводи експеримент Возило које се испитује Експеримент Обрада резултата Возило које се испитује (реални објекат) Услови под којима се изводи експеримент Модел возила Симулација Обрада резултата Испитивање на реалном возилу Виртуално испитивање употребом симулације Одступања између модела и реалног објекта Одступања услова под којима су извршена испитивања Одступања приликом мерења, мерне грешке Слика 2-8. Испитивање на реалном објекту у односу на виртуално испитивање употребом симулације понашања возила Валидација модела би требало да обухвати све, или бар највећи део грешака, које настају у процесу експерименталног испитивања, као и приликом симулације понашања возила, услове у којима је извршено експериментално испитивање и одговарајућа симулација понашања, као и стохастичку природу добијених резултата. 28 3 ПРЕГЛЕД МЕТОДА ЗА ВАЛИДАЦИЈУ МОДЕЛА Валидација модела је поступак који се примењује у широком спектру моделирања различитих врста механичких система. Сложеност изграђеног модела и сложеност саме физичке појаве која се изучава и моделује у великој мери одређују и врсту валидационе методе која се примењује. Поред наведеног, постојање различитих врста грешака при експерименталном испитивању и при нумеричким симулацијама, као и најчешће присутна субјективност у процесу избора „погодног“ нумеричког модела у великој мери усложњавају процес валидације. Услед тога постоји велики број валидационих метода које се користе, а које зависе од врсте система за који се врши валидација, као и од домена у коме се врши процес валидације. Генерално гледајући, не постоји „златно правило“ које даје јасне смернице како треба извршити процес валидације модела механичког система, већ се процес валидације дефинише од случаја до случаја, од модела до модела. Оцена динамичког понашања железничког возила врши се на основу прикупљања података о вредностима карактеристичних величина у временском домену при кретању возила у реалним, експлоатационим условима. У зависности од начина описивања веза и сложености, железничка возила се могу описати помоћу простих линеарних модела са малим бројем степени слободе, као и са изразито нелинеарним моделима са неколико десетина степени слободе. У овом истраживању пажња је усмерена на валидацију нелинеарних модела железничких возила са стохастичком побудом. У оквиру овог поглавља дат је опис различитих техника који се користе за валидацију модела различитих механичких система, као и опис различитих валидационих метрика које су коришћене у процесима валидације. 3.1 КАТЕГОРИЗАЦИЈА ВАЛИДАЦИОНИХ МЕТОДА Развоја великог броја сложених модела за предвиђање понашања различитих врста система условио је потребу за развојем метода верификације и валидације модела. С обзиром да се проблемима верификације и валидације модела бави велики број истраживача, постоји и велики број приступа за решавање овог проблема. Према врсти метрике која се користи, методе валидације модела се могу поделити у пет основних група, као што је то приказано на слици 3-1 [21, 22, 23]. 29 Методе валидације модела Графичке методе Методе базиране на поређењу величина Методе базиране на поређењу кумулативних функција Тестирање хипотеза Бајесов оквир Слика 3-1. Категоризација валидационих метода 3.1.1 Графичке методе валидације модела Графичке валидационе методе се заснивају на генерисању различитих дијаграма и њиховом интуитивном тумачењу. Код ове методе валидације тежња је да се вредности параметара добијених симулацијом и експерименталним испитивањем прикажу графиконима исте скале на једном дијаграму. Оцена сличности, најчешће два параметра, врши се визуелним упоређивањем графикона. Одлука да ли је модел валидан доноси се на основу уочених разлика међу графиконима. Поређења параметара су најчешће ограничена на један уски домен. Грешке мерења најчешће нису узете у обзир нити су исказане приликом валидације модела. Квантитативна оцена о разликама параметара приказаних на графиконима не постоји код ове методе. Одлука о валидности модела је стога изразито субјективна и заснива се на искуству истраживача који врши валидацију, односно поређење графикона. У литератури се може наћи велики број примера за валидацију модела базирану на графичким методама. Типичан пример за валидацију модела графичким методама је приказан у референцама [32] и [33] као и у раду Polach-а [34], где је за развијени модел железничког возила - локомотиве валидација модела извршена поређењем у просторном домену сила на осовинским склоповима добијених експерименталним мерењем и симулацијом развијеног модела, као што је приказано на слици 3-2. 30 Слика 3-2. Поређење резултата добијених мерењем и симулацијом за силе на осовинском склопу локомотиве која се креће по колосеку са кривинама 3.1.2 Методе валидација поређењем својстава сигнала Код ове валидационе методе оцена о подобности посматраног модела доноси се на основу квантитативне разлике између једног или више својстава сигнала којима се описује посматрани систем, нпр. на основу разлике амплитуда, фреквенци, средње квадратних вредности, средњих вредности, на основу разлике варијанси, и другог. У оквиру ове методе постоји добар математички основ за формирање валидационе метрике, што омогућава њено коришћење за валидацију различитих врста модела, од оних који описују проблема хидрологије [35], преко термодинамике [36] и електротехнике [37], па до модела којима се изучавају понашања различитих врста механичких система [38]. С обзиром да се заснива на квантитативном поређењу величина, и да се користи за валидацију различитих врста модела, у оквиру ове методе је развијено неколико врста валидационих метрика. Две најједноставније, и уједно најчешће коришћене, валидационе метрике за оцену слагања резултата симулације и експерименталних резултата које се користе у пракси су средња апсолутна грешка (mean absolute error -MAE) и средња квадратна грешка (root-mean-square error – RMSE или root-mean-square deviation - RMSD). Наведене метрике се заснивају на једноставном математичком апарату, релативно су једноставне за употребу, и не захтевају много рачунског времена. Оцена слагања модела са реалним системом се једноставно исказује тако што је мања вредност изабране величине значи да модел верније приказује посматрани реални систем. Уколико би израчуната грешка била једнака нули то би значило да 31 имамо модел који верно приказује реални систем, што је готово немогуће постићи у реалним условима. 3.1.2.1 Средња апсолутна грешка Средња апсолутна грешка (mean absolute error –MAE) представља усредњену разлику разлику између вредности добијених симулацијом и мерењем [36]. Ако је са 𝑝𝑖 означена вредност добијена симулацијом а са 𝑠𝑖 мерена вредност посматране величине, тада се грешка може изразити на следећи начин: 𝑒𝑖 = |𝑝𝑖 − 𝑠𝑖| (3-1) при чему је средња апсолутна грешка дефинисана следећом једначином: 𝑀𝐴𝐸 = 1 𝑛 ∑ |𝑝𝑖 − 𝑠𝑖| 𝑛 𝑖=1 = 1 𝑛 ∑ |𝑒𝑖| 𝑛 𝑖=1 (3-2) 3.1.2.2 Средња квадратна грешка Средња квадратна грешка (root-mean-square error –RMSE или root-mean-square deviation - RMSD) описује разлику између резултата предвиђања добијених моделом и резултата експерименталних истраживања према следећој дефиницији [37]: 𝑅𝑀𝑆𝐸 = √ 1 𝑛 ∑ (𝑝𝑖 − 𝑠𝑖)2 𝑛−1 𝑖=0 (3-3) Поред оцене валидности модела, представљене метрике се врло често користе за регресиону анализу, као и при оптимизацији параметара модела тражењем минимума грешке. Израчунавање средње апсолутне грешке и средње квадратне грешке представљају обавезне поступке приликом анализе варијанси – АНОВА методе, као и при статистичкој оцени модела [37]. 3.1.2.3 Раселова метрика Раселова (Russell) метрика се базира на оцени грешака у амплитудама и фазама два сигнала у временском домену [38]. Разлика између амплитуда два сигнала према овом методу се изражава на следећи начин: 𝑀𝑅 = 𝑠𝑔𝑛(𝑀)𝑙𝑜𝑔10(1 + |𝑀|) (3-4) где је: 𝑀 = (∑ 𝑝𝑖 2−∑ 𝑠𝑖 2) √∑ 𝑝𝑖 2 ∑ 𝑠𝑖 2 (3-5) при чему је:  𝑝𝑖 вредност добијена предвиђањем,  𝑠𝑖 вредност добијена мерењем 32 Ако је са 𝑝(𝑡) означена вредност добијена симулацијом, а са 𝑠(𝑡) мерена вредност посматране величине, тада се могу формирати следећи интеграли: 𝑣𝑝𝑝 = (𝑡2 − 𝑡1) −1 ∫ 𝑝2(𝑡)𝑑𝑡 𝑡2 𝑡1 𝑣𝑠𝑠 = (𝑡2 − 𝑡1) −1 ∫ 𝑠2(𝑡)𝑑𝑡 𝑡2 𝑡1 𝑣𝑝𝑠 = (𝑡2 − 𝑡1) −1 ∫ 𝑝(𝑡)𝑠(𝑡)𝑑𝑡 𝑡2 𝑡1 (3-6) при чему (𝑡2 − 𝑡1) представља временски интервал у коме се врши поређење сигнала. Према Раселовој метрици, за утврђивање разлике између два временска сигнала није довољно израчунати само разлику међу њиховим амплитудама, већ је потребно одредити и корелацију међу фазама, која може да се одреди следећом једначином: 𝑃𝑅 = 1 𝜋 𝑐𝑜𝑠−1 ( 𝑣𝑝𝑠 √𝑣𝑝𝑝𝑣𝑠𝑠 ) (3-7) 3.1.2.4 Спраг и Гир метрика Спраг и Гир (Sprague and Geer) метрика [38] се заснива на поређењу сигнала добијених симулацијом и експерименталним испитивањем у временском домену користећи: - Одступања (разлику) амплитуда - Одступања (разлику) фаза - Разумљиви фактор одступања (Comprehensive Error Factor) У литератури се може наћи неколико варијанти ове метрике [38, 39, 40], а у даљем тексту ће бити приказана само најновија верзија Спраг и Гир валидационе метрике [41]. Према овом метрици се одступања међу амплитудама поређених сигнала могу изразити на следећи начин: 𝑀𝑆𝐺 = √ 𝑣𝑠𝑠 𝑣𝑝𝑝 − 1 (3-8) који није осетљив на разлику фаза два сигнала, и који се заснива на поређењу површина испод квадрираних вредности сигнала добијених симулацијом и експерименталним мерењем у временском домену. Члан “-1” омогућује да разлика у амплитудама буде једнака нули у случају да су посматране површине једнаке. Разлика међу фазама се може изразити на следећи начин: 33 𝑃𝑆𝐺 = 1 𝜋 𝑐𝑜𝑠−1 ( 𝑣𝑝𝑠 √𝑣𝑝𝑝𝑣𝑠𝑠 ) (3-9) који је, са друге стране, неосетљив на разлику међу амплитудама. Разумљиви фактор одступања се може изразити као: 𝐶𝑆𝐺 = √𝑀𝑆𝐺 2 + 𝑃2 (3-10) Идеја Спраг и Гир метрике је покушај да се оцена валидности модела сведе на један коефицијент који ће у себи садржати оцену одступања амплитуда и фаза два сигнала. Предност Спраг и Гир метрике огледа се у томе што се сличност посматраних сигнала процењује једним јединственим бројем-фактором који у себи садржи оцену неколико појединачних фактора. У литератури [42] се предлаже да гранична вредност приказаних фактора, како код Раселове метрике тако и код Спраг и Гир метрике, буде вредност 0,2, односно да вредности предложених фактора мање од граничне вредности значе да постоји проихватљива сагласност између модела и понашања физичког објекта у посматраном домену. Недостатак претходне две метрике огледа се у томе да нису симетричне, па тако резултати поређења два сигнала у великој мери зависе од избора референтног сигнала. Поред тога, фактори који описују разлике међу амплитуда и међу фазама сигнала нису у потпуности изоловани-независни. 3.1.2.5 EARTH метрика У циљу да издвоји утицаје појединачних величина, Sarin и сарадници [43] су формирали EARTH валидациону метрику, која приликом поређења два сигнала узима у обзир три фактора и то:  Фактор разлике амплитуда  Фактор разлике фаза  Топологију – облик, односно нагиб, криве При одређивању разлике амплитуда два поређена сигнала прво је потребно умањити неслагања измећу сигнала у временском домену користећи Dynamic Time Warping (DTW) [44] алгоритам, након чега се фактор неслагања изражава на следећи начин: 𝐸𝑟𝑟𝑜𝑟𝑚𝑎𝑔 = ‖𝑃(𝑡+𝑤)−𝑆(𝑡+𝑤)‖ 1 ‖𝑆(𝑡+𝑤)‖ 1 , (3-11) 34 при чему P и S представљају вредности сигнала добијених симулацијом и експериментом, респективно, док 𝑃(𝑡+𝑤) и 𝑆(𝑡+𝑤) представљају сигнале након примењеног алгоритма DTW. Оцену разлике фаза два поређена сигнала у временском домену, према овој метрици се утврђује на бази крос-корелационе функције, која се примењује након померања сигнала у правцу временске осе ради постизања већег степена слагања, а која се може приказати на следећи начин: 𝐸𝑟𝑟𝑜𝑟𝑝ℎ𝑎𝑠𝑒 = 𝑒 ( 𝑛∗−𝑐 𝑟 ) (3-12) где се са параметрима c и r описује почетна тачка раста и стопа раста функције, а параметар n∗ описује износ за који је извршено померање једног сигнала у односу на други ради постизања већег степена слагања. У односу на претходну метрику, додатни фактор који се уводи у EARTH метрици за поређење два сигнала је поређење облика сигнала, које се врши тако што се одреде пресечне тачке сигнала са израчунатом средњом вредности, па се након тога, у свакој пресечној тачки, одређује угао нагиба кривих. Ово је могуће одредити користећи први извод функција, уз претходно примењен Dynamic Time Warping (DTW) [44] алгоритам. Фактор разлике облика функција се изражава на следећи начин: 𝐸𝑟𝑟𝑜𝑟𝑡𝑜𝑝𝑜𝑙𝑜𝑔𝑦 = ‖𝑃(𝑡+𝑑+𝑤)−𝑆(𝑡+𝑑+𝑤)‖ ‖𝑆(𝑡+𝑑+𝑤)‖ (3-13) Недостатак фактора облика дефинисаног на овај начин огледа се у непоузданости израчунавања у случају поређења високофреквентних сигнала, односно сигнала који имају велики број промена у кратком временском интервалу [43]. Основна претпоставка код претходно дефинисане три метрике је да се сигнали које се пореде представљају истим бројем тачака у периоду који се користи за поређење, односно да је учестаност узорковања посматраних сигнала иста. У реалним условима често није могуће остварити једнаку учестаност узорковања сигнала добијених симулацијом математичких модела и експерименталним испитивањем реалног објекта. Технике валидације модела базиране на поређењу особина сигнала не захтевају било какву претпоставку о расподели поређених сигнала и не захтевају велико рачунско време. Са друге стране, недостаци ове методе валидације модела се огледају у:  Могућности примене само на сигнале у временском домену,  Неузимању у обзир грешака израчунавања и мерења,  Непостојању јасно дефинисаних граничних вредности,  Неузимању у обзир мишљење експерата. 35 3.1.3 Методе валидације базиране на функцијама вероватноће Ове методе валидације модела се базирају на одређивању разлике између функција густине вероватноће (PDF) и/или између кумулативних функција вероватноће (CDF). Као и код претходних, тако се и код ових методе не чини било каква претпоставка о расподели променљивих, а потребно рачунско време за одређивање разлике између PDF/ CDF функција је мало. У протеклих педесет година истраживачи су развили велики број метрика за валидацију модела базираних на поређењу кумулативних функција. 3.1.3.1 Колмогоrов-Смирнов метрика Колмогоrов-Смирнов (Колмогоров, Смирнов) метрика је најчешће коришћена метрика за поређење кумулативних функција. Заснива се на одређивању максималне разлике између две кумулативне функције, мерено дуж вертикалне осе, као што је приказано на слици 3–6. Слика 3-3. Колморгонов-Смирнова метрика Колморгонов-Смирнова метрика за две кумулативне функције F(x) и K(x), може се изразити на следећи начин [45]: 𝐷 = 𝑚𝑎𝑥|𝐹(𝑥) − 𝐾(𝑥)| (3-14) Приказана мера испуњава услов симетричности, односно D(F,K) = D(K,F), што представља значајну предност приликом интерпретације добијених резултата. Метрика се примењује на опсег функција вероватноће које се преклапају код поређених функција. Недостатак ове метрике огледа се у томе што се за поређење кумулативних функција користе вредности у само две тачке и то у онима у којима 36 постоји највеће одступање између функција, док се остатак расподеле посматраних сигнала не узима у обзир. 3.1.3.2 Андерсон-Дарлинг метрика У циљу побољшања Колморгонов-Смирнов метрике, Anderson и Darling [46] су увели нову метрику, која се и даље базира на разлици између кумулативних функције двеју поређених променљивих, али којом се додатно уводи и тежинска функција. Ако две променљиве имају дистрибуције 𝐹(𝑥) и 𝐾(𝑥), онда се мера разлике између посматраних функција вероватноће дефинише на следећи начин: 𝐴𝐷 = 𝑛 ∫ (𝐹(𝑥) − 𝐾(𝑥)) 2 𝜔(𝑥)𝑑𝐾(𝑥) ∞ −∞ (3-15) где 𝜔(𝑥) представља тежинску функцију, чија је намена да пондерише одговарајуће зоне кумулативних функција које се пореде, а које су од интереса. У случају да је тежинска функција једнака јединици, тада се Андерсон-Дарлинг метрика назива Kramer-von Mieses метриком [47]. Показано је да Андерсон-Дарлинг метрика има бољу оцену поређења два сигнала него Колморгонов-Смирнов метрика [48]. 3.1.3.3 Кулбак-Лајблерова дивергенција Кулбак-Лајблерова (Kullback-Leibler) дивергенција је још једна често коришћена валидациона метрика, која се базира на одређивању разлика између дискретних функција вероватноће (probability mass function - pmf), а може дефинише се на следећи начин: 𝐷𝐾𝐿 = ∑ 𝑝(𝑧)𝑧 𝑙𝑜𝑔2 𝑝(𝑧) 𝑞(𝑧) (3-16) При чему су 𝑝(𝑧) и 𝑞(𝑧) дискретне функције вероватноће, док је 𝑧 величина која узима вредности у дијапазону у коме се две функције вероватноће преклапају. У једначини 3-15 са 𝑝(𝑧) су описане вредности добијене експерименталним испитивањем, а са 𝑞(𝑧) су представљене вредности добијене симулацијом. Кулбак- Лајблерова дивергенција се, најчешће, користи у теорији информација, где се тумачи као очекивана додатна порука по податку који се мора пренети, а која служи да идентификује одређену вредност Z, која се може идентификовати у заједничком опсегу променљивих X и Y [48]. 3.1.3.4 Валидациона метрика базирана на површинама Ferson и Oberkampf у својим истраживањима [48] као меру разлике између две функције вероватноће уводе површину која је ограничена графиконима функција које се пореде, као што је приказано на слици 3-7 [49]. У случају континуалних сигнала, разлика површина се може израчунати користећи следећу једнакост: 37 𝐷(𝐹, 𝑆𝑛) = ∫ |𝐹(𝑥) − 𝑆𝑛(𝑥)|𝑑𝑥 ∞ −∞ (3-17) При чему је са 𝐹(𝑥) означена функција вероватноће променљиве добијене симулацијом, а са 𝑆𝑛(𝑥) функција вероватноће променљиве добијене експерименталним испитивањем. Слика 3-4. Ферсон-Оберкампф валидациона метрика заснована на поређењу површина Методе валидације модела засноване на поређењу функција густине вероватноће не чине претпоставке у вези расподеле променљивих које се пореде. Примена ових методе валидације је ограничена само на скаларне вредности, и они се не могу користити за поређење више од два сигнала. И код ових метода је у извесној мери присутна субјективност која се огледа у избору граничних вредности за прихватање ваљаности модела. Мишљења експерата се могу укључити у ове методе валидације кроз избор граничних вредности. Рачунско време за одређивање разлике поређених сигнала је веће од претходно приказаних метода, али је још увек релативно мало. 3.1.4 Методе валидације модела базиране на тестирању хипотеза Методе валидације базиране на тестирању хипотеза се заснивају на поређењу хипотеза оценом одговарајућих величина поређених сигнала [50, 51, 52]. Хипотезе представљају унапред дефинисане тврдње којима се на основу познавања карактеристика једног скупа доноси закључак о другом скупу. Тестирање хипотеза се заснива на дефинисању две међусобно искључиве хипотезе које се називају нулта хипотеза (H0) и алтернативна хипотеза (H1). Ако се пореде аритметичке средине два скупа, нулта и алтернативна хипотеза се могу дефинисати на следећи начин: Нулта хипотеза (H0): Између аритметичких средина два поређена скупа, односно између аритметичких средина два узорка добијена из два поређена скупа, не 38 постоји значајна разлика. Ако разлика и постоји, она је случајног карактера, односно, настала је под дејством случајних фактора. Нулта хипотеза математички се може изразити помоћу следеће једнакости: 𝐻0: ?̅?1 = ?̅?2, односно ?̅?1 − ?̅?2 = 0 (3-18) Алтернативна хипотеза (H1) представља супротну тврдњу нултој хипотези: Између аритметичких средина узорака постоји значајна разлика и она није случајног карактера, већ је настала под дејством системских или експерименталних фактора. У математичком облику алтернативна хипотеза може се изразити на следећи начин: 𝐻1: ?̅?1 ≠ ?̅?2, односно ?̅?1 − ?̅?2 ≠ 0 (3-19) Прихватање постављене нулте или алтернативне хипотезе се врши на основу изабраних прагова значајности. Ако се одабраним статистичким тестом за изабрану вероватноћу и праг значајности покаже истинитост нулте хипотезе, онда се она прихвата и одбацује алтернативна хипотеза, и закључује се: претпоставка истраживача, исказана нултом хипотезом, је тачна, јер добијена разлика између реализоване (вредности добијене после истраживања или после експеримента) и хипотетичне вредности параметра скупа није статистички значајна (сигнификантна). Разлика је последица случајног карактера, и настала је дејством споредних фактора. Супротно томе, ако статистички тест за одговарајућу вероватноћу и праг значајности, не потврди истинитост нулте хипотезе, онда се она одбацује и аутоматски прихвата алтернативна хипотезу као истинита. Приликом тестирања хипотеза могу да се направе два типа грешака [53]: Грешка прве врсте – типа I, која се означава са α, која настаје када одбацујемо истиниту нулту хипотезу. Вероватноћа да се направи грешка прве врсте одређена је са праговима значајности које се најчешће означавају са p. Грешка друге врсте – типа II (β - грешка), која настаје када прихватамо (не одбацујемо) неистиниту нулту хипотезу. Вероватноћа да се неће направити грешка друге врсте одређује снагу (power) теста. Снага теста (𝛾) је вероватноћа да се одбаци нетачна нулта хипотеза, и једнака је разлици између 1 и вероватноће грешке друге врсте. 𝛾 = 1 − 𝛽 (3-20) 39 Снага теста расте са величином узорака којим се представљају скупови који се пореде и са величином разлике коју сматрамо стварно значајном, а опада са нивоом значајности. Што је снага теста већа, тест је бољи. Тестови који се базирају на прихватању или одбацивању нулте хипотезе могу да се поделе у две основне групе:  Параметарски тестови  Непараметарски тестови Параметарски тестови се примењују када су вредности које се пореде нумеричке, када подаци који се испитују не одступају значајно од нормалне расподеле, као и за велики број узорака (број узорака већи од 30) без обзира каква је њихова расподела. Најпознатији, и практично најпримењиванији, тестови ове групе су z- тест и t-тест. Основни услови за примену z-теста су да је позната варијанса скупова који се пореде и да, за скупове са мање од 30 узорака, променљиве имају нормалну расподелу. Са друге стране, t-тест не захтева познавање варијансе скупова који се пореде и може да се примени како код скупова са малим, тако и код скупова са великим бројем узорака. У пракси се, због могућности провере променљивих са мање од 30 узорака и зато што не захтева унапред познавање варијанси променљивих, најчешће примењује t-тест. Непараметарски тестови се примењују у случају када су карактеристике скупова који се пореде дате описно, у случају када се пореде скупови са малим бројем узорака који су несиметрично распоређени. Од непараметарских тестова најчешће у употреби су: χ2 тест, Фишеров тест, Мек Немарин тест, итд. 3.1.4.1 Студентов t-тест Параметарски тест за поређење хипотеза, који се најчешће употребљава за поређење аритметичких средина два посматрана скупа је t-тест, који је још познат и као Студентов t–тест [51]. Основне претпоставке за примену t-теста су:  Променљиве које се тестирају морају бити нумеричке,  Уколико је број узорака мањи од 30, претпоставља се да променљиве имају нормалну дистрибуцију За реализацију овог теста потребно је да се познају број узорака посматраних скупова n, стандардна девијација sd, односно стандардна грешка оцене sg и аритметичке средине посматраних скупова 𝑋1, 𝑋2. Претпоставимо да имамо два велика и независна скупа (X1) и (X2) обима n1 и n2 респективно. Одговарајућа статистика за поређење средњих вредности две независне променљиве може се извршити применом следеће једначине: 40     1 2 2 2 1 1 2 2 1 2 1 2 1 2 1 1 2 x x t n sd n sd n n n n n n                  (3-21) при чему је са sd означена је стандардна девијација. Табела 3-1. Критичне вредности за Студентову t-расподелу са n степени слободе n Вредности за t за различите нивое вероватности p 0.75 0.90 0.95 0.975 0.99 0.995 0.9995 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 40 60 120  1.000 .816 .765 .741 .727 .718 .711 .706 .703 .700 .697 .695 .694 .692 .691 .690 .689 .688 .688 .687 .686 .686 .685 .685 .684 .684 .684 .683 .683 .683 .681 .679 .677 .674 3.078 1.886 1.638 1.533 1.476 1.440 1.415 1.397 1.383 1.327 1.363 1.356 1.350 1.345 1.341 1.337 1.333 1.330 1.328 1.325 1.233 1.321 1.319 1.318 1.316 1.315 1.314 1.313 1.311 1.310 1.303 1.296 1.289 1.282 6.314 2.920 2.353 2.132 2.015 1.943 1.895 1.860 1.833 1.812 1.796 1.782 1.771 1.761 1.753 1.746 1.740 1.734 1.729 1.725 1.721 1.717 1.714 1.711 1.708 1.706 1.703 1.701 1.699 1.697 1.684 1.671 1.658 1.645 12.706 4.303 3.182 2.776 2.571 2.447 2.365 2.306 2.262 2.228 2.201 2.179 2.160 2.145 2.131 2.120 2.110 2.101 2.093 2.086 2.080 2.074 2.069 2.064 2.060 2.056 2.052 2.048 2.045 2.042 2.021 2.000 1.980 1.960 31.821 6.965 4.541 3.747 3.365 3.143 2.998 2.896 2.821 2.764 2.718 2.681 2.650 2.624 2.602 2.583 2.567 2.552 2.539 2.528 2.518 2.508 2.500 2.492 2.485 2.479 2.473 2.467 2.462 2.457 2.423 2.390 2.358 2.326 63.657 9.925 5.841 4.604 4.032 3.707 3.499 3.355 3.250 3.169 3.106 3.055 3.012 2.977 2.947 2.921 2.898 2.878 2.861 2.845 2.831 2.819 2.807 2.797 2.787 2.779 2.771 2.763 2.756 2.750 2.704 2.660 2.617 2.576 636.619 31.598 12.941 8.610 6.859 5.959 5.405 5.041 4.781 4.587 4.437 4.318 4.221 4.140 4.073 4.015 3.965 3.922 3.883 3.850 3.819 3.792 3.767 3.745 3.725 3.707 3.690 3.674 3.659 3.646 3.551 3.460 3.373 3.291 Број степени слободе, у статистичком смислу, дефинише се као разлика укупног броја узорака са којима се врши статистика, умањен за број независно променљивих. У случају да није познат број независно променљивих, број степени слободе се може одредити на следећи начин:  1 2 1df n n   (3-22) Тумачење добијених резултата t-теста базира се на Студентовој t-расподели за одређени број степени слободе и на основу критичних вредности t расподеле датих у табели 3-1. Функција t-расподеле је симетрично опадајућа функција. Са повећањем броја статистичких степени слободе, површина обухваћена реповима криве се смањује, 41 а расподела се све више приближава стандардној нормалној расподели, као што је то приказано на слици 3-5. Слика 3-5. Студентова t расподела за различит број степени слободе Слика 3-6. Графички приказ правила за прихватање и одбацивање хипотеза Из свега напред наведеног произилазе следећа правила (слика 3-6): Ако је реализована t-вредност мања од граничне табличне вредности за одговарајући број степени слободе и праг (ниво) значајности, нулта хипотеза се прихвата као тачна, а одбацује алтернативна хипотеза:  t-реализовано < t (СС и 0,05) ⇒ Ho се не одбацује јер је ризик већи од 5% (p>0) Обрнуто, ако је реализована t-вредност једнака или већа од граничне табличне вредности, за одговарајући број степена слободе и праг значајности, нулта хипотеза се одбацује као нетачна, а прихвата се алтернативна хипотеза: 42  t-реализовано ≥ t(СС и 0,05) ⇒ одбацује се нулта хипотеза за ниво ризика p=0,05, односно за ниво сигурности P=0,95(95%)  t-реализовано ≥ t(СС и 0,01) ⇒ одбацује се H0 и за ниво ризика p=0,01, односно за ниво сигурности P=0,99 (99%). 3.1.4.2 Пирсонов Хи-квадрат тест Пирсонов тест базира се на хи-квадрат расподели и представља непараметарски статистички модел за процену значајности разлике на основу учестаности. Примењује се на атрибутивна или нумеричка непараметарска обележја величина које се пореде [51]. Пирсоновим χ2 тестом се израчунава да ли постоји статистички значајна повезаност у учестаностима два атрибутивна обележја, или између добијених (опажених) учестаности и учестаности које очекујемо код одређене хипотезе. Добијене учестаности су учестаности добијене емпиријским истраживањем, односно експериментом. Очекиване учестаности су теоријског карактера, или очекиване на основу хипотезе коју желимо да проверимо. Три су најважнија услова за примену χ2 квадрат теста [52]: 1. χ2 квадрат тест се врши искључиво на основу апсолутних учестаности, или из података ако могу да се сведу на апсолутне учестаности; 2. Ниједна од апсолутних учестаности не сме да има вредност мању од 5 јединица, 3. Када су узорци мањи од 200 јединица (n1+n2<200) примењује се Yates-ова корекција:  Свака добијена учестаност, ако је већа од очекиване, умањује се за 0,5, а  Свака добијена учестаност, ако је мања од очекиване, увећава се за 0,5. χ2 квадрат тест може имати следеће модалитете: 1. χ2 тест распореда учестаности 2. χ2 тест независности 3. χ2 тест хомогености Пирсонов χ2 тест се употребљава за тестирање значајности разлике између теоретских (ft) и експерименталних (f0) учестаности, при чему се у математичком облику може изразити на следећи начин:   2 02 t t f f f    (3-23) Тумачење добијених резултата χ2-теста базира се на χ2-расподели, датој на слици 3-10, за одређени број степени слободе, и на основу критичних вредности 43 χ2-расподеле. Број степени слободе, у статистичком смислу, одређује се на исти начин као и при примени t-теста, према једначини (3-22). Слика 3-7. Функција густине вероватноће за хи-квадрат тест 3.1.4.3 Фишеров F -тест У основи, сваки статистички тест који се базира на F-расподели, а који има мање од 30 узорака за поређење можемо назвати F-тест. F-расподела добила је име по статистичару Р.А. Фишеру (R.A. Fisher), па је стога позната и као Фишерова расподела или Snecedor-Fisher расподела [54]. F-расподела се најчешће користи за анализу варијанси и представља саставни део АНОВА алгоритма [55]. У основи, F-расподела представља однос две χ2 -расподела, подељене са одговарајућим бројем степени слободе, 𝐹 = 𝜒1 2/𝑑𝑓1 𝜒22/𝑑𝑓2 , (3-24) при чему су 𝜒2 2 и 𝜒2 2 две χ2 статистике, а 𝑑𝑓1 и 𝑑𝑓1 њихови одговарајући статистички степени слободе. 44 Слика 3-8. Фишерова расподела са различитим бројем степени слободе С обзиром да F-тест представља однос две χ2-расподеле, многа од својстава F-расподела су наслеђене од χ2-расподеле, и F-расподела има следеће особине:  Вредности F-расподела су не-негативне  F- расподела није симетрична  Средња вредност је приближно једнака јединици  F- расподелу, с обзиром на њену дефиницију, карактеришу два статистичка степена слободе F-тест је намењен за тестирање једнакости варијанси две независне популације. Он се може употребити за тестирање хипотеза на неколико начина, и то за: 1. Тестирање хипотезе о једнакости варијанси 2. Тестирање хипотезе о једнакости више средњих вредности 3. Тестирање значајности регресије употребљене приликом формирања регресионог модела У случају да се пореде варијансе две популације, потребно је наћи однос стандардних девијација према следећој једнакости: 𝐹 = 𝑆1 2 𝑆2 2 (3-25) При чему су са 𝑆2 2 и 𝑆2 2 означене стандардне девијације прве и друге популације респективно. И у овом, као и у претходним тестовима, постављају се две хипотезе. Нулта хипотеза тврди да не постоје значајне разлике између поређених варијанси, док алтернативна хипотеза тврди да постоји значајне разлике између поређених варијанси. 45 Одлука о прихватању или одбацивању одговарајуће хипотезе доноси се на основу поређења израчунате вредности F-теста и табеларне критичне вредности [54, 55]. Критична вредност код F-теста се одређује на основу статистичких степени слободе обе популације, које су поређене на основу изабраног прага значајности  за поређење популација. Основне препоруке приликом формирања F-теста су:  Већа варијанса увек би требало да се постави у имениоцу разломка,  Уколико су дате стандардне девијације уместо варијанси, стандардне девијације морају бити квадриране,  Уколико статистички степени слободе нису дефинисани приликом израчунавања F-теста, из табеле критичних вредности треба узети већу критичну вредност, односно критичну вредности за мањи број статистичких степени слободе,  Популације које се пореде морају бити независне С обзиром да се F-тест базира на поређењу две χ2-расподеле, то се све сва ограничења χ2-теста преносе и на овај тест. Основна предност F-теста у односу на χ2-тест је што се може користити и у случају када имамо мали број узорака у популацији. Уколико је број узорака популације који се пореде мањи од 30, тада се предлаже употреба F-теста, док се у случају када популације имају више од 30 узорака препоручује употреба χ2-теста или t-теста за поређење популација. 3.1.5 Методе валидације модела базиране на Бајесовој формули Прво Daniel Bernuli, а затим у 20. веку и John Neumen, су покушали да укључе концепт вероватноће у проблем доношења одлуке. По њима, с обзиром да људско знање није савршено, свака одлука се доноси са одређеном грешком, односно несигурношћу-грешком. Математички посматрано, вероватноћа остаје иста, али се може мењати значај који доносилац одлуке додељује појединим резултатима на основу којих се формира одлука. За одређивање вероватноће реализације једног догађаја Бајес уводи два нова термина и то: априори вероватноћа и апостериори вероватноћа [56, 57]. Априори вероватноћа се односи на значај који се додељује појединим исходима пре експеримента, у условима када подаци нису познати. Априори вероватноћу додељује сваки доносилац одлуке понаособ, што представља слабост концепта. Ипак, предност му је што омогућава давање исказа о појавама пре њиховог директног посматрања [58]. Комбинујући априори вероватноће са условном расподелом резултата експеримента, користећи се Бајесовом теоремом, добијају се апостериори вероватноће. 46 Концепти априори и апостериори вероватноће су значајни, јер је на њима базирано закључивање о популацији на основу узорка [59], [60]. Бајесов концепт се базира на такозваној формули потпуне вероватноће. Да би се објаснио концепт Бајесове, или потпуне вероватноће, потребно је објаснити основне концепте вероватноће 3.1.5.1 Дефиниција условне вероватноће Нека у експерименту посматрамо два случајна догађаја A и B. Ако је познато да се један од њих, на пример догађај B, остварио, треба одредити вероватноћу да се остварио и догађај А. Тако се, на одређен начин, мери повезаност догађаја, односно мера у којој информација о реализацији догађаја B говори о реализацији догађаја А. Дефиниција 3.1. Условна вероватноћа Нека су А и B догађаји из истог простора вероватноћа (Ω, Е, P) и нека је P(B)>0, где је са Ω означен скуп свих догађаја, са Е расподела случајних променљивих и са P њихова вероватноћа. Тада је условна вероватноћа догађаја А, ако се остварио догађај B, једнака:       | P AB P A B P B  (3-26) За условну вероватноћу P(A|B) користи се и ознака PB(A). Условне вероватноће догађаја из истог простора вероватноћа, у односу на неки догађај из тог простора, имају све особине вероватноће, тј. задовољавају аксиоме B1 0, B2 0, B3 0:       0 1 0 2 0 3 : | 0, : | 1, : | | .j j j j B P A B B P B B P A B P A B                (3-27) 3.1.5.2 Независност догађаја Независност догађаја је један од битних појмова у теорији вероватноће, а самим тим и у математичкој статистици. Уводи се следећа дефиниција: Дефиниција 3.2. Независност догађаја Нека су догађаји А и B из истог простора вероватноћа. Ако важи P(AB)=P(A)P(B), тада су догађаји А и B независни. На основу дефиниције условне вероватноће закључује се, да за независне догађаје А и B важи: 47        | |P A B P A и P B A P B  (3-28) Ако су догађаји А и B независни, тада реализација догађаја B не утиче на вероватноћу догађаја А, али ако су догађаји А и B зависни, тада је вероватноћа P(A|B) различита од P(A), и тада је могуће да буде P(A|B)>P(A), али такође и да буде P(A|B) 600m Класификација према квалитету QN1, QN2, QN3, неправилности као и геометријске карактеристике колосека на коме је извршено експериментално испитивање железничког возила дата је у прилогу. 6.4 РЕЗУЛТАТИ ИСПИТИВАЊА На основу спроведених експерименталних испитивања, добијени резултати, сагласно препорукама UIC 518, су дати у табели 6-4. Табела 6-4. Резултати експерименталног испитивања Параметар Осовинск и притисак Ограничење Правац Кривина R>600 400 50% 10 a memory dump will be written to file "idebug_file" # idebug_file= "calc.out" # write_ca_file # During simulation, write continuously to file $ident.ca #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Pre- & Post- Processing #[-]{ ================================================================== if_then_char_init CalcType .eq. TSIM .or. CalcType .eq. MODAL # pre_process= 'sed "s!runf/tsim_BoBo.tsimf!$CURRENT_FILE!" npickf/flex_car.npickf > npickf/$IDENT.npickf' # pre_process= 'npick npickf/$IDENT.npickf' # pre_process= 'quasi $CURRENT_FILE' # post_process= 'mplot mplotf/bogi_A.mplotf $IDENT' # post_process= 'mplot mplotf/Tsim_Safe_OneIdent.mplotf $IDENT' # post_process= 'mplot mplotf/critSpeedGoalfunc.mplotf $IDENT' # post_process= 'mgv diags/$IDENT.ps' endif #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### ### Track irregularities ### ========================================================== func char ctrack_irreg= Real_track #[-]{ # insert file track/trc_irreg.ins func const bo_ = 0.75 # Lateral semi-distance between the nominal rolling circles of the wheels func const Track_Gauge= 1435. # Gauge to be used in the intpl_track_irr-commands if_then_char_init ctrack_irreg .eq. "NoTrackIrr" # {{ func const YMtrac= 1e-3 # From mm to m; Scale factor 1.00; Lateral irregularities func const ZMtrac= 1e-3 # From mm to m; Scale factor 1.00; Vertical irregularities func const GMtrac= 1e-3 # From mm to m; Scale factor 1.00; Gauge irregularities func const CMtrac= 1e-3/(2*bo_) # From mm to rad; Scale factor 1.00; Cant irregularities func const Xtrac_start= 0. func const Xtrac_stop= 30000. func intpl_track_irr2 Xtrac_start Xtrac_stop Ideal_track Track_Gauge elseif_then_char_init ctrack_irreg .eq. "UIC518_wheel_unloading" # }{ func const YMtrac= 1e-3 # From mm to m; Scale factor 1.00; Lateral irregularities func const ZMtrac= 1e-3 # From mm to m; Scale factor 1.00; Vertical irregularities func const GMtrac= 1e-3 # From mm to m; Scale factor 1.00; Gauge irregularities func const CMtrac= 1e-3/(2*bo_) # From mm to rad; Scale factor 1.00; Cant irregularities func const Xtrac_start= 0. func const Xtrac_stop= 3000. func intpl_r lat_trac -100.0 0.0 Xtrac_stop 0.0 func intpl_r vert_trac # vertical alignment in mm -100.0 0.0 -10.0 0.0 -9.0 0.0 -8.0 0.0 0.0 0.0 66-6-.1 0.0 66-6-.00006 0.0 # Several points in order to avoid ringing in the spline interpolation 66-6-.00004 0.0 66-6-.00003 0.0 66-6-.00001 0.0 66-6 0.0 66-6+0.0003 0.0005 66-6+0.0006 0.001 66-6+0.006 0.01 66-0.006 9.99 66-0.0006 9.999 LVIII 66-0.0003 9.9995 66 10.0 # 20 dip on high rail 66+0.0003 9.9995 # 6 m semi-span 66+0.0006 9.999 66+0.006 9.99 66+6-0.006 0.01 66+6-0.0006 0.001 66+6-0.0003 0.0005 66+6 0.0 66+6+.00001 0.0 66+6+.00003 0.0 66+6+.00004 0.0 66+6+.00006 0.0 Xtrac_stop 0.0 func intpl_r spv_trac # track gauge in mm -100.0 1435. Xtrac_stop 1435. func intpl_r fi_trac # cant in mm -100.0 0.0 -10.0 0.0 -9.0 0.0 -8.0 0.0 0.0 0.0 66-6-.1 0.0 66-6-.00006 0.0 # Several points in order to avoid ringing in the spline interpolation 66-6-.00004 0.0 66-6-.00003 0.0 66-6-.00001 0.0 66-6 0.0 66-6+0.0003 -0.001 66-6+0.0006 -0.002 66-6+0.006 -0.02 66-0.006 -19.98 66-0.0006 -19.998 66-0.0003 -19.999 66 -20.0 # 20 dip on high rail 66+0.0003 -19.999 # 6 m semi-span 66+0.0006 -19.998 66+0.006 -19.98 66+6-0.006 -0.02 66+6-0.0006 -0.002 66+6-0.0003 -0.001 66+6 0.0 66+6+.00001 0.0 66+6+.00003 0.0 66+6+.00004 0.0 66+6+.00006 0.0 Xtrac_stop 0.0 elseif_then_char_init ctrack_irreg .eq. "track_V120a" # }{ func const YMtrac= 1e-3 # From mm to m; Scale factor 1.00; Lateral irregularities func const ZMtrac= 1e-3 # From mm to m; Scale factor 1.00; Vertical irregularities func const GMtrac= 1e-3 # From mm to m; Scale factor 1.00; Gauge irregularities func const CMtrac= 1e-3/(2*bo_) # From mm to rad; Scale factor 1.00; Cant irregularities func const Xtrac_start= 1400. func const Xtrac_stop= 3100. func intpl_track_irr2 Xtrac_start Xtrac_stop track/track_V120a.trax Track_Gauge elseif_then_char_init ctrack_irreg .eq. "track_V120b" # }{ func const YMtrac= 1e-3 # From mm to m; Scale factor 1.00; Lateral irregularities func const ZMtrac= 1e-3 # From mm to m; Scale factor 1.00; Vertical irregularities func const GMtrac= 1e-3 # From mm to m; Scale factor 1.00; Gauge irregularities func const CMtrac= 1e-3/(2*bo_) # From mm to rad; Scale factor 1.00; Cant irregularities func const Xtrac_start= 1050. func const Xtrac_stop= 3000. func intpl_track_irr2 Xtrac_start Xtrac_stop track/track_V120b.trax Track_Gauge elseif_then_char_init ctrack_irreg .eq. "track_V160a" # }{ func const YMtrac= 1e-3 # From mm to m; Scale factor 1.00; Lateral irregularities func const ZMtrac= 1e-3 # From mm to m; Scale factor 1.00; Vertical irregularities func const GMtrac= 1e-3 # From mm to m; Scale factor 1.00; Gauge irregularities func const CMtrac= 1e-3/(2*bo_) # From mm to rad; Scale factor 1.00; Cant irregularities func const Xtrac_start= 700. func const Xtrac_stop= 4200. func intpl_track_irr2 Xtrac_start Xtrac_stop track/track_V160a.trac Track_Gauge elseif_then_char_init ctrack_irreg .eq. "track_V200a" # }{ func const YMtrac= 1e-3 # From mm to m; Scale factor 1.00; Lateral irregularities func const ZMtrac= 1e-3 # From mm to m; Scale factor 1.00; Vertical irregularities LIX func const GMtrac= 1e-3 # From mm to m; Scale factor 1.00; Gauge irregularities func const CMtrac= 1e-3/(2*bo_) # From mm to rad; Scale factor 1.00; Cant irregularities func const Xtrac_start= 0. func const Xtrac_stop= 4997. func intpl_track_irr2 Xtrac_start Xtrac_stop track/track_V200a.trac Track_Gauge elseif_then_char_init ctrack_irreg .eq. "Real_track" # }{ func const YMtrac= 1e-3 # From mm to m; Scale factor 1.00; Lateral irregularities func const ZMtrac= 1e-3 # From mm to m; Scale factor 1.00; Vertical irregularities func const GMtrac= 1e-3 # From mm to m; Scale factor 1.00; Gauge irregularities func const CMtrac= 1e-3/(2*bo_) # From mm to rad; Scale factor 1.00; Cant irregularities func const Xtrac_start= 1427400. func const Xtrac_stop= 1428200. func intpl_track_irr3 Xtrac_start Xtrac_stop track/Kra_Rgn_040930.trax_wdesign 1435 ro_trac_design f_trac_design z_trac_design else func print06_char_init " " func print06_char_init " ***ERROR*** In Input Reading" func print06_char_init " Unvalid value given for character variable ctrack_irreg" func stop endif # }} s_var scalar_0 Xtrac_start # Save start coordinate as a scalar for post processing s_var scalar_0 Xtrac_stop # Save stop coordinate as a scalar for post processing #### Modify track gauge ##[-]{ ========================================================== # 2) Manually by defining the variables gauge_average and gauge_dev func const gauge_average= 1435. # Gauge to be removed from the track irregularity file # func const gauge_dev_=-0.004 # Make the track 4 mm tighter # func const gauge_dev_= 0.000 # Do not change the gauge func const gauge_dev_= 0.004 # Make the track 4 mm wider ##[-]} #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # func const Curve_TC_beg1= 40+Xtrac_start # Beginning of transition curve # func const Curve_TC_end1= 160+Xtrac_start # End of transition curve # s_var scalar_0 Curve_TC_beg1 # Store for evaluation # s_var scalar_0 Curve_TC_end1 # of PCT #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Wheel-rail geometry functions ### ========================================================== func char ckpfr= WP4_bv50i30_mb1i30_r #[-]{ if_then_char_init ckpfr .eq. "ckona_fl" # {{ func copy_init lambda0= 0.025 # Rail inclination 1/40 func copy_init lambda = 0.30 # Effective conicity s_var scalar_0 lambda func operp_init epsilon= 50.7 * ( lambda - lambda0 ) # Contact angle difference parameter insert file $genkpf/kpf_ckona_fl.kpfr in_substruct kpf_ckona [ " " lambda lambda0 epsilon ] # elseif_then_char_init ckpfr .eq. "rkona" insert file $genkpf/kpf_rkona.kpfr in_substruct kpf_rkona [ " " lambda ] # elseif_then_char_init ckpfr .eq. "P8_EN54E3i20" insert file $genkpf/EPSt30.0_EN54E3i20.kpfr in_substruct EPSt30.0_EN54E3i20 [ " " ] # elseif_then_char_init ckpfr .eq. "ENS1002t32.5_uic60i20" insert file $genkpf/ENS1002t32.5_uic60i20.kpfr in_substruct ENS1002t32.5_uic60i20 [ " " ] # elseif_then_char_init ckpfr .eq. "ENS1002t32.5_uic60i30" insert file $genkpf/ENS1002t32.5_uic60i30.kpfr in_substruct ENS1002t32.5_uic60i30 [ " " ] # elseif_then_char_init ckpfr .eq. "ENS1002t32.5_uic60i40" insert file $genkpf/ENS1002t32.5_uic60i40.kpfr in_substruct ENS1002t32.5_uic60i40 [ " " ] # elseif_then_char_init ckpfr .eq. "ENS1002t32.5_bv50i30" insert file $genkpf/ENS1002t32.5_bv50i30.kpfr in_substruct ENS1002t32.5_bv50i30 [ " " ] # elseif_then_char_init ckpfr .eq. "S1002t32.5_bv50i30" LX insert file $genkpf/S1002t32.5_bv50i30.kpfr in_substruct S1002t32.5_bv50i30 [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30" insert file kpfr/WP4_bv50i30.kpfr in_substruct WP4_bv50i30 [ " " ] # elseif_then_char_init ckpfr .eq. "P8_uic60i40" insert file kpfr/P8_uic60i40.kpfr in_substruct P8_uic60i40 [ " " ] # elseif_then_char_init ckpfr .eq. "P8_uic60i20" insert file kpfr/P8_uic60i20.kpfr in_substruct P8_uic60i20 [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30_r075" insert file kpfr/WP4_bv50i30_r075.kpfr in_substruct WP4_bv50i30 [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30_r085" insert file kpfr/WP4_bv50i30_r085.kpfr in_substruct WP4_bv50i30 [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30_r100" insert file kpfr/WP4_bv50i30_r100.kpfr in_substruct WP4_bv50i30 [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30_mb1i30_l" insert file kpfr/WP4_bv50i30_mb1i30_l.kpfr in_substruct WP4_bv50i30_mb1i30_l [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30_mb1i30_r" insert file kpfr/WP4_bv50i30_mb1i30_r.kpfr in_substruct WP4_bv50i30_mb1i30_r [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30_mb1i30_l_150k" insert file kpfr/WP4_bv50i30_mb1i30_l_150k.kpfr in_substruct WP4_bv50i30_mb1i30_l [ " " ] # elseif_then_char_init ckpfr .eq. "WP4_bv50i30_mb1i30_r_150k" insert file kpfr/WP4_bv50i30_mb1i30_r_150k.kpfr in_substruct WP4_bv50i30_mb1i30_r [ " " ] # elseif_then_char_init ckpfr .eq. "Variable_W/R-geom" insert file $genkpf/ENS1002t32.5_uic60i40.kpfr insert file $genkpf/ENS1002t32.5_bv50i30_worn_left3.kpfr insert file $genkpf/ENS1002t32.5_bv50i30_worn_right3.kpfr in_substruct ENS1002t32.5_uic60i40 [ tang_track ] in_substruct ENS1002t32.5_bv50i30_worn_left3 [ right_curve ] in_substruct ENS1002t32.5_bv50i30_worn_right3 [ left_curve ] func kpf_variable_1 " " -100.0 tang_track 0.0 tang_track 5.0 right_curve 495.0 right_curve 505.0 left_curve 1000.0 left_curve 1005.0 tang_track 3000.0 tang_track # else func print06_char_init " " func print06_char_init " ***ERROR*** In Input Reading" func print06_char_init " Unvalid value given for character variable ckpfr" func stop endif # }} #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Wheelset model (same for all vehicles) #[-]{ ============================================================= ## ## Create wheelsets ## ==================================================================== substruct create_axl [ mass m_rigid_6 axl_$1 lsa_$1 0. 0. -ro_$1 ma_$1 ma_$1 ma_$1 Jfa_$1 Jka_$1 Jpa_$1 constr fix_free_1 axl_$1.k= 0. # initval set_var axl_$1.vk= -Vo/ro_$1 ] LXI #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Track model (same for all vehicles) #[-]{ ============================================================= # func const mu_ = 0.4 # Coefficient of friction between wheel and rail func const kzrtF0_= 0. # Vertical prestress force rail - track ## Calculation of creep and creepforces between wheels and rails ## ============================================================= substruct wr_coupl_pe3 [ func wr_coupl_pe3m # $1 # Name/number of the wheelset lsa_$1 # Name of the linear local coordinate system # lat_trac vert_trac spv_trac fi_trac # Track irregularities memory fields YMtrac ZMtrac GMtrac CMtrac # Multiplication factors for track irregularities gauge_average # Average gauge of spv_trac gauge_dev_$1 # Modify average gauge for a different conicity 0 # Type of contact normal to the contact surface # axl_$1 # Body wheel right side axl_$1 # Body wheel left side trc_$1 # Body track right side trc_$1 # Body track left side ro_$1r # Nominal wheel radius right wheel 84e6 # kyrt_$1r # Lateral stiffness rail - track kzrt_$1r # kzcr_$1r # Vertical stiffness rail - track kzrtF0_$1r # kzcrF0_$1r # Vertical prestress force rail - track 19.5e3 # cyrt_$1r # Lateral damping rail - track 152e3 # czrt_$1r # Vertical damping rail - track bo_$1r # Lateral semi-distance to nominal running circle, right side ro_$1l # Nominal wheel radius left wheel 84e6 # kyrt_$1l # Lateral stiffness rail - track kzrt_$1l # kzcr_$1l # Vertical stiffness rail - track kzrtF0_$1l # kzcrF0_$1l # Vertical prestress force rail - track 19.5e3 # cyrt_$1r # Lateral damping rail - track 152e3 # czrt_$1r # Vertical damping rail - track -bo_$1l # Lateral semi-distance to nominal running circle, left side cp1_$1r # Name of contact point #1 right side trc_$1 cp1_$1r.ksi cp1_$1r.bo 0. # Contact on track axl_$1 0. cp1_$1r.bo 0. # Contact on wheel/wheelset mu_$1r1 # Coefficient of friction 2.05e11 .3 # Modulus of elasticity and Poisson's ratio mu_$1r1/.6 mu_$1r1/.6 mu_$1r1/.6 # Creepage reduction due to contaminated rail surface 0. 2400e6 # Prestress force and stiffness normal to the surface cp1_$1l trc_$1 cp1_$1l.ksi cp1_$1l.bo 0. # Contact on track axl_$1 0. cp1_$1l.bo 0. # Contact on wheel/wheelset mu_$1l1 # Coefficient of friction 2.05e11 .3 # Modulus of elasticity and Poisson's ratio mu_$1l1/.6 mu_$1l1/.6 mu_$1l1/.6 # Creepage reduction due to contaminated rail surface 0. 2400e6 # Prestress force and stiffness normal to the surface cp2_$1r trc_$1 cp2_$1r.ksi cp2_$1r.bo 0. # Contact on track axl_$1 0. cp2_$1r.bo 0. # Contact on wheel/wheelset mu_$1r2 # Coefficient of friction 2.05e11 .3 # Modulus of elasticity and Poisson's ratio mu_$1r2/.6 mu_$1r2/.6 mu_$1r2/.6 # Creepage reduction due to contaminated rail surface 0. 2400e6 # Prestress force and stiffness normal to the surface cp2_$1l trc_$1 cp2_$1l.ksi cp2_$1l.bo 0. # Contact on track axl_$1 0. cp2_$1l.bo 0. # Contact on wheel/wheelset mu_$1l2 # Coefficient of friction 2.05e11 .3 # Modulus of elasticity and Poisson's ratio mu_$1l2/.6 mu_$1l2/.6 mu_$1l2/.6 # Creepage reduction due to contaminated rail surface 0. 2400e6 # Prestress force and stiffness normal to the surfac cp3_$1r trc_$1 cp3_$1r.ksi cp3_$1r.bo 0. # Contact on track axl_$1 0. cp3_$1r.bo 0. # Contact on wheel/wheelset mu_$1r3 # Coefficient of friction 2.05e11 .3 # Modulus of elasticity and Poisson's ratio mu_$1r3/.6 mu_$1r3/.6 mu_$1r3/.6 # Creepage reduction due to contaminated rail surface 0. 2400e6 # Prestress force and stiffness normal to the surface cp3_$1l trc_$1 cp3_$1l.ksi cp3_$1l.bo 0. # Contact on track LXII axl_$1 0. cp3_$1l.bo 0. # Contact on wheel/wheelset mu_$1l3 # Coefficient of friction 2.05e11 .3 # Modulus of elasticity and Poisson's ratio mu_$1l3/.6 mu_$1l3/.6 mu_$1l3/.6 # Creepage reduction due to contaminated rail surface 0. 2400e6 # Prestress force and stiffness normal to the surface ] ## ## Animate track irregularities in GPLOT ## ====================================== substruct animate_rails [ # $1= axl.no; $2= l/r; $3= -/+ mass fixpoint_6 rail_$1$2 lsa_$1 0. $3bo_ 0. no_warning func copy rail_$1$2.y= tral$1$2.y no_warning func copy rail_$1$2.z= tral$1$2.z no_warning func copy rail_$1$2.k= tral$1$2.k no_warning func copy rail_$1$2.p= tral$1$2.p if_then_char_init CalcType .ne. GLPLOT body box_mass rail_$1$2 0.5 -.5 0.0325 -.0325 0.172 0. endif ] ## Calculate wear and RCF indexes ## ================================================================ substruct wear_RCF [ func fl_wear_w $1 mu_cp1$1 mu_cp2$1 mu_cp3$1 s_var var_0 cpa_$1.Fnu s_var var_0 cp1_$1.Fnu s_var var_0 cp2_$1.Fnu s_var var_0 cp3_$1.Fnu s_var var_0 cpa_$1.FMnu s_var var_0 cp1_$1.FMnu s_var var_0 cp2_$1.FMnu s_var var_0 cp3_$1.FMnu func lpass2q_0 cp1_$1.FMnuq= cp1_$1.FMnu 3 .7 func max2 cp1_$1.FMnul= cp1_$1.FMnu cp1_$1.FMnuq s_var sngl cp1_$1.FMnul if_then_init .exist. cp2_$1.FMnu func lpass2q_0 cp2_$1.FMnuq= cp2_$1.FMnu 3 .7 func max2 cp2_$1.FMnul= cp2_$1.FMnu cp2_$1.FMnuq else func const cp2_$1.FMnul= 0. endif s_var sngl cp2_$1.FMnul if_then_init .exist. cp3_$1.FMnu func lpass2q_0 cp3_$1.FMnuq= cp3_$1.FMnu 3 .7 func max2 cp3_$1.FMnul= cp3_$1.FMnu cp3_$1.FMnuq else func const cp3_$1.FMnul= 0. endif s_var sngl cp3_$1.FMnul ## Name whe_ Stress Van Stress Limit ForceLlim Cp1 Cp2 Cp3 func rolling_fatigue_3 RCF_$1 $1 300e6 0.32 0. 125 175 4000 cp1_$1.FMnul cp2_$1.FMnul cp3_$1.FMnul ## Surface fatigue index Subsurface fatigue index Deep subsurface fatigue index s_var sngl RCF_$1.FPs s_var sngl RCF_$1.FPb s_var sngl RCF_$1.FPd s_var sngl RCF_$1.FPs1 s_var sngl RCF_$1.FIs1 s_var sngl RCF_$1.FPs2 s_var sngl RCF_$1.FIs2 s_var sngl RCF_$1.FPs3 s_var sngl RCF_$1.FIs func operp RCF_$1.FPbm= RCF_$1.FPb / 450e6 - 1 s_var sngl RCF_$1.FPbm ] ## Track-pieces (t) ## ==================================================================== func const myt_= 2e3*2.5*2.5*1.36 # Density 2e3 kg/m^2 func const mzt_= myt_ # func const myt_= 690 # New definition of the track - Saeed-Nebojsa func const mzt_= 750 substruct create_trc [ mass m_rigid_6f trc_$1 lsa_$1 0. 0. 0. 0. myt_$1 mzt_$1 `mzt_$1*(2.5^2+2.5^2)/12` 0. 0. constr fix_rigid_1 trc_$1 x 0. # constr fix_rigid_1 trc_$1 z 0. constr fix_rigid_1 trc_$1 k 0. constr fix_rigid_1 trc_$1 p 0. ] ## Coupling trc - grd ## ========================================================== func const kytg= 40e6 # Lateral stiffness under ballast func const cytg= 2*.55*sqrt(kytg*myt_) # Lateral damping under ballast substruct create_trc_couplz [ coupl p_lin kztg_$2= kmbaF0_$2-(ma_$2+mzt_$2)/2*9.81 220e6 # Vertical stiffness under ballast func const cztg_$2= 2*0.36*sqrt(kztg_$2.v1*mzt_/2) # Vertical damping under ballast coupl k3 kztg$2r trc_$2 0. bo_ 0.55 grd_$2 0. bo_ 0.55 kytg kytg kztg_$2r .3 .5 esys_$1 m coupl k3 kztg$2l trc_$2 0. -bo_ 0.55 grd_$2 0. -bo_ 0.55 kytg kytg kztg_$2r .3 .5 esys_$1 m coupl kc cztg$2r trc_$2 0. bo_ 0.55 grd_$2 0. bo_ 0.65 `2*pi*91*cztg_$2` cztg_$2 esys_$1 z coupl kc cztg$2l trc_$2 0. -bo_ 0.55 grd_$2 0. -bo_ 0.65 `2*pi*91*cztg_$2` cztg_$2 esys_$1 z coupl kc cytg$2 trc_$2 0. 0.2 0.172 grd_$2 0. -.2 0.172 `2*pi*72*cytg` cytg esys_$1 y ] LXIII #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## Graphical figures ## ------------------------------------------------------- substruct body_bolster_3PB [ # $1= Name of bolster beam body opengl_mass bol_$1 .20 .78 .78 1. # Red Green Blue Transparency GL_QUAD_STRIP 4 0.220 bsfr_$1+.070 -.535+hycg_$1 # Bottom -.220 bsfr_$1+.070 -.535+hycg_$1 0.220 -bsfr_$1-.070 -.535+hycg_$1 -.220 -bsfr_$1-.070 -.535+hycg_$1 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. body opengl_mass bol_$1 .20 .78 .78 1. # Red Green Blue Transparency GL_QUAD_STRIP 20 # Top 0.220 bsfr_$1+.070 -.662+hycg_$1 -.220 bsfr_$1+.070 -.662+hycg_$1 0.220 bsfr_$1-.120 -.662+hycg_$1 -.220 bsfr_$1-.120 -.662+hycg_$1 0.220 bsfr_$1-.120 -.662+hycg_$1 -.220 bsfr_$1-.120 -.662+hycg_$1 0.220 bsfr_$1-.325 -.800+hycg_$1 -.220 bsfr_$1-.325 -.800+hycg_$1 0.220 bsfr_$1-.325 -.800+hycg_$1 -.220 bsfr_$1-.325 -.800+hycg_$1 0.220 -bsfr_$1+.325 -.800+hycg_$1 -.220 -bsfr_$1+.325 -.800+hycg_$1 0.220 -bsfr_$1+.325 -.800+hycg_$1 -.220 -bsfr_$1+.325 -.800+hycg_$1 0.220 -bsfr_$1+.120 -.662+hycg_$1 -.220 -bsfr_$1+.120 -.662+hycg_$1 0.220 -bsfr_$1+.120 -.662+hycg_$1 -.220 -bsfr_$1+.120 -.662+hycg_$1 0.220 -bsfr_$1-.070 -.662+hycg_$1 -.220 -bsfr_$1-.070 -.662+hycg_$1 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. .7 -.7 0. .7 -.7 0. .7 -.7 0. .7 -.7 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. -.7 -.7 0. -.7 -.7 0. -.7 -.7 0. -.7 -.7 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. body opengl_mass bol_$1 .20 .78 .78 1. # Red Green Blue Transparency GL_QUAD_STRIP 12 # Front 0.220 bsfr_$1+.070 -.662+hycg_$1 0.220 bsfr_$1+.070 -.535+hycg_$1 0.220 bsfr_$1-.120 -.662+hycg_$1 0.220 bsfr_$1-.120 -.535+hycg_$1 0.220 bsfr_$1-.325 -.800+hycg_$1 0.220 bsfr_$1-.325 -.535+hycg_$1 0.220 -bsfr_$1+.325 -.800+hycg_$1 0.220 -bsfr_$1+.325 -.535+hycg_$1 0.220 -bsfr_$1+.120 -.662+hycg_$1 0.220 -bsfr_$1+.120 -.535+hycg_$1 0.220 -bsfr_$1-.070 -.662+hycg_$1 0.220 -bsfr_$1-.070 -.535+hycg_$1 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. body opengl_mass bol_$1 .20 .78 .78 1. # Red Green Blue Transparency GL_QUAD_STRIP 12 # Back -.220 bsfr_$1+.070 -.662+hycg_$1 -.220 bsfr_$1+.070 -.535+hycg_$1 -.220 bsfr_$1-.120 -.662+hycg_$1 -.220 bsfr_$1-.120 -.535+hycg_$1 -.220 bsfr_$1-.325 -.800+hycg_$1 -.220 bsfr_$1-.325 -.535+hycg_$1 -.220 -bsfr_$1+.325 -.800+hycg_$1 -.220 -bsfr_$1+.325 -.535+hycg_$1 -.220 -bsfr_$1+.120 -.662+hycg_$1 -.220 -bsfr_$1+.120 -.535+hycg_$1 -.220 -bsfr_$1-.070 -.662+hycg_$1 -.220 -bsfr_$1-.070 -.535+hycg_$1 -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. ] substruct body_wedge_3PB [ # $1= Name of wedge $2= (+=forward / -=backward) body opengl_mass wedge_$1 1. 0. 0. 1. # Red Green Blue Transparency GL_TRIANGLE_STRIP 5 $2-.098 0.065 0.050 $20.007 0.065 -.100 # out side of wedge $20.007 0.065 0.050 $20.034 0.065 -.100 $20.034 0.065 0.050 0. 1. 0. 0. 1. 0. # out side of wedge 0. 1. 0. LXIV 0. 1. 0. 0. 1. 0. body opengl_mass wedge_$1 1. 0. 0. 1. # Red Green Blue Transparency GL_TRIANGLE_STRIP 5 $2-.098 -.065 0.050 $20.007 -.065 -.100 # in side of wedge $20.007 -.065 0.050 $20.034 -.065 -.100 $20.034 -.065 0.050 0. -1. 0. 0. -1. 0. # out side of wedge 0. -1. 0. 0. -1. 0. 0. -1. 0. body opengl_mass wedge_$1 1. 0. 0. 1. # Red Green Blue Transparency GL_QUAD_STRIP 4 $20.034 0.065 -.100 # Friction side of wedge $20.034 0.065 0.050 $20.034 -.065 -.100 $20.034 -.065 0.050 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. body opengl_mass wedge_$1 1. 0. 0. 1. # Red Green Blue Transparency GL_QUAD_STRIP 4 $20.007 0.065 -.100 # Contact to bolster beam $2-.098 0.065 0.050 $20.007 -.065 -.100 $2-.098 -.065 0.050 -.7 0. -.7 -.7 0. -.7 -.7 0. -.7 -.7 0. -.7] substruct body_sfr_3PB [ # $1= Name of side-frame, $2 Side (+=right / -=left) body opengl_mass sfr_$1 .16 .63 .47 1. # Red Green Blue Transparency GL_QUAD_STRIP 42 0.362 .080 -.160+hscg_$1 0.362 -.080 -.160+hscg_$1 # Bottom front 0.362 .080 -.160+hscg_$1 0.362 -.080 -.160+hscg_$1 0.730 .080 -.507+hscg_$1 0.730 -.080 -.507+hscg_$1 aba_$1-.130 .080 -.388+hscg_$1 aba_$1-.130 -.080 -.388+hscg_$1 aba_$1-.130 .080 -.677+hscg_$1 aba_$1-.130 -.080 -.677+hscg_$1 # Rubber pad aba_$1+.130 .080 -.677+hscg_$1 aba_$1+.130 -.080 -.677+hscg_$1 aba_$1+.130 .080 -.388+hscg_$1 aba_$1+.130 -.080 -.388+hscg_$1 # Sharp corner aba_$1+.130 .080 -.388+hscg_$1 aba_$1+.130 -.080 -.388+hscg_$1 aba_$1+.235 .080 -.683+hscg_$1 aba_$1+.235 -.080 -.683+hscg_$1 aba_$1+.100 .080 -.833+hscg_$1 aba_$1+.100 -.080 -.833+hscg_$1 # Top front -aba_$1-.100 .080 -.833+hscg_$1 -aba_$1-.100 -.080 -.833+hscg_$1 # Top rear -aba_$1-.235 .080 -.683+hscg_$1 -aba_$1-.235 -.080 -.683+hscg_$1 -aba_$1-.130 .080 -.388+hscg_$1 -aba_$1-.130 -.080 -.388+hscg_$1 -aba_$1-.130 .080 -.388+hscg_$1 -aba_$1-.130 -.080 -.388+hscg_$1 # Sharp corner -aba_$1-.130 .080 -.677+hscg_$1 -aba_$1-.130 -.080 -.677+hscg_$1 -aba_$1+.130 .080 -.677+hscg_$1 -aba_$1+.130 -.080 -.677+hscg_$1 # Rubber pad -aba_$1+.130 .080 -.388+hscg_$1 -aba_$1+.130 -.080 -.388+hscg_$1 -0.730 .080 -.507+hscg_$1 -0.730 -.080 -.507+hscg_$1 -0.362 .080 -.160+hscg_$1 -0.362 -.080 -.160+hscg_$1 -0.362 .080 -.160+hscg_$1 -0.362 -.080 -.160+hscg_$1 # Bottom rear 0.362 .080 -.160+hscg_$1 0.362 -.080 -.160+hscg_$1 # Bottom front 0. 0. 1. 0. 0. 1. # Bottom front .7 0. .7 .7 0. .7 0. 0. 1. 0. 0. 1. 1. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 1. # Rubber pad 0. 0. 1. 0. 0. 1. -1. 0. 0. -1. 0. 0. # Sharp corner .8 0. .6 .8 0. .6 1. 0. 0. 1. 0. 0. 0. 0. -1. 0. 0. -1. # Top front 0. 0. -1. 0. 0. -1. # Top rear -1. 0. 0. -1. 0. 0. -.8 0. .6 -.8 0. .6 1. 0. 0. 1. 0. 0. # Sharp corner 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. # Rubber pad -1. 0. 0. -1. 0. 0. LXV 0. 0. 1. 0. 0. 1. -.7 0. .7 -.7 0. .7 0. 0. 1. 0. 0. 1. # Bottom rear 0. 0. 1. 0. 0. 1. # Bottom front body opengl_mass sfr_$1 .16 .63 .47 1. # Front side surface GL_TRIANGLE_STRIP 13 aba_$1+.130 $2.080 -.388+hscg_$1 # Sharp corner aba_$1+.235 $2.080 -.683+hscg_$1 aba_$1+.130 $2.080 -.677+hscg_$1 aba_$1+.100 $2.080 -.833+hscg_$1 # Top front aba_$1-.130 $2.080 -.677+hscg_$1 # Rubber pad aba_$1-.130 $2.080 -.833+hscg_$1 aba_$1-.130 $2.080 -.388+hscg_$1 0.730 $2.080 -.833+hscg_$1 0.730 $2.080 -.507+hscg_$1 0.362 $2.080 -.833+hscg_$1 0.362 $2.080 -.160+hscg_$1 # Bottom front 0.225 $2.080 -.833+hscg_$1 0.225 $2.080 -.160+hscg_$1 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. body opengl_mass sfr_$1 .16 .63 .47 1. # Rear side surface GL_TRIANGLE_STRIP 13 -aba_$1-.130 $2.080 -.388+hscg_$1 # Sharp corner -aba_$1-.235 $2.080 -.683+hscg_$1 -aba_$1-.130 $2.080 -.677+hscg_$1 -aba_$1-.100 $2.080 -.833+hscg_$1 # Top front -aba_$1+.130 $2.080 -.677+hscg_$1 # Rubber pad -aba_$1+.130 $2.080 -.833+hscg_$1 -aba_$1+.130 $2.080 -.388+hscg_$1 -0.730 $2.080 -.833+hscg_$1 -0.730 $2.080 -.507+hscg_$1 -0.362 $2.080 -.833+hscg_$1 -0.362 $2.080 -.160+hscg_$1 # Bottom front -0.225 $2.080 -.833+hscg_$1 -0.225 $2.080 -.160+hscg_$1 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. body opengl_mass sfr_$1 .16 .63 .47 1. # Opening for the secondary springs GL_QUAD_STRIP 16 -.225 .080 -.290+hscg_$1 -.225 -.080 -.290+hscg_$1 # Bottom 0.225 .080 -.290+hscg_$1 0.225 -.080 -.290+hscg_$1 0.225 .080 -.290+hscg_$1 0.225 -.080 -.290+hscg_$1 # Front 0.225 .080 -.750+hscg_$1 0.225 -.080 -.750+hscg_$1 0.225 .080 -.750+hscg_$1 0.225 -.080 -.750+hscg_$1 # Top -.225 .080 -.750+hscg_$1 -.225 -.080 -.750+hscg_$1 -.225 .080 -.750+hscg_$1 -.225 -.080 -.750+hscg_$1 # Rear -.225 .080 -.290+hscg_$1 -.225 -.080 -.290+hscg_$1 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. -1. 0. 0. -1. 0. 0. -1. 0. 0. -1. 0. 0. 0. 0. 1. 0. 0. 1. LXVI 0. 0. 1. 0. 0. 1. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. body opengl_mass sfr_$1 .16 .63 .47 1. # Surface below the springs GL_QUAD_STRIP 4 -.225 $2.080 -.290+hscg_$1 0.225 $2.080 -.290+hscg_$1 -.225 $2.080 -.160+hscg_$1 0.225 $2.080 -.160+hscg_$1 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0. body opengl_mass sfr_$1 .16 .63 .47 1. # Surface above the springs GL_QUAD_STRIP 4 -.225 $2.080 -.833+hscg_$1 0.225 $2.080 -.833+hscg_$1 -.225 $2.080 -.750+hscg_$1 0.225 $2.080 -.750+hscg_$1 0. $21. 0. 0. $21. 0. 0. $21. 0. 0. $21. 0.] #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Lengths of the vehicles #[-]{ ========================================================== ## ## Kockum's 3PB Iron Ore Wagon ## --------------------------- func const buff.A_= 10.597/2 # Distance car-mid to coupler func const buff.A_2= 10.597/2 # Distance car-mid to coupler func const acb_= 6.744/2 # half bogie pivot distance (longitudinal) #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Freight loads #[-]{ ========================================================== func const hlcg_= 2.193 # centre of gravity position of load, vertical func const ml_= 0 #102100 #98400 #75465 # weight of load func const Jfl_1= ml_1*(1.5^2+0.3^2)/3 # roll inertia, m*(1.5^2+h^2)/3 func const Jkl_1= ml_1*(0.3^2+(acb_2+1.5)^2)*2/9 # pitch inertia, m*(h^2+a^2)/3 func const Jpl_1= ml_1*((acb_2+1.5)^2+1.5^2)*2/9 # yaw inertia, m*(a^2+1.5^2)/3 #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Speed and Euler coordinate systems #[-]{ ========================================================== ## ## Speed profile read from an external file ## ------------------------------------------------------------------------------------------ func intpl_r Speed_field insert free_form '(a,a)' track/Speed.txt # Vo speed in m/s # func copy Vo= esys_2.vx # func mul vkmh= esys_2.vx 3.6 ## Manually define the speed ## ------------------------------------------------------------------------------------------ # func const Y_cp= 0.50*sign(CurveRadius) # lateral acc. in track plane # func const vkmh= 3.6*sqrt(CurveRadius*(Y_cp+CurveCant/(2*bo_)*9.81)) # # func const vkmh= 10 # Speed in km/h # func const vkmh= 40 # Speed in km/h func const vkmh= 80 # Speed in km/h # func operp vkmh= 140 - 5 * time # Vary vkmh in order to calculate critical speed func div Vo = vkmh 3.6 # The speed of the vehicle in m/s # func intpl_r Speed_field insert free_form '(a,a)' track/PB1_brzina.dat # Vo speed in m/s lsys e_abs_bends esys_1 Vo `Xtrac_start - buff.A_2` ro_trac_design f_trac_design z_trac_design # 4 4 4 4 4 4 6 s_var var_0 vkmh # Save vkmh for post processing s_var sngl esys_1.b s_var sngl esys_1.c s_var sngl esys_1.x s_var sngl esys_1.y s_var sngl esys_1.z #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Vehicle models #[-]{ ========================================================== #### Kockum's 3PB Iron Ore Wagon LXVII ##[-]{ ========================================================== substruct vhe_model_3PB [ # $1= Number of the vehicle # func const aba_$1= 1.778/2 # Wheelset longitudinal semi-distance func const bsfr_$1= 2.007/2 # Side-frame lateral semi-distance ## Vehicle bodies ## -------------- ## Carbody (c) func const hfloor_$1= 1.0 # floor level func const hccg_$1 = 1.37 # centre of gravity position of empty vehicle, vertical func const mc_$1= 10536 # weight of empty body func const Jfc_$1= `mc_$1*( 1.5^2 + 0.3^2) /3` # roll inertia, m*(b^2+h^2)/3 func const Jkc_$1= `mc_$1*( 0.3^2 + (acb_$1+1.5)^2)*2/9` # pitch inertia, m*(h^2+a^2)/3 func const Jpc_$1= `mc_$1*((acb_$1+1.5)^2 + 1.5^2) *2/9` # yaw inertia, m*(a^2+b^2)/3 # func const mc_$1= mc_tara+ml_$1 # weight of vehicle # func const hccg_$1= (mc_tara*hccg_tara+ml_$1*hlcg_$1)/mc_$1 # centre of gravity position of loaded vehicle, vertical # func const Jfc_$1= Jfc_tara+mc_tara*(hccg_$1-hccg_tara)^2+Jfl_$1+ml_$1*(hccg_$1-hlcg_$1)^2 # func const Jkc_$1= Jkc_tara+mc_tara*(hccg_$1-hccg_tara)^2+Jkl_$1+ml_$1*(hccg_$1-hlcg_$1)^2 # func const Jpc_$1= Jpc_tara+Jpl_$1 ## Bolster beam (y) func const hycg_$1= 0.75 # centre of gravity position, vertical func const my_$1= 1050 # mass func const Jfy_$1= 347 # moment of inertia, roll - values from QR func const Jky_$1= 43 # moment of inertia, pitch - values from QR func const Jpy_$1= 363 # moment of inertia, yaw - values from QR ## Wedges (w) func const wedge.A_$1= 0.191 # func const wedge.B_$1= bsfr_$1 # func const wedge.H_$1= 0.600 # ## Side frames (s) func const hscg_$1= 0.51 # centre of gravity position, vertical - values from QR func const ms_$1= 400 # mass func const Jfs_$1= 73 # moment of inertia, roll - values from Fuji Xia PhD func const Jks_$1= 365 # moment of inertia, pitch - values from Fuji Xia PhD func const Jps_$1= 335 # moment of inertia, yaw - values from Fuji Xia PhD ## Axle (a) func const ro_$1= 0.915/2 # centre of gravity pos., vert. (wheel radius) func const ma_$1= 1341 # mass func const Jfa_$1= 322.7 # moment of inertia, roll - values from QR func const Jka_$1= 100 # moment of inertia, pitch - values from QR func const Jpa_$1= 322.7 # moment of inertia, yaw - values from QR ## Secondary suspension: Centerplate btw car-body and bolster beam ## ------------------------------------------------------------------- func const kzcy.H_$1 = 0.850 # Height from top of rail [m] func const kxcy.mu_$1= 0.50 # Coefficient of friction in sides of centerplate func const kzcy.mu_$1= 0.15*2/3 # Effective coefficient of friction in bottom of centerplate func const kpcy.ro_$1= 0.355/2 # Outer radius of centerplate [m] coupl p_lin36 kycy_$1= 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 40e6 0. 0. 0. 0. # Only lateral stiffness 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. coupl p_nlin kxcyf_$1= 0. # Front part of center plate -1.007 -40e6 # Negative force when bolster beam -.007 0. # travels in negative direction 1. 0. coupl p_nlin kxcyb_$1= 0. # Rear part of center plate -1. 0. # Positive force when bolster beam 0.007 0. # travels in positive direction 1.007 40e6 coupl p_lin kfxcy_$1= 0. 40.e6 # Friction serie stiffness [N/m] coupl p_nlin kzcy_$1= 0. 0. -9.81*mc_$1/2/4 # Nominal tara load 9.81*mc_$1/2/4/40e6 0. # Center Plate cannot take tension force 1 0. coupl p_lin36 czcy_$1= 0. 0. 0. 0. 0. 0. # Material damping 5% .10*sqrt(40e6*mc_$1/2) 0. 0. 0. 0. 0. 0. .10*sqrt(40e6*mc_$1/2) 0. 0. 0. 0. # 2*set= c/sqrt(k*m) 0. 0. .10*sqrt(40e6*mc_$1/2) 0. 0. 0. 0. 0. 0. .10*sqrt(2*40e6*kpcy.ro_$1^2*Jfy_$1) 0. 0. 0. 0. 0. 0. .10*sqrt(2*40e6*kpcy.ro_$1^2*Jky_$1) 0. 0. 0. 0. 0. 0. .10*sqrt(2*40e6*kpcy.ro_$1^2*Jpy_$1) LXVIII coupl p_lin kf2xycy_$1 = 0. 40.e6 # Friction serie stiffness [N/m] ## Secondary suspension: Side bearers btw car-body and bolster beam ## ------------------------------------------------------------------- func const SideBearer.H_$1= .842 # Height func const SideBearer.B_$1 = 0.635 # Side bearers lateral semi-distance func const SideBearer.mu_$1= 0.3 # Friction coeff side bearers coupl p_nlin kxSideBearer_$1= 0.0 -0.001001 -480 # longitudinal stiffness -0.001 -380 0.001 380 0.001001 480 coupl p_lin kySideBearer_$1= 0.0 380e3 # lateral stiffness coupl p_nlin kzSideBearer_$1= -21500 -1.0 -10e6 # vertical stiffness -0.032 -20400 0.016 10200 1.032 10400 ## Secondary coil springs (kzys) ## ------------------------------------------------------------------- func const kzys.B_$1= bsfr_$1 # lateral semi-distance func const kzys.H_$1= 0.535 # Upper surface of springs according to drawing func const kcoilSpring.hs_$1= 0.260 # height of coil springs under bolster beam ## Definition of the stiffness of the springs in the secondary suspension ##____________________________________________________________________________ coupl p_lin kxys_$1= 0.0 1.4e6/(4+5+7) # Secondary coil springs shear stiffness coupl p_lin kyys_$1= 0.0 1.4e6/(4+5+7) # distribute the shear stiffness equally to on all coil springs coupl p_lin36 cmys_$1= 0. 0. 0. 0. 0. 0. # Damping 5e3 0. 0. 0. 0. 0. 0. 5e3 0. 0. 0. 0. # 2*set= c/sqrt(k*m) 0. 0. 10e3 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ## Warp stiffness between bolster and sideframe ## -------------------------------------------------------------- func const kfbosf.fo_$1 = 1500 coupl p_lin kfbosfp.k1_$1= 0. 1200 ## Definition of the yaw stiffness coupl p_lin kfbosfp.k2_$1= 0. 120 ## Longitudinal stops btw bolster beam and side frames ## -------------------------------------------------------------- func const kxysst.B_$1= 1. func const kxysst.H_$1= ro_$1+.090 coupl p_nlin_st kxysst_$1= 0. 0. .001 20e6 ## Lateral stops btw bolster beam and side frames ## -------------------------------------------------------------- func const kyysst.B_$1= bsfr_$1 # lateral semi-distance func const kyysst.H_$1= ro_$1+.090 # height above rail level coupl p_nlin_st kyysst_$1= 0. 0. .00975 20e6 # Secondary friction wedges func const kzyw.A_$1= 0.191 # Contact btw bolster & wedges func const kzyw.B_$1= bsfr_$1 func const kzyw.H_$1= 0.600 # coupl p_lin kzyw_$1 = -k3zwsF0/0.588 30e6 # Contact stiffness coupl p_lin kzyw_$1 = 0. 30e6 # Contact stiffness func const kfxyw.mu_$1= 0.25 # Friction coeff inside wedge coupl p_lin kfxyw_$1 = 0.0 30e6 # Friction series stiffness func const kxws.A_$1= 0.191 # Contact btw wedges & side-frame func const kxws.B_$1= bsfr_$1 func const kxws.H_$1= 0.600 coupl p_lin kxws_$1= 0. 30e6 # Contact stiffness between wedge and wear plate on side frame func const kf2yzws.mu_$1= 0.25 # Friction coeff wedge wear surface coupl p_lin kf2yws_$1= 0.0 30e6 # Lateral friction series stiffness coupl p_lin kf2zws_$1= 0.0 30e6 # Vertical friction series stiffness func const k3zws.A_$1= 0.191 # Coil springs under wedges func const k3zws.B_$1= bsfr_$1 func const k3zws.H_$1= 0.600 func const kcoilUnderWedge.hs_$1= 0.260+0.0127 # Springs under wedges 0.5" higher than under bolster beam coupl p_lin k3xws_$1= 0. 40e3 coupl p_lin k3yws_$1= 0. 40e3 func const kmyw.A_$1= 0.191 # Contact btw bolster & wedges func const kmyw.B_$1= bsfr_$1 # lateral and rotation func const kmyw.H_$1= 0.700 coupl p_lin36 kmyw_$1= 0. 0. 0. 0. 0. 0. LXIX 0. 0. 0. 0. 0. 0. 0. 2e7 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 2e7 0. 0. 0. 0. 0. 0. 2e7 0. 0. 0. 0. 0. 0. 2e7 # Primary springs (kmba) func const kmba.B_$1= bsfr_$1 # lateral semi-distance func const kmba.H_$1= ro_$1 # Stiffnesses given at the equivalent height ro_$1 func const kmbaF0_$1= -9.81*(mc_$1+2*my_$1+4*ms_$1)/8 # Pre-load force at tara load coupl p_lin36 kmba_$1= 0. 0. kmbaF0_$1 0. 0. 0. # Primary suspension .9e6 0. 0. 0. 0. 0. 0. 1e6 0. 0. 0. 0. 0. 0. 30e6 0. 0. 0. 0. 0. 0. 100e3 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. coupl p_lin36 cmba_$1= 0. 0. 0. 0. 0. 0. # Material damping 20% 8e3 0. 0. 0. 0. 0. 0. 8e3 0. 0. 0. 0. # 2*set= c/sqrt(k*m) 0. 0. 70e3 0. 0. 0. 0. 0. 0. 2e3 0. 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0. 0. # Primary stops, Longitudinal (kxbast) func const kxbast.H_$1= ro_$1+.090 # bumpstop position, vertical coupl p_nlin_st kxbast_$1= 0. 0. .0016 20e6 # Primary stops, Lateral (kybast) func const kybast.H_$1= ro_$1+.090 # bumpstop position, vertical coupl p_nlin_st kybast_$1= 0. 0. .0032 20e6 ## lsys l_local l_name esys a b h ## ----------------------------------------------------- lsys l_local lsc_$1 esys_$1 0.0 0.0 0.0 lsys l_local lsb_$11 lsc_$1 acb_$1 0.0 0.0 lsys l_local lsb_$12 lsc_$1 -acb_$1 0.0 0.0 lsys l_local lsa_$111 lsb_$11 aba_$11 0.0 0.0 lsys l_local lsa_$112 lsb_$11 -aba_$11 0.0 0.0 lsys l_local lsa_$121 lsb_$12 aba_$12 0.0 0.0 lsys l_local lsa_$122 lsb_$12 -aba_$12 0.0 0.0 ## mass m_rigid_6 m_name lsys acg bcg hcg m m m Jf Jk Jp ## ------------------------------------------------------------------------ if_then_init ml_$1 .gt. 0 mass m_rigid_6 load_$1 lsc_$1 0.0 0.0 -hlcg_$1 ml_$1 ml_$1 ml_$1 Jfl_$1 Jkl_$1 Jpl_$1 endif mass m_rigid_6 car_$1 lsc_$1 0.0 0.0 -hccg_$1 mc_$1 mc_$1 mc_$1 Jfc_$1 Jkc_$1 Jpc_$1 mass m_rigid_6 bol_$11 lsb_$11 0.0 0.0 -hycg_$11 my_$11 my_$11 my_$11 Jfy_$11 Jky_$11 Jpy_$11 mass m_rigid_6 sfr_$11r lsb_$11 0.0 bsfr_$11r -hscg_$11r ms_$11r ms_$11r ms_$11r Jfs_$11r Jks_$11r Jps_$11r mass m_rigid_6 sfr_$11l lsb_$11 0.0 -bsfr_$11l -hscg_$11l ms_$11l ms_$11l ms_$11l Jfs_$11l Jks_$11l Jps_$11l mass m_rigid_6 bol_$12 lsb_$12 0.0 0.0 -hycg_$12 my_$12 my_$12 my_$12 Jfy_$12 Jky_$12 Jpy_$12 mass m_rigid_6 sfr_$12r lsb_$12 0.0 bsfr_$12r -hscg_$12r ms_$12r ms_$12r ms_$12r Jfs_$12r Jks_$12r Jps_$12r mass m_rigid_6 sfr_$12l lsb_$12 0.0 -bsfr_$12l -hscg_$12l ms_$12l ms_$12l ms_$12l Jfs_$12l Jks_$12l Jps_$12l #Wedges on Leading bogie mass massless12 wedge_$111r lsb_$11 wedge.A_$1 wedge.B_$1 -wedge.H_$1 1e-6 75 10 # Massless mass, mass massless12 wedge_$111l lsb_$11 wedge.A_$1 -wedge.B_$1 -wedge.H_$1 1e-6 75 10 mass massless12 wedge_$112r lsb_$11 -wedge.A_$1 wedge.B_$1 -wedge.H_$1 1e-6 75 10 mass massless12 wedge_$112l lsb_$11 -wedge.A_$1 -wedge.B_$1 -wedge.H_$1 1e-6 75 10 #Wedges on Trailing bogie mass massless12 wedge_$121r lsb_$12 wedge.A_$1 wedge.B_$1 -wedge.H_$1 1e-6 75 10 # Massless mass, mass massless12 wedge_$121l lsb_$12 wedge.A_$1 -wedge.B_$1 -wedge.H_$1 1e-6 75 10 mass massless12 wedge_$122r lsb_$12 -wedge.A_$1 wedge.B_$1 -wedge.H_$1 1e-6 75 10 mass massless12 wedge_$122l lsb_$12 -wedge.A_$1 -wedge.B_$1 -wedge.H_$1 1e-6 75 10 ## Create wheelsets ## ==================================================================== in_substruct create_axl [ $111 ] in_substruct create_axl [ $112 ] in_substruct create_axl [ $121 ] in_substruct create_axl [ $122 ] ## Create track-pieces ## ==================================================================== in_substruct create_trc [ $111 ] in_substruct create_trc [ $112 ] in_substruct create_trc [ $121 ] in_substruct create_trc [ $122 ] mass fixpoint_6 grd_$1 lsc_$1 0.0 0.0 0.0 mass fixpoint_6 grd_$111 lsa_$111 0.0 0.0 0.0 LXX mass fixpoint_6 grd_$112 lsa_$112 0.0 0.0 0.0 mass fixpoint_6 grd_$121 lsa_$121 0.0 0.0 0.0 mass fixpoint_6 grd_$122 lsa_$122 0.0 0.0 0.0 ## Acceleration response points on carbody floor ## ============================================== ## func accp_bodyf f_name m_name a b h ## ----------------------------------------------------- func accp_bodyf car_$1b1 car_$1 acb_$1 0.0 -hfloor_$1 func accp_bodyf car_$1.m car_$1 0.0 0.0 -hfloor_$1 func accp_bodyf car_$1b2 car_$1 -acb_$1 0.0 -hfloor_$1 ## Position points for gauging ## =============================================== ## ## func pos_rlsys2 f_name m_name lsys a b h ## --------------------------------------------------------- # func pos_rlsys2 car_$1b1 car_$1 lsb_$11 acb_$1 1.5 -1.0 # func pos_rlsys2 car_$1b2 car_$1 lsb_$12 -acb_$1 1.5 -1.0 ## Graphical representation of the bodies ## ============================================= ## Car-body ## ------------------------------------------------------------------------------ if_then_char_init CalcType .eq. GLPLOT # {{ if_then_init ml_$1 .gt. 0 body opengl2_mass load_$1 1. .5 .5 1. # Red Green Blue Transparency box acb_$1-aba_$1-ro_$1 -acb_$1+aba_$1+ro_$1 1.3 -1.3 +1.5 -1.5 endif body opengl2_mass car_$1 .5 .7 1. 1. # Red Green Blue Transparency box buff.A_$1-.25 -(buff.A_$1-.25) 1.5 -1.5 +0.25 -.25 in_substruct body_bolster_3PB [ $11 ] # $1= Name of bolster beam in_substruct body_bolster_3PB [ $12 ] # $1= Name of bolster beam in_substruct body_sfr_3PB [ $11r + ] # $1= Name of side-frame in_substruct body_sfr_3PB [ $11l - ] in_substruct body_sfr_3PB [ $12r + ] in_substruct body_sfr_3PB [ $12l - ] # Leading bogie in_substruct body_wedge_3PB [ $111r + ] # $1= Name of wedge $2= (+=forward / -=backward) in_substruct body_wedge_3PB [ $111l + ] # $1= Name of wedge $2= (+=forward / -=backward) in_substruct body_wedge_3PB [ $112r - ] # $1= Name of wedge $2= (+=forward / -=backward) in_substruct body_wedge_3PB [ $112l - ] # $1= Name of wedge $2= (+=forward / -=backward) # Trailing bogie in_substruct body_wedge_3PB [ $121r + ] # $1= Name of wedge $2= (+=forward / -=backward) in_substruct body_wedge_3PB [ $121l + ] # $1= Name of wedge $2= (+=forward / -=backward) in_substruct body_wedge_3PB [ $122r - ] # $1= Name of wedge $2= (+=forward / -=backward) in_substruct body_wedge_3PB [ $122l - ] # $1= Name of wedge $2= (+=forward / -=backward) else # }{ if_then_init ml_$1 .gt. 0 body box_mass load_$1 acb_$1-aba_$1-ro_$1 -acb_$1+aba_$1+ro_$1 1.3 -1.3 +1.5 -1.5 endif body box_mass_522 car_$1 buff.A_$1-.25 -(buff.A_$1-.25) 1.5 -1.5 0.25 -.25 body box_lsys bol_$11 lsb_$11 0.220 -0.220 bsfr_$11+.060 -bsfr_$11-.060 -.535 -0.9 body box_lsys bol_$12 lsb_$12 0.220 -0.220 bsfr_$12+.060 -bsfr_$12-.060 -.535 -0.9 body box_mass sfr_$11r 1.1 -1.1 .080 -.080 .1 -.1 body box_mass sfr_$12r 1.1 -1.1 .080 -.080 .1 -.1 body box_mass sfr_$11l 1.1 -1.1 .080 -.080 .1 -.1 body box_mass sfr_$12l 1.1 -1.1 .080 -.080 .1 -.1 endif # }} ## Wheelsets ## ------------------------------------------------------------------------------ body whe_set_mass axl_$111 ro_$111 bo_ body whe_set_mass axl_$112 ro_$112 bo_ body whe_set_mass axl_$121 ro_$121 bo_ body whe_set_mass axl_$122 ro_$122 bo_ ## Track-pieces ## ------------------------------------------------------------------------------ if_then_char_init CalcType .ne. GLPLOT body box_mass trc_$111 0.5 -.5 1.2675 -1.2675 0.340 0.172 body box_mass trc_$112 0.5 -.5 1.2675 -1.2675 0.340 0.172 body box_mass trc_$121 0.5 -.5 1.2675 -1.2675 0.340 0.172 body box_mass trc_$122 0.5 -.5 1.2675 -1.2675 0.340 0.172 endif ##### Couplings between the masses ###[-]{ ================================================================ ## Rubber bushings btw load & car ## ==================================== if_then_init ml_$1 .gt. 0 # {{ LXXI coupl p_lin36 kload_$1= 0. 0. -ml_$1*9.81/4 0. 0. 0. 10e6 0. 0. 0. 0. 0. 0. 10e6 0. 0. 0. 0. 0. 0. 10e6 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0. 0. coupl p_lin36 cload_$1= 0. 0. 0. 0. 0. 0. .20*kload_$1.xx/pi/9 0. 0. 0. 0. 0. 0. .20*kload_$1.yy/pi/9 0. 0. 0. 0. 0. 0. .20*kload_$1.zz/pi/9 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0. 0. coupl k kload$1lf # Stiffness left front load_$1 acb_$1-aba_$1-ro_$1 -1.3 -1.4 # Body #1 and its attachment point car_$1 acb_$1-aba_$1-ro_$1 -1.3 -1.4 # Body #2 and its attachment point kload_$1lf esys_$1 m # Property and direction of action coupl k kload$1rf # Stiffness right front load_$1 acb_$1-aba_$1-ro_$1 1.3 -1.4 # Body #1 and its attachment point car_$1 acb_$1-aba_$1-ro_$1 1.3 -1.4 # Body #2 and its attachment point kload_$1rf esys_$1 m # Property and direction of action coupl k kload$1lb # Stiffness left back load_$1 -acb_$1+aba_$1+ro_$1 -1.3 -1.4 # Body #1 and its attachment point car_$1 -acb_$1+aba_$1+ro_$1 -1.3 -1.4 # Body #2 and its attachment point kload_$1lb esys_$1 m # Property and direction of action coupl k kload$1rb # Stiffness right back load_$1 -acb_$1+aba_$1+ro_$1 1.3 -1.4 # Body #1 and its attachment point car_$1 -acb_$1+aba_$1+ro_$1 1.3 -1.4 # Body #2 and its attachment point kload_$1rb esys_$1 m # Property and direction of action coupl c cload$1lf # Stiffness left front load_$1 acb_$1-aba_$1-ro_$1 -1.3 -1.4 # Body #1 and its attachment point car_$1 acb_$1-aba_$1-ro_$1 -1.3 -1.4 # Body #2 and its attachment point cload_$1lf esys_$1 m # Property and direction of action coupl c cload$1rf # Stiffness right front load_$1 acb_$1-aba_$1-ro_$1 1.3 -1.4 # Body #1 and its attachment point car_$1 acb_$1-aba_$1-ro_$1 1.3 -1.4 # Body #2 and its attachment point cload_$1rf esys_$1 m # Property and direction of action coupl c cload$1lb # Stiffness left back load_$1 -acb_$1+aba_$1+ro_$1 -1.3 -1.4 # Body #1 and its attachment point car_$1 -acb_$1+aba_$1+ro_$1 -1.3 -1.4 # Body #2 and its attachment point cload_$1lb esys_$1 m # Property and direction of action coupl c cload$1rb # Stiffness right back load_$1 -acb_$1+aba_$1+ro_$1 1.3 -1.4 # Body #1 and its attachment point car_$1 -acb_$1+aba_$1+ro_$1 1.3 -1.4 # Body #2 and its attachment point cload_$1rb esys_$1 m # Property and direction of action endif # }} ## Center plates btw car & bolster beam ## ==================================== coupl k kzcy$11f # Front Vert.stiffness car_$1 acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kzcy_$11f esys_$1 z # Property and direction of action coupl k kzcy$11r # Right Vert.stiffness car_$1 acb_$1 kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point bol_$11 0. kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kzcy_$11r esys_$1 z # Property and direction of action coupl k kzcy$11l # Left Vert.stiffness car_$1 acb_$1 -kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point bol_$11 0. -kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kzcy_$11l esys_$1 z # Property and direction of action coupl k kzcy$11b # Back Vert.stiffness car_$1 acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kzcy_$11b esys_$1 z # Property and direction of action func mul kzcy$11f.Ffr= kzcy$11f.F2z kzcy.mu_$1 s_var sngl kzcy$11f.Ffr func mul kzcy$11r.Ffr= kzcy$11r.F2z kzcy.mu_$1 s_var sngl kzcy$11r.Ffr func mul kzcy$11l.Ffr= kzcy$11l.F2z kzcy.mu_$1 s_var sngl kzcy$11l.Ffr func mul kzcy$11b.Ffr= kzcy$11b.F2z kzcy.mu_$1 s_var sngl kzcy$11b.Ffr coupl kf2 kf2xycy$11f # Front 2-dim friction car_$1 acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$11f kf2xycy_$11f kzcy$11f.Ffr esys_$1 x y # Property and direction of action coupl kf2 kf2xycy$11r # Right 2-dim friction car_$1 acb_$1 kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point LXXII bol_$11 0. kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$11r kf2xycy_$11r kzcy$11r.Ffr esys_$1 x y # Property and direction of action coupl kf2 kf2xycy$11l # Left 2-dim friction car_$1 acb_$1 -kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point bol_$11 0. -kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$11l kf2xycy_$11l kzcy$11l.Ffr esys_$1 x y # Property and direction of action coupl kf2 kf2xycy$11b # Back 2-dim friction car_$1 acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$11b kf2xycy_$11b kzcy$11b.Ffr esys_$1 x y # Property and direction of action s_var sngl kf2xycy$11f.F2x s_var sngl kf2xycy$11f.F2y s_var sngl kf2xycy$11f.M2p s_var sngl kf2xycy$11r.F2x s_var sngl kf2xycy$11r.F2y s_var sngl kf2xycy$11r.M2p s_var sngl kf2xycy$11l.F2x s_var sngl kf2xycy$11l.F2y s_var sngl kf2xycy$11l.M2p s_var sngl kf2xycy$11b.F2x s_var sngl kf2xycy$11b.F2y s_var sngl kf2xycy$11b.M2p # Friction on front end of center plate coupl k kxcy$11f # Long.stiffness car_$1 acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kxcyf_$11f esys_$1 x # Property and direction of action func mul kxcy$11f.Ffr= kxcy$11f.F2x kxcy.mu_$1 # Breakout friction force, positive on bolster beam coupl kf kfycy$11f # Name car_$1 acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kfxcy_$11f kxcy$11f.Ffr esys_$1 y # Property and direction of action s_var sngl kxcy$11f.dx s_var sngl kxcy$11f.F2x s_var sngl kfycy$11f.dy s_var sngl kfycy$11f.F2y # Friction on back end of center plate coupl k kxcy$11b # Long.stiffness car_$1 acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kxcyb_$11b esys_$1 x # Property and direction of action func mul kxcy$11b.Ffr= kxcy$11b.F1x kxcy.mu_$1 # Breakout friction force, positive on car-body coupl kf kfycy$11b # Name car_$1 acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kfxcy_$11b kxcy$11b.Ffr esys_$1 y # Property and direction of action s_var sngl kxcy$11b.dx s_var sngl kxcy$11b.F2x s_var sngl kfycy$11b.dy s_var sngl kfycy$11b.F2y coupl k kycy$11 # Lat.stiffness car_$1 acb_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$11 0. 0. -kzcy.H_$1 # Body #2 and its attachment point kycy_$11 esys_$1 m # Property and direction of action coupl c czcy$11 # Small material viscous damping in all directions car_$1 acb_$1 0. -kzcy.H_$1 bol_$11 0. 0. -kzcy.H_$1 czcy_$11 esys_$1 m # Second bogie coupl k kzcy$12f # Front Vert.stiffness car_$1 -acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kzcy_$12f esys_$1 z # Property and direction of action coupl k kzcy$12r # Right Vert.stiffness car_$1 -acb_$1 kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point bol_$12 0. kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kzcy_$12r esys_$1 z # Property and direction of action coupl k kzcy$12l # Left Vert.stiffness car_$1 -acb_$1 -kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point bol_$12 0. -kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kzcy_$12l esys_$1 z # Property and direction of action coupl k kzcy$12b # Back Vert.stiffness car_$1 -acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kzcy_$12b esys_$1 z # Property and direction of action func mul kzcy$12f.Ffr= kzcy$12f.F2z kzcy.mu_$1 s_var sngl kzcy$12f.Ffr func mul kzcy$12r.Ffr= kzcy$12r.F2z kzcy.mu_$1 s_var sngl kzcy$12r.Ffr func mul kzcy$12l.Ffr= kzcy$12l.F2z kzcy.mu_$1 s_var sngl kzcy$12l.Ffr func mul kzcy$12b.Ffr= kzcy$12b.F2z kzcy.mu_$1 s_var sngl kzcy$12b.Ffr coupl kf2 kf2xycy$12f # Front 2-dim friction car_$1 -acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$12f kf2xycy_$12f kzcy$12f.Ffr esys_$1 x y # Property and direction of action coupl kf2 kf2xycy$12r # Right 2-dim friction car_$1 -acb_$1 kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point LXXIII bol_$12 0. kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$12r kf2xycy_$12r kzcy$12r.Ffr esys_$1 x y # Property and direction of action coupl kf2 kf2xycy$12l # Left 2-dim friction car_$1 -acb_$1 -kpcy.ro_$1 -kzcy.H_$1 # Body #1 and its attachment point bol_$12 0. -kpcy.ro_$1 -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$12l kf2xycy_$12l kzcy$12l.Ffr esys_$1 x y # Property and direction of action coupl kf2 kf2xycy$12b # Back 2-dim friction car_$1 -acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kf2xycy_$12b kf2xycy_$12b kzcy$12b.Ffr esys_$1 x y # Property and direction of action s_var sngl kf2xycy$12f.F2x s_var sngl kf2xycy$12f.F2y s_var sngl kf2xycy$12f.M2p s_var sngl kf2xycy$12r.F2x s_var sngl kf2xycy$12r.F2y s_var sngl kf2xycy$12r.M2p s_var sngl kf2xycy$12l.F2x s_var sngl kf2xycy$12l.F2y s_var sngl kf2xycy$12l.M2p s_var sngl kf2xycy$12b.F2x s_var sngl kf2xycy$12b.F2y s_var sngl kf2xycy$12b.M2p # Friction on front end of center plate coupl k kxcy$12f # Long.stiffness car_$1 -acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kxcyf_$12f esys_$1 x # Property and direction of action func mul kxcy$12f.Ffr= kxcy$12f.F2x kxcy.mu_$1 # Breakout friction force, positive on bolster beam coupl kf kfycy$12f # Name car_$1 -acb_$1+kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kfxcy_$12f kxcy$12f.Ffr esys_$1 y # Property and direction of action s_var sngl kxcy$12f.dx s_var sngl kxcy$12f.F2x s_var sngl kfycy$12f.dy s_var sngl kfycy$12f.F2 # Friction on back end of center plate coupl k kxcy$12b # Long.stiffness car_$1 -acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kxcyb_$12b esys_$1 x # Property and direction of action func mul kxcy$12b.Ffr= kxcy$12b.F1x kxcy.mu_$1 # Breakout friction force, positive on car-body coupl kf kfycy$12b # Name car_$1 -acb_$1-kpcy.ro_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 -kpcy.ro_$1 0. -kzcy.H_$1 # Body #2 and its attachment point kfxcy_$12b kxcy$12b.Ffr esys_$1 y # Property and direction of actio s_var sngl kxcy$12b.dx s_var sngl kxcy$12b.F2x s_var sngl kfycy$12b.dy s_var sngl kfycy$12b.F2y coupl k kycy$12 # Lat.stiffness car_$1 -acb_$1 0. -kzcy.H_$1 # Body #1 and its attachment point bol_$12 0. 0. -kzcy.H_$1 # Body #2 and its attachment point kycy_$12 esys_$1 m # Property and direction of action coupl c czcy$12 # Small material damping in all directions car_$1 -acb_$1 0. -kzcy.H_$1 bol_$12 0. 0. -kzcy.H_$1 czcy_$12 esys_$1 m ## Side bearers ## =================================================== coupl k kycbs$11r car_$1 acb_$1 SideBearer.B_$1 -SideBearer.H_$1 bol_$11 0.0 SideBearer.B_$1 -SideBearer.H_$1 kySideBearer_$11r esys_$1 y # Leading bogie coupl k kycbs$11l car_$1 acb_$1 -SideBearer.B_$1 -SideBearer.H_$1 bol_$11 0.0 -SideBearer.B_$1 -SideBearer.H_$1 kySideBearer_$11l esys_$1 y coupl k kzcbs$11r car_$1 acb_$1 SideBearer.B_$1 -SideBearer.H_$1 bol_$11 0.0 SideBearer.B_$1 -SideBearer.H_$1 kzSideBearer_$11r esys_$1 z coupl k kzcbs$11l car_$1 acb_$1 -SideBearer.B_$1 -SideBearer.H_$1 bol_$11 0.0 -SideBearer.B_$1 -SideBearer.H_$1 kzSideBearer_$11l esys_$1 z s_var sngl kzcbs$11l.d s_var sngl kzcbs$11r.d s_var sngl kzcbs$11l.Fz s_var sngl kzcbs$11r.Fz func mul Fkfss$11r= kzcbs$11r.F SideBearer.mu_$1 func abs Fkfss$11r_abs= Fkfss$11r func mul Fkfss$11l= kzcbs$11l.F SideBearer.mu_$1 func abs Fkfss$11l_abs= Fkfss$11l coupl kf kxcbs$11r car_$1 acb_$1 SideBearer.B_$1 -SideBearer.H_$1 bol_$11 0.0 SideBearer.B_$1 -SideBearer.H_$1 kxSideBearer_$11r Fkfss$11r_abs esys_$1 x coupl kf kxcbs$11l car_$1 acb_$1 -SideBearer.B_$1 -SideBearer.H_$1 bol_$11 0.0 -SideBearer.B_$1 -SideBearer.H_$1 kxSideBearer_$11l Fkfss$11l_abs esys_$1 x coupl k kycbs$12r car_$1 -acb_$1 SideBearer.B_$1 -SideBearer.H_$1 bol_$12 0.0 SideBearer.B_$1 -SideBearer.H_$1 kySideBearer_$12r esys_$1 y # Trailing bogie coupl k kycbs$12l car_$1 -acb_$1 -SideBearer.B_$1 -SideBearer.H_$1 bol_$12 0.0 -SideBearer.B_$1 -SideBearer.H_$1 kySideBearer_$12l esys_$1 y coupl k kzcbs$12r car_$1 -acb_$1 SideBearer.B_$1 -SideBearer.H_$1 bol_$12 0.0 SideBearer.B_$1 -SideBearer.H_$1 kzSideBearer_$12r esys_$1 z coupl k kzcbs$12l car_$1 -acb_$1 -SideBearer.B_$1 -SideBearer.H_$1 bol_$12 0.0 -SideBearer.B_$1 -SideBearer.H_$1 kzSideBearer_$12l esys_$1 z s_var sngl kzcbs$12l.d s_var sngl kzcbs$12r.d LXXIV s_var sngl kzcbs$12l.Fz s_var sngl kzcbs$12r.Fz func mul Fkfss$12r= kzcbs$12r.F SideBearer.mu_$1 func abs Fkfss$12r_abs= Fkfss$12r func mul Fkfss$12l= kzcbs$12l.F SideBearer.mu_$1 func abs Fkfss$12l_abs= Fkfss$12l coupl kf kxcbs$12r car_$1 -acb_$1 SideBearer.B_$1 -SideBearer.H_$1 bol_$12 0.0 SideBearer.B_$1 -SideBearer.H_$1 kxSideBearer_$12r Fkfss$12r_abs esys_$1 x coupl kf kxcbs$12l car_$1 -acb_$1 -SideBearer.B_$1 -SideBearer.H_$1 bol_$12 0.0 -SideBearer.B_$1 -SideBearer.H_$1 kxSideBearer_$12l Fkfss$12l_abs esys_$1 x ## Secondary suspension: Coil-springs btw bolster and sideframes Inner springs 5 Pieces/side ## ================================================================================== coupl k_coil3 Coil_D5_Inner$11l bol_$11 0.0 -kzys.B_$1 -kzys.H_$1 sfr_$11l 0.0 -kzys.B_$1 -kzys.H_$1+0.260 5*87500 5*87500 5*1121*0.453592*9.81/.0254 0. 0. 0. 10.313*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_D5_Inner$11r bol_$11 0.0 kzys.B_$1 -kzys.H_$1 sfr_$11r 0.0 kzys.B_$1 -kzys.H_$1+0.260 5*87500 5*87500 5*1121*0.453592*9.81/.0254 0. 0. 0. 10.313*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_D5_Inner$12l bol_$12 0.0 -kzys.B_$1 -kzys.H_$1 sfr_$12l 0.0 -kzys.B_$1 -kzys.H_$1+0.260 5*87500 5*87500 5*1121*0.453592*9.81/.0254 0. 0. 0. 10.313*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_D5_Inner$12r bol_$12 0.0 kzys.B_$1 -kzys.H_$1 sfr_$12r 0.0 kzys.B_$1 -kzys.H_$1+0.260 5*87500 5*87500 5*1121*0.453592*9.81/.0254 0. 0. 0. 10.313*.0254 6.563*.0254 .5 esys_$1 m s_var sngl Coil_D5_Inner$11l.dz s_var sngl Coil_D5_Inner$11r.dz s_var sngl Coil_D5_Inner$12l.dz s_var sngl Coil_D5_Inner$12r.dz s_var sngl Coil_D5_Inner$11l.Fz s_var sngl Coil_D5_Inner$11r.Fz s_var sngl Coil_D5_Inner$12l.Fz s_var sngl Coil_D5_Inner$12r.Fz ## Secondary suspension: Coil-springs btw bolster and sideframes Outer springs 7 Pieces/side ## ================================================================================ coupl k_coil3 Coil_D5_Outer$11l bol_$11 0.0 -kzys.B_$1 -kzys.H_$1 sfr_$11l 0.0 -kzys.B_$1 -kzys.H_$1+0.260 7*87500 7*87500 7*2242*0.453592*9.81/.0254 0. 0. 0. 10.250*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_D5_Outer$11r bol_$11 0.0 kzys.B_$1 -kzys.H_$1 sfr_$11r 0.0 kzys.B_$1 -kzys.H_$1+0.260 7*87500 7*87500 7*2242*0.453592*9.81/.0254 0. 0. 0. 10.250*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_D5_Outer$12l bol_$12 0.0 -kzys.B_$1 -kzys.H_$1 sfr_$12l 0.0 -kzys.B_$1 -kzys.H_$1+0.260 7*87500 7*87500 7*2242*0.453592*9.81/.0254 0. 0. 0. 10.250*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_D5_Outer$12r bol_$12 0.0 kzys.B_$1 -kzys.H_$1 sfr_$12r 0.0 kzys.B_$1 -kzys.H_$1+0.260 7*87500 7*87500 7*2242*0.453592*9.81/.0254 0. 0. 0. 10.250*.0254 6.563*.0254 .5 esys_$1 m s_var sngl Coil_D5_Outer$11l.dz s_var sngl Coil_D5_Outer$11r.dz s_var sngl Coil_D5_Outer$12l.dz s_var sngl Coil_D5_Outer$12r.dz s_var sngl Coil_D5_Outer$11l.Fz s_var sngl Coil_D5_Outer$11r.Fz s_var sngl Coil_D5_Outer$12l.Fz s_var sngl Coil_D5_Outer$12r.Fz coupl c cmys$11l bol_$11 0. -kzys.B_$1 -kzys.H_$1 sfr_$11l 0. -kzys.B_$1 -kzys.H_$1 # Material damping in coil springs cmys_$11l esys_$1 m coupl c cmys$11r bol_$11 0. kzys.B_$1 -kzys.H_$1 sfr_$11r 0. kzys.B_$1 -kzys.H_$1 cmys_$11r esys_$1 m coupl c cmys$12l bol_$12 0. -kzys.B_$1 -kzys.H_$1 sfr_$12l 0. -kzys.B_$1 -kzys.H_$1 cmys_$12l esys_$1 m coupl c cmys$12r bol_$12 0. kzys.B_$1 -kzys.H_$1 sfr_$12r 0. kzys.B_$1 -kzys.H_$1 cmys_$12r esys_$1 m ## Secondary suspension: Longitudinal stops btw bolster and sideframes ## =================================================================== coupl k kxysst$11r bol_$11 0.0 kxysst.B_$1 -kxysst.H_$1 sfr_$11r 0.0 kxysst.B_$1 -kxysst.H_$1 kxysst_$11r esys_$1 x coupl k kxysst$11l bol_$11 0.0 -kxysst.B_$1 -kxysst.H_$1 sfr_$11l 0.0 -kxysst.B_$1 -kxysst.H_$1 kxysst_$11l esys_$1 x coupl k kxysst$12r bol_$12 0.0 kxysst.B_$1 -kxysst.H_$1 sfr_$12r 0.0 kxysst.B_$1 -kxysst.H_$1 kxysst_$12r esys_$1 x coupl k kxysst$12l bol_$12 0.0 -kxysst.B_$1 -kxysst.H_$1 sfr_$12l 0.0 -kxysst.B_$1 -kxysst.H_$1 kxysst_$12l esys_$1 x # s_var sngl kxysst$11r.d # Displacement in stops s_var sngl kxysst$11l.d s_var sngl kxysst$12r.d s_var sngl kxysst$12l.d s_var sngl kxysst$11r.F # Forces in stops s_var sngl kxysst$11l.F LXXV s_var sngl kxysst$12r.F s_var sngl kxysst$12l.F ## Secondary suspension: Lateral stops btw bolster and sideframes ## ============================================================== ## coupl k c_name body1 a1 b1 h1 body2 a2 b2 h2 prop esys dire # --------------------------------------------------------------------------------------------------------------- coupl k kyysst$11r bol_$11 0.0 kyysst.B_$1 -kyysst.H_$1 sfr_$11r 0.0 kyysst.B_$1 -kyysst.H_$1 kyysst_$11r esys_$1 y coupl k kyysst$11l bol_$11 0.0 -kyysst.B_$1 -kyysst.H_$1 sfr_$11l 0.0 -kyysst.B_$1 -kyysst.H_$1 kyysst_$11l esys_$1 y coupl k kyysst$12r bol_$12 0.0 kyysst.B_$1 -kyysst.H_$1 sfr_$12r 0.0 kyysst.B_$1 -kyysst.H_$1 kyysst_$12r esys_$1 y coupl k kyysst$12l bol_$12 0.0 -kyysst.B_$1 -kyysst.H_$1 sfr_$12l 0.0 -kyysst.B_$1 -kyysst.H_$1 kyysst_$12l esys_$1 y s_var sngl kyysst$11r.d # Displacement in stops s_var sngl kyysst$11l.d s_var sngl kyysst$12r.d s_var sngl kyysst$12l.d s_var sngl kyysst$11r.F # Forces in stops s_var sngl kyysst$11l.F s_var sngl kyysst$12r.F s_var sngl kyysst$12l.F ## c_name body1 a1 b1 h1 prop_1 esys dire ## ------------------------------------------------------------------------------------------------------------ func operp kzyw$111.k= bol_$11.k + 0.91630 # 0.91630 [rad] = 52.5[deg] func operp kzyw$112.k= bol_$11.k - 0.91630 func operp kzyw$121.k= bol_$12.k + 0.91630 func operp kzyw$122.k= bol_$12.k - 0.91630 #Leading bogie coupl k_r kzyw$111r bol_$11 kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$111r kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kzyw_$111r esys_$1 z 0 kzyw$111.k 0 coupl k_r kzyw$111l bol_$11 kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$111l kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kzyw_$111l esys_$1 z 0 kzyw$111.k 0 coupl k_r kzyw$112r bol_$11 -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$112r -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kzyw_$112r esys_$1 z 0 kzyw$112.k 0 coupl k_r kzyw$112l bol_$11 -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$112l -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kzyw_$112l esys_$1 z 0 kzyw$112.k 0 #Trailing bogie coupl k_r kzyw$121r bol_$12 kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$121r kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kzyw_$121r esys_$1 z 0 kzyw$121.k 0 coupl k_r kzyw$121l bol_$12 kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$121l kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kzyw_$121l esys_$1 z 0 kzyw$121.k 0 coupl k_r kzyw$122r bol_$12 -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$122r -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kzyw_$122r esys_$1 z 0 kzyw$122.k 0 coupl k_r kzyw$122l bol_$12 -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$122l -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kzyw_$122l esys_$1 z 0 kzyw$122.k 0 ####Leading bogie func operp kfxyw_$111r.Ffr= kfxyw.mu_$1 * -kzyw$111r.Fz # Available friction force in contact surfaces func operp kfxyw_$112r.Ffr= kfxyw.mu_$1 * -kzyw$112r.Fz func l_lim kfxyw_$111r.Ffr= 0. func l_lim kfxyw_$112r.Ffr= 0. s_var var_0 kfxyw_$111r.Ffr s_var var_0 kfxyw_$112r.Ffr func operp kfxyw_$111l.Ffr= kfxyw.mu_$1 * -kzyw$111l.Fz # Available friction force in contact surfaces func operp kfxyw_$112l.Ffr= kfxyw.mu_$1 * -kzyw$112l.Fz func l_lim kfxyw_$111l.Ffr= 0. func l_lim kfxyw_$112l.Ffr= 0. s_var var_0 kfxyw_$111l.Ffr s_var var_0 kfxyw_$112l.Ffr #Friction surface btw. bolster & wedge coupl kf_r kfxyw$111r bol_$11 kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$111r kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kfxyw_$111r kfxyw_$111r.Ffr esys_$1 x 0 kzyw$111.k 0 coupl kf_r kfxyw$112r bol_$11 -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$112r -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kfxyw_$112r kfxyw_$112r.Ffr esys_$1 x 0 kzyw$112.k 0 coupl kf_r kfxyw$111l bol_$11 kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$111l kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kfxyw_$111l kfxyw_$111l.Ffr esys_$1 x 0 kzyw$111.k 0 coupl kf_r kfxyw$112l bol_$11 -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$112l -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kfxyw_$112l kfxyw_$112l.Ffr esys_$1 x 0 kzyw$112.k 0 s_var var_0 kfxyw$111r.p s_var var_0 kfxyw$112r.p s_var var_0 kfxyw$111l.p s_var var_0 kfxyw$112l.p s_var var_0 kfxyw$111l.F1x s_var var_0 kfxyw$111l.F1y s_var var_0 kfxyw$111l.F1z ####Trailing bogie func operp kfxyw_$121r.Ffr= kfxyw.mu_$1 * -kzyw$121r.Fz # Available friction force in contact surfaces func operp kfxyw_$122r.Ffr= kfxyw.mu_$1 * -kzyw$122r.Fz func l_lim kfxyw_$121r.Ffr= 0. LXXVI func l_lim kfxyw_$122r.Ffr= 0. s_var var_0 kfxyw_$121r.Ffr s_var var_0 kfxyw_$122r.Ffr func operp kfxyw_$121l.Ffr= kfxyw.mu_$1 * -kzyw$121l.Fz # Available friction force in contact surfaces func operp kfxyw_$122l.Ffr= kfxyw.mu_$1 * -kzyw$122l.Fz func l_lim kfxyw_$121l.Ffr= 0. func l_lim kfxyw_$122l.Ffr= 0. s_var var_0 kfxyw_$121l.Ffr s_var var_0 kfxyw_$122l.Ffr #Friction surface btw. bolster & wedge coupl kf_r kfxyw$121r bol_$12 kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$121r kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kfxyw_$121r kfxyw_$121r.Ffr esys_$1 x 0 kzyw$121.k 0 coupl kf_r kfxyw$122r bol_$12 -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 wedge_$122r -kzyw.A_$1 kzyw.B_$1 -kzyw.H_$1 kfxyw_$122r kfxyw_$122r.Ffr esys_$1 x 0 kzyw$122.k 0 coupl kf_r kfxyw$121l bol_$12 kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$121l kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kfxyw_$121l kfxyw_$121l.Ffr esys_$1 x 0 kzyw$121.k 0 coupl kf_r kfxyw$122l bol_$12 -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 wedge_$122l -kzyw.A_$1 -kzyw.B_$1 -kzyw.H_$1 kfxyw_$122l kfxyw_$122l.Ffr esys_$1 x 0 kzyw$122.k 0 s_var var_0 kfxyw$121r.p s_var var_0 kfxyw$122r.p s_var var_0 kfxyw$121l.p s_var var_0 kfxyw$122l.p ## Friction surface btw. wedges & side-frame ## ================================================= ## c_name body1 a1 b1 h1 prop_1 esys dire ## -------------------------------------------------------------------------------------------------------------- ## Leading bogie coupl k kxws$111r wedge_$111r kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$11r kxws.A_$1 kxws.B_$1 -kxws.H_$1 kxws_$111r esys_$1 x coupl k kxws$111l wedge_$111l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$11l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kxws_$111l esys_$1 x coupl k kxws$112r wedge_$112r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$11r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 kxws_$112r esys_$1 x coupl k kxws$112l wedge_$112l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$11l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kxws_$112l esys_$1 x ## Trailing bogie coupl k kxws$121r wedge_$121r kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$12r kxws.A_$1 kxws.B_$1 -kxws.H_$1 kxws_$121r esys_$1 x coupl k kxws$121l wedge_$121l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$12l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kxws_$121l esys_$1 x coupl k kxws$122r wedge_$122r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$12r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 kxws_$122r esys_$1 x coupl k kxws$122l wedge_$122l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$12l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kxws_$122l esys_$1 x func operp kf2yzws_$111r.Ffr= kf2yzws.mu_$1 * -kxws$111r.Fx # Available friction force in contact surfaces - leading and trailing bogie!!!! func operp kf2yzws_$112r.Ffr= kf2yzws.mu_$1 * kxws$112r.Fx func operp kf2yzws_$121r.Ffr= kf2yzws.mu_$1 * -kxws$121r.Fx func operp kf2yzws_$122r.Ffr= kf2yzws.mu_$1 * kxws$122r.Fx func l_lim kf2yzws_$111r.Ffr= 0. func l_lim kf2yzws_$112r.Ffr= 0. func l_lim kf2yzws_$121r.Ffr= 0. func l_lim kf2yzws_$122r.Ffr= 0. s_var var_0 kf2yzws_$111r.Ffr s_var var_0 kf2yzws_$112r.Ffr s_var var_0 kf2yzws_$121r.Ffr s_var var_0 kf2yzws_$122r.Ffr #Store normal contact force in gp file s_var var_0 kxws$111r.Fx s_var var_0 kxws$112r.Fx s_var var_0 kxws$121r.Fx s_var var_0 kxws$122r.Fx func operp kf2yzws_$111l.Ffr= kf2yzws.mu_$1 * -kxws$111l.Fx # Available friction force in contact surfaces func operp kf2yzws_$112l.Ffr= kf2yzws.mu_$1 * kxws$112l.Fx func operp kf2yzws_$121l.Ffr= kf2yzws.mu_$1 * -kxws$121l.Fx func operp kf2yzws_$122l.Ffr= kf2yzws.mu_$1 * kxws$122l.Fx func l_lim kf2yzws_$111l.Ffr= 0. func l_lim kf2yzws_$112l.Ffr= 0. func l_lim kf2yzws_$121l.Ffr= 0. func l_lim kf2yzws_$122l.Ffr= 0. s_var var_0 kf2yzws_$111l.Ffr s_var var_0 kf2yzws_$112l.Ffr s_var var_0 kf2yzws_$121l.Ffr s_var var_0 kf2yzws_$122l.Ffr #Store normal contact force in gp file LXXVII s_var var_0 kxws$111l.Fx s_var var_0 kxws$112l.Fx s_var var_0 kxws$121l.Fx s_var var_0 kxws$122l.Fx ## Leading bogie coupl kf2 kf2yzws$111r wedge_$111r kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$11r kxws.A_$1 kxws.B_$1 -kxws.H_$1 kf2yws_$111r kf2zws_$111r kf2yzws_$111r.Ffr esys_$1 y z coupl kf2 kf2yzws$111l wedge_$111l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$11l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kf2yws_$111l kf2zws_$111l kf2yzws_$111l.Ffr esys_$1 y z coupl kf2 kf2yzws$112r wedge_$112r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$11r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 kf2yws_$112r kf2zws_$112r kf2yzws_$112r.Ffr esys_$1 y z coupl kf2 kf2yzws$112l wedge_$112l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$11l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kf2yws_$112l kf2zws_$112l kf2yzws_$112l.Ffr esys_$1 y z ## Trailing bogie coupl kf2 kf2yzws$121r wedge_$121r kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$12r kxws.A_$1 kxws.B_$1 -kxws.H_$1 kf2yws_$121r kf2zws_$121r kf2yzws_$121r.Ffr esys_$1 y z coupl kf2 kf2yzws$121l wedge_$121l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$12l kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kf2yws_$121l kf2zws_$121l kf2yzws_$121l.Ffr esys_$1 y z coupl kf2 kf2yzws$122r wedge_$122r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 sfr_$12r -kxws.A_$1 kxws.B_$1 -kxws.H_$1 kf2yws_$122r kf2zws_$122r kf2yzws_$122r.Ffr esys_$1 y z coupl kf2 kf2yzws$122l wedge_$122l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 sfr_$12l -kxws.A_$1 -kxws.B_$1 -kxws.H_$1 kf2yws_$122l kf2zws_$122l kf2yzws_$122l.Ffr esys_$1 y z s_var var_0 kf2yzws$111r.p1 s_var var_0 kf2yzws$111l.p1 # Save variables for post-processing s_var var_0 kf2yzws$112r.p1 s_var var_0 kf2yzws$112l.p1 s_var var_0 kf2yzws$111r.p2 s_var var_0 kf2yzws$111l.p2 s_var var_0 kf2yzws$112r.p2 s_var var_0 kf2yzws$112l.p2 s_var var_0 kf2yzws$121r.p1 s_var var_0 kf2yzws$121l.p1 s_var var_0 kf2yzws$122r.p1 s_var var_0 kf2yzws$122l.p1 s_var var_0 kf2yzws$121r.p2 s_var var_0 kf2yzws$121l.p2 s_var var_0 kf2yzws$122r.p2 s_var var_0 kf2yzws$122l.p2 s_var var_0 kf2yzws$111r.F2y s_var var_0 kf2yzws$111r.F2z s_var var_0 kf2yzws$112r.F2y s_var var_0 kf2yzws$112r.F2z s_var var_0 kf2yzws$121r.F2y s_var var_0 kf2yzws$121r.F2z s_var var_0 kf2yzws$122r.F2y s_var var_0 kf2yzws$122r.F2z s_var var_0 kf2yzws$111l.F2y s_var var_0 kf2yzws$111l.F2z s_var var_0 kf2yzws$112l.F2y s_var var_0 kf2yzws$112l.F2z s_var var_0 kf2yzws$121l.F2y s_var var_0 kf2yzws$121l.F2z s_var var_0 kf2yzws$122l.F2y s_var var_0 kf2yzws$122l.F2z s_var gpdat_force1 kf2yzws$111r.F2z s_var gpdat_force1 kf2yzws$112r.F2z s_var gpdat_force1 kf2yzws$111l.F2z s_var gpdat_force1 kf2yzws$112l.F2z ### Staviti sve sile ## Yaw stiffness of the three piece bogie - spring connecting bolster and side frame ================================================================================== coupl k kbosf$11r bol_$11 0.0 kzys.B_$1 -kzys.H_$1 sfr_$11r 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k2_$1 esys_$1 p coupl kf kfbosf$11r bol_$11 0.0 kzys.B_$1 -kzys.H_$1 sfr_$11r 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k1_$1 kfbosf.fo_$1 esys_$1 coupl k kbosf$11l bol_$11 0.0 kzys.B_$1 -kzys.H_$1 sfr_$11l 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k2_$1 esys_$1 p coupl kf kfbosf$11l bol_$11 0.0 kzys.B_$1 -kzys.H_$1 sfr_$11l 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k1_$1 kfbosf.fo_$1 esys_$1 p coupl k kbosf$12r bol_$12 0.0 kzys.B_$1 -kzys.H_$1 sfr_$12r 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k2_$1 esys_$1 p coupl kf kfbosf$12r bol_$12 0.0 kzys.B_$1 -kzys.H_$1 sfr_$12r 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k1_$1 kfbosf.fo_$1 esys_$1 p coupl k kbosf$12l bol_$12 0.0 kzys.B_$1 -kzys.H_$1 sfr_$12l 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k2_$1 esys_$1 p LXXVIII coupl kf kfbosf$12l bol_$12 0.0 kzys.B_$1 -kzys.H_$1 sfr_$12l 0.0 kzys.B_$1 -kzys.H_$1 kfbosfp.k1_$1 kfbosf.fo_$1 esys_$1 p ## Coil Springs btw wedges & side-frames ## ================================================== coupl k_coil3 Coil_5062$111l wedge_$111l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 sfr_$11l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5062$111r wedge_$111r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$11r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5062$112l wedge_$112l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 sfr_$11l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5062$112r wedge_$112r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$11r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5062$121l # Trailing bogie - coil springs btw. wedges & side-frame wedge_$121l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 sfr_$12l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5062$121r wedge_$121r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$12r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5062$122l wedge_$122l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 sfr_$12l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5062$122r wedge_$122r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$12r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 996*0.453592*9.81/.0254 0. 0. 0. 12.563*.0254 6.563*.0254 .5 esys_$1 m s_var var_0 Coil_5062$111l.dz s_var var_0 Coil_5062$111r.dz s_var var_0 Coil_5062$112l.dz s_var var_0 Coil_5062$112r.dz s_var var_0 Coil_5062$121l.dz s_var var_0 Coil_5062$121r.dz s_var var_0 Coil_5062$122l.dz s_var var_0 Coil_5062$122r.dz s_var var_0 Coil_5062$111l.F1z s_var var_0 Coil_5062$111r.F1z s_var var_0 Coil_5062$112l.F1z s_var var_0 Coil_5062$112r.F1z s_var var_0 Coil_5062$121l.F1z s_var var_0 Coil_5062$121r.F1z s_var var_0 Coil_5062$122l.F1z s_var var_0 Coil_5062$122r.F1z coupl k_coil3 Coil_5063$111l wedge_$111l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 sfr_$11l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5063$111r wedge_$111r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$11r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5063$112l wedge_$112l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 sfr_$11l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5063$112r wedge_$112r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$11r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5063$121l # Trailing bogie - coil springs btw. wedges & side-frame wedge_$121l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 LXXIX sfr_$12l k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5063$121r wedge_$121r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$12r k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5063$122l wedge_$122l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1 sfr_$12l -k3zws.A_$1 -k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m coupl k_coil3 Coil_5063$122r wedge_$122r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1 sfr_$12r -k3zws.A_$1 k3zws.B_$1 -k3zws.H_$1+0.260+0.0127 87500 87500 480*0.453592*9.81/.0254 0. 0. 0. 12.688*.0254 6.563*.0254 .5 esys_$1 m s_var var_0 Coil_5063$111l.dz s_var var_0 Coil_5063$111r.dz s_var var_0 Coil_5063$112l.dz s_var var_0 Coil_5063$112r.dz s_var var_0 Coil_5063$121l.dz s_var var_0 Coil_5063$121r.dz s_var var_0 Coil_5063$122l.dz s_var var_0 Coil_5063$122r.dz s_var var_0 Coil_5063$111l.F1z s_var var_0 Coil_5063$111r.F1z s_var var_0 Coil_5063$112l.F1z s_var var_0 Coil_5063$112r.F1z s_var var_0 Coil_5063$121l.F1z s_var var_0 Coil_5063$121r.F1z s_var var_0 Coil_5063$122l.F1z s_var var_0 Coil_5063$122r.F1z ## Lateral, Roll, Pitch Yaw Stiffness btw. bolster & wedges ## ====================================================== coupl k kmyw$111r bol_$11 kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 # Leading bogie wedge_$111r kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 kmyw_$111r esys_$1 m coupl k kmyw$111l bol_$11 kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 wedge_$111l kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 kmyw_$111l esys_$1 m coupl k kmyw$112r bol_$11 -kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 wedge_$112r -kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 kmyw_$112r esys_$1 m coupl k kmyw$112l bol_$11 -kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 wedge_$112l -kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 kmyw_$112l esys_$1 m ## ------------------------------------------------------------------------------------------ coupl k kmyw$121r bol_$12 kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 # Trailing bogie wedge_$121r kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 kmyw_$111r esys_$1 m coupl k kmyw$121l bol_$12 kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 wedge_$121l kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 kmyw_$111l esys_$1 m coupl k kmyw$122r bol_$12 -kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 wedge_$122r -kmyw.A_$1 kmyw.B_$1 -kmyw.H_$1 kmyw_$112r esys_$1 m coupl k kmyw$122l bol_$12 -kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 wedge_$122l -kmyw.A_$1 -kmyw.B_$1 -kmyw.H_$1 kmyw_$112l esys_$1 m ## Spring Plank ## ============================================================== ## coupl k c_name body1 a1 b1 h1 body2 a2 b2 h2 prop esys dire ## ----------------------------------------------------------------------------------------- # coupl k kmss$11r sfr_$11r 0. 0. -kmss_H sfr_$11l 0. 0. -kmss_H kmss_$11r esys_$1 m # coupl k kmss$12r sfr_$12r 0. 0. -kmss_H sfr_$12l 0. 0. -kmss_H kmss_$12r esys_$1 m ## Primary suspension: Rubber pads ## ============================================================== ## coupl k c_name body1 a1 b1 h1 body2 a2 b2 h2 prop esys dire ## ------------------------------------------------------------------------------------------------------ coupl k kmba$111r sfr_$11r aba_$11 kmba.B_$1 -kmba.H_$1 axl_$111 0.0 kmba.B_$1 -kmba.H_$1 kmba_$111r esys_$1 m coupl k kmba$111l sfr_$11l aba_$11 -kmba.B_$1 -kmba.H_$1 axl_$111 0.0 -kmba.B_$1 -kmba.H_$1 kmba_$111l esys_$1 m coupl k kmba$112r sfr_$11r -aba_$11 kmba.B_$1 -kmba.H_$1 axl_$112 0.0 kmba.B_$1 -kmba.H_$1 kmba_$112r esys_$1 m coupl k kmba$112l sfr_$11l -aba_$11 -kmba.B_$1 -kmba.H_$1 axl_$112 0.0 -kmba.B_$1 -kmba.H_$1 kmba_$112l esys_$1 m coupl k kmba$121r sfr_$12r aba_$12 kmba.B_$1 -kmba.H_$1 axl_$121 0.0 kmba.B_$1 -kmba.H_$1 kmba_$121r esys_$1 m coupl k kmba$121l sfr_$12l aba_$12 -kmba.B_$1 -kmba.H_$1 axl_$121 0.0 -kmba.B_$1 -kmba.H_$1 kmba_$121l esys_$1 m coupl k kmba$122r sfr_$12r -aba_$12 kmba.B_$1 -kmba.H_$1 axl_$122 0.0 kmba.B_$1 -kmba.H_$1 kmba_$122r esys_$1 m coupl k kmba$122l sfr_$12l -aba_$12 -kmba.B_$1 -kmba.H_$1 axl_$122 0.0 -kmba.B_$1 -kmba.H_$1 kmba_$122l esys_$1 m ## coupl c c_name body1 a1 b1 h1 body2 a2 b2 h2 prop esys dire ## ------------------------------------------------------------------------------------------------------ coupl c cmba$111r sfr_$11r aba_$11 kmba.B_$1 -kmba.H_$1 axl_$111 0.0 kmba.B_$1 -kmba.H_$1 cmba_$111r esys_$1 m coupl c cmba$111l sfr_$11l aba_$11 -kmba.B_$1 -kmba.H_$1 axl_$111 0.0 -kmba.B_$1 -kmba.H_$1 cmba_$111l esys_$1 m coupl c cmba$112r sfr_$11r -aba_$11 kmba.B_$1 -kmba.H_$1 axl_$112 0.0 kmba.B_$1 -kmba.H_$1 cmba_$112r esys_$1 m coupl c cmba$112l sfr_$11l -aba_$11 -kmba.B_$1 -kmba.H_$1 axl_$112 0.0 -kmba.B_$1 -kmba.H_$1 cmba_$112l esys_$1 m coupl c cmba$121r sfr_$12r aba_$12 kmba.B_$1 -kmba.H_$1 axl_$121 0.0 kmba.B_$1 -kmba.H_$1 cmba_$121r esys_$1 m coupl c cmba$121l sfr_$12l aba_$12 -kmba.B_$1 -kmba.H_$1 axl_$121 0.0 -kmba.B_$1 -kmba.H_$1 cmba_$121l esys_$1 m coupl c cmba$122r sfr_$12r -aba_$12 kmba.B_$1 -kmba.H_$1 axl_$122 0.0 kmba.B_$1 -kmba.H_$1 cmba_$122r esys_$1 m coupl c cmba$122l sfr_$12l -aba_$12 -kmba.B_$1 -kmba.H_$1 axl_$122 0.0 -kmba.B_$1 -kmba.H_$1 cmba_$122l esys_$1 m ## Primary suspension: Longitudinal stops ## ============================================================== LXXX ## coupl k c_name body1 a1 b1 h1 body2 a2 b2 h2 prop esys dire ## ----------------------------------------------------------------------------------------------------------------------- coupl k kxbast$111r sfr_$11r aba_$11 bsfr_$11r -kxbast.H_$1 axl_$111 0.0 bsfr_$11r -kxbast.H_$1 kxbast_$111r esys_$1 x coupl k kxbast$112r sfr_$11r -aba_$11 bsfr_$11r -kxbast.H_$1 axl_$112 0.0 bsfr_$11r -kxbast.H_$1 kxbast_$112r esys_$1 x coupl k kxbast$121r sfr_$12r aba_$12 bsfr_$12r -kxbast.H_$1 axl_$121 0.0 bsfr_$12r -kxbast.H_$1 kxbast_$121r esys_$1 x coupl k kxbast$122r sfr_$12r -aba_$12 bsfr_$12r -kxbast.H_$1 axl_$122 0.0 bsfr_$12r -kxbast.H_$1 kxbast_$122r esys_$1 x coupl k kxbast$111l sfr_$11l aba_$11 -bsfr_$11l -kxbast.H_$1 axl_$111 0.0 -bsfr_$11l -kxbast.H_$1 kxbast_$111l esys_$1 x coupl k kxbast$112l sfr_$11l -aba_$11 -bsfr_$11l -kxbast.H_$1 axl_$112 0.0 -bsfr_$11l -kxbast.H_$1 kxbast_$112l esys_$1 x coupl k kxbast$121l sfr_$12l aba_$12 -bsfr_$12l -kxbast.H_$1 axl_$121 0.0 -bsfr_$12l -kxbast.H_$1 kxbast_$121l esys_$1 x coupl k kxbast$122l sfr_$12l -aba_$12 -bsfr_$12l -kxbast.H_$1 axl_$122 0.0 -bsfr_$12l -kxbast.H_$1 kxbast_$122l esys_$1 x s_var sngl kxbast$111r.d # Displacement in stops s_var sngl kxbast$111l.d s_var sngl kxbast$111r.F # Forces in stops s_var sngl kxbast$111l.F s_var sngl kxbast$112r.d s_var sngl kxbast$112l.d s_var sngl kxbast$112r.F s_var sngl kxbast$112l.F ## Primary suspension: Lateral stops ## ============================================================== ## coupl k c_name body1 a1 b1 h1 body2 a2 b2 h2 prop esys dire ## ----------------------------------------------------------------------------------------------------------------------- coupl k kybast$111r sfr_$11r aba_$11 bsfr_$11r -kybast.H_$1 axl_$111 0.0 bsfr_$11r -kybast.H_$1 kybast_$111r esys_$1 y coupl k kybast$112r sfr_$11r -aba_$11 bsfr_$11r -kybast.H_$1 axl_$112 0.0 bsfr_$11r -kybast.H_$1 kybast_$112r esys_$1 y coupl k kybast$121r sfr_$12r aba_$12 bsfr_$12r -kybast.H_$1 axl_$121 0.0 bsfr_$12r -kybast.H_$1 kybast_$121r esys_$1 y coupl k kybast$122r sfr_$12r -aba_$12 bsfr_$12r -kybast.H_$1 axl_$122 0.0 bsfr_$12r -kybast.H_$1 kybast_$122r esys_$1 y coupl k kybast$111l sfr_$11l aba_$11 -bsfr_$11l -kybast.H_$1 axl_$111 0.0 -bsfr_$11l -kybast.H_$1 kybast_$111l esys_$1 y coupl k kybast$112l sfr_$11l -aba_$11 -bsfr_$11l -kybast.H_$1 axl_$112 0.0 -bsfr_$11l -kybast.H_$1 kybast_$112l esys_$1 y coupl k kybast$121l sfr_$12l aba_$12 -bsfr_$12l -kybast.H_$1 axl_$121 0.0 -bsfr_$12l -kybast.H_$1 kybast_$121l esys_$1 y coupl k kybast$122l sfr_$12l -aba_$12 -bsfr_$12l -kybast.H_$1 axl_$122 0.0 -bsfr_$12l -kybast.H_$1 kybast_$122l esys_$1 y s_var sngl kybast$111r.d # Displacement in stops s_var sngl kybast$111l.d s_var sngl kybast$111r.F # Forces in stops s_var sngl kybast$111l.F s_var sngl kybast$112r.d s_var sngl kybast$112l.d s_var sngl kybast$112r.F s_var sngl kybast$112l.F ###[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ##### Contact between wheels and rails ###[-]{ ================================================================ ## Vertical rail-track stiffness ## ========================================================== func add axl_$111.X= lsa_$111.pn axl_$111.x func add axl_$112.X= lsa_$112.pn axl_$112.x func add axl_$121.X= lsa_$121.pn axl_$121.x func add axl_$122.X= lsa_$122.pn axl_$122.x func operp kzrt_$111= 220e6 # + `220e6*0.15` * sin( `2*pi/.5` * axl_$111.X ) func operp kzrt_$112= 220e6 # + `220e6*0.15` * sin( `2*pi/.5` * axl_$112.X ) func operp kzrt_$121= 220e6 # + `220e6*0.15` * sin( `2*pi/.5` * axl_$121.X ) func operp kzrt_$122= 220e6 # + `220e6*0.15` * sin( `2*pi/.5` * axl_$122.X ) s_varsngl kzrt_$111 s_var sngl kzrt_$112 s_var sngl kzrt_$121 s_var sngl kzrt_$122 ## Calculation of creep and creepforces between wheels and rails ## ================================================================ in_substruct wr_coupl_pe3 [ $111 ] in_substruct wr_coupl_pe3 [ $112 ] in_substruct wr_coupl_pe3 [ $121 ] in_substruct wr_coupl_pe3 [ $122 ] ## Animate track irregularities in GPLOT ## ====================================== in_substruct animate_rails [ $111 l - ] in_substruct animate_rails [ $111 r + ] in_substruct animate_rails [ $112 l - ] in_substruct animate_rails [ $112 r + ] in_substruct animate_rails [ $121 l - ] in_substruct animate_rails [ $121 r + ] in_substruct animate_rails [ $122 l - ] in_substruct animate_rails [ $122 r + ] ## Calculate wear and RCF indexes ## ================================================================ in_substruct wear_RCF [ $111l ] in_substruct wear_RCF [ $111r ] LXXXI in_substruct wear_RCF [ $112l ] in_substruct wear_RCF [ $112r ] ###[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ## Couplings between track and ground ## ============================================================== in_substruct create_trc_couplz [ $1 $111 ] in_substruct create_trc_couplz [ $1 $112 ] in_substruct create_trc_couplz [ $1 $121 ] in_substruct create_trc_couplz [ $1 $122 ] ##### Regulate the longitudinal position of the vehicle ###[-]{ ================================================================ ## Longitudinal stiffness connecting the carbody to the lsc_$1 coordinate system ## ============================================================================ func const mvhe_$1= mc_$1+2*my_$1+4*ms_$1+4*ma_$1+4*Jka_$1/ro_$1^2 coupl k_lin kxcg$1 car_$1 x 0 0 -hccg_$1*.6 grd_$1 x 0 0 -hccg_$1*.6 (2*pi*.25)^2*mvhe_$1 # fo= 0.25[Hz] coupl c_lin cxcg$1 car_$1 x 0 0 -hccg_$1*.6 grd_$1 x 0 0 -hccg_$1*.6 4*pi*.7*.25*mvhe_$1 # zeta=0.7 ## Apply pitch moment on the wheelsets ## ========================================================== # func const fxcg_$1= 0.25 # func const mvhe_$1= mc_$1+mb_$11+mb_$12+ma_$111+Jka_$111/ro_$111^2+ma_$112+Jka_$112/ro_$112^2+ma_$121+Jka_$121/ro_$121^2+ma_$ 122+Jka_$122/ro_$122^2 # func const Kreg_$1= (2*pi*fxcg_$1)^2*mvhe_$1*ro_$1/4 # func const Creg_$1= 4*pi*.70*fxcg_$1*mvhe_$1*ro_$1/4 # func operp car_.x = ( car_$1.x * mc_$1 + bog_$11.x * mb_$11 + bog_$12.x * mb_$12 + # axl_$111.x * ma_$111 + axl_$112.x * ma_$112 + axl_$121.x * ma_$121 + axl_$122.x * ma_$122 ) / mvhe_$1 # func operp car_.vx= ( car_$1.vx * mc_$1 + bog_$11.vx * mb_$11 + bog_$12.vx * mb_$12 + # axl_$111.vx * ma_$111 + axl_$112.vx * ma_$112 + axl_$121.vx * ma_$121 + axl_$122.vx * ma_$122 ) / mvhe_$1 ## # func mul MtractionK_$1= Kreg_$1 car_.x # func mul MtractionC_$1= Creg_$1 car_.vx # func add Mtraction_$1= MtractionK_$1 MtractionC_$1 # func lpass2_0 MtractionF1_$1= Mtraction_$1 5. .9239 # Second order low pass filter, start value equal to 0(zero) # func lpass2_0 MtractionF2_$1= MtractionF1_$1 5. .3827 # Second order low pass filter, start value equal to 0(zero) ## # func incr axl_$111.Mk= MtractionF2_$1 # func incr axl_$112.Mk= MtractionF2_$1 # func incr axl_$121.Mk= MtractionF2_$1 # func incr axl_$122.Mk= MtractionF2_$1 ###[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ] ##[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - in_substruct vhe_model_3PB [ 1 ] ### Viscous damper for quasistatic solution #[-]{ ========================================================== # func const kfxyw.mu_$1 = 0 # For quasi-static calculations # func const kf2yzws.mu_$1= 0 # Set friction coefficients in bogie= 0 # func const czcg_$1 = 0.2*2.*sqrt(mc_$1*4.*(4.2E6+2.*0.194E6)) ## Add 20% vertical damping btw. carbody and ground point # func print06_init czcg_$1 ## Print on screen # coupl c_lin ccg_$1 car_$1 z 0.0 0.0 0.0 # grd_$1 z 0.0 0.0 0.0 czcg_$1 #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Read input data for flexible masses #[-]{ ================================================================ # if_then_char_init CalcType .ne. NPICK # insert file npickr/$IDENT.npickr # endif # insert file npickr/tors.npickr # Torsional eigenmode wheelset #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Initial values #[-]{ ================================================================ if_then_char_init CalcType .eq. TSIM .or. CalcType .eq. MODAL initval read_gpdat gp/3PB_LKAB_empty_quasi.gp 2000 initval set_var axl_111.vk= -Vo/ro_111 initval set_var axl_112.vk= -Vo/ro_112 initval set_var axl_121.vk= -Vo/ro_121 initval set_var axl_122.vk= -Vo/ro_122 endif # if_then_char_init CalcType .eq. QUASI # initval set_var kf2yzws.mu_$1= 0. # endif #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Store variables for postprocessing #[-]{ ================================================================ LXXXII insert file $gensys/calc/insert_files/save_car1.ins # Save variables for carbody insert file $gensys/calc/insert_files/save_bol1.ins # Save variables for bolster beam insert file $gensys/calc/insert_files/save_sfr1.ins # Save variables for bogie insert file $gensys/calc/insert_files/save_bog1.ins # Save variables for bogie insert file $gensys/calc/insert_files/save_axl1.ins # Save variables for axle insert file $gensys/calc/insert_files/save_mass_1.ins # Save variables for axle in_substruct save_mass_1 [ load_2 ] in_substruct save_car1 [ 1 ] in_substruct save_bol1 [ 11 ] in_substruct save_bol1 [ 12 ] in_substruct save_sfr1 [ 11r ] in_substruct save_sfr1 [ 11l ] in_substruct save_sfr1 [ 12r ] in_substruct save_sfr1 [ 12l ] in_substruct save_axl1 [ 111 ] in_substruct save_axl1 [ 112 ] in_substruct save_axl1 [ 121 ] in_substruct save_axl1 [ 122 ] s_var var_0 lsb_11.pn s_var var_0 lsb_12.p s_var force_on wedge_111l x # Store all forces acting on wedge 111l s_var force_on wedge_111l y s_var force_on wedge_111l #### Write to GPdat-file for animations in program GPLOT ##[-]{ ================================================================ s_var gpdat_r1 # Create a gp-file for animation in gplot # s_var gpdat_force1 kzcb11r.F1y # s_var gpdat_force1 kzcb11l.F1y if_then_init .exist. cp1_111r.Fx s_var gpdat_force1 cp1_111r.Fx s_var gpdat_force1 cp1_111r.Fy s_var gpdat_force1 cp1_111r.Fz s_var gpdat_force1 cp1_111l.Fx s_var gpdat_force1 cp1_111l.Fy s_var gpdat_force1 cp1_111l.Fz s_var gpdat_force1 cp1_112r.Fx s_var gpdat_force1 cp1_112r.Fy s_var gpdat_force1 cp1_112r.Fz s_var gpdat_force1 cp1_112l.Fx s_var gpdat_force1 cp1_112l.Fy s_var gpdat_force1 cp1_112l.Fz endif if_then_init .exist. cp2_111r.Fx s_var gpdat_force1 cp2_111r.Fx s_var gpdat_force1 cp2_111r.Fy s_var gpdat_force1 cp2_111r.Fz s_var gpdat_force1 cp2_111l.Fx s_var gpdat_force1 cp2_111l.Fy s_var gpdat_force1 cp2_111l.Fz s_var gpdat_force1 cp2_112r.Fx s_var gpdat_force1 cp2_112r.Fy s_var gpdat_force1 cp2_112r.Fz s_var gpdat_force1 cp2_112l.Fx s_var gpdat_force1 cp2_112l.Fy s_var gpdat_force1 cp2_112l.Fz endif if_then_init .exist. cp3_111r.Fx s_var gpdat_force1 cp3_111r.Fx s_var gpdat_force1 cp3_111r.Fy s_var gpdat_force1 cp3_111r.Fz s_var gpdat_force1 cp3_111l.Fx s_var gpdat_force1 cp3_111l.Fy s_var gpdat_force1 cp3_111l.Fz s_var gpdat_force1 cp3_112r.Fx s_var gpdat_force1 cp3_112r.Fy s_var gpdat_force1 cp3_112r.Fz s_var gpdat_force1 cp3_112l.Fx s_var gpdat_force1 cp3_112l.Fy s_var gpdat_force1 cp3_112l.Fz endif s_var gpdat_wheel_info 111r lsa_111.b $genkpf/../w_prof/WP4/WP4t32.5_2004.wheel s_var gpdat_wheel_info 111l lsa_111.b $genkpf/../w_prof/WP4/WP4t32.5_2004.wheel s_var gpdat_wheel_info 112r lsa_112.b $genkpf/../w_prof/WP4/WP4t32.5_2004.wheel s_var gpdat_wheel_info 112l lsa_112.b $genkpf/../w_prof/WP4/WP4t32.5_2004.wheel if_then_char_init ckpfr .eq. "Variable_W/R-geom" s_var gpdat_rail_info_right -100 $genkpf/../r_prof/bv50/bv50i30.rail 0 $genkpf/../r_prof/bv50/bv50i30.rail 5 $genkpf/../r_prof/bv50_worn/worn_rail_low3.rail 300 $genkpf/../r_prof/bv50_worn/worn_rail_low3.rail 305 $genkpf/../r_prof/bv50/bv50i30.rail 320 $genkpf/../r_prof/bv50/bv50i30.rail 325 $genkpf/../r_prof/bv50_worn/worn_rail_high3.rail 620 $genkpf/../r_prof/bv50_worn/worn_rail_high3.rail 625 $genkpf/../r_prof/bv50/bv50i30.rail 750 $genkpf/../r_prof/bv50/bv50i30.rail s_var gpdat_rail_info_left -100 $genkpf/../r_prof/bv50/bv50i30.rail 0 $genkpf/../r_prof/bv50/bv50i30.rail 5 $genkpf/../r_prof/bv50_worn/worn_rail_high3.rail 300 $genkpf/../r_prof/bv50_worn/worn_rail_high3.rail 305 $genkpf/../r_prof/bv50/bv50i30.rail 320 $genkpf/../r_prof/bv50/bv50i30.rail 325 $genkpf/../r_prof/bv50_worn/worn_rail_low3.rail 620 $genkpf/../r_prof/bv50_worn/worn_rail_low3.rail 625 $genkpf/../r_prof/bv50/bv50i30.rail 750 $genkpf/../r_prof/bv50/bv50i30.rail else s_var gpdat_rail_info_right -100 $genkpf/../r_prof/uic60/uic60i40.rail 3000 $genkpf/../r_prof/uic60/uic60i40.rail s_var gpdat_rail_info_left -100 $genkpf/../r_prof/uic60/uic60i40.rail LXXXIII 3000 $genkpf/../r_prof/uic60/uic60i40.rail endif ##[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Limit values according to UIC 518 4th edition, 2009 #[-]{ ========================================================== ## Static vertical forces ## ============================================================== func const Q_stat_axle_111= (mc_1+2*my_1+4*ms_1+4*ma_1)*9.81/4 func const Q_stat_axle_112= (mc_1+2*my_1+4*ms_1+4*ma_1)*9.81/4 func const Q_stat_axle_121= (mc_1+2*my_1+4*ms_1+4*ma_1)*9.81/4 func const Q_stat_axle_122= (mc_1+2*my_1+4*ms_1+4*ma_1)*9.81/4 func max_init Q_stat_axle_max= Q_stat_axle_111 Q_stat_axle_112 Q_stat_axle_121 Q_stat_axle_122 func min_init Q_stat_axle_min= Q_stat_axle_111 Q_stat_axle_112 Q_stat_axle_121 Q_stat_axle_122 func const Q_stat_wheel_111l= Q_stat_axle_111/2 func const Q_stat_wheel_111r= Q_stat_axle_111/2 func const Q_stat_wheel_112l= Q_stat_axle_112/2 func const Q_stat_wheel_112r= Q_stat_axle_112/2 func const Q_stat_wheel_121l= Q_stat_axle_121/2 func const Q_stat_wheel_121r= Q_stat_axle_121/2 func const Q_stat_wheel_122l= Q_stat_axle_122/2 func const Q_stat_wheel_122r= Q_stat_axle_122/2 func max_init Q_stat_wheel_max= Q_stat_wheel_111l Q_stat_wheel_112l Q_stat_wheel_121l Q_stat_wheel_122l Q_stat_wheel_111r Q_stat_wheel_112r Q_stat_wheel_121r Q_stat_wheel_122r func min_init Q_stat_wheel_min= Q_stat_wheel_111l Q_stat_wheel_112l Q_stat_wheel_121l Q_stat_wheel_122l Q_stat_wheel_111r Q_stat_wheel_112r Q_stat_wheel_121r Q_stat_wheel_122r ## 10.1.1 Safety ## 10.1.1.1 Track-shift force recommended limit # func const S2m_lim_111= 1.0*(10e3+Q_stat_axle_111/3.) func const S2m_lim_112= 1.0*(10e3+Q_stat_axle_112/3.) func const S2m_lim_121= 1.0*(10e3+Q_stat_axle_121/3.) func const S2m_lim_122= 1.0*(10e3+Q_stat_axle_122/3.) s_var scalar_0 S2m_lim_111 s_var scalar_0 S2m_lim_112 s_var scalar_0 S2m_lim_121 s_var scalar_0 S2m_lim_122 func const S2m_lim_min= 1.0*(10e3+Q_stat_axle_min/3.) s_var scalar_0 S2m_lim_min ## 10.1.1.2 Derailment quotient func const YQ2m_lim= 0.8 s_var scalar_0 YQ2m_lim ## 10.1.1.3 Instability func const sS_lim= S2m_lim_min/2 s_var scalar_0 sS_lim ## 10.1.1.4 Overturning criterion func const eta_lim= 1.0 s_var scalar_0 eta_lim ## 10.1.2 Track fatigue ## ============================================================================= ## 10.1.2.1 Vertical force Q: Limit values for Q 99.85 percentile func const Q_lim_min = 90e3+Q_stat_wheel_min if_then_init Q_stat_wheel_max .lt. 125e3 if_then_init vkmh .le. 160 no_warning func min_init Q_lim_min= Q_lim_min 200e3 elseif_then_init vkmh .le. 200 no_warning func min_init Q_lim_min= Q_lim_min 190e3 elseif_then_init vkmh .le. 250 no_warning func min_init Q_lim_min= Q_lim_min 180e3 elseif_then_init vkmh .le. 300 no_warning func min_init Q_lim_min= Q_lim_min 170e3 else no_warning func min_init Q_lim_min= Q_lim_min 160e3 endif else no_warning func const Q_lim_min= 0e3 func print06_char_init " " func print06_char_init "* warning * In Input Reading" func print06_char_init " Too high static wheel load" func print06_char_init " Q_lim_min according to UIC 518 cannot be determined" endif s_var scalar_0 Q_lim_min ## 10.1.2.2 Quasi-static lateral force in curves (Yqst): # LXXXIV func operp Yqst_lim_111= 30e3 + 10500e3 * abs( lsa_111.b ) func operp Yqst_lim_112= 30e3 + 10500e3 * abs( lsa_112.b ) func operp Yqst_lim_121= 30e3 + 10500e3 * abs( lsa_121.b ) func operp Yqst_lim_122= 30e3 + 10500e3 * abs( lsa_122.b ) s_var var_0 Yqst_lim_111 s_var var_0 Yqst_lim_112 s_var var_0 Yqst_lim_121 s_var var_0 Yqst_lim_122 func min Yqst_lim_min= Yqst_lim_111 Yqst_lim_112 Yqst_lim_121 Yqst_lim_122 s_var scalar_0 Yqst_lim_min ## 10.1.2.3 Quasi-static vertical force in curves less than 600 m (Qqst): func const Qqst_lim= 145e3 s_var scalar_0 Qqst_lim ## 10.1.2.4 Quasi-static track loading forces in curves less than 600 m (Qqst): func const Bqst_lim= 180e3 s_var scalar_0 Bqst_lim func const car.ay_lim= 2.5 # passenger vehicles (tractive and trailer stock) func const car.az_lim= 2.5 s_var scalar_0 car.ay_lim s_var scalar_0 car.az_lim func const car.say_lim= 0.50 # passenger vehicles (tractive and trailer stock) func const car.saz_lim= 0.75 s_var scalar_0 car.say_lim s_var scalar_0 car.saz_lim ## 10.1.3.3 Quasi-static lateral accelerations car.ay_qst # # func const car.ay_qst_lim= 1.50 # traction units func const car.ay_qst_lim= 1.30 # bogie wagons and bogie special vehicles # func const car.ay_qst_lim= 1.30 # non-bogie wagons and non-bogie special vehicles # s_var scalar_0 car.ay_qst_lim #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Excite the vehicle in order to calculate critical speed #[-]{ ========================================================== # initval set_var car_1.vy= .15 # initval set_var car_1.vp= .15 # force rel_lsys1 deacc_car_1 car_1 0 0 -hccg_1 -mc_1*vkmh_deacc/3.6 0. 0. 0. 0. 0. # Deacceleration vkmh_deacc in [km/h/s] # force rel_lsys1 deacc_bol_11 bol_11 0 0 -hycg_11 -my_11*vkmh_deacc/3.6 0. 0. 0. 0. 0. # as external forces # force rel_lsys1 deacc_bol_12 bol_12 0 0 -hycg_12 -my_12*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_sfr_11l sfr_11l 0 0 -hscg_11l -ms_11*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_sfr_11r sfr_11r 0 0 -hscg_11r -ms_11*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_sfr_12l sfr_12l 0 0 -hscg_12l -ms_12*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_sfr_12r sfr_12r 0 0 -hscg_12r -ms_12*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_axl_111 axl_111 0 0 -ro_111 -(ma_111+Jka_111/ro_111^2)*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_axl_112 axl_112 0 0 -ro_112 -(ma_112+Jka_112/ro_112^2)*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_axl_121 axl_121 0 0 -ro_121 -(ma_121+Jka_121/ro_121^2)*vkmh_deacc/3.6 0. 0. 0. 0. 0. # force rel_lsys1 deacc_axl_122 axl_122 0 0 -ro_122 -(ma_122+Jka_122/ro_122^2)*vkmh_deacc/3.6 0. 0. 0. 0. 0. #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Noise and Corrugation #[-]{ ========================================================== substruct saveCorrugation [ func cabs cp1_$1l.anu= cp1_$1l.nux cp1_$1l.nuy func cabs cp1_$1r.anu= cp1_$1r.nux cp1_$1r.nuy func cabs cp2_$1l.anu= cp2_$1l.nux cp2_$1l.nuy func cabs cp2_$1r.anu= cp2_$1r.nux cp2_$1r.nuy func cabs cp3_$1l.anu= cp3_$1l.nux cp3_$1l.nuy func cabs cp3_$1r.anu= cp3_$1r.nux cp3_$1r.nuy s_var var_0 cp1_$1l.anu s_var var_0 cp1_$1r.anu s_var var_0 cp2_$1l.anu s_var var_0 cp2_$1r.anu s_var var_0 cp3_$1l.anu s_var var_0 cp3_$1r.anu ] # in_substruct saveCorrugation [ 111 ] # in_substruct saveCorrugation [ 112 ] #[-]} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ### Stop the simulation at tstop or the end of the track ### ========================================================== tstop= 80. if_then lsa_111.pn .gt. Xtrac_stop func print06_char_all " " func print06_char_all " Execution interrupted due to lsa_111.pn > Xtrac_stop" func print06_char_all " ----------------------------------------------------" func stop endif eof # Always end the input data file with an eof-mark