struphy 2.1.1__tar.gz → 2.3.0__tar.gz
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.
- {struphy-2.1.1 → struphy-2.3.0}/LICENSE +1 -1
- {struphy-2.1.1/src/struphy.egg-info → struphy-2.3.0}/PKG-INFO +28 -26
- {struphy-2.1.1 → struphy-2.3.0}/pyproject.toml +28 -26
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/bsplines.py +1 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/bsplines_kernels.py +0 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/evaluation_kernels_1d.py +1 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/evaluation_kernels_3d.py +164 -12
- struphy-2.3.0/src/struphy/bsplines/tests/test_bsplines_kernels.py +197 -0
- struphy-2.3.0/src/struphy/bsplines/tests/test_eval_spline_mpi.py +555 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/compile.py +1 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/main.py +47 -22
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/run.py +42 -54
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/test.py +3 -28
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/diagnostics/console_diagn.py +42 -7
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/diagnostics/diagn_tools.py +3 -8
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/examples/_draw_parallel.py +1 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/basis_projection_ops.py +157 -99
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/linear_operators.py +1 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/mass.py +561 -266
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/mass_kernels.py +247 -14
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/preconditioner.py +421 -18
- struphy-2.3.0/src/struphy/feec/projectors.py +662 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/psydac_derham.py +690 -244
- struphy-2.1.1/src/struphy/bsplines/tests/test_eval_spline_mpi.py → struphy-2.3.0/src/struphy/feec/tests/test_eval_field.py +29 -148
- struphy-2.3.0/src/struphy/feec/tests/test_field_init.py +909 -0
- struphy-2.3.0/src/struphy/feec/tests/test_l2_projectors.py +259 -0
- struphy-2.3.0/src/struphy/feec/tests/test_lowdim_nel_is_1.py +290 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/test_mass_matrices.py +44 -7
- struphy-2.3.0/src/struphy/feec/variational_utilities.py +207 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/base.py +94 -85
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/equils.py +103 -32
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/tests/test_gvec_equil.py +1 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/tests/test_mhd_equils.py +186 -186
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/base.py +47 -63
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/domains.py +14 -14
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/tests/test_domain.py +162 -162
- struphy-2.3.0/src/struphy/initial/perturbations.py +655 -0
- struphy-2.3.0/src/struphy/initial/tests/test_init_perturbations.py +339 -0
- struphy-2.3.0/src/struphy/initial/utilities.py +74 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/longer_examples/params_TAE_tokamak.yml +0 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/longer_examples/params_hybridmhdvlasovcc.yml +2 -3
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/longer_examples/params_hybridmhdvlasovpc.yml +3 -4
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/longer_examples/params_linearextendedmhd.yml +1 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_landau.yml +11 -30
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_streaming_weibel.yml +2 -24
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_weibel.yml +11 -30
- struphy-2.3.0/src/struphy/io/inp/parameters.yml +109 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/tutorials/params_02.yml +11 -27
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/tutorials/params_03.yml +9 -10
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/tutorials/params_04a.yml +6 -5
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/tutorials/params_04b.yml +7 -9
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/tutorials/params_05a.yml +6 -16
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/tutorials/params_05b.yml +6 -18
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/setup.py +25 -46
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/kinetic_background/base.py +63 -14
- struphy-2.3.0/src/struphy/kinetic_background/maxwellians.py +646 -0
- struphy-2.3.0/src/struphy/kinetic_background/tests/test_maxwellians.py +1550 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/linear_algebra/schur_solver.py +4 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/main.py +2 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/base.py +405 -273
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/fluid.py +192 -17
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/hybrid.py +59 -81
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/kinetic.py +662 -250
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/tests/test_fluid_models.py +3 -3
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/tests/test_hybrid_models.py +1 -1
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/tests/test_kinetic_models.py +4 -4
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/tests/test_toy_models.py +4 -4
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/tests/test_xxpproc.py +11 -12
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/tests/util.py +14 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/models/toy.py +323 -36
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/accumulation/accum_kernels.py +19 -86
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/accumulation/accum_kernels_gc.py +336 -194
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/accumulation/particle_to_mat_kernels.py +113 -123
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/accumulation/particles_to_grid.py +70 -21
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/base.py +248 -147
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/particles.py +80 -85
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/pushing/pusher_kernels.py +10 -6
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/pushing/pusher_kernels_gc.py +33 -18
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_accum_vec_H1.py +6 -7
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_accumulation.py +1 -1
- struphy-2.3.0/src/struphy/pic/tests/test_binning.py +638 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_draw_parallel.py +28 -25
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pushers.py +14 -34
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/utilities_kernels.py +65 -16
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/polar/tests/test_legacy_polar_splines.py +4 -4
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/polar/tests/test_polar.py +16 -16
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/post_processing/post_processing_tools.py +7 -7
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/propagators/base.py +16 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/propagators/propagators_coupling.py +146 -203
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/propagators/propagators_fields.py +2076 -439
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/propagators/propagators_markers.py +4 -5
- struphy-2.3.0/src/struphy/propagators/tests/test_gyrokinetic_poisson.py +587 -0
- struphy-2.3.0/src/struphy/propagators/tests/test_poisson.py +430 -0
- struphy-2.1.1/src/struphy/psydac-0.1.7-py3-none-any.whl → struphy-2.3.0/src/struphy/psydac-0.1.12-py3-none-any.whl +0 -0
- struphy-2.3.0/src/struphy/tutorials/tests/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/tutorials/tests/test_tutorials.py +1 -1
- struphy-2.3.0/src/struphy/tutorials/utilities.py +12 -0
- {struphy-2.1.1 → struphy-2.3.0/src/struphy.egg-info}/PKG-INFO +28 -26
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy.egg-info/SOURCES.txt +14 -7
- struphy-2.3.0/src/struphy.egg-info/requires.txt +26 -0
- struphy-2.1.1/src/struphy/bsplines/tests/test_bsplines_kernels.py +0 -220
- struphy-2.1.1/src/struphy/feec/geom_projectors.py +0 -1024
- struphy-2.1.1/src/struphy/feec/projectors.py +0 -192
- struphy-2.1.1/src/struphy/feec/tests/test_l2_projectors.py +0 -157
- struphy-2.1.1/src/struphy/feec/tests/test_noise_init.py +0 -54
- struphy-2.1.1/src/struphy/fields_background/electric_equil/analytical.py +0 -24
- struphy-2.1.1/src/struphy/fields_background/electric_equil/base.py +0 -60
- struphy-2.1.1/src/struphy/initial/perturbations.py +0 -327
- struphy-2.1.1/src/struphy/io/inp/parameters.yml +0 -131
- struphy-2.1.1/src/struphy/kinetic_background/maxwellians.py +0 -831
- struphy-2.1.1/src/struphy/propagators/tests/test_fields_propagators.py +0 -95
- struphy-2.1.1/src/struphy.egg-info/requires.txt +0 -24
- {struphy-2.1.1 → struphy-2.3.0}/README.md +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/setup.cfg +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/evaluation_kernels_2d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/shapefunc_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/bsplines/tests/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/compile_struphy.mk +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/conftest.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/params.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/pproc.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/profile.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/console/units.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/dependencies.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/diagnostics/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/diagnostics/continuous_spectra.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/diagnostics/paraview/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/diagnostics/paraview/mesh_creator.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/diagnostics/paraview/vtk_writer.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/dispersion_relations/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/dispersion_relations/analytic.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/dispersion_relations/base.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/derivatives.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/kernels_2d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/kernels_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/kernels_projectors_global.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/kernels_projectors_global_mhd.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/MHD_eigenvalues_cylinder_1D.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kernels_control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fB_massless_control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fB_massless_kernels_control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_cv_kernel_2.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_kernels_control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_cvker.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_kernels_control_variate.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/emw_operators.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_1d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_2d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_1d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_2d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/mass_matrices_3d_pre.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_arrays.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_bb_kernel.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_bv_kernel.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_massless_linear_operators.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_vv_kernel.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/mhd_operators_MF.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/kernels_projectors_local.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/kernels_projectors_local_mhd.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/mhd_operators_3d_local.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/projectors_local.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_L2_projector_kernel.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_function_projectors_L2.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_function_projectors_local.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_local_projector_kernel.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/mass_matrices_1d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/mass_matrices_2d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/mass_matrices_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/mhd_axisymmetric_main.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/mhd_axisymmetric_pproc.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/mhd_operators.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/mhd_operators_core.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/projectors_global.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/spline_space.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/tests/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/eigenvalue_solvers/tests/test_legacy_mhd_projectors.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/banded_to_stencil_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/basis_projection_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/test_basis_operators.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/test_basis_ops.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/test_derham.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/test_toarray_struphy.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/test_tosparse_struphy.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/tests/xx_test_preconds.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/utilities.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/feec/utilities_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/fields_background/electric_equil → struphy-2.3.0/src/struphy/fields_background/mhd_equil}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/fields_background/mhd_equil → struphy-2.3.0/src/struphy/fields_background/mhd_equil/eqdsk}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/eqdsk/data/AUGNLED_g031213.00830.high +0 -0
- {struphy-2.1.1/src/struphy/fields_background/mhd_equil/eqdsk → struphy-2.3.0/src/struphy/fields_background/mhd_equil/eqdsk/data}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/eqdsk/readeqdsk.py +0 -0
- {struphy-2.1.1/src/struphy/fields_background/mhd_equil/eqdsk/data → struphy-2.3.0/src/struphy/fields_background/mhd_equil/gvec}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/gvec/ellipstell_v2/newBC_E1D6_M6N6/GVEC_ELLIPSTELL_V2_State_0000_00200000.dat +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/gvec/ellipstell_v2/newBC_E1D6_M6N6/parameter.ini +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/gvec/ellipstell_v2/newBC_E4D6_M6N6/GVEC_ELLIPSTELL_V2_State_0000_00200000.dat +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/gvec/ellipstell_v2/newBC_E4D6_M6N6/parameter.ini +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/gvec/ellipstell_v2/oldBC_E40D5M6N6/GVEC_ELLIPSTELL_V2_State_0000_00200000.dat +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/mhd_equil/gvec/ellipstell_v2/oldBC_E40D5M6N6/parameter.ini +0 -0
- {struphy-2.1.1/src/struphy/fields_background/mhd_equil/gvec → struphy-2.3.0/src/struphy/fields_background/mhd_equil/gvec/output}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/fields_background/mhd_equil/gvec/output → struphy-2.3.0/src/struphy/fields_background/mhd_equil/gvec/output/vtk}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/fields_background/mhd_equil/gvec/output/vtk → struphy-2.3.0/src/struphy/fields_background/mhd_equil/vmec}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/fields_background/mhd_equil/vmec → struphy-2.3.0/src/struphy/fields_background/tests}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/fields_background/tests/test_numerical_mhd_equil.py +0 -0
- {struphy-2.1.1/src/struphy/fields_background/tests → struphy-2.3.0/src/struphy/geometry}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/evaluation_kernels.py +0 -0
- {struphy-2.1.1/src/struphy/geometry → struphy-2.3.0/src/struphy/geometry/map_coef}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/mappings_kernels.py +0 -0
- {struphy-2.1.1/src/struphy/geometry/map_coef → struphy-2.3.0/src/struphy/geometry/tests}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/transform_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/utilities.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/geometry/utilities_kernels.py +0 -0
- {struphy-2.1.1/src/struphy/geometry/tests → struphy-2.3.0/src/struphy/initial}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/initial/eigenfunctions.py +0 -0
- {struphy-2.1.1/src/struphy/initial → struphy-2.3.0/src/struphy/initial/tests}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/batch/batch_cobra.sh +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/batch/p_016.sh +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/batch/p_032.sh +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/batch/p_064.sh +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/batch/p_128.sh +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/batch/p_256.sh +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/batch/p_512.sh +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/inp/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/out/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/io/output_handling.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/kinetic_background/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/linear_algebra → struphy-2.3.0/src/struphy/kinetic_background/tests}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/linear_algebra/tests → struphy-2.3.0/src/struphy/linear_algebra}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/linear_algebra/linalg_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/linear_algebra/linalg_kron.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/linear_algebra/stencil_dot_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/linear_algebra/stencil_transpose_kernels.py +0 -0
- {struphy-2.1.1/src/struphy/models → struphy-2.3.0/src/struphy/linear_algebra/tests}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/linear_algebra/tests/test_stencil_dot_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/linear_algebra/tests/test_stencil_transpose_kernels.py +0 -0
- {struphy-2.1.1/src/struphy/models/tests → struphy-2.3.0/src/struphy/models}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/pic → struphy-2.3.0/src/struphy/models/tests}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/pic/accumulation → struphy-2.3.0/src/struphy/pic}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/pic/pushing → struphy-2.3.0/src/struphy/pic/accumulation}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/accumulation/filler_kernels.py +0 -0
- {struphy-2.1.1/src/struphy/pic/tests → struphy-2.3.0/src/struphy/pic/pushing}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/pushing/eval_kernels_gc.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/pushing/pusher.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/pushing/pusher_utilities_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/sampling_kernels.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/sobol_seq.py +0 -0
- {struphy-2.1.1/src/struphy/pic/tests/test_pic_legacy_files → struphy-2.3.0/src/struphy/pic/tests}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_mat_vec_filler.py +0 -0
- {struphy-2.1.1/src/struphy/polar → struphy-2.3.0/src/struphy/pic/tests/test_pic_legacy_files}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/accumulation.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/accumulation_kernels_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/mappings_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/mappings_3d_fast.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_pos.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_vel_2d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_vel_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/spline_evaluation_2d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/tests/test_pic_legacy_files/spline_evaluation_3d.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/pic/utilities.py +0 -0
- {struphy-2.1.1/src/struphy/polar/tests → struphy-2.3.0/src/struphy/polar}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/polar/basic.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/polar/extraction_operators.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/polar/linear_operators.py +0 -0
- {struphy-2.1.1/src/struphy/post_processing → struphy-2.3.0/src/struphy/polar/tests}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/post_processing/tests → struphy-2.3.0/src/struphy/post_processing}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/post_processing/cprofile_analyser.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/post_processing/pproc_struphy.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/post_processing/profile_struphy.py +0 -0
- {struphy-2.1.1/src/struphy/propagators → struphy-2.3.0/src/struphy/post_processing/tests}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/propagators/tests → struphy-2.3.0/src/struphy/propagators}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/tutorials → struphy-2.3.0/src/struphy/propagators/tests}/__init__.py +0 -0
- {struphy-2.1.1/src/struphy/tutorials/longer_examples → struphy-2.3.0/src/struphy/tutorials}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/tutorials/longer_examples/TAE_tokamak.py +0 -0
- {struphy-2.1.1/src/struphy/tutorials/tests → struphy-2.3.0/src/struphy/tutorials/longer_examples}/__init__.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/tutorials/longer_examples/linearextendedmhd.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/tutorials/longer_examples/linearmhdvlasov_cc.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy/tutorials/longer_examples/linearmhdvlasov_pc.py +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy.egg-info/dependency_links.txt +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy.egg-info/entry_points.txt +0 -0
- {struphy-2.1.1 → struphy-2.3.0}/src/struphy.egg-info/top_level.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2019-
|
|
1
|
+
Copyright (c) 2019-2024, Struphy developers, Max Planck Institute for Plasma Physics
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
4
4
|
associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: struphy
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: Multi-model plasma physics package
|
|
5
5
|
Author: Max Planck Institute for Plasma Physics
|
|
6
6
|
Author-email: stefan.possanner@ipp.mpg.de, eric.sonnendruecker@ipp.mpg.de
|
|
7
|
-
License: Copyright (c) 2019-
|
|
7
|
+
License: Copyright (c) 2019-2024, Struphy developers, Max Planck Institute for Plasma Physics
|
|
8
8
|
|
|
9
9
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
|
10
10
|
associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
@@ -30,30 +30,32 @@ Classifier: Programming Language :: Python :: 3
|
|
|
30
30
|
Requires-Python: <3.12,>=3.7
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
32
|
License-File: LICENSE
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist:
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist:
|
|
38
|
-
Requires-Dist:
|
|
39
|
-
Requires-Dist:
|
|
40
|
-
Requires-Dist:
|
|
41
|
-
Requires-Dist:
|
|
42
|
-
Requires-Dist:
|
|
43
|
-
Requires-Dist:
|
|
44
|
-
Requires-Dist:
|
|
45
|
-
Requires-Dist: nbsphinx
|
|
46
|
-
Requires-Dist: notebook
|
|
47
|
-
Requires-Dist:
|
|
48
|
-
Requires-Dist:
|
|
49
|
-
Requires-Dist:
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist:
|
|
56
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: PyYAML==6.0.1
|
|
34
|
+
Requires-Dist: argcomplete==3.2.3
|
|
35
|
+
Requires-Dist: docutils==0.20.1
|
|
36
|
+
Requires-Dist: gvec-to-python==1.2.1
|
|
37
|
+
Requires-Dist: h5py==3.10.0
|
|
38
|
+
Requires-Dist: ipyparallel==8.7.0
|
|
39
|
+
Requires-Dist: lxml_html_clean==0.1.0
|
|
40
|
+
Requires-Dist: m2r2==0.3.3.post2
|
|
41
|
+
Requires-Dist: matplotlib==3.8.3
|
|
42
|
+
Requires-Dist: mistune==0.8.4
|
|
43
|
+
Requires-Dist: mpi4py==3.1.5
|
|
44
|
+
Requires-Dist: myst-parser==2.0.0
|
|
45
|
+
Requires-Dist: nbsphinx==0.9.3
|
|
46
|
+
Requires-Dist: notebook==7.1.2
|
|
47
|
+
Requires-Dist: numpy==1.24.4
|
|
48
|
+
Requires-Dist: pyccel==1.11.2
|
|
49
|
+
Requires-Dist: pydata-sphinx-theme==0.15.2
|
|
50
|
+
Requires-Dist: pytest==8.1.1
|
|
51
|
+
Requires-Dist: pytest-monitor==1.6.6
|
|
52
|
+
Requires-Dist: pytest-mpi==0.6
|
|
53
|
+
Requires-Dist: scipy==1.12.0
|
|
54
|
+
Requires-Dist: Sphinx==7.2.6
|
|
55
|
+
Requires-Dist: sphinxcontrib-napoleon==0.7
|
|
56
|
+
Requires-Dist: tqdm==4.66.2
|
|
57
|
+
Requires-Dist: vtk==9.3.0
|
|
58
|
+
Requires-Dist: wheel==0.43.0
|
|
57
59
|
|
|
58
60
|
# Struphy - Structure-preserving hybrid codes
|
|
59
61
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "struphy"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.3.0"
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
requires-python = ">=3.7, <3.12"
|
|
10
10
|
license = {file = "LICENSE"}
|
|
@@ -19,30 +19,32 @@ classifiers = [
|
|
|
19
19
|
"Programming Language :: Python :: 3",
|
|
20
20
|
]
|
|
21
21
|
dependencies = [
|
|
22
|
-
'
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'nbsphinx',
|
|
35
|
-
'notebook',
|
|
36
|
-
'
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
'
|
|
43
|
-
'
|
|
44
|
-
'
|
|
45
|
-
'
|
|
22
|
+
'PyYAML==6.0.1',
|
|
23
|
+
'argcomplete==3.2.3',
|
|
24
|
+
'docutils==0.20.1',
|
|
25
|
+
'gvec-to-python==1.2.1',
|
|
26
|
+
'h5py==3.10.0',
|
|
27
|
+
'ipyparallel==8.7.0',
|
|
28
|
+
'lxml_html_clean==0.1.0',
|
|
29
|
+
'm2r2==0.3.3.post2',
|
|
30
|
+
'matplotlib==3.8.3',
|
|
31
|
+
'mistune==0.8.4',
|
|
32
|
+
'mpi4py==3.1.5',
|
|
33
|
+
'myst-parser==2.0.0',
|
|
34
|
+
'nbsphinx==0.9.3',
|
|
35
|
+
'notebook==7.1.2',
|
|
36
|
+
'numpy==1.24.4',
|
|
37
|
+
'pyccel==1.11.2',
|
|
38
|
+
'pydata-sphinx-theme==0.15.2',
|
|
39
|
+
'pytest==8.1.1',
|
|
40
|
+
'pytest-monitor==1.6.6',
|
|
41
|
+
'pytest-mpi==0.6',
|
|
42
|
+
'scipy==1.12.0',
|
|
43
|
+
'Sphinx==7.2.6',
|
|
44
|
+
'sphinxcontrib-napoleon==0.7',
|
|
45
|
+
'tqdm==4.66.2',
|
|
46
|
+
'vtk==9.3.0',
|
|
47
|
+
'wheel==0.43.0',
|
|
46
48
|
]
|
|
47
49
|
|
|
48
50
|
[project.urls]
|
|
@@ -78,5 +80,5 @@ struphy = "struphy.console.main:struphy"
|
|
|
78
80
|
]
|
|
79
81
|
|
|
80
82
|
struphy = ['compile_struphy.mk',
|
|
81
|
-
'psydac-0.1.
|
|
83
|
+
'psydac-0.1.12-py3-none-any.whl',
|
|
82
84
|
]
|
|
@@ -373,7 +373,7 @@ def collocation_matrix(knots, degree, xgrid, periodic, normalize=False):
|
|
|
373
373
|
# ==============================================================================
|
|
374
374
|
def histopolation_matrix(knots, degree, xgrid, periodic):
|
|
375
375
|
"""
|
|
376
|
-
Computes the histopolation matrix $H_ij =
|
|
376
|
+
Computes the histopolation matrix $H_ij = int_{x_i}^x_{i+1} D_j(x) dx$ of the M_splines.
|
|
377
377
|
|
|
378
378
|
Parameters
|
|
379
379
|
----------
|
|
@@ -124,7 +124,7 @@ def evaluate(kind1: int, t1: 'float[:]', p1: int, ind1: 'int[:,:]', coeff: 'floa
|
|
|
124
124
|
@pure
|
|
125
125
|
def evaluate_vector(t1: 'float[:]', p1: int, ind1: 'int[:,:]', coeff: 'float[:]', eta1: 'float[:]', spline_values: 'float[:]', kind: int):
|
|
126
126
|
"""
|
|
127
|
-
Vector evaluation of a
|
|
127
|
+
Vector evaluation of a uni-variate spline.
|
|
128
128
|
|
|
129
129
|
Parameters
|
|
130
130
|
----------
|
|
@@ -24,10 +24,12 @@ from numpy import empty, zeros
|
|
|
24
24
|
|
|
25
25
|
import struphy.bsplines.bsplines_kernels as bsplines_kernels
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
#################################
|
|
28
|
+
### Single process evaluation ###
|
|
29
|
+
#################################
|
|
28
30
|
def evaluation_kernel_3d(p1: int, p2: int, p3: int, basis1: 'float[:]', basis2: 'float[:]', basis3: 'float[:]', ind1: 'int[:]', ind2: 'int[:]', ind3: 'int[:]', coeff: 'float[:,:,:]') -> float:
|
|
29
31
|
"""
|
|
30
|
-
Summing non-zero contributions of a spline function.
|
|
32
|
+
Summing non-zero contributions of a spline function (serial, needs global arrays).
|
|
31
33
|
|
|
32
34
|
Parameters
|
|
33
35
|
----------
|
|
@@ -64,10 +66,10 @@ def evaluation_kernel_3d(p1: int, p2: int, p3: int, basis1: 'float[:]', basis2:
|
|
|
64
66
|
return spline_value
|
|
65
67
|
|
|
66
68
|
|
|
67
|
-
@stack_array('tmp1', 'tmp2', 'tmp3')
|
|
69
|
+
@stack_array('b1', 'b2', 'b3', 'bl1', 'bl2', 'bl3', 'br1', 'br2', 'br3', 'tmp1', 'tmp2', 'tmp3')
|
|
68
70
|
def evaluate_3d(kind1: int, kind2: int, kind3: int, t1: 'float[:]', t2: 'float[:]', t3: 'float[:]', p1: int, p2: int, p3: int, ind1: 'int[:,:]', ind2: 'int[:,:]', ind3: 'int[:,:]', coeff: 'float[:,:,:]', eta1: float, eta2: float, eta3: float) -> float:
|
|
69
71
|
"""
|
|
70
|
-
Point-wise evaluation of a tensor-product spline.
|
|
72
|
+
Point-wise evaluation of a tensor-product spline (serial, needs global arrays).
|
|
71
73
|
|
|
72
74
|
Parameters
|
|
73
75
|
----------
|
|
@@ -156,7 +158,7 @@ def evaluate_3d(kind1: int, kind2: int, kind3: int, t1: 'float[:]', t2: 'float[:
|
|
|
156
158
|
|
|
157
159
|
def evaluate_tensor_product(t1: 'float[:]', t2: 'float[:]', t3: 'float[:]', p1: int, p2: int, p3: int, ind1: 'int[:,:]', ind2: 'int[:,:]', ind3: 'int[:,:]', coeff: 'float[:,:,:]', eta1: 'float[:]', eta2: 'float[:]', eta3: 'float[:]', spline_values: 'float[:,:,:]', kind: int):
|
|
158
160
|
"""
|
|
159
|
-
Tensor-product evaluation of a tensor-product spline.
|
|
161
|
+
Tensor-product evaluation of a tensor-product spline (serial, needs global arrays).
|
|
160
162
|
|
|
161
163
|
Parameters
|
|
162
164
|
----------
|
|
@@ -234,7 +236,7 @@ def evaluate_tensor_product(t1: 'float[:]', t2: 'float[:]', t3: 'float[:]', p1:
|
|
|
234
236
|
|
|
235
237
|
def evaluate_matrix(t1: 'float[:]', t2: 'float[:]', t3: 'float[:]', p1: int, p2: int, p3: int, ind1: 'int[:,:]', ind2: 'int[:,:]', ind3: 'int[:,:]', coeff: 'float[:,:,:]', eta1: 'float[:,:,:]', eta2: 'float[:,:,:]', eta3: 'float[:,:,:]', spline_values: 'float[:,:,:]', kind: int):
|
|
236
238
|
"""
|
|
237
|
-
General evaluation of a tensor-product spline.
|
|
239
|
+
General evaluation of a tensor-product spline (serial, needs global arrays).
|
|
238
240
|
|
|
239
241
|
Parameters
|
|
240
242
|
----------
|
|
@@ -318,7 +320,7 @@ def evaluate_matrix(t1: 'float[:]', t2: 'float[:]', t3: 'float[:]', p1: int, p2
|
|
|
318
320
|
|
|
319
321
|
def evaluate_sparse(t1: 'float[:]', t2: 'float[:]', t3: 'float[:]', p1: int, p2: int, p3: int, ind1: 'int[:,:]', ind2: 'int[:,:]', ind3: 'int[:,:]', coeff: 'float[:,:,:]', eta1: 'float[:,:,:]', eta2: 'float[:,:,:]', eta3: 'float[:,:,:]', spline_values: 'float[:,:,:]', kind: int):
|
|
320
322
|
"""
|
|
321
|
-
Evaluation of a tensor-product spline using sparse meshgrids.
|
|
323
|
+
Evaluation of a tensor-product spline using sparse meshgrids (serial, needs global arrays).
|
|
322
324
|
|
|
323
325
|
Parameters
|
|
324
326
|
----------
|
|
@@ -399,10 +401,12 @@ def evaluate_sparse(t1: 'float[:]', t2: 'float[:]', t3: 'float[:]', p1: int, p2:
|
|
|
399
401
|
spline_values[i1, i2, i3] = evaluate_3d(
|
|
400
402
|
1, 1, 3, t1, t2, t3, p1, p2, p3, ind1, ind2, ind3, coeff, eta1[i1, 0, 0], eta2[0, i2, 0], eta3[0, 0, i3])
|
|
401
403
|
|
|
402
|
-
|
|
404
|
+
##############################
|
|
405
|
+
### Distributed evaluation ###
|
|
406
|
+
##############################
|
|
403
407
|
def eval_spline_mpi_kernel(p1: 'int', p2: 'int', p3: 'int', basis1: 'float[:]', basis2: 'float[:]', basis3: 'float[:]', span1: 'int', span2: 'int', span3: 'int', _data: 'float[:,:,:]', starts: 'int[:]') -> float:
|
|
404
408
|
"""
|
|
405
|
-
|
|
409
|
+
Summing non-zero contributions of a spline function with distributed memory (domain decomposition).
|
|
406
410
|
|
|
407
411
|
Parameters
|
|
408
412
|
----------
|
|
@@ -444,7 +448,7 @@ def eval_spline_mpi_kernel(p1: 'int', p2: 'int', p3: 'int', basis1: 'float[:]',
|
|
|
444
448
|
|
|
445
449
|
def eval_spline_derivative_mpi_kernel(p1: 'int', p2: 'int', p3: 'int', basis1: 'float[:]', basis2: 'float[:]', basis3: 'float[:]', span1: 'int', span2: 'int', span3: 'int', _data: 'float[:,:,:]', starts: 'int[:]', direction: 'int') -> float:
|
|
446
450
|
"""
|
|
447
|
-
Kernel for the derivative of a spline in one direction (distributed).
|
|
451
|
+
Kernel for the derivative of a spline in one direction (distributed, domain decomp.).
|
|
448
452
|
|
|
449
453
|
Parameters
|
|
450
454
|
----------
|
|
@@ -507,6 +511,7 @@ def eval_spline_derivative_mpi_kernel(p1: 'int', p2: 'int', p3: 'int', basis1: '
|
|
|
507
511
|
return spline_value
|
|
508
512
|
|
|
509
513
|
|
|
514
|
+
@stack_array('bn1', 'bn2', 'bn3', 'bd1', 'bd2', 'bd3')
|
|
510
515
|
def eval_spline_mpi(eta1: float, eta2: float, eta3: float,
|
|
511
516
|
_data: 'float[:,:,:]', kind: 'int[:]',
|
|
512
517
|
pn: 'int[:]', tn1: 'float[:]', tn2: 'float[:]', tn3: 'float[:]',
|
|
@@ -590,7 +595,7 @@ def eval_spline_mpi_tensor_product(eta1: 'float[:]', eta2: 'float[:]', eta3: 'fl
|
|
|
590
595
|
----------
|
|
591
596
|
eta1, eta2, eta3 : array[float]
|
|
592
597
|
Evaluation points as 1d arrays; points not on local process domain must be flagged as -1.
|
|
593
|
-
|
|
598
|
+
The out array is global and contains the spline values as S_ijk = S(eta1[i], eta2[j], eta3[k]).
|
|
594
599
|
|
|
595
600
|
_data : array[float]
|
|
596
601
|
The spline coefficients c_ijk.
|
|
@@ -625,6 +630,153 @@ def eval_spline_mpi_tensor_product(eta1: 'float[:]', eta2: 'float[:]', eta3: 'fl
|
|
|
625
630
|
eta1[i], eta2[j], eta3[k], _data, kind, pn, tn1, tn2, tn3, starts)
|
|
626
631
|
|
|
627
632
|
|
|
633
|
+
@stack_array('bn1', 'bn2', 'bn3', 'bd1', 'bd2', 'bd3')
|
|
634
|
+
def eval_spline_mpi_tensor_product_fast(eta1: 'float[:]', eta2: 'float[:]', eta3: 'float[:]',
|
|
635
|
+
_data: 'float[:,:,:]', kind: 'int[:]',
|
|
636
|
+
pn: 'int[:]', tn1: 'float[:]', tn2: 'float[:]', tn3: 'float[:]',
|
|
637
|
+
starts: 'int[:]', values: 'float[:,:,:]'):
|
|
638
|
+
"""
|
|
639
|
+
Tensor-product evaluation of a tensor-product spline, distributed,
|
|
640
|
+
and optimized by computing spans and spline values only once.
|
|
641
|
+
|
|
642
|
+
Parameters
|
|
643
|
+
----------
|
|
644
|
+
eta1, eta2, eta3 : array[float]
|
|
645
|
+
Evaluation points as 1d arrays; points not on local process domain must be flagged as -1.
|
|
646
|
+
Spline values are obtained as S_ijk = S(eta1[i], eta2[j], eta3[k]).
|
|
647
|
+
|
|
648
|
+
_data : array[float]
|
|
649
|
+
The spline coefficients c_ijk.
|
|
650
|
+
|
|
651
|
+
kind : array[int]
|
|
652
|
+
Kind of 1d basis in each direction: 0 = N-spline, 1 = D-spline.
|
|
653
|
+
|
|
654
|
+
pn : array[int]
|
|
655
|
+
Spline degrees of V0 in each direction.
|
|
656
|
+
|
|
657
|
+
tn1, tn2, tn3 : array[float]
|
|
658
|
+
Knot vectors of V0 in each direction.
|
|
659
|
+
|
|
660
|
+
starts : array[float]
|
|
661
|
+
Start indices of splines on current process.
|
|
662
|
+
|
|
663
|
+
values : array[float]
|
|
664
|
+
Return array for spline values S_ijk = S(eta1[i], eta2[j], eta3[k]).
|
|
665
|
+
"""
|
|
666
|
+
# allocate spline values
|
|
667
|
+
bn1 = empty(pn[0] + 1, dtype=float)
|
|
668
|
+
bn2 = empty(pn[1] + 1, dtype=float)
|
|
669
|
+
bn3 = empty(pn[2] + 1, dtype=float)
|
|
670
|
+
|
|
671
|
+
bd1 = empty(pn[0], dtype=float)
|
|
672
|
+
bd2 = empty(pn[1], dtype=float)
|
|
673
|
+
bd3 = empty(pn[2], dtype=float)
|
|
674
|
+
|
|
675
|
+
for i in range(len(eta1)):
|
|
676
|
+
if eta1[i] == -1.:
|
|
677
|
+
continue # point not in process domain
|
|
678
|
+
|
|
679
|
+
span1 = bsplines_kernels.find_span(tn1, pn[0], eta1[i])
|
|
680
|
+
bsplines_kernels.b_d_splines_slim(tn1, pn[0], eta1[i], span1, bn1, bd1)
|
|
681
|
+
if kind[0] == 0:
|
|
682
|
+
b1 = bn1
|
|
683
|
+
else:
|
|
684
|
+
b1 = bd1
|
|
685
|
+
|
|
686
|
+
for j in range(len(eta2)):
|
|
687
|
+
if eta2[j] == -1.:
|
|
688
|
+
continue # point not in process domain
|
|
689
|
+
|
|
690
|
+
span2 = bsplines_kernels.find_span(tn2, pn[1], eta2[j])
|
|
691
|
+
bsplines_kernels.b_d_splines_slim(
|
|
692
|
+
tn2, pn[1], eta2[j], span2, bn2, bd2)
|
|
693
|
+
if kind[1] == 0:
|
|
694
|
+
b2 = bn2
|
|
695
|
+
else:
|
|
696
|
+
b2 = bd2
|
|
697
|
+
|
|
698
|
+
for k in range(len(eta3)):
|
|
699
|
+
if eta3[k] == -1.:
|
|
700
|
+
continue # point not in process domain
|
|
701
|
+
|
|
702
|
+
span3 = bsplines_kernels.find_span(tn3, pn[2], eta3[k])
|
|
703
|
+
bsplines_kernels.b_d_splines_slim(
|
|
704
|
+
tn3, pn[2], eta3[k], span3, bn3, bd3)
|
|
705
|
+
if kind[2] == 0:
|
|
706
|
+
b3 = bn3
|
|
707
|
+
else:
|
|
708
|
+
b3 = bd3
|
|
709
|
+
|
|
710
|
+
values[i, j, k] = eval_spline_mpi_kernel(pn[0] - kind[0],
|
|
711
|
+
pn[1] - kind[1],
|
|
712
|
+
pn[2] - kind[2],
|
|
713
|
+
b1, b2, b3,
|
|
714
|
+
span1, span2, span3,
|
|
715
|
+
_data,
|
|
716
|
+
starts)
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
@stack_array('b1', 'b2', 'b3')
|
|
720
|
+
def eval_spline_mpi_tensor_product_fixed(span1s: 'int[:]', span2s: 'int[:]', span3s: 'int[:]',
|
|
721
|
+
b1s: 'float[:,:]', b2s: 'float[:,:]', b3s: 'float[:,:]',
|
|
722
|
+
_data: 'float[:,:,:]', kind: 'int[:]', pn: 'int[:]',
|
|
723
|
+
starts: 'int[:]', values: 'float[:,:,:]'):
|
|
724
|
+
"""
|
|
725
|
+
Tensor-product evaluation of a tensor-product spline, distributed,
|
|
726
|
+
and optimized for a fixed grid (spans and spline values have been pre-evaluated).
|
|
727
|
+
|
|
728
|
+
Parameters
|
|
729
|
+
----------
|
|
730
|
+
span1s, span2s, span3s : array[int]
|
|
731
|
+
Knot span indices.
|
|
732
|
+
|
|
733
|
+
b1s, b2s, b3s : array[float]
|
|
734
|
+
Values of p+1 non-zero basis functions at evaluation points.
|
|
735
|
+
|
|
736
|
+
_data : array[float]
|
|
737
|
+
The spline coefficients c_ijk.
|
|
738
|
+
|
|
739
|
+
kind : array[int]
|
|
740
|
+
Kind of 1d basis in each direction: 0 = N-spline, 1 = D-spline.
|
|
741
|
+
|
|
742
|
+
pn : array[int]
|
|
743
|
+
Spline degrees of V0 in each direction.
|
|
744
|
+
|
|
745
|
+
starts : array[float]
|
|
746
|
+
Start indices of splines on current process.
|
|
747
|
+
|
|
748
|
+
values : array[float]
|
|
749
|
+
Return array for spline values S_ijk where ijk are the flattened indices corresponding to spans.
|
|
750
|
+
"""
|
|
751
|
+
|
|
752
|
+
# allocate spline values
|
|
753
|
+
b1 = empty(pn[0] - kind[0] + 1, dtype=float)
|
|
754
|
+
b2 = empty(pn[1] - kind[1] + 1, dtype=float)
|
|
755
|
+
b3 = empty(pn[2] - kind[2] + 1, dtype=float)
|
|
756
|
+
|
|
757
|
+
ni = span1s.size
|
|
758
|
+
nj = span2s.size
|
|
759
|
+
nk = span3s.size
|
|
760
|
+
|
|
761
|
+
for i in range(ni):
|
|
762
|
+
span1 = span1s[i]
|
|
763
|
+
b1[:] = b1s[i, :]
|
|
764
|
+
for j in range(nj):
|
|
765
|
+
span2 = span2s[j]
|
|
766
|
+
b2[:] = b2s[j, :]
|
|
767
|
+
for k in range(nk):
|
|
768
|
+
span3 = span3s[k]
|
|
769
|
+
b3[:] = b3s[k, :]
|
|
770
|
+
|
|
771
|
+
values[i, j, k] = eval_spline_mpi_kernel(pn[0] - kind[0],
|
|
772
|
+
pn[1] - kind[1],
|
|
773
|
+
pn[2] - kind[2],
|
|
774
|
+
b1, b2, b3,
|
|
775
|
+
span1, span2, span3,
|
|
776
|
+
_data,
|
|
777
|
+
starts)
|
|
778
|
+
|
|
779
|
+
|
|
628
780
|
def eval_spline_mpi_matrix(eta1: 'float[:,:,:]', eta2: 'float[:,:,:]', eta3: 'float[:,:,:]',
|
|
629
781
|
_data: 'float[:,:,:]', kind: 'int[:]',
|
|
630
782
|
pn: 'int[:]', tn1: 'float[:]', tn2: 'float[:]', tn3: 'float[:]',
|
|
@@ -724,4 +876,4 @@ def eval_spline_mpi_sparse_meshgrid(eta1: 'float[:,:,:]', eta2: 'float[:,:,:]',
|
|
|
724
876
|
continue # point not in process domain
|
|
725
877
|
|
|
726
878
|
values[i, j, k] = eval_spline_mpi(
|
|
727
|
-
eta1[i, 0, 0], eta2[0, j, 0], eta3[0, 0, k], _data, kind, pn, tn1, tn2, tn3, starts)
|
|
879
|
+
eta1[i, 0, 0], eta2[0, j, 0], eta3[0, 0, k], _data, kind, pn, tn1, tn2, tn3, starts)
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
import numpy as np
|
|
3
|
+
from mpi4py import MPI
|
|
4
|
+
import time
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@pytest.mark.mpi(min_size=2)
|
|
8
|
+
@pytest.mark.parametrize('Nel', [[8, 9, 10]])
|
|
9
|
+
@pytest.mark.parametrize('p', [[1, 2, 1], [2, 1, 2], [3, 4, 3]])
|
|
10
|
+
@pytest.mark.parametrize('spl_kind', [[False, False, True], [False, True, False], [True, False, False]])
|
|
11
|
+
def test_bsplines_span_and_basis(Nel, p, spl_kind):
|
|
12
|
+
'''
|
|
13
|
+
Compare Struphy and Psydac bsplines kernels for knot spans and basis values computation.
|
|
14
|
+
Print timings.
|
|
15
|
+
'''
|
|
16
|
+
|
|
17
|
+
from struphy.feec.psydac_derham import Derham
|
|
18
|
+
|
|
19
|
+
from struphy.feec.utilities import create_equal_random_arrays as cera
|
|
20
|
+
import struphy.bsplines.bsplines_kernels as bsp
|
|
21
|
+
import psydac.core.bsplines_pyccel as bsp_psy
|
|
22
|
+
|
|
23
|
+
comm = MPI.COMM_WORLD
|
|
24
|
+
assert comm.size >= 2
|
|
25
|
+
rank = comm.Get_rank()
|
|
26
|
+
|
|
27
|
+
# Psydac discrete Derham sequence
|
|
28
|
+
derham = Derham(Nel, p, spl_kind, comm=comm)
|
|
29
|
+
|
|
30
|
+
# knot vectors
|
|
31
|
+
tn1, tn2, tn3 = derham.Vh_fem['0'].knots
|
|
32
|
+
td1, td2, td3 = derham.Vh_fem['3'].knots
|
|
33
|
+
|
|
34
|
+
# Random points in domain of process
|
|
35
|
+
n_pts = 100
|
|
36
|
+
dom = derham.domain_array[rank]
|
|
37
|
+
eta1s = np.random.rand(n_pts)*(dom[1] - dom[0]) + dom[0]
|
|
38
|
+
eta2s = np.random.rand(n_pts)*(dom[4] - dom[3]) + dom[3]
|
|
39
|
+
eta3s = np.random.rand(n_pts)*(dom[7] - dom[6]) + dom[6]
|
|
40
|
+
|
|
41
|
+
# struphy find_span
|
|
42
|
+
t0 = time.time()
|
|
43
|
+
span1s, span2s, span3s = [], [], []
|
|
44
|
+
for eta1, eta2, eta3 in zip(eta1s, eta2s, eta3s):
|
|
45
|
+
span1s += [bsp.find_span(tn1, derham.p[0], eta1)]
|
|
46
|
+
span2s += [bsp.find_span(tn2, derham.p[1], eta2)]
|
|
47
|
+
span3s += [bsp.find_span(tn3, derham.p[2], eta3)]
|
|
48
|
+
t1 = time.time()
|
|
49
|
+
if rank == 0:
|
|
50
|
+
print(f'struphy find_span : {t1 - t0}')
|
|
51
|
+
|
|
52
|
+
# psydac find_span_p
|
|
53
|
+
t0 = time.time()
|
|
54
|
+
span1s_psy, span2s_psy, span3s_psy = [], [], []
|
|
55
|
+
for eta1, eta2, eta3 in zip(eta1s, eta2s, eta3s):
|
|
56
|
+
span1s_psy += [bsp_psy.find_span_p(tn1, derham.p[0], eta1)]
|
|
57
|
+
span2s_psy += [bsp_psy.find_span_p(tn2, derham.p[1], eta2)]
|
|
58
|
+
span3s_psy += [bsp_psy.find_span_p(tn3, derham.p[2], eta3)]
|
|
59
|
+
t1 = time.time()
|
|
60
|
+
if rank == 0:
|
|
61
|
+
print(f'psydac find_span_p : {t1 - t0}')
|
|
62
|
+
|
|
63
|
+
assert np.allclose(span1s, span1s_psy)
|
|
64
|
+
assert np.allclose(span2s, span2s_psy)
|
|
65
|
+
assert np.allclose(span3s, span3s_psy)
|
|
66
|
+
|
|
67
|
+
# allocate tmps
|
|
68
|
+
bn1 = np.empty(derham.p[0] + 1, dtype=float)
|
|
69
|
+
bn2 = np.empty(derham.p[1] + 1, dtype=float)
|
|
70
|
+
bn3 = np.empty(derham.p[2] + 1, dtype=float)
|
|
71
|
+
|
|
72
|
+
bd1 = np.empty(derham.p[0], dtype=float)
|
|
73
|
+
bd2 = np.empty(derham.p[1], dtype=float)
|
|
74
|
+
bd3 = np.empty(derham.p[2], dtype=float)
|
|
75
|
+
|
|
76
|
+
# struphy b_splines_slim
|
|
77
|
+
val1s, val2s, val3s = [], [], []
|
|
78
|
+
t0 = time.time()
|
|
79
|
+
for eta1, eta2, eta3, span1, span2, span3 in zip(eta1s, eta2s, eta3s, span1s, span2s, span3s):
|
|
80
|
+
bsp.b_splines_slim(tn1, derham.p[0], eta1, span1, bn1)
|
|
81
|
+
bsp.b_splines_slim(tn2, derham.p[1], eta2, span2, bn2)
|
|
82
|
+
bsp.b_splines_slim(tn3, derham.p[2], eta3, span3, bn3)
|
|
83
|
+
val1s += [bn1]
|
|
84
|
+
val2s += [bn2]
|
|
85
|
+
val3s += [bn3]
|
|
86
|
+
t1 = time.time()
|
|
87
|
+
if rank == 0:
|
|
88
|
+
print(f'bsp.b_splines_slim : {t1 - t0}')
|
|
89
|
+
|
|
90
|
+
# psydac basis_funs_p
|
|
91
|
+
val1s_psy, val2s_psy, val3s_psy = [], [], []
|
|
92
|
+
t0 = time.time()
|
|
93
|
+
for eta1, eta2, eta3, span1, span2, span3 in zip(eta1s, eta2s, eta3s, span1s, span2s, span3s):
|
|
94
|
+
bsp_psy.basis_funs_p(tn1, derham.p[0], eta1, span1, bn1)
|
|
95
|
+
bsp_psy.basis_funs_p(tn2, derham.p[1], eta2, span2, bn2)
|
|
96
|
+
bsp_psy.basis_funs_p(tn3, derham.p[2], eta3, span3, bn3)
|
|
97
|
+
val1s_psy += [bn1]
|
|
98
|
+
val2s_psy += [bn2]
|
|
99
|
+
val3s_psy += [bn3]
|
|
100
|
+
t1 = time.time()
|
|
101
|
+
if rank == 0:
|
|
102
|
+
print(f'bsp_psy.basis_funs_p for N: {t1 - t0}')
|
|
103
|
+
|
|
104
|
+
# compare
|
|
105
|
+
for val1, val1_psy in zip(val1s, val1s_psy):
|
|
106
|
+
assert np.allclose(val1, val1_psy)
|
|
107
|
+
|
|
108
|
+
for val2, val2_psy in zip(val2s, val2s_psy):
|
|
109
|
+
assert np.allclose(val2, val2_psy)
|
|
110
|
+
|
|
111
|
+
for val3, val3_psy in zip(val3s, val3s_psy):
|
|
112
|
+
assert np.allclose(val3, val3_psy)
|
|
113
|
+
|
|
114
|
+
# struphy b_d_splines_slim
|
|
115
|
+
val1s_n, val2s_n, val3s_n = [], [], []
|
|
116
|
+
val1s_d, val2s_d, val3s_d = [], [], []
|
|
117
|
+
t0 = time.time()
|
|
118
|
+
for eta1, eta2, eta3, span1, span2, span3 in zip(eta1s, eta2s, eta3s, span1s, span2s, span3s):
|
|
119
|
+
bsp.b_d_splines_slim(tn1, derham.p[0], eta1, span1, bn1, bd1)
|
|
120
|
+
bsp.b_d_splines_slim(tn2, derham.p[1], eta2, span2, bn2, bd2)
|
|
121
|
+
bsp.b_d_splines_slim(tn3, derham.p[2], eta3, span3, bn3, bd3)
|
|
122
|
+
val1s_n += [bn1]
|
|
123
|
+
val2s_n += [bn2]
|
|
124
|
+
val3s_n += [bn3]
|
|
125
|
+
val1s_d += [bd1]
|
|
126
|
+
val2s_d += [bd2]
|
|
127
|
+
val3s_d += [bd3]
|
|
128
|
+
t1 = time.time()
|
|
129
|
+
if rank == 0:
|
|
130
|
+
print(f'bsp.b_d_splines_slim : {t1 - t0}')
|
|
131
|
+
|
|
132
|
+
# compare
|
|
133
|
+
for val1, val1_psy in zip(val1s_n, val1s_psy):
|
|
134
|
+
assert np.allclose(val1, val1_psy)
|
|
135
|
+
|
|
136
|
+
for val2, val2_psy in zip(val2s_n, val2s_psy):
|
|
137
|
+
assert np.allclose(val2, val2_psy)
|
|
138
|
+
|
|
139
|
+
for val3, val3_psy in zip(val3s_n, val3s_psy):
|
|
140
|
+
assert np.allclose(val3, val3_psy)
|
|
141
|
+
|
|
142
|
+
# struphy d_splines_slim
|
|
143
|
+
span1s, span2s, span3s = [], [], []
|
|
144
|
+
for eta1, eta2, eta3 in zip(eta1s, eta2s, eta3s):
|
|
145
|
+
span1s += [bsp.find_span(td1, derham.p[0] - 1, eta1)]
|
|
146
|
+
span2s += [bsp.find_span(td2, derham.p[1] - 1, eta2)]
|
|
147
|
+
span3s += [bsp.find_span(td3, derham.p[2] - 1, eta3)]
|
|
148
|
+
|
|
149
|
+
val1s, val2s, val3s = [], [], []
|
|
150
|
+
t0 = time.time()
|
|
151
|
+
for eta1, eta2, eta3, span1, span2, span3 in zip(eta1s, eta2s, eta3s, span1s, span2s, span3s):
|
|
152
|
+
bsp.d_splines_slim(td1, derham.p[0] - 1, eta1, span1, bd1)
|
|
153
|
+
bsp.d_splines_slim(td2, derham.p[1] - 1, eta2, span2, bd2)
|
|
154
|
+
bsp.d_splines_slim(td3, derham.p[2] - 1, eta3, span3, bd3)
|
|
155
|
+
val1s += [bd1]
|
|
156
|
+
val2s += [bd2]
|
|
157
|
+
val3s += [bd3]
|
|
158
|
+
t1 = time.time()
|
|
159
|
+
if rank == 0:
|
|
160
|
+
print(f'bsp.d_splines_slim : {t1 - t0}')
|
|
161
|
+
|
|
162
|
+
# psydac basis_funs_p for D-splines
|
|
163
|
+
val1s_psy, val2s_psy, val3s_psy = [], [], []
|
|
164
|
+
t0 = time.time()
|
|
165
|
+
for eta1, eta2, eta3, span1, span2, span3 in zip(eta1s, eta2s, eta3s, span1s, span2s, span3s):
|
|
166
|
+
bsp_psy.basis_funs_p(td1, derham.p[0] - 1, eta1, span1, bd1)
|
|
167
|
+
bsp_psy.basis_funs_p(td2, derham.p[1] - 1, eta2, span2, bd2)
|
|
168
|
+
bsp_psy.basis_funs_p(td3, derham.p[2] - 1, eta3, span3, bd3)
|
|
169
|
+
val1s_psy += [bd1]
|
|
170
|
+
val2s_psy += [bd2]
|
|
171
|
+
val3s_psy += [bd3]
|
|
172
|
+
t1 = time.time()
|
|
173
|
+
if rank == 0:
|
|
174
|
+
print(f'bsp_psy.basis_funs_p for D: {t1 - t0}')
|
|
175
|
+
|
|
176
|
+
# compare
|
|
177
|
+
for val1, val1_psy in zip(val1s, val1s_psy):
|
|
178
|
+
assert np.allclose(val1, val1_psy)
|
|
179
|
+
|
|
180
|
+
for val2, val2_psy in zip(val2s, val2s_psy):
|
|
181
|
+
assert np.allclose(val2, val2_psy)
|
|
182
|
+
|
|
183
|
+
for val3, val3_psy in zip(val3s, val3s_psy):
|
|
184
|
+
assert np.allclose(val3, val3_psy)
|
|
185
|
+
|
|
186
|
+
for val1, val1_psy in zip(val1s_d, val1s_psy):
|
|
187
|
+
assert np.allclose(val1, val1_psy)
|
|
188
|
+
|
|
189
|
+
for val2, val2_psy in zip(val2s_d, val2s_psy):
|
|
190
|
+
assert np.allclose(val2, val2_psy)
|
|
191
|
+
|
|
192
|
+
for val3, val3_psy in zip(val3s_d, val3s_psy):
|
|
193
|
+
assert np.allclose(val3, val3_psy)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
if __name__ == '__main__':
|
|
197
|
+
test_bsplines_span_and_basis([8, 9, 10], [3, 4, 3], [False, False, True])
|