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.
- pyvale/__init__.py +78 -64
- pyvale/analyticmeshgen.py +102 -0
- pyvale/{core/analyticsimdatafactory.py → analyticsimdatafactory.py} +44 -16
- pyvale/analyticsimdatagenerator.py +323 -0
- pyvale/blendercalibrationdata.py +15 -0
- pyvale/blenderlightdata.py +26 -0
- pyvale/blendermaterialdata.py +15 -0
- pyvale/blenderrenderdata.py +30 -0
- pyvale/blenderscene.py +488 -0
- pyvale/blendertools.py +420 -0
- pyvale/{core/camera.py → camera.py} +15 -15
- pyvale/{core/cameradata.py → cameradata.py} +27 -22
- pyvale/{core/cameradata2d.py → cameradata2d.py} +8 -6
- pyvale/camerastereo.py +217 -0
- pyvale/{core/cameratools.py → cameratools.py} +220 -26
- pyvale/{core/cython → cython}/rastercyth.py +11 -7
- pyvale/data/__init__.py +5 -7
- pyvale/data/cal_target.tiff +0 -0
- pyvale/data/case00_HEX20_out.e +0 -0
- pyvale/data/case00_HEX27_out.e +0 -0
- pyvale/data/case00_HEX8_out.e +0 -0
- pyvale/data/case00_TET10_out.e +0 -0
- pyvale/data/case00_TET14_out.e +0 -0
- pyvale/data/case00_TET4_out.e +0 -0
- pyvale/{core/dataset.py → dataset.py} +91 -16
- pyvale/{core/errorcalculator.py → errorcalculator.py} +13 -16
- pyvale/{core/errordriftcalc.py → errordriftcalc.py} +14 -14
- pyvale/{core/errorintegrator.py → errorintegrator.py} +25 -28
- pyvale/{core/errorrand.py → errorrand.py} +39 -46
- pyvale/errorsyscalib.py +134 -0
- pyvale/{core/errorsysdep.py → errorsysdep.py} +25 -29
- pyvale/{core/errorsysfield.py → errorsysfield.py} +59 -52
- pyvale/{core/errorsysindep.py → errorsysindep.py} +85 -182
- pyvale/examples/__init__.py +5 -7
- pyvale/examples/basics/ex1_1_basicscalars_therm2d.py +131 -0
- pyvale/examples/basics/ex1_2_sensormodel_therm2d.py +158 -0
- pyvale/examples/basics/ex1_3_customsens_therm3d.py +216 -0
- pyvale/examples/basics/ex1_4_basicerrors_therm3d.py +153 -0
- pyvale/examples/basics/ex1_5_fielderrs_therm3d.py +168 -0
- pyvale/examples/basics/ex1_6_caliberrs_therm2d.py +133 -0
- pyvale/examples/basics/ex1_7_spatavg_therm2d.py +123 -0
- pyvale/examples/basics/ex2_1_basicvectors_disp2d.py +112 -0
- pyvale/examples/basics/ex2_2_vectorsens_disp2d.py +111 -0
- pyvale/examples/basics/ex2_3_sensangle_disp2d.py +139 -0
- pyvale/examples/basics/ex2_4_chainfielderrs_disp2d.py +196 -0
- pyvale/examples/basics/ex2_5_vectorfields3d_disp3d.py +109 -0
- pyvale/examples/basics/ex3_1_basictensors_strain2d.py +114 -0
- pyvale/examples/basics/ex3_2_tensorsens2d_strain2d.py +111 -0
- pyvale/examples/basics/ex3_3_tensorsens3d_strain3d.py +182 -0
- pyvale/examples/basics/ex4_1_expsim2d_thermmech2d.py +171 -0
- pyvale/examples/basics/ex4_2_expsim3d_thermmech3d.py +252 -0
- pyvale/examples/{analyticdatagen → genanalyticdata}/ex1_1_scalarvisualisation.py +6 -9
- pyvale/examples/{analyticdatagen → genanalyticdata}/ex1_2_scalarcasebuild.py +8 -11
- pyvale/examples/{analyticdatagen → genanalyticdata}/ex2_1_analyticsensors.py +9 -12
- pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +8 -15
- pyvale/examples/renderblender/ex1_1_blenderscene.py +121 -0
- pyvale/examples/renderblender/ex1_2_blenderdeformed.py +119 -0
- pyvale/examples/renderblender/ex2_1_stereoscene.py +128 -0
- pyvale/examples/renderblender/ex2_2_stereodeformed.py +131 -0
- pyvale/examples/renderblender/ex3_1_blendercalibration.py +120 -0
- pyvale/examples/{rasterisation → renderrasterisation}/ex_rastenp.py +6 -7
- pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_oneframe.py +5 -7
- pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_static_cypara.py +6 -13
- pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_static_pypara.py +9 -12
- pyvale/examples/{ex1_4_thermal2d.py → visualisation/ex1_1_plot_traces.py} +33 -20
- pyvale/examples/{features/ex_animation_tools_3dmonoblock.py → visualisation/ex2_1_animate_sim.py} +37 -31
- pyvale/experimentsimulator.py +175 -0
- pyvale/{core/field.py → field.py} +6 -14
- pyvale/fieldconverter.py +351 -0
- pyvale/{core/fieldsampler.py → fieldsampler.py} +9 -10
- pyvale/{core/fieldscalar.py → fieldscalar.py} +17 -18
- pyvale/{core/fieldtensor.py → fieldtensor.py} +23 -26
- pyvale/{core/fieldtransform.py → fieldtransform.py} +9 -5
- pyvale/{core/fieldvector.py → fieldvector.py} +14 -16
- pyvale/{core/generatorsrandom.py → generatorsrandom.py} +29 -52
- pyvale/{core/imagedef2d.py → imagedef2d.py} +11 -8
- pyvale/{core/integratorfactory.py → integratorfactory.py} +12 -13
- pyvale/{core/integratorquadrature.py → integratorquadrature.py} +57 -32
- pyvale/integratorrectangle.py +165 -0
- pyvale/{core/integratorspatial.py → integratorspatial.py} +9 -10
- pyvale/{core/integratortype.py → integratortype.py} +7 -8
- pyvale/output.py +17 -0
- pyvale/pyvaleexceptions.py +11 -0
- pyvale/{core/raster.py → raster.py} +8 -8
- pyvale/{core/rastercy.py → rastercy.py} +11 -10
- pyvale/{core/rasternp.py → rasternp.py} +12 -13
- pyvale/{core/rendermesh.py → rendermesh.py} +10 -19
- pyvale/{core/sensorarray.py → sensorarray.py} +7 -8
- pyvale/{core/sensorarrayfactory.py → sensorarrayfactory.py} +64 -78
- pyvale/{core/sensorarraypoint.py → sensorarraypoint.py} +39 -41
- pyvale/{core/sensordata.py → sensordata.py} +7 -8
- pyvale/sensordescriptor.py +213 -0
- pyvale/{core/sensortools.py → sensortools.py} +8 -9
- pyvale/simcases/case00_HEX20.i +5 -5
- pyvale/simcases/case00_HEX27.i +5 -5
- pyvale/simcases/case00_HEX8.i +242 -0
- pyvale/simcases/case00_TET10.i +2 -2
- pyvale/simcases/case00_TET14.i +2 -2
- pyvale/simcases/case00_TET4.i +242 -0
- pyvale/simcases/run_1case.py +1 -1
- pyvale/simtools.py +67 -0
- pyvale/visualexpplotter.py +191 -0
- pyvale/{core/visualimagedef.py → visualimagedef.py} +13 -10
- pyvale/{core/visualimages.py → visualimages.py} +10 -9
- pyvale/visualopts.py +493 -0
- pyvale/{core/visualsimanimator.py → visualsimanimator.py} +47 -19
- pyvale/visualsimsensors.py +318 -0
- pyvale/visualtools.py +136 -0
- pyvale/visualtraceplotter.py +142 -0
- {pyvale-2025.4.0.dist-info → pyvale-2025.5.1.dist-info}/METADATA +17 -14
- pyvale-2025.5.1.dist-info/RECORD +172 -0
- {pyvale-2025.4.0.dist-info → pyvale-2025.5.1.dist-info}/WHEEL +1 -1
- pyvale/core/__init__.py +0 -7
- pyvale/core/analyticmeshgen.py +0 -59
- pyvale/core/analyticsimdatagenerator.py +0 -160
- pyvale/core/cython/rastercyth.c +0 -32267
- pyvale/core/experimentsimulator.py +0 -99
- pyvale/core/fieldconverter.py +0 -154
- pyvale/core/integratorrectangle.py +0 -88
- pyvale/core/optimcheckfuncs.py +0 -153
- pyvale/core/sensordescriptor.py +0 -101
- pyvale/core/visualexpplotter.py +0 -151
- pyvale/core/visualopts.py +0 -180
- pyvale/core/visualsimplotter.py +0 -182
- pyvale/core/visualtools.py +0 -81
- pyvale/core/visualtraceplotter.py +0 -256
- pyvale/examples/analyticdatagen/__init__.py +0 -7
- pyvale/examples/ex1_1_thermal2d.py +0 -89
- pyvale/examples/ex1_2_thermal2d.py +0 -111
- pyvale/examples/ex1_3_thermal2d.py +0 -113
- pyvale/examples/ex1_5_thermal2d.py +0 -105
- pyvale/examples/ex2_1_thermal3d .py +0 -87
- pyvale/examples/ex2_2_thermal3d.py +0 -51
- pyvale/examples/ex2_3_thermal3d.py +0 -109
- pyvale/examples/ex3_1_displacement2d.py +0 -47
- pyvale/examples/ex3_2_displacement2d.py +0 -79
- pyvale/examples/ex3_3_displacement2d.py +0 -104
- pyvale/examples/ex3_4_displacement2d.py +0 -105
- pyvale/examples/ex4_1_strain2d.py +0 -57
- pyvale/examples/ex4_2_strain2d.py +0 -79
- pyvale/examples/ex4_3_strain2d.py +0 -100
- pyvale/examples/ex5_1_multiphysics2d.py +0 -78
- pyvale/examples/ex6_1_multiphysics2d_expsim.py +0 -118
- pyvale/examples/ex6_2_multiphysics3d_expsim.py +0 -158
- pyvale/examples/features/__init__.py +0 -7
- pyvale/examples/features/ex_area_avg.py +0 -89
- pyvale/examples/features/ex_calibration_error.py +0 -108
- pyvale/examples/features/ex_chain_field_errs.py +0 -141
- pyvale/examples/features/ex_field_errs.py +0 -78
- pyvale/examples/features/ex_sensor_single_angle_batch.py +0 -110
- pyvale-2025.4.0.dist-info/RECORD +0 -157
- {pyvale-2025.4.0.dist-info → pyvale-2025.5.1.dist-info}/licenses/LICENSE +0 -0
- {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,,
|
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
|
-
"""
|
pyvale/core/analyticmeshgen.py
DELETED
|
@@ -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
|
-
|