pyvale 2025.5.3__cp311-cp311-manylinux_2_17_x86_64.manylinux2014_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/__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-x86_64-linux-gnu.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 +175 -0
  172. pyvale-2025.5.3.dist-info/WHEEL +6 -0
  173. pyvale-2025.5.3.dist-info/licenses/LICENSE +21 -0
  174. pyvale-2025.5.3.dist-info/top_level.txt +1 -0
  175. pyvale.libs/libgomp-a34b3233.so.1.0.0 +0 -0
@@ -0,0 +1,181 @@
1
+ #-------------------------------------------------------------------------
2
+ # pyvale: simple,2Dplate,2mat,mech,steady,
3
+ #-------------------------------------------------------------------------
4
+
5
+ #-------------------------------------------------------------------------
6
+ #_* MOOSEHERDER VARIABLES - START
7
+
8
+ # Geometric Properties
9
+ lengX = 50e-3 # m
10
+ lengY = 100e-3 # m
11
+
12
+ # Mesh Properties
13
+ nElemX = 10
14
+ nElemY = 20
15
+ eType = QUAD8 # QUAD4 for 1st order, QUAD8 for 2nd order
16
+
17
+ # Mechanical Loads/BCs
18
+ topDisp = 0.1e-3 # m
19
+
20
+ # Material Properties:
21
+ # OFHC Copper 250degC
22
+ cuEMod= 108e9 # Pa
23
+ cuPRatio = 0.33 # -
24
+
25
+ # Tungsten at 600degC
26
+ wEMod = 387e9 # Pa
27
+ wPRatio = 0.29 # -
28
+
29
+ #** MOOSEHERDER VARIABLES - END
30
+ #-------------------------------------------------------------------------
31
+
32
+
33
+ [GlobalParams]
34
+ displacements = 'disp_x disp_y'
35
+ []
36
+
37
+ [Mesh]
38
+ [generated]
39
+ type = GeneratedMeshGenerator
40
+ dim = 2
41
+ nx = ${nElemX}
42
+ ny = ${nElemY}
43
+ xmax = ${lengX}
44
+ ymax = ${lengY}
45
+ elem_type = ${eType}
46
+ []
47
+
48
+ [block1]
49
+ type = SubdomainBoundingBoxGenerator
50
+ input = generated
51
+ block_id = 1
52
+ bottom_left = '0 0 0'
53
+ top_right = '${fparse lengX} ${fparse lengY/2} 0'
54
+ []
55
+ [block2]
56
+ type = SubdomainBoundingBoxGenerator
57
+ input = block1
58
+ block_id = 2
59
+ bottom_left = '0 ${fparse lengY/2} 0'
60
+ top_right = '${fparse lengX} ${fparse lengY} 0'
61
+ []
62
+ []
63
+
64
+ [Modules/TensorMechanics/Master]
65
+ [all]
66
+ strain = SMALL
67
+ incremental = true
68
+ add_variables = true
69
+ material_output_family = MONOMIAL # MONOMIAL, LAGRANGE
70
+ material_output_order = FIRST # CONSTANT, FIRST, SECOND,
71
+ generate_output = 'vonmises_stress stress_xx stress_yy stress_xy strain_xx strain_yy strain_xy max_principal_strain mid_principal_strain min_principal_strain'
72
+ []
73
+ []
74
+
75
+ [Materials]
76
+ [elasticity1]
77
+ type = ComputeIsotropicElasticityTensor
78
+ youngs_modulus = ${cuEMod}
79
+ poissons_ratio = ${cuPRatio}
80
+ block = 1
81
+ []
82
+ [elasticity2]
83
+ type = ComputeIsotropicElasticityTensor
84
+ youngs_modulus = ${wEMod}
85
+ poissons_ratio = ${wPRatio}
86
+ block = 2
87
+ []
88
+ [stress]
89
+ type = ComputeFiniteStrainElasticStress # ComputeLinearElasticStress
90
+ []
91
+ []
92
+
93
+ [BCs]
94
+ [bottom_x]
95
+ type = DirichletBC
96
+ variable = disp_x
97
+ boundary = 'bottom'
98
+ value = 0
99
+ []
100
+ [bottom_y]
101
+ type = DirichletBC
102
+ variable = disp_y
103
+ boundary = 'bottom'
104
+ value = 0
105
+ []
106
+ [top_x]
107
+ type = DirichletBC
108
+ variable = disp_x
109
+ boundary = 'top'
110
+ value = 0
111
+ []
112
+ [top_y]
113
+ type = DirichletBC
114
+ variable = disp_y
115
+ boundary = 'top'
116
+ value = ${topDisp}
117
+ []
118
+ []
119
+
120
+ [Preconditioning]
121
+ [SMP]
122
+ type = SMP
123
+ full = true
124
+ []
125
+ []
126
+
127
+ [Executioner]
128
+ type = Steady
129
+ solve_type = 'PJFNK'
130
+ petsc_options_iname = '-pc_type -pc_hypre_type'
131
+ petsc_options_value = 'hypre boomeramg'
132
+ #end_time= ${endTime}
133
+ #dt = ${timeStep}
134
+ []
135
+
136
+ [Postprocessors]
137
+ [react_y_bot]
138
+ type = SidesetReaction
139
+ direction = '0 1 0'
140
+ stress_tensor = stress
141
+ boundary = 'bottom'
142
+ []
143
+ [react_y_top]
144
+ type = SidesetReaction
145
+ direction = '0 1 0'
146
+ stress_tensor = stress
147
+ boundary = 'top'
148
+ []
149
+
150
+ [disp_y_max]
151
+ type = NodalExtremeValue
152
+ variable = disp_y
153
+ []
154
+ [disp_x_max]
155
+ type = NodalExtremeValue
156
+ variable = disp_x
157
+ []
158
+
159
+ [max_yy_stress]
160
+ type = ElementExtremeValue
161
+ variable = stress_yy
162
+ []
163
+
164
+ [strain_yy_avg]
165
+ type = ElementAverageValue
166
+ variable = strain_yy
167
+ []
168
+ [strain_xx_avg]
169
+ type = ElementAverageValue
170
+ variable = strain_xx
171
+ []
172
+
173
+ [stress_vm_max]
174
+ type = ElementExtremeValue
175
+ variable = vonmises_stress
176
+ []
177
+ []
178
+
179
+ [Outputs]
180
+ exodus = true
181
+ []
@@ -0,0 +1,234 @@
1
+ #-------------------------------------------------------------------------
2
+ # pyvale: simple,2Dplate,1mat,thermomechanical,steady
3
+ #-------------------------------------------------------------------------
4
+
5
+ #-------------------------------------------------------------------------
6
+ #_* MOOSEHERDER VARIABLES - START
7
+
8
+
9
+ # Geometric Properties
10
+ lengX = 100e-3 # m
11
+ lengY = 50e-3 # m
12
+
13
+ # Mesh Properties
14
+ nElemX = 20
15
+ nElemY = 10
16
+ eType = QUAD4 # QUAD4 for 1st order, QUAD8 for 2nd order
17
+
18
+ # Thermal Loads/BCs
19
+ coolantTemp = 20.0 # degC
20
+ heatTransCoeff = 125.0e3 # W.m^-2.K^-1
21
+ surfHeatFlux = 500.0e3 # W.m^-2
22
+
23
+ # Material Properties:
24
+ # Thermal Props:OFHC) Copper at 250degC
25
+ cuDensity = 8829.0 # kg.m^-3
26
+ cuThermCond = 384.0 # W.m^-1.K^-1
27
+ cuSpecHeat = 406.0 # J.kg^-1.K^-1
28
+
29
+ # Mechanical Props: OFHC Copper 250degC
30
+ cuEMod = 108e9 # Pa
31
+ cuPRatio = 0.33 # -
32
+
33
+ # Thermo-mechanical coupling
34
+ stressFreeTemp = 20 # degC
35
+ cuThermExp = 17.8e-6 # 1/degC
36
+
37
+ #** MOOSEHERDER VARIABLES - END
38
+ #-------------------------------------------------------------------------
39
+
40
+ # Selection tolerance for bounding box node selection
41
+ sTol = ${fparse lengX/(nElemX*4)}
42
+
43
+ [GlobalParams]
44
+ displacements = 'disp_x disp_y'
45
+ []
46
+
47
+ [Mesh]
48
+ [generated_mesh]
49
+ type = GeneratedMeshGenerator
50
+ dim = 2
51
+ nx = ${nElemX}
52
+ ny = ${nElemY}
53
+ xmax = ${lengX}
54
+ ymax = ${lengY}
55
+ elem_type = ${eType}
56
+ []
57
+
58
+ [node_bottom_left]
59
+ type = BoundingBoxNodeSetGenerator
60
+ input = generated_mesh
61
+ bottom_left = '${fparse 0-sTol}
62
+ ${fparse 0-sTol}
63
+ ${fparse 0-sTol}'
64
+ top_right = '${fparse 0+sTol}
65
+ ${fparse 0+sTol}
66
+ ${fparse 0+sTol}'
67
+ new_boundary = bottom_left_node
68
+ []
69
+ [node_top_left]
70
+ type = BoundingBoxNodeSetGenerator
71
+ input = node_bottom_left
72
+ bottom_left = '${fparse 0-sTol}
73
+ ${fparse lengY-sTol}
74
+ ${fparse 0-sTol}'
75
+ top_right = '${fparse 0+sTol}
76
+ ${fparse lengY+sTol}
77
+ ${fparse 0+sTol}'
78
+ new_boundary = top_left_node
79
+ []
80
+ [node_bottom_right]
81
+ type = BoundingBoxNodeSetGenerator
82
+ input = node_top_left
83
+ bottom_left = '${fparse lengX-sTol}
84
+ ${fparse 0-sTol}
85
+ ${fparse 0-sTol}'
86
+ top_right = '${fparse lengX+sTol}
87
+ ${fparse 0+sTol}
88
+ ${fparse 0+sTol}'
89
+ new_boundary = bottom_right_node
90
+ []
91
+ []
92
+
93
+ [Variables]
94
+ [temperature]
95
+ family = LAGRANGE
96
+ order = FIRST
97
+ initial_condition = ${coolantTemp}
98
+ []
99
+ []
100
+
101
+ [Kernels]
102
+ [heat_conduction]
103
+ type = HeatConduction
104
+ variable = temperature
105
+ []
106
+ []
107
+
108
+ [Modules/TensorMechanics/Master]
109
+ [all]
110
+ strain = SMALL # SMALL or FINITE
111
+ incremental = true
112
+ add_variables = true
113
+ material_output_family = MONOMIAL # MONOMIAL, LAGRANGE
114
+ material_output_order = FIRST # CONSTANT, FIRST, SECOND,
115
+ automatic_eigenstrain_names = true
116
+ 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'
117
+ []
118
+ []
119
+
120
+ [Materials]
121
+ [copper_thermal]
122
+ type = HeatConductionMaterial
123
+ thermal_conductivity = ${cuThermCond}
124
+ specific_heat = ${cuSpecHeat}
125
+ []
126
+ [copper_density]
127
+ type = GenericConstantMaterial
128
+ prop_names = 'density'
129
+ prop_values = ${cuDensity}
130
+ []
131
+ [copper_elasticity]
132
+ type = ComputeIsotropicElasticityTensor
133
+ youngs_modulus = ${cuEMod}
134
+ poissons_ratio = ${cuPRatio}
135
+ []
136
+ [copper_expansion]
137
+ type = ComputeThermalExpansionEigenstrain
138
+ temperature = temperature
139
+ stress_free_temperature = ${stressFreeTemp}
140
+ thermal_expansion_coeff = ${cuThermExp}
141
+ eigenstrain_name = thermal_expansion_eigenstrain
142
+ []
143
+ [stress]
144
+ type = ComputeFiniteStrainElasticStress # ComputeLinearElasticStress or ComputeFiniteStrainElasticStress
145
+ []
146
+ []
147
+
148
+ [BCs]
149
+ [heat_flux_out]
150
+ type = ConvectiveHeatFluxBC
151
+ variable = temperature
152
+ boundary = 'left'
153
+ T_infinity = ${coolantTemp}
154
+ heat_transfer_coefficient = ${heatTransCoeff}
155
+ []
156
+ [heat_flux_in]
157
+ type = NeumannBC
158
+ variable = temperature
159
+ boundary = 'right'
160
+ value = ${surfHeatFlux}
161
+ []
162
+
163
+ [left_disp_y]
164
+ type = DirichletBC
165
+ variable = disp_y
166
+ boundary = 'left'
167
+ value = 0.0
168
+ []
169
+ [left_disp_x]
170
+ type = DirichletBC
171
+ variable = disp_x
172
+ boundary = 'left'
173
+ value = 0.0
174
+ []
175
+ []
176
+
177
+ [Preconditioning]
178
+ [smp]
179
+ type = SMP
180
+ full = true
181
+ []
182
+ []
183
+
184
+ [Executioner]
185
+ type = Steady
186
+ solve_type = 'PJFNK'
187
+ petsc_options_iname = '-pc_type -pc_hypre_type'
188
+ petsc_options_value = 'hypre boomeramg'
189
+ #end_time= ${endTime}
190
+ #dt = ${timeStep}
191
+ []
192
+
193
+
194
+ [Postprocessors]
195
+ [temp_max]
196
+ type = NodalExtremeValue
197
+ variable = temperature
198
+ []
199
+ [temp_avg]
200
+ type = AverageNodalVariableValue
201
+ variable = temperature
202
+ []
203
+
204
+ [disp_x_max]
205
+ type = NodalExtremeValue
206
+ variable = disp_x
207
+ []
208
+ [disp_y_max]
209
+ type = NodalExtremeValue
210
+ variable = disp_y
211
+ []
212
+
213
+ [strain_xx_max]
214
+ type = ElementExtremeValue
215
+ variable = strain_xx
216
+ []
217
+ [strain_yy_max]
218
+ type = ElementExtremeValue
219
+ variable = strain_yy
220
+ []
221
+
222
+ [strain_xx_avg]
223
+ type = ElementAverageValue
224
+ variable = strain_xx
225
+ []
226
+ [strain_yy_avg]
227
+ type = ElementAverageValue
228
+ variable = strain_yy
229
+ []
230
+ []
231
+
232
+ [Outputs]
233
+ exodus = true
234
+ []
@@ -0,0 +1,305 @@
1
+ #-------------------------------------------------------------------------
2
+ # pyvale: simple,2Dplate,2mat,thermomechanical,steady
3
+ #-------------------------------------------------------------------------
4
+
5
+ #-------------------------------------------------------------------------
6
+ #_* MOOSEHERDER VARIABLES - START
7
+
8
+ # Geometric Properties
9
+ lengX = 100e-3 # m
10
+ lengY = 50e-3 # m
11
+
12
+ # Mesh Properties
13
+ nElemX = 20
14
+ nElemY = 10
15
+ eType = QUAD4 # QUAD4 for 1st order, QUAD8 for 2nd order
16
+
17
+ # Thermal Loads/BCs
18
+ uniformTemp = 100 # degC
19
+
20
+ # Material Properties:
21
+ # Thermal Props: Pure (OFHC) Copper at 250degC
22
+ cuDensity = 8829.0 # kg.m^-3
23
+ cuThermCond = 384.0 # W.m^-1.K^-1
24
+ cuSpecHeat = 406.0 # J.kg^-1.K^-1
25
+
26
+ # Thermal Props: Tungsten at 600degC
27
+ wDensity = 19150.0 # kg.m^-3
28
+ wThermCond = 127.0 # W.m^-1.K^-1
29
+ wSpecHeat = 147.0 # J.kg^-1.K^-1
30
+
31
+ # Mechanical Props: OFHC Copper at 250degC
32
+ cuEMod = 108e9 # Pa
33
+ cuPRatio = 0.33 # -
34
+
35
+ # Mechanical Props: Tungsten at 250degC
36
+ wEMod = 387e9 # Pa
37
+ wPRatio = 0.29 # -
38
+
39
+ # Thermo-mechanical coupling
40
+ stressFreeTemp = 20 # degC
41
+ cuThermExp = 17.8e-6 # 1/degC
42
+ wThermExp = 4.72e-6 # 1/degC
43
+
44
+ #** MOOSEHERDER VARIABLES - END
45
+ #-------------------------------------------------------------------------
46
+
47
+ # Selection tolerance for bounding box node selection
48
+ sTol = ${fparse lengX/(nElemX*4)}
49
+
50
+ [GlobalParams]
51
+ displacements = 'disp_x disp_y'
52
+ []
53
+
54
+ [Mesh]
55
+ [generated_mesh]
56
+ type = GeneratedMeshGenerator
57
+ dim = 2
58
+ nx = ${nElemX}
59
+ ny = ${nElemY}
60
+ xmax = ${lengX}
61
+ ymax = ${lengY}
62
+ elem_type = ${eType}
63
+ []
64
+
65
+ [block1]
66
+ type = SubdomainBoundingBoxGenerator
67
+ input = generated_mesh
68
+ block_id = 1
69
+ bottom_left = '0 0 0'
70
+ top_right = '${fparse lengX/2} ${fparse lengY} 0'
71
+ []
72
+ [block2]
73
+ type = SubdomainBoundingBoxGenerator
74
+ input = block1
75
+ block_id = 2
76
+ bottom_left = '${fparse lengX/2} 0 0'
77
+ top_right = '${fparse lengX} ${fparse lengY} 0'
78
+ []
79
+
80
+ [node_bottom_left]
81
+ type = BoundingBoxNodeSetGenerator
82
+ input = block2
83
+ bottom_left = '${fparse 0-sTol}
84
+ ${fparse 0-sTol}
85
+ ${fparse 0-sTol}'
86
+ top_right = '${fparse 0+sTol}
87
+ ${fparse 0+sTol}
88
+ ${fparse 0+sTol}'
89
+ new_boundary = bottom_left_node
90
+ []
91
+ [node_top_left]
92
+ type = BoundingBoxNodeSetGenerator
93
+ input = node_bottom_left
94
+ bottom_left = '${fparse 0-sTol}
95
+ ${fparse lengY-sTol}
96
+ ${fparse 0-sTol}'
97
+ top_right = '${fparse 0+sTol}
98
+ ${fparse lengY+sTol}
99
+ ${fparse 0+sTol}'
100
+ new_boundary = top_left_node
101
+ []
102
+ [node_bottom_right]
103
+ type = BoundingBoxNodeSetGenerator
104
+ input = node_top_left
105
+ bottom_left = '${fparse lengX-sTol}
106
+ ${fparse 0-sTol}
107
+ ${fparse 0-sTol}'
108
+ top_right = '${fparse lengX+sTol}
109
+ ${fparse 0+sTol}
110
+ ${fparse 0+sTol}'
111
+ new_boundary = bottom_right_node
112
+ []
113
+
114
+ [full_plate_nodeset]
115
+ type = BoundingBoxNodeSetGenerator
116
+ input = node_bottom_right
117
+ bottom_left = '${fparse 0-sTol}
118
+ ${fparse 0-sTol}
119
+ ${fparse 0-sTol}'
120
+ top_right = '${fparse lengX+sTol}
121
+ ${fparse lengY+sTol}
122
+ ${fparse 0+sTol}'
123
+ new_boundary = full_plate
124
+ []
125
+ []
126
+
127
+ [Variables]
128
+ [temperature]
129
+ family = LAGRANGE
130
+ order = FIRST
131
+ initial_condition = ${uniformTemp}
132
+ []
133
+ []
134
+
135
+ [Kernels]
136
+ [heat_conduction]
137
+ type = HeatConduction
138
+ variable = temperature
139
+ []
140
+ []
141
+
142
+ [Modules/TensorMechanics/Master]
143
+ [all]
144
+ strain = SMALL # SMALL or FINITE
145
+ incremental = true
146
+ add_variables = true
147
+ material_output_family = MONOMIAL # MONOMIAL, LAGRANGE
148
+ material_output_order = FIRST # CONSTANT, FIRST, SECOND,
149
+ automatic_eigenstrain_names = true
150
+ 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'
151
+ []
152
+ []
153
+
154
+ [Materials]
155
+ [copper_thermal]
156
+ type = HeatConductionMaterial
157
+ thermal_conductivity = ${cuThermCond}
158
+ specific_heat = ${cuSpecHeat}
159
+ block = 1
160
+ []
161
+ [copper_density]
162
+ type = GenericConstantMaterial
163
+ prop_names = 'density'
164
+ prop_values = ${cuDensity}
165
+ block = 1
166
+ []
167
+ [copper_elasticity]
168
+ type = ComputeIsotropicElasticityTensor
169
+ youngs_modulus = ${cuEMod}
170
+ poissons_ratio = ${cuPRatio}
171
+ block = 1
172
+ []
173
+ [copper_expansion]
174
+ type = ComputeThermalExpansionEigenstrain
175
+ temperature = temperature
176
+ stress_free_temperature = ${stressFreeTemp}
177
+ thermal_expansion_coeff = ${cuThermExp}
178
+ eigenstrain_name = thermal_expansion_eigenstrain
179
+ block = 1
180
+ []
181
+
182
+ [tungsten_thermal]
183
+ type = HeatConductionMaterial
184
+ thermal_conductivity = ${wThermCond}
185
+ specific_heat = ${wSpecHeat}
186
+ block = 2
187
+ []
188
+ [tungsten_density]
189
+ type = GenericConstantMaterial
190
+ prop_names = 'density'
191
+ prop_values = ${wDensity}
192
+ block = 2
193
+ []
194
+ [tungsten_elasticity]
195
+ type = ComputeIsotropicElasticityTensor
196
+ youngs_modulus = ${wEMod}
197
+ poissons_ratio = ${wPRatio}
198
+ block = 2
199
+ []
200
+ [tungsten_expansion]
201
+ type = ComputeThermalExpansionEigenstrain
202
+ temperature = temperature
203
+ stress_free_temperature = ${stressFreeTemp}
204
+ thermal_expansion_coeff = ${wThermExp}
205
+ eigenstrain_name = thermal_expansion_eigenstrain
206
+ block = 2
207
+ []
208
+
209
+ [stress]
210
+ type = ComputeFiniteStrainElasticStress # ComputeLinearElasticStress or ComputeFiniteStrainElasticStress
211
+ []
212
+ []
213
+
214
+ [BCs]
215
+ [uniform_temp]
216
+ type = DirichletBC
217
+ variable = temperature
218
+ boundary = 'full_plate'
219
+ value = ${uniformTemp}
220
+ []
221
+
222
+ [bottom_left_disp_x]
223
+ type = DirichletBC
224
+ variable = disp_x
225
+ boundary = 'bottom_left_node'
226
+ value = 0.0
227
+ []
228
+ [bottom_left_disp_y]
229
+ type = DirichletBC
230
+ variable = disp_y
231
+ boundary = 'bottom_left_node'
232
+ value = 0.0
233
+ []
234
+ [bottom_right_disp_y]
235
+ type = DirichletBC
236
+ variable = disp_y
237
+ boundary = 'bottom_right_node'
238
+ value = 0.0
239
+ []
240
+ [top_left_disp_x]
241
+ type = DirichletBC
242
+ variable = disp_x
243
+ boundary = 'top_left_node'
244
+ value = 0.0
245
+ []
246
+ []
247
+
248
+ [Preconditioning]
249
+ [smp]
250
+ type = SMP
251
+ full = true
252
+ []
253
+ []
254
+
255
+ [Executioner]
256
+ type = Steady
257
+ solve_type = 'PJFNK'
258
+ petsc_options_iname = '-pc_type -pc_hypre_type'
259
+ petsc_options_value = 'hypre boomeramg'
260
+ #end_time= ${endTime}
261
+ #dt = ${timeStep}
262
+ []
263
+
264
+
265
+ [Postprocessors]
266
+ [temp_max]
267
+ type = NodalExtremeValue
268
+ variable = temperature
269
+ []
270
+ [temp_avg]
271
+ type = AverageNodalVariableValue
272
+ variable = temperature
273
+ []
274
+
275
+ [disp_x_max]
276
+ type = NodalExtremeValue
277
+ variable = disp_x
278
+ []
279
+ [disp_y_max]
280
+ type = NodalExtremeValue
281
+ variable = disp_y
282
+ []
283
+
284
+ [strain_xx_max]
285
+ type = ElementExtremeValue
286
+ variable = strain_xx
287
+ []
288
+ [strain_yy_max]
289
+ type = ElementExtremeValue
290
+ variable = strain_yy
291
+ []
292
+
293
+ [strain_xx_avg]
294
+ type = ElementAverageValue
295
+ variable = strain_xx
296
+ []
297
+ [strain_yy_avg]
298
+ type = ElementAverageValue
299
+ variable = strain_yy
300
+ []
301
+ []
302
+
303
+ [Outputs]
304
+ exodus = true
305
+ []