Поперечное сечение 2

Давайте рассмотрим поперечное сечение (смотрите examples/matrix/cross_section_2)

_images/cross_section_2_draft.png

Поперечное сечение

Для создания этого типа геометрии мы будем использовать класс Matrix. Первым делом нам нужно деомпозировать геометрию на блоки и затем модифицировать каждый из них в соответствии с размерами.

Декомпозиция

Геометрию можно разбить на 4 блока: BOTTOM, TOP1, TOP2 и TOP3, где часть TOP3 требуется для небольшой поверхности с граничным условием \(F\), \(u_v\) на конце верхней части. Без граничного условия, трех блоков было бы достаточно. Каждый из этих блоков будет описан классом:py:class:~gmsh_scripts.block.matrix.Matrix.

_images/cross_section_2_decomposition.png

Декомпозиция геометрии

Геометрия

Определим, что ось X направлена вправо, Y - в глубину, а Z - вверх, т.е. поперечное сечение симметрично относительно оси Y.

Сначала мы должны создать отдельный файл для каждого из блоков:

  • top_1.yaml

1 data:
2   class: block.Matrix
3   matrix: [ [ 0, 0.250 ], [ 0, 1 ], [ 0, 0.250 ] ]
  • top_2.yaml

1  data:
2    class: block.Matrix
3    matrix: [ [ 0, 0.220 ], [ 0, 1 ], [ 0, 0.250 ] ]
  • top_3.yaml

1 data:
2   class: block.Matrix
3   matrix: [ [ 0, 0.030 ], [ 0, 1 ], [ 0, 0.250 ] ]
  • bottom.yaml

1 data:
2   class: block.Matrix
3   matrix: [ [ 0, 0.250 ], [ 0, 1 ], [ 0, 0.250 ] ]

Каждый из файлов состоит из одного поля высокого уровня data, которое имеет 2 поля: 1. class - название класса блока 2. matrix - списки координат точек по осям

Например, Matrix имеет 2 точки по оси X с координатами 0 и 0.250.

Матрица также имеет 2 точки по оси Y с координатами 0 и 1 и 2 по оси Z с 0 и 0,250. Таким образом, Матрица представляет собой с параллелограмм с размерами: 0,250, 1 и 0,250 по осям X, Y и Z соответственно и начало в точке (0, 0, 0)»

Мы можем сгенерировать геометрию bottom.yaml в файле bottom.geo_unrolled:

python -m gmsh_scripts bottom.yaml
_images/cross_section_2_geometry_bottom.png

Геометрия блока BOTTOM

Теперь нам нужно создать основной файл main.yaml со всеми блоками:

 1 data:
 2   class: block.Block
 3   do_register: 0
 4   children: [
 5     /bottom.yaml,
 6     /top_1.yaml,
 7     /top_2.yaml,
 8     /top_3.yaml
 9   ]
10   children_transforms: [
11     [ ],
12     [ [ 0, 0, 0.250 ] ],
13     [ [ 0.250, 0, 0.250 ] ],
14     [ [ 0.470, 0, 0.250 ] ]
15   ]

Файл также имеет одно поле высокого уровня «data» с 4 подполями:

  1. class - имя класса блока

  2. do_register - Нужно ли создавать блок? (установлено 0, потому что нам не нужно создавать сам блок, т.е. это только контейнер для других блоков)

  3. children - ссылки на другие блочные файлы (должны начинаться с символа /

  4. children_transforms - трансформации блоков

Поле children_transforms представляет собой список Transform для каждого children. В этом примере нам нужны только простые Translate, описываемые 3 числами - смещение по осям X, Y и Z соответственно.

Например:

  1. Дочерний элемент bottom.yaml не имеет трансформаций

  2. Дочерний элемент top_1.yaml имеет одну Translate [ 0, 0, 0,250 ] со смещением 0,250 по оси Z и без смещений по X и Y (нам просто нужно поднять его на bottom.yaml)

  3. Дочерний элемент top_2.yaml имеет одну Translate [ 0.250, 0, 0,250 ]

  4. Дочерний элемент top_3.yaml имеет одну Translate [ 0.470, 0, 0,250 ]

Сгенерируем геометрию со всеми блоками в main.geo_unrolled:

python -m gmsh_scripts main.yaml
_images/cross_section_2_geometry_main.png

Геометрия со всеми блоками

Сетка

Чтобы сгенерировать сетку, мы должны добавить поле metadata в main.yaml файл:

 1 metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6 data:
 7   class: block.Block
 8   do_register: 0
 9   children: [
10     /bottom.yaml,
11     /top_1.yaml,
12     /top_2.yaml,
13     /top_3.yaml
14   ]
15   children_transforms: [
16     [ ],
17     [ [ 0, 0, 0.250 ] ],
18     [ [ 0.250, 0, 0.250 ] ],
19     [ [ 0.470, 0, 0.250 ] ]
20   ]

File metadata has run sub-field with fields:

  1. factory - Какое ядро gmsh использовать для генерации сетки? В настоящее время,gmsh имеет два ядра <https://gmsh.info/doc/texinfo/gmsh.html#Overview-of-Gmsh>`_: geo и occ. Мы используем geo, потому что он быстрее

  2. strategy - Strategy генерация сетки

  3. strategy.class - Класс стратегии. Используем NoBoolean, потому что нам не нужны булевы операции

Предупреждение

Если нам нужны булевы операции, мы ДОЛЖНЫ использовать фабрику occ со стратегией по умолчанию (просто не устанавливайте ее в metadata)

Теперь генератор сетки будет возвращать сетку в файл main.msh2 (он также возвращает main.geo_unrolled как и раньше). Генератор создает неструктурированную тетраэдральную сетку по умолчанию.

python -m gmsh_scripts main.yaml
_images/cross_section_2_mesh_main_default.png

Сетка по умолчанию

Неструктурированная Тетраэдральная

Мы можем настроить неструктурированную сетку параметрами во входных файлах.

First type of parameters aka point parameters is set in matrix field (e.g. bottom.yaml):

1data:
2  class: block.Matrix
3  matrix: [ [ 0;0.01, 0.250;0.1 ], [ 0;0.01, 1;0.1 ], [ 0;0.01, 0.250;0.1 ] ]

Как видно, для каждой точки добавлен новый параметр с разделителем ;, например 0;0.01 для первой точки по оси X или 0.250;0.1 для второй точки по оси Z. Параметры 0.01 или 0.1 равны приблизительным размеры сетки вблизи соответствующих точек

В этом примере сетка более мелкая вблизи точки (0, 0, 0) с размером 0,01 и грубее возле точки (0,250, 1, 0,250) с размером 0,1.

Давайте добавим поле metadata в bottom.yaml и создадим сетку:

python -m gmsh_scripts bottom.yaml
1metadata:
2  run:
3    factory: geo
4    strategy:
5      class: strategy.NoBoolean
6data:
7  class: block.Matrix
8  matrix: [ [ 0;0.01, 0.250;0.1 ], [ 0;0.01, 1;0.1 ], [ 0;0.01, 0.250;0.1 ] ]
_images/cross_section_2_mesh_unstructured_tetrahedral_bottom_1.png

Неструктурированная тетраэдральная сетка блока BOTTOM

Можно зафиксировать размер сетки вдоль одной из осей (например, Y с «0,01»):

1metadata:
2  run:
3    factory: geo
4    strategy:
5      class: strategy.NoBoolean
6data:
7  class: block.Matrix
8  matrix: [ [ 0;0.01, 0.250;0.1 ], [ 0;0.01, 1;0.01 ], [ 0;0.01, 0.250;0.1 ] ]
_images/cross_section_2_mesh_unstructured_tetrahedral_bottom_2.png

Неструктурированная тетраэдральная сетка с фиксированным размером по оси Y блока BOTTOM

To generate all blocks, one needs to specify point parameters at all blocks and run generator:

python -m gmsh_scripts main.yaml
_images/cross_section_2_mesh_unstructured_tetrahedral_main.png

Неструктурированная тетраэдральная сетка с фиксированным размером вдоль оси Y в BOTTOM блоке

Второй тип параметров global parameters, задается в поле metadata.run.options (например, bottom.yaml):

 1metadata:
 2  run:
 3    factory: geo
 4    strategy:
 5      class: strategy.NoBoolean
 6    options:
 7      Mesh.MeshSizeFactor: 0.5
 8      Mesh.MeshSizeMin: 0
 9      Mesh.MeshSizeMax: 1.0e+22
10      Mesh.MeshSizeFromPoints: 1
11data:
12  class: block.Matrix
13  matrix: [ [ 0;0.01, 0.250;0.1 ], [ 0;0.01, 1;0.01 ], [ 0;0.01, 0.250;0.1 ] ]

Here are 4 options (many other options available, see gmsh documentation): 1. Mesh.MeshSizeFactor - factor applied to all mesh element sizes 2. Mesh.MeshSizeMin - minimum mesh element size 3. Mesh.MeshSizeMax - maximum mesh element size 4. Mesh.MeshSizeFromPoints - compute mesh element sizes from values given at geometry points (e.g. in matrix field)

В этом примере для Mesh.MeshSizeFactor установлено значение 0,5, что создает сетку, которая в два раза мельче»

_images/cross_section_2_mesh_unstructured_tetrahedral_bottom_global_1.png

Неструктурированная тетраэдральная сетка с Mesh.MeshSizeFactor = 0.5

Можно отключить Mesh.MeshSizeFromPoints (установить значение 0), чтобы создать равномерную сетку, размер которой контролируется только global parameters.

 1metadata:
 2  run:
 3    factory: geo
 4    strategy:
 5      class: strategy.NoBoolean
 6    options:
 7      Mesh.MeshSizeFactor: 1
 8      Mesh.MeshSizeMin: 0
 9      Mesh.MeshSizeMax: 1.0e+22
10      Mesh.MeshSizeFromPoints: 0
11data:
12  class: block.Matrix
13  matrix: [ [ 0;0.01, 0.250;0.1 ], [ 0;0.01, 1;0.01 ], [ 0;0.01, 0.250;0.1 ] ]
_images/cross_section_2_mesh_unstructured_tetrahedral_bottom_global_2.png

Неструктурированная тетраэдральная сетка с Mesh.MeshSizeFromPoints = 0

Тогда мы могли бы использовать global parameters для управления размером сетки, например, с помощью Mesh.MeshSizeMax = 0,1:

 1metadata:
 2  run:
 3    factory: geo
 4    strategy:
 5      class: strategy.NoBoolean
 6    options:
 7      Mesh.MeshSizeFactor: 1
 8      Mesh.MeshSizeMin: 0
 9      Mesh.MeshSizeMax: 0.1
10      Mesh.MeshSizeFromPoints: 0
11data:
12  class: block.Matrix
13  matrix: [ [ 0, 0.250 ], [ 0, 1 ], [ 0, 0.250 ] ]
_images/cross_section_2_mesh_unstructured_tetrahedral_bottom_global_3.png

Неструктурированная сетка с Mesh.MeshSizeMax = 0.1

Для генерации всех блоков необходимо указать global parameters в main.yaml:

 1 metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6     options:
 7       Mesh.MeshSizeFactor: 1
 8       Mesh.MeshSizeMin: 0
 9       Mesh.MeshSizeMax: 0.1
10       Mesh.MeshSizeFromPoints: 0
11 data:
12   class: block.Block
13   do_register: 0
14   children: [
15     /bottom.yaml,
16     /top_1.yaml,
17     /top_2.yaml,
18     /top_3.yaml
19   ]
20   children_transforms: [
21     [ ],
22     [ [ 0, 0, 0.250 ] ],
23     [ [ 0.250, 0, 0.250 ] ],
24     [ [ 0.470, 0, 0.250 ] ]
25   ]
python -m gmsh_scripts main.yaml
_images/cross_section_2_mesh_unstructured_tetrahedral_main_global.png

Неструктурированная тетраэдральная сетка, управляемая global parameters

Неструктурированная Гексаэдральная

Предупреждение

Генерация гексаэдральной неструктурированной сетки является ` экспериментальной <https://gitlab.onelab.info/gmsh/gmsh/-/issues/1791>`_ так что не всегда создает качественную сетку, это зависит от сложности геометрии.

Параметры для неструктурированные гексадральной сетки задаются в metadata.run.options и должны иметь Recombine в своих названиях (см. опции gmsh)

Для создания неструктурированной гексаэдральной сетки, параметр `Mesh.SubdivisionAlgorithm должен быть больше, чем 1 (см. пример 11 по gmsh для дополнительной информации)

 1metadata:
 2  run:
 3    factory: geo
 4    strategy:
 5      class: strategy.NoBoolean
 6    options:
 7      Mesh.MeshSizeFactor: 1
 8      Mesh.MeshSizeMin: 0
 9      Mesh.MeshSizeMax: 0.1
10      Mesh.MeshSizeFromPoints: 0
11      Mesh.SubdivisionAlgorithm: 2
12data:
13  class: block.Matrix
14  matrix: [ [ 0, 0.250 ], [ 0, 1 ], [ 0, 0.250 ] ]
python -m gmsh_scripts bottom.yaml
_images/cross_section_2_mesh_unstructured_hexahedral_bottom_1.png

Неструктурированная гексаэдральная сетка bottom.yaml

Для создания неструктурированной гексаэдральной сетки из всех блоков добавьтпараметры в metadata main.yaml:

 1 metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6     options:
 7       Mesh.MeshSizeFactor: 1
 8       Mesh.MeshSizeMin: 0
 9       Mesh.MeshSizeMax: 0.1
10       Mesh.MeshSizeFromPoints: 0
11       Mesh.SubdivisionAlgorithm: 2
12 data:
13   class: block.Block
14   do_register: 0
15   children: [
16     /bottom.yaml,
17     /top_1.yaml,
18     /top_2.yaml,
19     /top_3.yaml
20   ]
21   children_transforms: [
22     [ ],
23     [ [ 0, 0, 0.250 ] ],
24     [ [ 0.250, 0, 0.250 ] ],
25     [ [ 0.470, 0, 0.250 ] ]
26   ]
python -m gmsh_scripts main.yaml
_images/cross_section_2_mesh_unstructured_hexahedral_main.png

Неструктурированная гексаэдральная сетка

Структурированная тетраэдральная

Для создания структурированной тетраэдральной сетки необходимо добавить третий параметр к точки в поле matrix с разделителем ;, например, в bottom.yaml:

1metadata:
2   run:
3     factory: geo
4     strategy:
5       class: strategy.NoBoolean
6
7data:
8  class: block.Matrix
9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8 ], [ 0;0.01, 0.250;0.1;16 ] ]

Третий аргумент должен быть установлен только для второй точки и указывает число узлов вдоль соответствующего направления. Например, 4 узлов по оси X, 8``узлы по Y и ``16 по Z.

python -m gmsh_scripts bottom.yaml
_images/cross_section_2_mesh_structured_tetrahedral_bottom_1.png

Структурированная тетраэдральная сетка блока BOTTOM

Можно отключить генерацию структурированной сетки, установив items_do_structure_map в 0 (1 по умолчанию) в data поле:

 1metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6
 7data:
 8  class: block.Matrix
 9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8 ], [ 0;0.01, 0.250;0.1;16 ] ]
10  items_do_structure_map: 0
_images/cross_section_2_mesh_structured_tetrahedral_bottom_2.png

Неструктурированная тетраэдральная сетка блока BOTTOM с items_do_structure_map = 0

Для создания структурированной тетраэдральной сетки со всеми блоками необходимо установить третий параметр в каждом из блоков и запустить main.yaml

Предупреждение

TOP блоки должны иметь одинаковое количество узлов по оси Y и Z

  • top_1.yaml

1 data:
2   class: block.Matrix
3   matrix: [ [ 0, 0.250;0.1;8 ], [ 0, 1;0.1;8 ], [ 0, 0.250;0.1;8 ] ]
  • top_2.yaml

1  data:
2    class: block.Matrix
3    matrix: [ [ 0, 0.220;0.1;8 ], [ 0, 1;0.1;8 ], [ 0, 0.250;0.1;8 ] ]
  • top_3.yaml

1 data:
2   class: block.Matrix
3   matrix: [ [ 0, 0.030;0.1;8 ], [ 0, 1;0.1;8 ], [ 0, 0.250;0.1;8 ] ]
  • bottom.yaml

1 data:
2   class: block.Matrix
3   matrix: [ [ 0, 0.250;0.1;8 ], [ 0, 1;0.1;8 ], [ 0, 0.250;0.1;8 ] ]
python -m gmsh_scripts main.yaml
_images/cross_section_2_mesh_structured_tetrahedral_main_1.png

Структурированная тетраэдральная сетка

Отключить генерацию структурированной сетки сразу для всех блоков можноустановив children_items_do_structure_map = [0, ..., количество дети] в родительском блоке, например, для main.yaml:

 1 metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6 data:
 7   class: block.Block
 8   do_register: 0
 9   children: [
10     /bottom.yaml,
11     /top_1.yaml,
12     /top_2.yaml,
13     /top_3.yaml
14   ]
15   children_transforms: [
16     [ ],
17     [ [ 0, 0, 0.250 ] ],
18     [ [ 0.250, 0, 0.250 ] ],
19     [ [ 0.470, 0, 0.250 ] ]
20   ]
21   children_items_do_structure_map: [0, 0, 0, 0]
_images/cross_section_2_mesh_structured_tetrahedral_main_2.png

Структурированная тетраэдральная сетка с отключенными``children_items_do_structure_map``

Структурированная гексаэдральная

Для создания структурированной гексаэдральной сетки можно выполнить те же шаги, что и для Структурированная тетраэдральная, но с items_do_quadrate_map = 1``(``0 по умолчанию) в поле data:

 1metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6
 7data:
 8  class: block.Matrix
 9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8 ], [ 0;0.01, 0.250;0.1;16 ] ]
10  items_do_quadrate_map: 1
python -m gmsh_scripts bottom.yaml
_images/cross_section_2_mesh_structured_hexahedral_bottom_1.png

Структурированная гексаэдральная сетка блока BOTTOM

Можно изменить положение узлов вдоль осей, используя один из двух методов:

  1. progression - увеличение/уменьшение расстояния между узлами от начальной точкидо конечной точки

  2. bump - увеличить/уменьшить расстояние между узлами от центра до точек

Чтобы использовать progression, мы должны указать 2 дополнительных подпараметра для третий параметр, разделенный ::

  1. Первый - 0 (который выбирает тип progression)

  2. Второй - это коэффициент progression - если коэффициент > 1расстояние будет увеличиваться от первой точки ко второй, иначе уменьшаться

Например, подпараметры progression 0:1.5 для оси Y:

 1metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6
 7data:
 8  class: block.Matrix
 9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8:0:1.5 ], [ 0;0.01, 0.250;0.1;16 ] ]
10  items_do_quadrate_map: 1
_images/cross_section_2_mesh_structured_hexahedral_bottom_progression_1.png

Структурированная гексаэдральная сетка с progression = 1.5

Например, подпараметры progression 0:0.75 для оси Y:

 1metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6
 7data:
 8  class: block.Matrix
 9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8:0:0.75 ], [ 0;0.01, 0.250;0.1;16 ] ]
10  items_do_quadrate_map: 1
_images/cross_section_2_mesh_structured_hexahedral_bottom_progression_2.png

Структурированная гексаэдральная сетка с progression = 0.75

Чтобы использовать bump, мы должны указать 2 дополнительных подпараметра в третий параметр, разделенный ::

  1. Первый - 1 (который выбирает тип bump)

  2. Вторым является коэффициент bump - если коэффициент > 1 расстояние будет увеличиваться от центра, иначе уменьшаться

Например, подпараметры bump 1:2.0 для оси Y:

 1metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6
 7data:
 8  class: block.Matrix
 9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8:1:2.0 ], [ 0;0.01, 0.250;0.1;16 ] ]
10  items_do_quadrate_map: 1
_images/cross_section_2_mesh_structured_hexahedral_bottom_bump_1.png

Структурированная гексаэдральная сетка с bump = 2.0

Например, подпараметры bump 1:0.5 для оси Y:

 1metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6
 7data:
 8  class: block.Matrix
 9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8:1:0.5 ], [ 0;0.01, 0.250;0.1;16 ] ]
10  items_do_quadrate_map: 1
_images/cross_section_2_mesh_structured_hexahedral_bottom_bump_2.png

Структурированная гексаэдральная сетка с bump = 0.5

Для создания структурированной гексаэдральной сетки всех блоков можно установить items_do_quadrate_map = 0 в каждом из блоков или установить children_items_do_quadrate_map = [0, ..., количество детей] в родительском блоке, например, для main.yaml:

 1 metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6 data:
 7   class: block.Block
 8   do_register: 0
 9   children: [
10     /bottom.yaml,
11     /top_1.yaml,
12     /top_2.yaml,
13     /top_3.yaml
14   ]
15   children_transforms: [
16     [ ],
17     [ [ 0, 0, 0.250 ] ],
18     [ [ 0.250, 0, 0.250 ] ],
19     [ [ 0.470, 0, 0.250 ] ]
20   ]
21   children_items_do_quadrate_map: [1, 1, 1, 1]
python -m gmsh_scripts main.yaml
_images/cross_section_2_mesh_structured_hexahedral_main.png

Структурированная гексаэдральная сетка

Зоны

Если мы хотим добавить имена объектам сетки (например, объемам или поверхностям) мы должны установить дополнительное поле items_zones в поле data

Например, мы можем добавить [ [ Volume, [ NX, X, NY, Y, NZ, Z ] ] ] в файл bottom.yaml, где:

  1. Volume - имя объема

  2. [ NX, X, NY, Y, NZ, Z ] - имена поверхностей:

    • NX - поверхность, направленная в направлении, противоположном оси X

    • X - поверхность, направленная в направлении оси X

    • NY - поверхность, направленная в направлении, противоположном оси Y

    • Y - поверхность, направленная в направлении оси Y

    • NZ - поверхность, направленная в направлении, противоположном оси Z

    • Z - поверхность, направленная в направлении оси Z

 1metadata:
 2   run:
 3     factory: geo
 4     strategy:
 5       class: strategy.NoBoolean
 6
 7data:
 8  class: block.Matrix
 9  matrix: [ [ 0;0.01, 0.250;0.1;4 ], [ 0;0.01, 1;0.1;8 ], [ 0;0.01, 0.250;0.1;16 ] ]
10  items_zone: [ [ Volume, [ NX, X, NY, Y, NZ, Z ] ] ]
11  items_do_quadrate_map: 1
_images/cross_section_2_mesh_structured_hexahedral_bottom_zones.png

Структурированная гексаэдральная сетка с зонами

Результат

Примечание

Мы должны назначить разные имена для нижних зон поверхностей TOP2 и TOP3, например, Top2NZ и Top3NZ соответственно

  • top_1.yaml

1data:
2  class: block.Matrix
3  matrix: [ [ 0;0.1, 0.250;0.1;8 ], [ 0;0.1, 1;0.1;8 ], [ 0;0.1, 0.250;0.1;8 ] ]
4  items_zone: [ [ Volume, [ NX, X, NY, Y, NZ, Z ] ] ]
  • top_2.yaml

1data:
2  class: block.Matrix
3  matrix: [ [ 0;0.1, 0.220;0.1;8 ], [ 0;0.1, 1;0.1;8 ], [ 0;.1, 0.250;0.1;8 ] ]
4  items_zone: [ [ Volume, [ NX, X, NY, Y, Top2NZ, Z ] ] ]
  • top_3.yaml

1data:
2  class: block.Matrix
3  matrix: [ [ 0;0.1, 0.030;0.1;8 ], [ 0;0.1, 1;0.1;8 ], [ 0;.1, 0.250;0.1;8 ] ]
4  items_zone: [ [ Volume, [ NX, X, NY, Y, Top3NZ, Z ] ] ]
  • bottom.yaml

1data:
2  class: block.Matrix
3  matrix: [ [ 0;.1, 0.250;.1;8 ], [ 0;.1, 1;.1;8 ], [ 0;.1, 0.250;.1;8 ] ]
4  items_zone: [ [ Volume, [ NX, X, NY, Y, NZ, Z ] ] ]
  • main.yaml

 1metadata:
 2  run:
 3    factory: geo
 4    strategy:
 5      class: strategy.NoBoolean
 6data:
 7  class: block.Block
 8  do_register: 0
 9  children: [
10    /bottom.yaml,
11    /top_1.yaml,
12    /top_2.yaml,
13    /top_3.yaml
14  ]
15  children_transforms: [
16    [ ],
17    [ [ 0, 0, 0.250 ] ],
18    [ [ 0.250, 0, 0.250 ] ],
19    [ [ 0.470, 0, 0.250 ] ]
20  ]
21  children_items_do_quadrate_map: [ 1, 1, 1, 1 ]
22  children_items_do_structure_map: [ 1, 1, 1, 1 ]
python -m gmsh_scripts main.yaml
_images/cross_section_2.png

Сетка