Bir yapısal sistemde kolonlar, eksensel ve eksantrik yüklemelere karşı direnen dikey elemanlardır. Kolonların görevi üst yapıdan aldıkları yükü temele aktarmaktır.
...
Rectangular Pier Column için düşünecek olursak:
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<O N="TXS_RectangularPierColumn" T="Project" Extends="[Base_SubColumn,TXSBase_SubUnits,Base_SubFoundRef]" Category="Substructure Components" TransAlignRule="Right"> |
Obje Linkleri:
Rectangular Pier Column : https://openbrim.org/objid1xe1mlb66xwh0tcfm3052.libobj
Base_SubColumn : https://openbrim.org/objidhib85e6m5dd3x809wcrec.libobj
Base_SubUnits : https://openbrim.org/objidk0ckggly319oh04s9ja2i.libobj
Base_SubFoundRef : https://openbrim.org/objidlusuphcg46l8t9rh1xvmm.libobj
"Base_SubColumn", "TXS_SubUnits" ve "Base_SubFoundRef" parent objelerdir, "TXS_RectangularPierColumn" ise parent objelerden türetilmiş bir child objedir.
TXSBase_SubUnits
TXS_SubUnits objesi içerisinde köprü objeleri oluşturulurken kullanılan birim sistemi mevcuttur. Her projenin başında tekrar tekrar birim sistemi tanımlamaktansa, "TXS_SubUnits" objesi extend edilerek zamandan ve kod kalabalığından tasarruf edilmiş olur.
...
Türü ne olursa olsun tüm kolonların bazı ortak parametreleri vardır. Bunlar kolonun konumu ve kolon tabanının yüksekliği temel üst kotu gibi parametrelerdir. Şuan var olan ve gelecekte oluşturulabilecek tüm kolon objelerinde bu parametrelerin olmasını bekleriz. Kolonlara dair ortak bilgi ve parametreler her kolon objesi için yazılmak yerine "Base_SubColumn" objesi içinde tanımlanmıştır. Bir kolon objesi yaratmak için "Base_SubColumn" objesi kullanıldığında, hem zaman ve kod tasarrufu yapılmış olur, hem de oluşturulan objeler daha çok kontrol altına alınmış olur.
...
OpenBrIM içerisinde objeler birbirleriyle iletişim halindedir. Objeler Köprü elemanları kendilerini birbirlerinin konumuna göre yerleştirir. Kolon, kendini kolon başlığına başlık kirişi göre yerleştirir. Temel ise kendini kolona göre yerleştirir. Kendini kolonun altına yerleştirebilmesi için, temel objesine konum bilgisi verilmelidir. Bu bilgi kolonun atına altına bir referans çizgisi(refline) çizerek verilir. Konum bilgisi oluşturulduktan sonra, temel objesinin bu bilgiye ulaşmasını sağlamak gereklidir. App üzerinden temel objesi yaratmak istediğimizde, hangi objenin altına geleceğini seçmemiz gerekir. Peki, temel hangi objenin altına yerleşmelidir? Tabii ki temele referans çizgisi veren objenin altına yerleşmelidir. Bu davranışı sağlamak için "Base_SubFoundRef" parent objesi, kolon yaratılırken extend edilir ve temel objesi oluşturulurken , temelin referans alacağı obje inputunun türü "Base_SubFoundRef" yapılır.
Parametreler
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<P N="sbcr" V="HPC" T="Base_SubColumnRef" Role="Input" D="Pier Cap" Category="Location" />
<O T="ParamInfo" Min="1" Max="1" Required="1" Pick="1" Param="sbcr" />
<P N="LocY" V="30" D="Transverse Offset" Role="Input" Category="Location" UT="Length" UC="StructU" />
<P N="LocZ" V="-600" D="Top elevation of foundation" Role="Input" Category="Location" UT="Length" UC="DR_PropU1" />
|
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<O N="Pier Geometry" T="Group">
<P N="ColW" V="132" D="Width of pier" Role="Input" Category="Geometry" UT="Length" UC="PropU1" />
<P N="ColT" V="80" D="Length of pier" Role="Input" Category="Geometry" UT="Length" UC="PropU1" />
</O>
<O N="Material" T="Group">
<P N="PierMaterial" V="NULL" T="Material" D="Pier Material" Role="Input" Category="Material" />
</O> |
- Alt yapı (sbcr)
Kolonun hangi alt yapı objesinin altına geleceğini belirler. Input'un türü "Base_SubColumnRef" olarak belirlenmiştir. Kütüphanede oluşturulan bir objenin türünün "Base_SubColumnRef" olabilmesi için, ya obje "Base_SubColumnRef" olmalıdır ya da "Base_SubColumnRef" objesini extend etmelidir. "Base_SubColumnRef" kolona referans çizgisi veren objelerin bir parent objesidir. Tüm bu ifadeler "Kolonun referans alarak kendini yerleştireceği obje, kolona referans çizgisi veren bir obje olmalıdır." anlamına gelir. Bu örnekte inputun değeri HPC olarak belirlenmiştir. HPC private içinde gelen bir Hammerhead Pier Cap objesidir.
- Y konumu (LocY)
Kolonun, enine konumudur. Kolonun referans çizgisi üzerindeki konumu olarak da düşünülebilir. Pozitif veya negatif input değerlerine göre kolon sağa veya sola yerleştirilir.
- Temel üst kotu (LocZ)
Temel yüzeyinin yüksekliğidir. Bu değer alignment fonksiyonlarından etkilenmez, global z koordinatıdır.
- Kolon Genişliği (ColW)
Kolon genişliğini belirleyen parametredir.
- Kolon Kalınlığı (ColT)
Kolon kalınlığını belirleyen parametredir.
- Kolon Malzemesi (PierMaterial)
Kolonun malzemesini belirleyen parametredir.
Drawio | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
3D Geometri
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<O N="View 3D" T="Group" Alignment="ObjAlignment" X="CenterCoord[0]" Y="LocY" RZ="-sbcr.rot" Color="#979595" AlignH="Orient" AlignV="Warp" AlignT="Ignore">
<O N="RectangularPier" T="Group">
<O T="Volume">
<O T="Surface">
<O T="Point" X="-ColW/2" Y="-ColT/2" Z="CenterCoord[2]" />
<O T="Point" X="-ColW/2" Y="-ColT/2" Z="LocZ" AlignT="Fixed" AlignV="Fixed" />
<O T="Point" X="-ColW/2" Y="ColT/2" Z="LocZ" AlignT="Fixed" AlignV="Fixed" />
<O T="Point" X="-ColW/2" Y="ColT/2" Z="CenterCoord[2]" />
</O>
<O T="Surface">
<O T="Point" X="ColW/2" Y="-ColT/2" Z="CenterCoord[2]" />
<O T="Point" X="ColW/2" Y="-ColT/2" Z="LocZ" AlignT="Fixed" AlignV="Fixed" />
<O T="Point" X="ColW/2" Y="ColT/2" Z="LocZ" AlignT="Fixed" AlignV="Fixed" />
<O T="Point" X="ColW/2" Y="ColT/2" Z="CenterCoord[2]" />
</O>
</O>
</O>
</O> |
Kolonun 3d geometrisi başlık kirişinin altındaki kolon referans çizgisine göre oluşturulur. Objeye atanan alignment (ObjAlignment) kodun başka bir kısmında, kolonun referans alacağı alt yapı objesinin alignment'ı olarak belirlenmiştir. AlignH parametresi "Orient" olarak tanımlanarak obje yatay eksende alignment'a sokulmuştur. AlignV parametresi "Warp" olarak tanımlanarak, obje alignment'ın düşey eksendeki koordinatlarına göre konumlandırılmıştır. AlignT parametresi "Ignore" olarak tanımlanarak, cross-slope'tan gelen yükseklik değerinden etkilenmemesi sağlanmıştır.
CenterCoord parametresi, kolonun merkez koordinatını verir. Kolon referans çizgisinin Y noktasının LocY'ye eşit olduğu yerdeki koordinatlardan oluşan bir listedir. Bu parametre tüm kolon objeleri için ortak olduğundan Base_SubColumn objesi içerisinde hesaplanır ve exportlanır.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<P N="CenterCoord" V="onliney(toglobal(sbcr.ColumnRefline),LocY)" /> |
Kolonun Z eksenindeki dönme açısı, altına geldiği yapının dönme açısına eşitlenmiştir. Bu işlem 3D Geometri kod segmenti içerisinde RZ="-sbcr.rot" komutuyla yapılmıştır.
Finite Element Model
Kolon geometrisi kalınlık ve genişlik (ColT ve ColW) inputları kullanılarak oluşturulmuştur. Kolonun alt yüzeyindeki noktalar oluşturulurken AlignT ve AlignV parametreleri "Fixed" olarak belirlenmiştir. Kolonun alt yüzeyinin yüksekliği, temelin üst yüzeyinin yüksekliğine eşittir. Yani bu noktaların alignmentın yüksekliğiyle bir bağlantısı yoktur. LocZ, noktaların global Z koordinatıdır.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<O N="FEM" T="Group">
<O N="FEProperties" T="Group">
<O N="RigidMat" T="Material">
<P N="E" V="29000" D="Modulus of Elasticity" />
<P N="G" V="11200" D="Shear Modulus" />
<P N="d" V="0" D="Unit Weight" />
</O>
<O N="RigidSec" T="Section" w="240" h="240" Ax="w * h" Ay="(5/6)*Ax" Az="Ay" b="(w .GT. h ? h : w)" J="1000000000" Iy="h * w * w * w / 12" Iz="w * h * h * h / 12" Izy="0" a="(w .GT. h ? w : h)">
<P N="Material" V="RigidMat" T="Material" />
</O>
<O N="RectangularPierSec" T="Section">
<P N="Material" V="PierMaterial" T="Material" />
<O T="Shape">
<O T="Point" X="ColW/2" Y="ColT/2" />
<O T="Point" X="-ColW/2" Y="ColT/2" />
<O T="Point" X="-ColW/2" Y="-ColT/2" />
<O T="Point" X="ColW/2" Y="-ColT/2" />
</O>
</O>
</O>
<O N="Column" T="Group" Alignment="ObjAlignment" AlignH="Orient" AlignV="Warp" AlignT="Ignore">
<O N="P_Node1" T="Node" Z="LocZ" X="CenterCoord[0]" Y="CenterCoord[1]" AlignV="Fixed">
<P N="Tx" V="-1" />
<P N="Ty" V="-1" />
<P N="Tz" V="-1" />
<P N="Rx" V="-1" />
<P N="Ry" V="-1" />
<P N="Rz" V="-1" />
</O>
<P N="RTopZ" V="alignV(ObjAlignment,CenterCoord[0],CenterCoord[1])" />
<P N="LLength" V="(CenterCoord[2]+RTopZ-LocZ)/mesh" />
<O N="PierFERep" T="Repeat" S="0" E="mesh-1" I="1" CTRL="index" index="0">
<O N="P_Node2" T="Node" Z="LocZ+(index+1)*LLength" Y="CenterCoord[1]" X="CenterCoord[0]" AlignV="Fixed" />
<O N="PierFE" T="FELine" BetaAngle="PI">
<P N="Node1" V="iif(index.EQ. 0, P_Node1,PierFERep[index-1].P_Node2)" T="Node" />
<P N="Node2" V="P_Node2" T="Node" />
<P N="Section" V="PierSec" T="Section" />
</O>
</O>
<O N="P_Node2" T="Node" Z="CenterCoord[2]" X="CenterCoord[0]" Y="CenterCoord[1]" />
<O N="PierFE" T="FELine">
<!-- beta angle? -->
<P N="Node1" V="P_Node1" T="Node" />
<P N="Node2" V="P_Node2" T="Node" />
<P N="Section" V="RectangularPierSec" T="Section" />
</O>
<P N="colTopPt" V="onliney(toglobal(sbcr.PedestalRefLine), x.LocY)" />
<P N="colBotPt" V="onliney(toglobal(sbcr.ColumnRefline), x.LocY)" />
<O N="P_Node3" T="Node" Z="colTopPt[2]" Y="LocY" X="CenterCoord[0]" />
<O N="PierFE" T="FELine">
<P N="Node1" V="PierFERep[E].P_Node2" T="Node" />
<P N="Node2" V="P_Node3" T="Node" />
<P N="Section" V="RigidSec" T="Section" />
</O>
</O>
</O> |
Drawio | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Kolonların sonlu elemanlar geometrisi, merkez noktası hizasında istenilen sayıda ve eşit uzunlukta dikey feline objesinin birleştirilmesiyle oluşturulur. RigidSec objesi kolona yukarıdan gelen yükü aktarması için yaratılan bir rigid kesittir. FeProperties objesi içerisinde rigid kesitin malzeme özellikleri tanımlanmıştır. RectangularPierSec kolonun sahip olduğu kesittir. Column objesi içerisinde kolonun sonlu eleman geometrisi oluşturulmuştur. Öncelikle kolonun tabanını temsil eden P_Node1 tanımlanır. Bu node her yönde hareket ve dönmeye karşı sınırlandırılmıştır.
Kolon objesinin sonlu eleman modeli için kullanıcıdan mesh sayısı inputu alınır. Kodun içerisindeki "LLength" parametresi kullanıcıdan alınan input kadar sayıdaki eşit uzunluktaki feline'ların her birinin uzunluğudur. Kolonun alt ve üst yüzeyleri arasındaki yükseklik farkının mesh sayısına bölünmesi ile bulunur. Kolonun alt yüzeyinin yüksekliği LocZ parametresine eşittir. Kolon üst yüzeyinin yüksekliği ise kolonun merkezinin alignment içindeki yüksekliğiyle alignment'ın o noktadaki yüksekliğinin toplamına eşittir. Kolonun meshlenme işlemi repeat fonksiyonu ile gerçekleştirilir. Her feline objesi için Node2, Node1'den LLength kadar yüksektedir. Bir feline'ın Node2'si bir sonraki feline'ın Node1'idir. Daha sonra kolona yük aktarımı yapıcak rigid kesite sahip feline tanımlanır.
colTopPt ve colBotPT parametreleri kolonun merkez hizasında kolon referans çizgisi ve pedestal referans çizgisi üzerindeki noktaların koordinatlarıdır.
Export
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<O T="Export">
<O N="Reference_Lines" T="Group" Override="1">
<O T="ActiveOnly" Alignment="ObjAlignment" X="CenterCoord[0]" Y="LocY" RZ="-sbcr.rot" Color="#979595" AlignH="Orient" AlignV="Ignore" AlignT="Ignore">
<O N="FootingRefline" T="Volume">
<O N="P1" T="Point" Z="LocZ" Y="ColT/2" X="0" AlignT="Fixed" AlignV="Fixed" />
<O N="P2" T="Point" Z="LocZ" Y="-ColT/2" X="0" AlignT="Fixed" AlignV="Fixed" />
</O>
</O>
</O>
</O> |
Kolon objesi altına yerleşecek olan temel objeleri için referans çizgisi oluşturur. App'te oluşturulan bir modelde referans çizgisinin kodun içine gelmesi için exportlanması gerekir. (bkz Export Objesi).
Private
Kolon objesinin yerleştirilebilmesi için, "Base_SubColumnRef" türünde bir objeye ihtiyaç vardır. Kütüphane içerisinde kolon objesini oluşturmak amacıyla private içinde başlık kirişi objesi çağrılmıştır. Obje App'e çağrıldığında private içindeki kod App'e gitmeyeceği için başlık kirişi objesi bir sorun çıkarmayacaktır. Private içindeki kod objenin bir parçası değildir sadece obje üzerinde çalışabilmek için gereklidir. (bkzPrivate Objesi)