pyvale 2025.4.0__py3-none-any.whl → 2025.5.1__py3-none-any.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 (153) hide show
  1. pyvale/__init__.py +78 -64
  2. pyvale/analyticmeshgen.py +102 -0
  3. pyvale/{core/analyticsimdatafactory.py → analyticsimdatafactory.py} +44 -16
  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/{core/camera.py → camera.py} +15 -15
  12. pyvale/{core/cameradata.py → cameradata.py} +27 -22
  13. pyvale/{core/cameradata2d.py → cameradata2d.py} +8 -6
  14. pyvale/camerastereo.py +217 -0
  15. pyvale/{core/cameratools.py → cameratools.py} +220 -26
  16. pyvale/{core/cython → cython}/rastercyth.py +11 -7
  17. pyvale/data/__init__.py +5 -7
  18. pyvale/data/cal_target.tiff +0 -0
  19. pyvale/data/case00_HEX20_out.e +0 -0
  20. pyvale/data/case00_HEX27_out.e +0 -0
  21. pyvale/data/case00_HEX8_out.e +0 -0
  22. pyvale/data/case00_TET10_out.e +0 -0
  23. pyvale/data/case00_TET14_out.e +0 -0
  24. pyvale/data/case00_TET4_out.e +0 -0
  25. pyvale/{core/dataset.py → dataset.py} +91 -16
  26. pyvale/{core/errorcalculator.py → errorcalculator.py} +13 -16
  27. pyvale/{core/errordriftcalc.py → errordriftcalc.py} +14 -14
  28. pyvale/{core/errorintegrator.py → errorintegrator.py} +25 -28
  29. pyvale/{core/errorrand.py → errorrand.py} +39 -46
  30. pyvale/errorsyscalib.py +134 -0
  31. pyvale/{core/errorsysdep.py → errorsysdep.py} +25 -29
  32. pyvale/{core/errorsysfield.py → errorsysfield.py} +59 -52
  33. pyvale/{core/errorsysindep.py → errorsysindep.py} +85 -182
  34. pyvale/examples/__init__.py +5 -7
  35. pyvale/examples/basics/ex1_1_basicscalars_therm2d.py +131 -0
  36. pyvale/examples/basics/ex1_2_sensormodel_therm2d.py +158 -0
  37. pyvale/examples/basics/ex1_3_customsens_therm3d.py +216 -0
  38. pyvale/examples/basics/ex1_4_basicerrors_therm3d.py +153 -0
  39. pyvale/examples/basics/ex1_5_fielderrs_therm3d.py +168 -0
  40. pyvale/examples/basics/ex1_6_caliberrs_therm2d.py +133 -0
  41. pyvale/examples/basics/ex1_7_spatavg_therm2d.py +123 -0
  42. pyvale/examples/basics/ex2_1_basicvectors_disp2d.py +112 -0
  43. pyvale/examples/basics/ex2_2_vectorsens_disp2d.py +111 -0
  44. pyvale/examples/basics/ex2_3_sensangle_disp2d.py +139 -0
  45. pyvale/examples/basics/ex2_4_chainfielderrs_disp2d.py +196 -0
  46. pyvale/examples/basics/ex2_5_vectorfields3d_disp3d.py +109 -0
  47. pyvale/examples/basics/ex3_1_basictensors_strain2d.py +114 -0
  48. pyvale/examples/basics/ex3_2_tensorsens2d_strain2d.py +111 -0
  49. pyvale/examples/basics/ex3_3_tensorsens3d_strain3d.py +182 -0
  50. pyvale/examples/basics/ex4_1_expsim2d_thermmech2d.py +171 -0
  51. pyvale/examples/basics/ex4_2_expsim3d_thermmech3d.py +252 -0
  52. pyvale/examples/{analyticdatagen → genanalyticdata}/ex1_1_scalarvisualisation.py +6 -9
  53. pyvale/examples/{analyticdatagen → genanalyticdata}/ex1_2_scalarcasebuild.py +8 -11
  54. pyvale/examples/{analyticdatagen → genanalyticdata}/ex2_1_analyticsensors.py +9 -12
  55. pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +8 -15
  56. pyvale/examples/renderblender/ex1_1_blenderscene.py +121 -0
  57. pyvale/examples/renderblender/ex1_2_blenderdeformed.py +119 -0
  58. pyvale/examples/renderblender/ex2_1_stereoscene.py +128 -0
  59. pyvale/examples/renderblender/ex2_2_stereodeformed.py +131 -0
  60. pyvale/examples/renderblender/ex3_1_blendercalibration.py +120 -0
  61. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastenp.py +6 -7
  62. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_oneframe.py +5 -7
  63. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_static_cypara.py +6 -13
  64. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_static_pypara.py +9 -12
  65. pyvale/examples/{ex1_4_thermal2d.py → visualisation/ex1_1_plot_traces.py} +33 -20
  66. pyvale/examples/{features/ex_animation_tools_3dmonoblock.py → visualisation/ex2_1_animate_sim.py} +37 -31
  67. pyvale/experimentsimulator.py +175 -0
  68. pyvale/{core/field.py → field.py} +6 -14
  69. pyvale/fieldconverter.py +351 -0
  70. pyvale/{core/fieldsampler.py → fieldsampler.py} +9 -10
  71. pyvale/{core/fieldscalar.py → fieldscalar.py} +17 -18
  72. pyvale/{core/fieldtensor.py → fieldtensor.py} +23 -26
  73. pyvale/{core/fieldtransform.py → fieldtransform.py} +9 -5
  74. pyvale/{core/fieldvector.py → fieldvector.py} +14 -16
  75. pyvale/{core/generatorsrandom.py → generatorsrandom.py} +29 -52
  76. pyvale/{core/imagedef2d.py → imagedef2d.py} +11 -8
  77. pyvale/{core/integratorfactory.py → integratorfactory.py} +12 -13
  78. pyvale/{core/integratorquadrature.py → integratorquadrature.py} +57 -32
  79. pyvale/integratorrectangle.py +165 -0
  80. pyvale/{core/integratorspatial.py → integratorspatial.py} +9 -10
  81. pyvale/{core/integratortype.py → integratortype.py} +7 -8
  82. pyvale/output.py +17 -0
  83. pyvale/pyvaleexceptions.py +11 -0
  84. pyvale/{core/raster.py → raster.py} +8 -8
  85. pyvale/{core/rastercy.py → rastercy.py} +11 -10
  86. pyvale/{core/rasternp.py → rasternp.py} +12 -13
  87. pyvale/{core/rendermesh.py → rendermesh.py} +10 -19
  88. pyvale/{core/sensorarray.py → sensorarray.py} +7 -8
  89. pyvale/{core/sensorarrayfactory.py → sensorarrayfactory.py} +64 -78
  90. pyvale/{core/sensorarraypoint.py → sensorarraypoint.py} +39 -41
  91. pyvale/{core/sensordata.py → sensordata.py} +7 -8
  92. pyvale/sensordescriptor.py +213 -0
  93. pyvale/{core/sensortools.py → sensortools.py} +8 -9
  94. pyvale/simcases/case00_HEX20.i +5 -5
  95. pyvale/simcases/case00_HEX27.i +5 -5
  96. pyvale/simcases/case00_HEX8.i +242 -0
  97. pyvale/simcases/case00_TET10.i +2 -2
  98. pyvale/simcases/case00_TET14.i +2 -2
  99. pyvale/simcases/case00_TET4.i +242 -0
  100. pyvale/simcases/run_1case.py +1 -1
  101. pyvale/simtools.py +67 -0
  102. pyvale/visualexpplotter.py +191 -0
  103. pyvale/{core/visualimagedef.py → visualimagedef.py} +13 -10
  104. pyvale/{core/visualimages.py → visualimages.py} +10 -9
  105. pyvale/visualopts.py +493 -0
  106. pyvale/{core/visualsimanimator.py → visualsimanimator.py} +47 -19
  107. pyvale/visualsimsensors.py +318 -0
  108. pyvale/visualtools.py +136 -0
  109. pyvale/visualtraceplotter.py +142 -0
  110. {pyvale-2025.4.0.dist-info → pyvale-2025.5.1.dist-info}/METADATA +17 -14
  111. pyvale-2025.5.1.dist-info/RECORD +172 -0
  112. {pyvale-2025.4.0.dist-info → pyvale-2025.5.1.dist-info}/WHEEL +1 -1
  113. pyvale/core/__init__.py +0 -7
  114. pyvale/core/analyticmeshgen.py +0 -59
  115. pyvale/core/analyticsimdatagenerator.py +0 -160
  116. pyvale/core/cython/rastercyth.c +0 -32267
  117. pyvale/core/experimentsimulator.py +0 -99
  118. pyvale/core/fieldconverter.py +0 -154
  119. pyvale/core/integratorrectangle.py +0 -88
  120. pyvale/core/optimcheckfuncs.py +0 -153
  121. pyvale/core/sensordescriptor.py +0 -101
  122. pyvale/core/visualexpplotter.py +0 -151
  123. pyvale/core/visualopts.py +0 -180
  124. pyvale/core/visualsimplotter.py +0 -182
  125. pyvale/core/visualtools.py +0 -81
  126. pyvale/core/visualtraceplotter.py +0 -256
  127. pyvale/examples/analyticdatagen/__init__.py +0 -7
  128. pyvale/examples/ex1_1_thermal2d.py +0 -89
  129. pyvale/examples/ex1_2_thermal2d.py +0 -111
  130. pyvale/examples/ex1_3_thermal2d.py +0 -113
  131. pyvale/examples/ex1_5_thermal2d.py +0 -105
  132. pyvale/examples/ex2_1_thermal3d .py +0 -87
  133. pyvale/examples/ex2_2_thermal3d.py +0 -51
  134. pyvale/examples/ex2_3_thermal3d.py +0 -109
  135. pyvale/examples/ex3_1_displacement2d.py +0 -47
  136. pyvale/examples/ex3_2_displacement2d.py +0 -79
  137. pyvale/examples/ex3_3_displacement2d.py +0 -104
  138. pyvale/examples/ex3_4_displacement2d.py +0 -105
  139. pyvale/examples/ex4_1_strain2d.py +0 -57
  140. pyvale/examples/ex4_2_strain2d.py +0 -79
  141. pyvale/examples/ex4_3_strain2d.py +0 -100
  142. pyvale/examples/ex5_1_multiphysics2d.py +0 -78
  143. pyvale/examples/ex6_1_multiphysics2d_expsim.py +0 -118
  144. pyvale/examples/ex6_2_multiphysics3d_expsim.py +0 -158
  145. pyvale/examples/features/__init__.py +0 -7
  146. pyvale/examples/features/ex_area_avg.py +0 -89
  147. pyvale/examples/features/ex_calibration_error.py +0 -108
  148. pyvale/examples/features/ex_chain_field_errs.py +0 -141
  149. pyvale/examples/features/ex_field_errs.py +0 -78
  150. pyvale/examples/features/ex_sensor_single_angle_batch.py +0 -110
  151. pyvale-2025.4.0.dist-info/RECORD +0 -157
  152. {pyvale-2025.4.0.dist-info → pyvale-2025.5.1.dist-info}/licenses/LICENSE +0 -0
  153. {pyvale-2025.4.0.dist-info → pyvale-2025.5.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,172 @@
1
+ pyvale/__init__.py,sha256=61KOsSmlV9ojm_naGhl4NirlLkhGKeUn6jdbnmHs6Rg,2820
2
+ pyvale/analyticmeshgen.py,sha256=tMh8Fo7iJqjaMfhLu2gBLyD4L2SRGaXjCB3w3cVO7KE,3424
3
+ pyvale/analyticsimdatafactory.py,sha256=WWk1XfigI0q17rTQwZClRvumEGEwHLpameBOXvWHsT4,2703
4
+ pyvale/analyticsimdatagenerator.py,sha256=H_Ro3L8uih2Ipv63ckPN3LmvUaebysCvtJAz1b8Iefs,12424
5
+ pyvale/blendercalibrationdata.py,sha256=N2ntMuYRuic7uDyM7IgOW8VRk75l0zYjvWWtkMiAUGo,487
6
+ pyvale/blenderlightdata.py,sha256=syeXDH6ggVsUJpkw9yIoDJROBRoQGLQjE5wkLEd6Ifg,734
7
+ pyvale/blendermaterialdata.py,sha256=igb5cZwRq5VVC-9dd-I66hT4Jh2idjxjVgVa6F9YV7k,508
8
+ pyvale/blenderrenderdata.py,sha256=8WWuPpUch53QgEwDwjY1-KAGmh-SyUfr2Alg2DYf2PA,889
9
+ pyvale/blenderscene.py,sha256=-S0vCukWavzr8ITtujwzw78RYYzU9AzVj_lHv_1wof8,21262
10
+ pyvale/blendertools.py,sha256=FBcYb0F5m3WXVAGYFy0fu1Uajko7O8g5lqHADWqXG6w,17120
11
+ pyvale/camera.py,sha256=leH2fd3FbvidZ5v7rf04CMPGT_ozIVQkSIKuvFHRGsw,5331
12
+ pyvale/cameradata.py,sha256=ogGlrUqA7uB8JNdLMkpDBTHbGORYqahro21auyS5U1w,1918
13
+ pyvale/cameradata2d.py,sha256=O3imDz8BUer6Wxo82KzCQrVLIBDL5RLy8aNoQoKG4b0,2736
14
+ pyvale/camerastereo.py,sha256=_icc2BvdYnExL9vkuf2adXyejUh2oDFsv6QeKdJ2M3s,9905
15
+ pyvale/cameratools.py,sha256=xGim_-SPvOIWvvAjSspT-7VF8gAGyO56IWteVD-fTxI,20318
16
+ pyvale/dataset.py,sha256=F9X3rPhOwaAXoJxc-MaNiIf0gNTN0JnHvklT6_lGOTw,12360
17
+ pyvale/errorcalculator.py,sha256=lvxY-NCnC_oHw7OWh9N0D8IzcE2NvWprVrRBKXzWdsY,3418
18
+ pyvale/errordriftcalc.py,sha256=T8kqVlVz4GEMOL7WTyv1G7gCJKkulZPHyc5KrVufWAo,4428
19
+ pyvale/errorintegrator.py,sha256=mR8hA1dmylWd-jEHT8HkZFdXOxTGwC2OTKk0uBfdiro,13802
20
+ pyvale/errorrand.py,sha256=YRaEEjMpEyFtk8o8I7P8R0d-0CNONXWSnIomjXHc4sM,22192
21
+ pyvale/errorsyscalib.py,sha256=bcea3iHwCWY-fqo9hqkFsPX12Ym0sOXjzGVW1VNtiUc,5582
22
+ pyvale/errorsysdep.py,sha256=nE4mAnfAK1146_Z5cuEkLvoadXdGw-Tm5IPSb6ydLXE,11571
23
+ pyvale/errorsysfield.py,sha256=h7zgGETj_YQZQE-SdmL4oas0iSUqESBTRZnvUXHtPxY,17077
24
+ pyvale/errorsysindep.py,sha256=vbRjDoXvqQd4b6B2upcFUm_THTJjw1LtnDmLJWIK2VE,29631
25
+ pyvale/experimentsimulator.py,sha256=hDnyo8tV5SEKjSC0zUZIOQFtEK4UWzOyV0C7mfVoFHo,6898
26
+ pyvale/field.py,sha256=C2cfN9L53wk1bXYht_hO1UoUc9Vew-wzAmm5Hj12VvA,4532
27
+ pyvale/fieldconverter.py,sha256=f2FbFd_GMhR7W5r8VvuzGVAFwwCA58ZM-a61Zl_vu0Q,12610
28
+ pyvale/fieldsampler.py,sha256=-ukU3tAMtgk6FAehHPWH-ctE9Mh37mRWenQzZ5UDH1Q,4443
29
+ pyvale/fieldscalar.py,sha256=LrBb__lejqOGmkkI1q3fyKpbEiwgpx7Xf5fzB-JFlb8,5914
30
+ pyvale/fieldtensor.py,sha256=Ssa0R9UOG8C7DUkgUkFLLX-nHFjxxBjFwEXu5UhVFwg,8146
31
+ pyvale/fieldtransform.py,sha256=dzhHw6SlgdKEUbsy6Uh_8dp0sgx-dTH2TtjO7zSslos,17994
32
+ pyvale/fieldvector.py,sha256=VtodQyCTBPoe8L9bdJczoDl42q26qzvaj-lKinYMBT4,7926
33
+ pyvale/generatorsrandom.py,sha256=Ly4a2CUVj9JgWNwNykXBh6mEJEdaKgH0t24bgyUn800,16604
34
+ pyvale/imagedef2d.py,sha256=jqjW3mQqz62mxz-gypypA_5QhnMpHevvedpngEhl0e8,25117
35
+ pyvale/integratorfactory.py,sha256=c4YfUuntnPFiXZGKmRrOIKlgtWjLSY5RNeLvv84eLEU,9620
36
+ pyvale/integratorquadrature.py,sha256=0lVMH7NmVNVTuLHQRjp9gOSBpTDd8VFCxlfl8CyufZs,9035
37
+ pyvale/integratorrectangle.py,sha256=MaJ5ygSL1H7tDwhzFV86t_MuT21ZeM5b8_WH460Ke3o,6695
38
+ pyvale/integratorspatial.py,sha256=yN05AONJuy0Ued3pDlmSGo5Yu8NwSLBlSIO-9UV5zxk,3195
39
+ pyvale/integratortype.py,sha256=jfxdyhgOeowWLkb_ab-OB5G67PmnW-Q_mFENBJ7V9l8,1305
40
+ pyvale/output.py,sha256=OsAKbXMuSZT1yr_EKsslQsKQano7ge9H_8g9ep4AVt0,504
41
+ pyvale/pyvaleexceptions.py,sha256=vhXGitvM72L6Iezho14waCOqDGGCPjbW1n7V-r-xCeY,349
42
+ pyvale/raster.py,sha256=Z8YowjBPb8p4_c3xGu-CH0DT6Z5uajjTB8xuOZmDj6M,788
43
+ pyvale/rastercy.py,sha256=ty-sHAE_OJWEf0P-TJIRmTrRiCTzmDWmHrN11ka_lRk,2881
44
+ pyvale/rasternp.py,sha256=9EVae-M4-jtqr0vfkHQCshpeTO9NKQb0ASOYuGRY9Hc,25993
45
+ pyvale/rendermesh.py,sha256=xa5AqbRIqvpVRoi603zKF4JadvojhEIrapG1jZJYdIA,5414
46
+ pyvale/sensorarray.py,sha256=HC7DOSQtC1q5XE4hNr0KeWufd7z1qk3HoK_AMw9YRJk,7019
47
+ pyvale/sensorarrayfactory.py,sha256=3QCpwD_OpoQezoLT35WSzlnqojBoP9cbyLpBecvjUdg,7939
48
+ pyvale/sensorarraypoint.py,sha256=d42O0SRQcK6qVxSx4Zhu-nJNZis1F2ncXPL6xq7fiTU,11214
49
+ pyvale/sensordata.py,sha256=LFuROk6CcnDI1-0cSx83mk4sgrt4HnwswLItA8LsLVE,2764
50
+ pyvale/sensordescriptor.py,sha256=6-quSWdSMjp7qwcSJULEiOhICyI0TH-tJTH68qbW7dY,7073
51
+ pyvale/sensortools.py,sha256=2JDpUDG-18dtXRzEViqg9fdCmAhqrde6H9I5MpP_fC4,5731
52
+ pyvale/simtools.py,sha256=i9XKHRdw0yymSLydYqV4DBSWgZZS5ea_gmp3m1ny22I,2280
53
+ pyvale/visualexpplotter.py,sha256=tJGXbLr_lZDf8GVsqqkq5T4AoefjLxpo08wYCRwLiO4,7891
54
+ pyvale/visualimagedef.py,sha256=xlcT51guewx2AlWZlZ70RcfqgcghtO_E51kmM2G0xWM,2823
55
+ pyvale/visualimages.py,sha256=6u0FheaBdSLXYUBGOCTf-Zf7ylAYgY0HKXXj_PH0aIQ,2849
56
+ pyvale/visualopts.py,sha256=1jYi6qKWGcMSwKnFTcBtLdv-GRUJ-pnS3DOq5sr-J-U,14928
57
+ pyvale/visualsimanimator.py,sha256=ZhQyxaab82tAN3sVeIUs-Pg-3WggwsF3k-HS9e4MNFk,4456
58
+ pyvale/visualsimsensors.py,sha256=hINsI73NQvHunJ3lUZX-F0RrN_u6gzF0tMHZwsxHr34,12405
59
+ pyvale/visualtools.py,sha256=9nDMZHXv0N7HBl0vOL9QLeHlayYl6ng4dx2-5i2TJjw,4816
60
+ pyvale/visualtraceplotter.py,sha256=y-GjToF5U2VIGO-YwR_tKi_vMUO3ayhaohaWrWNUFgQ,5487
61
+ pyvale/cython/rastercyth.py,sha256=ji6XpRUk-POdwI0Oh1PdFBUCnY4RMiZEO77MyXTM6d0,24479
62
+ pyvale/data/__init__.py,sha256=h1zJBQZxFSPPUksp_ErTC1uTQLdSmoc-ry3D_naPKYE,271
63
+ pyvale/data/cal_target.tiff,sha256=4dbDIm7h7gYDJOhWOZXO-rs162ZLqxb1bdrbTykMEMk,4718962
64
+ pyvale/data/case00_HEX20_out.e,sha256=wTdEWvGyQBhP1D1bIy5YZKu7I_QISWLEjl9K9VOOnbI,241172
65
+ pyvale/data/case00_HEX27_out.e,sha256=XF1nLiBQcCJuZ4bXi8FUG3hbj5hpnno4by_hdyTVm4I,316644
66
+ pyvale/data/case00_HEX8_out.e,sha256=V52yZoQ4egI6v6JVkmA8DUVX6Q0K3AEWG8U3BbGHzSg,148268
67
+ pyvale/data/case00_TET10_out.e,sha256=eoIiAiQ5yLgiH2S01eMQRyHWGLfplnIAk6MPPcqEoPs,214036
68
+ pyvale/data/case00_TET14_out.e,sha256=t9s7WCV6gUlZfNcaj9q4_U7Sct9v9F77NQ0KU596GGk,316996
69
+ pyvale/data/case00_TET4_out.e,sha256=coeIyrkviOfgpgYauenoXldWnYulKgteOts6FolKYBM,127868
70
+ pyvale/data/case13_out.e,sha256=cqgs7TbyDtrlV4AxXUzULa0Qu50gbp_3VeQkehNT82g,150820
71
+ pyvale/data/case16_out.e,sha256=hmkiJQo4phaAPiEa9mgjggcUMn_yY2h348DSqMIj0pA,11614464
72
+ pyvale/data/case17_out.e,sha256=C5Zx0Xx8_iZqypPFbcutGPQtO5VNQaJmqg9YxWi0FHc,6095004
73
+ pyvale/data/case18_1_out.e,sha256=4ITunHIxCBCekUPipSv8j7IKDlhlwTaHe1e3wTN4qLE,1470776
74
+ pyvale/data/case18_2_out.e,sha256=Uz8U1TMBSe1YkRE4nRFMQ38Y11UQo9wb1cIbTRPua1Y,1470776
75
+ pyvale/data/case18_3_out.e,sha256=8dTnKLQOSCL-gle-1shL68GBQPW1go05aDvjO6AawAg,1470776
76
+ pyvale/data/case25_out.e,sha256=LWnCKG7GDUvzCs7GI1h25dhIhq6_qJgXnkhiTmdynPw,93748
77
+ pyvale/data/case26_out.e,sha256=UAoxPN0K1bbk9R0r2hDehuQZVCPHcAV5NA1PckRyXDY,225744
78
+ pyvale/data/optspeckle_2464x2056px_spec5px_8bit_gblur1px.tiff,sha256=cRmbiTzxc8QJ_aO9dc7YT21lV1c9K7pH-L9uQZvUQ8M,5046422
79
+ pyvale/examples/__init__.py,sha256=h1zJBQZxFSPPUksp_ErTC1uTQLdSmoc-ry3D_naPKYE,271
80
+ pyvale/examples/basics/ex1_1_basicscalars_therm2d.py,sha256=j9g-rhWf4-gW2DwDr2ur-DOkgVYYx-rH01aAQ87Re5U,6146
81
+ pyvale/examples/basics/ex1_2_sensormodel_therm2d.py,sha256=HzoJjJ_Pq1ukIeT7nn1Ao7hcywnfxx3K9MImD74eLGw,7145
82
+ pyvale/examples/basics/ex1_3_customsens_therm3d.py,sha256=IfVtucEdaI-k1CsNwcboOCPmU0kM4tKIOQBoRDfw21M,9765
83
+ pyvale/examples/basics/ex1_4_basicerrors_therm3d.py,sha256=BdFijiIzsZwExNq1xQFm8ut-sr3m1cZoUaDd7Eljcf4,6811
84
+ pyvale/examples/basics/ex1_5_fielderrs_therm3d.py,sha256=xTYASxpj5hhvxVoZbcmnGQVOR5_XfM_D-Ei44HttUH4,7344
85
+ pyvale/examples/basics/ex1_6_caliberrs_therm2d.py,sha256=5Q2n0aqDzOUheYgchGHWBn-kVPPce8MaEIIl_qcIVQw,5209
86
+ pyvale/examples/basics/ex1_7_spatavg_therm2d.py,sha256=TbdBvL0SmsbbGfylwe-WSKSJmT8yoy-4I5c_fNk6KEg,5442
87
+ pyvale/examples/basics/ex2_1_basicvectors_disp2d.py,sha256=HVb-d-TPOCjLsNf16N6bIUG35FUkf4Jb9136XANgiNo,4934
88
+ pyvale/examples/basics/ex2_2_vectorsens_disp2d.py,sha256=xhyVYSBp8LuOuhrGhssaPwF_dyp3qUhg2ZXNMsM-grY,5107
89
+ pyvale/examples/basics/ex2_3_sensangle_disp2d.py,sha256=PuZs3cVeb9Nol_9c6WgyD8TyA8UMDjs78AwdG-vBJqc,5643
90
+ pyvale/examples/basics/ex2_4_chainfielderrs_disp2d.py,sha256=q6kMdly2b-SSUbeaTRq0w5RZyeSAcwgEWyPKdy4ttI8,8383
91
+ pyvale/examples/basics/ex2_5_vectorfields3d_disp3d.py,sha256=LzI9P4lCAfzuwuE4DdGuw10WnmfS6Qk8CusOiS-zPyI,4439
92
+ pyvale/examples/basics/ex3_1_basictensors_strain2d.py,sha256=1bfgLAFf8M2LwqxEhUqErdc3hrvlEyZU0jrxPhAP7Dg,5071
93
+ pyvale/examples/basics/ex3_2_tensorsens2d_strain2d.py,sha256=vH2Trr3VGWhdPJM_3TNdfDXsOk-kDowftphPsqVoep8,4802
94
+ pyvale/examples/basics/ex3_3_tensorsens3d_strain3d.py,sha256=0g0hxeIosc8RN7hN2v8qMpN23FOjUlKzjds7-K7M_Dw,8420
95
+ pyvale/examples/basics/ex4_1_expsim2d_thermmech2d.py,sha256=SgO_luAOmAY7ZBuMZpPPnIYHwJsaDfhxonnIPh3iwwo,7926
96
+ pyvale/examples/basics/ex4_2_expsim3d_thermmech3d.py,sha256=u81CMU9P9q5vgrnBP1MXo34V_zo3PoN5XAtpi8vzpSU,11163
97
+ pyvale/examples/genanalyticdata/ex1_1_scalarvisualisation.py,sha256=4AeQXlzKAgXA3SjXpKoj2Pi9WVHDPlWp2N3tNdYf4M0,938
98
+ pyvale/examples/genanalyticdata/ex1_2_scalarcasebuild.py,sha256=E5eWebp-TQBH-46KqW5JfNZgo7OHpt_D-Yx_bVCsLgk,1272
99
+ pyvale/examples/genanalyticdata/ex2_1_analyticsensors.py,sha256=-IoroBX6QKvlMUdnHWQLEF9JS56mvKmTk_7f9fpzqbQ,2845
100
+ pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py,sha256=hTSeDsDkDywl1M4zYelKE_u8RmX2qR5zwSYVrOoxwxg,2613
101
+ pyvale/examples/renderblender/ex1_1_blenderscene.py,sha256=EN4hT5gS0wWfj-rthlw6UANCbnKZG_MAG2zJSZ66kcA,5023
102
+ pyvale/examples/renderblender/ex1_2_blenderdeformed.py,sha256=BeWLlwcVvzH79vZ8bZ8A_a6Cfk4SgQfz7sEcvELanCk,5074
103
+ pyvale/examples/renderblender/ex2_1_stereoscene.py,sha256=5PkiAm6C_Rz5MZvc0uJ76paB8nurh93hq8aqBU0Roro,5458
104
+ pyvale/examples/renderblender/ex2_2_stereodeformed.py,sha256=kPCCiTckNAB6taQLiflFWmmtV2fWQKcwmxQmCcf2jmI,5629
105
+ pyvale/examples/renderblender/ex3_1_blendercalibration.py,sha256=oXpVs7kTVsNgJU2ou1SOYOunDKheHaQnLU2vrMBfC7E,5258
106
+ pyvale/examples/renderrasterisation/ex_rastenp.py,sha256=nkw42wsiLmVhNJcZpEySPrnTntJ6f6mS4ov5iLIxsRA,4848
107
+ pyvale/examples/renderrasterisation/ex_rastercyth_oneframe.py,sha256=TpNMhpixM0OnUT4q2l2eoVqx53j9A-pYLoKIZ7yRKt4,7437
108
+ pyvale/examples/renderrasterisation/ex_rastercyth_static_cypara.py,sha256=oyZYzYmkEyNUYwTBSHgWcrG4lKml7NKDO1sdlpKk8wE,6674
109
+ pyvale/examples/renderrasterisation/ex_rastercyth_static_pypara.py,sha256=0n_LDEHspZ5zwWzf5tvpaLhXFxWy_nHXJarl0XaZF5I,6756
110
+ pyvale/examples/visualisation/ex1_1_plot_traces.py,sha256=Vx4ZWOxwncyUHtXAOOR1YqEUFon8gkaTZ1Ne_K6AfO0,3252
111
+ pyvale/examples/visualisation/ex2_1_animate_sim.py,sha256=OdQpu33z5QZYHYdZdsntBc8K8gXCNFVCylNqoQv5RvA,2985
112
+ pyvale/simcases/case00_HEX20.i,sha256=UiKSQOGgAQwS3cWLxSMVixmp-1RzpZS3nKxVaIgWWKg,5149
113
+ pyvale/simcases/case00_HEX27.i,sha256=MJ3jXHf8hDQP-Y3Ew9FU3EAnD-7E4l8C4QjdeAoRrFc,5149
114
+ pyvale/simcases/case00_HEX8.i,sha256=R4NiWVjoyG8_y6Hhh_I_QySYzbEQ70QuiD0I4auA4Bc,5159
115
+ pyvale/simcases/case00_TET10.i,sha256=ijpTfoLb7ucLdgLyV7LimdIEnB3lLfykM_QJxAs2B9Q,5149
116
+ pyvale/simcases/case00_TET14.i,sha256=PlMC60P6prgpqCOSWAgU5VZ_0g_2WTxtQUYbAM2EaWk,5149
117
+ pyvale/simcases/case00_TET4.i,sha256=Ot9VqNO0s2RVWVmGqLcFcZ0dg9E3Z00BhfYFsOQkiKE,5159
118
+ pyvale/simcases/case01.i,sha256=R6t_uui6DywA1m5HLt4EsdkGDzobpGrfxBrfIY-5YiI,2184
119
+ pyvale/simcases/case02.i,sha256=gOPdUDVDnMUgqevcRO7vT5HnXTY64a7rmugSgkUqQ0s,3406
120
+ pyvale/simcases/case03.i,sha256=6LkfehTSTXuJ390mdn6tYp2Tkgo15KVpGmFmBrHo-AA,2848
121
+ pyvale/simcases/case04.i,sha256=Ao5z2qey2eJrqW1TmCm6LZRDeTwPTOFtMNPocH4zQO4,3757
122
+ pyvale/simcases/case05.i,sha256=VO2D38xsUrZmEMuEJF6JzjF_InpGAdrf9y_5FhvvvDw,5959
123
+ pyvale/simcases/case06.i,sha256=DLMHzOp3Kgu4EIXSg58Ltz4NRVTPC-dZbJp-g-vY3Uo,7298
124
+ pyvale/simcases/case07.geo,sha256=DxJjqex1zlQewGEcr_JiwbHSDczhOi-34ogvwAFfx_Q,4442
125
+ pyvale/simcases/case07.i,sha256=73YrdZUAGCddorbBBxY-oK0tLOw12lISYR5xzzi3ddc,1921
126
+ pyvale/simcases/case08.geo,sha256=d9QEIzMRRXynWOAHx07i8RxTA-uvKNVvpMAEBVZamKs,4795
127
+ pyvale/simcases/case08.i,sha256=G4MqwcZWAaKcXD3toDNtaghbJ3rxiZHWvL-zT6n021Y,3253
128
+ pyvale/simcases/case09.geo,sha256=zW9w_MQlfdbzXat7XfttiAP5HKIo6aCnUBWyGd8SlQQ,6858
129
+ pyvale/simcases/case09.i,sha256=3tZCH7MtvjE4GPLO-Tsigm8kmvc_Ma8H9kZ2e5wb3uQ,1924
130
+ pyvale/simcases/case10.geo,sha256=y4RRENzZyfzUey-wNK3dr448_j7ta70EgxReoaKP2vY,6839
131
+ pyvale/simcases/case10.i,sha256=5X7xsgqiXAZDx-q5erxiWg1XOdGlmfD9UZ7i4Lqg-nk,6377
132
+ pyvale/simcases/case11.geo,sha256=HDEMxIpANKUrDEgBfokxDohEoVpWMcfAcKJ1Rr8RW8c,10429
133
+ pyvale/simcases/case11.i,sha256=f34kuvrDNKjqjiyV0BmCeH3ZDDJFUTtkKmorK4YbAhc,3093
134
+ pyvale/simcases/case12.geo,sha256=FQ-Ck1LBsqnV4HDdLbIP1U2cRot7dRBTIlQ1n6GnxgE,12477
135
+ pyvale/simcases/case12.i,sha256=N-lJnOenl_PQhhatkjMLhUGNNGKLV0QPjLiWU0QfXGo,7932
136
+ pyvale/simcases/case13.i,sha256=q1KLk_S9AC15-ZNV_PydIp2QZsf_EUE1sth6a3t8cG8,3308
137
+ pyvale/simcases/case14.i,sha256=-Yq-ecGcs153-t-fHNM4kWBR3d4_joxmM7WAnm4O57w,3502
138
+ pyvale/simcases/case15.geo,sha256=Sgat1JQJeBCaSlGEEJ1o_WSZMpLpDkbhIrTaUKDiRX4,10429
139
+ pyvale/simcases/case15.i,sha256=88TAhiFxU9jGKnxJu8Ne4pWnbh9pHKkzSs0e0IjfUDM,3187
140
+ pyvale/simcases/case16.geo,sha256=SHB_GMofxN6WYq8JZ1Ktm8B8F_0L7K5hu4-DHtm3CX4,12554
141
+ pyvale/simcases/case16.i,sha256=TJDlkIcdQz2JypfVDobYXg6N86rk03w-AUlIdWV1l7s,8758
142
+ pyvale/simcases/case17.geo,sha256=lBMnrWGnYYivRqOIg5hfExRVr_jRjs1Zd9-f_ugitwA,4442
143
+ pyvale/simcases/case17.i,sha256=G0o57umdzOkzWoroREpV1IH6DA8QM2zAhdemul6-Y7w,3056
144
+ pyvale/simcases/case18.i,sha256=W3Hu6wwWCwOzxwZFmEB2tMlQ1VeCrs-r8erdbFWrqd0,6292
145
+ pyvale/simcases/case18_1.i,sha256=W3Hu6wwWCwOzxwZFmEB2tMlQ1VeCrs-r8erdbFWrqd0,6292
146
+ pyvale/simcases/case18_2.i,sha256=9Y2F3FCrLUJ78cP95CUKvsdCWGkWQLZbcqQ_WbeWPVs,6292
147
+ pyvale/simcases/case18_3.i,sha256=0K1IDUiK1WSjWJOpJi7hvUqJApFD4Z0m9JkCkivAevM,6292
148
+ pyvale/simcases/case19.geo,sha256=nT1Hch8Llv96z3QAPYqzpzIlaV01xXf1sozuA-m0-7I,9102
149
+ pyvale/simcases/case19.i,sha256=jRDSAWaC-bTxCeFgSyj1gapbo6iqteySuPR5QhPLKqo,2191
150
+ pyvale/simcases/case20.geo,sha256=TKBX8JKDwXKyXfXCi6fmOzDV_7_1Kpfpne9yeute11o,9102
151
+ pyvale/simcases/case20.i,sha256=wAQGXJbY_VniZPG-PzeL5-Sk6_ZUiwuf8zRV3c8nEz0,6655
152
+ pyvale/simcases/case21.geo,sha256=AzFNKkQp7-a9PojtR4y0GNI6g12BLvTRvkHDglYPRFQ,2387
153
+ pyvale/simcases/case21.i,sha256=QjKU97PMsswLkaGkutC7gdJhGY8lRq5VEf5b-gRhT4E,3417
154
+ pyvale/simcases/case22.geo,sha256=3OHJhFTm9P_G6vIB9fqgcpeT1DQt5xq5tWxOsRhvj2A,2491
155
+ pyvale/simcases/case22.i,sha256=b3IeO0hs4IU0PJlS_MIkF1gtPkKYQXklfNs5rhy9KNc,3189
156
+ pyvale/simcases/case23.geo,sha256=53NyuNJrPBgUWRHhgz0zS2fCZ8lavn_flpnfLUO2GNY,5448
157
+ pyvale/simcases/case23.i,sha256=0sRJTmiieHxb4YBnYH5foJGteQZfn5Fo0Z3TkDuLSoQ,3188
158
+ pyvale/simcases/case24.geo,sha256=3qiwipPbwaOjmPySISOZycYKdXCSDFrQpccnXHWhiU0,2408
159
+ pyvale/simcases/case24.i,sha256=6scn1ujqyQ2FUHm30NNZPwTzXD9w7AEDkzbrncah-xQ,2950
160
+ pyvale/simcases/case25.geo,sha256=k33GLvsApxTbxDbnOGueA3rTIazqcgYQ5DP37kCAPA4,2492
161
+ pyvale/simcases/case25.i,sha256=8lArbbZOCJ4aLuJCaEO5FW1kzJI4JquOmbA-nVpNRRI,2994
162
+ pyvale/simcases/case26.geo,sha256=7Qj0siF2FqgElxcmtX_7UDp4tdX6scnJgKffpP6iRQY,5468
163
+ pyvale/simcases/case26.i,sha256=V-pS7MeAo9vl3QUDtu-i6MQyeftryxSj0r8n7t6hY0k,2992
164
+ pyvale/simcases/run_1case.py,sha256=QmmZcawWmfkmImciEqM-8NedwlzuIOgLT2Te3fVb574,1928
165
+ pyvale/simcases/run_all_cases.py,sha256=9b3JYcxC8PA2CR-htum7wCICwwnLNeC01xAhk0m6yxw,1903
166
+ pyvale/simcases/run_build_case.py,sha256=IlyZC_VU095ayi7nz57xSSboTeJB54y7nsQXpBTUXFM,1938
167
+ pyvale/simcases/run_example_cases.py,sha256=l5KOQvPMNRUkJMotaReG2nmrFtVBNWCwKVezNyRwKb0,1910
168
+ pyvale-2025.5.1.dist-info/licenses/LICENSE,sha256=h2qWsRIazuLLhALyUsCP6aE0DFcswL9SSSt9sgMzZi4,1099
169
+ pyvale-2025.5.1.dist-info/METADATA,sha256=c1scLLW0CF-y-OV3hLheymbxPJrQXoxkYnkoCjMfweE,7448
170
+ pyvale-2025.5.1.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
171
+ pyvale-2025.5.1.dist-info/top_level.txt,sha256=u1d_f4iZ3b3_96Rb_zrs9hyrpC4yE5e1Lg6Ey_Wgr0c,7
172
+ pyvale-2025.5.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.1)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
pyvale/core/__init__.py DELETED
@@ -1,7 +0,0 @@
1
- """
2
- ================================================================================
3
- pyvale: the python validation engine
4
- License: MIT
5
- Copyright (C) 2025 The Computer Aided Validation Team
6
- ================================================================================
7
- """
@@ -1,59 +0,0 @@
1
- """
2
- ================================================================================
3
- pyvale: the python validation engine
4
- License: MIT
5
- Copyright (C) 2025 The Computer Aided Validation Team
6
- ================================================================================
7
- """
8
- import numpy as np
9
-
10
- # NOTE: This module is a feature under developement.
11
-
12
- def rectangle_mesh_2d(leng_x: float,
13
- leng_y: float,
14
- n_elem_x: int,
15
- n_elem_y: int) -> tuple[np.ndarray,np.ndarray]:
16
-
17
- n_elems = n_elem_x*n_elem_y
18
- n_node_x = n_elem_x+1
19
- n_node_y = n_elem_y+1
20
- nodes_per_elem = 4
21
-
22
- coord_x = np.linspace(0,leng_x,n_node_x)
23
- coord_y = np.linspace(0,leng_y,n_node_y)
24
- (coord_grid_x,coord_grid_y) = np.meshgrid(coord_x,coord_y)
25
-
26
- coord_x = np.atleast_2d(coord_grid_x.flatten()).T
27
- coord_y = np.atleast_2d(coord_grid_y.flatten()).T
28
- coord_z = np.zeros_like(coord_x)
29
- coords = np.hstack((coord_x,coord_y,coord_z))
30
-
31
- connect = np.zeros((n_elems,nodes_per_elem)).astype(np.int64)
32
- row = 1
33
- nn = 0
34
- for ee in range(n_elems):
35
- nn += 1
36
- if nn >= row*n_node_x:
37
- row += 1
38
- nn += 1
39
-
40
- connect[ee,:] = np.array([nn,nn+1,nn+n_node_x+1,nn+n_node_x])
41
- connect = connect.T
42
-
43
- return (coords,connect)
44
-
45
-
46
- def fill_dims(coord_x: np.ndarray,
47
- coord_y: np.ndarray,
48
- time: np.ndarray) -> tuple[np.ndarray,np.ndarray,np.ndarray]:
49
-
50
- full_x = np.repeat(np.atleast_2d(coord_x).T,
51
- time.shape[0],
52
- axis=1)
53
- full_y = np.repeat(np.atleast_2d(coord_y).T,
54
- time.shape[0],
55
- axis=1)
56
- full_time = np.repeat(np.atleast_2d(time),
57
- coord_x.shape[0],
58
- axis=0)
59
- return (full_x,full_y,full_time)
@@ -1,160 +0,0 @@
1
- """
2
- ================================================================================
3
- pyvale: the python validation engine
4
- License: MIT
5
- Copyright (C) 2025 The Computer Aided Validation Team
6
- ================================================================================
7
- """
8
- from dataclasses import dataclass
9
- import numpy as np
10
- import sympy
11
- import mooseherder as mh
12
- from pyvale.core.analyticmeshgen import rectangle_mesh_2d, fill_dims
13
-
14
- # NOTE: This module is a feature under developement.
15
-
16
- @dataclass
17
- class AnalyticCaseData2D:
18
- length_x: float = 10.0
19
- length_y: float = 7.5
20
- num_elem_x: int = 4
21
- num_elem_y: int = 3
22
- time_steps: np.ndarray | None = None
23
- field_keys: tuple[str,...] = ('scalar',)
24
- funcs_x: tuple[sympy.Expr,...] | None = None
25
- funcs_y: tuple[sympy.Expr,...] | None = None
26
- funcs_t: tuple[sympy.Expr,...] | None = None
27
- symbols: tuple[sympy.Symbol,...] = (sympy.Symbol("y"),
28
- sympy.Symbol("x"),
29
- sympy.Symbol("t"))
30
- offsets_space: tuple[float,...] = (0.0,)
31
- offsets_time: tuple[float,...] = (0.0,)
32
- nodes_per_elem: int = 4
33
-
34
-
35
- class AnalyticSimDataGenerator:
36
- def __init__(self, case_data: AnalyticCaseData2D
37
- ) -> None:
38
-
39
- self._case_data = case_data
40
- (self._coords,self._connect) = rectangle_mesh_2d(case_data.length_x,
41
- case_data.length_y,
42
- case_data.num_elem_x,
43
- case_data.num_elem_y)
44
-
45
- self._field_sym_funcs = dict()
46
- self._field_lam_funcs = dict()
47
- for ii,kk in enumerate(case_data.field_keys):
48
- self._field_sym_funcs[kk] = ((case_data.funcs_x[ii] *
49
- case_data.funcs_y[ii] +
50
- case_data.offsets_space[ii]) *
51
- (case_data.funcs_t[ii] +
52
- case_data.offsets_time[ii]))
53
-
54
- self._field_lam_funcs[kk] = sympy.lambdify(case_data.symbols,
55
- self._field_sym_funcs[kk],
56
- 'numpy')
57
- self._field_eval = dict()
58
-
59
-
60
- def evaluate_field_truth(self,
61
- field_key: str,
62
- coords: np.ndarray,
63
- time_steps: np.ndarray | None = None) -> np.ndarray:
64
-
65
- if time_steps is None:
66
- time_steps = self._case_data.time_steps
67
-
68
- (x_eval,y_eval,t_eval) = fill_dims(coords[:,0],
69
- coords[:,1],
70
- time_steps)
71
-
72
- field_vals = self._field_lam_funcs[field_key](y_eval,
73
- x_eval,
74
- t_eval)
75
- return field_vals
76
-
77
-
78
- def evaluate_all_fields_truth(self,
79
- coords: np.ndarray,
80
- time_steps: np.ndarray | None = None) -> np.ndarray:
81
-
82
- if time_steps is None:
83
- time_steps = self._case_data.time_steps
84
-
85
- (x_eval,y_eval,t_eval) = fill_dims(coords[:,0],
86
- coords[:,1],
87
- time_steps)
88
-
89
- eval_comps = dict()
90
- for kk in self._case_data.field_keys:
91
- eval_comps[kk] = self._field_lam_funcs[kk](y_eval,
92
- x_eval,
93
- t_eval)
94
- return eval_comps
95
-
96
-
97
- def evaluate_field_at_nodes(self, field_key: str) -> np.ndarray:
98
- (x_eval,y_eval,t_eval) = fill_dims(self._coords[:,0],
99
- self._coords[:,1],
100
- self._case_data.time_steps)
101
-
102
- self._field_eval[field_key] = self._field_lam_funcs[field_key](y_eval,
103
- x_eval,
104
- t_eval)
105
- return self._field_eval[field_key]
106
-
107
- def evaluate_all_fields_at_nodes(self) -> dict[str,np.ndarray]:
108
- (x_eval,y_eval,t_eval) = fill_dims(self._coords[:,0],
109
- self._coords[:,1],
110
- self._case_data.time_steps)
111
- eval_comps = dict()
112
- for kk in self._case_data.field_keys:
113
- eval_comps[kk] = self._field_lam_funcs[kk](y_eval,
114
- x_eval,
115
- t_eval)
116
- self._field_eval = eval_comps
117
- return self._field_eval
118
-
119
-
120
- def generate_sim_data(self) -> mh.SimData:
121
-
122
- sim_data = mh.SimData()
123
- sim_data.num_spat_dims = 2
124
- sim_data.time = self._case_data.time_steps
125
- sim_data.coords = self._coords
126
- sim_data.connect = {'connect1': self._connect}
127
-
128
- if not self._field_eval:
129
- self.evaluate_all_fields_at_nodes()
130
- sim_data.node_vars = self._field_eval
131
-
132
- return sim_data
133
-
134
-
135
- def get_visualisation_grid(self,
136
- field_key: str | None = None,
137
- time_step: int = -1
138
- ) -> tuple[np.ndarray,np.ndarray,np.ndarray]:
139
-
140
- if field_key is None:
141
- field_key = self._case_data.field_keys[0]
142
-
143
- grid_shape = (self._case_data.num_elem_y+1,
144
- self._case_data.num_elem_x+1)
145
-
146
- grid_x = np.atleast_2d(self._coords[:,0]).T.reshape(grid_shape)
147
- grid_y = np.atleast_2d(self._coords[:,1]).T.reshape(grid_shape)
148
-
149
- if not self._field_eval:
150
- self.evaluate_all_fields_at_nodes()
151
-
152
- scalar_grid = np.reshape(self._field_eval[field_key][:,time_step],grid_shape)
153
-
154
- return (grid_x,grid_y,scalar_grid)
155
-
156
-
157
-
158
-
159
-
160
-