pyvale 2025.5.3__cp311-cp311-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyvale might be problematic. Click here for more details.

Files changed (174) hide show
  1. pyvale/__init__.py +89 -0
  2. pyvale/analyticmeshgen.py +102 -0
  3. pyvale/analyticsimdatafactory.py +91 -0
  4. pyvale/analyticsimdatagenerator.py +323 -0
  5. pyvale/blendercalibrationdata.py +15 -0
  6. pyvale/blenderlightdata.py +26 -0
  7. pyvale/blendermaterialdata.py +15 -0
  8. pyvale/blenderrenderdata.py +30 -0
  9. pyvale/blenderscene.py +488 -0
  10. pyvale/blendertools.py +420 -0
  11. pyvale/camera.py +146 -0
  12. pyvale/cameradata.py +69 -0
  13. pyvale/cameradata2d.py +84 -0
  14. pyvale/camerastereo.py +217 -0
  15. pyvale/cameratools.py +522 -0
  16. pyvale/cython/rastercyth.c +32211 -0
  17. pyvale/cython/rastercyth.cpython-311-aarch64-linux-musl.so +0 -0
  18. pyvale/cython/rastercyth.py +640 -0
  19. pyvale/data/__init__.py +5 -0
  20. pyvale/data/cal_target.tiff +0 -0
  21. pyvale/data/case00_HEX20_out.e +0 -0
  22. pyvale/data/case00_HEX27_out.e +0 -0
  23. pyvale/data/case00_HEX8_out.e +0 -0
  24. pyvale/data/case00_TET10_out.e +0 -0
  25. pyvale/data/case00_TET14_out.e +0 -0
  26. pyvale/data/case00_TET4_out.e +0 -0
  27. pyvale/data/case13_out.e +0 -0
  28. pyvale/data/case16_out.e +0 -0
  29. pyvale/data/case17_out.e +0 -0
  30. pyvale/data/case18_1_out.e +0 -0
  31. pyvale/data/case18_2_out.e +0 -0
  32. pyvale/data/case18_3_out.e +0 -0
  33. pyvale/data/case25_out.e +0 -0
  34. pyvale/data/case26_out.e +0 -0
  35. pyvale/data/optspeckle_2464x2056px_spec5px_8bit_gblur1px.tiff +0 -0
  36. pyvale/dataset.py +325 -0
  37. pyvale/errorcalculator.py +109 -0
  38. pyvale/errordriftcalc.py +146 -0
  39. pyvale/errorintegrator.py +336 -0
  40. pyvale/errorrand.py +607 -0
  41. pyvale/errorsyscalib.py +134 -0
  42. pyvale/errorsysdep.py +327 -0
  43. pyvale/errorsysfield.py +414 -0
  44. pyvale/errorsysindep.py +808 -0
  45. pyvale/examples/__init__.py +5 -0
  46. pyvale/examples/basics/ex1_1_basicscalars_therm2d.py +131 -0
  47. pyvale/examples/basics/ex1_2_sensormodel_therm2d.py +158 -0
  48. pyvale/examples/basics/ex1_3_customsens_therm3d.py +216 -0
  49. pyvale/examples/basics/ex1_4_basicerrors_therm3d.py +153 -0
  50. pyvale/examples/basics/ex1_5_fielderrs_therm3d.py +168 -0
  51. pyvale/examples/basics/ex1_6_caliberrs_therm2d.py +133 -0
  52. pyvale/examples/basics/ex1_7_spatavg_therm2d.py +123 -0
  53. pyvale/examples/basics/ex2_1_basicvectors_disp2d.py +112 -0
  54. pyvale/examples/basics/ex2_2_vectorsens_disp2d.py +111 -0
  55. pyvale/examples/basics/ex2_3_sensangle_disp2d.py +139 -0
  56. pyvale/examples/basics/ex2_4_chainfielderrs_disp2d.py +196 -0
  57. pyvale/examples/basics/ex2_5_vectorfields3d_disp3d.py +109 -0
  58. pyvale/examples/basics/ex3_1_basictensors_strain2d.py +114 -0
  59. pyvale/examples/basics/ex3_2_tensorsens2d_strain2d.py +111 -0
  60. pyvale/examples/basics/ex3_3_tensorsens3d_strain3d.py +182 -0
  61. pyvale/examples/basics/ex4_1_expsim2d_thermmech2d.py +171 -0
  62. pyvale/examples/basics/ex4_2_expsim3d_thermmech3d.py +252 -0
  63. pyvale/examples/genanalyticdata/ex1_1_scalarvisualisation.py +35 -0
  64. pyvale/examples/genanalyticdata/ex1_2_scalarcasebuild.py +43 -0
  65. pyvale/examples/genanalyticdata/ex2_1_analyticsensors.py +80 -0
  66. pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +79 -0
  67. pyvale/examples/renderblender/ex1_1_blenderscene.py +121 -0
  68. pyvale/examples/renderblender/ex1_2_blenderdeformed.py +119 -0
  69. pyvale/examples/renderblender/ex2_1_stereoscene.py +128 -0
  70. pyvale/examples/renderblender/ex2_2_stereodeformed.py +131 -0
  71. pyvale/examples/renderblender/ex3_1_blendercalibration.py +120 -0
  72. pyvale/examples/renderrasterisation/ex_rastenp.py +153 -0
  73. pyvale/examples/renderrasterisation/ex_rastercyth_oneframe.py +218 -0
  74. pyvale/examples/renderrasterisation/ex_rastercyth_static_cypara.py +187 -0
  75. pyvale/examples/renderrasterisation/ex_rastercyth_static_pypara.py +190 -0
  76. pyvale/examples/visualisation/ex1_1_plot_traces.py +102 -0
  77. pyvale/examples/visualisation/ex2_1_animate_sim.py +89 -0
  78. pyvale/experimentsimulator.py +175 -0
  79. pyvale/field.py +128 -0
  80. pyvale/fieldconverter.py +351 -0
  81. pyvale/fieldsampler.py +111 -0
  82. pyvale/fieldscalar.py +166 -0
  83. pyvale/fieldtensor.py +218 -0
  84. pyvale/fieldtransform.py +388 -0
  85. pyvale/fieldvector.py +213 -0
  86. pyvale/generatorsrandom.py +505 -0
  87. pyvale/imagedef2d.py +569 -0
  88. pyvale/integratorfactory.py +240 -0
  89. pyvale/integratorquadrature.py +217 -0
  90. pyvale/integratorrectangle.py +165 -0
  91. pyvale/integratorspatial.py +89 -0
  92. pyvale/integratortype.py +43 -0
  93. pyvale/output.py +17 -0
  94. pyvale/pyvaleexceptions.py +11 -0
  95. pyvale/raster.py +31 -0
  96. pyvale/rastercy.py +77 -0
  97. pyvale/rasternp.py +603 -0
  98. pyvale/rendermesh.py +147 -0
  99. pyvale/sensorarray.py +178 -0
  100. pyvale/sensorarrayfactory.py +196 -0
  101. pyvale/sensorarraypoint.py +278 -0
  102. pyvale/sensordata.py +71 -0
  103. pyvale/sensordescriptor.py +213 -0
  104. pyvale/sensortools.py +142 -0
  105. pyvale/simcases/case00_HEX20.i +242 -0
  106. pyvale/simcases/case00_HEX27.i +242 -0
  107. pyvale/simcases/case00_HEX8.i +242 -0
  108. pyvale/simcases/case00_TET10.i +242 -0
  109. pyvale/simcases/case00_TET14.i +242 -0
  110. pyvale/simcases/case00_TET4.i +242 -0
  111. pyvale/simcases/case01.i +101 -0
  112. pyvale/simcases/case02.i +156 -0
  113. pyvale/simcases/case03.i +136 -0
  114. pyvale/simcases/case04.i +181 -0
  115. pyvale/simcases/case05.i +234 -0
  116. pyvale/simcases/case06.i +305 -0
  117. pyvale/simcases/case07.geo +135 -0
  118. pyvale/simcases/case07.i +87 -0
  119. pyvale/simcases/case08.geo +144 -0
  120. pyvale/simcases/case08.i +153 -0
  121. pyvale/simcases/case09.geo +204 -0
  122. pyvale/simcases/case09.i +87 -0
  123. pyvale/simcases/case10.geo +204 -0
  124. pyvale/simcases/case10.i +257 -0
  125. pyvale/simcases/case11.geo +337 -0
  126. pyvale/simcases/case11.i +147 -0
  127. pyvale/simcases/case12.geo +388 -0
  128. pyvale/simcases/case12.i +329 -0
  129. pyvale/simcases/case13.i +140 -0
  130. pyvale/simcases/case14.i +159 -0
  131. pyvale/simcases/case15.geo +337 -0
  132. pyvale/simcases/case15.i +150 -0
  133. pyvale/simcases/case16.geo +391 -0
  134. pyvale/simcases/case16.i +357 -0
  135. pyvale/simcases/case17.geo +135 -0
  136. pyvale/simcases/case17.i +144 -0
  137. pyvale/simcases/case18.i +254 -0
  138. pyvale/simcases/case18_1.i +254 -0
  139. pyvale/simcases/case18_2.i +254 -0
  140. pyvale/simcases/case18_3.i +254 -0
  141. pyvale/simcases/case19.geo +252 -0
  142. pyvale/simcases/case19.i +99 -0
  143. pyvale/simcases/case20.geo +252 -0
  144. pyvale/simcases/case20.i +250 -0
  145. pyvale/simcases/case21.geo +74 -0
  146. pyvale/simcases/case21.i +155 -0
  147. pyvale/simcases/case22.geo +82 -0
  148. pyvale/simcases/case22.i +140 -0
  149. pyvale/simcases/case23.geo +164 -0
  150. pyvale/simcases/case23.i +140 -0
  151. pyvale/simcases/case24.geo +79 -0
  152. pyvale/simcases/case24.i +123 -0
  153. pyvale/simcases/case25.geo +82 -0
  154. pyvale/simcases/case25.i +140 -0
  155. pyvale/simcases/case26.geo +166 -0
  156. pyvale/simcases/case26.i +140 -0
  157. pyvale/simcases/run_1case.py +61 -0
  158. pyvale/simcases/run_all_cases.py +69 -0
  159. pyvale/simcases/run_build_case.py +64 -0
  160. pyvale/simcases/run_example_cases.py +69 -0
  161. pyvale/simtools.py +67 -0
  162. pyvale/visualexpplotter.py +191 -0
  163. pyvale/visualimagedef.py +74 -0
  164. pyvale/visualimages.py +76 -0
  165. pyvale/visualopts.py +493 -0
  166. pyvale/visualsimanimator.py +111 -0
  167. pyvale/visualsimsensors.py +318 -0
  168. pyvale/visualtools.py +136 -0
  169. pyvale/visualtraceplotter.py +142 -0
  170. pyvale-2025.5.3.dist-info/METADATA +144 -0
  171. pyvale-2025.5.3.dist-info/RECORD +174 -0
  172. pyvale-2025.5.3.dist-info/WHEEL +5 -0
  173. pyvale-2025.5.3.dist-info/licenses/LICENSE +21 -0
  174. pyvale-2025.5.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,257 @@
1
+ #-------------------------------------------------------------------------
2
+ # pyvale: gmsh,3Dstcgmsh,1mat,thermomechanical,steady,
3
+ #-------------------------------------------------------------------------
4
+
5
+ #-------------------------------------------------------------------------
6
+ #_* MOOSEHERDER VARIABLES - START
7
+
8
+ # Thermal Loads/BCs
9
+ coolantTemp = 100.0 # degC
10
+ heatTransCoeff = 125.0e3 # W.m^-2.K^-1
11
+ surfHeatFlux = 5.0e6 # W.m^-2
12
+
13
+ # Material Properties:
14
+ # Thermal Props:OFHC) Copper at 250degC
15
+ ss316LDensity = 8829.0 # kg.m^-3
16
+ ss316LThermCond = 384.0 # W.m^-1.K^-1
17
+ ss316LSpecHeat = 406.0 # J.kg^-1.K^-1
18
+
19
+ # Mechanical Props: OFHC Copper 250degC
20
+ ss316LEMod = 108e9 # Pa
21
+ ss316LPRatio = 0.33 # -
22
+
23
+ # Thermo-mechanical coupling
24
+ stressFreeTemp = 150 # degC
25
+ cuThermExp = 17.8e-6 # 1/degC
26
+
27
+ #** MOOSEHERDER VARIABLES - END
28
+ #-------------------------------------------------------------------------
29
+
30
+
31
+ [GlobalParams]
32
+ displacements = 'disp_x disp_y disp_z'
33
+ []
34
+
35
+ [Mesh]
36
+ type = FileMesh
37
+ file = 'case10.msh'
38
+ []
39
+
40
+ [Variables]
41
+ [temperature]
42
+ family = LAGRANGE
43
+ order = FIRST
44
+ initial_condition = ${coolantTemp}
45
+ []
46
+ []
47
+
48
+ [Kernels]
49
+ [heat_conduction]
50
+ type = HeatConduction
51
+ variable = temperature
52
+ []
53
+ []
54
+
55
+ [Modules/TensorMechanics/Master]
56
+ [all]
57
+ strain = SMALL # SMALL or FINITE
58
+ incremental = true
59
+ add_variables = true
60
+ material_output_family = MONOMIAL # MONOMIAL, LAGRANGE
61
+ material_output_order = FIRST # CONSTANT, FIRST, SECOND,
62
+ automatic_eigenstrain_names = true
63
+ generate_output = 'vonmises_stress strain_xx strain_xy strain_xz strain_yx strain_yy strain_yz strain_zx strain_zy strain_zz stress_xx stress_xy stress_xz stress_yx stress_yy stress_yz stress_zx stress_zy stress_zz max_principal_strain mid_principal_strain min_principal_strain'
64
+ []
65
+ []
66
+
67
+ [Materials]
68
+ [copper_thermal]
69
+ type = HeatConductionMaterial
70
+ thermal_conductivity = ${ss316LThermCond}
71
+ specific_heat = ${ss316LSpecHeat}
72
+ []
73
+ [copper_density]
74
+ type = GenericConstantMaterial
75
+ prop_names = 'density'
76
+ prop_values = ${ss316LDensity}
77
+ []
78
+ [copper_elasticity]
79
+ type = ComputeIsotropicElasticityTensor
80
+ youngs_modulus = ${ss316LEMod}
81
+ poissons_ratio = ${ss316LPRatio}
82
+ []
83
+ [copper_expansion]
84
+ type = ComputeThermalExpansionEigenstrain
85
+ temperature = temperature
86
+ stress_free_temperature = ${stressFreeTemp}
87
+ thermal_expansion_coeff = ${cuThermExp}
88
+ eigenstrain_name = thermal_expansion_eigenstrain
89
+ []
90
+
91
+ [stress]
92
+ type = ComputeFiniteStrainElasticStress # ComputeLinearElasticStress or ComputeFiniteStrainElasticStress
93
+ []
94
+ []
95
+
96
+ [BCs]
97
+ [heat_flux_out]
98
+ type = ConvectiveHeatFluxBC
99
+ variable = temperature
100
+ boundary = 'bc-pipe-htc'
101
+ T_infinity = ${coolantTemp}
102
+ heat_transfer_coefficient = ${heatTransCoeff}
103
+ []
104
+ [heat_flux_in]
105
+ type = NeumannBC
106
+ variable = temperature
107
+ boundary = 'bc-top-heatflux'
108
+ value = ${surfHeatFlux}
109
+ []
110
+
111
+ # Lock disp_y for base
112
+ # NOTE: if locking y on base need to comment all disp_y conditions below
113
+ [mech_bc_c_dispy]
114
+ type = DirichletBC
115
+ variable = disp_y
116
+ boundary = 'bc-base-disp'
117
+ value = 0.0
118
+ []
119
+
120
+ # Lock all disp DOFs at the center of the block
121
+ [mech_bc_c_dispx]
122
+ type = DirichletBC
123
+ variable = disp_x
124
+ boundary = 'bc-c-point-xyz-mech'
125
+ value = 0.0
126
+ []
127
+ #[mech_bc_c_dispy]
128
+ # type = DirichletBC
129
+ # variable = disp_y
130
+ # boundary = 'bc-c-point-xyz-mech'
131
+ # value = 0.0
132
+ #[]
133
+ [mech_bc_c_dispz]
134
+ type = DirichletBC
135
+ variable = disp_z
136
+ boundary = 'bc-c-point-xyz-mech'
137
+ value = 0.0
138
+ []
139
+
140
+ # Lock disp yz along the x (left-right) axis
141
+ #[mech_bc_l_dispy]
142
+ # type = DirichletBC
143
+ # variable = disp_y
144
+ # boundary = 'bc-l-point-yz-mech'
145
+ # value = 0.0
146
+ #[]
147
+ [mech_bc_l_dispz]
148
+ type = DirichletBC
149
+ variable = disp_z
150
+ boundary = 'bc-l-point-yz-mech'
151
+ value = 0.0
152
+ []
153
+ #[mech_bc_r_dispy]
154
+ # type = DirichletBC
155
+ # variable = disp_y
156
+ # boundary = 'bc-r-point-yz-mech'
157
+ # value = 0.0
158
+ #[]
159
+ [mech_bc_r_dispz]
160
+ type = DirichletBC
161
+ variable = disp_z
162
+ boundary = 'bc-r-point-yz-mech'
163
+ value = 0.0
164
+ []
165
+
166
+ # Lock disp xy along the z (front-back) axis
167
+ [mech_bc_f_dispx]
168
+ type = DirichletBC
169
+ variable = disp_x
170
+ boundary = 'bc-f-point-xy-mech'
171
+ value = 0.0
172
+ []
173
+ #[mech_bc_f_dispy]
174
+ # type = DirichletBC
175
+ # variable = disp_y
176
+ # boundary = 'bc-f-point-xy-mech'
177
+ # value = 0.0
178
+ #[]
179
+ [mech_bc_b_dispx]
180
+ type = DirichletBC
181
+ variable = disp_x
182
+ boundary = 'bc-b-point-xy-mech'
183
+ value = 0.0
184
+ []
185
+ #[mech_bc_b_dispy]
186
+ # type = DirichletBC
187
+ # variable = disp_y
188
+ # boundary = 'bc-b-point-xy-mech'
189
+ # value = 0.0
190
+ #[]
191
+ []
192
+
193
+ [Preconditioning]
194
+ [smp]
195
+ type = SMP
196
+ full = true
197
+ []
198
+ []
199
+
200
+ [Executioner]
201
+ type = Steady
202
+ solve_type = 'PJFNK'
203
+ petsc_options_iname = '-pc_type -pc_hypre_type'
204
+ petsc_options_value = 'hypre boomeramg'
205
+ #end_time= ${endTime}
206
+ #dt = ${timeStep}
207
+ []
208
+
209
+ [Postprocessors]
210
+ [temp_max]
211
+ type = NodalExtremeValue
212
+ variable = temperature
213
+ []
214
+ [temp_avg]
215
+ type = AverageNodalVariableValue
216
+ variable = temperature
217
+ []
218
+
219
+ [disp_x_max]
220
+ type = NodalExtremeValue
221
+ variable = disp_x
222
+ []
223
+ [disp_y_max]
224
+ type = NodalExtremeValue
225
+ variable = disp_y
226
+ []
227
+ [disp_z_max]
228
+ type = NodalExtremeValue
229
+ variable = disp_z
230
+ []
231
+
232
+ [strain_xx_max]
233
+ type = ElementExtremeValue
234
+ variable = strain_xx
235
+ []
236
+ [strain_yy_max]
237
+ type = ElementExtremeValue
238
+ variable = strain_yy
239
+ []
240
+ [strain_zz_max]
241
+ type = ElementExtremeValue
242
+ variable = strain_zz
243
+ []
244
+
245
+ #[strain_xx_avg]
246
+ # type = ElementAverageValue
247
+ # variable = strain_xx
248
+ #[]
249
+ #[strain_yy_avg]
250
+ # type = ElementAverageValue
251
+ # variable = strain_yy
252
+ #[]
253
+ []
254
+
255
+ [Outputs]
256
+ exodus = true
257
+ []
@@ -0,0 +1,337 @@
1
+ //==============================================================================
2
+ // Gmsh 3D Monoblock
3
+ // author: Lloyd Fletcher (scepticalrabbit)
4
+ //==============================================================================
5
+ SetFactory("OpenCASCADE");
6
+ General.Terminal = 0;
7
+
8
+ // View options: turns on/off which pieces of geometry we show
9
+ Geometry.Points = 0;
10
+ Geometry.Curves = 0;
11
+ Geometry.Surfaces = 0;
12
+ Geometry.Volumes = 0;
13
+
14
+ // View options: turns labels on and off for different types of geometry
15
+ Geometry.PointLabels = 0;
16
+ Geometry.CurveLabels = 0;
17
+ Geometry.SurfaceLabels = 0;
18
+ Geometry.VolumeLabels = 0;
19
+
20
+ //------------------------------------------------------------------------------
21
+ // Variable Definitions
22
+
23
+ //------------------------------------------------------------------------------
24
+ //_* MOOSEHERDER VARIABLES - START
25
+ file_name = "case11.msh";
26
+ num_threads = 7;
27
+
28
+ // Specified Geometry variables
29
+ pipe_rad_int = 6e-3;
30
+ pipe_thick = 1.5e-3;
31
+
32
+ interlayer_thick = 2e-3;
33
+
34
+ monoblock_depth = 12e-3;
35
+ monoblock_side = 3e-3;
36
+ monoblock_arm_height = 8e-3;
37
+
38
+ // Specified Mesh variables
39
+ base_divs = 1;
40
+ mesh_ref = 1; // Must be an integer greater than 0
41
+
42
+ //_* MOOSEHERDER VARIABLES - END
43
+ //------------------------------------------------------------------------------
44
+
45
+ // Calculated Geometry Variables
46
+ pipe_rad_ext = pipe_rad_int+pipe_thick;
47
+
48
+ interlayer_rad_int = pipe_rad_ext;
49
+ interlayer_rad_ext = interlayer_rad_int+interlayer_thick;
50
+
51
+ monoblock_width = 2*interlayer_rad_ext + 2*monoblock_side;
52
+ monoblock_height = monoblock_width + monoblock_arm_height;
53
+
54
+ pipe_cent_x = 0.0;
55
+ pipe_cent_y = interlayer_rad_ext + monoblock_side;
56
+
57
+ // Calculated Mesh Variables
58
+ pipe_sect_nodes = Round(mesh_ref*5); // Must be odd
59
+ pipe_rad_nodes = Round(mesh_ref*5);
60
+ interlayer_rad_nodes = Round(mesh_ref*5);
61
+ monoblock_side_nodes = Round(mesh_ref*5);
62
+ monoblock_arm_nodes = Round(mesh_ref*5);
63
+ monoblock_depth_nodes = Round(mesh_ref*2);
64
+ monoblock_width_nodes = Floor((pipe_sect_nodes-1)/2)+1;
65
+ /*
66
+ // This is a more reasonable mesh refinement for the monoblock but solve time
67
+ // is much longer
68
+ pipe_sect_nodes = Round(mesh_ref*11); // Must be odd
69
+ pipe_rad_nodes = Round(mesh_ref*7);
70
+ interlayer_rad_nodes = Round(mesh_ref*7);
71
+ monoblock_side_nodes = Round(mesh_ref*9);
72
+ monoblock_arm_nodes = Round(mesh_ref*11);
73
+ monoblock_depth_nodes = Round(mesh_ref*5);
74
+ monoblock_width_nodes = Floor((pipe_sect_nodes-1)/2)+1;
75
+ */
76
+
77
+ // Calculate approx element size by dividing the circumference
78
+ elem_size = 2*Pi*pipe_rad_int/(4*(pipe_sect_nodes-1));
79
+ tol = elem_size/4; // Used for selection tolerance of bounding boxes
80
+
81
+ //------------------------------------------------------------------------------
82
+ // Geometry Definition
83
+ s1 = news;
84
+ Rectangle(s1) =
85
+ {-monoblock_width/2,0.0,0.0,
86
+ monoblock_width/2,monoblock_width/2};
87
+
88
+ s2 = news;
89
+ Rectangle(s2) =
90
+ {-monoblock_width/2,monoblock_width/2,0.0,
91
+ monoblock_width/2,monoblock_width/2};
92
+
93
+ s3 = news;
94
+ Rectangle(s3) =
95
+ {0.0,monoblock_width/2,0.0,
96
+ monoblock_width/2,monoblock_width/2};
97
+
98
+ s4 = news;
99
+ Rectangle(s4) =
100
+ {0.0,0.0,0.0,
101
+ monoblock_width/2,monoblock_width/2};
102
+
103
+ sa1 = news;
104
+ Rectangle(sa1) =
105
+ {-monoblock_width/2,monoblock_width,0.0,
106
+ monoblock_width/2,monoblock_arm_height};
107
+
108
+ sa2 = news;
109
+ Rectangle(sa2) =
110
+ {0.0,monoblock_width,0.0,
111
+ monoblock_width/2,monoblock_arm_height};
112
+
113
+ BooleanFragments{ Surface{s1}; Delete; }{ Surface{s2,s3,s4,sa1,sa2}; Delete; }
114
+
115
+ pipe_block_surfs() = Surface In BoundingBox{
116
+ -monoblock_width/2-tol,-tol,-tol,
117
+ monoblock_width+tol,monoblock_width+tol,tol};
118
+
119
+ c2 = newc; Circle(c2) = {pipe_cent_x,pipe_cent_y,0.0,interlayer_rad_ext};
120
+ cl2 = newcl; Curve Loop(cl2) = {c2};
121
+ s6 = news; Plane Surface(s6) = {cl2};
122
+
123
+ c3 = newc; Circle(c3) = {pipe_cent_x,pipe_cent_y,0.0,pipe_rad_ext};
124
+ cl3 = newcl; Curve Loop(cl3) = {c3};
125
+ s7 = news; Plane Surface(s7) = {cl3};
126
+
127
+ c4 = newc; Circle(c4) = {pipe_cent_x,pipe_cent_y,0.0,pipe_rad_int};
128
+ cl4 = newcl; Curve Loop(cl4) = {c4};
129
+ s8 = news; Plane Surface(s8) = {cl4};
130
+
131
+ BooleanDifference{Surface{pipe_block_surfs(),s6,s7}; Delete;}
132
+ { Surface{s8}; Delete;}
133
+
134
+ //------------------------------------------------------------------------------
135
+ // Transfinite Line/Curve Meshing
136
+
137
+ cm1() = Curve In BoundingBox{
138
+ pipe_cent_x-interlayer_rad_ext-tol,pipe_cent_y-interlayer_rad_ext-tol,-tol,
139
+ pipe_cent_x+interlayer_rad_ext+tol,pipe_cent_y+interlayer_rad_ext+tol,+tol};
140
+
141
+ For ss In {0:#cm1()-1}
142
+ Transfinite Curve(cm1(ss)) = pipe_sect_nodes;
143
+ EndFor
144
+
145
+ cm1() = Curve In BoundingBox{
146
+ pipe_cent_x+pipe_rad_int-tol,pipe_cent_y-tol,-tol,
147
+ pipe_cent_x+pipe_rad_ext+tol,pipe_cent_y+tol,+tol};
148
+ Transfinite Curve(cm1(0)) = pipe_rad_nodes;
149
+
150
+ cm2() = Curve In BoundingBox{
151
+ pipe_cent_x-pipe_rad_ext-tol,pipe_cent_y-tol,-tol,
152
+ pipe_cent_x-pipe_rad_int+tol,pipe_cent_y+tol,+tol};
153
+ Transfinite Curve(cm2(0)) = pipe_rad_nodes;
154
+
155
+ cm3() = Curve In BoundingBox{
156
+ pipe_cent_x-tol,pipe_cent_y-pipe_rad_ext-tol,-tol,
157
+ pipe_cent_x+tol,pipe_cent_y-pipe_rad_int+tol,+tol};
158
+ Transfinite Curve(cm3(0)) = pipe_rad_nodes;
159
+
160
+ cm4() = Curve In BoundingBox{
161
+ pipe_cent_x-tol,pipe_cent_y+pipe_rad_int-tol,-tol,
162
+ pipe_cent_x+tol,pipe_cent_y+pipe_rad_ext+tol,+tol};
163
+ Transfinite Curve(cm4(0)) = pipe_rad_nodes;
164
+
165
+
166
+ cm1() = Curve In BoundingBox{
167
+ pipe_cent_x+interlayer_rad_int-tol,pipe_cent_y-tol,-tol,
168
+ pipe_cent_x+interlayer_rad_ext+tol,pipe_cent_y+tol,+tol};
169
+ Transfinite Curve(cm1(0)) = interlayer_rad_nodes;
170
+
171
+ cm2() = Curve In BoundingBox{
172
+ pipe_cent_x-interlayer_rad_ext-tol,pipe_cent_y-tol,-tol,
173
+ pipe_cent_x-interlayer_rad_int+tol,pipe_cent_y+tol,+tol};
174
+ Transfinite Curve(cm2(0)) = interlayer_rad_nodes;
175
+
176
+ cm3() = Curve In BoundingBox{
177
+ pipe_cent_x-tol,pipe_cent_y-interlayer_rad_ext-tol,-tol,
178
+ pipe_cent_x+tol,pipe_cent_y-interlayer_rad_int+tol,+tol};
179
+ Transfinite Curve(cm3(0)) = interlayer_rad_nodes;
180
+
181
+ cm4() = Curve In BoundingBox{
182
+ pipe_cent_x-tol,pipe_cent_y+interlayer_rad_int-tol,-tol,
183
+ pipe_cent_x+tol,pipe_cent_y+interlayer_rad_ext+tol,+tol};
184
+ Transfinite Curve(cm4(0)) = interlayer_rad_nodes;
185
+
186
+
187
+ cm1() = Curve In BoundingBox{
188
+ pipe_cent_x+interlayer_rad_ext-tol,pipe_cent_y-tol,-tol,
189
+ pipe_cent_x+monoblock_width/2+tol,pipe_cent_y+tol,+tol};
190
+ Transfinite Curve(cm1(0)) = monoblock_side_nodes;
191
+
192
+ cm2() = Curve In BoundingBox{
193
+ pipe_cent_x-monoblock_width/2-tol,pipe_cent_y-tol,-tol,
194
+ pipe_cent_x-interlayer_rad_ext+tol,pipe_cent_y+tol,+tol};
195
+ Transfinite Curve(cm2(0)) = monoblock_side_nodes;
196
+
197
+ cm3() = Curve In BoundingBox{
198
+ pipe_cent_x-tol,pipe_cent_y-monoblock_width/2-tol,-tol,
199
+ pipe_cent_x+tol,pipe_cent_y-interlayer_rad_ext+tol,+tol};
200
+ Transfinite Curve(cm3(0)) = monoblock_side_nodes;
201
+
202
+ cm4() = Curve In BoundingBox{
203
+ pipe_cent_x-tol,pipe_cent_y+interlayer_rad_ext-tol,-tol,
204
+ pipe_cent_x+tol,pipe_cent_y+monoblock_width/2+tol,+tol};
205
+ Transfinite Curve(cm4(0)) = monoblock_side_nodes;
206
+
207
+
208
+ cm1() = Curve In BoundingBox{
209
+ -monoblock_width/2-tol,monoblock_width-tol,-tol,
210
+ monoblock_width/2+tol,monoblock_width+monoblock_arm_height+tol,+tol};
211
+
212
+ For ss In {0:#cm1()-1}
213
+
214
+ Transfinite Curve(cm1(ss)) = monoblock_arm_nodes;
215
+ EndFor
216
+
217
+
218
+
219
+ cm1() = Curve In BoundingBox{
220
+ -monoblock_width/2-tol,-tol,-tol,
221
+ -monoblock_width/2+tol,monoblock_width+tol,+tol};
222
+
223
+ For ss In {0:#cm1()-1}
224
+ Transfinite Curve(cm1(ss)) = monoblock_width_nodes;
225
+ EndFor
226
+
227
+
228
+ cm2() = Curve In BoundingBox{
229
+ monoblock_width/2-tol,-tol,-tol,
230
+ monoblock_width/2+tol,monoblock_width+tol,+tol};
231
+
232
+ For ss In {0:#cm2()-1}
233
+ Transfinite Curve(cm2(ss)) = monoblock_width_nodes;
234
+ EndFor
235
+
236
+
237
+ // Mesh top, bottom and armour horizontal lines
238
+ cm3() = Curve In BoundingBox{
239
+ -monoblock_width/2-tol,-tol,-tol,
240
+ monoblock_width/2+tol,+tol,+tol};
241
+
242
+ For ss In {0:#cm3()-1}
243
+ Transfinite Curve(cm3(ss)) = monoblock_width_nodes;
244
+ EndFor
245
+
246
+
247
+ cm3() = Curve In BoundingBox{
248
+ -monoblock_width/2-tol,monoblock_width-tol,-tol,
249
+ monoblock_width/2+tol,monoblock_width+tol,+tol};
250
+
251
+ For ss In {0:#cm3()-1}
252
+ Transfinite Curve(cm3(ss)) = monoblock_width_nodes;
253
+ EndFor
254
+
255
+
256
+ cm4() = Curve In BoundingBox{
257
+ -monoblock_width/2-tol,monoblock_width+monoblock_arm_height+-tol,-tol,
258
+ monoblock_width/2+tol,monoblock_width+monoblock_arm_height+tol,+tol};
259
+
260
+ For ss In {0:#cm4()-1}
261
+ Transfinite Curve(cm4(ss)) = monoblock_width_nodes;
262
+ EndFor
263
+
264
+
265
+ //------------------------------------------------------------------------------
266
+ // Transfinite Surface Meshing
267
+
268
+ // Mesh the pipe and interlayer
269
+ sm1() = Surface In BoundingBox{
270
+ pipe_cent_x-interlayer_rad_ext-tol,pipe_cent_y-interlayer_rad_ext-tol,-tol,
271
+ pipe_cent_x+interlayer_rad_ext+tol,pipe_cent_y+interlayer_rad_ext+tol,+tol};
272
+
273
+ For ss In {0:#sm1()-1}
274
+ Transfinite Surface{sm1(ss)};
275
+ Recombine Surface{sm1(ss)};
276
+ EndFor
277
+
278
+ // Mesh the armour on top of the block
279
+ sm1() = Surface In BoundingBox{
280
+ -monoblock_width/2-tol,monoblock_width-tol,-tol,
281
+ monoblock_width/2+tol,monoblock_width+monoblock_arm_height+tol,+tol};
282
+
283
+ For ss In {0:#sm1()-1}
284
+ Transfinite Surface{sm1(ss)};
285
+ Recombine Surface{sm1(ss)};
286
+ EndFor
287
+
288
+ // Mesh the block around the interlayer
289
+ Transfinite Surface{22} = {15,16,17,13};
290
+ Recombine Surface{22};
291
+
292
+ Transfinite Surface{27} = {15,24,5,13};
293
+ Recombine Surface{27};
294
+
295
+ Transfinite Surface{30} = {24,5,28,27};
296
+ Recombine Surface{30};
297
+
298
+ Transfinite Surface{31} = {27,28,17,16};
299
+ Recombine Surface{31};
300
+
301
+ //------------------------------------------------------------------------------
302
+ // Extrude the surface mesh to 3D
303
+ Extrude{0.0,0.0,monoblock_depth}{
304
+ Surface{:}; Layers{monoblock_depth_nodes}; Recombine;
305
+ }
306
+
307
+ //------------------------------------------------------------------------------
308
+ // Physical Surfaces for Loads and Boundary Condition
309
+ Physical Surface("bc-top-heatflux") = {36,41};
310
+ Physical Surface("bc-pipe-heattransf") = {54,59,83,67};
311
+
312
+ //------------------------------------------------------------------------------
313
+ // Physical Volumes for Material Defs
314
+ Physical Volume("pipe-cucrzr") = {6,9,5,14};
315
+ Physical Volume("interlayer-cu") = {4,7,10,13};
316
+ Physical Volume("armour-w") = {1,2,8,11,3,12};
317
+
318
+ //------------------------------------------------------------------------------
319
+ // Global Mesh controls
320
+ Mesh.Algorithm = 6;
321
+ Mesh.Algorithm3D = 10;
322
+
323
+ General.NumThreads = num_threads;
324
+ Mesh.MaxNumThreads1D = num_threads;
325
+ Mesh.MaxNumThreads2D = num_threads;
326
+ Mesh.MaxNumThreads3D = num_threads;
327
+
328
+ Mesh.ElementOrder = 2;
329
+
330
+ Mesh 3;
331
+
332
+ //------------------------------------------------------------------------------
333
+ // Save and exit
334
+ Save Str(file_name);
335
+ Exit;
336
+
337
+