diff --git a/404.html b/404.html index c1da1f6c..1a639d1d 100644 --- a/404.html +++ b/404.html @@ -644,7 +644,7 @@ - + diff --git a/404/page/2.html b/404/page/2.html index 32c1dabb..a6a71cbb 100644 --- a/404/page/2.html +++ b/404/page/2.html @@ -649,7 +649,7 @@ - + diff --git a/404/page/3.html b/404/page/3.html index 32c1dabb..a6a71cbb 100644 --- a/404/page/3.html +++ b/404/page/3.html @@ -649,7 +649,7 @@ - + diff --git a/404/page/4.html b/404/page/4.html index 2bd7bdcb..c4dba2f3 100644 --- a/404/page/4.html +++ b/404/page/4.html @@ -650,7 +650,7 @@ - + diff --git a/404/page/5.html b/404/page/5.html index 2bd7bdcb..c4dba2f3 100644 --- a/404/page/5.html +++ b/404/page/5.html @@ -650,7 +650,7 @@ - + diff --git a/404/page/6.html b/404/page/6.html index 2bd7bdcb..c4dba2f3 100644 --- a/404/page/6.html +++ b/404/page/6.html @@ -650,7 +650,7 @@ - + diff --git a/css/main.css b/css/main.css index db59fdc4..858c4589 100644 --- a/css/main.css +++ b/css/main.css @@ -9,7 +9,7 @@ strong{font-weight:600!important} * Bootstrap v5.3.3 (https://getbootstrap.com/) * Copyright 2011-2024 The Bootstrap Authors * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#003262;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:0,50,98;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#001427;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#ccd6e0;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#99adc0;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:Inter,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:300;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33,37,41,.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33,37,41,.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#003262;--bs-link-color-rgb:0,50,98;--bs-link-decoration:underline;--bs-link-hover-color:#00284e;--bs-link-hover-color-rgb:0,40,78;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0,0,0,.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0,0,0,.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0,0,0,.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(0,50,98,.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6684a1;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#002d58;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6684a1;--bs-link-hover-color:#859db4;--bs-link-color-rgb:102,132,161;--bs-link-hover-color-rgb:133,157,180;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{background-color:var(--bs-body-bg);color:var(--bs-body-color);font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);margin:0;text-align:var(--bs-body-text-align);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{border:0;border-top:var(--bs-border-width) solid;color:inherit;margin:1rem 0;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--bs-heading-color);font-weight:600;line-height:1.2;margin-bottom:.5rem;margin-top:0}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{background-color:var(--bs-highlight-bg);color:var(--bs-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;font-size:.875em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{color:var(--bs-code-color);font-size:.875em;word-wrap:break-word}a>code{color:inherit}kbd{background-color:var(--bs-body-color);border-radius:.25rem;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.list-unstyled{list-style:none;padding-left:0}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.img-fluid{height:auto;max-width:100%}.figure{display:inline-block}.container,.container-fluid,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}@media (min-width:1400px){.container,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.col{flex:1 0 0%}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-6{flex:0 0 auto;width:50%}.col-9{flex:0 0 auto;width:75%}.col-12{flex:0 0 auto;width:100%}.g-0{--bs-gutter-x:0}.g-0{--bs-gutter-y:0}.g-4{--bs-gutter-x:1.5rem}.g-4{--bs-gutter-y:1.5rem}@media (min-width:576px){.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-12{flex:0 0 auto;width:100%}}@media (min-width:768px){.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-6{flex:0 0 auto;width:50%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}}@media (min-width:992px){.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-8{flex:0 0 auto;width:66.66666667%}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb),0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb),0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb),0.075);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-clip:padding-box;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:300;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{background-color:var(--bs-body-bg);border-color:#8099b1;box-shadow:0 0 0 .25rem rgba(0,50,98,.25);color:var(--bs-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.5em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{background-color:var(--bs-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--bs-border-width);border-radius:0;color:var(--bs-body-color);margin:-.375rem -.75rem;margin-inline-end:.75rem;padding:.375rem .75rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}textarea.form-control{min-height:calc(1.5em + .75rem + var(--bs-border-width)*2)}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:300;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb),.5);background-color:var(--bs-btn-bg);border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);color:var(--bs-btn-color);cursor:pointer;display:inline-block;font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);color:var(--bs-btn-hover-color)}.btn:focus-visible{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);color:var(--bs-btn-hover-color);outline:0}.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color);color:var(--bs-btn-active-color)}.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);color:var(--bs-btn-disabled-color);opacity:var(--bs-btn-disabled-opacity);pointer-events:none}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#003262;--bs-btn-border-color:#003262;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#002b53;--bs-btn-hover-border-color:#00284e;--bs-btn-focus-shadow-rgb:38,81,122;--bs-btn-active-color:#fff;--bs-btn-active-bg:#00284e;--bs-btn-active-border-color:#00264a;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#003262;--bs-btn-disabled-border-color:#003262}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-outline-primary{--bs-btn-color:#003262;--bs-btn-border-color:#003262;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#003262;--bs-btn-hover-border-color:#003262;--bs-btn-focus-shadow-rgb:0,50,98;--bs-btn-active-color:#fff;--bs-btn-active-bg:#003262;--bs-btn-active-border-color:#003262;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#003262;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#003262;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#003262;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;background-clip:padding-box;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);color:var(--bs-dropdown-color);display:none;font-size:var(--bs-dropdown-font-size);list-style:none;margin:0;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);position:absolute;text-align:left;z-index:var(--bs-dropdown-zindex)}.dropdown-menu[data-bs-popper]{left:0;margin-top:var(--bs-dropdown-spacer);top:100%}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--bs-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--bs-dropdown-spacer);margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--bs-dropdown-spacer);margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--bs-dropdown-divider-bg);height:0;margin:var(--bs-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0);clear:both;color:var(--bs-dropdown-link-color);display:block;font-weight:300;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);text-align:inherit;text-decoration:none;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--bs-dropdown-link-hover-bg);color:var(--bs-dropdown-link-hover-color)}.dropdown-item.active,.dropdown-item:active{background-color:var(--bs-dropdown-link-active-bg);color:var(--bs-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--bs-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--bs-dropdown-header-color);display:block;font-size:.875rem;margin-bottom:0;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--bs-dropdown-link-color);display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:hsla(0,0%,100%,.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#003262;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{background:none;border:0;color:var(--bs-nav-link-color);display:block;font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{box-shadow:0 0 0 .25rem rgba(0,50,98,.25);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius);margin-bottom:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--bs-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color);color:var(--bs-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--bs-nav-tabs-border-width)*-1)}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb),0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb),0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb),0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url(/opensees-gallery/icons/navbar-light-toggler-icon-bg.svg);--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb),0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-xxl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--bs-navbar-brand-color);font-size:var(--bs-navbar-brand-font-size);margin-right:var(--bs-navbar-brand-margin-end);padding-bottom:var(--bs-navbar-brand-padding-y);padding-top:var(--bs-navbar-brand-padding-y);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);color:var(--bs-navbar-color);font-size:var(--bs-navbar-toggler-font-size);line-height:1;padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.navbar[data-bs-theme=dark]{--bs-navbar-color:hsla(0,0%,100%,.55);--bs-navbar-hover-color:hsla(0,0%,100%,.75);--bs-navbar-disabled-color:hsla(0,0%,100%,.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url(/opensees-gallery/icons/navbar-dark-toggler-icon-bg.svg)}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb),0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-left:0;margin-right:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-text:last-child{margin-bottom:0}.card-img-top{width:100%}.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url(/opensees-gallery/icons/accordion-button-icon.svg);--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url(/opensees-gallery/icons/accordion-button-active-icon.svg);--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(0,50,98,.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{align-items:center;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;color:var(--bs-accordion-btn-color);display:flex;font-size:1rem;overflow-anchor:none;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);position:relative;text-align:left;transition:var(--bs-accordion-transition);width:100%}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(var(--bs-accordion-border-width)*-1) 0 var(--bs-accordion-border-color);color:var(--bs-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--bs-accordion-btn-icon-width);margin-left:auto;transition:var(--bs-accordion-btn-icon-transition);width:var(--bs-accordion-btn-icon-width)}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);color:var(--bs-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url(/opensees-gallery/icons/accordion-button-icon-dark.svg);--bs-accordion-btn-active-icon:url(/opensees-gallery/icons/accordion-button-active-icon-dark.svg)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(0,50,98,.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#003262;--bs-pagination-active-border-color:#003262;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;list-style:none;padding-left:0}.page-link{background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);color:var(--bs-pagination-color);display:block;font-size:var(--bs-pagination-font-size);padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);position:relative;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color);color:var(--bs-pagination-hover-color);z-index:2}.page-link:focus{background-color:var(--bs-pagination-focus-bg);box-shadow:var(--bs-pagination-focus-box-shadow);color:var(--bs-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color);color:var(--bs-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color);color:var(--bs-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-bottom-left-radius:var(--bs-pagination-border-radius);border-top-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-right-radius:var(--bs-pagination-border-radius);border-top-right-radius:var(--bs-pagination-border-radius)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:600;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);border-radius:var(--bs-badge-border-radius);color:var(--bs-badge-color);display:inline-block;font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}@keyframes a{0%{background-position-x:1rem}}.progress{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#003262;--bs-progress-bar-transition:width 0.6s ease;background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);display:flex;font-size:var(--bs-progress-font-size);height:var(--bs-progress-height);overflow:hidden}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url(/opensees-gallery/icons/btn-close-bg.svg);--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(0,50,98,.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;box-sizing:content-box;height:1em;opacity:var(--bs-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--bs-btn-close-color)}.btn-close:hover{opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--bs-btn-close-disabled-opacity);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);background-clip:padding-box;background-color:var(--bs-toast-bg);border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);border-radius:var(--bs-toast-border-radius);box-shadow:var(--bs-toast-box-shadow);color:var(--bs-toast-color);font-size:var(--bs-toast-font-size);max-width:100%;pointer-events:auto;width:var(--bs-toast-max-width)}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:-moz-max-content;width:max-content;z-index:var(--bs-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--bs-toast-header-bg);border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));color:var(--bs-toast-header-color);display:flex;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x)}.toast-header .btn-close{margin-left:var(--bs-toast-padding-x);margin-right:calc(var(--bs-toast-padding-x)*-.5)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-tooltip-font-size);font-style:normal;font-weight:300;letter-spacing:normal;line-break:auto;line-height:1.5;margin:var(--bs-tooltip-margin);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-tooltip-zindex);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--bs-tooltip-arrow-height);width:var(--bs-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--bs-tooltip-bg);border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--bs-tooltip-arrow-width);left:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--bs-tooltip-bg);border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--bs-tooltip-arrow-width);right:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius);color:var(--bs-tooltip-color);max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);text-align:center}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:2rem;width:2rem}.carousel-control-prev-icon{background-image:url(/opensees-gallery/icons/carousel-control-prev-icon-bg.svg)}.carousel-control-next-icon{background-image:url(/opensees-gallery/icons/carousel-control-next-icon-bg.svg)}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(0) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#fff}.carousel-dark .carousel-caption{color:#fff}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(0) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#fff}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#fff}@keyframes b{to{transform:rotate(1turn)}}@keyframes c{0%{transform:scale(0)}50%{opacity:1;transform:none}}.offcanvas{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}.offcanvas{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas.show:not(.hiding){transform:none}.offcanvas.show{visibility:visible}.offcanvas-header{align-items:center;display:flex;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{margin:calc(var(--bs-offcanvas-padding-y)*-.5) calc(var(--bs-offcanvas-padding-x)*-.5) calc(var(--bs-offcanvas-padding-y)*-.5) auto;padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}@keyframes d{50%{opacity:.2}}@keyframes e{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.text-bg-info{background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-warning{background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.fixed-top{top:0}.fixed-top{left:0;position:fixed;right:0;z-index:1030}.sticky-top{top:0}.sticky-top{position:sticky;z-index:1020}.hstack{align-items:center;flex-direction:row}.hstack{align-self:stretch;display:flex}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.25;width:var(--bs-border-width)}@media (min-width:576px){.d-sm-block{display:block!important}}@media (min-width:768px){.d-md-block{display:block!important}.d-md-none{display:none!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.ms-md-3{margin-left:1rem!important}.pt-md-0{padding-top:0!important}.pt-md-3{padding-top:1rem!important}}@media (min-width:992px){.d-lg-block{display:block!important}.mt-lg-0{margin-top:0!important}.mb-lg-5{margin-bottom:3rem!important}}@media (min-width:1400px){.px-xxl-0{padding-left:0!important;padding-right:0!important}}@media (min-width:1200px){.fs-3{font-size:1.75rem!important}}[data-bs-theme=dark]{--bs-primary:#6684a1;--bs-secondary:#a7acb1;--bs-primary-dark:#00284e;--bs-primary-bg-subtle:#00284e;--bg-primary-subtle:rgba(var(--bs-primary-rgb),var(--bs-link-opacity,0.1))}[data-bs-theme=dark] .accordion-button{background-color:var(--bg-primary-subtle)}[data-bs-theme=dark] .btn-outline-primary{--bs-btn-color:var(--bs-primary);--bs-btn-border-color:var(--bs-primary);--bs-btn-hover-bg:var(--bs-primary);--bs-btn-hover-border-color:var(--bs-primary);--bs-btn-active-bg:var(--bs-primary);--bs-btn-active-border-color:var(--bs-primary);--bs-btn-disabled-color:var(--bs-primary);--bs-btn-disabled-border-color:var(--bs-primary)}[data-bs-theme=dark] .btn-outline-secondary{--bs-btn-color:var(--bs-secondary);--bs-btn-border-color:var(--bs-secondary);--bs-btn-hover-bg:var(--bs-secondary);--bs-btn-hover-border-color:var(--bs-secondary);--bs-btn-active-bg:var(--bs-secondary);--bs-btn-active-border-color:var(--bs-secondary);--bs-btn-disabled-color:var(--bs-secondary);--bs-btn-disabled-border-color:var(--bs-secondary)}[data-bs-theme=dark] .pagination{--bs-pagination-color:var(--bs-body-bg);--bs-pagination-bg:var(--bs-primary)}[data-bs-theme=dark] .progress{--bs-progress-bar-bg:var(--bs-primary)}[data-bs-theme=dark] .clipboard-button:hover{color:var(--bs-primary)}[data-bs-theme=dark] .clipboard-button:hover>svg{fill:var(--bs-primary)}[data-bs-theme=dark] .toggler-icon{background-color:var(--bs-primary)}[data-bs-theme=dark] .heading:hover .anchor{color:var(--bs-primary)}@media (hover:none){abbr[title]{position:relative;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}abbr[title]:focus:after,abbr[title]:hover:after{background-color:var(--bs-body-bg);border-radius:3px;bottom:-30px;box-shadow:1px 1px 5px 0 rgba(0,0,0,.4);color:var(--bs-tooltip-color);content:attr(title);font-size:14px;left:0;padding:3px 5px;position:absolute;white-space:nowrap;width:auto}}.blockquote{border-left:.3rem solid;border-color:#6c757d;padding:1rem 1.5rem}.blockquote-alert{--bs-blockquote-alert-color:$secondary;border-left:.3rem solid;border-color:var(--bs-blockquote-alert-color);padding:.5rem 1.5rem}.blockquote-alert>p:nth-of-type(2){margin-bottom:0}.blockquote-alert-heading{color:var(--bs-blockquote-alert-color);font-weight:700}.blockquote-alert-important{--bs-blockquote-alert-color:var(--bs-primary)}.blockquote-alert-note{--bs-blockquote-alert-color:var(--bs-info)}.btn-outline-primary:hover,.btn-primary.active,.btn-primary:active,.btn-primary:focus{color:#fff!important}a.btn{margin-bottom:.25rem;margin-top:.25rem}.btn-close{background-color:transparent!important;background-image:var(--bs-btn-close-bg)!important;background-position:50%!important;background-repeat:no-repeat!important;background-size:1em!important}.card-img-bg{background-color:var(--bs-secondary-bg)}.card .card-img-wrap{overflow:hidden;position:relative}.card .card-img-wrap:has(.card-img-top){border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card .card-img-wrap:has(.card-img-bottom){border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-img-wrap img{transition:transform .25s ease;width:100%}.card-icon{color:#6c757d}.card-body-margin{margin-bottom:1.5rem}.card .tag-link{position:relative;z-index:2}.clipboard-button{background-color:transparent;border-style:none;color:#6c757d;font-size:.8em;margin:5px;opacity:0;padding:2px 7px 5px;position:absolute;right:0;transition:.1s;z-index:1}.clipboard-button>svg{fill:#6c757d}.clipboard-button:hover{color:#003262;cursor:pointer}.clipboard-button:hover>svg{fill:#003262}.clipboard-button:focus{outline:0}.highlight{position:relative}.highlight:hover>.clipboard-button{opacity:1;transition:.2s}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.command-line-prompt>span:before{content:" ";display:block;opacity:.7;padding-right:.8em}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7}.footer,.link-bg-footer{color:var(--bs-secondary)!important}.link-bg-footer:focus,.link-bg-footer:hover{color:var(--bs-tertiary-color)!important}[data-bs-theme=dark] .footer,[data-bs-theme=dark] .link-bg-footer{color:#adb5bd!important}.nav-tabs>.nav-link.active{border-bottom-color:var(--bs-body-bg)!important;border-bottom-style:solid!important;z-index:1}.nav-callout{--bs-nav-callout-bg:var(--bs-light);--bs-nav-callout-active-bg:var(--bs-primary-bg-subtle);--bs-nav-callout-gap:1rem;-moz-column-gap:var(--bs-nav-callout-gap)!important;column-gap:var(--bs-nav-callout-gap)!important}.nav-callout>.tab-content{background-color:var(--bs-nav-callout-bg);margin-top:0!important;padding:2rem}.nav-callout>.nav-link{border-bottom:none;border-radius:0;display:flex;padding:0 0 4rem;text-align:start;vertical-align:text-top}.nav-callout>.nav-link.active{background-image:linear-gradient(to top right,var(--bs-nav-callout-bg) 50%,transparent 0);background-position:50% bottom;background-repeat:no-repeat;background-size:50% 3rem;color:var(--bs-nav-underline-link-active-color);font-weight:600}.nav-callout .accordion-button{background-color:var(--bs-nav-callout-bg)!important;border:solid;border-color:var(--bs-border-color);border-radius:var(--bs-accordion-inner-border-radius)!important;margin-bottom:0}.nav-callout .accordion-button:focus{border-bottom:none!important;box-shadow:none}.nav-callout .accordion-button:not(.collapsed){box-shadow:none}.nav-callout>.accordion-item{border:none;margin-bottom:2rem;margin-top:2rem}.nav-callout .accordion-button[aria-expanded=false]{border-bottom:solid!important;border-color:var(--bs-border-color)!important;border-radius:var(--bs-accordion-inner-border-radius)}.nav-callout .accordion-button[aria-expanded=true]{background-image:linear-gradient(to top right,var(--bs-nav-callout-active-bg) 50%,transparent 0);background-position:10% bottom;background-repeat:no-repeat;background-size:10% 2.5rem;border-color:var(--bs-border-color)!important;border-bottom:none!important;border-radius:var(--bs-accordion-inner-border-radius) var(--bs-accordion-inner-border-radius) 0 0!important;padding-bottom:3rem}.nav-callout .accordion-collapse{background-color:var(--bs-nav-callout-active-bg)!important;border-bottom:solid;border-left:solid;border-radius:0 0 var(--bs-accordion-inner-border-radius) var(--bs-accordion-inner-border-radius);border-right:solid;border-top:none!important;border-color:var(--bs-border-color)}[data-bs-theme=dark] .nav-callout{--bs-nav-callout-bg:var(--bs-tertiary-bg)}[data-bs-theme=dark] .nav-callout .accordion-button[aria-expanded=true]{background-image:linear-gradient(to top right,#000f1d 50%,transparent 0)}[data-bs-theme=dark] .nav-callout .accordion-collapse{background-color:#000f1d!important}.checkbox{opacity:0;position:absolute}.mode-switch{--bs-mode-switch-width:50px}.mode-switch .label{align-items:center;border-color:var(--bs-border-color);border-radius:var(--bs-mode-switch-width);border-style:solid;border-width:1px;cursor:pointer;display:flex;height:calc(1px + var(--bs-mode-switch-width)/2);justify-content:space-between;padding:5px;position:relative;transform:scale(.9);width:var(--bs-mode-switch-width)}.notransition{transition:none!important}.mode-switch .label .ball{background-color:var(--bs-border-color);border-radius:50%;height:calc(var(--bs-mode-switch-width)/2 - 5px);left:2px;position:absolute;top:2px;transition:transform .2s linear;width:calc(var(--bs-mode-switch-width)/2 - 5px)}.mode-switch .checkbox:checked+.label .ball,[data-bs-theme=light] .mode-switch .ball{transform:translateX(calc(var(--bs-mode-switch-width)/2 - 1px))}.mode-switch .fa-moon{color:#ffc107;transform:scale(.8)}.mode-switch .fa-sun{color:var(--bs-bs-body-color);transform:scale(.8)}.navbar{--bs-navbar-expanded-color:var(--bs-body-bg);--bs-navbar-toggler-color:var(--bs-navbar-hover-color);background-color:transparent;--bs-navbar-color-primary:#003262;--bs-navbar-color-secondary:#6c757d;--bs-navbar-color-success:#198754;--bs-navbar-color-info:#0dcaf0;--bs-navbar-color-warning:#ffc107;--bs-navbar-color-danger:#dc3545;--bs-navbar-color-light:#f8f9fa;--bs-navbar-color-dark:#212529}.nav-active,.navbar-expanded{background-color:var(--bs-navbar-expanded-color);border-bottom:1px solid var(--bs-secondary-bg)}.nav-link{margin:0 .15rem}.navbar-title{display:inline-block;padding:0 1rem;text-align:center!important;vertical-align:middle;white-space:normal;width:100%!important}.navbar-contrast .nav-link.active,.navbar-contrast .nav-link.show,.navbar-contrast .nav-link:hover{border-bottom:1px solid var(--bs-navbar-hover-color);margin-bottom:-1px}.navbar-contrast{--bs-navbar-color:#fff!important;--bs-navbar-hover-color:#fff!important;--bs-navbar-disabled-color:#fff!important;--bs-navbar-active-color:#fff!important;--bs-navbar-toggler-color:#fff}.navbar-contrast .mode-switch,.navbar-contrast .navbar-title{--bs-border-color:#fff;color:#fff!important}.navbar-contrast .mode-switch .fa-moon{color:#fff}.navbar-expanded{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.nav-item .vr{color:var(--bs-navbar-color)}.navbar-toggler{border:0!important}.navbar-toggler-icon:focus,.navbar-toggler:active,.navbar-toggler:focus{border:0!important;box-shadow:none!important;outline:none!important}.fw-30{width:30px!important}.toggler-icon{display:block;height:3px;transition:all .2s;width:30px}.middle-bar{margin:5px auto}.navbar-toggler .top-bar{transform:rotate(45deg);transform-origin:10% 10%}.navbar-toggler .middle-bar{filter:alpha(opacity=0);opacity:0}.navbar-toggler .bottom-bar{transform:rotate(-45deg);transform-origin:10% 90%}.navbar-toggler.collapsed .top-bar{transform:rotate(0)}.navbar-toggler.collapsed .middle-bar{filter:alpha(opacity=100);opacity:1}.navbar-toggler.collapsed .bottom-bar{transform:rotate(0)}.emphasis,.navbar-toggler.collapsed .toggler-icon{background-color:var(--bs-navbar-toggler-color)}[data-bs-theme=dark] .emphasis{background-color:#fff!important}.navbar .dropdown-divider-bg{color:var(--bs-navbar-color)}:root{--dropdown-horizontal-bg:var(--bs-light);--navbar-offset:5.5em}.navbar-container{width:100%!important}.navbar-brand{margin-right:0}@media (min-width:992px){:root{--navbar-offset:5.5em}.navbar-container{width:auto!important}.navbar-title{padding:0;text-align:initial!important}.navbar-brand{margin-right:var(--bs-navbar-brand-margin-end)}}[data-bs-theme=dark]{--dropdown-horizontal-bg:var(--bs-tertiary-bg)}.dropdown-horizontal{position:static!important}.dropdown-horizontal>.dropdown-menu{background-color:var(--dropdown-horizontal-bg)!important;border:0;border-radius:0;box-shadow:.125rem .25rem rgba(0,0,0,.075);display:block;height:auto;margin-top:calc(-1.5rem - 2px);opacity:0;padding-bottom:calc(1rem + 2px);padding-top:calc(1rem + 2px);text-align:center;transition:opacity .15s ease-in-out;visibility:hidden;width:100%}@media (prefers-reduced-motion:reduce){.dropdown-horizontal>.dropdown-menu{transition:none}}.dropdown-horizontal>.dropdown-menu.show{opacity:1;visibility:visible}.dropdown-horizontal>.dropdown-menu>li{display:inline-block;padding-left:1rem;padding-right:1rem}.dropdown-horizontal>.dropdown-menu>li>a{padding-left:.25rem;padding-right:.25rem}.dropdown-horizontal>.dropdown-menu>li>a.active,.dropdown-horizontal>.dropdown-menu>li>a:focus,.dropdown-horizontal>.dropdown-menu>li>a:hover{background-color:transparent;border-bottom:1px solid var(--bs-navbar-hover-color);color:var(--bs-body-color);margin-bottom:-1px}.dropdown-horizontal>.nav-link.show{background-color:var(--dropdown-horizontal-bg)!important}.navbar-overlay{position:absolute;z-index:1030}.img-wrap{overflow:hidden;position:relative}.img-wrap img{width:100%}.img-wrap img{height:100%;-o-object-fit:cover;object-fit:cover}.pagination{--bs-pagination-bg:var(--bs-primary-bg-subtle);--bs-pagination-color:var(--bs-body-color);--bs-pagination-border-color:none;--bs-pagination-hover-color:var(--bs-pagination-active-color);--bs-pagination-hover-bg:var(--bs-pagination-active-bg);--bs-pagination-hover-border-color:none}.pagination .page-item{margin:.4rem}.sidebar,.sidebar-overflow{top:var(--navbar-offset)}.sidebar-overflow{max-height:90vh;overflow-y:auto}.sidebar-item{color:rgba(0,0,0,.65);display:inline-block;margin-left:0!important;padding-left:.85rem!important}.sidebar-item.active,.sidebar-item:focus,.sidebar-item:hover{color:#000}.btn-toggle{background-color:transparent;color:rgba(0,0,0,.65);font-weight:600;padding:.25rem .5rem}.btn-toggle:focus,.btn-toggle:hover{background-color:#e6ebef;color:#000}.btn-toggle:before{content:url(/opensees-gallery/icons/btn-toggle.svg);line-height:0;transform-origin:.5em 50%;transition:transform .35s ease;width:1.25em}.btn-toggle[aria-expanded=true]{color:#000}.btn-toggle[aria-expanded=true]:before{transform:rotate(90deg)}.btn-toggle-nav a{margin-left:1.25rem;margin-top:.125rem;padding:.1875rem .5rem}.btn-toggle-nav a:focus,.btn-toggle-nav a:hover{background-color:#e6ebef}.btn-toggle-nav a.active{font-weight:700}[data-bs-theme=dark] .sidebar-item{color:var(--bs-body-color);margin-left:0!important;padding-left:.85rem!important}[data-bs-theme=dark] .sidebar-item.active,[data-bs-theme=dark] .sidebar-item:focus,[data-bs-theme=dark] .sidebar-item:hover{background-color:transparent;color:#fff!important}[data-bs-theme=dark] .btn-toggle{color:var(--bs-body-color)}[data-bs-theme=dark] .btn-toggle:focus,[data-bs-theme=dark] .btn-toggle:hover{background-color:transparent;color:#fff!important}[data-bs-theme=dark] .btn-toggle:before{content:url(/opensees-gallery/icons/btn-toggle-dark.svg)}[data-bs-theme=dark] .btn-toggle[aria-expanded=true]{color:var(--bs-secondary-color)}[data-bs-theme=dark] .btn-toggle-nav a{margin-left:1.25rem;margin-top:.125rem;padding:.1875rem .5rem}[data-bs-theme=dark] .btn-toggle-nav a:focus,[data-bs-theme=dark] .btn-toggle-nav a:hover{background-color:transparent;color:#fff!important}[data-bs-theme=dark] .btn-toggle-nav a.active{font-weight:700}.dropdown-toggle{outline:0}.bg,.chroma{background-color:#fff}.chroma .err{background-color:#e3d2d2;color:#a61717}.chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.chroma .lntd{border:0;margin:0;padding:0;vertical-align:top}.chroma .lntable{border:0;border-spacing:0;margin:0;padding:0}.chroma .hl{background-color:#ffc}.chroma .ln,.chroma .lnt{color:#7f7f7f;margin-right:.4em;padding:0 .4em;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:pre}.chroma .line{display:flex}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#000;font-weight:700}.chroma .kt{color:#458;font-weight:700}.chroma .na{color:teal}.chroma .nb{color:#006b8f}.chroma .bp{color:#999}.chroma .nc{color:#458;font-weight:700}.chroma .no{color:teal}.chroma .nd{color:#3c5d5d;font-weight:700}.chroma .ni{color:purple}.chroma .ne,.chroma .nf,.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi{color:teal}.chroma .dl,.chroma .s,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx{color:#d14}.chroma .sr{color:#009926}.chroma .s1{color:#d14}.chroma .ss{color:#990073}.chroma .il,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo{color:#007a7a}.chroma .o,.chroma .ow{color:#000;font-weight:700}.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm{color:#6d6d5d;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .cs{color:#999;font-style:italic;font-weight:700}.chroma .gd{background-color:#fdd;color:#000}.chroma .ge{color:#000;font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{background-color:#dfd;color:#000}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .gl{text-decoration:underline}.chroma .w{color:#bbb}.bg,.chroma,.chroma .err{background-color:transparent!important}.chroma{display:flex}.chroma code{flex:1}.syntax-highlight{background-color:var(--bs-light)!important;overflow-x:auto}[data-bs-theme=dark] .bg,[data-bs-theme=dark] .chroma{background-color:#0d1117;color:#c9d1d9}[data-bs-theme=dark] .chroma .err{color:#f85149}[data-bs-theme=dark] .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}[data-bs-theme=dark] .chroma .lntd{border:0;margin:0;padding:0;vertical-align:top}[data-bs-theme=dark] .chroma .lntable{border:0;border-spacing:0;margin:0;padding:0}[data-bs-theme=dark] .chroma .hl{background-color:#373700}[data-bs-theme=dark] .chroma .lnt{color:#64686c}[data-bs-theme=dark] .chroma .ln,[data-bs-theme=dark] .chroma .lnt{margin-right:.4em;padding:0 .4em;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:pre}[data-bs-theme=dark] .chroma .ln{color:#999fa8}[data-bs-theme=dark] .chroma .line{display:flex}[data-bs-theme=dark] .chroma .k{color:#ff7b72}[data-bs-theme=dark] .chroma .kc{color:#79c0ff}[data-bs-theme=dark] .chroma .kd,[data-bs-theme=dark] .chroma .kn{color:#ff7b72}[data-bs-theme=dark] .chroma .kp{color:#79c0ff}[data-bs-theme=dark] .chroma .kr,[data-bs-theme=dark] .chroma .kt{color:#ff7b72}[data-bs-theme=dark] .chroma .na{color:#0cc}[data-bs-theme=dark] .chroma .nb{color:#00a2d8}[data-bs-theme=dark] .chroma .nc{color:#f0883e;font-weight:700}[data-bs-theme=dark] .chroma .no{color:#79c0ff;font-weight:700}[data-bs-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:700}[data-bs-theme=dark] .chroma .ni{color:#ffa657}[data-bs-theme=dark] .chroma .ne{color:#f0883e;font-weight:700}[data-bs-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:700}[data-bs-theme=dark] .chroma .nl{color:#79c0ff;font-weight:700}[data-bs-theme=dark] .chroma .nn{color:#ff7b72}[data-bs-theme=dark] .chroma .py{color:#79c0ff}[data-bs-theme=dark] .chroma .nt{color:#7ee787}[data-bs-theme=dark] .chroma .nv{color:#79c0ff}[data-bs-theme=dark] .chroma .l{color:#a5d6ff}[data-bs-theme=dark] .chroma .ld{color:#79c0ff}[data-bs-theme=dark] .chroma .s{color:#a5d6ff}[data-bs-theme=dark] .chroma .sa{color:#79c0ff}[data-bs-theme=dark] .chroma .sb,[data-bs-theme=dark] .chroma .sc{color:#a5d6ff}[data-bs-theme=dark] .chroma .dl{color:#79c0ff}[data-bs-theme=dark] .chroma .s2,[data-bs-theme=dark] .chroma .sd{color:#a5d6ff}[data-bs-theme=dark] .chroma .se,[data-bs-theme=dark] .chroma .sh{color:#79c0ff}[data-bs-theme=dark] .chroma .si,[data-bs-theme=dark] .chroma .sx{color:#a5d6ff}[data-bs-theme=dark] .chroma .sr{color:#79c0ff}[data-bs-theme=dark] .chroma .il,[data-bs-theme=dark] .chroma .m,[data-bs-theme=dark] .chroma .mb,[data-bs-theme=dark] .chroma .mf,[data-bs-theme=dark] .chroma .mh,[data-bs-theme=dark] .chroma .mi,[data-bs-theme=dark] .chroma .mo,[data-bs-theme=dark] .chroma .s1,[data-bs-theme=dark] .chroma .ss{color:#a5d6ff}[data-bs-theme=dark] .chroma .o,[data-bs-theme=dark] .chroma .ow{color:#ff7b72;font-weight:700}[data-bs-theme=dark] .chroma .c,[data-bs-theme=dark] .chroma .c1,[data-bs-theme=dark] .chroma .ch,[data-bs-theme=dark] .chroma .cm{color:#979fa8;font-style:italic}[data-bs-theme=dark] .chroma .cp,[data-bs-theme=dark] .chroma .cpf,[data-bs-theme=dark] .chroma .cs{color:#979fa8;font-style:italic;font-weight:700}[data-bs-theme=dark] .chroma .gd{background-color:#490202;color:#ffa198}[data-bs-theme=dark] .chroma .ge{font-style:italic}[data-bs-theme=dark] .chroma .gr{color:#ffa198}[data-bs-theme=dark] .chroma .gh{color:#79c0ff;font-weight:700}[data-bs-theme=dark] .chroma .gi{background-color:#0f5323;color:#56d364}[data-bs-theme=dark] .chroma .go,[data-bs-theme=dark] .chroma .gp{color:#979fa8}[data-bs-theme=dark] .chroma .gs{font-weight:700}[data-bs-theme=dark] .chroma .gu{color:#79c0ff}[data-bs-theme=dark] .chroma .gt{color:#ff7b72}[data-bs-theme=dark] .chroma .gl{text-decoration:underline}[data-bs-theme=dark] .chroma .w{color:#999fa8}[data-bs-theme=dark] .bg,[data-bs-theme=dark] .chroma,[data-bs-theme=dark] .chroma .err{background-color:transparent!important}[data-bs-theme=dark] .syntax-highlight{background-color:var(--bs-tertiary-bg)!important;overflow-x:auto}[data-bs-theme=dark] .bg,[data-bs-theme=dark] .chroma,[data-bs-theme=dark] .chroma .ge,[data-bs-theme=dark] .chroma .gl,[data-bs-theme=dark] .chroma .gs{color:#c9d1d9!important}.datatable-container{border-bottom:none!important}.datatable-bottom{padding-top:0!important}.datatable-sorter{padding-left:0;padding-right:1rem}:root{--timeline-highlight:var(--bs-primary);--timeline-icon-radius:8rem;--timeline-offset:50%;--timeline-connector-bg:var(--bs-body-bg)}.timeline-info{--timeline-highlight:var(--bs-info)}.timeline-warning{--timeline-highlight:var(--bs-warning)}.timeline,.timeline-sm{position:relative}.timeline-sm{--timeline-icon-radius:3.33333rem;--timeline-offset:25%}@media (min-width:576px){.timeline-sm{--timeline-icon-radius:4rem}}.timeline-sm:before,.timeline:before{background:var(--bs-body-color);content:"";inset:0;margin:0 auto;position:absolute;width:.4rem}.timeline-sm:before{margin:0 calc(var(--timeline-offset) - .2rem)}.timeline-semi-circle-end,.timeline-semi-circle-start{border-radius:100%;height:var(--timeline-icon-radius);position:relative;width:var(--timeline-icon-radius)}.timeline-semi-circle-start{left:-.2rem}.timeline-semi-circle-end{left:.2rem}.timeline-semi-circle-start:before{border:.2rem solid;border-color:transparent var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight);border-radius:100%;transform:rotate(-90deg)}.timeline-semi-circle-start:after,.timeline-semi-circle-start:before{content:"";height:var(--timeline-icon-radius);position:absolute;width:var(--timeline-icon-radius)}.timeline-semi-circle-start:after{border:.2rem solid;border-color:var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight) transparent;border-radius:100%;left:0;top:0;transform:rotate(-45deg)}.timeline-semi-circle-end:before{border:.2rem solid;border-color:transparent var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight);border-radius:100%;transform:rotate(-225deg)}.timeline-semi-circle-end:after,.timeline-semi-circle-end:before{content:"";height:var(--timeline-icon-radius);position:absolute;width:var(--timeline-icon-radius)}.timeline-semi-circle-end:after{border:.2rem solid;border-color:var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight) transparent;border-radius:100%;left:0;top:0;transform:rotate(-180deg)}.timeline-description-text-start{border-bottom:.2rem solid var(--timeline-highlight);margin-right:1.6rem}.timeline-description-text-end{border-bottom:.2rem solid var(--timeline-highlight);margin-left:1.6rem}.timeline-connector-end,.timeline-connector-start,.timeline-panel-end,.timeline-panel-start{border:none;border-top:.2rem solid var(--timeline-highlight);height:calc(.2rem + var(--timeline-icon-radius)/2);position:relative;top:calc(var(--timeline-icon-radius)/2);width:calc(var(--timeline-icon-radius)/2)}.timeline-panel-start{border-left:.2rem solid var(--timeline-highlight);right:50%}.timeline-panel-end,.timeline-panel-start{border-top:.2rem solid var(--timeline-highlight);height:50%;position:absolute;top:50%;width:calc(var(--timeline-icon-radius)*2);width:1.6rem}.timeline-panel-end{border-right:.2rem solid var(--timeline-highlight)}.timeline-dot:after{background:var(--timeline-highlight);border:.3rem solid var(--timeline-connector-bg);border-radius:100%;color:var(--timeline-highlight);content:"";display:inline-block;height:1.6rem;left:var(--timeline-offset);margin:-.8rem 0 0 -.8rem;position:absolute;top:50%;width:1.6rem}.toc-sidebar{grid-area:a;height:calc(100vh - 5rem);overflow-y:auto;right:0;top:5rem;z-index:2}.toc nav{font-size:.875rem;margin-bottom:-.875rem}.toc nav ul{list-style:none;padding-left:0}.toc nav ul ul{margin-top:.25rem;padding-left:1rem}.toc nav li{margin-bottom:.25rem}.toc nav a{color:inherit}.toc nav a:hover{color:var(--bs-primary)}.toc nav a:not(:hover){text-decoration:none}.toc nav a code{font:inherit}#toc-collapse{border-color:var(--bs-secondary-color)!important;border-radius:0 0 var(--bs-border-radius) var(--bs-border-radius)!important;margin-top:-1.5rem;padding-top:1.5rem!important}.toc-button{--bs-btn-hover-color:var(--bs-primary);--bs-btn-hover-bg:var(--bs-body-bg);--bs-btn-hover-border-color:var(--bs-primary);--bs-btn-active-color:var(--bs-primary);--bs-btn-active-bg:var(--bs-body-bg);--bs-btn-active-border-color:var(--bs-primary);background-color:var(--bs-body-bg)!important}.toc-button.active,.toc-button:focus,.toc-button:hover{border-color:var(--bs-primary);box-shadow:0 0 0 4px var(--bs-primary-border-subtle);color:var(--bs-primary);outline:none}[data-bs-theme=dark] .toc-button{--bs-btn-color:var(--bs-body-color);--bs-btn-border-color:var(--bs-body-color)}[data-bs-theme=dark] .toc-button:hover{background-color:transparent}[data-bs-theme=dark] #toc-collapse{border-color:var(--bs-body-color)!important}[data-bs-theme=dark] .toc nav a{color:var(--bs-body-color)}[data-bs-theme=dark] .toc nav a:hover{color:#fff}.rotate-5{transform:rotate(5deg)}@media (prefers-reduced-motion:no-preference){.reveal{animation-iteration-count:1;opacity:0;position:relative}.reveal.active{opacity:1}.active.fade-bottom{animation:f 1s ease-in}.active.fade-bottom-5{animation:g 1s ease-in}@keyframes f{0%{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}@keyframes g{0%{opacity:0;transform:translateY(50px) rotate(5deg)}to{opacity:1;transform:translateY(0) rotate(5deg)}}@keyframes h{0%{opacity:0;transform:translateY(50px) rotate(-5deg)}to{opacity:1;transform:translateY(0) rotate(-5deg)}}@keyframes i{0%{opacity:0;transform:translateX(-100px)}to{opacity:1;transform:translateX(0)}}@keyframes j{0%{opacity:0;transform:translateX(100px)}to{opacity:1;transform:translateX(0)}}}a:active,a:hover,a:link,a:visited{text-decoration:none}.main{min-height:100vh}.fullcover{--navbar-height:5.5em;min-height:calc(100vh - var(--navbar-height))}.fullscreen{--overlay-offset:5.5em;min-height:calc(100vh - var(--overlay-offset))}.main-content{margin-top:var(--navbar-offset)}.tickmark li::marker{content:"✓ "}.anchor{color:transparent}.heading:hover .anchor{color:#003262;transition:.25s ease-in-out}@media screen and (orientation:portrait){.min-vh-custom{min-height:25vh!important}}@media screen and (orientation:landscape){.min-vh-custom{min-height:50vh!important}}:root{--nav-height:90px}@media (min-width:576px){.ratio-section{min-height:calc(min(100vh, 576px) - var(--nav-height))}}@media (min-width:768px){.ratio-section{min-height:calc(min(100vh, 768px) - var(--nav-height))}}@media (min-width:992px){.ratio-section{min-height:calc(min(100vh, 992px) - var(--nav-height))}}@media (min-width:1200px){.ratio-section{min-height:calc(min(100vh, 1200px) - var(--nav-height))}}@media (min-width:1400px){.ratio-section{min-height:calc(min(100vh, 1400px) - var(--nav-height))}}.main-cover{min-height:100vh}@media (min-width:1400px){.main-cover{min-height:min(100vh,1000px)}}@media (min-height:1400px){.main-cover{min-height:min(100vh,1000px)}}pre{margin-bottom:0;padding:1rem}.h1,h1{margin-top:2.5rem}.h1,.h2,h1,h2{scroll-margin-top:var(--navbar-offset)}.h2,h2{margin-top:2rem}.h3,h3{margin-top:1.75rem}.h3,.h4,h3,h4{scroll-margin-top:var(--navbar-offset)}.h4,h4{margin-top:1.5rem}.h5,h5{margin-top:1.25rem}.h5,.h6,h5,h6{scroll-margin-top:var(--navbar-offset)}.h6,h6{margin-top:1rem}.display-1,.display-4{scroll-margin-top:var(--navbar-offset)}.link-bg-info{color:#000!important}.link-bg-info:focus,.link-bg-info:hover{color:#333!important}.link-bg-warning{color:#000!important}.link-bg-warning:focus,.link-bg-warning:hover{color:#333!important}.link-bg-body-tertiary{color:var(--bs-body-color)!important}.link-bg-body-tertiary:focus,.link-bg-body-tertiary:hover{color:var(--bs-secondary-color)!important}.hidden{display:none}.d-none-light{display:none!important}.d-none-dark{display:block!important}[data-bs-theme=dark] .d-none-light{display:block!important}[data-bs-theme=dark] .d-none-dark{display:none!important} + */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#003262;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:0,50,98;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#001427;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#ccd6e0;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#99adc0;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:Inter,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:300;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33,37,41,.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33,37,41,.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#003262;--bs-link-color-rgb:0,50,98;--bs-link-decoration:underline;--bs-link-hover-color:#00284e;--bs-link-hover-color-rgb:0,40,78;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0,0,0,.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0,0,0,.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0,0,0,.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(0,50,98,.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6684a1;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#002d58;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6684a1;--bs-link-hover-color:#859db4;--bs-link-color-rgb:102,132,161;--bs-link-hover-color-rgb:133,157,180;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{background-color:var(--bs-body-bg);color:var(--bs-body-color);font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);margin:0;text-align:var(--bs-body-text-align);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{border:0;border-top:var(--bs-border-width) solid;color:inherit;margin:1rem 0;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--bs-heading-color);font-weight:600;line-height:1.2;margin-bottom:.5rem;margin-top:0}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{background-color:var(--bs-highlight-bg);color:var(--bs-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;font-size:.875em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{color:var(--bs-code-color);font-size:.875em;word-wrap:break-word}a>code{color:inherit}kbd{background-color:var(--bs-body-color);border-radius:.25rem;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.list-unstyled{list-style:none;padding-left:0}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.img-fluid{height:auto;max-width:100%}.figure{display:inline-block}.container,.container-fluid,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}@media (min-width:1400px){.container,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.col{flex:1 0 0%}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-6{flex:0 0 auto;width:50%}.col-9{flex:0 0 auto;width:75%}.col-12{flex:0 0 auto;width:100%}.g-0{--bs-gutter-x:0}.g-0{--bs-gutter-y:0}.g-4{--bs-gutter-x:1.5rem}.g-4{--bs-gutter-y:1.5rem}@media (min-width:576px){.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-12{flex:0 0 auto;width:100%}}@media (min-width:768px){.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-6{flex:0 0 auto;width:50%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}}@media (min-width:992px){.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-8{flex:0 0 auto;width:66.66666667%}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb),0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb),0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb),0.075);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-clip:padding-box;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:300;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{background-color:var(--bs-body-bg);border-color:#8099b1;box-shadow:0 0 0 .25rem rgba(0,50,98,.25);color:var(--bs-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.5em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{background-color:var(--bs-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--bs-border-width);border-radius:0;color:var(--bs-body-color);margin:-.375rem -.75rem;margin-inline-end:.75rem;padding:.375rem .75rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}textarea.form-control{min-height:calc(1.5em + .75rem + var(--bs-border-width)*2)}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:300;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb),.5);background-color:var(--bs-btn-bg);border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);color:var(--bs-btn-color);cursor:pointer;display:inline-block;font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);color:var(--bs-btn-hover-color)}.btn:focus-visible{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);color:var(--bs-btn-hover-color);outline:0}.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color);color:var(--bs-btn-active-color)}.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);color:var(--bs-btn-disabled-color);opacity:var(--bs-btn-disabled-opacity);pointer-events:none}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#003262;--bs-btn-border-color:#003262;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#002b53;--bs-btn-hover-border-color:#00284e;--bs-btn-focus-shadow-rgb:38,81,122;--bs-btn-active-color:#fff;--bs-btn-active-bg:#00284e;--bs-btn-active-border-color:#00264a;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#003262;--bs-btn-disabled-border-color:#003262}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-outline-primary{--bs-btn-color:#003262;--bs-btn-border-color:#003262;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#003262;--bs-btn-hover-border-color:#003262;--bs-btn-focus-shadow-rgb:0,50,98;--bs-btn-active-color:#fff;--bs-btn-active-bg:#003262;--bs-btn-active-border-color:#003262;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#003262;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#003262;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#003262;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;background-clip:padding-box;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);color:var(--bs-dropdown-color);display:none;font-size:var(--bs-dropdown-font-size);list-style:none;margin:0;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);position:absolute;text-align:left;z-index:var(--bs-dropdown-zindex)}.dropdown-menu[data-bs-popper]{left:0;margin-top:var(--bs-dropdown-spacer);top:100%}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--bs-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--bs-dropdown-spacer);margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--bs-dropdown-spacer);margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--bs-dropdown-divider-bg);height:0;margin:var(--bs-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0);clear:both;color:var(--bs-dropdown-link-color);display:block;font-weight:300;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);text-align:inherit;text-decoration:none;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--bs-dropdown-link-hover-bg);color:var(--bs-dropdown-link-hover-color)}.dropdown-item.active,.dropdown-item:active{background-color:var(--bs-dropdown-link-active-bg);color:var(--bs-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--bs-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--bs-dropdown-header-color);display:block;font-size:.875rem;margin-bottom:0;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--bs-dropdown-link-color);display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:hsla(0,0%,100%,.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#003262;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{background:none;border:0;color:var(--bs-nav-link-color);display:block;font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{box-shadow:0 0 0 .25rem rgba(0,50,98,.25);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius);margin-bottom:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--bs-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color);color:var(--bs-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--bs-nav-tabs-border-width)*-1)}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb),0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb),0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb),0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url(/opensees-gallery/icons/navbar-light-toggler-icon-bg.svg);--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb),0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-xxl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--bs-navbar-brand-color);font-size:var(--bs-navbar-brand-font-size);margin-right:var(--bs-navbar-brand-margin-end);padding-bottom:var(--bs-navbar-brand-padding-y);padding-top:var(--bs-navbar-brand-padding-y);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);color:var(--bs-navbar-color);font-size:var(--bs-navbar-toggler-font-size);line-height:1;padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.navbar[data-bs-theme=dark]{--bs-navbar-color:hsla(0,0%,100%,.55);--bs-navbar-hover-color:hsla(0,0%,100%,.75);--bs-navbar-disabled-color:hsla(0,0%,100%,.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url(/opensees-gallery/icons/navbar-dark-toggler-icon-bg.svg)}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb),0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-left:0;margin-right:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-text:last-child{margin-bottom:0}.card-img-top{width:100%}.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url(/opensees-gallery/icons/accordion-button-icon.svg);--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url(/opensees-gallery/icons/accordion-button-active-icon.svg);--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(0,50,98,.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{align-items:center;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;color:var(--bs-accordion-btn-color);display:flex;font-size:1rem;overflow-anchor:none;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);position:relative;text-align:left;transition:var(--bs-accordion-transition);width:100%}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(var(--bs-accordion-border-width)*-1) 0 var(--bs-accordion-border-color);color:var(--bs-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--bs-accordion-btn-icon-width);margin-left:auto;transition:var(--bs-accordion-btn-icon-transition);width:var(--bs-accordion-btn-icon-width)}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);color:var(--bs-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url(/opensees-gallery/icons/accordion-button-icon-dark.svg);--bs-accordion-btn-active-icon:url(/opensees-gallery/icons/accordion-button-active-icon-dark.svg)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(0,50,98,.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#003262;--bs-pagination-active-border-color:#003262;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;list-style:none;padding-left:0}.page-link{background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);color:var(--bs-pagination-color);display:block;font-size:var(--bs-pagination-font-size);padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);position:relative;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color);color:var(--bs-pagination-hover-color);z-index:2}.page-link:focus{background-color:var(--bs-pagination-focus-bg);box-shadow:var(--bs-pagination-focus-box-shadow);color:var(--bs-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color);color:var(--bs-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color);color:var(--bs-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-bottom-left-radius:var(--bs-pagination-border-radius);border-top-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-right-radius:var(--bs-pagination-border-radius);border-top-right-radius:var(--bs-pagination-border-radius)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:600;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);border-radius:var(--bs-badge-border-radius);color:var(--bs-badge-color);display:inline-block;font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}@keyframes a{0%{background-position-x:1rem}}.progress{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#003262;--bs-progress-bar-transition:width 0.6s ease;background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);display:flex;font-size:var(--bs-progress-font-size);height:var(--bs-progress-height);overflow:hidden}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url(/opensees-gallery/icons/btn-close-bg.svg);--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(0,50,98,.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;box-sizing:content-box;height:1em;opacity:var(--bs-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--bs-btn-close-color)}.btn-close:hover{opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--bs-btn-close-disabled-opacity);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);background-clip:padding-box;background-color:var(--bs-toast-bg);border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);border-radius:var(--bs-toast-border-radius);box-shadow:var(--bs-toast-box-shadow);color:var(--bs-toast-color);font-size:var(--bs-toast-font-size);max-width:100%;pointer-events:auto;width:var(--bs-toast-max-width)}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:-moz-max-content;width:max-content;z-index:var(--bs-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--bs-toast-header-bg);border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));color:var(--bs-toast-header-color);display:flex;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x)}.toast-header .btn-close{margin-left:var(--bs-toast-padding-x);margin-right:calc(var(--bs-toast-padding-x)*-.5)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-tooltip-font-size);font-style:normal;font-weight:300;letter-spacing:normal;line-break:auto;line-height:1.5;margin:var(--bs-tooltip-margin);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-tooltip-zindex);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--bs-tooltip-arrow-height);width:var(--bs-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--bs-tooltip-bg);border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--bs-tooltip-arrow-width);left:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--bs-tooltip-bg);border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--bs-tooltip-arrow-width);right:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius);color:var(--bs-tooltip-color);max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);text-align:center}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:2rem;width:2rem}.carousel-control-prev-icon{background-image:url(/opensees-gallery/icons/carousel-control-prev-icon-bg.svg)}.carousel-control-next-icon{background-image:url(/opensees-gallery/icons/carousel-control-next-icon-bg.svg)}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(0) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#fff}.carousel-dark .carousel-caption{color:#fff}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(0) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#fff}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#fff}@keyframes b{to{transform:rotate(1turn)}}@keyframes c{0%{transform:scale(0)}50%{opacity:1;transform:none}}.offcanvas{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}.offcanvas{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas.show:not(.hiding){transform:none}.offcanvas.show{visibility:visible}.offcanvas-header{align-items:center;display:flex;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{margin:calc(var(--bs-offcanvas-padding-y)*-.5) calc(var(--bs-offcanvas-padding-x)*-.5) calc(var(--bs-offcanvas-padding-y)*-.5) auto;padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}@keyframes d{50%{opacity:.2}}@keyframes e{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.text-bg-info{background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-warning{background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.fixed-top{top:0}.fixed-top{left:0;position:fixed;right:0;z-index:1030}.sticky-top{top:0}.sticky-top{position:sticky;z-index:1020}.hstack{align-items:center;flex-direction:row}.hstack{align-self:stretch;display:flex}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.25;width:var(--bs-border-width)}@media (min-width:576px){.d-sm-block{display:block!important}}@media (min-width:768px){.d-md-block{display:block!important}.d-md-none{display:none!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.ms-md-3{margin-left:1rem!important}.pt-md-0{padding-top:0!important}.pt-md-3{padding-top:1rem!important}}@media (min-width:992px){.d-lg-block{display:block!important}.mt-lg-0{margin-top:0!important}.mb-lg-5{margin-bottom:3rem!important}}@media (min-width:1400px){.px-xxl-0{padding-left:0!important;padding-right:0!important}}@media (min-width:1200px){.fs-3{font-size:1.75rem!important}}[data-bs-theme=dark]{--bs-primary:#6684a1;--bs-secondary:#a7acb1;--bs-primary-dark:#00284e;--bs-primary-bg-subtle:#00284e;--bg-primary-subtle:rgba(var(--bs-primary-rgb),var(--bs-link-opacity,0.1))}[data-bs-theme=dark] .accordion-button{background-color:var(--bg-primary-subtle)}[data-bs-theme=dark] .btn-outline-primary{--bs-btn-color:var(--bs-primary);--bs-btn-border-color:var(--bs-primary);--bs-btn-hover-bg:var(--bs-primary);--bs-btn-hover-border-color:var(--bs-primary);--bs-btn-active-bg:var(--bs-primary);--bs-btn-active-border-color:var(--bs-primary);--bs-btn-disabled-color:var(--bs-primary);--bs-btn-disabled-border-color:var(--bs-primary)}[data-bs-theme=dark] .btn-outline-secondary{--bs-btn-color:var(--bs-secondary);--bs-btn-border-color:var(--bs-secondary);--bs-btn-hover-bg:var(--bs-secondary);--bs-btn-hover-border-color:var(--bs-secondary);--bs-btn-active-bg:var(--bs-secondary);--bs-btn-active-border-color:var(--bs-secondary);--bs-btn-disabled-color:var(--bs-secondary);--bs-btn-disabled-border-color:var(--bs-secondary)}[data-bs-theme=dark] .pagination{--bs-pagination-color:var(--bs-body-bg);--bs-pagination-bg:var(--bs-primary)}[data-bs-theme=dark] .progress{--bs-progress-bar-bg:var(--bs-primary)}[data-bs-theme=dark] .clipboard-button:hover{color:var(--bs-primary)}[data-bs-theme=dark] .clipboard-button:hover>svg{fill:var(--bs-primary)}[data-bs-theme=dark] .toggler-icon{background-color:var(--bs-primary)}[data-bs-theme=dark] .heading:hover .anchor{color:var(--bs-primary)}@media (hover:none){abbr[title]{position:relative;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}abbr[title]:focus:after,abbr[title]:hover:after{background-color:var(--bs-body-bg);border-radius:3px;bottom:-30px;box-shadow:1px 1px 5px 0 rgba(0,0,0,.4);color:var(--bs-tooltip-color);content:attr(title);font-size:14px;left:0;padding:3px 5px;position:absolute;white-space:nowrap;width:auto}}.blockquote{border-left:.3rem solid;border-color:#6c757d;padding:1rem 1.5rem}.blockquote-alert{--bs-blockquote-alert-color:$secondary;border-left:.3rem solid;border-color:var(--bs-blockquote-alert-color);padding:.5rem 1.5rem}.blockquote-alert>p:nth-of-type(2){margin-bottom:0}.blockquote-alert-heading{color:var(--bs-blockquote-alert-color);font-weight:700}.blockquote-alert-important{--bs-blockquote-alert-color:var(--bs-primary)}.blockquote-alert-note{--bs-blockquote-alert-color:var(--bs-info)}.btn-outline-primary:hover,.btn-primary.active,.btn-primary:active,.btn-primary:focus{color:#fff!important}a.btn{margin-bottom:.25rem;margin-top:.25rem}.btn-close{background-color:transparent!important;background-image:var(--bs-btn-close-bg)!important;background-position:50%!important;background-repeat:no-repeat!important;background-size:1em!important}.card-img-bg{background-color:var(--bs-secondary-bg)}.card .card-img-wrap{overflow:hidden;position:relative}.card .card-img-wrap:has(.card-img-top){border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card .card-img-wrap:has(.card-img-bottom){border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-img-wrap img{transition:transform .25s ease;width:100%}.card-icon{color:#6c757d}.card-body-margin{margin-bottom:1.5rem}.card .tag-link{position:relative;z-index:2}.clipboard-button{background-color:transparent;border-style:none;color:#6c757d;font-size:.8em;margin:5px;opacity:0;padding:2px 7px 5px;position:absolute;right:0;transition:.1s;z-index:1}.clipboard-button>svg{fill:#6c757d}.clipboard-button:hover{color:#003262;cursor:pointer}.clipboard-button:hover>svg{fill:#003262}.clipboard-button:focus{outline:0}.highlight{position:relative}.highlight:hover>.clipboard-button{opacity:1;transition:.2s}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.command-line-prompt>span:before{content:" ";display:block;opacity:.7;padding-right:.8em}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7}.footer,.link-bg-footer{color:var(--bs-secondary)!important}.link-bg-footer:focus,.link-bg-footer:hover{color:var(--bs-tertiary-color)!important}[data-bs-theme=dark] .footer,[data-bs-theme=dark] .link-bg-footer{color:#adb5bd!important}.nav-tabs>.nav-link.active{border-bottom-color:var(--bs-body-bg)!important;border-bottom-style:solid!important;z-index:1}.nav-callout{--bs-nav-callout-bg:var(--bs-light);--bs-nav-callout-active-bg:var(--bs-primary-bg-subtle);--bs-nav-callout-gap:1rem;-moz-column-gap:var(--bs-nav-callout-gap)!important;column-gap:var(--bs-nav-callout-gap)!important}.nav-callout>.tab-content{background-color:var(--bs-nav-callout-bg);margin-top:0!important;padding:2rem}.nav-callout>.nav-link{border-bottom:none;border-radius:0;display:flex;padding:0 0 4rem;text-align:start;vertical-align:text-top}.nav-callout>.nav-link.active{background-image:linear-gradient(to top right,var(--bs-nav-callout-bg) 50%,transparent 0);background-position:50% bottom;background-repeat:no-repeat;background-size:50% 3rem;color:var(--bs-nav-underline-link-active-color);font-weight:600}.nav-callout .accordion-button{background-color:var(--bs-nav-callout-bg)!important;border:solid;border-color:var(--bs-border-color);border-radius:var(--bs-accordion-inner-border-radius)!important;margin-bottom:0}.nav-callout .accordion-button:focus{border-bottom:none!important;box-shadow:none}.nav-callout .accordion-button:not(.collapsed){box-shadow:none}.nav-callout>.accordion-item{border:none;margin-bottom:2rem;margin-top:2rem}.nav-callout .accordion-button[aria-expanded=false]{border-bottom:solid!important;border-color:var(--bs-border-color)!important;border-radius:var(--bs-accordion-inner-border-radius)}.nav-callout .accordion-button[aria-expanded=true]{background-image:linear-gradient(to top right,var(--bs-nav-callout-active-bg) 50%,transparent 0);background-position:10% bottom;background-repeat:no-repeat;background-size:10% 2.5rem;border-color:var(--bs-border-color)!important;border-bottom:none!important;border-radius:var(--bs-accordion-inner-border-radius) var(--bs-accordion-inner-border-radius) 0 0!important;padding-bottom:3rem}.nav-callout .accordion-collapse{background-color:var(--bs-nav-callout-active-bg)!important;border-bottom:solid;border-left:solid;border-radius:0 0 var(--bs-accordion-inner-border-radius) var(--bs-accordion-inner-border-radius);border-right:solid;border-top:none!important;border-color:var(--bs-border-color)}[data-bs-theme=dark] .nav-callout{--bs-nav-callout-bg:var(--bs-tertiary-bg)}[data-bs-theme=dark] .nav-callout .accordion-button[aria-expanded=true]{background-image:linear-gradient(to top right,#000f1d 50%,transparent 0)}[data-bs-theme=dark] .nav-callout .accordion-collapse{background-color:#000f1d!important}.checkbox{opacity:0;position:absolute}.mode-switch{--bs-mode-switch-width:50px}.mode-switch .label{align-items:center;border-color:var(--bs-border-color);border-radius:var(--bs-mode-switch-width);border-style:solid;border-width:1px;cursor:pointer;display:flex;height:calc(1px + var(--bs-mode-switch-width)/2);justify-content:space-between;padding:5px;position:relative;transform:scale(.9);width:var(--bs-mode-switch-width)}.notransition{transition:none!important}.mode-switch .label .ball{background-color:var(--bs-border-color);border-radius:50%;height:calc(var(--bs-mode-switch-width)/2 - 5px);left:2px;position:absolute;top:2px;transition:transform .2s linear;width:calc(var(--bs-mode-switch-width)/2 - 5px)}.mode-switch .checkbox:checked+.label .ball,[data-bs-theme=light] .mode-switch .ball{transform:translateX(calc(var(--bs-mode-switch-width)/2 - 1px))}.mode-switch .fa-moon{color:#ffc107;transform:scale(.8)}.mode-switch .fa-sun{color:var(--bs-bs-body-color);transform:scale(.8)}.navbar{--bs-navbar-expanded-color:var(--bs-body-bg);--bs-navbar-toggler-color:var(--bs-navbar-hover-color);background-color:transparent;--bs-navbar-color-primary:#003262;--bs-navbar-color-secondary:#6c757d;--bs-navbar-color-success:#198754;--bs-navbar-color-info:#0dcaf0;--bs-navbar-color-warning:#ffc107;--bs-navbar-color-danger:#dc3545;--bs-navbar-color-light:#f8f9fa;--bs-navbar-color-dark:#212529}.nav-active,.navbar-expanded{background-color:var(--bs-navbar-expanded-color);border-bottom:1px solid var(--bs-secondary-bg)}.nav-link{margin:0 .15rem}.navbar-title{display:inline-block;padding:0 1rem;text-align:center!important;vertical-align:middle;white-space:normal;width:100%!important}.navbar-contrast .nav-link.active,.navbar-contrast .nav-link.show,.navbar-contrast .nav-link:hover{border-bottom:1px solid var(--bs-navbar-hover-color);margin-bottom:-1px}.navbar-contrast{--bs-navbar-color:#fff!important;--bs-navbar-hover-color:#fff!important;--bs-navbar-disabled-color:#fff!important;--bs-navbar-active-color:#fff!important;--bs-navbar-toggler-color:#fff}.navbar-contrast .mode-switch,.navbar-contrast .navbar-title{--bs-border-color:#fff;color:#fff!important}.navbar-contrast .mode-switch .fa-moon{color:#fff}.navbar-expanded{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.nav-item .vr{color:var(--bs-navbar-color)}.navbar-toggler{border:0!important}.navbar-toggler-icon:focus,.navbar-toggler:active,.navbar-toggler:focus{border:0!important;box-shadow:none!important;outline:none!important}.fw-30{width:30px!important}.toggler-icon{display:block;height:3px;transition:all .2s;width:30px}.middle-bar{margin:5px auto}.navbar-toggler .top-bar{transform:rotate(45deg);transform-origin:10% 10%}.navbar-toggler .middle-bar{filter:alpha(opacity=0);opacity:0}.navbar-toggler .bottom-bar{transform:rotate(-45deg);transform-origin:10% 90%}.navbar-toggler.collapsed .top-bar{transform:rotate(0)}.navbar-toggler.collapsed .middle-bar{filter:alpha(opacity=100);opacity:1}.navbar-toggler.collapsed .bottom-bar{transform:rotate(0)}.emphasis,.navbar-toggler.collapsed .toggler-icon{background-color:var(--bs-navbar-toggler-color)}[data-bs-theme=dark] .emphasis{background-color:#fff!important}.navbar .dropdown-divider-bg{color:var(--bs-navbar-color)}:root{--dropdown-horizontal-bg:var(--bs-light);--navbar-offset:5.5em}.navbar-container{width:100%!important}.navbar-brand{margin-right:0}@media (min-width:992px){:root{--navbar-offset:5.5em}.navbar-container{width:auto!important}.navbar-title{padding:0;text-align:initial!important}.navbar-brand{margin-right:var(--bs-navbar-brand-margin-end)}}[data-bs-theme=dark]{--dropdown-horizontal-bg:var(--bs-tertiary-bg)}.dropdown-horizontal{position:static!important}.dropdown-horizontal>.dropdown-menu{background-color:var(--dropdown-horizontal-bg)!important;border:0;border-radius:0;box-shadow:.125rem .25rem rgba(0,0,0,.075);display:block;height:auto;margin-top:calc(-1.5rem - 2px);opacity:0;padding-bottom:calc(1rem + 2px);padding-top:calc(1rem + 2px);text-align:center;transition:opacity .15s ease-in-out;visibility:hidden;width:100%}@media (prefers-reduced-motion:reduce){.dropdown-horizontal>.dropdown-menu{transition:none}}.dropdown-horizontal>.dropdown-menu.show{opacity:1;visibility:visible}.dropdown-horizontal>.dropdown-menu>li{display:inline-block;padding-left:1rem;padding-right:1rem}.dropdown-horizontal>.dropdown-menu>li>a{padding-left:.25rem;padding-right:.25rem}.dropdown-horizontal>.dropdown-menu>li>a.active,.dropdown-horizontal>.dropdown-menu>li>a:focus,.dropdown-horizontal>.dropdown-menu>li>a:hover{background-color:transparent;border-bottom:1px solid var(--bs-navbar-hover-color);color:var(--bs-body-color);margin-bottom:-1px}.dropdown-horizontal>.nav-link.show{background-color:var(--dropdown-horizontal-bg)!important}.navbar-overlay{position:absolute;z-index:1030}.img-wrap{overflow:hidden;position:relative}.img-wrap img{width:100%}.img-wrap img{height:100%;-o-object-fit:cover;object-fit:cover}.pagination{--bs-pagination-bg:var(--bs-primary-bg-subtle);--bs-pagination-color:var(--bs-body-color);--bs-pagination-border-color:none;--bs-pagination-hover-color:var(--bs-pagination-active-color);--bs-pagination-hover-bg:var(--bs-pagination-active-bg);--bs-pagination-hover-border-color:none}.pagination .page-item{margin:.4rem}.sidebar,.sidebar-overflow{top:var(--navbar-offset)}.sidebar-overflow{max-height:90vh;overflow-y:auto}.sidebar-item{color:rgba(0,0,0,.65);display:inline-block;margin-left:0!important;padding-left:.85rem!important}.sidebar-item.active,.sidebar-item:focus,.sidebar-item:hover{color:#000}.btn-toggle{background-color:transparent;color:rgba(0,0,0,.65);font-weight:600;padding:.25rem .5rem}.btn-toggle:focus,.btn-toggle:hover{background-color:#e6ebef;color:#000}.btn-toggle:before{content:url(/opensees-gallery/icons/btn-toggle.svg);line-height:0;transform-origin:.5em 50%;transition:transform .35s ease;width:1.25em}.btn-toggle[aria-expanded=true]{color:#000}.btn-toggle[aria-expanded=true]:before{transform:rotate(90deg)}.btn-toggle-nav a{margin-left:1.25rem;margin-top:.125rem;padding:.1875rem .5rem}.btn-toggle-nav a:focus,.btn-toggle-nav a:hover{background-color:#e6ebef}.btn-toggle-nav a.active{font-weight:700}[data-bs-theme=dark] .sidebar-item{color:var(--bs-body-color);margin-left:0!important;padding-left:.85rem!important}[data-bs-theme=dark] .sidebar-item.active,[data-bs-theme=dark] .sidebar-item:focus,[data-bs-theme=dark] .sidebar-item:hover{background-color:transparent;color:#fff!important}[data-bs-theme=dark] .btn-toggle{color:var(--bs-body-color)}[data-bs-theme=dark] .btn-toggle:focus,[data-bs-theme=dark] .btn-toggle:hover{background-color:transparent;color:#fff!important}[data-bs-theme=dark] .btn-toggle:before{content:url(/opensees-gallery/icons/btn-toggle-dark.svg)}[data-bs-theme=dark] .btn-toggle[aria-expanded=true]{color:var(--bs-secondary-color)}[data-bs-theme=dark] .btn-toggle-nav a{margin-left:1.25rem;margin-top:.125rem;padding:.1875rem .5rem}[data-bs-theme=dark] .btn-toggle-nav a:focus,[data-bs-theme=dark] .btn-toggle-nav a:hover{background-color:transparent;color:#fff!important}[data-bs-theme=dark] .btn-toggle-nav a.active{font-weight:700}.dropdown-toggle{outline:0}.bg,.chroma{background-color:#fff}.chroma .err{background-color:#e3d2d2;color:#a61717}.chroma .lnlinks{color:inherit;outline:none;text-decoration:none}.chroma .lntd{border:0;margin:0;padding:0;vertical-align:top}.chroma .lntable{border:0;border-spacing:0;margin:0;padding:0}.chroma .hl{background-color:#ffc}.chroma .ln,.chroma .lnt{color:#7f7f7f;margin-right:.4em;padding:0 .4em;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:pre}.chroma .line{display:flex}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:#000;font-weight:700}.chroma .kt{color:#458;font-weight:700}.chroma .na{color:teal}.chroma .nb{color:#006b8f}.chroma .bp{color:#999}.chroma .nc{color:#458;font-weight:700}.chroma .no{color:teal}.chroma .nd{color:#3c5d5d;font-weight:700}.chroma .ni{color:purple}.chroma .ne,.chroma .nf,.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi{color:teal}.chroma .dl,.chroma .s,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx{color:#d14}.chroma .sr{color:#009926}.chroma .s1{color:#d14}.chroma .ss{color:#990073}.chroma .il,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo{color:#007a7a}.chroma .o,.chroma .ow{color:#000;font-weight:700}.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm{color:#6d6d5d;font-style:italic}.chroma .cp,.chroma .cpf,.chroma .cs{color:#999;font-style:italic;font-weight:700}.chroma .gd{background-color:#fdd;color:#000}.chroma .ge{color:#000;font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{background-color:#dfd;color:#000}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .gl{text-decoration:underline}.chroma .w{color:#bbb}.bg,.chroma,.chroma .err{background-color:transparent!important}.chroma{display:flex}.chroma code{flex:1}.syntax-highlight{background-color:var(--bs-light)!important;overflow-x:auto}[data-bs-theme=dark] .bg,[data-bs-theme=dark] .chroma{background-color:#0d1117;color:#c9d1d9}[data-bs-theme=dark] .chroma .err{color:#f85149}[data-bs-theme=dark] .chroma .lnlinks{color:inherit;outline:none;text-decoration:none}[data-bs-theme=dark] .chroma .lntd{border:0;margin:0;padding:0;vertical-align:top}[data-bs-theme=dark] .chroma .lntable{border:0;border-spacing:0;margin:0;padding:0}[data-bs-theme=dark] .chroma .hl{background-color:#373700}[data-bs-theme=dark] .chroma .lnt{color:#64686c}[data-bs-theme=dark] .chroma .ln,[data-bs-theme=dark] .chroma .lnt{margin-right:.4em;padding:0 .4em;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:pre}[data-bs-theme=dark] .chroma .ln{color:#999fa8}[data-bs-theme=dark] .chroma .line{display:flex}[data-bs-theme=dark] .chroma .k{color:#ff7b72}[data-bs-theme=dark] .chroma .kc{color:#79c0ff}[data-bs-theme=dark] .chroma .kd,[data-bs-theme=dark] .chroma .kn{color:#ff7b72}[data-bs-theme=dark] .chroma .kp{color:#79c0ff}[data-bs-theme=dark] .chroma .kr,[data-bs-theme=dark] .chroma .kt{color:#ff7b72}[data-bs-theme=dark] .chroma .na{color:#0cc}[data-bs-theme=dark] .chroma .nb{color:#00a2d8}[data-bs-theme=dark] .chroma .nc{color:#f0883e;font-weight:700}[data-bs-theme=dark] .chroma .no{color:#79c0ff;font-weight:700}[data-bs-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:700}[data-bs-theme=dark] .chroma .ni{color:#ffa657}[data-bs-theme=dark] .chroma .ne{color:#f0883e;font-weight:700}[data-bs-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:700}[data-bs-theme=dark] .chroma .nl{color:#79c0ff;font-weight:700}[data-bs-theme=dark] .chroma .nn{color:#ff7b72}[data-bs-theme=dark] .chroma .py{color:#79c0ff}[data-bs-theme=dark] .chroma .nt{color:#7ee787}[data-bs-theme=dark] .chroma .nv{color:#79c0ff}[data-bs-theme=dark] .chroma .l{color:#a5d6ff}[data-bs-theme=dark] .chroma .ld{color:#79c0ff}[data-bs-theme=dark] .chroma .s{color:#a5d6ff}[data-bs-theme=dark] .chroma .sa{color:#79c0ff}[data-bs-theme=dark] .chroma .sb,[data-bs-theme=dark] .chroma .sc{color:#a5d6ff}[data-bs-theme=dark] .chroma .dl{color:#79c0ff}[data-bs-theme=dark] .chroma .s2,[data-bs-theme=dark] .chroma .sd{color:#a5d6ff}[data-bs-theme=dark] .chroma .se,[data-bs-theme=dark] .chroma .sh{color:#79c0ff}[data-bs-theme=dark] .chroma .si,[data-bs-theme=dark] .chroma .sx{color:#a5d6ff}[data-bs-theme=dark] .chroma .sr{color:#79c0ff}[data-bs-theme=dark] .chroma .il,[data-bs-theme=dark] .chroma .m,[data-bs-theme=dark] .chroma .mb,[data-bs-theme=dark] .chroma .mf,[data-bs-theme=dark] .chroma .mh,[data-bs-theme=dark] .chroma .mi,[data-bs-theme=dark] .chroma .mo,[data-bs-theme=dark] .chroma .s1,[data-bs-theme=dark] .chroma .ss{color:#a5d6ff}[data-bs-theme=dark] .chroma .o,[data-bs-theme=dark] .chroma .ow{color:#ff7b72;font-weight:700}[data-bs-theme=dark] .chroma .c,[data-bs-theme=dark] .chroma .c1,[data-bs-theme=dark] .chroma .ch,[data-bs-theme=dark] .chroma .cm{color:#979fa8;font-style:italic}[data-bs-theme=dark] .chroma .cp,[data-bs-theme=dark] .chroma .cpf,[data-bs-theme=dark] .chroma .cs{color:#979fa8;font-style:italic;font-weight:700}[data-bs-theme=dark] .chroma .gd{background-color:#490202;color:#ffa198}[data-bs-theme=dark] .chroma .ge{font-style:italic}[data-bs-theme=dark] .chroma .gr{color:#ffa198}[data-bs-theme=dark] .chroma .gh{color:#79c0ff;font-weight:700}[data-bs-theme=dark] .chroma .gi{background-color:#0f5323;color:#56d364}[data-bs-theme=dark] .chroma .go,[data-bs-theme=dark] .chroma .gp{color:#979fa8}[data-bs-theme=dark] .chroma .gs{font-weight:700}[data-bs-theme=dark] .chroma .gu{color:#79c0ff}[data-bs-theme=dark] .chroma .gt{color:#ff7b72}[data-bs-theme=dark] .chroma .gl{text-decoration:underline}[data-bs-theme=dark] .chroma .w{color:#999fa8}[data-bs-theme=dark] .bg,[data-bs-theme=dark] .chroma,[data-bs-theme=dark] .chroma .err{background-color:transparent!important}[data-bs-theme=dark] .syntax-highlight{background-color:var(--bs-tertiary-bg)!important;overflow-x:auto}[data-bs-theme=dark] .bg,[data-bs-theme=dark] .chroma,[data-bs-theme=dark] .chroma .ge,[data-bs-theme=dark] .chroma .gl,[data-bs-theme=dark] .chroma .gs{color:#c9d1d9!important}.datatable-container{border-bottom:none!important}.datatable-bottom{padding-top:0!important}.datatable-sorter{padding-left:0;padding-right:1rem}:root{--timeline-highlight:var(--bs-primary);--timeline-icon-radius:8rem;--timeline-offset:50%;--timeline-connector-bg:var(--bs-body-bg)}.timeline-info{--timeline-highlight:var(--bs-info)}.timeline-warning{--timeline-highlight:var(--bs-warning)}.timeline,.timeline-sm{position:relative}.timeline-sm{--timeline-icon-radius:3.33333rem;--timeline-offset:25%}@media (min-width:576px){.timeline-sm{--timeline-icon-radius:4rem}}.timeline-sm:before,.timeline:before{background:var(--bs-body-color);content:"";inset:0;margin:0 auto;position:absolute;width:.4rem}.timeline-sm:before{margin:0 calc(var(--timeline-offset) - .2rem)}.timeline-semi-circle-end,.timeline-semi-circle-start{border-radius:100%;height:var(--timeline-icon-radius);position:relative;width:var(--timeline-icon-radius)}.timeline-semi-circle-start{left:-.2rem}.timeline-semi-circle-end{left:.2rem}.timeline-semi-circle-start:before{border:.2rem solid;border-color:transparent var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight);border-radius:100%;transform:rotate(-90deg)}.timeline-semi-circle-start:after,.timeline-semi-circle-start:before{content:"";height:var(--timeline-icon-radius);position:absolute;width:var(--timeline-icon-radius)}.timeline-semi-circle-start:after{border:.2rem solid;border-color:var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight) transparent;border-radius:100%;left:0;top:0;transform:rotate(-45deg)}.timeline-semi-circle-end:before{border:.2rem solid;border-color:transparent var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight);border-radius:100%;transform:rotate(-225deg)}.timeline-semi-circle-end:after,.timeline-semi-circle-end:before{content:"";height:var(--timeline-icon-radius);position:absolute;width:var(--timeline-icon-radius)}.timeline-semi-circle-end:after{border:.2rem solid;border-color:var(--timeline-highlight) var(--timeline-highlight) var(--timeline-highlight) transparent;border-radius:100%;left:0;top:0;transform:rotate(-180deg)}.timeline-description-text-start{border-bottom:.2rem solid var(--timeline-highlight);margin-right:1.6rem}.timeline-description-text-end{border-bottom:.2rem solid var(--timeline-highlight);margin-left:1.6rem}.timeline-connector-end,.timeline-connector-start,.timeline-panel-end,.timeline-panel-start{border:none;border-top:.2rem solid var(--timeline-highlight);height:calc(.2rem + var(--timeline-icon-radius)/2);position:relative;top:calc(var(--timeline-icon-radius)/2);width:calc(var(--timeline-icon-radius)/2)}.timeline-panel-start{border-left:.2rem solid var(--timeline-highlight);right:50%}.timeline-panel-end,.timeline-panel-start{border-top:.2rem solid var(--timeline-highlight);height:50%;position:absolute;top:50%;width:calc(var(--timeline-icon-radius)*2);width:1.6rem}.timeline-panel-end{border-right:.2rem solid var(--timeline-highlight)}.timeline-dot:after{background:var(--timeline-highlight);border:.3rem solid var(--timeline-connector-bg);border-radius:100%;color:var(--timeline-highlight);content:"";display:inline-block;height:1.6rem;left:var(--timeline-offset);margin:-.8rem 0 0 -.8rem;position:absolute;top:50%;width:1.6rem}.toc-sidebar{grid-area:a;height:calc(100vh - 5rem);overflow-y:auto;right:0;top:5rem;z-index:2}.toc nav{font-size:.875rem;margin-bottom:-.875rem}.toc nav ul{list-style:none;padding-left:0}.toc nav ul ul{margin-top:.25rem;padding-left:1rem}.toc nav li{margin-bottom:.25rem}.toc nav a{color:inherit}.toc nav a:hover{color:var(--bs-primary)}.toc nav a:not(:hover){text-decoration:none}.toc nav a code{font:inherit}#toc-collapse{border-color:var(--bs-secondary-color)!important;border-radius:0 0 var(--bs-border-radius) var(--bs-border-radius)!important;margin-top:-1.5rem;padding-top:1.5rem!important}.toc-button{--bs-btn-hover-color:var(--bs-primary);--bs-btn-hover-bg:var(--bs-body-bg);--bs-btn-hover-border-color:var(--bs-primary);--bs-btn-active-color:var(--bs-primary);--bs-btn-active-bg:var(--bs-body-bg);--bs-btn-active-border-color:var(--bs-primary);background-color:var(--bs-body-bg)!important}.toc-button.active,.toc-button:focus,.toc-button:hover{border-color:var(--bs-primary);box-shadow:0 0 0 4px var(--bs-primary-border-subtle);color:var(--bs-primary);outline:none}[data-bs-theme=dark] .toc-button{--bs-btn-color:var(--bs-body-color);--bs-btn-border-color:var(--bs-body-color)}[data-bs-theme=dark] .toc-button:hover{background-color:transparent}[data-bs-theme=dark] #toc-collapse{border-color:var(--bs-body-color)!important}[data-bs-theme=dark] .toc nav a{color:var(--bs-body-color)}[data-bs-theme=dark] .toc nav a:hover{color:#fff}.rotate-5{transform:rotate(5deg)}.rotate-n5{transform:rotate(-5deg)}@media (prefers-reduced-motion:no-preference){.reveal{animation-iteration-count:1;opacity:0;position:relative}.reveal.active{opacity:1}.active.fade-bottom{animation:f 1s ease-in}.active.fade-bottom-5{animation:g 1s ease-in}.active.fade-bottom-n5{animation:h 1s ease-in}@keyframes f{0%{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}@keyframes g{0%{opacity:0;transform:translateY(50px) rotate(5deg)}to{opacity:1;transform:translateY(0) rotate(5deg)}}@keyframes h{0%{opacity:0;transform:translateY(50px) rotate(-5deg)}to{opacity:1;transform:translateY(0) rotate(-5deg)}}@keyframes i{0%{opacity:0;transform:translateX(-100px)}to{opacity:1;transform:translateX(0)}}@keyframes j{0%{opacity:0;transform:translateX(100px)}to{opacity:1;transform:translateX(0)}}}a:active,a:hover,a:link,a:visited{text-decoration:none}.main{min-height:100vh}.fullcover{--navbar-height:5.5em;min-height:calc(100vh - var(--navbar-height))}.fullscreen{--overlay-offset:5.5em;min-height:calc(100vh - var(--overlay-offset))}.main-content{margin-top:var(--navbar-offset)}.tickmark li::marker{content:"✓ "}.anchor{color:transparent}.heading:hover .anchor{color:#003262;transition:.25s ease-in-out}@media screen and (orientation:portrait){.min-vh-custom{min-height:25vh!important}}@media screen and (orientation:landscape){.min-vh-custom{min-height:50vh!important}}:root{--nav-height:90px}@media (min-width:576px){.ratio-section{min-height:calc(min(100vh, 576px) - var(--nav-height))}}@media (min-width:768px){.ratio-section{min-height:calc(min(100vh, 768px) - var(--nav-height))}}@media (min-width:992px){.ratio-section{min-height:calc(min(100vh, 992px) - var(--nav-height))}}@media (min-width:1200px){.ratio-section{min-height:calc(min(100vh, 1200px) - var(--nav-height))}}@media (min-width:1400px){.ratio-section{min-height:calc(min(100vh, 1400px) - var(--nav-height))}}.main-cover{min-height:100vh}@media (min-width:1400px){.main-cover{min-height:min(100vh,1000px)}}@media (min-height:1400px){.main-cover{min-height:min(100vh,1000px)}}pre{margin-bottom:0;padding:1rem}.h1,h1{margin-top:2.5rem}.h1,.h2,h1,h2{scroll-margin-top:var(--navbar-offset)}.h2,h2{margin-top:2rem}.h3,h3{margin-top:1.75rem}.h3,.h4,h3,h4{scroll-margin-top:var(--navbar-offset)}.h4,h4{margin-top:1.5rem}.h5,h5{margin-top:1.25rem}.h5,.h6,h5,h6{scroll-margin-top:var(--navbar-offset)}.h6,h6{margin-top:1rem}.display-1,.display-4{scroll-margin-top:var(--navbar-offset)}.link-bg-info{color:#000!important}.link-bg-info:focus,.link-bg-info:hover{color:#333!important}.link-bg-warning{color:#000!important}.link-bg-warning:focus,.link-bg-warning:hover{color:#333!important}.link-bg-body-tertiary{color:var(--bs-body-color)!important}.link-bg-body-tertiary:focus,.link-bg-body-tertiary:hover{color:var(--bs-secondary-color)!important}.hidden{display:none}.d-none-light{display:none!important}.d-none-dark{display:block!important}[data-bs-theme=dark] .d-none-light{display:block!important}[data-bs-theme=dark] .d-none-dark{display:none!important} /*! * Copyright (c) 2016-2020 The Inter Project Authors. diff --git a/docs/about/credits/index.html b/docs/about/credits/index.html index 25f8e14f..a81fa097 100644 --- a/docs/about/credits/index.html +++ b/docs/about/credits/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/about/license/index.html b/docs/about/license/index.html index 7bd5b677..cf580e5a 100644 --- a/docs/about/license/index.html +++ b/docs/about/license/index.html @@ -1356,7 +1356,7 @@

Documentation + diff --git a/docs/advanced-settings/icons/index.html b/docs/advanced-settings/icons/index.html index 2f79b126..2c495ee7 100644 --- a/docs/advanced-settings/icons/index.html +++ b/docs/advanced-settings/icons/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/advanced-settings/module-development/index.html b/docs/advanced-settings/module-development/index.html index cd09f04c..dcb48130 100644 --- a/docs/advanced-settings/module-development/index.html +++ b/docs/advanced-settings/module-development/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/advanced-settings/overview/index.html b/docs/advanced-settings/overview/index.html index cde098e5..1da793f1 100644 --- a/docs/advanced-settings/overview/index.html +++ b/docs/advanced-settings/overview/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/advanced-settings/partial-development/index.html b/docs/advanced-settings/partial-development/index.html index 74cf18b4..e4b6e665 100644 --- a/docs/advanced-settings/partial-development/index.html +++ b/docs/advanced-settings/partial-development/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/advanced-settings/scripts/index.html b/docs/advanced-settings/scripts/index.html index a4d374fe..2df99995 100644 --- a/docs/advanced-settings/scripts/index.html +++ b/docs/advanced-settings/scripts/index.html @@ -1255,7 +1255,7 @@
Docs
- + diff --git a/docs/advanced-settings/styles/index.html b/docs/advanced-settings/styles/index.html index e0628abe..8cbb33d3 100644 --- a/docs/advanced-settings/styles/index.html +++ b/docs/advanced-settings/styles/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/configuration/colors/index.html b/docs/configuration/colors/index.html index e23752a4..3a144619 100644 --- a/docs/configuration/colors/index.html +++ b/docs/configuration/colors/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/configuration/layout/index.html b/docs/configuration/layout/index.html index eac666c2..4b42d8b4 100644 --- a/docs/configuration/layout/index.html +++ b/docs/configuration/layout/index.html @@ -1244,7 +1244,7 @@
Docs
- + diff --git a/docs/developing/index.html b/docs/developing/index.html index 97d8610d..bfd91499 100644 --- a/docs/developing/index.html +++ b/docs/developing/index.html @@ -1408,7 +1408,7 @@

Class Interface Specifica - + diff --git a/docs/getting-started/command-line/index.html b/docs/getting-started/command-line/index.html index 9732078d..c75901dd 100644 --- a/docs/getting-started/command-line/index.html +++ b/docs/getting-started/command-line/index.html @@ -1243,7 +1243,7 @@

Docs
- + diff --git a/docs/getting-started/compiling/index.html b/docs/getting-started/compiling/index.html index c84df9bd..53df7956 100644 --- a/docs/getting-started/compiling/index.html +++ b/docs/getting-started/compiling/index.html @@ -1851,7 +1851,7 @@

Compiling + diff --git a/docs/getting-started/contribute/index.html b/docs/getting-started/contribute/index.html index 2bd89cc1..30d71d5f 100644 --- a/docs/getting-started/contribute/index.html +++ b/docs/getting-started/contribute/index.html @@ -1906,7 +1906,7 @@

License + diff --git a/docs/getting-started/introduction/index.html b/docs/getting-started/introduction/index.html index 5b83a424..4381428f 100644 --- a/docs/getting-started/introduction/index.html +++ b/docs/getting-started/introduction/index.html @@ -1391,7 +1391,7 @@

Running OpenSees + diff --git a/docs/getting-started/modeling/index.html b/docs/getting-started/modeling/index.html index 2440d55c..708dfb34 100644 --- a/docs/getting-started/modeling/index.html +++ b/docs/getting-started/modeling/index.html @@ -43,14 +43,14 @@ OpenSees - Modeling - + - + @@ -63,7 +63,7 @@ - + @@ -913,17 +913,43 @@
Docs
-

To run multiple models simultaneously, use openseespy.Model(...) (capital M) -instead of the regular openseespy.model(...) (lowercase m) function, and invoke -all subsequent modeling functions (e.g. node(...), element(...), fix(...), etc) -as methods on the object returned from Model() instead of the openseespy submodule -directly. For example, instead of:

-
import opensees.openseespy as ops
-ops.model("basic", "-ndm", 2, "-ndf", 3)
-ops.node(1, 2.0, 3.0)

do

+ +

Modeling in Python + +  

+

The best practice for modeling in Python is to create a model class +by calling the opensees.openseespy.Model(...) constructor (note the capital “M”). +All standard OpenSees functions, as documented + + + + + + + +here  + + +can be called as methods on the object that is retured. For example:

import opensees.openseespy as ops
 model = ops.Model(ndm=2, ndf=3)
 model.node(1, 2.0, 3.0)
+

Evaluate Tcl models from Python + +  

+

The first scripting interface to OpenSees used a programming language +called Tcl, which continues to be supported. +To execute Tcl commands from a Python script, just create an instance +of the opensees.openseespy.Model class and call its eval() method:

+
import opensees.openseespy as ops
+model = ops.Model()
+model.eval("model Basic -ndm 2")
+model.eval("print -json")

Full Tcl files can be conveniently executed in this way. For example, +if a Tcl file called model.tcl exists in the current working directory:

+
import opensees.openseespy as ops
+model = ops.Model()
+with open("model.tcl", "r") as f:
+    model.eval(f.read())
@@ -1241,6 +1267,7 @@
Docs
+ @@ -1255,7 +1282,7 @@
Docs
- + diff --git a/docs/getting-started/python/index.html b/docs/getting-started/python/index.html index 05c6e67c..1eb0812e 100644 --- a/docs/getting-started/python/index.html +++ b/docs/getting-started/python/index.html @@ -1243,7 +1243,7 @@
Docs
- + diff --git a/docs/library/frame/index.html b/docs/library/frame/index.html index 6944145b..7f72fe7c 100644 --- a/docs/library/frame/index.html +++ b/docs/library/frame/index.html @@ -1243,7 +1243,7 @@
Docs
- + diff --git a/docs/library/index.html b/docs/library/index.html index 60b96c3f..b031e19b 100644 --- a/docs/library/index.html +++ b/docs/library/index.html @@ -749,7 +749,7 @@ - + diff --git a/examples/archstaticsnap/index.html b/examples/archstaticsnap/index.html index 03a3d68e..caeb7e41 100644 --- a/examples/archstaticsnap/index.html +++ b/examples/archstaticsnap/index.html @@ -1141,7 +1141,7 @@

The Framework + diff --git a/examples/buildingmodes/index.html b/examples/buildingmodes/index.html index 4fbccd96..a720aab5 100644 --- a/examples/buildingmodes/index.html +++ b/examples/buildingmodes/index.html @@ -1172,7 +1172,7 @@ - + diff --git a/examples/cablestayed/index.html b/examples/cablestayed/index.html index 37ff397d..e2625817 100644 --- a/examples/cablestayed/index.html +++ b/examples/cablestayed/index.html @@ -845,7 +845,7 @@ - + diff --git a/examples/cantilevertransient/index.html b/examples/cantilevertransient/index.html index 1cff0da1..4e41f92f 100644 --- a/examples/cantilevertransient/index.html +++ b/examples/cantilevertransient/index.html @@ -1168,7 +1168,7 @@

Shear force-displaceme - + diff --git a/examples/chopra-10.4/index.html b/examples/chopra-10.4/index.html index 03f81070..d5d92a72 100644 --- a/examples/chopra-10.4/index.html +++ b/examples/chopra-10.4/index.html @@ -634,13 +634,13 @@

Instructions on Python Tcl @@ -656,7 +656,7 @@

Instructions on -
+
python EigenAnal_twoStoryShearFrame8.py
@@ -667,7 +667,7 @@

Instructions on -
+
python -m opensees EigenAnal_twoStoryShearFrame8.tcl
@@ -697,13 +697,13 @@

Create the model Python Tcl @@ -719,7 +719,7 @@

Create the model +
import opensees.openseespy as ops
 
@@ -732,7 +732,7 @@ 

Create the model +
model BasicBuilder -ndm 2 -ndf 3
@@ -759,13 +759,13 @@

Create the model Python Tcl @@ -781,7 +781,7 @@

Create the model +
model.node(1, 0.,   0.)
 model.node(2, L ,   0.)
@@ -797,7 +797,7 @@ 

Create the model +
node 1 0. 0. ;
 node 2 $L 0. ;
@@ -826,13 +826,13 @@ 

Create the model Python Tcl @@ -848,7 +848,7 @@

Create the model +
model.fix(1, 1, 1, 1)
 model.fix(2, 1, 1, 1)
@@ -860,7 +860,7 @@

Create the model +
fix 1 1 1 1; 
 fix 2 1 1 1; 
@@ -887,13 +887,13 @@

Create the model Python Tcl @@ -909,7 +909,7 @@

Create the model +
model.mass(3,  m  , 0., 0. ) 
 model.mass(4,  m  , 0., 0. ) 
@@ -923,7 +923,7 @@ 

Create the model +
mass 3 $m 0. 0. ; 
 mass 4 $m 0. 0. ; 
@@ -954,13 +954,13 @@ 

Create the model Python Tcl @@ -976,7 +976,7 @@

Create the model +
model.element("ElasticBeamColumn", 1, 1, 3, Ac, Ec, 2.*Ic, TransfTag)
 model.element("ElasticBeamColumn", 2, 3, 5, Ac, Ec,    Ic, TransfTag)
@@ -992,7 +992,7 @@ 

Create the model +
element elasticBeamColumn 1 1 3 $Ac $Ec [expr 2.*$Ic] $TransfTag; 
 element elasticBeamColumn 2 3 5 $Ac $Ec $Ic $TransfTag; 
@@ -1031,13 +1031,13 @@ 

Define recorders Python Tcl @@ -1053,7 +1053,7 @@

Define recorders +
for k in range(numModes):
     model.recorder("Node", f"eigen {k}", file=f"modes/mode{k}.out", nodeRange=[1, 6], dof=[1, 2, 3])
@@ -1065,7 +1065,7 @@

Define recorders +
foreach k [range $numModes] {
   recorder Node -file [format "modes/mode%i.out" $k] -nodeRange 1 6 -dof 1 2 3 "eigen $k" 
@@ -1465,7 +1465,7 @@ 

Display mode shapes + diff --git a/examples/concretesurface/index.html b/examples/concretesurface/index.html index 7b500fa3..d1b95cf8 100644 --- a/examples/concretesurface/index.html +++ b/examples/concretesurface/index.html @@ -911,7 +911,7 @@ - + diff --git a/examples/example1/index.html b/examples/example1/index.html index 35af2cf4..cbcf9819 100644 --- a/examples/example1/index.html +++ b/examples/example1/index.html @@ -1415,13 +1415,13 @@

Model Tcl Python(RT) @@ -1437,7 +1437,7 @@

Model -
+
model -ndm 2 -ndf 2
@@ -1448,7 +1448,7 @@

Model -
+
import opensees.openseespy as ops
 
@@ -1485,13 +1485,13 @@ 

Model Tcl Python(RT) @@ -1507,7 +1507,7 @@

Model -
+
# Create nodes & add to domain
 #   tag  X    Y
@@ -1523,7 +1523,7 @@ 

Model -
+
# Create nodes
 #         tag   X     Y
@@ -1551,13 +1551,13 @@ 

Model Tcl Python(RT) @@ -1573,7 +1573,7 @@

Model -
+
# Set the boundary conditions
 #  tag  X  Y
@@ -1588,7 +1588,7 @@ 

Model -
+
# set the boundary conditions
 #    nodeID xRestrnt? yRestrnt?
@@ -1617,13 +1617,13 @@ 

Model Tcl Python(RT) @@ -1639,7 +1639,7 @@

Model -
+
# Create Elastic material prototype
 uniaxialMaterial Elastic 1 3000;
@@ -1651,7 +1651,7 @@

Model -
+
# Create Elastic material prototype
 model.uniaxialMaterial("Elastic", 1, 3000)
@@ -1682,13 +1682,13 @@

Model Tcl Python(RT) @@ -1704,7 +1704,7 @@

Model -
+
element Truss 1 1 4 10.0 1;
 element Truss 2 2 4  5.0 1;
@@ -1717,7 +1717,7 @@ 

Model -
+
#              Type   tag  nodes  Area  material
 model.element("Truss", 1, (1, 4), 10.0,    1   )
@@ -1772,13 +1772,13 @@ 

Loads Tcl Python(RT) @@ -1794,7 +1794,7 @@

Loads -
+
set loads {4 100 -50}
@@ -1805,7 +1805,7 @@

Loads -
+
loads = {4: [100, -50]}
@@ -1829,13 +1829,13 @@

Loads Tcl Python(RT) @@ -1851,7 +1851,7 @@

Loads -
+
pattern Plain 1 "Linear" "load $loads"
@@ -1862,7 +1862,7 @@

Loads -
+
model.pattern("Plain", 1, "Linear", load=loads)
@@ -1886,13 +1886,13 @@

Loads Tcl Python(RT) @@ -1908,7 +1908,7 @@

Loads -
+
pattern Plain 1 "Linear" {
   load 4 100 -50
@@ -1921,7 +1921,7 @@ 

Loads -
+
model.pattern("Plain", 1, "Linear", load={
   4: [100, -50]
@@ -1951,13 +1951,13 @@ 

Analysis Tcl Python(RT) @@ -1973,7 +1973,7 @@

Analysis +
algorithm Linear;
@@ -1984,7 +1984,7 @@

Analysis +
model.algorithm("Linear")
@@ -2010,13 +2010,13 @@

Analysis Tcl Python(RT) @@ -2032,7 +2032,7 @@

Analysis +
integrator LoadControl 1.0;
@@ -2043,7 +2043,7 @@

Analysis +
model.integrator("LoadControl", 1.0)
@@ -2072,13 +2072,13 @@

Analysis Tcl Python(RT) @@ -2094,7 +2094,7 @@

Analysis +
analysis Static;
@@ -2105,7 +2105,7 @@

Analysis +
model.analysis("Static")
@@ -2127,13 +2127,13 @@

Analysis Tcl Python(RT) @@ -2149,7 +2149,7 @@

Analysis +
analyze 1
@@ -2160,7 +2160,7 @@

Analysis +
model.analyze(1)
@@ -2183,13 +2183,13 @@

Analysis Tcl Python(RT) @@ -2205,7 +2205,7 @@

Analysis +
print node 4
 print ele
@@ -2217,7 +2217,7 @@

Analysis +
model.print(node=4)
 model.print("ele")
@@ -2656,7 +2656,7 @@

Analysis + diff --git a/examples/example2/index.html b/examples/example2/index.html index 6330f482..6ce4d713 100644 --- a/examples/example2/index.html +++ b/examples/example2/index.html @@ -634,13 +634,13 @@

Modeling Python Tcl @@ -656,7 +656,7 @@

Modeling +
  1. @@ -672,7 +672,7 @@

    Modeling +
    1. @@ -828,13 +828,13 @@

      Modeling Python Tcl @@ -850,7 +850,7 @@

      Modeling +
      model.section("Fiber", 1)
       # Create the concrete core fibers
      @@ -872,7 +872,7 @@ 

      Modeling +
      section Fiber 1 {
       
      @@ -1427,7 +1427,7 @@ 

      Analysis + diff --git a/examples/example3/index.html b/examples/example3/index.html index 155b314a..ecdb6e84 100644 --- a/examples/example3/index.html +++ b/examples/example3/index.html @@ -1750,13 +1750,13 @@ Python Tcl @@ -1772,7 +1772,7 @@ -
      +

              <a href="portal.py"><code>portal.py</code></a></p>
      @@ -1785,7 +1785,7 @@
       
       
       
      -
      +

              <a href="portal.tcl"><code>portal.tcl</code></a></p>
      @@ -1849,13 +1849,13 @@ 

      create_portal Python Tcl @@ -1871,7 +1871,7 @@

      create_portal +
      # create ModelBuilder (with two-dimensions and 3 DOF/node)
       model = ops.Model(ndm=2, ndf=3)
      @@ -1895,7 +1895,7 @@ 

      create_portal +
      set width    360
       set height   144
      @@ -1934,13 +1934,13 @@ 

      create_portal Python Tcl @@ -1956,7 +1956,7 @@

      create_portal +
      # Define materials for nonlinear columns
       # ------------------------------------------
      @@ -1980,7 +1980,7 @@ 

      create_portal +
      
       # Define materials for nonlinear columns
      @@ -2019,13 +2019,13 @@ 

      create_portal +
       # Define cross-section for nonlinear columns
        # ------------------------------------------
      @@ -2075,7 +2075,7 @@ 

      create_portal +
      # Define cross-section for nonlinear columns
       # ------------------------------------------
      @@ -2134,13 +2134,13 @@ 

      gravity_analysis +
      # Create the model
       model = create_portal()
      @@ -2171,7 +2171,7 @@ 

      gravity_analysis +
      create_portal;
       gravity_analysis;
      @@ -2195,13 +2195,13 @@

      gravity_analysis Python Tcl @@ -2217,7 +2217,7 @@

      gravity_analysis +
      model.pattern("Plain", 1, "Linear", loads={
       # nodeID  xForce yForce zMoment
      @@ -2232,7 +2232,7 @@ 

      gravity_analysis +
      @@ -3369,13 +3369,13 @@

      transient_analysis Python Tcl @@ -3391,7 +3391,7 @@

      transient_analysis +
      model.loadConst(time=0.0)
      @@ -3402,7 +3402,7 @@

      transient_analysis +
      loadConst -time 0.0
      @@ -6443,7 +6443,7 @@

      transient_analysis + diff --git a/examples/example4/index.html b/examples/example4/index.html index 16c11a75..ebd38872 100644 --- a/examples/example4/index.html +++ b/examples/example4/index.html @@ -566,13 +566,13 @@

      Example 4.1 Python Tcl @@ -588,7 +588,7 @@

      Example 4.1 +
      1. @@ -604,7 +604,7 @@

        Example 4.1 +
        1. @@ -3831,7 +3831,7 @@

          Example 4.1 + diff --git a/examples/example5/index.html b/examples/example5/index.html index 49898732..a06c3cf4 100644 --- a/examples/example5/index.html +++ b/examples/example5/index.html @@ -4132,7 +4132,7 @@

          Post-Processing + diff --git a/examples/example6/index.html b/examples/example6/index.html index 9b82384f..1fec6ba2 100644 --- a/examples/example6/index.html +++ b/examples/example6/index.html @@ -1935,7 +1935,7 @@ - + diff --git a/examples/example7/index.html b/examples/example7/index.html index 825ea882..b44b5259 100644 --- a/examples/example7/index.html +++ b/examples/example7/index.html @@ -693,13 +693,13 @@

          Modeling Tcl Python(RT) @@ -715,7 +715,7 @@

          Modeling +
          # generate the nodes and elements
           block2D $nx $ny 1 1 $element $eleArgs {
          @@ -735,7 +735,7 @@ 

          Modeling +
          # generate the surface nodes and elements
           surface = model.surface((nx, ny),
          @@ -2182,7 +2182,7 @@ 

          Dynamic Analysis + diff --git a/examples/example8/index.html b/examples/example8/index.html index aeacc651..21ffeec3 100644 --- a/examples/example8/index.html +++ b/examples/example8/index.html @@ -648,13 +648,13 @@ Tcl Python(RT) @@ -670,7 +670,7 @@ -
          +
          # mesh generation
           block3D $nx $ny $nz   1 1  $element  $eleArgs {
          @@ -691,7 +691,7 @@
           
           
           
          -
          +
          model.block3D(nx, ny, nz, 1, 1, Brick, 1, {
                         1: [-1.0, -1.0,  0.0],
          @@ -2044,7 +2044,7 @@
               
           
           
          -
          +
               
           
               
          diff --git a/examples/framebuckling/index.html b/examples/framebuckling/index.html
          index 8afb3a78..e9cf2c0a 100644
          --- a/examples/framebuckling/index.html
          +++ b/examples/framebuckling/index.html
          @@ -1125,7 +1125,7 @@ 

          Timoshenko Column Buckling < - + diff --git a/examples/frameshear/index.html b/examples/frameshear/index.html index 25ae1623..323c49ad 100644 --- a/examples/frameshear/index.html +++ b/examples/frameshear/index.html @@ -846,7 +846,7 @@ - + diff --git a/examples/index.html b/examples/index.html index e97e5fab..42040112 100644 --- a/examples/index.html +++ b/examples/index.html @@ -1268,7 +1268,7 @@ - + diff --git a/examples/inelasticsdof/index.html b/examples/inelasticsdof/index.html index 4bd9da96..39a0e92c 100644 --- a/examples/inelasticsdof/index.html +++ b/examples/inelasticsdof/index.html @@ -1427,7 +1427,7 @@

          References + diff --git a/examples/mrf_concentrated/index.html b/examples/mrf_concentrated/index.html index 7c1bde1c..088cee04 100644 --- a/examples/mrf_concentrated/index.html +++ b/examples/mrf_concentrated/index.html @@ -923,7 +923,7 @@

          References

          - + diff --git a/examples/page/2/index.html b/examples/page/2/index.html index 48dca50e..d303afed 100644 --- a/examples/page/2/index.html +++ b/examples/page/2/index.html @@ -585,42 +585,12 @@ -
          - - - - - - - - - - - - - - - - - - -
          - - -Example 4: Multibay Two Story Frame -
          -

          Frame • 2D • Tcl

          -

          Example 4: Multibay Two Story Frame

          +
          @@ -644,42 +614,12 @@ -
          - - - - - - - - - - - - - - - - - - -
          - - -Frame with Diaphragms -
          -

          3D • Concrete • Frame

          -

          Frame with Diaphragms

          +
          @@ -703,42 +643,15 @@ -
          - - - - - - - - - - - - - - - - - - -
          - - -Frame with Viscous Dampers -
          -

          Tcl

          -

          Frame with Viscous Dampers

          +
          @@ -763,11 +676,13 @@ @@ -850,42 +765,15 @@ -
          - - - - - - - - - - - - - - - - - - -
          - - -Matrix Eigenvalue Analysis -
          -

          Eigen • Frame • Python

          -

          Matrix Eigenvalue Analysis

          +
          @@ -1250,7 +1138,7 @@ - + diff --git a/examples/page/3/index.html b/examples/page/3/index.html index dd4364de..093ac28f 100644 --- a/examples/page/3/index.html +++ b/examples/page/3/index.html @@ -442,13 +442,42 @@ -
          -

          Python • Tcl • Frame

          -

          Nonlinear Geometry

          +
          @@ -534,36 +561,11 @@ -
          - - @@ -701,42 +707,13 @@ -
          - - - - - - - - - - - - - - - - - - -
          - - -Simple Pendulum -
          -

          -

          Simple Pendulum

          +
          @@ -821,39 +798,38 @@ -
          - - - - - - - - + +
          +
          + + + + -
          -Twisted Cantilever -
          + +
          + + + + + + + + + + + + + + + +
          + + + + + + + + + + + + + + + + + + +
          + + +Shell Diaphragms +
          + +
          +
          + +
          + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + + + + + + + + + + + +
          + + + + + + + + + + + + + + + + + + +
          + + +Twisted Cantilever +
          + +
          +
          + +
          + + + + + + + + + + + + + + + +
          + + + + + + + + + + + + + + + + + +
          @@ -804,7 +1108,7 @@ - + diff --git a/examples/pendulum/index.html b/examples/pendulum/index.html index c8782cf0..b87b1057 100644 --- a/examples/pendulum/index.html +++ b/examples/pendulum/index.html @@ -881,7 +881,7 @@ - + diff --git a/examples/sathertower/index.html b/examples/sathertower/index.html index 407839fe..67f55da8 100644 --- a/examples/sathertower/index.html +++ b/examples/sathertower/index.html @@ -724,7 +724,7 @@ - + diff --git a/examples/sensitivity/index.html b/examples/sensitivity/index.html index a2c5af2c..bdbbec64 100644 --- a/examples/sensitivity/index.html +++ b/examples/sensitivity/index.html @@ -924,7 +924,7 @@ - + diff --git a/examples/shallowdome/index.html b/examples/shallowdome/index.html index 476728d3..60ba8d68 100644 --- a/examples/shallowdome/index.html +++ b/examples/shallowdome/index.html @@ -996,7 +996,7 @@

          Closure + diff --git a/examples/shellframe/ShellFrame.png b/examples/shellframe/ShellFrame.png deleted file mode 100644 index e1628132..00000000 Binary files a/examples/shellframe/ShellFrame.png and /dev/null differ diff --git a/examples/shellframe/ShellFrame_hu5013315635971397841.png b/examples/shellframe/ShellFrame_hu5013315635971397841.png deleted file mode 100644 index f8bb4d56..00000000 Binary files a/examples/shellframe/ShellFrame_hu5013315635971397841.png and /dev/null differ diff --git a/examples/shellframe/archive/model3D_v0.py b/examples/shellframe/archive/model3D_v0.py deleted file mode 100644 index 401359b0..00000000 --- a/examples/shellframe/archive/model3D_v0.py +++ /dev/null @@ -1,573 +0,0 @@ -import openseespy.opensees as ops -import opsvis as opsv -import math -import pandas as pd -import os -import numpy as np -import matplotlib.pyplot as plt - - - - - -class StructuralElements: - def __init__(self, axial_area, elastic_modulus, shear_modulus, torsional_constant, moment_of_inertia_y, moment_of_inertia_z): - self.A = axial_area - self.E = elastic_modulus - self.G = shear_modulus - self.J = torsional_constant - self.Iweak = moment_of_inertia_y - self.Istrong = moment_of_inertia_z - - -class slab: - def __init__(self, elastic_modulus, poisson_ratio, thickness, density, mesh_size): - self.E = elastic_modulus - self.nu = poisson_ratio - self.h = thickness - self.rho = density - self.mesh_size = mesh_size - - -def get_last_node_tag(): - """ - Returns the last node tag defined in the OpenSeesPy model. - - Returns: - int: The tag of the last node. - """ - all_node_tags = ops.getNodeTags() - if all_node_tags: # Check if the list is not empty - return all_node_tags[-1] - else: - return 0 # Return None if no nodes have been defined - - -def get_last_element_tag(): - """ - Returns the last element tag defined in the OpenSeesPy model. - - Returns: - int: The tag of the last element. - """ - all_ele_tags = ops.getEleTags() - if all_ele_tags: # Check if the list is not empty - return all_ele_tags[-1] - else: - return 0 # Return None if no nodes have been defined -def find_closest_node(midpoint, node_tags): - - # Loop through all node tags to find the closest node - for node_id in node_tags: - coord = np.array(ops.nodeCoord(node_id)) - - if np.linalg.norm(coord - midpoint) < 10**-8: - closest_node = node_id - - return closest_node - -def target_node(target_coord): - all_node_tags = ops.getNodeTags() - for node_id in all_node_tags: - coord = np.array(ops.nodeCoord(node_id)) - if np.array_equal(coord, np.array(target_coord)): - return node_id - return None - -def create_slabs(corner_nodes, current_ele_id, slab_id, slab): - """ - Create slab elements using corner nodes provided in groups of four. - - Parameters: - corner_nodes (list): List of node IDs grouped by four, each group representing one slab. - current_ele_id (int): Current starting element ID for slabs. - slab_id (int): Current slab section ID. - E_beam (float): Elastic modulus. - nu (float): Poisson's ratio. - h (float): Slab thickness. - rho (float): Density of the slab material (set to zero if not needed). - mesh_size (float): Mesh size for defining the line elements. - """ - min_distance = float('inf') - closest_node = None - closest_nodes = [] - for i in range(0, len(corner_nodes), 4): - if i + 3 < len(corner_nodes): - line_tags = [] - node_coords = [] - node_ids = [] - - for j in range(4): - start_node = corner_nodes[i + j] - end_node = corner_nodes[i + (j + 1) % 4] - line_tag = current_ele_id - ops.mesh('line', line_tag, 2, *[start_node, end_node], 0, 6, slab.mesh_size) - line_tags.append(line_tag) - current_ele_id += 1 - - - node_coords.append(np.array(ops.nodeCoord(start_node))) - - - ops.section('ElasticMembranePlateSection', slab_id, slab.E, slab.nu, slab.h, slab.rho) - - # Create the shell element using the line meshes - ops.mesh('quad', current_ele_id, 4, *line_tags, 0, 6, slab.mesh_size, 'ShellMITC4', 1) - current_ele_id += 1 - slab_id += 1 - - # Calculate the midpoint of the slab - midpoint = np.mean(node_coords, axis=0) - - # Find the closest node to the midpoint - all_node_tags = ops.getNodeTags() - closest_node = find_closest_node(midpoint, all_node_tags) - closest_nodes.append(closest_node) - - # print("Midpoint of the slab:", midpoint) - # print("Node closest to the midpoint:", closest_node) - - - - return current_ele_id, slab_id, closest_nodes - -def eigenvalue_analysis(n_modes, plot_mode_shapes): - - - """ - Perform a modal analysis on a structure modeled in OpenSees and print the results. - - Parameters: - n_modes (int): Number of modes to analyze. - plot_mode_shapes (bool): If True, plot the mode shapes for each mode. - """ - lambdaN = ops.eigen(n_modes) # eigenvalue analysis for nEigenJ modes - - # Calculate circular frequencies (w) for each mode - w = [math.sqrt(lambda_val) for lambda_val in lambdaN] - - # Set the font to Times New Roman - plt.rcParams['font.serif'] = 'Times New Roman' - plt.rcParams['font.family'] = 'serif' - plt.rcParams.update({ - 'font.size': 16, # General font size - 'axes.labelsize': 14, - 'xtick.labelsize': 14, - 'ytick.labelsize': 14 - }) - - # Assuming 'w' contains angular frequencies for each mode - # Calculate natural frequencies (f) for each mode - frequencies = [frequency / (2.0 * math.pi) for frequency in w] - - # Calculate periods (T) for each mode - periods = [1 / frequency for frequency in frequencies] - - # Creating a DataFrame - df = pd.DataFrame({ - 'Frequency (Hz)': frequencies, - 'Period (s)': periods - }, index=[f"Mode {i+1}" for i in range(len(frequencies))]) - - - print(df) - print("Modal Analysis: Successful.") - - # for i in range(1, len(frequencies) + 1): - # opsv.plot_mode_shape(i) - - # # Retrieve frequency and period for the current mode - # freq = df.loc[f"Mode {i}", 'Frequency (Hz)'] - # period = df.loc[f"Mode {i}", 'Period (s)'] - - # # Setting the title using Greek letters for mode shapes - # plt.title(f'$\\phi_{{{i}}}$ - Freq: {freq:.2f} Hz, Period: {period:.2f} s', fontsize=12) - - return df, w - - - -def model3D(modify, node_id, length_x, length_y, length_z, base_z, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - column, beam, - node_map, column_set, beam_set,corners,corner_nodes): - """ - Create nodes, columns, and beams in multiple square patterns in 3D space, - with fixed nodes only at the ground level z = 0, and beams beginning from the first floor. - - Parameters: - All parameters as previously defined, with the addition of: - base_z (float): Base z-coordinate from which columns start. - """ - num_per_side_x = int(length_x / spacing) + 1 - num_per_side_y = int(length_y / spacing) + 1 - current_node_id = node_id - current_ele_id = eleTag - - - # Loop over the grid defined by num_bay_x and num_bay_y - for ix in range(num_bay_x): - for iy in range(num_bay_y): - # Generate corners for each square at the base and subsequent levels - for level in range(num_story-modify): # Assuming two levels: ground and one above - z = base_z + level * length_z - for dx in [0, length_x]: - for dy in [0, length_y]: - x = ix * length_x + dx - y = iy * length_y + dy - coord = (x, y, z) - if coord not in node_map: - ops.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - if z == 0: # Apply fixity only at the ground level - ops.fix(current_node_id, 1, 1, 1, 1, 1, 1) - current_node_id += 1 - - # Create columns from base level to the next level if not the top level - if level < 1: # Adjust if more levels are needed - for corner in [(ix * length_x, iy * length_y, z), - ((ix + 1) * length_x, iy * length_y, z), - ((ix + 1) * length_x, (iy + 1) * length_y, z), - (ix * length_x, (iy + 1) * length_y, z)]: - - upper_corner = (corner[0], corner[1], z + length_z) - if upper_corner not in node_map: - ops.node(current_node_id, *upper_corner) - node_map[upper_corner] = current_node_id - current_node_id += 1 - - column_key = tuple(sorted([node_map[corner], node_map[upper_corner]])) - - if column_key not in column_set: - - # Local x-axis from nodal coordinates - XYZI = ops.nodeCoord(node_map[corner]) - XYZJ = ops.nodeCoord(node_map[upper_corner]) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - - - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - ops.geomTransf('Linear', geoTag, *vecxz) - - - ops.element('elasticBeamColumn', current_ele_id, node_map[corner], node_map[upper_corner], - column.A, column.E, column.G, column.J, column.Iweak, column.Istrong, geoTag, '-mass', 463) - current_ele_id += 1 - column_set.add(column_key) - - corners.append(upper_corner) - corner_nodes.append(node_map[upper_corner]) - - - # Create beams at the first floor level - z = base_z + length_z - for ix in range(num_bay_x): - for iy in range(num_bay_y): - for side in range(4): - prev_node = None - num_steps = num_per_side_x if side % 2 == 0 else num_per_side_y - for i in range(num_steps): - x, y = (ix * length_x + i * spacing, iy * length_y) if side == 0 else \ - ((ix + 1) * length_x, iy * length_y + i * spacing) if side == 1 else \ - (ix * length_x + length_x - i * spacing, iy * length_y + length_y) if side == 2 else \ - (ix * length_x, iy * length_y + length_y - i * spacing) - coord = (x, y, z) - if coord not in node_map: - ops.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - current_node_id += 1 - new_node_id = node_map[coord] - - if prev_node is not None and tuple(sorted([prev_node, new_node_id])) not in beam_set: - # Local x-axis from nodal coordinates - XYZI = ops.nodeCoord(prev_node) - XYZJ = ops.nodeCoord(new_node_id) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] if side % 2 == 0 else [1, 0, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - ops.geomTransf('Linear', geoTag, *vecxz) - - ops.element('elasticBeamColumn', current_ele_id, prev_node, new_node_id, beam.A, beam.E, beam.G, beam.J, beam.Iweak, beam.Istrong, geoTag, '-mass', 90) - beam_set.add(tuple(sorted([prev_node, new_node_id]))) - current_ele_id += 1 - - prev_node = new_node_id - - return current_node_id, current_ele_id, corner_nodes, geoTag_counter - - - -def dynamic_analysis(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - dt, npts, eq_data, m_nsc, RSN_num, f_nsc, counter, slab_point, gm_sf): - - ops.wipe() - - ndm = 3 - ndf = 6 - - ops.model('basic', '-ndm', ndm, '-ndf', ndf) - - #%% Structural elements - - W14X311 = StructuralElements( - axial_area=0.059, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=6.701E-04, - moment_of_inertia_z=1.802E-03 - ) - - W10X60 = StructuralElements( - axial_area=0.0114, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=1.419E-4, - moment_of_inertia_z=4.826E-05 - ) - - - - #%% - - modify = num_story - 2 - node_id = 1 - eleTag = 1 - node_map = {} # Dictionary to map coordinates to node IDs - column_set = set() # Set to track created columns to avoid duplication - beam_set = set() # Set to track created beams to avoid duplication - corners =[] - corner_nodes = [] - slab_id = 1 - vecxz_to_geoTag = {} - geoTag_counter = 0 - for i in range(0, num_story*length_z, length_z): - current_node_id, current_ele_id, corner_nodes, geoTag_counter = model3D(modify, node_id, length_x, length_y, length_z, i, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - W14X311, W10X60, - node_map, column_set, beam_set,corners,corner_nodes) - - node_id = current_node_id - eleTag = current_ele_id - - - #%% ADDITIONAL MASS - m1 = 0 # Mass in kg - # m1 = 9076 - unique_nodes = set(corner_nodes) # Convert to set to remove duplicates - - # all_node_tags = ops.getNodeTags() - # Assign mass to each unique node - for node_id in unique_nodes: - ops.mass(node_id, m1, m1, m1, 1.0e-10, 1.0e-10, 1.0e-10) - - - #%% SLAB - slabs = slab( - elastic_modulus = 2.486E10, - poisson_ratio = 0.2, - thickness = 0.2, - density = 2402.7696, - mesh_size = spacing - ) - - current_ele_id, slab_id, closest_nodes = create_slabs(corner_nodes, eleTag, slab_id, slabs) - - - target_node_id = target_node(target_coord) - - for ndI in ops.getNodeTags(): - XYZI = np.array(ops.nodeCoord(ndI)) - for ndJ in ops.getNodeTags(): - if ndI >= ndJ: - continue - XYZJ = np.array(ops.nodeCoord(ndJ)) - if np.linalg.norm(XYZJ-XYZI) < 1e-8: - ops.equalDOF(ndI,ndJ,1,2,3,4,5,6) - - slab_loc = ops.nodeCoord(target_node_id) - - slab_nodetag = target_node_id - allTags = ops.getNodeTags() - nsc_nodetag = allTags[-1] + 1 - - L_nsc = 1.0 # m - - ops.node(nsc_nodetag, slab_loc[0], slab_loc[1], slab_loc[2]+L_nsc) - - # W10X60 - - axial_area_nsc = 1 - E_nsc = 4*math.pi**2*m_nsc*f_nsc**2 - G_nsc = 3846154 - Jxx_nsc = 0.1408 - Iy_nsc = 0.0833 - Iz_nsc = 0.0833 - - all_eletag =ops.getEleTags() - nsc_eletag = all_eletag[-1] + 1 - - # Local x-axis from nodal coordinates - XYZI = ops.nodeCoord(slab_nodetag) - XYZJ = ops.nodeCoord(nsc_nodetag) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - ops.geomTransf('Linear', geoTag, *vecxz) - ops.element('elasticBeamColumn', nsc_eletag, slab_nodetag, nsc_nodetag,axial_area_nsc, E_nsc, G_nsc, Jxx_nsc, Iy_nsc, Iz_nsc, geoTag) - - ops.mass(nsc_nodetag, 1.0e-10,1.0e-10,m_nsc , 1.0e-10, 1.0e-10, 1.0e-10) - - - - - - # opsv.plot_model() - - df, w = eigenvalue_analysis(n_modes, plot_mode_shapes=True) - - - #%% DAMPING - zeta = 0.02 # percentage of critical damping - a0 = zeta * 2.0 * w[0] * w[1] / (w[0] + w[1]) # mass damping coefficient based on first and second modes - a1 = zeta * 2.0 / (w[0] + w[1]) # stiffness damping coefficient based on first and second modes - # assign damping to frame beams and columns - - ops.rayleigh(a0, a1, 0, 0) - - - # zeta_nsc = 0.02 - - # a0_nsc = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) # mass damping coefficient based on first and second modes - # a1_nsc = zeta_nsc * 2.0 / (w[3] + w[4]) # stiffness damping coefficient based on first and second modes - # # assign damping to frame beams and columns - - # ops.region(1, '-eleRange', 1, 120, '-rayleigh',a0, a1,0,0) - # ops.region(2, '-ele', 121, '-rayleigh', a0_nsc, a1_nsc, 0,0) - - # if w[0] <= f_nsc < w[1]: - # a0 = zeta_nsc * 2.0 * w[0] * w[1] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[0] + w[1]) - # elif w[1] <= f_nsc < w[2]: - # a0 = zeta_nsc * 2.0 * w[1] * w[2] / (w[1] + w[2]) - # a1 = zeta_nsc * 2.0 / (w[1] + w[2]) - # elif w[2] <= f_nsc < w[3]: - # a0 = zeta_nsc * 2.0 * w[2] * w[3] / (w[2] + w[3]) - # a1 = zeta_nsc * 2.0 / (w[2] + w[3]) - # elif w[3] <= f_nsc < w[4]: - # a0 = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[3] + w[4]) - - - # elif w[9] <= f_nsc < w[10]: - # a0 = zeta_nsc * 2.0 * w[9] * w[10] / (w[9] + w[10]) - # a1 = zeta_nsc * 2.0 / (w[9] + w[10]) - - - - #%% DYNAMIC ANALYSIS - - GM_direction = 3 - timeSeries_tag = 2 - pattern_tag = 2 - - G = gm_sf * 9.81 - ops.timeSeries('Path', timeSeries_tag, '-dt', dt, '-values', *eq_data, '-factor', G) - ops.pattern('UniformExcitation', pattern_tag, GM_direction, '-accel', timeSeries_tag) - - #%% DATA DIRECTORY - Output = "Acc Output" - NSCacc_path = f'Acc Output/absNSCacc_RSN{RSN_num}.out' - slabacc_path = f'Acc Output/absSlabacc_RSN{RSN_num}.out' - os.makedirs(Output, exist_ok = True) - # NSC - ops.recorder('Node','-file', NSCacc_path ,'-timeSeries',timeSeries_tag,'-time', '-node', nsc_nodetag, '-dof',3, 'accel' ) - - # Slab - ops.recorder('Node','-file',slabacc_path,'-timeSeries', timeSeries_tag,'-time', '-node', slab_nodetag, '-dof',3, 'accel' ) - - - # Dyanmic analysis parameters - ops.wipeAnalysis() - ops.constraints('Plain') - ops.numberer('RCM') - ops.system('UmfPack') - ops.test('NormDispIncr', 1.0e-8, 50) - ops.algorithm('NewtonLineSearch') - ops.integrator('Newmark', 0.5, 0.25) - ops.analysis('Transient') - - ok = ops.analyze(npts, dt) - if ok == 0: - print("Dynamic analysis complete") - else: - print("Dynamic analysis did not converge") - - - NSC_data = np.genfromtxt(NSCacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - slab_data = np.genfromtxt(slabacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - - # t = NSC_data[:, 0] # Time data - NSC_acc = NSC_data[:, 1] # NSC acceleration data - slab_acc = slab_data[:, 1] # Slab acceleration data - print(f"Analysis completed successfully for RSN{RSN_num}.") - - # Max NSC accelerations - max_NSCacc = np.max(np.absolute(NSC_acc)) - - # Max slab accelerations - max_slabacc = np.max(np.absolute(slab_acc)) - - - return max_NSCacc, max_slabacc - -# plt.close('all') -# dynamic_analysis() diff --git a/examples/shellframe/extrude-s3.glb b/examples/shellframe/extrude-s3.glb deleted file mode 100644 index 3f87566d..00000000 Binary files a/examples/shellframe/extrude-s3.glb and /dev/null differ diff --git a/examples/shellframe/extrude-s6.glb b/examples/shellframe/extrude-s6.glb deleted file mode 100644 index 92496c10..00000000 Binary files a/examples/shellframe/extrude-s6.glb and /dev/null differ diff --git a/examples/shellframe/extruded.glb b/examples/shellframe/extruded.glb deleted file mode 100644 index 75c920e3..00000000 Binary files a/examples/shellframe/extruded.glb and /dev/null differ diff --git a/examples/shellframe/main.py b/examples/shellframe/main.py deleted file mode 100644 index 637b35e4..00000000 --- a/examples/shellframe/main.py +++ /dev/null @@ -1,100 +0,0 @@ -import numpy as np -import matplotlib.pyplot as plt -import datetime -import os -import pandas as pd -import xlsxwriter - -import warnings -import shutup; shutup.please() - -start_total = datetime.datetime.now() - -plt.close('all') - -import readGM -import model3D - -# List of RSN numbers and scaling factors -rsn_numbers = [15, 20, 31, 68, 289, 740, 827, 864, 1083, 4013, 4844] -# rsn_numbers = [289] -peer_scaling = [3.4404, 1.7763, 5.3947, 2.6261, 2.4678, 4.7919, 2.7061, 1.4524, 3.2421, 4.0212, 3.4858] -# peer_scaling = [2.4678] -# List of slab points -# slab_points = ['Midpoint', 'Near column', 'Near beam'] -slab_points = ['Slab 1 Column fnsc 10'] -# Iterate over each slab point - -n_modes = 20; plot_mode_shapes=False -m_nsc = 20; f_nsc = 10 - - -spacing = 1 -num_bay_x = 3 -num_bay_y = 3 -length_x = 6 -length_y = 6 -length_z = 3 -num_story = 3 -story_levels = [1,2,3] - -x = 0; y = 0 -target_coords = [[x,y,3],[x,y,6],[x,y,9]] -for slab_point in slab_points: - # Define path for the Excel file - output_file_path = f'{slab_point} results.xlsx' - - - with pd.ExcelWriter(output_file_path, engine='xlsxwriter') as writer: - - # Iterate over multiple story levels - for story_level, target_coord in zip(story_levels, target_coords): - results = [] - counter = 0 - - for RSN_num, scale_factor in zip(rsn_numbers, peer_scaling): - - start_ind = datetime.datetime.now() - - z_h = 3.0 * story_level + 1 - file_name = f'RSN{RSN_num}-UP.txt' - dt, npts, eq_data = readGM.readGM_txt(file_name) - PGA = 9.81 * scale_factor * np.max(np.absolute(eq_data)) - - - - - max_NSCacc, max_slabacc = model3D.dynamic_analysis(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - dt, npts, eq_data, m_nsc, RSN_num, f_nsc, counter, slab_point, scale_factor) - - warnings.filterwarnings('ignore') - - PFA = max_slabacc - PCA = max_NSCacc - PFA_PGA = PFA / PGA if PGA != 0 else 'DIV/0!' - PCA_PGA = PCA / PGA if PGA != 0 else 'DIV/0!' - PCA_PFA = PCA / PFA if PFA != 0 else 'DIV/0!' - - results.append([RSN_num, 'GM', z_h, PGA, PFA, PCA, PFA_PGA, PCA_PGA, PCA_PFA]) - counter += 1 - end_ind = datetime.datetime.now() - - - - - print(f"Analysis for Story Level {story_level}") - # Create a DataFrame from the results - df = pd.DataFrame(results, columns=['RSN', 'GM', 'z/h', 'PGA [m/s^2]', 'PFA [m/s^2]', 'PCA [m/s^2]', 'PFA/PGA', 'PCA/PGA', 'PCA/PFA']) - - # Sheet name based on the story level - sheet_name = f'Story {story_level}' - df.to_excel(writer, sheet_name=sheet_name, index=False) - - print(f"Data saved to {output_file_path}") - -end_total = datetime.datetime.now() - - -print('Execution time: {end_total - start_total} seconds') diff --git a/examples/shellframe/model-0001.glb b/examples/shellframe/model-0001.glb deleted file mode 100644 index 0975e063..00000000 Binary files a/examples/shellframe/model-0001.glb and /dev/null differ diff --git a/examples/shellframe/model-0001.json b/examples/shellframe/model-0001.json deleted file mode 100644 index 3ab025b6..00000000 --- a/examples/shellframe/model-0001.json +++ /dev/null @@ -1,3155 +0,0 @@ -{ -"StructuralAnalysisModel": { - "BIM": "unknown", - "description": "", - "engineer": "", - "units": { - "force": "", - "length": "", - "time": "", - "temperature": "" - }, - "properties": { - "uniaxialMaterials": [ - - ], - "ndMaterials": [ - - ], - "sections": [ - {"name": "1", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "2", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "3", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "4", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "5", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "6", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "7", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "8", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "9", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "10", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "11", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "12", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "13", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "14", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "15", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "16", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "17", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "18", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "19", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "20", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "21", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "22", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "23", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "24", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "25", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "26", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77}, - {"name": "27", "type": "ElasticMembranePlateSection", "Em": 2.486e+10, "Ep": 2.486e+10, "nu": 0.2, "thickness": 0.2, "masspervolume": 2402.77} - ], - "crdTransformations": [ - {"name": "0", "type": "LinearCrdTransf3d", "vecInLocXZPlane": [-3, 0, 0]}, - {"name": "1", "type": "LinearCrdTransf3d", "vecInLocXZPlane": [0, 0, 1]}, - {"name": "2", "type": "LinearCrdTransf3d", "vecInLocXZPlane": [0, 0, -1]}, - {"name": "3", "type": "LinearCrdTransf3d", "vecInLocXZPlane": [-1, 0, 0]} - ] - }, - "geometry": { - "nodes": [ - {"name": 1, "ndf": 6, "crd": [0, 0, 0]}, - {"name": 2, "ndf": 6, "crd": [0, 6, 0]}, - {"name": 3, "ndf": 6, "crd": [6, 0, 0]}, - {"name": 4, "ndf": 6, "crd": [6, 6, 0]}, - {"name": 5, "ndf": 6, "crd": [0, 0, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 6, "ndf": 6, "crd": [6, 0, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 7, "ndf": 6, "crd": [6, 6, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 8, "ndf": 6, "crd": [0, 6, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 9, "ndf": 6, "crd": [0, 12, 0]}, - {"name": 10, "ndf": 6, "crd": [6, 12, 0]}, - {"name": 11, "ndf": 6, "crd": [6, 12, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 12, "ndf": 6, "crd": [0, 12, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 13, "ndf": 6, "crd": [0, 18, 0]}, - {"name": 14, "ndf": 6, "crd": [6, 18, 0]}, - {"name": 15, "ndf": 6, "crd": [6, 18, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 16, "ndf": 6, "crd": [0, 18, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 17, "ndf": 6, "crd": [12, 0, 0]}, - {"name": 18, "ndf": 6, "crd": [12, 6, 0]}, - {"name": 19, "ndf": 6, "crd": [12, 0, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 20, "ndf": 6, "crd": [12, 6, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 21, "ndf": 6, "crd": [12, 12, 0]}, - {"name": 22, "ndf": 6, "crd": [12, 12, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 23, "ndf": 6, "crd": [12, 18, 0]}, - {"name": 24, "ndf": 6, "crd": [12, 18, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 25, "ndf": 6, "crd": [18, 0, 0]}, - {"name": 26, "ndf": 6, "crd": [18, 6, 0]}, - {"name": 27, "ndf": 6, "crd": [18, 0, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 28, "ndf": 6, "crd": [18, 6, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 29, "ndf": 6, "crd": [18, 12, 0]}, - {"name": 30, "ndf": 6, "crd": [18, 12, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 31, "ndf": 6, "crd": [18, 18, 0]}, - {"name": 32, "ndf": 6, "crd": [18, 18, 3], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 33, "ndf": 6, "crd": [1, 0, 3]}, - {"name": 34, "ndf": 6, "crd": [2, 0, 3]}, - {"name": 35, "ndf": 6, "crd": [3, 0, 3]}, - {"name": 36, "ndf": 6, "crd": [4, 0, 3]}, - {"name": 37, "ndf": 6, "crd": [5, 0, 3]}, - {"name": 38, "ndf": 6, "crd": [6, 1, 3]}, - {"name": 39, "ndf": 6, "crd": [6, 2, 3]}, - {"name": 40, "ndf": 6, "crd": [6, 3, 3]}, - {"name": 41, "ndf": 6, "crd": [6, 4, 3]}, - {"name": 42, "ndf": 6, "crd": [6, 5, 3]}, - {"name": 43, "ndf": 6, "crd": [5, 6, 3]}, - {"name": 44, "ndf": 6, "crd": [4, 6, 3]}, - {"name": 45, "ndf": 6, "crd": [3, 6, 3]}, - {"name": 46, "ndf": 6, "crd": [2, 6, 3]}, - {"name": 47, "ndf": 6, "crd": [1, 6, 3]}, - {"name": 48, "ndf": 6, "crd": [0, 5, 3]}, - {"name": 49, "ndf": 6, "crd": [0, 4, 3]}, - {"name": 50, "ndf": 6, "crd": [0, 3, 3]}, - {"name": 51, "ndf": 6, "crd": [0, 2, 3]}, - {"name": 52, "ndf": 6, "crd": [0, 1, 3]}, - {"name": 53, "ndf": 6, "crd": [6, 7, 3]}, - {"name": 54, "ndf": 6, "crd": [6, 8, 3]}, - {"name": 55, "ndf": 6, "crd": [6, 9, 3]}, - {"name": 56, "ndf": 6, "crd": [6, 10, 3]}, - {"name": 57, "ndf": 6, "crd": [6, 11, 3]}, - {"name": 58, "ndf": 6, "crd": [5, 12, 3]}, - {"name": 59, "ndf": 6, "crd": [4, 12, 3]}, - {"name": 60, "ndf": 6, "crd": [3, 12, 3]}, - {"name": 61, "ndf": 6, "crd": [2, 12, 3]}, - {"name": 62, "ndf": 6, "crd": [1, 12, 3]}, - {"name": 63, "ndf": 6, "crd": [0, 11, 3]}, - {"name": 64, "ndf": 6, "crd": [0, 10, 3]}, - {"name": 65, "ndf": 6, "crd": [0, 9, 3]}, - {"name": 66, "ndf": 6, "crd": [0, 8, 3]}, - {"name": 67, "ndf": 6, "crd": [0, 7, 3]}, - {"name": 68, "ndf": 6, "crd": [6, 13, 3]}, - {"name": 69, "ndf": 6, "crd": [6, 14, 3]}, - {"name": 70, "ndf": 6, "crd": [6, 15, 3]}, - {"name": 71, "ndf": 6, "crd": [6, 16, 3]}, - {"name": 72, "ndf": 6, "crd": [6, 17, 3]}, - {"name": 73, "ndf": 6, "crd": [5, 18, 3]}, - {"name": 74, "ndf": 6, "crd": [4, 18, 3]}, - {"name": 75, "ndf": 6, "crd": [3, 18, 3]}, - {"name": 76, "ndf": 6, "crd": [2, 18, 3]}, - {"name": 77, "ndf": 6, "crd": [1, 18, 3]}, - {"name": 78, "ndf": 6, "crd": [0, 17, 3]}, - {"name": 79, "ndf": 6, "crd": [0, 16, 3]}, - {"name": 80, "ndf": 6, "crd": [0, 15, 3]}, - {"name": 81, "ndf": 6, "crd": [0, 14, 3]}, - {"name": 82, "ndf": 6, "crd": [0, 13, 3]}, - {"name": 83, "ndf": 6, "crd": [7, 0, 3]}, - {"name": 84, "ndf": 6, "crd": [8, 0, 3]}, - {"name": 85, "ndf": 6, "crd": [9, 0, 3]}, - {"name": 86, "ndf": 6, "crd": [10, 0, 3]}, - {"name": 87, "ndf": 6, "crd": [11, 0, 3]}, - {"name": 88, "ndf": 6, "crd": [12, 1, 3]}, - {"name": 89, "ndf": 6, "crd": [12, 2, 3]}, - {"name": 90, "ndf": 6, "crd": [12, 3, 3]}, - {"name": 91, "ndf": 6, "crd": [12, 4, 3]}, - {"name": 92, "ndf": 6, "crd": [12, 5, 3]}, - {"name": 93, "ndf": 6, "crd": [11, 6, 3]}, - {"name": 94, "ndf": 6, "crd": [10, 6, 3]}, - {"name": 95, "ndf": 6, "crd": [9, 6, 3]}, - {"name": 96, "ndf": 6, "crd": [8, 6, 3]}, - {"name": 97, "ndf": 6, "crd": [7, 6, 3]}, - {"name": 98, "ndf": 6, "crd": [12, 7, 3]}, - {"name": 99, "ndf": 6, "crd": [12, 8, 3]}, - {"name": 100, "ndf": 6, "crd": [12, 9, 3]}, - {"name": 101, "ndf": 6, "crd": [12, 10, 3]}, - {"name": 102, "ndf": 6, "crd": [12, 11, 3]}, - {"name": 103, "ndf": 6, "crd": [11, 12, 3]}, - {"name": 104, "ndf": 6, "crd": [10, 12, 3]}, - {"name": 105, "ndf": 6, "crd": [9, 12, 3]}, - {"name": 106, "ndf": 6, "crd": [8, 12, 3]}, - {"name": 107, "ndf": 6, "crd": [7, 12, 3]}, - {"name": 108, "ndf": 6, "crd": [12, 13, 3]}, - {"name": 109, "ndf": 6, "crd": [12, 14, 3]}, - {"name": 110, "ndf": 6, "crd": [12, 15, 3]}, - {"name": 111, "ndf": 6, "crd": [12, 16, 3]}, - {"name": 112, "ndf": 6, "crd": [12, 17, 3]}, - {"name": 113, "ndf": 6, "crd": [11, 18, 3]}, - {"name": 114, "ndf": 6, "crd": [10, 18, 3]}, - {"name": 115, "ndf": 6, "crd": [9, 18, 3]}, - {"name": 116, "ndf": 6, "crd": [8, 18, 3]}, - {"name": 117, "ndf": 6, "crd": [7, 18, 3]}, - {"name": 118, "ndf": 6, "crd": [13, 0, 3]}, - {"name": 119, "ndf": 6, "crd": [14, 0, 3]}, - {"name": 120, "ndf": 6, "crd": [15, 0, 3]}, - {"name": 121, "ndf": 6, "crd": [16, 0, 3]}, - {"name": 122, "ndf": 6, "crd": [17, 0, 3]}, - {"name": 123, "ndf": 6, "crd": [18, 1, 3]}, - {"name": 124, "ndf": 6, "crd": [18, 2, 3]}, - {"name": 125, "ndf": 6, "crd": [18, 3, 3]}, - {"name": 126, "ndf": 6, "crd": [18, 4, 3]}, - {"name": 127, "ndf": 6, "crd": [18, 5, 3]}, - {"name": 128, "ndf": 6, "crd": [17, 6, 3]}, - {"name": 129, "ndf": 6, "crd": [16, 6, 3]}, - {"name": 130, "ndf": 6, "crd": [15, 6, 3]}, - {"name": 131, "ndf": 6, "crd": [14, 6, 3]}, - {"name": 132, "ndf": 6, "crd": [13, 6, 3]}, - {"name": 133, "ndf": 6, "crd": [18, 7, 3]}, - {"name": 134, "ndf": 6, "crd": [18, 8, 3]}, - {"name": 135, "ndf": 6, "crd": [18, 9, 3]}, - {"name": 136, "ndf": 6, "crd": [18, 10, 3]}, - {"name": 137, "ndf": 6, "crd": [18, 11, 3]}, - {"name": 138, "ndf": 6, "crd": [17, 12, 3]}, - {"name": 139, "ndf": 6, "crd": [16, 12, 3]}, - {"name": 140, "ndf": 6, "crd": [15, 12, 3]}, - {"name": 141, "ndf": 6, "crd": [14, 12, 3]}, - {"name": 142, "ndf": 6, "crd": [13, 12, 3]}, - {"name": 143, "ndf": 6, "crd": [18, 13, 3]}, - {"name": 144, "ndf": 6, "crd": [18, 14, 3]}, - {"name": 145, "ndf": 6, "crd": [18, 15, 3]}, - {"name": 146, "ndf": 6, "crd": [18, 16, 3]}, - {"name": 147, "ndf": 6, "crd": [18, 17, 3]}, - {"name": 148, "ndf": 6, "crd": [17, 18, 3]}, - {"name": 149, "ndf": 6, "crd": [16, 18, 3]}, - {"name": 150, "ndf": 6, "crd": [15, 18, 3]}, - {"name": 151, "ndf": 6, "crd": [14, 18, 3]}, - {"name": 152, "ndf": 6, "crd": [13, 18, 3]}, - {"name": 153, "ndf": 6, "crd": [0, 0, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 154, "ndf": 6, "crd": [6, 0, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 155, "ndf": 6, "crd": [6, 6, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 156, "ndf": 6, "crd": [0, 6, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 157, "ndf": 6, "crd": [6, 12, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 158, "ndf": 6, "crd": [0, 12, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 159, "ndf": 6, "crd": [6, 18, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 160, "ndf": 6, "crd": [0, 18, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 161, "ndf": 6, "crd": [12, 0, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 162, "ndf": 6, "crd": [12, 6, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 163, "ndf": 6, "crd": [12, 12, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 164, "ndf": 6, "crd": [12, 18, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 165, "ndf": 6, "crd": [18, 0, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 166, "ndf": 6, "crd": [18, 6, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 167, "ndf": 6, "crd": [18, 12, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 168, "ndf": 6, "crd": [18, 18, 6], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 169, "ndf": 6, "crd": [1, 0, 6]}, - {"name": 170, "ndf": 6, "crd": [2, 0, 6]}, - {"name": 171, "ndf": 6, "crd": [3, 0, 6]}, - {"name": 172, "ndf": 6, "crd": [4, 0, 6]}, - {"name": 173, "ndf": 6, "crd": [5, 0, 6]}, - {"name": 174, "ndf": 6, "crd": [6, 1, 6]}, - {"name": 175, "ndf": 6, "crd": [6, 2, 6]}, - {"name": 176, "ndf": 6, "crd": [6, 3, 6]}, - {"name": 177, "ndf": 6, "crd": [6, 4, 6]}, - {"name": 178, "ndf": 6, "crd": [6, 5, 6]}, - {"name": 179, "ndf": 6, "crd": [5, 6, 6]}, - {"name": 180, "ndf": 6, "crd": [4, 6, 6]}, - {"name": 181, "ndf": 6, "crd": [3, 6, 6]}, - {"name": 182, "ndf": 6, "crd": [2, 6, 6]}, - {"name": 183, "ndf": 6, "crd": [1, 6, 6]}, - {"name": 184, "ndf": 6, "crd": [0, 5, 6]}, - {"name": 185, "ndf": 6, "crd": [0, 4, 6]}, - {"name": 186, "ndf": 6, "crd": [0, 3, 6]}, - {"name": 187, "ndf": 6, "crd": [0, 2, 6]}, - {"name": 188, "ndf": 6, "crd": [0, 1, 6]}, - {"name": 189, "ndf": 6, "crd": [6, 7, 6]}, - {"name": 190, "ndf": 6, "crd": [6, 8, 6]}, - {"name": 191, "ndf": 6, "crd": [6, 9, 6]}, - {"name": 192, "ndf": 6, "crd": [6, 10, 6]}, - {"name": 193, "ndf": 6, "crd": [6, 11, 6]}, - {"name": 194, "ndf": 6, "crd": [5, 12, 6]}, - {"name": 195, "ndf": 6, "crd": [4, 12, 6]}, - {"name": 196, "ndf": 6, "crd": [3, 12, 6]}, - {"name": 197, "ndf": 6, "crd": [2, 12, 6]}, - {"name": 198, "ndf": 6, "crd": [1, 12, 6]}, - {"name": 199, "ndf": 6, "crd": [0, 11, 6]}, - {"name": 200, "ndf": 6, "crd": [0, 10, 6]}, - {"name": 201, "ndf": 6, "crd": [0, 9, 6]}, - {"name": 202, "ndf": 6, "crd": [0, 8, 6]}, - {"name": 203, "ndf": 6, "crd": [0, 7, 6]}, - {"name": 204, "ndf": 6, "crd": [6, 13, 6]}, - {"name": 205, "ndf": 6, "crd": [6, 14, 6]}, - {"name": 206, "ndf": 6, "crd": [6, 15, 6]}, - {"name": 207, "ndf": 6, "crd": [6, 16, 6]}, - {"name": 208, "ndf": 6, "crd": [6, 17, 6]}, - {"name": 209, "ndf": 6, "crd": [5, 18, 6]}, - {"name": 210, "ndf": 6, "crd": [4, 18, 6]}, - {"name": 211, "ndf": 6, "crd": [3, 18, 6]}, - {"name": 212, "ndf": 6, "crd": [2, 18, 6]}, - {"name": 213, "ndf": 6, "crd": [1, 18, 6]}, - {"name": 214, "ndf": 6, "crd": [0, 17, 6]}, - {"name": 215, "ndf": 6, "crd": [0, 16, 6]}, - {"name": 216, "ndf": 6, "crd": [0, 15, 6]}, - {"name": 217, "ndf": 6, "crd": [0, 14, 6]}, - {"name": 218, "ndf": 6, "crd": [0, 13, 6]}, - {"name": 219, "ndf": 6, "crd": [7, 0, 6]}, - {"name": 220, "ndf": 6, "crd": [8, 0, 6]}, - {"name": 221, "ndf": 6, "crd": [9, 0, 6]}, - {"name": 222, "ndf": 6, "crd": [10, 0, 6]}, - {"name": 223, "ndf": 6, "crd": [11, 0, 6]}, - {"name": 224, "ndf": 6, "crd": [12, 1, 6]}, - {"name": 225, "ndf": 6, "crd": [12, 2, 6]}, - {"name": 226, "ndf": 6, "crd": [12, 3, 6]}, - {"name": 227, "ndf": 6, "crd": [12, 4, 6]}, - {"name": 228, "ndf": 6, "crd": [12, 5, 6]}, - {"name": 229, "ndf": 6, "crd": [11, 6, 6]}, - {"name": 230, "ndf": 6, "crd": [10, 6, 6]}, - {"name": 231, "ndf": 6, "crd": [9, 6, 6]}, - {"name": 232, "ndf": 6, "crd": [8, 6, 6]}, - {"name": 233, "ndf": 6, "crd": [7, 6, 6]}, - {"name": 234, "ndf": 6, "crd": [12, 7, 6]}, - {"name": 235, "ndf": 6, "crd": [12, 8, 6]}, - {"name": 236, "ndf": 6, "crd": [12, 9, 6]}, - {"name": 237, "ndf": 6, "crd": [12, 10, 6]}, - {"name": 238, "ndf": 6, "crd": [12, 11, 6]}, - {"name": 239, "ndf": 6, "crd": [11, 12, 6]}, - {"name": 240, "ndf": 6, "crd": [10, 12, 6]}, - {"name": 241, "ndf": 6, "crd": [9, 12, 6]}, - {"name": 242, "ndf": 6, "crd": [8, 12, 6]}, - {"name": 243, "ndf": 6, "crd": [7, 12, 6]}, - {"name": 244, "ndf": 6, "crd": [12, 13, 6]}, - {"name": 245, "ndf": 6, "crd": [12, 14, 6]}, - {"name": 246, "ndf": 6, "crd": [12, 15, 6]}, - {"name": 247, "ndf": 6, "crd": [12, 16, 6]}, - {"name": 248, "ndf": 6, "crd": [12, 17, 6]}, - {"name": 249, "ndf": 6, "crd": [11, 18, 6]}, - {"name": 250, "ndf": 6, "crd": [10, 18, 6]}, - {"name": 251, "ndf": 6, "crd": [9, 18, 6]}, - {"name": 252, "ndf": 6, "crd": [8, 18, 6]}, - {"name": 253, "ndf": 6, "crd": [7, 18, 6]}, - {"name": 254, "ndf": 6, "crd": [13, 0, 6]}, - {"name": 255, "ndf": 6, "crd": [14, 0, 6]}, - {"name": 256, "ndf": 6, "crd": [15, 0, 6]}, - {"name": 257, "ndf": 6, "crd": [16, 0, 6]}, - {"name": 258, "ndf": 6, "crd": [17, 0, 6]}, - {"name": 259, "ndf": 6, "crd": [18, 1, 6]}, - {"name": 260, "ndf": 6, "crd": [18, 2, 6]}, - {"name": 261, "ndf": 6, "crd": [18, 3, 6]}, - {"name": 262, "ndf": 6, "crd": [18, 4, 6]}, - {"name": 263, "ndf": 6, "crd": [18, 5, 6]}, - {"name": 264, "ndf": 6, "crd": [17, 6, 6]}, - {"name": 265, "ndf": 6, "crd": [16, 6, 6]}, - {"name": 266, "ndf": 6, "crd": [15, 6, 6]}, - {"name": 267, "ndf": 6, "crd": [14, 6, 6]}, - {"name": 268, "ndf": 6, "crd": [13, 6, 6]}, - {"name": 269, "ndf": 6, "crd": [18, 7, 6]}, - {"name": 270, "ndf": 6, "crd": [18, 8, 6]}, - {"name": 271, "ndf": 6, "crd": [18, 9, 6]}, - {"name": 272, "ndf": 6, "crd": [18, 10, 6]}, - {"name": 273, "ndf": 6, "crd": [18, 11, 6]}, - {"name": 274, "ndf": 6, "crd": [17, 12, 6]}, - {"name": 275, "ndf": 6, "crd": [16, 12, 6]}, - {"name": 276, "ndf": 6, "crd": [15, 12, 6]}, - {"name": 277, "ndf": 6, "crd": [14, 12, 6]}, - {"name": 278, "ndf": 6, "crd": [13, 12, 6]}, - {"name": 279, "ndf": 6, "crd": [18, 13, 6]}, - {"name": 280, "ndf": 6, "crd": [18, 14, 6]}, - {"name": 281, "ndf": 6, "crd": [18, 15, 6]}, - {"name": 282, "ndf": 6, "crd": [18, 16, 6]}, - {"name": 283, "ndf": 6, "crd": [18, 17, 6]}, - {"name": 284, "ndf": 6, "crd": [17, 18, 6]}, - {"name": 285, "ndf": 6, "crd": [16, 18, 6]}, - {"name": 286, "ndf": 6, "crd": [15, 18, 6]}, - {"name": 287, "ndf": 6, "crd": [14, 18, 6]}, - {"name": 288, "ndf": 6, "crd": [13, 18, 6]}, - {"name": 289, "ndf": 6, "crd": [0, 0, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 290, "ndf": 6, "crd": [6, 0, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 291, "ndf": 6, "crd": [6, 6, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 292, "ndf": 6, "crd": [0, 6, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 293, "ndf": 6, "crd": [6, 12, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 294, "ndf": 6, "crd": [0, 12, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 295, "ndf": 6, "crd": [6, 18, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 296, "ndf": 6, "crd": [0, 18, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 297, "ndf": 6, "crd": [12, 0, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 298, "ndf": 6, "crd": [12, 6, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 299, "ndf": 6, "crd": [12, 12, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 300, "ndf": 6, "crd": [12, 18, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 301, "ndf": 6, "crd": [18, 0, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 302, "ndf": 6, "crd": [18, 6, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 303, "ndf": 6, "crd": [18, 12, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 304, "ndf": 6, "crd": [18, 18, 9], "mass": [0, 0, 0, 1e-10, 1e-10, 1e-10]}, - {"name": 305, "ndf": 6, "crd": [1, 0, 9]}, - {"name": 306, "ndf": 6, "crd": [2, 0, 9]}, - {"name": 307, "ndf": 6, "crd": [3, 0, 9]}, - {"name": 308, "ndf": 6, "crd": [4, 0, 9]}, - {"name": 309, "ndf": 6, "crd": [5, 0, 9]}, - {"name": 310, "ndf": 6, "crd": [6, 1, 9]}, - {"name": 311, "ndf": 6, "crd": [6, 2, 9]}, - {"name": 312, "ndf": 6, "crd": [6, 3, 9]}, - {"name": 313, "ndf": 6, "crd": [6, 4, 9]}, - {"name": 314, "ndf": 6, "crd": [6, 5, 9]}, - {"name": 315, "ndf": 6, "crd": [5, 6, 9]}, - {"name": 316, "ndf": 6, "crd": [4, 6, 9]}, - {"name": 317, "ndf": 6, "crd": [3, 6, 9]}, - {"name": 318, "ndf": 6, "crd": [2, 6, 9]}, - {"name": 319, "ndf": 6, "crd": [1, 6, 9]}, - {"name": 320, "ndf": 6, "crd": [0, 5, 9]}, - {"name": 321, "ndf": 6, "crd": [0, 4, 9]}, - {"name": 322, "ndf": 6, "crd": [0, 3, 9]}, - {"name": 323, "ndf": 6, "crd": [0, 2, 9]}, - {"name": 324, "ndf": 6, "crd": [0, 1, 9]}, - {"name": 325, "ndf": 6, "crd": [6, 7, 9]}, - {"name": 326, "ndf": 6, "crd": [6, 8, 9]}, - {"name": 327, "ndf": 6, "crd": [6, 9, 9]}, - {"name": 328, "ndf": 6, "crd": [6, 10, 9]}, - {"name": 329, "ndf": 6, "crd": [6, 11, 9]}, - {"name": 330, "ndf": 6, "crd": [5, 12, 9]}, - {"name": 331, "ndf": 6, "crd": [4, 12, 9]}, - {"name": 332, "ndf": 6, "crd": [3, 12, 9]}, - {"name": 333, "ndf": 6, "crd": [2, 12, 9]}, - {"name": 334, "ndf": 6, "crd": [1, 12, 9]}, - {"name": 335, "ndf": 6, "crd": [0, 11, 9]}, - {"name": 336, "ndf": 6, "crd": [0, 10, 9]}, - {"name": 337, "ndf": 6, "crd": [0, 9, 9]}, - {"name": 338, "ndf": 6, "crd": [0, 8, 9]}, - {"name": 339, "ndf": 6, "crd": [0, 7, 9]}, - {"name": 340, "ndf": 6, "crd": [6, 13, 9]}, - {"name": 341, "ndf": 6, "crd": [6, 14, 9]}, - {"name": 342, "ndf": 6, "crd": [6, 15, 9]}, - {"name": 343, "ndf": 6, "crd": [6, 16, 9]}, - {"name": 344, "ndf": 6, "crd": [6, 17, 9]}, - {"name": 345, "ndf": 6, "crd": [5, 18, 9]}, - {"name": 346, "ndf": 6, "crd": [4, 18, 9]}, - {"name": 347, "ndf": 6, "crd": [3, 18, 9]}, - {"name": 348, "ndf": 6, "crd": [2, 18, 9]}, - {"name": 349, "ndf": 6, "crd": [1, 18, 9]}, - {"name": 350, "ndf": 6, "crd": [0, 17, 9]}, - {"name": 351, "ndf": 6, "crd": [0, 16, 9]}, - {"name": 352, "ndf": 6, "crd": [0, 15, 9]}, - {"name": 353, "ndf": 6, "crd": [0, 14, 9]}, - {"name": 354, "ndf": 6, "crd": [0, 13, 9]}, - {"name": 355, "ndf": 6, "crd": [7, 0, 9]}, - {"name": 356, "ndf": 6, "crd": [8, 0, 9]}, - {"name": 357, "ndf": 6, "crd": [9, 0, 9]}, - {"name": 358, "ndf": 6, "crd": [10, 0, 9]}, - {"name": 359, "ndf": 6, "crd": [11, 0, 9]}, - {"name": 360, "ndf": 6, "crd": [12, 1, 9]}, - {"name": 361, "ndf": 6, "crd": [12, 2, 9]}, - {"name": 362, "ndf": 6, "crd": [12, 3, 9]}, - {"name": 363, "ndf": 6, "crd": [12, 4, 9]}, - {"name": 364, "ndf": 6, "crd": [12, 5, 9]}, - {"name": 365, "ndf": 6, "crd": [11, 6, 9]}, - {"name": 366, "ndf": 6, "crd": [10, 6, 9]}, - {"name": 367, "ndf": 6, "crd": [9, 6, 9]}, - {"name": 368, "ndf": 6, "crd": [8, 6, 9]}, - {"name": 369, "ndf": 6, "crd": [7, 6, 9]}, - {"name": 370, "ndf": 6, "crd": [12, 7, 9]}, - {"name": 371, "ndf": 6, "crd": [12, 8, 9]}, - {"name": 372, "ndf": 6, "crd": [12, 9, 9]}, - {"name": 373, "ndf": 6, "crd": [12, 10, 9]}, - {"name": 374, "ndf": 6, "crd": [12, 11, 9]}, - {"name": 375, "ndf": 6, "crd": [11, 12, 9]}, - {"name": 376, "ndf": 6, "crd": [10, 12, 9]}, - {"name": 377, "ndf": 6, "crd": [9, 12, 9]}, - {"name": 378, "ndf": 6, "crd": [8, 12, 9]}, - {"name": 379, "ndf": 6, "crd": [7, 12, 9]}, - {"name": 380, "ndf": 6, "crd": [12, 13, 9]}, - {"name": 381, "ndf": 6, "crd": [12, 14, 9]}, - {"name": 382, "ndf": 6, "crd": [12, 15, 9]}, - {"name": 383, "ndf": 6, "crd": [12, 16, 9]}, - {"name": 384, "ndf": 6, "crd": [12, 17, 9]}, - {"name": 385, "ndf": 6, "crd": [11, 18, 9]}, - {"name": 386, "ndf": 6, "crd": [10, 18, 9]}, - {"name": 387, "ndf": 6, "crd": [9, 18, 9]}, - {"name": 388, "ndf": 6, "crd": [8, 18, 9]}, - {"name": 389, "ndf": 6, "crd": [7, 18, 9]}, - {"name": 390, "ndf": 6, "crd": [13, 0, 9]}, - {"name": 391, "ndf": 6, "crd": [14, 0, 9]}, - {"name": 392, "ndf": 6, "crd": [15, 0, 9]}, - {"name": 393, "ndf": 6, "crd": [16, 0, 9]}, - {"name": 394, "ndf": 6, "crd": [17, 0, 9]}, - {"name": 395, "ndf": 6, "crd": [18, 1, 9]}, - {"name": 396, "ndf": 6, "crd": [18, 2, 9]}, - {"name": 397, "ndf": 6, "crd": [18, 3, 9]}, - {"name": 398, "ndf": 6, "crd": [18, 4, 9]}, - {"name": 399, "ndf": 6, "crd": [18, 5, 9]}, - {"name": 400, "ndf": 6, "crd": [17, 6, 9]}, - {"name": 401, "ndf": 6, "crd": [16, 6, 9]}, - {"name": 402, "ndf": 6, "crd": [15, 6, 9]}, - {"name": 403, "ndf": 6, "crd": [14, 6, 9]}, - {"name": 404, "ndf": 6, "crd": [13, 6, 9]}, - {"name": 405, "ndf": 6, "crd": [18, 7, 9]}, - {"name": 406, "ndf": 6, "crd": [18, 8, 9]}, - {"name": 407, "ndf": 6, "crd": [18, 9, 9]}, - {"name": 408, "ndf": 6, "crd": [18, 10, 9]}, - {"name": 409, "ndf": 6, "crd": [18, 11, 9]}, - {"name": 410, "ndf": 6, "crd": [17, 12, 9]}, - {"name": 411, "ndf": 6, "crd": [16, 12, 9]}, - {"name": 412, "ndf": 6, "crd": [15, 12, 9]}, - {"name": 413, "ndf": 6, "crd": [14, 12, 9]}, - {"name": 414, "ndf": 6, "crd": [13, 12, 9]}, - {"name": 415, "ndf": 6, "crd": [18, 13, 9]}, - {"name": 416, "ndf": 6, "crd": [18, 14, 9]}, - {"name": 417, "ndf": 6, "crd": [18, 15, 9]}, - {"name": 418, "ndf": 6, "crd": [18, 16, 9]}, - {"name": 419, "ndf": 6, "crd": [18, 17, 9]}, - {"name": 420, "ndf": 6, "crd": [17, 18, 9]}, - {"name": 421, "ndf": 6, "crd": [16, 18, 9]}, - {"name": 422, "ndf": 6, "crd": [15, 18, 9]}, - {"name": 423, "ndf": 6, "crd": [14, 18, 9]}, - {"name": 424, "ndf": 6, "crd": [13, 18, 9]}, - {"name": 425, "ndf": 6, "crd": [1, 0, 3]}, - {"name": 426, "ndf": 6, "crd": [2, 0, 3]}, - {"name": 427, "ndf": 6, "crd": [3, 0, 3]}, - {"name": 428, "ndf": 6, "crd": [4, 0, 3]}, - {"name": 429, "ndf": 6, "crd": [5, 0, 3]}, - {"name": 430, "ndf": 6, "crd": [6, 1, 3]}, - {"name": 431, "ndf": 6, "crd": [6, 2, 3]}, - {"name": 432, "ndf": 6, "crd": [6, 3, 3]}, - {"name": 433, "ndf": 6, "crd": [6, 4, 3]}, - {"name": 434, "ndf": 6, "crd": [6, 5, 3]}, - {"name": 435, "ndf": 6, "crd": [5, 6, 3]}, - {"name": 436, "ndf": 6, "crd": [4, 6, 3]}, - {"name": 437, "ndf": 6, "crd": [3, 6, 3]}, - {"name": 438, "ndf": 6, "crd": [2, 6, 3]}, - {"name": 439, "ndf": 6, "crd": [1, 6, 3]}, - {"name": 440, "ndf": 6, "crd": [0, 5, 3]}, - {"name": 441, "ndf": 6, "crd": [0, 4, 3]}, - {"name": 442, "ndf": 6, "crd": [0, 3, 3]}, - {"name": 443, "ndf": 6, "crd": [0, 2, 3]}, - {"name": 444, "ndf": 6, "crd": [0, 1, 3]}, - {"name": 445, "ndf": 6, "crd": [1, 1, 3]}, - {"name": 446, "ndf": 6, "crd": [1, 2, 3]}, - {"name": 447, "ndf": 6, "crd": [1, 3, 3]}, - {"name": 448, "ndf": 6, "crd": [1, 4, 3]}, - {"name": 449, "ndf": 6, "crd": [1, 5, 3]}, - {"name": 450, "ndf": 6, "crd": [2, 1, 3]}, - {"name": 451, "ndf": 6, "crd": [2, 2, 3]}, - {"name": 452, "ndf": 6, "crd": [2, 3, 3]}, - {"name": 453, "ndf": 6, "crd": [2, 4, 3]}, - {"name": 454, "ndf": 6, "crd": [2, 5, 3]}, - {"name": 455, "ndf": 6, "crd": [3, 1, 3]}, - {"name": 456, "ndf": 6, "crd": [3, 2, 3]}, - {"name": 457, "ndf": 6, "crd": [3, 3, 3]}, - {"name": 458, "ndf": 6, "crd": [3, 4, 3]}, - {"name": 459, "ndf": 6, "crd": [3, 5, 3]}, - {"name": 460, "ndf": 6, "crd": [4, 1, 3]}, - {"name": 461, "ndf": 6, "crd": [4, 2, 3]}, - {"name": 462, "ndf": 6, "crd": [4, 3, 3]}, - {"name": 463, "ndf": 6, "crd": [4, 4, 3]}, - {"name": 464, "ndf": 6, "crd": [4, 5, 3]}, - {"name": 465, "ndf": 6, "crd": [5, 1, 3]}, - {"name": 466, "ndf": 6, "crd": [5, 2, 3]}, - {"name": 467, "ndf": 6, "crd": [5, 3, 3]}, - {"name": 468, "ndf": 6, "crd": [5, 4, 3]}, - {"name": 469, "ndf": 6, "crd": [5, 5, 3]}, - {"name": 470, "ndf": 6, "crd": [1, 6, 3]}, - {"name": 471, "ndf": 6, "crd": [2, 6, 3]}, - {"name": 472, "ndf": 6, "crd": [3, 6, 3]}, - {"name": 473, "ndf": 6, "crd": [4, 6, 3]}, - {"name": 474, "ndf": 6, "crd": [5, 6, 3]}, - {"name": 475, "ndf": 6, "crd": [6, 7, 3]}, - {"name": 476, "ndf": 6, "crd": [6, 8, 3]}, - {"name": 477, "ndf": 6, "crd": [6, 9, 3]}, - {"name": 478, "ndf": 6, "crd": [6, 10, 3]}, - {"name": 479, "ndf": 6, "crd": [6, 11, 3]}, - {"name": 480, "ndf": 6, "crd": [5, 12, 3]}, - {"name": 481, "ndf": 6, "crd": [4, 12, 3]}, - {"name": 482, "ndf": 6, "crd": [3, 12, 3]}, - {"name": 483, "ndf": 6, "crd": [2, 12, 3]}, - {"name": 484, "ndf": 6, "crd": [1, 12, 3]}, - {"name": 485, "ndf": 6, "crd": [0, 11, 3]}, - {"name": 486, "ndf": 6, "crd": [0, 10, 3]}, - {"name": 487, "ndf": 6, "crd": [0, 9, 3]}, - {"name": 488, "ndf": 6, "crd": [0, 8, 3]}, - {"name": 489, "ndf": 6, "crd": [0, 7, 3]}, - {"name": 490, "ndf": 6, "crd": [1, 7, 3]}, - {"name": 491, "ndf": 6, "crd": [1, 8, 3]}, - {"name": 492, "ndf": 6, "crd": [1, 9, 3]}, - {"name": 493, "ndf": 6, "crd": [1, 10, 3]}, - {"name": 494, "ndf": 6, "crd": [1, 11, 3]}, - {"name": 495, "ndf": 6, "crd": [2, 7, 3]}, - {"name": 496, "ndf": 6, "crd": [2, 8, 3]}, - {"name": 497, "ndf": 6, "crd": [2, 9, 3]}, - {"name": 498, "ndf": 6, "crd": [2, 10, 3]}, - {"name": 499, "ndf": 6, "crd": [2, 11, 3]}, - {"name": 500, "ndf": 6, "crd": [3, 7, 3]}, - {"name": 501, "ndf": 6, "crd": [3, 8, 3]}, - {"name": 502, "ndf": 6, "crd": [3, 9, 3]}, - {"name": 503, "ndf": 6, "crd": [3, 10, 3]}, - {"name": 504, "ndf": 6, "crd": [3, 11, 3]}, - {"name": 505, "ndf": 6, "crd": [4, 7, 3]}, - {"name": 506, "ndf": 6, "crd": [4, 8, 3]}, - {"name": 507, "ndf": 6, "crd": [4, 9, 3]}, - {"name": 508, "ndf": 6, "crd": [4, 10, 3]}, - {"name": 509, "ndf": 6, "crd": [4, 11, 3]}, - {"name": 510, "ndf": 6, "crd": [5, 7, 3]}, - {"name": 511, "ndf": 6, "crd": [5, 8, 3]}, - {"name": 512, "ndf": 6, "crd": [5, 9, 3]}, - {"name": 513, "ndf": 6, "crd": [5, 10, 3]}, - {"name": 514, "ndf": 6, "crd": [5, 11, 3]}, - {"name": 515, "ndf": 6, "crd": [1, 12, 3]}, - {"name": 516, "ndf": 6, "crd": [2, 12, 3]}, - {"name": 517, "ndf": 6, "crd": [3, 12, 3]}, - {"name": 518, "ndf": 6, "crd": [4, 12, 3]}, - {"name": 519, "ndf": 6, "crd": [5, 12, 3]}, - {"name": 520, "ndf": 6, "crd": [6, 13, 3]}, - {"name": 521, "ndf": 6, "crd": [6, 14, 3]}, - {"name": 522, "ndf": 6, "crd": [6, 15, 3]}, - {"name": 523, "ndf": 6, "crd": [6, 16, 3]}, - {"name": 524, "ndf": 6, "crd": [6, 17, 3]}, - {"name": 525, "ndf": 6, "crd": [5, 18, 3]}, - {"name": 526, "ndf": 6, "crd": [4, 18, 3]}, - {"name": 527, "ndf": 6, "crd": [3, 18, 3]}, - {"name": 528, "ndf": 6, "crd": [2, 18, 3]}, - {"name": 529, "ndf": 6, "crd": [1, 18, 3]}, - {"name": 530, "ndf": 6, "crd": [0, 17, 3]}, - {"name": 531, "ndf": 6, "crd": [0, 16, 3]}, - {"name": 532, "ndf": 6, "crd": [0, 15, 3]}, - {"name": 533, "ndf": 6, "crd": [0, 14, 3]}, - {"name": 534, "ndf": 6, "crd": [0, 13, 3]}, - {"name": 535, "ndf": 6, "crd": [1, 13, 3]}, - {"name": 536, "ndf": 6, "crd": [1, 14, 3]}, - {"name": 537, "ndf": 6, "crd": [1, 15, 3]}, - {"name": 538, "ndf": 6, "crd": [1, 16, 3]}, - {"name": 539, "ndf": 6, "crd": [1, 17, 3]}, - {"name": 540, "ndf": 6, "crd": [2, 13, 3]}, - {"name": 541, "ndf": 6, "crd": [2, 14, 3]}, - {"name": 542, "ndf": 6, "crd": [2, 15, 3]}, - {"name": 543, "ndf": 6, "crd": [2, 16, 3]}, - {"name": 544, "ndf": 6, "crd": [2, 17, 3]}, - {"name": 545, "ndf": 6, "crd": [3, 13, 3]}, - {"name": 546, "ndf": 6, "crd": [3, 14, 3]}, - {"name": 547, "ndf": 6, "crd": [3, 15, 3]}, - {"name": 548, "ndf": 6, "crd": [3, 16, 3]}, - {"name": 549, "ndf": 6, "crd": [3, 17, 3]}, - {"name": 550, "ndf": 6, "crd": [4, 13, 3]}, - {"name": 551, "ndf": 6, "crd": [4, 14, 3]}, - {"name": 552, "ndf": 6, "crd": [4, 15, 3]}, - {"name": 553, "ndf": 6, "crd": [4, 16, 3]}, - {"name": 554, "ndf": 6, "crd": [4, 17, 3]}, - {"name": 555, "ndf": 6, "crd": [5, 13, 3]}, - {"name": 556, "ndf": 6, "crd": [5, 14, 3]}, - {"name": 557, "ndf": 6, "crd": [5, 15, 3]}, - {"name": 558, "ndf": 6, "crd": [5, 16, 3]}, - {"name": 559, "ndf": 6, "crd": [5, 17, 3]}, - {"name": 560, "ndf": 6, "crd": [7, 0, 3]}, - {"name": 561, "ndf": 6, "crd": [8, 0, 3]}, - {"name": 562, "ndf": 6, "crd": [9, 0, 3]}, - {"name": 563, "ndf": 6, "crd": [10, 0, 3]}, - {"name": 564, "ndf": 6, "crd": [11, 0, 3]}, - {"name": 565, "ndf": 6, "crd": [12, 1, 3]}, - {"name": 566, "ndf": 6, "crd": [12, 2, 3]}, - {"name": 567, "ndf": 6, "crd": [12, 3, 3]}, - {"name": 568, "ndf": 6, "crd": [12, 4, 3]}, - {"name": 569, "ndf": 6, "crd": [12, 5, 3]}, - {"name": 570, "ndf": 6, "crd": [11, 6, 3]}, - {"name": 571, "ndf": 6, "crd": [10, 6, 3]}, - {"name": 572, "ndf": 6, "crd": [9, 6, 3]}, - {"name": 573, "ndf": 6, "crd": [8, 6, 3]}, - {"name": 574, "ndf": 6, "crd": [7, 6, 3]}, - {"name": 575, "ndf": 6, "crd": [6, 5, 3]}, - {"name": 576, "ndf": 6, "crd": [6, 4, 3]}, - {"name": 577, "ndf": 6, "crd": [6, 3, 3]}, - {"name": 578, "ndf": 6, "crd": [6, 2, 3]}, - {"name": 579, "ndf": 6, "crd": [6, 1, 3]}, - {"name": 580, "ndf": 6, "crd": [7, 1, 3]}, - {"name": 581, "ndf": 6, "crd": [7, 2, 3]}, - {"name": 582, "ndf": 6, "crd": [7, 3, 3]}, - {"name": 583, "ndf": 6, "crd": [7, 4, 3]}, - {"name": 584, "ndf": 6, "crd": [7, 5, 3]}, - {"name": 585, "ndf": 6, "crd": [8, 1, 3]}, - {"name": 586, "ndf": 6, "crd": [8, 2, 3]}, - {"name": 587, "ndf": 6, "crd": [8, 3, 3]}, - {"name": 588, "ndf": 6, "crd": [8, 4, 3]}, - {"name": 589, "ndf": 6, "crd": [8, 5, 3]}, - {"name": 590, "ndf": 6, "crd": [9, 1, 3]}, - {"name": 591, "ndf": 6, "crd": [9, 2, 3]}, - {"name": 592, "ndf": 6, "crd": [9, 3, 3]}, - {"name": 593, "ndf": 6, "crd": [9, 4, 3]}, - {"name": 594, "ndf": 6, "crd": [9, 5, 3]}, - {"name": 595, "ndf": 6, "crd": [10, 1, 3]}, - {"name": 596, "ndf": 6, "crd": [10, 2, 3]}, - {"name": 597, "ndf": 6, "crd": [10, 3, 3]}, - {"name": 598, "ndf": 6, "crd": [10, 4, 3]}, - {"name": 599, "ndf": 6, "crd": [10, 5, 3]}, - {"name": 600, "ndf": 6, "crd": [11, 1, 3]}, - {"name": 601, "ndf": 6, "crd": [11, 2, 3]}, - {"name": 602, "ndf": 6, "crd": [11, 3, 3]}, - {"name": 603, "ndf": 6, "crd": [11, 4, 3]}, - {"name": 604, "ndf": 6, "crd": [11, 5, 3]}, - {"name": 605, "ndf": 6, "crd": [7, 6, 3]}, - {"name": 606, "ndf": 6, "crd": [8, 6, 3]}, - {"name": 607, "ndf": 6, "crd": [9, 6, 3]}, - {"name": 608, "ndf": 6, "crd": [10, 6, 3]}, - {"name": 609, "ndf": 6, "crd": [11, 6, 3]}, - {"name": 610, "ndf": 6, "crd": [12, 7, 3]}, - {"name": 611, "ndf": 6, "crd": [12, 8, 3]}, - {"name": 612, "ndf": 6, "crd": [12, 9, 3]}, - {"name": 613, "ndf": 6, "crd": [12, 10, 3]}, - {"name": 614, "ndf": 6, "crd": [12, 11, 3]}, - {"name": 615, "ndf": 6, "crd": [11, 12, 3]}, - {"name": 616, "ndf": 6, "crd": [10, 12, 3]}, - {"name": 617, "ndf": 6, "crd": [9, 12, 3]}, - {"name": 618, "ndf": 6, "crd": [8, 12, 3]}, - {"name": 619, "ndf": 6, "crd": [7, 12, 3]}, - {"name": 620, "ndf": 6, "crd": [6, 11, 3]}, - {"name": 621, "ndf": 6, "crd": [6, 10, 3]}, - {"name": 622, "ndf": 6, "crd": [6, 9, 3]}, - {"name": 623, "ndf": 6, "crd": [6, 8, 3]}, - {"name": 624, "ndf": 6, "crd": [6, 7, 3]}, - {"name": 625, "ndf": 6, "crd": [7, 7, 3]}, - {"name": 626, "ndf": 6, "crd": [7, 8, 3]}, - {"name": 627, "ndf": 6, "crd": [7, 9, 3]}, - {"name": 628, "ndf": 6, "crd": [7, 10, 3]}, - {"name": 629, "ndf": 6, "crd": [7, 11, 3]}, - {"name": 630, "ndf": 6, "crd": [8, 7, 3]}, - {"name": 631, "ndf": 6, "crd": [8, 8, 3]}, - {"name": 632, "ndf": 6, "crd": [8, 9, 3]}, - {"name": 633, "ndf": 6, "crd": [8, 10, 3]}, - {"name": 634, "ndf": 6, "crd": [8, 11, 3]}, - {"name": 635, "ndf": 6, "crd": [9, 7, 3]}, - {"name": 636, "ndf": 6, "crd": [9, 8, 3]}, - {"name": 637, "ndf": 6, "crd": [9, 9, 3]}, - {"name": 638, "ndf": 6, "crd": [9, 10, 3]}, - {"name": 639, "ndf": 6, "crd": [9, 11, 3]}, - {"name": 640, "ndf": 6, "crd": [10, 7, 3]}, - {"name": 641, "ndf": 6, "crd": [10, 8, 3]}, - {"name": 642, "ndf": 6, "crd": [10, 9, 3]}, - {"name": 643, "ndf": 6, "crd": [10, 10, 3]}, - {"name": 644, "ndf": 6, "crd": [10, 11, 3]}, - {"name": 645, "ndf": 6, "crd": [11, 7, 3]}, - {"name": 646, "ndf": 6, "crd": [11, 8, 3]}, - {"name": 647, "ndf": 6, "crd": [11, 9, 3]}, - {"name": 648, "ndf": 6, "crd": [11, 10, 3]}, - {"name": 649, "ndf": 6, "crd": [11, 11, 3]}, - {"name": 650, "ndf": 6, "crd": [7, 12, 3]}, - {"name": 651, "ndf": 6, "crd": [8, 12, 3]}, - {"name": 652, "ndf": 6, "crd": [9, 12, 3]}, - {"name": 653, "ndf": 6, "crd": [10, 12, 3]}, - {"name": 654, "ndf": 6, "crd": [11, 12, 3]}, - {"name": 655, "ndf": 6, "crd": [12, 13, 3]}, - {"name": 656, "ndf": 6, "crd": [12, 14, 3]}, - {"name": 657, "ndf": 6, "crd": [12, 15, 3]}, - {"name": 658, "ndf": 6, "crd": [12, 16, 3]}, - {"name": 659, "ndf": 6, "crd": [12, 17, 3]}, - {"name": 660, "ndf": 6, "crd": [11, 18, 3]}, - {"name": 661, "ndf": 6, "crd": [10, 18, 3]}, - {"name": 662, "ndf": 6, "crd": [9, 18, 3]}, - {"name": 663, "ndf": 6, "crd": [8, 18, 3]}, - {"name": 664, "ndf": 6, "crd": [7, 18, 3]}, - {"name": 665, "ndf": 6, "crd": [6, 17, 3]}, - {"name": 666, "ndf": 6, "crd": [6, 16, 3]}, - {"name": 667, "ndf": 6, "crd": [6, 15, 3]}, - {"name": 668, "ndf": 6, "crd": [6, 14, 3]}, - {"name": 669, "ndf": 6, "crd": [6, 13, 3]}, - {"name": 670, "ndf": 6, "crd": [7, 13, 3]}, - {"name": 671, "ndf": 6, "crd": [7, 14, 3]}, - {"name": 672, "ndf": 6, "crd": [7, 15, 3]}, - {"name": 673, "ndf": 6, "crd": [7, 16, 3]}, - {"name": 674, "ndf": 6, "crd": [7, 17, 3]}, - {"name": 675, "ndf": 6, "crd": [8, 13, 3]}, - {"name": 676, "ndf": 6, "crd": [8, 14, 3]}, - {"name": 677, "ndf": 6, "crd": [8, 15, 3]}, - {"name": 678, "ndf": 6, "crd": [8, 16, 3]}, - {"name": 679, "ndf": 6, "crd": [8, 17, 3]}, - {"name": 680, "ndf": 6, "crd": [9, 13, 3]}, - {"name": 681, "ndf": 6, "crd": [9, 14, 3]}, - {"name": 682, "ndf": 6, "crd": [9, 15, 3]}, - {"name": 683, "ndf": 6, "crd": [9, 16, 3]}, - {"name": 684, "ndf": 6, "crd": [9, 17, 3]}, - {"name": 685, "ndf": 6, "crd": [10, 13, 3]}, - {"name": 686, "ndf": 6, "crd": [10, 14, 3]}, - {"name": 687, "ndf": 6, "crd": [10, 15, 3]}, - {"name": 688, "ndf": 6, "crd": [10, 16, 3]}, - {"name": 689, "ndf": 6, "crd": [10, 17, 3]}, - {"name": 690, "ndf": 6, "crd": [11, 13, 3]}, - {"name": 691, "ndf": 6, "crd": [11, 14, 3]}, - {"name": 692, "ndf": 6, "crd": [11, 15, 3]}, - {"name": 693, "ndf": 6, "crd": [11, 16, 3]}, - {"name": 694, "ndf": 6, "crd": [11, 17, 3]}, - {"name": 695, "ndf": 6, "crd": [13, 0, 3]}, - {"name": 696, "ndf": 6, "crd": [14, 0, 3]}, - {"name": 697, "ndf": 6, "crd": [15, 0, 3]}, - {"name": 698, "ndf": 6, "crd": [16, 0, 3]}, - {"name": 699, "ndf": 6, "crd": [17, 0, 3]}, - {"name": 700, "ndf": 6, "crd": [18, 1, 3]}, - {"name": 701, "ndf": 6, "crd": [18, 2, 3]}, - {"name": 702, "ndf": 6, "crd": [18, 3, 3]}, - {"name": 703, "ndf": 6, "crd": [18, 4, 3]}, - {"name": 704, "ndf": 6, "crd": [18, 5, 3]}, - {"name": 705, "ndf": 6, "crd": [17, 6, 3]}, - {"name": 706, "ndf": 6, "crd": [16, 6, 3]}, - {"name": 707, "ndf": 6, "crd": [15, 6, 3]}, - {"name": 708, "ndf": 6, "crd": [14, 6, 3]}, - {"name": 709, "ndf": 6, "crd": [13, 6, 3]}, - {"name": 710, "ndf": 6, "crd": [12, 5, 3]}, - {"name": 711, "ndf": 6, "crd": [12, 4, 3]}, - {"name": 712, "ndf": 6, "crd": [12, 3, 3]}, - {"name": 713, "ndf": 6, "crd": [12, 2, 3]}, - {"name": 714, "ndf": 6, "crd": [12, 1, 3]}, - {"name": 715, "ndf": 6, "crd": [13, 1, 3]}, - {"name": 716, "ndf": 6, "crd": [13, 2, 3]}, - {"name": 717, "ndf": 6, "crd": [13, 3, 3]}, - {"name": 718, "ndf": 6, "crd": [13, 4, 3]}, - {"name": 719, "ndf": 6, "crd": [13, 5, 3]}, - {"name": 720, "ndf": 6, "crd": [14, 1, 3]}, - {"name": 721, "ndf": 6, "crd": [14, 2, 3]}, - {"name": 722, "ndf": 6, "crd": [14, 3, 3]}, - {"name": 723, "ndf": 6, "crd": [14, 4, 3]}, - {"name": 724, "ndf": 6, "crd": [14, 5, 3]}, - {"name": 725, "ndf": 6, "crd": [15, 1, 3]}, - {"name": 726, "ndf": 6, "crd": [15, 2, 3]}, - {"name": 727, "ndf": 6, "crd": [15, 3, 3]}, - {"name": 728, "ndf": 6, "crd": [15, 4, 3]}, - {"name": 729, "ndf": 6, "crd": [15, 5, 3]}, - {"name": 730, "ndf": 6, "crd": [16, 1, 3]}, - {"name": 731, "ndf": 6, "crd": [16, 2, 3]}, - {"name": 732, "ndf": 6, "crd": [16, 3, 3]}, - {"name": 733, "ndf": 6, "crd": [16, 4, 3]}, - {"name": 734, "ndf": 6, "crd": [16, 5, 3]}, - {"name": 735, "ndf": 6, "crd": [17, 1, 3]}, - {"name": 736, "ndf": 6, "crd": [17, 2, 3]}, - {"name": 737, "ndf": 6, "crd": [17, 3, 3]}, - {"name": 738, "ndf": 6, "crd": [17, 4, 3]}, - {"name": 739, "ndf": 6, "crd": [17, 5, 3]}, - {"name": 740, "ndf": 6, "crd": [13, 6, 3]}, - {"name": 741, "ndf": 6, "crd": [14, 6, 3]}, - {"name": 742, "ndf": 6, "crd": [15, 6, 3]}, - {"name": 743, "ndf": 6, "crd": [16, 6, 3]}, - {"name": 744, "ndf": 6, "crd": [17, 6, 3]}, - {"name": 745, "ndf": 6, "crd": [18, 7, 3]}, - {"name": 746, "ndf": 6, "crd": [18, 8, 3]}, - {"name": 747, "ndf": 6, "crd": [18, 9, 3]}, - {"name": 748, "ndf": 6, "crd": [18, 10, 3]}, - {"name": 749, "ndf": 6, "crd": [18, 11, 3]}, - {"name": 750, "ndf": 6, "crd": [17, 12, 3]}, - {"name": 751, "ndf": 6, "crd": [16, 12, 3]}, - {"name": 752, "ndf": 6, "crd": [15, 12, 3]}, - {"name": 753, "ndf": 6, "crd": [14, 12, 3]}, - {"name": 754, "ndf": 6, "crd": [13, 12, 3]}, - {"name": 755, "ndf": 6, "crd": [12, 11, 3]}, - {"name": 756, "ndf": 6, "crd": [12, 10, 3]}, - {"name": 757, "ndf": 6, "crd": [12, 9, 3]}, - {"name": 758, "ndf": 6, "crd": [12, 8, 3]}, - {"name": 759, "ndf": 6, "crd": [12, 7, 3]}, - {"name": 760, "ndf": 6, "crd": [13, 7, 3]}, - {"name": 761, "ndf": 6, "crd": [13, 8, 3]}, - {"name": 762, "ndf": 6, "crd": [13, 9, 3]}, - {"name": 763, "ndf": 6, "crd": [13, 10, 3]}, - {"name": 764, "ndf": 6, "crd": [13, 11, 3]}, - {"name": 765, "ndf": 6, "crd": [14, 7, 3]}, - {"name": 766, "ndf": 6, "crd": [14, 8, 3]}, - {"name": 767, "ndf": 6, "crd": [14, 9, 3]}, - {"name": 768, "ndf": 6, "crd": [14, 10, 3]}, - {"name": 769, "ndf": 6, "crd": [14, 11, 3]}, - {"name": 770, "ndf": 6, "crd": [15, 7, 3]}, - {"name": 771, "ndf": 6, "crd": [15, 8, 3]}, - {"name": 772, "ndf": 6, "crd": [15, 9, 3]}, - {"name": 773, "ndf": 6, "crd": [15, 10, 3]}, - {"name": 774, "ndf": 6, "crd": [15, 11, 3]}, - {"name": 775, "ndf": 6, "crd": [16, 7, 3]}, - {"name": 776, "ndf": 6, "crd": [16, 8, 3]}, - {"name": 777, "ndf": 6, "crd": [16, 9, 3]}, - {"name": 778, "ndf": 6, "crd": [16, 10, 3]}, - {"name": 779, "ndf": 6, "crd": [16, 11, 3]}, - {"name": 780, "ndf": 6, "crd": [17, 7, 3]}, - {"name": 781, "ndf": 6, "crd": [17, 8, 3]}, - {"name": 782, "ndf": 6, "crd": [17, 9, 3]}, - {"name": 783, "ndf": 6, "crd": [17, 10, 3]}, - {"name": 784, "ndf": 6, "crd": [17, 11, 3]}, - {"name": 785, "ndf": 6, "crd": [13, 12, 3]}, - {"name": 786, "ndf": 6, "crd": [14, 12, 3]}, - {"name": 787, "ndf": 6, "crd": [15, 12, 3]}, - {"name": 788, "ndf": 6, "crd": [16, 12, 3]}, - {"name": 789, "ndf": 6, "crd": [17, 12, 3]}, - {"name": 790, "ndf": 6, "crd": [18, 13, 3]}, - {"name": 791, "ndf": 6, "crd": [18, 14, 3]}, - {"name": 792, "ndf": 6, "crd": [18, 15, 3]}, - {"name": 793, "ndf": 6, "crd": [18, 16, 3]}, - {"name": 794, "ndf": 6, "crd": [18, 17, 3]}, - {"name": 795, "ndf": 6, "crd": [17, 18, 3]}, - {"name": 796, "ndf": 6, "crd": [16, 18, 3]}, - {"name": 797, "ndf": 6, "crd": [15, 18, 3]}, - {"name": 798, "ndf": 6, "crd": [14, 18, 3]}, - {"name": 799, "ndf": 6, "crd": [13, 18, 3]}, - {"name": 800, "ndf": 6, "crd": [12, 17, 3]}, - {"name": 801, "ndf": 6, "crd": [12, 16, 3]}, - {"name": 802, "ndf": 6, "crd": [12, 15, 3]}, - {"name": 803, "ndf": 6, "crd": [12, 14, 3]}, - {"name": 804, "ndf": 6, "crd": [12, 13, 3]}, - {"name": 805, "ndf": 6, "crd": [13, 13, 3]}, - {"name": 806, "ndf": 6, "crd": [13, 14, 3]}, - {"name": 807, "ndf": 6, "crd": [13, 15, 3]}, - {"name": 808, "ndf": 6, "crd": [13, 16, 3]}, - {"name": 809, "ndf": 6, "crd": [13, 17, 3]}, - {"name": 810, "ndf": 6, "crd": [14, 13, 3]}, - {"name": 811, "ndf": 6, "crd": [14, 14, 3]}, - {"name": 812, "ndf": 6, "crd": [14, 15, 3]}, - {"name": 813, "ndf": 6, "crd": [14, 16, 3]}, - {"name": 814, "ndf": 6, "crd": [14, 17, 3]}, - {"name": 815, "ndf": 6, "crd": [15, 13, 3]}, - {"name": 816, "ndf": 6, "crd": [15, 14, 3]}, - {"name": 817, "ndf": 6, "crd": [15, 15, 3]}, - {"name": 818, "ndf": 6, "crd": [15, 16, 3]}, - {"name": 819, "ndf": 6, "crd": [15, 17, 3]}, - {"name": 820, "ndf": 6, "crd": [16, 13, 3]}, - {"name": 821, "ndf": 6, "crd": [16, 14, 3]}, - {"name": 822, "ndf": 6, "crd": [16, 15, 3]}, - {"name": 823, "ndf": 6, "crd": [16, 16, 3]}, - {"name": 824, "ndf": 6, "crd": [16, 17, 3]}, - {"name": 825, "ndf": 6, "crd": [17, 13, 3]}, - {"name": 826, "ndf": 6, "crd": [17, 14, 3]}, - {"name": 827, "ndf": 6, "crd": [17, 15, 3]}, - {"name": 828, "ndf": 6, "crd": [17, 16, 3]}, - {"name": 829, "ndf": 6, "crd": [17, 17, 3]}, - {"name": 830, "ndf": 6, "crd": [1, 0, 6]}, - {"name": 831, "ndf": 6, "crd": [2, 0, 6]}, - {"name": 832, "ndf": 6, "crd": [3, 0, 6]}, - {"name": 833, "ndf": 6, "crd": [4, 0, 6]}, - {"name": 834, "ndf": 6, "crd": [5, 0, 6]}, - {"name": 835, "ndf": 6, "crd": [6, 1, 6]}, - {"name": 836, "ndf": 6, "crd": [6, 2, 6]}, - {"name": 837, "ndf": 6, "crd": [6, 3, 6]}, - {"name": 838, "ndf": 6, "crd": [6, 4, 6]}, - {"name": 839, "ndf": 6, "crd": [6, 5, 6]}, - {"name": 840, "ndf": 6, "crd": [5, 6, 6]}, - {"name": 841, "ndf": 6, "crd": [4, 6, 6]}, - {"name": 842, "ndf": 6, "crd": [3, 6, 6]}, - {"name": 843, "ndf": 6, "crd": [2, 6, 6]}, - {"name": 844, "ndf": 6, "crd": [1, 6, 6]}, - {"name": 845, "ndf": 6, "crd": [0, 5, 6]}, - {"name": 846, "ndf": 6, "crd": [0, 4, 6]}, - {"name": 847, "ndf": 6, "crd": [0, 3, 6]}, - {"name": 848, "ndf": 6, "crd": [0, 2, 6]}, - {"name": 849, "ndf": 6, "crd": [0, 1, 6]}, - {"name": 850, "ndf": 6, "crd": [1, 1, 6]}, - {"name": 851, "ndf": 6, "crd": [1, 2, 6]}, - {"name": 852, "ndf": 6, "crd": [1, 3, 6]}, - {"name": 853, "ndf": 6, "crd": [1, 4, 6]}, - {"name": 854, "ndf": 6, "crd": [1, 5, 6]}, - {"name": 855, "ndf": 6, "crd": [2, 1, 6]}, - {"name": 856, "ndf": 6, "crd": [2, 2, 6]}, - {"name": 857, "ndf": 6, "crd": [2, 3, 6]}, - {"name": 858, "ndf": 6, "crd": [2, 4, 6]}, - {"name": 859, "ndf": 6, "crd": [2, 5, 6]}, - {"name": 860, "ndf": 6, "crd": [3, 1, 6]}, - {"name": 861, "ndf": 6, "crd": [3, 2, 6]}, - {"name": 862, "ndf": 6, "crd": [3, 3, 6]}, - {"name": 863, "ndf": 6, "crd": [3, 4, 6]}, - {"name": 864, "ndf": 6, "crd": [3, 5, 6]}, - {"name": 865, "ndf": 6, "crd": [4, 1, 6]}, - {"name": 866, "ndf": 6, "crd": [4, 2, 6]}, - {"name": 867, "ndf": 6, "crd": [4, 3, 6]}, - {"name": 868, "ndf": 6, "crd": [4, 4, 6]}, - {"name": 869, "ndf": 6, "crd": [4, 5, 6]}, - {"name": 870, "ndf": 6, "crd": [5, 1, 6]}, - {"name": 871, "ndf": 6, "crd": [5, 2, 6]}, - {"name": 872, "ndf": 6, "crd": [5, 3, 6]}, - {"name": 873, "ndf": 6, "crd": [5, 4, 6]}, - {"name": 874, "ndf": 6, "crd": [5, 5, 6]}, - {"name": 875, "ndf": 6, "crd": [1, 6, 6]}, - {"name": 876, "ndf": 6, "crd": [2, 6, 6]}, - {"name": 877, "ndf": 6, "crd": [3, 6, 6]}, - {"name": 878, "ndf": 6, "crd": [4, 6, 6]}, - {"name": 879, "ndf": 6, "crd": [5, 6, 6]}, - {"name": 880, "ndf": 6, "crd": [6, 7, 6]}, - {"name": 881, "ndf": 6, "crd": [6, 8, 6]}, - {"name": 882, "ndf": 6, "crd": [6, 9, 6]}, - {"name": 883, "ndf": 6, "crd": [6, 10, 6]}, - {"name": 884, "ndf": 6, "crd": [6, 11, 6]}, - {"name": 885, "ndf": 6, "crd": [5, 12, 6]}, - {"name": 886, "ndf": 6, "crd": [4, 12, 6]}, - {"name": 887, "ndf": 6, "crd": [3, 12, 6]}, - {"name": 888, "ndf": 6, "crd": [2, 12, 6]}, - {"name": 889, "ndf": 6, "crd": [1, 12, 6]}, - {"name": 890, "ndf": 6, "crd": [0, 11, 6]}, - {"name": 891, "ndf": 6, "crd": [0, 10, 6]}, - {"name": 892, "ndf": 6, "crd": [0, 9, 6]}, - {"name": 893, "ndf": 6, "crd": [0, 8, 6]}, - {"name": 894, "ndf": 6, "crd": [0, 7, 6]}, - {"name": 895, "ndf": 6, "crd": [1, 7, 6]}, - {"name": 896, "ndf": 6, "crd": [1, 8, 6]}, - {"name": 897, "ndf": 6, "crd": [1, 9, 6]}, - {"name": 898, "ndf": 6, "crd": [1, 10, 6]}, - {"name": 899, "ndf": 6, "crd": [1, 11, 6]}, - {"name": 900, "ndf": 6, "crd": [2, 7, 6]}, - {"name": 901, "ndf": 6, "crd": [2, 8, 6]}, - {"name": 902, "ndf": 6, "crd": [2, 9, 6]}, - {"name": 903, "ndf": 6, "crd": [2, 10, 6]}, - {"name": 904, "ndf": 6, "crd": [2, 11, 6]}, - {"name": 905, "ndf": 6, "crd": [3, 7, 6]}, - {"name": 906, "ndf": 6, "crd": [3, 8, 6]}, - {"name": 907, "ndf": 6, "crd": [3, 9, 6]}, - {"name": 908, "ndf": 6, "crd": [3, 10, 6]}, - {"name": 909, "ndf": 6, "crd": [3, 11, 6]}, - {"name": 910, "ndf": 6, "crd": [4, 7, 6]}, - {"name": 911, "ndf": 6, "crd": [4, 8, 6]}, - {"name": 912, "ndf": 6, "crd": [4, 9, 6]}, - {"name": 913, "ndf": 6, "crd": [4, 10, 6]}, - {"name": 914, "ndf": 6, "crd": [4, 11, 6]}, - {"name": 915, "ndf": 6, "crd": [5, 7, 6]}, - {"name": 916, "ndf": 6, "crd": [5, 8, 6]}, - {"name": 917, "ndf": 6, "crd": [5, 9, 6]}, - {"name": 918, "ndf": 6, "crd": [5, 10, 6]}, - {"name": 919, "ndf": 6, "crd": [5, 11, 6]}, - {"name": 920, "ndf": 6, "crd": [1, 12, 6]}, - {"name": 921, "ndf": 6, "crd": [2, 12, 6]}, - {"name": 922, "ndf": 6, "crd": [3, 12, 6]}, - {"name": 923, "ndf": 6, "crd": [4, 12, 6]}, - {"name": 924, "ndf": 6, "crd": [5, 12, 6]}, - {"name": 925, "ndf": 6, "crd": [6, 13, 6]}, - {"name": 926, "ndf": 6, "crd": [6, 14, 6]}, - {"name": 927, "ndf": 6, "crd": [6, 15, 6]}, - {"name": 928, "ndf": 6, "crd": [6, 16, 6]}, - {"name": 929, "ndf": 6, "crd": [6, 17, 6]}, - {"name": 930, "ndf": 6, "crd": [5, 18, 6]}, - {"name": 931, "ndf": 6, "crd": [4, 18, 6]}, - {"name": 932, "ndf": 6, "crd": [3, 18, 6]}, - {"name": 933, "ndf": 6, "crd": [2, 18, 6]}, - {"name": 934, "ndf": 6, "crd": [1, 18, 6]}, - {"name": 935, "ndf": 6, "crd": [0, 17, 6]}, - {"name": 936, "ndf": 6, "crd": [0, 16, 6]}, - {"name": 937, "ndf": 6, "crd": [0, 15, 6]}, - {"name": 938, "ndf": 6, "crd": [0, 14, 6]}, - {"name": 939, "ndf": 6, "crd": [0, 13, 6]}, - {"name": 940, "ndf": 6, "crd": [1, 13, 6]}, - {"name": 941, "ndf": 6, "crd": [1, 14, 6]}, - {"name": 942, "ndf": 6, "crd": [1, 15, 6]}, - {"name": 943, "ndf": 6, "crd": [1, 16, 6]}, - {"name": 944, "ndf": 6, "crd": [1, 17, 6]}, - {"name": 945, "ndf": 6, "crd": [2, 13, 6]}, - {"name": 946, "ndf": 6, "crd": [2, 14, 6]}, - {"name": 947, "ndf": 6, "crd": [2, 15, 6]}, - {"name": 948, "ndf": 6, "crd": [2, 16, 6]}, - {"name": 949, "ndf": 6, "crd": [2, 17, 6]}, - {"name": 950, "ndf": 6, "crd": [3, 13, 6]}, - {"name": 951, "ndf": 6, "crd": [3, 14, 6]}, - {"name": 952, "ndf": 6, "crd": [3, 15, 6]}, - {"name": 953, "ndf": 6, "crd": [3, 16, 6]}, - {"name": 954, "ndf": 6, "crd": [3, 17, 6]}, - {"name": 955, "ndf": 6, "crd": [4, 13, 6]}, - {"name": 956, "ndf": 6, "crd": [4, 14, 6]}, - {"name": 957, "ndf": 6, "crd": [4, 15, 6]}, - {"name": 958, "ndf": 6, "crd": [4, 16, 6]}, - {"name": 959, "ndf": 6, "crd": [4, 17, 6]}, - {"name": 960, "ndf": 6, "crd": [5, 13, 6]}, - {"name": 961, "ndf": 6, "crd": [5, 14, 6]}, - {"name": 962, "ndf": 6, "crd": [5, 15, 6]}, - {"name": 963, "ndf": 6, "crd": [5, 16, 6]}, - {"name": 964, "ndf": 6, "crd": [5, 17, 6]}, - {"name": 965, "ndf": 6, "crd": [7, 0, 6]}, - {"name": 966, "ndf": 6, "crd": [8, 0, 6]}, - {"name": 967, "ndf": 6, "crd": [9, 0, 6]}, - {"name": 968, "ndf": 6, "crd": [10, 0, 6]}, - {"name": 969, "ndf": 6, "crd": [11, 0, 6]}, - {"name": 970, "ndf": 6, "crd": [12, 1, 6]}, - {"name": 971, "ndf": 6, "crd": [12, 2, 6]}, - {"name": 972, "ndf": 6, "crd": [12, 3, 6]}, - {"name": 973, "ndf": 6, "crd": [12, 4, 6]}, - {"name": 974, "ndf": 6, "crd": [12, 5, 6]}, - {"name": 975, "ndf": 6, "crd": [11, 6, 6]}, - {"name": 976, "ndf": 6, "crd": [10, 6, 6]}, - {"name": 977, "ndf": 6, "crd": [9, 6, 6]}, - {"name": 978, "ndf": 6, "crd": [8, 6, 6]}, - {"name": 979, "ndf": 6, "crd": [7, 6, 6]}, - {"name": 980, "ndf": 6, "crd": [6, 5, 6]}, - {"name": 981, "ndf": 6, "crd": [6, 4, 6]}, - {"name": 982, "ndf": 6, "crd": [6, 3, 6]}, - {"name": 983, "ndf": 6, "crd": [6, 2, 6]}, - {"name": 984, "ndf": 6, "crd": [6, 1, 6]}, - {"name": 985, "ndf": 6, "crd": [7, 1, 6]}, - {"name": 986, "ndf": 6, "crd": [7, 2, 6]}, - {"name": 987, "ndf": 6, "crd": [7, 3, 6]}, - {"name": 988, "ndf": 6, "crd": [7, 4, 6]}, - {"name": 989, "ndf": 6, "crd": [7, 5, 6]}, - {"name": 990, "ndf": 6, "crd": [8, 1, 6]}, - {"name": 991, "ndf": 6, "crd": [8, 2, 6]}, - {"name": 992, "ndf": 6, "crd": [8, 3, 6]}, - {"name": 993, "ndf": 6, "crd": [8, 4, 6]}, - {"name": 994, "ndf": 6, "crd": [8, 5, 6]}, - {"name": 995, "ndf": 6, "crd": [9, 1, 6]}, - {"name": 996, "ndf": 6, "crd": [9, 2, 6]}, - {"name": 997, "ndf": 6, "crd": [9, 3, 6]}, - {"name": 998, "ndf": 6, "crd": [9, 4, 6]}, - {"name": 999, "ndf": 6, "crd": [9, 5, 6]}, - {"name": 1000, "ndf": 6, "crd": [10, 1, 6]}, - {"name": 1001, "ndf": 6, "crd": [10, 2, 6]}, - {"name": 1002, "ndf": 6, "crd": [10, 3, 6]}, - {"name": 1003, "ndf": 6, "crd": [10, 4, 6]}, - {"name": 1004, "ndf": 6, "crd": [10, 5, 6]}, - {"name": 1005, "ndf": 6, "crd": [11, 1, 6]}, - {"name": 1006, "ndf": 6, "crd": [11, 2, 6]}, - {"name": 1007, "ndf": 6, "crd": [11, 3, 6]}, - {"name": 1008, "ndf": 6, "crd": [11, 4, 6]}, - {"name": 1009, "ndf": 6, "crd": [11, 5, 6]}, - {"name": 1010, "ndf": 6, "crd": [7, 6, 6]}, - {"name": 1011, "ndf": 6, "crd": [8, 6, 6]}, - {"name": 1012, "ndf": 6, "crd": [9, 6, 6]}, - {"name": 1013, "ndf": 6, "crd": [10, 6, 6]}, - {"name": 1014, "ndf": 6, "crd": [11, 6, 6]}, - {"name": 1015, "ndf": 6, "crd": [12, 7, 6]}, - {"name": 1016, "ndf": 6, "crd": [12, 8, 6]}, - {"name": 1017, "ndf": 6, "crd": [12, 9, 6]}, - {"name": 1018, "ndf": 6, "crd": [12, 10, 6]}, - {"name": 1019, "ndf": 6, "crd": [12, 11, 6]}, - {"name": 1020, "ndf": 6, "crd": [11, 12, 6]}, - {"name": 1021, "ndf": 6, "crd": [10, 12, 6]}, - {"name": 1022, "ndf": 6, "crd": [9, 12, 6]}, - {"name": 1023, "ndf": 6, "crd": [8, 12, 6]}, - {"name": 1024, "ndf": 6, "crd": [7, 12, 6]}, - {"name": 1025, "ndf": 6, "crd": [6, 11, 6]}, - {"name": 1026, "ndf": 6, "crd": [6, 10, 6]}, - {"name": 1027, "ndf": 6, "crd": [6, 9, 6]}, - {"name": 1028, "ndf": 6, "crd": [6, 8, 6]}, - {"name": 1029, "ndf": 6, "crd": [6, 7, 6]}, - {"name": 1030, "ndf": 6, "crd": [7, 7, 6]}, - {"name": 1031, "ndf": 6, "crd": [7, 8, 6]}, - {"name": 1032, "ndf": 6, "crd": [7, 9, 6]}, - {"name": 1033, "ndf": 6, "crd": [7, 10, 6]}, - {"name": 1034, "ndf": 6, "crd": [7, 11, 6]}, - {"name": 1035, "ndf": 6, "crd": [8, 7, 6]}, - {"name": 1036, "ndf": 6, "crd": [8, 8, 6]}, - {"name": 1037, "ndf": 6, "crd": [8, 9, 6]}, - {"name": 1038, "ndf": 6, "crd": [8, 10, 6]}, - {"name": 1039, "ndf": 6, "crd": [8, 11, 6]}, - {"name": 1040, "ndf": 6, "crd": [9, 7, 6]}, - {"name": 1041, "ndf": 6, "crd": [9, 8, 6]}, - {"name": 1042, "ndf": 6, "crd": [9, 9, 6]}, - {"name": 1043, "ndf": 6, "crd": [9, 10, 6]}, - {"name": 1044, "ndf": 6, "crd": [9, 11, 6]}, - {"name": 1045, "ndf": 6, "crd": [10, 7, 6]}, - {"name": 1046, "ndf": 6, "crd": [10, 8, 6]}, - {"name": 1047, "ndf": 6, "crd": [10, 9, 6]}, - {"name": 1048, "ndf": 6, "crd": [10, 10, 6]}, - {"name": 1049, "ndf": 6, "crd": [10, 11, 6]}, - {"name": 1050, "ndf": 6, "crd": [11, 7, 6]}, - {"name": 1051, "ndf": 6, "crd": [11, 8, 6]}, - {"name": 1052, "ndf": 6, "crd": [11, 9, 6]}, - {"name": 1053, "ndf": 6, "crd": [11, 10, 6]}, - {"name": 1054, "ndf": 6, "crd": [11, 11, 6]}, - {"name": 1055, "ndf": 6, "crd": [7, 12, 6]}, - {"name": 1056, "ndf": 6, "crd": [8, 12, 6]}, - {"name": 1057, "ndf": 6, "crd": [9, 12, 6]}, - {"name": 1058, "ndf": 6, "crd": [10, 12, 6]}, - {"name": 1059, "ndf": 6, "crd": [11, 12, 6]}, - {"name": 1060, "ndf": 6, "crd": [12, 13, 6]}, - {"name": 1061, "ndf": 6, "crd": [12, 14, 6]}, - {"name": 1062, "ndf": 6, "crd": [12, 15, 6]}, - {"name": 1063, "ndf": 6, "crd": [12, 16, 6]}, - {"name": 1064, "ndf": 6, "crd": [12, 17, 6]}, - {"name": 1065, "ndf": 6, "crd": [11, 18, 6]}, - {"name": 1066, "ndf": 6, "crd": [10, 18, 6]}, - {"name": 1067, "ndf": 6, "crd": [9, 18, 6]}, - {"name": 1068, "ndf": 6, "crd": [8, 18, 6]}, - {"name": 1069, "ndf": 6, "crd": [7, 18, 6]}, - {"name": 1070, "ndf": 6, "crd": [6, 17, 6]}, - {"name": 1071, "ndf": 6, "crd": [6, 16, 6]}, - {"name": 1072, "ndf": 6, "crd": [6, 15, 6]}, - {"name": 1073, "ndf": 6, "crd": [6, 14, 6]}, - {"name": 1074, "ndf": 6, "crd": [6, 13, 6]}, - {"name": 1075, "ndf": 6, "crd": [7, 13, 6]}, - {"name": 1076, "ndf": 6, "crd": [7, 14, 6]}, - {"name": 1077, "ndf": 6, "crd": [7, 15, 6]}, - {"name": 1078, "ndf": 6, "crd": [7, 16, 6]}, - {"name": 1079, "ndf": 6, "crd": [7, 17, 6]}, - {"name": 1080, "ndf": 6, "crd": [8, 13, 6]}, - {"name": 1081, "ndf": 6, "crd": [8, 14, 6]}, - {"name": 1082, "ndf": 6, "crd": [8, 15, 6]}, - {"name": 1083, "ndf": 6, "crd": [8, 16, 6]}, - {"name": 1084, "ndf": 6, "crd": [8, 17, 6]}, - {"name": 1085, "ndf": 6, "crd": [9, 13, 6]}, - {"name": 1086, "ndf": 6, "crd": [9, 14, 6]}, - {"name": 1087, "ndf": 6, "crd": [9, 15, 6]}, - {"name": 1088, "ndf": 6, "crd": [9, 16, 6]}, - {"name": 1089, "ndf": 6, "crd": [9, 17, 6]}, - {"name": 1090, "ndf": 6, "crd": [10, 13, 6]}, - {"name": 1091, "ndf": 6, "crd": [10, 14, 6]}, - {"name": 1092, "ndf": 6, "crd": [10, 15, 6]}, - {"name": 1093, "ndf": 6, "crd": [10, 16, 6]}, - {"name": 1094, "ndf": 6, "crd": [10, 17, 6]}, - {"name": 1095, "ndf": 6, "crd": [11, 13, 6]}, - {"name": 1096, "ndf": 6, "crd": [11, 14, 6]}, - {"name": 1097, "ndf": 6, "crd": [11, 15, 6]}, - {"name": 1098, "ndf": 6, "crd": [11, 16, 6]}, - {"name": 1099, "ndf": 6, "crd": [11, 17, 6]}, - {"name": 1100, "ndf": 6, "crd": [13, 0, 6]}, - {"name": 1101, "ndf": 6, "crd": [14, 0, 6]}, - {"name": 1102, "ndf": 6, "crd": [15, 0, 6]}, - {"name": 1103, "ndf": 6, "crd": [16, 0, 6]}, - {"name": 1104, "ndf": 6, "crd": [17, 0, 6]}, - {"name": 1105, "ndf": 6, "crd": [18, 1, 6]}, - {"name": 1106, "ndf": 6, "crd": [18, 2, 6]}, - {"name": 1107, "ndf": 6, "crd": [18, 3, 6]}, - {"name": 1108, "ndf": 6, "crd": [18, 4, 6]}, - {"name": 1109, "ndf": 6, "crd": [18, 5, 6]}, - {"name": 1110, "ndf": 6, "crd": [17, 6, 6]}, - {"name": 1111, "ndf": 6, "crd": [16, 6, 6]}, - {"name": 1112, "ndf": 6, "crd": [15, 6, 6]}, - {"name": 1113, "ndf": 6, "crd": [14, 6, 6]}, - {"name": 1114, "ndf": 6, "crd": [13, 6, 6]}, - {"name": 1115, "ndf": 6, "crd": [12, 5, 6]}, - {"name": 1116, "ndf": 6, "crd": [12, 4, 6]}, - {"name": 1117, "ndf": 6, "crd": [12, 3, 6]}, - {"name": 1118, "ndf": 6, "crd": [12, 2, 6]}, - {"name": 1119, "ndf": 6, "crd": [12, 1, 6]}, - {"name": 1120, "ndf": 6, "crd": [13, 1, 6]}, - {"name": 1121, "ndf": 6, "crd": [13, 2, 6]}, - {"name": 1122, "ndf": 6, "crd": [13, 3, 6]}, - {"name": 1123, "ndf": 6, "crd": [13, 4, 6]}, - {"name": 1124, "ndf": 6, "crd": [13, 5, 6]}, - {"name": 1125, "ndf": 6, "crd": [14, 1, 6]}, - {"name": 1126, "ndf": 6, "crd": [14, 2, 6]}, - {"name": 1127, "ndf": 6, "crd": [14, 3, 6]}, - {"name": 1128, "ndf": 6, "crd": [14, 4, 6]}, - {"name": 1129, "ndf": 6, "crd": [14, 5, 6]}, - {"name": 1130, "ndf": 6, "crd": [15, 1, 6]}, - {"name": 1131, "ndf": 6, "crd": [15, 2, 6]}, - {"name": 1132, "ndf": 6, "crd": [15, 3, 6]}, - {"name": 1133, "ndf": 6, "crd": [15, 4, 6]}, - {"name": 1134, "ndf": 6, "crd": [15, 5, 6]}, - {"name": 1135, "ndf": 6, "crd": [16, 1, 6]}, - {"name": 1136, "ndf": 6, "crd": [16, 2, 6]}, - {"name": 1137, "ndf": 6, "crd": [16, 3, 6]}, - {"name": 1138, "ndf": 6, "crd": [16, 4, 6]}, - {"name": 1139, "ndf": 6, "crd": [16, 5, 6]}, - {"name": 1140, "ndf": 6, "crd": [17, 1, 6]}, - {"name": 1141, "ndf": 6, "crd": [17, 2, 6]}, - {"name": 1142, "ndf": 6, "crd": [17, 3, 6]}, - {"name": 1143, "ndf": 6, "crd": [17, 4, 6]}, - {"name": 1144, "ndf": 6, "crd": [17, 5, 6]}, - {"name": 1145, "ndf": 6, "crd": [13, 6, 6]}, - {"name": 1146, "ndf": 6, "crd": [14, 6, 6]}, - {"name": 1147, "ndf": 6, "crd": [15, 6, 6]}, - {"name": 1148, "ndf": 6, "crd": [16, 6, 6]}, - {"name": 1149, "ndf": 6, "crd": [17, 6, 6]}, - {"name": 1150, "ndf": 6, "crd": [18, 7, 6]}, - {"name": 1151, "ndf": 6, "crd": [18, 8, 6]}, - {"name": 1152, "ndf": 6, "crd": [18, 9, 6]}, - {"name": 1153, "ndf": 6, "crd": [18, 10, 6]}, - {"name": 1154, "ndf": 6, "crd": [18, 11, 6]}, - {"name": 1155, "ndf": 6, "crd": [17, 12, 6]}, - {"name": 1156, "ndf": 6, "crd": [16, 12, 6]}, - {"name": 1157, "ndf": 6, "crd": [15, 12, 6]}, - {"name": 1158, "ndf": 6, "crd": [14, 12, 6]}, - {"name": 1159, "ndf": 6, "crd": [13, 12, 6]}, - {"name": 1160, "ndf": 6, "crd": [12, 11, 6]}, - {"name": 1161, "ndf": 6, "crd": [12, 10, 6]}, - {"name": 1162, "ndf": 6, "crd": [12, 9, 6]}, - {"name": 1163, "ndf": 6, "crd": [12, 8, 6]}, - {"name": 1164, "ndf": 6, "crd": [12, 7, 6]}, - {"name": 1165, "ndf": 6, "crd": [13, 7, 6]}, - {"name": 1166, "ndf": 6, "crd": [13, 8, 6]}, - {"name": 1167, "ndf": 6, "crd": [13, 9, 6]}, - {"name": 1168, "ndf": 6, "crd": [13, 10, 6]}, - {"name": 1169, "ndf": 6, "crd": [13, 11, 6]}, - {"name": 1170, "ndf": 6, "crd": [14, 7, 6]}, - {"name": 1171, "ndf": 6, "crd": [14, 8, 6]}, - {"name": 1172, "ndf": 6, "crd": [14, 9, 6]}, - {"name": 1173, "ndf": 6, "crd": [14, 10, 6]}, - {"name": 1174, "ndf": 6, "crd": [14, 11, 6]}, - {"name": 1175, "ndf": 6, "crd": [15, 7, 6]}, - {"name": 1176, "ndf": 6, "crd": [15, 8, 6]}, - {"name": 1177, "ndf": 6, "crd": [15, 9, 6]}, - {"name": 1178, "ndf": 6, "crd": [15, 10, 6]}, - {"name": 1179, "ndf": 6, "crd": [15, 11, 6]}, - {"name": 1180, "ndf": 6, "crd": [16, 7, 6]}, - {"name": 1181, "ndf": 6, "crd": [16, 8, 6]}, - {"name": 1182, "ndf": 6, "crd": [16, 9, 6]}, - {"name": 1183, "ndf": 6, "crd": [16, 10, 6]}, - {"name": 1184, "ndf": 6, "crd": [16, 11, 6]}, - {"name": 1185, "ndf": 6, "crd": [17, 7, 6]}, - {"name": 1186, "ndf": 6, "crd": [17, 8, 6]}, - {"name": 1187, "ndf": 6, "crd": [17, 9, 6]}, - {"name": 1188, "ndf": 6, "crd": [17, 10, 6]}, - {"name": 1189, "ndf": 6, "crd": [17, 11, 6]}, - {"name": 1190, "ndf": 6, "crd": [13, 12, 6]}, - {"name": 1191, "ndf": 6, "crd": [14, 12, 6]}, - {"name": 1192, "ndf": 6, "crd": [15, 12, 6]}, - {"name": 1193, "ndf": 6, "crd": [16, 12, 6]}, - {"name": 1194, "ndf": 6, "crd": [17, 12, 6]}, - {"name": 1195, "ndf": 6, "crd": [18, 13, 6]}, - {"name": 1196, "ndf": 6, "crd": [18, 14, 6]}, - {"name": 1197, "ndf": 6, "crd": [18, 15, 6]}, - {"name": 1198, "ndf": 6, "crd": [18, 16, 6]}, - {"name": 1199, "ndf": 6, "crd": [18, 17, 6]}, - {"name": 1200, "ndf": 6, "crd": [17, 18, 6]}, - {"name": 1201, "ndf": 6, "crd": [16, 18, 6]}, - {"name": 1202, "ndf": 6, "crd": [15, 18, 6]}, - {"name": 1203, "ndf": 6, "crd": [14, 18, 6]}, - {"name": 1204, "ndf": 6, "crd": [13, 18, 6]}, - {"name": 1205, "ndf": 6, "crd": [12, 17, 6]}, - {"name": 1206, "ndf": 6, "crd": [12, 16, 6]}, - {"name": 1207, "ndf": 6, "crd": [12, 15, 6]}, - {"name": 1208, "ndf": 6, "crd": [12, 14, 6]}, - {"name": 1209, "ndf": 6, "crd": [12, 13, 6]}, - {"name": 1210, "ndf": 6, "crd": [13, 13, 6]}, - {"name": 1211, "ndf": 6, "crd": [13, 14, 6]}, - {"name": 1212, "ndf": 6, "crd": [13, 15, 6]}, - {"name": 1213, "ndf": 6, "crd": [13, 16, 6]}, - {"name": 1214, "ndf": 6, "crd": [13, 17, 6]}, - {"name": 1215, "ndf": 6, "crd": [14, 13, 6]}, - {"name": 1216, "ndf": 6, "crd": [14, 14, 6]}, - {"name": 1217, "ndf": 6, "crd": [14, 15, 6]}, - {"name": 1218, "ndf": 6, "crd": [14, 16, 6]}, - {"name": 1219, "ndf": 6, "crd": [14, 17, 6]}, - {"name": 1220, "ndf": 6, "crd": [15, 13, 6]}, - {"name": 1221, "ndf": 6, "crd": [15, 14, 6]}, - {"name": 1222, "ndf": 6, "crd": [15, 15, 6]}, - {"name": 1223, "ndf": 6, "crd": [15, 16, 6]}, - {"name": 1224, "ndf": 6, "crd": [15, 17, 6]}, - {"name": 1225, "ndf": 6, "crd": [16, 13, 6]}, - {"name": 1226, "ndf": 6, "crd": [16, 14, 6]}, - {"name": 1227, "ndf": 6, "crd": [16, 15, 6]}, - {"name": 1228, "ndf": 6, "crd": [16, 16, 6]}, - {"name": 1229, "ndf": 6, "crd": [16, 17, 6]}, - {"name": 1230, "ndf": 6, "crd": [17, 13, 6]}, - {"name": 1231, "ndf": 6, "crd": [17, 14, 6]}, - {"name": 1232, "ndf": 6, "crd": [17, 15, 6]}, - {"name": 1233, "ndf": 6, "crd": [17, 16, 6]}, - {"name": 1234, "ndf": 6, "crd": [17, 17, 6]}, - {"name": 1235, "ndf": 6, "crd": [1, 0, 9]}, - {"name": 1236, "ndf": 6, "crd": [2, 0, 9]}, - {"name": 1237, "ndf": 6, "crd": [3, 0, 9]}, - {"name": 1238, "ndf": 6, "crd": [4, 0, 9]}, - {"name": 1239, "ndf": 6, "crd": [5, 0, 9]}, - {"name": 1240, "ndf": 6, "crd": [6, 1, 9]}, - {"name": 1241, "ndf": 6, "crd": [6, 2, 9]}, - {"name": 1242, "ndf": 6, "crd": [6, 3, 9]}, - {"name": 1243, "ndf": 6, "crd": [6, 4, 9]}, - {"name": 1244, "ndf": 6, "crd": [6, 5, 9]}, - {"name": 1245, "ndf": 6, "crd": [5, 6, 9]}, - {"name": 1246, "ndf": 6, "crd": [4, 6, 9]}, - {"name": 1247, "ndf": 6, "crd": [3, 6, 9]}, - {"name": 1248, "ndf": 6, "crd": [2, 6, 9]}, - {"name": 1249, "ndf": 6, "crd": [1, 6, 9]}, - {"name": 1250, "ndf": 6, "crd": [0, 5, 9]}, - {"name": 1251, "ndf": 6, "crd": [0, 4, 9]}, - {"name": 1252, "ndf": 6, "crd": [0, 3, 9]}, - {"name": 1253, "ndf": 6, "crd": [0, 2, 9]}, - {"name": 1254, "ndf": 6, "crd": [0, 1, 9]}, - {"name": 1255, "ndf": 6, "crd": [1, 1, 9]}, - {"name": 1256, "ndf": 6, "crd": [1, 2, 9]}, - {"name": 1257, "ndf": 6, "crd": [1, 3, 9]}, - {"name": 1258, "ndf": 6, "crd": [1, 4, 9]}, - {"name": 1259, "ndf": 6, "crd": [1, 5, 9]}, - {"name": 1260, "ndf": 6, "crd": [2, 1, 9]}, - {"name": 1261, "ndf": 6, "crd": [2, 2, 9]}, - {"name": 1262, "ndf": 6, "crd": [2, 3, 9]}, - {"name": 1263, "ndf": 6, "crd": [2, 4, 9]}, - {"name": 1264, "ndf": 6, "crd": [2, 5, 9]}, - {"name": 1265, "ndf": 6, "crd": [3, 1, 9]}, - {"name": 1266, "ndf": 6, "crd": [3, 2, 9]}, - {"name": 1267, "ndf": 6, "crd": [3, 3, 9]}, - {"name": 1268, "ndf": 6, "crd": [3, 4, 9]}, - {"name": 1269, "ndf": 6, "crd": [3, 5, 9]}, - {"name": 1270, "ndf": 6, "crd": [4, 1, 9]}, - {"name": 1271, "ndf": 6, "crd": [4, 2, 9]}, - {"name": 1272, "ndf": 6, "crd": [4, 3, 9]}, - {"name": 1273, "ndf": 6, "crd": [4, 4, 9]}, - {"name": 1274, "ndf": 6, "crd": [4, 5, 9]}, - {"name": 1275, "ndf": 6, "crd": [5, 1, 9]}, - {"name": 1276, "ndf": 6, "crd": [5, 2, 9]}, - {"name": 1277, "ndf": 6, "crd": [5, 3, 9]}, - {"name": 1278, "ndf": 6, "crd": [5, 4, 9]}, - {"name": 1279, "ndf": 6, "crd": [5, 5, 9]}, - {"name": 1280, "ndf": 6, "crd": [1, 6, 9]}, - {"name": 1281, "ndf": 6, "crd": [2, 6, 9]}, - {"name": 1282, "ndf": 6, "crd": [3, 6, 9]}, - {"name": 1283, "ndf": 6, "crd": [4, 6, 9]}, - {"name": 1284, "ndf": 6, "crd": [5, 6, 9]}, - {"name": 1285, "ndf": 6, "crd": [6, 7, 9]}, - {"name": 1286, "ndf": 6, "crd": [6, 8, 9]}, - {"name": 1287, "ndf": 6, "crd": [6, 9, 9]}, - {"name": 1288, "ndf": 6, "crd": [6, 10, 9]}, - {"name": 1289, "ndf": 6, "crd": [6, 11, 9]}, - {"name": 1290, "ndf": 6, "crd": [5, 12, 9]}, - {"name": 1291, "ndf": 6, "crd": [4, 12, 9]}, - {"name": 1292, "ndf": 6, "crd": [3, 12, 9]}, - {"name": 1293, "ndf": 6, "crd": [2, 12, 9]}, - {"name": 1294, "ndf": 6, "crd": [1, 12, 9]}, - {"name": 1295, "ndf": 6, "crd": [0, 11, 9]}, - {"name": 1296, "ndf": 6, "crd": [0, 10, 9]}, - {"name": 1297, "ndf": 6, "crd": [0, 9, 9]}, - {"name": 1298, "ndf": 6, "crd": [0, 8, 9]}, - {"name": 1299, "ndf": 6, "crd": [0, 7, 9]}, - {"name": 1300, "ndf": 6, "crd": [1, 7, 9]}, - {"name": 1301, "ndf": 6, "crd": [1, 8, 9]}, - {"name": 1302, "ndf": 6, "crd": [1, 9, 9]}, - {"name": 1303, "ndf": 6, "crd": [1, 10, 9]}, - {"name": 1304, "ndf": 6, "crd": [1, 11, 9]}, - {"name": 1305, "ndf": 6, "crd": [2, 7, 9]}, - {"name": 1306, "ndf": 6, "crd": [2, 8, 9]}, - {"name": 1307, "ndf": 6, "crd": [2, 9, 9]}, - {"name": 1308, "ndf": 6, "crd": [2, 10, 9]}, - {"name": 1309, "ndf": 6, "crd": [2, 11, 9]}, - {"name": 1310, "ndf": 6, "crd": [3, 7, 9]}, - {"name": 1311, "ndf": 6, "crd": [3, 8, 9]}, - {"name": 1312, "ndf": 6, "crd": [3, 9, 9]}, - {"name": 1313, "ndf": 6, "crd": [3, 10, 9]}, - {"name": 1314, "ndf": 6, "crd": [3, 11, 9]}, - {"name": 1315, "ndf": 6, "crd": [4, 7, 9]}, - {"name": 1316, "ndf": 6, "crd": [4, 8, 9]}, - {"name": 1317, "ndf": 6, "crd": [4, 9, 9]}, - {"name": 1318, "ndf": 6, "crd": [4, 10, 9]}, - {"name": 1319, "ndf": 6, "crd": [4, 11, 9]}, - {"name": 1320, "ndf": 6, "crd": [5, 7, 9]}, - {"name": 1321, "ndf": 6, "crd": [5, 8, 9]}, - {"name": 1322, "ndf": 6, "crd": [5, 9, 9]}, - {"name": 1323, "ndf": 6, "crd": [5, 10, 9]}, - {"name": 1324, "ndf": 6, "crd": [5, 11, 9]}, - {"name": 1325, "ndf": 6, "crd": [1, 12, 9]}, - {"name": 1326, "ndf": 6, "crd": [2, 12, 9]}, - {"name": 1327, "ndf": 6, "crd": [3, 12, 9]}, - {"name": 1328, "ndf": 6, "crd": [4, 12, 9]}, - {"name": 1329, "ndf": 6, "crd": [5, 12, 9]}, - {"name": 1330, "ndf": 6, "crd": [6, 13, 9]}, - {"name": 1331, "ndf": 6, "crd": [6, 14, 9]}, - {"name": 1332, "ndf": 6, "crd": [6, 15, 9]}, - {"name": 1333, "ndf": 6, "crd": [6, 16, 9]}, - {"name": 1334, "ndf": 6, "crd": [6, 17, 9]}, - {"name": 1335, "ndf": 6, "crd": [5, 18, 9]}, - {"name": 1336, "ndf": 6, "crd": [4, 18, 9]}, - {"name": 1337, "ndf": 6, "crd": [3, 18, 9]}, - {"name": 1338, "ndf": 6, "crd": [2, 18, 9]}, - {"name": 1339, "ndf": 6, "crd": [1, 18, 9]}, - {"name": 1340, "ndf": 6, "crd": [0, 17, 9]}, - {"name": 1341, "ndf": 6, "crd": [0, 16, 9]}, - {"name": 1342, "ndf": 6, "crd": [0, 15, 9]}, - {"name": 1343, "ndf": 6, "crd": [0, 14, 9]}, - {"name": 1344, "ndf": 6, "crd": [0, 13, 9]}, - {"name": 1345, "ndf": 6, "crd": [1, 13, 9]}, - {"name": 1346, "ndf": 6, "crd": [1, 14, 9]}, - {"name": 1347, "ndf": 6, "crd": [1, 15, 9]}, - {"name": 1348, "ndf": 6, "crd": [1, 16, 9]}, - {"name": 1349, "ndf": 6, "crd": [1, 17, 9]}, - {"name": 1350, "ndf": 6, "crd": [2, 13, 9]}, - {"name": 1351, "ndf": 6, "crd": [2, 14, 9]}, - {"name": 1352, "ndf": 6, "crd": [2, 15, 9]}, - {"name": 1353, "ndf": 6, "crd": [2, 16, 9]}, - {"name": 1354, "ndf": 6, "crd": [2, 17, 9]}, - {"name": 1355, "ndf": 6, "crd": [3, 13, 9]}, - {"name": 1356, "ndf": 6, "crd": [3, 14, 9]}, - {"name": 1357, "ndf": 6, "crd": [3, 15, 9]}, - {"name": 1358, "ndf": 6, "crd": [3, 16, 9]}, - {"name": 1359, "ndf": 6, "crd": [3, 17, 9]}, - {"name": 1360, "ndf": 6, "crd": [4, 13, 9]}, - {"name": 1361, "ndf": 6, "crd": [4, 14, 9]}, - {"name": 1362, "ndf": 6, "crd": [4, 15, 9]}, - {"name": 1363, "ndf": 6, "crd": [4, 16, 9]}, - {"name": 1364, "ndf": 6, "crd": [4, 17, 9]}, - {"name": 1365, "ndf": 6, "crd": [5, 13, 9]}, - {"name": 1366, "ndf": 6, "crd": [5, 14, 9]}, - {"name": 1367, "ndf": 6, "crd": [5, 15, 9]}, - {"name": 1368, "ndf": 6, "crd": [5, 16, 9]}, - {"name": 1369, "ndf": 6, "crd": [5, 17, 9]}, - {"name": 1370, "ndf": 6, "crd": [7, 0, 9]}, - {"name": 1371, "ndf": 6, "crd": [8, 0, 9]}, - {"name": 1372, "ndf": 6, "crd": [9, 0, 9]}, - {"name": 1373, "ndf": 6, "crd": [10, 0, 9]}, - {"name": 1374, "ndf": 6, "crd": [11, 0, 9]}, - {"name": 1375, "ndf": 6, "crd": [12, 1, 9]}, - {"name": 1376, "ndf": 6, "crd": [12, 2, 9]}, - {"name": 1377, "ndf": 6, "crd": [12, 3, 9]}, - {"name": 1378, "ndf": 6, "crd": [12, 4, 9]}, - {"name": 1379, "ndf": 6, "crd": [12, 5, 9]}, - {"name": 1380, "ndf": 6, "crd": [11, 6, 9]}, - {"name": 1381, "ndf": 6, "crd": [10, 6, 9]}, - {"name": 1382, "ndf": 6, "crd": [9, 6, 9]}, - {"name": 1383, "ndf": 6, "crd": [8, 6, 9]}, - {"name": 1384, "ndf": 6, "crd": [7, 6, 9]}, - {"name": 1385, "ndf": 6, "crd": [6, 5, 9]}, - {"name": 1386, "ndf": 6, "crd": [6, 4, 9]}, - {"name": 1387, "ndf": 6, "crd": [6, 3, 9]}, - {"name": 1388, "ndf": 6, "crd": [6, 2, 9]}, - {"name": 1389, "ndf": 6, "crd": [6, 1, 9]}, - {"name": 1390, "ndf": 6, "crd": [7, 1, 9]}, - {"name": 1391, "ndf": 6, "crd": [7, 2, 9]}, - {"name": 1392, "ndf": 6, "crd": [7, 3, 9]}, - {"name": 1393, "ndf": 6, "crd": [7, 4, 9]}, - {"name": 1394, "ndf": 6, "crd": [7, 5, 9]}, - {"name": 1395, "ndf": 6, "crd": [8, 1, 9]}, - {"name": 1396, "ndf": 6, "crd": [8, 2, 9]}, - {"name": 1397, "ndf": 6, "crd": [8, 3, 9]}, - {"name": 1398, "ndf": 6, "crd": [8, 4, 9]}, - {"name": 1399, "ndf": 6, "crd": [8, 5, 9]}, - {"name": 1400, "ndf": 6, "crd": [9, 1, 9]}, - {"name": 1401, "ndf": 6, "crd": [9, 2, 9]}, - {"name": 1402, "ndf": 6, "crd": [9, 3, 9]}, - {"name": 1403, "ndf": 6, "crd": [9, 4, 9]}, - {"name": 1404, "ndf": 6, "crd": [9, 5, 9]}, - {"name": 1405, "ndf": 6, "crd": [10, 1, 9]}, - {"name": 1406, "ndf": 6, "crd": [10, 2, 9]}, - {"name": 1407, "ndf": 6, "crd": [10, 3, 9]}, - {"name": 1408, "ndf": 6, "crd": [10, 4, 9]}, - {"name": 1409, "ndf": 6, "crd": [10, 5, 9]}, - {"name": 1410, "ndf": 6, "crd": [11, 1, 9]}, - {"name": 1411, "ndf": 6, "crd": [11, 2, 9]}, - {"name": 1412, "ndf": 6, "crd": [11, 3, 9]}, - {"name": 1413, "ndf": 6, "crd": [11, 4, 9]}, - {"name": 1414, "ndf": 6, "crd": [11, 5, 9]}, - {"name": 1415, "ndf": 6, "crd": [7, 6, 9]}, - {"name": 1416, "ndf": 6, "crd": [8, 6, 9]}, - {"name": 1417, "ndf": 6, "crd": [9, 6, 9]}, - {"name": 1418, "ndf": 6, "crd": [10, 6, 9]}, - {"name": 1419, "ndf": 6, "crd": [11, 6, 9]}, - {"name": 1420, "ndf": 6, "crd": [12, 7, 9]}, - {"name": 1421, "ndf": 6, "crd": [12, 8, 9]}, - {"name": 1422, "ndf": 6, "crd": [12, 9, 9]}, - {"name": 1423, "ndf": 6, "crd": [12, 10, 9]}, - {"name": 1424, "ndf": 6, "crd": [12, 11, 9]}, - {"name": 1425, "ndf": 6, "crd": [11, 12, 9]}, - {"name": 1426, "ndf": 6, "crd": [10, 12, 9]}, - {"name": 1427, "ndf": 6, "crd": [9, 12, 9]}, - {"name": 1428, "ndf": 6, "crd": [8, 12, 9]}, - {"name": 1429, "ndf": 6, "crd": [7, 12, 9]}, - {"name": 1430, "ndf": 6, "crd": [6, 11, 9]}, - {"name": 1431, "ndf": 6, "crd": [6, 10, 9]}, - {"name": 1432, "ndf": 6, "crd": [6, 9, 9]}, - {"name": 1433, "ndf": 6, "crd": [6, 8, 9]}, - {"name": 1434, "ndf": 6, "crd": [6, 7, 9]}, - {"name": 1435, "ndf": 6, "crd": [7, 7, 9]}, - {"name": 1436, "ndf": 6, "crd": [7, 8, 9]}, - {"name": 1437, "ndf": 6, "crd": [7, 9, 9]}, - {"name": 1438, "ndf": 6, "crd": [7, 10, 9]}, - {"name": 1439, "ndf": 6, "crd": [7, 11, 9]}, - {"name": 1440, "ndf": 6, "crd": [8, 7, 9]}, - {"name": 1441, "ndf": 6, "crd": [8, 8, 9]}, - {"name": 1442, "ndf": 6, "crd": [8, 9, 9]}, - {"name": 1443, "ndf": 6, "crd": [8, 10, 9]}, - {"name": 1444, "ndf": 6, "crd": [8, 11, 9]}, - {"name": 1445, "ndf": 6, "crd": [9, 7, 9]}, - {"name": 1446, "ndf": 6, "crd": [9, 8, 9]}, - {"name": 1447, "ndf": 6, "crd": [9, 9, 9]}, - {"name": 1448, "ndf": 6, "crd": [9, 10, 9]}, - {"name": 1449, "ndf": 6, "crd": [9, 11, 9]}, - {"name": 1450, "ndf": 6, "crd": [10, 7, 9]}, - {"name": 1451, "ndf": 6, "crd": [10, 8, 9]}, - {"name": 1452, "ndf": 6, "crd": [10, 9, 9]}, - {"name": 1453, "ndf": 6, "crd": [10, 10, 9]}, - {"name": 1454, "ndf": 6, "crd": [10, 11, 9]}, - {"name": 1455, "ndf": 6, "crd": [11, 7, 9]}, - {"name": 1456, "ndf": 6, "crd": [11, 8, 9]}, - {"name": 1457, "ndf": 6, "crd": [11, 9, 9]}, - {"name": 1458, "ndf": 6, "crd": [11, 10, 9]}, - {"name": 1459, "ndf": 6, "crd": [11, 11, 9]}, - {"name": 1460, "ndf": 6, "crd": [7, 12, 9]}, - {"name": 1461, "ndf": 6, "crd": [8, 12, 9]}, - {"name": 1462, "ndf": 6, "crd": [9, 12, 9]}, - {"name": 1463, "ndf": 6, "crd": [10, 12, 9]}, - {"name": 1464, "ndf": 6, "crd": [11, 12, 9]}, - {"name": 1465, "ndf": 6, "crd": [12, 13, 9]}, - {"name": 1466, "ndf": 6, "crd": [12, 14, 9]}, - {"name": 1467, "ndf": 6, "crd": [12, 15, 9]}, - {"name": 1468, "ndf": 6, "crd": [12, 16, 9]}, - {"name": 1469, "ndf": 6, "crd": [12, 17, 9]}, - {"name": 1470, "ndf": 6, "crd": [11, 18, 9]}, - {"name": 1471, "ndf": 6, "crd": [10, 18, 9]}, - {"name": 1472, "ndf": 6, "crd": [9, 18, 9]}, - {"name": 1473, "ndf": 6, "crd": [8, 18, 9]}, - {"name": 1474, "ndf": 6, "crd": [7, 18, 9]}, - {"name": 1475, "ndf": 6, "crd": [6, 17, 9]}, - {"name": 1476, "ndf": 6, "crd": [6, 16, 9]}, - {"name": 1477, "ndf": 6, "crd": [6, 15, 9]}, - {"name": 1478, "ndf": 6, "crd": [6, 14, 9]}, - {"name": 1479, "ndf": 6, "crd": [6, 13, 9]}, - {"name": 1480, "ndf": 6, "crd": [7, 13, 9]}, - {"name": 1481, "ndf": 6, "crd": [7, 14, 9]}, - {"name": 1482, "ndf": 6, "crd": [7, 15, 9]}, - {"name": 1483, "ndf": 6, "crd": [7, 16, 9]}, - {"name": 1484, "ndf": 6, "crd": [7, 17, 9]}, - {"name": 1485, "ndf": 6, "crd": [8, 13, 9]}, - {"name": 1486, "ndf": 6, "crd": [8, 14, 9]}, - {"name": 1487, "ndf": 6, "crd": [8, 15, 9]}, - {"name": 1488, "ndf": 6, "crd": [8, 16, 9]}, - {"name": 1489, "ndf": 6, "crd": [8, 17, 9]}, - {"name": 1490, "ndf": 6, "crd": [9, 13, 9]}, - {"name": 1491, "ndf": 6, "crd": [9, 14, 9]}, - {"name": 1492, "ndf": 6, "crd": [9, 15, 9]}, - {"name": 1493, "ndf": 6, "crd": [9, 16, 9]}, - {"name": 1494, "ndf": 6, "crd": [9, 17, 9]}, - {"name": 1495, "ndf": 6, "crd": [10, 13, 9]}, - {"name": 1496, "ndf": 6, "crd": [10, 14, 9]}, - {"name": 1497, "ndf": 6, "crd": [10, 15, 9]}, - {"name": 1498, "ndf": 6, "crd": [10, 16, 9]}, - {"name": 1499, "ndf": 6, "crd": [10, 17, 9]}, - {"name": 1500, "ndf": 6, "crd": [11, 13, 9]}, - {"name": 1501, "ndf": 6, "crd": [11, 14, 9]}, - {"name": 1502, "ndf": 6, "crd": [11, 15, 9]}, - {"name": 1503, "ndf": 6, "crd": [11, 16, 9]}, - {"name": 1504, "ndf": 6, "crd": [11, 17, 9]}, - {"name": 1505, "ndf": 6, "crd": [13, 0, 9]}, - {"name": 1506, "ndf": 6, "crd": [14, 0, 9]}, - {"name": 1507, "ndf": 6, "crd": [15, 0, 9]}, - {"name": 1508, "ndf": 6, "crd": [16, 0, 9]}, - {"name": 1509, "ndf": 6, "crd": [17, 0, 9]}, - {"name": 1510, "ndf": 6, "crd": [18, 1, 9]}, - {"name": 1511, "ndf": 6, "crd": [18, 2, 9]}, - {"name": 1512, "ndf": 6, "crd": [18, 3, 9]}, - {"name": 1513, "ndf": 6, "crd": [18, 4, 9]}, - {"name": 1514, "ndf": 6, "crd": [18, 5, 9]}, - {"name": 1515, "ndf": 6, "crd": [17, 6, 9]}, - {"name": 1516, "ndf": 6, "crd": [16, 6, 9]}, - {"name": 1517, "ndf": 6, "crd": [15, 6, 9]}, - {"name": 1518, "ndf": 6, "crd": [14, 6, 9]}, - {"name": 1519, "ndf": 6, "crd": [13, 6, 9]}, - {"name": 1520, "ndf": 6, "crd": [12, 5, 9]}, - {"name": 1521, "ndf": 6, "crd": [12, 4, 9]}, - {"name": 1522, "ndf": 6, "crd": [12, 3, 9]}, - {"name": 1523, "ndf": 6, "crd": [12, 2, 9]}, - {"name": 1524, "ndf": 6, "crd": [12, 1, 9]}, - {"name": 1525, "ndf": 6, "crd": [13, 1, 9]}, - {"name": 1526, "ndf": 6, "crd": [13, 2, 9]}, - {"name": 1527, "ndf": 6, "crd": [13, 3, 9]}, - {"name": 1528, "ndf": 6, "crd": [13, 4, 9]}, - {"name": 1529, "ndf": 6, "crd": [13, 5, 9]}, - {"name": 1530, "ndf": 6, "crd": [14, 1, 9]}, - {"name": 1531, "ndf": 6, "crd": [14, 2, 9]}, - {"name": 1532, "ndf": 6, "crd": [14, 3, 9]}, - {"name": 1533, "ndf": 6, "crd": [14, 4, 9]}, - {"name": 1534, "ndf": 6, "crd": [14, 5, 9]}, - {"name": 1535, "ndf": 6, "crd": [15, 1, 9]}, - {"name": 1536, "ndf": 6, "crd": [15, 2, 9]}, - {"name": 1537, "ndf": 6, "crd": [15, 3, 9]}, - {"name": 1538, "ndf": 6, "crd": [15, 4, 9]}, - {"name": 1539, "ndf": 6, "crd": [15, 5, 9]}, - {"name": 1540, "ndf": 6, "crd": [16, 1, 9]}, - {"name": 1541, "ndf": 6, "crd": [16, 2, 9]}, - {"name": 1542, "ndf": 6, "crd": [16, 3, 9]}, - {"name": 1543, "ndf": 6, "crd": [16, 4, 9]}, - {"name": 1544, "ndf": 6, "crd": [16, 5, 9]}, - {"name": 1545, "ndf": 6, "crd": [17, 1, 9]}, - {"name": 1546, "ndf": 6, "crd": [17, 2, 9]}, - {"name": 1547, "ndf": 6, "crd": [17, 3, 9]}, - {"name": 1548, "ndf": 6, "crd": [17, 4, 9]}, - {"name": 1549, "ndf": 6, "crd": [17, 5, 9]}, - {"name": 1550, "ndf": 6, "crd": [13, 6, 9]}, - {"name": 1551, "ndf": 6, "crd": [14, 6, 9]}, - {"name": 1552, "ndf": 6, "crd": [15, 6, 9]}, - {"name": 1553, "ndf": 6, "crd": [16, 6, 9]}, - {"name": 1554, "ndf": 6, "crd": [17, 6, 9]}, - {"name": 1555, "ndf": 6, "crd": [18, 7, 9]}, - {"name": 1556, "ndf": 6, "crd": [18, 8, 9]}, - {"name": 1557, "ndf": 6, "crd": [18, 9, 9]}, - {"name": 1558, "ndf": 6, "crd": [18, 10, 9]}, - {"name": 1559, "ndf": 6, "crd": [18, 11, 9]}, - {"name": 1560, "ndf": 6, "crd": [17, 12, 9]}, - {"name": 1561, "ndf": 6, "crd": [16, 12, 9]}, - {"name": 1562, "ndf": 6, "crd": [15, 12, 9]}, - {"name": 1563, "ndf": 6, "crd": [14, 12, 9]}, - {"name": 1564, "ndf": 6, "crd": [13, 12, 9]}, - {"name": 1565, "ndf": 6, "crd": [12, 11, 9]}, - {"name": 1566, "ndf": 6, "crd": [12, 10, 9]}, - {"name": 1567, "ndf": 6, "crd": [12, 9, 9]}, - {"name": 1568, "ndf": 6, "crd": [12, 8, 9]}, - {"name": 1569, "ndf": 6, "crd": [12, 7, 9]}, - {"name": 1570, "ndf": 6, "crd": [13, 7, 9]}, - {"name": 1571, "ndf": 6, "crd": [13, 8, 9]}, - {"name": 1572, "ndf": 6, "crd": [13, 9, 9]}, - {"name": 1573, "ndf": 6, "crd": [13, 10, 9]}, - {"name": 1574, "ndf": 6, "crd": [13, 11, 9]}, - {"name": 1575, "ndf": 6, "crd": [14, 7, 9]}, - {"name": 1576, "ndf": 6, "crd": [14, 8, 9]}, - {"name": 1577, "ndf": 6, "crd": [14, 9, 9]}, - {"name": 1578, "ndf": 6, "crd": [14, 10, 9]}, - {"name": 1579, "ndf": 6, "crd": [14, 11, 9]}, - {"name": 1580, "ndf": 6, "crd": [15, 7, 9]}, - {"name": 1581, "ndf": 6, "crd": [15, 8, 9]}, - {"name": 1582, "ndf": 6, "crd": [15, 9, 9]}, - {"name": 1583, "ndf": 6, "crd": [15, 10, 9]}, - {"name": 1584, "ndf": 6, "crd": [15, 11, 9]}, - {"name": 1585, "ndf": 6, "crd": [16, 7, 9]}, - {"name": 1586, "ndf": 6, "crd": [16, 8, 9]}, - {"name": 1587, "ndf": 6, "crd": [16, 9, 9]}, - {"name": 1588, "ndf": 6, "crd": [16, 10, 9]}, - {"name": 1589, "ndf": 6, "crd": [16, 11, 9]}, - {"name": 1590, "ndf": 6, "crd": [17, 7, 9]}, - {"name": 1591, "ndf": 6, "crd": [17, 8, 9]}, - {"name": 1592, "ndf": 6, "crd": [17, 9, 9]}, - {"name": 1593, "ndf": 6, "crd": [17, 10, 9]}, - {"name": 1594, "ndf": 6, "crd": [17, 11, 9]}, - {"name": 1595, "ndf": 6, "crd": [13, 12, 9]}, - {"name": 1596, "ndf": 6, "crd": [14, 12, 9]}, - {"name": 1597, "ndf": 6, "crd": [15, 12, 9]}, - {"name": 1598, "ndf": 6, "crd": [16, 12, 9]}, - {"name": 1599, "ndf": 6, "crd": [17, 12, 9]}, - {"name": 1600, "ndf": 6, "crd": [18, 13, 9]}, - {"name": 1601, "ndf": 6, "crd": [18, 14, 9]}, - {"name": 1602, "ndf": 6, "crd": [18, 15, 9]}, - {"name": 1603, "ndf": 6, "crd": [18, 16, 9]}, - {"name": 1604, "ndf": 6, "crd": [18, 17, 9]}, - {"name": 1605, "ndf": 6, "crd": [17, 18, 9]}, - {"name": 1606, "ndf": 6, "crd": [16, 18, 9]}, - {"name": 1607, "ndf": 6, "crd": [15, 18, 9]}, - {"name": 1608, "ndf": 6, "crd": [14, 18, 9]}, - {"name": 1609, "ndf": 6, "crd": [13, 18, 9]}, - {"name": 1610, "ndf": 6, "crd": [12, 17, 9]}, - {"name": 1611, "ndf": 6, "crd": [12, 16, 9]}, - {"name": 1612, "ndf": 6, "crd": [12, 15, 9]}, - {"name": 1613, "ndf": 6, "crd": [12, 14, 9]}, - {"name": 1614, "ndf": 6, "crd": [12, 13, 9]}, - {"name": 1615, "ndf": 6, "crd": [13, 13, 9]}, - {"name": 1616, "ndf": 6, "crd": [13, 14, 9]}, - {"name": 1617, "ndf": 6, "crd": [13, 15, 9]}, - {"name": 1618, "ndf": 6, "crd": [13, 16, 9]}, - {"name": 1619, "ndf": 6, "crd": [13, 17, 9]}, - {"name": 1620, "ndf": 6, "crd": [14, 13, 9]}, - {"name": 1621, "ndf": 6, "crd": [14, 14, 9]}, - {"name": 1622, "ndf": 6, "crd": [14, 15, 9]}, - {"name": 1623, "ndf": 6, "crd": [14, 16, 9]}, - {"name": 1624, "ndf": 6, "crd": [14, 17, 9]}, - {"name": 1625, "ndf": 6, "crd": [15, 13, 9]}, - {"name": 1626, "ndf": 6, "crd": [15, 14, 9]}, - {"name": 1627, "ndf": 6, "crd": [15, 15, 9]}, - {"name": 1628, "ndf": 6, "crd": [15, 16, 9]}, - {"name": 1629, "ndf": 6, "crd": [15, 17, 9]}, - {"name": 1630, "ndf": 6, "crd": [16, 13, 9]}, - {"name": 1631, "ndf": 6, "crd": [16, 14, 9]}, - {"name": 1632, "ndf": 6, "crd": [16, 15, 9]}, - {"name": 1633, "ndf": 6, "crd": [16, 16, 9]}, - {"name": 1634, "ndf": 6, "crd": [16, 17, 9]}, - {"name": 1635, "ndf": 6, "crd": [17, 13, 9]}, - {"name": 1636, "ndf": 6, "crd": [17, 14, 9]}, - {"name": 1637, "ndf": 6, "crd": [17, 15, 9]}, - {"name": 1638, "ndf": 6, "crd": [17, 16, 9]}, - {"name": 1639, "ndf": 6, "crd": [17, 17, 9]}, - {"name": 1640, "ndf": 6, "crd": [0, 0, 4], "mass": [1e-10, 1e-10, 20, 1e-10, 1e-10, 1e-10]} - ], - "elements": [ - {"name": 1, "type": "ElasticBeam3d", "nodes": [1, 5], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 2, "type": "ElasticBeam3d", "nodes": [3, 6], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 3, "type": "ElasticBeam3d", "nodes": [4, 7], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 4, "type": "ElasticBeam3d", "nodes": [2, 8], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 5, "type": "ElasticBeam3d", "nodes": [10, 11], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 6, "type": "ElasticBeam3d", "nodes": [9, 12], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 7, "type": "ElasticBeam3d", "nodes": [14, 15], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 8, "type": "ElasticBeam3d", "nodes": [13, 16], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 9, "type": "ElasticBeam3d", "nodes": [17, 19], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 10, "type": "ElasticBeam3d", "nodes": [18, 20], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 11, "type": "ElasticBeam3d", "nodes": [21, 22], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 12, "type": "ElasticBeam3d", "nodes": [23, 24], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 13, "type": "ElasticBeam3d", "nodes": [25, 27], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 14, "type": "ElasticBeam3d", "nodes": [26, 28], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 15, "type": "ElasticBeam3d", "nodes": [29, 30], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 16, "type": "ElasticBeam3d", "nodes": [31, 32], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 17, "type": "ElasticBeam3d", "nodes": [5, 33], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 18, "type": "ElasticBeam3d", "nodes": [33, 34], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 19, "type": "ElasticBeam3d", "nodes": [34, 35], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 20, "type": "ElasticBeam3d", "nodes": [35, 36], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 21, "type": "ElasticBeam3d", "nodes": [36, 37], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 22, "type": "ElasticBeam3d", "nodes": [37, 6], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 23, "type": "ElasticBeam3d", "nodes": [6, 38], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 24, "type": "ElasticBeam3d", "nodes": [38, 39], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 25, "type": "ElasticBeam3d", "nodes": [39, 40], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 26, "type": "ElasticBeam3d", "nodes": [40, 41], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 27, "type": "ElasticBeam3d", "nodes": [41, 42], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 28, "type": "ElasticBeam3d", "nodes": [42, 7], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 29, "type": "ElasticBeam3d", "nodes": [7, 43], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 30, "type": "ElasticBeam3d", "nodes": [43, 44], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 31, "type": "ElasticBeam3d", "nodes": [44, 45], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 32, "type": "ElasticBeam3d", "nodes": [45, 46], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 33, "type": "ElasticBeam3d", "nodes": [46, 47], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 34, "type": "ElasticBeam3d", "nodes": [47, 8], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 35, "type": "ElasticBeam3d", "nodes": [8, 48], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 36, "type": "ElasticBeam3d", "nodes": [48, 49], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 37, "type": "ElasticBeam3d", "nodes": [49, 50], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 38, "type": "ElasticBeam3d", "nodes": [50, 51], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 39, "type": "ElasticBeam3d", "nodes": [51, 52], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 40, "type": "ElasticBeam3d", "nodes": [52, 5], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 41, "type": "ElasticBeam3d", "nodes": [7, 53], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 42, "type": "ElasticBeam3d", "nodes": [53, 54], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 43, "type": "ElasticBeam3d", "nodes": [54, 55], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 44, "type": "ElasticBeam3d", "nodes": [55, 56], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 45, "type": "ElasticBeam3d", "nodes": [56, 57], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 46, "type": "ElasticBeam3d", "nodes": [57, 11], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 47, "type": "ElasticBeam3d", "nodes": [11, 58], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 48, "type": "ElasticBeam3d", "nodes": [58, 59], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 49, "type": "ElasticBeam3d", "nodes": [59, 60], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 50, "type": "ElasticBeam3d", "nodes": [60, 61], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 51, "type": "ElasticBeam3d", "nodes": [61, 62], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 52, "type": "ElasticBeam3d", "nodes": [62, 12], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 53, "type": "ElasticBeam3d", "nodes": [12, 63], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 54, "type": "ElasticBeam3d", "nodes": [63, 64], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 55, "type": "ElasticBeam3d", "nodes": [64, 65], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 56, "type": "ElasticBeam3d", "nodes": [65, 66], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 57, "type": "ElasticBeam3d", "nodes": [66, 67], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 58, "type": "ElasticBeam3d", "nodes": [67, 8], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 59, "type": "ElasticBeam3d", "nodes": [11, 68], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 60, "type": "ElasticBeam3d", "nodes": [68, 69], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 61, "type": "ElasticBeam3d", "nodes": [69, 70], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 62, "type": "ElasticBeam3d", "nodes": [70, 71], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 63, "type": "ElasticBeam3d", "nodes": [71, 72], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 64, "type": "ElasticBeam3d", "nodes": [72, 15], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 65, "type": "ElasticBeam3d", "nodes": [15, 73], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 66, "type": "ElasticBeam3d", "nodes": [73, 74], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 67, "type": "ElasticBeam3d", "nodes": [74, 75], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 68, "type": "ElasticBeam3d", "nodes": [75, 76], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 69, "type": "ElasticBeam3d", "nodes": [76, 77], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 70, "type": "ElasticBeam3d", "nodes": [77, 16], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 71, "type": "ElasticBeam3d", "nodes": [16, 78], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 72, "type": "ElasticBeam3d", "nodes": [78, 79], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 73, "type": "ElasticBeam3d", "nodes": [79, 80], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 74, "type": "ElasticBeam3d", "nodes": [80, 81], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 75, "type": "ElasticBeam3d", "nodes": [81, 82], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 76, "type": "ElasticBeam3d", "nodes": [82, 12], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 77, "type": "ElasticBeam3d", "nodes": [6, 83], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 78, "type": "ElasticBeam3d", "nodes": [83, 84], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 79, "type": "ElasticBeam3d", "nodes": [84, 85], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 80, "type": "ElasticBeam3d", "nodes": [85, 86], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 81, "type": "ElasticBeam3d", "nodes": [86, 87], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 82, "type": "ElasticBeam3d", "nodes": [87, 19], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 83, "type": "ElasticBeam3d", "nodes": [19, 88], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 84, "type": "ElasticBeam3d", "nodes": [88, 89], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 85, "type": "ElasticBeam3d", "nodes": [89, 90], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 86, "type": "ElasticBeam3d", "nodes": [90, 91], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 87, "type": "ElasticBeam3d", "nodes": [91, 92], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 88, "type": "ElasticBeam3d", "nodes": [92, 20], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 89, "type": "ElasticBeam3d", "nodes": [20, 93], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 90, "type": "ElasticBeam3d", "nodes": [93, 94], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 91, "type": "ElasticBeam3d", "nodes": [94, 95], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 92, "type": "ElasticBeam3d", "nodes": [95, 96], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 93, "type": "ElasticBeam3d", "nodes": [96, 97], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 94, "type": "ElasticBeam3d", "nodes": [97, 7], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 95, "type": "ElasticBeam3d", "nodes": [20, 98], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 96, "type": "ElasticBeam3d", "nodes": [98, 99], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 97, "type": "ElasticBeam3d", "nodes": [99, 100], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 98, "type": "ElasticBeam3d", "nodes": [100, 101], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 99, "type": "ElasticBeam3d", "nodes": [101, 102], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 100, "type": "ElasticBeam3d", "nodes": [102, 22], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 101, "type": "ElasticBeam3d", "nodes": [22, 103], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 102, "type": "ElasticBeam3d", "nodes": [103, 104], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 103, "type": "ElasticBeam3d", "nodes": [104, 105], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 104, "type": "ElasticBeam3d", "nodes": [105, 106], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 105, "type": "ElasticBeam3d", "nodes": [106, 107], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 106, "type": "ElasticBeam3d", "nodes": [107, 11], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 107, "type": "ElasticBeam3d", "nodes": [22, 108], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 108, "type": "ElasticBeam3d", "nodes": [108, 109], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 109, "type": "ElasticBeam3d", "nodes": [109, 110], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 110, "type": "ElasticBeam3d", "nodes": [110, 111], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 111, "type": "ElasticBeam3d", "nodes": [111, 112], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 112, "type": "ElasticBeam3d", "nodes": [112, 24], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 113, "type": "ElasticBeam3d", "nodes": [24, 113], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 114, "type": "ElasticBeam3d", "nodes": [113, 114], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 115, "type": "ElasticBeam3d", "nodes": [114, 115], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 116, "type": "ElasticBeam3d", "nodes": [115, 116], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 117, "type": "ElasticBeam3d", "nodes": [116, 117], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 118, "type": "ElasticBeam3d", "nodes": [117, 15], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 119, "type": "ElasticBeam3d", "nodes": [19, 118], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 120, "type": "ElasticBeam3d", "nodes": [118, 119], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 121, "type": "ElasticBeam3d", "nodes": [119, 120], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 122, "type": "ElasticBeam3d", "nodes": [120, 121], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 123, "type": "ElasticBeam3d", "nodes": [121, 122], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 124, "type": "ElasticBeam3d", "nodes": [122, 27], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 125, "type": "ElasticBeam3d", "nodes": [27, 123], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 126, "type": "ElasticBeam3d", "nodes": [123, 124], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 127, "type": "ElasticBeam3d", "nodes": [124, 125], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 128, "type": "ElasticBeam3d", "nodes": [125, 126], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 129, "type": "ElasticBeam3d", "nodes": [126, 127], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 130, "type": "ElasticBeam3d", "nodes": [127, 28], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 131, "type": "ElasticBeam3d", "nodes": [28, 128], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 132, "type": "ElasticBeam3d", "nodes": [128, 129], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 133, "type": "ElasticBeam3d", "nodes": [129, 130], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 134, "type": "ElasticBeam3d", "nodes": [130, 131], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 135, "type": "ElasticBeam3d", "nodes": [131, 132], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 136, "type": "ElasticBeam3d", "nodes": [132, 20], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 137, "type": "ElasticBeam3d", "nodes": [28, 133], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 138, "type": "ElasticBeam3d", "nodes": [133, 134], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 139, "type": "ElasticBeam3d", "nodes": [134, 135], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 140, "type": "ElasticBeam3d", "nodes": [135, 136], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 141, "type": "ElasticBeam3d", "nodes": [136, 137], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 142, "type": "ElasticBeam3d", "nodes": [137, 30], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 143, "type": "ElasticBeam3d", "nodes": [30, 138], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 144, "type": "ElasticBeam3d", "nodes": [138, 139], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 145, "type": "ElasticBeam3d", "nodes": [139, 140], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 146, "type": "ElasticBeam3d", "nodes": [140, 141], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 147, "type": "ElasticBeam3d", "nodes": [141, 142], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 148, "type": "ElasticBeam3d", "nodes": [142, 22], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 149, "type": "ElasticBeam3d", "nodes": [30, 143], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 150, "type": "ElasticBeam3d", "nodes": [143, 144], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 151, "type": "ElasticBeam3d", "nodes": [144, 145], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 152, "type": "ElasticBeam3d", "nodes": [145, 146], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 153, "type": "ElasticBeam3d", "nodes": [146, 147], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 154, "type": "ElasticBeam3d", "nodes": [147, 32], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 155, "type": "ElasticBeam3d", "nodes": [32, 148], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 156, "type": "ElasticBeam3d", "nodes": [148, 149], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 157, "type": "ElasticBeam3d", "nodes": [149, 150], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 158, "type": "ElasticBeam3d", "nodes": [150, 151], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 159, "type": "ElasticBeam3d", "nodes": [151, 152], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 160, "type": "ElasticBeam3d", "nodes": [152, 24], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 161, "type": "ElasticBeam3d", "nodes": [5, 153], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 162, "type": "ElasticBeam3d", "nodes": [6, 154], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 163, "type": "ElasticBeam3d", "nodes": [7, 155], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 164, "type": "ElasticBeam3d", "nodes": [8, 156], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 165, "type": "ElasticBeam3d", "nodes": [11, 157], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 166, "type": "ElasticBeam3d", "nodes": [12, 158], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 167, "type": "ElasticBeam3d", "nodes": [15, 159], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 168, "type": "ElasticBeam3d", "nodes": [16, 160], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 169, "type": "ElasticBeam3d", "nodes": [19, 161], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 170, "type": "ElasticBeam3d", "nodes": [20, 162], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 171, "type": "ElasticBeam3d", "nodes": [22, 163], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 172, "type": "ElasticBeam3d", "nodes": [24, 164], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 173, "type": "ElasticBeam3d", "nodes": [27, 165], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 174, "type": "ElasticBeam3d", "nodes": [28, 166], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 175, "type": "ElasticBeam3d", "nodes": [30, 167], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 176, "type": "ElasticBeam3d", "nodes": [32, 168], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 177, "type": "ElasticBeam3d", "nodes": [153, 169], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 178, "type": "ElasticBeam3d", "nodes": [169, 170], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 179, "type": "ElasticBeam3d", "nodes": [170, 171], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 180, "type": "ElasticBeam3d", "nodes": [171, 172], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 181, "type": "ElasticBeam3d", "nodes": [172, 173], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 182, "type": "ElasticBeam3d", "nodes": [173, 154], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 183, "type": "ElasticBeam3d", "nodes": [154, 174], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 184, "type": "ElasticBeam3d", "nodes": [174, 175], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 185, "type": "ElasticBeam3d", "nodes": [175, 176], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 186, "type": "ElasticBeam3d", "nodes": [176, 177], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 187, "type": "ElasticBeam3d", "nodes": [177, 178], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 188, "type": "ElasticBeam3d", "nodes": [178, 155], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 189, "type": "ElasticBeam3d", "nodes": [155, 179], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 190, "type": "ElasticBeam3d", "nodes": [179, 180], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 191, "type": "ElasticBeam3d", "nodes": [180, 181], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 192, "type": "ElasticBeam3d", "nodes": [181, 182], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 193, "type": "ElasticBeam3d", "nodes": [182, 183], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 194, "type": "ElasticBeam3d", "nodes": [183, 156], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 195, "type": "ElasticBeam3d", "nodes": [156, 184], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 196, "type": "ElasticBeam3d", "nodes": [184, 185], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 197, "type": "ElasticBeam3d", "nodes": [185, 186], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 198, "type": "ElasticBeam3d", "nodes": [186, 187], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 199, "type": "ElasticBeam3d", "nodes": [187, 188], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 200, "type": "ElasticBeam3d", "nodes": [188, 153], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 201, "type": "ElasticBeam3d", "nodes": [155, 189], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 202, "type": "ElasticBeam3d", "nodes": [189, 190], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 203, "type": "ElasticBeam3d", "nodes": [190, 191], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 204, "type": "ElasticBeam3d", "nodes": [191, 192], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 205, "type": "ElasticBeam3d", "nodes": [192, 193], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 206, "type": "ElasticBeam3d", "nodes": [193, 157], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 207, "type": "ElasticBeam3d", "nodes": [157, 194], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 208, "type": "ElasticBeam3d", "nodes": [194, 195], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 209, "type": "ElasticBeam3d", "nodes": [195, 196], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 210, "type": "ElasticBeam3d", "nodes": [196, 197], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 211, "type": "ElasticBeam3d", "nodes": [197, 198], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 212, "type": "ElasticBeam3d", "nodes": [198, 158], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 213, "type": "ElasticBeam3d", "nodes": [158, 199], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 214, "type": "ElasticBeam3d", "nodes": [199, 200], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 215, "type": "ElasticBeam3d", "nodes": [200, 201], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 216, "type": "ElasticBeam3d", "nodes": [201, 202], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 217, "type": "ElasticBeam3d", "nodes": [202, 203], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 218, "type": "ElasticBeam3d", "nodes": [203, 156], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 219, "type": "ElasticBeam3d", "nodes": [157, 204], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 220, "type": "ElasticBeam3d", "nodes": [204, 205], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 221, "type": "ElasticBeam3d", "nodes": [205, 206], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 222, "type": "ElasticBeam3d", "nodes": [206, 207], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 223, "type": "ElasticBeam3d", "nodes": [207, 208], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 224, "type": "ElasticBeam3d", "nodes": [208, 159], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 225, "type": "ElasticBeam3d", "nodes": [159, 209], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 226, "type": "ElasticBeam3d", "nodes": [209, 210], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 227, "type": "ElasticBeam3d", "nodes": [210, 211], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 228, "type": "ElasticBeam3d", "nodes": [211, 212], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 229, "type": "ElasticBeam3d", "nodes": [212, 213], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 230, "type": "ElasticBeam3d", "nodes": [213, 160], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 231, "type": "ElasticBeam3d", "nodes": [160, 214], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 232, "type": "ElasticBeam3d", "nodes": [214, 215], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 233, "type": "ElasticBeam3d", "nodes": [215, 216], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 234, "type": "ElasticBeam3d", "nodes": [216, 217], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 235, "type": "ElasticBeam3d", "nodes": [217, 218], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 236, "type": "ElasticBeam3d", "nodes": [218, 158], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 237, "type": "ElasticBeam3d", "nodes": [154, 219], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 238, "type": "ElasticBeam3d", "nodes": [219, 220], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 239, "type": "ElasticBeam3d", "nodes": [220, 221], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 240, "type": "ElasticBeam3d", "nodes": [221, 222], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 241, "type": "ElasticBeam3d", "nodes": [222, 223], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 242, "type": "ElasticBeam3d", "nodes": [223, 161], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 243, "type": "ElasticBeam3d", "nodes": [161, 224], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 244, "type": "ElasticBeam3d", "nodes": [224, 225], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 245, "type": "ElasticBeam3d", "nodes": [225, 226], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 246, "type": "ElasticBeam3d", "nodes": [226, 227], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 247, "type": "ElasticBeam3d", "nodes": [227, 228], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 248, "type": "ElasticBeam3d", "nodes": [228, 162], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 249, "type": "ElasticBeam3d", "nodes": [162, 229], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 250, "type": "ElasticBeam3d", "nodes": [229, 230], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 251, "type": "ElasticBeam3d", "nodes": [230, 231], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 252, "type": "ElasticBeam3d", "nodes": [231, 232], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 253, "type": "ElasticBeam3d", "nodes": [232, 233], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 254, "type": "ElasticBeam3d", "nodes": [233, 155], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 255, "type": "ElasticBeam3d", "nodes": [162, 234], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 256, "type": "ElasticBeam3d", "nodes": [234, 235], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 257, "type": "ElasticBeam3d", "nodes": [235, 236], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 258, "type": "ElasticBeam3d", "nodes": [236, 237], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 259, "type": "ElasticBeam3d", "nodes": [237, 238], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 260, "type": "ElasticBeam3d", "nodes": [238, 163], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 261, "type": "ElasticBeam3d", "nodes": [163, 239], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 262, "type": "ElasticBeam3d", "nodes": [239, 240], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 263, "type": "ElasticBeam3d", "nodes": [240, 241], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 264, "type": "ElasticBeam3d", "nodes": [241, 242], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 265, "type": "ElasticBeam3d", "nodes": [242, 243], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 266, "type": "ElasticBeam3d", "nodes": [243, 157], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 267, "type": "ElasticBeam3d", "nodes": [163, 244], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 268, "type": "ElasticBeam3d", "nodes": [244, 245], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 269, "type": "ElasticBeam3d", "nodes": [245, 246], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 270, "type": "ElasticBeam3d", "nodes": [246, 247], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 271, "type": "ElasticBeam3d", "nodes": [247, 248], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 272, "type": "ElasticBeam3d", "nodes": [248, 164], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 273, "type": "ElasticBeam3d", "nodes": [164, 249], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 274, "type": "ElasticBeam3d", "nodes": [249, 250], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 275, "type": "ElasticBeam3d", "nodes": [250, 251], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 276, "type": "ElasticBeam3d", "nodes": [251, 252], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 277, "type": "ElasticBeam3d", "nodes": [252, 253], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 278, "type": "ElasticBeam3d", "nodes": [253, 159], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 279, "type": "ElasticBeam3d", "nodes": [161, 254], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 280, "type": "ElasticBeam3d", "nodes": [254, 255], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 281, "type": "ElasticBeam3d", "nodes": [255, 256], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 282, "type": "ElasticBeam3d", "nodes": [256, 257], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 283, "type": "ElasticBeam3d", "nodes": [257, 258], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 284, "type": "ElasticBeam3d", "nodes": [258, 165], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 285, "type": "ElasticBeam3d", "nodes": [165, 259], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 286, "type": "ElasticBeam3d", "nodes": [259, 260], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 287, "type": "ElasticBeam3d", "nodes": [260, 261], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 288, "type": "ElasticBeam3d", "nodes": [261, 262], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 289, "type": "ElasticBeam3d", "nodes": [262, 263], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 290, "type": "ElasticBeam3d", "nodes": [263, 166], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 291, "type": "ElasticBeam3d", "nodes": [166, 264], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 292, "type": "ElasticBeam3d", "nodes": [264, 265], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 293, "type": "ElasticBeam3d", "nodes": [265, 266], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 294, "type": "ElasticBeam3d", "nodes": [266, 267], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 295, "type": "ElasticBeam3d", "nodes": [267, 268], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 296, "type": "ElasticBeam3d", "nodes": [268, 162], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 297, "type": "ElasticBeam3d", "nodes": [166, 269], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 298, "type": "ElasticBeam3d", "nodes": [269, 270], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 299, "type": "ElasticBeam3d", "nodes": [270, 271], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 300, "type": "ElasticBeam3d", "nodes": [271, 272], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 301, "type": "ElasticBeam3d", "nodes": [272, 273], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 302, "type": "ElasticBeam3d", "nodes": [273, 167], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 303, "type": "ElasticBeam3d", "nodes": [167, 274], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 304, "type": "ElasticBeam3d", "nodes": [274, 275], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 305, "type": "ElasticBeam3d", "nodes": [275, 276], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 306, "type": "ElasticBeam3d", "nodes": [276, 277], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 307, "type": "ElasticBeam3d", "nodes": [277, 278], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 308, "type": "ElasticBeam3d", "nodes": [278, 163], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 309, "type": "ElasticBeam3d", "nodes": [167, 279], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 310, "type": "ElasticBeam3d", "nodes": [279, 280], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 311, "type": "ElasticBeam3d", "nodes": [280, 281], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 312, "type": "ElasticBeam3d", "nodes": [281, 282], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 313, "type": "ElasticBeam3d", "nodes": [282, 283], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 314, "type": "ElasticBeam3d", "nodes": [283, 168], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 315, "type": "ElasticBeam3d", "nodes": [168, 284], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 316, "type": "ElasticBeam3d", "nodes": [284, 285], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 317, "type": "ElasticBeam3d", "nodes": [285, 286], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 318, "type": "ElasticBeam3d", "nodes": [286, 287], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 319, "type": "ElasticBeam3d", "nodes": [287, 288], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 320, "type": "ElasticBeam3d", "nodes": [288, 164], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 321, "type": "ElasticBeam3d", "nodes": [153, 289], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 322, "type": "ElasticBeam3d", "nodes": [154, 290], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 323, "type": "ElasticBeam3d", "nodes": [155, 291], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 324, "type": "ElasticBeam3d", "nodes": [156, 292], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 325, "type": "ElasticBeam3d", "nodes": [157, 293], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 326, "type": "ElasticBeam3d", "nodes": [158, 294], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 327, "type": "ElasticBeam3d", "nodes": [159, 295], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 328, "type": "ElasticBeam3d", "nodes": [160, 296], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 329, "type": "ElasticBeam3d", "nodes": [161, 297], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 330, "type": "ElasticBeam3d", "nodes": [162, 298], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 331, "type": "ElasticBeam3d", "nodes": [163, 299], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 332, "type": "ElasticBeam3d", "nodes": [164, 300], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 333, "type": "ElasticBeam3d", "nodes": [165, 301], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 334, "type": "ElasticBeam3d", "nodes": [166, 302], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 335, "type": "ElasticBeam3d", "nodes": [167, 303], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 336, "type": "ElasticBeam3d", "nodes": [168, 304], "E": 1.999e+11, "G": 7.69e+10, "A": 0.059, "Jx": 5.421e-20, "Iy": 0.0006701, "Iz": 0.001802, "massperlength": 463, "releasez": 0, "releasey": 0, "crdTransformation": "0"}, - {"name": 337, "type": "ElasticBeam3d", "nodes": [289, 305], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 338, "type": "ElasticBeam3d", "nodes": [305, 306], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 339, "type": "ElasticBeam3d", "nodes": [306, 307], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 340, "type": "ElasticBeam3d", "nodes": [307, 308], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 341, "type": "ElasticBeam3d", "nodes": [308, 309], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 342, "type": "ElasticBeam3d", "nodes": [309, 290], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 343, "type": "ElasticBeam3d", "nodes": [290, 310], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 344, "type": "ElasticBeam3d", "nodes": [310, 311], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 345, "type": "ElasticBeam3d", "nodes": [311, 312], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 346, "type": "ElasticBeam3d", "nodes": [312, 313], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 347, "type": "ElasticBeam3d", "nodes": [313, 314], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 348, "type": "ElasticBeam3d", "nodes": [314, 291], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 349, "type": "ElasticBeam3d", "nodes": [291, 315], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 350, "type": "ElasticBeam3d", "nodes": [315, 316], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 351, "type": "ElasticBeam3d", "nodes": [316, 317], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 352, "type": "ElasticBeam3d", "nodes": [317, 318], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 353, "type": "ElasticBeam3d", "nodes": [318, 319], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 354, "type": "ElasticBeam3d", "nodes": [319, 292], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 355, "type": "ElasticBeam3d", "nodes": [292, 320], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 356, "type": "ElasticBeam3d", "nodes": [320, 321], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 357, "type": "ElasticBeam3d", "nodes": [321, 322], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 358, "type": "ElasticBeam3d", "nodes": [322, 323], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 359, "type": "ElasticBeam3d", "nodes": [323, 324], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 360, "type": "ElasticBeam3d", "nodes": [324, 289], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 361, "type": "ElasticBeam3d", "nodes": [291, 325], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 362, "type": "ElasticBeam3d", "nodes": [325, 326], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 363, "type": "ElasticBeam3d", "nodes": [326, 327], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 364, "type": "ElasticBeam3d", "nodes": [327, 328], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 365, "type": "ElasticBeam3d", "nodes": [328, 329], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 366, "type": "ElasticBeam3d", "nodes": [329, 293], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 367, "type": "ElasticBeam3d", "nodes": [293, 330], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 368, "type": "ElasticBeam3d", "nodes": [330, 331], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 369, "type": "ElasticBeam3d", "nodes": [331, 332], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 370, "type": "ElasticBeam3d", "nodes": [332, 333], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 371, "type": "ElasticBeam3d", "nodes": [333, 334], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 372, "type": "ElasticBeam3d", "nodes": [334, 294], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 373, "type": "ElasticBeam3d", "nodes": [294, 335], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 374, "type": "ElasticBeam3d", "nodes": [335, 336], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 375, "type": "ElasticBeam3d", "nodes": [336, 337], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 376, "type": "ElasticBeam3d", "nodes": [337, 338], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 377, "type": "ElasticBeam3d", "nodes": [338, 339], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 378, "type": "ElasticBeam3d", "nodes": [339, 292], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 379, "type": "ElasticBeam3d", "nodes": [293, 340], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 380, "type": "ElasticBeam3d", "nodes": [340, 341], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 381, "type": "ElasticBeam3d", "nodes": [341, 342], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 382, "type": "ElasticBeam3d", "nodes": [342, 343], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 383, "type": "ElasticBeam3d", "nodes": [343, 344], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 384, "type": "ElasticBeam3d", "nodes": [344, 295], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 385, "type": "ElasticBeam3d", "nodes": [295, 345], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 386, "type": "ElasticBeam3d", "nodes": [345, 346], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 387, "type": "ElasticBeam3d", "nodes": [346, 347], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 388, "type": "ElasticBeam3d", "nodes": [347, 348], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 389, "type": "ElasticBeam3d", "nodes": [348, 349], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 390, "type": "ElasticBeam3d", "nodes": [349, 296], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 391, "type": "ElasticBeam3d", "nodes": [296, 350], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 392, "type": "ElasticBeam3d", "nodes": [350, 351], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 393, "type": "ElasticBeam3d", "nodes": [351, 352], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 394, "type": "ElasticBeam3d", "nodes": [352, 353], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 395, "type": "ElasticBeam3d", "nodes": [353, 354], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 396, "type": "ElasticBeam3d", "nodes": [354, 294], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 397, "type": "ElasticBeam3d", "nodes": [290, 355], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 398, "type": "ElasticBeam3d", "nodes": [355, 356], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 399, "type": "ElasticBeam3d", "nodes": [356, 357], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 400, "type": "ElasticBeam3d", "nodes": [357, 358], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 401, "type": "ElasticBeam3d", "nodes": [358, 359], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 402, "type": "ElasticBeam3d", "nodes": [359, 297], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 403, "type": "ElasticBeam3d", "nodes": [297, 360], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 404, "type": "ElasticBeam3d", "nodes": [360, 361], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 405, "type": "ElasticBeam3d", "nodes": [361, 362], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 406, "type": "ElasticBeam3d", "nodes": [362, 363], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 407, "type": "ElasticBeam3d", "nodes": [363, 364], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 408, "type": "ElasticBeam3d", "nodes": [364, 298], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 409, "type": "ElasticBeam3d", "nodes": [298, 365], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 410, "type": "ElasticBeam3d", "nodes": [365, 366], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 411, "type": "ElasticBeam3d", "nodes": [366, 367], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 412, "type": "ElasticBeam3d", "nodes": [367, 368], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 413, "type": "ElasticBeam3d", "nodes": [368, 369], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 414, "type": "ElasticBeam3d", "nodes": [369, 291], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 415, "type": "ElasticBeam3d", "nodes": [298, 370], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 416, "type": "ElasticBeam3d", "nodes": [370, 371], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 417, "type": "ElasticBeam3d", "nodes": [371, 372], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 418, "type": "ElasticBeam3d", "nodes": [372, 373], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 419, "type": "ElasticBeam3d", "nodes": [373, 374], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 420, "type": "ElasticBeam3d", "nodes": [374, 299], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 421, "type": "ElasticBeam3d", "nodes": [299, 375], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 422, "type": "ElasticBeam3d", "nodes": [375, 376], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 423, "type": "ElasticBeam3d", "nodes": [376, 377], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 424, "type": "ElasticBeam3d", "nodes": [377, 378], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 425, "type": "ElasticBeam3d", "nodes": [378, 379], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 426, "type": "ElasticBeam3d", "nodes": [379, 293], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 427, "type": "ElasticBeam3d", "nodes": [299, 380], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 428, "type": "ElasticBeam3d", "nodes": [380, 381], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 429, "type": "ElasticBeam3d", "nodes": [381, 382], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 430, "type": "ElasticBeam3d", "nodes": [382, 383], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 431, "type": "ElasticBeam3d", "nodes": [383, 384], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 432, "type": "ElasticBeam3d", "nodes": [384, 300], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 433, "type": "ElasticBeam3d", "nodes": [300, 385], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 434, "type": "ElasticBeam3d", "nodes": [385, 386], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 435, "type": "ElasticBeam3d", "nodes": [386, 387], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 436, "type": "ElasticBeam3d", "nodes": [387, 388], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 437, "type": "ElasticBeam3d", "nodes": [388, 389], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 438, "type": "ElasticBeam3d", "nodes": [389, 295], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 439, "type": "ElasticBeam3d", "nodes": [297, 390], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 440, "type": "ElasticBeam3d", "nodes": [390, 391], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 441, "type": "ElasticBeam3d", "nodes": [391, 392], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 442, "type": "ElasticBeam3d", "nodes": [392, 393], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 443, "type": "ElasticBeam3d", "nodes": [393, 394], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 444, "type": "ElasticBeam3d", "nodes": [394, 301], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "1"}, - {"name": 445, "type": "ElasticBeam3d", "nodes": [301, 395], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 446, "type": "ElasticBeam3d", "nodes": [395, 396], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 447, "type": "ElasticBeam3d", "nodes": [396, 397], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 448, "type": "ElasticBeam3d", "nodes": [397, 398], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 449, "type": "ElasticBeam3d", "nodes": [398, 399], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 450, "type": "ElasticBeam3d", "nodes": [399, 302], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 451, "type": "ElasticBeam3d", "nodes": [302, 400], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 452, "type": "ElasticBeam3d", "nodes": [400, 401], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 453, "type": "ElasticBeam3d", "nodes": [401, 402], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 454, "type": "ElasticBeam3d", "nodes": [402, 403], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 455, "type": "ElasticBeam3d", "nodes": [403, 404], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 456, "type": "ElasticBeam3d", "nodes": [404, 298], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 457, "type": "ElasticBeam3d", "nodes": [302, 405], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 458, "type": "ElasticBeam3d", "nodes": [405, 406], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 459, "type": "ElasticBeam3d", "nodes": [406, 407], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 460, "type": "ElasticBeam3d", "nodes": [407, 408], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 461, "type": "ElasticBeam3d", "nodes": [408, 409], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 462, "type": "ElasticBeam3d", "nodes": [409, 303], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 463, "type": "ElasticBeam3d", "nodes": [303, 410], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 464, "type": "ElasticBeam3d", "nodes": [410, 411], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 465, "type": "ElasticBeam3d", "nodes": [411, 412], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 466, "type": "ElasticBeam3d", "nodes": [412, 413], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 467, "type": "ElasticBeam3d", "nodes": [413, 414], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 468, "type": "ElasticBeam3d", "nodes": [414, 299], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 469, "type": "ElasticBeam3d", "nodes": [303, 415], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 470, "type": "ElasticBeam3d", "nodes": [415, 416], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 471, "type": "ElasticBeam3d", "nodes": [416, 417], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 472, "type": "ElasticBeam3d", "nodes": [417, 418], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 473, "type": "ElasticBeam3d", "nodes": [418, 419], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 474, "type": "ElasticBeam3d", "nodes": [419, 304], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 475, "type": "ElasticBeam3d", "nodes": [304, 420], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 476, "type": "ElasticBeam3d", "nodes": [420, 421], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 477, "type": "ElasticBeam3d", "nodes": [421, 422], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 478, "type": "ElasticBeam3d", "nodes": [422, 423], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 479, "type": "ElasticBeam3d", "nodes": [423, 424], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 480, "type": "ElasticBeam3d", "nodes": [424, 300], "E": 1.999e+11, "G": 7.69e+10, "A": 0.0114, "Jx": 5.421e-20, "Iy": 0.0001419, "Iz": 4.826e-05, "massperlength": 90, "releasez": 0, "releasey": 0, "crdTransformation": "2"}, - {"name": 481, "type": "ShellMITC4", "nodes": [5, 425, 445, 444], "section": "1"}, - {"name": 482, "type": "ShellMITC4", "nodes": [444, 445, 446, 443], "section": "1"}, - {"name": 483, "type": "ShellMITC4", "nodes": [443, 446, 447, 442], "section": "1"}, - {"name": 484, "type": "ShellMITC4", "nodes": [442, 447, 448, 441], "section": "1"}, - {"name": 485, "type": "ShellMITC4", "nodes": [441, 448, 449, 440], "section": "1"}, - {"name": 486, "type": "ShellMITC4", "nodes": [440, 449, 439, 8], "section": "1"}, - {"name": 487, "type": "ShellMITC4", "nodes": [425, 426, 450, 445], "section": "1"}, - {"name": 488, "type": "ShellMITC4", "nodes": [445, 450, 451, 446], "section": "1"}, - {"name": 489, "type": "ShellMITC4", "nodes": [446, 451, 452, 447], "section": "1"}, - {"name": 490, "type": "ShellMITC4", "nodes": [447, 452, 453, 448], "section": "1"}, - {"name": 491, "type": "ShellMITC4", "nodes": [448, 453, 454, 449], "section": "1"}, - {"name": 492, "type": "ShellMITC4", "nodes": [449, 454, 438, 439], "section": "1"}, - {"name": 493, "type": "ShellMITC4", "nodes": [426, 427, 455, 450], "section": "1"}, - {"name": 494, "type": "ShellMITC4", "nodes": [450, 455, 456, 451], "section": "1"}, - {"name": 495, "type": "ShellMITC4", "nodes": [451, 456, 457, 452], "section": "1"}, - {"name": 496, "type": "ShellMITC4", "nodes": [452, 457, 458, 453], "section": "1"}, - {"name": 497, "type": "ShellMITC4", "nodes": [453, 458, 459, 454], "section": "1"}, - {"name": 498, "type": "ShellMITC4", "nodes": [454, 459, 437, 438], "section": "1"}, - {"name": 499, "type": "ShellMITC4", "nodes": [427, 428, 460, 455], "section": "1"}, - {"name": 500, "type": "ShellMITC4", "nodes": [455, 460, 461, 456], "section": "1"}, - {"name": 501, "type": "ShellMITC4", "nodes": [456, 461, 462, 457], "section": "1"}, - {"name": 502, "type": "ShellMITC4", "nodes": [457, 462, 463, 458], "section": "1"}, - {"name": 503, "type": "ShellMITC4", "nodes": [458, 463, 464, 459], "section": "1"}, - {"name": 504, "type": "ShellMITC4", "nodes": [459, 464, 436, 437], "section": "1"}, - {"name": 505, "type": "ShellMITC4", "nodes": [428, 429, 465, 460], "section": "1"}, - {"name": 506, "type": "ShellMITC4", "nodes": [460, 465, 466, 461], "section": "1"}, - {"name": 507, "type": "ShellMITC4", "nodes": [461, 466, 467, 462], "section": "1"}, - {"name": 508, "type": "ShellMITC4", "nodes": [462, 467, 468, 463], "section": "1"}, - {"name": 509, "type": "ShellMITC4", "nodes": [463, 468, 469, 464], "section": "1"}, - {"name": 510, "type": "ShellMITC4", "nodes": [464, 469, 435, 436], "section": "1"}, - {"name": 511, "type": "ShellMITC4", "nodes": [429, 6, 430, 465], "section": "1"}, - {"name": 512, "type": "ShellMITC4", "nodes": [465, 430, 431, 466], "section": "1"}, - {"name": 513, "type": "ShellMITC4", "nodes": [466, 431, 432, 467], "section": "1"}, - {"name": 514, "type": "ShellMITC4", "nodes": [467, 432, 433, 468], "section": "1"}, - {"name": 515, "type": "ShellMITC4", "nodes": [468, 433, 434, 469], "section": "1"}, - {"name": 516, "type": "ShellMITC4", "nodes": [469, 434, 7, 435], "section": "1"}, - {"name": 517, "type": "ShellMITC4", "nodes": [8, 470, 490, 489], "section": "1"}, - {"name": 518, "type": "ShellMITC4", "nodes": [489, 490, 491, 488], "section": "1"}, - {"name": 519, "type": "ShellMITC4", "nodes": [488, 491, 492, 487], "section": "1"}, - {"name": 520, "type": "ShellMITC4", "nodes": [487, 492, 493, 486], "section": "1"}, - {"name": 521, "type": "ShellMITC4", "nodes": [486, 493, 494, 485], "section": "1"}, - {"name": 522, "type": "ShellMITC4", "nodes": [485, 494, 484, 12], "section": "1"}, - {"name": 523, "type": "ShellMITC4", "nodes": [470, 471, 495, 490], "section": "1"}, - {"name": 524, "type": "ShellMITC4", "nodes": [490, 495, 496, 491], "section": "1"}, - {"name": 525, "type": "ShellMITC4", "nodes": [491, 496, 497, 492], "section": "1"}, - {"name": 526, "type": "ShellMITC4", "nodes": [492, 497, 498, 493], "section": "1"}, - {"name": 527, "type": "ShellMITC4", "nodes": [493, 498, 499, 494], "section": "1"}, - {"name": 528, "type": "ShellMITC4", "nodes": [494, 499, 483, 484], "section": "1"}, - {"name": 529, "type": "ShellMITC4", "nodes": [471, 472, 500, 495], "section": "1"}, - {"name": 530, "type": "ShellMITC4", "nodes": [495, 500, 501, 496], "section": "1"}, - {"name": 531, "type": "ShellMITC4", "nodes": [496, 501, 502, 497], "section": "1"}, - {"name": 532, "type": "ShellMITC4", "nodes": [497, 502, 503, 498], "section": "1"}, - {"name": 533, "type": "ShellMITC4", "nodes": [498, 503, 504, 499], "section": "1"}, - {"name": 534, "type": "ShellMITC4", "nodes": [499, 504, 482, 483], "section": "1"}, - {"name": 535, "type": "ShellMITC4", "nodes": [472, 473, 505, 500], "section": "1"}, - {"name": 536, "type": "ShellMITC4", "nodes": [500, 505, 506, 501], "section": "1"}, - {"name": 537, "type": "ShellMITC4", "nodes": [501, 506, 507, 502], "section": "1"}, - {"name": 538, "type": "ShellMITC4", "nodes": [502, 507, 508, 503], "section": "1"}, - {"name": 539, "type": "ShellMITC4", "nodes": [503, 508, 509, 504], "section": "1"}, - {"name": 540, "type": "ShellMITC4", "nodes": [504, 509, 481, 482], "section": "1"}, - {"name": 541, "type": "ShellMITC4", "nodes": [473, 474, 510, 505], "section": "1"}, - {"name": 542, "type": "ShellMITC4", "nodes": [505, 510, 511, 506], "section": "1"}, - {"name": 543, "type": "ShellMITC4", "nodes": [506, 511, 512, 507], "section": "1"}, - {"name": 544, "type": "ShellMITC4", "nodes": [507, 512, 513, 508], "section": "1"}, - {"name": 545, "type": "ShellMITC4", "nodes": [508, 513, 514, 509], "section": "1"}, - {"name": 546, "type": "ShellMITC4", "nodes": [509, 514, 480, 481], "section": "1"}, - {"name": 547, "type": "ShellMITC4", "nodes": [474, 7, 475, 510], "section": "1"}, - {"name": 548, "type": "ShellMITC4", "nodes": [510, 475, 476, 511], "section": "1"}, - {"name": 549, "type": "ShellMITC4", "nodes": [511, 476, 477, 512], "section": "1"}, - {"name": 550, "type": "ShellMITC4", "nodes": [512, 477, 478, 513], "section": "1"}, - {"name": 551, "type": "ShellMITC4", "nodes": [513, 478, 479, 514], "section": "1"}, - {"name": 552, "type": "ShellMITC4", "nodes": [514, 479, 11, 480], "section": "1"}, - {"name": 553, "type": "ShellMITC4", "nodes": [12, 515, 535, 534], "section": "1"}, - {"name": 554, "type": "ShellMITC4", "nodes": [534, 535, 536, 533], "section": "1"}, - {"name": 555, "type": "ShellMITC4", "nodes": [533, 536, 537, 532], "section": "1"}, - {"name": 556, "type": "ShellMITC4", "nodes": [532, 537, 538, 531], "section": "1"}, - {"name": 557, "type": "ShellMITC4", "nodes": [531, 538, 539, 530], "section": "1"}, - {"name": 558, "type": "ShellMITC4", "nodes": [530, 539, 529, 16], "section": "1"}, - {"name": 559, "type": "ShellMITC4", "nodes": [515, 516, 540, 535], "section": "1"}, - {"name": 560, "type": "ShellMITC4", "nodes": [535, 540, 541, 536], "section": "1"}, - {"name": 561, "type": "ShellMITC4", "nodes": [536, 541, 542, 537], "section": "1"}, - {"name": 562, "type": "ShellMITC4", "nodes": [537, 542, 543, 538], "section": "1"}, - {"name": 563, "type": "ShellMITC4", "nodes": [538, 543, 544, 539], "section": "1"}, - {"name": 564, "type": "ShellMITC4", "nodes": [539, 544, 528, 529], "section": "1"}, - {"name": 565, "type": "ShellMITC4", "nodes": [516, 517, 545, 540], "section": "1"}, - {"name": 566, "type": "ShellMITC4", "nodes": [540, 545, 546, 541], "section": "1"}, - {"name": 567, "type": "ShellMITC4", "nodes": [541, 546, 547, 542], "section": "1"}, - {"name": 568, "type": "ShellMITC4", "nodes": [542, 547, 548, 543], "section": "1"}, - {"name": 569, "type": "ShellMITC4", "nodes": [543, 548, 549, 544], "section": "1"}, - {"name": 570, "type": "ShellMITC4", "nodes": [544, 549, 527, 528], "section": "1"}, - {"name": 571, "type": "ShellMITC4", "nodes": [517, 518, 550, 545], "section": "1"}, - {"name": 572, "type": "ShellMITC4", "nodes": [545, 550, 551, 546], "section": "1"}, - {"name": 573, "type": "ShellMITC4", "nodes": [546, 551, 552, 547], "section": "1"}, - {"name": 574, "type": "ShellMITC4", "nodes": [547, 552, 553, 548], "section": "1"}, - {"name": 575, "type": "ShellMITC4", "nodes": [548, 553, 554, 549], "section": "1"}, - {"name": 576, "type": "ShellMITC4", "nodes": [549, 554, 526, 527], "section": "1"}, - {"name": 577, "type": "ShellMITC4", "nodes": [518, 519, 555, 550], "section": "1"}, - {"name": 578, "type": "ShellMITC4", "nodes": [550, 555, 556, 551], "section": "1"}, - {"name": 579, "type": "ShellMITC4", "nodes": [551, 556, 557, 552], "section": "1"}, - {"name": 580, "type": "ShellMITC4", "nodes": [552, 557, 558, 553], "section": "1"}, - {"name": 581, "type": "ShellMITC4", "nodes": [553, 558, 559, 554], "section": "1"}, - {"name": 582, "type": "ShellMITC4", "nodes": [554, 559, 525, 526], "section": "1"}, - {"name": 583, "type": "ShellMITC4", "nodes": [519, 11, 520, 555], "section": "1"}, - {"name": 584, "type": "ShellMITC4", "nodes": [555, 520, 521, 556], "section": "1"}, - {"name": 585, "type": "ShellMITC4", "nodes": [556, 521, 522, 557], "section": "1"}, - {"name": 586, "type": "ShellMITC4", "nodes": [557, 522, 523, 558], "section": "1"}, - {"name": 587, "type": "ShellMITC4", "nodes": [558, 523, 524, 559], "section": "1"}, - {"name": 588, "type": "ShellMITC4", "nodes": [559, 524, 15, 525], "section": "1"}, - {"name": 589, "type": "ShellMITC4", "nodes": [6, 560, 580, 579], "section": "1"}, - {"name": 590, "type": "ShellMITC4", "nodes": [579, 580, 581, 578], "section": "1"}, - {"name": 591, "type": "ShellMITC4", "nodes": [578, 581, 582, 577], "section": "1"}, - {"name": 592, "type": "ShellMITC4", "nodes": [577, 582, 583, 576], "section": "1"}, - {"name": 593, "type": "ShellMITC4", "nodes": [576, 583, 584, 575], "section": "1"}, - {"name": 594, "type": "ShellMITC4", "nodes": [575, 584, 574, 7], "section": "1"}, - {"name": 595, "type": "ShellMITC4", "nodes": [560, 561, 585, 580], "section": "1"}, - {"name": 596, "type": "ShellMITC4", "nodes": [580, 585, 586, 581], "section": "1"}, - {"name": 597, "type": "ShellMITC4", "nodes": [581, 586, 587, 582], "section": "1"}, - {"name": 598, "type": "ShellMITC4", "nodes": [582, 587, 588, 583], "section": "1"}, - {"name": 599, "type": "ShellMITC4", "nodes": [583, 588, 589, 584], "section": "1"}, - {"name": 600, "type": "ShellMITC4", "nodes": [584, 589, 573, 574], "section": "1"}, - {"name": 601, "type": "ShellMITC4", "nodes": [561, 562, 590, 585], "section": "1"}, - {"name": 602, "type": "ShellMITC4", "nodes": [585, 590, 591, 586], "section": "1"}, - {"name": 603, "type": "ShellMITC4", "nodes": [586, 591, 592, 587], "section": "1"}, - {"name": 604, "type": "ShellMITC4", "nodes": [587, 592, 593, 588], "section": "1"}, - {"name": 605, "type": "ShellMITC4", "nodes": [588, 593, 594, 589], "section": "1"}, - {"name": 606, "type": "ShellMITC4", "nodes": [589, 594, 572, 573], "section": "1"}, - {"name": 607, "type": "ShellMITC4", "nodes": [562, 563, 595, 590], "section": "1"}, - {"name": 608, "type": "ShellMITC4", "nodes": [590, 595, 596, 591], "section": "1"}, - {"name": 609, "type": "ShellMITC4", "nodes": [591, 596, 597, 592], "section": "1"}, - {"name": 610, "type": "ShellMITC4", "nodes": [592, 597, 598, 593], "section": "1"}, - {"name": 611, "type": "ShellMITC4", "nodes": [593, 598, 599, 594], "section": "1"}, - {"name": 612, "type": "ShellMITC4", "nodes": [594, 599, 571, 572], "section": "1"}, - {"name": 613, "type": "ShellMITC4", "nodes": [563, 564, 600, 595], "section": "1"}, - {"name": 614, "type": "ShellMITC4", "nodes": [595, 600, 601, 596], "section": "1"}, - {"name": 615, "type": "ShellMITC4", "nodes": [596, 601, 602, 597], "section": "1"}, - {"name": 616, "type": "ShellMITC4", "nodes": [597, 602, 603, 598], "section": "1"}, - {"name": 617, "type": "ShellMITC4", "nodes": [598, 603, 604, 599], "section": "1"}, - {"name": 618, "type": "ShellMITC4", "nodes": [599, 604, 570, 571], "section": "1"}, - {"name": 619, "type": "ShellMITC4", "nodes": [564, 19, 565, 600], "section": "1"}, - {"name": 620, "type": "ShellMITC4", "nodes": [600, 565, 566, 601], "section": "1"}, - {"name": 621, "type": "ShellMITC4", "nodes": [601, 566, 567, 602], "section": "1"}, - {"name": 622, "type": "ShellMITC4", "nodes": [602, 567, 568, 603], "section": "1"}, - {"name": 623, "type": "ShellMITC4", "nodes": [603, 568, 569, 604], "section": "1"}, - {"name": 624, "type": "ShellMITC4", "nodes": [604, 569, 20, 570], "section": "1"}, - {"name": 625, "type": "ShellMITC4", "nodes": [7, 605, 625, 624], "section": "1"}, - {"name": 626, "type": "ShellMITC4", "nodes": [624, 625, 626, 623], "section": "1"}, - {"name": 627, "type": "ShellMITC4", "nodes": [623, 626, 627, 622], "section": "1"}, - {"name": 628, "type": "ShellMITC4", "nodes": [622, 627, 628, 621], "section": "1"}, - {"name": 629, "type": "ShellMITC4", "nodes": [621, 628, 629, 620], "section": "1"}, - {"name": 630, "type": "ShellMITC4", "nodes": [620, 629, 619, 11], "section": "1"}, - {"name": 631, "type": "ShellMITC4", "nodes": [605, 606, 630, 625], "section": "1"}, - {"name": 632, "type": "ShellMITC4", "nodes": [625, 630, 631, 626], "section": "1"}, - {"name": 633, "type": "ShellMITC4", "nodes": [626, 631, 632, 627], "section": "1"}, - {"name": 634, "type": "ShellMITC4", "nodes": [627, 632, 633, 628], "section": "1"}, - {"name": 635, "type": "ShellMITC4", "nodes": [628, 633, 634, 629], "section": "1"}, - {"name": 636, "type": "ShellMITC4", "nodes": [629, 634, 618, 619], "section": "1"}, - {"name": 637, "type": "ShellMITC4", "nodes": [606, 607, 635, 630], "section": "1"}, - {"name": 638, "type": "ShellMITC4", "nodes": [630, 635, 636, 631], "section": "1"}, - {"name": 639, "type": "ShellMITC4", "nodes": [631, 636, 637, 632], "section": "1"}, - {"name": 640, "type": "ShellMITC4", "nodes": [632, 637, 638, 633], "section": "1"}, - {"name": 641, "type": "ShellMITC4", "nodes": [633, 638, 639, 634], "section": "1"}, - {"name": 642, "type": "ShellMITC4", "nodes": [634, 639, 617, 618], "section": "1"}, - {"name": 643, "type": "ShellMITC4", "nodes": [607, 608, 640, 635], "section": "1"}, - {"name": 644, "type": "ShellMITC4", "nodes": [635, 640, 641, 636], "section": "1"}, - {"name": 645, "type": "ShellMITC4", "nodes": [636, 641, 642, 637], "section": "1"}, - {"name": 646, "type": "ShellMITC4", "nodes": [637, 642, 643, 638], "section": "1"}, - {"name": 647, "type": "ShellMITC4", "nodes": [638, 643, 644, 639], "section": "1"}, - {"name": 648, "type": "ShellMITC4", "nodes": [639, 644, 616, 617], "section": "1"}, - {"name": 649, "type": "ShellMITC4", "nodes": [608, 609, 645, 640], "section": "1"}, - {"name": 650, "type": "ShellMITC4", "nodes": [640, 645, 646, 641], "section": "1"}, - {"name": 651, "type": "ShellMITC4", "nodes": [641, 646, 647, 642], "section": "1"}, - {"name": 652, "type": "ShellMITC4", "nodes": [642, 647, 648, 643], "section": "1"}, - {"name": 653, "type": "ShellMITC4", "nodes": [643, 648, 649, 644], "section": "1"}, - {"name": 654, "type": "ShellMITC4", "nodes": [644, 649, 615, 616], "section": "1"}, - {"name": 655, "type": "ShellMITC4", "nodes": [609, 20, 610, 645], "section": "1"}, - {"name": 656, "type": "ShellMITC4", "nodes": [645, 610, 611, 646], "section": "1"}, - {"name": 657, "type": "ShellMITC4", "nodes": [646, 611, 612, 647], "section": "1"}, - {"name": 658, "type": "ShellMITC4", "nodes": [647, 612, 613, 648], "section": "1"}, - {"name": 659, "type": "ShellMITC4", "nodes": [648, 613, 614, 649], "section": "1"}, - {"name": 660, "type": "ShellMITC4", "nodes": [649, 614, 22, 615], "section": "1"}, - {"name": 661, "type": "ShellMITC4", "nodes": [11, 650, 670, 669], "section": "1"}, - {"name": 662, "type": "ShellMITC4", "nodes": [669, 670, 671, 668], "section": "1"}, - {"name": 663, "type": "ShellMITC4", "nodes": [668, 671, 672, 667], "section": "1"}, - {"name": 664, "type": "ShellMITC4", "nodes": [667, 672, 673, 666], "section": "1"}, - {"name": 665, "type": "ShellMITC4", "nodes": [666, 673, 674, 665], "section": "1"}, - {"name": 666, "type": "ShellMITC4", "nodes": [665, 674, 664, 15], "section": "1"}, - {"name": 667, "type": "ShellMITC4", "nodes": [650, 651, 675, 670], "section": "1"}, - {"name": 668, "type": "ShellMITC4", "nodes": [670, 675, 676, 671], "section": "1"}, - {"name": 669, "type": "ShellMITC4", "nodes": [671, 676, 677, 672], "section": "1"}, - {"name": 670, "type": "ShellMITC4", "nodes": [672, 677, 678, 673], "section": "1"}, - {"name": 671, "type": "ShellMITC4", "nodes": [673, 678, 679, 674], "section": "1"}, - {"name": 672, "type": "ShellMITC4", "nodes": [674, 679, 663, 664], "section": "1"}, - {"name": 673, "type": "ShellMITC4", "nodes": [651, 652, 680, 675], "section": "1"}, - {"name": 674, "type": "ShellMITC4", "nodes": [675, 680, 681, 676], "section": "1"}, - {"name": 675, "type": "ShellMITC4", "nodes": [676, 681, 682, 677], "section": "1"}, - {"name": 676, "type": "ShellMITC4", "nodes": [677, 682, 683, 678], "section": "1"}, - {"name": 677, "type": "ShellMITC4", "nodes": [678, 683, 684, 679], "section": "1"}, - {"name": 678, "type": "ShellMITC4", "nodes": [679, 684, 662, 663], "section": "1"}, - {"name": 679, "type": "ShellMITC4", "nodes": [652, 653, 685, 680], "section": "1"}, - {"name": 680, "type": "ShellMITC4", "nodes": [680, 685, 686, 681], "section": "1"}, - {"name": 681, "type": "ShellMITC4", "nodes": [681, 686, 687, 682], "section": "1"}, - {"name": 682, "type": "ShellMITC4", "nodes": [682, 687, 688, 683], "section": "1"}, - {"name": 683, "type": "ShellMITC4", "nodes": [683, 688, 689, 684], "section": "1"}, - {"name": 684, "type": "ShellMITC4", "nodes": [684, 689, 661, 662], "section": "1"}, - {"name": 685, "type": "ShellMITC4", "nodes": [653, 654, 690, 685], "section": "1"}, - {"name": 686, "type": "ShellMITC4", "nodes": [685, 690, 691, 686], "section": "1"}, - {"name": 687, "type": "ShellMITC4", "nodes": [686, 691, 692, 687], "section": "1"}, - {"name": 688, "type": "ShellMITC4", "nodes": [687, 692, 693, 688], "section": "1"}, - {"name": 689, "type": "ShellMITC4", "nodes": [688, 693, 694, 689], "section": "1"}, - {"name": 690, "type": "ShellMITC4", "nodes": [689, 694, 660, 661], "section": "1"}, - {"name": 691, "type": "ShellMITC4", "nodes": [654, 22, 655, 690], "section": "1"}, - {"name": 692, "type": "ShellMITC4", "nodes": [690, 655, 656, 691], "section": "1"}, - {"name": 693, "type": "ShellMITC4", "nodes": [691, 656, 657, 692], "section": "1"}, - {"name": 694, "type": "ShellMITC4", "nodes": [692, 657, 658, 693], "section": "1"}, - {"name": 695, "type": "ShellMITC4", "nodes": [693, 658, 659, 694], "section": "1"}, - {"name": 696, "type": "ShellMITC4", "nodes": [694, 659, 24, 660], "section": "1"}, - {"name": 697, "type": "ShellMITC4", "nodes": [19, 695, 715, 714], "section": "1"}, - {"name": 698, "type": "ShellMITC4", "nodes": [714, 715, 716, 713], "section": "1"}, - {"name": 699, "type": "ShellMITC4", "nodes": [713, 716, 717, 712], "section": "1"}, - {"name": 700, "type": "ShellMITC4", "nodes": [712, 717, 718, 711], "section": "1"}, - {"name": 701, "type": "ShellMITC4", "nodes": [711, 718, 719, 710], "section": "1"}, - {"name": 702, "type": "ShellMITC4", "nodes": [710, 719, 709, 20], "section": "1"}, - {"name": 703, "type": "ShellMITC4", "nodes": [695, 696, 720, 715], "section": "1"}, - {"name": 704, "type": "ShellMITC4", "nodes": [715, 720, 721, 716], "section": "1"}, - {"name": 705, "type": "ShellMITC4", "nodes": [716, 721, 722, 717], "section": "1"}, - {"name": 706, "type": "ShellMITC4", "nodes": [717, 722, 723, 718], "section": "1"}, - {"name": 707, "type": "ShellMITC4", "nodes": [718, 723, 724, 719], "section": "1"}, - {"name": 708, "type": "ShellMITC4", "nodes": [719, 724, 708, 709], "section": "1"}, - {"name": 709, "type": "ShellMITC4", "nodes": [696, 697, 725, 720], "section": "1"}, - {"name": 710, "type": "ShellMITC4", "nodes": [720, 725, 726, 721], "section": "1"}, - {"name": 711, "type": "ShellMITC4", "nodes": [721, 726, 727, 722], "section": "1"}, - {"name": 712, "type": "ShellMITC4", "nodes": [722, 727, 728, 723], "section": "1"}, - {"name": 713, "type": "ShellMITC4", "nodes": [723, 728, 729, 724], "section": "1"}, - {"name": 714, "type": "ShellMITC4", "nodes": [724, 729, 707, 708], "section": "1"}, - {"name": 715, "type": "ShellMITC4", "nodes": [697, 698, 730, 725], "section": "1"}, - {"name": 716, "type": "ShellMITC4", "nodes": [725, 730, 731, 726], "section": "1"}, - {"name": 717, "type": "ShellMITC4", "nodes": [726, 731, 732, 727], "section": "1"}, - {"name": 718, "type": "ShellMITC4", "nodes": [727, 732, 733, 728], "section": "1"}, - {"name": 719, "type": "ShellMITC4", "nodes": [728, 733, 734, 729], "section": "1"}, - {"name": 720, "type": "ShellMITC4", "nodes": [729, 734, 706, 707], "section": "1"}, - {"name": 721, "type": "ShellMITC4", "nodes": [698, 699, 735, 730], "section": "1"}, - {"name": 722, "type": "ShellMITC4", "nodes": [730, 735, 736, 731], "section": "1"}, - {"name": 723, "type": "ShellMITC4", "nodes": [731, 736, 737, 732], "section": "1"}, - {"name": 724, "type": "ShellMITC4", "nodes": [732, 737, 738, 733], "section": "1"}, - {"name": 725, "type": "ShellMITC4", "nodes": [733, 738, 739, 734], "section": "1"}, - {"name": 726, "type": "ShellMITC4", "nodes": [734, 739, 705, 706], "section": "1"}, - {"name": 727, "type": "ShellMITC4", "nodes": [699, 27, 700, 735], "section": "1"}, - {"name": 728, "type": "ShellMITC4", "nodes": [735, 700, 701, 736], "section": "1"}, - {"name": 729, "type": "ShellMITC4", "nodes": [736, 701, 702, 737], "section": "1"}, - {"name": 730, "type": "ShellMITC4", "nodes": [737, 702, 703, 738], "section": "1"}, - {"name": 731, "type": "ShellMITC4", "nodes": [738, 703, 704, 739], "section": "1"}, - {"name": 732, "type": "ShellMITC4", "nodes": [739, 704, 28, 705], "section": "1"}, - {"name": 733, "type": "ShellMITC4", "nodes": [20, 740, 760, 759], "section": "1"}, - {"name": 734, "type": "ShellMITC4", "nodes": [759, 760, 761, 758], "section": "1"}, - {"name": 735, "type": "ShellMITC4", "nodes": [758, 761, 762, 757], "section": "1"}, - {"name": 736, "type": "ShellMITC4", "nodes": [757, 762, 763, 756], "section": "1"}, - {"name": 737, "type": "ShellMITC4", "nodes": [756, 763, 764, 755], "section": "1"}, - {"name": 738, "type": "ShellMITC4", "nodes": [755, 764, 754, 22], "section": "1"}, - {"name": 739, "type": "ShellMITC4", "nodes": [740, 741, 765, 760], "section": "1"}, - {"name": 740, "type": "ShellMITC4", "nodes": [760, 765, 766, 761], "section": "1"}, - {"name": 741, "type": "ShellMITC4", "nodes": [761, 766, 767, 762], "section": "1"}, - {"name": 742, "type": "ShellMITC4", "nodes": [762, 767, 768, 763], "section": "1"}, - {"name": 743, "type": "ShellMITC4", "nodes": [763, 768, 769, 764], "section": "1"}, - {"name": 744, "type": "ShellMITC4", "nodes": [764, 769, 753, 754], "section": "1"}, - {"name": 745, "type": "ShellMITC4", "nodes": [741, 742, 770, 765], "section": "1"}, - {"name": 746, "type": "ShellMITC4", "nodes": [765, 770, 771, 766], "section": "1"}, - {"name": 747, "type": "ShellMITC4", "nodes": [766, 771, 772, 767], "section": "1"}, - {"name": 748, "type": "ShellMITC4", "nodes": [767, 772, 773, 768], "section": "1"}, - {"name": 749, "type": "ShellMITC4", "nodes": [768, 773, 774, 769], "section": "1"}, - {"name": 750, "type": "ShellMITC4", "nodes": [769, 774, 752, 753], "section": "1"}, - {"name": 751, "type": "ShellMITC4", "nodes": [742, 743, 775, 770], "section": "1"}, - {"name": 752, "type": "ShellMITC4", "nodes": [770, 775, 776, 771], "section": "1"}, - {"name": 753, "type": "ShellMITC4", "nodes": [771, 776, 777, 772], "section": "1"}, - {"name": 754, "type": "ShellMITC4", "nodes": [772, 777, 778, 773], "section": "1"}, - {"name": 755, "type": "ShellMITC4", "nodes": [773, 778, 779, 774], "section": "1"}, - {"name": 756, "type": "ShellMITC4", "nodes": [774, 779, 751, 752], "section": "1"}, - {"name": 757, "type": "ShellMITC4", "nodes": [743, 744, 780, 775], "section": "1"}, - {"name": 758, "type": "ShellMITC4", "nodes": [775, 780, 781, 776], "section": "1"}, - {"name": 759, "type": "ShellMITC4", "nodes": [776, 781, 782, 777], "section": "1"}, - {"name": 760, "type": "ShellMITC4", "nodes": [777, 782, 783, 778], "section": "1"}, - {"name": 761, "type": "ShellMITC4", "nodes": [778, 783, 784, 779], "section": "1"}, - {"name": 762, "type": "ShellMITC4", "nodes": [779, 784, 750, 751], "section": "1"}, - {"name": 763, "type": "ShellMITC4", "nodes": [744, 28, 745, 780], "section": "1"}, - {"name": 764, "type": "ShellMITC4", "nodes": [780, 745, 746, 781], "section": "1"}, - {"name": 765, "type": "ShellMITC4", "nodes": [781, 746, 747, 782], "section": "1"}, - {"name": 766, "type": "ShellMITC4", "nodes": [782, 747, 748, 783], "section": "1"}, - {"name": 767, "type": "ShellMITC4", "nodes": [783, 748, 749, 784], "section": "1"}, - {"name": 768, "type": "ShellMITC4", "nodes": [784, 749, 30, 750], "section": "1"}, - {"name": 769, "type": "ShellMITC4", "nodes": [22, 785, 805, 804], "section": "1"}, - {"name": 770, "type": "ShellMITC4", "nodes": [804, 805, 806, 803], "section": "1"}, - {"name": 771, "type": "ShellMITC4", "nodes": [803, 806, 807, 802], "section": "1"}, - {"name": 772, "type": "ShellMITC4", "nodes": [802, 807, 808, 801], "section": "1"}, - {"name": 773, "type": "ShellMITC4", "nodes": [801, 808, 809, 800], "section": "1"}, - {"name": 774, "type": "ShellMITC4", "nodes": [800, 809, 799, 24], "section": "1"}, - {"name": 775, "type": "ShellMITC4", "nodes": [785, 786, 810, 805], "section": "1"}, - {"name": 776, "type": "ShellMITC4", "nodes": [805, 810, 811, 806], "section": "1"}, - {"name": 777, "type": "ShellMITC4", "nodes": [806, 811, 812, 807], "section": "1"}, - {"name": 778, "type": "ShellMITC4", "nodes": [807, 812, 813, 808], "section": "1"}, - {"name": 779, "type": "ShellMITC4", "nodes": [808, 813, 814, 809], "section": "1"}, - {"name": 780, "type": "ShellMITC4", "nodes": [809, 814, 798, 799], "section": "1"}, - {"name": 781, "type": "ShellMITC4", "nodes": [786, 787, 815, 810], "section": "1"}, - {"name": 782, "type": "ShellMITC4", "nodes": [810, 815, 816, 811], "section": "1"}, - {"name": 783, "type": "ShellMITC4", "nodes": [811, 816, 817, 812], "section": "1"}, - {"name": 784, "type": "ShellMITC4", "nodes": [812, 817, 818, 813], "section": "1"}, - {"name": 785, "type": "ShellMITC4", "nodes": [813, 818, 819, 814], "section": "1"}, - {"name": 786, "type": "ShellMITC4", "nodes": [814, 819, 797, 798], "section": "1"}, - {"name": 787, "type": "ShellMITC4", "nodes": [787, 788, 820, 815], "section": "1"}, - {"name": 788, "type": "ShellMITC4", "nodes": [815, 820, 821, 816], "section": "1"}, - {"name": 789, "type": "ShellMITC4", "nodes": [816, 821, 822, 817], "section": "1"}, - {"name": 790, "type": "ShellMITC4", "nodes": [817, 822, 823, 818], "section": "1"}, - {"name": 791, "type": "ShellMITC4", "nodes": [818, 823, 824, 819], "section": "1"}, - {"name": 792, "type": "ShellMITC4", "nodes": [819, 824, 796, 797], "section": "1"}, - {"name": 793, "type": "ShellMITC4", "nodes": [788, 789, 825, 820], "section": "1"}, - {"name": 794, "type": "ShellMITC4", "nodes": [820, 825, 826, 821], "section": "1"}, - {"name": 795, "type": "ShellMITC4", "nodes": [821, 826, 827, 822], "section": "1"}, - {"name": 796, "type": "ShellMITC4", "nodes": [822, 827, 828, 823], "section": "1"}, - {"name": 797, "type": "ShellMITC4", "nodes": [823, 828, 829, 824], "section": "1"}, - {"name": 798, "type": "ShellMITC4", "nodes": [824, 829, 795, 796], "section": "1"}, - {"name": 799, "type": "ShellMITC4", "nodes": [789, 30, 790, 825], "section": "1"}, - {"name": 800, "type": "ShellMITC4", "nodes": [825, 790, 791, 826], "section": "1"}, - {"name": 801, "type": "ShellMITC4", "nodes": [826, 791, 792, 827], "section": "1"}, - {"name": 802, "type": "ShellMITC4", "nodes": [827, 792, 793, 828], "section": "1"}, - {"name": 803, "type": "ShellMITC4", "nodes": [828, 793, 794, 829], "section": "1"}, - {"name": 804, "type": "ShellMITC4", "nodes": [829, 794, 32, 795], "section": "1"}, - {"name": 805, "type": "ShellMITC4", "nodes": [153, 830, 850, 849], "section": "1"}, - {"name": 806, "type": "ShellMITC4", "nodes": [849, 850, 851, 848], "section": "1"}, - {"name": 807, "type": "ShellMITC4", "nodes": [848, 851, 852, 847], "section": "1"}, - {"name": 808, "type": "ShellMITC4", "nodes": [847, 852, 853, 846], "section": "1"}, - {"name": 809, "type": "ShellMITC4", "nodes": [846, 853, 854, 845], "section": "1"}, - {"name": 810, "type": "ShellMITC4", "nodes": [845, 854, 844, 156], "section": "1"}, - {"name": 811, "type": "ShellMITC4", "nodes": [830, 831, 855, 850], "section": "1"}, - {"name": 812, "type": "ShellMITC4", "nodes": [850, 855, 856, 851], "section": "1"}, - {"name": 813, "type": "ShellMITC4", "nodes": [851, 856, 857, 852], "section": "1"}, - {"name": 814, "type": "ShellMITC4", "nodes": [852, 857, 858, 853], "section": "1"}, - {"name": 815, "type": "ShellMITC4", "nodes": [853, 858, 859, 854], "section": "1"}, - {"name": 816, "type": "ShellMITC4", "nodes": [854, 859, 843, 844], "section": "1"}, - {"name": 817, "type": "ShellMITC4", "nodes": [831, 832, 860, 855], "section": "1"}, - {"name": 818, "type": "ShellMITC4", "nodes": [855, 860, 861, 856], "section": "1"}, - {"name": 819, "type": "ShellMITC4", "nodes": [856, 861, 862, 857], "section": "1"}, - {"name": 820, "type": "ShellMITC4", "nodes": [857, 862, 863, 858], "section": "1"}, - {"name": 821, "type": "ShellMITC4", "nodes": [858, 863, 864, 859], "section": "1"}, - {"name": 822, "type": "ShellMITC4", "nodes": [859, 864, 842, 843], "section": "1"}, - {"name": 823, "type": "ShellMITC4", "nodes": [832, 833, 865, 860], "section": "1"}, - {"name": 824, "type": "ShellMITC4", "nodes": [860, 865, 866, 861], "section": "1"}, - {"name": 825, "type": "ShellMITC4", "nodes": [861, 866, 867, 862], "section": "1"}, - {"name": 826, "type": "ShellMITC4", "nodes": [862, 867, 868, 863], "section": "1"}, - {"name": 827, "type": "ShellMITC4", "nodes": [863, 868, 869, 864], "section": "1"}, - {"name": 828, "type": "ShellMITC4", "nodes": [864, 869, 841, 842], "section": "1"}, - {"name": 829, "type": "ShellMITC4", "nodes": [833, 834, 870, 865], "section": "1"}, - {"name": 830, "type": "ShellMITC4", "nodes": [865, 870, 871, 866], "section": "1"}, - {"name": 831, "type": "ShellMITC4", "nodes": [866, 871, 872, 867], "section": "1"}, - {"name": 832, "type": "ShellMITC4", "nodes": [867, 872, 873, 868], "section": "1"}, - {"name": 833, "type": "ShellMITC4", "nodes": [868, 873, 874, 869], "section": "1"}, - {"name": 834, "type": "ShellMITC4", "nodes": [869, 874, 840, 841], "section": "1"}, - {"name": 835, "type": "ShellMITC4", "nodes": [834, 154, 835, 870], "section": "1"}, - {"name": 836, "type": "ShellMITC4", "nodes": [870, 835, 836, 871], "section": "1"}, - {"name": 837, "type": "ShellMITC4", "nodes": [871, 836, 837, 872], "section": "1"}, - {"name": 838, "type": "ShellMITC4", "nodes": [872, 837, 838, 873], "section": "1"}, - {"name": 839, "type": "ShellMITC4", "nodes": [873, 838, 839, 874], "section": "1"}, - {"name": 840, "type": "ShellMITC4", "nodes": [874, 839, 155, 840], "section": "1"}, - {"name": 841, "type": "ShellMITC4", "nodes": [156, 875, 895, 894], "section": "1"}, - {"name": 842, "type": "ShellMITC4", "nodes": [894, 895, 896, 893], "section": "1"}, - {"name": 843, "type": "ShellMITC4", "nodes": [893, 896, 897, 892], "section": "1"}, - {"name": 844, "type": "ShellMITC4", "nodes": [892, 897, 898, 891], "section": "1"}, - {"name": 845, "type": "ShellMITC4", "nodes": [891, 898, 899, 890], "section": "1"}, - {"name": 846, "type": "ShellMITC4", "nodes": [890, 899, 889, 158], "section": "1"}, - {"name": 847, "type": "ShellMITC4", "nodes": [875, 876, 900, 895], "section": "1"}, - {"name": 848, "type": "ShellMITC4", "nodes": [895, 900, 901, 896], "section": "1"}, - {"name": 849, "type": "ShellMITC4", "nodes": [896, 901, 902, 897], "section": "1"}, - {"name": 850, "type": "ShellMITC4", "nodes": [897, 902, 903, 898], "section": "1"}, - {"name": 851, "type": "ShellMITC4", "nodes": [898, 903, 904, 899], "section": "1"}, - {"name": 852, "type": "ShellMITC4", "nodes": [899, 904, 888, 889], "section": "1"}, - {"name": 853, "type": "ShellMITC4", "nodes": [876, 877, 905, 900], "section": "1"}, - {"name": 854, "type": "ShellMITC4", "nodes": [900, 905, 906, 901], "section": "1"}, - {"name": 855, "type": "ShellMITC4", "nodes": [901, 906, 907, 902], "section": "1"}, - {"name": 856, "type": "ShellMITC4", "nodes": [902, 907, 908, 903], "section": "1"}, - {"name": 857, "type": "ShellMITC4", "nodes": [903, 908, 909, 904], "section": "1"}, - {"name": 858, "type": "ShellMITC4", "nodes": [904, 909, 887, 888], "section": "1"}, - {"name": 859, "type": "ShellMITC4", "nodes": [877, 878, 910, 905], "section": "1"}, - {"name": 860, "type": "ShellMITC4", "nodes": [905, 910, 911, 906], "section": "1"}, - {"name": 861, "type": "ShellMITC4", "nodes": [906, 911, 912, 907], "section": "1"}, - {"name": 862, "type": "ShellMITC4", "nodes": [907, 912, 913, 908], "section": "1"}, - {"name": 863, "type": "ShellMITC4", "nodes": [908, 913, 914, 909], "section": "1"}, - {"name": 864, "type": "ShellMITC4", "nodes": [909, 914, 886, 887], "section": "1"}, - {"name": 865, "type": "ShellMITC4", "nodes": [878, 879, 915, 910], "section": "1"}, - {"name": 866, "type": "ShellMITC4", "nodes": [910, 915, 916, 911], "section": "1"}, - {"name": 867, "type": "ShellMITC4", "nodes": [911, 916, 917, 912], "section": "1"}, - {"name": 868, "type": "ShellMITC4", "nodes": [912, 917, 918, 913], "section": "1"}, - {"name": 869, "type": "ShellMITC4", "nodes": [913, 918, 919, 914], "section": "1"}, - {"name": 870, "type": "ShellMITC4", "nodes": [914, 919, 885, 886], "section": "1"}, - {"name": 871, "type": "ShellMITC4", "nodes": [879, 155, 880, 915], "section": "1"}, - {"name": 872, "type": "ShellMITC4", "nodes": [915, 880, 881, 916], "section": "1"}, - {"name": 873, "type": "ShellMITC4", "nodes": [916, 881, 882, 917], "section": "1"}, - {"name": 874, "type": "ShellMITC4", "nodes": [917, 882, 883, 918], "section": "1"}, - {"name": 875, "type": "ShellMITC4", "nodes": [918, 883, 884, 919], "section": "1"}, - {"name": 876, "type": "ShellMITC4", "nodes": [919, 884, 157, 885], "section": "1"}, - {"name": 877, "type": "ShellMITC4", "nodes": [158, 920, 940, 939], "section": "1"}, - {"name": 878, "type": "ShellMITC4", "nodes": [939, 940, 941, 938], "section": "1"}, - {"name": 879, "type": "ShellMITC4", "nodes": [938, 941, 942, 937], "section": "1"}, - {"name": 880, "type": "ShellMITC4", "nodes": [937, 942, 943, 936], "section": "1"}, - {"name": 881, "type": "ShellMITC4", "nodes": [936, 943, 944, 935], "section": "1"}, - {"name": 882, "type": "ShellMITC4", "nodes": [935, 944, 934, 160], "section": "1"}, - {"name": 883, "type": "ShellMITC4", "nodes": [920, 921, 945, 940], "section": "1"}, - {"name": 884, "type": "ShellMITC4", "nodes": [940, 945, 946, 941], "section": "1"}, - {"name": 885, "type": "ShellMITC4", "nodes": [941, 946, 947, 942], "section": "1"}, - {"name": 886, "type": "ShellMITC4", "nodes": [942, 947, 948, 943], "section": "1"}, - {"name": 887, "type": "ShellMITC4", "nodes": [943, 948, 949, 944], "section": "1"}, - {"name": 888, "type": "ShellMITC4", "nodes": [944, 949, 933, 934], "section": "1"}, - {"name": 889, "type": "ShellMITC4", "nodes": [921, 922, 950, 945], "section": "1"}, - {"name": 890, "type": "ShellMITC4", "nodes": [945, 950, 951, 946], "section": "1"}, - {"name": 891, "type": "ShellMITC4", "nodes": [946, 951, 952, 947], "section": "1"}, - {"name": 892, "type": "ShellMITC4", "nodes": [947, 952, 953, 948], "section": "1"}, - {"name": 893, "type": "ShellMITC4", "nodes": [948, 953, 954, 949], "section": "1"}, - {"name": 894, "type": "ShellMITC4", "nodes": [949, 954, 932, 933], "section": "1"}, - {"name": 895, "type": "ShellMITC4", "nodes": [922, 923, 955, 950], "section": "1"}, - {"name": 896, "type": "ShellMITC4", "nodes": [950, 955, 956, 951], "section": "1"}, - {"name": 897, "type": "ShellMITC4", "nodes": [951, 956, 957, 952], "section": "1"}, - {"name": 898, "type": "ShellMITC4", "nodes": [952, 957, 958, 953], "section": "1"}, - {"name": 899, "type": "ShellMITC4", "nodes": [953, 958, 959, 954], "section": "1"}, - {"name": 900, "type": "ShellMITC4", "nodes": [954, 959, 931, 932], "section": "1"}, - {"name": 901, "type": "ShellMITC4", "nodes": [923, 924, 960, 955], "section": "1"}, - {"name": 902, "type": "ShellMITC4", "nodes": [955, 960, 961, 956], "section": "1"}, - {"name": 903, "type": "ShellMITC4", "nodes": [956, 961, 962, 957], "section": "1"}, - {"name": 904, "type": "ShellMITC4", "nodes": [957, 962, 963, 958], "section": "1"}, - {"name": 905, "type": "ShellMITC4", "nodes": [958, 963, 964, 959], "section": "1"}, - {"name": 906, "type": "ShellMITC4", "nodes": [959, 964, 930, 931], "section": "1"}, - {"name": 907, "type": "ShellMITC4", "nodes": [924, 157, 925, 960], "section": "1"}, - {"name": 908, "type": "ShellMITC4", "nodes": [960, 925, 926, 961], "section": "1"}, - {"name": 909, "type": "ShellMITC4", "nodes": [961, 926, 927, 962], "section": "1"}, - {"name": 910, "type": "ShellMITC4", "nodes": [962, 927, 928, 963], "section": "1"}, - {"name": 911, "type": "ShellMITC4", "nodes": [963, 928, 929, 964], "section": "1"}, - {"name": 912, "type": "ShellMITC4", "nodes": [964, 929, 159, 930], "section": "1"}, - {"name": 913, "type": "ShellMITC4", "nodes": [154, 965, 985, 984], "section": "1"}, - {"name": 914, "type": "ShellMITC4", "nodes": [984, 985, 986, 983], "section": "1"}, - {"name": 915, "type": "ShellMITC4", "nodes": [983, 986, 987, 982], "section": "1"}, - {"name": 916, "type": "ShellMITC4", "nodes": [982, 987, 988, 981], "section": "1"}, - {"name": 917, "type": "ShellMITC4", "nodes": [981, 988, 989, 980], "section": "1"}, - {"name": 918, "type": "ShellMITC4", "nodes": [980, 989, 979, 155], "section": "1"}, - {"name": 919, "type": "ShellMITC4", "nodes": [965, 966, 990, 985], "section": "1"}, - {"name": 920, "type": "ShellMITC4", "nodes": [985, 990, 991, 986], "section": "1"}, - {"name": 921, "type": "ShellMITC4", "nodes": [986, 991, 992, 987], "section": "1"}, - {"name": 922, "type": "ShellMITC4", "nodes": [987, 992, 993, 988], "section": "1"}, - {"name": 923, "type": "ShellMITC4", "nodes": [988, 993, 994, 989], "section": "1"}, - {"name": 924, "type": "ShellMITC4", "nodes": [989, 994, 978, 979], "section": "1"}, - {"name": 925, "type": "ShellMITC4", "nodes": [966, 967, 995, 990], "section": "1"}, - {"name": 926, "type": "ShellMITC4", "nodes": [990, 995, 996, 991], "section": "1"}, - {"name": 927, "type": "ShellMITC4", "nodes": [991, 996, 997, 992], "section": "1"}, - {"name": 928, "type": "ShellMITC4", "nodes": [992, 997, 998, 993], "section": "1"}, - {"name": 929, "type": "ShellMITC4", "nodes": [993, 998, 999, 994], "section": "1"}, - {"name": 930, "type": "ShellMITC4", "nodes": [994, 999, 977, 978], "section": "1"}, - {"name": 931, "type": "ShellMITC4", "nodes": [967, 968, 1000, 995], "section": "1"}, - {"name": 932, "type": "ShellMITC4", "nodes": [995, 1000, 1001, 996], "section": "1"}, - {"name": 933, "type": "ShellMITC4", "nodes": [996, 1001, 1002, 997], "section": "1"}, - {"name": 934, "type": "ShellMITC4", "nodes": [997, 1002, 1003, 998], "section": "1"}, - {"name": 935, "type": "ShellMITC4", "nodes": [998, 1003, 1004, 999], "section": "1"}, - {"name": 936, "type": "ShellMITC4", "nodes": [999, 1004, 976, 977], "section": "1"}, - {"name": 937, "type": "ShellMITC4", "nodes": [968, 969, 1005, 1000], "section": "1"}, - {"name": 938, "type": "ShellMITC4", "nodes": [1000, 1005, 1006, 1001], "section": "1"}, - {"name": 939, "type": "ShellMITC4", "nodes": [1001, 1006, 1007, 1002], "section": "1"}, - {"name": 940, "type": "ShellMITC4", "nodes": [1002, 1007, 1008, 1003], "section": "1"}, - {"name": 941, "type": "ShellMITC4", "nodes": [1003, 1008, 1009, 1004], "section": "1"}, - {"name": 942, "type": "ShellMITC4", "nodes": [1004, 1009, 975, 976], "section": "1"}, - {"name": 943, "type": "ShellMITC4", "nodes": [969, 161, 970, 1005], "section": "1"}, - {"name": 944, "type": "ShellMITC4", "nodes": [1005, 970, 971, 1006], "section": "1"}, - {"name": 945, "type": "ShellMITC4", "nodes": [1006, 971, 972, 1007], "section": "1"}, - {"name": 946, "type": "ShellMITC4", "nodes": [1007, 972, 973, 1008], "section": "1"}, - {"name": 947, "type": "ShellMITC4", "nodes": [1008, 973, 974, 1009], "section": "1"}, - {"name": 948, "type": "ShellMITC4", "nodes": [1009, 974, 162, 975], "section": "1"}, - {"name": 949, "type": "ShellMITC4", "nodes": [155, 1010, 1030, 1029], "section": "1"}, - {"name": 950, "type": "ShellMITC4", "nodes": [1029, 1030, 1031, 1028], "section": "1"}, - {"name": 951, "type": "ShellMITC4", "nodes": [1028, 1031, 1032, 1027], "section": "1"}, - {"name": 952, "type": "ShellMITC4", "nodes": [1027, 1032, 1033, 1026], "section": "1"}, - {"name": 953, "type": "ShellMITC4", "nodes": [1026, 1033, 1034, 1025], "section": "1"}, - {"name": 954, "type": "ShellMITC4", "nodes": [1025, 1034, 1024, 157], "section": "1"}, - {"name": 955, "type": "ShellMITC4", "nodes": [1010, 1011, 1035, 1030], "section": "1"}, - {"name": 956, "type": "ShellMITC4", "nodes": [1030, 1035, 1036, 1031], "section": "1"}, - {"name": 957, "type": "ShellMITC4", "nodes": [1031, 1036, 1037, 1032], "section": "1"}, - {"name": 958, "type": "ShellMITC4", "nodes": [1032, 1037, 1038, 1033], "section": "1"}, - {"name": 959, "type": "ShellMITC4", "nodes": [1033, 1038, 1039, 1034], "section": "1"}, - {"name": 960, "type": "ShellMITC4", "nodes": [1034, 1039, 1023, 1024], "section": "1"}, - {"name": 961, "type": "ShellMITC4", "nodes": [1011, 1012, 1040, 1035], "section": "1"}, - {"name": 962, "type": "ShellMITC4", "nodes": [1035, 1040, 1041, 1036], "section": "1"}, - {"name": 963, "type": "ShellMITC4", "nodes": [1036, 1041, 1042, 1037], "section": "1"}, - {"name": 964, "type": "ShellMITC4", "nodes": [1037, 1042, 1043, 1038], "section": "1"}, - {"name": 965, "type": "ShellMITC4", "nodes": [1038, 1043, 1044, 1039], "section": "1"}, - {"name": 966, "type": "ShellMITC4", "nodes": [1039, 1044, 1022, 1023], "section": "1"}, - {"name": 967, "type": "ShellMITC4", "nodes": [1012, 1013, 1045, 1040], "section": "1"}, - {"name": 968, "type": "ShellMITC4", "nodes": [1040, 1045, 1046, 1041], "section": "1"}, - {"name": 969, "type": "ShellMITC4", "nodes": [1041, 1046, 1047, 1042], "section": "1"}, - {"name": 970, "type": "ShellMITC4", "nodes": [1042, 1047, 1048, 1043], "section": "1"}, - {"name": 971, "type": "ShellMITC4", "nodes": [1043, 1048, 1049, 1044], "section": "1"}, - {"name": 972, "type": "ShellMITC4", "nodes": [1044, 1049, 1021, 1022], "section": "1"}, - {"name": 973, "type": "ShellMITC4", "nodes": [1013, 1014, 1050, 1045], "section": "1"}, - {"name": 974, "type": "ShellMITC4", "nodes": [1045, 1050, 1051, 1046], "section": "1"}, - {"name": 975, "type": "ShellMITC4", "nodes": [1046, 1051, 1052, 1047], "section": "1"}, - {"name": 976, "type": "ShellMITC4", "nodes": [1047, 1052, 1053, 1048], "section": "1"}, - {"name": 977, "type": "ShellMITC4", "nodes": [1048, 1053, 1054, 1049], "section": "1"}, - {"name": 978, "type": "ShellMITC4", "nodes": [1049, 1054, 1020, 1021], "section": "1"}, - {"name": 979, "type": "ShellMITC4", "nodes": [1014, 162, 1015, 1050], "section": "1"}, - {"name": 980, "type": "ShellMITC4", "nodes": [1050, 1015, 1016, 1051], "section": "1"}, - {"name": 981, "type": "ShellMITC4", "nodes": [1051, 1016, 1017, 1052], "section": "1"}, - {"name": 982, "type": "ShellMITC4", "nodes": [1052, 1017, 1018, 1053], "section": "1"}, - {"name": 983, "type": "ShellMITC4", "nodes": [1053, 1018, 1019, 1054], "section": "1"}, - {"name": 984, "type": "ShellMITC4", "nodes": [1054, 1019, 163, 1020], "section": "1"}, - {"name": 985, "type": "ShellMITC4", "nodes": [157, 1055, 1075, 1074], "section": "1"}, - {"name": 986, "type": "ShellMITC4", "nodes": [1074, 1075, 1076, 1073], "section": "1"}, - {"name": 987, "type": "ShellMITC4", "nodes": [1073, 1076, 1077, 1072], "section": "1"}, - {"name": 988, "type": "ShellMITC4", "nodes": [1072, 1077, 1078, 1071], "section": "1"}, - {"name": 989, "type": "ShellMITC4", "nodes": [1071, 1078, 1079, 1070], "section": "1"}, - {"name": 990, "type": "ShellMITC4", "nodes": [1070, 1079, 1069, 159], "section": "1"}, - {"name": 991, "type": "ShellMITC4", "nodes": [1055, 1056, 1080, 1075], "section": "1"}, - {"name": 992, "type": "ShellMITC4", "nodes": [1075, 1080, 1081, 1076], "section": "1"}, - {"name": 993, "type": "ShellMITC4", "nodes": [1076, 1081, 1082, 1077], "section": "1"}, - {"name": 994, "type": "ShellMITC4", "nodes": [1077, 1082, 1083, 1078], "section": "1"}, - {"name": 995, "type": "ShellMITC4", "nodes": [1078, 1083, 1084, 1079], "section": "1"}, - {"name": 996, "type": "ShellMITC4", "nodes": [1079, 1084, 1068, 1069], "section": "1"}, - {"name": 997, "type": "ShellMITC4", "nodes": [1056, 1057, 1085, 1080], "section": "1"}, - {"name": 998, "type": "ShellMITC4", "nodes": [1080, 1085, 1086, 1081], "section": "1"}, - {"name": 999, "type": "ShellMITC4", "nodes": [1081, 1086, 1087, 1082], "section": "1"}, - {"name": 1000, "type": "ShellMITC4", "nodes": [1082, 1087, 1088, 1083], "section": "1"}, - {"name": 1001, "type": "ShellMITC4", "nodes": [1083, 1088, 1089, 1084], "section": "1"}, - {"name": 1002, "type": "ShellMITC4", "nodes": [1084, 1089, 1067, 1068], "section": "1"}, - {"name": 1003, "type": "ShellMITC4", "nodes": [1057, 1058, 1090, 1085], "section": "1"}, - {"name": 1004, "type": "ShellMITC4", "nodes": [1085, 1090, 1091, 1086], "section": "1"}, - {"name": 1005, "type": "ShellMITC4", "nodes": [1086, 1091, 1092, 1087], "section": "1"}, - {"name": 1006, "type": "ShellMITC4", "nodes": [1087, 1092, 1093, 1088], "section": "1"}, - {"name": 1007, "type": "ShellMITC4", "nodes": [1088, 1093, 1094, 1089], "section": "1"}, - {"name": 1008, "type": "ShellMITC4", "nodes": [1089, 1094, 1066, 1067], "section": "1"}, - {"name": 1009, "type": "ShellMITC4", "nodes": [1058, 1059, 1095, 1090], "section": "1"}, - {"name": 1010, "type": "ShellMITC4", "nodes": [1090, 1095, 1096, 1091], "section": "1"}, - {"name": 1011, "type": "ShellMITC4", "nodes": [1091, 1096, 1097, 1092], "section": "1"}, - {"name": 1012, "type": "ShellMITC4", "nodes": [1092, 1097, 1098, 1093], "section": "1"}, - {"name": 1013, "type": "ShellMITC4", "nodes": [1093, 1098, 1099, 1094], "section": "1"}, - {"name": 1014, "type": "ShellMITC4", "nodes": [1094, 1099, 1065, 1066], "section": "1"}, - {"name": 1015, "type": "ShellMITC4", "nodes": [1059, 163, 1060, 1095], "section": "1"}, - {"name": 1016, "type": "ShellMITC4", "nodes": [1095, 1060, 1061, 1096], "section": "1"}, - {"name": 1017, "type": "ShellMITC4", "nodes": [1096, 1061, 1062, 1097], "section": "1"}, - {"name": 1018, "type": "ShellMITC4", "nodes": [1097, 1062, 1063, 1098], "section": "1"}, - {"name": 1019, "type": "ShellMITC4", "nodes": [1098, 1063, 1064, 1099], "section": "1"}, - {"name": 1020, "type": "ShellMITC4", "nodes": [1099, 1064, 164, 1065], "section": "1"}, - {"name": 1021, "type": "ShellMITC4", "nodes": [161, 1100, 1120, 1119], "section": "1"}, - {"name": 1022, "type": "ShellMITC4", "nodes": [1119, 1120, 1121, 1118], "section": "1"}, - {"name": 1023, "type": "ShellMITC4", "nodes": [1118, 1121, 1122, 1117], "section": "1"}, - {"name": 1024, "type": "ShellMITC4", "nodes": [1117, 1122, 1123, 1116], "section": "1"}, - {"name": 1025, "type": "ShellMITC4", "nodes": [1116, 1123, 1124, 1115], "section": "1"}, - {"name": 1026, "type": "ShellMITC4", "nodes": [1115, 1124, 1114, 162], "section": "1"}, - {"name": 1027, "type": "ShellMITC4", "nodes": [1100, 1101, 1125, 1120], "section": "1"}, - {"name": 1028, "type": "ShellMITC4", "nodes": [1120, 1125, 1126, 1121], "section": "1"}, - {"name": 1029, "type": "ShellMITC4", "nodes": [1121, 1126, 1127, 1122], "section": "1"}, - {"name": 1030, "type": "ShellMITC4", "nodes": [1122, 1127, 1128, 1123], "section": "1"}, - {"name": 1031, "type": "ShellMITC4", "nodes": [1123, 1128, 1129, 1124], "section": "1"}, - {"name": 1032, "type": "ShellMITC4", "nodes": [1124, 1129, 1113, 1114], "section": "1"}, - {"name": 1033, "type": "ShellMITC4", "nodes": [1101, 1102, 1130, 1125], "section": "1"}, - {"name": 1034, "type": "ShellMITC4", "nodes": [1125, 1130, 1131, 1126], "section": "1"}, - {"name": 1035, "type": "ShellMITC4", "nodes": [1126, 1131, 1132, 1127], "section": "1"}, - {"name": 1036, "type": "ShellMITC4", "nodes": [1127, 1132, 1133, 1128], "section": "1"}, - {"name": 1037, "type": "ShellMITC4", "nodes": [1128, 1133, 1134, 1129], "section": "1"}, - {"name": 1038, "type": "ShellMITC4", "nodes": [1129, 1134, 1112, 1113], "section": "1"}, - {"name": 1039, "type": "ShellMITC4", "nodes": [1102, 1103, 1135, 1130], "section": "1"}, - {"name": 1040, "type": "ShellMITC4", "nodes": [1130, 1135, 1136, 1131], "section": "1"}, - {"name": 1041, "type": "ShellMITC4", "nodes": [1131, 1136, 1137, 1132], "section": "1"}, - {"name": 1042, "type": "ShellMITC4", "nodes": [1132, 1137, 1138, 1133], "section": "1"}, - {"name": 1043, "type": "ShellMITC4", "nodes": [1133, 1138, 1139, 1134], "section": "1"}, - {"name": 1044, "type": "ShellMITC4", "nodes": [1134, 1139, 1111, 1112], "section": "1"}, - {"name": 1045, "type": "ShellMITC4", "nodes": [1103, 1104, 1140, 1135], "section": "1"}, - {"name": 1046, "type": "ShellMITC4", "nodes": [1135, 1140, 1141, 1136], "section": "1"}, - {"name": 1047, "type": "ShellMITC4", "nodes": [1136, 1141, 1142, 1137], "section": "1"}, - {"name": 1048, "type": "ShellMITC4", "nodes": [1137, 1142, 1143, 1138], "section": "1"}, - {"name": 1049, "type": "ShellMITC4", "nodes": [1138, 1143, 1144, 1139], "section": "1"}, - {"name": 1050, "type": "ShellMITC4", "nodes": [1139, 1144, 1110, 1111], "section": "1"}, - {"name": 1051, "type": "ShellMITC4", "nodes": [1104, 165, 1105, 1140], "section": "1"}, - {"name": 1052, "type": "ShellMITC4", "nodes": [1140, 1105, 1106, 1141], "section": "1"}, - {"name": 1053, "type": "ShellMITC4", "nodes": [1141, 1106, 1107, 1142], "section": "1"}, - {"name": 1054, "type": "ShellMITC4", "nodes": [1142, 1107, 1108, 1143], "section": "1"}, - {"name": 1055, "type": "ShellMITC4", "nodes": [1143, 1108, 1109, 1144], "section": "1"}, - {"name": 1056, "type": "ShellMITC4", "nodes": [1144, 1109, 166, 1110], "section": "1"}, - {"name": 1057, "type": "ShellMITC4", "nodes": [162, 1145, 1165, 1164], "section": "1"}, - {"name": 1058, "type": "ShellMITC4", "nodes": [1164, 1165, 1166, 1163], "section": "1"}, - {"name": 1059, "type": "ShellMITC4", "nodes": [1163, 1166, 1167, 1162], "section": "1"}, - {"name": 1060, "type": "ShellMITC4", "nodes": [1162, 1167, 1168, 1161], "section": "1"}, - {"name": 1061, "type": "ShellMITC4", "nodes": [1161, 1168, 1169, 1160], "section": "1"}, - {"name": 1062, "type": "ShellMITC4", "nodes": [1160, 1169, 1159, 163], "section": "1"}, - {"name": 1063, "type": "ShellMITC4", "nodes": [1145, 1146, 1170, 1165], "section": "1"}, - {"name": 1064, "type": "ShellMITC4", "nodes": [1165, 1170, 1171, 1166], "section": "1"}, - {"name": 1065, "type": "ShellMITC4", "nodes": [1166, 1171, 1172, 1167], "section": "1"}, - {"name": 1066, "type": "ShellMITC4", "nodes": [1167, 1172, 1173, 1168], "section": "1"}, - {"name": 1067, "type": "ShellMITC4", "nodes": [1168, 1173, 1174, 1169], "section": "1"}, - {"name": 1068, "type": "ShellMITC4", "nodes": [1169, 1174, 1158, 1159], "section": "1"}, - {"name": 1069, "type": "ShellMITC4", "nodes": [1146, 1147, 1175, 1170], "section": "1"}, - {"name": 1070, "type": "ShellMITC4", "nodes": [1170, 1175, 1176, 1171], "section": "1"}, - {"name": 1071, "type": "ShellMITC4", "nodes": [1171, 1176, 1177, 1172], "section": "1"}, - {"name": 1072, "type": "ShellMITC4", "nodes": [1172, 1177, 1178, 1173], "section": "1"}, - {"name": 1073, "type": "ShellMITC4", "nodes": [1173, 1178, 1179, 1174], "section": "1"}, - {"name": 1074, "type": "ShellMITC4", "nodes": [1174, 1179, 1157, 1158], "section": "1"}, - {"name": 1075, "type": "ShellMITC4", "nodes": [1147, 1148, 1180, 1175], "section": "1"}, - {"name": 1076, "type": "ShellMITC4", "nodes": [1175, 1180, 1181, 1176], "section": "1"}, - {"name": 1077, "type": "ShellMITC4", "nodes": [1176, 1181, 1182, 1177], "section": "1"}, - {"name": 1078, "type": "ShellMITC4", "nodes": [1177, 1182, 1183, 1178], "section": "1"}, - {"name": 1079, "type": "ShellMITC4", "nodes": [1178, 1183, 1184, 1179], "section": "1"}, - {"name": 1080, "type": "ShellMITC4", "nodes": [1179, 1184, 1156, 1157], "section": "1"}, - {"name": 1081, "type": "ShellMITC4", "nodes": [1148, 1149, 1185, 1180], "section": "1"}, - {"name": 1082, "type": "ShellMITC4", "nodes": [1180, 1185, 1186, 1181], "section": "1"}, - {"name": 1083, "type": "ShellMITC4", "nodes": [1181, 1186, 1187, 1182], "section": "1"}, - {"name": 1084, "type": "ShellMITC4", "nodes": [1182, 1187, 1188, 1183], "section": "1"}, - {"name": 1085, "type": "ShellMITC4", "nodes": [1183, 1188, 1189, 1184], "section": "1"}, - {"name": 1086, "type": "ShellMITC4", "nodes": [1184, 1189, 1155, 1156], "section": "1"}, - {"name": 1087, "type": "ShellMITC4", "nodes": [1149, 166, 1150, 1185], "section": "1"}, - {"name": 1088, "type": "ShellMITC4", "nodes": [1185, 1150, 1151, 1186], "section": "1"}, - {"name": 1089, "type": "ShellMITC4", "nodes": [1186, 1151, 1152, 1187], "section": "1"}, - {"name": 1090, "type": "ShellMITC4", "nodes": [1187, 1152, 1153, 1188], "section": "1"}, - {"name": 1091, "type": "ShellMITC4", "nodes": [1188, 1153, 1154, 1189], "section": "1"}, - {"name": 1092, "type": "ShellMITC4", "nodes": [1189, 1154, 167, 1155], "section": "1"}, - {"name": 1093, "type": "ShellMITC4", "nodes": [163, 1190, 1210, 1209], "section": "1"}, - {"name": 1094, "type": "ShellMITC4", "nodes": [1209, 1210, 1211, 1208], "section": "1"}, - {"name": 1095, "type": "ShellMITC4", "nodes": [1208, 1211, 1212, 1207], "section": "1"}, - {"name": 1096, "type": "ShellMITC4", "nodes": [1207, 1212, 1213, 1206], "section": "1"}, - {"name": 1097, "type": "ShellMITC4", "nodes": [1206, 1213, 1214, 1205], "section": "1"}, - {"name": 1098, "type": "ShellMITC4", "nodes": [1205, 1214, 1204, 164], "section": "1"}, - {"name": 1099, "type": "ShellMITC4", "nodes": [1190, 1191, 1215, 1210], "section": "1"}, - {"name": 1100, "type": "ShellMITC4", "nodes": [1210, 1215, 1216, 1211], "section": "1"}, - {"name": 1101, "type": "ShellMITC4", "nodes": [1211, 1216, 1217, 1212], "section": "1"}, - {"name": 1102, "type": "ShellMITC4", "nodes": [1212, 1217, 1218, 1213], "section": "1"}, - {"name": 1103, "type": "ShellMITC4", "nodes": [1213, 1218, 1219, 1214], "section": "1"}, - {"name": 1104, "type": "ShellMITC4", "nodes": [1214, 1219, 1203, 1204], "section": "1"}, - {"name": 1105, "type": "ShellMITC4", "nodes": [1191, 1192, 1220, 1215], "section": "1"}, - {"name": 1106, "type": "ShellMITC4", "nodes": [1215, 1220, 1221, 1216], "section": "1"}, - {"name": 1107, "type": "ShellMITC4", "nodes": [1216, 1221, 1222, 1217], "section": "1"}, - {"name": 1108, "type": "ShellMITC4", "nodes": [1217, 1222, 1223, 1218], "section": "1"}, - {"name": 1109, "type": "ShellMITC4", "nodes": [1218, 1223, 1224, 1219], "section": "1"}, - {"name": 1110, "type": "ShellMITC4", "nodes": [1219, 1224, 1202, 1203], "section": "1"}, - {"name": 1111, "type": "ShellMITC4", "nodes": [1192, 1193, 1225, 1220], "section": "1"}, - {"name": 1112, "type": "ShellMITC4", "nodes": [1220, 1225, 1226, 1221], "section": "1"}, - {"name": 1113, "type": "ShellMITC4", "nodes": [1221, 1226, 1227, 1222], "section": "1"}, - {"name": 1114, "type": "ShellMITC4", "nodes": [1222, 1227, 1228, 1223], "section": "1"}, - {"name": 1115, "type": "ShellMITC4", "nodes": [1223, 1228, 1229, 1224], "section": "1"}, - {"name": 1116, "type": "ShellMITC4", "nodes": [1224, 1229, 1201, 1202], "section": "1"}, - {"name": 1117, "type": "ShellMITC4", "nodes": [1193, 1194, 1230, 1225], "section": "1"}, - {"name": 1118, "type": "ShellMITC4", "nodes": [1225, 1230, 1231, 1226], "section": "1"}, - {"name": 1119, "type": "ShellMITC4", "nodes": [1226, 1231, 1232, 1227], "section": "1"}, - {"name": 1120, "type": "ShellMITC4", "nodes": [1227, 1232, 1233, 1228], "section": "1"}, - {"name": 1121, "type": "ShellMITC4", "nodes": [1228, 1233, 1234, 1229], "section": "1"}, - {"name": 1122, "type": "ShellMITC4", "nodes": [1229, 1234, 1200, 1201], "section": "1"}, - {"name": 1123, "type": "ShellMITC4", "nodes": [1194, 167, 1195, 1230], "section": "1"}, - {"name": 1124, "type": "ShellMITC4", "nodes": [1230, 1195, 1196, 1231], "section": "1"}, - {"name": 1125, "type": "ShellMITC4", "nodes": [1231, 1196, 1197, 1232], "section": "1"}, - {"name": 1126, "type": "ShellMITC4", "nodes": [1232, 1197, 1198, 1233], "section": "1"}, - {"name": 1127, "type": "ShellMITC4", "nodes": [1233, 1198, 1199, 1234], "section": "1"}, - {"name": 1128, "type": "ShellMITC4", "nodes": [1234, 1199, 168, 1200], "section": "1"}, - {"name": 1129, "type": "ShellMITC4", "nodes": [289, 1235, 1255, 1254], "section": "1"}, - {"name": 1130, "type": "ShellMITC4", "nodes": [1254, 1255, 1256, 1253], "section": "1"}, - {"name": 1131, "type": "ShellMITC4", "nodes": [1253, 1256, 1257, 1252], "section": "1"}, - {"name": 1132, "type": "ShellMITC4", "nodes": [1252, 1257, 1258, 1251], "section": "1"}, - {"name": 1133, "type": "ShellMITC4", "nodes": [1251, 1258, 1259, 1250], "section": "1"}, - {"name": 1134, "type": "ShellMITC4", "nodes": [1250, 1259, 1249, 292], "section": "1"}, - {"name": 1135, "type": "ShellMITC4", "nodes": [1235, 1236, 1260, 1255], "section": "1"}, - {"name": 1136, "type": "ShellMITC4", "nodes": [1255, 1260, 1261, 1256], "section": "1"}, - {"name": 1137, "type": "ShellMITC4", "nodes": [1256, 1261, 1262, 1257], "section": "1"}, - {"name": 1138, "type": "ShellMITC4", "nodes": [1257, 1262, 1263, 1258], "section": "1"}, - {"name": 1139, "type": "ShellMITC4", "nodes": [1258, 1263, 1264, 1259], "section": "1"}, - {"name": 1140, "type": "ShellMITC4", "nodes": [1259, 1264, 1248, 1249], "section": "1"}, - {"name": 1141, "type": "ShellMITC4", "nodes": [1236, 1237, 1265, 1260], "section": "1"}, - {"name": 1142, "type": "ShellMITC4", "nodes": [1260, 1265, 1266, 1261], "section": "1"}, - {"name": 1143, "type": "ShellMITC4", "nodes": [1261, 1266, 1267, 1262], "section": "1"}, - {"name": 1144, "type": "ShellMITC4", "nodes": [1262, 1267, 1268, 1263], "section": "1"}, - {"name": 1145, "type": "ShellMITC4", "nodes": [1263, 1268, 1269, 1264], "section": "1"}, - {"name": 1146, "type": "ShellMITC4", "nodes": [1264, 1269, 1247, 1248], "section": "1"}, - {"name": 1147, "type": "ShellMITC4", "nodes": [1237, 1238, 1270, 1265], "section": "1"}, - {"name": 1148, "type": "ShellMITC4", "nodes": [1265, 1270, 1271, 1266], "section": "1"}, - {"name": 1149, "type": "ShellMITC4", "nodes": [1266, 1271, 1272, 1267], "section": "1"}, - {"name": 1150, "type": "ShellMITC4", "nodes": [1267, 1272, 1273, 1268], "section": "1"}, - {"name": 1151, "type": "ShellMITC4", "nodes": [1268, 1273, 1274, 1269], "section": "1"}, - {"name": 1152, "type": "ShellMITC4", "nodes": [1269, 1274, 1246, 1247], "section": "1"}, - {"name": 1153, "type": "ShellMITC4", "nodes": [1238, 1239, 1275, 1270], "section": "1"}, - {"name": 1154, "type": "ShellMITC4", "nodes": [1270, 1275, 1276, 1271], "section": "1"}, - {"name": 1155, "type": "ShellMITC4", "nodes": [1271, 1276, 1277, 1272], "section": "1"}, - {"name": 1156, "type": "ShellMITC4", "nodes": [1272, 1277, 1278, 1273], "section": "1"}, - {"name": 1157, "type": "ShellMITC4", "nodes": [1273, 1278, 1279, 1274], "section": "1"}, - {"name": 1158, "type": "ShellMITC4", "nodes": [1274, 1279, 1245, 1246], "section": "1"}, - {"name": 1159, "type": "ShellMITC4", "nodes": [1239, 290, 1240, 1275], "section": "1"}, - {"name": 1160, "type": "ShellMITC4", "nodes": [1275, 1240, 1241, 1276], "section": "1"}, - {"name": 1161, "type": "ShellMITC4", "nodes": [1276, 1241, 1242, 1277], "section": "1"}, - {"name": 1162, "type": "ShellMITC4", "nodes": [1277, 1242, 1243, 1278], "section": "1"}, - {"name": 1163, "type": "ShellMITC4", "nodes": [1278, 1243, 1244, 1279], "section": "1"}, - {"name": 1164, "type": "ShellMITC4", "nodes": [1279, 1244, 291, 1245], "section": "1"}, - {"name": 1165, "type": "ShellMITC4", "nodes": [292, 1280, 1300, 1299], "section": "1"}, - {"name": 1166, "type": "ShellMITC4", "nodes": [1299, 1300, 1301, 1298], "section": "1"}, - {"name": 1167, "type": "ShellMITC4", "nodes": [1298, 1301, 1302, 1297], "section": "1"}, - {"name": 1168, "type": "ShellMITC4", "nodes": [1297, 1302, 1303, 1296], "section": "1"}, - {"name": 1169, "type": "ShellMITC4", "nodes": [1296, 1303, 1304, 1295], "section": "1"}, - {"name": 1170, "type": "ShellMITC4", "nodes": [1295, 1304, 1294, 294], "section": "1"}, - {"name": 1171, "type": "ShellMITC4", "nodes": [1280, 1281, 1305, 1300], "section": "1"}, - {"name": 1172, "type": "ShellMITC4", "nodes": [1300, 1305, 1306, 1301], "section": "1"}, - {"name": 1173, "type": "ShellMITC4", "nodes": [1301, 1306, 1307, 1302], "section": "1"}, - {"name": 1174, "type": "ShellMITC4", "nodes": [1302, 1307, 1308, 1303], "section": "1"}, - {"name": 1175, "type": "ShellMITC4", "nodes": [1303, 1308, 1309, 1304], "section": "1"}, - {"name": 1176, "type": "ShellMITC4", "nodes": [1304, 1309, 1293, 1294], "section": "1"}, - {"name": 1177, "type": "ShellMITC4", "nodes": [1281, 1282, 1310, 1305], "section": "1"}, - {"name": 1178, "type": "ShellMITC4", "nodes": [1305, 1310, 1311, 1306], "section": "1"}, - {"name": 1179, "type": "ShellMITC4", "nodes": [1306, 1311, 1312, 1307], "section": "1"}, - {"name": 1180, "type": "ShellMITC4", "nodes": [1307, 1312, 1313, 1308], "section": "1"}, - {"name": 1181, "type": "ShellMITC4", "nodes": [1308, 1313, 1314, 1309], "section": "1"}, - {"name": 1182, "type": "ShellMITC4", "nodes": [1309, 1314, 1292, 1293], "section": "1"}, - {"name": 1183, "type": "ShellMITC4", "nodes": [1282, 1283, 1315, 1310], "section": "1"}, - {"name": 1184, "type": "ShellMITC4", "nodes": [1310, 1315, 1316, 1311], "section": "1"}, - {"name": 1185, "type": "ShellMITC4", "nodes": [1311, 1316, 1317, 1312], "section": "1"}, - {"name": 1186, "type": "ShellMITC4", "nodes": [1312, 1317, 1318, 1313], "section": "1"}, - {"name": 1187, "type": "ShellMITC4", "nodes": [1313, 1318, 1319, 1314], "section": "1"}, - {"name": 1188, "type": "ShellMITC4", "nodes": [1314, 1319, 1291, 1292], "section": "1"}, - {"name": 1189, "type": "ShellMITC4", "nodes": [1283, 1284, 1320, 1315], "section": "1"}, - {"name": 1190, "type": "ShellMITC4", "nodes": [1315, 1320, 1321, 1316], "section": "1"}, - {"name": 1191, "type": "ShellMITC4", "nodes": [1316, 1321, 1322, 1317], "section": "1"}, - {"name": 1192, "type": "ShellMITC4", "nodes": [1317, 1322, 1323, 1318], "section": "1"}, - {"name": 1193, "type": "ShellMITC4", "nodes": [1318, 1323, 1324, 1319], "section": "1"}, - {"name": 1194, "type": "ShellMITC4", "nodes": [1319, 1324, 1290, 1291], "section": "1"}, - {"name": 1195, "type": "ShellMITC4", "nodes": [1284, 291, 1285, 1320], "section": "1"}, - {"name": 1196, "type": "ShellMITC4", "nodes": [1320, 1285, 1286, 1321], "section": "1"}, - {"name": 1197, "type": "ShellMITC4", "nodes": [1321, 1286, 1287, 1322], "section": "1"}, - {"name": 1198, "type": "ShellMITC4", "nodes": [1322, 1287, 1288, 1323], "section": "1"}, - {"name": 1199, "type": "ShellMITC4", "nodes": [1323, 1288, 1289, 1324], "section": "1"}, - {"name": 1200, "type": "ShellMITC4", "nodes": [1324, 1289, 293, 1290], "section": "1"}, - {"name": 1201, "type": "ShellMITC4", "nodes": [294, 1325, 1345, 1344], "section": "1"}, - {"name": 1202, "type": "ShellMITC4", "nodes": [1344, 1345, 1346, 1343], "section": "1"}, - {"name": 1203, "type": "ShellMITC4", "nodes": [1343, 1346, 1347, 1342], "section": "1"}, - {"name": 1204, "type": "ShellMITC4", "nodes": [1342, 1347, 1348, 1341], "section": "1"}, - {"name": 1205, "type": "ShellMITC4", "nodes": [1341, 1348, 1349, 1340], "section": "1"}, - {"name": 1206, "type": "ShellMITC4", "nodes": [1340, 1349, 1339, 296], "section": "1"}, - {"name": 1207, "type": "ShellMITC4", "nodes": [1325, 1326, 1350, 1345], "section": "1"}, - {"name": 1208, "type": "ShellMITC4", "nodes": [1345, 1350, 1351, 1346], "section": "1"}, - {"name": 1209, "type": "ShellMITC4", "nodes": [1346, 1351, 1352, 1347], "section": "1"}, - {"name": 1210, "type": "ShellMITC4", "nodes": [1347, 1352, 1353, 1348], "section": "1"}, - {"name": 1211, "type": "ShellMITC4", "nodes": [1348, 1353, 1354, 1349], "section": "1"}, - {"name": 1212, "type": "ShellMITC4", "nodes": [1349, 1354, 1338, 1339], "section": "1"}, - {"name": 1213, "type": "ShellMITC4", "nodes": [1326, 1327, 1355, 1350], "section": "1"}, - {"name": 1214, "type": "ShellMITC4", "nodes": [1350, 1355, 1356, 1351], "section": "1"}, - {"name": 1215, "type": "ShellMITC4", "nodes": [1351, 1356, 1357, 1352], "section": "1"}, - {"name": 1216, "type": "ShellMITC4", "nodes": [1352, 1357, 1358, 1353], "section": "1"}, - {"name": 1217, "type": "ShellMITC4", "nodes": [1353, 1358, 1359, 1354], "section": "1"}, - {"name": 1218, "type": "ShellMITC4", "nodes": [1354, 1359, 1337, 1338], "section": "1"}, - {"name": 1219, "type": "ShellMITC4", "nodes": [1327, 1328, 1360, 1355], "section": "1"}, - {"name": 1220, "type": "ShellMITC4", "nodes": [1355, 1360, 1361, 1356], "section": "1"}, - {"name": 1221, "type": "ShellMITC4", "nodes": [1356, 1361, 1362, 1357], "section": "1"}, - {"name": 1222, "type": "ShellMITC4", "nodes": [1357, 1362, 1363, 1358], "section": "1"}, - {"name": 1223, "type": "ShellMITC4", "nodes": [1358, 1363, 1364, 1359], "section": "1"}, - {"name": 1224, "type": "ShellMITC4", "nodes": [1359, 1364, 1336, 1337], "section": "1"}, - {"name": 1225, "type": "ShellMITC4", "nodes": [1328, 1329, 1365, 1360], "section": "1"}, - {"name": 1226, "type": "ShellMITC4", "nodes": [1360, 1365, 1366, 1361], "section": "1"}, - {"name": 1227, "type": "ShellMITC4", "nodes": [1361, 1366, 1367, 1362], "section": "1"}, - {"name": 1228, "type": "ShellMITC4", "nodes": [1362, 1367, 1368, 1363], "section": "1"}, - {"name": 1229, "type": "ShellMITC4", "nodes": [1363, 1368, 1369, 1364], "section": "1"}, - {"name": 1230, "type": "ShellMITC4", "nodes": [1364, 1369, 1335, 1336], "section": "1"}, - {"name": 1231, "type": "ShellMITC4", "nodes": [1329, 293, 1330, 1365], "section": "1"}, - {"name": 1232, "type": "ShellMITC4", "nodes": [1365, 1330, 1331, 1366], "section": "1"}, - {"name": 1233, "type": "ShellMITC4", "nodes": [1366, 1331, 1332, 1367], "section": "1"}, - {"name": 1234, "type": "ShellMITC4", "nodes": [1367, 1332, 1333, 1368], "section": "1"}, - {"name": 1235, "type": "ShellMITC4", "nodes": [1368, 1333, 1334, 1369], "section": "1"}, - {"name": 1236, "type": "ShellMITC4", "nodes": [1369, 1334, 295, 1335], "section": "1"}, - {"name": 1237, "type": "ShellMITC4", "nodes": [290, 1370, 1390, 1389], "section": "1"}, - {"name": 1238, "type": "ShellMITC4", "nodes": [1389, 1390, 1391, 1388], "section": "1"}, - {"name": 1239, "type": "ShellMITC4", "nodes": [1388, 1391, 1392, 1387], "section": "1"}, - {"name": 1240, "type": "ShellMITC4", "nodes": [1387, 1392, 1393, 1386], "section": "1"}, - {"name": 1241, "type": "ShellMITC4", "nodes": [1386, 1393, 1394, 1385], "section": "1"}, - {"name": 1242, "type": "ShellMITC4", "nodes": [1385, 1394, 1384, 291], "section": "1"}, - {"name": 1243, "type": "ShellMITC4", "nodes": [1370, 1371, 1395, 1390], "section": "1"}, - {"name": 1244, "type": "ShellMITC4", "nodes": [1390, 1395, 1396, 1391], "section": "1"}, - {"name": 1245, "type": "ShellMITC4", "nodes": [1391, 1396, 1397, 1392], "section": "1"}, - {"name": 1246, "type": "ShellMITC4", "nodes": [1392, 1397, 1398, 1393], "section": "1"}, - {"name": 1247, "type": "ShellMITC4", "nodes": [1393, 1398, 1399, 1394], "section": "1"}, - {"name": 1248, "type": "ShellMITC4", "nodes": [1394, 1399, 1383, 1384], "section": "1"}, - {"name": 1249, "type": "ShellMITC4", "nodes": [1371, 1372, 1400, 1395], "section": "1"}, - {"name": 1250, "type": "ShellMITC4", "nodes": [1395, 1400, 1401, 1396], "section": "1"}, - {"name": 1251, "type": "ShellMITC4", "nodes": [1396, 1401, 1402, 1397], "section": "1"}, - {"name": 1252, "type": "ShellMITC4", "nodes": [1397, 1402, 1403, 1398], "section": "1"}, - {"name": 1253, "type": "ShellMITC4", "nodes": [1398, 1403, 1404, 1399], "section": "1"}, - {"name": 1254, "type": "ShellMITC4", "nodes": [1399, 1404, 1382, 1383], "section": "1"}, - {"name": 1255, "type": "ShellMITC4", "nodes": [1372, 1373, 1405, 1400], "section": "1"}, - {"name": 1256, "type": "ShellMITC4", "nodes": [1400, 1405, 1406, 1401], "section": "1"}, - {"name": 1257, "type": "ShellMITC4", "nodes": [1401, 1406, 1407, 1402], "section": "1"}, - {"name": 1258, "type": "ShellMITC4", "nodes": [1402, 1407, 1408, 1403], "section": "1"}, - {"name": 1259, "type": "ShellMITC4", "nodes": [1403, 1408, 1409, 1404], "section": "1"}, - {"name": 1260, "type": "ShellMITC4", "nodes": [1404, 1409, 1381, 1382], "section": "1"}, - {"name": 1261, "type": "ShellMITC4", "nodes": [1373, 1374, 1410, 1405], "section": "1"}, - {"name": 1262, "type": "ShellMITC4", "nodes": [1405, 1410, 1411, 1406], "section": "1"}, - {"name": 1263, "type": "ShellMITC4", "nodes": [1406, 1411, 1412, 1407], "section": "1"}, - {"name": 1264, "type": "ShellMITC4", "nodes": [1407, 1412, 1413, 1408], "section": "1"}, - {"name": 1265, "type": "ShellMITC4", "nodes": [1408, 1413, 1414, 1409], "section": "1"}, - {"name": 1266, "type": "ShellMITC4", "nodes": [1409, 1414, 1380, 1381], "section": "1"}, - {"name": 1267, "type": "ShellMITC4", "nodes": [1374, 297, 1375, 1410], "section": "1"}, - {"name": 1268, "type": "ShellMITC4", "nodes": [1410, 1375, 1376, 1411], "section": "1"}, - {"name": 1269, "type": "ShellMITC4", "nodes": [1411, 1376, 1377, 1412], "section": "1"}, - {"name": 1270, "type": "ShellMITC4", "nodes": [1412, 1377, 1378, 1413], "section": "1"}, - {"name": 1271, "type": "ShellMITC4", "nodes": [1413, 1378, 1379, 1414], "section": "1"}, - {"name": 1272, "type": "ShellMITC4", "nodes": [1414, 1379, 298, 1380], "section": "1"}, - {"name": 1273, "type": "ShellMITC4", "nodes": [291, 1415, 1435, 1434], "section": "1"}, - {"name": 1274, "type": "ShellMITC4", "nodes": [1434, 1435, 1436, 1433], "section": "1"}, - {"name": 1275, "type": "ShellMITC4", "nodes": [1433, 1436, 1437, 1432], "section": "1"}, - {"name": 1276, "type": "ShellMITC4", "nodes": [1432, 1437, 1438, 1431], "section": "1"}, - {"name": 1277, "type": "ShellMITC4", "nodes": [1431, 1438, 1439, 1430], "section": "1"}, - {"name": 1278, "type": "ShellMITC4", "nodes": [1430, 1439, 1429, 293], "section": "1"}, - {"name": 1279, "type": "ShellMITC4", "nodes": [1415, 1416, 1440, 1435], "section": "1"}, - {"name": 1280, "type": "ShellMITC4", "nodes": [1435, 1440, 1441, 1436], "section": "1"}, - {"name": 1281, "type": "ShellMITC4", "nodes": [1436, 1441, 1442, 1437], "section": "1"}, - {"name": 1282, "type": "ShellMITC4", "nodes": [1437, 1442, 1443, 1438], "section": "1"}, - {"name": 1283, "type": "ShellMITC4", "nodes": [1438, 1443, 1444, 1439], "section": "1"}, - {"name": 1284, "type": "ShellMITC4", "nodes": [1439, 1444, 1428, 1429], "section": "1"}, - {"name": 1285, "type": "ShellMITC4", "nodes": [1416, 1417, 1445, 1440], "section": "1"}, - {"name": 1286, "type": "ShellMITC4", "nodes": [1440, 1445, 1446, 1441], "section": "1"}, - {"name": 1287, "type": "ShellMITC4", "nodes": [1441, 1446, 1447, 1442], "section": "1"}, - {"name": 1288, "type": "ShellMITC4", "nodes": [1442, 1447, 1448, 1443], "section": "1"}, - {"name": 1289, "type": "ShellMITC4", "nodes": [1443, 1448, 1449, 1444], "section": "1"}, - {"name": 1290, "type": "ShellMITC4", "nodes": [1444, 1449, 1427, 1428], "section": "1"}, - {"name": 1291, "type": "ShellMITC4", "nodes": [1417, 1418, 1450, 1445], "section": "1"}, - {"name": 1292, "type": "ShellMITC4", "nodes": [1445, 1450, 1451, 1446], "section": "1"}, - {"name": 1293, "type": "ShellMITC4", "nodes": [1446, 1451, 1452, 1447], "section": "1"}, - {"name": 1294, "type": "ShellMITC4", "nodes": [1447, 1452, 1453, 1448], "section": "1"}, - {"name": 1295, "type": "ShellMITC4", "nodes": [1448, 1453, 1454, 1449], "section": "1"}, - {"name": 1296, "type": "ShellMITC4", "nodes": [1449, 1454, 1426, 1427], "section": "1"}, - {"name": 1297, "type": "ShellMITC4", "nodes": [1418, 1419, 1455, 1450], "section": "1"}, - {"name": 1298, "type": "ShellMITC4", "nodes": [1450, 1455, 1456, 1451], "section": "1"}, - {"name": 1299, "type": "ShellMITC4", "nodes": [1451, 1456, 1457, 1452], "section": "1"}, - {"name": 1300, "type": "ShellMITC4", "nodes": [1452, 1457, 1458, 1453], "section": "1"}, - {"name": 1301, "type": "ShellMITC4", "nodes": [1453, 1458, 1459, 1454], "section": "1"}, - {"name": 1302, "type": "ShellMITC4", "nodes": [1454, 1459, 1425, 1426], "section": "1"}, - {"name": 1303, "type": "ShellMITC4", "nodes": [1419, 298, 1420, 1455], "section": "1"}, - {"name": 1304, "type": "ShellMITC4", "nodes": [1455, 1420, 1421, 1456], "section": "1"}, - {"name": 1305, "type": "ShellMITC4", "nodes": [1456, 1421, 1422, 1457], "section": "1"}, - {"name": 1306, "type": "ShellMITC4", "nodes": [1457, 1422, 1423, 1458], "section": "1"}, - {"name": 1307, "type": "ShellMITC4", "nodes": [1458, 1423, 1424, 1459], "section": "1"}, - {"name": 1308, "type": "ShellMITC4", "nodes": [1459, 1424, 299, 1425], "section": "1"}, - {"name": 1309, "type": "ShellMITC4", "nodes": [293, 1460, 1480, 1479], "section": "1"}, - {"name": 1310, "type": "ShellMITC4", "nodes": [1479, 1480, 1481, 1478], "section": "1"}, - {"name": 1311, "type": "ShellMITC4", "nodes": [1478, 1481, 1482, 1477], "section": "1"}, - {"name": 1312, "type": "ShellMITC4", "nodes": [1477, 1482, 1483, 1476], "section": "1"}, - {"name": 1313, "type": "ShellMITC4", "nodes": [1476, 1483, 1484, 1475], "section": "1"}, - {"name": 1314, "type": "ShellMITC4", "nodes": [1475, 1484, 1474, 295], "section": "1"}, - {"name": 1315, "type": "ShellMITC4", "nodes": [1460, 1461, 1485, 1480], "section": "1"}, - {"name": 1316, "type": "ShellMITC4", "nodes": [1480, 1485, 1486, 1481], "section": "1"}, - {"name": 1317, "type": "ShellMITC4", "nodes": [1481, 1486, 1487, 1482], "section": "1"}, - {"name": 1318, "type": "ShellMITC4", "nodes": [1482, 1487, 1488, 1483], "section": "1"}, - {"name": 1319, "type": "ShellMITC4", "nodes": [1483, 1488, 1489, 1484], "section": "1"}, - {"name": 1320, "type": "ShellMITC4", "nodes": [1484, 1489, 1473, 1474], "section": "1"}, - {"name": 1321, "type": "ShellMITC4", "nodes": [1461, 1462, 1490, 1485], "section": "1"}, - {"name": 1322, "type": "ShellMITC4", "nodes": [1485, 1490, 1491, 1486], "section": "1"}, - {"name": 1323, "type": "ShellMITC4", "nodes": [1486, 1491, 1492, 1487], "section": "1"}, - {"name": 1324, "type": "ShellMITC4", "nodes": [1487, 1492, 1493, 1488], "section": "1"}, - {"name": 1325, "type": "ShellMITC4", "nodes": [1488, 1493, 1494, 1489], "section": "1"}, - {"name": 1326, "type": "ShellMITC4", "nodes": [1489, 1494, 1472, 1473], "section": "1"}, - {"name": 1327, "type": "ShellMITC4", "nodes": [1462, 1463, 1495, 1490], "section": "1"}, - {"name": 1328, "type": "ShellMITC4", "nodes": [1490, 1495, 1496, 1491], "section": "1"}, - {"name": 1329, "type": "ShellMITC4", "nodes": [1491, 1496, 1497, 1492], "section": "1"}, - {"name": 1330, "type": "ShellMITC4", "nodes": [1492, 1497, 1498, 1493], "section": "1"}, - {"name": 1331, "type": "ShellMITC4", "nodes": [1493, 1498, 1499, 1494], "section": "1"}, - {"name": 1332, "type": "ShellMITC4", "nodes": [1494, 1499, 1471, 1472], "section": "1"}, - {"name": 1333, "type": "ShellMITC4", "nodes": [1463, 1464, 1500, 1495], "section": "1"}, - {"name": 1334, "type": "ShellMITC4", "nodes": [1495, 1500, 1501, 1496], "section": "1"}, - {"name": 1335, "type": "ShellMITC4", "nodes": [1496, 1501, 1502, 1497], "section": "1"}, - {"name": 1336, "type": "ShellMITC4", "nodes": [1497, 1502, 1503, 1498], "section": "1"}, - {"name": 1337, "type": "ShellMITC4", "nodes": [1498, 1503, 1504, 1499], "section": "1"}, - {"name": 1338, "type": "ShellMITC4", "nodes": [1499, 1504, 1470, 1471], "section": "1"}, - {"name": 1339, "type": "ShellMITC4", "nodes": [1464, 299, 1465, 1500], "section": "1"}, - {"name": 1340, "type": "ShellMITC4", "nodes": [1500, 1465, 1466, 1501], "section": "1"}, - {"name": 1341, "type": "ShellMITC4", "nodes": [1501, 1466, 1467, 1502], "section": "1"}, - {"name": 1342, "type": "ShellMITC4", "nodes": [1502, 1467, 1468, 1503], "section": "1"}, - {"name": 1343, "type": "ShellMITC4", "nodes": [1503, 1468, 1469, 1504], "section": "1"}, - {"name": 1344, "type": "ShellMITC4", "nodes": [1504, 1469, 300, 1470], "section": "1"}, - {"name": 1345, "type": "ShellMITC4", "nodes": [297, 1505, 1525, 1524], "section": "1"}, - {"name": 1346, "type": "ShellMITC4", "nodes": [1524, 1525, 1526, 1523], "section": "1"}, - {"name": 1347, "type": "ShellMITC4", "nodes": [1523, 1526, 1527, 1522], "section": "1"}, - {"name": 1348, "type": "ShellMITC4", "nodes": [1522, 1527, 1528, 1521], "section": "1"}, - {"name": 1349, "type": "ShellMITC4", "nodes": [1521, 1528, 1529, 1520], "section": "1"}, - {"name": 1350, "type": "ShellMITC4", "nodes": [1520, 1529, 1519, 298], "section": "1"}, - {"name": 1351, "type": "ShellMITC4", "nodes": [1505, 1506, 1530, 1525], "section": "1"}, - {"name": 1352, "type": "ShellMITC4", "nodes": [1525, 1530, 1531, 1526], "section": "1"}, - {"name": 1353, "type": "ShellMITC4", "nodes": [1526, 1531, 1532, 1527], "section": "1"}, - {"name": 1354, "type": "ShellMITC4", "nodes": [1527, 1532, 1533, 1528], "section": "1"}, - {"name": 1355, "type": "ShellMITC4", "nodes": [1528, 1533, 1534, 1529], "section": "1"}, - {"name": 1356, "type": "ShellMITC4", "nodes": [1529, 1534, 1518, 1519], "section": "1"}, - {"name": 1357, "type": "ShellMITC4", "nodes": [1506, 1507, 1535, 1530], "section": "1"}, - {"name": 1358, "type": "ShellMITC4", "nodes": [1530, 1535, 1536, 1531], "section": "1"}, - {"name": 1359, "type": "ShellMITC4", "nodes": [1531, 1536, 1537, 1532], "section": "1"}, - {"name": 1360, "type": "ShellMITC4", "nodes": [1532, 1537, 1538, 1533], "section": "1"}, - {"name": 1361, "type": "ShellMITC4", "nodes": [1533, 1538, 1539, 1534], "section": "1"}, - {"name": 1362, "type": "ShellMITC4", "nodes": [1534, 1539, 1517, 1518], "section": "1"}, - {"name": 1363, "type": "ShellMITC4", "nodes": [1507, 1508, 1540, 1535], "section": "1"}, - {"name": 1364, "type": "ShellMITC4", "nodes": [1535, 1540, 1541, 1536], "section": "1"}, - {"name": 1365, "type": "ShellMITC4", "nodes": [1536, 1541, 1542, 1537], "section": "1"}, - {"name": 1366, "type": "ShellMITC4", "nodes": [1537, 1542, 1543, 1538], "section": "1"}, - {"name": 1367, "type": "ShellMITC4", "nodes": [1538, 1543, 1544, 1539], "section": "1"}, - {"name": 1368, "type": "ShellMITC4", "nodes": [1539, 1544, 1516, 1517], "section": "1"}, - {"name": 1369, "type": "ShellMITC4", "nodes": [1508, 1509, 1545, 1540], "section": "1"}, - {"name": 1370, "type": "ShellMITC4", "nodes": [1540, 1545, 1546, 1541], "section": "1"}, - {"name": 1371, "type": "ShellMITC4", "nodes": [1541, 1546, 1547, 1542], "section": "1"}, - {"name": 1372, "type": "ShellMITC4", "nodes": [1542, 1547, 1548, 1543], "section": "1"}, - {"name": 1373, "type": "ShellMITC4", "nodes": [1543, 1548, 1549, 1544], "section": "1"}, - {"name": 1374, "type": "ShellMITC4", "nodes": [1544, 1549, 1515, 1516], "section": "1"}, - {"name": 1375, "type": "ShellMITC4", "nodes": [1509, 301, 1510, 1545], "section": "1"}, - {"name": 1376, "type": "ShellMITC4", "nodes": [1545, 1510, 1511, 1546], "section": "1"}, - {"name": 1377, "type": "ShellMITC4", "nodes": [1546, 1511, 1512, 1547], "section": "1"}, - {"name": 1378, "type": "ShellMITC4", "nodes": [1547, 1512, 1513, 1548], "section": "1"}, - {"name": 1379, "type": "ShellMITC4", "nodes": [1548, 1513, 1514, 1549], "section": "1"}, - {"name": 1380, "type": "ShellMITC4", "nodes": [1549, 1514, 302, 1515], "section": "1"}, - {"name": 1381, "type": "ShellMITC4", "nodes": [298, 1550, 1570, 1569], "section": "1"}, - {"name": 1382, "type": "ShellMITC4", "nodes": [1569, 1570, 1571, 1568], "section": "1"}, - {"name": 1383, "type": "ShellMITC4", "nodes": [1568, 1571, 1572, 1567], "section": "1"}, - {"name": 1384, "type": "ShellMITC4", "nodes": [1567, 1572, 1573, 1566], "section": "1"}, - {"name": 1385, "type": "ShellMITC4", "nodes": [1566, 1573, 1574, 1565], "section": "1"}, - {"name": 1386, "type": "ShellMITC4", "nodes": [1565, 1574, 1564, 299], "section": "1"}, - {"name": 1387, "type": "ShellMITC4", "nodes": [1550, 1551, 1575, 1570], "section": "1"}, - {"name": 1388, "type": "ShellMITC4", "nodes": [1570, 1575, 1576, 1571], "section": "1"}, - {"name": 1389, "type": "ShellMITC4", "nodes": [1571, 1576, 1577, 1572], "section": "1"}, - {"name": 1390, "type": "ShellMITC4", "nodes": [1572, 1577, 1578, 1573], "section": "1"}, - {"name": 1391, "type": "ShellMITC4", "nodes": [1573, 1578, 1579, 1574], "section": "1"}, - {"name": 1392, "type": "ShellMITC4", "nodes": [1574, 1579, 1563, 1564], "section": "1"}, - {"name": 1393, "type": "ShellMITC4", "nodes": [1551, 1552, 1580, 1575], "section": "1"}, - {"name": 1394, "type": "ShellMITC4", "nodes": [1575, 1580, 1581, 1576], "section": "1"}, - {"name": 1395, "type": "ShellMITC4", "nodes": [1576, 1581, 1582, 1577], "section": "1"}, - {"name": 1396, "type": "ShellMITC4", "nodes": [1577, 1582, 1583, 1578], "section": "1"}, - {"name": 1397, "type": "ShellMITC4", "nodes": [1578, 1583, 1584, 1579], "section": "1"}, - {"name": 1398, "type": "ShellMITC4", "nodes": [1579, 1584, 1562, 1563], "section": "1"}, - {"name": 1399, "type": "ShellMITC4", "nodes": [1552, 1553, 1585, 1580], "section": "1"}, - {"name": 1400, "type": "ShellMITC4", "nodes": [1580, 1585, 1586, 1581], "section": "1"}, - {"name": 1401, "type": "ShellMITC4", "nodes": [1581, 1586, 1587, 1582], "section": "1"}, - {"name": 1402, "type": "ShellMITC4", "nodes": [1582, 1587, 1588, 1583], "section": "1"}, - {"name": 1403, "type": "ShellMITC4", "nodes": [1583, 1588, 1589, 1584], "section": "1"}, - {"name": 1404, "type": "ShellMITC4", "nodes": [1584, 1589, 1561, 1562], "section": "1"}, - {"name": 1405, "type": "ShellMITC4", "nodes": [1553, 1554, 1590, 1585], "section": "1"}, - {"name": 1406, "type": "ShellMITC4", "nodes": [1585, 1590, 1591, 1586], "section": "1"}, - {"name": 1407, "type": "ShellMITC4", "nodes": [1586, 1591, 1592, 1587], "section": "1"}, - {"name": 1408, "type": "ShellMITC4", "nodes": [1587, 1592, 1593, 1588], "section": "1"}, - {"name": 1409, "type": "ShellMITC4", "nodes": [1588, 1593, 1594, 1589], "section": "1"}, - {"name": 1410, "type": "ShellMITC4", "nodes": [1589, 1594, 1560, 1561], "section": "1"}, - {"name": 1411, "type": "ShellMITC4", "nodes": [1554, 302, 1555, 1590], "section": "1"}, - {"name": 1412, "type": "ShellMITC4", "nodes": [1590, 1555, 1556, 1591], "section": "1"}, - {"name": 1413, "type": "ShellMITC4", "nodes": [1591, 1556, 1557, 1592], "section": "1"}, - {"name": 1414, "type": "ShellMITC4", "nodes": [1592, 1557, 1558, 1593], "section": "1"}, - {"name": 1415, "type": "ShellMITC4", "nodes": [1593, 1558, 1559, 1594], "section": "1"}, - {"name": 1416, "type": "ShellMITC4", "nodes": [1594, 1559, 303, 1560], "section": "1"}, - {"name": 1417, "type": "ShellMITC4", "nodes": [299, 1595, 1615, 1614], "section": "1"}, - {"name": 1418, "type": "ShellMITC4", "nodes": [1614, 1615, 1616, 1613], "section": "1"}, - {"name": 1419, "type": "ShellMITC4", "nodes": [1613, 1616, 1617, 1612], "section": "1"}, - {"name": 1420, "type": "ShellMITC4", "nodes": [1612, 1617, 1618, 1611], "section": "1"}, - {"name": 1421, "type": "ShellMITC4", "nodes": [1611, 1618, 1619, 1610], "section": "1"}, - {"name": 1422, "type": "ShellMITC4", "nodes": [1610, 1619, 1609, 300], "section": "1"}, - {"name": 1423, "type": "ShellMITC4", "nodes": [1595, 1596, 1620, 1615], "section": "1"}, - {"name": 1424, "type": "ShellMITC4", "nodes": [1615, 1620, 1621, 1616], "section": "1"}, - {"name": 1425, "type": "ShellMITC4", "nodes": [1616, 1621, 1622, 1617], "section": "1"}, - {"name": 1426, "type": "ShellMITC4", "nodes": [1617, 1622, 1623, 1618], "section": "1"}, - {"name": 1427, "type": "ShellMITC4", "nodes": [1618, 1623, 1624, 1619], "section": "1"}, - {"name": 1428, "type": "ShellMITC4", "nodes": [1619, 1624, 1608, 1609], "section": "1"}, - {"name": 1429, "type": "ShellMITC4", "nodes": [1596, 1597, 1625, 1620], "section": "1"}, - {"name": 1430, "type": "ShellMITC4", "nodes": [1620, 1625, 1626, 1621], "section": "1"}, - {"name": 1431, "type": "ShellMITC4", "nodes": [1621, 1626, 1627, 1622], "section": "1"}, - {"name": 1432, "type": "ShellMITC4", "nodes": [1622, 1627, 1628, 1623], "section": "1"}, - {"name": 1433, "type": "ShellMITC4", "nodes": [1623, 1628, 1629, 1624], "section": "1"}, - {"name": 1434, "type": "ShellMITC4", "nodes": [1624, 1629, 1607, 1608], "section": "1"}, - {"name": 1435, "type": "ShellMITC4", "nodes": [1597, 1598, 1630, 1625], "section": "1"}, - {"name": 1436, "type": "ShellMITC4", "nodes": [1625, 1630, 1631, 1626], "section": "1"}, - {"name": 1437, "type": "ShellMITC4", "nodes": [1626, 1631, 1632, 1627], "section": "1"}, - {"name": 1438, "type": "ShellMITC4", "nodes": [1627, 1632, 1633, 1628], "section": "1"}, - {"name": 1439, "type": "ShellMITC4", "nodes": [1628, 1633, 1634, 1629], "section": "1"}, - {"name": 1440, "type": "ShellMITC4", "nodes": [1629, 1634, 1606, 1607], "section": "1"}, - {"name": 1441, "type": "ShellMITC4", "nodes": [1598, 1599, 1635, 1630], "section": "1"}, - {"name": 1442, "type": "ShellMITC4", "nodes": [1630, 1635, 1636, 1631], "section": "1"}, - {"name": 1443, "type": "ShellMITC4", "nodes": [1631, 1636, 1637, 1632], "section": "1"}, - {"name": 1444, "type": "ShellMITC4", "nodes": [1632, 1637, 1638, 1633], "section": "1"}, - {"name": 1445, "type": "ShellMITC4", "nodes": [1633, 1638, 1639, 1634], "section": "1"}, - {"name": 1446, "type": "ShellMITC4", "nodes": [1634, 1639, 1605, 1606], "section": "1"}, - {"name": 1447, "type": "ShellMITC4", "nodes": [1599, 303, 1600, 1635], "section": "1"}, - {"name": 1448, "type": "ShellMITC4", "nodes": [1635, 1600, 1601, 1636], "section": "1"}, - {"name": 1449, "type": "ShellMITC4", "nodes": [1636, 1601, 1602, 1637], "section": "1"}, - {"name": 1450, "type": "ShellMITC4", "nodes": [1637, 1602, 1603, 1638], "section": "1"}, - {"name": 1451, "type": "ShellMITC4", "nodes": [1638, 1603, 1604, 1639], "section": "1"}, - {"name": 1452, "type": "ShellMITC4", "nodes": [1639, 1604, 304, 1605], "section": "1"}, - {"name": 1453, "type": "ElasticBeam3d", "nodes": [5, 1640], "E": 78956.8, "G": 3.84615e+06, "A": 1, "Jx": 0.1408, "Iy": 0.0833, "Iz": 0.0833, "massperlength": 0, "releasez": 0, "releasey": 0, "crdTransformation": "3"} - ] - } -} -} diff --git a/examples/shellframe/model3D.py b/examples/shellframe/model3D.py deleted file mode 100644 index 48cbb272..00000000 --- a/examples/shellframe/model3D.py +++ /dev/null @@ -1,503 +0,0 @@ -import os -import math -import numpy as np -import pandas as pd - -import opensees.openseespy as ops - - -class StructuralElements: - def __init__(self, axial_area, elastic_modulus, shear_modulus, torsional_constant, moment_of_inertia_y, moment_of_inertia_z): - self.A = axial_area - self.E = elastic_modulus - self.G = shear_modulus - self.J = torsional_constant - self.Iweak = moment_of_inertia_y - self.Istrong = moment_of_inertia_z - - -class slab: - def __init__(self, elastic_modulus, poisson_ratio, thickness, density, mesh_size): - self.E = elastic_modulus - self.nu = poisson_ratio - self.h = thickness - self.rho = density - self.mesh_size = mesh_size - - -def target_node(model, target_coord): - all_node_tags = model.getNodeTags() - for node_id in all_node_tags: - coord = np.array(model.nodeCoord(node_id)) - if np.array_equal(coord, np.array(target_coord)): - return node_id - return None - - -def create_slabs(model, corner_nodes, current_ele_id, slab_id, slab): - """ - Create slab elements using corner nodes provided in groups of four. - - Parameters: - corner_nodes (list): List of node IDs grouped by four, each group representing one slab. - current_ele_id (int): Current starting element ID for slabs. - slab_id (int): Current slab section ID. - E_beam (float): Elastic modulus. - nu (float): Poisson's ratio. - h (float): Slab thickness. - rho (float): Density of the slab material (set to zero if not needed). - mesh_size (float): Mesh size for defining the line elements. - """ - for i in range(0, len(corner_nodes), 4): - if i + 3 < len(corner_nodes): - - model.section('ElasticMembranePlateSection', slab_id, slab.E, slab.nu, slab.h, slab.rho) - points = { - j+1: model.nodeCoord(corner_nodes[i+j]) for j in range(4) - } - - nx = int((points[2][0] - points[1][0])//slab.mesh_size) - ny = int((points[3][1] - points[2][1])//slab.mesh_size) - model.surface((nx,ny), - element="ShellMITC4", args=(1,), - points=points - ) - - - - -def eigenvalue_analysis(model, n_modes, plot_mode_shapes): - - - """ - Perform a modal analysis on a structure modeled in OpenSees and print the results. - - Parameters: - n_modes (int): Number of modes to analyze. - plot_mode_shapes (bool): If True, plot the mode shapes for each mode. - """ - lambdaN = model.eigen(n_modes) # eigenvalue analysis for nEigenJ modes - - # Calculate circular frequencies (w) for each mode - w = [math.sqrt(lambda_val) for lambda_val in lambdaN] - - # Assuming 'w' contains angular frequencies for each mode - # Calculate natural frequencies (f) for each mode - frequencies = [frequency / (2.0 * math.pi) for frequency in w] - - # Calculate periods (T) for each mode - periods = [1 / frequency for frequency in frequencies] - - # Creating a DataFrame - df = pd.DataFrame({ - 'Frequency (Hz)': frequencies, - 'Period (s)': periods - }, index=[f"Mode {i+1}" for i in range(len(frequencies))]) - - - print(df) - - return df, w - - - -def model3D(model, modify, node_id, length_x, length_y, length_z, base_z, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - column, beam, - node_map, column_set, beam_set,corners,corner_nodes): - """ - Create nodes, columns, and beams in multiple square patterns in 3D space, - with fixed nodes only at the ground level z = 0, and beams beginning from the first floor. - - Parameters: - All parameters as previously defined, with the addition of: - base_z (float): Base z-coordinate from which columns start. - """ - num_per_side_x = int(length_x / spacing) + 1 - num_per_side_y = int(length_y / spacing) + 1 - current_node_id = node_id - current_ele_id = eleTag - - - # Loop over the grid defined by num_bay_x and num_bay_y - for ix in range(num_bay_x): - for iy in range(num_bay_y): - # Generate corners for each square at the base and subsequent levels - for level in range(num_story-modify): # Assuming two levels: ground and one above - z = base_z + level * length_z - for dx in [0, length_x]: - for dy in [0, length_y]: - x = ix * length_x + dx - y = iy * length_y + dy - coord = (x, y, z) - if coord not in node_map: - model.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - if z == 0: # Apply fixity only at the ground level - model.fix(current_node_id, 1, 1, 1, 1, 1, 1) - current_node_id += 1 - - # Create columns from base level to the next level if not the top level - if level < 1: # Adjust if more levels are needed - for corner in [(ix * length_x, iy * length_y, z), - ((ix + 1) * length_x, iy * length_y, z), - ((ix + 1) * length_x, (iy + 1) * length_y, z), - (ix * length_x, (iy + 1) * length_y, z)]: - - upper_corner = (corner[0], corner[1], z + length_z) - if upper_corner not in node_map: - model.node(current_node_id, *upper_corner) - node_map[upper_corner] = current_node_id - current_node_id += 1 - - column_key = tuple(sorted([node_map[corner], node_map[upper_corner]])) - - if column_key not in column_set: - - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(node_map[corner]) - XYZJ = model.nodeCoord(node_map[upper_corner]) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - - model.element('elasticBeamColumn', current_ele_id, - (node_map[corner], node_map[upper_corner]), - column.A, column.E, column.G, column.J, - column.Iweak, column.Istrong, geoTag, '-mass', 463) - current_ele_id += 1 - column_set.add(column_key) - - corners.append(upper_corner) - corner_nodes.append(node_map[upper_corner]) - - - # Create beams at the first floor level - z = base_z + length_z - for ix in range(num_bay_x): - for iy in range(num_bay_y): - for side in range(4): - prev_node = None - num_steps = num_per_side_x if side % 2 == 0 else num_per_side_y - for i in range(num_steps): - x, y = (ix * length_x + i * spacing, iy * length_y) if side == 0 else \ - ((ix + 1) * length_x, iy * length_y + i * spacing) if side == 1 else \ - (ix * length_x + length_x - i * spacing, iy * length_y + length_y) if side == 2 else \ - (ix * length_x, iy * length_y + length_y - i * spacing) - coord = (x, y, z) - if coord not in node_map: - model.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - current_node_id += 1 - new_node_id = node_map[coord] - - if prev_node is not None and tuple(sorted([prev_node, new_node_id])) not in beam_set: - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(prev_node) - XYZJ = model.nodeCoord(new_node_id) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] if side % 2 == 0 else [1, 0, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - model.element('elasticBeamColumn', current_ele_id, prev_node, new_node_id, beam.A, beam.E, beam.G, beam.J, beam.Iweak, beam.Istrong, geoTag, '-mass', 90) - beam_set.add(tuple(sorted([prev_node, new_node_id]))) - current_ele_id += 1 - - prev_node = new_node_id - - return current_node_id, current_ele_id, corner_nodes, geoTag_counter - - - -def create_model(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - m_nsc, f_nsc, counter, slab_point): - ndm = 3 - ndf = 6 - - model = ops.Model(ndm=ndm, ndf=ndf) - - #%% Structural elements - - W14X311 = StructuralElements( - axial_area=0.059, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=6.701E-04, - moment_of_inertia_z=1.802E-03 - ) - - W10X60 = StructuralElements( - axial_area=0.0114, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=1.419E-4, - moment_of_inertia_z=4.826E-05 - ) - - - - #%% - - modify = num_story - 2 - node_id = 1 - eleTag = 1 - node_map = {} # Dictionary to map coordinates to node IDs - column_set = set() # Set to track created columns to avoid duplication - beam_set = set() # Set to track created beams to avoid duplication - corners =[] - corner_nodes = [] - slab_id = 1 - vecxz_to_geoTag = {} - geoTag_counter = 0 - - for i in range(0, num_story*length_z, length_z): - current_node_id, current_ele_id, corner_nodes, geoTag_counter = \ - model3D(model, modify, node_id, length_x, length_y, length_z, i, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - W14X311, W10X60, - node_map, column_set, beam_set, corners,corner_nodes) - - node_id = current_node_id - eleTag = current_ele_id - - - #%% ADDITIONAL MASS - m1 = 0 # Mass in kg - # m1 = 9076 - unique_nodes = set(corner_nodes) # Convert to set to remove duplicates - - # Assign mass to each unique node - for node_id in unique_nodes: - model.mass(node_id, m1, m1, m1, 1.0e-10, 1.0e-10, 1.0e-10) - - - #%% SLAB - slabs = slab( - elastic_modulus = 2.486E10, - poisson_ratio = 0.2, - thickness = 0.2, - density = 2402.7696, - mesh_size = spacing, - ) - - create_slabs(model, corner_nodes, eleTag, slab_id, slabs) - - - # Tie nodes - if True: - for ndI in model.getNodeTags(): - XYZI = np.array(model.nodeCoord(ndI)) - for ndJ in model.getNodeTags(): - if ndI >= ndJ: - continue - XYZJ = np.array(model.nodeCoord(ndJ)) - if np.linalg.norm(XYZJ-XYZI) < 1e-8: - print(f"Tieing {ndI} to {ndJ}") - model.equalDOF(ndI,ndJ,1,2,3,4,5,6) - - # - # Non-structural component - # - target_node_id = target_node(model, target_coord) - slab_loc = model.nodeCoord(target_node_id) - - slab_nodetag = target_node_id - allTags = model.getNodeTags() - nsc_nodetag = allTags[-1] + 1 - - L_nsc = 1.0 # m - - model.node(nsc_nodetag, slab_loc[0], slab_loc[1], slab_loc[2]+L_nsc) - - # W10X60 - - axial_area_nsc = 1 - E_nsc = 4*math.pi**2*m_nsc*f_nsc**2 - G_nsc = 3846154 - Jxx_nsc = 0.1408 - Iy_nsc = 0.0833 - Iz_nsc = 0.0833 - - all_eletag =model.getEleTags() - nsc_eletag = all_eletag[-1] + 1 - - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(slab_nodetag) - XYZJ = model.nodeCoord(nsc_nodetag) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - model.element('elasticBeamColumn', nsc_eletag, - slab_nodetag, (nsc_nodetag, axial_area_nsc), - E_nsc, G_nsc, Jxx_nsc, Iy_nsc, Iz_nsc, geoTag) - - model.mass(nsc_nodetag, 1.0e-10,1.0e-10, m_nsc , 1.0e-10, 1.0e-10, 1.0e-10) - return model - - -def dynamic_analysis(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - dt, npts, eq_data, m_nsc, RSN_num, f_nsc, counter, slab_point, gm_sf): - - model = create_model(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - m_nsc, f_nsc, counter, slab_point) - - - - - # opsv.plot_model() - - df, w = eigenvalue_analysis(n_modes, plot_mode_shapes=True) - - - #%% DAMPING - zeta = 0.02 # percentage of critical damping - a0 = zeta * 2.0 * w[0] * w[1] / (w[0] + w[1]) # mass damping coefficient based on first and second modes - a1 = zeta * 2.0 / (w[0] + w[1]) # stiffness damping coefficient based on first and second modes - # assign damping to frame beams and columns - - model.rayleigh(a0, a1, 0, 0) - - - # zeta_nsc = 0.02 - - # a0_nsc = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) # mass damping coefficient based on first and second modes - # a1_nsc = zeta_nsc * 2.0 / (w[3] + w[4]) # stiffness damping coefficient based on first and second modes - # # assign damping to frame beams and columns - - # ops.region(1, '-eleRange', 1, 120, '-rayleigh',a0, a1,0,0) - # ops.region(2, '-ele', 121, '-rayleigh', a0_nsc, a1_nsc, 0,0) - - # if w[0] <= f_nsc < w[1]: - # a0 = zeta_nsc * 2.0 * w[0] * w[1] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[0] + w[1]) - # elif w[1] <= f_nsc < w[2]: - # a0 = zeta_nsc * 2.0 * w[1] * w[2] / (w[1] + w[2]) - # a1 = zeta_nsc * 2.0 / (w[1] + w[2]) - # elif w[2] <= f_nsc < w[3]: - # a0 = zeta_nsc * 2.0 * w[2] * w[3] / (w[2] + w[3]) - # a1 = zeta_nsc * 2.0 / (w[2] + w[3]) - # elif w[3] <= f_nsc < w[4]: - # a0 = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[3] + w[4]) - - - # elif w[9] <= f_nsc < w[10]: - # a0 = zeta_nsc * 2.0 * w[9] * w[10] / (w[9] + w[10]) - # a1 = zeta_nsc * 2.0 / (w[9] + w[10]) - - - - #%% DYNAMIC ANALYSIS - - GM_direction = 3 - timeSeries_tag = 2 - pattern_tag = 2 - - G = gm_sf * 9.81 - model.timeSeries('Path', timeSeries_tag, '-dt', dt, '-values', *eq_data, '-factor', G) - model.pattern('UniformExcitation', pattern_tag, GM_direction, '-accel', timeSeries_tag) - - #%% DATA DIRECTORY - Output = "Acc Output" - NSCacc_path = f'Acc Output/absNSCacc_RSN{RSN_num}.out' - slabacc_path = f'Acc Output/absSlabacc_RSN{RSN_num}.out' - os.makedirs(Output, exist_ok = True) - # NSC - model.recorder('Node','-file', NSCacc_path ,'-timeSeries',timeSeries_tag,'-time', '-node', nsc_nodetag, '-dof',3, 'accel' ) - - # Slab - model.recorder('Node','-file',slabacc_path,'-timeSeries', timeSeries_tag,'-time', '-node', slab_nodetag, '-dof',3, 'accel' ) - - - # Dyanmic analysis parameters - model.wipeAnalysis() - model.constraints('Plain') - model.numberer('RCM') - model.system('UmfPack') - model.test('NormDispIncr', 1.0e-8, 50) - model.algorithm('NewtonLineSearch') - model.integrator('Newmark', 0.5, 0.25) - model.analysis('Transient') - - ok = model.analyze(npts, dt) - if ok == 0: - print("Dynamic analysis complete") - else: - print("Dynamic analysis did not converge") - - - NSC_data = np.genfromtxt(NSCacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - slab_data = np.genfromtxt(slabacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - - # t = NSC_data[:, 0] # Time data - NSC_acc = NSC_data[:, 1] # NSC acceleration data - slab_acc = slab_data[:, 1] # Slab acceleration data - print(f"Analysis completed successfully for RSN{RSN_num}.") - - # Max NSC accelerations - max_NSCacc = np.max(np.absolute(NSC_acc)) - - # Max slab accelerations - max_slabacc = np.max(np.absolute(slab_acc)) - - - return max_NSCacc, max_slabacc - - -# dynamic_analysis() diff --git a/examples/shellframe/model3D_Oregon.py b/examples/shellframe/model3D_Oregon.py deleted file mode 100644 index 1ab00f87..00000000 --- a/examples/shellframe/model3D_Oregon.py +++ /dev/null @@ -1,596 +0,0 @@ -import openseespy.opensees as ops -#import opsvis as opsv -import math -import pandas as pd -import os -import numpy as np -import matplotlib.pyplot as plt - - - -class StructuralElements: - def __init__(self, axial_area, elastic_modulus, shear_modulus, torsional_constant, moment_of_inertia_y, moment_of_inertia_z): - self.A = axial_area - self.E = elastic_modulus - self.G = shear_modulus - self.J = torsional_constant - self.Iweak = moment_of_inertia_y - self.Istrong = moment_of_inertia_z - - -class slab: - def __init__(self, elastic_modulus, poisson_ratio, thickness, density, mesh_size): - self.E = elastic_modulus - self.nu = poisson_ratio - self.h = thickness - self.rho = density - self.mesh_size = mesh_size - - -def get_last_node_tag(model): - """ - Returns the last node tag defined in the OpenSeesPy model. - - Returns: - int: The tag of the last node. - """ - all_node_tags = model.getNodeTags() - if all_node_tags: # Check if the list is not empty - return all_node_tags[-1] - else: - return 0 # Return None if no nodes have been defined - - -def get_last_element_tag(model): - """ - Returns the last element tag defined in the OpenSeesPy model. - - Returns: - int: The tag of the last element. - """ - all_ele_tags = model.getEleTags() - if all_ele_tags: # Check if the list is not empty - return all_ele_tags[-1] - else: - return 0 # Return None if no nodes have been defined - -def find_closest_node(model, midpoint): - - # Loop through all node tags to find the closest node - for node_id in model.getNodeTags(): - coord = np.array(model.nodeCoord(node_id)) - - if np.linalg.norm(coord - midpoint) < 10**-8: - closest_node = node_id - - return closest_node - -def target_node(model, target_coord): - all_node_tags = model.getNodeTags() - for node_id in all_node_tags: - coord = np.array(model.nodeCoord(node_id)) - if np.array_equal(coord, np.array(target_coord)): - return node_id - return None - -def create_slabs(model, corner_nodes, current_ele_id, slab_id, slab): - """ - Create slab elements using corner nodes provided in groups of four. - - Parameters: - corner_nodes (list): List of node IDs grouped by four, each group representing one slab. - current_ele_id (int): Current starting element ID for slabs. - slab_id (int): Current slab section ID. - E_beam (float): Elastic modulus. - nu (float): Poisson's ratio. - h (float): Slab thickness. - rho (float): Density of the slab material (set to zero if not needed). - mesh_size (float): Mesh size for defining the line elements. - """ - min_distance = float('inf') - closest_node = None - closest_nodes = [] - for i in range(0, len(corner_nodes), 4): - if i + 3 < len(corner_nodes): - line_tags = [] - node_coords = [] - node_ids = [] - - model.section('ElasticMembranePlateSection', slab_id, slab.E, slab.nu, slab.h, slab.rho) - - for j in range(4): - start_node = corner_nodes[i + j] - end_node = corner_nodes[i + (j + 1) % 4] - line_tag = current_ele_id - model.mesh('line', line_tag, 2, *[start_node, end_node], 0, 6, slab.mesh_size) - line_tags.append(line_tag) - current_ele_id += 1 - - - node_coords.append(np.array(model.nodeCoord(start_node))) - - - # Create the shell element using the line meshes - model.mesh('quad', current_ele_id, 4, *line_tags, 0, 6, slab.mesh_size, 'ShellMITC4', 1) - current_ele_id += 1 - slab_id += 1 - - # Calculate the midpoint of the slab - midpoint = np.mean(node_coords, axis=0) - - # Find the closest node to the midpoint - closest_node = find_closest_node(model, midpoint) - closest_nodes.append(closest_node) - - # print("Midpoint of the slab:", midpoint) - # print("Node closest to the midpoint:", closest_node) - - return current_ele_id, slab_id, closest_nodes - - -def eigenvalue_analysis(model, n_modes, plot_mode_shapes): - - - """ - Perform a modal analysis on a structure modeled in OpenSees and print the results. - - Parameters: - n_modes (int): Number of modes to analyze. - plot_mode_shapes (bool): If True, plot the mode shapes for each mode. - """ - lambdaN = model.eigen(n_modes) # eigenvalue analysis for nEigenJ modes - - # Calculate circular frequencies (w) for each mode - w = [math.sqrt(lambda_val) for lambda_val in lambdaN] - - # Set the font to Times New Roman - plt.rcParams['font.serif'] = 'Times New Roman' - plt.rcParams['font.family'] = 'serif' - plt.rcParams.update({ - 'font.size': 16, # General font size - 'axes.labelsize': 14, - 'xtick.labelsize': 14, - 'ytick.labelsize': 14 - }) - - # Assuming 'w' contains angular frequencies for each mode - # Calculate natural frequencies (f) for each mode - frequencies = [frequency / (2.0 * math.pi) for frequency in w] - - # Calculate periods (T) for each mode - periods = [1 / frequency for frequency in frequencies] - - # Creating a DataFrame - df = pd.DataFrame({ - 'Frequency (Hz)': frequencies, - 'Period (s)': periods - }, index=[f"Mode {i+1}" for i in range(len(frequencies))]) - - - print(df) - print("Modal Analysis: Successful.") - - # for i in range(1, len(frequencies) + 1): - # opsv.plot_mode_shape(i) - - # # Retrieve frequency and period for the current mode - # freq = df.loc[f"Mode {i}", 'Frequency (Hz)'] - # period = df.loc[f"Mode {i}", 'Period (s)'] - - # # Setting the title using Greek letters for mode shapes - # plt.title(f'$\\phi_{{{i}}}$ - Freq: {freq:.2f} Hz, Period: {period:.2f} s', fontsize=12) - - return df, w - - - -def model3D(model, modify, node_id, length_x, length_y, length_z, base_z, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - column, beam, - node_map, column_set, beam_set,corners,corner_nodes): - """ - Create nodes, columns, and beams in multiple square patterns in 3D space, - with fixed nodes only at the ground level z = 0, and beams beginning from the first floor. - - Parameters: - All parameters as previously defined, with the addition of: - base_z (float): Base z-coordinate from which columns start. - """ - num_per_side_x = int(length_x / spacing) + 1 - num_per_side_y = int(length_y / spacing) + 1 - current_node_id = node_id - current_ele_id = eleTag - - - # Loop over the grid defined by num_bay_x and num_bay_y - for ix in range(num_bay_x): - for iy in range(num_bay_y): - # Generate corners for each square at the base and subsequent levels - for level in range(num_story-modify): # Assuming two levels: ground and one above - z = base_z + level * length_z - for dx in [0, length_x]: - for dy in [0, length_y]: - x = ix * length_x + dx - y = iy * length_y + dy - coord = (x, y, z) - if coord not in node_map: - model.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - if z == 0: # Apply fixity only at the ground level - model.fix(current_node_id, 1, 1, 1, 1, 1, 1) - current_node_id += 1 - - # Create columns from base level to the next level if not the top level - if level < 1: # Adjust if more levels are needed - for corner in [(ix * length_x, iy * length_y, z), - ((ix + 1) * length_x, iy * length_y, z), - ((ix + 1) * length_x, (iy + 1) * length_y, z), - (ix * length_x, (iy + 1) * length_y, z)]: - - upper_corner = (corner[0], corner[1], z + length_z) - if upper_corner not in node_map: - model.node(current_node_id, *upper_corner) - node_map[upper_corner] = current_node_id - current_node_id += 1 - - column_key = tuple(sorted([node_map[corner], node_map[upper_corner]])) - - if column_key not in column_set: - - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(node_map[corner]) - XYZJ = model.nodeCoord(node_map[upper_corner]) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - - model.element('elasticBeamColumn', current_ele_id, - node_map[corner], node_map[upper_corner], - column.A, column.E, column.G, column.J, - column.Iweak, column.Istrong, geoTag, '-mass', 463) - current_ele_id += 1 - column_set.add(column_key) - - corners.append(upper_corner) - corner_nodes.append(node_map[upper_corner]) - - - # Create beams at the first floor level - z = base_z + length_z - for ix in range(num_bay_x): - for iy in range(num_bay_y): - for side in range(4): - prev_node = None - num_steps = num_per_side_x if side % 2 == 0 else num_per_side_y - for i in range(num_steps): - x, y = (ix * length_x + i * spacing, iy * length_y) if side == 0 else \ - ((ix + 1) * length_x, iy * length_y + i * spacing) if side == 1 else \ - (ix * length_x + length_x - i * spacing, iy * length_y + length_y) if side == 2 else \ - (ix * length_x, iy * length_y + length_y - i * spacing) - coord = (x, y, z) - if coord not in node_map: - model.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - current_node_id += 1 - new_node_id = node_map[coord] - - if prev_node is not None and tuple(sorted([prev_node, new_node_id])) not in beam_set: - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(prev_node) - XYZJ = model.nodeCoord(new_node_id) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] if side % 2 == 0 else [1, 0, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - model.element('elasticBeamColumn', current_ele_id, prev_node, new_node_id, beam.A, beam.E, beam.G, beam.J, beam.Iweak, beam.Istrong, geoTag, '-mass', 90) - beam_set.add(tuple(sorted([prev_node, new_node_id]))) - current_ele_id += 1 - - prev_node = new_node_id - - return current_node_id, current_ele_id, corner_nodes, geoTag_counter - - - -def create_model(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - m_nsc, f_nsc, counter, slab_point): - ndm = 3 - ndf = 6 - -# model = ops.Model(ndm=ndm, ndf=ndf) - ops.wipe() - ops.model("basic", "-ndm", ndm, "-ndf", ndf) - model = ops - - #%% Structural elements - - W14X311 = StructuralElements( - axial_area=0.059, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=6.701E-04, - moment_of_inertia_z=1.802E-03 - ) - - W10X60 = StructuralElements( - axial_area=0.0114, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=1.419E-4, - moment_of_inertia_z=4.826E-05 - ) - - - - #%% - - modify = num_story - 2 - node_id = 1 - eleTag = 1 - node_map = {} # Dictionary to map coordinates to node IDs - column_set = set() # Set to track created columns to avoid duplication - beam_set = set() # Set to track created beams to avoid duplication - corners =[] - corner_nodes = [] - slab_id = 1 - vecxz_to_geoTag = {} - geoTag_counter = 0 - - for i in range(0, num_story*length_z, length_z): - current_node_id, current_ele_id, corner_nodes, geoTag_counter = \ - model3D(model, modify, node_id, length_x, length_y, length_z, i, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - W14X311, W10X60, - node_map, column_set, beam_set,corners,corner_nodes) - - node_id = current_node_id - eleTag = current_ele_id - - - #%% ADDITIONAL MASS - m1 = 0 # Mass in kg - # m1 = 9076 - unique_nodes = set(corner_nodes) # Convert to set to remove duplicates - - # all_node_tags = ops.getNodeTags() - # Assign mass to each unique node - for node_id in unique_nodes: - model.mass(node_id, m1, m1, m1, 1.0e-10, 1.0e-10, 1.0e-10) - - - #%% SLAB - slabs = slab( - elastic_modulus = 2.486E10, - poisson_ratio = 0.2, - thickness = 0.2, - density = 2402.7696, - mesh_size = spacing - ) - - # current_ele_id, slab_id, closest_nodes = create_slabs(model, corner_nodes, eleTag, slab_id, slabs) - create_slabs(model, corner_nodes, eleTag, slab_id, slabs) - - - # Tie nodes - if True: - for ndI in model.getNodeTags(): - XYZI = np.array(model.nodeCoord(ndI)) - for ndJ in model.getNodeTags(): - if ndI >= ndJ: - continue - XYZJ = np.array(model.nodeCoord(ndJ)) - if np.linalg.norm(XYZJ-XYZI) < 1e-8: - model.equalDOF(ndI,ndJ,1,2,3,4,5,6) - - # - # Non-structural component - # - target_node_id = target_node(model, target_coord) - print(target_node_id, target_coord) - slab_loc = model.nodeCoord(target_node_id) - - slab_nodetag = target_node_id - allTags = model.getNodeTags() - nsc_nodetag = allTags[-1] + 1 - - L_nsc = 1.0 # m - - model.node(nsc_nodetag, slab_loc[0], slab_loc[1], slab_loc[2]+L_nsc) - - # W10X60 - - axial_area_nsc = 1 - E_nsc = 4*math.pi**2*m_nsc*f_nsc**2 - G_nsc = 3846154 - Jxx_nsc = 0.1408 - Iy_nsc = 0.0833 - Iz_nsc = 0.0833 - - all_eletag =model.getEleTags() - nsc_eletag = all_eletag[-1] + 1 - - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(slab_nodetag) - XYZJ = model.nodeCoord(nsc_nodetag) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - model.element('elasticBeamColumn', nsc_eletag, - slab_nodetag, nsc_nodetag, axial_area_nsc, - E_nsc, G_nsc, Jxx_nsc, Iy_nsc, Iz_nsc, geoTag) - - model.mass(nsc_nodetag, 1.0e-10,1.0e-10, m_nsc , 1.0e-10, 1.0e-10, 1.0e-10) - - model.constraints('Plain') - model.numberer('RCM') - model.system('UmfPack') - model.analysis("Transient") - return model - - -def dynamic_analysis(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - dt, npts, eq_data, m_nsc, RSN_num, f_nsc, counter, slab_point, gm_sf): - - model = create_model(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - m_nsc, f_nsc, counter, slab_point) - - - - - # opsv.plot_model() - - df, w = eigenvalue_analysis(n_modes, plot_mode_shapes=True) - - - #%% DAMPING - zeta = 0.02 # percentage of critical damping - a0 = zeta * 2.0 * w[0] * w[1] / (w[0] + w[1]) # mass damping coefficient based on first and second modes - a1 = zeta * 2.0 / (w[0] + w[1]) # stiffness damping coefficient based on first and second modes - # assign damping to frame beams and columns - - model.rayleigh(a0, a1, 0, 0) - - - # zeta_nsc = 0.02 - - # a0_nsc = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) # mass damping coefficient based on first and second modes - # a1_nsc = zeta_nsc * 2.0 / (w[3] + w[4]) # stiffness damping coefficient based on first and second modes - # # assign damping to frame beams and columns - - # ops.region(1, '-eleRange', 1, 120, '-rayleigh',a0, a1,0,0) - # ops.region(2, '-ele', 121, '-rayleigh', a0_nsc, a1_nsc, 0,0) - - # if w[0] <= f_nsc < w[1]: - # a0 = zeta_nsc * 2.0 * w[0] * w[1] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[0] + w[1]) - # elif w[1] <= f_nsc < w[2]: - # a0 = zeta_nsc * 2.0 * w[1] * w[2] / (w[1] + w[2]) - # a1 = zeta_nsc * 2.0 / (w[1] + w[2]) - # elif w[2] <= f_nsc < w[3]: - # a0 = zeta_nsc * 2.0 * w[2] * w[3] / (w[2] + w[3]) - # a1 = zeta_nsc * 2.0 / (w[2] + w[3]) - # elif w[3] <= f_nsc < w[4]: - # a0 = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[3] + w[4]) - - - # elif w[9] <= f_nsc < w[10]: - # a0 = zeta_nsc * 2.0 * w[9] * w[10] / (w[9] + w[10]) - # a1 = zeta_nsc * 2.0 / (w[9] + w[10]) - - - - #%% DYNAMIC ANALYSIS - - GM_direction = 3 - timeSeries_tag = 2 - pattern_tag = 2 - - G = gm_sf * 9.81 - model.timeSeries('Path', timeSeries_tag, '-dt', dt, '-values', *eq_data, '-factor', G) - model.pattern('UniformExcitation', pattern_tag, GM_direction, '-accel', timeSeries_tag) - - #%% DATA DIRECTORY - Output = "Acc Output" - NSCacc_path = f'Acc Output/absNSCacc_RSN{RSN_num}.out' - slabacc_path = f'Acc Output/absSlabacc_RSN{RSN_num}.out' - os.makedirs(Output, exist_ok = True) - # NSC - model.recorder('Node','-file', NSCacc_path ,'-timeSeries',timeSeries_tag,'-time', '-node', nsc_nodetag, '-dof',3, 'accel' ) - - # Slab - model.recorder('Node','-file',slabacc_path,'-timeSeries', timeSeries_tag,'-time', '-node', slab_nodetag, '-dof',3, 'accel' ) - - - # Dyanmic analysis parameters - model.wipeAnalysis() - model.constraints('Plain') - model.numberer('RCM') - model.system('UmfPack') - model.test('NormDispIncr', 1.0e-8, 50) - model.algorithm('NewtonLineSearch') - model.integrator('Newmark', 0.5, 0.25) - model.analysis('Transient') - - ok = model.analyze(npts, dt) - if ok == 0: - print("Dynamic analysis complete") - else: - print("Dynamic analysis did not converge") - - - NSC_data = np.genfromtxt(NSCacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - slab_data = np.genfromtxt(slabacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - - # t = NSC_data[:, 0] # Time data - NSC_acc = NSC_data[:, 1] # NSC acceleration data - slab_acc = slab_data[:, 1] # Slab acceleration data - print(f"Analysis completed successfully for RSN{RSN_num}.") - - # Max NSC accelerations - max_NSCacc = np.max(np.absolute(NSC_acc)) - - # Max slab accelerations - max_slabacc = np.max(np.absolute(slab_acc)) - - - return max_NSCacc, max_slabacc - -# plt.close('all') -# dynamic_analysis() diff --git a/examples/shellframe/model3D_v1.py b/examples/shellframe/model3D_v1.py deleted file mode 100644 index a4dce77c..00000000 --- a/examples/shellframe/model3D_v1.py +++ /dev/null @@ -1,590 +0,0 @@ -import openseespy.opensees as ops -#import opsvis as opsv -import math -import pandas as pd -import os -import numpy as np -import matplotlib.pyplot as plt - - - -class StructuralElements: - def __init__(self, axial_area, elastic_modulus, shear_modulus, torsional_constant, moment_of_inertia_y, moment_of_inertia_z): - self.A = axial_area - self.E = elastic_modulus - self.G = shear_modulus - self.J = torsional_constant - self.Iweak = moment_of_inertia_y - self.Istrong = moment_of_inertia_z - - -class slab: - def __init__(self, elastic_modulus, poisson_ratio, thickness, density, mesh_size): - self.E = elastic_modulus - self.nu = poisson_ratio - self.h = thickness - self.rho = density - self.mesh_size = mesh_size - - -def get_last_node_tag(model): - """ - Returns the last node tag defined in the OpenSeesPy model. - - Returns: - int: The tag of the last node. - """ - all_node_tags = model.getNodeTags() - if all_node_tags: # Check if the list is not empty - return all_node_tags[-1] - else: - return 0 # Return None if no nodes have been defined - - -def get_last_element_tag(model): - """ - Returns the last element tag defined in the OpenSeesPy model. - - Returns: - int: The tag of the last element. - """ - all_ele_tags = model.getEleTags() - if all_ele_tags: # Check if the list is not empty - return all_ele_tags[-1] - else: - return 0 # Return None if no nodes have been defined - -def find_closest_node(model, midpoint): - - # Loop through all node tags to find the closest node - for node_id in model.getNodeTags(): - coord = np.array(model.nodeCoord(node_id)) - - if np.linalg.norm(coord - midpoint) < 10**-8: - closest_node = node_id - - return closest_node - -def target_node(model, target_coord): - all_node_tags = model.getNodeTags() - for node_id in all_node_tags: - coord = np.array(model.nodeCoord(node_id)) - if np.array_equal(coord, np.array(target_coord)): - return node_id - return None - -def create_slabs(model, corner_nodes, current_ele_id, slab_id, slab): - """ - Create slab elements using corner nodes provided in groups of four. - - Parameters: - corner_nodes (list): List of node IDs grouped by four, each group representing one slab. - current_ele_id (int): Current starting element ID for slabs. - slab_id (int): Current slab section ID. - E_beam (float): Elastic modulus. - nu (float): Poisson's ratio. - h (float): Slab thickness. - rho (float): Density of the slab material (set to zero if not needed). - mesh_size (float): Mesh size for defining the line elements. - """ - min_distance = float('inf') - closest_node = None - closest_nodes = [] - for i in range(0, len(corner_nodes), 4): - if i + 3 < len(corner_nodes): - line_tags = [] - node_coords = [] - node_ids = [] - - model.section('ElasticMembranePlateSection', slab_id, slab.E, slab.nu, slab.h, slab.rho) - - for j in range(4): - start_node = corner_nodes[i + j] - end_node = corner_nodes[i + (j + 1) % 4] - line_tag = current_ele_id - model.mesh('line', line_tag, 2, *[start_node, end_node], 0, 6, slab.mesh_size) - line_tags.append(line_tag) - current_ele_id += 1 - - - node_coords.append(np.array(model.nodeCoord(start_node))) - - - # Create the shell element using the line meshes - model.mesh('quad', current_ele_id, 4, *line_tags, 0, 6, slab.mesh_size, 'ShellMITC4', 1) - current_ele_id += 1 - slab_id += 1 - - # Calculate the midpoint of the slab - midpoint = np.mean(node_coords, axis=0) - - # Find the closest node to the midpoint - closest_node = find_closest_node(model, midpoint) - closest_nodes.append(closest_node) - - # print("Midpoint of the slab:", midpoint) - # print("Node closest to the midpoint:", closest_node) - - return current_ele_id, slab_id, closest_nodes - - -def eigenvalue_analysis(model, n_modes, plot_mode_shapes): - - - """ - Perform a modal analysis on a structure modeled in OpenSees and print the results. - - Parameters: - n_modes (int): Number of modes to analyze. - plot_mode_shapes (bool): If True, plot the mode shapes for each mode. - """ - lambdaN = model.eigen(n_modes) # eigenvalue analysis for nEigenJ modes - - # Calculate circular frequencies (w) for each mode - w = [math.sqrt(lambda_val) for lambda_val in lambdaN] - - # Set the font to Times New Roman - plt.rcParams['font.serif'] = 'Times New Roman' - plt.rcParams['font.family'] = 'serif' - plt.rcParams.update({ - 'font.size': 16, # General font size - 'axes.labelsize': 14, - 'xtick.labelsize': 14, - 'ytick.labelsize': 14 - }) - - # Assuming 'w' contains angular frequencies for each mode - # Calculate natural frequencies (f) for each mode - frequencies = [frequency / (2.0 * math.pi) for frequency in w] - - # Calculate periods (T) for each mode - periods = [1 / frequency for frequency in frequencies] - - # Creating a DataFrame - df = pd.DataFrame({ - 'Frequency (Hz)': frequencies, - 'Period (s)': periods - }, index=[f"Mode {i+1}" for i in range(len(frequencies))]) - - - print(df) - print("Modal Analysis: Successful.") - - # for i in range(1, len(frequencies) + 1): - # opsv.plot_mode_shape(i) - - # # Retrieve frequency and period for the current mode - # freq = df.loc[f"Mode {i}", 'Frequency (Hz)'] - # period = df.loc[f"Mode {i}", 'Period (s)'] - - # # Setting the title using Greek letters for mode shapes - # plt.title(f'$\\phi_{{{i}}}$ - Freq: {freq:.2f} Hz, Period: {period:.2f} s', fontsize=12) - - return df, w - - - -def model3D(model, modify, node_id, length_x, length_y, length_z, base_z, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - column, beam, - node_map, column_set, beam_set,corners,corner_nodes): - """ - Create nodes, columns, and beams in multiple square patterns in 3D space, - with fixed nodes only at the ground level z = 0, and beams beginning from the first floor. - - Parameters: - All parameters as previously defined, with the addition of: - base_z (float): Base z-coordinate from which columns start. - """ - num_per_side_x = int(length_x / spacing) + 1 - num_per_side_y = int(length_y / spacing) + 1 - current_node_id = node_id - current_ele_id = eleTag - - - # Loop over the grid defined by num_bay_x and num_bay_y - for ix in range(num_bay_x): - for iy in range(num_bay_y): - # Generate corners for each square at the base and subsequent levels - for level in range(num_story-modify): # Assuming two levels: ground and one above - z = base_z + level * length_z - for dx in [0, length_x]: - for dy in [0, length_y]: - x = ix * length_x + dx - y = iy * length_y + dy - coord = (x, y, z) - if coord not in node_map: - model.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - if z == 0: # Apply fixity only at the ground level - model.fix(current_node_id, 1, 1, 1, 1, 1, 1) - current_node_id += 1 - - # Create columns from base level to the next level if not the top level - if level < 1: # Adjust if more levels are needed - for corner in [(ix * length_x, iy * length_y, z), - ((ix + 1) * length_x, iy * length_y, z), - ((ix + 1) * length_x, (iy + 1) * length_y, z), - (ix * length_x, (iy + 1) * length_y, z)]: - - upper_corner = (corner[0], corner[1], z + length_z) - if upper_corner not in node_map: - model.node(current_node_id, *upper_corner) - node_map[upper_corner] = current_node_id - current_node_id += 1 - - column_key = tuple(sorted([node_map[corner], node_map[upper_corner]])) - - if column_key not in column_set: - - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(node_map[corner]) - XYZJ = model.nodeCoord(node_map[upper_corner]) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - - model.element('elasticBeamColumn', current_ele_id, - node_map[corner], node_map[upper_corner], - column.A, column.E, column.G, column.J, - column.Iweak, column.Istrong, geoTag, '-mass', 463) - current_ele_id += 1 - column_set.add(column_key) - - corners.append(upper_corner) - corner_nodes.append(node_map[upper_corner]) - - - # Create beams at the first floor level - z = base_z + length_z - for ix in range(num_bay_x): - for iy in range(num_bay_y): - for side in range(4): - prev_node = None - num_steps = num_per_side_x if side % 2 == 0 else num_per_side_y - for i in range(num_steps): - x, y = (ix * length_x + i * spacing, iy * length_y) if side == 0 else \ - ((ix + 1) * length_x, iy * length_y + i * spacing) if side == 1 else \ - (ix * length_x + length_x - i * spacing, iy * length_y + length_y) if side == 2 else \ - (ix * length_x, iy * length_y + length_y - i * spacing) - coord = (x, y, z) - if coord not in node_map: - model.node(current_node_id, x, y, z) - node_map[coord] = current_node_id - current_node_id += 1 - new_node_id = node_map[coord] - - if prev_node is not None and tuple(sorted([prev_node, new_node_id])) not in beam_set: - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(prev_node) - XYZJ = model.nodeCoord(new_node_id) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] if side % 2 == 0 else [1, 0, 0] # Assuming vecxy is global vertical - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - model.element('elasticBeamColumn', current_ele_id, prev_node, new_node_id, beam.A, beam.E, beam.G, beam.J, beam.Iweak, beam.Istrong, geoTag, '-mass', 90) - beam_set.add(tuple(sorted([prev_node, new_node_id]))) - current_ele_id += 1 - - prev_node = new_node_id - - return current_node_id, current_ele_id, corner_nodes, geoTag_counter - - - -def create_model(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - m_nsc, f_nsc, counter, slab_point): - ndm = 3 - ndf = 6 - -# model = ops.Model(ndm=ndm, ndf=ndf) - ops.wipe() - ops.model("basic", "-ndm", ndm, "-ndf", ndf) - model = ops - - #%% Structural elements - - W14X311 = StructuralElements( - axial_area=0.059, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=6.701E-04, - moment_of_inertia_z=1.802E-03 - ) - - W10X60 = StructuralElements( - axial_area=0.0114, - elastic_modulus=1.999e11, - shear_modulus=7.690e10, - torsional_constant=5.421e-20, - moment_of_inertia_y=1.419E-4, - moment_of_inertia_z=4.826E-05 - ) - - - - #%% - - modify = num_story - 2 - node_id = 1 - eleTag = 1 - node_map = {} # Dictionary to map coordinates to node IDs - column_set = set() # Set to track created columns to avoid duplication - beam_set = set() # Set to track created beams to avoid duplication - corners =[] - corner_nodes = [] - slab_id = 1 - vecxz_to_geoTag = {} - geoTag_counter = 0 - - for i in range(0, num_story*length_z, length_z): - current_node_id, current_ele_id, corner_nodes, geoTag_counter = \ - model3D(model, modify, node_id, length_x, length_y, length_z, i, spacing, num_bay_x, num_bay_y, num_story, eleTag, - geoTag_counter, vecxz_to_geoTag, - W14X311, W10X60, - node_map, column_set, beam_set,corners,corner_nodes) - - node_id = current_node_id - eleTag = current_ele_id - - - #%% ADDITIONAL MASS - m1 = 0 # Mass in kg - # m1 = 9076 - unique_nodes = set(corner_nodes) # Convert to set to remove duplicates - - # all_node_tags = ops.getNodeTags() - # Assign mass to each unique node - for node_id in unique_nodes: - model.mass(node_id, m1, m1, m1, 1.0e-10, 1.0e-10, 1.0e-10) - - - #%% SLAB - slabs = slab( - elastic_modulus = 2.486E10, - poisson_ratio = 0.2, - thickness = 0.2, - density = 2402.7696, - mesh_size = spacing - ) - - # current_ele_id, slab_id, closest_nodes = create_slabs(model, corner_nodes, eleTag, slab_id, slabs) - create_slabs(model, corner_nodes, eleTag, slab_id, slabs) - - - # Tie nodes - if True: - for ndI in model.getNodeTags(): - XYZI = np.array(model.nodeCoord(ndI)) - for ndJ in model.getNodeTags(): - if ndI >= ndJ: - continue - XYZJ = np.array(model.nodeCoord(ndJ)) - if np.linalg.norm(XYZJ-XYZI) < 1e-8: - model.equalDOF(ndI,ndJ,1,2,3,4,5,6) - - # - # Non-structural component - # - target_node_id = target_node(model, target_coord) - slab_loc = model.nodeCoord(target_node_id) - - slab_nodetag = target_node_id - allTags = model.getNodeTags() - nsc_nodetag = allTags[-1] + 1 - - L_nsc = 1.0 # m - - model.node(nsc_nodetag, slab_loc[0], slab_loc[1], slab_loc[2]+L_nsc) - - # W10X60 - - axial_area_nsc = 1 - E_nsc = 4*math.pi**2*m_nsc*f_nsc**2 - G_nsc = 3846154 - Jxx_nsc = 0.1408 - Iy_nsc = 0.0833 - Iz_nsc = 0.0833 - - all_eletag =model.getEleTags() - nsc_eletag = all_eletag[-1] + 1 - - # Local x-axis from nodal coordinates - XYZI = model.nodeCoord(slab_nodetag) - XYZJ = model.nodeCoord(nsc_nodetag) - xaxis = np.subtract(XYZJ, XYZI) - - # Vectors in the local x-y and x-z planes - vecxy = [0, 1, 0] - vecxz = np.cross(xaxis, vecxy) # What OpenSees expects - - # Round the vecxz components to avoid floating-point precision issues - vecxz_key = tuple(np.round(vecxz, decimals=6)) - - # Check if this vecxz has been used before - if vecxz_key in vecxz_to_geoTag: - geoTag = vecxz_to_geoTag[vecxz_key] - else: - geoTag = geoTag_counter - vecxz_to_geoTag[vecxz_key] = geoTag - geoTag_counter += 1 # Increment for the next new transformation - # Define the geometric transformation with the appropriate geoTag - model.geomTransf('Linear', geoTag, *vecxz) - - model.element('elasticBeamColumn', nsc_eletag, - slab_nodetag, nsc_nodetag, axial_area_nsc, - E_nsc, G_nsc, Jxx_nsc, Iy_nsc, Iz_nsc, geoTag) - - model.mass(nsc_nodetag, 1.0e-10,1.0e-10, m_nsc , 1.0e-10, 1.0e-10, 1.0e-10) - return model - - -def dynamic_analysis(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - dt, npts, eq_data, m_nsc, RSN_num, f_nsc, counter, slab_point, gm_sf): - - model = create_model(spacing, num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - n_modes, plot_mode_shapes, - m_nsc, f_nsc, counter, slab_point) - - - - - # opsv.plot_model() - - df, w = eigenvalue_analysis(n_modes, plot_mode_shapes=True) - - - #%% DAMPING - zeta = 0.02 # percentage of critical damping - a0 = zeta * 2.0 * w[0] * w[1] / (w[0] + w[1]) # mass damping coefficient based on first and second modes - a1 = zeta * 2.0 / (w[0] + w[1]) # stiffness damping coefficient based on first and second modes - # assign damping to frame beams and columns - - model.rayleigh(a0, a1, 0, 0) - - - # zeta_nsc = 0.02 - - # a0_nsc = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) # mass damping coefficient based on first and second modes - # a1_nsc = zeta_nsc * 2.0 / (w[3] + w[4]) # stiffness damping coefficient based on first and second modes - # # assign damping to frame beams and columns - - # ops.region(1, '-eleRange', 1, 120, '-rayleigh',a0, a1,0,0) - # ops.region(2, '-ele', 121, '-rayleigh', a0_nsc, a1_nsc, 0,0) - - # if w[0] <= f_nsc < w[1]: - # a0 = zeta_nsc * 2.0 * w[0] * w[1] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[0] + w[1]) - # elif w[1] <= f_nsc < w[2]: - # a0 = zeta_nsc * 2.0 * w[1] * w[2] / (w[1] + w[2]) - # a1 = zeta_nsc * 2.0 / (w[1] + w[2]) - # elif w[2] <= f_nsc < w[3]: - # a0 = zeta_nsc * 2.0 * w[2] * w[3] / (w[2] + w[3]) - # a1 = zeta_nsc * 2.0 / (w[2] + w[3]) - # elif w[3] <= f_nsc < w[4]: - # a0 = zeta_nsc * 2.0 * w[3] * w[4] / (w[3] + w[4]) - # a1 = zeta_nsc * 2.0 / (w[3] + w[4]) - - - # elif w[9] <= f_nsc < w[10]: - # a0 = zeta_nsc * 2.0 * w[9] * w[10] / (w[9] + w[10]) - # a1 = zeta_nsc * 2.0 / (w[9] + w[10]) - - - - #%% DYNAMIC ANALYSIS - - GM_direction = 3 - timeSeries_tag = 2 - pattern_tag = 2 - - G = gm_sf * 9.81 - model.timeSeries('Path', timeSeries_tag, '-dt', dt, '-values', *eq_data, '-factor', G) - model.pattern('UniformExcitation', pattern_tag, GM_direction, '-accel', timeSeries_tag) - - #%% DATA DIRECTORY - Output = "Acc Output" - NSCacc_path = f'Acc Output/absNSCacc_RSN{RSN_num}.out' - slabacc_path = f'Acc Output/absSlabacc_RSN{RSN_num}.out' - os.makedirs(Output, exist_ok = True) - # NSC - model.recorder('Node','-file', NSCacc_path ,'-timeSeries',timeSeries_tag,'-time', '-node', nsc_nodetag, '-dof',3, 'accel' ) - - # Slab - model.recorder('Node','-file',slabacc_path,'-timeSeries', timeSeries_tag,'-time', '-node', slab_nodetag, '-dof',3, 'accel' ) - - - # Dyanmic analysis parameters - model.wipeAnalysis() - model.constraints('Plain') - model.numberer('RCM') - model.system('UmfPack') - model.test('NormDispIncr', 1.0e-8, 50) - model.algorithm('NewtonLineSearch') - model.integrator('Newmark', 0.5, 0.25) - model.analysis('Transient') - - ok = model.analyze(npts, dt) - if ok == 0: - print("Dynamic analysis complete") - else: - print("Dynamic analysis did not converge") - - - NSC_data = np.genfromtxt(NSCacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - slab_data = np.genfromtxt(slabacc_path, delimiter=' ', invalid_raise=False, filling_values=np.nan) - - # t = NSC_data[:, 0] # Time data - NSC_acc = NSC_data[:, 1] # NSC acceleration data - slab_acc = slab_data[:, 1] # Slab acceleration data - print(f"Analysis completed successfully for RSN{RSN_num}.") - - # Max NSC accelerations - max_NSCacc = np.max(np.absolute(NSC_acc)) - - # Max slab accelerations - max_slabacc = np.max(np.absolute(slab_acc)) - - - return max_NSCacc, max_slabacc - -# plt.close('all') -# dynamic_analysis() diff --git a/examples/shellframe/pyfiles.zip b/examples/shellframe/pyfiles.zip deleted file mode 100644 index 45a22dc4..00000000 Binary files a/examples/shellframe/pyfiles.zip and /dev/null differ diff --git a/examples/shellframe/render.glb b/examples/shellframe/render.glb deleted file mode 100644 index 12b02118..00000000 Binary files a/examples/shellframe/render.glb and /dev/null differ diff --git a/examples/shellframe/render.py b/examples/shellframe/render.py deleted file mode 100644 index d045c9c5..00000000 --- a/examples/shellframe/render.py +++ /dev/null @@ -1,146 +0,0 @@ -import os -import json -from pathlib import Path - -import numpy as np -import pandas as pd -import sees - - - -import model3D -#import model3D_Oregon as model3D - - -def render_model(model, file_name): - - temp_file = f"{file_name}.json" - model.printModel("-JSON", "-file", temp_file) - - # Read in the JSON that OpenSees created - with open(temp_file, "r") as f: - model_dict = json.load(f) - - os.remove(temp_file) - - # Create the rendering - artist = sees.render(model_dict, - vertical=3, - canvas="plotly") #"gltf") - - # Finally, save the rendering to the requested file -# artist.save(file_name) - sees.serve(artist) - - -def render_mode(model, mode_number, mode_scale, file_name): - - # Define a function that tells the renderer the displacement - # at a given node. This will be invoked for each node - def displ_func(tag): - return [float(mode_scale)*ui for ui in model.nodeEigenvector(tag, mode_number)] - - - temp_file = f"{file_name}.json" - model.printModel("-JSON", "-file", temp_file) - - # Read in the JSON that OpenSees created - with open(temp_file, "r") as f: - model_dict = json.load(f) - - os.remove(temp_file) - - # Create the rendering - artist = sees.render(model_dict, displ_func, - vertical=3, - canvas="gltf") - - # Finally, save the rendering to the requested file - if file_name is not None: - artist.save(file_name) - else: - sees.serve(artist) - - -# List of RSN numbers and scaling factors -rsn_numbers = [15, 20, 31, 68, 289, 740, 827, 864, 1083, 4013, 4844] -# rsn_numbers = [289] -peer_scaling = [3.4404, 1.7763, 5.3947, 2.6261, 2.4678, 4.7919, 2.7061, 1.4524, 3.2421, 4.0212, 3.4858] -# peer_scaling = [2.4678] -# List of slab points -# slab_points = ['Midpoint', 'Near column', 'Near beam'] -slab_points = ['Slab 1 Column fnsc 10'] -# Iterate over each slab point - -n_modes = 20 -plot_mode_shapes = True -m_nsc = 20 -f_nsc = 10 - - -spacing = 1 -num_bay_x = 4 -num_bay_y = 4 -length_x = 8 -length_y = 6 -length_z = 4 -num_story = 3 -story_levels = [1,2,3] - -x = 8; y = 0 -target_coords = [[x,y, length_z*3]] #[[x,y,3],[x,y,6],[x,y,9]] - - -n = 1 - -for num_story in 6,: - if num_story ==6: - story_levels = story_levels + [4, 5, 6] - target_coords[0][2] *= 2 - - for slab_point in slab_points: - # Iterate over multiple story levels - for story_level, target_coord in zip(story_levels, target_coords): - results = [] - counter = 0 - - # Render just the model -# render_model(model, None) - for RSN_num, scale_factor in zip(rsn_numbers, peer_scaling): - - model = model3D.create_model(spacing, - num_bay_x, num_bay_y, num_story, target_coord, - length_x, length_y, length_z, - m_nsc, f_nsc, counter, slab_point) - - - print(f"\t{model.eigen(n_modes)}") - - for m in reversed(range(1,n_modes)): - glb_file = Path("./renderings")/f"model-s{num_story}-m{m:02}.glb" - - - scale = 10_000.0 if m < 3 else 1000.0 - if False: - # Pick an appropriate scaling factor for the current mode. - # These were selected empirically. - scales = { - 3: 5000, - 4: 1000, - 5: 1000, - 6: 1000, - 7: 1000, # torsion - 8: 500*(num_stories/3), # vertical - 9: 500*(num_stories/3), # vertical - } - scale = scales.get(m, 10_000) - - # Render the `m`th mode with a scale of `scale` - render_mode(model, mode_number=m, mode_scale=scale, file_name=glb_file) - print(glb_file) - - n += 1 - break - - break - diff --git a/examples/shellframe/render.sh b/examples/shellframe/render.sh deleted file mode 100644 index 1d42f6a3..00000000 --- a/examples/shellframe/render.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/bash - -python -m sees $1 --extrude-outline square --show frame.surface --canvas gltf --vert 3 -o $2 diff --git a/examples/shelltwist/index.html b/examples/shelltwist/index.html index 20589720..f7781e72 100644 --- a/examples/shelltwist/index.html +++ b/examples/shelltwist/index.html @@ -775,7 +775,7 @@ - + diff --git a/examples/soliddam/index.html b/examples/soliddam/index.html index 815abfe5..b3ef5b94 100644 --- a/examples/soliddam/index.html +++ b/examples/soliddam/index.html @@ -720,7 +720,7 @@ - + diff --git a/examples/spectrum/index.html b/examples/spectrum/index.html index fb731b82..57b7a735 100644 --- a/examples/spectrum/index.html +++ b/examples/spectrum/index.html @@ -908,7 +908,7 @@ - + diff --git a/examples/thermalexamples/figures/Example1_Output.png b/examples/thermalexamples/figures/Example1_Output.png new file mode 100644 index 00000000..b1a25aa6 Binary files /dev/null and b/examples/thermalexamples/figures/Example1_Output.png differ diff --git a/examples/thermalexamples/figures/Example1_fig1.png b/examples/thermalexamples/figures/Example1_fig1.png new file mode 100644 index 00000000..daf8bda3 Binary files /dev/null and b/examples/thermalexamples/figures/Example1_fig1.png differ diff --git a/examples/thermalexamples/figures/Example1_fig2.png b/examples/thermalexamples/figures/Example1_fig2.png new file mode 100644 index 00000000..f7b4b595 Binary files /dev/null and b/examples/thermalexamples/figures/Example1_fig2.png differ diff --git a/examples/thermalexamples/figures/Example1_fig3.png b/examples/thermalexamples/figures/Example1_fig3.png new file mode 100644 index 00000000..811ec01a Binary files /dev/null and b/examples/thermalexamples/figures/Example1_fig3.png differ diff --git a/examples/thermalexamples/figures/Example1_fig4.png b/examples/thermalexamples/figures/Example1_fig4.png new file mode 100644 index 00000000..6e2869a9 Binary files /dev/null and b/examples/thermalexamples/figures/Example1_fig4.png differ diff --git a/examples/thermalexamples/figures/Example2_fig1.png b/examples/thermalexamples/figures/Example2_fig1.png new file mode 100644 index 00000000..7933ec7a Binary files /dev/null and b/examples/thermalexamples/figures/Example2_fig1.png differ diff --git a/examples/thermalexamples/figures/Example2_fig2.png b/examples/thermalexamples/figures/Example2_fig2.png new file mode 100644 index 00000000..f7b4b595 Binary files /dev/null and b/examples/thermalexamples/figures/Example2_fig2.png differ diff --git a/examples/thermalexamples/figures/Example2_output1.png b/examples/thermalexamples/figures/Example2_output1.png new file mode 100644 index 00000000..8f5d7003 Binary files /dev/null and b/examples/thermalexamples/figures/Example2_output1.png differ diff --git a/examples/thermalexamples/figures/Example2_output2.png b/examples/thermalexamples/figures/Example2_output2.png new file mode 100644 index 00000000..92649974 Binary files /dev/null and b/examples/thermalexamples/figures/Example2_output2.png differ diff --git a/examples/thermalexamples/figures/Example3_Output.png b/examples/thermalexamples/figures/Example3_Output.png new file mode 100644 index 00000000..a8f5e8cf Binary files /dev/null and b/examples/thermalexamples/figures/Example3_Output.png differ diff --git a/examples/thermalexamples/figures/Example3_fig1.png b/examples/thermalexamples/figures/Example3_fig1.png new file mode 100644 index 00000000..cf9bd489 Binary files /dev/null and b/examples/thermalexamples/figures/Example3_fig1.png differ diff --git a/examples/thermalexamples/figures/Example3_fig2.png b/examples/thermalexamples/figures/Example3_fig2.png new file mode 100644 index 00000000..8cd17a30 Binary files /dev/null and b/examples/thermalexamples/figures/Example3_fig2.png differ diff --git a/examples/thermalexamples/figures/Example3_fig3.png b/examples/thermalexamples/figures/Example3_fig3.png new file mode 100644 index 00000000..1a4f10d1 Binary files /dev/null and b/examples/thermalexamples/figures/Example3_fig3.png differ diff --git a/examples/thermalexamples/figures/Example4_FireCurve.png b/examples/thermalexamples/figures/Example4_FireCurve.png new file mode 100644 index 00000000..a6926628 Binary files /dev/null and b/examples/thermalexamples/figures/Example4_FireCurve.png differ diff --git a/examples/thermalexamples/figures/Example4_Output.png b/examples/thermalexamples/figures/Example4_Output.png new file mode 100644 index 00000000..3ea713a0 Binary files /dev/null and b/examples/thermalexamples/figures/Example4_Output.png differ diff --git a/examples/thermalexamples/figures/Example4_fig1.png b/examples/thermalexamples/figures/Example4_fig1.png new file mode 100644 index 00000000..6fdd2ab9 Binary files /dev/null and b/examples/thermalexamples/figures/Example4_fig1.png differ diff --git a/examples/thermalexamples/figures/Example4_fig2.png b/examples/thermalexamples/figures/Example4_fig2.png new file mode 100644 index 00000000..d9b89387 Binary files /dev/null and b/examples/thermalexamples/figures/Example4_fig2.png differ diff --git a/examples/thermalexamples/figures/Example5_U1.png b/examples/thermalexamples/figures/Example5_U1.png new file mode 100644 index 00000000..018f5e29 Binary files /dev/null and b/examples/thermalexamples/figures/Example5_U1.png differ diff --git a/examples/thermalexamples/figures/Example5_U2.png b/examples/thermalexamples/figures/Example5_U2.png new file mode 100644 index 00000000..c9a9b800 Binary files /dev/null and b/examples/thermalexamples/figures/Example5_U2.png differ diff --git a/examples/thermalexamples/figures/Example5_fig1.png b/examples/thermalexamples/figures/Example5_fig1.png new file mode 100644 index 00000000..05366f40 Binary files /dev/null and b/examples/thermalexamples/figures/Example5_fig1.png differ diff --git a/examples/thermalexamples/figures/WelcomePage_fig1.png b/examples/thermalexamples/figures/WelcomePage_fig1.png new file mode 100644 index 00000000..ec2b9975 Binary files /dev/null and b/examples/thermalexamples/figures/WelcomePage_fig1.png differ diff --git a/examples/thermalexamples/figures/WelcomePage_fig2.png b/examples/thermalexamples/figures/WelcomePage_fig2.png new file mode 100644 index 00000000..824fbd9b Binary files /dev/null and b/examples/thermalexamples/figures/WelcomePage_fig2.png differ diff --git a/examples/thermalexamples/figures/WelcomePage_fig3.png b/examples/thermalexamples/figures/WelcomePage_fig3.png new file mode 100644 index 00000000..e5751037 Binary files /dev/null and b/examples/thermalexamples/figures/WelcomePage_fig3.png differ diff --git a/examples/thermalexamples/figures/Wsection_FiberSection.png b/examples/thermalexamples/figures/Wsection_FiberSection.png new file mode 100644 index 00000000..f806797e Binary files /dev/null and b/examples/thermalexamples/figures/Wsection_FiberSection.png differ diff --git a/examples/thermalexamples/files/EXAMPLE2_OUTPUT.zip b/examples/thermalexamples/files/EXAMPLE2_OUTPUT.zip new file mode 100644 index 00000000..11802d7e Binary files /dev/null and b/examples/thermalexamples/files/EXAMPLE2_OUTPUT.zip differ diff --git a/examples/thermalexamples/files/Ex4_NodalTemperatureFiles.zip b/examples/thermalexamples/files/Ex4_NodalTemperatureFiles.zip new file mode 100644 index 00000000..30ffa0e6 Binary files /dev/null and b/examples/thermalexamples/files/Ex4_NodalTemperatureFiles.zip differ diff --git a/examples/thermalexamples/files/Example1.tcl b/examples/thermalexamples/files/Example1.tcl new file mode 100644 index 00000000..a27d1eef --- /dev/null +++ b/examples/thermalexamples/files/Example1.tcl @@ -0,0 +1,127 @@ +########################################################################################## +# Code by Walker Maddalozzo & Dr. Erica Fischer - Oregon State Univeristy - April 2019 +# Example: simple beam with thermal expansion +# Units: Newtons, mm, seconds + + + wipe all; # clear memory of past model definitions + model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm = #dimension, ndf = #dofs + #source DisplayModel2D.tcl; # procedure for displaying a 2D perspective of model + #source DisplayPlane.tcl; # procedure for displaying a plane in a model + set dataDir Examples/Example1_OUTPUT; # name of output folder + file mkdir $dataDir; # create output folder + + +#------------------------------------------------------------------------------ +# Geometric model +# ________ +# | | | 4 fibers in section +# 1 |------------------------|2 |____|____| 0.4m +# |<----------1m---------->| | | | +# |____|____| +# 0.2m +#------------------------------------------------------------------------------ +################################################################################################### +# Define Geometry, Nodes, Masses, and Constraints +################################################################################################### + + +###################################### NODE DEFINITIONS ########################################### +# http://opensees.berkeley.edu/wiki/index.php/Node_command + +# node nodetag locx locy +node 1 0 0; +node 2 1000 0; + +###################################### BOUNDRY CONDITIONS ######################################### +# http://opensees.berkeley.edu/wiki/index.php/Fix_command + +#fix nodetag dofx dofy dof moment about z [ 1 = fixed 0 = free ]; + +#Left end fixed - right end roller to allow expansion. +fix 1 1 1 0; #pinned +fix 2 0 1 0; #roller + +##################################### MATERIAL DEFINITIONS ######################################## + +set Es 210000; #Mpa # steel Young's modulus; +set Fy 250; #MPa # steel yield strength; +set b 0.001; # strain-hardening ratio; + +#uniaxialMaterial Steel01Thermal $matTag $Fy $E0 $b +uniaxialMaterial Steel01Thermal 1 $Fy $Es $b; + + +##################################### TRANSFORMATION DEFINITIONS ############################ +# http://opensees.berkeley.edu/wiki/index.php/Geometric_Transformation_Command + +#three transformation types can be chosen: Linear, PDelta, Corotational + +# transforamtion: geomTransf $type $TransfTag; +set transftag 1 +geomTransf Linear $transftag; + + +###################################### ELEMENT GEOMETRY ############################################ + + +# PATCH COMMAND: http://opensees.berkeley.edu/wiki/index.php/Patch_Command + +section FiberThermal 1 -GJ $Es { + + set numSubdivIJ 2; # horizontal + set numSubdivJK 2; # vertical + set yI -100; + set zI -200; + set yJ 100; + set zJ -200; + set yK 100; + set zK 200; + set yL -100; + set zL 200; + patch quad 1 $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL +} + + + +###################################### ELEMENT PROPERTIES ########################################### + +#dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; +element dispBeamColumnThermal 1 1 2 5 1 $transftag; + +###################################### RECORDER OUTPUTS ############################################# + +# http://opensees.berkeley.edu/wiki/index.php/Recorder_Command + +recorder Node -file $dataDir/Node2disp.out -time -node 2 -dof 1 disp; # displacements of end node (2) DOF 1 Horizontal Direction + + +###################################### THERMAL LOADS ############################################### + +# Defining tempurature data for two extreme locations. Tempturature will be linearally interpolated betweent the two locations. + +set T 1180.; #Max Temp - DEG CELCIUS +set Y1 200.; #top fiber of beam +set Y2 -200.; #Bottom fiber of beam + + +#pattern Plain $PatternTag Linear { eleLoad -ele $eleTag -type -beamThermal $MaxTemp $ExtremeFiberLoc1 $MaxTemp $ExtremeFiberLoc2 }; +pattern Plain 1 Linear { eleLoad -ele 1 -type -beamThermal $T $Y2 $T $Y1 }; + + +set Nstep 1000; +set Factor [expr 1.0/$Nstep]; + +constraints Plain; +numberer Plain; +system BandGeneral; +test NormDispIncr 1e-12 500; +algorithm Newton; +integrator LoadControl $Factor; +analysis Static; +analyze $Nstep; + + +puts "Fire Done. End Time: [getTime]" + +wipe; diff --git a/examples/thermalexamples/files/Example1_OUTPUT.zip b/examples/thermalexamples/files/Example1_OUTPUT.zip new file mode 100644 index 00000000..e2e59bc1 Binary files /dev/null and b/examples/thermalexamples/files/Example1_OUTPUT.zip differ diff --git a/examples/thermalexamples/files/Example2.tcl b/examples/thermalexamples/files/Example2.tcl new file mode 100644 index 00000000..75fd60ea --- /dev/null +++ b/examples/thermalexamples/files/Example2.tcl @@ -0,0 +1,147 @@ +########################################################################################## +# Code by Walker Maddalozzo & Dr. Erica Fischer - Oregon State Univeristy - April 2019 +# +# Example 2: simply restained beam with thermal expansion. Left half of beam stays at ambient tempurature, +# while the right side is subjected to a tempurature rise to 1180 deg Celcius. Displacement recorded at +# midsnap node of beam. +# +# Units: Newtons, m, seconds + +################################################################################################### +# Set Up & Source Definition +################################################################################################### + + wipe all; # clear memory of past model definitions + # 'basic', 'number of dimensions [ndm], number of degrees of freedom [ndf]' + model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm = #dimension, ndf = #dofs + set dataDir Example2_OUTPUT; # name of output folder + file mkdir $dataDir; # create output folder + + +############################# GEOMETERIC MODEL #################################################### +# +# ________ +# | | | 4 fibers in section +# 1 |------------2------------|3 |____|____| 200mm +# |<-----1m----|----1m----->| | | | +# |<-----------2m---------->| |____|____| +# 400mm +# +################################################################################################### +# Define Geometry, Nodes, Masses, and Constraints +################################################################################################### + + +###################################### NODE DEFINITIONS ########################################### + +#node $nodetag $locx $locy +node 1 0 0; +node 2 1000 0; #mm +node 3 2000 0; #mm + +###################################### BOUNDRY CONDITIONS ######################################### +# http://opensees.berkeley.edu/wiki/index.php/Fix_command + +#fix nodetag dofx dofy dof3(rotation) [ 1 = fixed 0 = free ]; +fix 1 1 1 0; #PINNED +fix 2 0 1 0; #vertical restraint +fix 3 1 1 0; #PINNED + +##################################### MATERIAL DEFINITIONS ######################################## + +set Es 210000; #MPa # steel initial Young's modulus; +set Fy 250; #MPa # steel initial yield strength; +set b 0.001; #0.1% # strain-hardening ratio; + +set matTag 1 +#uniaxialMaterial Steel01Thermal $matTag $Fy $E0 $b +uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b; + +##################################### TRANSFORMATION DEFINITIONS ############################ +# http://opensees.berkeley.edu/wiki/index.php/Geometric_Transformation_Command + +#three transformation types can be chosen: Linear, PDelta, Corotational + +# transforamtion: geomTransf $type $transfTag; +set transfTag 1; +geomTransf Linear $transfTag ; + + +###################################### ELEMENT GEOMETRY ############################################ +# PATCH COMMAND: http://opensees.berkeley.edu/wiki/index.php/Patch_Command + +set secTag 1; +section FiberThermal $secTag -GJ $Es { + + set numSubdivIJ 2; # horizontal + set numSubdivJK 2; # vertical + set yI -100; + set zI -200; + set yJ 100; + set zJ -200; + set yK 100; + set zK 200; + set yL -100; + set zL 200; + patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zL +} + + +###################################### ELEMENT PROPERTIES ########################################### + +#dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; + +element dispBeamColumnThermal 1 1 2 5 $secTag $transfTag; #Element 1 + +element dispBeamColumnThermal 2 2 3 5 $secTag $transfTag; + + +############################# RECORDER OUTPUTS ###################################################### + +# http://opensees.berkeley.edu/wiki/index.php/Recorder_Command + +#Displacment at center node DOF 1 (Horizontal Direction) +recorder Node -file $dataDir/MidspanNodeDisp.out -time -node 2 -dof 1 disp; + +#Boundry RXNs +recorder Node -file $dataDir/BoundryRXN.out -time -node 1 3 -dof 1 2 reaction; + +#Section forces in Element 1 & 2 +recorder Element -file $dataDir/ele_force_1.out -time -ele 1 section 2 force +recorder Element -file $dataDir/ele_force_2.out -time -ele 2 section 2 force + +####################################### THERMAL LOADS ############################################### + +set T 1180; #Max Temp - DEG CELCIUS +set Y1 -100; #Top fiber of beam - mm +set Y2 100; #Bottom fiber of beam - mm + + +#pattern Plain PatternTag Linear { eleLoad -ele $eleTag -type -beamThermal $Tempurature1 $Location 1 $Tempurature2 $Location2;} +pattern Plain 1 Linear { + eleLoad -ele 1 -type -beamThermal 0 $Y1 0 $Y2; + eleLoad -ele 2 -type -beamThermal $T $Y1 $T $Y2; +} + +set Nsteps 1000; +set Factor [expr 1.0/$Nsteps]; + + +constraints Plain; +numberer Plain; +system BandGeneral; +test NormDispIncr 1e-12 500 ; +algorithm ModifiedNewton; +integrator LoadControl $Factor; +analysis Static; +analyze $Nsteps; + + +puts "Fire Done. End Time: [getTime]" + +wipe; + + + + + diff --git a/examples/thermalexamples/files/Example3.tcl b/examples/thermalexamples/files/Example3.tcl new file mode 100644 index 00000000..99c75f51 --- /dev/null +++ b/examples/thermalexamples/files/Example3.tcl @@ -0,0 +1,203 @@ +########################################################################################## +# Code by Walker Maddalozzo & Dr. Erica Fischer - Oregon State Univeristy - April 2019 +# Example: thermal expansion & deflection of a simple beam with a uniformaly distributed load +# Units: Newtons, mm, seconds + + +################################################################################################### +# Set Up & Source Definition +################################################################################################### + wipe all; # clear memory of past model definitions + model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm = #dimension, ndf = #dofs + source WsectionThermal.tcl + + set dataDir Example3_OUTPUT; # name of output folder + file mkdir $dataDir; + + + # create output folder + +############################# GEOMETERIC MODEL ############################################ +# +# +# +# +# 1 |---2---3---4---5---6---|7 +# |<----------6m--------->| +# +# +# +############################################################################################ +# Define Geometry, Nodes, Masses, and Constraints +############################################################################################ + + +############################## NODAL DEFINITIONS ########################################## +# http://opensees.berkeley.edu/wiki/index.php/Node_command + +# node nodetag locx locy +node 1 0 0; #mm +node 2 1000 0; #mm +node 3 2000 0; #mm +node 4 3000 0; #mm +node 5 4000 0; #mm +node 6 5000 0; #mm +node 7 6000 0; #mm + + +#define boundary condition; + +#fix nodetag dofx dofy dofz [ 1 = fixed 0 = free ]; + +fix 1 1 1 0; #pinned + +#switch between pin & roller to see the effects of restraining both ends of the beam +fix 7 1 1 0; #pinned +#fix 7 0 1 0; #roller + + +############################# MATERIAL DEFINITIONS ######################################### + + +set Fy 275; #MPa # steel yield strength +set Es 210000; #MPa # steel Young's modulus +set b 0.01; # strain-hardening ratio + +set matTag 1; +#uniaxialMaterial Steel01Thermal $matTag $Fy $E0 $b +uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b; + +############################# SECTION PROPERTIES ########################################### + +# Wsection dimensions + + set d 355; #mm # depth of beam + set bf 171.5; #mm # flange width + set tf 11.5; #mm # flange thickness + set tw 7.4; #mm # web thickness + + set nfdw 8; # number of fibers along dw + set nftw 1; # number of fibers along tw + set nfbf 1; # number of fibers along bf + set nftf 4; # number of fibers along tf + + set secTag 1; + +# sources Wsection.tcl which created a fibered section using dimensions d,bf,tf,tw and the number of fibers to be created. + +# Wsection $secTag $matTag $d $bf $tf $tw $nfdw $nftw $nfbf $nftf +WsectionThermal $secTag $matTag $d $bf $tf $tw $nfdw $nftw $nfbf $nftf $Es; + + + +##################################### TRANSFORMATION DEFINITIONS ############################ +# http://opensees.berkeley.edu/wiki/index.php/Geometric_Transformation_Command + +#three transformation types can be chosen: Linear, PDelta, Corotational + +# transforamtion: geomTransf $type $transfTag; + +set transfTag 1; +# Switch between Linear & Corotational to observe 2nd-order effects +#geomTransf Linear $transfTag; +geomTransf Corotational $transfTag; + + +############################# ELEMENT PROPERTIES ########################################### + +#define beam element: dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; +#"numIntgrPts" is the number of integration points along the element; +#"TransfTag" is pre-defined coordinate-transformation; +#element choice is dispBeamColumnTemperature + +#dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag; + +element dispBeamColumnThermal 1 1 2 5 $secTag $transfTag; +element dispBeamColumnThermal 2 2 3 5 $secTag $transfTag; +element dispBeamColumnThermal 3 3 4 5 $secTag $transfTag; +element dispBeamColumnThermal 4 4 5 5 $secTag $transfTag; +element dispBeamColumnThermal 5 5 6 5 $secTag $transfTag; +element dispBeamColumnThermal 6 6 7 5 $secTag $transfTag; + + +############################# RECORDER OUTPUTS ############################################# + +recorder Node -file $dataDir/Midspan_Disp.out -time -node 4 -dof 2 disp; +recorder Node -file $dataDir/RXNs.out -time -node 1 7 -dof 2 reaction; + + + +############################# GRAVITY LOADS ################################################ + +pattern Plain 1 Linear { +#PK CREATE UNIFORM LOADS FOR BEAMS +set UDL -10; + +for {set level 1} {$level <= 6} {incr level 1} { + set eleID $level; + eleLoad -ele $eleID -type -beamUniform $UDL 0; + }} + + + + set NstepGravity 10; # apply gravity in 10 steps + set DGravity [expr 1.0/$NstepGravity]; # load increment + set Tol 1.0e-8; # convergence tolerance for test + + constraints Plain; # how it handles boundary conditions + numberer RCM; # renumber dof's to minimize band-width (optimization) + system UmfPack; # how to store and solve the system of equations in the analysis (large model: try UmfPack) + test NormDispIncr $Tol 100; # determine if convergence has been achieved at the end of an iteration step + algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration + integrator LoadControl $DGravity; # determine the next time step for an analysis + analysis Static; # define type of analysis: static or transient + analyze $NstepGravity; # apply gravity + + + + +puts "Loading Done. End Time: [getTime]" + + loadConst -time 0.0 + +############################# THERMAL LOADS ############################################### + +set T 1180; #Max Temp - DEG CELCIUS +set Y1 [expr $d/2]; #top fiber of beam +set Y2 [expr -$d/2]; #Bottom fiber of beam + + +pattern Plain 3 Linear { + + + for {set level 1} {$level <= 6} {incr level 1} { + set eleID $level + eleLoad -ele $eleID -type -beamThermal $T $Y2 $T $Y1; + } + } + + + set Nstep 1000; + set Factor [expr 1.0/$Nstep]; # first load increment; + + constraints Plain; # how it handles boundary conditions + numberer Plain; # renumber dof's to minimize band-width (optimization) + system UmfPack; + test NormDispIncr 1e-6 1000; + algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration + integrator LoadControl $Factor; # determine the next time step for an analysis + analysis Static; # define type of analysis static or transient + analyze $Nstep; # apply fire load + + + +puts "Fire Done. End Time: [getTime]" + +wipe; + + + + + + + diff --git a/examples/thermalexamples/files/Example3_OUTPUT.zip b/examples/thermalexamples/files/Example3_OUTPUT.zip new file mode 100644 index 00000000..aa17c5d1 Binary files /dev/null and b/examples/thermalexamples/files/Example3_OUTPUT.zip differ diff --git a/examples/thermalexamples/files/Example4.tcl b/examples/thermalexamples/files/Example4.tcl new file mode 100644 index 00000000..cea76cb1 --- /dev/null +++ b/examples/thermalexamples/files/Example4.tcl @@ -0,0 +1,268 @@ +########################################################################################## +# Code by Walker Maddalozzo & Dr. Erica Fischer - Oregon State Univeristy - May 2019 +# Example: 2D frame: heated with a parametric fire curve +# Units: Newtons, m, seconds + +wipe; +set dataDir Example4_OUTPUT; # name of output folder +file mkdir $dataDir; # create output folder +model BasicBuilder -ndm 2 -ndf 3; +source WsectionThermal.tcl; + + +############################## NODAL DEFINITIONS ########################################## +# http://opensees.berkeley.edu/wiki/index.php/Node_command + +#Left column +node 1 0.0 0.0; +node 2 0.0 350; +node 3 0.0 700; +node 4 0.0 1050; +node 5 0.0 1400; +node 6 0.0 1750; +node 7 0.0 2100; +node 8 0.0 2450; +node 9 0.0 2800; +node 10 0.0 3150; +node 11 0.0 3500; + +#Beam +node 12 6000 0.0; +node 13 6000 350; +node 14 6000 700; +node 15 6000 1050; +node 16 6000 1400; +node 17 6000 1750; +node 18 6000 2100; +node 19 6000 2450; +node 20 6000 2800; +node 21 6000 3150; +node 22 6000 3500; + +# Right column +node 23 600 3500; +node 24 1200 3500; +node 25 1800 3500; +node 26 2400 3500; +node 27 3000 3500; +node 28 3600 3500; +node 29 4200 3500; +node 30 4800 3500; +node 31 5400 3500; + +###################################### BOUNDRY CONDITIONS ######################################### +# http://opensees.berkeley.edu/wiki/index.php/Fix_command + +#fix nodetag dofx dofy dof moment about z [ 1 = fixed 0 = free ]; +fix 1 1 1 1; +fix 12 1 1 1; + +#For this analysis it is considered that the horizontal displacements of nodes 11 & 22 are restricted to represent lateral bracing. +fix 11 1 0 0; +fix 22 1 0 0; + + +############################# MATERIAL DEFINITIONS ######################################### + +#Steel01Thermal Material properties +set Es 210000; #MPa # steel Young's modulus; +set Fy 275; #MPa # steel yield strength; +set b 0.01; # strain-hardening ratio 1% + +set matTag 1; + +uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b; + +############################### MEMBER SECTIONS ############################################# + +set secTag 1; +set d 160; # depth +set bf 82; # flange width +set tf 7.4; # flange thickness +set tw 5.0; # web thickness + +set nfdw 8; # number of fibers along dw +set nftw 1; # number of fibers along tw +set nfbf 1; # number of fibers along bf +set nftf 4; # number of fibers along tf + + +# Wsection $sectag +WsectionThermal $secTag $matTag $d $bf $tf $tw $nfdw $nftw $nfbf $nftf $Es; + + +##################################### TRANSFORMATION DEFINITIONS ############################ +# http://opensees.berkeley.edu/wiki/index.php/Geometric_Transformation_Command + +#three transformation types can be chosen: Linear, PDelta, Corotational + +# transforamtion: geomTransf $type $TransfTag; +set transfTag 1 +geomTransf Corotational $transfTag ; + + +############################# ELEMENT PROPERTIES ########################################### + +#define beam element: dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; +#"numIntgrPts" is the number of integration points along the element; +#"TransfTag" is pre-defined coordinate-transformation; +#element choice is dispBeamColumnTemperature + +#dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; + +element dispBeamColumnThermal 1 1 2 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 2 2 3 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 3 3 4 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 4 4 5 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 5 5 6 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 6 6 7 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 7 7 8 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 8 8 9 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 9 9 10 3 $secTag $transfTag; #column1 +element dispBeamColumnThermal 10 10 11 3 $secTag $transfTag; #column1 + +element dispBeamColumnThermal 11 12 13 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 12 13 14 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 13 14 15 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 14 15 16 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 15 16 17 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 16 17 18 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 17 18 19 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 18 19 20 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 19 20 21 3 $secTag $transfTag; #column2 +element dispBeamColumnThermal 20 21 22 3 $secTag $transfTag; #column2 + +element dispBeamColumnThermal 21 11 23 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 22 23 24 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 23 24 25 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 24 25 26 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 25 26 27 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 26 27 28 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 27 28 29 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 28 29 30 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 29 30 31 3 $secTag $transfTag; #beam1 +element dispBeamColumnThermal 30 31 22 3 $secTag $transfTag; #beam1 + +############################# RECORDER OUTPUTS ############################################# + +#Reaction forces at end nodes. (1 & 12) +recorder Node -file $dataDir/RXNS.out -time -node 1 12 -dof 2 3 reaction; + +#Displacement of the beam mid-span node (27), DOF 2 (Vertical Displacement) +recorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 27 -dof 2 disp; + + +############################# GRAVITY LOADS ################################################ + + +pattern Plain 1 Linear { +set UDL -2; + eleLoad -ele 21 -type -beamUniform $UDL 0 + eleLoad -ele 22 -type -beamUniform $UDL 0 + eleLoad -ele 23 -type -beamUniform $UDL 0 + eleLoad -ele 24 -type -beamUniform $UDL 0 + eleLoad -ele 25 -type -beamUniform $UDL 0 + eleLoad -ele 26 -type -beamUniform $UDL 0 + eleLoad -ele 27 -type -beamUniform $UDL 0 + eleLoad -ele 28 -type -beamUniform $UDL 0 + eleLoad -ele 29 -type -beamUniform $UDL 0 + eleLoad -ele 30 -type -beamUniform $UDL 0 +} + + +set Tol 1.0e-12; +set NstepGravity 10; # apply gravity in 10 steps + +constraints Plain; # boundary conditions handling +numberer RCM; # renumber dof's to minimize band-width (optimization) +system UmfPack; # how to store and solve the system of equations in the analysis (large model: try UmfPack) +test NormDispIncr $Tol 500; # determine if convergence has been achieved at the end of an iteration step | Tolerance | Number of iterations +algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration +integrator LoadControl [expr 1.0/$NstepGravity]; # time step size +analysis Static; # define type of analysis: static or transient +analyze $NstepGravity; # apply gravity + + +puts "Gravity Loading done" + +loadConst -time 0.0 + + +puts "Fire Loading" + + + + set Y9 [expr -$d/2]; + set Y8 [expr -($d/2 - 0.99*$tf)]; + set Y7 [expr -($d/2 - $tf)]; + set Y6 [expr 0.0-$d*0.99]; + set Y5 0.0; + set Y4 [expr 0.0+$d*0.99]; + set Y3 [expr ($d/2 - $tf)]; + set Y2 [expr ($d/2 - 0.99*$tf)]; + set Y1 [expr $d/2]; + + + +############################## BEAMS ################################################# + + +#TEMPURATURE LOADING FOR THE BEAM +pattern Plain 11 Linear { + +for {set level 21} {$level <= 30} {incr level 1} { + set eleID $level; + eleLoad -ele $eleID -type -beamThermal -source BeamTemp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1; + }} + + + +############################## COLUMNS ################################################ + + + +pattern Plain 13 Linear { + +#TEMPURATURE LOADING FOR THE LEFT COLUMN +for {set level 1} {$level <= 10} {incr level 1} { + set eleID $level; + eleLoad -ele $eleID -type -beamThermal -source Column1Temp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1; + }} + + + +#TEMPURATURE LOADING FOR THE RIGHT COLUMN +pattern Plain 14 Linear { + + +for {set level 11} {$level <= 20} {incr level 1} { + set eleID $level; + eleLoad -ele $eleID -type -beamThermal -source Column2Temp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1; + }} + + + +############################## COLUMNS ################################################### + + +set Nstep 1000; #NUMBER OF STEPS TO BE ANALYIZED + +constraints Plain; # how it handles boundary conditions +numberer Plain; # renumber dof's to minimize band-width (optimization) +system UmfPack; +test NormDispIncr 1e-12 1000; +algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration + +set Factor [expr 1.0/$Nstep]; # first load increment; +integrator LoadControl $Factor; # determine the next time step for an analysis +analysis Static; # define type of analysis static or transient +analyze $Nstep; # apply fire load + +puts "Fire done" + + + +wipe; + + + diff --git a/examples/thermalexamples/files/Example4NodalTemperatureFiles.zip b/examples/thermalexamples/files/Example4NodalTemperatureFiles.zip new file mode 100644 index 00000000..9992da48 Binary files /dev/null and b/examples/thermalexamples/files/Example4NodalTemperatureFiles.zip differ diff --git a/examples/thermalexamples/files/Example4_OUTPUT.zip b/examples/thermalexamples/files/Example4_OUTPUT.zip new file mode 100644 index 00000000..07166e59 Binary files /dev/null and b/examples/thermalexamples/files/Example4_OUTPUT.zip differ diff --git a/examples/thermalexamples/files/Example5.tcl b/examples/thermalexamples/files/Example5.tcl new file mode 100644 index 00000000..33343683 --- /dev/null +++ b/examples/thermalexamples/files/Example5.tcl @@ -0,0 +1,255 @@ +########################################################################################## +# Code by Walker Maddalozzo & Dr. Erica Fischer - Oregon State Univeristy - May 2019 +# Example: 2D frame with 2 bays: where beam and column are subjected to fire from one side +# Units: Newtons, m, seconds + + + +wipe all; +set dataDir Example5_OUTPUT; # name of output folder +file mkdir $dataDir; #create output folder + +model BasicBuilder -ndm 2 -ndf 3; #2D 3DOF + +source WsectionThermal.tcl; + + + + +############################## NODAL DEFINITIONS ########################################## +# http://opensees.berkeley.edu/wiki/index.php/Node_command + +node 1 0.000 0.000 ;#Column 1 #SUPPORT A +node 2 0.000 0.118 ;#Column 1 +node 3 0.000 0.236 ;#Column 1 +node 4 0.000 0.354 ;#Column 1 +node 5 0.000 0.472 ;#Column 1 +node 6 0.000 0.590 ;#Column 1 +node 7 0.000 0.708 ;#Column 1 +node 8 0.000 0.826 ;#Column 1 +node 9 0.000 0.944 ;#Column 1 +node 10 0.000 1.062 ;#Column 1 +node 11 0.000 1.180 ;#Column 1 #NODE U1 + +node 12 1.200 0.000 ; #Column 2 #SUPPORT B +node 13 1.200 0.118 ; #Column 2 +node 14 1.200 0.236 ; #Column 2 +node 15 1.200 0.354 ; #Column 2 +node 16 1.200 0.472 ; #Column 2 +node 17 1.200 0.59 ; #Column 2 +node 18 1.200 0.708 ; #Column 2 +node 19 1.200 0.826 ; #Column 2 +node 20 1.200 0.944 ; #Column 2 +node 21 1.200 1.062 ; #Column 2 +node 22 1.200 1.18 ; #Column 2 #NODE U2 + +node 23 2.400 0.000 ; #Column 3 #SUPPORT C +node 24 2.400 0.118 ; #Column 3 +node 25 2.400 0.236 ; #Column 3 +node 26 2.400 0.354 ; #Column 3 +node 27 2.400 0.472 ; #Column 3 +node 28 2.400 0.59 ; #Column 3 +node 29 2.400 0.708 ; #Column 3 +node 30 2.400 0.826 ; #Column 3 +node 31 2.400 0.944 ; #Column 3 +node 32 2.400 1.062 ; #Column 3 +node 33 2.400 1.18 ; #Column 3 + +node 34 0.120 1.180 ; #BEAM 1 +node 35 0.24 1.180 ; #BEAM 1 +node 36 0.36 1.180 ; #BEAM 1 +node 37 0.48 1.180 ; #BEAM 1 +node 38 0.6 1.180 ; #BEAM 1 +node 39 0.72 1.180 ; #BEAM 1 +node 40 0.84 1.180 ; #BEAM 1 +node 41 0.96 1.180 ; #BEAM 1 +node 42 1.08 1.180 ; #BEAM 1 + +node 43 1.32 1.180 ; #BEAM 2 +node 44 1.44 1.180 ; #BEAM 2 +node 45 1.56 1.180 ; #BEAM 2 +node 46 1.68 1.180 ; #BEAM 2 +node 47 1.8 1.180 ; #BEAM 2 +node 48 1.92 1.180 ; #BEAM 2 +node 49 2.04 1.180 ; #BEAM 2 +node 50 2.16 1.180 ; #BEAM 2 +node 51 2.28 1.180 ; #BEAM 2 + + +###################################### BOUNDRY CONDITIONS ######################################### +# http://opensees.berkeley.edu/wiki/index.php/Fix_command + +#fix nodetag dofx dofy dof moment about z [ 1 = fixed 0 = free ]; +fix 1 1 1 0; +fix 12 1 1 0; +fix 23 1 1 0; + + +############################# MATERIAL DEFINITIONS ######################################### + +set Es 210000000; #MPa # steel initial Young's modulus; +set Fy 355000; #MPa # steel initial yield strength; +set b 0.001; #0.1% # strain-hardening ratio; + +set matTag 1; +#define steel01 material: $matTag $yieldStress $E $rat +uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b; + +set secTag 1; +set d 0.080; # depth +set bf 0.046; # flange width +set tf 0.0052; # flange thickness +set tw 0.0038; # web thickness +set nfdw 8; # number of fibers along dw +set nftw 1; # number of fibers along tw +set nfbf 1; # number of fibers along bf +set nftf 4; # number of fibers along tf + + +WsectionThermal $secTag $matTag $d $bf $tf $tw $nfdw $nftw $nfbf $nftf $Es + + + +##################################### TRANSFORMATION DEFINITIONS ############################ +# http://opensees.berkeley.edu/wiki/index.php/Geometric_Transformation_Command + +#three transformation types can be chosen: Linear, PDelta, Corotational + +set transfTag 1; +# transforamtion: geomTransf $type $TransfTag; +geomTransf Corotational $transfTag ; + +############################# ELEMENT PROPERTIES ########################################### + + +#define beam element: dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; +#"numIntgrPts" is the number of integration points along the element; +#"TransfTag" is pre-defined coordinate-transformation; +#element choice is dispBeamColumnTemperature + +#dispBeamColumnThermal $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag; + +element dispBeamColumnThermal 1 1 2 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 2 2 3 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 3 3 4 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 4 4 5 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 5 5 6 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 6 6 7 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 7 7 8 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 8 8 9 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 9 9 10 3 $secTag $transfTag; #COLUMN 1 +element dispBeamColumnThermal 10 10 11 3 $secTag $transfTag; #COLUMN 1 + +element dispBeamColumnThermal 11 12 13 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 12 13 14 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 13 14 15 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 14 15 16 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 15 16 17 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 16 17 18 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 17 18 19 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 18 19 20 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 19 20 21 3 $secTag $transfTag; #COLUMN 2 +element dispBeamColumnThermal 20 21 22 3 $secTag $transfTag; #COLUMN 2 + +element dispBeamColumnThermal 21 23 24 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 22 24 25 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 23 25 26 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 24 26 27 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 25 27 28 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 26 28 29 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 27 29 30 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 28 30 31 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 29 31 32 3 $secTag $transfTag; #COLUMN 3 +element dispBeamColumnThermal 30 32 33 3 $secTag $transfTag; #COLUMN 3 + +element dispBeamColumnThermal 31 11 34 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 32 34 35 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 33 35 36 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 34 36 37 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 35 37 38 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 36 38 39 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 37 39 40 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 38 40 41 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 39 41 42 3 $secTag $transfTag; #BEAM 1 +element dispBeamColumnThermal 40 42 22 3 $secTag $transfTag; #BEAM 1 + +element dispBeamColumnThermal 41 22 43 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 42 43 44 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 43 44 45 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 44 45 46 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 45 46 47 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 46 47 48 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 47 48 49 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 48 49 50 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 49 50 51 3 $secTag $transfTag; #BEAM 2 +element dispBeamColumnThermal 50 51 33 3 $secTag $transfTag; #BEAM 2 + + + +############################################## OUTPUTS ###################################################################### + +recorder Node -file $dataDir/U1.out -time -node 11 -dof 1 disp; # displacements of node U1 DOF 1 +recorder Node -file $dataDir/U2.out -time -node 22 -dof 1 disp; # displacements of node U2 DOF 1 +recorder Node -file $dataDir/RXNS.out -time -node 1 12 23 -dof 2 3 reaction; #support RXNS + + + + + +############################################## GRAVITY LOADING ############################################################## + + +#GRAVITY LOADS +pattern Plain 1 Linear { +load 4 0. -74.0 0.; +load 22 0. -74.0 0.; +load 33 2.85 -74.0 0.; +for {set i 31} {$i <= 50} {incr i} { + eleLoad -ele $i -type -beamUniform -0.060 0. 0.; +} +}; + +set Nstep 100; +set Factor [expr 1.0/$Nstep]; + +# GRAVITY LOAD ANALYSIS +constraints Plain; +numberer Plain; +system BandGeneral; +test NormDispIncr 1e-12 500 ; +algorithm Newton; +integrator LoadControl $Factor +analysis Static; +analyze $Nstep; +loadConst -time 0.0 + +puts "Loads - Done!" + +############################## THERMAL LOADING ################################### + +set T 550; #Max Temp - DEG CELCIUS +set Y2 [expr -$d/2]; #top fiber of beam +set Y1 [expr $d/2]; #Bottom fiber of beam + + +pattern Plain 2 Linear { + for {set i 1} {$i <= 20} {incr i} { eleLoad -ele $i -type -beamThermal $T $Y2 $T $Y1; } + for {set i 31} {$i <= 40} {incr i} { eleLoad -ele $i -type -beamThermal $T $Y2 $T $Y1; } +}; + + set Nstep 1000; + set Factor [expr 1.0/$Nstep]; # first load increment; + + constraints Plain; # how it handles boundary conditions + numberer Plain; # renumber dof's to minimize band-width (optimization) + system UmfPack; + test NormDispIncr 1e-6 1000; + algorithm Newton; # use Newton's solution algorithm: updates tangent stiffness at every iteration + integrator LoadControl $Factor; # determine the next time step for an analysis + analysis Static; # define type of analysis static or transient + analyze $Nstep; # apply fire load + +puts "Fire - Done!" + +wipe; + diff --git a/examples/thermalexamples/files/Example5_OUTPUT.zip b/examples/thermalexamples/files/Example5_OUTPUT.zip new file mode 100644 index 00000000..3aa06ed9 Binary files /dev/null and b/examples/thermalexamples/files/Example5_OUTPUT.zip differ diff --git a/examples/thermalexamples/files/WsectionThermal.tcl b/examples/thermalexamples/files/WsectionThermal.tcl new file mode 100644 index 00000000..957458a7 --- /dev/null +++ b/examples/thermalexamples/files/WsectionThermal.tcl @@ -0,0 +1,38 @@ +proc WsectionThermal { secID matID d bf tf tw nfdw nftw nfbf nftf Gf} { + # ################################################################### + # Wsection $secID $matID $d $bf $tf $tw $nfdw $nftw $nfbf $nftf + # ################################################################### + # create a standard W section given the nominal section properties + # written: Remo M. de Souza + # date: 06/99 + # modified: 08/99 (according to the new general modelbuilder) + # input parameters + # secID - section ID number + # matID - material ID number + # d = nominal depth + # tw = web thickness + # bf = flange width + # tf = flange thickness + # nfdw = number of fibers along web depth + # nftw = number of fibers along web thickness + # nfbf = number of fibers along flange width + # nftf = number of fibers along flange thickness + + set dw [expr $d - 2 * $tf] + set y1 [expr -$d/2] + set y2 [expr -$dw/2] + set y3 [expr $dw/2] + set y4 [expr $d/2] + + set z1 [expr -$bf/2] + set z2 [expr -$tw/2] + set z3 [expr $tw/2] + set z4 [expr $bf/2] + + section fiberSecThermal $secID -GJ $Gf { + # nfIJ nfJK yI zI yJ zJ yK zK yL zL + patch quadr $matID $nfbf $nftf $y1 $z4 $y1 $z1 $y2 $z1 $y2 $z4 + patch quadr $matID $nftw $nfdw $y2 $z3 $y2 $z2 $y3 $z2 $y3 $z3 + patch quadr $matID $nfbf $nftf $y3 $z4 $y3 $z1 $y4 $z1 $y4 $z4 + } +} diff --git a/examples/thermalexamples/index.html b/examples/thermalexamples/index.html new file mode 100644 index 00000000..ea853afa --- /dev/null +++ b/examples/thermalexamples/index.html @@ -0,0 +1,1161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenSees - Thermal Examples + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + + + + + + + + +
          + + + + + + + +
          + +
          + + + + + +
          + +
          + + +
          +
          + +

          Thermal Examples

          + + +

          Structural Fire Engineering

          +

          The following types of fire analyses are represented in these examples. +The fire analysis is performed is a stress-based analysis where the +temperature of the elements is set within the code. Heat transfer +analysis between the gas temperatures and the structural member should +be performed using lump mass heat transfer analysis techniques or +appropriate finite element programs.

          + +

          Target temperature + +  

          +

          The temperature of the elements are set and a linear time-temperature +curve is assumed for each element to reach the set temperature over the +time period of the step.

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          + +

          Standard fire curve + +  

          +

          The standard fire curve is defined by ASTM E119 and ISO 834. These two +curves are essentially the same and are used for standardized fire +testing. These time-temperature curves increase rapidly at the beginning +and then steadily increase over a time period of eight hours.

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          + +

          Parametric time-temperature fire curve + +  

          +

          When the research involves structural fire engineering, a parametric +time-temperature curve that is based on Eurocode 1 may be required. This +time-temperature curve is dependent upon the ventilation (openings) in +the compartment, the material of the compartment, the fuel load density, +and the size of the compartment. These factors combined will produce a +time-temperature curve that characterizes the fire in the compartment +under consideration. The shape of this curve and the maximum temperature +is highly dependent upon all of the factors previously listed. This type +of fire curve will also include a cooling portion of the fire, when all +of the fuel has been consumed. This type of fire time-temperature curve +is used when a complete burn out fire scenario is being investigated.

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          + +

          Simulation process + +  

          +

          Each example script does the following:

          +

          Build the model

          +
            +
          1. Model dimensions and degress-of-freedom
          2. +
          3. Nodal coordinates
          4. +
          5. Nodal constraints – boundary conditions
          6. +
          7. Nodal masses
          8. +
          9. Elements and element connectivity
          10. +
          11. Set element temperatures
          12. +
          13. Recorders for output
          14. +
          +

          Define and apply gravity load

          +
            +
          1. Nodal or element load
          2. +
          3. Static-analysis parameters (tolerances and load increments)
          4. +
          5. Analyze
          6. +
          7. Hold gravity loads constant
          8. +
          9. Reset time to zero
          10. +
          +

          Define and apply element temperatures

          +
            +
          1. Load pattern (nodal loads for gravity analysis and temperature +patterns for fire)
          2. +
          3. Provide temperature history for the loads either through a set +temperature or reference to a time-temperature curve
          4. +
          5. Analyze
          6. +
          + +

          Author Info + +  

          + + +
          +
          + +
          +
          + + + + +
          + + + + + +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + + + + +
          + + +
          +
          + + + +
          +
          + +
          + + + + + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/thermalexamples/index.xml b/examples/thermalexamples/index.xml new file mode 100644 index 00000000..fac34a39 --- /dev/null +++ b/examples/thermalexamples/index.xml @@ -0,0 +1,47 @@ + + + + Thermal Examples on OpenSees + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/ + Recent content in Thermal Examples on OpenSees + Hugo + en + © 2024 <a href='https://github.com/stairlab' class='link-bg-footer' target='_blank' rel='noopener noreferrer'>PEER</a> + + + Example 1 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample1/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample1/ + Thermal expansion of a beam &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of beam Example Overview: A steel beam is heated to 1180 ° C. Horizontal displacement of right end is recorded. This displacement is normalized against the original length and plotted against temperature. The calculated thermal expansion is compared against the steel temperature-dependent thermal expansion in Eurocode 3, Part 1-2 11 . Download Example 1 files: Example1.tcl Example 1 Outputs &lt;files/Example1_OUTPUT.zip&gt;{.interpreted-text role=&ldquo;download&rdquo;}. + + + Example 2 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample2/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample2/ + Restrained Steel beam subjected to uniform temperature on half of the member. &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Example overview: A steel beam of two equal elements is subjected to a uniform temperature on only one of the elements. Element 1 remains at ambient tempurature while Element 2 is heated using a linear time-temperature history. Download Example 2 files: Example2.tcl Example 2 Outputs &lt;files/EXAMPLE2_OUTPUT.zip&gt;{.interpreted-text role=&ldquo;download&rdquo;}. Objective &nbsp; Example 2 Objectives: Develop a simply supported steel beam using displacement-based beam elements with tempurature-dependent material properites, Record internal forces of an element subjected to a linear time-temperature history due to the restraint against thermal expansion, Record displacement of a node due to a linear time-temperature history, and Correlate the recorded internal forces and displacement with the linear time-temperature history to plot the two variables as a function of temperature. + + + Example 3 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample3/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample3/ + A 6m long beam has a uniform applied load of 10 kN/m. With the loading sustained, the beam is heated to a target temperature of 1180 ° C. {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of beam and member cross-section Example overview: A steel beam is subjected to a uniform temperature using a linear time-temperature history. Vertical midspan displacement of the heated beam is recorded throughout the analysis. An investigation is performed on the impact the following parameters have on the midspan displacement of the beam: (i) including 2nd order geometric transformations, and (ii) restraining the horizontal displacement of the boundary conditions + + + Example 4 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample4/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample4/ + A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve. &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of frame Example overview: A one-bay frame is considered with a uniformly distributed load (2 kN/m). The frame is exposed to a fire. Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross section,and the temperatures at each fiber when the members are exposed to a non-linear gas time-temperature curve. + + + Example 5 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample5/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample5/ + A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C. {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of two-bay frame Example overview: This example will combine the modeling methodologies developed through the other examples and apply them to a two-bay frame with a fire in one of the bays. + + + diff --git a/examples/thermalexamples/page/1/index.html b/examples/thermalexamples/page/1/index.html new file mode 100644 index 00000000..35beedb9 --- /dev/null +++ b/examples/thermalexamples/page/1/index.html @@ -0,0 +1,14 @@ + + + + + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/ + + + + + + + + + \ No newline at end of file diff --git a/examples/thermalexamples/thermalexample1/index.html b/examples/thermalexamples/thermalexample1/index.html new file mode 100644 index 00000000..d63d0eac --- /dev/null +++ b/examples/thermalexamples/thermalexample1/index.html @@ -0,0 +1,1250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenSees - Example 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + + + + + + + + +
          + + + + + + + +
          + +
          +
          + +
          + + + + + + + + +
          +
          + +
          +

          Example 1

          + + + + 6 min read • + 1,090 words + +
          +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          + +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          +
          + + + + + + + + + + +

          + + + +

          Thermal expansion of a beam + +  

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Elevation of beam

          +

          Example Overview: A steel beam is heated to 1180 ° C. Horizontal +displacement of right end is recorded. This displacement is normalized +against the original length and plotted against temperature. The +calculated thermal expansion is compared against the steel +temperature-dependent thermal expansion in Eurocode 3, Part 1-2

          + + + + + + + + + 11 + + +

          .

          +

          Download Example 1 files:

          +

          + + + + + + + + + + + + + + + Example1.tcl

          +

          Example 1 Outputs <files/Example1_OUTPUT.zip>{.interpreted-text +role=“download”}.

          + +

          Material Properties + +  

          +

          The uniaxialMaterial Steel01Thermal includes temperature-dependent steel +thermal and mechanical properties per Eurocode 3

          + + + + + + + + + 11 + + +

          . More details of +Steel01 can be found at: + + + + + + + +Steel01 +Material  + +

          +
          uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;

          Es = 210 GPa (Young’s modulus of elasticity at ambient temperatures)

          +

          Fy = 250 MPa (Yield strength of material at ambient temperatures)

          +

          b = 0.001 (Strain-Hardening Ratio)

          + +

          Transformation + +  

          +

          The beam is expanding in one direction, therefore, 2nd order bending +effects do not need to be considered.

          +
          geomTransf Linear $transftag;

          Learn more about geometric transofrmations: + + + + + + + +Geometric +Transformation  + +

          + +

          Section + +  

          +

          The discretization of the steel section into four fibers is shown using +the code below:

          +
          section FiberThermal secTag -GJ $Es{
          set numSubdivIJ 2; \# horizontal
          set numSubdivJK 2; \# vertical
          set yI -100; #mm
          set zI -200; #mm
          set yJ 100; #mm
          set zJ -200; #mm
          set yK 100; #mm
          set zK 200; #mm
          set yL -100; #mm
          set zL 200; #mm
          patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK
          +$zK $yL $zL

          Sections that will be subjected to thermal loading must be created with +fiberThermal or fibersecThermal.

          +

          In previous versions of OpenSees, a default value for torsional +stiffness was used (GJ). In versions 3.1.0 and newer fiber sections +require a value for torsional stiffness. This is a 2D example with +negligible torsion, however a value is required. The Young's Modulus is +used for convenience.

          +

          The discretization can be visualized as such:

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Cross section of rectangular beam showing fiber discretization

          + +

          Elements + +  

          +

          dispBeamColumnThermal elements are used because temperature-dependent +thermal and mechanical steel properties can be applied to these +elements. Any portion of the structure that is being heated must use +elements that are compatible with uniaxialMaterial Steel01Thermal. At +the time this model was developed, dispBeamColumnThermal was the only +element type that could have tempurature-dependent thermal and +mechanical properties applied to them.

          +

          The beam is made of one element with 5 iteration points and connects +nodes 1 & 2. OpenSees is sensitive to the number of iteration points in +each element and this could change the result of the recorded +displacement. For this reason, it is important to perform these +benchmarking examples to establish how many iteration points allows for +convergence to the expected recorded displacement. To code the number of +iteration points, we use the following syntax:

          +

          dispBeamColumnThermal eleTag iNode jNode numIntgrPts secTag TransfTag;

          +
          element dispBeamColumnThermal 1 1 2 5 $secTag $transftag;
          +

          Output Recorders + +  

          +

          Displacement of the end node (2) in DOF 1 (Horizontal Displacement) is +what we want to record. To do so, a folder within your working directory +must be created. dataDir is the command to create that folder and +should be defined at the beginning of the model. This is where your +output files will be saved.

          +
          set dataDir Examples/EXAMPLE2_OUTPUT;
          file mkdir $dataDir;
          recorder Node -file $dataDir/Node2disp.out -time -node 2 -dof 1 disp;

          Learn more about the Recorder Command: [ Recorder Command +<http://opensees.berkeley.edu/wiki/index.php/Recorder_Command>]{.title-ref} +__

          + +

          Thermal Loading + +  

          +

          This particular model is heating a beam to a set temperature over the +time period of the model. We are not asking OpenSees to use a specific +time-temperature curve, rather linearly ramp up the temperature from +ambient to 1180 ° C.

          +

          Therefore, we set the maximum temperature as follows:

          +

          T = Max Tempurature

          + + + + + + + + + degcelciusdeg celcius + + +
          set T 1180;

          In OpenSees, the user can define 2 or 9 temperature data points through +the cross section. In a 2D analysis framework, like this example, +temperature data point locations are specified on the y-axis of the +local coordinate system (as shown in the figure below), and are linearly +interpolated between the defined points. Because this example is using a +uniformly heated beam, the entire cross section is one temperature, and +two temperature points on each extreme fiber on the y-axis will be +chosen. The beam has a depth of 400 mm, therefore, Y1 = 200 mm & Y2 = +-200 mm for the top and bottom fibers respectively.

          +

          Location of bottom extreme fiber of beam

          + + + + + + + + + mmmm + + +
          set Y1 100;

          Location of top extreme fiber of beam

          + + + + + + + + + mmmm + + +
          set Y2 -100;

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Location of defined input temperature locations on the member cross +section

          +

          The bottom extreme fiber temperature must be defined first. The target +maximum temperature for each extreme fiber is set to 1180<sup>o</sup>C +and will be increased incrementally and linearly as the time step +continues in the analysis. An external temperature data set could also +be used for more complex temperature loading. The syntax for this is:

          +

          Thermal loading pattern

          +
          pattern Plain 1 Linear { eleLoad -ele 1 -type -beamThermal $T $Y2 $T
          +$Y1 };
          +

          Thermal Analysis + +  

          +

          Thermal loading is applied in 1000 steps, with a load factor of 0.001. +Each step is a 0.001 increment of the maximum temperature specified in +the thermal loading step: T. The analysis is a static analysis and the +contraints of the beam are plain. 1000 increments was also used during +thermal analysis to allow for easy correlation between the input +temperatures and the recorded output.

          +

          A variety of load factors were examined and the solution converged when +a load factor of 0.001 was used. OpenSees is sensitive to the load +factor, therefore, it is important to ensure that benchmarking examples +are performed to determine the proper load factor to use in structural +fire engineering analyses.

          + + + + + +
          +
          set Nsteps 1000
          set Factor \[expr 1.0/$Nsteps\];
          integrator LoadControl $Factor;
          analyze $Nsteps;
          +
          + +

          Output Plots + +  

          +

          After the model has completed running, the results will be a horizontal +displacement of the right end of the beam. Since the temperature was +linearly ramped up from ambient to 1180 ° C, the user can develop a +temperature history that matches every increment of the model.

          +

          Thermal expansion is the change is length divided by the original +length. This could also be called thermal strain. The thermal expansion +of the beam is plotted below and compared to the Eurocode 3 +

          + + + + + + + + + 11 + + +

          temperature-dependent thermal expansion. We can see that the +modeled thermal expansion matches the material properties. This is +important to check that the temperatures and material properties are +assigned propertly in the model.

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          +

          Thermal expansion of the beam recorded at node 2

          + +

          Sources + +  

          + + + + + + + + + 11 + + +

          European Committee for Standardization (CEN). (2005). Eurocode 3: +Design of Steel Structures, Part 1.2: General Rules - Structural Fire +Design.

          + + + + + + +
          +
          + + + + + + +
          +
          +
          + +
          + +
          + + + + + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/thermalexamples/thermalexample2/index.html b/examples/thermalexamples/thermalexample2/index.html new file mode 100644 index 00000000..be3c26f1 --- /dev/null +++ b/examples/thermalexamples/thermalexample2/index.html @@ -0,0 +1,1285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenSees - Example 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + + + + + + + + +
          + + + + + + + +
          + +
          +
          + +
          + + + + + + + + +
          +
          + +
          +

          Example 2

          + + + + 6 min read • + 1,206 words + +
          +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          + +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          +
          + + + + + + + + + + +

          + + + +

          Restrained Steel beam subjected to uniform temperature on half of the member. + +  

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Example overview: A steel beam of two equal elements is subjected to a +uniform temperature on only one of the elements. Element 1 remains at +ambient tempurature while Element 2 is heated using a linear +time-temperature history.

          +

          Download Example 2 files:

          +

          + + + + + + + + + + + + + + + Example2.tcl

          +

          Example 2 Outputs <files/EXAMPLE2_OUTPUT.zip>{.interpreted-text +role=“download”}.

          + +

          Objective + +  

          +

          Example 2 Objectives:

          +
            +
          1. Develop a simply supported steel beam using displacement-based beam +elements with tempurature-dependent material properites,
          2. +
          3. Record internal forces of an element subjected to a linear +time-temperature history due to the restraint against thermal +expansion,
          4. +
          5. Record displacement of a node due to a linear time-temperature +history, and
          6. +
          7. Correlate the recorded internal forces and displacement with the +linear time-temperature history to plot the two variables as a +function of temperature.
          8. +
          + +

          Material + +  

          +

          The uniaxialMaterial Steel01Thermal includes temperature-dependent steel +thermal and mechanical properties per Eurocode 3

          + + + + + + + + + 11 + + +

          . More details of +Steel01 can be found at: + + + + + + + +Steel01 +Material  + +

          +
          uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;

          Es = 210 GPa (Young’s modulus of elasticity at ambient temperatures)

          +

          Fy = 250 MPa (Yield strength of material at ambient temperatures)

          +

          b = 0.001 (Strain-Hardening Ratio)

          + +

          Transformation + +  

          +

          The beam is expanding in one direction, therefore, 2nd order bending +effects do not need to be considered.

          +
          geomTransf Linear $transftag;

          Learn more about geometric transofrmations: + + + + + + + +Geometric +Transformation  + +

          + +

          Section + +  

          +

          The discretization of the steel section into four fibers is shown using +the code below:

          +
          section FiberThermal secTag -GJ $Es{
          set numSubdivIJ 2; \# horizontal division
          set numSubdivJK 2; \# vertical division
          set yI -100; #mm
          set zI -200; #mm
          set yJ 100; #mm
          set zJ -200; #mm
          set yK 100; #mm
          set zK 200; #mm
          set yL -100; #mm
          set zL 200; #mm
          patch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK
          +$zK $yL $zL

          Sections that will be subjected to thermal loading must be created with +fiberThermal or fibersecThermal.

          +

          In previous versions of OpenSees, a default value for torsional +stiffness was used (GJ). In versions 3.1.0 and newer fiber sections +require a value for torsional stiffness. This is a 2D example with +negligible torsion, however a value is required. The Young's Modulus is +used for convenience.

          +

          The discretization can be visualized as such:

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“400px”}

          +

          Cross section of rectangular beam showing fiber discretization

          + +

          Elements + +  

          +

          dispBeamColumnThermal elements are used because temperature-dependent +thermal and mechanical steel properties can be applied to these +elements. Any portion of the structure that is being heated must use +elements that are compatible with uniaxialMaterial Steel01Thermal. At +the time this model was developed, dispBeamColumnThermal was the only +element type that could have tempurature-dependent thermal and +mechanical properties applied to them.

          +

          The beam is made of one element with 5 iteration points and connects +nodes 1 & 2. OpenSees is sensitive to the number of iteration points in +each element and this could change the result of the recorded +displacement. For this reason, it is important to perform these +benchmarking examples to establish how many iteration points allows for +convergence to the expected recorded displacement. To code the number of +iteration points, we use the following syntax:

          +

          dispBeamColumnThermal eleTag iNode jNode numIntgrPts secTag TransfTag;

          +

          Element 1

          +
          element dispBeamColumnThermal 1 1 2 5 $secTag $transftag;

          Element 2

          +
          element dispBeamColumnThermal 1 2 3 5 $secTag $transftag;
          +

          Output Recorders + +  

          +

          Displacement of the middle of node (2) in DOF 1 (horizontal direction) +and the horizontal reaction force from the boundary conditions is what +we want to record. To do so, a folder within your working directory must +be created. dataDir is the command to create that folder and should be +defined at the beginning of the model. This is where your output files +will be saved.

          +
          set dataDir Examples/EXAMPLE2_OUTPUT;
          file mkdir $dataDir;

          Displacement of the middle node (2) in DOF 1 (Horizontal Displacement)

          +
          recorder Node -file $dataDir/MidspanNodeDisp.out -time -node 2 -dof 1
          +disp;

          Recording reactions at the boundary conditions:

          +
          recorder Node -file $dataDir/BoundryRXN.out -time -node 1 3 -dof 1 2
          +reaction;

          Recording the section forces in Elements 1 & 2:

          +
          recorder Element -file $dataDir/ele_force_1.out -time -ele 1 section 2
          +force
          recorder Element -file $dataDir/ele_force_2.out -time -ele 2 section 2
          +force

          Learn more about the Recorder Command: [Recorder Command +<http://opensees.berkeley.edu/wiki/index.php/Recorder_Command>]{.title-ref} +__

          + +

          Thermal Loading + +  

          +

          This particular model is heating a beam to a set temperature over the +time period of the model. We are not asking OpenSees to use a specific +time-temperature curve, rather linearly ramp up the temperature from +ambient to 1180 ° C.

          +

          Therefore, we set the maximum temperature as follows:

          +

          T = Max Tempurature

          + + + + + + + + + degcelciusdeg celcius + + +
          set T 1180;

          In OpenSees, the user can define 2 or 9 temperature data points through +the cross section. In a 2D analysis framework, like this example, +temperature data point locations are specified on the y-axis of the +local coordinate system (as shown in the figure above). And are linearly +interpolated between the defined points. Because this example is using a +uniformly heated beam, the entire cross section is one temperature, and +two temperature points on each extreme fiber on the y-axis will be +chosen. The beam has a depth of 200mm, therefore, Y1 = 100 mm & Y2 = +-100 mm for the top and bottom fibers respectively.

          +

          Location of bottom extreme fiber of beam

          + + + + + + + + + mmmm + + +
          set Y1 -100;

          Location of top extreme fiber of beam

          + + + + + + + + + mmmm + + +
          set Y2 100;

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Location of defined input temperature locations on the member cross +section

          +

          The bottom extreme fiber temperature must be defined first. The target +maximum temperature for each extreme fiber is set to 1180 ° C and will +be increased incrementally and linearly as the time step continues in +the analysis. An external temperature data set can could also be used +for more complex temperature loading.

          +

          Element 1 will remain at ambient temperature 20 ° C, while Element 2 +will be heated to the target tempurature. The syntax for this is:

          +
          pattern Plain 1 Linear {eleLoad -ele 1 -type --beamThermal $T $Y2 $T
          +Y1; eleLoad -ele 2 -type --beamThermal $T $Y2 $T Y1 }
          +

          Thermal Analysis + +  

          +

          Thermal loading is applied in 1000 steps, with a load factor of 0.001. +Each step is a 0.001 increment of the maximum temperature specified in +the thermal loading step: T. The analysis is a static analysis and the +contraints of the beam are plain. 1000 increments was also used during +thermal analysis to allow for easy correlation between the input +temperatures and the recorded output.

          +

          A variety of load factors were examined and the solution converged when +a load factor of 0.001 was used. OpenSees is sensitive to the load +factor, therefore, it is important to ensure that benchmarking examples +are performed to determine the proper load factor to use in structural +fire engineering analyses.

          + + + + + +
          +
          set Nsteps 1000
          set Factor \[expr 1.0/$Nsteps\];
          integrator LoadControl $Factor;
          analyze $Nsteps;
          +
          + +

          Output Plots + +  

          +

          After the model has completed running, the results will be a horizontal +displacement of the recorded node, the internal forces in the elements, +and the reactions from the boundary conditions. Since the temperature +was linearly ramped up from ambient to 1180 ° C, the user can develop +a temperature history that matches every increment of the model.

          +

          Element 1 internal axial force vs. temperature

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          +

          Node 2 Horizontal displacement versus temperature

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          + +

          Sources + +  

          + + + + + + + + + 11 + + +

          European Committee for Standardization (CEN). (2005). Eurocode 3: +Design of Steel Structures, Part 1.2: General Rules - Structural Fire +Design.

          + + + + + + +
          + +
          +
          + +
          + +
          + + + + + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/thermalexamples/thermalexample3/index.html b/examples/thermalexamples/thermalexample3/index.html new file mode 100644 index 00000000..9c10f7cc --- /dev/null +++ b/examples/thermalexamples/thermalexample3/index.html @@ -0,0 +1,1223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenSees - Example 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + + + + + + + + +
          + + + + + + + +
          + +
          +
          + +
          + + + + + + + + +
          +
          + +
          +

          Example 3

          + + + + 6 min read • + 1,243 words + + + + + + + + + + + + +

          +
          + + + + + + +
          + + + + + + + + + + + + + +
          + + +
          + +

          A 6m long beam has a uniform applied load of 10 kN/m. With the loading +sustained, the beam is heated to a target temperature of 1180 ° C.

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Elevation of beam and member cross-section

          +

          Example overview: A steel beam is subjected to a uniform temperature +using a linear time-temperature history. Vertical midspan displacement +of the heated beam is recorded throughout the analysis. An investigation +is performed on the impact the following parameters have on the midspan +displacement of the beam: (i) including 2nd order geometric +transformations, and (ii) restraining the horizontal displacement of the +boundary conditions

          +

          Download Example 3 files:

          +

          + + + + + + + + + + + + + + + Example3.tcl

          +

          + + + + + + + + + + + + + + + WsectionThermal.tcl

          +

          Example 3 Outputs <files/Example3_OUTPUT.zip>{.interpreted-text +role=“download”}.

          + +

          Objectives + +  

          +
            +
          1. Develop a simply supported steel beam model using displacement-based +beam elements with tempurature-dependent material properites,
          2. +
          3. Record the midspan vertical displacment due to a linear +time-temperature heating curve and a uniformly distributed gravity +load, and
          4. +
          5. Demonstrate the difference in midspan displacement of the beam when +including 2nd order geometric transformations and restraining the +beam against horizontal displacement of the beam ends.
          6. +
          + +

          Material + +  

          +

          The uniaxialMaterial Steel01Thermal includes temperature-dependent steel +thermal and mechanical properties according to Eurocode 3 carbon steel. +More details of Steel01 can be found at: + + + + + + + +Steel01 +Material  + +

          +
          uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;

          Es = 210000 MPa (Young’s modulus of elasticity at ambient temperatures)

          +

          Fy = 250 MPa (Yield strength of material at ambient temperatures)

          +

          b = 0.01 (Strain-Hardening Ratio)

          + +

          Transformation + +  

          +

          Both Linear & Corotational (Non-Linear)Transformations were used, and +the resulting midspan displacements of the beams were recorded to view +differences of including 2nd order bending effects.

          + + + + + +
          +
          geomTransf Linear $transftag;
          +
          +

          or

          + + + + + +
          +
          geomTransf Corotational $transftag;
          +
          +

          Learn more about geometric transofrmations: + + + + + + + +Geometric +Transformation  + +

          + +

          section + +  

          +

          This example uses a W-shape beam, therefore an external .tcl script is +used to define the fiber sections. This script uses fibersecThermal to +procure a fibered W-shape section with a section tag to be used while +defining elements. Eight fibers are used throughout the web and four +fibers within each flange.

          +

          In previous versions of OpenSees, a default value for torsional +stiffness was used (GJ). In versions 3.1.0 and newer fiber sections +require a value for torsional stiffness. This is a 2D example with +negligible torsion, however a value is required. The Young's Modulus is +used for convenience.

          +

          Wsection dimensions:

          + + + + + +
          +
          set d 355; #mm
          set bf 171.5; #mm
          set tf 11.5; #mm
          set tw 7.4; #mm
          set nfdw 8; #mm
          set nftw 1; #mm
          set nfbf 1; #mm
          set nftf 4; #mm
          +
          +
            +
          • secTag - section tag
          • +
          • matTag - material tag
          • +
          • d = nominal depth
          • +
          • tw = web thickness
          • +
          • bf = flange width
          • +
          • tf = flange thickness
          • +
          • nfdw = number of fibers along web depth
          • +
          • nftw = number of fibers along web thickness
          • +
          • nfbf = number of fibers along flange width
          • +
          • nftf = number of fibers along flange thickness
          • +
          • Gj = torsional stiffness
          • +
          +
          # WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj
          +
          +WsectionThermal 1 1 $d $bf $tf $tw 8 1 1 4 $Es

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          +

          Cross section of W-shape showing fibers in the flanges and the web

          + +

          Element + +  

          +

          dispBeamColumnThermal elements are used because temperature-dependent +thermal and mechanical steel properties can be applied to these +elements. Any portion of the structure that is being heated must use +elements that are compatible with uniaxialMaterial Steel01Thermal. At +the time this model was developed, dispBeamColumnThermal was the only +element type that could have tempurature-dependent thermal and +mechanical properties applied to them.

          +

          This example was developed using 6 elements along the length of the +beam.

          +

          dispBeamColumnThermal + + + + + + eleTageleTag + + +iNode + + + + + + jNodejNode + + +numIntgrPts + + + + + + secTagsecTag + + + +TransfTag;

          +
          element dispBeamColumnThermal $secTag 1 2 5 $secTag $transftag;

          This example will build off of the benchmarked examples and therefore +used 5 iteration points in each element to simulate the beam bending and +thermal expansion.

          + +

          Output Recorders + +  

          +

          dataDir is defined at the beginning of the model, this creates a +folder within your working directory where output files will be saved.

          +
          set dataDir Examples/EXAMPLE3_OUTPUT;
          file mkdir $dataDir;

          Displacement of the midspan node (4) in DOF 2 (Vertical Displacement)

          +
          recorder Node -file $dataDir/Midspan_Disp.out\" -time -node 4 -dof 2
          +disp;

          Reaction forces at end nodes (nodes 1 & 7)

          +
          recorder Node -file $dataDir/RXNs.out -time -node 1 7 -dof 2 reaction;

          Learn more about the Recorder Command: + + + + + + + +Recorder +Command  + +

          + +

          Thermal Loading + +  

          +

          This particular model is heating a beam to a set temperature over the +time period of the model. We are not asking OpenSees to use a specific +time-temperature curve, rather linearly ramp up the temperature from +ambient to 1180 ° C.

          +

          Therefore, we set the maximum temperature as follows:

          +
          set T 1180; # Max temperature, deg. celsius

          In OpenSees, the user can define 2 or 9 temperature data points through +the cross section. In a 2D analysis framework, like this example, +temperature data point locations are specified on the y-axis of the +local coordinate system (as shown in the figure above). And are linearly +interpolated between the defined points. Because this example is using a +uniformly heated beam, two temperature points on each extreme fiber on +the y-axis will be chosen. The beam has a depth of d, therefore, Y1 = +d/2 & Y2 = -d/2 the top and bottom fibers respectively.

          +

          Top fiber of beam

          +
          set Y1 [expr $d/2];

          Bottom fiber of beam

          +
          set Y2 [expr -$d/2];

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Location of defined input temperature locations on the member cross +section

          +

          The bottom extreme fiber temperature must be defined first. The target +maximum temperature for each extreme fiber is set to 1180 ° C and will +be increased incrementally and linearly as the time step continues in +the analysis. An external temperature data set could also be used for +more complex temperature loading.

          +

          Using a plain linear loading pattern, Elements 1-6 will be heated to the +target tempurature, T using a for loop for effecency. The syntax for +this is:

          +
          pattern Plain 3 Linear {for {set level 1} {$level \<= 6} {incr level 1}
          +{set eleID $level eleLoad -ele $eleID -type -beamThermal $T $Y2 $T
          +$Y1;}}
          +

          Thermal Analysis + +  

          +

          Thermal loading is applied in 1000 steps, with a load factor of 0.001. +Each step is a 0.001 increment of the maximum temperature specified in +the thermal loading step: T. The analysis is a static analysis and the +contraints of the beam are plain. 1000 increments was also used during +thermal analysis to allow for easy correlation between the input +temperatures and the recorded output.

          +

          A variety of load factors were examined and the solution converged when +a load factor of 0.001 was used. OpenSees is sensitive to the load +factor, therefore, it is important to ensure that benchmarking examples +are performed to determine the proper load factor to use in structural +fire engineering analyses.

          +
          set Nstep 1000;

          Thermal load is applied in 1000 steps. Each step is an 0.001 increment +of the maximum temperature specified in the thermal loading step T +(1180)

          +
          set Factor \[expr 1.0/$Nstep\];
          +
          +integrator LoadControl $Factor;
          +
          +analyze $Nstep;
          +

          Output Plots + +  

          +

          After the model has completed running, the results will be a vertical +midspan displacement of the recorded node. Since the temperature was +linearly ramped up from ambient to 1180 ° C, the user can develop a +temperature history that matches every increment of the model. +Additionally,mid-span displacement of the beam when including 2nd order +geometric transformations, as well as restraining the horizontal +boundary conditions are plotted. The same model was executed in the +finite element software Abaqus additonally plotted as "AB".

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          + +

          Sources + +  

          +

          [1] W. Maddalozzo and E.C. Fischer, "Post-earthquake fire performance +of steel buildings," World Conference on Earthquake Engineering, +17WCEE, Sendai, Japan - September 13-18, 2020.

          + + + + + + +
          +
          + + + + +
          + + + + + + + + + + + + +On this page: + + +
          + +
          +
          +
          + +
          + +
          + + + + + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/thermalexamples/thermalexample4/index.html b/examples/thermalexamples/thermalexample4/index.html new file mode 100644 index 00000000..1d28b88e --- /dev/null +++ b/examples/thermalexamples/thermalexample4/index.html @@ -0,0 +1,1327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenSees - Example 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + + + + + + + + +
          + + + + + + + +
          + +
          +
          + +
          + + + + + + + + +
          +
          + +
          +

          Example 4

          + + + + 7 min read • + 1,283 words + +
          +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          + +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          +
          + + + + + + + + + + +

          + + + +

          A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve. + +  

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Elevation of frame

          +

          Example overview: A one-bay frame is considered with a uniformly +distributed load (2 kN/m). The frame is exposed to a fire. Heat transfer +analyses were performed using a commercially available finite element +program to calculate the temperature distribution through the cross +section,and the temperatures at each fiber when the members are exposed +to a non-linear gas time-temperature curve. The horizontal displacements +of the top corners of frame are restrained to represent lateral bracing, +and the midspan displacement of the beam is recorded throughout the +analysis.

          +

          Download Example 4 files:

          +

          + + + + + + + + + + + + + + + Example4.tcl

          +

          + + + + + + + + + + + + + + + WsectionThermal.tcl

          +

          Nodal Temperature Files <files/Ex4_NodalTemperatureFiles.zip>{.interpreted-text +role=“download”}.

          +

          Example 4 Outputs <files/Example4_OUTPUT.zip>{.interpreted-text +role=“download”}.

          + +

          Objectives + +  

          +

          Example 4 Objectives: 1. Develop a portal frame in OpenSees using +displacement-based elements with tempurature-dependent material +properties, and 2. Implementing user-defined time-tempurature histories +for the elements calculated through heat transfer analysis.

          + +

          Material + +  

          +

          The uniaxialMaterial Steel01Thermal includes temperature-dependent steel +thermal and mechanical properties according to Eurocode 3 carbon steel. +More details of Steel01 can be found at: + + + + + + + +Steel01 +Material  + +

          +
          uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;

          Es = 210000 MPa (Young’s modulus of elasticity at ambient temperatures)

          +

          Fy = 275 MPa (Yield strength of material at ambient temperatures)

          +

          b = 0.01 (Strain-Hardening Ratio)

          + +

          Transformation + +  

          +

          Because the beams in this example experience large deflections, 2nd +order bending effects were considered using the Corotational geometric +transformation.

          +
          geomTransf Corotational $transftag;

          Learn more about geometric transofrmations: + + + + + + + +Geometric +Transformation  + +

          + +

          section + +  

          +

          This example uses a W-shape beam, therefore an external .tcl script is +used to define the fiber sections. This script uses fibersecThermal to +procure a fibered W-shape section with a section tag to be used while +defining elements. Eight fibers are used throughout the web and four +fibers within each flange.

          +

          In previous versions of OpenSees, a default value for torsional +stiffness was used (GJ). In versions 3.1.0 and newer fiber sections +require a value for torsional stiffness. This is a 2D example with +negligible torsion, however a value is required. The Young's Modulus is +used for convenience.

          +

          Wsection dimensions:

          + + + + + +
          +
          set secTag 1;
          set d 160;
          set bf 82;
          set tf 7.4;
          et tw 5.0;
          set nfdw 8;
          set nftw 1;
          set nfbf 1;
          set nftf 4;
          +
          +
            +
          • secTag - section tag
          • +
          • matTag - material tag
          • +
          • d = nominal depth
          • +
          • tw = web thickness
          • +
          • bf = flange width
          • +
          • tf = flange thickness
          • +
          • nfdw = number of fibers along web depth
          • +
          • nftw = number of fibers along web thickness
          • +
          • nfbf = number of fibers along flange width
          • +
          • nftf = number of fibers along flange thickness
          • +
          • Gj = torsional stiffness
          • +
          +

          WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj

          +
          WsectionThermal $secTag $matTag $d $bf $tf $tw 8 1 1 4 $Es

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          +

          Cross section of W-shape showing fibers in the flanges and the web

          + +

          Element + +  

          +

          dispBeamColumnThermal elements are used because temperature-dependent +thermal and mechanical steel properties can be applied to these +elements. Any portion of the structure that is being heated must use +elements that are compatible with uniaxialMaterial Steel01Thermal. At +the time this model was developed, dispBeamColumnThermal was the only +element type that could have tempurature-dependent thermal and +mechanical properties applied to them.

          +

          dispBeamColumnThermal + + + + + + eleTageleTag + + +iNode + + + + + + jNodejNode + + +numIntgrPts + + + + + + secTagsecTag + + + +TransfTag;

          +
          element dispBeamColumnThermal 1 1 2 3 $secTag $transftag;

          Each column and beam element is created using ten displacement-based +elements with 3 iteration points in each element.

          + +

          Output Recorders + +  

          +

          $dataDir is defined at the beginning of the model, this creates a +folder within your working directory where output files will be saved. +>set dataDir Examples/EXAMPLE4_OUTPUT;

          +
          file mkdir $dataDir;

          Displacement of the beam midspan node (27), DOF 2 (Vertical +Displacement)

          +
          recorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 27 -dof 2
          +disp;

          Reaction forces at end nodes. (1 & 12)

          +
          recorder Node -file $dataDir/RXNS.out -time -node 1 12 -dof 2 3
          +reaction;

          Learn more about the Recorder Command: + + + + + + + +Recorder +Command  + +

          + +

          Thermal Loading + +  

          +

          This particular model is heated using a fire time tempurature curve +shown below. The fiber temperatures, or the temperature distribution +through the cross section was calculated by performing a heat transfer +analysis.

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          +

          The results from the heat transfer analysis were used as inputs for the +fiber temperatures in OpenSees. The locations of the input tempurature +locations can be seen in the figure below.

          +

          Three tempurature input files were created for the tempurature +distribution of the beam and columns. Each tempurature file has 10 +columns representing: Time, T1, T2, T3, T4, T5, T6, T7, T8 & T9. Time +ranges from 0 to 1 to correlete with OpenSees analysis time steps. The +T1 through T9 columns represent temperatures at each of the locations +shown below for nine fibers through the cross section.

          +

          The red dots above below are locations where nodal temperatures were +recorded during the heat transfer analysis and red dotted lines +represent temperature input locations. The code below shows how to +define each of the temperature input locations. The temperature through +the depth of the web was constant. :

          +
          set Y9 [expr -$d/2];
          +set Y2 [expr -($d/2 - 0.99*$tf)];
          +set Y3 [expr -($d/2 - $tf)];
          +set Y4 [expr -$d/4];
          +set Y5 0.0;
          +set Y6 [expr $d/4];
          +set Y7 [expr ($d/2 - $tf)];
          +set Y8 [expr ($d/2 - 0.99*$tf)];
          +set Y9 [expr $d/2];
          +
          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Location of defined input temperature locations and extracted nodal +temperatures on the member cross section (both beam and columns)

          +

          The bottom extreme fiber temperature must be defined first in the +thermal load pattern. The input temperature files must be in your +working directories or have their paths specified.

          +

          Temperature loading for the beam

          +
          pattern Plain 11 Linear { for {set level 21} {$level \<= 30} {incr
          +level 1} {set eleID $level; eleLoad -ele $eleID -type -beamThermal
          +-source BeamTemp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1;}}

          Temperature loading for column 1

          +
          pattern Plain 11 Linear { for {set level 1} {$level \<= 10} {incr level
          +1} {set eleID $level; eleLoad -ele $eleID -type -beamThermal -source
          +Column1Temp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1;}}

          Temperature loading for column 2

          +
          pattern Plain 11 Linear { for {set level 11} {$level \<= 20} {incr
          +level 1} {set eleID $level; eleLoad -ele $eleID -type -beamThermal
          +-source Column2Temp.txt $Y$Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1;}}
          +

          Thermal Analysis + +  

          +

          Thermal loading is applied in 1000 steps, with a load factor of 0.001. +Each step is a 0.001 increment of the maximum temperature specified in +the thermal loading step: T. The analysis is a static analysis and the +contraints of the beam are plain. 1000 increments was also used during +thermal analysis to allow for easy correlation between the input +temperatures and the recorded output.

          +

          A variety of load factors were examined and the solution converged when +a load factor of 0.001 was used. OpenSees is sensitive to the load +factor, therefore, it is important to ensure that benchmarking examples +are performed to determine the proper load factor to use in structural +fire engineering analyses.

          +
          set Nstep 1000;
          set Factor \[expr 1.0/$Nstep\];
          integrator LoadControl $Factor;
          analyze $Nstep;
          +

          Output Plots + +  

          +

          After the model has completed running, the results will be the vertical +midspan displacement of the beam. This displacement can be plotted +against the time of the fire. It is suggested that if the user would +like to develop a temperature history that matches every increment of +the model, the same number of tempurature inputs as time steps is used.

          +

          Beam midspan displacement versus time for the heated one-bay frame:

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          + +

          Sources + +  

          + + + + + + + + + 11 + + +

          European Committee for Standardization (CEN). (2005). Eurocode 3: +Design of Steel Structures, Part 1.2: General Rules - Structural Fire +Design.

          + + + + + + + + + 22 + + +

          W. Maddalozzo and E.C. Fischer, "Post-earthquake fire performance +of steel buildings," World Conference on Earthquake Engineering, +17WCEE, Sendai, Japan - September 13-18, 2020.

          + + + + + + +
          + +
          +
          + +
          + +
          + + + + + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/thermalexamples/thermalexample5/index.html b/examples/thermalexamples/thermalexample5/index.html new file mode 100644 index 00000000..14b0e459 --- /dev/null +++ b/examples/thermalexamples/thermalexample5/index.html @@ -0,0 +1,1347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenSees - Example 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + + + + + + + + +
          + + + + + + + +
          + +
          +
          + +
          + + + + + + + + +
          +
          + +
          +

          Example 5

          + + + + 7 min read • + 1,377 words + +
          +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          + +
          +
          + + + + + + + + + + + + + + + Thermal +   + +
          +
          +
          + + + + + + + + + + +

          +
          + + + + + + +
          + + + + + + + + + + + + + +
          + + +
          + +

          A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C.

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Elevation of two-bay frame

          +

          Example overview: This example will combine the modeling methodologies +developed through the other examples and apply them to a two-bay frame +with a fire in one of the bays. Recorded data from the OpenSees analysis +will be compared with the experimental test data

          + + + + + + + + + 22 + + +

          . Heat transfer +analyses were performed using a commercially available finite element +program to calculate the temperature distribution through the cross +sections when the members are exposed to a linear gas time-temperature +curve. Horizontal displacement of upper corners, U1 & U2 are recorded.

          +

          Download Example 5 files:

          +

          + + + + + + + + + + + + + + + Example5.tcl

          +

          + + + + + + + + + + + + + + + WsectionThermal.tcl

          +

          Example 5 Outputs <files/Example5_OUTPUT.zip>{.interpreted-text +role=“download”}.

          + +

          Objectives + +  

          +

          Example 5 Objectives: 1. Create a two-bay frame in OpenSees using +displacement-based elements with tempurature-dependent material +properties, 2. Implementing user-defined time-tempurature histories for +the elements calculated through heat transfer analysis, and 3. Compare +recorded parameters from the OpenSees model to experimental testing data +

          + + + + + + + + + 22 + + +

          to benchmark modeling methodologies.

          +

          Experimental Test Overview

          +

          A two-bay frame was tested by researchers

          + + + + + + + + + 22 + + +

          . Each bay size was 1.2 m +in width and 1.18 m in height. Point loads were applied at the +beam-column joints in the lateral and gravity directions in addition to +a uniformly distributed load applied to the beams. The columns and beam +of one of the bays was heated using electrical heaters that surrounded +each of the members, therefore, uniformly heating each member (there was +no thermal gradient through the cross section). The temperature was +increased until failure.

          + +

          Material + +  

          +

          The uniaxialMaterial Steel01Thermal includes temperature-dependent steel +thermal and mechanical properties per Eurocode 3

          + + + + + + + + + 11 + + +

          . More details of +Steel01 can be found at: + + + + + + + +Steel01 Material  + +

          +
            +
          • Es = 210 GPa (Young’s modulus of elasticity at ambient temperatures)
          • +
          • Fy = 355 MPa (Yield strength of material at ambient temperatures)
          • +
          • b = 0.001 (Strain-Hardening Ratio)
          • +
          +
          set matTag 1;
          uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;
          +

          Transformation + +  

          +

          Because the beams and columns in this example experience bending, 2nd +order bending effects were considered using the Corotational geometric +transformation.

          +
          geomTransf Corotational $transftag;

          Learn more about geometric transofrmations: + + + + + + + +Geometric +Transformation  + +

          + +

          Section + +  

          +

          This example uses an external .tcl script to define the cross section. +This script uses fibersecThermal to procure a fibered W-shape section +with a section tag to be used while defining elements. Eight fibers are +used throughout the web and four fibers within each flange.

          +

          In previous versions of OpenSees, a default value for torsional +stiffness was used (GJ). In versions 3.1.0 and newer fiber sections +require a value for torsional stiffness. This is a 2D example with +negligible torsion, however a value is required. The Young’s Modulus is +used for convenience. Wsection dimensions are (units are meters):

          +
          set secTag 1; # section Tag 
          +set d 0.08; # depth of beam 
          +set bf 0.046; # flange width 
          +set tf 0.0052; # flange thickness 
          +set tw 0.0038; # web thickness
            +
          • secTag - section tag
          • +
          • matTag - material tag
          • +
          • d = nominal depth
          • +
          • tw = web thickness
          • +
          • bf = flange width
          • +
          • tf = flange thickness
          • +
          • nfdw = number of fibers along web depth
          • +
          • nftw = number of fibers along web thickness
          • +
          • nfbf = number of fibers along flange width
          • +
          • nftf = number of fibers along flange thickness
          • +
          • Gj = torsional stiffness
          • +
          +
          # WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj
          +WsectionThermal $secTag $matTag $d $bf $tf $tw 8 1 1 4 $Es

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center +width=“500px”}

          +

          Cross section of W-shape showing fibers in the flanges and the web

          + +

          Element + +  

          +

          dispBeamColumnThermal elements are used because temperature-dependent +thermal and mechanical steel properties can be applied to these +elements. Any portion of the structure that is being heated must use +elements that are compatible with uniaxialMaterial Steel01Thermal. At +the time this model was developed, dispBeamColumnThermal was the only +element type that could have tempurature-dependent thermal and +mechanical properties applied to them.

          +
          # $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag;
          +element dispBeamColumnThermal 1 1 2 3 $secTag $transftag;

          Each column and beam element is created using ten displacement-based +elements with 3 iteration points in each element.

          + +

          Output Recorders + +  

          +

          dataDir is defined at the beginning of the model, this creates a +folder within your working directory where output files will be saved.

          +
          set dataDir Examples/EXAMPLE5_OUTPUT;
          file mkdir $dataDir;

          displacements of node U1 (node 11, top left), DOF 1 (Horizontal +Displacement)

          +
          recorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 11 -dof 1
          +disp;

          displacements of node U2 (node 22, top-middle), DOF 1 (Horizontal +Displacement)

          +
          recorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 22 -dof 1
          +disp;

          Reaction forces at support nodes (1, 12 and 23):

          +
          recorder Node -file $dataDir/RXNS.out -time -node 1 12 23 -dof 2 3
          +reaction;

          Learn more about the Recorder Command: + + + + + + + +Recorder +Command  + +

          + +

          Thermal Loading + +  

          +

          In this model, the beams and columns of the left bay are heated by +increasing the temperature linearly from ambient temperature until +failure. The right bay remains at ambient tempurature.

          +

          Therefore, we set the maximum temperature as follows:

          +
          set T 550; # Max Temperature, deg C

          In OpenSees, the user can define 2 or 9 temperature data points through +the cross section. In a 2D analysis framework, like this example, +temperature data point locations are specified on the y-axis of the +local coordinate system (as shown in the figure above). And are linearly +interpolated between the defined points. Because this example is using a +uniformly heated beam, two temperature points on each extreme fiber on +the y-axis will be chosen. The beam has a depth of d, therefore, +Y1 = d/2 and Y2 = -d/2 the top and bottom fibers respectively.

          +

          Top fiber of beam

          +
          set Y1 [expr $d/2];

          Bottom fiber of beam

          +
          set Y2 [expr -$d/2];

          Location of defined input temperature locations on the member cross section (both beam and columns)

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          The bottom extreme fiber temperature must be defined first. The target +maximum temperature for each extreme fiber is set to 550 ° C and will +be increased linearly and incrementally as the time step continues in +the analysis. An external temperature data set can could also be used +for more complex temperature loading.

          +

          Using a for-loop and a plain linear loading pattern, elements 1-20 & +31-40 will be subjected to tempurature, T. These elements define the +heated bay.

          +
          pattern Plain 2 Linear {
          +
          +  for {set i 1} {$i \<= 20} {incr i} { 
          +    eleLoad -ele $i -type -beamThermal $T $Y2 $T $Y1;
          +  }
          +  for {set i 31} {$i \<= 40} {incr i} {eleLoad -ele $i -type
          +-beamThermal $T $Y2 $T $Y1;}};
          +

          Thermal Analysis + +  

          +

          Thermal loading is applied in 1000 steps, with a load factor of 0.001. +Each step is a 0.001 increment of the maximum temperature specified in +the thermal loading step: T. The analysis is a static analysis and the +contraints of the beam are plain. 1000 increments was also used during +thermal analysis to allow for easy correlation between the input +temperatures and the recorded output. Each step is an 0.001 increment of +the maximum temperature specified in the thermal loading step: T.

          +

          A variety of load factors were examined and the solution converged when +a load factor of 0.001 was used. OpenSees is sensitive to the load +factor, therefore, it is important to ensure that benchmarking examples +are performed to determine the proper load factor to use in structural +fire engineering analyses.

          +
          set Nstep 1000
          +
          +set Factor \[expr 1.0/$Nstep\];
          +
          +integrator LoadControl $Factor;
          +
          +analyze $Nstep;
          +

          Output Plots + +  

          +

          After the model has completed running, the results will be horizontal +displacements of the recorded node. Since the temperature was linearly +ramped up from ambient to 550 ° C, the user can develop a temperature +history that matches every increment of the model. The displacements are +benchmarked against test data

          + + + + + + + + + 22 + + +

          as shown in the figure below.

          +

          Node U1 horizontal displacement versus temperature compared with the +testing data

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          +

          Node U2 horizontal displacement versus temperature compared with the +testing data

          +

          + + + + + + + + + + + + + + + + + + + + + + +{.align-centeralign-center width=“500px”}

          + +

          Sources + +  

          + + + + + + + + + 11 + + +

          European Committee for Standardization (CEN). (2005). Eurocode 3: +Design of Steel Structures, Part 1.2: General Rules - Structural Fire +Design.

          + + + + + + + + + 22 + + +

          Rubert A, Schaumann P. (1986). “Structural steel and plane frame +assemblies under fire action.” Fire Safety Journal, vol. 10, pp.173–184.

          + + + + + + +
          +
          + + + + +
          + + + + + + + + + + + + +On this page: + + +
          + +
          +
          +
          + +
          + +
          + + + + + + + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/viscousdamper/index.html b/examples/viscousdamper/index.html index 66a3b908..a5226b87 100644 --- a/examples/viscousdamper/index.html +++ b/examples/viscousdamper/index.html @@ -1108,7 +1108,7 @@

          Simula - + diff --git a/examples/wrench/index.html b/examples/wrench/index.html index 915632dc..d541cae6 100644 --- a/examples/wrench/index.html +++ b/examples/wrench/index.html @@ -1138,7 +1138,7 @@

          References + diff --git a/index.html b/index.html index bd513f5a..b865ecf2 100644 --- a/index.html +++ b/index.html @@ -548,6 +548,21 @@ + + + + + + + + + + + + + + + @@ -2323,7 +2338,7 @@

          Interoperable

          - + diff --git a/index.xml b/index.xml index ed3df03d..41d16b9d 100644 --- a/index.xml +++ b/index.xml @@ -211,6 +211,34 @@ https://stairlab.github.io/opensees-gallery/examples/mrf_concentrated/ This example demonstrates how to perform a dynamic analysis in OpenSees using a 2-story, 1-bay steel moment resisting frame. The structure is subjected to the Canoga Park record from the 1994 Northridge earthquake. The nonlinear behavior is represented using the concentrated plasticity concept with rotational springs. The rotational behavior of the plastic regions follows a bilinear hysteretic response based on the Modified Ibarra Krawinkler Deterioration Model (Ibarra et al. 2005, Lignos and Krawinkler 2009, 2010). + + Example 1 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample1/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample1/ + Thermal expansion of a beam &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of beam Example Overview: A steel beam is heated to 1180 ° C. Horizontal displacement of right end is recorded. This displacement is normalized against the original length and plotted against temperature. The calculated thermal expansion is compared against the steel temperature-dependent thermal expansion in Eurocode 3, Part 1-2 11 . Download Example 1 files: Example1.tcl Example 1 Outputs &lt;files/Example1_OUTPUT.zip&gt;{.interpreted-text role=&ldquo;download&rdquo;}. + + + Example 2 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample2/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample2/ + Restrained Steel beam subjected to uniform temperature on half of the member. &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Example overview: A steel beam of two equal elements is subjected to a uniform temperature on only one of the elements. Element 1 remains at ambient tempurature while Element 2 is heated using a linear time-temperature history. Download Example 2 files: Example2.tcl Example 2 Outputs &lt;files/EXAMPLE2_OUTPUT.zip&gt;{.interpreted-text role=&ldquo;download&rdquo;}. Objective &nbsp; Example 2 Objectives: Develop a simply supported steel beam using displacement-based beam elements with tempurature-dependent material properites, Record internal forces of an element subjected to a linear time-temperature history due to the restraint against thermal expansion, Record displacement of a node due to a linear time-temperature history, and Correlate the recorded internal forces and displacement with the linear time-temperature history to plot the two variables as a function of temperature. + + + Example 3 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample3/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample3/ + A 6m long beam has a uniform applied load of 10 kN/m. With the loading sustained, the beam is heated to a target temperature of 1180 ° C. {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of beam and member cross-section Example overview: A steel beam is subjected to a uniform temperature using a linear time-temperature history. Vertical midspan displacement of the heated beam is recorded throughout the analysis. An investigation is performed on the impact the following parameters have on the midspan displacement of the beam: (i) including 2nd order geometric transformations, and (ii) restraining the horizontal displacement of the boundary conditions + + + Example 4 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample4/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample4/ + A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve. &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of frame Example overview: A one-bay frame is considered with a uniformly distributed load (2 kN/m). The frame is exposed to a fire. Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross section,and the temperatures at each fiber when the members are exposed to a non-linear gas time-temperature curve. + Example 4: Multibay Two Story Frame https://stairlab.github.io/opensees-gallery/examples/example4/ @@ -218,6 +246,13 @@ https://stairlab.github.io/opensees-gallery/examples/example4/ Example 4.1 &nbsp; This example is of a reinforced concrete multibay two story frame, as shown in Figure 1, subject to gravity loads. The files for this example are: Python Tcl &lt;a href=&quot;Example4.py&quot;&gt;&lt;code&gt;Example4.py&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; &lt;a href=&quot;Example4.tcl&quot;&gt;&lt;code&gt;Example4.tcl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; A model of the frame shown in Figure 1 is created. The number of objects in the model is dependent on the parameter numBay. The (numBay + 1)*3 nodes are created, one column line at a time, with the node at the base of the columns fixed in all directions. + + Example 5 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample5/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample5/ + A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C. {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of two-bay frame Example overview: This example will combine the modeling methodologies developed through the other examples and apply them to a two-bay frame with a fire in one of the bays. + Frame https://stairlab.github.io/opensees-gallery/docs/library/frame/ @@ -265,7 +300,7 @@ https://stairlab.github.io/opensees-gallery/docs/getting-started/modeling/ Mon, 01 Jan 0001 00:00:00 +0000 https://stairlab.github.io/opensees-gallery/docs/getting-started/modeling/ - To run multiple models simultaneously, use openseespy.Model(...) (capital M) instead of the regular openseespy.model(...) (lowercase m) function, and invoke all subsequent modeling functions (e.g. node(...), element(...), fix(...), etc) as methods on the object returned from Model() instead of the openseespy submodule directly. For example, instead of: import opensees.openseespy as ops ops.model(&#34;basic&#34;, &#34;-ndm&#34;, 2, &#34;-ndf&#34;, 3) ops.node(1, 2.0, 3.0)do import opensees.openseespy as ops model = ops.Model(ndm=2, ndf=3) model.node(1, 2.0, 3. + Modeling in Python &nbsp; The best practice for modeling in Python is to create a model class by calling the opensees.openseespy.Model(...) constructor (note the capital &ldquo;M&rdquo;). All standard OpenSees functions, as documented here&nbsp; can be called as methods on the object that is retured. For example: import opensees.openseespy as ops model = ops.Model(ndm=2, ndf=3) model.node(1, 2.0, 3.0) Evaluate Tcl models from Python &nbsp; The first scripting interface to OpenSees used a programming language called Tcl, which continues to be supported. Nonlinear Geometry diff --git a/js/main.bundle.en.js b/js/main.bundle.en.js index 0160753f..b2f4a1fb 100644 --- a/js/main.bundle.en.js +++ b/js/main.bundle.en.js @@ -6577,7 +6577,7 @@ function initIndex() { description: "Compiling your own version of OpenSees.", - content: "Dependencies \u0026nbsp; Compiling OpenSees requires the following software to be installed on your local machine:\nSoftware Hugo Remarks Git\u0026nbsp; recommended Recommended for version control C/C++ Compilers \u0026nbsp; Embedded as npm binary Node.js\u0026nbsp; The installation package includes npm The primary system dependencies required for compiling are LAPACK/BLAS and Tcl. Packages providing these libraries are listed below for various package management ecosystems.\n\u0026nbsp; Note When building in an Anaconda environment, you should install all dependencies with conda or mamba, and preferably from the conda-forge channel. Expand the notes on Anaconda below.\nAnaconda (Mac, Windows, Linux) When using conda, you need to ensure that CMake only finds compilers that are compatible with the libraries in the environment. System compilers (like those installed by the operating system\u0026rsquo;s package manager) often cannot be used and can lead to segfaults. The following command should install everything you need:\nconda install -c conda-forge fortran-compiler cxx-compiler c-compiler openblas APT (Ubuntu, Debian Linux) Dependency Package LAPACK liblapack-dev BLAS libblas-dev Tcl* tcl-dev Pacman (Arch, Manjaro Linux) Dependency Package LAPACK lapack BLAS blas Tcl* tcl Yum (CentOS, Redhat Linux) Dependency Package LAPACK lapack-devel Tcl* tcl-devel Prerequisites \u0026nbsp; Clone the package repository: \u0026lt; command \u0026gt; git clone https://github.com/claudioperez/OpenSeesRT\u0026nbsp; \u0026lt; /command \u0026gt;\ninstall run-time dependencies. These are the libraries that will be needed in order to use OpenSees. To install these, run: \u0026lt; command \u0026gt; python -m pip install opensees \u0026lt; /command \u0026gt;\nInstall compile-time dependencies; see Dependencies below. These dependencies are only needed for the compilinf process.\nWindows installation notes \u0026nbsp; On Windows you should additionally install Intel compilers and Conan Compiling \u0026nbsp; The next steps describe how to set up your compilers and build the OpenSees library.\nCMake CMake\u0026amp;#43;Conan Create a directory to hold build artifacts\nmkdir build Configure the system for your system\ncd build cmake .. Start compiling\ncmake --build . --target OpenSees -j8 When libOpenSeesRT.so is compiled locally, the opensees package needs to be told where to find it. This can be done by setting an environment variable with the name OPENSEESRT_LIB to point to the location of libOpenSeesRT.so in the build tree. To this end, you may want to add a line like the following to your shell startup script (e.g., .bashrc):\nexport OPENSEESRT_LIB=\u0026#34;/path/to/your/compiled/libOpenSeesRT.so\u0026#34; Create a directory to hold build artifacts\nmkdir build cd build Run Conan\nconan install .. --build missing Configure the system for your system\ncmake .. Start compiling\ncmake --build . --target OpenSees -j8 When libOpenSeesRT.so is compiled locally, the opensees package needs to be told where to find it. This can be done by setting an environment variable with the name OPENSEESRT_LIB to point to the location of libOpenSeesRT.so in the build tree. To this end, you may want to add a line like the following to your shell startup script (e.g., .bashrc): export OPENSEESRT_LIB=\u0026#34;/path/to/your/compiled/libOpenSeesRT.so\u0026#34; Check that everything was built properly by running the following command:\npython -m openseesThis should start an OpenSees interpreter which can be closed by running the exit command.\n\u0026nbsp; Custom domain name Requires Azure CDN \u0026nbsp; CDN / Edge network Requires Azure CDN \u0026nbsp; HTTP headers Requires Azure CDN \u0026nbsp; ### Preparations The repository root should include a file `netlify.toml`. If not, copy it from the Hinode main repository\u0026nbsp; . The configuration file contains the build settings that Netlify will pick up when connecting to your repository. The panel below shows the default build settings. The key command to observe is `npm run build`, which ensures the site is built properly. \u003e [!NOTE] \u003e The default configuration provides basic security headers. Please review the [server configuration](/opensees-gallery/docs/getting-started/modeling/) for more details about the Content Security Policy. The cache settings are explained in more detail in the Netlify blog\u0026nbsp; . netlify.toml [build] publish = \u0026#34;exampleSite/public\u0026#34; command = \u0026#34;npm run build:example\u0026#34; [build.environment] DART_SASS_VERSION = \u0026#34;1.77.5\u0026#34; HUGO_VERSION = \u0026#34;0.131.0\u0026#34; HUGO_ENV = \u0026#34;production\u0026#34; HUGO_ENABLEGITINFO = \u0026#34;true\u0026#34; NODE_VERSION = \u0026#34;20.16.0\u0026#34; NPM_VERSION = \u0026#34;10.8.1\u0026#34; ... The same file also configures several optional plugins. netlify.toml [[plugins]] package = \u0026#34;@gethinode/netlify-plugin-dartsass\u0026#34; [[plugins]] package = \u0026#34;netlify-plugin-hugo-cache-resources\u0026#34; [plugins.inputs] # Redirected in exampleSite/config/_default/hugo.toml # srcdir = \u0026#34;\u0026#34; # [[plugins]] # package = \u0026#34;@netlify/plugin-lighthouse\u0026#34; # [plugins.inputs] # output_path = \u0026#34;reports/lighthouse.html\u0026#34; ... ### Configure your site Sign up for Netlify and configure your site in seven steps. Step 1. Sign up for Netlify Step 2. Sign in with your Git provider Step 3. Authenticate your sign in (2FA) Step 4. Add a new site Step 5. Connect to your Git provider Step 6. Import an existing project Step 7. Configure the build settings Previous Next Step 1. Sign up for Netlify Go to netlify.com\u0026nbsp; and click on the button Sign up. Select your preferred signup method next. This will likely be a hosted Git provider, although you also have the option to sign up with an email address. The next steps use GitHub, but other Git providers will follow a similar process. Step 2. Sign in with your Git provider Enter the credentials for your Git provider and click the button to sign in. Step 3. Authenticate your sign in (2FA) Assuming you have enabled two-factor authentication with your Git provider, authenticate the sign in next. This example uses the GitHub Mobile app. Step 4. Add a new site Click on the button Add new site to set up a new site with Netlify. Step 5. Connect to your Git provider Connect to your Git provider to import your existing Hinode repository. Step 6. Import an existing project Pick a repository from your Git provider. Ensure Netlify has access to the correct repository. Step 7. Configure the build settings Review the basic build settings. Netlify will use the settings provided in the preparations. Click on the button Deploy site to start the build and deployment process. Your site is now ready to be used. Click on the domain settings of your site within the `Site overview` page to provide a domain alias and to edit the site name as needed. The same section also allows the configuration of a custom domain. Be sure to review your [server configuration](/opensees-gallery/docs/getting-started/modeling/) if you encounter any rendering issues, such as broken links or garbled stylesheets. --\u003e" + content: "Dependencies \u0026nbsp; Compiling OpenSees requires the following software to be installed on your local machine:\nSoftware Hugo Remarks Git\u0026nbsp; recommended Recommended for version control C/C++ Compilers \u0026nbsp; Embedded as npm binary Node.js\u0026nbsp; The installation package includes npm The primary system dependencies required for compiling are LAPACK/BLAS and Tcl. Packages providing these libraries are listed below for various package management ecosystems.\n\u0026nbsp; Note When building in an Anaconda environment, you should install all dependencies with conda or mamba, and preferably from the conda-forge channel. Expand the notes on Anaconda below.\nAnaconda (Mac, Windows, Linux) When using conda, you need to ensure that CMake only finds compilers that are compatible with the libraries in the environment. System compilers (like those installed by the operating system\u0026rsquo;s package manager) often cannot be used and can lead to segfaults. The following command should install everything you need:\nconda install -c conda-forge fortran-compiler cxx-compiler c-compiler openblas openmpi APT (Ubuntu, Debian Linux) Dependency Package LAPACK liblapack-dev BLAS libblas-dev Tcl* tcl-dev Pacman (Arch, Manjaro Linux) Dependency Package LAPACK lapack BLAS blas Tcl* tcl Yum (CentOS, Redhat Linux) Dependency Package LAPACK lapack-devel Tcl* tcl-devel Prerequisites \u0026nbsp; Clone the package repository: \u0026lt; command \u0026gt; git clone https://github.com/claudioperez/OpenSeesRT\u0026nbsp; \u0026lt; /command \u0026gt;\ninstall run-time dependencies. These are the libraries that will be needed in order to use OpenSees. To install these, run: \u0026lt; command \u0026gt; python -m pip install opensees \u0026lt; /command \u0026gt;\nInstall compile-time dependencies; see Dependencies below. These dependencies are only needed for the compilinf process.\nWindows installation notes \u0026nbsp; On Windows you should additionally install Intel compilers and Conan Compiling \u0026nbsp; The next steps describe how to set up your compilers and build the OpenSees library.\nCMake CMake\u0026amp;#43;Conan Create a directory to hold build artifacts\nmkdir build Configure the system for your system\ncd build cmake .. Start compiling\ncmake --build . --target OpenSees -j8 When libOpenSeesRT.so is compiled locally, the opensees package needs to be told where to find it. This can be done by setting an environment variable with the name OPENSEESRT_LIB to point to the location of libOpenSeesRT.so in the build tree. To this end, you may want to add a line like the following to your shell startup script (e.g., .bashrc):\nexport OPENSEESRT_LIB=\u0026#34;/path/to/your/compiled/libOpenSeesRT.so\u0026#34; Create a directory to hold build artifacts\nmkdir build cd build Run Conan\nconan install .. --build missing Configure the system for your system\ncmake .. Start compiling\ncmake --build . --target OpenSees -j8 When libOpenSeesRT.so is compiled locally, the opensees package needs to be told where to find it. This can be done by setting an environment variable with the name OPENSEESRT_LIB to point to the location of libOpenSeesRT.so in the build tree. To this end, you may want to add a line like the following to your shell startup script (e.g., .bashrc): export OPENSEESRT_LIB=\u0026#34;/path/to/your/compiled/libOpenSeesRT.so\u0026#34; Check that everything was built properly by running the following command:\npython -m openseesThis should start an OpenSees interpreter which can be closed by running the exit command.\n\u0026nbsp; Custom domain name Requires Azure CDN \u0026nbsp; CDN / Edge network Requires Azure CDN \u0026nbsp; HTTP headers Requires Azure CDN \u0026nbsp; ### Preparations The repository root should include a file `netlify.toml`. If not, copy it from the Hinode main repository\u0026nbsp; . The configuration file contains the build settings that Netlify will pick up when connecting to your repository. The panel below shows the default build settings. The key command to observe is `npm run build`, which ensures the site is built properly. \u003e [!NOTE] \u003e The default configuration provides basic security headers. Please review the [server configuration](/opensees-gallery/docs/getting-started/modeling/) for more details about the Content Security Policy. The cache settings are explained in more detail in the Netlify blog\u0026nbsp; . netlify.toml [build] publish = \u0026#34;exampleSite/public\u0026#34; command = \u0026#34;npm run build:example\u0026#34; [build.environment] DART_SASS_VERSION = \u0026#34;1.77.5\u0026#34; HUGO_VERSION = \u0026#34;0.131.0\u0026#34; HUGO_ENV = \u0026#34;production\u0026#34; HUGO_ENABLEGITINFO = \u0026#34;true\u0026#34; NODE_VERSION = \u0026#34;20.16.0\u0026#34; NPM_VERSION = \u0026#34;10.8.1\u0026#34; ... The same file also configures several optional plugins. netlify.toml [[plugins]] package = \u0026#34;@gethinode/netlify-plugin-dartsass\u0026#34; [[plugins]] package = \u0026#34;netlify-plugin-hugo-cache-resources\u0026#34; [plugins.inputs] # Redirected in exampleSite/config/_default/hugo.toml # srcdir = \u0026#34;\u0026#34; # [[plugins]] # package = \u0026#34;@netlify/plugin-lighthouse\u0026#34; # [plugins.inputs] # output_path = \u0026#34;reports/lighthouse.html\u0026#34; ... ### Configure your site Sign up for Netlify and configure your site in seven steps. Step 1. Sign up for Netlify Step 2. Sign in with your Git provider Step 3. Authenticate your sign in (2FA) Step 4. Add a new site Step 5. Connect to your Git provider Step 6. Import an existing project Step 7. Configure the build settings Previous Next Step 1. Sign up for Netlify Go to netlify.com\u0026nbsp; and click on the button Sign up. Select your preferred signup method next. This will likely be a hosted Git provider, although you also have the option to sign up with an email address. The next steps use GitHub, but other Git providers will follow a similar process. Step 2. Sign in with your Git provider Enter the credentials for your Git provider and click the button to sign in. Step 3. Authenticate your sign in (2FA) Assuming you have enabled two-factor authentication with your Git provider, authenticate the sign in next. This example uses the GitHub Mobile app. Step 4. Add a new site Click on the button Add new site to set up a new site with Netlify. Step 5. Connect to your Git provider Connect to your Git provider to import your existing Hinode repository. Step 6. Import an existing project Pick a repository from your Git provider. Ensure Netlify has access to the correct repository. Step 7. Configure the build settings Review the basic build settings. Netlify will use the settings provided in the preparations. Click on the button Deploy site to start the build and deployment process. Your site is now ready to be used. Click on the domain settings of your site within the `Site overview` page to provide a domain alias and to edit the site name as needed. The same section also allows the configuration of a custom domain. Be sure to review your [server configuration](/opensees-gallery/docs/getting-started/modeling/) if you encounter any rendering issues, such as broken links or garbled stylesheets. --\u003e" }) .add( @@ -6689,6 +6689,19 @@ function initIndex() { { id: 15, tag: "en", + href: "/opensees-gallery/examples/thermalexamples/thermalexample1/", + title: "Example 1", + description: "Thermal expansion of a beam \u0026nbsp; {.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;}\n", + + + content: "Thermal expansion of a beam \u0026nbsp; .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nElevation of beam\nExample Overview: A steel beam is heated to 1180 ° C. Horizontal displacement of right end is recorded. This displacement is normalized against the original length and plotted against temperature. The calculated thermal expansion is compared against the steel temperature-dependent thermal expansion in Eurocode 3, Part 1-2 11 .\nDownload Example 1 files:\nExample1.tcl\nExample 1 Outputs \u0026lt;files/Example1_OUTPUT.zip\u0026gt;.interpreted-text role=\u0026ldquo;download\u0026rdquo;.\nMaterial Properties \u0026nbsp; The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties per Eurocode 3 11 . More details of Steel01 can be found at: Steel01 Material\u0026nbsp; uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210 GPa (Young\u0026rsquo;s modulus of elasticity at ambient temperatures)\nFy = 250 MPa (Yield strength of material at ambient temperatures)\nb = 0.001 (Strain-Hardening Ratio)\nTransformation \u0026nbsp; The beam is expanding in one direction, therefore, 2nd order bending effects do not need to be considered.\ngeomTransf Linear $transftag;Learn more about geometric transofrmations: Geometric Transformation\u0026nbsp; Section \u0026nbsp; The discretization of the steel section into four fibers is shown using the code below:\nsection FiberThermal secTag -GJ $Esset numSubdivIJ 2; \\# horizontalset numSubdivJK 2; \\# verticalset yI -100; #mmset zI -200; #mmset yJ 100; #mmset zJ -200; #mmset yK 100; #mmset zK 200; #mmset yL -100; #mmset zL 200; #mmpatch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zLSections that will be subjected to thermal loading must be created with fiberThermal or fibersecThermal.\nIn previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience.\nThe discretization can be visualized as such:\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nCross section of rectangular beam showing fiber discretization\nElements \u0026nbsp; dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them.\nThe beam is made of one element with 5 iteration points and connects nodes 1 \u0026amp; 2. OpenSees is sensitive to the number of iteration points in each element and this could change the result of the recorded displacement. For this reason, it is important to perform these benchmarking examples to establish how many iteration points allows for convergence to the expected recorded displacement. To code the number of iteration points, we use the following syntax:\ndispBeamColumnThermal eleTag iNode jNode numIntgrPts secTag TransfTag;\nelement dispBeamColumnThermal 1 1 2 5 $secTag $transftag; Output Recorders \u0026nbsp; Displacement of the end node (2) in DOF 1 (Horizontal Displacement) is what we want to record. To do so, a folder within your working directory must be created. dataDir is the command to create that folder and should be defined at the beginning of the model. This is where your output files will be saved.\nset dataDir Examples/EXAMPLE2_OUTPUT;file mkdir $dataDir;recorder Node -file $dataDir/Node2disp.out -time -node 2 -dof 1 disp;Learn more about the Recorder Command: [ Recorder Command \u0026lt;http://opensees.berkeley.edu/wiki/index.php/Recorder_Command\u0026gt;].title-ref __\nThermal Loading \u0026nbsp; This particular model is heating a beam to a set temperature over the time period of the model. We are not asking OpenSees to use a specific time-temperature curve, rather linearly ramp up the temperature from ambient to 1180 ° C.\nTherefore, we set the maximum temperature as follows:\nT = Max Tempurature degcelciusdeg celcius set T 1180;In OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure below), and are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, the entire cross section is one temperature, and two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of 400 mm, therefore, Y1 = 200 mm \u0026amp; Y2 = -200 mm for the top and bottom fibers respectively.\nLocation of bottom extreme fiber of beam mmmm set Y1 100;Location of top extreme fiber of beam mmmm set Y2 -100; .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nLocation of defined input temperature locations on the member cross section\nThe bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 1180\u0026lt;sup\u0026gt;o\u0026lt;/sup\u0026gt;C and will be increased incrementally and linearly as the time step continues in the analysis. An external temperature data set could also be used for more complex temperature loading. The syntax for this is:\nThermal loading pattern\npattern Plain 1 Linear eleLoad -ele 1 -type -beamThermal $T $Y2 $T $Y1 ; Thermal Analysis \u0026nbsp; Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output.\nA variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses.\nset Nsteps 1000set Factor \\[expr 1.0/$Nsteps\\];integrator LoadControl $Factor;analyze $Nsteps; Output Plots \u0026nbsp; After the model has completed running, the results will be a horizontal displacement of the right end of the beam. Since the temperature was linearly ramped up from ambient to 1180 ° C, the user can develop a temperature history that matches every increment of the model.\nThermal expansion is the change is length divided by the original length. This could also be called thermal strain. The thermal expansion of the beam is plotted below and compared to the Eurocode 3 11 temperature-dependent thermal expansion. We can see that the modeled thermal expansion matches the material properties. This is important to check that the temperatures and material properties are assigned propertly in the model.\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nThermal expansion of the beam recorded at node 2\nSources \u0026nbsp; 11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design." + }) + .add( + + + { + id: 16, + tag: "en", href: "/opensees-gallery/examples/example1/", title: "Example 1: Linear Truss", description: "A finite element model of a simple truss is created, and static analysis is performed.", @@ -6700,7 +6713,46 @@ function initIndex() { { - id: 16, + id: 17, + tag: "en", + href: "/opensees-gallery/examples/thermalexamples/thermalexample2/", + title: "Example 2", + description: "Restrained Steel beam subjected to uniform temperature on half of the member. \u0026nbsp; {.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;}\n", + + + content: "Restrained Steel beam subjected to uniform temperature on half of the member. \u0026nbsp; .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nExample overview: A steel beam of two equal elements is subjected to a uniform temperature on only one of the elements. Element 1 remains at ambient tempurature while Element 2 is heated using a linear time-temperature history.\nDownload Example 2 files:\nExample2.tcl\nExample 2 Outputs \u0026lt;files/EXAMPLE2_OUTPUT.zip\u0026gt;.interpreted-text role=\u0026ldquo;download\u0026rdquo;.\nObjective \u0026nbsp; Example 2 Objectives:\nDevelop a simply supported steel beam using displacement-based beam elements with tempurature-dependent material properites, Record internal forces of an element subjected to a linear time-temperature history due to the restraint against thermal expansion, Record displacement of a node due to a linear time-temperature history, and Correlate the recorded internal forces and displacement with the linear time-temperature history to plot the two variables as a function of temperature. Material \u0026nbsp; The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties per Eurocode 3 11 . More details of Steel01 can be found at: Steel01 Material\u0026nbsp; uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210 GPa (Young\u0026rsquo;s modulus of elasticity at ambient temperatures)\nFy = 250 MPa (Yield strength of material at ambient temperatures)\nb = 0.001 (Strain-Hardening Ratio)\nTransformation \u0026nbsp; The beam is expanding in one direction, therefore, 2nd order bending effects do not need to be considered.\ngeomTransf Linear $transftag;Learn more about geometric transofrmations: Geometric Transformation\u0026nbsp; Section \u0026nbsp; The discretization of the steel section into four fibers is shown using the code below:\nsection FiberThermal secTag -GJ $Esset numSubdivIJ 2; \\# horizontal divisionset numSubdivJK 2; \\# vertical divisionset yI -100; #mmset zI -200; #mmset yJ 100; #mmset zJ -200; #mmset yK 100; #mmset zK 200; #mmset yL -100; #mmset zL 200; #mmpatch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zLSections that will be subjected to thermal loading must be created with fiberThermal or fibersecThermal.\nIn previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience.\nThe discretization can be visualized as such:\n.align-centeralign-center width=\u0026ldquo;400px\u0026rdquo;\nCross section of rectangular beam showing fiber discretization\nElements \u0026nbsp; dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them.\nThe beam is made of one element with 5 iteration points and connects nodes 1 \u0026amp; 2. OpenSees is sensitive to the number of iteration points in each element and this could change the result of the recorded displacement. For this reason, it is important to perform these benchmarking examples to establish how many iteration points allows for convergence to the expected recorded displacement. To code the number of iteration points, we use the following syntax:\ndispBeamColumnThermal eleTag iNode jNode numIntgrPts secTag TransfTag;\nElement 1\nelement dispBeamColumnThermal 1 1 2 5 $secTag $transftag;Element 2\nelement dispBeamColumnThermal 1 2 3 5 $secTag $transftag; Output Recorders \u0026nbsp; Displacement of the middle of node (2) in DOF 1 (horizontal direction) and the horizontal reaction force from the boundary conditions is what we want to record. To do so, a folder within your working directory must be created. dataDir is the command to create that folder and should be defined at the beginning of the model. This is where your output files will be saved.\nset dataDir Examples/EXAMPLE2_OUTPUT;file mkdir $dataDir;Displacement of the middle node (2) in DOF 1 (Horizontal Displacement)\nrecorder Node -file $dataDir/MidspanNodeDisp.out -time -node 2 -dof 1 disp;Recording reactions at the boundary conditions:\nrecorder Node -file $dataDir/BoundryRXN.out -time -node 1 3 -dof 1 2 reaction;Recording the section forces in Elements 1 \u0026amp; 2:\nrecorder Element -file $dataDir/ele_force_1.out -time -ele 1 section 2 forcerecorder Element -file $dataDir/ele_force_2.out -time -ele 2 section 2 forceLearn more about the Recorder Command: [Recorder Command \u0026lt;http://opensees.berkeley.edu/wiki/index.php/Recorder_Command\u0026gt;].title-ref __\nThermal Loading \u0026nbsp; This particular model is heating a beam to a set temperature over the time period of the model. We are not asking OpenSees to use a specific time-temperature curve, rather linearly ramp up the temperature from ambient to 1180 ° C.\nTherefore, we set the maximum temperature as follows:\nT = Max Tempurature degcelciusdeg celcius set T 1180;In OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure above). And are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, the entire cross section is one temperature, and two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of 200mm, therefore, Y1 = 100 mm \u0026amp; Y2 = -100 mm for the top and bottom fibers respectively.\nLocation of bottom extreme fiber of beam mmmm set Y1 -100;Location of top extreme fiber of beam mmmm set Y2 100; .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nLocation of defined input temperature locations on the member cross section\nThe bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 1180 ° C and will be increased incrementally and linearly as the time step continues in the analysis. An external temperature data set can could also be used for more complex temperature loading.\nElement 1 will remain at ambient temperature 20 ° C, while Element 2 will be heated to the target tempurature. The syntax for this is:\npattern Plain 1 Linear eleLoad -ele 1 -type --beamThermal $T $Y2 $T Y1; eleLoad -ele 2 -type --beamThermal $T $Y2 $T Y1 Thermal Analysis \u0026nbsp; Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output.\nA variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses.\nset Nsteps 1000set Factor \\[expr 1.0/$Nsteps\\];integrator LoadControl $Factor;analyze $Nsteps; Output Plots \u0026nbsp; After the model has completed running, the results will be a horizontal displacement of the recorded node, the internal forces in the elements, and the reactions from the boundary conditions. Since the temperature was linearly ramped up from ambient to 1180 ° C, the user can develop a temperature history that matches every increment of the model.\nElement 1 internal axial force vs. temperature\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nNode 2 Horizontal displacement versus temperature\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nSources \u0026nbsp; 11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design." + }) + .add( + + + { + id: 18, + tag: "en", + href: "/opensees-gallery/examples/thermalexamples/thermalexample3/", + title: "Example 3", + description: "A 6m long beam has a uniform applied load of 10 kN/m. With the loading sustained, the beam is heated to a target temperature of 1180 ° C.\n{.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;}\n", + + + content: "A 6m long beam has a uniform applied load of 10 kN/m. With the loading sustained, the beam is heated to a target temperature of 1180 ° C.\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nElevation of beam and member cross-section\nExample overview: A steel beam is subjected to a uniform temperature using a linear time-temperature history. Vertical midspan displacement of the heated beam is recorded throughout the analysis. An investigation is performed on the impact the following parameters have on the midspan displacement of the beam: (i) including 2nd order geometric transformations, and (ii) restraining the horizontal displacement of the boundary conditions\nDownload Example 3 files:\nExample3.tcl\nWsectionThermal.tcl\nExample 3 Outputs \u0026lt;files/Example3_OUTPUT.zip\u0026gt;.interpreted-text role=\u0026ldquo;download\u0026rdquo;.\nObjectives \u0026nbsp; Develop a simply supported steel beam model using displacement-based beam elements with tempurature-dependent material properites, Record the midspan vertical displacment due to a linear time-temperature heating curve and a uniformly distributed gravity load, and Demonstrate the difference in midspan displacement of the beam when including 2nd order geometric transformations and restraining the beam against horizontal displacement of the beam ends. Material \u0026nbsp; The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties according to Eurocode 3 carbon steel. More details of Steel01 can be found at: Steel01 Material\u0026nbsp; uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210000 MPa (Young\u0026rsquo;s modulus of elasticity at ambient temperatures)\nFy = 250 MPa (Yield strength of material at ambient temperatures)\nb = 0.01 (Strain-Hardening Ratio)\nTransformation \u0026nbsp; Both Linear \u0026amp; Corotational (Non-Linear)Transformations were used, and the resulting midspan displacements of the beams were recorded to view differences of including 2nd order bending effects.\ngeomTransf Linear $transftag; or\ngeomTransf Corotational $transftag; Learn more about geometric transofrmations: Geometric Transformation\u0026nbsp; section \u0026nbsp; This example uses a W-shape beam, therefore an external .tcl script is used to define the fiber sections. This script uses fibersecThermal to procure a fibered W-shape section with a section tag to be used while defining elements. Eight fibers are used throughout the web and four fibers within each flange.\nIn previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience.\nWsection dimensions:\nset d 355; #mmset bf 171.5; #mmset tf 11.5; #mmset tw 7.4; #mmset nfdw 8; #mmset nftw 1; #mmset nfbf 1; #mmset nftf 4; #mm secTag - section tag matTag - material tag d = nominal depth tw = web thickness bf = flange width tf = flange thickness nfdw = number of fibers along web depth nftw = number of fibers along web thickness nfbf = number of fibers along flange width nftf = number of fibers along flange thickness Gj = torsional stiffness # WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj WsectionThermal 1 1 $d $bf $tf $tw 8 1 1 4 $Es .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nCross section of W-shape showing fibers in the flanges and the web\nElement \u0026nbsp; dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them.\nThis example was developed using 6 elements along the length of the beam.\ndispBeamColumnThermal eleTageleTag iNode jNodejNode numIntgrPts secTagsecTag TransfTag;\nelement dispBeamColumnThermal $secTag 1 2 5 $secTag $transftag;This example will build off of the benchmarked examples and therefore used 5 iteration points in each element to simulate the beam bending and thermal expansion.\nOutput Recorders \u0026nbsp; dataDir is defined at the beginning of the model, this creates a folder within your working directory where output files will be saved.\nset dataDir Examples/EXAMPLE3_OUTPUT;file mkdir $dataDir;Displacement of the midspan node (4) in DOF 2 (Vertical Displacement)\nrecorder Node -file $dataDir/Midspan_Disp.out\\\u0026#34; -time -node 4 -dof 2 disp;Reaction forces at end nodes (nodes 1 \u0026amp; 7)\nrecorder Node -file $dataDir/RXNs.out -time -node 1 7 -dof 2 reaction;Learn more about the Recorder Command: Recorder Command\u0026nbsp; Thermal Loading \u0026nbsp; This particular model is heating a beam to a set temperature over the time period of the model. We are not asking OpenSees to use a specific time-temperature curve, rather linearly ramp up the temperature from ambient to 1180 ° C.\nTherefore, we set the maximum temperature as follows:\nset T 1180; # Max temperature, deg. celsiusIn OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure above). And are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of d, therefore, Y1 = d/2 \u0026amp; Y2 = -d/2 the top and bottom fibers respectively.\nTop fiber of beam\nset Y1 [expr $d/2];Bottom fiber of beam\nset Y2 [expr -$d/2]; .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nLocation of defined input temperature locations on the member cross section\nThe bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 1180 ° C and will be increased incrementally and linearly as the time step continues in the analysis. An external temperature data set could also be used for more complex temperature loading.\nUsing a plain linear loading pattern, Elements 1-6 will be heated to the target tempurature, T using a for loop for effecency. The syntax for this is:\npattern Plain 3 Linear for set level 1 $level \\\u0026lt;= 6 incr level 1 set eleID $level eleLoad -ele $eleID -type -beamThermal $T $Y2 $T $Y1; Thermal Analysis \u0026nbsp; Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output.\nA variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses.\nset Nstep 1000;Thermal load is applied in 1000 steps. Each step is an 0.001 increment of the maximum temperature specified in the thermal loading step T (1180)\nset Factor \\[expr 1.0/$Nstep\\]; integrator LoadControl $Factor; analyze $Nstep; Output Plots \u0026nbsp; After the model has completed running, the results will be a vertical midspan displacement of the recorded node. Since the temperature was linearly ramped up from ambient to 1180 ° C, the user can develop a temperature history that matches every increment of the model. Additionally,mid-span displacement of the beam when including 2nd order geometric transformations, as well as restraining the horizontal boundary conditions are plotted. The same model was executed in the finite element software Abaqus additonally plotted as \u0026quot;AB\u0026quot;.\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nSources \u0026nbsp; [1] W. Maddalozzo and E.C. Fischer, \u0026quot;Post-earthquake fire performance of steel buildings,\u0026quot; World Conference on Earthquake Engineering, 17WCEE, Sendai, Japan - September 13-18, 2020." + }) + .add( + + + { + id: 19, + tag: "en", + href: "/opensees-gallery/examples/thermalexamples/thermalexample4/", + title: "Example 4", + description: "A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve. \u0026nbsp; {.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;}\n", + + + content: "A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve. \u0026nbsp; .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nElevation of frame\nExample overview: A one-bay frame is considered with a uniformly distributed load (2 kN/m). The frame is exposed to a fire. Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross section,and the temperatures at each fiber when the members are exposed to a non-linear gas time-temperature curve. The horizontal displacements of the top corners of frame are restrained to represent lateral bracing, and the midspan displacement of the beam is recorded throughout the analysis.\nDownload Example 4 files:\nExample4.tcl\nWsectionThermal.tcl\nNodal Temperature Files \u0026lt;files/Ex4_NodalTemperatureFiles.zip\u0026gt;.interpreted-text role=\u0026ldquo;download\u0026rdquo;.\nExample 4 Outputs \u0026lt;files/Example4_OUTPUT.zip\u0026gt;.interpreted-text role=\u0026ldquo;download\u0026rdquo;.\nObjectives \u0026nbsp; Example 4 Objectives: 1. Develop a portal frame in OpenSees using displacement-based elements with tempurature-dependent material properties, and 2. Implementing user-defined time-tempurature histories for the elements calculated through heat transfer analysis.\nMaterial \u0026nbsp; The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties according to Eurocode 3 carbon steel. More details of Steel01 can be found at: Steel01 Material\u0026nbsp; uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210000 MPa (Young\u0026rsquo;s modulus of elasticity at ambient temperatures)\nFy = 275 MPa (Yield strength of material at ambient temperatures)\nb = 0.01 (Strain-Hardening Ratio)\nTransformation \u0026nbsp; Because the beams in this example experience large deflections, 2nd order bending effects were considered using the Corotational geometric transformation.\ngeomTransf Corotational $transftag;Learn more about geometric transofrmations: Geometric Transformation\u0026nbsp; section \u0026nbsp; This example uses a W-shape beam, therefore an external .tcl script is used to define the fiber sections. This script uses fibersecThermal to procure a fibered W-shape section with a section tag to be used while defining elements. Eight fibers are used throughout the web and four fibers within each flange.\nIn previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience.\nWsection dimensions:\nset secTag 1;set d 160;set bf 82;set tf 7.4;et tw 5.0;set nfdw 8;set nftw 1;set nfbf 1;set nftf 4; secTag - section tag matTag - material tag d = nominal depth tw = web thickness bf = flange width tf = flange thickness nfdw = number of fibers along web depth nftw = number of fibers along web thickness nfbf = number of fibers along flange width nftf = number of fibers along flange thickness Gj = torsional stiffness WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj\nWsectionThermal $secTag $matTag $d $bf $tf $tw 8 1 1 4 $Es .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nCross section of W-shape showing fibers in the flanges and the web\nElement \u0026nbsp; dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them.\ndispBeamColumnThermal eleTageleTag iNode jNodejNode numIntgrPts secTagsecTag TransfTag;\nelement dispBeamColumnThermal 1 1 2 3 $secTag $transftag;Each column and beam element is created using ten displacement-based elements with 3 iteration points in each element.\nOutput Recorders \u0026nbsp; $dataDir is defined at the beginning of the model, this creates a folder within your working directory where output files will be saved. \u0026gt;set dataDir Examples/EXAMPLE4_OUTPUT;\nfile mkdir $dataDir;Displacement of the beam midspan node (27), DOF 2 (Vertical Displacement)\nrecorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 27 -dof 2 disp;Reaction forces at end nodes. (1 \u0026amp; 12)\nrecorder Node -file $dataDir/RXNS.out -time -node 1 12 -dof 2 3 reaction;Learn more about the Recorder Command: Recorder Command\u0026nbsp; Thermal Loading \u0026nbsp; This particular model is heated using a fire time tempurature curve shown below. The fiber temperatures, or the temperature distribution through the cross section was calculated by performing a heat transfer analysis.\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nThe results from the heat transfer analysis were used as inputs for the fiber temperatures in OpenSees. The locations of the input tempurature locations can be seen in the figure below.\nThree tempurature input files were created for the tempurature distribution of the beam and columns. Each tempurature file has 10 columns representing: Time, T1, T2, T3, T4, T5, T6, T7, T8 \u0026amp; T9. Time ranges from 0 to 1 to correlete with OpenSees analysis time steps. The T1 through T9 columns represent temperatures at each of the locations shown below for nine fibers through the cross section.\nThe red dots above below are locations where nodal temperatures were recorded during the heat transfer analysis and red dotted lines represent temperature input locations. The code below shows how to define each of the temperature input locations. The temperature through the depth of the web was constant. :\nset Y9 [expr -$d/2]; set Y2 [expr -($d/2 - 0.99*$tf)]; set Y3 [expr -($d/2 - $tf)]; set Y4 [expr -$d/4]; set Y5 0.0; set Y6 [expr $d/4]; set Y7 [expr ($d/2 - $tf)]; set Y8 [expr ($d/2 - 0.99*$tf)]; set Y9 [expr $d/2]; .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nLocation of defined input temperature locations and extracted nodal temperatures on the member cross section (both beam and columns)\nThe bottom extreme fiber temperature must be defined first in the thermal load pattern. The input temperature files must be in your working directories or have their paths specified.\nTemperature loading for the beam\npattern Plain 11 Linear for set level 21 $level \\\u0026lt;= 30 incr level 1 set eleID $level; eleLoad -ele $eleID -type -beamThermal -source BeamTemp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1;Temperature loading for column 1\npattern Plain 11 Linear for set level 1 $level \\\u0026lt;= 10 incr level 1 set eleID $level; eleLoad -ele $eleID -type -beamThermal -source Column1Temp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1;Temperature loading for column 2\npattern Plain 11 Linear for set level 11 $level \\\u0026lt;= 20 incr level 1 set eleID $level; eleLoad -ele $eleID -type -beamThermal -source Column2Temp.txt $Y$Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1; Thermal Analysis \u0026nbsp; Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output.\nA variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses.\nset Nstep 1000;set Factor \\[expr 1.0/$Nstep\\];integrator LoadControl $Factor;analyze $Nstep; Output Plots \u0026nbsp; After the model has completed running, the results will be the vertical midspan displacement of the beam. This displacement can be plotted against the time of the fire. It is suggested that if the user would like to develop a temperature history that matches every increment of the model, the same number of tempurature inputs as time steps is used.\nBeam midspan displacement versus time for the heated one-bay frame:\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nSources \u0026nbsp; 11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design.\n22 W. Maddalozzo and E.C. Fischer, \u0026quot;Post-earthquake fire performance of steel buildings,\u0026quot; World Conference on Earthquake Engineering, 17WCEE, Sendai, Japan - September 13-18, 2020." + }) + .add( + + + { + id: 20, tag: "en", href: "/opensees-gallery/examples/example4/", title: "Example 4: Multibay Two Story Frame", @@ -6713,7 +6765,20 @@ function initIndex() { { - id: 17, + id: 21, + tag: "en", + href: "/opensees-gallery/examples/thermalexamples/thermalexample5/", + title: "Example 5", + description: "A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C.\n{.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;}\n", + + + content: "A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C.\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nElevation of two-bay frame\nExample overview: This example will combine the modeling methodologies developed through the other examples and apply them to a two-bay frame with a fire in one of the bays. Recorded data from the OpenSees analysis will be compared with the experimental test data 22 . Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross sections when the members are exposed to a linear gas time-temperature curve. Horizontal displacement of upper corners, U1 \u0026amp; U2 are recorded.\nDownload Example 5 files:\nExample5.tcl\nWsectionThermal.tcl\nExample 5 Outputs \u0026lt;files/Example5_OUTPUT.zip\u0026gt;.interpreted-text role=\u0026ldquo;download\u0026rdquo;.\nObjectives \u0026nbsp; Example 5 Objectives: 1. Create a two-bay frame in OpenSees using displacement-based elements with tempurature-dependent material properties, 2. Implementing user-defined time-tempurature histories for the elements calculated through heat transfer analysis, and 3. Compare recorded parameters from the OpenSees model to experimental testing data 22 to benchmark modeling methodologies.\nExperimental Test Overview\nA two-bay frame was tested by researchers 22 . Each bay size was 1.2 m in width and 1.18 m in height. Point loads were applied at the beam-column joints in the lateral and gravity directions in addition to a uniformly distributed load applied to the beams. The columns and beam of one of the bays was heated using electrical heaters that surrounded each of the members, therefore, uniformly heating each member (there was no thermal gradient through the cross section). The temperature was increased until failure.\nMaterial \u0026nbsp; The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties per Eurocode 3 11 . More details of Steel01 can be found at: Steel01 Material\u0026nbsp; Es = 210 GPa (Young\u0026rsquo;s modulus of elasticity at ambient temperatures) Fy = 355 MPa (Yield strength of material at ambient temperatures) b = 0.001 (Strain-Hardening Ratio) set matTag 1;uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b; Transformation \u0026nbsp; Because the beams and columns in this example experience bending, 2nd order bending effects were considered using the Corotational geometric transformation.\ngeomTransf Corotational $transftag;Learn more about geometric transofrmations: Geometric Transformation\u0026nbsp; Section \u0026nbsp; This example uses an external .tcl script to define the cross section. This script uses fibersecThermal to procure a fibered W-shape section with a section tag to be used while defining elements. Eight fibers are used throughout the web and four fibers within each flange.\nIn previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young\u0026rsquo;s Modulus is used for convenience. Wsection dimensions are (units are meters):\nset secTag 1; # section Tag set d 0.08; # depth of beam set bf 0.046; # flange width set tf 0.0052; # flange thickness set tw 0.0038; # web thickness secTag - section tag matTag - material tag d = nominal depth tw = web thickness bf = flange width tf = flange thickness nfdw = number of fibers along web depth nftw = number of fibers along web thickness nfbf = number of fibers along flange width nftf = number of fibers along flange thickness Gj = torsional stiffness # WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj WsectionThermal $secTag $matTag $d $bf $tf $tw 8 1 1 4 $Es .align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nCross section of W-shape showing fibers in the flanges and the web\nElement \u0026nbsp; dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them.\n# $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; element dispBeamColumnThermal 1 1 2 3 $secTag $transftag;Each column and beam element is created using ten displacement-based elements with 3 iteration points in each element.\nOutput Recorders \u0026nbsp; dataDir is defined at the beginning of the model, this creates a folder within your working directory where output files will be saved.\nset dataDir Examples/EXAMPLE5_OUTPUT;file mkdir $dataDir;displacements of node U1 (node 11, top left), DOF 1 (Horizontal Displacement)\nrecorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 11 -dof 1 disp;displacements of node U2 (node 22, top-middle), DOF 1 (Horizontal Displacement)\nrecorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 22 -dof 1 disp;Reaction forces at support nodes (1, 12 and 23):\nrecorder Node -file $dataDir/RXNS.out -time -node 1 12 23 -dof 2 3 reaction;Learn more about the Recorder Command: Recorder Command\u0026nbsp; Thermal Loading \u0026nbsp; In this model, the beams and columns of the left bay are heated by increasing the temperature linearly from ambient temperature until failure. The right bay remains at ambient tempurature.\nTherefore, we set the maximum temperature as follows:\nset T 550; # Max Temperature, deg CIn OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure above). And are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of d, therefore, Y1 = d/2 and Y2 = -d/2 the top and bottom fibers respectively.\nTop fiber of beam\nset Y1 [expr $d/2];Bottom fiber of beam\nset Y2 [expr -$d/2];Location of defined input temperature locations on the member cross section (both beam and columns)\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nThe bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 550 ° C and will be increased linearly and incrementally as the time step continues in the analysis. An external temperature data set can could also be used for more complex temperature loading.\nUsing a for-loop and a plain linear loading pattern, elements 1-20 \u0026amp; 31-40 will be subjected to tempurature, T. These elements define the heated bay.\npattern Plain 2 Linear for set i 1 $i \\\u0026lt;= 20 incr i eleLoad -ele $i -type -beamThermal $T $Y2 $T $Y1; for set i 31 $i \\\u0026lt;= 40 incr i eleLoad -ele $i -type -beamThermal $T $Y2 $T $Y1;; Thermal Analysis \u0026nbsp; Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output. Each step is an 0.001 increment of the maximum temperature specified in the thermal loading step: T.\nA variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses.\nset Nstep 1000 set Factor \\[expr 1.0/$Nstep\\]; integrator LoadControl $Factor; analyze $Nstep; Output Plots \u0026nbsp; After the model has completed running, the results will be horizontal displacements of the recorded node. Since the temperature was linearly ramped up from ambient to 550 ° C, the user can develop a temperature history that matches every increment of the model. The displacements are benchmarked against test data 22 as shown in the figure below.\nNode U1 horizontal displacement versus temperature compared with the testing data\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nNode U2 horizontal displacement versus temperature compared with the testing data\n.align-centeralign-center width=\u0026ldquo;500px\u0026rdquo;\nSources \u0026nbsp; 11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design.\n22 Rubert A, Schaumann P. (1986). \u0026ldquo;Structural steel and plane frame assemblies under fire action.\u0026rdquo; Fire Safety Journal, vol. 10, pp.173\u0026ndash;184." + }) + .add( + + + { + id: 22, tag: "en", href: "/opensees-gallery/docs/library/frame/", title: "Frame", @@ -6726,7 +6791,7 @@ function initIndex() { { - id: 18, + id: 23, tag: "en", href: "/opensees-gallery/examples/example5/", title: "Frame with Diaphragms", @@ -6739,7 +6804,7 @@ function initIndex() { { - id: 19, + id: 24, tag: "en", href: "/opensees-gallery/examples/viscousdamper/", title: "Frame with Viscous Dampers", @@ -6752,7 +6817,7 @@ function initIndex() { { - id: 20, + id: 25, tag: "en", href: "/opensees-gallery/docs/advanced-settings/icons/", title: "Icons", @@ -6765,7 +6830,7 @@ function initIndex() { { - id: 21, + id: 26, tag: "en", href: "/opensees-gallery/examples/cantilevertransient/", title: "Inelastic Cantilever", @@ -6778,7 +6843,7 @@ function initIndex() { { - id: 22, + id: 27, tag: "en", href: "/opensees-gallery/examples/example3/", title: "Inelastic Plane Frame", @@ -6791,7 +6856,7 @@ function initIndex() { { - id: 23, + id: 28, tag: "en", href: "/opensees-gallery/examples/inelasticsdof/", title: "Inelastic SDOF", @@ -6804,7 +6869,7 @@ function initIndex() { { - id: 24, + id: 29, tag: "en", href: "/opensees-gallery/docs/getting-started/introduction/", title: "Introduction", @@ -6817,7 +6882,7 @@ function initIndex() { { - id: 25, + id: 30, tag: "en", href: "/opensees-gallery/docs/configuration/layout/", title: "Layout", @@ -6830,7 +6895,7 @@ function initIndex() { { - id: 26, + id: 31, tag: "en", href: "/opensees-gallery/docs/about/license/", title: "License", @@ -6843,7 +6908,7 @@ function initIndex() { { - id: 27, + id: 32, tag: "en", href: "/opensees-gallery/examples/chopra-10.4/", title: "Matrix Eigenvalue Analysis", @@ -6856,20 +6921,20 @@ function initIndex() { { - id: 28, + id: 33, tag: "en", href: "/opensees-gallery/docs/getting-started/modeling/", title: "Modeling", - description: "To run multiple models simultaneously, use openseespy.Model(...) (capital M) instead of the regular openseespy.model(...) (lowercase m) function, and invoke all subsequent modeling functions (e.g. node(...), element(...), fix(...), etc) as methods on the object returned from Model() instead of the openseespy submodule directly. For example, instead of:\nimport opensees.openseespy as ops ops.model(\u0026#34;basic\u0026#34;, \u0026#34;-ndm\u0026#34;, 2, \u0026#34;-ndf\u0026#34;, 3) ops.node(1, 2.0, 3.0)", + description: "Modeling in Python \u0026nbsp; The best practice for modeling in Python is to create a model class by calling the opensees.openseespy.Model(...) constructor (note the capital \u0026ldquo;M\u0026rdquo;). All standard OpenSees functions, as documented here\u0026nbsp; can be called as methods on the object that is retured. For example:\n", - content: "To run multiple models simultaneously, use openseespy.Model(...) (capital M) instead of the regular openseespy.model(...) (lowercase m) function, and invoke all subsequent modeling functions (e.g. node(...), element(...), fix(...), etc) as methods on the object returned from Model() instead of the openseespy submodule directly. For example, instead of:\nimport opensees.openseespy as ops ops.model(\u0026#34;basic\u0026#34;, \u0026#34;-ndm\u0026#34;, 2, \u0026#34;-ndf\u0026#34;, 3) ops.node(1, 2.0, 3.0)do\nimport opensees.openseespy as ops model = ops.Model(ndm=2, ndf=3) model.node(1, 2.0, 3.0)" + content: "Modeling in Python \u0026nbsp; The best practice for modeling in Python is to create a model class by calling the opensees.openseespy.Model(...) constructor (note the capital \u0026ldquo;M\u0026rdquo;). All standard OpenSees functions, as documented here\u0026nbsp; can be called as methods on the object that is retured. For example:\nimport opensees.openseespy as ops model = ops.Model(ndm=2, ndf=3) model.node(1, 2.0, 3.0) Evaluate Tcl models from Python \u0026nbsp; The first scripting interface to OpenSees used a programming language called Tcl, which continues to be supported. To execute Tcl commands from a Python script, just create an instance of the opensees.openseespy.Model class and call its eval() method:\nimport opensees.openseespy as ops model = ops.Model() model.eval(\u0026#34;model Basic -ndm 2\u0026#34;) model.eval(\u0026#34;print -json\u0026#34;)Full Tcl files can be conveniently executed in this way. For example, if a Tcl file called model.tcl exists in the current working directory:\nimport opensees.openseespy as ops model = ops.Model() with open(\u0026#34;model.tcl\u0026#34;, \u0026#34;r\u0026#34;) as f: model.eval(f.read())" }) .add( { - id: 29, + id: 34, tag: "en", href: "/opensees-gallery/docs/advanced-settings/module-development/", title: "Module development", @@ -6882,7 +6947,7 @@ function initIndex() { { - id: 30, + id: 35, tag: "en", href: "/opensees-gallery/examples/example2/", title: "Moment-Curvature Analysis", @@ -6895,20 +6960,20 @@ function initIndex() { { - id: 31, + id: 36, tag: "en", href: "/opensees-gallery/examples/framebuckling/", title: "Nonlinear Geometry", description: "Corotational frame elements are used to approximate Euler\u0026rsquo;s buckling load, which is given by: Peuler=π2EIL2 P_{\\mathrm{euler}} = \\frac{\\pi^2 EI}{L^2} This example is adapted from https://github.com/denavit/OpenSees-Examples\u0026nbsp; . The files for the problem are buckling.py for Python, and buckling.tcl for Tcl.\n", - content: "Corotational frame elements are used to approximate Euler\u0026rsquo;s buckling load, which is given by: Peuler=π2EIL2 P_\\mathrmeuler = \\frac\\pi^2 EIL^2 This example is adapted from https://github.com/denavit/OpenSees-Examples\u0026nbsp; . The files for the problem are buckling.py for Python, and buckling.tcl for Tcl.\nλ=PL2EI[1−P/(ksGA)]=PL2χEIχ=1−P/(ksGA)P=χλ2EI/L2. \\begingathered \\lambda=\\sqrt\\fracP L^2E I\\left[1-P /\\left(k_\\mathrms G A\\right)\\right]=\\sqrt\\fracP L^2\\chi E I \\\\ \\chi=1-P /\\left(k_\\mathrms G A\\right) \\\\ P=\\chi \\lambda^2 E I / L^2 . \\endgathered χ=11+λ2EI/(ksGAL2)=11+λ2φ/12P=λ2EI/L21+λ2φ/12. \\begingathered \\chi=\\frac11+\\lambda^2 E I /\\left(k_\\mathrms G A L^2\\right)=\\frac11+\\lambda^2 \\varphi / 12 \\\\ P=\\frac\\lambda^2 E I / L^21+\\lambda^2 \\varphi / 12 . \\endgathered tan⁡λcr =χλcr =λcr 1+λcr 2φ/12 \\tan \\lambda_\\text cr =\\chi \\lambda_\\text cr =\\frac\\lambda_\\text cr 1+\\lambda_\\text cr 2 \\varphi / 12" + content: "Corotational frame elements are used to approximate Euler\u0026rsquo;s buckling load, which is given by: Peuler=π2EIL2 P_\\mathrmeuler = \\frac\\pi^2 EIL^2 This example is adapted from https://github.com/denavit/OpenSees-Examples\u0026nbsp; . The files for the problem are buckling.py for Python, and buckling.tcl for Tcl.\nTheory \u0026nbsp; Buckling Analysis \u0026nbsp; Loosely speaking, buckling happens when there are multiple shapes that a structure can deform into that will be in equilibrium with it\u0026rsquo;s applied loads. This implies that at the point of buckling, there are multiple independent displacement increments u\\bmu which will be mapped to the same resisting load by the tangent K\\bmK . In otherwords, The buckling load is the point at which K\\bmK becomes singular. If we consider K\\bmK as a function of the load factor λ\\bm\\lambda , this condition can be expressed as the nonlinear root-finding problem: det⁡K(λ)=0 \\operatornamedet\\bmK(\\lambda) = 0 For many classical models, the dependence of K\\bmK on λ\\lambda is linear, and in this case the problem is equivalent to a generalized eigenvalue problem which is computationally much more tractable. However, even if K\\bmK is nonlinear in λ\\lambda , one may still investigate the linearized buckling problem, where an eigenvalue problem is obtained by learizing K(λ)\\bmK(\\lambda) : K(λ)≈K(0)+K′(0)λ \\bmK(\\lambda) \\approx \\bmK(0) + \\bmK^\\prime(0) \\lambda where K′\\bmK^\\prime is the derivative of K\\bmK with respect to λ\\lambda .\nTimoshenko Column Buckling \u0026nbsp; λ=PL2EI[1−P/(ksGA)]=PL2χEIχ=1−P/(ksGA)P=χλ2EI/L2. \\begingathered \\lambda=\\sqrt\\fracP L^2E I\\left[1-P /\\left(k_\\mathrms G A\\right)\\right]=\\sqrt\\fracP L^2\\chi E I \\\\ \\chi=1-P /\\left(k_\\mathrms G A\\right) \\\\ P=\\chi \\lambda^2 E I / L^2 . \\endgathered χ=11+λ2EI/(ksGAL2)=11+λ2φ/12P=λ2EI/L21+λ2φ/12. \\begingathered \\chi=\\frac11+\\lambda^2 E I /\\left(k_\\mathrms G A L^2\\right)=\\frac11+\\lambda^2 \\varphi / 12 \\\\ P=\\frac\\lambda^2 E I / L^21+\\lambda^2 \\varphi / 12 . \\endgathered tan⁡λcr =χλcr =λcr 1+λcr 2φ/12 \\tan \\lambda_\\text cr =\\chi \\lambda_\\text cr =\\frac\\lambda_\\text cr 1+\\lambda_\\text cr 2 \\varphi / 12" }) .add( { - id: 32, + id: 37, tag: "en", href: "/opensees-gallery/docs/advanced-settings/overview/", title: "Overview", @@ -6921,7 +6986,7 @@ function initIndex() { { - id: 33, + id: 38, tag: "en", href: "/opensees-gallery/docs/advanced-settings/partial-development/", title: "Partial development", @@ -6934,7 +6999,7 @@ function initIndex() { { - id: 34, + id: 39, tag: "en", href: "/opensees-gallery/docs/getting-started/python/", title: "Python", @@ -6947,7 +7012,7 @@ function initIndex() { { - id: 35, + id: 40, tag: "en", href: "/opensees-gallery/releases/", title: "Releases", @@ -6960,7 +7025,7 @@ function initIndex() { { - id: 36, + id: 41, tag: "en", href: "/opensees-gallery/examples/spectrum/", title: "RotD Spectrum", @@ -6973,7 +7038,7 @@ function initIndex() { { - id: 37, + id: 42, tag: "en", href: "/opensees-gallery/examples/sathertower/", title: "Sather Tower", @@ -6986,7 +7051,7 @@ function initIndex() { { - id: 38, + id: 43, tag: "en", href: "/opensees-gallery/docs/advanced-settings/scripts/", title: "Scripts", @@ -6999,7 +7064,7 @@ function initIndex() { { - id: 39, + id: 44, tag: "en", href: "/opensees-gallery/examples/sensitivity/", title: "Sensitivity", @@ -7012,7 +7077,7 @@ function initIndex() { { - id: 40, + id: 45, tag: "en", href: "/opensees-gallery/examples/shallowdome/", title: "Shallow Dome", @@ -7025,7 +7090,7 @@ function initIndex() { { - id: 41, + id: 46, tag: "en", href: "/opensees-gallery/examples/shellframe/", title: "Shell Diaphragms", @@ -7038,7 +7103,7 @@ function initIndex() { { - id: 42, + id: 47, tag: "en", href: "/opensees-gallery/examples/pendulum/", title: "Simple Pendulum", @@ -7051,7 +7116,7 @@ function initIndex() { { - id: 43, + id: 48, tag: "en", href: "/opensees-gallery/examples/example6/", title: "Simply Supported Solid Beam", @@ -7064,7 +7129,7 @@ function initIndex() { { - id: 44, + id: 49, tag: "en", href: "/opensees-gallery/docs/advanced-settings/styles/", title: "Styles", @@ -7077,7 +7142,7 @@ function initIndex() { { - id: 45, + id: 50, tag: "en", href: "/opensees-gallery/examples/shelltwist/", title: "Twisted Cantilever", @@ -7090,7 +7155,7 @@ function initIndex() { { - id: 46, + id: 51, tag: "en", href: "/opensees-gallery/examples/wrench/", title: "Wrench", diff --git a/js/main.bundle.en.min.d4c74b7538dce1f49e854302330c53f26de8ef70327915eaa2b7aea55585b707.js b/js/main.bundle.en.min.d4c74b7538dce1f49e854302330c53f26de8ef70327915eaa2b7aea55585b707.js new file mode 100644 index 00000000..b593ac82 --- /dev/null +++ b/js/main.bundle.en.min.d4c74b7538dce1f49e854302330c53f26de8ef70327915eaa2b7aea55585b707.js @@ -0,0 +1,503 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */const alert=document.getElementById("page-alert"),closeBtn=document.getElementById("page-alert-btn-close");if(alert!==null&&closeBtn!==null){const version=alert.getAttribute("data-page-alert-version")||"unknown",hideAlert=sessionStorage.getItem(`page-alert-${version}`)!==null;hideAlert&&alert.classList.add("d-none"),closeBtn.addEventListener("click",()=>{sessionStorage.setItem(`page-alert-${version}`,"seen"),alert.classList.add("d-none")})}function reveal(){const reveals=document.querySelectorAll(".reveal");for(let i=0;i{document.querySelectorAll("pre > code").forEach(codeBlock=>{const button=document.createElement("button");button.className="clipboard-button",button.setAttribute("data-toast-target","toast-copied-code-message"),button.setAttribute("aria-label","copy to clipboard"),button.type="button",button.innerHTML=svgCopy,button.addEventListener("click",()=>{const text=codeBlock.innerText.split(` +`).filter(Boolean).join(` +`);clipboard.writeText(text).then(()=>{button.blur(),button.innerHTML=svgCheck,setTimeout(()=>button.innerHTML=svgCopy,2e3)},error=>button.innerHTML="Error")});const pre=codeBlock.parentNode;pre.parentNode.insertBefore(button,pre)})};navigator&&navigator.clipboard&&addCopyButtons(navigator.clipboard),document.querySelectorAll("[data-clipboard]").forEach(trigger=>{const text=trigger.getAttribute("data-clipboard");trigger.addEventListener("click",()=>{navigator.clipboard.writeText(text)})});const url=new URL(window.location.href),menu=url.searchParams.get("menu"),child=url.searchParams.get("child"),menuItems=document.querySelectorAll('[data-nav="main"]');if(menu!==null){menuItems.forEach(element=>{element.classList.remove("active")});const targetMainItems=document.querySelectorAll(`[data-nav-main="${menu}"]:not([data-nav-child])`);targetMainItems.forEach(element=>{element.classList.add("active")});const targetChildItems=document.querySelectorAll(`[data-nav-main="${menu}"][data-nav-child="${child}"]`);targetChildItems.forEach(element=>{element.classList.add("active")})}(function(global,factory){typeof exports=="object"&&typeof module!="undefined"?module.exports=factory():typeof define=="function"&&define.amd?define(factory):(global=typeof globalThis!="undefined"?globalThis:global||self,global.bootstrap=factory())})(this,function(){"use strict";const elementMap=new Map,Data={set(element,key,instance){elementMap.has(element)||elementMap.set(element,new Map);const instanceMap=elementMap.get(element);if(!instanceMap.has(key)&&instanceMap.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);return}instanceMap.set(key,instance)},get(element,key){return elementMap.has(element)?elementMap.get(element).get(key)||null:null},remove(element,key){if(!elementMap.has(element))return;const instanceMap=elementMap.get(element);instanceMap.delete(key),instanceMap.size===0&&elementMap.delete(element)}},MAX_UID=1e6,MILLISECONDS_MULTIPLIER=1e3,TRANSITION_END="transitionend",parseSelector=selector=>(selector&&window.CSS&&window.CSS.escape&&(selector=selector.replace(/#([^\s"#']+)/g,(match,id)=>`#${CSS.escape(id)}`)),selector),toType=object=>object==null?`${object}`:Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(),getUID=prefix=>{do prefix+=Math.floor(Math.random()*MAX_UID);while(document.getElementById(prefix))return prefix},getTransitionDurationFromElement=element=>{if(!element)return 0;let{transitionDuration,transitionDelay}=window.getComputedStyle(element);const floatTransitionDuration=Number.parseFloat(transitionDuration),floatTransitionDelay=Number.parseFloat(transitionDelay);return!floatTransitionDuration&&!floatTransitionDelay?0:(transitionDuration=transitionDuration.split(",")[0],transitionDelay=transitionDelay.split(",")[0],(Number.parseFloat(transitionDuration)+Number.parseFloat(transitionDelay))*MILLISECONDS_MULTIPLIER)},triggerTransitionEnd=element=>{element.dispatchEvent(new Event(TRANSITION_END))},isElement$1=object=>!!object&&typeof object=="object"&&(typeof object.jquery!="undefined"&&(object=object[0]),typeof object.nodeType!="undefined"),getElement=object=>isElement$1(object)?object.jquery?object[0]:object:typeof object=="string"&&object.length>0?document.querySelector(parseSelector(object)):null,isVisible=element=>{if(!isElement$1(element)||element.getClientRects().length===0)return!1;const elementIsVisible=getComputedStyle(element).getPropertyValue("visibility")==="visible",closedDetails=element.closest("details:not([open])");if(!closedDetails)return elementIsVisible;if(closedDetails!==element){const summary=element.closest("summary");if(summary&&summary.parentNode!==closedDetails)return!1;if(summary===null)return!1}return elementIsVisible},isDisabled=element=>!element||element.nodeType!==Node.ELEMENT_NODE||!!element.classList.contains("disabled")||(typeof element.disabled!="undefined"?element.disabled:element.hasAttribute("disabled")&&element.getAttribute("disabled")!=="false"),findShadowRoot=element=>{if(!document.documentElement.attachShadow)return null;if(typeof element.getRootNode=="function"){const root=element.getRootNode();return root instanceof ShadowRoot?root:null}return element instanceof ShadowRoot?element:element.parentNode?findShadowRoot(element.parentNode):null},noop=()=>{},reflow=element=>{element.offsetHeight},getjQuery=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,DOMContentLoadedCallbacks=[],onDOMContentLoaded=callback=>{document.readyState==="loading"?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",()=>{for(const callback of DOMContentLoadedCallbacks)callback()}),DOMContentLoadedCallbacks.push(callback)):callback()},isRTL=()=>document.documentElement.dir==="rtl",defineJQueryPlugin=plugin=>{onDOMContentLoaded(()=>{const $=getjQuery();if($){const name=plugin.NAME,JQUERY_NO_CONFLICT=$.fn[name];$.fn[name]=plugin.jQueryInterface,$.fn[name].Constructor=plugin,$.fn[name].noConflict=()=>($.fn[name]=JQUERY_NO_CONFLICT,plugin.jQueryInterface)}})},execute=(possibleCallback,args=[],defaultValue=possibleCallback)=>typeof possibleCallback=="function"?possibleCallback(...args):defaultValue,executeAfterTransition=(callback,transitionElement,waitForTransition=!0)=>{if(!waitForTransition){execute(callback);return}const durationPadding=5,emulatedDuration=getTransitionDurationFromElement(transitionElement)+durationPadding;let called=!1;const handler=({target})=>{if(target!==transitionElement)return;called=!0,transitionElement.removeEventListener(TRANSITION_END,handler),execute(callback)};transitionElement.addEventListener(TRANSITION_END,handler),setTimeout(()=>{called||triggerTransitionEnd(transitionElement)},emulatedDuration)},getNextActiveElement=(list,activeElement,shouldGetNext,isCycleAllowed)=>{const listLength=list.length;let index=list.indexOf(activeElement);return index===-1?!shouldGetNext&&isCycleAllowed?list[listLength-1]:list[0]:(index+=shouldGetNext?1:-1,isCycleAllowed&&(index=(index+listLength)%listLength),list[Math.max(0,Math.min(index,listLength-1))])},namespaceRegex=/[^.]*(?=\..*)\.|.*/,stripNameRegex=/\..*/,stripUidRegex=/::\d+$/,eventRegistry={};let uidEvent=1;const customEvents={mouseenter:"mouseover",mouseleave:"mouseout"},nativeEvents=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function makeEventUid(element,uid){return uid&&`${uid}::${uidEvent++}`||element.uidEvent||uidEvent++}function getElementEvents(element){const uid=makeEventUid(element);return element.uidEvent=uid,eventRegistry[uid]=eventRegistry[uid]||{},eventRegistry[uid]}function bootstrapHandler(element,fn){return function handler(event){return hydrateObj(event,{delegateTarget:element}),handler.oneOff&&EventHandler.off(element,event.type,fn),fn.apply(element,[event])}}function bootstrapDelegationHandler(element,selector,fn){return function handler(event){const domElements=element.querySelectorAll(selector);for(let{target}=event;target&&target!==this;target=target.parentNode)for(const domElement of domElements){if(domElement!==target)continue;return hydrateObj(event,{delegateTarget:target}),handler.oneOff&&EventHandler.off(element,event.type,selector,fn),fn.apply(target,[event])}}}function findHandler(events,callable,delegationSelector=null){return Object.values(events).find(event=>event.callable===callable&&event.delegationSelector===delegationSelector)}function normalizeParameters(originalTypeEvent,handler,delegationFunction){const isDelegated=typeof handler=="string",callable=isDelegated?delegationFunction:handler||delegationFunction;let typeEvent=getTypeEvent(originalTypeEvent);return nativeEvents.has(typeEvent)||(typeEvent=originalTypeEvent),[isDelegated,callable,typeEvent]}function addHandler(element,originalTypeEvent,handler,delegationFunction,oneOff){if(typeof originalTypeEvent!="string"||!element)return;let[isDelegated,callable,typeEvent]=normalizeParameters(originalTypeEvent,handler,delegationFunction);if(originalTypeEvent in customEvents){const wrapFunction=fn=>function(event){if(!event.relatedTarget||event.relatedTarget!==event.delegateTarget&&!event.delegateTarget.contains(event.relatedTarget))return fn.call(this,event)};callable=wrapFunction(callable)}const events=getElementEvents(element),handlers=events[typeEvent]||(events[typeEvent]={}),previousFunction=findHandler(handlers,callable,isDelegated?handler:null);if(previousFunction){previousFunction.oneOff=previousFunction.oneOff&&oneOff;return}const uid=makeEventUid(callable,originalTypeEvent.replace(namespaceRegex,"")),fn=isDelegated?bootstrapDelegationHandler(element,handler,callable):bootstrapHandler(element,callable);fn.delegationSelector=isDelegated?handler:null,fn.callable=callable,fn.oneOff=oneOff,fn.uidEvent=uid,handlers[uid]=fn,element.addEventListener(typeEvent,fn,isDelegated)}function removeHandler(element,events,typeEvent,handler,delegationSelector){const fn=findHandler(events[typeEvent],handler,delegationSelector);if(!fn)return;element.removeEventListener(typeEvent,fn,Boolean(delegationSelector)),delete events[typeEvent][fn.uidEvent]}function removeNamespacedHandlers(element,events,typeEvent,namespace){const storeElementEvent=events[typeEvent]||{};for(const[handlerKey,event]of Object.entries(storeElementEvent))handlerKey.includes(namespace)&&removeHandler(element,events,typeEvent,event.callable,event.delegationSelector)}function getTypeEvent(event){return event=event.replace(stripNameRegex,""),customEvents[event]||event}const EventHandler={on(element,event,handler,delegationFunction){addHandler(element,event,handler,delegationFunction,!1)},one(element,event,handler,delegationFunction){addHandler(element,event,handler,delegationFunction,!0)},off(element,originalTypeEvent,handler,delegationFunction){if(typeof originalTypeEvent!="string"||!element)return;const[isDelegated,callable,typeEvent]=normalizeParameters(originalTypeEvent,handler,delegationFunction),inNamespace=typeEvent!==originalTypeEvent,events=getElementEvents(element),storeElementEvent=events[typeEvent]||{},isNamespace=originalTypeEvent.startsWith(".");if(typeof callable!="undefined"){if(!Object.keys(storeElementEvent).length)return;removeHandler(element,events,typeEvent,callable,isDelegated?handler:null);return}if(isNamespace)for(const elementEvent of Object.keys(events))removeNamespacedHandlers(element,events,elementEvent,originalTypeEvent.slice(1));for(const[keyHandlers,event]of Object.entries(storeElementEvent)){const handlerKey=keyHandlers.replace(stripUidRegex,"");(!inNamespace||originalTypeEvent.includes(handlerKey))&&removeHandler(element,events,typeEvent,event.callable,event.delegationSelector)}},trigger(element,event,args){if(typeof event!="string"||!element)return null;const $=getjQuery(),typeEvent=getTypeEvent(event),inNamespace=event!==typeEvent;let jQueryEvent=null,bubbles=!0,nativeDispatch=!0,defaultPrevented=!1;inNamespace&&$&&(jQueryEvent=$.Event(event,args),$(element).trigger(jQueryEvent),bubbles=!jQueryEvent.isPropagationStopped(),nativeDispatch=!jQueryEvent.isImmediatePropagationStopped(),defaultPrevented=jQueryEvent.isDefaultPrevented());const evt=hydrateObj(new Event(event,{bubbles,cancelable:!0}),args);return defaultPrevented&&evt.preventDefault(),nativeDispatch&&element.dispatchEvent(evt),evt.defaultPrevented&&jQueryEvent&&jQueryEvent.preventDefault(),evt}};function hydrateObj(obj,meta={}){for(const[key,value]of Object.entries(meta))try{obj[key]=value}catch{Object.defineProperty(obj,key,{configurable:!0,get(){return value}})}return obj}function normalizeData(value){if(value==="true")return!0;if(value==="false")return!1;if(value===Number(value).toString())return Number(value);if(value===""||value==="null")return null;if(typeof value!="string")return value;try{return JSON.parse(decodeURIComponent(value))}catch{return value}}function normalizeDataKey(key){return key.replace(/[A-Z]/g,chr=>`-${chr.toLowerCase()}`)}const Manipulator={setDataAttribute(element,key,value){element.setAttribute(`data-bs-${normalizeDataKey(key)}`,value)},removeDataAttribute(element,key){element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)},getDataAttributes(element){if(!element)return{};const attributes={},bsKeys=Object.keys(element.dataset).filter(key=>key.startsWith("bs")&&!key.startsWith("bsConfig"));for(const key of bsKeys){let pureKey=key.replace(/^bs/,"");pureKey=pureKey.charAt(0).toLowerCase()+pureKey.slice(1,pureKey.length),attributes[pureKey]=normalizeData(element.dataset[key])}return attributes},getDataAttribute(element,key){return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))}};class Config{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(config){return config=this._mergeConfigObj(config),config=this._configAfterMerge(config),this._typeCheckConfig(config),config}_configAfterMerge(config){return config}_mergeConfigObj(config,element){const jsonConfig=isElement$1(element)?Manipulator.getDataAttribute(element,"config"):{};return{...this.constructor.Default,...typeof jsonConfig=="object"?jsonConfig:{},...isElement$1(element)?Manipulator.getDataAttributes(element):{},...typeof config=="object"?config:{}}}_typeCheckConfig(config,configTypes=this.constructor.DefaultType){for(const[property,expectedTypes]of Object.entries(configTypes)){const value=config[property],valueType=isElement$1(value)?"element":toType(value);if(!new RegExp(expectedTypes).test(valueType))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`)}}}const VERSION="5.3.3";class BaseComponent extends Config{constructor(element,config){if(super(),element=getElement(element),!element)return;this._element=element,this._config=this._getConfig(config),Data.set(this._element,this.constructor.DATA_KEY,this)}dispose(){Data.remove(this._element,this.constructor.DATA_KEY),EventHandler.off(this._element,this.constructor.EVENT_KEY);for(const propertyName of Object.getOwnPropertyNames(this))this[propertyName]=null}_queueCallback(callback,element,isAnimated=!0){executeAfterTransition(callback,element,isAnimated)}_getConfig(config){return config=this._mergeConfigObj(config,this._element),config=this._configAfterMerge(config),this._typeCheckConfig(config),config}static getInstance(element){return Data.get(getElement(element),this.DATA_KEY)}static getOrCreateInstance(element,config={}){return this.getInstance(element)||new this(element,typeof config=="object"?config:null)}static get VERSION(){return VERSION}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(name){return`${name}${this.EVENT_KEY}`}}const getSelector=element=>{let selector=element.getAttribute("data-bs-target");if(!selector||selector==="#"){let hrefAttribute=element.getAttribute("href");if(!hrefAttribute||!hrefAttribute.includes("#")&&!hrefAttribute.startsWith("."))return null;hrefAttribute.includes("#")&&!hrefAttribute.startsWith("#")&&(hrefAttribute=`#${hrefAttribute.split("#")[1]}`),selector=hrefAttribute&&hrefAttribute!=="#"?hrefAttribute.trim():null}return selector?selector.split(",").map(sel=>parseSelector(sel)).join(","):null},SelectorEngine={find(selector,element=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(element,selector))},findOne(selector,element=document.documentElement){return Element.prototype.querySelector.call(element,selector)},children(element,selector){return[].concat(...element.children).filter(child=>child.matches(selector))},parents(element,selector){const parents=[];let ancestor=element.parentNode.closest(selector);for(;ancestor;)parents.push(ancestor),ancestor=ancestor.parentNode.closest(selector);return parents},prev(element,selector){let previous=element.previousElementSibling;for(;previous;){if(previous.matches(selector))return[previous];previous=previous.previousElementSibling}return[]},next(element,selector){let next=element.nextElementSibling;for(;next;){if(next.matches(selector))return[next];next=next.nextElementSibling}return[]},focusableChildren(element){const focusables=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(selector=>`${selector}:not([tabindex^="-"])`).join(",");return this.find(focusables,element).filter(el=>!isDisabled(el)&&isVisible(el))},getSelectorFromElement(element){const selector=getSelector(element);return selector?SelectorEngine.findOne(selector)?selector:null:null},getElementFromSelector(element){const selector=getSelector(element);return selector?SelectorEngine.findOne(selector):null},getMultipleElementsFromSelector(element){const selector=getSelector(element);return selector?SelectorEngine.find(selector):[]}},enableDismissTrigger=(component,method="hide")=>{const clickEvent=`click.dismiss${component.EVENT_KEY}`,name=component.NAME;EventHandler.on(document,clickEvent,`[data-bs-dismiss="${name}"]`,function(event){if(["A","AREA"].includes(this.tagName)&&event.preventDefault(),isDisabled(this))return;const target=SelectorEngine.getElementFromSelector(this)||this.closest(`.${name}`),instance=component.getOrCreateInstance(target);instance[method]()})},NAME$f="alert",DATA_KEY$a="bs.alert",EVENT_KEY$b=`.${DATA_KEY$a}`,EVENT_CLOSE=`close${EVENT_KEY$b}`,EVENT_CLOSED=`closed${EVENT_KEY$b}`,CLASS_NAME_FADE$5="fade",CLASS_NAME_SHOW$8="show";class Alert extends BaseComponent{static get NAME(){return NAME$f}close(){const closeEvent=EventHandler.trigger(this._element,EVENT_CLOSE);if(closeEvent.defaultPrevented)return;this._element.classList.remove(CLASS_NAME_SHOW$8);const isAnimated=this._element.classList.contains(CLASS_NAME_FADE$5);this._queueCallback(()=>this._destroyElement(),this._element,isAnimated)}_destroyElement(){this._element.remove(),EventHandler.trigger(this._element,EVENT_CLOSED),this.dispose()}static jQueryInterface(config){return this.each(function(){const data=Alert.getOrCreateInstance(this);if(typeof config!="string")return;if(data[config]===void 0||config.startsWith("_")||config==="constructor")throw new TypeError(`No method named "${config}"`);data[config](this)})}}enableDismissTrigger(Alert,"close"),defineJQueryPlugin(Alert);const NAME$e="button",DATA_KEY$9="bs.button",EVENT_KEY$a=`.${DATA_KEY$9}`,DATA_API_KEY$6=".data-api",CLASS_NAME_ACTIVE$3="active",SELECTOR_DATA_TOGGLE$5='[data-bs-toggle="button"]',EVENT_CLICK_DATA_API$6=`click${EVENT_KEY$a}${DATA_API_KEY$6}`;class Button extends BaseComponent{static get NAME(){return NAME$e}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(CLASS_NAME_ACTIVE$3))}static jQueryInterface(config){return this.each(function(){const data=Button.getOrCreateInstance(this);config==="toggle"&&data[config]()})}}EventHandler.on(document,EVENT_CLICK_DATA_API$6,SELECTOR_DATA_TOGGLE$5,event=>{event.preventDefault();const button=event.target.closest(SELECTOR_DATA_TOGGLE$5),data=Button.getOrCreateInstance(button);data.toggle()}),defineJQueryPlugin(Button);const NAME$d="swipe",EVENT_KEY$9=".bs.swipe",EVENT_TOUCHSTART=`touchstart${EVENT_KEY$9}`,EVENT_TOUCHMOVE=`touchmove${EVENT_KEY$9}`,EVENT_TOUCHEND=`touchend${EVENT_KEY$9}`,EVENT_POINTERDOWN=`pointerdown${EVENT_KEY$9}`,EVENT_POINTERUP=`pointerup${EVENT_KEY$9}`,POINTER_TYPE_TOUCH="touch",POINTER_TYPE_PEN="pen",CLASS_NAME_POINTER_EVENT="pointer-event",SWIPE_THRESHOLD=40,Default$c={endCallback:null,leftCallback:null,rightCallback:null},DefaultType$c={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Swipe extends Config{constructor(element,config){if(super(),this._element=element,!element||!Swipe.isSupported())return;this._config=this._getConfig(config),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents()}static get Default(){return Default$c}static get DefaultType(){return DefaultType$c}static get NAME(){return NAME$d}dispose(){EventHandler.off(this._element,EVENT_KEY$9)}_start(event){if(!this._supportPointerEvents){this._deltaX=event.touches[0].clientX;return}this._eventIsPointerPenTouch(event)&&(this._deltaX=event.clientX)}_end(event){this._eventIsPointerPenTouch(event)&&(this._deltaX=event.clientX-this._deltaX),this._handleSwipe(),execute(this._config.endCallback)}_move(event){this._deltaX=event.touches&&event.touches.length>1?0:event.touches[0].clientX-this._deltaX}_handleSwipe(){const absDeltaX=Math.abs(this._deltaX);if(absDeltaX<=SWIPE_THRESHOLD)return;const direction=absDeltaX/this._deltaX;if(this._deltaX=0,!direction)return;execute(direction>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(EventHandler.on(this._element,EVENT_POINTERDOWN,event=>this._start(event)),EventHandler.on(this._element,EVENT_POINTERUP,event=>this._end(event)),this._element.classList.add(CLASS_NAME_POINTER_EVENT)):(EventHandler.on(this._element,EVENT_TOUCHSTART,event=>this._start(event)),EventHandler.on(this._element,EVENT_TOUCHMOVE,event=>this._move(event)),EventHandler.on(this._element,EVENT_TOUCHEND,event=>this._end(event)))}_eventIsPointerPenTouch(event){return this._supportPointerEvents&&(event.pointerType===POINTER_TYPE_PEN||event.pointerType===POINTER_TYPE_TOUCH)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const NAME$c="carousel",DATA_KEY$8="bs.carousel",EVENT_KEY$8=`.${DATA_KEY$8}`,DATA_API_KEY$5=".data-api",ARROW_LEFT_KEY$1="ArrowLeft",ARROW_RIGHT_KEY$1="ArrowRight",TOUCHEVENT_COMPAT_WAIT=500,ORDER_NEXT="next",ORDER_PREV="prev",DIRECTION_LEFT="left",DIRECTION_RIGHT="right",EVENT_SLIDE=`slide${EVENT_KEY$8}`,EVENT_SLID=`slid${EVENT_KEY$8}`,EVENT_KEYDOWN$1=`keydown${EVENT_KEY$8}`,EVENT_MOUSEENTER$1=`mouseenter${EVENT_KEY$8}`,EVENT_MOUSELEAVE$1=`mouseleave${EVENT_KEY$8}`,EVENT_DRAG_START=`dragstart${EVENT_KEY$8}`,EVENT_LOAD_DATA_API$3=`load${EVENT_KEY$8}${DATA_API_KEY$5}`,EVENT_CLICK_DATA_API$5=`click${EVENT_KEY$8}${DATA_API_KEY$5}`,CLASS_NAME_CAROUSEL="carousel",CLASS_NAME_ACTIVE$2="active",CLASS_NAME_SLIDE="slide",CLASS_NAME_END="carousel-item-end",CLASS_NAME_START="carousel-item-start",CLASS_NAME_NEXT="carousel-item-next",CLASS_NAME_PREV="carousel-item-prev",SELECTOR_ACTIVE=".active",SELECTOR_ITEM=".carousel-item",SELECTOR_ACTIVE_ITEM=SELECTOR_ACTIVE+SELECTOR_ITEM,SELECTOR_ITEM_IMG=".carousel-item img",SELECTOR_INDICATORS=".carousel-indicators",SELECTOR_DATA_SLIDE="[data-bs-slide], [data-bs-slide-to]",SELECTOR_DATA_RIDE='[data-bs-ride="carousel"]',KEY_TO_DIRECTION={[ARROW_LEFT_KEY$1]:DIRECTION_RIGHT,[ARROW_RIGHT_KEY$1]:DIRECTION_LEFT},Default$b={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},DefaultType$b={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Carousel extends BaseComponent{constructor(element,config){super(element,config),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=SelectorEngine.findOne(SELECTOR_INDICATORS,this._element),this._addEventListeners(),this._config.ride===CLASS_NAME_CAROUSEL&&this.cycle()}static get Default(){return Default$b}static get DefaultType(){return DefaultType$b}static get NAME(){return NAME$c}next(){this._slide(ORDER_NEXT)}nextWhenVisible(){!document.hidden&&isVisible(this._element)&&this.next()}prev(){this._slide(ORDER_PREV)}pause(){this._isSliding&&triggerTransitionEnd(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(!this._config.ride)return;if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.cycle());return}this.cycle()}to(index){const items=this._getItems();if(index>items.length-1||index<0)return;if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.to(index));return}const activeIndex=this._getItemIndex(this._getActive());if(activeIndex===index)return;const order=index>activeIndex?ORDER_NEXT:ORDER_PREV;this._slide(order,items[index])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(config){return config.defaultInterval=config.interval,config}_addEventListeners(){this._config.keyboard&&EventHandler.on(this._element,EVENT_KEYDOWN$1,event=>this._keydown(event)),this._config.pause==="hover"&&(EventHandler.on(this._element,EVENT_MOUSEENTER$1,()=>this.pause()),EventHandler.on(this._element,EVENT_MOUSELEAVE$1,()=>this._maybeEnableCycle())),this._config.touch&&Swipe.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const img of SelectorEngine.find(SELECTOR_ITEM_IMG,this._element))EventHandler.on(img,EVENT_DRAG_START,event=>event.preventDefault());const endCallBack=()=>{if(this._config.pause!=="hover")return;this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),TOUCHEVENT_COMPAT_WAIT+this._config.interval)},swipeConfig={leftCallback:()=>this._slide(this._directionToOrder(DIRECTION_LEFT)),rightCallback:()=>this._slide(this._directionToOrder(DIRECTION_RIGHT)),endCallback:endCallBack};this._swipeHelper=new Swipe(this._element,swipeConfig)}_keydown(event){if(/input|textarea/i.test(event.target.tagName))return;const direction=KEY_TO_DIRECTION[event.key];direction&&(event.preventDefault(),this._slide(this._directionToOrder(direction)))}_getItemIndex(element){return this._getItems().indexOf(element)}_setActiveIndicatorElement(index){if(!this._indicatorsElement)return;const activeIndicator=SelectorEngine.findOne(SELECTOR_ACTIVE,this._indicatorsElement);activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2),activeIndicator.removeAttribute("aria-current");const newActiveIndicator=SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`,this._indicatorsElement);newActiveIndicator&&(newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2),newActiveIndicator.setAttribute("aria-current","true"))}_updateInterval(){const element=this._activeElement||this._getActive();if(!element)return;const elementInterval=Number.parseInt(element.getAttribute("data-bs-interval"),10);this._config.interval=elementInterval||this._config.defaultInterval}_slide(order,element=null){if(this._isSliding)return;const activeElement=this._getActive(),isNext=order===ORDER_NEXT,nextElement=element||getNextActiveElement(this._getItems(),activeElement,isNext,this._config.wrap);if(nextElement===activeElement)return;const nextElementIndex=this._getItemIndex(nextElement),triggerEvent=eventName=>EventHandler.trigger(this._element,eventName,{relatedTarget:nextElement,direction:this._orderToDirection(order),from:this._getItemIndex(activeElement),to:nextElementIndex}),slideEvent=triggerEvent(EVENT_SLIDE);if(slideEvent.defaultPrevented)return;if(!activeElement||!nextElement)return;const isCycling=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(nextElementIndex),this._activeElement=nextElement;const directionalClassName=isNext?CLASS_NAME_START:CLASS_NAME_END,orderClassName=isNext?CLASS_NAME_NEXT:CLASS_NAME_PREV;nextElement.classList.add(orderClassName),reflow(nextElement),activeElement.classList.add(directionalClassName),nextElement.classList.add(directionalClassName);const completeCallBack=()=>{nextElement.classList.remove(directionalClassName,orderClassName),nextElement.classList.add(CLASS_NAME_ACTIVE$2),activeElement.classList.remove(CLASS_NAME_ACTIVE$2,orderClassName,directionalClassName),this._isSliding=!1,triggerEvent(EVENT_SLID)};this._queueCallback(completeCallBack,activeElement,this._isAnimated()),isCycling&&this.cycle()}_isAnimated(){return this._element.classList.contains(CLASS_NAME_SLIDE)}_getActive(){return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM,this._element)}_getItems(){return SelectorEngine.find(SELECTOR_ITEM,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(direction){return isRTL()?direction===DIRECTION_LEFT?ORDER_PREV:ORDER_NEXT:direction===DIRECTION_LEFT?ORDER_NEXT:ORDER_PREV}_orderToDirection(order){return isRTL()?order===ORDER_PREV?DIRECTION_LEFT:DIRECTION_RIGHT:order===ORDER_PREV?DIRECTION_RIGHT:DIRECTION_LEFT}static jQueryInterface(config){return this.each(function(){const data=Carousel.getOrCreateInstance(this,config);if(typeof config=="number"){data.to(config);return}if(typeof config=="string"){if(data[config]===void 0||config.startsWith("_")||config==="constructor")throw new TypeError(`No method named "${config}"`);data[config]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$5,SELECTOR_DATA_SLIDE,function(event){const target=SelectorEngine.getElementFromSelector(this);if(!target||!target.classList.contains(CLASS_NAME_CAROUSEL))return;event.preventDefault();const carousel=Carousel.getOrCreateInstance(target),slideIndex=this.getAttribute("data-bs-slide-to");if(slideIndex){carousel.to(slideIndex),carousel._maybeEnableCycle();return}if(Manipulator.getDataAttribute(this,"slide")==="next"){carousel.next(),carousel._maybeEnableCycle();return}carousel.prev(),carousel._maybeEnableCycle()}),EventHandler.on(window,EVENT_LOAD_DATA_API$3,()=>{const carousels=SelectorEngine.find(SELECTOR_DATA_RIDE);for(const carousel of carousels)Carousel.getOrCreateInstance(carousel)}),defineJQueryPlugin(Carousel);const NAME$b="collapse",DATA_KEY$7="bs.collapse",EVENT_KEY$7=`.${DATA_KEY$7}`,DATA_API_KEY$4=".data-api",EVENT_SHOW$6=`show${EVENT_KEY$7}`,EVENT_SHOWN$6=`shown${EVENT_KEY$7}`,EVENT_HIDE$6=`hide${EVENT_KEY$7}`,EVENT_HIDDEN$6=`hidden${EVENT_KEY$7}`,EVENT_CLICK_DATA_API$4=`click${EVENT_KEY$7}${DATA_API_KEY$4}`,CLASS_NAME_SHOW$7="show",CLASS_NAME_COLLAPSE="collapse",CLASS_NAME_COLLAPSING="collapsing",CLASS_NAME_COLLAPSED="collapsed",CLASS_NAME_DEEPER_CHILDREN=`:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`,CLASS_NAME_HORIZONTAL="collapse-horizontal",WIDTH="width",HEIGHT="height",SELECTOR_ACTIVES=".collapse.show, .collapse.collapsing",SELECTOR_DATA_TOGGLE$4='[data-bs-toggle="collapse"]',Default$a={parent:null,toggle:!0},DefaultType$a={parent:"(null|element)",toggle:"boolean"};class Collapse extends BaseComponent{constructor(element,config){super(element,config),this._isTransitioning=!1,this._triggerArray=[];const toggleList=SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);for(const elem of toggleList){const selector=SelectorEngine.getSelectorFromElement(elem),filterElement=SelectorEngine.find(selector).filter(foundElement=>foundElement===this._element);selector!==null&&filterElement.length&&this._triggerArray.push(elem)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Default$a}static get DefaultType(){return DefaultType$a}static get NAME(){return NAME$b}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let activeChildren=[];if(this._config.parent&&(activeChildren=this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element=>element!==this._element).map(element=>Collapse.getOrCreateInstance(element,{toggle:!1}))),activeChildren.length&&activeChildren[0]._isTransitioning)return;const startEvent=EventHandler.trigger(this._element,EVENT_SHOW$6);if(startEvent.defaultPrevented)return;for(const activeInstance of activeChildren)activeInstance.hide();const dimension=this._getDimension();this._element.classList.remove(CLASS_NAME_COLLAPSE),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.style[dimension]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const complete=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7),this._element.style[dimension]="",EventHandler.trigger(this._element,EVENT_SHOWN$6)},capitalizedDimension=dimension[0].toUpperCase()+dimension.slice(1),scrollSize=`scroll${capitalizedDimension}`;this._queueCallback(complete,this._element,!0),this._element.style[dimension]=`${this._element[scrollSize]}px`}hide(){if(this._isTransitioning||!this._isShown())return;const startEvent=EventHandler.trigger(this._element,EVENT_HIDE$6);if(startEvent.defaultPrevented)return;const dimension=this._getDimension();this._element.style[dimension]=`${this._element.getBoundingClientRect()[dimension]}px`,reflow(this._element),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.classList.remove(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7);for(const trigger of this._triggerArray){const element=SelectorEngine.getElementFromSelector(trigger);element&&!this._isShown(element)&&this._addAriaAndCollapsedClass([trigger],!1)}this._isTransitioning=!0;const complete=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE),EventHandler.trigger(this._element,EVENT_HIDDEN$6)};this._element.style[dimension]="",this._queueCallback(complete,this._element,!0)}_isShown(element=this._element){return element.classList.contains(CLASS_NAME_SHOW$7)}_configAfterMerge(config){return config.toggle=Boolean(config.toggle),config.parent=getElement(config.parent),config}_getDimension(){return this._element.classList.contains(CLASS_NAME_HORIZONTAL)?WIDTH:HEIGHT}_initializeChildren(){if(!this._config.parent)return;const children=this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);for(const element of children){const selected=SelectorEngine.getElementFromSelector(element);selected&&this._addAriaAndCollapsedClass([element],this._isShown(selected))}}_getFirstLevelChildren(selector){const children=SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN,this._config.parent);return SelectorEngine.find(selector,this._config.parent).filter(element=>!children.includes(element))}_addAriaAndCollapsedClass(triggerArray,isOpen){if(!triggerArray.length)return;for(const element of triggerArray)element.classList.toggle(CLASS_NAME_COLLAPSED,!isOpen),element.setAttribute("aria-expanded",isOpen)}static jQueryInterface(config){const _config={};return typeof config=="string"&&/show|hide/.test(config)&&(_config.toggle=!1),this.each(function(){const data=Collapse.getOrCreateInstance(this,_config);if(typeof config=="string"){if(typeof data[config]=="undefined")throw new TypeError(`No method named "${config}"`);data[config]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$4,SELECTOR_DATA_TOGGLE$4,function(event){(event.target.tagName==="A"||event.delegateTarget&&event.delegateTarget.tagName==="A")&&event.preventDefault();for(const element of SelectorEngine.getMultipleElementsFromSelector(this))Collapse.getOrCreateInstance(element,{toggle:!1}).toggle()}),defineJQueryPlugin(Collapse);var top="top",bottom="bottom",right="right",left="left",auto="auto",basePlacements=[top,bottom,right,left],start="start",end="end",clippingParents="clippingParents",viewport="viewport",popper="popper",reference="reference",variationPlacements=basePlacements.reduce(function(acc,placement){return acc.concat([placement+"-"+start,placement+"-"+end])},[]),placements=[].concat(basePlacements,[auto]).reduce(function(acc,placement){return acc.concat([placement,placement+"-"+start,placement+"-"+end])},[]),beforeRead="beforeRead",read="read",afterRead="afterRead",beforeMain="beforeMain",main="main",afterMain="afterMain",beforeWrite="beforeWrite",write="write",afterWrite="afterWrite",modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite];function getNodeName(element){return element?(element.nodeName||"").toLowerCase():null}function getWindow(node){if(node==null)return window;if(node.toString()!=="[object Window]"){var ownerDocument=node.ownerDocument;return ownerDocument?ownerDocument.defaultView||window:window}return node}function isElement(node){var OwnElement=getWindow(node).Element;return node instanceof OwnElement||node instanceof Element}function isHTMLElement(node){var OwnElement=getWindow(node).HTMLElement;return node instanceof OwnElement||node instanceof HTMLElement}function isShadowRoot(node){if(typeof ShadowRoot=="undefined")return!1;var OwnElement=getWindow(node).ShadowRoot;return node instanceof OwnElement||node instanceof ShadowRoot}function applyStyles(_ref){var state=_ref.state;Object.keys(state.elements).forEach(function(name){var style=state.styles[name]||{},attributes=state.attributes[name]||{},element=state.elements[name];if(!isHTMLElement(element)||!getNodeName(element))return;Object.assign(element.style,style),Object.keys(attributes).forEach(function(name){var value=attributes[name];value===!1?element.removeAttribute(name):element.setAttribute(name,value===!0?"":value)})})}function effect$2(_ref2){var state=_ref2.state,initialStyles={popper:{position:state.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(state.elements.popper.style,initialStyles.popper),state.styles=initialStyles,state.elements.arrow&&Object.assign(state.elements.arrow.style,initialStyles.arrow),function(){Object.keys(state.elements).forEach(function(name){var element=state.elements[name],attributes=state.attributes[name]||{},styleProperties=Object.keys(state.styles.hasOwnProperty(name)?state.styles[name]:initialStyles[name]),style=styleProperties.reduce(function(style,property){return style[property]="",style},{});if(!isHTMLElement(element)||!getNodeName(element))return;Object.assign(element.style,style),Object.keys(attributes).forEach(function(attribute){element.removeAttribute(attribute)})})}}const applyStyles$1={name:"applyStyles",enabled:!0,phase:"write",fn:applyStyles,effect:effect$2,requires:["computeStyles"]};function getBasePlacement(placement){return placement.split("-")[0]}var max=Math.max,min=Math.min,round=Math.round;function getUAString(){var uaData=navigator.userAgentData;return uaData!=null&&uaData.brands&&Array.isArray(uaData.brands)?uaData.brands.map(function(item){return item.brand+"/"+item.version}).join(" "):navigator.userAgent}function isLayoutViewport(){return!/^((?!chrome|android).)*safari/i.test(getUAString())}function getBoundingClientRect(element,includeScale,isFixedStrategy){includeScale===void 0&&(includeScale=!1),isFixedStrategy===void 0&&(isFixedStrategy=!1);var clientRect=element.getBoundingClientRect(),scaleX=1,scaleY=1;includeScale&&isHTMLElement(element)&&(scaleX=element.offsetWidth>0?round(clientRect.width)/element.offsetWidth||1:1,scaleY=element.offsetHeight>0?round(clientRect.height)/element.offsetHeight||1:1);var _ref=isElement(element)?getWindow(element):window,visualViewport=_ref.visualViewport,addVisualOffsets=!isLayoutViewport()&&isFixedStrategy,x=(clientRect.left+(addVisualOffsets&&visualViewport?visualViewport.offsetLeft:0))/scaleX,y=(clientRect.top+(addVisualOffsets&&visualViewport?visualViewport.offsetTop:0))/scaleY,width=clientRect.width/scaleX,height=clientRect.height/scaleY;return{width,height,top:y,right:x+width,bottom:y+height,left:x,x,y}}function getLayoutRect(element){var clientRect=getBoundingClientRect(element),width=element.offsetWidth,height=element.offsetHeight;return Math.abs(clientRect.width-width)<=1&&(width=clientRect.width),Math.abs(clientRect.height-height)<=1&&(height=clientRect.height),{x:element.offsetLeft,y:element.offsetTop,width,height}}function contains(parent,child){var rootNode=child.getRootNode&&child.getRootNode();if(parent.contains(child))return!0;if(rootNode&&isShadowRoot(rootNode)){var next=child;do{if(next&&parent.isSameNode(next))return!0;next=next.parentNode||next.host}while(next)}return!1}function getComputedStyle$1(element){return getWindow(element).getComputedStyle(element)}function isTableElement(element){return["table","td","th"].indexOf(getNodeName(element))>=0}function getDocumentElement(element){return((isElement(element)?element.ownerDocument:element.document)||window.document).documentElement}function getParentNode(element){return getNodeName(element)==="html"?element:element.assignedSlot||element.parentNode||(isShadowRoot(element)?element.host:null)||getDocumentElement(element)}function getTrueOffsetParent(element){return!isHTMLElement(element)||getComputedStyle$1(element).position==="fixed"?null:element.offsetParent}function getContainingBlock(element){var isFirefox=/firefox/i.test(getUAString()),isIE=/Trident/i.test(getUAString());if(isIE&&isHTMLElement(element)){var elementCss=getComputedStyle$1(element);if(elementCss.position==="fixed")return null}var css,currentNode=getParentNode(element);for(isShadowRoot(currentNode)&&(currentNode=currentNode.host);isHTMLElement(currentNode)&&["html","body"].indexOf(getNodeName(currentNode))<0;){if(css=getComputedStyle$1(currentNode),css.transform!=="none"||css.perspective!=="none"||css.contain==="paint"||["transform","perspective"].indexOf(css.willChange)!==-1||isFirefox&&css.willChange==="filter"||isFirefox&&css.filter&&css.filter!=="none")return currentNode;currentNode=currentNode.parentNode}return null}function getOffsetParent(element){for(var window=getWindow(element),offsetParent=getTrueOffsetParent(element);offsetParent&&isTableElement(offsetParent)&&getComputedStyle$1(offsetParent).position==="static";)offsetParent=getTrueOffsetParent(offsetParent);return offsetParent&&(getNodeName(offsetParent)==="html"||getNodeName(offsetParent)==="body"&&getComputedStyle$1(offsetParent).position==="static")?window:offsetParent||getContainingBlock(element)||window}function getMainAxisFromPlacement(placement){return["top","bottom"].indexOf(placement)>=0?"x":"y"}function within(min$1,value,max$1){return max(min$1,min(value,max$1))}function withinMaxClamp(min,value,max){var v=within(min,value,max);return v>max?max:v}function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}function mergePaddingObject(paddingObject){return Object.assign({},getFreshSideObject(),paddingObject)}function expandToHashMap(value,keys){return keys.reduce(function(hashMap,key){return hashMap[key]=value,hashMap},{})}var toPaddingObject=function(padding,state){return padding=typeof padding=="function"?padding(Object.assign({},state.rects,{placement:state.placement})):padding,mergePaddingObject(typeof padding!="number"?padding:expandToHashMap(padding,basePlacements))};function arrow(_ref){var _state$modifiersData$,state=_ref.state,name=_ref.name,options=_ref.options,arrowElement=state.elements.arrow,popperOffsets=state.modifiersData.popperOffsets,basePlacement=getBasePlacement(state.placement),axis=getMainAxisFromPlacement(basePlacement),isVertical=[left,right].indexOf(basePlacement)>=0,len=isVertical?"height":"width";if(!arrowElement||!popperOffsets)return;var paddingObject=toPaddingObject(options.padding,state),arrowRect=getLayoutRect(arrowElement),minProp=axis==="y"?top:left,maxProp=axis==="y"?bottom:right,endDiff=state.rects.reference[len]+state.rects.reference[axis]-popperOffsets[axis]-state.rects.popper[len],startDiff=popperOffsets[axis]-state.rects.reference[axis],arrowOffsetParent=getOffsetParent(arrowElement),clientSize=arrowOffsetParent?axis==="y"?arrowOffsetParent.clientHeight||0:arrowOffsetParent.clientWidth||0:0,centerToReference=endDiff/2-startDiff/2,min=paddingObject[minProp],max=clientSize-arrowRect[len]-paddingObject[maxProp],center=clientSize/2-arrowRect[len]/2+centerToReference,offset=within(min,center,max),axisProp=axis;state.modifiersData[name]=(_state$modifiersData$={},_state$modifiersData$[axisProp]=offset,_state$modifiersData$.centerOffset=offset-center,_state$modifiersData$)}function effect$1(_ref2){var state=_ref2.state,options=_ref2.options,_options$element=options.element,arrowElement=_options$element===void 0?"[data-popper-arrow]":_options$element;if(arrowElement==null)return;if(typeof arrowElement=="string"&&(arrowElement=state.elements.popper.querySelector(arrowElement),!arrowElement))return;if(!contains(state.elements.popper,arrowElement))return;state.elements.arrow=arrowElement}const arrow$1={name:"arrow",enabled:!0,phase:"main",fn:arrow,effect:effect$1,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function getVariation(placement){return placement.split("-")[1]}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function roundOffsetsByDPR(_ref,win){var x=_ref.x,y=_ref.y,dpr=win.devicePixelRatio||1;return{x:round(x*dpr)/dpr||0,y:round(y*dpr)/dpr||0}}function mapToStyles(_ref2){var _Object$assign2,_Object$assign,popper=_ref2.popper,popperRect=_ref2.popperRect,placement=_ref2.placement,variation=_ref2.variation,offsets=_ref2.offsets,position=_ref2.position,gpuAcceleration=_ref2.gpuAcceleration,adaptive=_ref2.adaptive,roundOffsets=_ref2.roundOffsets,isFixed=_ref2.isFixed,_offsets$x=offsets.x,x=_offsets$x===void 0?0:_offsets$x,_offsets$y=offsets.y,y=_offsets$y===void 0?0:_offsets$y,_ref3=typeof roundOffsets=="function"?roundOffsets({x,y}):{x,y},x=_ref3.x,y=_ref3.y,hasX=offsets.hasOwnProperty("x"),hasY=offsets.hasOwnProperty("y"),sideX=left,sideY=top,win=window;if(adaptive){var offsetParent=getOffsetParent(popper),heightProp="clientHeight",widthProp="clientWidth";if(offsetParent===getWindow(popper)&&(offsetParent=getDocumentElement(popper),getComputedStyle$1(offsetParent).position!=="static"&&position==="absolute"&&(heightProp="scrollHeight",widthProp="scrollWidth")),offsetParent=offsetParent,placement===top||(placement===left||placement===right)&&variation===end){sideY=bottom;var offsetY=isFixed&&offsetParent===win&&win.visualViewport?win.visualViewport.height:offsetParent[heightProp];y-=offsetY-popperRect.height,y*=gpuAcceleration?1:-1}if(placement===left||(placement===top||placement===bottom)&&variation===end){sideX=right;var offsetX=isFixed&&offsetParent===win&&win.visualViewport?win.visualViewport.width:offsetParent[widthProp];x-=offsetX-popperRect.width,x*=gpuAcceleration?1:-1}}var commonStyles=Object.assign({position},adaptive&&unsetSides),_ref4=roundOffsets===!0?roundOffsetsByDPR({x,y},getWindow(popper)):{x,y},x=_ref4.x,y=_ref4.y;return gpuAcceleration?Object.assign({},commonStyles,(_Object$assign={},_Object$assign[sideY]=hasY?"0":"",_Object$assign[sideX]=hasX?"0":"",_Object$assign.transform=(win.devicePixelRatio||1)<=1?"translate("+x+"px, "+y+"px)":"translate3d("+x+"px, "+y+"px, 0)",_Object$assign)):Object.assign({},commonStyles,(_Object$assign2={},_Object$assign2[sideY]=hasY?y+"px":"",_Object$assign2[sideX]=hasX?x+"px":"",_Object$assign2.transform="",_Object$assign2))}function computeStyles(_ref5){var state=_ref5.state,options=_ref5.options,_options$gpuAccelerat=options.gpuAcceleration,gpuAcceleration=_options$gpuAccelerat===void 0||_options$gpuAccelerat,_options$adaptive=options.adaptive,adaptive=_options$adaptive===void 0||_options$adaptive,_options$roundOffsets=options.roundOffsets,roundOffsets=_options$roundOffsets===void 0||_options$roundOffsets,commonStyles={placement:getBasePlacement(state.placement),variation:getVariation(state.placement),popper:state.elements.popper,popperRect:state.rects.popper,gpuAcceleration,isFixed:state.options.strategy==="fixed"};state.modifiersData.popperOffsets!=null&&(state.styles.popper=Object.assign({},state.styles.popper,mapToStyles(Object.assign({},commonStyles,{offsets:state.modifiersData.popperOffsets,position:state.options.strategy,adaptive,roundOffsets})))),state.modifiersData.arrow!=null&&(state.styles.arrow=Object.assign({},state.styles.arrow,mapToStyles(Object.assign({},commonStyles,{offsets:state.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets})))),state.attributes.popper=Object.assign({},state.attributes.popper,{"data-popper-placement":state.placement})}const computeStyles$1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:computeStyles,data:{}};var passive={passive:!0};function effect(_ref){var state=_ref.state,instance=_ref.instance,options=_ref.options,_options$scroll=options.scroll,scroll=_options$scroll===void 0||_options$scroll,_options$resize=options.resize,resize=_options$resize===void 0||_options$resize,window=getWindow(state.elements.popper),scrollParents=[].concat(state.scrollParents.reference,state.scrollParents.popper);return scroll&&scrollParents.forEach(function(scrollParent){scrollParent.addEventListener("scroll",instance.update,passive)}),resize&&window.addEventListener("resize",instance.update,passive),function(){scroll&&scrollParents.forEach(function(scrollParent){scrollParent.removeEventListener("scroll",instance.update,passive)}),resize&&window.removeEventListener("resize",instance.update,passive)}}const eventListeners={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect,data:{}};var hash$1={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement(placement){return placement.replace(/left|right|bottom|top/g,function(matched){return hash$1[matched]})}var hash={start:"end",end:"start"};function getOppositeVariationPlacement(placement){return placement.replace(/start|end/g,function(matched){return hash[matched]})}function getWindowScroll(node){var win=getWindow(node),scrollLeft=win.pageXOffset,scrollTop=win.pageYOffset;return{scrollLeft,scrollTop}}function getWindowScrollBarX(element){return getBoundingClientRect(getDocumentElement(element)).left+getWindowScroll(element).scrollLeft}function getViewportRect(element,strategy){var win=getWindow(element),html=getDocumentElement(element),visualViewport=win.visualViewport,width=html.clientWidth,height=html.clientHeight,x=0,y=0;if(visualViewport){width=visualViewport.width,height=visualViewport.height;var layoutViewport=isLayoutViewport();(layoutViewport||!layoutViewport&&strategy==="fixed")&&(x=visualViewport.offsetLeft,y=visualViewport.offsetTop)}return{width,height,x:x+getWindowScrollBarX(element),y}}function getDocumentRect(element){var _element$ownerDocumen,html=getDocumentElement(element),winScroll=getWindowScroll(element),body=(_element$ownerDocumen=element.ownerDocument)==null?void 0:_element$ownerDocumen.body,width=max(html.scrollWidth,html.clientWidth,body?body.scrollWidth:0,body?body.clientWidth:0),height=max(html.scrollHeight,html.clientHeight,body?body.scrollHeight:0,body?body.clientHeight:0),x=-winScroll.scrollLeft+getWindowScrollBarX(element),y=-winScroll.scrollTop;return getComputedStyle$1(body||html).direction==="rtl"&&(x+=max(html.clientWidth,body?body.clientWidth:0)-width),{width,height,x,y}}function isScrollParent(element){var _getComputedStyle=getComputedStyle$1(element),overflow=_getComputedStyle.overflow,overflowX=_getComputedStyle.overflowX,overflowY=_getComputedStyle.overflowY;return/auto|scroll|overlay|hidden/.test(overflow+overflowY+overflowX)}function getScrollParent(node){return["html","body","#document"].indexOf(getNodeName(node))>=0?node.ownerDocument.body:isHTMLElement(node)&&isScrollParent(node)?node:getScrollParent(getParentNode(node))}function listScrollParents(element,list){list===void 0&&(list=[]);var _element$ownerDocumen,scrollParent=getScrollParent(element),isBody=scrollParent===((_element$ownerDocumen=element.ownerDocument)==null?void 0:_element$ownerDocumen.body),win=getWindow(scrollParent),target=isBody?[win].concat(win.visualViewport||[],isScrollParent(scrollParent)?scrollParent:[]):scrollParent,updatedList=list.concat(target);return isBody?updatedList:updatedList.concat(listScrollParents(getParentNode(target)))}function rectToClientRect(rect){return Object.assign({},rect,{left:rect.x,top:rect.y,right:rect.x+rect.width,bottom:rect.y+rect.height})}function getInnerBoundingClientRect(element,strategy){var rect=getBoundingClientRect(element,!1,strategy==="fixed");return rect.top=rect.top+element.clientTop,rect.left=rect.left+element.clientLeft,rect.bottom=rect.top+element.clientHeight,rect.right=rect.left+element.clientWidth,rect.width=element.clientWidth,rect.height=element.clientHeight,rect.x=rect.left,rect.y=rect.top,rect}function getClientRectFromMixedType(element,clippingParent,strategy){return clippingParent===viewport?rectToClientRect(getViewportRect(element,strategy)):isElement(clippingParent)?getInnerBoundingClientRect(clippingParent,strategy):rectToClientRect(getDocumentRect(getDocumentElement(element)))}function getClippingParents(element){var clippingParents=listScrollParents(getParentNode(element)),canEscapeClipping=["absolute","fixed"].indexOf(getComputedStyle$1(element).position)>=0,clipperElement=canEscapeClipping&&isHTMLElement(element)?getOffsetParent(element):element;return isElement(clipperElement)?clippingParents.filter(function(clippingParent){return isElement(clippingParent)&&contains(clippingParent,clipperElement)&&getNodeName(clippingParent)!=="body"}):[]}function getClippingRect(element,boundary,rootBoundary,strategy){var mainClippingParents=boundary==="clippingParents"?getClippingParents(element):[].concat(boundary),clippingParents=[].concat(mainClippingParents,[rootBoundary]),firstClippingParent=clippingParents[0],clippingRect=clippingParents.reduce(function(accRect,clippingParent){var rect=getClientRectFromMixedType(element,clippingParent,strategy);return accRect.top=max(rect.top,accRect.top),accRect.right=min(rect.right,accRect.right),accRect.bottom=min(rect.bottom,accRect.bottom),accRect.left=max(rect.left,accRect.left),accRect},getClientRectFromMixedType(element,firstClippingParent,strategy));return clippingRect.width=clippingRect.right-clippingRect.left,clippingRect.height=clippingRect.bottom-clippingRect.top,clippingRect.x=clippingRect.left,clippingRect.y=clippingRect.top,clippingRect}function computeOffsets(_ref){var offsets,len,reference=_ref.reference,element=_ref.element,placement=_ref.placement,basePlacement=placement?getBasePlacement(placement):null,variation=placement?getVariation(placement):null,commonX=reference.x+reference.width/2-element.width/2,commonY=reference.y+reference.height/2-element.height/2;switch(basePlacement){case top:offsets={x:commonX,y:reference.y-element.height};break;case bottom:offsets={x:commonX,y:reference.y+reference.height};break;case right:offsets={x:reference.x+reference.width,y:commonY};break;case left:offsets={x:reference.x-element.width,y:commonY};break;default:offsets={x:reference.x,y:reference.y}}var mainAxis=basePlacement?getMainAxisFromPlacement(basePlacement):null;if(mainAxis!=null)switch(len=mainAxis==="y"?"height":"width",variation){case start:offsets[mainAxis]=offsets[mainAxis]-(reference[len]/2-element[len]/2);break;case end:offsets[mainAxis]=offsets[mainAxis]+(reference[len]/2-element[len]/2);break}return offsets}function detectOverflow(state,options){options===void 0&&(options={});var _options=options,_options$placement=_options.placement,placement=_options$placement===void 0?state.placement:_options$placement,_options$strategy=_options.strategy,strategy=_options$strategy===void 0?state.strategy:_options$strategy,_options$boundary=_options.boundary,boundary=_options$boundary===void 0?clippingParents:_options$boundary,_options$rootBoundary=_options.rootBoundary,rootBoundary=_options$rootBoundary===void 0?viewport:_options$rootBoundary,_options$elementConte=_options.elementContext,elementContext=_options$elementConte===void 0?popper:_options$elementConte,_options$altBoundary=_options.altBoundary,altBoundary=_options$altBoundary!==void 0&&_options$altBoundary,_options$padding=_options.padding,padding=_options$padding===void 0?0:_options$padding,paddingObject=mergePaddingObject(typeof padding!="number"?padding:expandToHashMap(padding,basePlacements)),altContext=elementContext===popper?reference:popper,popperRect=state.rects.popper,element=state.elements[altBoundary?altContext:elementContext],clippingClientRect=getClippingRect(isElement(element)?element:element.contextElement||getDocumentElement(state.elements.popper),boundary,rootBoundary,strategy),referenceClientRect=getBoundingClientRect(state.elements.reference),popperOffsets=computeOffsets({reference:referenceClientRect,element:popperRect,strategy:"absolute",placement}),popperClientRect=rectToClientRect(Object.assign({},popperRect,popperOffsets)),elementClientRect=elementContext===popper?popperClientRect:referenceClientRect,overflowOffsets={top:clippingClientRect.top-elementClientRect.top+paddingObject.top,bottom:elementClientRect.bottom-clippingClientRect.bottom+paddingObject.bottom,left:clippingClientRect.left-elementClientRect.left+paddingObject.left,right:elementClientRect.right-clippingClientRect.right+paddingObject.right},offsetData=state.modifiersData.offset;if(elementContext===popper&&offsetData){var offset=offsetData[placement];Object.keys(overflowOffsets).forEach(function(key){var multiply=[right,bottom].indexOf(key)>=0?1:-1,axis=[top,bottom].indexOf(key)>=0?"y":"x";overflowOffsets[key]+=offset[axis]*multiply})}return overflowOffsets}function computeAutoPlacement(state,options){options===void 0&&(options={});var _options=options,placement=_options.placement,boundary=_options.boundary,rootBoundary=_options.rootBoundary,padding=_options.padding,flipVariations=_options.flipVariations,_options$allowedAutoP=_options.allowedAutoPlacements,allowedAutoPlacements=_options$allowedAutoP===void 0?placements:_options$allowedAutoP,variation=getVariation(placement),placements$1=variation?flipVariations?variationPlacements:variationPlacements.filter(function(placement){return getVariation(placement)===variation}):basePlacements,allowedPlacements=placements$1.filter(function(placement){return allowedAutoPlacements.indexOf(placement)>=0});allowedPlacements.length===0&&(allowedPlacements=placements$1);var overflows=allowedPlacements.reduce(function(acc,placement){return acc[placement]=detectOverflow(state,{placement,boundary,rootBoundary,padding})[getBasePlacement(placement)],acc},{});return Object.keys(overflows).sort(function(a,b){return overflows[a]-overflows[b]})}function getExpandedFallbackPlacements(placement){if(getBasePlacement(placement)===auto)return[];var oppositePlacement=getOppositePlacement(placement);return[getOppositeVariationPlacement(placement),oppositePlacement,getOppositeVariationPlacement(oppositePlacement)]}function flip(_ref){var state=_ref.state,options=_ref.options,name=_ref.name;if(state.modifiersData[name]._skip)return;for(var _options$mainAxis=options.mainAxis,checkMainAxis=_options$mainAxis===void 0||_options$mainAxis,_options$altAxis=options.altAxis,checkAltAxis=_options$altAxis===void 0||_options$altAxis,specifiedFallbackPlacements=options.fallbackPlacements,padding=options.padding,boundary=options.boundary,rootBoundary=options.rootBoundary,altBoundary=options.altBoundary,_options$flipVariatio=options.flipVariations,flipVariations=_options$flipVariatio===void 0||_options$flipVariatio,allowedAutoPlacements=options.allowedAutoPlacements,preferredPlacement=state.options.placement,basePlacement=getBasePlacement(preferredPlacement),isBasePlacement=basePlacement===preferredPlacement,fallbackPlacements=specifiedFallbackPlacements||(isBasePlacement||!flipVariations?[getOppositePlacement(preferredPlacement)]:getExpandedFallbackPlacements(preferredPlacement)),placements=[preferredPlacement].concat(fallbackPlacements).reduce(function(acc,placement){return acc.concat(getBasePlacement(placement)===auto?computeAutoPlacement(state,{placement,boundary,rootBoundary,padding,flipVariations,allowedAutoPlacements}):placement)},[]),referenceRect=state.rects.reference,popperRect=state.rects.popper,checksMap=new Map,makeFallbackChecks=!0,firstFittingPlacement=placements[0],i=0;i=0,len=isVertical?"width":"height",overflow=detectOverflow(state,{placement,boundary,rootBoundary,altBoundary,padding}),mainVariationSide=isVertical?isStartVariation?right:left:isStartVariation?bottom:top;referenceRect[len]>popperRect[len]&&(mainVariationSide=getOppositePlacement(mainVariationSide));var altVariationSide=getOppositePlacement(mainVariationSide),checks=[];if(checkMainAxis&&checks.push(overflow[_basePlacement]<=0),checkAltAxis&&checks.push(overflow[mainVariationSide]<=0,overflow[altVariationSide]<=0),checks.every(function(check){return check})){firstFittingPlacement=placement,makeFallbackChecks=!1;break}checksMap.set(placement,checks)}if(makeFallbackChecks)for(var numberOfChecks=flipVariations?3:1,_loop=function(_i){var fittingPlacement=placements.find(function(placement){var checks=checksMap.get(placement);if(checks)return checks.slice(0,_i).every(function(check){return check})});if(fittingPlacement)return firstFittingPlacement=fittingPlacement,"break"},_i=numberOfChecks;_i>0;_i--){var _ret=_loop(_i);if(_ret==="break")break}state.placement!==firstFittingPlacement&&(state.modifiersData[name]._skip=!0,state.placement=firstFittingPlacement,state.reset=!0)}const flip$1={name:"flip",enabled:!0,phase:"main",fn:flip,requiresIfExists:["offset"],data:{_skip:!1}};function getSideOffsets(overflow,rect,preventedOffsets){return preventedOffsets===void 0&&(preventedOffsets={x:0,y:0}),{top:overflow.top-rect.height-preventedOffsets.y,right:overflow.right-rect.width+preventedOffsets.x,bottom:overflow.bottom-rect.height+preventedOffsets.y,left:overflow.left-rect.width-preventedOffsets.x}}function isAnySideFullyClipped(overflow){return[top,right,bottom,left].some(function(side){return overflow[side]>=0})}function hide(_ref){var state=_ref.state,name=_ref.name,referenceRect=state.rects.reference,popperRect=state.rects.popper,preventedOffsets=state.modifiersData.preventOverflow,referenceOverflow=detectOverflow(state,{elementContext:"reference"}),popperAltOverflow=detectOverflow(state,{altBoundary:!0}),referenceClippingOffsets=getSideOffsets(referenceOverflow,referenceRect),popperEscapeOffsets=getSideOffsets(popperAltOverflow,popperRect,preventedOffsets),isReferenceHidden=isAnySideFullyClipped(referenceClippingOffsets),hasPopperEscaped=isAnySideFullyClipped(popperEscapeOffsets);state.modifiersData[name]={referenceClippingOffsets,popperEscapeOffsets,isReferenceHidden,hasPopperEscaped},state.attributes.popper=Object.assign({},state.attributes.popper,{"data-popper-reference-hidden":isReferenceHidden,"data-popper-escaped":hasPopperEscaped})}const hide$1={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide};function distanceAndSkiddingToXY(placement,rects,offset){var basePlacement=getBasePlacement(placement),invertDistance=[left,top].indexOf(basePlacement)>=0?-1:1,_ref=typeof offset=="function"?offset(Object.assign({},rects,{placement})):offset,skidding=_ref[0],distance=_ref[1],skidding=skidding||0,distance=(distance||0)*invertDistance;return[left,right].indexOf(basePlacement)>=0?{x:distance,y:skidding}:{x:skidding,y:distance}}function offset(_ref2){var state=_ref2.state,options=_ref2.options,name=_ref2.name,_options$offset=options.offset,offset=_options$offset===void 0?[0,0]:_options$offset,data=placements.reduce(function(acc,placement){return acc[placement]=distanceAndSkiddingToXY(placement,state.rects,offset),acc},{}),_data$state$placement=data[state.placement],x=_data$state$placement.x,y=_data$state$placement.y;state.modifiersData.popperOffsets!=null&&(state.modifiersData.popperOffsets.x+=x,state.modifiersData.popperOffsets.y+=y),state.modifiersData[name]=data}const offset$1={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset};function popperOffsets(_ref){var state=_ref.state,name=_ref.name;state.modifiersData[name]=computeOffsets({reference:state.rects.reference,element:state.rects.popper,strategy:"absolute",placement:state.placement})}const popperOffsets$1={name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}};function getAltAxis(axis){return axis==="x"?"y":"x"}function preventOverflow(_ref){var _offsetModifierState$,_offsetModifierState$2,state=_ref.state,options=_ref.options,name=_ref.name,_options$mainAxis=options.mainAxis,checkMainAxis=_options$mainAxis===void 0||_options$mainAxis,_options$altAxis=options.altAxis,checkAltAxis=_options$altAxis!==void 0&&_options$altAxis,boundary=options.boundary,rootBoundary=options.rootBoundary,altBoundary=options.altBoundary,padding=options.padding,_options$tether=options.tether,tether=_options$tether===void 0||_options$tether,_options$tetherOffset=options.tetherOffset,tetherOffset=_options$tetherOffset===void 0?0:_options$tetherOffset,overflow=detectOverflow(state,{boundary,rootBoundary,padding,altBoundary}),basePlacement=getBasePlacement(state.placement),variation=getVariation(state.placement),isBasePlacement=!variation,mainAxis=getMainAxisFromPlacement(basePlacement),altAxis=getAltAxis(mainAxis),popperOffsets=state.modifiersData.popperOffsets,referenceRect=state.rects.reference,popperRect=state.rects.popper,tetherOffsetValue=typeof tetherOffset=="function"?tetherOffset(Object.assign({},state.rects,{placement:state.placement})):tetherOffset,normalizedTetherOffsetValue=typeof tetherOffsetValue=="number"?{mainAxis:tetherOffsetValue,altAxis:tetherOffsetValue}:Object.assign({mainAxis:0,altAxis:0},tetherOffsetValue),offsetModifierState=state.modifiersData.offset?state.modifiersData.offset[state.placement]:null,data={x:0,y:0};if(!popperOffsets)return;if(checkMainAxis){var mainSide=mainAxis==="y"?top:left,altSide=mainAxis==="y"?bottom:right,len=mainAxis==="y"?"height":"width",offset=popperOffsets[mainAxis],min$1=offset+overflow[mainSide],max$1=offset-overflow[altSide],additive=tether?-popperRect[len]/2:0,minLen=variation===start?referenceRect[len]:popperRect[len],maxLen=variation===start?-popperRect[len]:-referenceRect[len],arrowElement=state.elements.arrow,arrowRect=tether&&arrowElement?getLayoutRect(arrowElement):{width:0,height:0},arrowPaddingObject=state.modifiersData["arrow#persistent"]?state.modifiersData["arrow#persistent"].padding:getFreshSideObject(),arrowPaddingMin=arrowPaddingObject[mainSide],arrowPaddingMax=arrowPaddingObject[altSide],arrowLen=within(0,referenceRect[len],arrowRect[len]),minOffset=isBasePlacement?referenceRect[len]/2-additive-arrowLen-arrowPaddingMin-normalizedTetherOffsetValue.mainAxis:minLen-arrowLen-arrowPaddingMin-normalizedTetherOffsetValue.mainAxis,maxOffset=isBasePlacement?-referenceRect[len]/2+additive+arrowLen+arrowPaddingMax+normalizedTetherOffsetValue.mainAxis:maxLen+arrowLen+arrowPaddingMax+normalizedTetherOffsetValue.mainAxis,arrowOffsetParent=state.elements.arrow&&getOffsetParent(state.elements.arrow),clientOffset=arrowOffsetParent?mainAxis==="y"?arrowOffsetParent.clientTop||0:arrowOffsetParent.clientLeft||0:0,offsetModifierValue=(_offsetModifierState$=offsetModifierState?.[mainAxis])!=null?_offsetModifierState$:0,tetherMin=offset+minOffset-offsetModifierValue-clientOffset,tetherMax=offset+maxOffset-offsetModifierValue,preventedOffset=within(tether?min(min$1,tetherMin):min$1,offset,tether?max(max$1,tetherMax):max$1);popperOffsets[mainAxis]=preventedOffset,data[mainAxis]=preventedOffset-offset}if(checkAltAxis){var _mainSide=mainAxis==="x"?top:left,_altSide=mainAxis==="x"?bottom:right,_offset=popperOffsets[altAxis],_len=altAxis==="y"?"height":"width",_min=_offset+overflow[_mainSide],_max=_offset-overflow[_altSide],isOriginSide=[top,left].indexOf(basePlacement)!==-1,_offsetModifierValue=(_offsetModifierState$2=offsetModifierState?.[altAxis])!=null?_offsetModifierState$2:0,_tetherMin=isOriginSide?_min:_offset-referenceRect[_len]-popperRect[_len]-_offsetModifierValue+normalizedTetherOffsetValue.altAxis,_tetherMax=isOriginSide?_offset+referenceRect[_len]+popperRect[_len]-_offsetModifierValue-normalizedTetherOffsetValue.altAxis:_max,_preventedOffset=tether&&isOriginSide?withinMaxClamp(_tetherMin,_offset,_tetherMax):within(tether?_tetherMin:_min,_offset,tether?_tetherMax:_max);popperOffsets[altAxis]=_preventedOffset,data[altAxis]=_preventedOffset-_offset}state.modifiersData[name]=data}const preventOverflow$1={name:"preventOverflow",enabled:!0,phase:"main",fn:preventOverflow,requiresIfExists:["offset"]};function getHTMLElementScroll(element){return{scrollLeft:element.scrollLeft,scrollTop:element.scrollTop}}function getNodeScroll(node){return node===getWindow(node)||!isHTMLElement(node)?getWindowScroll(node):getHTMLElementScroll(node)}function isElementScaled(element){var rect=element.getBoundingClientRect(),scaleX=round(rect.width)/element.offsetWidth||1,scaleY=round(rect.height)/element.offsetHeight||1;return scaleX!==1||scaleY!==1}function getCompositeRect(elementOrVirtualElement,offsetParent,isFixed){isFixed===void 0&&(isFixed=!1);var isOffsetParentAnElement=isHTMLElement(offsetParent),offsetParentIsScaled=isHTMLElement(offsetParent)&&isElementScaled(offsetParent),documentElement=getDocumentElement(offsetParent),rect=getBoundingClientRect(elementOrVirtualElement,offsetParentIsScaled,isFixed),scroll={scrollLeft:0,scrollTop:0},offsets={x:0,y:0};return(isOffsetParentAnElement||!isOffsetParentAnElement&&!isFixed)&&((getNodeName(offsetParent)!=="body"||isScrollParent(documentElement))&&(scroll=getNodeScroll(offsetParent)),isHTMLElement(offsetParent)?(offsets=getBoundingClientRect(offsetParent,!0),offsets.x+=offsetParent.clientLeft,offsets.y+=offsetParent.clientTop):documentElement&&(offsets.x=getWindowScrollBarX(documentElement))),{x:rect.left+scroll.scrollLeft-offsets.x,y:rect.top+scroll.scrollTop-offsets.y,width:rect.width,height:rect.height}}function order(modifiers){var map=new Map,visited=new Set,result=[];modifiers.forEach(function(modifier){map.set(modifier.name,modifier)});function sort(modifier){visited.add(modifier.name);var requires=[].concat(modifier.requires||[],modifier.requiresIfExists||[]);requires.forEach(function(dep){if(!visited.has(dep)){var depModifier=map.get(dep);depModifier&&sort(depModifier)}}),result.push(modifier)}return modifiers.forEach(function(modifier){visited.has(modifier.name)||sort(modifier)}),result}function orderModifiers(modifiers){var orderedModifiers=order(modifiers);return modifierPhases.reduce(function(acc,phase){return acc.concat(orderedModifiers.filter(function(modifier){return modifier.phase===phase}))},[])}function debounce(fn){var pending;return function(){return pending||(pending=new Promise(function(resolve){Promise.resolve().then(function(){pending=void 0,resolve(fn())})})),pending}}function mergeByName(modifiers){var merged=modifiers.reduce(function(merged,current){var existing=merged[current.name];return merged[current.name]=existing?Object.assign({},existing,current,{options:Object.assign({},existing.options,current.options),data:Object.assign({},existing.data,current.data)}):current,merged},{});return Object.keys(merged).map(function(key){return merged[key]})}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return!args.some(function(element){return!element||typeof element.getBoundingClientRect!="function"})}function popperGenerator(generatorOptions){generatorOptions===void 0&&(generatorOptions={});var _generatorOptions=generatorOptions,_generatorOptions$def=_generatorOptions.defaultModifiers,defaultModifiers=_generatorOptions$def===void 0?[]:_generatorOptions$def,_generatorOptions$def2=_generatorOptions.defaultOptions,defaultOptions=_generatorOptions$def2===void 0?DEFAULT_OPTIONS:_generatorOptions$def2;return function(reference,popper,options){options===void 0&&(options=defaultOptions);var state={placement:"bottom",orderedModifiers:[],options:Object.assign({},DEFAULT_OPTIONS,defaultOptions),modifiersData:{},elements:{reference,popper},attributes:{},styles:{}},effectCleanupFns=[],isDestroyed=!1,instance={state,setOptions:function(setOptionsAction){var options=typeof setOptionsAction=="function"?setOptionsAction(state.options):setOptionsAction;cleanupModifierEffects(),state.options=Object.assign({},defaultOptions,state.options,options),state.scrollParents={reference:isElement(reference)?listScrollParents(reference):reference.contextElement?listScrollParents(reference.contextElement):[],popper:listScrollParents(popper)};var orderedModifiers=orderModifiers(mergeByName([].concat(defaultModifiers,state.options.modifiers)));return state.orderedModifiers=orderedModifiers.filter(function(m){return m.enabled}),runModifierEffects(),instance.update()},forceUpdate:function(){if(isDestroyed)return;var _state$elements=state.elements,reference=_state$elements.reference,popper=_state$elements.popper;if(!areValidElements(reference,popper))return;state.rects={reference:getCompositeRect(reference,getOffsetParent(popper),state.options.strategy==="fixed"),popper:getLayoutRect(popper)},state.reset=!1,state.placement=state.options.placement,state.orderedModifiers.forEach(function(modifier){return state.modifiersData[modifier.name]=Object.assign({},modifier.data)});for(var index=0;indexNumber.parseInt(value,10)):typeof offset=="function"?popperData=>offset(popperData,this._element):offset}_getPopperConfig(){const defaultBsPopperConfig={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(Manipulator.setDataAttribute(this._menu,"popper","static"),defaultBsPopperConfig.modifiers=[{name:"applyStyles",enabled:!1}]),{...defaultBsPopperConfig,...execute(this._config.popperConfig,[defaultBsPopperConfig])}}_selectMenuItem({key,target}){const items=SelectorEngine.find(SELECTOR_VISIBLE_ITEMS,this._menu).filter(element=>isVisible(element));if(!items.length)return;getNextActiveElement(items,target,key===ARROW_DOWN_KEY$1,!items.includes(target)).focus()}static jQueryInterface(config){return this.each(function(){const data=Dropdown.getOrCreateInstance(this,config);if(typeof config!="string")return;if(typeof data[config]=="undefined")throw new TypeError(`No method named "${config}"`);data[config]()})}static clearMenus(event){if(event.button===RIGHT_MOUSE_BUTTON||event.type==="keyup"&&event.key!==TAB_KEY$1)return;const openToggles=SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);for(const toggle of openToggles){const context=Dropdown.getInstance(toggle);if(!context||context._config.autoClose===!1)continue;const composedPath=event.composedPath(),isMenuTarget=composedPath.includes(context._menu);if(composedPath.includes(context._element)||context._config.autoClose==="inside"&&!isMenuTarget||context._config.autoClose==="outside"&&isMenuTarget)continue;if(context._menu.contains(event.target)&&(event.type==="keyup"&&event.key===TAB_KEY$1||/input|select|option|textarea|form/i.test(event.target.tagName)))continue;const relatedTarget={relatedTarget:context._element};event.type==="click"&&(relatedTarget.clickEvent=event),context._completeHide(relatedTarget)}}static dataApiKeydownHandler(event){const isInput=/input|textarea/i.test(event.target.tagName),isEscapeEvent=event.key===ESCAPE_KEY$2,isUpOrDownEvent=[ARROW_UP_KEY$1,ARROW_DOWN_KEY$1].includes(event.key);if(!isUpOrDownEvent&&!isEscapeEvent)return;if(isInput&&!isEscapeEvent)return;event.preventDefault();const getToggleButton=this.matches(SELECTOR_DATA_TOGGLE$3)?this:SelectorEngine.prev(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.next(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3,event.delegateTarget.parentNode),instance=Dropdown.getOrCreateInstance(getToggleButton);if(isUpOrDownEvent){event.stopPropagation(),instance.show(),instance._selectMenuItem(event);return}instance._isShown()&&(event.stopPropagation(),instance.hide(),getToggleButton.focus())}}EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_DATA_TOGGLE$3,Dropdown.dataApiKeydownHandler),EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_MENU,Dropdown.dataApiKeydownHandler),EventHandler.on(document,EVENT_CLICK_DATA_API$3,Dropdown.clearMenus),EventHandler.on(document,EVENT_KEYUP_DATA_API,Dropdown.clearMenus),EventHandler.on(document,EVENT_CLICK_DATA_API$3,SELECTOR_DATA_TOGGLE$3,function(event){event.preventDefault(),Dropdown.getOrCreateInstance(this).toggle()}),defineJQueryPlugin(Dropdown);const NAME$9="backdrop",CLASS_NAME_FADE$4="fade",CLASS_NAME_SHOW$5="show",EVENT_MOUSEDOWN=`mousedown.bs.${NAME$9}`,Default$8={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},DefaultType$8={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Backdrop extends Config{constructor(config){super(),this._config=this._getConfig(config),this._isAppended=!1,this._element=null}static get Default(){return Default$8}static get DefaultType(){return DefaultType$8}static get NAME(){return NAME$9}show(callback){if(!this._config.isVisible){execute(callback);return}this._append();const element=this._getElement();this._config.isAnimated&&reflow(element),element.classList.add(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{execute(callback)})}hide(callback){if(!this._config.isVisible){execute(callback);return}this._getElement().classList.remove(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{this.dispose(),execute(callback)})}dispose(){if(!this._isAppended)return;EventHandler.off(this._element,EVENT_MOUSEDOWN),this._element.remove(),this._isAppended=!1}_getElement(){if(!this._element){const backdrop=document.createElement("div");backdrop.className=this._config.className,this._config.isAnimated&&backdrop.classList.add(CLASS_NAME_FADE$4),this._element=backdrop}return this._element}_configAfterMerge(config){return config.rootElement=getElement(config.rootElement),config}_append(){if(this._isAppended)return;const element=this._getElement();this._config.rootElement.append(element),EventHandler.on(element,EVENT_MOUSEDOWN,()=>{execute(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(callback){executeAfterTransition(callback,this._getElement(),this._config.isAnimated)}}const NAME$8="focustrap",DATA_KEY$5="bs.focustrap",EVENT_KEY$5=`.${DATA_KEY$5}`,EVENT_FOCUSIN$2=`focusin${EVENT_KEY$5}`,EVENT_KEYDOWN_TAB=`keydown.tab${EVENT_KEY$5}`,TAB_KEY="Tab",TAB_NAV_FORWARD="forward",TAB_NAV_BACKWARD="backward",Default$7={autofocus:!0,trapElement:null},DefaultType$7={autofocus:"boolean",trapElement:"element"};class FocusTrap extends Config{constructor(config){super(),this._config=this._getConfig(config),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Default$7}static get DefaultType(){return DefaultType$7}static get NAME(){return NAME$8}activate(){if(this._isActive)return;this._config.autofocus&&this._config.trapElement.focus(),EventHandler.off(document,EVENT_KEY$5),EventHandler.on(document,EVENT_FOCUSIN$2,event=>this._handleFocusin(event)),EventHandler.on(document,EVENT_KEYDOWN_TAB,event=>this._handleKeydown(event)),this._isActive=!0}deactivate(){if(!this._isActive)return;this._isActive=!1,EventHandler.off(document,EVENT_KEY$5)}_handleFocusin(event){const{trapElement}=this._config;if(event.target===document||event.target===trapElement||trapElement.contains(event.target))return;const elements=SelectorEngine.focusableChildren(trapElement);elements.length===0?trapElement.focus():this._lastTabNavDirection===TAB_NAV_BACKWARD?elements[elements.length-1].focus():elements[0].focus()}_handleKeydown(event){if(event.key!==TAB_KEY)return;this._lastTabNavDirection=event.shiftKey?TAB_NAV_BACKWARD:TAB_NAV_FORWARD}}const SELECTOR_FIXED_CONTENT=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",SELECTOR_STICKY_CONTENT=".sticky-top",PROPERTY_PADDING="padding-right",PROPERTY_MARGIN="margin-right";class ScrollBarHelper{constructor(){this._element=document.body}getWidth(){const documentWidth=document.documentElement.clientWidth;return Math.abs(window.innerWidth-documentWidth)}hide(){const width=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,PROPERTY_PADDING,calculatedValue=>calculatedValue+width),this._setElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING,calculatedValue=>calculatedValue+width),this._setElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN,calculatedValue=>calculatedValue-width)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(selector,styleProperty,callback){const scrollbarWidth=this.getWidth(),manipulationCallBack=element=>{if(element!==this._element&&window.innerWidth>element.clientWidth+scrollbarWidth)return;this._saveInitialAttribute(element,styleProperty);const calculatedValue=window.getComputedStyle(element).getPropertyValue(styleProperty);element.style.setProperty(styleProperty,`${callback(Number.parseFloat(calculatedValue))}px`)};this._applyManipulationCallback(selector,manipulationCallBack)}_saveInitialAttribute(element,styleProperty){const actualValue=element.style.getPropertyValue(styleProperty);actualValue&&Manipulator.setDataAttribute(element,styleProperty,actualValue)}_resetElementAttributes(selector,styleProperty){const manipulationCallBack=element=>{const value=Manipulator.getDataAttribute(element,styleProperty);if(value===null){element.style.removeProperty(styleProperty);return}Manipulator.removeDataAttribute(element,styleProperty),element.style.setProperty(styleProperty,value)};this._applyManipulationCallback(selector,manipulationCallBack)}_applyManipulationCallback(selector,callBack){if(isElement$1(selector)){callBack(selector);return}for(const sel of SelectorEngine.find(selector,this._element))callBack(sel)}}const NAME$7="modal",DATA_KEY$4="bs.modal",EVENT_KEY$4=`.${DATA_KEY$4}`,DATA_API_KEY$2=".data-api",ESCAPE_KEY$1="Escape",EVENT_HIDE$4=`hide${EVENT_KEY$4}`,EVENT_HIDE_PREVENTED$1=`hidePrevented${EVENT_KEY$4}`,EVENT_HIDDEN$4=`hidden${EVENT_KEY$4}`,EVENT_SHOW$4=`show${EVENT_KEY$4}`,EVENT_SHOWN$4=`shown${EVENT_KEY$4}`,EVENT_RESIZE$1=`resize${EVENT_KEY$4}`,EVENT_CLICK_DISMISS=`click.dismiss${EVENT_KEY$4}`,EVENT_MOUSEDOWN_DISMISS=`mousedown.dismiss${EVENT_KEY$4}`,EVENT_KEYDOWN_DISMISS$1=`keydown.dismiss${EVENT_KEY$4}`,EVENT_CLICK_DATA_API$2=`click${EVENT_KEY$4}${DATA_API_KEY$2}`,CLASS_NAME_OPEN="modal-open",CLASS_NAME_FADE$3="fade",CLASS_NAME_SHOW$4="show",CLASS_NAME_STATIC="modal-static",OPEN_SELECTOR$1=".modal.show",SELECTOR_DIALOG=".modal-dialog",SELECTOR_MODAL_BODY=".modal-body",SELECTOR_DATA_TOGGLE$2='[data-bs-toggle="modal"]',Default$6={backdrop:!0,focus:!0,keyboard:!0},DefaultType$6={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Modal extends BaseComponent{constructor(element,config){super(element,config),this._dialog=SelectorEngine.findOne(SELECTOR_DIALOG,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ScrollBarHelper,this._addEventListeners()}static get Default(){return Default$6}static get DefaultType(){return DefaultType$6}static get NAME(){return NAME$7}toggle(relatedTarget){return this._isShown?this.hide():this.show(relatedTarget)}show(relatedTarget){if(this._isShown||this._isTransitioning)return;const showEvent=EventHandler.trigger(this._element,EVENT_SHOW$4,{relatedTarget});if(showEvent.defaultPrevented)return;this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(CLASS_NAME_OPEN),this._adjustDialog(),this._backdrop.show(()=>this._showElement(relatedTarget))}hide(){if(!this._isShown||this._isTransitioning)return;const hideEvent=EventHandler.trigger(this._element,EVENT_HIDE$4);if(hideEvent.defaultPrevented)return;this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(CLASS_NAME_SHOW$4),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated())}dispose(){EventHandler.off(window,EVENT_KEY$4),EventHandler.off(this._dialog,EVENT_KEY$4),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Backdrop({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_showElement(relatedTarget){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const modalBody=SelectorEngine.findOne(SELECTOR_MODAL_BODY,this._dialog);modalBody&&(modalBody.scrollTop=0),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW$4);const transitionComplete=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,EventHandler.trigger(this._element,EVENT_SHOWN$4,{relatedTarget})};this._queueCallback(transitionComplete,this._dialog,this._isAnimated())}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS$1,event=>{if(event.key!==ESCAPE_KEY$1)return;if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}),EventHandler.on(window,EVENT_RESIZE$1,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),EventHandler.on(this._element,EVENT_MOUSEDOWN_DISMISS,event=>{EventHandler.one(this._element,EVENT_CLICK_DISMISS,event2=>{if(this._element!==event.target||this._element!==event2.target)return;if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(CLASS_NAME_OPEN),this._resetAdjustments(),this._scrollBar.reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$4)})}_isAnimated(){return this._element.classList.contains(CLASS_NAME_FADE$3)}_triggerBackdropTransition(){const hideEvent=EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED$1);if(hideEvent.defaultPrevented)return;const isModalOverflowing=this._element.scrollHeight>document.documentElement.clientHeight,initialOverflowY=this._element.style.overflowY;if(initialOverflowY==="hidden"||this._element.classList.contains(CLASS_NAME_STATIC))return;isModalOverflowing||(this._element.style.overflowY="hidden"),this._element.classList.add(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.classList.remove(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.style.overflowY=initialOverflowY},this._dialog)},this._dialog),this._element.focus()}_adjustDialog(){const isModalOverflowing=this._element.scrollHeight>document.documentElement.clientHeight,scrollbarWidth=this._scrollBar.getWidth(),isBodyOverflowing=scrollbarWidth>0;if(isBodyOverflowing&&!isModalOverflowing){const property=isRTL()?"paddingLeft":"paddingRight";this._element.style[property]=`${scrollbarWidth}px`}if(!isBodyOverflowing&&isModalOverflowing){const property=isRTL()?"paddingRight":"paddingLeft";this._element.style[property]=`${scrollbarWidth}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(config,relatedTarget){return this.each(function(){const data=Modal.getOrCreateInstance(this,config);if(typeof config!="string")return;if(typeof data[config]=="undefined")throw new TypeError(`No method named "${config}"`);data[config](relatedTarget)})}}EventHandler.on(document,EVENT_CLICK_DATA_API$2,SELECTOR_DATA_TOGGLE$2,function(event){const target=SelectorEngine.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&event.preventDefault(),EventHandler.one(target,EVENT_SHOW$4,showEvent=>{if(showEvent.defaultPrevented)return;EventHandler.one(target,EVENT_HIDDEN$4,()=>{isVisible(this)&&this.focus()})});const alreadyOpen=SelectorEngine.findOne(OPEN_SELECTOR$1);alreadyOpen&&Modal.getInstance(alreadyOpen).hide();const data=Modal.getOrCreateInstance(target);data.toggle(this)}),enableDismissTrigger(Modal),defineJQueryPlugin(Modal);const NAME$6="offcanvas",DATA_KEY$3="bs.offcanvas",EVENT_KEY$3=`.${DATA_KEY$3}`,DATA_API_KEY$1=".data-api",EVENT_LOAD_DATA_API$2=`load${EVENT_KEY$3}${DATA_API_KEY$1}`,ESCAPE_KEY="Escape",CLASS_NAME_SHOW$3="show",CLASS_NAME_SHOWING$1="showing",CLASS_NAME_HIDING="hiding",CLASS_NAME_BACKDROP="offcanvas-backdrop",OPEN_SELECTOR=".offcanvas.show",EVENT_SHOW$3=`show${EVENT_KEY$3}`,EVENT_SHOWN$3=`shown${EVENT_KEY$3}`,EVENT_HIDE$3=`hide${EVENT_KEY$3}`,EVENT_HIDE_PREVENTED=`hidePrevented${EVENT_KEY$3}`,EVENT_HIDDEN$3=`hidden${EVENT_KEY$3}`,EVENT_RESIZE=`resize${EVENT_KEY$3}`,EVENT_CLICK_DATA_API$1=`click${EVENT_KEY$3}${DATA_API_KEY$1}`,EVENT_KEYDOWN_DISMISS=`keydown.dismiss${EVENT_KEY$3}`,SELECTOR_DATA_TOGGLE$1='[data-bs-toggle="offcanvas"]',Default$5={backdrop:!0,keyboard:!0,scroll:!1},DefaultType$5={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Offcanvas extends BaseComponent{constructor(element,config){super(element,config),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Default$5}static get DefaultType(){return DefaultType$5}static get NAME(){return NAME$6}toggle(relatedTarget){return this._isShown?this.hide():this.show(relatedTarget)}show(relatedTarget){if(this._isShown)return;const showEvent=EventHandler.trigger(this._element,EVENT_SHOW$3,{relatedTarget});if(showEvent.defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||(new ScrollBarHelper).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(CLASS_NAME_SHOWING$1);const completeCallBack=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(CLASS_NAME_SHOW$3),this._element.classList.remove(CLASS_NAME_SHOWING$1),EventHandler.trigger(this._element,EVENT_SHOWN$3,{relatedTarget})};this._queueCallback(completeCallBack,this._element,!0)}hide(){if(!this._isShown)return;const hideEvent=EventHandler.trigger(this._element,EVENT_HIDE$3);if(hideEvent.defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(CLASS_NAME_HIDING),this._backdrop.hide();const completeCallback=()=>{this._element.classList.remove(CLASS_NAME_SHOW$3,CLASS_NAME_HIDING),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new ScrollBarHelper).reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$3)};this._queueCallback(completeCallback,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const clickCallback=()=>{if(this._config.backdrop==="static"){EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED);return}this.hide()},isVisible=Boolean(this._config.backdrop);return new Backdrop({className:CLASS_NAME_BACKDROP,isVisible,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:isVisible?clickCallback:null})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS,event=>{if(event.key!==ESCAPE_KEY)return;if(this._config.keyboard){this.hide();return}EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED)})}static jQueryInterface(config){return this.each(function(){const data=Offcanvas.getOrCreateInstance(this,config);if(typeof config!="string")return;if(data[config]===void 0||config.startsWith("_")||config==="constructor")throw new TypeError(`No method named "${config}"`);data[config](this)})}}EventHandler.on(document,EVENT_CLICK_DATA_API$1,SELECTOR_DATA_TOGGLE$1,function(event){const target=SelectorEngine.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&event.preventDefault(),isDisabled(this))return;EventHandler.one(target,EVENT_HIDDEN$3,()=>{isVisible(this)&&this.focus()});const alreadyOpen=SelectorEngine.findOne(OPEN_SELECTOR);alreadyOpen&&alreadyOpen!==target&&Offcanvas.getInstance(alreadyOpen).hide();const data=Offcanvas.getOrCreateInstance(target);data.toggle(this)}),EventHandler.on(window,EVENT_LOAD_DATA_API$2,()=>{for(const selector of SelectorEngine.find(OPEN_SELECTOR))Offcanvas.getOrCreateInstance(selector).show()}),EventHandler.on(window,EVENT_RESIZE,()=>{for(const element of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(element).position!=="fixed"&&Offcanvas.getOrCreateInstance(element).hide()}),enableDismissTrigger(Offcanvas),defineJQueryPlugin(Offcanvas);const ARIA_ATTRIBUTE_PATTERN=/^aria-[\w-]*$/i,DefaultAllowlist={"*":["class","dir","id","lang","role",ARIA_ATTRIBUTE_PATTERN],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},uriAttributes=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),SAFE_URL_PATTERN=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,allowedAttribute=(attribute,allowedAttributeList)=>{const attributeName=attribute.nodeName.toLowerCase();return allowedAttributeList.includes(attributeName)?!uriAttributes.has(attributeName)||Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue)):allowedAttributeList.filter(attributeRegex=>attributeRegex instanceof RegExp).some(regex=>regex.test(attributeName))};function sanitizeHtml(unsafeHtml,allowList,sanitizeFunction){if(!unsafeHtml.length)return unsafeHtml;if(sanitizeFunction&&typeof sanitizeFunction=="function")return sanitizeFunction(unsafeHtml);const domParser=new window.DOMParser,createdDocument=domParser.parseFromString(unsafeHtml,"text/html"),elements=[].concat(...createdDocument.body.querySelectorAll("*"));for(const element of elements){const elementName=element.nodeName.toLowerCase();if(!Object.keys(allowList).includes(elementName)){element.remove();continue}const attributeList=[].concat(...element.attributes),allowedAttributes=[].concat(allowList["*"]||[],allowList[elementName]||[]);for(const attribute of attributeList)allowedAttribute(attribute,allowedAttributes)||element.removeAttribute(attribute.nodeName)}return createdDocument.body.innerHTML}const NAME$5="TemplateFactory",Default$4={allowList:DefaultAllowlist,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
          "},DefaultType$4={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},DefaultContentType={entry:"(string|element|function|null)",selector:"(string|element)"};class TemplateFactory extends Config{constructor(config){super(),this._config=this._getConfig(config)}static get Default(){return Default$4}static get DefaultType(){return DefaultType$4}static get NAME(){return NAME$5}getContent(){return Object.values(this._config.content).map(config=>this._resolvePossibleFunction(config)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(content){return this._checkContent(content),this._config.content={...this._config.content,...content},this}toHtml(){const templateWrapper=document.createElement("div");templateWrapper.innerHTML=this._maybeSanitize(this._config.template);for(const[selector,text]of Object.entries(this._config.content))this._setContent(templateWrapper,text,selector);const template=templateWrapper.children[0],extraClass=this._resolvePossibleFunction(this._config.extraClass);return extraClass&&template.classList.add(...extraClass.split(" ")),template}_typeCheckConfig(config){super._typeCheckConfig(config),this._checkContent(config.content)}_checkContent(arg){for(const[selector,content]of Object.entries(arg))super._typeCheckConfig({selector,entry:content},DefaultContentType)}_setContent(template,content,selector){const templateElement=SelectorEngine.findOne(selector,template);if(!templateElement)return;if(content=this._resolvePossibleFunction(content),!content){templateElement.remove();return}if(isElement$1(content)){this._putElementInTemplate(getElement(content),templateElement);return}if(this._config.html){templateElement.innerHTML=this._maybeSanitize(content);return}templateElement.textContent=content}_maybeSanitize(arg){return this._config.sanitize?sanitizeHtml(arg,this._config.allowList,this._config.sanitizeFn):arg}_resolvePossibleFunction(arg){return execute(arg,[this])}_putElementInTemplate(element,templateElement){if(this._config.html){templateElement.innerHTML="",templateElement.append(element);return}templateElement.textContent=element.textContent}}const NAME$4="tooltip",DISALLOWED_ATTRIBUTES=new Set(["sanitize","allowList","sanitizeFn"]),CLASS_NAME_FADE$2="fade",CLASS_NAME_MODAL="modal",CLASS_NAME_SHOW$2="show",SELECTOR_TOOLTIP_INNER=".tooltip-inner",SELECTOR_MODAL=`.${CLASS_NAME_MODAL}`,EVENT_MODAL_HIDE="hide.bs.modal",TRIGGER_HOVER="hover",TRIGGER_FOCUS="focus",TRIGGER_CLICK="click",TRIGGER_MANUAL="manual",EVENT_HIDE$2="hide",EVENT_HIDDEN$2="hidden",EVENT_SHOW$2="show",EVENT_SHOWN$2="shown",EVENT_INSERTED="inserted",EVENT_CLICK$1="click",EVENT_FOCUSIN$1="focusin",EVENT_FOCUSOUT$1="focusout",EVENT_MOUSEENTER="mouseenter",EVENT_MOUSELEAVE="mouseleave",AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:isRTL()?"left":"right",BOTTOM:"bottom",LEFT:isRTL()?"right":"left"},Default$3={allowList:DefaultAllowlist,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},DefaultType$3={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Tooltip extends BaseComponent{constructor(element,config){if(typeof Popper=="undefined")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(element,config),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Default$3}static get DefaultType(){return DefaultType$3}static get NAME(){return NAME$4}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(!this._isEnabled)return;if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}dispose(){clearTimeout(this._timeout),EventHandler.off(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const showEvent=EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOW$2)),shadowRoot=findShadowRoot(this._element),isInTheDom=(shadowRoot||this._element.ownerDocument.documentElement).contains(this._element);if(showEvent.defaultPrevented||!isInTheDom)return;this._disposePopper();const tip=this._getTipElement();this._element.setAttribute("aria-describedby",tip.getAttribute("id"));const{container}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(container.append(tip),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_INSERTED))),this._popper=this._createPopper(tip),tip.classList.add(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const element of[].concat(...document.body.children))EventHandler.on(element,"mouseover",noop);const complete=()=>{EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOWN$2)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(complete,this.tip,this._isAnimated())}hide(){if(!this._isShown())return;const hideEvent=EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDE$2));if(hideEvent.defaultPrevented)return;const tip=this._getTipElement();if(tip.classList.remove(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const element of[].concat(...document.body.children))EventHandler.off(element,"mouseover",noop);this._activeTrigger[TRIGGER_CLICK]=!1,this._activeTrigger[TRIGGER_FOCUS]=!1,this._activeTrigger[TRIGGER_HOVER]=!1,this._isHovered=null;const complete=()=>{if(this._isWithActiveTrigger())return;this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDDEN$2))};this._queueCallback(complete,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(content){const tip=this._getTemplateFactory(content).toHtml();if(!tip)return null;tip.classList.remove(CLASS_NAME_FADE$2,CLASS_NAME_SHOW$2),tip.classList.add(`bs-${this.constructor.NAME}-auto`);const tipId=getUID(this.constructor.NAME).toString();return tip.setAttribute("id",tipId),this._isAnimated()&&tip.classList.add(CLASS_NAME_FADE$2),tip}setContent(content){this._newContent=content,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(content){return this._templateFactory?this._templateFactory.changeContent(content):this._templateFactory=new TemplateFactory({...this._config,content,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[SELECTOR_TOOLTIP_INNER]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(event){return this.constructor.getOrCreateInstance(event.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(CLASS_NAME_FADE$2)}_isShown(){return this.tip&&this.tip.classList.contains(CLASS_NAME_SHOW$2)}_createPopper(tip){const placement=execute(this._config.placement,[this,tip,this._element]),attachment=AttachmentMap[placement.toUpperCase()];return createPopper(this._element,tip,this._getPopperConfig(attachment))}_getOffset(){const{offset}=this._config;return typeof offset=="string"?offset.split(",").map(value=>Number.parseInt(value,10)):typeof offset=="function"?popperData=>offset(popperData,this._element):offset}_resolvePossibleFunction(arg){return execute(arg,[this._element])}_getPopperConfig(attachment){const defaultBsPopperConfig={placement:attachment,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:data=>{this._getTipElement().setAttribute("data-popper-placement",data.state.placement)}}]};return{...defaultBsPopperConfig,...execute(this._config.popperConfig,[defaultBsPopperConfig])}}_setListeners(){const triggers=this._config.trigger.split(" ");for(const trigger of triggers)if(trigger==="click")EventHandler.on(this._element,this.constructor.eventName(EVENT_CLICK$1),this._config.selector,event=>{const context=this._initializeOnDelegatedTarget(event);context.toggle()});else if(trigger!==TRIGGER_MANUAL){const eventIn=trigger===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSEENTER):this.constructor.eventName(EVENT_FOCUSIN$1),eventOut=trigger===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSELEAVE):this.constructor.eventName(EVENT_FOCUSOUT$1);EventHandler.on(this._element,eventIn,this._config.selector,event=>{const context=this._initializeOnDelegatedTarget(event);context._activeTrigger[event.type==="focusin"?TRIGGER_FOCUS:TRIGGER_HOVER]=!0,context._enter()}),EventHandler.on(this._element,eventOut,this._config.selector,event=>{const context=this._initializeOnDelegatedTarget(event);context._activeTrigger[event.type==="focusout"?TRIGGER_FOCUS:TRIGGER_HOVER]=context._element.contains(event.relatedTarget),context._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},EventHandler.on(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler)}_fixTitle(){const title=this._element.getAttribute("title");if(!title)return;!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",title),this._element.setAttribute("data-bs-original-title",title),this._element.removeAttribute("title")}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){if(this._isWithActiveTrigger())return;this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide)}_setTimeout(handler,timeout){clearTimeout(this._timeout),this._timeout=setTimeout(handler,timeout)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(config){const dataAttributes=Manipulator.getDataAttributes(this._element);for(const dataAttribute of Object.keys(dataAttributes))DISALLOWED_ATTRIBUTES.has(dataAttribute)&&delete dataAttributes[dataAttribute];return config={...dataAttributes,...typeof config=="object"&&config?config:{}},config=this._mergeConfigObj(config),config=this._configAfterMerge(config),this._typeCheckConfig(config),config}_configAfterMerge(config){return config.container=config.container===!1?document.body:getElement(config.container),typeof config.delay=="number"&&(config.delay={show:config.delay,hide:config.delay}),typeof config.title=="number"&&(config.title=config.title.toString()),typeof config.content=="number"&&(config.content=config.content.toString()),config}_getDelegateConfig(){const config={};for(const[key,value]of Object.entries(this._config))this.constructor.Default[key]!==value&&(config[key]=value);return config.selector=!1,config.trigger="manual",config}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(config){return this.each(function(){const data=Tooltip.getOrCreateInstance(this,config);if(typeof config!="string")return;if(typeof data[config]=="undefined")throw new TypeError(`No method named "${config}"`);data[config]()})}}defineJQueryPlugin(Tooltip);const NAME$3="popover",SELECTOR_TITLE=".popover-header",SELECTOR_CONTENT=".popover-body",Default$2={...Tooltip.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},DefaultType$2={...Tooltip.DefaultType,content:"(null|string|element|function)"};class Popover extends Tooltip{static get Default(){return Default$2}static get DefaultType(){return DefaultType$2}static get NAME(){return NAME$3}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[SELECTOR_TITLE]:this._getTitle(),[SELECTOR_CONTENT]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(config){return this.each(function(){const data=Popover.getOrCreateInstance(this,config);if(typeof config!="string")return;if(typeof data[config]=="undefined")throw new TypeError(`No method named "${config}"`);data[config]()})}}defineJQueryPlugin(Popover);const NAME$2="scrollspy",DATA_KEY$2="bs.scrollspy",EVENT_KEY$2=`.${DATA_KEY$2}`,DATA_API_KEY=".data-api",EVENT_ACTIVATE=`activate${EVENT_KEY$2}`,EVENT_CLICK=`click${EVENT_KEY$2}`,EVENT_LOAD_DATA_API$1=`load${EVENT_KEY$2}${DATA_API_KEY}`,CLASS_NAME_DROPDOWN_ITEM="dropdown-item",CLASS_NAME_ACTIVE$1="active",SELECTOR_DATA_SPY='[data-bs-spy="scroll"]',SELECTOR_TARGET_LINKS="[href]",SELECTOR_NAV_LIST_GROUP=".nav, .list-group",SELECTOR_NAV_LINKS=".nav-link",SELECTOR_NAV_ITEMS=".nav-item",SELECTOR_LIST_ITEMS=".list-group-item",SELECTOR_LINK_ITEMS=`${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`,SELECTOR_DROPDOWN=".dropdown",SELECTOR_DROPDOWN_TOGGLE$1=".dropdown-toggle",Default$1={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},DefaultType$1={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ScrollSpy extends BaseComponent{constructor(element,config){super(element,config),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Default$1}static get DefaultType(){return DefaultType$1}static get NAME(){return NAME$2}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const section of this._observableSections.values())this._observer.observe(section)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(config){return config.target=getElement(config.target)||document.body,config.rootMargin=config.offset?`${config.offset}px 0px -30%`:config.rootMargin,typeof config.threshold=="string"&&(config.threshold=config.threshold.split(",").map(value=>Number.parseFloat(value))),config}_maybeEnableSmoothScroll(){if(!this._config.smoothScroll)return;EventHandler.off(this._config.target,EVENT_CLICK),EventHandler.on(this._config.target,EVENT_CLICK,SELECTOR_TARGET_LINKS,event=>{const observableSection=this._observableSections.get(event.target.hash);if(observableSection){event.preventDefault();const root=this._rootElement||window,height=observableSection.offsetTop-this._element.offsetTop;if(root.scrollTo){root.scrollTo({top:height,behavior:"smooth"});return}root.scrollTop=height}})}_getNewObserver(){const options={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(entries=>this._observerCallback(entries),options)}_observerCallback(entries){const targetElement=entry=>this._targetLinks.get(`#${entry.target.id}`),activate=entry=>{this._previousScrollData.visibleEntryTop=entry.target.offsetTop,this._process(targetElement(entry))},parentScrollTop=(this._rootElement||document.documentElement).scrollTop,userScrollsDown=parentScrollTop>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=parentScrollTop;for(const entry of entries){if(!entry.isIntersecting){this._activeTarget=null,this._clearActiveClass(targetElement(entry));continue}const entryIsLowerThanPrevious=entry.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(userScrollsDown&&entryIsLowerThanPrevious){if(activate(entry),!parentScrollTop)return;continue}!userScrollsDown&&!entryIsLowerThanPrevious&&activate(entry)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const targetLinks=SelectorEngine.find(SELECTOR_TARGET_LINKS,this._config.target);for(const anchor of targetLinks){if(!anchor.hash||isDisabled(anchor))continue;const observableSection=SelectorEngine.findOne(decodeURI(anchor.hash),this._element);isVisible(observableSection)&&(this._targetLinks.set(decodeURI(anchor.hash),anchor),this._observableSections.set(anchor.hash,observableSection))}}_process(target){if(this._activeTarget===target)return;this._clearActiveClass(this._config.target),this._activeTarget=target,target.classList.add(CLASS_NAME_ACTIVE$1),this._activateParents(target),EventHandler.trigger(this._element,EVENT_ACTIVATE,{relatedTarget:target})}_activateParents(target){if(target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)){SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1,target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);return}for(const listGroup of SelectorEngine.parents(target,SELECTOR_NAV_LIST_GROUP))for(const item of SelectorEngine.prev(listGroup,SELECTOR_LINK_ITEMS))item.classList.add(CLASS_NAME_ACTIVE$1)}_clearActiveClass(parent){parent.classList.remove(CLASS_NAME_ACTIVE$1);const activeNodes=SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`,parent);for(const node of activeNodes)node.classList.remove(CLASS_NAME_ACTIVE$1)}static jQueryInterface(config){return this.each(function(){const data=ScrollSpy.getOrCreateInstance(this,config);if(typeof config!="string")return;if(data[config]===void 0||config.startsWith("_")||config==="constructor")throw new TypeError(`No method named "${config}"`);data[config]()})}}EventHandler.on(window,EVENT_LOAD_DATA_API$1,()=>{for(const spy of SelectorEngine.find(SELECTOR_DATA_SPY))ScrollSpy.getOrCreateInstance(spy)}),defineJQueryPlugin(ScrollSpy);const NAME$1="tab",DATA_KEY$1="bs.tab",EVENT_KEY$1=`.${DATA_KEY$1}`,EVENT_HIDE$1=`hide${EVENT_KEY$1}`,EVENT_HIDDEN$1=`hidden${EVENT_KEY$1}`,EVENT_SHOW$1=`show${EVENT_KEY$1}`,EVENT_SHOWN$1=`shown${EVENT_KEY$1}`,EVENT_CLICK_DATA_API=`click${EVENT_KEY$1}`,EVENT_KEYDOWN=`keydown${EVENT_KEY$1}`,EVENT_LOAD_DATA_API=`load${EVENT_KEY$1}`,ARROW_LEFT_KEY="ArrowLeft",ARROW_RIGHT_KEY="ArrowRight",ARROW_UP_KEY="ArrowUp",ARROW_DOWN_KEY="ArrowDown",HOME_KEY="Home",END_KEY="End",CLASS_NAME_ACTIVE="active",CLASS_NAME_FADE$1="fade",CLASS_NAME_SHOW$1="show",CLASS_DROPDOWN="dropdown",SELECTOR_DROPDOWN_TOGGLE=".dropdown-toggle",SELECTOR_DROPDOWN_MENU=".dropdown-menu",NOT_SELECTOR_DROPDOWN_TOGGLE=`:not(${SELECTOR_DROPDOWN_TOGGLE})`,SELECTOR_TAB_PANEL='.list-group, .nav, [role="tablist"]',SELECTOR_OUTER=".nav-item, .list-group-item",SELECTOR_INNER=`.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`,SELECTOR_DATA_TOGGLE='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',SELECTOR_INNER_ELEM=`${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`,SELECTOR_DATA_TOGGLE_ACTIVE=`.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;class Tab extends BaseComponent{constructor(element){if(super(element),this._parent=this._element.closest(SELECTOR_TAB_PANEL),!this._parent)return;this._setInitialAttributes(this._parent,this._getChildren()),EventHandler.on(this._element,EVENT_KEYDOWN,event=>this._keydown(event))}static get NAME(){return NAME$1}show(){const innerElem=this._element;if(this._elemIsActive(innerElem))return;const active=this._getActiveElem(),hideEvent=active?EventHandler.trigger(active,EVENT_HIDE$1,{relatedTarget:innerElem}):null,showEvent=EventHandler.trigger(innerElem,EVENT_SHOW$1,{relatedTarget:active});if(showEvent.defaultPrevented||hideEvent&&hideEvent.defaultPrevented)return;this._deactivate(active,innerElem),this._activate(innerElem,active)}_activate(element,relatedElem){if(!element)return;element.classList.add(CLASS_NAME_ACTIVE),this._activate(SelectorEngine.getElementFromSelector(element));const complete=()=>{if(element.getAttribute("role")!=="tab"){element.classList.add(CLASS_NAME_SHOW$1);return}element.removeAttribute("tabindex"),element.setAttribute("aria-selected",!0),this._toggleDropDown(element,!0),EventHandler.trigger(element,EVENT_SHOWN$1,{relatedTarget:relatedElem})};this._queueCallback(complete,element,element.classList.contains(CLASS_NAME_FADE$1))}_deactivate(element,relatedElem){if(!element)return;element.classList.remove(CLASS_NAME_ACTIVE),element.blur(),this._deactivate(SelectorEngine.getElementFromSelector(element));const complete=()=>{if(element.getAttribute("role")!=="tab"){element.classList.remove(CLASS_NAME_SHOW$1);return}element.setAttribute("aria-selected",!1),element.setAttribute("tabindex","-1"),this._toggleDropDown(element,!1),EventHandler.trigger(element,EVENT_HIDDEN$1,{relatedTarget:relatedElem})};this._queueCallback(complete,element,element.classList.contains(CLASS_NAME_FADE$1))}_keydown(event){if(![ARROW_LEFT_KEY,ARROW_RIGHT_KEY,ARROW_UP_KEY,ARROW_DOWN_KEY,HOME_KEY,END_KEY].includes(event.key))return;event.stopPropagation(),event.preventDefault();const children=this._getChildren().filter(element=>!isDisabled(element));let nextActiveElement;if([HOME_KEY,END_KEY].includes(event.key))nextActiveElement=children[event.key===HOME_KEY?0:children.length-1];else{const isNext=[ARROW_RIGHT_KEY,ARROW_DOWN_KEY].includes(event.key);nextActiveElement=getNextActiveElement(children,event.target,isNext,!0)}nextActiveElement&&(nextActiveElement.focus({preventScroll:!0}),Tab.getOrCreateInstance(nextActiveElement).show())}_getChildren(){return SelectorEngine.find(SELECTOR_INNER_ELEM,this._parent)}_getActiveElem(){return this._getChildren().find(child=>this._elemIsActive(child))||null}_setInitialAttributes(parent,children){this._setAttributeIfNotExists(parent,"role","tablist");for(const child of children)this._setInitialAttributesOnChild(child)}_setInitialAttributesOnChild(child){child=this._getInnerElement(child);const isActive=this._elemIsActive(child),outerElem=this._getOuterElement(child);child.setAttribute("aria-selected",isActive),outerElem!==child&&this._setAttributeIfNotExists(outerElem,"role","presentation"),isActive||child.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(child,"role","tab"),this._setInitialAttributesOnTargetPanel(child)}_setInitialAttributesOnTargetPanel(child){const target=SelectorEngine.getElementFromSelector(child);if(!target)return;this._setAttributeIfNotExists(target,"role","tabpanel"),child.id&&this._setAttributeIfNotExists(target,"aria-labelledby",`${child.id}`)}_toggleDropDown(element,open){const outerElem=this._getOuterElement(element);if(!outerElem.classList.contains(CLASS_DROPDOWN))return;const toggle=(selector,className)=>{const element=SelectorEngine.findOne(selector,outerElem);element&&element.classList.toggle(className,open)};toggle(SELECTOR_DROPDOWN_TOGGLE,CLASS_NAME_ACTIVE),toggle(SELECTOR_DROPDOWN_MENU,CLASS_NAME_SHOW$1),outerElem.setAttribute("aria-expanded",open)}_setAttributeIfNotExists(element,attribute,value){element.hasAttribute(attribute)||element.setAttribute(attribute,value)}_elemIsActive(elem){return elem.classList.contains(CLASS_NAME_ACTIVE)}_getInnerElement(elem){return elem.matches(SELECTOR_INNER_ELEM)?elem:SelectorEngine.findOne(SELECTOR_INNER_ELEM,elem)}_getOuterElement(elem){return elem.closest(SELECTOR_OUTER)||elem}static jQueryInterface(config){return this.each(function(){const data=Tab.getOrCreateInstance(this);if(typeof config!="string")return;if(data[config]===void 0||config.startsWith("_")||config==="constructor")throw new TypeError(`No method named "${config}"`);data[config]()})}}EventHandler.on(document,EVENT_CLICK_DATA_API,SELECTOR_DATA_TOGGLE,function(event){if(["A","AREA"].includes(this.tagName)&&event.preventDefault(),isDisabled(this))return;Tab.getOrCreateInstance(this).show()}),EventHandler.on(window,EVENT_LOAD_DATA_API,()=>{for(const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE))Tab.getOrCreateInstance(element)}),defineJQueryPlugin(Tab);const NAME="toast",DATA_KEY="bs.toast",EVENT_KEY=`.${DATA_KEY}`,EVENT_MOUSEOVER=`mouseover${EVENT_KEY}`,EVENT_MOUSEOUT=`mouseout${EVENT_KEY}`,EVENT_FOCUSIN=`focusin${EVENT_KEY}`,EVENT_FOCUSOUT=`focusout${EVENT_KEY}`,EVENT_HIDE=`hide${EVENT_KEY}`,EVENT_HIDDEN=`hidden${EVENT_KEY}`,EVENT_SHOW=`show${EVENT_KEY}`,EVENT_SHOWN=`shown${EVENT_KEY}`,CLASS_NAME_FADE="fade",CLASS_NAME_HIDE="hide",CLASS_NAME_SHOW="show",CLASS_NAME_SHOWING="showing",DefaultType={animation:"boolean",autohide:"boolean",delay:"number"},Default={animation:!0,autohide:!0,delay:5e3};class Toast extends BaseComponent{constructor(element,config){super(element,config),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Default}static get DefaultType(){return DefaultType}static get NAME(){return NAME}show(){const showEvent=EventHandler.trigger(this._element,EVENT_SHOW);if(showEvent.defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(CLASS_NAME_FADE);const complete=()=>{this._element.classList.remove(CLASS_NAME_SHOWING),EventHandler.trigger(this._element,EVENT_SHOWN),this._maybeScheduleHide()};this._element.classList.remove(CLASS_NAME_HIDE),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW,CLASS_NAME_SHOWING),this._queueCallback(complete,this._element,this._config.animation)}hide(){if(!this.isShown())return;const hideEvent=EventHandler.trigger(this._element,EVENT_HIDE);if(hideEvent.defaultPrevented)return;const complete=()=>{this._element.classList.add(CLASS_NAME_HIDE),this._element.classList.remove(CLASS_NAME_SHOWING,CLASS_NAME_SHOW),EventHandler.trigger(this._element,EVENT_HIDDEN)};this._element.classList.add(CLASS_NAME_SHOWING),this._queueCallback(complete,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(CLASS_NAME_SHOW),super.dispose()}isShown(){return this._element.classList.contains(CLASS_NAME_SHOW)}_maybeScheduleHide(){if(!this._config.autohide)return;if(this._hasMouseInteraction||this._hasKeyboardInteraction)return;this._timeout=setTimeout(()=>{this.hide()},this._config.delay)}_onInteraction(event,isInteracting){switch(event.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=isInteracting;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=isInteracting;break}}if(isInteracting){this._clearTimeout();return}const nextElement=event.relatedTarget;if(this._element===nextElement||this._element.contains(nextElement))return;this._maybeScheduleHide()}_setListeners(){EventHandler.on(this._element,EVENT_MOUSEOVER,event=>this._onInteraction(event,!0)),EventHandler.on(this._element,EVENT_MOUSEOUT,event=>this._onInteraction(event,!1)),EventHandler.on(this._element,EVENT_FOCUSIN,event=>this._onInteraction(event,!0)),EventHandler.on(this._element,EVENT_FOCUSOUT,event=>this._onInteraction(event,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(config){return this.each(function(){const data=Toast.getOrCreateInstance(this,config);if(typeof config=="string"){if(typeof data[config]=="undefined")throw new TypeError(`No method named "${config}"`);data[config](this)}})}}enableDismissTrigger(Toast),defineJQueryPlugin(Toast);const index_umd={Alert,Button,Carousel,Collapse,Dropdown,Modal,Offcanvas,Popover,ScrollSpy,Tab,Toast,Tooltip};return index_umd}),function _f(self){"use strict";try{module&&(self=module)}catch{}self._factory=_f;function u(a){return"undefined"==typeof a||a}function v(a){const b=Array(a);for(let c=0;c=this.B&&(w||!n[l])){var e,g,k,f=M(q,d,r),h="";switch(this.G){case"full":if(2f;g--)g-f>=this.B&&(k=M(q,d,r,e,f),h=l.substring(f,g),N(this,n,h,k,a,c));break}case"reverse":if(1=this.B&&N(this,n,h,M(q,d,r,e,g),a,c);h=""}case"forward":if(1=this.B&&N(this,n,h,f,a,c);break}default:if(this.C&&(f=Math.min(f/this.C(b,l,r)|0,q-1)),N(this,n,l,f,a,c),w&&1=this.B&&!e[l]){e[l]=1;const p=this.l&&l>f;N(this,m,p?f:l,M(h+(d/2>h?0:1),d,r,g-1,k-1),a,c,p?l:f)}}}}this.m||(this.register[a]=1)}}return this};function M(a,b,c,d,e){return c&&1=this.B&&!c[q])if(this.s||f||this.map[q])k[w++]=q,c[q]=1;else return d;a=k,e=a.length}if(!e)return d;b||(b=100),g=this.depth&&1=d))))break;if(n){if(f)return sa(k,d,0);b[b.length]=k;return}}return!c&&k}function sa(a,b,c){return a=1===a.length?a[0]:[].concat.apply([],a),c||a.length>b?a.slice(c,c+b):a}function ta(a,b,c,d){return c?(d=d&&b>c,a=(a=a[d?b:c])&&a[d?c:b]):a=a[b],a}t.contain=function(a){return!!this.register[a]},t.update=function(a,b){return this.remove(a).add(a,b)},t.remove=function(a,b){const c=this.register[a];if(c){if(this.m)for(let d=0,e;d{f=m}));let g,k;switch(e||(e=0)){case 0:if(g="reg",this.m){k=x();for(let m in this.register)k[m]=1}else k=this.register;break;case 1:g="cfg",k={doc:0,opt:this.s?1:0};break;case 2:g="map",k=this.map;break;case 3:g="ctx",k=this.h;break;default:"undefined"==typeof c&&f&&f();return}return qa(a,b||this,c,g,d,e,k,f),h},t.import=function(a,b){if(b)switch(C(b)&&(b=JSON.parse(b)),a){case"cfg":this.s=!!b.opt;break;case"reg":this.m=!1,this.register=b;break;case"map":this.map=b;break;case"ctx":this.h=b}},ka(L.prototype);function ua(a){a=a.data;var d,b=self._index;const c=a.args;switch(d=a.task,d){case"init":d=a.options||{},a=a.factory,b=d.encode,d.cache=!1,b&&0===b.indexOf("function")&&(d.encode=Function("return "+b)()),a?(Function("return "+a)()(self),self._index=new self.FlexSearch.Index(d),delete self.FlexSearch):self._index=new L(d);break;default:a=a.id,b=b[d].apply(b,c),postMessage("search"===d?{id:a,msg:b}:{id:a})}}let va=0;function P(a){if(!(this instanceof P))return new P(a);var b;a?E(b=a.encode)&&(a.encode=b.toString()):a={},(b=(self||window)._factory)&&(b=b.toString());const c="undefined"==typeof window&&self.exports,d=this;this.o=wa(b,c,a.worker),this.h=x(),this.o&&(c?this.o.on("message",function(e){d.h[e.id](e.msg),delete d.h[e.id]}):this.o.onmessage=function(e){e=e.data,d.h[e.id](e.msg),delete d.h[e.id]},this.o.postMessage({task:"init",factory:b,options:a}))}Q("add"),Q("append"),Q("search"),Q("update"),Q("remove");function Q(a){P.prototype[a]=P.prototype[a+"Async"]=function(){const b=this,c=[].slice.call(arguments);var d=c[c.length-1];let e;return E(d)&&(e=d,c.splice(c.length-1,1)),d=new Promise(function(f){setTimeout(function(){b.h[++va]=f,b.o.postMessage({task:a,id:va,args:c})})}),e?(d.then(e),this):d}}function wa(a,b,c){let d;try{d=b?new(require("worker_threads").Worker)(__dirname+"/node/node.js"):a?new Worker(URL.createObjectURL(new Blob(["onmessage="+ua.toString()],{type:"text/javascript"}))):new Worker(C(c)?c:"worker/worker.js",{type:"module"})}catch{}return d}function S(a){if(!(this instanceof S))return new S(a);var c,b=a.document||a.doc||a;this.K=[],this.h=[],this.A=[],this.register=x(),this.key=(c=b.key||b.id)&&T(c,this.A)||"id",this.m=u(a.fastupdate),this.C=(c=b.store)&&!0!==c&&[],this.store=c&&x(),this.I=(c=b.tag)&&T(c,this.A),this.l=c&&x(),this.cache=(c=a.cache)&&new K(c),a.cache=!1,this.o=a.worker,this.async=!1,c=x();let d=b.index||b.field||b;C(d)&&(d=[d]);for(let e=0,f,h;eb||c)&&(e=e.slice(c,c+b)),d&&(e=ya.call(this,e)),{tag:a,result:e}}function ya(a){const b=Array(a.length);for(let c=0,d;c{f=g})),e||(e=0),d||(d=0),d [!NOTE] > The default configuration provides basic security headers. Please review the [server configuration](/opensees-gallery/docs/getting-started/modeling/) for more details about the Content Security Policy. The cache settings are explained in more detail in the Netlify blog  . netlify.toml [build] publish = "exampleSite/public" command = "npm run build:example" [build.environment] DART_SASS_VERSION = "1.77.5" HUGO_VERSION = "0.131.0" HUGO_ENV = "production" HUGO_ENABLEGITINFO = "true" NODE_VERSION = "20.16.0" NPM_VERSION = "10.8.1" ... The same file also configures several optional plugins. netlify.toml [[plugins]] package = "@gethinode/netlify-plugin-dartsass" [[plugins]] package = "netlify-plugin-hugo-cache-resources" [plugins.inputs] # Redirected in exampleSite/config/_default/hugo.toml # srcdir = "" # [[plugins]] # package = "@netlify/plugin-lighthouse" # [plugins.inputs] # output_path = "reports/lighthouse.html" ... ### Configure your site Sign up for Netlify and configure your site in seven steps. Step 1. Sign up for Netlify Step 2. Sign in with your Git provider Step 3. Authenticate your sign in (2FA) Step 4. Add a new site Step 5. Connect to your Git provider Step 6. Import an existing project Step 7. Configure the build settings Previous Next Step 1. Sign up for Netlify Go to netlify.com  and click on the button Sign up. Select your preferred signup method next. This will likely be a hosted Git provider, although you also have the option to sign up with an email address. The next steps use GitHub, but other Git providers will follow a similar process. Step 2. Sign in with your Git provider Enter the credentials for your Git provider and click the button to sign in. Step 3. Authenticate your sign in (2FA) Assuming you have enabled two-factor authentication with your Git provider, authenticate the sign in next. This example uses the GitHub Mobile app. Step 4. Add a new site Click on the button Add new site to set up a new site with Netlify. Step 5. Connect to your Git provider Connect to your Git provider to import your existing Hinode repository. Step 6. Import an existing project Pick a repository from your Git provider. Ensure Netlify has access to the correct repository. Step 7. Configure the build settings Review the basic build settings. Netlify will use the settings provided in the preparations. Click on the button Deploy site to start the build and deployment process. Your site is now ready to be used. Click on the domain settings of your site within the \`Site overview\` page to provide a domain alias and to edit the site name as needed. The same section also allows the configuration of a custom domain. Be sure to review your [server configuration](/opensees-gallery/docs/getting-started/modeling/) if you encounter any rendering issues, such as broken links or garbled stylesheets. -->`}).add({id:7,tag:"en",href:"/opensees-gallery/examples/concretesurface/",title:"Concrete",description:"An investigation of 3D concrete material models",content:`This example is adapted from the OpenSees documentation for the ASDConcrete material. The analysis is implemented in the Python scripts: +ASDConcrete3D_Ex_CyclicUniaxialCompression.py ASDConcrete3D_Ex_Surface.py ASDConcrete3D_MakeLaws.py`}).add({id:8,tag:"en",href:"/opensees-gallery/examples/example8/",title:"Continuum Cantilever",description:"Dynamic analysis of a cantilever beam, modeled with 8-node brick elements.",content:`In this example a simple problem in solid dynamics is considered. The structure is a cantilever beam modelled with three dimensional solid elements. +Example8.tcl Example8.py For three dimensional analysis, a typical solid element is defined as a volume in three dimensional space. Each node of the analysis has three displacement degrees of freedom. Thus the model is defined with ndm = 3 and ndf = 3. +For this model, a mesh is generated using the block3D command. The number of nodes in the local xx -direction of the block is nx, the number of nodes in the local yy -direction of the block is ny and the number of nodes in the local zz -direction of the block is nz. The block3D generation nodes 1,2,3,4,5,6,7,8 are prescribed to define the three dimensional domain of the beam, which is of size 2×2×102 \\times 2 \\times 10 . +Tcl Python(RT) # mesh generation block3D $nx $ny $nz 1 1 $element $eleArgs 1 -1 -1 0 2 1 -1 0 3 1 1 0 4 -1 1 0 5 -1 -1 10 6 1 -1 10 7 1 1 10 8 -1 1 10 model.block3D(nx, ny, nz, 1, 1, Brick, 1, 1: [-1.0, -1.0, 0.0], 2: [ 1.0, -1.0, 0.0], 3: [ 1.0, 1.0, 0.0], 4: [-1.0, 1.0, 0.0], 5: [-1.0, -1.0, 10.0], 6: [ 1.0, -1.0, 10.0], 7: [ 1.0, 1.0, 10.0], 8: [-1.0, 1.0, 10.0]) Two possible brick elements can be used for the analysis. These may be created using the terms StdBrick or BbarBrick. An elastic isotropic material is used. +For initial gravity load analysis, a single load pattern with a linear time series and a single nodal loads is used. +Boundary conditions are applied using the fixZ command. In this case, all the nodes whose zz -coordiate is 0.00.0 have the boundary condition 1,1,1, fully fixed. +A solution algorithm of type Newton is used for the problem. The solution algorithm uses a ConvergenceTest which tests convergence on the norm of the energy increment vector. Five static load steps are performed. +Subsequent to the static analysis, the wipeAnalysis and remove loadPatern commands are used to remove the nodal loads and create a new analysis. The nodal displacements have not changed. However, with the external loads removed the structure is no longer in static equilibrium. +The integrator for the dynamic analysis if of type GeneralizedMidpoint with α=0.5\\alpha = 0.5 . This choice is uconditionally stable and energy conserving for linear problems. Additionally, this integrator conserves linear and angular momentum for both linear and non-linear problems. The dynamic analysis is performed using 100100 time increments with a time step Δt=2.0\\Delta t = 2.0 . +The deformed shape at the end of the analysis is rendered below: +The results consist of the file cantilever.out, which contains a line for every time step. Each line contains the time and the horizontal displacement at the upper right corner the beam. This is plotted in the figure below: +`}).add({id:9,tag:"en",href:"/opensees-gallery/docs/getting-started/contribute/",title:"Contribute",description:"Contribute to the open-source development of OpenSees.",content:`OpenSees is fully open source and welcomes any contribution. To streamline the contribution process, please take a moment to review the guidelines outlined in this article. +Using the issue tracker   The issue tracker  on GitHub is the preferred channel for bug reports, feature requests and submitting pull requests. +Asking for help   Use the GitHub Discussions  to ask for help from the OpenSees community  . The discussion forum also includes other topics, such as ideas  and showcases  . We strive for a safe, welcoming, and productive community. The community guidelines  provide more context about the expectations, moderation policy, and terms of service. +Bug reports   A bug is a demonstrable problem that is caused by the code in the repository. This may also include issues with the documentation or configuration files. Before filing a bug report, please consider the following guidelines: +Use the GitHub issue search  — check if the issue has already been reported. Check if the issue has been fixed — try to reproduce it using the latest main in the repository  . Isolate the problem — ideally create a reduced test case. Use the provided template in the issue tracker  to capture the context, evidence and steps on how to reproduce the issue. Feature requests   Feature requests are welcome. Please use the provided template in the issue tracker  to capture the idea and context. +Pull requests     Important By submitting a patch, you agree to allow the project owners to license your work under the terms of the BSD license  (if it includes code changes) and under the terms of the Creative Commons ( CC BY-NC 4.0)  license (if it includes documentation changes). +Please adhere to the coding guidelines used throughout the project (indentation, accurate comments, etc.) and any other requirements (such as test coverage). +Adhering to the following process is the best way to get your work included in the project: +Fork the project, clone your fork, and configure the remotes: +git clone https://github.com/<your-username>/OpenSeesRT.git cd OpenSeesRT git remote add upstream https://github.com/claudioperez/OpenSeesRT If you cloned a while ago, get the latest changes from upstream: +git checkout main git pull upstream main Create a new topic branch (off the main project development branch) to contain your feature, change, or fix: +git checkout -b <topic-branch-name> Commit your changes in logical chunks. Please adhere to these git commit message guidelines  . Use Git’s interactive rebase  feature to tidy up your commits before making them public. +Locally merge (or rebase) the upstream development branch into your topic branch: +git pull [--rebase] upstream main Push your topic branch up to your fork: +git push origin <topic-branch-name> Open a Pull Request  with a clear title and description against the main branch. +Coding guidelines   In general, run clang-format <your-file.cpp> before committing to ensure your changes follow our coding standards. +License   By contributing your code, you agree to license your contribution under the BSD license  . By contributing to the documentation, you agree to license your contribution under the Creative Commons ( CC BY-NC 4.0  ) license.`}).add({id:10,tag:"en",href:"/opensees-gallery/docs/about/credits/",title:"Credits",description:"OpenSees is fully open source and uses several open-source frameworks and libraries.",content:""}).add({id:11,tag:"en",href:"/opensees-gallery/examples/soliddam/",title:"Dam",description:"",content:""}).add({id:12,tag:"en",href:"/opensees-gallery/docs/developing/",title:"Developing",description:"Details about the internals of OpenSees.",content:`Class Interface Specification   Classes may be categorized as follows: +Domain: These classes describe the finite element model and store the results of an analysis on the model. The classes include Domain, Element, Node, Load, SP_Constraint, MP_Constraint, and their subclasses. +Analysis: These classes perform the analysis of the finite element model. The classes include the Analysis, ConstraintHandler, DOF_Numberer, SolutionAlgorithm, Integrator, FE_Element, DOF_Group and AnalysisModel classes, and their subclasses. +Computational Classes: These classes allow for composing efficient computational strategies that take advantage of prolem features such as sparsity, symmetry, and parallelism. More specifically these include: +System of Equation These include the abstract SystemOfEquation and Solver classes, and subclasses of these classes. These classes are provided for the solving of large scale systems of linear and eigenvalue equations. +Graph These are classes used to provide information about nodal and elemental connectivity and sparsity of systems of equations. The classes include Graph, Vertex, GraphNumberer, GraphPartitioner, and their subclasses. There is no Edge class provided at present. In current design each Vertex stores in an ID the tag of all it’s adjacent Vertices. For graph numbering and partitioning this has proved sufficient. +Parallel Classes These facilitate the development of parallel object-oriented finite element programs, classes are provided for parallel programming. The classes in the framework support the aggregate programming model. The classes include Actor, Shadow, Message, MachineBroker, FEM_ObjectBroker, Channel, and their subclasses. +Runtime Classes: These include the ModelNamespace and G3_Runtime classes. An analyst will interact with a ModelBuilder object, to create the Element, Node, Load and Constraint objects that define the model. +Other/Utility Classes +Matrix Classes: These include the classes Matrix, Vector and ID (integer array). These classes are used in the framework for passing information between objects in a safe manner, and for small scale numerical calculations in element formulation. +Data Storage These are classes used to store data. There are two abstract classes TaggedObjectStorage and FE_Datastore. Objects of type TaggedObjectStorage are used as containers to store and provide access to the TaggedObjects in memory during program execution. FE_Datastore objects are used to store/retrieve information from databases, containers which can permanently hold program data. +Visualization Classes These are classes used to generate images of the model for the analyst. These classes include Renderer, ColorMap, and their subclasses. +This design allows for contributions in the fields of: +Element and material modeling. +Solution algorithms, integration procedures and constraint handling techniques. +Model generation. +Numerical analysis for solution of linear and eigenvalue problems. +Graph theory for numbering and partitioning graphs. +Data structures for container classes and database. +Graphics. +Message passing systems and load balancing in parallel environments. +Frank McKenna and Gregory L. Fenves December 20, 1999`}).add({id:13,tag:"en",href:"/opensees-gallery/examples/mrf_concentrated/",title:"Dynamic Analysis of 2-Story Moment Frame",description:"This example demonstrates how to perform a dynamic analysis in OpenSees using a 2-story, 1-bay steel moment resisting frame. The structure is subjected to the Canoga Park record from the 1994 Northridge earthquake. The nonlinear behavior is represented using the concentrated plasticity concept with rotational springs. The rotational behavior of the plastic regions follows a bilinear hysteretic response based on the Modified Ibarra Krawinkler Deterioration Model (Ibarra et al. 2005, Lignos and Krawinkler 2009, 2010).",content:`This example demonstrates how to perform a dynamic analysis in OpenSees using a 2-story, 1-bay steel moment resisting frame. The structure is subjected to the Canoga Park record from the 1994 Northridge earthquake. The nonlinear behavior is represented using the concentrated plasticity concept with rotational springs. The rotational behavior of the plastic regions follows a bilinear hysteretic response based on the Modified Ibarra Krawinkler Deterioration Model (Ibarra et al. 2005, Lignos and Krawinkler 2009, 2010). For this example, all modes of cyclic deterioration are neglected. A leaning column carrying gravity loads is linked to the frame to simulate P-Delta effects. +The files needed to analyze this structure in OpenSees are included here: +The main file: MRF_2Story_Concentrated.tcl (last update: 10 Oct 2013) Supporting procedure files +RotSpring2DModIKModel.tcl - creates a bilinear rotational spring that follows the Modified Ibarra Krawinkler Deterioration Model (used in the concentrated model) RotLeaningCol.tcl - creates a low-stiffness rotational spring used in a leaning column The acceleration history for the Canoga Park record +NR94cnp.tcl - contains acceleration history in units of g All files are available in a compressed format here: dynamic_example_10Oct2013.zip (last update: 10 Oct 2013) +The rest of this example describes the model and shows the analysis results. +Model Description Figure 1. Schematic representation of concentrated plasticity OpenSees model with element number labels and [node number] labels. Note: The springs are zeroLength elements, but their sizes are greatly exaggerated in this figure for clarity. The 2-story, 1-bay steel moment resisting frame is modeled with elastic beam-column elements connected by ZeroLength elements which serve as rotational springs to represent the structure’s nonlinear behavior. The springs follow a bilinear hysteretic response based on the Modified Ibarra Krawinkler Deterioration Model. A leaning column with gravity loads is linked to the frame by truss elements to simulate P-Delta effects. An idealized schematic of the model is presented in Figure 1. +To simplify this model, panel zone contributions are neglected, plastic hinges form at the beam-column joints, and centerline dimensions are used. For an example that explicitly models the panel zone shear distortions and includes reduced beam sections (RBS), see Pushover and Dynamic Analyses of 2-Story Moment Frame with Panel Zones and RBS. +For a detailed description of this model, see Pushover Analysis of 2-Story Moment Frame. The units of the model are kips, inches, and seconds. +Damping and the Rayleigh Command This model uses Rayleigh damping which formulates the damping matrix as a linear combination of the mass matrix and stiffness matrix: c = a0m + a1k, where a0 is the mass proportional damping coefficient and a1 is the stiffness proportional damping coefficient. A damping ratio of 2%, which is a typical value for steel buildings, is assigned to the first two modes of the structure. The rayleigh command allows the user to specify whether the initial, current, or last committed stiffness matrix is used in the damping matrix formulation. In this example, only the initial stiffness matrix is used, which is accomplished by assigning values of 0.0 to the other stiffness matrix coefficients. +To properly model the structure, stiffness proportional damping is applied only to the frame elements and not to the highly rigid truss elements that link the frame and leaning column, nor to the leaning column itself. OpenSees does not apply stiffness proportional damping to zeroLength elements. In order to apply damping to only certain elements, the rayleigh command is used in combination with the region command. As noted in the region command documentation, the region cannot be defined by BOTH elements and nodes. Because mass proportional damping assigns damping to nodes with mass, OpenSees will ignore any mass proportional damping that is assigned using the rayleigh command in combination with the region command for a region of elements. Therefore, if using the region command to assign damping, the mass proportional damping and stiffness proportional damping must be assigned in separate steps. +Modifications to the Stiffness Proportional Damping Coefficient As described in the “Stiffness Modifications to Elastic Frame Elements” section of Pushover Analysis of 2-Story Moment Frame, the stiffness of the elastic frame elements has been modified. As explained in Ibarra and Krawinkler (2005) and Zareian and Medina (2010), the stiffness proportional damping coefficient that is used with these elements must also be modified. As the stiffness of the elastic elements was made “(n+1)/n” times greater than the stiffness of the actual frame member, the stiffness proportional damping coefficient of these elements must also be made “(n+1)/n” times greater than the traditional stiffness proportional damping coefficient. +Dynamic Analysis Recorders The recorders used in this example include: +The drift recorder to track the story and roof drift histories The node recorder to track the floor displacement and base shear reaction histories The element recorder to track the element forces in the first story columns as well as the moment and rotation histories of the springs in the concentrated plasticity model For the element recorder, the region command was used to assign all column springs to one group and all beam springs to a separate group. +It is important to note that the recorders only record information for analyze commands that are called after the recorder commands are called. In this example, the recorders are placed after the gravity analysis so that the steps of the gravity analysis do not appear in the output files. +Analysis The structure is analyzed under gravity loads before the dynamic analysis is conducted. The gravity loads are applied using a load-controlled static analysis with 10 steps. So that the gravity loads remain on the structure for all subsequent analyses, the loadConst command is used after the gravity analysis is completed. This command is also used to reset the time to zero so that the dynamic analysis starts from time zero. +For the dynamic analysis, the structure is subjected to the Canoga Park record from the 1994 Northridge earthquake. To apply the ground motion to the structure, the uniform excitation pattern is used. The name of the file containing the acceleration record, timestep of the ground motion, scale factor applied to the ground motion, and the direction in which the motion is to be applied must all be specified as part of the uniform excitation pattern command. +To execute the dynamic analysis, the analyze command is used with the specified number of analysis steps and the timestep of the analysis. The timestep used in the analysis should be less than or equal to the timestep of the input ground motion. +Results Figure 2. Floor Displacement History The floor displacement histories from the dynamic analysis are shown in Figure 2. The top graph shows the ground acceleration history while the middle and bottom graphs show the displacement time histories of the 3rd floor (roof) and 2nd floor, respectively. +References Ibarra, L. F., and Krawinkler, H. (2005). “Global collapse of frame structures under seismic excitations,” Technical Report 152, The John A. Blume Earthquake Engineering Research Center, Department of Civil Engineering, Stanford University, Stanford, CA. [electronic version: https://blume.stanford.edu/tech_reports] Ibarra, L. F., Medina, R. A., and Krawinkler, H. (2005). “Hysteretic models that incorporate strength and stiffness deterioration,” Earthquake Engineering and Structural Dynamics, Vol. 34, 12, pp. 1489-1511. Lignos, D. G., and Krawinkler, H. (2009). “Sidesway Collapse of Deteriorating Structural Systems under Seismic Excitations,” Technical Report 172, The John A. Blume Earthquake Engineering Research Center, Department of Civil Engineering, Stanford University, Stanford, CA. Lignos, D. G., and Krawinkler, H. (2011). “Deterioration Modeling of Steel Beams and Columns in Support to Collapse Prediction of Steel Moment Frames,” ASCE, Journal of Structural Engineering, Vol. 137 (11), 1291-1302. Zareian, F. and Medina, R. A. (2010). “A practical method for proper modeling of structural damping in inelastic plane structural systems,” Computers & Structures, Vol. 88, 1-2, pp. 45-53. Example posted by: Laura Eads, Stanford University; Modified: Filipe Ribeiro, Andre Barbosa (09/03/2013)`}).add({id:14,tag:"en",href:"/opensees-gallery/examples/example7/",title:"Dynamic Shell Analysis",description:"Transient analysis of a shell model.",content:`In this example a simple problem in shell dynamics is considered. The structure is a curved hoop shell structure that looks like the roof of a Safeway. +Example7.tcl Example7.py Renderings are created from the script render.py, which uses the sees  Python package. +Modeling   For shell analysis, a typical shell element is defined as a surface in three dimensional space. Each node of a shell analysis has six degrees of freedom, three displacements and three rotations. Thus the model is defined with ndm=3ndm = 3 and ndf=6ndf = 6 . +For this model, a mesh is generated using the block2D command. The number of nodes in the local x-direction of the block is nx and the number of nodes in the local y-direction of the block is ny. The block2D generates nodes with tags 1,2,3,4, 5,7,9 such that the structure is curved in space. +Tcl Python(RT) # generate the nodes and elements block2D $nx $ny 1 1 $element $eleArgs 1 -20 0 0 2 -20 0 40 3 20 0 40 4 20 0 0 5 -10 10 20 7 10 10 20 9 0 10 20 # generate the surface nodes and elements surface = model.surface((nx, ny), element="ShellMITC4", args=(1,), points= 1: [-20.0, 0.0, 0.0], 2: [-20.0, 0.0, 40.0], 3: [ 20.0, 0.0, 40.0], 4: [ 20.0, 0.0, 0.0], 5: [-10.0, 10.0, 20.0], 7: [ 10.0, 10.0, 20.0], 9: [ 0.0, 10.0, 20.0] ) The shell element is constructed using the ShellMITC4 formulation. An elastic membrane-plate material section model, appropriate for shell analysis, is constructed using the section command and the "ElasticMembranePlateSection" formulation. In this case, the elastic modulus E=3.0e3E = 3.0e3 , Poisson’s ratio ν=0.25\\nu = 0.25 , the thickness h=1.175h = 1.175 and the mass density per unit volume ρ=1.27\\rho = 1.27 Boundary conditions are applied using the fixZ command. In this case, all the nodes whose zz -coordiate is 0.00.0 have the boundary condition 1,1,1, 0,1,1: all degrees-of-freedom are fixed except rotation about the x-axis, which is free. The same boundary conditions are applied where the zz -coordinate is 40.040.0 . +A solution algorithm of type Newton is used for the problem. The solution algorithm uses a ConvergenceTest which tests convergence on the norm of the energy increment vector. Five static load steps are performed. +For initial gravity load analysis, a single load pattern with a linear time series and three vertical nodal loads are used. A scaled rendering of the deformed shape under gravity loading is shown below: +Dynamic Analysis   After the static analysis, the wipeAnalysis and remove loadPatern commands are used to remove the nodal loads and create a new analysis. The nodal displacements have not changed. However, with the external loads removed the structure is no longer in static equilibrium. +The integrator for the dynamic analysis if of type GeneralizedMidpoint with α=0.5\\alpha = 0.5 . This choice is uconditionally stable and energy conserving for linear problems. Additionally, this integrator conserves linear and angular momentum for both linear and non-linear problems. The dynamic analysis is performed using 250250 time increments with a time step Δt=0.50\\Delta t = 0.50 . +The results consist of the file Node.out, which contains a line for every time step. Each line contains the time and the vertical displacement at the upper center of the hoop structure. The time history is shown in the figure below. +`}).add({id:15,tag:"en",href:"/opensees-gallery/examples/thermalexamples/thermalexample1/",title:"Example 1",description:`Thermal expansion of a beam   {.align-centeralign-center width=“500px”} +Elevation of beam +Example Overview: A steel beam is heated to 1180 ° C. Horizontal displacement of right end is recorded. This displacement is normalized against the original length and plotted against temperature. The calculated thermal expansion is compared against the steel temperature-dependent thermal expansion in Eurocode 3, Part 1-2 11 . +Download Example 1 files: +Example1.tcl +Example 1 Outputs <files/Example1_OUTPUT.zip>{.interpreted-text role=“download”}.`,content:`Thermal expansion of a beam   .align-centeralign-center width=“500px” +Elevation of beam +Example Overview: A steel beam is heated to 1180 ° C. Horizontal displacement of right end is recorded. This displacement is normalized against the original length and plotted against temperature. The calculated thermal expansion is compared against the steel temperature-dependent thermal expansion in Eurocode 3, Part 1-2 11 . +Download Example 1 files: +Example1.tcl +Example 1 Outputs <files/Example1_OUTPUT.zip>.interpreted-text role=“download”. +Material Properties   The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties per Eurocode 3 11 . More details of Steel01 can be found at: Steel01 Material  uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210 GPa (Young’s modulus of elasticity at ambient temperatures) +Fy = 250 MPa (Yield strength of material at ambient temperatures) +b = 0.001 (Strain-Hardening Ratio) +Transformation   The beam is expanding in one direction, therefore, 2nd order bending effects do not need to be considered. +geomTransf Linear $transftag;Learn more about geometric transofrmations: Geometric Transformation  Section   The discretization of the steel section into four fibers is shown using the code below: +section FiberThermal secTag -GJ $Esset numSubdivIJ 2; \\# horizontalset numSubdivJK 2; \\# verticalset yI -100; #mmset zI -200; #mmset yJ 100; #mmset zJ -200; #mmset yK 100; #mmset zK 200; #mmset yL -100; #mmset zL 200; #mmpatch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zLSections that will be subjected to thermal loading must be created with fiberThermal or fibersecThermal. +In previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience. +The discretization can be visualized as such: +.align-centeralign-center width=“500px” +Cross section of rectangular beam showing fiber discretization +Elements   dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them. +The beam is made of one element with 5 iteration points and connects nodes 1 & 2. OpenSees is sensitive to the number of iteration points in each element and this could change the result of the recorded displacement. For this reason, it is important to perform these benchmarking examples to establish how many iteration points allows for convergence to the expected recorded displacement. To code the number of iteration points, we use the following syntax: +dispBeamColumnThermal eleTag iNode jNode numIntgrPts secTag TransfTag; +element dispBeamColumnThermal 1 1 2 5 $secTag $transftag; Output Recorders   Displacement of the end node (2) in DOF 1 (Horizontal Displacement) is what we want to record. To do so, a folder within your working directory must be created. dataDir is the command to create that folder and should be defined at the beginning of the model. This is where your output files will be saved. +set dataDir Examples/EXAMPLE2_OUTPUT;file mkdir $dataDir;recorder Node -file $dataDir/Node2disp.out -time -node 2 -dof 1 disp;Learn more about the Recorder Command: [ Recorder Command <http://opensees.berkeley.edu/wiki/index.php/Recorder_Command>].title-ref __ +Thermal Loading   This particular model is heating a beam to a set temperature over the time period of the model. We are not asking OpenSees to use a specific time-temperature curve, rather linearly ramp up the temperature from ambient to 1180 ° C. +Therefore, we set the maximum temperature as follows: +T = Max Tempurature degcelciusdeg celcius set T 1180;In OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure below), and are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, the entire cross section is one temperature, and two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of 400 mm, therefore, Y1 = 200 mm & Y2 = -200 mm for the top and bottom fibers respectively. +Location of bottom extreme fiber of beam mmmm set Y1 100;Location of top extreme fiber of beam mmmm set Y2 -100; .align-centeralign-center width=“500px” +Location of defined input temperature locations on the member cross section +The bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 1180<sup>o</sup>C and will be increased incrementally and linearly as the time step continues in the analysis. An external temperature data set could also be used for more complex temperature loading. The syntax for this is: +Thermal loading pattern +pattern Plain 1 Linear eleLoad -ele 1 -type -beamThermal $T $Y2 $T $Y1 ; Thermal Analysis   Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output. +A variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses. +set Nsteps 1000set Factor \\[expr 1.0/$Nsteps\\];integrator LoadControl $Factor;analyze $Nsteps; Output Plots   After the model has completed running, the results will be a horizontal displacement of the right end of the beam. Since the temperature was linearly ramped up from ambient to 1180 ° C, the user can develop a temperature history that matches every increment of the model. +Thermal expansion is the change is length divided by the original length. This could also be called thermal strain. The thermal expansion of the beam is plotted below and compared to the Eurocode 3 11 temperature-dependent thermal expansion. We can see that the modeled thermal expansion matches the material properties. This is important to check that the temperatures and material properties are assigned propertly in the model. +.align-centeralign-center width=“500px” +Thermal expansion of the beam recorded at node 2 +Sources   11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design.`}).add({id:16,tag:"en",href:"/opensees-gallery/examples/example1/",title:"Example 1: Linear Truss",description:"A finite element model of a simple truss is created, and static analysis is performed.",content:` This example is of a linear-elastic three bar truss, as shown in the figure above, subject to static loads. The purpose of this example is to develop the basic requirements for performing finite element analysis with OpenSees. This includes the definition of nodes, materials, elements, loads and constraints. +Scripts for this example can be downloaded for either Python or Tcl: +Example1.py Example1.tcl Model   We begin the simulation by creating a Model, which will manage the nodes, elements, loading and state. This is done through either Python or Tcl as follows: +Tcl Python(RT) model -ndm 2 -ndf 2 import opensees.openseespy as ops model = ops.Model(ndm=2, ndf=2) where we’ve specified 2 for the spatial dimension ndm, and 2 for the number of degrees of freedom ndf. +Next we define the four nodes of the structural model by specifying a tag which identifies the node, and coordinates in the x−yx-y plane. In general, the node constructor must be passed ndm coordinates. +Tcl Python(RT) # Create nodes & add to domain # tag X Y node 1 0.0 0.0; node 2 144.0 0.0; node 3 168.0 0.0; node 4 72.0 96.0; # Create nodes # tag X Y model.node(1, 0.0, 0.0) model.node(2, 144.0, 0.0) model.node(3, 168.0, 0.0) model.node(4, 72.0, 96.0) The restraints at the nodes with reactions (ie, nodes 1, 2, and 3) are then defined. +Tcl Python(RT) # Set the boundary conditions # tag X Y fix 1 1 1; fix 2 1 1; fix 3 1 1; # set the boundary conditions # nodeID xRestrnt? yRestrnt? model.fix(1, 1, 1) model.fix(2, 1, 1) model.fix(3, 1, 1) Since the truss elements have the same elastic material, a single Elastic material object is created. The first argument assigns the tag 1 to the material, and the second specifies a Young’s modulus of 3000. +Tcl Python(RT) # Create Elastic material prototype uniaxialMaterial Elastic 1 3000; # Create Elastic material prototype model.uniaxialMaterial("Elastic", 1, 3000) Finally, define the elements. The syntax for creating the truss element requires the following arguments: +the element name, in this case always "Truss", the element tag, in this case 1 through 3, the nodes that the element is connected to, the cross-sectional area, in this case 10.0 for element 1 and 5.0 for elements 2 and 3. the tag of the material assigned to the element, in this case always 1 Tcl Python(RT) element Truss 1 1 4 10.0 1; element Truss 2 2 4 5.0 1; element Truss 3 3 4 5.0 1; # Type tag nodes Area material model.element("Truss", 1, (1, 4), 10.0, 1 ) model.element("Truss", 2, (2, 4), 5.0, 1 ) model.element("Truss", 3, (3, 4), 5.0, 1 ) Loads   The final step before we can configure and run the analysis is to define some loading. In this case we have two point loads at the apex of the truss (node 4). In OpenSees, loads are assigned to load patterns, which define how loads are scaled with each load step. In Python, the simplest way to represent a nodal load is by a dictionary with node numbers as keys, and corresponding load vector as values. For the problem at hand, we want to apply a load to node 4 with 100 units in the xx direction, and -50 units in the yy direction; the corresponding definition is: Tcl Python(RT) set loads 4 100 -50 loads = 4: [100, -50] We then add a "Plain" load pattern to the model with these loads, and use the "Linear" option to specify that it should be increased linearly with each new load step. Tcl Python(RT) pattern Plain 1 "Linear" "load $loads" model.pattern("Plain", 1, "Linear", load=loads) Note that it is common to define the load data structure inside the call to the pattern function. This looks like: +Tcl Python(RT) pattern Plain 1 "Linear" load 4 100 -50 model.pattern("Plain", 1, "Linear", load= 4: [100, -50] ) Analysis   Next we configure that analysis procedure. The model is linear, so we use a solution Algorithm of type Linear. +Tcl Python(RT) algorithm Linear; model.algorithm("Linear") Even though the solution is linear, we have to select a procedure for applying the load, which is called an Integrator. For this problem, a LoadControl integrator is selected, which advances the solution by incrementing the applied loads by a factor of 1.0 each time the analyze command is called. +Tcl Python(RT) integrator LoadControl 1.0; model.integrator("LoadControl", 1.0) The equations are formed using a banded system, so the System is BandSPD (banded, symmetric positive definite). This is a good choice for most moderate size models. The equations have to be numbered, so typically an RCM numberer object is used (for Reverse Cuthill-McKee). The constraints are most easily represented with a Plain constraint handler. +Once all the components of an analysis are defined, the Analysis itself is defined. For this problem a Static analysis is used. +Tcl Python(RT) analysis Static; model.analysis("Static") Finally, one analysis step is performed by invoking analyze: Tcl Python(RT) analyze 1 model.analyze(1) When the analysis is complete the state of node 4 and all three elements may be printed to the screen: +Tcl Python(RT) print node 4 print ele model.print(node=4) model.print("ele") Node: 4 Coordinates : 72 96 commitDisps: 0.530093 -0.177894 unbalanced Load: 100 -50 Element: 1 type: Truss iNode: 1 jNode: 4 Area: 10 Total Mass: 0 strain: 0.00146451 axial load: 43.9352 unbalanced load: -26.3611 -35.1482 26.3611 35.1482 Material: Elastic tag: 1 E: 3000 eta: 0 Element: 2 type: Truss iNode: 2 jNode: 4 Area: 5 Total Mass: 0 strain: -0.00383642 axial load: -57.5463 unbalanced load: -34.5278 46.0371 34.5278 -46.0371 Material: Elastic tag: 1 E: 3000 eta: 0 Element: 3 type: Truss iNode: 3 jNode: 4 Area: 5 Total Mass: 0 strain: -0.00368743 axial load: -55.3114 unbalanced load: -39.1111 39.1111 39.1111 -39.1111 Material: Elastic tag: 1 E: 3000 eta: 0For the node, displacements and loads are given. For the truss elements, the axial strain and force are provided along with the resisting forces in the global coordinate system. +The file example.out, specified in the recorder command, provides the nodal displacements for the xx and yy directions of node 4. The file consists of a single line: +1.0 0.530093 -0.177894 The 1.01.0 corresponds to the load factor (pseudo time) in the model at which point the recorder was invoked. The 0.5300930.530093 and −0.177894-0.177894 correspond to the response at node 4 for the 1 and 2 degree-of-freedom. Note that if more analysis steps had been performed, the line would contain a line for every analysis step that completed successfully.`}).add({id:17,tag:"en",href:"/opensees-gallery/examples/thermalexamples/thermalexample2/",title:"Example 2",description:`Restrained Steel beam subjected to uniform temperature on half of the member.   {.align-centeralign-center width=“500px”} +Example overview: A steel beam of two equal elements is subjected to a uniform temperature on only one of the elements. Element 1 remains at ambient tempurature while Element 2 is heated using a linear time-temperature history. +Download Example 2 files: +Example2.tcl +Example 2 Outputs <files/EXAMPLE2_OUTPUT.zip>{.interpreted-text role=“download”}. +Objective   Example 2 Objectives: +Develop a simply supported steel beam using displacement-based beam elements with tempurature-dependent material properites, Record internal forces of an element subjected to a linear time-temperature history due to the restraint against thermal expansion, Record displacement of a node due to a linear time-temperature history, and Correlate the recorded internal forces and displacement with the linear time-temperature history to plot the two variables as a function of temperature.`,content:`Restrained Steel beam subjected to uniform temperature on half of the member.   .align-centeralign-center width=“500px” +Example overview: A steel beam of two equal elements is subjected to a uniform temperature on only one of the elements. Element 1 remains at ambient tempurature while Element 2 is heated using a linear time-temperature history. +Download Example 2 files: +Example2.tcl +Example 2 Outputs <files/EXAMPLE2_OUTPUT.zip>.interpreted-text role=“download”. +Objective   Example 2 Objectives: +Develop a simply supported steel beam using displacement-based beam elements with tempurature-dependent material properites, Record internal forces of an element subjected to a linear time-temperature history due to the restraint against thermal expansion, Record displacement of a node due to a linear time-temperature history, and Correlate the recorded internal forces and displacement with the linear time-temperature history to plot the two variables as a function of temperature. Material   The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties per Eurocode 3 11 . More details of Steel01 can be found at: Steel01 Material  uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210 GPa (Young’s modulus of elasticity at ambient temperatures) +Fy = 250 MPa (Yield strength of material at ambient temperatures) +b = 0.001 (Strain-Hardening Ratio) +Transformation   The beam is expanding in one direction, therefore, 2nd order bending effects do not need to be considered. +geomTransf Linear $transftag;Learn more about geometric transofrmations: Geometric Transformation  Section   The discretization of the steel section into four fibers is shown using the code below: +section FiberThermal secTag -GJ $Esset numSubdivIJ 2; \\# horizontal divisionset numSubdivJK 2; \\# vertical divisionset yI -100; #mmset zI -200; #mmset yJ 100; #mmset zJ -200; #mmset yK 100; #mmset zK 200; #mmset yL -100; #mmset zL 200; #mmpatch quad $matTag $numSubdivIJ $numSubdivJK $yI $zI $yJ $zJ $yK $zK $yL $zLSections that will be subjected to thermal loading must be created with fiberThermal or fibersecThermal. +In previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience. +The discretization can be visualized as such: +.align-centeralign-center width=“400px” +Cross section of rectangular beam showing fiber discretization +Elements   dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them. +The beam is made of one element with 5 iteration points and connects nodes 1 & 2. OpenSees is sensitive to the number of iteration points in each element and this could change the result of the recorded displacement. For this reason, it is important to perform these benchmarking examples to establish how many iteration points allows for convergence to the expected recorded displacement. To code the number of iteration points, we use the following syntax: +dispBeamColumnThermal eleTag iNode jNode numIntgrPts secTag TransfTag; +Element 1 +element dispBeamColumnThermal 1 1 2 5 $secTag $transftag;Element 2 +element dispBeamColumnThermal 1 2 3 5 $secTag $transftag; Output Recorders   Displacement of the middle of node (2) in DOF 1 (horizontal direction) and the horizontal reaction force from the boundary conditions is what we want to record. To do so, a folder within your working directory must be created. dataDir is the command to create that folder and should be defined at the beginning of the model. This is where your output files will be saved. +set dataDir Examples/EXAMPLE2_OUTPUT;file mkdir $dataDir;Displacement of the middle node (2) in DOF 1 (Horizontal Displacement) +recorder Node -file $dataDir/MidspanNodeDisp.out -time -node 2 -dof 1 disp;Recording reactions at the boundary conditions: +recorder Node -file $dataDir/BoundryRXN.out -time -node 1 3 -dof 1 2 reaction;Recording the section forces in Elements 1 & 2: +recorder Element -file $dataDir/ele_force_1.out -time -ele 1 section 2 forcerecorder Element -file $dataDir/ele_force_2.out -time -ele 2 section 2 forceLearn more about the Recorder Command: [Recorder Command <http://opensees.berkeley.edu/wiki/index.php/Recorder_Command>].title-ref __ +Thermal Loading   This particular model is heating a beam to a set temperature over the time period of the model. We are not asking OpenSees to use a specific time-temperature curve, rather linearly ramp up the temperature from ambient to 1180 ° C. +Therefore, we set the maximum temperature as follows: +T = Max Tempurature degcelciusdeg celcius set T 1180;In OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure above). And are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, the entire cross section is one temperature, and two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of 200mm, therefore, Y1 = 100 mm & Y2 = -100 mm for the top and bottom fibers respectively. +Location of bottom extreme fiber of beam mmmm set Y1 -100;Location of top extreme fiber of beam mmmm set Y2 100; .align-centeralign-center width=“500px” +Location of defined input temperature locations on the member cross section +The bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 1180 ° C and will be increased incrementally and linearly as the time step continues in the analysis. An external temperature data set can could also be used for more complex temperature loading. +Element 1 will remain at ambient temperature 20 ° C, while Element 2 will be heated to the target tempurature. The syntax for this is: +pattern Plain 1 Linear eleLoad -ele 1 -type --beamThermal $T $Y2 $T Y1; eleLoad -ele 2 -type --beamThermal $T $Y2 $T Y1 Thermal Analysis   Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output. +A variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses. +set Nsteps 1000set Factor \\[expr 1.0/$Nsteps\\];integrator LoadControl $Factor;analyze $Nsteps; Output Plots   After the model has completed running, the results will be a horizontal displacement of the recorded node, the internal forces in the elements, and the reactions from the boundary conditions. Since the temperature was linearly ramped up from ambient to 1180 ° C, the user can develop a temperature history that matches every increment of the model. +Element 1 internal axial force vs. temperature +.align-centeralign-center width=“500px” +Node 2 Horizontal displacement versus temperature +.align-centeralign-center width=“500px” +Sources   11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design.`}).add({id:18,tag:"en",href:"/opensees-gallery/examples/thermalexamples/thermalexample3/",title:"Example 3",description:`A 6m long beam has a uniform applied load of 10 kN/m. With the loading sustained, the beam is heated to a target temperature of 1180 ° C. +{.align-centeralign-center width=“500px”} +Elevation of beam and member cross-section +Example overview: A steel beam is subjected to a uniform temperature using a linear time-temperature history. Vertical midspan displacement of the heated beam is recorded throughout the analysis. An investigation is performed on the impact the following parameters have on the midspan displacement of the beam: (i) including 2nd order geometric transformations, and (ii) restraining the horizontal displacement of the boundary conditions`,content:`A 6m long beam has a uniform applied load of 10 kN/m. With the loading sustained, the beam is heated to a target temperature of 1180 ° C. +.align-centeralign-center width=“500px” +Elevation of beam and member cross-section +Example overview: A steel beam is subjected to a uniform temperature using a linear time-temperature history. Vertical midspan displacement of the heated beam is recorded throughout the analysis. An investigation is performed on the impact the following parameters have on the midspan displacement of the beam: (i) including 2nd order geometric transformations, and (ii) restraining the horizontal displacement of the boundary conditions +Download Example 3 files: +Example3.tcl +WsectionThermal.tcl +Example 3 Outputs <files/Example3_OUTPUT.zip>.interpreted-text role=“download”. +Objectives   Develop a simply supported steel beam model using displacement-based beam elements with tempurature-dependent material properites, Record the midspan vertical displacment due to a linear time-temperature heating curve and a uniformly distributed gravity load, and Demonstrate the difference in midspan displacement of the beam when including 2nd order geometric transformations and restraining the beam against horizontal displacement of the beam ends. Material   The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties according to Eurocode 3 carbon steel. More details of Steel01 can be found at: Steel01 Material  uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210000 MPa (Young’s modulus of elasticity at ambient temperatures) +Fy = 250 MPa (Yield strength of material at ambient temperatures) +b = 0.01 (Strain-Hardening Ratio) +Transformation   Both Linear & Corotational (Non-Linear)Transformations were used, and the resulting midspan displacements of the beams were recorded to view differences of including 2nd order bending effects. +geomTransf Linear $transftag; or +geomTransf Corotational $transftag; Learn more about geometric transofrmations: Geometric Transformation  section   This example uses a W-shape beam, therefore an external .tcl script is used to define the fiber sections. This script uses fibersecThermal to procure a fibered W-shape section with a section tag to be used while defining elements. Eight fibers are used throughout the web and four fibers within each flange. +In previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience. +Wsection dimensions: +set d 355; #mmset bf 171.5; #mmset tf 11.5; #mmset tw 7.4; #mmset nfdw 8; #mmset nftw 1; #mmset nfbf 1; #mmset nftf 4; #mm secTag - section tag matTag - material tag d = nominal depth tw = web thickness bf = flange width tf = flange thickness nfdw = number of fibers along web depth nftw = number of fibers along web thickness nfbf = number of fibers along flange width nftf = number of fibers along flange thickness Gj = torsional stiffness # WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj WsectionThermal 1 1 $d $bf $tf $tw 8 1 1 4 $Es .align-centeralign-center width=“500px” +Cross section of W-shape showing fibers in the flanges and the web +Element   dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them. +This example was developed using 6 elements along the length of the beam. +dispBeamColumnThermal eleTageleTag iNode jNodejNode numIntgrPts secTagsecTag TransfTag; +element dispBeamColumnThermal $secTag 1 2 5 $secTag $transftag;This example will build off of the benchmarked examples and therefore used 5 iteration points in each element to simulate the beam bending and thermal expansion. +Output Recorders   dataDir is defined at the beginning of the model, this creates a folder within your working directory where output files will be saved. +set dataDir Examples/EXAMPLE3_OUTPUT;file mkdir $dataDir;Displacement of the midspan node (4) in DOF 2 (Vertical Displacement) +recorder Node -file $dataDir/Midspan_Disp.out\\" -time -node 4 -dof 2 disp;Reaction forces at end nodes (nodes 1 & 7) +recorder Node -file $dataDir/RXNs.out -time -node 1 7 -dof 2 reaction;Learn more about the Recorder Command: Recorder Command  Thermal Loading   This particular model is heating a beam to a set temperature over the time period of the model. We are not asking OpenSees to use a specific time-temperature curve, rather linearly ramp up the temperature from ambient to 1180 ° C. +Therefore, we set the maximum temperature as follows: +set T 1180; # Max temperature, deg. celsiusIn OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure above). And are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of d, therefore, Y1 = d/2 & Y2 = -d/2 the top and bottom fibers respectively. +Top fiber of beam +set Y1 [expr $d/2];Bottom fiber of beam +set Y2 [expr -$d/2]; .align-centeralign-center width=“500px” +Location of defined input temperature locations on the member cross section +The bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 1180 ° C and will be increased incrementally and linearly as the time step continues in the analysis. An external temperature data set could also be used for more complex temperature loading. +Using a plain linear loading pattern, Elements 1-6 will be heated to the target tempurature, T using a for loop for effecency. The syntax for this is: +pattern Plain 3 Linear for set level 1 $level \\<= 6 incr level 1 set eleID $level eleLoad -ele $eleID -type -beamThermal $T $Y2 $T $Y1; Thermal Analysis   Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output. +A variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses. +set Nstep 1000;Thermal load is applied in 1000 steps. Each step is an 0.001 increment of the maximum temperature specified in the thermal loading step T (1180) +set Factor \\[expr 1.0/$Nstep\\]; integrator LoadControl $Factor; analyze $Nstep; Output Plots   After the model has completed running, the results will be a vertical midspan displacement of the recorded node. Since the temperature was linearly ramped up from ambient to 1180 ° C, the user can develop a temperature history that matches every increment of the model. Additionally,mid-span displacement of the beam when including 2nd order geometric transformations, as well as restraining the horizontal boundary conditions are plotted. The same model was executed in the finite element software Abaqus additonally plotted as "AB". +.align-centeralign-center width=“500px” +Sources   [1] W. Maddalozzo and E.C. Fischer, "Post-earthquake fire performance of steel buildings," World Conference on Earthquake Engineering, 17WCEE, Sendai, Japan - September 13-18, 2020.`}).add({id:19,tag:"en",href:"/opensees-gallery/examples/thermalexamples/thermalexample4/",title:"Example 4",description:`A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve.   {.align-centeralign-center width=“500px”} +Elevation of frame +Example overview: A one-bay frame is considered with a uniformly distributed load (2 kN/m). The frame is exposed to a fire. Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross section,and the temperatures at each fiber when the members are exposed to a non-linear gas time-temperature curve.`,content:`A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve.   .align-centeralign-center width=“500px” +Elevation of frame +Example overview: A one-bay frame is considered with a uniformly distributed load (2 kN/m). The frame is exposed to a fire. Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross section,and the temperatures at each fiber when the members are exposed to a non-linear gas time-temperature curve. The horizontal displacements of the top corners of frame are restrained to represent lateral bracing, and the midspan displacement of the beam is recorded throughout the analysis. +Download Example 4 files: +Example4.tcl +WsectionThermal.tcl +Nodal Temperature Files <files/Ex4_NodalTemperatureFiles.zip>.interpreted-text role=“download”. +Example 4 Outputs <files/Example4_OUTPUT.zip>.interpreted-text role=“download”. +Objectives   Example 4 Objectives: 1. Develop a portal frame in OpenSees using displacement-based elements with tempurature-dependent material properties, and 2. Implementing user-defined time-tempurature histories for the elements calculated through heat transfer analysis. +Material   The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties according to Eurocode 3 carbon steel. More details of Steel01 can be found at: Steel01 Material  uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b;Es = 210000 MPa (Young’s modulus of elasticity at ambient temperatures) +Fy = 275 MPa (Yield strength of material at ambient temperatures) +b = 0.01 (Strain-Hardening Ratio) +Transformation   Because the beams in this example experience large deflections, 2nd order bending effects were considered using the Corotational geometric transformation. +geomTransf Corotational $transftag;Learn more about geometric transofrmations: Geometric Transformation  section   This example uses a W-shape beam, therefore an external .tcl script is used to define the fiber sections. This script uses fibersecThermal to procure a fibered W-shape section with a section tag to be used while defining elements. Eight fibers are used throughout the web and four fibers within each flange. +In previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young's Modulus is used for convenience. +Wsection dimensions: +set secTag 1;set d 160;set bf 82;set tf 7.4;et tw 5.0;set nfdw 8;set nftw 1;set nfbf 1;set nftf 4; secTag - section tag matTag - material tag d = nominal depth tw = web thickness bf = flange width tf = flange thickness nfdw = number of fibers along web depth nftw = number of fibers along web thickness nfbf = number of fibers along flange width nftf = number of fibers along flange thickness Gj = torsional stiffness WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj +WsectionThermal $secTag $matTag $d $bf $tf $tw 8 1 1 4 $Es .align-centeralign-center width=“500px” +Cross section of W-shape showing fibers in the flanges and the web +Element   dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them. +dispBeamColumnThermal eleTageleTag iNode jNodejNode numIntgrPts secTagsecTag TransfTag; +element dispBeamColumnThermal 1 1 2 3 $secTag $transftag;Each column and beam element is created using ten displacement-based elements with 3 iteration points in each element. +Output Recorders   $dataDir is defined at the beginning of the model, this creates a folder within your working directory where output files will be saved. >set dataDir Examples/EXAMPLE4_OUTPUT; +file mkdir $dataDir;Displacement of the beam midspan node (27), DOF 2 (Vertical Displacement) +recorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 27 -dof 2 disp;Reaction forces at end nodes. (1 & 12) +recorder Node -file $dataDir/RXNS.out -time -node 1 12 -dof 2 3 reaction;Learn more about the Recorder Command: Recorder Command  Thermal Loading   This particular model is heated using a fire time tempurature curve shown below. The fiber temperatures, or the temperature distribution through the cross section was calculated by performing a heat transfer analysis. +.align-centeralign-center width=“500px” +The results from the heat transfer analysis were used as inputs for the fiber temperatures in OpenSees. The locations of the input tempurature locations can be seen in the figure below. +Three tempurature input files were created for the tempurature distribution of the beam and columns. Each tempurature file has 10 columns representing: Time, T1, T2, T3, T4, T5, T6, T7, T8 & T9. Time ranges from 0 to 1 to correlete with OpenSees analysis time steps. The T1 through T9 columns represent temperatures at each of the locations shown below for nine fibers through the cross section. +The red dots above below are locations where nodal temperatures were recorded during the heat transfer analysis and red dotted lines represent temperature input locations. The code below shows how to define each of the temperature input locations. The temperature through the depth of the web was constant. : +set Y9 [expr -$d/2]; set Y2 [expr -($d/2 - 0.99*$tf)]; set Y3 [expr -($d/2 - $tf)]; set Y4 [expr -$d/4]; set Y5 0.0; set Y6 [expr $d/4]; set Y7 [expr ($d/2 - $tf)]; set Y8 [expr ($d/2 - 0.99*$tf)]; set Y9 [expr $d/2]; .align-centeralign-center width=“500px” +Location of defined input temperature locations and extracted nodal temperatures on the member cross section (both beam and columns) +The bottom extreme fiber temperature must be defined first in the thermal load pattern. The input temperature files must be in your working directories or have their paths specified. +Temperature loading for the beam +pattern Plain 11 Linear for set level 21 $level \\<= 30 incr level 1 set eleID $level; eleLoad -ele $eleID -type -beamThermal -source BeamTemp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1;Temperature loading for column 1 +pattern Plain 11 Linear for set level 1 $level \\<= 10 incr level 1 set eleID $level; eleLoad -ele $eleID -type -beamThermal -source Column1Temp.txt $Y9 $Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1;Temperature loading for column 2 +pattern Plain 11 Linear for set level 11 $level \\<= 20 incr level 1 set eleID $level; eleLoad -ele $eleID -type -beamThermal -source Column2Temp.txt $Y$Y8 $Y7 $Y6 $Y5 $Y4 $Y3 $Y2 $Y1; Thermal Analysis   Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output. +A variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses. +set Nstep 1000;set Factor \\[expr 1.0/$Nstep\\];integrator LoadControl $Factor;analyze $Nstep; Output Plots   After the model has completed running, the results will be the vertical midspan displacement of the beam. This displacement can be plotted against the time of the fire. It is suggested that if the user would like to develop a temperature history that matches every increment of the model, the same number of tempurature inputs as time steps is used. +Beam midspan displacement versus time for the heated one-bay frame: +.align-centeralign-center width=“500px” +Sources   11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design. +22 W. Maddalozzo and E.C. Fischer, "Post-earthquake fire performance of steel buildings," World Conference on Earthquake Engineering, 17WCEE, Sendai, Japan - September 13-18, 2020.`}).add({id:20,tag:"en",href:"/opensees-gallery/examples/example4/",title:"Example 4: Multibay Two Story Frame",description:"A multi-bay reinforced concrete frame is investigated.",content:`Example 4.1   This example is of a reinforced concrete multibay two story frame, as shown in Figure 1, subject to gravity loads. The files for this example are: Python Tcl <a href="Example4.py"><code>Example4.py</code></a></li> <a href="Example4.tcl"><code>Example4.tcl</code></a></li> A model of the frame shown in Figure 1 is created. The number of objects in the model is dependent on the parameter numBay. The (numBay + 1)*3 nodes are created, one column line at a time, with the node at the base of the columns fixed in all directions. Three materials are constructed, one for the concrete core, one for the concrete cover and one for the reinforcement steel. Three fiber discretized sections are then built, one for the exterior columns, one for the interior columns and one for the girders. Each of the members in the frame is modelled using nonlinear beam-column elements with 4 (nP) integration points and a linear geometric transformation object. + For gravity loads, a single load pattern with a linear time series and two vertical nodal loads acting at the first and second floor nodes of each column line is used. The load at the lower level is twice that of the upper level and the load on the interior columns is twice that of the exterior columns. +For the lateral load analysis, a second load pattern with a linear time series is introduced after the gravity load analysis. Associated with this load pattern are two nodal loads acting on nodes 2 and 3, with the load level at node 3 twice that acting at node 2. +The integrator for the analysis will be LoadControl with a load step increment of 0.1. The constraints are enforced with a Plain constraint handler. +Once the components of the analysis have been defined, the analysis object is then created. For this problem a Static analysis is used and 10 steps are performed to load the model with the desired gravity load. +After the gravity load analysis has been performed, the gravity loads are set to constant and the time in the domain is reset to 0.0. A new LoadControl integrator is now added. The new LoadControl integrator has an initial load step of 1.0, but this can vary between 0.02 and 2.0 depending on the number of iterations required to achieve convergence at each load step. 100 steps are then performed. +The output consists of the file Node41.out containing a line for each step of the lateral load analysis. Each line contains the load factor, the lateral displacements at nodes 2 and 3. A plot of the load-displacement curve for the frame is given in Figure 2. +`}).add({id:21,tag:"en",href:"/opensees-gallery/examples/thermalexamples/thermalexample5/",title:"Example 5",description:`A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C. +{.align-centeralign-center width=“500px”} +Elevation of two-bay frame +Example overview: This example will combine the modeling methodologies developed through the other examples and apply them to a two-bay frame with a fire in one of the bays.`,content:`A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C. +.align-centeralign-center width=“500px” +Elevation of two-bay frame +Example overview: This example will combine the modeling methodologies developed through the other examples and apply them to a two-bay frame with a fire in one of the bays. Recorded data from the OpenSees analysis will be compared with the experimental test data 22 . Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross sections when the members are exposed to a linear gas time-temperature curve. Horizontal displacement of upper corners, U1 & U2 are recorded. +Download Example 5 files: +Example5.tcl +WsectionThermal.tcl +Example 5 Outputs <files/Example5_OUTPUT.zip>.interpreted-text role=“download”. +Objectives   Example 5 Objectives: 1. Create a two-bay frame in OpenSees using displacement-based elements with tempurature-dependent material properties, 2. Implementing user-defined time-tempurature histories for the elements calculated through heat transfer analysis, and 3. Compare recorded parameters from the OpenSees model to experimental testing data 22 to benchmark modeling methodologies. +Experimental Test Overview +A two-bay frame was tested by researchers 22 . Each bay size was 1.2 m in width and 1.18 m in height. Point loads were applied at the beam-column joints in the lateral and gravity directions in addition to a uniformly distributed load applied to the beams. The columns and beam of one of the bays was heated using electrical heaters that surrounded each of the members, therefore, uniformly heating each member (there was no thermal gradient through the cross section). The temperature was increased until failure. +Material   The uniaxialMaterial Steel01Thermal includes temperature-dependent steel thermal and mechanical properties per Eurocode 3 11 . More details of Steel01 can be found at: Steel01 Material  Es = 210 GPa (Young’s modulus of elasticity at ambient temperatures) Fy = 355 MPa (Yield strength of material at ambient temperatures) b = 0.001 (Strain-Hardening Ratio) set matTag 1;uniaxialMaterial Steel01Thermal $matTag $Fy $Es $b; Transformation   Because the beams and columns in this example experience bending, 2nd order bending effects were considered using the Corotational geometric transformation. +geomTransf Corotational $transftag;Learn more about geometric transofrmations: Geometric Transformation  Section   This example uses an external .tcl script to define the cross section. This script uses fibersecThermal to procure a fibered W-shape section with a section tag to be used while defining elements. Eight fibers are used throughout the web and four fibers within each flange. +In previous versions of OpenSees, a default value for torsional stiffness was used (GJ). In versions 3.1.0 and newer fiber sections require a value for torsional stiffness. This is a 2D example with negligible torsion, however a value is required. The Young’s Modulus is used for convenience. Wsection dimensions are (units are meters): +set secTag 1; # section Tag set d 0.08; # depth of beam set bf 0.046; # flange width set tf 0.0052; # flange thickness set tw 0.0038; # web thickness secTag - section tag matTag - material tag d = nominal depth tw = web thickness bf = flange width tf = flange thickness nfdw = number of fibers along web depth nftw = number of fibers along web thickness nfbf = number of fibers along flange width nftf = number of fibers along flange thickness Gj = torsional stiffness # WsectionThermal secTag matTag d bf tf tw nfdw nftw nfbf nftf Gj WsectionThermal $secTag $matTag $d $bf $tf $tw 8 1 1 4 $Es .align-centeralign-center width=“500px” +Cross section of W-shape showing fibers in the flanges and the web +Element   dispBeamColumnThermal elements are used because temperature-dependent thermal and mechanical steel properties can be applied to these elements. Any portion of the structure that is being heated must use elements that are compatible with uniaxialMaterial Steel01Thermal. At the time this model was developed, dispBeamColumnThermal was the only element type that could have tempurature-dependent thermal and mechanical properties applied to them. +# $eleTag $iNode $jNode $numIntgrPts $secTag $TransfTag; element dispBeamColumnThermal 1 1 2 3 $secTag $transftag;Each column and beam element is created using ten displacement-based elements with 3 iteration points in each element. +Output Recorders   dataDir is defined at the beginning of the model, this creates a folder within your working directory where output files will be saved. +set dataDir Examples/EXAMPLE5_OUTPUT;file mkdir $dataDir;displacements of node U1 (node 11, top left), DOF 1 (Horizontal Displacement) +recorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 11 -dof 1 disp;displacements of node U2 (node 22, top-middle), DOF 1 (Horizontal Displacement) +recorder Node -file $dataDir/Midspan_BeamDisp.out -time -node 22 -dof 1 disp;Reaction forces at support nodes (1, 12 and 23): +recorder Node -file $dataDir/RXNS.out -time -node 1 12 23 -dof 2 3 reaction;Learn more about the Recorder Command: Recorder Command  Thermal Loading   In this model, the beams and columns of the left bay are heated by increasing the temperature linearly from ambient temperature until failure. The right bay remains at ambient tempurature. +Therefore, we set the maximum temperature as follows: +set T 550; # Max Temperature, deg CIn OpenSees, the user can define 2 or 9 temperature data points through the cross section. In a 2D analysis framework, like this example, temperature data point locations are specified on the y-axis of the local coordinate system (as shown in the figure above). And are linearly interpolated between the defined points. Because this example is using a uniformly heated beam, two temperature points on each extreme fiber on the y-axis will be chosen. The beam has a depth of d, therefore, Y1 = d/2 and Y2 = -d/2 the top and bottom fibers respectively. +Top fiber of beam +set Y1 [expr $d/2];Bottom fiber of beam +set Y2 [expr -$d/2];Location of defined input temperature locations on the member cross section (both beam and columns) +.align-centeralign-center width=“500px” +The bottom extreme fiber temperature must be defined first. The target maximum temperature for each extreme fiber is set to 550 ° C and will be increased linearly and incrementally as the time step continues in the analysis. An external temperature data set can could also be used for more complex temperature loading. +Using a for-loop and a plain linear loading pattern, elements 1-20 & 31-40 will be subjected to tempurature, T. These elements define the heated bay. +pattern Plain 2 Linear for set i 1 $i \\<= 20 incr i eleLoad -ele $i -type -beamThermal $T $Y2 $T $Y1; for set i 31 $i \\<= 40 incr i eleLoad -ele $i -type -beamThermal $T $Y2 $T $Y1;; Thermal Analysis   Thermal loading is applied in 1000 steps, with a load factor of 0.001. Each step is a 0.001 increment of the maximum temperature specified in the thermal loading step: T. The analysis is a static analysis and the contraints of the beam are plain. 1000 increments was also used during thermal analysis to allow for easy correlation between the input temperatures and the recorded output. Each step is an 0.001 increment of the maximum temperature specified in the thermal loading step: T. +A variety of load factors were examined and the solution converged when a load factor of 0.001 was used. OpenSees is sensitive to the load factor, therefore, it is important to ensure that benchmarking examples are performed to determine the proper load factor to use in structural fire engineering analyses. +set Nstep 1000 set Factor \\[expr 1.0/$Nstep\\]; integrator LoadControl $Factor; analyze $Nstep; Output Plots   After the model has completed running, the results will be horizontal displacements of the recorded node. Since the temperature was linearly ramped up from ambient to 550 ° C, the user can develop a temperature history that matches every increment of the model. The displacements are benchmarked against test data 22 as shown in the figure below. +Node U1 horizontal displacement versus temperature compared with the testing data +.align-centeralign-center width=“500px” +Node U2 horizontal displacement versus temperature compared with the testing data +.align-centeralign-center width=“500px” +Sources   11 European Committee for Standardization (CEN). (2005). Eurocode 3: Design of Steel Structures, Part 1.2: General Rules - Structural Fire Design. +22 Rubert A, Schaumann P. (1986). “Structural steel and plane frame assemblies under fire action.” Fire Safety Journal, vol. 10, pp.173–184.`}).add({id:22,tag:"en",href:"/opensees-gallery/docs/library/frame/",title:"Frame",description:"Frame elements.",content:""}).add({id:23,tag:"en",href:"/opensees-gallery/examples/example5/",title:"Frame with Diaphragms",description:"A three-dimensional reinforced concrete rigid frame, is subjected to bi-directional earthquake ground motion.",content:`A three-dimensional reinforced concrete rigid frame, is subjected to bi-directional earthquake ground motion. +Example5.tcl RCsection.tcl Or for Python: +Example5.py render.py In both cases, the following ground motion records are required: +tabasFN.txt tabasFP.txt Modeling   A model of the rigid frame shown in the figure below is created. The model consists of three stories and one bay in each direction. Rigid diaphragm multi-point constraints are used to enforce the rigid in-plane stiffness assumption for the floors. Gravity loads are applied to the structure and the 1978 Tabas acceleration records are the uniform earthquake excitations. +Nonlinear beam column elements are used for all members in the structure. The beam sections are elastic while the column sections are discretized by fibers of concrete and steel. Elastic beam column elements may have been used for the beam members; but, it is useful to see that section models other than fiber sections may be used in the nonlinear beam column element. + Analysis   A solution Algorithm of type Newton is used for the nonlinear problem. The solution algorithm uses a ConvergenceTest which tests convergence on the norm of the energy increment vector. The integrator for this analysis will be of type Newmark with a γ\\gamma of 0.25 and a β\\beta of 0.5. Due to the presence of the multi-point constraints, a Transformation constraint handler is used. +Once all the components of an analysis are defined, the Analysis itself is defined. For this problem a Transient analysis is used. 2000 steps are performed with a time step of 0.01. +Post-Processing   The nodal displacements at nodes 9, 14, and 19 (the retained nodes for the rigid diaphragms) will be stored in the file node51.out for post-processing. +The results consist of the file node.out, which contains a line for every time step. Each line contains the time and the horizontal and vertical displacements at the diaphragm retained nodes (9, 14 and 19) i.e. time Dx9 Dy9 Dx14 Dy14 Dx19 Dy19. The horizontal displacement time history of the first floor diaphragm node 9 is shown in the figure below. Notice the increase in period after about 10 seconds of earthquake excitation, when the large pulse in the ground motion propogates through the structure. The displacement profile over the three stories shows a soft-story mechanism has formed in the first floor columns. The numerical solution converges even though the drift is ≈20%\\approx 20 \\% . The inclusion of P−ΔP-\\Delta effects shows structural collapse under such large drifts. +`}).add({id:24,tag:"en",href:"/opensees-gallery/examples/viscousdamper/",title:"Frame with Viscous Dampers",description:"This example demonstrates how to use the viscous damper material within a simple single story shear frame.",content:`This example demonstrates how to use the viscous damper material within a simple single story shear frame. +The files needed to analyze this structure in OpenSees are included here: +The main file: Supporting files +TakY.th - uses the JR Takatori record from the Kobe 1995 earthquake (available in the zip file below) All files are available in a compressed format here: Viscous_Damper_Example.zip +The rest of this example describes the model and shows the analysis results. +Model Description   Figure 1. Schematic representation of a viscous damper installed in the single story moment resisting frame. The viscous damper is modeled with a Two Node Link Element. This element follows a Viscous damper hysteretic response. An idealized schematic of the model is presented in Figure 1. +The units of the model are mm, kN, and seconds. +Basic Geometry   The single bay single story frame shown in Figure 1 has 5000mm bay width and 3000mm story height (centerline). The period of the system is 0.7sec. Columns and beams of the frame are modeled with elastic beam-column elements. +Damper Links   A Two Node Link Element is used to link the two nodes that define the geometry of the viscous damper. +Constraints   the Nodes at the base of the frame are fixed. The beam (element 3 in Figure 1) is considered to be rigid. +Viscous Damper Material   To model the viscous damper the ViscousDamper is used. The input parameters that are selected for the damper example are as follows: Axial Stiffness K = 25 kN/mm, Damping Coefficient Cd=20.74 kN(s/mm)<sup>0.35</sup> and exponent a=0.35. +Loading   The single story frame with viscous damper is subjected to the 50% JR Takatori record from the Kobe 1995 earthquake in Japan. +Recorders   The recorders used in this example include: +The Element recorder to track the damper axial force and axial displacement. The Node recorder to track the Frame displacement history at its roof. Analysis   A uniform excitation option is selected with application of ground acceleration history as the imposed motion. The Newmark integration scheme is selected for integration of the equations of motion with a time step dt = 0.001sec. Two percent mass proportional damping is used. +Results   Simulation Results for the 50% JR Takatori Record   Figure 2. Displacement history at the roof of the single story MRF The force - displacement relationship from the viscous damper are shown in Figure 3. A comparison with results from a SAP2000 model is also shown in Figure 3. Results are nearly identical between the two models. Figure 3. Force - displacement relationship of the viscous damper and comparison with identical model in SAP2000 Example posted by: Sarven Akcelyan  and Prof. Dimitrios G. Lignos  (McGill University)`}).add({id:25,tag:"en",href:"/opensees-gallery/docs/advanced-settings/icons/",title:"Icons",description:"Configure secure access to icons from Bootstrap and Font Awesome.",content:""}).add({id:26,tag:"en",href:"/opensees-gallery/examples/cantilevertransient/",title:"Inelastic Cantilever",description:"A plane cantilever column is shaken by an earthquake. Material nonlinearity is accounted for using the force formulation and fiber-discretized cross sections",content:`In order to execute this notebook, go to the menu bar and click Run/Run all cells. You can also run individual cells by selecting the cell (a blue bar will appear to the left of the active cell, then pressing Shift+Enter. +NOTE Before running this notebook, you must install the external dependencies. To to this, uncomment the following cell by removing the leading # character, execute the cell, then put the # character back to prevent it from running again, thereby “commenting it out”. Once everything is installed you may re-run the commented-out cell to hide the text generated by the installation. +# !pip install -Ur requirements.txt# Linear algebra library import numpy as np # Plotting library import matplotlib.pyplot as plt # The next two lines set reasonable plot style defaults import scienceplots plt.style.use('science')## Configure units # Units are based on inch-kip-seconds import opensees.units.iks as units pi = units.pi; ft = units.ft; ksi = units.ksi; inch = units.inch;## Distributed Inelasticity 2d Beam-Column Element # fiber sectionSet up basic model geometry +# import the openseespy interface which contains the "Model" class import opensees.openseespy as ops# generate Model data structure model = ops.Model(ndm=2, ndf=3) # Length of cantilever column L = 8*ft; # specify node coordinates model.node(1, 0, 0 ); # first node model.node(2, 0, L ); # second node # boundary conditions model.fix(1, 1, 1, 1 ) ## specify mass model.mass(2, 2.0, 1e-8, 1e-8)## Element name: 2d nonlinear frame element with distributed inelasticity # Create material and add to Model mat_tag = 1 # identifier that will be assigned to the new material E = 29000*ksi fy = 60*ksi Hkin = 0 Hiso = 0 model.uniaxialMaterial("Steel01", mat_tag, fy, E, 0.01) # model.uniaxialMaterial("ElasticPP", mat_tag, E, fy/E) # model.uniaxialMaterial("UniaxialJ2Plasticity", mat_tag, E, fy, Hkin, Hiso) Create a section   import opensees.section # Load cross section geometry and add to Model sec_tag = 1 # identifier that will be assigned to the new section SecData = SecData["nft"] = 4 # no of layers in flange SecData["nwl"] = 8 # no of layers in web SecData["IntTyp"] = "Midpoint"; SecData["FlgOpt"] = True section = opensees.section.from_aisc("Fiber", "W24x131", # "W14x426", sec_tag, tag=mat_tag, mesh=SecData, ndm=2, units=units)import sees.section sees.section.render(section);Output: +<Figure size 350x262.5 with 1 Axes>Printing the fiber section will display the effective cross-sectional properties which result from quadrature over the cross section fibers: +print(section)Output: +SectionGeometry area: 38.42890000000003 ixc: 4013.509824163335 iyc: 343.8869259102087 Create an element   cmd = opensees.tcl.dumps(section, skip_int_refs=True) model.eval(cmd) # Create element integration scheme nIP = 4 int_tag = 1 model.beamIntegration("Lobatto", int_tag, sec_tag, nIP) # Create element geometric transformation model.geomTransf("Linear", 1) # Finally, create the element # CONN Geom Int model.element("ForceBeamColumn", 1, (1, 2), 1, int_tag) Analysis   Eigenvalue Analysis   # State = Initialize_State (Model,ElemData) # State = Structure('stif',Model,ElemData,State) # Initialize the analysis state for transient analysis model.analysis("Transient") # Form stiffness and mass matrices Kf = model.getTangent(k=1.0) # free DOF stiffness matrix Kf for initial State Mf = model.getTangent(m=1.0) # free DOF mass matrix Ml print("Kf:", Kf, sep="\\n") print("Mf:", Mf, sep="\\n")Output: +Kf: [[ 1.57505061e+03 0.00000000e+00 7.56024291e+04] [ 0.00000000e+00 1.16087302e+04 -1.21265960e-12] [ 7.56024291e+04 -1.21265960e-12 4.83855547e+06]] Mf: [[2.e+00 0.e+00 0.e+00] [0.e+00 1.e-08 0.e+00] [0.e+00 0.e+00 1.e-08]]Solve dynamic eigenvalue problem with scipy function eig +import scipy.linalg omega,Ueig = scipy.linalg.eig(Kf,Mf) # echo eigenmode periods print(' The three lowest eigenmode periods are') T = 2*pi/np.sqrt(omega) print(T)Output: +The three lowest eigenmode periods are [4.47793313e-01+0.j 2.85641961e-07+0.j 5.83159707e-06+0.j]In general the eigen function should be used, which takes advantage of sparsity in the system +for w in model.eigen(2): print(2*pi/np.sqrt(w))Output: +0.44779331340120765 5.8315970735940395e-06 Configure ground motion   # Apply damping in the first mode zeta = 0.02 model.modalDamping(zeta) # alphaM, betaK = 0.01, 0.01 # model.rayleigh(alphaM, betaK, 0, 0) # State = Add_Damping2State('Modal',Model,State,zeta)# Deltat = 0.02 # AccHst = np.loadtxt("tabasFN.txt") import quakeio Event = quakeio.read("TAK000.AT2") AccHst = Event.data Deltat = Event["time_step"]load_tag = 1 model.timeSeries('Path', load_tag, dt=Deltat, factor=1.0, values=units.gravity*AccHst) model.pattern('UniformExcitation', 1, 1, accel=load_tag) Configure integration method   ## initialize data for solution strategy # gam bet model.integrator("Newmark", 1/2, 1/4, form="d") Perform integration   nt = len(AccHst) Uplt = np.zeros(nt) Vplt = np.zeros(nt) Aplt = np.zeros(nt) Pplt = np.zeros(nt) # Defo = zeros(np,1) # Forc = zeros(np,1) for k in range(nt): if model.analyze(1, Deltat) != 0: print("Analysis failed") break # extract values for plotting from response history Uplt[k] = model.nodeDisp (2, 1) Vplt[k] = model.nodeVel (2, 1) Aplt[k] = model.nodeAccel(2, 1) # Pplt[k] = Post[k].Pr[Pdof,:]; # Defo(k) = Post(k).Elem1.v; # Forc(k) = Post(k).Elem1.q; Post-processing   Displacement History   t = np.arange(nt)*Deltat; Xp = t Yp = (Uplt/L)*100 FigHndl, AxHndl = plt.subplots() AxHndl.set_xlabel('Time (sec)') AxHndl.set_ylabel('Drift in X (\\\\%)') AxHndl.plot(Xp,Yp,'b') FigHndl.savefig("drift.png")Output: +<Figure size 350x262.5 with 1 Axes> Shear force-displacement history   Xp = (Uplt/L)*100 Yp = Pplt FigHndl, AxHndl = plt.subplots() AxHndl.set_xlabel('Lateral Drift (\\#)') AxHndl.set_ylabel('Lateral Force $P$') AxHndl.plot(Xp, Yp, 'b') plt.show()Output: +<Figure size 350x262.5 with 1 Axes>`}).add({id:27,tag:"en",href:"/opensees-gallery/examples/example3/",title:"Inelastic Plane Frame",description:"Nonlinear analysis of a concrete portal frame.",content:` This set of examples investigates the nonlinear analysis of a reinforced concrete frame. The nonlinear beam column element with a fiber discretization of the cross section is used in the model. The files for this example are: Python Tcl <a href="portal.py"><code>portal.py</code></a></p> <a href="portal.tcl"><code>portal.tcl</code></a></p> These files define the following functions: +Function Description create_portal Creates a model of a portal frame gravity_analysis Performs a gravity analysis on a model pushover_analysis Performs a pushover analysis on a model transient_analysis Performs a transient analysis on a model create_portal   The function create_portal creates a model representing the portal frame in the figure above. The model consists of four nodes, two nonlinear beam-column elements modeling the columns and an elastic beam element to model the girder. For the column elements a section, identical to the section used in Example 2, is created using steel and concrete fibers. +Begin with nodes and boundary conditions Python Tcl # create ModelBuilder (with two-dimensions and 3 DOF/node) model = ops.Model(ndm=2, ndf=3) # Create nodes # ------------ # create nodes & add to Domain - command: node nodeId xCrd yCrd model.node(1, 0.0, 0.0) model.node(2, width, 0.0) model.node(3, 0.0, height) model.node(4, width, height) # set the boundary conditions - command: fix nodeID uxRestrnt? uyRestrnt? rzRestrnt? model.fix(1, 1, 1, 1) model.fix(2, 1, 1, 1) set width 360 set height 144 model basic -ndm 2 -ndf 3 # Create nodes # tag X Y node 1 0.0 0.0 node 2 $width 0.0 node 3 0.0 $height node 4 $width $height # Fix supports at base of columns # tag DX DY RZ fix 1 1 1 1 fix 2 1 1 1 Next define the materials +Python Tcl # Define materials for nonlinear columns # ------------------------------------------ # CONCRETE tag f'c ec0 f'cu ecu # Core concrete (confined) model.uniaxialMaterial("Concrete01", 1, -6.0, -0.004, -5.0, -0.014) # Cover concrete (unconfined) model.uniaxialMaterial("Concrete01", 2, -5.0, -0.002, -0.0, -0.006) # STEEL # Reinforcing steel fy = 60.0; # Yield stress E = 30000.0; # Young's modulus # tag fy E b model.uniaxialMaterial("Steel01", 3, fy, E, 0.01) # Define materials for nonlinear columns # ------------------------------------------ # CONCRETE tag f'c ec0 f'cu ecu # Core concrete (confined) uniaxialMaterial Concrete01 1 -6.0 -0.004 -5.0 -0.014 # Cover concrete (unconfined) uniaxialMaterial Concrete01 2 -5.0 -0.002 0.0 -0.006 # STEEL # Reinforcing steel set fy 60.0; # Yield stress set E 30000.0; # Young's modulus # tag fy E0 b uniaxialMaterial Steel01 3 $fy $E 0.01 Define a cross section for the columns Python Tcl # Define cross-section for nonlinear columns # ------------------------------------------ # set some parameters colWidth = 15.0 colDepth = 24.0 cover = 1.5 As = 0.6 # area of no. 7 bars # some variables derived from the parameters y1 = colDepth/2.0 z1 = colWidth/2.0 model.section("Fiber", 1) # Add the concrete core fibers model.patch("rect", 1, 10, 1, cover-y1, cover-z1, y1-cover, z1-cover, section=1) # Add the concrete cover fibers (top, bottom, left, right) model.patch("rect", 2, 10, 1, -y1, z1-cover, y1, z1, section=1) model.patch("rect", 2, 10, 1, -y1, -z1, y1, cover-z1, section=1) model.patch("rect", 2, 2, 1, -y1, cover-z1, cover-y1, z1-cover, section=1) model.patch("rect", 2, 2, 1, y1-cover, cover-z1, y1, z1-cover, section=1) # Add the reinforcing fibers (left, middle, right, section=1) model.layer("straight", 3, 3, As, y1-cover, z1-cover, y1-cover, cover-z1, section=1) model.layer("straight", 3, 2, As, 0.0, z1-cover, 0.0, cover-z1, section=1) model.layer("straight", 3, 3, As, cover-y1, z1-cover, cover-y1, cover-z1, section=1) # Define cross-section for nonlinear columns # ------------------------------------------ # set some parameters set colWidth 15 set colDepth 24 set cover 1.5 set As 0.60; # area of no. 7 bars # some variables derived from the parameters set y1 [expr $colDepth/2.0] set z1 [expr $colWidth/2.0] section Fiber 1 # Add the concrete core fibers patch rect 1 10 1 [expr $cover-$y1] [expr $cover-$z1] [expr $y1-$cover] [expr $z1-$cover] # Add the concrete cover fibers (top, bottom, left, right) patch rect 2 10 1 [expr -$y1] [expr $z1-$cover] $y1 $z1 patch rect 2 10 1 [expr -$y1] [expr -$z1] $y1 [expr $cover-$z1] patch rect 2 2 1 [expr -$y1] [expr $cover-$z1] [expr $cover-$y1] [expr $z1-$cover] patch rect 2 2 1 [expr $y1-$cover] [expr $cover-$z1] $y1 [expr $z1-$cover] # Add the reinforcing fibers (left, middle, right) layer straight 3 3 $As [expr $y1-$cover] [expr $z1-$cover] [expr $y1-$cover] [expr $cover-$z1] layer straight 3 2 $As 0.0 [expr $z1-$cover] 0.0 [expr $cover-$z1] layer straight 3 3 $As [expr $cover-$y1] [expr $z1-$cover] [expr $cover-$y1] [expr $cover-$z1] gravity_analysis   We now implement a function called gravity_analysis which takes the instance of Model returned by create_portal, and proceeds to impose gravity loads and perform a static analysis. Its use will look like: +Python Tcl # Create the model model = create_portal() # perform analysis under gravity loads status = gravity_analysis(model) create_portal; gravity_analysis; A single load pattern with a linear time series is created with two vertical nodal loads acting at nodes 3 and 4: +Python Tcl model.pattern("Plain", 1, "Linear", loads= # nodeID xForce yForce zMoment 3: [ 0.0, -P, 0.0], 4: [ 0.0, -P, 0.0] ) The model contains material non-linearities, so a solution algorithm of type Newton is used. The solution algorithm uses a ConvergenceTest which tests convergence of the equilibrium solution with the norm of the displacement increment vector. For this nonlinear problem, the gravity loads are applied incrementally until the full load is applied. To achieve this, a LoadControl integrator which advances the solution with an increment of 0.1 at each load step is used. The equations are formed using a banded storage scheme, so the System is BandGeneral. The equations are numbered using an RCM (reverse Cuthill-McKee) numberer. The constraints are enforced with a Plain constraint handler. +Once all the components of an analysis are defined, the Analysis object itself is created. For this problem a Static Analysis object is used. To achieve the full gravity load, 10 load steps are performed. +At end of analysis, the state at nodes 3 and 4 is output. The state of element 1 is also output. +For the two nodes, displacements and loads are given. For the beam-column elements, the element end forces in the local system are provided. +The nodeGravity.out file contains ten lines, each line containing 7 entries. The first entry is time in the domain at end of the load step. The next 3 entries are the displacements at node 3, and the final 3 entries the displacements at node 4. +pushover_analysis   In this example the nonlinear reinforced concrete portal frame which has undergone the gravity load analysis of Example 3.1 is now subjected to a pushover analysis. +After performing the gravity load analysis on the model, the time in the domain is reset to 0.0 and the current value of all loads acting are held constant. A new load pattern with a linear time series and horizontal loads acting at nodes 3 and 4 is then added to the model. +The static analysis used to perform the gravity load analysis is modified to take a new DisplacementControl integrator. At each new step in the analysis the integrator will determine the load increment necessary to increment the horizontal displacement at node 3 by 0.1 in. 60 analysis steps are performed in this new analysis. +For this analysis the nodal displacements at nodes 3 and 4 will be stored in the file nodePushover.out for post-processing. In addition, the end forces in the local coordinate system for elements 1 and 2 will be stored in the file elePushover.out. At the end of the analysis, the state of node 3 is printed to the screen. +In addition to what is displayed on the screen, the file node32.out and ele32.out have been created by the script. Each line of node32.out contains the time, DX, DY and RZ for node 3 and DX, DY and RZ for node 4 at the end of an iteration. Each line of eleForce.out contains the time, and the element end forces in the local coordinate system. A plot of the load-displacement relationship at node 3 is shown in the figure below. + transient_analysis   The concrete frame which has undergone the gravity load analysis of Example 3.1 is now subjected to a uniform earthquake excitation. +After performing the gravity load analysis, the time in the domain is reset to 0.0 and the time series for all active loads is set to constant. This prevents the gravity load from being scaled with each step of the dynamic analysis. +Python Tcl model.loadConst(time=0.0) loadConst -time 0.0 Mass terms are added to nodes 3 and 4. A new uniform excitation load pattern is created. The excitation acts in the horizontal direction and reads the acceleration record and time interval from the file ARL360.g3. The file ARL360.g3 is created from the PEER Strong Motion Database ( http://peer.berkeley.edu/smcat/  ) record ARL360.at2 using the Tcl procedure ReadSMDFile contained in the file ReadSMDFile.tcl. +The static analysis object and its components are first deleted so that a new transient analysis object can be created. +A new solution Algorithm of type Newton is then created. The solution algorithm uses a ConvergenceTest which tests convergence on the norm of the displacement increment vector. The integrator for this analysis will be of type Newmark with a γ=0.25\\gamma = 0.25 and β=0.5\\beta = 0.5 . +The integrator will add some stiffness proportional damping to the system, the damping term will be based on the last committed stifness of the elements, i.e. C=acKcommitC = a_c K_\\textcommit with ac=0.000625a_c = 0.000625 . +The equations are formed using a banded storage scheme, so the System is BandGeneral. The equations are numbered using an RCM (reverse Cuthill-McKee) numberer. The constraints are enforced with a Plain constraint handler. +Once all the components of an analysis are defined, the Analysis object itself is created. For this problem a Transient Analysis object is used. 2000 time steps are performed with a time step of 0.01. +In addition to the transient analysis, two eigenvalue analysis are performed on the model. The first is performed after the gravity analysis and the second after the transient analysis. +For this analysis the nodal displacenments at Nodes 3 and 4 will be stored in the file nodeTransient.out for post-processing. In addition the section forces and deformations for the section at the base of column 1 will also be stored in two seperate files. The results of the eigenvalue analysis will be displayed on the screen. +Gravity load analysis completed eigen values at start of transient: 2.695422e+02 1.750711e+04 Transient analysis completed SUCCESSFULLY eigen values at start of transient: 1.578616e+02 1.658481e+04 Node: 3 Coordinates : 0 144 commitDisps: -0.0464287 -0.0246641 0.000196066 Velocities : -0.733071 1.86329e-05 0.00467983 commitAccels: -9.13525 0.277302 38.2972 unbalanced Load: -3.9475 -180 0 Mass : 0.465839 0 0 0 0.465839 0 0 0 0 Eigenvectors: -1.03587 -0.0482103 -0.00179081 0.00612275 0.00663473 3.21404e-05 The two eigenvalues for the eigenvalue analysis are printed to the screen. The state of node 3 at the end of the analysis is also printed. The information contains the last committed displacements, velocities and accelerations at the node, the unbalanced nodal forces and the nodal masses. In addition, the eigenvector components of the eigenvector pertaining to the node 3 is also displayed. +In addition to the contents displayed on the screen, three files have been created. Each line of nodeTransient.out contains the domain time, and DX, DY and RZ for node 3. Plotting the first and second columns of this file the lateral displacement versus time for node 3 can be obtained as shown in the figure below. Each line of the files ele1secForce.out and ele1secDef.out contain the domain time and the forces and deformations for section 1 (the base section) of element 1. These can be used to generate the moment-curvature time history of the base section of column 1 as shown below. + `}).add({id:28,tag:"en",href:"/opensees-gallery/examples/inelasticsdof/",title:"Inelastic SDOF",description:"Integration of an inelastic single-degree-of-freedom (SDOF) system.",content:`March 2020, By Amir Hossein Namadchi +This is an OpenSeesPy simulation of a simple SDOF system with elastoplastic behavior mentioned in Dynamics of Structures book by Ray W. Clough and J. Penzien. This example has been solved in the book, so the result obtained here can be compared with the reference. +This notebook is adapted from https://github.com/AmirHosseinNamadchi/OpenSeesPy-Examples/blob/master/Elastoplastic%20SDOF%20system.ipynb  import numpy as np import opensees.openseespy as ops import matplotlib.pyplot as plt## Units inch = 1 # inches kips = 1 # KiloPounds sec = 1 # Seconds lb = kips*(sec**2)/inch # mass unit (derived)Model specifications are defined as follows: +m = 0.1*lb # Mass k = 5.0*(kips/inch) # Stiffness c = 0.2*(kips*sec/inch) # Damping dy_p = 1.2*inch # Plastic state displacment alpha_m = c/m # Rayleigh damping ratio # Variation of p(t) in tabular form load_history = np.array([[0, 0], [0.1, 5], [0.2, 8], [0.3, 7], [0.4, 5], [0.5, 3], [0.6, 2], [0.7, 1], [0.8, 0]]) # Dynamic Analysis Parameters dt = 0.01 time = 1.0 Analysis   Let’s wrap the whole part in a function so that different material behavior could be passed to the function: +def do_analysis(dt, time, material_params): model = ops.Model(ndm=1, ndf=1) time_domain = np.arange(0, time, dt) # Nodes model.node(1,0.0,0.0) model.node(2,0.0,0.0) model.uniaxialMaterial(*material_params) model.element('ZeroLength', 1, *[1,2], mat=1, dir=1) model.mass(2, m) model.rayleigh(alpha_m, 0.0, 0.0, 0.0) model.fix(1,1) model.timeSeries('Path', 1, values=load_history[:,1], time=load_history[:,0]) model.pattern('Plain', 1, 1) model.load(2, 1) # Analysis model.constraints('Plain') model.numberer('Plain') model.system('ProfileSPD') model.test('NormUnbalance', 0.0000001, 100) model.algorithm('ModifiedNewton') model.integrator('Newmark', 0.5, 0.25) model.analysis('Transient') time_lst =[0] # list to hold time stations for plotting response = [0] # response params of node 2 for i in range(len(time_domain)): model.analyze(1, dt) time_lst.append(model.getTime()) response.append(model.nodeDisp(2,1)) return 'time_list':np.array(time_lst), 'd': np.array(response)For comparison (similar to the book), elastic analysis is also inculded: +epp = do_analysis(dt, time, ['ElasticPP', 1, k, dy_p]) # Elastic-Perfectly Plastic els = do_analysis(dt, time, ['Elastic', 1, k]) # Elastic Visualization   plt.figure(figsize=(7,5)) plt.plot(epp['time_list'], epp['d'], color = '#fe4a49', linewidth=1.75, label = 'Nonlinear (EPP)') plt.plot(els['time_list'], els['d'], color = '#2ab7ca', linewidth=1.75, label = 'Linear (Elastic)') plt.ylabel('Displacement (inch)', 'fontstyle':'italic','size':14) plt.xlabel('Time (sec)', 'fontstyle':'italic','size':14) plt.xlim([0.0, time]) plt.legend() plt.grid() plt.yticks(fontsize = 14) plt.xticks(fontsize = 14);Output: +<Figure size 700x500 with 1 Axes> Closure   Results obtained here with OpenSees perfectly agree with the ones in the book. +References   Clough, R.W. and Penzien, J., 2003. Dynamics of structures. Berkeley. CA: Computers and Structures, Inc. 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 import sdof import numpy as np import opensees.openseespy as op FREE = 0 FIXED = 1 X, Y, RZ = 1, 2, 3 def plastic_sdof(material, motion, dt, xi=0.05, r_post=0.0): """ Run seismic analysis of a nonlinear SDOF :param mass: mass :param k: spring stiffness :param f_yield: yield strength :param motion: list, acceleration values :param dt: float, time step of acceleration values :param xi: damping ratio :param r_post: post-yield stiffness :return: """ mass, k, f_yield = material op.wipe() # 2 dimensions, 3 dof per node op.model('basic', '-ndm', 2, '-ndf', 3) # Establish nodes bot_node = 1 top_node = 2 op.node(bot_node, 0., 0.) op.node(top_node, 0., 0.) # Fix bottom node op.fix(top_node, FREE, FIXED, FIXED) op.fix(bot_node, FIXED, FIXED, FIXED) # Set out-of-plane DOFs to be slaved op.equalDOF(1, 2, *[2, 3]) # nodal mass (weight / g): op.mass(top_node, mass, 0., 0.) # Define material bilinear_mat_tag = 1 mat_type = "Steel01" mat_props = [f_yield, k, r_post] op.uniaxialMaterial(mat_type, bilinear_mat_tag, *mat_props) # Assign zero length element beam_tag = 1 op.element('zeroLength', beam_tag, bot_node, top_node, "-mat", bilinear_mat_tag, "-dir", 1, '-doRayleigh', 1) # Define the dynamic analysis load_tag_dynamic = 1 pattern_tag_dynamic = 1 values = list(-1 * motion) # should be negative # op.timeSeries('Path', load_tag_dynamic, dt=dt, values=values) op.timeSeries('Path', load_tag_dynamic, "-dt", dt, "-values", *values) # op.pattern('UniformExcitation', pattern_tag_dynamic, X, accel=load_tag_dynamic) op.pattern('UniformExcitation', pattern_tag_dynamic, X, "-accel", load_tag_dynamic) # set damping based on first eigen mode eig = op.eigen('-fullGenLapack', 1) try: angular_freq = eig**0.5 except: angular_freq = eig[0]**0.5 alpha_m = 0.0 beta_k = 2 * xi / angular_freq beta_k_comm = 0.0 beta_k_init = 0.0 op.rayleigh(alpha_m, beta_k, beta_k_init, beta_k_comm) # Run the dynamic analysis # op.wipeAnalysis() op.algorithm('Newton') # op.system('SparseGeneral') op.numberer('RCM') op.constraints('Transformation') op.integrator('Newmark', 0.5, 0.25) op.analysis('Transient') tol = 1.0e-10 iterations = 10 op.test('EnergyIncr', tol, iterations, 0, 2) analysis_time = (len(values) - 1) * dt analysis_dt = 0.001 outputs = "time": [], "rel_disp": [], "rel_accel": [], "rel_vel": [], "force": [] while op.getTime() < analysis_time: curr_time = op.getTime() if op.analyze(1, analysis_dt) != 0: print(f"Failed at time op.getTime()") break outputs["time"].append(curr_time) outputs["rel_disp"].append(op.nodeDisp(top_node, 1)) outputs["rel_vel"].append(op.nodeVel(top_node, 1)) outputs["rel_accel"].append(op.nodeAccel(top_node, 1)) op.reactions() outputs["force"].append(-op.nodeReaction(bot_node, 1)) # Negative since diff node op.wipe() for item in outputs: outputs[item] = np.array(outputs[item]) return outputs def main(): """ Create a plot of an elastic analysis, nonlinear analysis and closed form elastic :return: """ import eqsig import matplotlib.pyplot as plt record_filename = 'test_motion_dt0p01.txt' dt = 0.01 rec = np.loadtxt(record_filename) acc_signal = eqsig.AccSignal(rec, dt) period = 1.0 xi = 0.05 mass = 1.0 f_yield = 1.5 # Reduce this to make it nonlinear r_post = 0.0 periods = np.array([period]) k = 4 * np.pi ** 2 * mass / period ** 2 outputs = plastic_sdof((mass, k, f_yield), rec, dt, xi=xi, r_post=r_post) outputs_elastic = plastic_sdof((mass, k, f_yield * 100), rec, dt, xi=xi, r_post=r_post) ux_opensees = outputs["rel_disp"] ux_opensees_elastic = outputs_elastic["rel_disp"] print(outputs) bf, sps = plt.subplots(nrows=2) sps[0].plot(outputs["time"], ux_opensees, label="OpenSees fy=%.3gN" % f_yield, ls="-") sps[0].plot(outputs["time"], ux_opensees_elastic, label="OpenSees fy=%.3gN" % (f_yield * 100), ls="--") time = acc_signal.time acc_opensees_elastic = np.interp(time, outputs_elastic["time"], outputs_elastic["rel_accel"]) - rec resp_u, resp_v, resp_a = sdof.integrate(rec, dt, k, 2*xi*mass*np.sqrt(k/mass), mass, fy=f_yield) sps[0].plot(acc_signal.time, resp_u, label="sdof") sps[1].plot(acc_signal.time, resp_a, label="sdof") # resp_u, resp_v, resp_a = duhamels.response_series(motion=rec, dt=dt, periods=periods, xi=xi) # sps[0].plot(acc_signal.time, resp_u[0], label="Eqsig") # sps[1].plot(acc_signal.time, resp_a[0], label="Eqsig") # Elastic solution # print("diff", sum(acc_opensees_elastic - resp_a[0])) sps[1].plot(time, acc_opensees_elastic, label="Opensees fy=%.2gN" % (f_yield * 100), ls="--") sps[0].legend() sps[1].legend() plt.show() if __name__ == '__main__': main()`}).add({id:29,tag:"en",href:"/opensees-gallery/docs/getting-started/introduction/",title:"Introduction",description:"Get started with OpenSees.",content:`opensees is a Python package that provides an intuitive API for nonlinear finite element analysis, implemented in C++ through the OpenSees framework. OpenSees features state-of-the-art finite element formulations and solution algorithms, including mixed formulations for beams and solids, over 200 material models, and an extensive collection of continuation algorithms to solve highly nonlinear problems. +Installation   In order to install opensees just run the command: +python -m pip install opensees Running OpenSees   The opensees package can be used in three ways: +Python Module The opensees.openseespy Python module implements the API that has been developed by Oregon State. Command line interface An interactive Tcl interpreter can be started by invoking the module as follows from the command line: +python -m opensees --help Interactive Interpreter An interactive Tcl interpreter can be started by invoking the module as follows from the command line: +python -m opensees`}).add({id:30,tag:"en",href:"/opensees-gallery/docs/configuration/layout/",title:"Layout",description:"Hinode uses a grid-based, responsive design for the home page, single pages and list pages.",content:""}).add({id:31,tag:"en",href:"/opensees-gallery/docs/about/license/",title:"License",description:"OpenSeesRT's open-source license for the codebase and documentation.",content:`Codebase   The codebase of OpenSeesRT is open source under the conditions of the MIT license  and is copyright © 2024 by Mark Dumay. In short, the MIT license allows you to use the OpenSeesRT codebase for both personal and commercial use, as long as you include the original license and copyright notice. Licensed works, modifications, and larger works may be distributed under different terms and without source code. No liability or warranty is given. +Documentation   The documentation of OpenSeesRT is licensed under the Creative Commons ( CC BY-NC 4.0  ) license. This includes all files within the repository’s /content and /exampleSite/content folders and their children, as well as the “README” in the repository root. The license allows you to share and adapt the materials, as long as you give appropriate credit and do not use the materials for commercial purposes. No warranties are given. p`}).add({id:32,tag:"en",href:"/opensees-gallery/examples/chopra-10.4/",title:"Matrix Eigenvalue Analysis",description:"This example demonstrates how to perform eigenvalue analysis and plot mode shapes. ",content:`This example is adapted from the OpenSees Wiki page Eigen analysis of a two-storey shear frame  . +This example demonstrates how to perform eigenvalue analysis and plot mode shapes. +An idealized two-storey shear frame (Example 10.4 from “Dynamic of Structures” book by Professor Anil K. Chopra) is used for this purpose. In this idealization beams are rigid in flexure, axial deformation of beams and columns are neglected, and the effect of axial force on the stiffness of the columns is neglected. Geometry and material characteristics of the frame structure are shown in Figure 1. Node and element numbering is given in Figure 2. +ShearFrame5.png Instructions on how to run this example   To execute this ananlysis in OpenSees the user has to download this files: +EigenAnal_twoStoryShearFrame.tcl Place EigenAnal_twoStoryShearFrame.tcl in the same folder with the OpenSees.exe. By double clicking on OpenSees.exe the OpenSees interpreter will pop out. To run the analysis the user should type: +Python Tcl python EigenAnal_twoStoryShearFrame8.py python -m opensees EigenAnal_twoStoryShearFrame8.tcl and hit enter. To create output files (stored in directory “data”) the user has to exit OpenSees interpreter by typing “exit”. +Create the model   Spatial dimension of the model and number of degrees-of-freedom (DOF) at nodes are defined using model command. In this example we have 2D model with 3 DOFs at each node. This is defined in the following way: +Python Tcl import opensees.openseespy as ops model = ops.Model(ndm=2, ndf=3) model BasicBuilder -ndm 2 -ndf 3 Note: geometry, mass, and material characteristics are assigned to variables that correspond to the ones shown in Figure 1 (e.g., the height of the column is set to be 144 in. and assigned to variable h; the value of the height can be accessed by $h). +Nodes of the structure (Figure 2) are defined using the node command: +Python Tcl model.node(1, 0., 0.) model.node(2, L , 0.) model.node(3, 0., h ) model.node(4, L , h ) model.node(5, 0., 2*h ) model.node(6, L , 2*h ) node 1 0. 0. ; node 2 $L 0. ; node 3 0. $h ; node 4 $L $h ; node 5 0. [expr 2*$h]; node 6 $L [expr 2*$h]; The boundary conditions are defined next using single-point constraint command fix. In this example nodes 1 and 2 are fully fixed at all three DOFs: +Python Tcl model.fix(1, 1, 1, 1) model.fix(2, 1, 1, 1) fix 1 1 1 1; fix 2 1 1 1; Masses are assigned at nodes 3, 4, 5, and 6 using mass command. Since the considered shear frame system has only two degrees of freedom (displacements in x at the 1st and the 2nd storey), the masses have to be assigned in x direction only. +Python Tcl model.mass(3, m , 0., 0. ) model.mass(4, m , 0., 0. ) model.mass(5, m/2., 0., 0. ) model.mass(6, m/2., 0., 0. ) mass 3 $m 0. 0. ; mass 4 $m 0. 0. ; mass 5 [expr $m/2.] 0. 0. ; mass 6 [expr $m/2.] 0. 0. ; The geometric transformation with id tag 1 is defined to be linear. +set TransfTag 1; geomTransf Linear $TransfTag ; The beams and columns of the frame are defined to be elastic using elasticBeamColumn element. In order to make beams infinitely rigid moment of inertia for beams (Ib) is set to very high value (10e+12). +Python Tcl model.element("ElasticBeamColumn", 1, 1, 3, Ac, Ec, 2.*Ic, TransfTag) model.element("ElasticBeamColumn", 2, 3, 5, Ac, Ec, Ic, TransfTag) model.element("ElasticBeamColumn", 3, 2, 4, Ac, Ec, 2.*Ic, TransfTag) model.element("ElasticBeamColumn", 4, 4, 6, Ac, Ec, Ic, TransfTag) model.element("ElasticBeamColumn", 5, 3, 4, Ab, E, Ib, TransfTag) model.element("ElasticBeamColumn", 6, 5, 6, Ab, E, Ib, TransfTag) element elasticBeamColumn 1 1 3 $Ac $Ec [expr 2.*$Ic] $TransfTag; element elasticBeamColumn 2 3 5 $Ac $Ec $Ic $TransfTag; element elasticBeamColumn 3 2 4 $Ac $Ec [expr 2.*$Ic] $TransfTag; element elasticBeamColumn 4 4 6 $Ac $Ec $Ic $TransfTag; element elasticBeamColumn 5 3 4 $Ab $E $Ib $TransfTag; element elasticBeamColumn 6 5 6 $Ab $E $Ib $TransfTag; To comply with the assumptions of the shear frame (no vertical displacemnts and rotations at nodes) end nodes of the beams are constrained to each other in the 2nd DOF (vertical displacement) and the 3rd DOF (rotation). EqualDOF command is used to imply these constraints. +equalDOF 3 4 2 3; equalDOF 5 6 2 3; Define recorders   For the specified number of eigenvalues (numModes) (for this example it is 2) the eigenvectors are recorded at all nodes in all DOFs using node recorder command. +Python Tcl for k in range(numModes): model.recorder("Node", f"eigen k", file=f"modes/modek.out", nodeRange=[1, 6], dof=[1, 2, 3]) foreach k [range $numModes] recorder Node -file [format "modes/mode%i.out" $k] -nodeRange 1 6 -dof 1 2 3 "eigen $k" Perform eigenvalue analysis and store periods into a file   The eigenvalues are calculated using eigen commnad and stored in lambda variable. +set lambda [eigen $numModes];The periods and frequencies of the structure are calculated next. +set omega set f set T set pi 3.141593 foreach lam $lambda lappend omega [expr sqrt($lam)]; lappend f [expr sqrt($lam)/(2*$pi)]; lappend T [expr (2*$pi)/sqrt($lam)]; The periods are stored in a Periods.txt file inside of directory modes/. +set period "modes/Periods.txt" set Periods [open $period "w"] foreach t $T puts $Periods " $t" close $Periods Record the eigenvectors   For eigenvectors to be recorded record command has to be issued following the eigen command. +record Display mode shapes   TODO +Example Provided by: Vesna Terzic, UC Berkeley`}).add({id:33,tag:"en",href:"/opensees-gallery/docs/getting-started/modeling/",title:"Modeling",description:`Modeling in Python   The best practice for modeling in Python is to create a model class by calling the opensees.openseespy.Model(...) constructor (note the capital “M”). All standard OpenSees functions, as documented here  can be called as methods on the object that is retured. For example: +import opensees.openseespy as ops model = ops.Model(ndm=2, ndf=3) model.node(1, 2.0, 3.0) Evaluate Tcl models from Python   The first scripting interface to OpenSees used a programming language called Tcl, which continues to be supported.`,content:`Modeling in Python   The best practice for modeling in Python is to create a model class by calling the opensees.openseespy.Model(...) constructor (note the capital “M”). All standard OpenSees functions, as documented here  can be called as methods on the object that is retured. For example: +import opensees.openseespy as ops model = ops.Model(ndm=2, ndf=3) model.node(1, 2.0, 3.0) Evaluate Tcl models from Python   The first scripting interface to OpenSees used a programming language called Tcl, which continues to be supported. To execute Tcl commands from a Python script, just create an instance of the opensees.openseespy.Model class and call its eval() method: +import opensees.openseespy as ops model = ops.Model() model.eval("model Basic -ndm 2") model.eval("print -json")Full Tcl files can be conveniently executed in this way. For example, if a Tcl file called model.tcl exists in the current working directory: +import opensees.openseespy as ops model = ops.Model() with open("model.tcl", "r") as f: model.eval(f.read())`}).add({id:34,tag:"en",href:"/opensees-gallery/docs/advanced-settings/module-development/",title:"Module development",description:"Develop your own Hugo modules compatible with Hinode.",content:""}).add({id:35,tag:"en",href:"/opensees-gallery/examples/example2/",title:"Moment-Curvature Analysis",description:"A reinforced concrete cross-section is modeled using a fiber section, and a moment-curvature analysis is performed.",content:`This example performs a moment-curvature analysis of a reinforced concrete section which is represented by a fiber discretization. Because we are only interested in the response quantities of the cross section, a zero-length element is used to wrap the cross section. +Modeling   The figure below shows the fiber discretization for the section. The files for this example are: Python Tcl <a href="Example2.py"><code>Example2.py</code></a></li> <a href="Example2.tcl"><code>Example2.tcl</code></a></li> <a href="MomentCurvature.tcl"><code>MomentCurvature.tcl</code></a></li> The model consists of two nodes and a ZeroLengthSection element. A depiction of the element geometry is shown in figure zerolength. The drawing on the left of figure zerolength shows an edge view of the element where the local zz -axis, as seen on the right side of the figure and in figure rcsection0, is coming out of the page. Node 1 is completely restrained, while the applied loads act on node 2. A compressive axial load, PP , of 180180 kips is applied to the section during the moment-curvature analysis. +A fiber section is created by grouping various patches and layers: +Note in Python you must pass the section tag when calling patch and layer +Python Tcl model.section("Fiber", 1) # Create the concrete core fibers model.patch("rect", 1, 10, 1, cover-y1, cover-z1, y1-cover, z1-cover, section=1) # Create the concrete cover fibers (top, bottom, left, right, section=1) model.patch("rect", 2, 10, 1, -y1, z1-cover, y1, z1, section=1) model.patch("rect", 2, 10, 1, -y1, -z1, y1, cover-z1, section=1) model.patch("rect", 2, 2, 1, -y1, cover-z1, cover-y1, z1-cover, section=1) model.patch("rect", 2, 2, 1, y1-cover, cover-z1, y1, z1-cover, section=1) # Create the reinforcing fibers (left, middle, right, section=1) model.layer("straight", 3, 3, As, y1-cover, z1-cover, y1-cover, cover-z1, section=1) model.layer("straight", 3, 2, As, 0.0, z1-cover, 0.0, cover-z1, section=1) model.layer("straight", 3, 3, As, cover-y1, z1-cover, cover-y1, cover-z1, section=1) section Fiber 1 # Create the concrete core fibers patch rect 1 10 1 [expr $cover-$y1] [expr $cover-$z1] [expr $y1-$cover] [expr $z1-$cover] # Create the concrete cover fibers (top, bottom, left, right) patch rect 2 10 1 [expr -$y1] [expr $z1-$cover] $y1 $z1 patch rect 2 10 1 [expr -$y1] [expr -$z1] $y1 [expr $cover-$z1] patch rect 2 2 1 [expr -$y1] [expr $cover-$z1] [expr $cover-$y1] [expr $z1-$cover] patch rect 2 2 1 [expr $y1-$cover] [expr $cover-$z1] $y1 [expr $z1-$cover] # Create the reinforcing fibers (left, middle, right) layer straight 3 3 $As [expr $y1-$cover] [expr $z1-$cover] [expr $y1-$cover] [expr $cover-$z1] layer straight 3 2 $As 0.0 [expr $z1-$cover] 0.0 [expr $cover-$z1] layer straight 3 3 $As [expr $cover-$y1] [expr $z1-$cover] [expr $cover-$y1] [expr $cover-$z1] For the zero length element, a section discretized by concrete and steel is created to represent the resultant behavior. UniaxialMaterial objects are created to define the fiber stress-strain relationships: confined concrete in the column core, unconfined concrete in the column cover, and reinforcing steel. +The dimensions of the fiber section are shown in figure rcsection0. The section depth is 24 inches, the width is 15 inches, and there are 1.5 inches of cover around the entire section. Strong axis bending is about the section zz -axis. In fact, the section zz -axis is the strong axis of bending for all fiber sections in planar problems. The section is separated into confined and unconfined concrete regions, for which separate fiber discretizations will be generated. Reinforcing steel bars will be placed around the boundary of the confined and unconfined regions. The fiber discretization for the section is shown in figure rcsection4. +Analysis   The section analysis is performed by the procedure moment_curvature defined in the file MomentCurvature.tcl for Tcl, and Example2.1.py for Python. The arguments to the procedure are the tag secTag of the section to be analyzed, the axial load axialLoad applied to the section, the maximum curvature maxK, and the number numIncr of displacement increments to reach the maximum curvature. +The output for the moment-curvature analysis will be the section forces and deformations, stored in the file section1.out. In addition, an estimate of the section yield curvature is printed to the screen. +In the moment_curvature procedure, the nodes are defined to be at the same geometric location and the ZeroLengthSection element is used. A single load step is performed for the axial load, then the integrator is changed to DisplacementControl to impose nodal displacements, which map directly to section deformations. A reference moment of 1.0 is defined in a Linear time series. For this reference moment, the DisplacementControl integrator will determine the load factor needed to apply the imposed displacement. A node recorder is defined to track the moment-curvature results. The load factor is the moment, and the nodal rotation is in fact the curvature of the element with zero thickness. +The expected output is: +Estimated yield curvature: 0.000126984126984 The file section1.out contains for each committed state a line with the load factor and the rotation at node 3. This can be used to plot the moment-curvature relationship as shown in figure momcurv.`}).add({id:36,tag:"en",href:"/opensees-gallery/examples/framebuckling/",title:"Nonlinear Geometry",description:`Corotational frame elements are used to approximate Euler’s buckling load, which is given by: Peuler=π2EIL2 P_{\\mathrm{euler}} = \\frac{\\pi^2 EI}{L^2} This example is adapted from https://github.com/denavit/OpenSees-Examples  . The files for the problem are buckling.py for Python, and buckling.tcl for Tcl. +Theory   Buckling Analysis   Loosely speaking, buckling happens when there are multiple shapes that a structure can deform into that will be in equilibrium with it’s applied loads. This implies that at the point of buckling, there are multiple independent displacement increments u\\bm{u} which will be mapped to the same resisting load by the tangent K\\bm{K} .`,content:`Corotational frame elements are used to approximate Euler’s buckling load, which is given by: Peuler=π2EIL2 P_\\mathrmeuler = \\frac\\pi^2 EIL^2 This example is adapted from https://github.com/denavit/OpenSees-Examples  . The files for the problem are buckling.py for Python, and buckling.tcl for Tcl. +Theory   Buckling Analysis   Loosely speaking, buckling happens when there are multiple shapes that a structure can deform into that will be in equilibrium with it’s applied loads. This implies that at the point of buckling, there are multiple independent displacement increments u\\bmu which will be mapped to the same resisting load by the tangent K\\bmK . In otherwords, The buckling load is the point at which K\\bmK becomes singular. If we consider K\\bmK as a function of the load factor λ\\bm\\lambda , this condition can be expressed as the nonlinear root-finding problem: det⁡K(λ)=0 \\operatornamedet\\bmK(\\lambda) = 0 For many classical models, the dependence of K\\bmK on λ\\lambda is linear, and in this case the problem is equivalent to a generalized eigenvalue problem which is computationally much more tractable. However, even if K\\bmK is nonlinear in λ\\lambda , one may still investigate the linearized buckling problem, where an eigenvalue problem is obtained by learizing K(λ)\\bmK(\\lambda) : K(λ)≈K(0)+K′(0)λ \\bmK(\\lambda) \\approx \\bmK(0) + \\bmK^\\prime(0) \\lambda where K′\\bmK^\\prime is the derivative of K\\bmK with respect to λ\\lambda . +Timoshenko Column Buckling   λ=PL2EI[1−P/(ksGA)]=PL2χEIχ=1−P/(ksGA)P=χλ2EI/L2. \\begingathered \\lambda=\\sqrt\\fracP L^2E I\\left[1-P /\\left(k_\\mathrms G A\\right)\\right]=\\sqrt\\fracP L^2\\chi E I \\\\ \\chi=1-P /\\left(k_\\mathrms G A\\right) \\\\ P=\\chi \\lambda^2 E I / L^2 . \\endgathered χ=11+λ2EI/(ksGAL2)=11+λ2φ/12P=λ2EI/L21+λ2φ/12. \\begingathered \\chi=\\frac11+\\lambda^2 E I /\\left(k_\\mathrms G A L^2\\right)=\\frac11+\\lambda^2 \\varphi / 12 \\\\ P=\\frac\\lambda^2 E I / L^21+\\lambda^2 \\varphi / 12 . \\endgathered tan⁡λcr =χλcr =λcr 1+λcr 2φ/12 \\tan \\lambda_\\text cr =\\chi \\lambda_\\text cr =\\frac\\lambda_\\text cr 1+\\lambda_\\text cr 2 \\varphi / 12`}).add({id:37,tag:"en",href:"/opensees-gallery/docs/advanced-settings/overview/",title:"Overview",description:"Configure and customize Hinode to your liking using modules, npm, and mounted folders.",content:""}).add({id:38,tag:"en",href:"/opensees-gallery/docs/advanced-settings/partial-development/",title:"Partial development",description:"Develop custom partials and shortcodes following Hinode's coding conventions.",content:""}).add({id:39,tag:"en",href:"/opensees-gallery/docs/getting-started/python/",title:"Python",description:"",content:""}).add({id:40,tag:"en",href:"/opensees-gallery/releases/",title:"Releases",description:"A chronological overview of key releases since the initial launch of Hinode.",content:`The timeline below captures the significant changes since the initial release of Hinode in April, 2022. Visit GitHub for a full overview of all Hinode releases  , including features, bug fixes, and dependency upgrades. +Render hooks v0.26.0 August 15, 2024 +This release includes support for markdown links and markdown images. Hinode will invoke the relevant partials, so they will have the same behavior and styling as their counterparts. This release also includes support for server-side math rendering as introduced by Hugo v0.132.0  . +Script bundle localization v0.25.0 August 2, 2024 +Hinode includes search support out of the box. To limit the bundle size, the search index now includes entries for the current translation only. To enable localization, the module configuration includes a new parameter localize. By default, the FlexSearch module sets localization to true. +Initial launch v0.1 April 13, 2022 +Inspired by Blist and Doks, this release introduces Hinode - a modern blog and documentation theme for Hugo. By taking advantage of npm, the used dependencies are easily tracked and updated. Powered by Bootstrap, the generated website is responsive and brings many common UI elements. Hinode wraps many of these elements in a shortcode to simplify their usage. +Render hooks v0.26.0 August 15, 2024 +This release includes support for markdown links and markdown images. Hinode will invoke the relevant partials, so they will have the same behavior and styling as their counterparts. This release also includes support for server-side math rendering as introduced by Hugo v0.132.0  . +Script bundle localization v0.25.0 August 2, 2024 +Hinode includes search support out of the box. To limit the bundle size, the search index now includes entries for the current translation only. To enable localization, the module configuration includes a new parameter localize. By default, the FlexSearch module sets localization to true. +Initial launch v0.1 April 13, 2022 +Inspired by Blist and Doks, this release introduces Hinode - a modern blog and documentation theme for Hugo. By taking advantage of npm, the used dependencies are easily tracked and updated. Powered by Bootstrap, the generated website is responsive and brings many common UI elements. Hinode wraps many of these elements in a shortcode to simplify their usage.`}).add({id:41,tag:"en",href:"/opensees-gallery/examples/spectrum/",title:"RotD Spectrum",description:`This code computes the RotD50 Sa and RotD100 Sa Spectra of bi-directional ground motion records. +spectra.py +The source code for this problem is adapted from the example by Jawad Fayaz at https://openseespydoc.readthedocs.io/en/latest/src/exampleRotDSpectra.html  .`,content:`This code computes the RotD50 Sa and RotD100 Sa Spectra of bi-directional ground motion records. +spectra.py +The source code for this problem is adapted from the example by Jawad Fayaz at https://openseespydoc.readthedocs.io/en/latest/src/exampleRotDSpectra.html  .`}).add({id:42,tag:"en",href:"/opensees-gallery/examples/sathertower/",title:"Sather Tower",description:"",content:""}).add({id:43,tag:"en",href:"/opensees-gallery/docs/advanced-settings/scripts/",title:"Scripts",description:"Automatically bundle local and external JavaScript files into a single file.",content:"Hinode bundles local JavaScript files and JavaScript files defined in a core module into a single file. By utilizing Hugo modules, external JavaScript files are automatically ingested and kept up to date."}).add({id:44,tag:"en",href:"/opensees-gallery/examples/sensitivity/",title:"Sensitivity",description:"Basic sensitivity analysis is performed",content:"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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 import opensees.openseespy as ops # Input [N, m, kg, sec] L = 5.0 # Total length of cantilever F = 300000.0 # Lateral point load P = 0.0 # Axial force w = 10000.0 # Distributed load E = 200e9 # Modulus of elasticity G = E*0.6 hw = 0.355 # Web height bf = 0.365 # Flange width tf = 0.018 # Flange thickness tw = 0.011 # Web thickness nf = 3 # Number of fibers in the flange nw = 8 # Number of fibres in the web nel = 1 # Area and moment of inertia A = tw * (hw - 2 * tf) + 2 * bf * tf I = tw * (hw - 2 * tf) ** 3 / 12.0 + 2 * bf * tf * (0.5 * (hw - tf)) ** 2 Ay = A*1e5 Az = A*1e5 Iz = I Iy = I J = 2*I model = ops.Model(ndm=3, ndf=6) model.node(1, 0, 0, 0) model.node(2, L, 0, 0) model.fix(1, 1, 1, 1, 1, 1, 1) model.section("FrameElastic", 1, E=E, A=A, Ay=Ay, Az=Az, Iz=Iz, Iy=Iy, J=J, G=G) model.geomTransf("Linear", 1, (0, 0, 1)) model.element("CubicFrame", 1, (1, 2), section=1, transform=1) model.parameter(1, "element", 1, "E") model.parameter(2, "element", 1, "A") model.parameter(3, "element", 1, "Iz") model.parameter(4, "node", nel+1, "coord", 1) model.pattern("Plain", 1, "Linear") model.load(2, (0.0, 1.0, 0.0, 0.0, 0.0, 0.0), pattern=1) model.constraints("Plain") model.system("ProfileSPD") if True: Pmax = F Nsteps = 1 dP = Pmax / Nsteps model.integrator("LoadControl", dP) model.analysis("Static") model.sensitivityAlgorithm("-computeAtEachStep") for i in range(Nsteps): print(model.analyze(1)) print(model.nodeDisp(2, 2), model.getLoadFactor(1)) for param in model.getParamTags(): print("\\t", param, model.sensNodeDisp(2, 2, param)) if False: model.wipeAnalysis() Umax = 2.2 Nsteps = 100 Uincr = Umax/Nsteps model.integrator("DisplacementControl",2,2,Uincr) model.analysis("Static") model.sensitivityAlgorithm("-computeAtEachStep") for i in range(Nsteps): model.analyze(1) print(model.nodeDisp(2,1), model.getLoadFactor(1)) for param in model.getParamTags(): print(param, model.sensLambda(1, param)) # print(param, model.sensNodeDisp(2, 1, param)) print("u", F*L**3/(3*E*I)) print("L", F*L**2/(E*I)) print("F", L**3/(3*E*I))"}).add({id:45,tag:"en",href:"/opensees-gallery/examples/shallowdome/",title:"Shallow Dome",description:"Double-Layer Shallow Dome   March 2020, Amir Hossein Namadchi   This is an OpenSeesPy simulation of one of the numerical examples in our previously published paper  . The Core was purely written in Mathematica. This is my attempt to perform the analysis again via Opensees Core, to see if I can get the similar results. In the paper, we used Total Lagrangian framework to model the structure. Unfortunately, OpenSees does not include this framework, so, alternatively, I will use Corotational truss element.",content:`Double-Layer Shallow Dome   March 2020, Amir Hossein Namadchi   This is an OpenSeesPy simulation of one of the numerical examples in our previously published paper  . The Core was purely written in Mathematica. This is my attempt to perform the analysis again via Opensees Core, to see if I can get the similar results. In the paper, we used Total Lagrangian framework to model the structure. Unfortunately, OpenSees does not include this framework, so, alternatively, I will use Corotational truss element. +import numpy as np import opensees.openseespy as ops import matplotlib.pyplot as plt import sees # %matplotlib notebook # %matplotlib widgetBelow, the base units are defined as python variables: +## Units m = 1 # Meters KN = 1 # KiloNewtons s = 1 # Seconds Model Defintion   The coordinates information for each node are stored node_coords. Each row represent a node with the corresponding coordinates. Elements configuration are also described in connectivity, each row representing an element with its node IDs. Elements cross-sectional areas are stored in area_list. This appraoch, offers a more pythonic and flexible code when building the model. Since this is a relatively large model, some data will be read from external .txt files to keep the code cleaner. +# Node Coordinates Matrix (size : nn x 3) node_coords = np.loadtxt('assets/nodes.txt', dtype = np.float64) * m # Element Connectivity Matrix (size: nel x 2) connectivity = np.loadtxt('assets/connectivity.txt', dtype = np.int64).tolist() # Loaded Nodes loaded_nodes = np.loadtxt('assets/loaded_nodes.txt', dtype = np.int64).tolist() # Get Number of total Nodes nn = len(node_coords) # Get Number of total Elements nel = len(connectivity) # Cross-sectional area list (size: nel) area_list = np.ones(nel)*(0.001)*(m**2) # Modulus of Elasticity list (size: nel) E_list = np.ones(nel)*(2.0*10**8)*(KN/m**2) # Mass Density rho = 7.850*((KN*s**2)/(m**4)) #Boundary Conditions (size: fixed_nodes x 4) B_C = np.column_stack((np.arange(1,31), np.ones((30,3), dtype = np.int64)) ).tolist() Model Construction   I use list comprehension to add nodes,elements and other objects to the domain. +model = ops.Model(ndm=3, ndf=3) # Adding nodes to the model object using list comprehensions [model.node(n+1,*node_coords[n]) for n in range(nn)]; # Applying BC [model.fix(B_C[n][0],*B_C[n][1:]) for n in range(len(B_C))]; # Set Material model.uniaxialMaterial('Elastic',1, E_list[0]) # Adding Elements [model.element('corotTruss', e+1, *connectivity[e], area_list[e], 1,'-rho', rho*area_list[e], '-cMass', 1) for e in range(nel)]; Draw model   The model can now be drawn using the sees Python package: +sees.render(model)Output: +<Figure size 640x480 with 1 Axes><sees.SkeletalRenderer at 0x7fb589684a90> Eigenvalue Analysis   Let’s get the first 6 periods of the structure to see if they coincide with the ones in paper. +eigenvalues = model.eigen(6) T_list = 2*np.pi/np.sqrt(eigenvalues) print('The first 6 period of the structure are as follows:\\n', T_list)Output: +The first 6 period of the structure are as follows: [0.07189215 0.06809579 0.06809578 0.04648394 0.04648388 0.03117022] Dynamic Analysis   Great accordance is obtained in eigenvalue analysis. Now, let’s do wipeAnalysis() and perform dynamic analysis. The Newmark time integration algorithm with γ=0.5\\gamma=0.5 and β=0.25\\beta=0.25 (Constant Average Acceleration Algorithm) is used. Harmonic loads are applied vertically on the loaded_nodes nodes. +model.wipeAnalysis() # define load function P = lambda t: 250*np.sin(250*t) # Dynamic Analysis Parameters dt = 0.00025 time = 0.2 time_domain = np.arange(0,time,dt) # Adding loads to the domain beautifully model.timeSeries('Path', 1, dt=dt, values=np.vectorize(P)(time_domain), time=time_domain) model.pattern('Plain', 1, 1) for n in loaded_nodes: model.load(n, *[0,0,-1]) # Analysis model.constraints('Plain') model.numberer('Plain') model.system('ProfileSPD') model.test('NormUnbalance', 0.0000001, 100) model.algorithm('ModifiedNewton') model.integrator('Newmark', 0.5, 0.25) model.analysis('Transient')time_lst =[] # list to hold time stations for plotting d_apex_list = [] # list to hold vertical displacments of the apex for i in range(len(time_domain)): is_done = model.analyze(1, dt) if is_done != 0: print('Failed to Converge!') break time_lst.append(model.getTime()) d_apex_list.append(model.nodeDisp(362,3)) Visualization   Below, the time history of the vertical displacement of the apex is plotted. +plt.figure(figsize=(12,4)) plt.plot(time_lst, np.array(d_apex_list), color = '#d62d20', linewidth=1.75) plt.ylabel('Vertical Displacement (m)', 'fontstyle':'italic','size':14) plt.xlabel('Time (sec)', 'fontstyle':'italic','size':14) plt.xlim([0.0, time]) plt.grid() plt.yticks(fontsize = 14) plt.xticks(fontsize = 14);Output: +<Figure size 1200x400 with 1 Axes> Closure   Very good agreements with the paper are obtained. +Namadchi, Amir Hossein, Farhang Fattahi, and Javad Alamatian. "Semiexplicit Unconditionally Stable Time Integration for Dynamic Analysis Based on Composite Scheme." Journal of Engineering Mechanics 143, no. 10 (2017): 04017119.`}).add({id:46,tag:"en",href:"/opensees-gallery/examples/shellframe/",title:"Shell Diaphragms",description:"",content:""}).add({id:47,tag:"en",href:"/opensees-gallery/examples/pendulum/",title:"Simple Pendulum",description:"This example investigates a simple pendulum using the corotational truss element.",content:`This example investigates a simple pendulum using the corotational truss element. +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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 # # Adapted from https://portwooddigital.com/2022/08/14/parametric-oscillator/ # # Claudio Perez # import opensees.openseespy as ops def create_pendulum(m, k, L, W): # Create a model with 2 dimensions (ndm) # and 2 degrees of freedom per node (ndf) model = ops.Model(ndm=2, ndf=2) # Create a node for the pivot point and fix it model.node(1, 0, L); model.fix(1, 1, 1) # Create a free node with the mass model.node(2, 0, 0); model.mass(2, m, m) # Create a corotational truss between nodes 1 and 2 model.uniaxialMaterial('Elastic', 1, k*L) model.element('CorotTruss', 1, 1, 2, 1.0, 1) # Initial displacements model.setNodeDisp(2, 1, 0.05*L, '-commit') model.setNodeDisp(2, 2, -W/k-(W/k+L)/3, '-commit') # Pendulum weight model.timeSeries('Constant', 1) model.pattern('Plain', 1, 1) model.load(2, 0, -W) return model def analyze_pendulum(model): model.algorithm('Newton') model.integrator('Newmark',0.5,0.25) model.analysis('Transient') Tmax = 12*sec dt = 0.01*sec Nsteps = int(Tmax/dt) u = [] for i in range(Nsteps): model.analyze(1, dt) u.append(model.nodeDisp(2)) return u if __name__ == "__main__": from opensees.units.ips import inch, sec, gravity as g # Length of pendulum L = 10*inch # Pendulum mass m = 1.0 # Frequency of pendulum omega = (g/L)**0.5 # Frequency of oscillator w = 2*omega # Stiffness of spring k = m*w**2 model = create_pendulum(m, k, L, m*g) u = analyze_pendulum(model) print(u)`}).add({id:48,tag:"en",href:"/opensees-gallery/examples/example6/",title:"Simply Supported Solid Beam",description:`In this example a simply supported beam is modelled with two dimensional solid elements. The example is implemented in both Tcl and Python: +Example6.tcl Example6.py Each node of the analysis has two displacement degrees of freedom. Thus the model is defined with ndm = 2 and ndf = 2. +A mesh is generated using the block2D command. The number of nodes in the local xx -direction of the block is nxnx and the number of nodes in the local yy -direction of the block is nyny .`,content:`In this example a simply supported beam is modelled with two dimensional solid elements. The example is implemented in both Tcl and Python: +Example6.tcl Example6.py Each node of the analysis has two displacement degrees of freedom. Thus the model is defined with ndm = 2 and ndf = 2. +A mesh is generated using the block2D command. The number of nodes in the local xx -direction of the block is nxnx and the number of nodes in the local yy -direction of the block is nyny . The block2D generation nodes 1,2,3,4 are prescribed to define the two dimensional domain of the beam, which is of size 40×1040\\times10 . +Three different quadrilateral elements can be used for the analysis. These may be created using the names "BbarQuad", "EnhancedQuad" or "Quad". This is a plane strain problem. An elastic isotropic material is used. +For initial gravity load analysis, a single load pattern with a linear time series and two vertical nodal loads are used. +A solution algorithm of type Newton is used for the problem. The solution algorithm uses a ConvergenceTest which tests convergence on the norm of the energy increment vector. Ten static load steps are performed. +Following the static analysis, the wipeAnalysis and remove loadPatern commands are used to remove the nodal loads and create a new analysis. The nodal displacements have not changed. However, with the external loads removed the structure is no longer in static equilibrium. +The integrator for the dynamic analysis if of type GeneralizedMidpoint with α=0.5\\alpha = 0.5 . This choice is uconditionally stable and energy conserving for linear problems. Additionally, this integrator conserves linear and angular momentum for both linear and non-linear problems. The dynamic analysis is performed using 100100 time increments with a time step Δt=0.50\\Delta t = 0.50 . +The results consist of the file Node.out, which contains a line for every time step. Each line contains the time and the vertical displacement at the bottom center of the beam. The time history is shown in Figure 1. +`}).add({id:49,tag:"en",href:"/opensees-gallery/docs/advanced-settings/styles/",title:"Styles",description:"Use extensible Sass files to generate the stylesheets for your website.",content:""}).add({id:50,tag:"en",href:"/opensees-gallery/examples/shelltwist/",title:"Twisted Cantilever",description:"",content:""}).add({id:51,tag:"en",href:"/opensees-gallery/examples/wrench/",title:"Wrench",description:"Static analysis of a wrench",content:`This problem is adapted from Logan (2012), Problem 7–28. +Script: model.py +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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 # ===----------------------------------------------------------------------===// # # OpenSees - Open System for Earthquake Engineering Simulation # Structural Artificial Intelligence Laboratory # stairlab.berkeley.edu # # ===----------------------------------------------------------------------===// # # Static analysis of a wrench in the plane. # # The mesh is created from 7 blocks: # ______ # / / # / / # / / # / / # / / # / / # / / # / / # / 7 / # /_____/ ____ # / \\ # / 6 \\ 70 # /_____________\\ ____ # | \\ / | # | \\ 3 / | 20 # | 4 \\_______/ 2 | _________ # |___/ \\___| ____ 20 # \\5 | | 1/ 70 # \\_| |_/ __ # . o ____ __ 10 # ^ # # # # Chrystal Chern and Claudio Perez # import sees import opensees.openseespy as ops import numpy as np angwrench = np.arctan(1/5) # Quadrilateral blocks that comprise the wrench: blocks = 1: 1: [ 0, 0], 2: [ 20, 10], 3: [ 40, 160-70-40], 4: [ 0, 160-70-40], 6: [ 35, 30], # 6: [ 25, 30], 2: 1: [ 0, 160-70-40], 2: [ 40, 160-70-40], # 6: [ 45, 160-70-20], 3: [ 40, 160-70 ], 4: [ -20, 160-70-20], 3: 1: [ -20, 160-70-20], 2: [ 40, 160-70 ], 3: [-115, 160-70 ], 4: [ -60, 70], 4: 1: [ -60, 70], 2: [-115, 90], 3: [-115, 50], 4: [ -75, 50], 5: 1: [ -75, 50], 2: [-115, 50], 3: [ -95, 10], 4: [ -75, 0], 6: 1: [ 40, 90], 5: [ 33, 112], 2: [ 0, 160], 3: [-50*np.cos(angwrench), 160 + 50*np.sin(angwrench)], 4: [-115, 160-70 ], 7: 1: [ 0, 160], 2: [250*np.sin(angwrench), 160+250*np.cos(angwrench)], 3: [250*np.sin(angwrench)-50*np.cos(angwrench), 160+250*np.cos(angwrench)], 4: [-50*np.cos(angwrench), 160+ 50*np.sin(angwrench)] # Subdivisions to create within each block: divs = 1: (3,3), 2: (3,3), 3: (3,4), 4: (3,3), 5: (3,3), 6: (4,4), 7: (6,4) def create_quads(): model = ops.Model(ndm=2, ndf=2) model.nDMaterial("ElasticIsotropic", 1, 200e3, 0.25) for num,block in blocks.items(): model.surface(divs[num], element="quad", args=(1, "PlaneStrain", 1), points = block) return model def create_tris(): model = ops.Model(ndm=2, ndf=2) model.nDMaterial("ElasticIsotropic", 1, 200e3, 0.25) elem = 1 for num,block in blocks.items(): # Because no element argument is passed, only nodes are created. # Next we will go back over the newly created cells and manually # create triangles. mesh = model.surface(divs[num], points = block) # For each new 4-node cell, create two triangles for cell in mesh.cells: nodes = mesh.cells[cell] model.element("tri31", elem, (nodes[0], nodes[1], nodes[2]), 10, "PlaneStrain", 1) model.element("tri31", elem+1, (nodes[0], nodes[2], nodes[3]), 10, "PlaneStrain", 1) elem += 2 return model def create_boundary(model): # Load magnitude P = 700 # Fix the first node, which is at (0.0, 0.0) model.fix(1, 1, 1) # Create a load pattern model.pattern("Plain", 1, "Linear") for node in model.getNodeTags(): coord = model.nodeCoord(node) # Fix corner of block 4 if np.linalg.norm(np.array(coord) - blocks[4][4]) < 1e-12: model.fix(node, 1,1) # Add load to the corner of block 7 elif np.linalg.norm(np.array(coord) - blocks[7][3]) < 1e-12: model.load(node, (P, 0), pattern=1) #model = create_quads() model = create_tris() create_boundary(model) model.analysis("Static") model.integrator("LoadControl", 1) model.analyze(1) # Render the deformed shape sees.serve(sees.render(model, lambda i: [500*u for u in model.nodeDisp(i)], canvas="gltf")) References   Logan, D.L. (2012) A First Course in the Finite Element Method. 5th ed. Stamford, CT: Cengage Learning.`}),search.addEventListener("input",showResults,!0)}function hideSuggestions(e){var isClickInsideElement=suggestions.contains(e.target);isClickInsideElement||(suggestions.classList.add("d-none"),background!==null&&background.style.setProperty("--image-opacity","0.1"))}function inputFocus(e){e.ctrlKey&&e.key==="/"&&(e.preventDefault(),search.focus()),e.key==="Escape"&&(search.blur(),suggestions.classList.add("d-none"))}function suggestionFocus(e){const suggestionsHidden=suggestions.classList.contains("d-none");if(suggestionsHidden)return;const focusableSuggestions=[...suggestions.querySelectorAll("a")];if(focusableSuggestions.length===0)return;const index=focusableSuggestions.indexOf(document.activeElement);if(e.key==="ArrowUp"){e.preventDefault();const nextIndex=index>0?index-1:0;focusableSuggestions[nextIndex].focus()}else if(e.key==="ArrowDown"){e.preventDefault();const nextIndex=index+1r.result)){if(flatResults.has(result.doc.href))continue;flatResults.set(result.doc.href,result.doc)}if(suggestions.innerHTML="",suggestions.classList.remove("d-none"),flatResults.size===0&&searchQuery){const msg=suggestions.dataset.noResults,noResultsMessage=document.createElement("div");noResultsMessage.innerHTML=`${msg} "${searchQuery}"`,noResultsMessage.classList.add("suggestion__no-results"),suggestions.appendChild(noResultsMessage);return}for(const[href,doc]of flatResults){const entry=document.createElement("div");suggestions.appendChild(entry);const a=document.createElement("a");a.href=href,entry.appendChild(a);const title=document.createElement("span");title.classList.add("text-start"),title.textContent=doc.title,title.classList.add("suggestion__title"),a.appendChild(title);const description=document.createElement("span");if(description.textContent=doc.description,description.classList.add("suggestion__description"),a.appendChild(description),suggestions.appendChild(entry),suggestions.childElementCount==maxResult)break}}search!==null&&suggestions!==null&&(document.addEventListener("keydown",inputFocus),document.addEventListener("keydown",suggestionFocus),document.addEventListener("click",hideSuggestions),initIndex());const searchModal=document.getElementById("search-modal");searchModal!==null&&searchModal.addEventListener("shown.bs.modal",function(){const searchInput=document.getElementById("search-input-modal");searchInput!==null&&searchInput.focus({focusVisible:!0})}),document.querySelectorAll(".dynamic-svg").forEach(placeholder=>{placeholder.onload=function(){const container=placeholder.parentElement,doc=placeholder.contentDocument,attr=placeholder.getAttribute("data-class"),style=placeholder.getAttribute("data-style");if(container!==null&&doc!==null){const svg=doc.querySelector("svg");svg!==null&&(svg.setAttribute("class","svg-inline--fa "+(attr||"")),svg.setAttribute("fill","currentcolor"),svg.setAttribute("aria-hidden","true"),svg.setAttribute("role","img"),style!==null&&style!==""&&svg.setAttribute("style",style),svg.removeAttribute("height"),svg.removeAttribute("width"),container.innerHTML="",container.appendChild(svg))}}});const fixed=!0,navbar=document.querySelector(".navbar"),togglers=document.querySelectorAll(".main-nav-toggler"),modeSelectors=document.querySelectorAll(".switch-mode-collapsed"),colorsBG=["body","secondary","tertiary"];function updateNavbar(){if(window.scrollY>75){navbar.classList.add("nav-active");const storedTheme=localStorage.getItem("theme");navbar.setAttribute("data-bs-theme",storedTheme)}else{navbar.classList.remove("nav-active");const defaultTheme=navbar.getAttribute("data-bs-overlay");defaultTheme&&navbar.setAttribute("data-bs-theme",defaultTheme)}}if(navbar!==null&&window.performance.getEntriesByType&&window.performance.getEntriesByType("navigation")[0].type==="reload"&&fixed&&updateNavbar(),navbar!==null&&togglers!==null){const html=document.querySelector("html"),config={attributes:!0,attributeFilter:["data-bs-theme"]},Observer=new MutationObserver(mutationrecords=>{fixed&&updateNavbar()});Observer.observe(html,config);const color=navbar.getAttribute("data-navbar-color")||"body",bg=colorsBG.includes(color)?`var(--bs-${color}-bg)`:`var(--bs-navbar-color-${color})`;navbar.style.setProperty("--bs-navbar-expanded-color",bg),window.onscroll=()=>{fixed&&updateNavbar()};for(let i=0;i{navbar.classList.toggle("navbar-expanded")};for(let i=0;i{for(let j=0;jnew bootstrap.Popover(popoverTriggerEl)),container=document.getElementById("toast-container");container!==null&&document.querySelectorAll("[data-toast-target]").forEach(trigger=>{const target=document.getElementById(trigger.getAttribute("data-toast-target"));if(target!==null){container.appendChild(target);const toast=bootstrap.Toast.getOrCreateInstance(target);toast!==null&&trigger.addEventListener("click",()=>{toast.show()})}});const tooltipTriggerList=document.querySelectorAll('[data-bs-toggle="tooltip"]'),tooltipList=[...tooltipTriggerList].map(tooltipTriggerEl=>new bootstrap.Tooltip(tooltipTriggerEl));document.querySelectorAll("[data-video-padding]").forEach(element=>{element.style.paddingBottom=element.getAttribute("data-video-padding")}) \ No newline at end of file diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-1200x900.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-1200x900.webp new file mode 100644 index 00000000..a24d40fe Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-1200x900.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-1400x1050.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-1400x1050.webp new file mode 100644 index 00000000..a24d40fe Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-1400x1050.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-2800x2100.png b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-2800x2100.png new file mode 100644 index 00000000..ea23d588 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-2800x2100.png differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-2800x2100.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-2800x2100.webp new file mode 100644 index 00000000..a24d40fe Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-2800x2100.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-576x432.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-576x432.webp new file mode 100644 index 00000000..64661eaa Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-576x432.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-768x576.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-768x576.webp new file mode 100644 index 00000000..a24d40fe Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-768x576.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-992x744.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-992x744.webp new file mode 100644 index 00000000..a24d40fe Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig1-992x744.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-1200x900.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-1200x900.webp new file mode 100644 index 00000000..2122f5a7 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-1200x900.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-1400x1050.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-1400x1050.webp new file mode 100644 index 00000000..2122f5a7 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-1400x1050.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-2800x2100.png b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-2800x2100.png new file mode 100644 index 00000000..6b412ba4 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-2800x2100.png differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-2800x2100.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-2800x2100.webp new file mode 100644 index 00000000..2122f5a7 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-2800x2100.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-576x432.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-576x432.webp new file mode 100644 index 00000000..92ebf110 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-576x432.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-768x576.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-768x576.webp new file mode 100644 index 00000000..2122f5a7 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-768x576.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-992x744.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-992x744.webp new file mode 100644 index 00000000..2122f5a7 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig2-992x744.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-1200x791.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-1200x791.webp new file mode 100644 index 00000000..81480bcd Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-1200x791.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-1400x923.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-1400x923.webp new file mode 100644 index 00000000..81480bcd Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-1400x923.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-2800x1846.png b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-2800x1846.png new file mode 100644 index 00000000..826fedd5 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-2800x1846.png differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-2800x1846.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-2800x1846.webp new file mode 100644 index 00000000..81480bcd Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-2800x1846.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-576x380.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-576x380.webp new file mode 100644 index 00000000..9cece773 Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-576x380.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-768x506.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-768x506.webp new file mode 100644 index 00000000..81480bcd Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-768x506.webp differ diff --git a/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-992x654.webp b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-992x654.webp new file mode 100644 index 00000000..81480bcd Binary files /dev/null and b/opensees-gallery/examples/thermalexamples/figures/WelcomePage_fig3-992x654.webp differ diff --git a/releases/index.html b/releases/index.html index cf6338aa..fff579f2 100644 --- a/releases/index.html +++ b/releases/index.html @@ -971,7 +971,7 @@ - + diff --git a/sitemap.xml b/sitemap.xml index 736144d9..a334dead 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -109,9 +109,19 @@ https://stairlab.github.io/opensees-gallery/tags/eigen/ 2024-09-19T09:17:28-07:00 + + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample1/ + + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample2/ + + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample3/ + + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample4/ https://stairlab.github.io/opensees-gallery/examples/example4/ 2024-09-09T12:37:31-07:00 + + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample5/ https://stairlab.github.io/opensees-gallery/examples/ 2024-09-19T10:13:24-07:00 @@ -199,6 +209,10 @@ https://stairlab.github.io/opensees-gallery/tags/tcl/ 2024-10-02T19:39:51-07:00 + + https://stairlab.github.io/opensees-gallery/tags/thermal/ + + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/ https://stairlab.github.io/opensees-gallery/tags/truss/ 2024-09-19T09:17:28-07:00 diff --git a/tags/2d/index.html b/tags/2d/index.html index 88d6b054..63913caf 100644 --- a/tags/2d/index.html +++ b/tags/2d/index.html @@ -665,7 +665,7 @@ - + diff --git a/tags/3d/index.html b/tags/3d/index.html index 6a6e419d..466b5dda 100644 --- a/tags/3d/index.html +++ b/tags/3d/index.html @@ -665,7 +665,7 @@ - + diff --git a/tags/component/index.html b/tags/component/index.html index e061fc59..47154416 100644 --- a/tags/component/index.html +++ b/tags/component/index.html @@ -666,7 +666,7 @@ - + diff --git a/tags/concrete/index.html b/tags/concrete/index.html index f3416bda..c9dbdaf4 100644 --- a/tags/concrete/index.html +++ b/tags/concrete/index.html @@ -693,7 +693,7 @@ - + diff --git a/tags/dynamic/index.html b/tags/dynamic/index.html index 257c4b31..792886cd 100644 --- a/tags/dynamic/index.html +++ b/tags/dynamic/index.html @@ -707,7 +707,7 @@ - + diff --git a/tags/dynamics/index.html b/tags/dynamics/index.html index d72d6817..ea926193 100644 --- a/tags/dynamics/index.html +++ b/tags/dynamics/index.html @@ -665,7 +665,7 @@ - + diff --git a/tags/eigen/index.html b/tags/eigen/index.html index 1b3404a6..18ff4cf6 100644 --- a/tags/eigen/index.html +++ b/tags/eigen/index.html @@ -665,7 +665,7 @@ - + diff --git a/tags/fiber/index.html b/tags/fiber/index.html index a7a9faf2..bad65b08 100644 --- a/tags/fiber/index.html +++ b/tags/fiber/index.html @@ -679,7 +679,7 @@ - + diff --git a/tags/frame/index.html b/tags/frame/index.html index c501aa03..13c00ba3 100644 --- a/tags/frame/index.html +++ b/tags/frame/index.html @@ -735,7 +735,7 @@ - + diff --git a/tags/index.html b/tags/index.html index c5e53f82..d9138154 100644 --- a/tags/index.html +++ b/tags/index.html @@ -372,6 +372,15 @@

          + +
          3 Articles @@ -801,7 +810,7 @@ - + diff --git a/tags/index.xml b/tags/index.xml index 3cc382c0..fd8ae322 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -127,6 +127,13 @@ https://stairlab.github.io/opensees-gallery/tags/tcl/ + + Thermal + https://stairlab.github.io/opensees-gallery/tags/thermal/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/tags/thermal/ + + Truss https://stairlab.github.io/opensees-gallery/tags/truss/ diff --git a/tags/notebook/index.html b/tags/notebook/index.html index c9cbf095..6158e3db 100644 --- a/tags/notebook/index.html +++ b/tags/notebook/index.html @@ -679,7 +679,7 @@ - + diff --git a/tags/plane/index.html b/tags/plane/index.html index e302a99e..4680eccf 100644 --- a/tags/plane/index.html +++ b/tags/plane/index.html @@ -679,7 +679,7 @@ - + diff --git a/tags/python/index.html b/tags/python/index.html index b5993d0f..b1ab5178 100644 --- a/tags/python/index.html +++ b/tags/python/index.html @@ -891,7 +891,7 @@ - + diff --git a/tags/python/page/2/index.html b/tags/python/page/2/index.html index 72dc565d..79a99d86 100644 --- a/tags/python/page/2/index.html +++ b/tags/python/page/2/index.html @@ -893,7 +893,7 @@ - + diff --git a/tags/sdof/index.html b/tags/sdof/index.html index 942a318b..0fd937fa 100644 --- a/tags/sdof/index.html +++ b/tags/sdof/index.html @@ -665,7 +665,7 @@ - + diff --git a/tags/shell/index.html b/tags/shell/index.html index 0e291e6c..fcf7ae0c 100644 --- a/tags/shell/index.html +++ b/tags/shell/index.html @@ -679,7 +679,7 @@ - + diff --git a/tags/solid/index.html b/tags/solid/index.html index 9b70ca66..f014f7f3 100644 --- a/tags/solid/index.html +++ b/tags/solid/index.html @@ -665,7 +665,7 @@ - + diff --git a/tags/static/index.html b/tags/static/index.html index 5856ae76..3a006620 100644 --- a/tags/static/index.html +++ b/tags/static/index.html @@ -679,7 +679,7 @@ - + diff --git a/tags/tcl/index.html b/tags/tcl/index.html index a02481cc..d1c77de2 100644 --- a/tags/tcl/index.html +++ b/tags/tcl/index.html @@ -821,7 +821,7 @@ - + diff --git a/tags/tcl/page/2/index.html b/tags/tcl/page/2/index.html index 70aa1a11..e81707c2 100644 --- a/tags/tcl/page/2/index.html +++ b/tags/tcl/page/2/index.html @@ -823,7 +823,7 @@ - + diff --git a/examples/shellframe/index.html b/tags/thermal/index.html similarity index 78% rename from examples/shellframe/index.html rename to tags/thermal/index.html index dc31c7fe..87b237ac 100644 --- a/examples/shellframe/index.html +++ b/tags/thermal/index.html @@ -37,35 +37,34 @@ - - OpenSees - Shell Diaphragms + OpenSees - Thermal - + - - + + - + - - - + + - + - - + + + @@ -99,10 +98,10 @@ } }, { - "@type": "WebPage", - "@id": "https://stairlab.github.io/opensees-gallery/examples/shellframe/", - "url": "https://stairlab.github.io/opensees-gallery/examples/shellframe/", - "name": "Shell Diaphragms", + "@type": "CollectionPage", + "@id": "https://stairlab.github.io/opensees-gallery/tags/thermal/", + "url": "https://stairlab.github.io/opensees-gallery/tags/thermal/", + "name": "Thermal", "description": "", "isPartOf": { "@id": "https://stairlab.github.io/#/schema/website/1" @@ -110,20 +109,20 @@ "about": { "@id": "https://stairlab.github.io/#/schema/organization/1" }, - "dateModified": "2024-09-19T09:17:28CET","breadcrumb": { - "@id": "https://stairlab.github.io/opensees-gallery/examples/shellframe/#/schema/breadcrumb/1" + "breadcrumb": { + "@id": "https://stairlab.github.io/opensees-gallery/tags/thermal/#/schema/breadcrumb/1" }, "primaryImageOfPage": { - "@id": "https://stairlab.github.io/opensees-gallery/examples/shellframe/#/schema/image/2" + "@id": "https://stairlab.github.io/opensees-gallery/tags/thermal/#/schema/image/2" }, "inLanguage": "en-US", "potentialAction": [{ - "@type": "ReadAction", "target": ["https://stairlab.github.io/opensees-gallery/examples/shellframe/"] + "@type": "ReadAction", "target": ["https://stairlab.github.io/opensees-gallery/tags/thermal/"] }] }, { "@type": "BreadcrumbList", - "@id": "https://stairlab.github.io/opensees-gallery/examples/shellframe/#/schema/breadcrumb/1", + "@id": "https://stairlab.github.io/opensees-gallery/tags/thermal/#/schema/breadcrumb/1", "name": "Breadcrumbs", "itemListElement": [{ "@type": "ListItem", @@ -139,15 +138,15 @@ "position": 2 , "item": { "@type": "WebPage", - "@id": "https://stairlab.github.io/opensees-gallery/examples/", - "url": "https://stairlab.github.io/opensees-gallery/examples/", - "name": "Examples" + "@id": "https://stairlab.github.io/opensees-gallery/tags/", + "url": "https://stairlab.github.io/opensees-gallery/tags/", + "name": "Tags" } },{ "@type": "ListItem", "position": 3 , "item": { - "@id": "https://stairlab.github.io/opensees-gallery/examples/shellframe/" + "@id": "https://stairlab.github.io/opensees-gallery/tags/thermal/" } }] }, @@ -157,10 +156,10 @@ "@graph": [ { "@type": "ImageObject", - "@id": "https://stairlab.github.io/opensees-gallery/examples/shellframe/#/schema/image/2", - "url": "https://stairlab.github.io/opensees-gallery/opensees-gallery/img/ShellFrame-1280x640.png", - "contentUrl": "https://stairlab.github.io/opensees-gallery/opensees-gallery/img/ShellFrame-1280x640.png", - "caption": "Shell Diaphragms" + "@id": "https://stairlab.github.io/opensees-gallery/tags/thermal/#/schema/image/2", + "url": "https://stairlab.github.io/opensees-gallery/img/logo1280x640.png", + "contentUrl": "https://stairlab.github.io/opensees-gallery/img/logo1280x640.png", + "caption": "Thermal" } ] } @@ -288,10 +287,10 @@ - Examples  + href="/opensees-gallery/examples/" >Examples 

        - - - +
        +
        +
        +

        Thermal

        - - -
        -
        - -
        -

        Shell Diaphragms

        - - - - 0 min read • - 0 words - - - - - - - - - - - - -

        -
        - - - - - - -
        - - - - - - - - - -
        -
        - - - -
        - - - - - - - - - - - - - -
        - -
        + + + +
        +
        + + - + +
        +
        + +

        1

        + + + Example 1 +
        +
        + + + +
        +
        + + - + +
        +
        + + Example 2 +
        +
        + + + +
        +
        + + - + +
        +
        + + Example 4 +
        +
        + + + +
        +
        + + - + +
        +
        + + Example 5 +
        +
        + +
        +
        +
        @@ -459,7 +443,7 @@ height="500" width="501" - alt="Shell Diaphragms"> + >
        @@ -481,7 +465,7 @@ height="500" width="501" - alt="Shell Diaphragms"> + >
        OpenSees Examples.
        Code licensed BSD, docs CC BY-NC 4.0
        @@ -709,8 +693,6 @@ - - @@ -725,7 +707,7 @@ - + diff --git a/tags/thermal/index.xml b/tags/thermal/index.xml new file mode 100644 index 00000000..60057129 --- /dev/null +++ b/tags/thermal/index.xml @@ -0,0 +1,40 @@ + + + + Thermal on OpenSees + https://stairlab.github.io/opensees-gallery/tags/thermal/ + Recent content in Thermal on OpenSees + Hugo + en + © 2024 <a href='https://github.com/stairlab' class='link-bg-footer' target='_blank' rel='noopener noreferrer'>PEER</a> + + + Example 1 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample1/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample1/ + Thermal expansion of a beam &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of beam Example Overview: A steel beam is heated to 1180 ° C. Horizontal displacement of right end is recorded. This displacement is normalized against the original length and plotted against temperature. The calculated thermal expansion is compared against the steel temperature-dependent thermal expansion in Eurocode 3, Part 1-2 11 . Download Example 1 files: Example1.tcl Example 1 Outputs &lt;files/Example1_OUTPUT.zip&gt;{.interpreted-text role=&ldquo;download&rdquo;}. + + + Example 2 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample2/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample2/ + Restrained Steel beam subjected to uniform temperature on half of the member. &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Example overview: A steel beam of two equal elements is subjected to a uniform temperature on only one of the elements. Element 1 remains at ambient tempurature while Element 2 is heated using a linear time-temperature history. Download Example 2 files: Example2.tcl Example 2 Outputs &lt;files/EXAMPLE2_OUTPUT.zip&gt;{.interpreted-text role=&ldquo;download&rdquo;}. Objective &nbsp; Example 2 Objectives: Develop a simply supported steel beam using displacement-based beam elements with tempurature-dependent material properites, Record internal forces of an element subjected to a linear time-temperature history due to the restraint against thermal expansion, Record displacement of a node due to a linear time-temperature history, and Correlate the recorded internal forces and displacement with the linear time-temperature history to plot the two variables as a function of temperature. + + + Example 4 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample4/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample4/ + A 6 m x 3.5 m single bay frame with a 2 kN/m distributed load is subjected to a non-linear fire curve. &nbsp; {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of frame Example overview: A one-bay frame is considered with a uniformly distributed load (2 kN/m). The frame is exposed to a fire. Heat transfer analyses were performed using a commercially available finite element program to calculate the temperature distribution through the cross section,and the temperatures at each fiber when the members are exposed to a non-linear gas time-temperature curve. + + + Example 5 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample5/ + Mon, 01 Jan 0001 00:00:00 +0000 + https://stairlab.github.io/opensees-gallery/examples/thermalexamples/thermalexample5/ + A two-bay frame that measures 2.4 m x 1.18 m with a 60 N/m distributed load and column point loads is subjected to a fire in one of the bays. The heated bay is heated linearly to a target temperature of 550 ° C. {.align-centeralign-center width=&ldquo;500px&rdquo;} Elevation of two-bay frame Example overview: This example will combine the modeling methodologies developed through the other examples and apply them to a two-bay frame with a fire in one of the bays. + + + diff --git a/tags/thermal/page/1/index.html b/tags/thermal/page/1/index.html new file mode 100644 index 00000000..5a14f9ee --- /dev/null +++ b/tags/thermal/page/1/index.html @@ -0,0 +1,14 @@ + + + + + https://stairlab.github.io/opensees-gallery/tags/thermal/ + + + + + + + + + \ No newline at end of file diff --git a/tags/truss/index.html b/tags/truss/index.html index f9930085..3ee560b9 100644 --- a/tags/truss/index.html +++ b/tags/truss/index.html @@ -665,7 +665,7 @@ - +

      gravity_analysis Python Tcl @@ -2156,7 +2156,7 @@

      create_portal Python Tcl @@ -2041,7 +2041,7 @@