2021年度第2回デジラボ(後半):Ladybug1.2.0 によるシェルの板厚除去と日照最適化

こんにちは.北九州市立大学院M2の西江と竹下,M1のカレルとB4の新田です.

今回はシェルの体積と日射量の多目的最適化を行います.

画像1

具体的には,シェル(四方をピン支持とします)の板厚を除去し,床の日射量を最大化する最適化とシェルの板厚の除去を極力抑え,日射量を最大化する最適化を同時並行に行います.今回は板の個数は81個としています.最適化を行う際はGenepool(grasshopper上ではthicknessとします)を使用し81個の0-1変数で,0の場合は板を除去,1の場合は板厚を与える表現としています.また,四方の板厚は除去しません.

まず初めに,シェルを表現するために,藤田先生が開発した(opensees-grasshopper)コンポーネントを使用します.opensees-grasshopperとは構造解析を行うopenseesをgrasshopperで扱えるようにしたコンポーネントです.opensees-grasshopperの中には,CreateBeamShellという裁断球殻シェルを作成するコンポーネントがあります.これを用いて,シェルを作成します.

画像2

ここで注意点があります.私たちが使用するopensees-grasshopperはバージョンが古いため,シェルの座標にマイナスを含むと,上手く構造解析を行えないことがあります.そこで,シェルの座標を移動させる必要があります.

画像6

移動させた座標を用いて,ladybugの日射量の計算とopensees-grasshopperでシェルの構造解析を行うために,解析用のモデルをそれぞれ作成します.ladybugでは床(Brep)とシェル(Brep)の作成,opensees-grasshopperではシェルのsurfaceを作成する必要があります.python-scriptで作成します.モデルを作成するためには,グリッド状になっている座標を四角形に分けて作成します.四角形を作成するための4つの座標をijklという空集合を作成し,for文を使用し,ijklに格納します.

ijkl = []
for i in range(N-1):
 for j in range(M-1):
  ijkl.append([j+i*M,j+1+i*M,(i+1)*M+j+1,(i+1)*M+j])

四方の板厚は除去しないので,下記の文を記述します.

for e in range(n):
 if e==0 or e==M-2 or e==(M-1)*(N-1)-1 or e==(M-1)*(N-2):
  if thickness[e]==0:
   thickness[e]=1

ijklとthicknessを用いてシェルの作成を行います.

Z_ve=gh.UnitZ(0.001)#床の高さ
Z_ve1=gh.UnitZ(0.2)#シェルの厚み
plane=[]#ladybug用の床
Surface = []#構造解析用のシェル
Brep = []#ladybug用のシェル
for e in range(n):
 if thickness[e]>0:
  i=ijkl[e][0]
  j=ijkl[e][1]
  k=ijkl[e][2]
  l=ijkl[e][3]
  geometry=gh.x4PointSurface(P[i],P[j],P[k],P[l])
  Surface.append(geometry)
  Brep.append(gh.Extrude(geometry,Z_ve1))
plane1=gh.x4PointSurface(P[0],P[M-1],P[(M-1)*(N+1)],P[(M-1)*N])
plane.append(gh.Extrude(plane1,Z_ve))

これでモデルを作成できました.あとは,このようにコンポーネントを配置するだけです.

画像7

画像5

opensees-grasshopperの詳しい扱い方は,2020年3月24日にyoutubeで投稿された「#OpenSees for #Grasshopperでシェル構造物の形態創生してみた 」を参照してください.ladybugの詳しい扱い方は,2021年5月28日にyoutubeで投稿された「2021年度第1回デジラボ:Ladybug1.2.0を使って環境最適化をやってみた」を参照してください.

次に最適化を行います.多目的最適化なので,wallaceiを使用します.日射量の指標はladybugのLB incident Radiationのresultを合計した値です.また,板厚の除去を抑える指標は,シェルの体積値とすればいいです.しかしながら,板厚は一定なので,面積値を指標としても同じであるため,今回は面積値を指標とします.wallaceiは最小化を行うコンポーネントなので,シェルの面積値と日射量にnegativeコンポーネントを使い最適化を行います(なぜ使使用するかは,下の動画を参考にしてください).また,構造解析を行うとき,シェルの板厚除去しだいでは,上手く機能せず,ひずみエネルギー(str_e)が0.0と算出されるので,Surfaceの面積,ひずみエネルギーと日射量をpythonscriptに繋ぎ,このような記述をします.仮に構造解析に不具合がでると,日射量と面積値がエラー値として算出されます.

画像8

画像3

画像4

最適化にはwallaceiを使用し子供50,世帯数100として,最適化を行いました.Wallaceiの扱い方は,2020年7月24日にyoutubeで投稿された「第4回デジラボーGrasshopperのコンポーネントWallaceiー」を参照してください.

結果はこのようになりました.

画像9

画像10

青文字が面積を表し,緑が日射量となっています.日射量を多く獲得するためには,板厚が南方向を中心に削除されています.また,面積を極力削除せずに日射量を獲得するためには,南方向の板厚が削除され,効率的に削除された結果となりました.今回はシェルのメッシュが粗く,結果がよくありませんでしたが,細かくするとよりよい結果が得られると思いました.


この記事が気に入ったらサポートをしてみませんか?