GMSH с API Python — вытягивание узлов и время расчетаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 GMSH с API Python — вытягивание узлов и время расчета

Сообщение Anonymous »

В настоящее время я работаю с API GMSH Python для создания узлов и элементов на основе выдавливания опорной поверхности.
В качестве входных данных у меня есть словарь узлов и словарь элементов, которые образуют прямоугольник, составленный из четырехугольных элементов. Из этого я строю поверхности благодаря команде addPlaneSurface. Эта поверхность представляет собой нейтральное волокно, и я хочу выдавить ее в направлениях z и -z, чтобы построить слои.
Код (см. ниже) работает, но после определенного количества слоев (действительно восемь), время вычислений становится очень важным, что является большой проблемой в моем проекте.
Изучив проводник переменных после выполнения моего кода, я заметил, что длина списки, содержащие поверхности, увеличиваются с количеством слоев, что кажется странным: на мой взгляд, количество выдавливаемых поверхностей должно быть одинаковым от одного слоя к другому, поскольку всегда учитываются одинаковые размеры пластины.
Я думаю, что Увеличение времени вычислений происходит из-за увеличения длины списка, но я не понимаю причину этого, когда смотрю на свой код, потому что список должен перезаписываться на каждой итерации цикла.
Вы найдете мой код ниже.
Может ли кто-нибудь мне помочь?
Большое спасибо.
PS: Извините, пожалуйста. мой плохой английский.
import gmsh

# Initialiser Gmsh

gmsh.initialize()

gmsh.model.add("Plaque Composite")

# Exemple de dictionnaire de nœuds (au niveau de la fibre neutre)

nodes_2d = {

1: [0, 0, 0], 2: [2, 0, 0], 3: [4, 0, 0], 4: [6, 0, 0], 5: [8, 0, 0], 6: [10, 0, 0],

7: [0, 2, 0], 8: [2, 2, 0], 9: [4, 2, 0], 10: [6, 2, 0], 11: [8, 2, 0], 12: [10, 2, 0],

13: [0, 4, 0], 14: [2, 4, 0], 15: [4, 4, 0], 16: [6, 4, 0], 17: [8, 4, 0], 18: [10, 4, 0],

19: [0, 6, 0], 20: [2, 6, 0], 21: [4, 6, 0], 22: [6, 6, 0], 23: [8, 6, 0], 24: [10, 6, 0],

25: [0, 8, 0], 26: [2, 8, 0], 27: [4, 8, 0], 28: [6, 8, 0], 29: [8, 8, 0], 30: [10, 8, 0],

31: [0, 10, 0], 32: [2, 10, 0], 33: [4, 10, 0], 34: [6, 10, 0], 35: [8, 10, 0], 36: [10, 10, 0]

}

elements_2d = {

1: [1, 2, 8, 7], 2: [2, 3, 9, 8], 3: [3, 4, 10, 9], 4: [4, 5, 11, 10], 5: [5, 6, 12, 11],

6: [7, 8, 14, 13], 7: [8, 9, 15, 14], 8: [9, 10, 16, 15], 9: [10, 11, 17, 16], 10: [11, 12, 18, 17],

11: [13, 14, 20, 19], 12: [14, 15, 21, 20], 13: [15, 16, 22, 21], 14: [16, 17, 23, 22], 15: [17, 18, 24, 23],

16: [19, 20, 26, 25], 17: [20, 21, 27, 26], 18: [21, 22, 28, 27], 19: [22, 23, 29, 28], 20: [23, 24, 30, 29],

21: [25, 26, 32, 31], 22: [26, 27, 33, 32], 23: [27, 28, 34, 33], 24: [28, 29, 35, 34], 25: [29, 30, 36, 35]

}

# Vérifier que le nombre de plis est pair

plies = 6 # Doit être pair

if plies % 2 != 0:

raise ValueError("Le nombre de plis doit être pair.")

# Épaisseur de chaque pli

ply_thickness = 0.1

# Calculer le nombre de plis au-dessus et en-dessous de la fibre neutre

plies_above = plies_below = plies // 2

# Créer les points dans Gmsh à partir du dictionnaire des nœuds

for node_id, coords in nodes_2d.items():

gmsh.model.occ.addPoint(*coords)

# Créer les lignes et surfaces dans Gmsh à partir des éléments

surfaces = []

for elem_id, node_ids in elements_2d.items():

line_ids = []

for i in range(4):

start_node = node_ids

end_node = node_ids[(i + 1) % 4]

line_id = gmsh.model.occ.addLine(start_node, end_node)

line_ids.append(line_id)

loop_id = gmsh.model.occ.addCurveLoop(line_ids)

surface_id = gmsh.model.occ.addPlaneSurface([loop_id])

surfaces.append(surface_id)

# Synchroniser les entités créées

gmsh.model.occ.synchronize()

# Extrusion des plis

extruded_surfaces_above = surfaces

extruded_surfaces_below = surfaces

# Extruder les plis au-dessus de la fibre neutre

for i in range(plies_above):

extruded_volumes_above = gmsh.model.occ.extrude([(2, s_id) for s_id in extruded_surfaces_above], 0, 0, ply_thickness)

extruded_surfaces_above = [vol[1] for vol in extruded_volumes_above if vol[0] == 2]

print("extruded_surfaces_above", extruded_surfaces_above)

# Extruder les plis en-dessous de la fibre neutre

for i in range(plies_below):

extruded_volumes_below = gmsh.model.occ.extrude([(2, s_id) for s_id in extruded_surfaces_below], 0, 0, -ply_thickness)

extruded_surfaces_below = [vol[1] for vol in extruded_volumes_below if vol[0] == 2]

print("extruded_surfaces_below", extruded_surfaces_below)

# Synchroniser les changements

gmsh.model.occ.synchronize()

# Afficher le modèle dans Gmsh

gmsh.fltk.run()

# Finaliser Gmsh

gmsh.finalize()


Подробнее здесь: https://stackoverflow.com/questions/791 ... culus-time
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • GMSH с API Python — вытягивание узлов и время расчета
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • GMSH с API Python — выдавливание узлов и время расчета
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Gmsh с Python API - экструзия узлов и время исчисления
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Gmsh с Python API - экструзия узлов и время исчисления
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Приложение работает медленно из-за многократной итерации, нужна альтернатива — вытягивание флаттера из API
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»