Commit 871abcd7 authored by Gautier Bureau's avatar Gautier Bureau
Browse files

#850 Script matlab added with examples.

parent be3aed1c
......@@ -27,7 +27,6 @@ Scripts/my_create_accessors.py
.svn*
.sconsign.dblite
debug
results
*.tmp
Untitled.xcworkspace
......@@ -70,96 +69,6 @@ Documentation/Notes/*/*.pdf
Documentation/Uml/Png
# Lua configuration file
Sources/ModelInstances/Heat/configuration/
Sources/ModelInstances/HeatForVerdandi/configuration/
Data/Lua/input_heat_ref.lua
Data/Lua/input_heat_with_observation.lua
Data/Lua/input_heat_1d_ref.lua
Data/Lua/input_reaction_diffusion_1D_FHN.lua
Data/Lua/input_reaction_diffusion_1D_MS.lua
Data/Lua/input_reaction_diffusion_2D_FHN.lua
Data/Lua/input_reaction_diffusion_2D_MS.lua
Data/Lua/input_reaction_diffusion_3D_MS.lua
Data/Fiber/Zygot_AtriaDbl_TeleSystol_8TetInVent_SurfSimuElec_angles.00000.scl
Data/Fiber/Zygot_AtriaDbl_TeleSystol_8TetInVent_SurfSimuElec_distance.00000.scl
Data/Fiber/Zygot_AtriaDbl_TeleSystol_8TetInVent_SurfSimuElec_fibers.00000.vct
Data/Fiber/Zygot_AtriaDbl_TeleSystol_8TetInVent_SurfSimuElec_reference.00000.scl
Data/Fiber/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_cmFibers_refbeforeInterp.00000.vct
Data/Fiber/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_mmDistance.00000.scl
Data/Fiber/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_mmFibers_refbeforeInterp.00000.vct
Data/Fiber/shell_square_2_tri_corrected_angles.scl
Data/Fiber/shell_square_2_tri_corrected_fibers.vct
Data/Fiber/square_2_tri_3D_corrected_angles.scl
Data/Fiber/square_2_tri_3D_corrected_fibers.vct
Data/Fiber/square_3D_corrected_angles.scl
Data/Fiber/square_3D_corrected_fibers.vct
Data/Fiber/square_tri_1x1_N100_corrected_fibers_at_zero.vct
Data/Fiber/square_tri_1x1_N100_fibers_at_zero.vct
Data/Fiber/square_tri_1x1_N200_corrected_fibers_at_zero.vct
Data/Fiber/square_tri_1x1_N700_fibers_at_zero.vct
Data/Fiber/ventriVol150Fib.vct
Data/Fiber/ventriVol300Fib.vct
Data/Fiber/ventriVol300Fib_mm.vct
Data/Fiber/ventriVol300_homog_fibers.bb
Data/Fiber/ventriVol300_homog_fibers.vct
Data/Lua/demo_input_bidomain.lua
Data/Lua/demo_input_bidomain_2D.lua
Data/Lua/demo_input_bidomain_new.lua
Data/Lua/demo_input_bidomain_test.lua
Data/Lua/demo_input_bidomain_ventricles_test.lua
Data/Lua/demo_input_cylinder.lua
Data/Lua/demo_input_reaction_diffusion_2D_FHN_new.lua
Data/Lua/demo_input_reaction_diffusion_2D_FN.lua
Data/Lua/demo_input_rivlin_cube_hexahedra_2.lua
Data/Lua/input_heat.lua
Data/Lua/input_reaction_diffusion_1D_MS_test.lua
Data/Lua/input_rivlin_heart.lua
Data/Lua/rivlin_cube_hexahedra.lua
Data/Mesh/Zygot_AtriaDbl_TeleSystol_8TetInVent_SurfSimuElec_cm.mesh
Data/Mesh/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_cm.mesh
Data/Mesh/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_cm_label_tau_close.geo
Data/Mesh/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_cm_label_tau_close.mesh
Data/Mesh/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_cm_label_tau_close_elements.mesh
Data/Mesh/Zygot_Vent_TeleSystol_6Tet_SurfElecSimu_VolVRVL_mm.mesh
Data/Mesh/bar_1D_1D_L1_N2_Ensight.geo
Data/Mesh/bar_1D_L1_N10000_Ensight.geo
Data/Mesh/bar_2_domain.mesh
Data/Mesh/bar_2_domain_2.mesh
Data/Mesh/bar_eight_tri_corrected.mesh
Data/Mesh/bar_four_quad_corrected.mesh
Data/Mesh/bar_one_quad.mesh
Data/Mesh/bar_one_tri_corrected.mesh
Data/Mesh/bar_two_tri_corrected.mesh
Data/Mesh/cube6Tet.mesh
Data/Mesh/cylinder_test_corrected.mesh
Data/Mesh/equiTet.mesh
Data/Mesh/heat_bar_freefem.mesh
Data/Mesh/oneTet.mesh
Data/Mesh/reaction_diffusion_2D_test.mesh
Data/Mesh/reaction_diffusion_2D_tri_20x20.mesh
Data/Mesh/reaction_diffusion_2D_tri_3_domains_corrected.mesh
Data/Mesh/reaction_diffusion_2D_tri_corrected.mesh
Data/Mesh/reaction_diffusion_2_domain_20x20_101x101_corrected.mesh
Data/Mesh/reaction_diffusion_2_domain_20x20_101x101_good_orientation_corrected.mesh
Data/Mesh/reaction_diffusion_2_domain_corrected.mesh
Data/Mesh/rivlin_cube_tetra_label_heartlab_6_tetra_corrected_changed_orientation.mesh
Data/Mesh/rivlin_tetra_cube_tetra_corrected.mesh
Data/Mesh/shell_square_2_tri_corrected.mesh
Data/Mesh/square_2_tri_3D_corrected.geo
Data/Mesh/square_2_tri_3D_corrected.mesh
Data/Mesh/square_2_tri_3D_test_corrected.mesh
Data/Mesh/square_3D_corrected.mesh
Data/Mesh/square_tri_1x1_N100.mesh
Data/Mesh/square_tri_1x1_N100_corrected.mesh
Data/Mesh/square_tri_1x1_N10_corrected.mesh
Data/Mesh/square_tri_1x1_N200.mesh
Data/Mesh/square_tri_1x1_N700.mesh
Data/Mesh/square_tri_1x1_N700_corrected.mesh
Data/Mesh/square_tri_corrected.mesh
Data/Mesh/square_tria_4kv.mesh
Data/Mesh/ventriVol150.mesh
Data/Mesh/ventriVol300.mesh
Data/Mesh/ventriVol300_mm.mesh
# Typical model instance used to check XCode templates.
......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Command line below creates the file bar_1D_L1_N10.geo of a mesh of length 1m with 10 points of discretization.
# What is important is that the points are numbered in an order (the natural one) such that HappyHeart will not renumbered them.
# It is usefull to test 1D Model and get in the hhdata files a solution that you can either load in matlab or
# plot in pgfplot with ease as no renumbering is due.
# Command line : python 1D_Ensight_Mesh.py bar 1 10
import sys, re, os
name = sys.argv[1]
length = sys.argv[2]
Nx = sys.argv[3]
dx = float(length)/(float(Nx)-1)
mesh_name = name + "_1D_L" + length + "_N" + Nx
ensight_file = open(mesh_name + "_Ensight.geo", "w")
ensight_file.write("Geometry file\n")
ensight_file.write("Geometry file\n")
ensight_file.write("node id assign\n")
ensight_file.write("element id assign\n")
ensight_file.write("coordinates\n")
chars = list(str(Nx))
space = " " * (7 - len(chars) + 1)
ensight_file.write(space + Nx + "\n")
x = 0.
for i in range (0, int(Nx)):
ensight_file.write(" %.5e %.5e %.5e\n" % (x + i*dx, 0., 0.))
ensight_file.write("part 1\n")
ensight_file.write("MeshLabel_1\n")
ensight_file.write("point\n")
ensight_file.write(" 1\n")
ensight_file.write(" 1\n")
ensight_file.write("part 2\n")
ensight_file.write("MeshLabel_2\n")
ensight_file.write("point\n")
ensight_file.write(" 1\n")
chars = list(str(Nx))
space = " " * (7 - len(chars) + 1)
ensight_file.write(space + str(Nx) + "\n")
ensight_file.write("part 3\n")
ensight_file.write("MeshLabel_3\n")
ensight_file.write("bar2\n")
chars = list(str(int(Nx)-1))
space = " " * (7 - len(chars) + 1)
ensight_file.write(space + str((int(Nx)-1)) + "\n")
for i in range (1, int(Nx)):
chars1 = list(str(i))
chars2 = list(str(i+1))
space1 = " " * (7 - len(chars1) + 1)
space2 = " " * (7 - len(chars2) + 1)
ensight_file.write(space1 + str(i) + space2 + str(i+1) + "\n")
\ No newline at end of file
function indices_out = CreateIndicesOutHappyHeartToMatlab(interfaces_indices, dof_infos_indices, dimension)
nDof = length(dof_infos_indices);
nVertex = length(interfaces_indices);
indices_out = zeros(nDof, 1);
for i=0:(nVertex-1)
for j=0:(dimension-1)
vertex_index = dof_infos_indices(i*dimension + j + 1);
%vertex_index
%interfaces_indices(vertex_index + 1)
%interfaces_indices(vertex_index+ 1)*dimension + j
indices_out(i*dimension + j + 1) = interfaces_indices(vertex_index+ 1)*dimension + j - dimension;
end
end
end
\ No newline at end of file
'load_example.m' is an example of how to load matrices, vectors and parameters that you can create with HappyHeart.
For obvious reasons HappyHeart should be run in Sequential.
Matrix file 'matrix.m' can be created within HappyHeart with:
matrix.View(MpiHappyHeart(), "PATH/matrix.m", __FILE__, __LINE__, PETSC_VIEWER_ASCII_MATLAB);
Vector file 'vector.hhdata' can be created within HappyHeart with:
vector.Print<MpiScale::processor_wise>(MpiHappyHeart(), "PATH/vector.hhdata", __FILE__, __LINE__);
ScalarParameterAtQuadraturePoint file 'scalar_parameter_at_quadrature_point_parameter.dat' can be created within HappyHeart with:
GetParameter().Write("PATH/scalar_parameter_at_quadrature_point_parameter.dat");
'dofs_bc.dat' is a file containing the indices of the Boundary Condition in HappyHeart (carefull it is HappyHeart numbering and not the original mesh one). I can be created within HappyHeart with (Here for an example with the displacement unknown)
const auto& displacement_numbering_subset = GetDisplacementNumberingSubset();
const auto& dirichlet_bc_list = GetEssentialBoundaryConditionList();
std::vector<unsigned int> dofs_bc;
for (const auto& dirichlet_bc_ptr : dirichlet_bc_list)
{
assert(!(!dirichlet_bc_ptr));
const auto& dirichlet_bc = *dirichlet_bc_ptr;
const auto& dof_list = dirichlet_bc.GetDofList();
int unsigned size = static_cast<unsigned int>(dof_list.size());
for (unsigned int i = 0 ; i < size ; ++i)
dofs_bc.push_back(dof_list[i]->GetProcessorWiseOrGhostIndex(displacement_numbering_subset));
}
std::ofstream outputFile ("PATH/dofs_bc.dat");
if (outputFile.is_open())
{
for (unsigned int i = 0 ; i < dofs_bc.size() ; ++i)
{
outputFile << dofs_bc[i] << std::endl;
}
outputFile.close();
}
Energy file can be created in the same way as it is done in CardiacMechanicsPrestress.
Ndof (processor_wise) = 144
# First column: program-wise index.
# Second column: processor-wise index.
# Third column: the interface upon which the dof is located. Look at the interface file in same directory to relate it to the initial mesh.
# Fourth column: unknown and component involved.
# Fifth column: shape function label.
0;0;Vertex 1;solid_displacement 0;P1
1;1;Vertex 1;solid_displacement 1;P1
2;2;Vertex 1;solid_displacement 2;P1
3;3;Vertex 24;solid_displacement 0;P1
4;4;Vertex 24;solid_displacement 1;P1
5;5;Vertex 24;solid_displacement 2;P1
6;6;Vertex 25;solid_displacement 0;P1
7;7;Vertex 25;solid_displacement 1;P1
8;8;Vertex 25;solid_displacement 2;P1
9;9;Vertex 26;solid_displacement 0;P1
10;10;Vertex 26;solid_displacement 1;P1
11;11;Vertex 26;solid_displacement 2;P1
12;12;Vertex 2;solid_displacement 0;P1
13;13;Vertex 2;solid_displacement 1;P1
14;14;Vertex 2;solid_displacement 2;P1
15;15;Vertex 27;solid_displacement 0;P1
16;16;Vertex 27;solid_displacement 1;P1
17;17;Vertex 27;solid_displacement 2;P1
18;18;Vertex 0;solid_displacement 0;P1
19;19;Vertex 0;solid_displacement 1;P1
20;20;Vertex 0;solid_displacement 2;P1
21;21;Vertex 3;solid_displacement 0;P1
22;22;Vertex 3;solid_displacement 1;P1
23;23;Vertex 3;solid_displacement 2;P1
24;24;Vertex 4;solid_displacement 0;P1
25;25;Vertex 4;solid_displacement 1;P1
26;26;Vertex 4;solid_displacement 2;P1
27;27;Vertex 28;solid_displacement 0;P1
28;28;Vertex 28;solid_displacement 1;P1
29;29;Vertex 28;solid_displacement 2;P1
30;30;Vertex 29;solid_displacement 0;P1
31;31;Vertex 29;solid_displacement 1;P1
32;32;Vertex 29;solid_displacement 2;P1
33;33;Vertex 5;solid_displacement 0;P1
34;34;Vertex 5;solid_displacement 1;P1
35;35;Vertex 5;solid_displacement 2;P1
36;36;Vertex 30;solid_displacement 0;P1
37;37;Vertex 30;solid_displacement 1;P1
38;38;Vertex 30;solid_displacement 2;P1
39;39;Vertex 31;solid_displacement 0;P1
40;40;Vertex 31;solid_displacement 1;P1
41;41;Vertex 31;solid_displacement 2;P1
42;42;Vertex 6;solid_displacement 0;P1
43;43;Vertex 6;solid_displacement 1;P1
44;44;Vertex 6;solid_displacement 2;P1
45;45;Vertex 7;solid_displacement 0;P1
46;46;Vertex 7;solid_displacement 1;P1
47;47;Vertex 7;solid_displacement 2;P1
48;48;Vertex 32;solid_displacement 0;P1
49;49;Vertex 32;solid_displacement 1;P1
50;50;Vertex 32;solid_displacement 2;P1
51;51;Vertex 33;solid_displacement 0;P1
52;52;Vertex 33;solid_displacement 1;P1
53;53;Vertex 33;solid_displacement 2;P1
54;54;Vertex 8;solid_displacement 0;P1
55;55;Vertex 8;solid_displacement 1;P1
56;56;Vertex 8;solid_displacement 2;P1
57;57;Vertex 9;solid_displacement 0;P1
58;58;Vertex 9;solid_displacement 1;P1
59;59;Vertex 9;solid_displacement 2;P1
60;60;Vertex 10;solid_displacement 0;P1
61;61;Vertex 10;solid_displacement 1;P1
62;62;Vertex 10;solid_displacement 2;P1
63;63;Vertex 34;solid_displacement 0;P1
64;64;Vertex 34;solid_displacement 1;P1
65;65;Vertex 34;solid_displacement 2;P1
66;66;Vertex 35;solid_displacement 0;P1
67;67;Vertex 35;solid_displacement 1;P1
68;68;Vertex 35;solid_displacement 2;P1
69;69;Vertex 11;solid_displacement 0;P1
70;70;Vertex 11;solid_displacement 1;P1
71;71;Vertex 11;solid_displacement 2;P1
72;72;Vertex 12;solid_displacement 0;P1
73;73;Vertex 12;solid_displacement 1;P1
74;74;Vertex 12;solid_displacement 2;P1
75;75;Vertex 36;solid_displacement 0;P1
76;76;Vertex 36;solid_displacement 1;P1
77;77;Vertex 36;solid_displacement 2;P1
78;78;Vertex 13;solid_displacement 0;P1
79;79;Vertex 13;solid_displacement 1;P1
80;80;Vertex 13;solid_displacement 2;P1
81;81;Vertex 37;solid_displacement 0;P1
82;82;Vertex 37;solid_displacement 1;P1
83;83;Vertex 37;solid_displacement 2;P1
84;84;Vertex 14;solid_displacement 0;P1
85;85;Vertex 14;solid_displacement 1;P1
86;86;Vertex 14;solid_displacement 2;P1
87;87;Vertex 38;solid_displacement 0;P1
88;88;Vertex 38;solid_displacement 1;P1
89;89;Vertex 38;solid_displacement 2;P1
90;90;Vertex 39;solid_displacement 0;P1
91;91;Vertex 39;solid_displacement 1;P1
92;92;Vertex 39;solid_displacement 2;P1
93;93;Vertex 15;solid_displacement 0;P1
94;94;Vertex 15;solid_displacement 1;P1
95;95;Vertex 15;solid_displacement 2;P1
96;96;Vertex 40;solid_displacement 0;P1
97;97;Vertex 40;solid_displacement 1;P1
98;98;Vertex 40;solid_displacement 2;P1
99;99;Vertex 16;solid_displacement 0;P1
100;100;Vertex 16;solid_displacement 1;P1
101;101;Vertex 16;solid_displacement 2;P1
102;102;Vertex 41;solid_displacement 0;P1
103;103;Vertex 41;solid_displacement 1;P1
104;104;Vertex 41;solid_displacement 2;P1
105;105;Vertex 17;solid_displacement 0;P1
106;106;Vertex 17;solid_displacement 1;P1
107;107;Vertex 17;solid_displacement 2;P1
108;108;Vertex 42;solid_displacement 0;P1
109;109;Vertex 42;solid_displacement 1;P1
110;110;Vertex 42;solid_displacement 2;P1
111;111;Vertex 18;solid_displacement 0;P1
112;112;Vertex 18;solid_displacement 1;P1
113;113;Vertex 18;solid_displacement 2;P1
114;114;Vertex 43;solid_displacement 0;P1
115;115;Vertex 43;solid_displacement 1;P1
116;116;Vertex 43;solid_displacement 2;P1
117;117;Vertex 19;solid_displacement 0;P1
118;118;Vertex 19;solid_displacement 1;P1
119;119;Vertex 19;solid_displacement 2;P1
120;120;Vertex 21;solid_displacement 0;P1
121;121;Vertex 21;solid_displacement 1;P1
122;122;Vertex 21;solid_displacement 2;P1
123;123;Vertex 44;solid_displacement 0;P1
124;124;Vertex 44;solid_displacement 1;P1
125;125;Vertex 44;solid_displacement 2;P1
126;126;Vertex 45;solid_displacement 0;P1
127;127;Vertex 45;solid_displacement 1;P1
128;128;Vertex 45;solid_displacement 2;P1
129;129;Vertex 46;solid_displacement 0;P1
130;130;Vertex 46;solid_displacement 1;P1
131;131;Vertex 46;solid_displacement 2;P1
132;132;Vertex 20;solid_displacement 0;P1
133;133;Vertex 20;solid_displacement 1;P1
134;134;Vertex 20;solid_displacement 2;P1
135;135;Vertex 47;solid_displacement 0;P1
136;136;Vertex 47;solid_displacement 1;P1
137;137;Vertex 47;solid_displacement 2;P1
138;138;Vertex 22;solid_displacement 0;P1
139;139;Vertex 22;solid_displacement 1;P1
140;140;Vertex 22;solid_displacement 2;P1
141;141;Vertex 23;solid_displacement 0;P1
142;142;Vertex 23;solid_displacement 1;P1
143;143;Vertex 23;solid_displacement 2;P1
#For each geometric interface, give the list of the Coords that delimits it. The index shown is the one from the original GeometricMeshRegion.
Vertex 0;[25]
Vertex 1;[29]
Vertex 2;[30]
Vertex 3;[26]
Vertex 4;[33]
Vertex 5;[34]
Vertex 6;[37]
Vertex 7;[38]
Vertex 8;[41]
Vertex 9;[42]
Vertex 10;[31]
Vertex 11;[27]
Vertex 12;[35]
Vertex 13;[39]
Vertex 14;[43]
Vertex 15;[32]
Vertex 16;[28]
Vertex 17;[36]
Vertex 18;[40]
Vertex 19;[44]
Vertex 20;[45]
Vertex 21;[48]
Vertex 22;[47]
Vertex 23;[46]
Vertex 24;[1]
Vertex 25;[6]
Vertex 26;[5]
Vertex 27;[2]
Vertex 28;[10]
Vertex 29;[9]
Vertex 30;[14]
Vertex 31;[13]
Vertex 32;[18]
Vertex 33;[17]
Vertex 34;[7]
Vertex 35;[3]
Vertex 36;[11]
Vertex 37;[15]
Vertex 38;[19]
Vertex 39;[8]
Vertex 40;[4]
Vertex 41;[12]
Vertex 42;[16]
Vertex 43;[20]
Vertex 44;[21]
Vertex 45;[23]
Vertex 46;[24]
Vertex 47;[22]
Edge 0;[25, 29]
Edge 1;[29, 30]
Edge 2;[25, 30]
Edge 3;[26, 30]
Edge 4;[25, 26]
Edge 5;[29, 33]
Edge 6;[33, 34]
Edge 7;[29, 34]
Edge 8;[30, 34]
Edge 9;[33, 37]
Edge 10;[37, 38]
Edge 11;[33, 38]
Edge 12;[34, 38]
Edge 13;[37, 41]
Edge 14;[41, 42]
Edge 15;[37, 42]
Edge 16;[38, 42]
Edge 17;[30, 31]
Edge 18;[26, 31]
Edge 19;[27, 31]
Edge 20;[26, 27]
Edge 21;[34, 35]
Edge 22;[30, 35]
Edge 23;[31, 35]
Edge 24;[38, 39]
Edge 25;[34, 39]
Edge 26;[35, 39]
Edge 27;[42, 43]
Edge 28;[38, 43]
Edge 29;[39, 43]
Edge 30;[31, 32]
Edge 31;[27, 32]
Edge 32;[28, 32]
Edge 33;[27, 28]
Edge 34;[35, 36]
Edge 35;[31, 36]
Edge 36;[32, 36]
Edge 37;[39, 40]
Edge 38;[35, 40]
Edge 39;[36, 40]
Edge 40;[43, 44]
Edge 41;[39, 44]
Edge 42;[40, 44]
Edge 43;[25, 28]
Edge 44;[25, 32]
Edge 45;[29, 32]
Edge 46;[29, 36]
Edge 47;[33, 36]
Edge 48;[33, 40]
Edge 49;[37, 40]
Edge 50;[37, 44]
Edge 51;[41, 44]
Edge 52;[45, 48]
Edge 53;[47, 48]
Edge 54;[45, 47]
Edge 55;[45, 46]
Edge 56;[46, 48]
Edge 57;[41, 45]
Edge 58;[41, 47]
Edge 59;[42, 47]
Edge 60;[42, 48]
Edge 61;[43, 48]
Edge 62;[43, 46]
Edge 63;[44, 46]
Edge 64;[41, 46]
Edge 65;[1, 6]
Edge 66;[5, 6]
Edge 67;[1, 5]
Edge 68;[1, 2]
Edge 69;[2, 6]
Edge 70;[5, 10]
Edge 71;[9, 10]
Edge 72;[5, 9]
Edge 73;[6, 10]
Edge 74;[9, 14]
Edge 75;[13, 14]
Edge 76;[9, 13]
Edge 77;[10, 14]
Edge 78;[13, 18]
Edge 79;[17, 18]
Edge 80;[13, 17]
Edge 81;[14, 18]
Edge 82;[2, 7]
Edge 83;[6, 7]
Edge 84;[2, 3]
Edge 85;[3, 7]
Edge 86;[6, 11]
Edge 87;[10, 11]
Edge 88;[7, 11]
Edge 89;[10, 15]
Edge 90;[14, 15]
Edge 91;[11, 15]
Edge 92;[14, 19]
Edge 93;[18, 19]
Edge 94;[15, 19]
Edge 95;[3, 8]
Edge 96;[7, 8]
Edge 97;[3, 4]
Edge 98;[4, 8]
Edge 99;[7, 12]
Edge 100;[11, 12]
Edge 101;[8, 12]
Edge 102;[11, 16]
Edge 103;[15, 16]
Edge 104;[12, 16]
Edge 105;[15, 20]
Edge 106;[19, 20]
Edge 107;[16, 20]
Edge 108;[1, 8]
Edge 109;[1, 4]
Edge 110;[5, 8]
Edge 111;[5, 12]
Edge 112;[9, 12]
Edge 113;[9, 16]
Edge 114;[13, 16]
Edge 115;[13, 20]
Edge 116;[17, 20]
Edge 117;[21, 23]
Edge 118;[23, 24]
Edge 119;[21, 24]
Edge 120;[22, 24]
Edge 121;[21, 22]
Edge 122;[17, 23]
Edge 123;[17, 21]
Edge 124;[18, 23]
Edge 125;[18, 24]
Edge 126;[19, 24]
Edge 127;[19, 22]
Edge 128;[20, 22]
Edge 129;[17, 22]
Edge 130;[2, 25]
Edge 131;[2, 26]
Edge 132;[1, 25]
Edge 133;[2, 27]
Edge 134;[3, 27]
Edge 135;[4, 27]
Edge 136;[4, 28]
Edge 137;[4, 25]
Edge 138;[1, 29]
Edge 139;[5, 29]
Edge 140;[6, 29]
Edge 141;[1, 30]
Edge 142;[6, 30]
Edge 143;[2, 30]
Edge 144;[5, 33]
Edge 145;[9, 33]
Edge 146;[10, 33]
Edge 147;[5, 34]
Edge 148;[10, 34]
Edge 149;[6, 34]
Edge 150;[13, 33]
Edge 151;[14, 33]
Edge 152;[13, 37]
Edge 153;[14, 37]
Edge 154;[14, 38]
Edge 155;[14, 34]
Edge 156;[17, 37]
Edge 157;[18, 37]
Edge 158;[17, 41]
Edge 159;[18, 41]
Edge 160;[18, 42]
Edge 161;[18, 38]
Edge 162;[2, 31]
Edge 163;[6, 31]
Edge 164;[7, 31]
Edge 165;[3, 31]
Edge 166;[6, 35]
Edge 167;[10, 35]