環境はpython2.7、windows10でanacondaを使用しています。
以下のようなコードで、四角柱の構造物にはたらくモーメントを高さごとに切り分けて計算したいのですが、for文でループさせる方法がわかりません。
hdfファイルには粒子法という構造物のある範囲に微小な粒子をつめこみ計算するというプログラムの計算結果がはいっていて、x,y,z座標とそれぞれの点(格子)での圧力がはいっています。
python
1 2 3import h5py 4import numpy as np 5import matplotlib.pyplot as plt 6 7#hdfファイルから位相と圧力をもってくる 8hdf5 = h5py.File("file.hdf5", 'r') 9list_x=(hdf5["particles/obstacle/arrays/x"].value.tolist()) 10list_y=(hdf5["particles/obstacle/arrays/y"].value.tolist()) 11list_z=(hdf5["particles/obstacle/arrays/z"].value.tolist()) 12list_p=(hdf5["particles/obstacle/arrays/p"].value.tolist()) 13 14#位相の条件分け 15z_1 = [i for i, takasa in enumerate(list_z) if 0.020>=takasa] 16z_2 = [i for i, takasa in enumerate(list_z) if 0.040>=takasa>0.020] 17z_3 = [i for i, takasa in enumerate(list_z) if 0.060>=takasa>0.040] 18x_1 = [i for i, x in enumerate(list_x) if 4.93>=x] 19x_2 = [i for i, x in enumerate(list_x) if 5.09>=x>=5.07] 20 21#一番下の段について前面と背面の位相をだす 22zenmen_1 = set (z_1) & set (x_1) 23haimen_1 = set (z_1) & set (x_2) 24 25#それぞれの条件の位相で圧力をもってくる 26p_zenmen_1 = [list_p[i] for i in zenmen_1] 27p_haimen_1 = [list_p[i] for i in haimen_1] 28 29#圧力をモーメントにする 30p_goukei_1 = sum(p_zenmen_1)-sum(p_haimen_1) 31mo1 = p_goukei1*0.01 32 33#2段目について同様の処理 34zenmen_2 = set (z_2) & set (x_1) 35haimen_2 = set (z_2) & set (x_2) 36 37p_zenmen_2 = [list_p[i] for i in zenmen_2] 38p_haimen_2 = [list_p[i] for i in haimen_2] 39 40p_goukei_2 = sum(p_zenmen_2)-sum(p_haimen_2) 41mo2 = p_gouke2*0.03 42#3段目以降省略
考える方向に圧力のかかっている前面と背面のみを抽出し、その圧力を合計し、高さごとにモーメントの式にいれたいのですが繰り返しにする方法がわかりません。稚拙な質問なのは重々承知ですが方法だけでもよいのでどなたかご教授ください。
回答1件
あなたの回答
tips
プレビュー