pyvale 2025.5.3__cp311-cp311-macosx_13_0_x86_64.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 (175) hide show
  1. pyvale/.dylibs/libomp.dylib +0 -0
  2. pyvale/__init__.py +89 -0
  3. pyvale/analyticmeshgen.py +102 -0
  4. pyvale/analyticsimdatafactory.py +91 -0
  5. pyvale/analyticsimdatagenerator.py +323 -0
  6. pyvale/blendercalibrationdata.py +15 -0
  7. pyvale/blenderlightdata.py +26 -0
  8. pyvale/blendermaterialdata.py +15 -0
  9. pyvale/blenderrenderdata.py +30 -0
  10. pyvale/blenderscene.py +488 -0
  11. pyvale/blendertools.py +420 -0
  12. pyvale/camera.py +146 -0
  13. pyvale/cameradata.py +69 -0
  14. pyvale/cameradata2d.py +84 -0
  15. pyvale/camerastereo.py +217 -0
  16. pyvale/cameratools.py +522 -0
  17. pyvale/cython/rastercyth.c +32211 -0
  18. pyvale/cython/rastercyth.cpython-311-darwin.so +0 -0
  19. pyvale/cython/rastercyth.py +640 -0
  20. pyvale/data/__init__.py +5 -0
  21. pyvale/data/cal_target.tiff +0 -0
  22. pyvale/data/case00_HEX20_out.e +0 -0
  23. pyvale/data/case00_HEX27_out.e +0 -0
  24. pyvale/data/case00_HEX8_out.e +0 -0
  25. pyvale/data/case00_TET10_out.e +0 -0
  26. pyvale/data/case00_TET14_out.e +0 -0
  27. pyvale/data/case00_TET4_out.e +0 -0
  28. pyvale/data/case13_out.e +0 -0
  29. pyvale/data/case16_out.e +0 -0
  30. pyvale/data/case17_out.e +0 -0
  31. pyvale/data/case18_1_out.e +0 -0
  32. pyvale/data/case18_2_out.e +0 -0
  33. pyvale/data/case18_3_out.e +0 -0
  34. pyvale/data/case25_out.e +0 -0
  35. pyvale/data/case26_out.e +0 -0
  36. pyvale/data/optspeckle_2464x2056px_spec5px_8bit_gblur1px.tiff +0 -0
  37. pyvale/dataset.py +325 -0
  38. pyvale/errorcalculator.py +109 -0
  39. pyvale/errordriftcalc.py +146 -0
  40. pyvale/errorintegrator.py +336 -0
  41. pyvale/errorrand.py +607 -0
  42. pyvale/errorsyscalib.py +134 -0
  43. pyvale/errorsysdep.py +327 -0
  44. pyvale/errorsysfield.py +414 -0
  45. pyvale/errorsysindep.py +808 -0
  46. pyvale/examples/__init__.py +5 -0
  47. pyvale/examples/basics/ex1_1_basicscalars_therm2d.py +131 -0
  48. pyvale/examples/basics/ex1_2_sensormodel_therm2d.py +158 -0
  49. pyvale/examples/basics/ex1_3_customsens_therm3d.py +216 -0
  50. pyvale/examples/basics/ex1_4_basicerrors_therm3d.py +153 -0
  51. pyvale/examples/basics/ex1_5_fielderrs_therm3d.py +168 -0
  52. pyvale/examples/basics/ex1_6_caliberrs_therm2d.py +133 -0
  53. pyvale/examples/basics/ex1_7_spatavg_therm2d.py +123 -0
  54. pyvale/examples/basics/ex2_1_basicvectors_disp2d.py +112 -0
  55. pyvale/examples/basics/ex2_2_vectorsens_disp2d.py +111 -0
  56. pyvale/examples/basics/ex2_3_sensangle_disp2d.py +139 -0
  57. pyvale/examples/basics/ex2_4_chainfielderrs_disp2d.py +196 -0
  58. pyvale/examples/basics/ex2_5_vectorfields3d_disp3d.py +109 -0
  59. pyvale/examples/basics/ex3_1_basictensors_strain2d.py +114 -0
  60. pyvale/examples/basics/ex3_2_tensorsens2d_strain2d.py +111 -0
  61. pyvale/examples/basics/ex3_3_tensorsens3d_strain3d.py +182 -0
  62. pyvale/examples/basics/ex4_1_expsim2d_thermmech2d.py +171 -0
  63. pyvale/examples/basics/ex4_2_expsim3d_thermmech3d.py +252 -0
  64. pyvale/examples/genanalyticdata/ex1_1_scalarvisualisation.py +35 -0
  65. pyvale/examples/genanalyticdata/ex1_2_scalarcasebuild.py +43 -0
  66. pyvale/examples/genanalyticdata/ex2_1_analyticsensors.py +80 -0
  67. pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +79 -0
  68. pyvale/examples/renderblender/ex1_1_blenderscene.py +121 -0
  69. pyvale/examples/renderblender/ex1_2_blenderdeformed.py +119 -0
  70. pyvale/examples/renderblender/ex2_1_stereoscene.py +128 -0
  71. pyvale/examples/renderblender/ex2_2_stereodeformed.py +131 -0
  72. pyvale/examples/renderblender/ex3_1_blendercalibration.py +120 -0
  73. pyvale/examples/renderrasterisation/ex_rastenp.py +153 -0
  74. pyvale/examples/renderrasterisation/ex_rastercyth_oneframe.py +218 -0
  75. pyvale/examples/renderrasterisation/ex_rastercyth_static_cypara.py +187 -0
  76. pyvale/examples/renderrasterisation/ex_rastercyth_static_pypara.py +190 -0
  77. pyvale/examples/visualisation/ex1_1_plot_traces.py +102 -0
  78. pyvale/examples/visualisation/ex2_1_animate_sim.py +89 -0
  79. pyvale/experimentsimulator.py +175 -0
  80. pyvale/field.py +128 -0
  81. pyvale/fieldconverter.py +351 -0
  82. pyvale/fieldsampler.py +111 -0
  83. pyvale/fieldscalar.py +166 -0
  84. pyvale/fieldtensor.py +218 -0
  85. pyvale/fieldtransform.py +388 -0
  86. pyvale/fieldvector.py +213 -0
  87. pyvale/generatorsrandom.py +505 -0
  88. pyvale/imagedef2d.py +569 -0
  89. pyvale/integratorfactory.py +240 -0
  90. pyvale/integratorquadrature.py +217 -0
  91. pyvale/integratorrectangle.py +165 -0
  92. pyvale/integratorspatial.py +89 -0
  93. pyvale/integratortype.py +43 -0
  94. pyvale/output.py +17 -0
  95. pyvale/pyvaleexceptions.py +11 -0
  96. pyvale/raster.py +31 -0
  97. pyvale/rastercy.py +77 -0
  98. pyvale/rasternp.py +603 -0
  99. pyvale/rendermesh.py +147 -0
  100. pyvale/sensorarray.py +178 -0
  101. pyvale/sensorarrayfactory.py +196 -0
  102. pyvale/sensorarraypoint.py +278 -0
  103. pyvale/sensordata.py +71 -0
  104. pyvale/sensordescriptor.py +213 -0
  105. pyvale/sensortools.py +142 -0
  106. pyvale/simcases/case00_HEX20.i +242 -0
  107. pyvale/simcases/case00_HEX27.i +242 -0
  108. pyvale/simcases/case00_HEX8.i +242 -0
  109. pyvale/simcases/case00_TET10.i +242 -0
  110. pyvale/simcases/case00_TET14.i +242 -0
  111. pyvale/simcases/case00_TET4.i +242 -0
  112. pyvale/simcases/case01.i +101 -0
  113. pyvale/simcases/case02.i +156 -0
  114. pyvale/simcases/case03.i +136 -0
  115. pyvale/simcases/case04.i +181 -0
  116. pyvale/simcases/case05.i +234 -0
  117. pyvale/simcases/case06.i +305 -0
  118. pyvale/simcases/case07.geo +135 -0
  119. pyvale/simcases/case07.i +87 -0
  120. pyvale/simcases/case08.geo +144 -0
  121. pyvale/simcases/case08.i +153 -0
  122. pyvale/simcases/case09.geo +204 -0
  123. pyvale/simcases/case09.i +87 -0
  124. pyvale/simcases/case10.geo +204 -0
  125. pyvale/simcases/case10.i +257 -0
  126. pyvale/simcases/case11.geo +337 -0
  127. pyvale/simcases/case11.i +147 -0
  128. pyvale/simcases/case12.geo +388 -0
  129. pyvale/simcases/case12.i +329 -0
  130. pyvale/simcases/case13.i +140 -0
  131. pyvale/simcases/case14.i +159 -0
  132. pyvale/simcases/case15.geo +337 -0
  133. pyvale/simcases/case15.i +150 -0
  134. pyvale/simcases/case16.geo +391 -0
  135. pyvale/simcases/case16.i +357 -0
  136. pyvale/simcases/case17.geo +135 -0
  137. pyvale/simcases/case17.i +144 -0
  138. pyvale/simcases/case18.i +254 -0
  139. pyvale/simcases/case18_1.i +254 -0
  140. pyvale/simcases/case18_2.i +254 -0
  141. pyvale/simcases/case18_3.i +254 -0
  142. pyvale/simcases/case19.geo +252 -0
  143. pyvale/simcases/case19.i +99 -0
  144. pyvale/simcases/case20.geo +252 -0
  145. pyvale/simcases/case20.i +250 -0
  146. pyvale/simcases/case21.geo +74 -0
  147. pyvale/simcases/case21.i +155 -0
  148. pyvale/simcases/case22.geo +82 -0
  149. pyvale/simcases/case22.i +140 -0
  150. pyvale/simcases/case23.geo +164 -0
  151. pyvale/simcases/case23.i +140 -0
  152. pyvale/simcases/case24.geo +79 -0
  153. pyvale/simcases/case24.i +123 -0
  154. pyvale/simcases/case25.geo +82 -0
  155. pyvale/simcases/case25.i +140 -0
  156. pyvale/simcases/case26.geo +166 -0
  157. pyvale/simcases/case26.i +140 -0
  158. pyvale/simcases/run_1case.py +61 -0
  159. pyvale/simcases/run_all_cases.py +69 -0
  160. pyvale/simcases/run_build_case.py +64 -0
  161. pyvale/simcases/run_example_cases.py +69 -0
  162. pyvale/simtools.py +67 -0
  163. pyvale/visualexpplotter.py +191 -0
  164. pyvale/visualimagedef.py +74 -0
  165. pyvale/visualimages.py +76 -0
  166. pyvale/visualopts.py +493 -0
  167. pyvale/visualsimanimator.py +111 -0
  168. pyvale/visualsimsensors.py +318 -0
  169. pyvale/visualtools.py +136 -0
  170. pyvale/visualtraceplotter.py +142 -0
  171. pyvale-2025.5.3.dist-info/METADATA +144 -0
  172. pyvale-2025.5.3.dist-info/RECORD +175 -0
  173. pyvale-2025.5.3.dist-info/WHEEL +6 -0
  174. pyvale-2025.5.3.dist-info/licenses/LICENSE +21 -0
  175. pyvale-2025.5.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,147 @@
1
+ #-------------------------------------------------------------------------
2
+ # pyvale: gmsh,monoblock,3mat,thermal,steady,
3
+ #-------------------------------------------------------------------------
4
+
5
+ #-------------------------------------------------------------------------
6
+ #_* MOOSEHERDER VARIABLES - START
7
+
8
+ coolantTemp=100.0 # degC
9
+ heatTransCoeff=125.0e3 # W.m^-2.K^-1
10
+ surfHeatFlux=10.0e6 # W.m^-2
11
+
12
+ # Copper-Chromium-Zirconium pg.148 at 200degC
13
+ cucrzrDensity = 8816.0 # kg.m^-3
14
+ cucrzrThermCond = 343.0 # W.m^-1.K^-1
15
+ cucrzrSpecHeat = 407.0 # J.kg^-1.K^-1
16
+
17
+ # Pure Copper pg.134 at 250degC
18
+ cuDensity = 8829.0 # kg.m^-3
19
+ cuThermCond = 384.0 # W.m^-1.K^-1
20
+ cuSpecHeat = 406.0 # J.kg^-1.K^-1
21
+
22
+ # Tungsten pg.224 at 600degC
23
+ wDensity = 19150.0 # kg.m^-3
24
+ wThermCond = 127.0 # W.m^-1.K^-1
25
+ wSpecHeat = 147.0 # J.kg^-1.K^-1
26
+
27
+ # Mesh file string
28
+ mesh_file = 'case11.msh'
29
+
30
+ #** MOOSEHERDER VARIABLES - END
31
+ #-------------------------------------------------------------------------
32
+
33
+ [Mesh]
34
+ type = FileMesh
35
+ file = ${mesh_file}
36
+ []
37
+
38
+ [Variables]
39
+ [temperature]
40
+ family = LAGRANGE
41
+ order = SECOND
42
+ initial_condition = ${coolantTemp}
43
+ []
44
+ []
45
+
46
+ [Kernels]
47
+ [heat_conduction]
48
+ type = HeatConduction
49
+ variable = temperature
50
+ []
51
+ #[time_derivative]
52
+ # type = HeatConductionTimeDerivative
53
+ # variable = temperature
54
+ #[]
55
+ []
56
+
57
+ [Materials]
58
+ [cucrzr_thermal]
59
+ type = HeatConductionMaterial
60
+ thermal_conductivity = ${cucrzrThermCond}
61
+ specific_heat = ${cucrzrSpecHeat}
62
+ block = 'pipe-cucrzr'
63
+ []
64
+
65
+ [copper_thermal]
66
+ type = HeatConductionMaterial
67
+ thermal_conductivity = ${cuThermCond}
68
+ specific_heat = ${cuSpecHeat}
69
+ block = 'interlayer-cu'
70
+ []
71
+
72
+ [tungsten_thermal]
73
+ type = HeatConductionMaterial
74
+ thermal_conductivity = ${wThermCond}
75
+ specific_heat = ${wSpecHeat}
76
+ block = 'armour-w'
77
+ []
78
+
79
+ [cucrzr_density]
80
+ type = GenericConstantMaterial
81
+ prop_names = 'density'
82
+ prop_values = ${cucrzrDensity}
83
+ block = 'pipe-cucrzr'
84
+ []
85
+
86
+ [copper_density]
87
+ type = GenericConstantMaterial
88
+ prop_names = 'density'
89
+ prop_values = ${cuDensity}
90
+ block = 'interlayer-cu'
91
+ []
92
+
93
+ [tungsten_density]
94
+ type = GenericConstantMaterial
95
+ prop_names = 'density'
96
+ prop_values = ${wDensity}
97
+ block = 'armour-w'
98
+ []
99
+ []
100
+
101
+ [BCs]
102
+ [heat_flux_in]
103
+ type = NeumannBC
104
+ variable = temperature
105
+ boundary = 'bc-top-heatflux'
106
+ value = ${surfHeatFlux}
107
+ []
108
+
109
+ [heat_flux_out]
110
+ type = ConvectiveHeatFluxBC
111
+ variable = temperature
112
+ boundary = 'bc-pipe-heattransf'
113
+ T_infinity = ${coolantTemp}
114
+ heat_transfer_coefficient = ${heatTransCoeff}
115
+ []
116
+ []
117
+
118
+ [Preconditioning]
119
+ [smp]
120
+ type = SMP
121
+ full = true
122
+ []
123
+ []
124
+
125
+ [Executioner]
126
+ type = Steady
127
+ solve_type = 'PJFNK'
128
+ petsc_options_iname = '-pc_type -pc_hypre_type'
129
+ petsc_options_value = 'hypre boomeramg'
130
+ #end_time = ${endTime}
131
+ #dt = ${timeStep}
132
+ []
133
+
134
+ [Postprocessors]
135
+ [temp_max]
136
+ type = NodalExtremeValue
137
+ variable = temperature
138
+ []
139
+ [temp_avg]
140
+ type = AverageNodalVariableValue
141
+ variable = temperature
142
+ []
143
+ []
144
+
145
+ [Outputs]
146
+ exodus = true
147
+ []
@@ -0,0 +1,388 @@
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 = "case12.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*4);
60
+ // interlayer_rad_nodes = Round(mesh_ref*4);
61
+ // monoblock_side_nodes = Round(mesh_ref*5);
62
+ // monoblock_arm_nodes = Round(mesh_ref*5);
63
+ // monoblock_depth_nodes = Round(mesh_ref*3); // NOTE: this is half the depth!
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/2}{
304
+ Surface{:}; Layers{monoblock_depth_nodes}; Recombine;
305
+ }
306
+
307
+ es1() = Surface In BoundingBox{
308
+ -monoblock_width/2-tol,0.0-tol,monoblock_depth/2-tol,
309
+ monoblock_width/2+tol,monoblock_height+tol,monoblock_depth/2+tol};
310
+
311
+ Extrude{0.0,0.0,monoblock_depth/2}{
312
+ Surface{es1(0),es1(1),es1(2),es1(3),es1(4),es1(5),es1(6),es1(7),es1(8),es1(9),es1(10),es1(11),es1(12),es1(13)}; Layers{monoblock_depth_nodes}; Recombine;
313
+ }
314
+
315
+ //------------------------------------------------------------------------------
316
+ // Physical Surfaces for Loads and Boundary Condition
317
+
318
+ ps0() = Surface In BoundingBox{
319
+ -monoblock_width/2-tol,0.0-tol,0.0-tol,
320
+ monoblock_width/2+tol,0.0+tol,monoblock_depth+tol};
321
+ Physical Surface("bc-base-disp") = {ps0(0),ps0(1),ps0(2),ps0(3)};
322
+
323
+ ps1() = Surface In BoundingBox{
324
+ -monoblock_width/2-tol,monoblock_height-tol,0.0-tol,
325
+ monoblock_width/2+tol,monoblock_height+tol,monoblock_depth+tol};
326
+ Physical Surface("bc-top-heatflux") = {ps1(0),ps1(1),ps1(2),ps1(3)};
327
+
328
+ ps2() = Surface In BoundingBox{
329
+ -pipe_rad_int-tol,monoblock_width/2-pipe_rad_int-tol,0.0-tol,
330
+ pipe_rad_int+tol,monoblock_width/2+pipe_rad_int+tol,monoblock_depth+tol};
331
+ Physical Surface("bc-pipe-heattransf") = {ps2(0),ps2(1),ps2(2),ps2(3),ps2(4),ps2(5),ps2(6),ps2(7)};
332
+
333
+
334
+ // Physical points for applying mechanical BCs
335
+ // Center of the base of the block - lock all DOFs
336
+ pp0() = Point In BoundingBox{
337
+ -tol,-tol,monoblock_depth/2-tol,
338
+ +tol,+tol,monoblock_depth/2+tol};
339
+ Physical Point("bc-c-point-xyz-mech") = {pp0(0)};
340
+
341
+ // Left and right on the base center line
342
+ pp1() = Point In BoundingBox{
343
+ -monoblock_width/2-tol,-tol,monoblock_depth/2-tol,
344
+ -monoblock_width/2+tol,+tol,monoblock_depth/2+tol};
345
+ Physical Point("bc-l-point-yz-mech") = {pp1(0)};
346
+
347
+ pp2() = Point In BoundingBox{
348
+ monoblock_width/2-tol,-tol,monoblock_depth/2-tol,
349
+ monoblock_width/2+tol,+tol,monoblock_depth/2+tol};
350
+ Physical Point("bc-r-point-yz-mech") = {pp2(0)};
351
+
352
+ // Front and back on the base center line
353
+ pp3() = Point In BoundingBox{
354
+ -tol,-tol,monoblock_depth-tol,
355
+ +tol,+tol,monoblock_depth+tol};
356
+ Physical Point("bc-f-point-xy-mech") = {pp3(0)};
357
+
358
+ pp4() = Point In BoundingBox{
359
+ -tol,-tol,-tol,
360
+ +tol,+tol,+tol};
361
+ Physical Point("bc-b-point-xy-mech") = {pp4(0)};
362
+
363
+ //------------------------------------------------------------------------------
364
+ // Physical Volumes for Material Defs
365
+ Physical Volume("pipe-cucrzr") = {5,19,6,20,9,23,14,28};
366
+ Physical Volume("interlayer-cu") = {4,18,7,21,10,24,13,27};
367
+ Physical Volume("armour-w") = {3,17,8,22,25,11,12,26,1,15,2,16};
368
+
369
+ //------------------------------------------------------------------------------
370
+ // Global Mesh controls
371
+ Mesh.Algorithm = 6;
372
+ Mesh.Algorithm3D = 10;
373
+
374
+ General.NumThreads = num_threads;
375
+ Mesh.MaxNumThreads1D = num_threads;
376
+ Mesh.MaxNumThreads2D = num_threads;
377
+ Mesh.MaxNumThreads3D = num_threads;
378
+
379
+ Mesh.ElementOrder = 2;
380
+
381
+ Mesh 3;
382
+
383
+ //------------------------------------------------------------------------------
384
+ // Save and exit
385
+ Save Str(file_name);
386
+ Exit;
387
+
388
+