matterviz 0.3.6 → 0.4.0
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.
- package/dist/EmptyState.svelte.d.ts +9 -0
- package/dist/FilePicker.svelte +360 -0
- package/dist/FilePicker.svelte.d.ts +17 -0
- package/dist/Icon.svelte +44 -0
- package/dist/Icon.svelte.d.ts +13 -0
- package/dist/MillerIndexInput.svelte +66 -0
- package/dist/MillerIndexInput.svelte.d.ts +7 -0
- package/dist/api/mp.d.ts +6 -0
- package/dist/api/mp.js +22 -0
- package/dist/api/optimade.d.ts +45 -0
- package/dist/api/optimade.js +141 -0
- package/dist/app.css +244 -0
- package/dist/brillouin/BrillouinZone.svelte +554 -0
- package/dist/brillouin/BrillouinZone.svelte.d.ts +84 -0
- package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
- package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
- package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
- package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
- package/dist/brillouin/BrillouinZoneScene.svelte +522 -0
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +49 -0
- package/dist/brillouin/BrillouinZoneTooltip.svelte +83 -0
- package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
- package/dist/brillouin/compute.d.ts +17 -0
- package/dist/brillouin/compute.js +422 -0
- package/dist/brillouin/index.d.ts +8 -0
- package/dist/brillouin/index.js +7 -0
- package/dist/brillouin/types.d.ts +43 -0
- package/dist/brillouin/types.js +1 -0
- package/dist/chempot-diagram/ChemPotDiagram.svelte +328 -0
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +843 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3191 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
- package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
- package/dist/chempot-diagram/async-compute.svelte.js +80 -0
- package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
- package/dist/chempot-diagram/chempot-worker.js +12 -0
- package/dist/chempot-diagram/color.d.ts +10 -0
- package/dist/chempot-diagram/color.js +32 -0
- package/dist/chempot-diagram/compute.d.ts +48 -0
- package/dist/chempot-diagram/compute.js +804 -0
- package/dist/chempot-diagram/index.d.ts +6 -0
- package/dist/chempot-diagram/index.js +6 -0
- package/dist/chempot-diagram/pointer.d.ts +16 -0
- package/dist/chempot-diagram/pointer.js +40 -0
- package/dist/chempot-diagram/temperature.d.ts +15 -0
- package/dist/chempot-diagram/temperature.js +34 -0
- package/dist/chempot-diagram/types.d.ts +81 -0
- package/dist/chempot-diagram/types.js +28 -0
- package/dist/colors/index.d.ts +47 -0
- package/dist/colors/index.js +204 -0
- package/dist/composition/BarChart.svelte +297 -0
- package/dist/composition/BarChart.svelte.d.ts +39 -0
- package/dist/composition/BubbleChart.svelte +218 -0
- package/dist/composition/BubbleChart.svelte.d.ts +28 -0
- package/dist/composition/Composition.svelte +165 -0
- package/dist/composition/Composition.svelte.d.ts +15 -0
- package/dist/composition/Formula.svelte +268 -0
- package/dist/composition/Formula.svelte.d.ts +19 -0
- package/dist/composition/FormulaFilter.svelte +1263 -0
- package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
- package/dist/composition/PieChart.svelte +324 -0
- package/dist/composition/PieChart.svelte.d.ts +37 -0
- package/dist/composition/chem-sys.d.ts +8 -0
- package/dist/composition/chem-sys.js +85 -0
- package/dist/composition/format.d.ts +15 -0
- package/dist/composition/format.js +111 -0
- package/dist/composition/index.d.ts +21 -0
- package/dist/composition/index.js +15 -0
- package/dist/composition/parse.d.ts +56 -0
- package/dist/composition/parse.js +486 -0
- package/dist/constants.d.ts +29 -0
- package/dist/constants.js +99 -0
- package/dist/controls.d.ts +14 -0
- package/dist/controls.js +30 -0
- package/dist/convex-hull/ConvexHull.svelte +157 -0
- package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
- package/dist/convex-hull/ConvexHull2D.svelte +827 -0
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
- package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
- package/dist/convex-hull/ConvexHull4D.svelte +1394 -0
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
- package/dist/convex-hull/ConvexHullControls.svelte +535 -0
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
- package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
- package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
- package/dist/convex-hull/ConvexHullStats.svelte +929 -0
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
- package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
- package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
- package/dist/convex-hull/GasPressureControls.svelte +247 -0
- package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
- package/dist/convex-hull/StructurePopup.svelte +151 -0
- package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
- package/dist/convex-hull/TemperatureSlider.svelte +140 -0
- package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
- package/dist/convex-hull/barycentric-coords.d.ts +18 -0
- package/dist/convex-hull/barycentric-coords.js +182 -0
- package/dist/convex-hull/demo-temperature.d.ts +6 -0
- package/dist/convex-hull/demo-temperature.js +38 -0
- package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
- package/dist/convex-hull/gas-thermodynamics.js +306 -0
- package/dist/convex-hull/helpers.d.ts +117 -0
- package/dist/convex-hull/helpers.js +718 -0
- package/dist/convex-hull/index.d.ts +119 -0
- package/dist/convex-hull/index.js +58 -0
- package/dist/convex-hull/thermodynamics.d.ts +67 -0
- package/dist/convex-hull/thermodynamics.js +1757 -0
- package/dist/convex-hull/types.d.ts +162 -0
- package/dist/convex-hull/types.js +36 -0
- package/dist/coordination/CoordinationBarPlot.svelte +311 -0
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
- package/dist/coordination/calc-coordination.d.ts +15 -0
- package/dist/coordination/calc-coordination.js +63 -0
- package/dist/coordination/index.d.ts +8 -0
- package/dist/coordination/index.js +7 -0
- package/dist/effects.svelte.d.ts +12 -0
- package/dist/effects.svelte.js +37 -0
- package/dist/element/BohrAtom.svelte.d.ts +20 -0
- package/dist/element/ElementHeading.svelte +26 -0
- package/dist/element/ElementHeading.svelte.d.ts +8 -0
- package/dist/element/ElementPhoto.svelte +57 -0
- package/dist/element/ElementPhoto.svelte.d.ts +9 -0
- package/dist/element/ElementStats.svelte +80 -0
- package/dist/element/ElementStats.svelte.d.ts +8 -0
- package/dist/element/ElementTile.svelte +484 -0
- package/dist/element/ElementTile.svelte.d.ts +29 -0
- package/dist/element/Nucleus.svelte.d.ts +17 -0
- package/dist/element/data.d.ts +2 -0
- package/dist/element/data.js +2 -0
- package/dist/element/index.d.ts +8 -0
- package/dist/element/index.js +7 -0
- package/dist/element/types.d.ts +57 -0
- package/dist/element/types.js +1 -0
- package/dist/feedback/ClickFeedback.svelte +58 -0
- package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
- package/dist/feedback/DragOverlay.svelte +42 -0
- package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
- package/dist/feedback/Spinner.svelte.d.ts +7 -0
- package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
- package/dist/feedback/index.d.ts +4 -0
- package/dist/feedback/index.js +4 -0
- package/dist/fermi-surface/FermiSlice.svelte +197 -0
- package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
- package/dist/fermi-surface/FermiSurface.svelte +606 -0
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
- package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
- package/dist/fermi-surface/FermiSurfaceScene.svelte +797 -0
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +85 -0
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
- package/dist/fermi-surface/compute.d.ts +5 -0
- package/dist/fermi-surface/compute.js +538 -0
- package/dist/fermi-surface/constants.d.ts +9 -0
- package/dist/fermi-surface/constants.js +27 -0
- package/dist/fermi-surface/export.d.ts +5 -0
- package/dist/fermi-surface/export.js +51 -0
- package/dist/fermi-surface/index.d.ts +12 -0
- package/dist/fermi-surface/index.js +13 -0
- package/dist/fermi-surface/marching-cubes.d.ts +2 -0
- package/dist/fermi-surface/marching-cubes.js +2 -0
- package/dist/fermi-surface/parse.d.ts +2 -0
- package/dist/fermi-surface/parse.js +494 -0
- package/dist/fermi-surface/symmetry.d.ts +3 -0
- package/dist/fermi-surface/symmetry.js +46 -0
- package/dist/fermi-surface/types.d.ts +111 -0
- package/dist/fermi-surface/types.js +4 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +1547 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
- package/dist/heatmap-matrix/index.d.ts +53 -0
- package/dist/heatmap-matrix/index.js +100 -0
- package/dist/heatmap-matrix/shared.d.ts +2 -0
- package/dist/heatmap-matrix/shared.js +4 -0
- package/dist/icons.d.ts +569 -0
- package/dist/icons.js +648 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +39 -0
- package/dist/io/decompress.d.ts +11 -0
- package/dist/io/decompress.js +76 -0
- package/dist/io/export.d.ts +16 -0
- package/dist/io/export.js +338 -0
- package/dist/io/fetch.d.ts +5 -0
- package/dist/io/fetch.js +43 -0
- package/dist/io/file-drop.d.ts +7 -0
- package/dist/io/file-drop.js +42 -0
- package/dist/io/index.d.ts +7 -0
- package/dist/io/index.js +6 -0
- package/dist/io/is-binary.d.ts +1 -0
- package/dist/io/is-binary.js +20 -0
- package/dist/io/types.d.ts +8 -0
- package/dist/io/types.js +1 -0
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +154 -0
- package/dist/isosurface/Isosurface.svelte +285 -0
- package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
- package/dist/isosurface/IsosurfaceControls.svelte +277 -0
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
- package/dist/isosurface/index.d.ts +5 -0
- package/dist/isosurface/index.js +6 -0
- package/dist/isosurface/parse.d.ts +6 -0
- package/dist/isosurface/parse.js +552 -0
- package/dist/isosurface/slice.d.ts +11 -0
- package/dist/isosurface/slice.js +141 -0
- package/dist/isosurface/types.d.ts +56 -0
- package/dist/isosurface/types.js +227 -0
- package/dist/keyboard.d.ts +3 -0
- package/dist/keyboard.js +23 -0
- package/dist/labels.d.ts +53 -0
- package/dist/labels.js +278 -0
- package/dist/layout/FullscreenToggle.svelte +50 -0
- package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
- package/dist/layout/InfoCard.svelte +120 -0
- package/dist/layout/InfoCard.svelte.d.ts +21 -0
- package/dist/layout/InfoTag.svelte +185 -0
- package/dist/layout/InfoTag.svelte.d.ts +19 -0
- package/dist/layout/PropertyFilter.svelte +247 -0
- package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
- package/dist/layout/SettingsSection.svelte +148 -0
- package/dist/layout/SettingsSection.svelte.d.ts +17 -0
- package/dist/layout/SubpageGrid.svelte +82 -0
- package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
- package/dist/layout/fullscreen.d.ts +9 -0
- package/dist/layout/fullscreen.js +53 -0
- package/dist/layout/index.d.ts +10 -0
- package/dist/layout/index.js +8 -0
- package/dist/layout/json-tree/JsonNode.svelte +548 -0
- package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
- package/dist/layout/json-tree/JsonTree.svelte +1230 -0
- package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
- package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
- package/dist/layout/json-tree/index.d.ts +3 -0
- package/dist/layout/json-tree/index.js +3 -0
- package/dist/layout/json-tree/types.d.ts +74 -0
- package/dist/layout/json-tree/types.js +2 -0
- package/dist/layout/json-tree/utils.d.ts +29 -0
- package/dist/layout/json-tree/utils.js +642 -0
- package/dist/marching-cubes.d.ts +14 -0
- package/dist/marching-cubes.js +535 -0
- package/dist/math.d.ts +105 -0
- package/dist/math.js +920 -0
- package/dist/overlays/ContextMenu.svelte +162 -0
- package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
- package/dist/overlays/CopyButton.svelte +45 -0
- package/dist/overlays/CopyButton.svelte.d.ts +8 -0
- package/dist/overlays/DragControlTab.svelte +98 -0
- package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
- package/dist/overlays/DraggablePane.svelte +487 -0
- package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
- package/dist/overlays/InfoPaneCards.svelte +149 -0
- package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
- package/dist/overlays/index.d.ts +3 -0
- package/dist/overlays/index.js +3 -0
- package/dist/periodic-table/PeriodicTable.svelte +480 -0
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
- package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
- package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
- package/dist/periodic-table/PropertySelect.svelte +38 -0
- package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
- package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
- package/dist/periodic-table/index.d.ts +10 -0
- package/dist/periodic-table/index.js +4 -0
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1092 -0
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
- package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +127 -0
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
- package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
- package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
- package/dist/phase-diagram/build-diagram.d.ts +11 -0
- package/dist/phase-diagram/build-diagram.js +160 -0
- package/dist/phase-diagram/colors.d.ts +35 -0
- package/dist/phase-diagram/colors.js +51 -0
- package/dist/phase-diagram/diagram-input.d.ts +29 -0
- package/dist/phase-diagram/diagram-input.js +3 -0
- package/dist/phase-diagram/index.d.ts +13 -0
- package/dist/phase-diagram/index.js +11 -0
- package/dist/phase-diagram/parse.d.ts +55 -0
- package/dist/phase-diagram/parse.js +273 -0
- package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
- package/dist/phase-diagram/svg-to-diagram.js +867 -0
- package/dist/phase-diagram/types.d.ts +93 -0
- package/dist/phase-diagram/types.js +1 -0
- package/dist/phase-diagram/utils.d.ts +118 -0
- package/dist/phase-diagram/utils.js +600 -0
- package/dist/plot/bar/BarPlot.svelte +1755 -0
- package/dist/plot/bar/BarPlot.svelte.d.ts +84 -0
- package/dist/plot/bar/BarPlotControls.svelte +67 -0
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +18 -0
- package/dist/plot/bar/SpacegroupBarPlot.svelte +293 -0
- package/dist/plot/bar/SpacegroupBarPlot.svelte.d.ts +9 -0
- package/dist/plot/bar/data.d.ts +40 -0
- package/dist/plot/bar/data.js +154 -0
- package/dist/plot/bar/geometry.d.ts +39 -0
- package/dist/plot/bar/geometry.js +60 -0
- package/dist/plot/bar/index.d.ts +3 -0
- package/dist/plot/bar/index.js +3 -0
- package/dist/plot/box/BoxPlot.svelte +1462 -0
- package/dist/plot/box/BoxPlot.svelte.d.ts +94 -0
- package/dist/plot/box/BoxPlotControls.svelte +109 -0
- package/dist/plot/box/BoxPlotControls.svelte.d.ts +19 -0
- package/dist/plot/box/Violin.svelte +14 -0
- package/dist/plot/box/Violin.svelte.d.ts +70 -0
- package/dist/plot/box/box-plot.d.ts +55 -0
- package/dist/plot/box/box-plot.js +126 -0
- package/dist/plot/box/index.d.ts +5 -0
- package/dist/plot/box/index.js +5 -0
- package/dist/plot/box/kde.d.ts +16 -0
- package/dist/plot/box/kde.js +160 -0
- package/dist/plot/box/quantile.d.ts +3 -0
- package/dist/plot/box/quantile.js +53 -0
- package/dist/plot/core/auto-place.d.ts +43 -0
- package/dist/plot/core/auto-place.js +122 -0
- package/dist/plot/core/axis-utils.d.ts +46 -0
- package/dist/plot/core/axis-utils.js +110 -0
- package/dist/plot/core/components/AxisLabel.svelte +51 -0
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +16 -0
- package/dist/plot/core/components/ColorBar.svelte +724 -0
- package/dist/plot/core/components/ColorBar.svelte.d.ts +31 -0
- package/dist/plot/core/components/ColorScaleSelect.svelte +55 -0
- package/dist/plot/core/components/ColorScaleSelect.svelte.d.ts +15 -0
- package/dist/plot/core/components/ControlPane.svelte +46 -0
- package/dist/plot/core/components/ControlPane.svelte.d.ts +13 -0
- package/dist/plot/core/components/FillArea.svelte +234 -0
- package/dist/plot/core/components/FillArea.svelte.d.ts +21 -0
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +96 -0
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +14 -0
- package/dist/plot/core/components/Line.svelte +101 -0
- package/dist/plot/core/components/Line.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotAxis.svelte +171 -0
- package/dist/plot/core/components/PlotAxis.svelte.d.ts +25 -0
- package/dist/plot/core/components/PlotControls.svelte +525 -0
- package/dist/plot/core/components/PlotControls.svelte.d.ts +4 -0
- package/dist/plot/core/components/PlotLegend.svelte +580 -0
- package/dist/plot/core/components/PlotLegend.svelte.d.ts +30 -0
- package/dist/plot/core/components/PlotTooltip.svelte +83 -0
- package/dist/plot/core/components/PlotTooltip.svelte.d.ts +25 -0
- package/dist/plot/core/components/PortalSelect.svelte +257 -0
- package/dist/plot/core/components/PortalSelect.svelte.d.ts +16 -0
- package/dist/plot/core/components/ReferenceLine.svelte +204 -0
- package/dist/plot/core/components/ReferenceLine.svelte.d.ts +20 -0
- package/dist/plot/core/components/ReferenceLine3D.svelte +156 -0
- package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +14 -0
- package/dist/plot/core/components/ReferencePlane.svelte +175 -0
- package/dist/plot/core/components/ReferencePlane.svelte.d.ts +14 -0
- package/dist/plot/core/components/ZeroLines.svelte +97 -0
- package/dist/plot/core/components/ZeroLines.svelte.d.ts +33 -0
- package/dist/plot/core/components/ZoomRect.svelte +23 -0
- package/dist/plot/core/components/ZoomRect.svelte.d.ts +8 -0
- package/dist/plot/core/components/index.d.ts +17 -0
- package/dist/plot/core/components/index.js +17 -0
- package/dist/plot/core/data-cleaning.d.ts +107 -0
- package/dist/plot/core/data-cleaning.js +853 -0
- package/dist/plot/core/data-transform.d.ts +16 -0
- package/dist/plot/core/data-transform.js +45 -0
- package/dist/plot/core/fill-utils.d.ts +33 -0
- package/dist/plot/core/fill-utils.js +388 -0
- package/dist/plot/core/hover-lock.svelte.d.ts +14 -0
- package/dist/plot/core/hover-lock.svelte.js +45 -0
- package/dist/plot/core/index.d.ts +10 -0
- package/dist/plot/core/index.js +11 -0
- package/dist/plot/core/interactions.d.ts +35 -0
- package/dist/plot/core/interactions.js +195 -0
- package/dist/plot/core/layout.d.ts +79 -0
- package/dist/plot/core/layout.js +281 -0
- package/dist/plot/core/reference-line.d.ts +60 -0
- package/dist/plot/core/reference-line.js +301 -0
- package/dist/plot/core/scales.d.ts +48 -0
- package/dist/plot/core/scales.js +480 -0
- package/dist/plot/core/svg.d.ts +2 -0
- package/dist/plot/core/svg.js +41 -0
- package/dist/plot/core/types.d.ts +771 -0
- package/dist/plot/core/types.js +99 -0
- package/dist/plot/core/utils/label-placement.d.ts +68 -0
- package/dist/plot/core/utils/label-placement.js +326 -0
- package/dist/plot/core/utils/series-visibility.d.ts +26 -0
- package/dist/plot/core/utils/series-visibility.js +112 -0
- package/dist/plot/core/utils.d.ts +11 -0
- package/dist/plot/core/utils.js +27 -0
- package/dist/plot/histogram/Histogram.svelte +1418 -0
- package/dist/plot/histogram/Histogram.svelte.d.ts +50 -0
- package/dist/plot/histogram/HistogramControls.svelte +212 -0
- package/dist/plot/histogram/HistogramControls.svelte.d.ts +22 -0
- package/dist/plot/histogram/index.d.ts +2 -0
- package/dist/plot/histogram/index.js +2 -0
- package/dist/plot/index.d.ts +8 -0
- package/dist/plot/index.js +10 -0
- package/dist/plot/sankey/Sankey.svelte +700 -0
- package/dist/plot/sankey/Sankey.svelte.d.ts +74 -0
- package/dist/plot/sankey/SankeyControls.svelte +98 -0
- package/dist/plot/sankey/SankeyControls.svelte.d.ts +19 -0
- package/dist/plot/sankey/index.d.ts +4 -0
- package/dist/plot/sankey/index.js +3 -0
- package/dist/plot/sankey/sankey-types.d.ts +42 -0
- package/dist/plot/sankey/sankey-types.js +4 -0
- package/dist/plot/sankey/sankey.d.ts +52 -0
- package/dist/plot/sankey/sankey.js +187 -0
- package/dist/plot/scatter/BinnedScatterPlot.svelte +1116 -0
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +66 -0
- package/dist/plot/scatter/ElementScatter.svelte +63 -0
- package/dist/plot/scatter/ElementScatter.svelte.d.ts +14 -0
- package/dist/plot/scatter/ScatterPlot.svelte +2357 -0
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +96 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte +307 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +17 -0
- package/dist/plot/scatter/ScatterPoint.svelte +182 -0
- package/dist/plot/scatter/ScatterPoint.svelte.d.ts +22 -0
- package/dist/plot/scatter/adaptive-density.d.ts +79 -0
- package/dist/plot/scatter/adaptive-density.js +217 -0
- package/dist/plot/scatter/binned-scatter-types.d.ts +59 -0
- package/dist/plot/scatter/binned-scatter-types.js +1 -0
- package/dist/plot/scatter/index.d.ts +7 -0
- package/dist/plot/scatter/index.js +5 -0
- package/dist/plot/scatter/scatter-data.d.ts +19 -0
- package/dist/plot/scatter/scatter-data.js +212 -0
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +531 -0
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +95 -0
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +438 -0
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +20 -0
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +912 -0
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +74 -0
- package/dist/plot/scatter-3d/Surface3D.svelte +197 -0
- package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +13 -0
- package/dist/plot/scatter-3d/index.d.ts +4 -0
- package/dist/plot/scatter-3d/index.js +4 -0
- package/dist/plot/sunburst/Sunburst.svelte +1045 -0
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +96 -0
- package/dist/plot/sunburst/SunburstControls.svelte +200 -0
- package/dist/plot/sunburst/SunburstControls.svelte.d.ts +26 -0
- package/dist/plot/sunburst/index.d.ts +4 -0
- package/dist/plot/sunburst/index.js +4 -0
- package/dist/plot/sunburst/render.d.ts +34 -0
- package/dist/plot/sunburst/render.js +122 -0
- package/dist/plot/sunburst/sunburst.d.ts +62 -0
- package/dist/plot/sunburst/sunburst.js +266 -0
- package/dist/rdf/RdfPlot.svelte +248 -0
- package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
- package/dist/rdf/calc-rdf.d.ts +4 -0
- package/dist/rdf/calc-rdf.js +98 -0
- package/dist/rdf/index.d.ts +23 -0
- package/dist/rdf/index.js +2 -0
- package/dist/sanitize.d.ts +6 -0
- package/dist/sanitize.js +116 -0
- package/dist/settings.d.ts +319 -0
- package/dist/settings.js +1394 -0
- package/dist/spectral/Bands.svelte +1050 -0
- package/dist/spectral/Bands.svelte.d.ts +39 -0
- package/dist/spectral/BandsAndDos.svelte +134 -0
- package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
- package/dist/spectral/BrillouinBandsDos.svelte +264 -0
- package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
- package/dist/spectral/Dos.svelte +688 -0
- package/dist/spectral/Dos.svelte.d.ts +29 -0
- package/dist/spectral/helpers.d.ts +121 -0
- package/dist/spectral/helpers.js +1098 -0
- package/dist/spectral/index.d.ts +6 -0
- package/dist/spectral/index.js +6 -0
- package/dist/spectral/types.d.ts +84 -0
- package/dist/spectral/types.js +2 -0
- package/dist/state.svelte.d.ts +25 -0
- package/dist/state.svelte.js +45 -0
- package/dist/structure/Arrow.svelte +72 -0
- package/dist/structure/Arrow.svelte.d.ts +15 -0
- package/dist/structure/AtomLegend.svelte +814 -0
- package/dist/structure/AtomLegend.svelte.d.ts +35 -0
- package/dist/structure/Bond.svelte +140 -0
- package/dist/structure/Bond.svelte.d.ts +9 -0
- package/dist/structure/CanvasTooltip.svelte +33 -0
- package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
- package/dist/structure/CellSelect.svelte +348 -0
- package/dist/structure/CellSelect.svelte.d.ts +13 -0
- package/dist/structure/Cylinder.svelte +49 -0
- package/dist/structure/Cylinder.svelte.d.ts +13 -0
- package/dist/structure/Lattice.svelte +196 -0
- package/dist/structure/Lattice.svelte.d.ts +17 -0
- package/dist/structure/Structure.svelte +2254 -0
- package/dist/structure/Structure.svelte.d.ts +89 -0
- package/dist/structure/StructureControls.svelte +1273 -0
- package/dist/structure/StructureControls.svelte.d.ts +31 -0
- package/dist/structure/StructureExportPane.svelte +252 -0
- package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
- package/dist/structure/StructureInfoPane.svelte +736 -0
- package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
- package/dist/structure/StructureScene.svelte +2256 -0
- package/dist/structure/StructureScene.svelte.d.ts +111 -0
- package/dist/structure/atom-properties.d.ts +37 -0
- package/dist/structure/atom-properties.js +200 -0
- package/dist/structure/bond-order-perception.d.ts +13 -0
- package/dist/structure/bond-order-perception.js +384 -0
- package/dist/structure/bonding.d.ts +69 -0
- package/dist/structure/bonding.js +724 -0
- package/dist/structure/export.d.ts +20 -0
- package/dist/structure/export.js +731 -0
- package/dist/structure/index.d.ts +124 -0
- package/dist/structure/index.js +167 -0
- package/dist/structure/label-placement.d.ts +14 -0
- package/dist/structure/label-placement.js +72 -0
- package/dist/structure/measure.d.ts +7 -0
- package/dist/structure/measure.js +30 -0
- package/dist/structure/parse.d.ts +66 -0
- package/dist/structure/parse.js +1410 -0
- package/dist/structure/partial-occupancy.d.ts +25 -0
- package/dist/structure/partial-occupancy.js +99 -0
- package/dist/structure/pbc.d.ts +9 -0
- package/dist/structure/pbc.js +127 -0
- package/dist/structure/supercell.d.ts +8 -0
- package/dist/structure/supercell.js +170 -0
- package/dist/structure/validation.d.ts +2 -0
- package/dist/structure/validation.js +10 -0
- package/dist/symmetry/SymmetryStats.svelte +226 -0
- package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
- package/dist/symmetry/WyckoffTable.svelte +120 -0
- package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
- package/dist/symmetry/cell-transform.d.ts +12 -0
- package/dist/symmetry/cell-transform.js +91 -0
- package/dist/symmetry/index.d.ts +43 -0
- package/dist/symmetry/index.js +226 -0
- package/dist/symmetry/spacegroups.d.ts +16 -0
- package/dist/symmetry/spacegroups.js +429 -0
- package/dist/table/HeatmapTable.svelte +1885 -0
- package/dist/table/HeatmapTable.svelte.d.ts +49 -0
- package/dist/table/ToggleMenu.svelte +385 -0
- package/dist/table/ToggleMenu.svelte.d.ts +11 -0
- package/dist/table/index.d.ts +72 -0
- package/dist/table/index.js +38 -0
- package/dist/theme/ThemeControl.svelte +53 -0
- package/dist/theme/ThemeControl.svelte.d.ts +9 -0
- package/dist/theme/index.d.ts +29 -0
- package/dist/theme/index.js +79 -0
- package/dist/time.d.ts +4 -0
- package/dist/time.js +70 -0
- package/dist/tooltip/KCoords.svelte +45 -0
- package/dist/tooltip/KCoords.svelte.d.ts +8 -0
- package/dist/tooltip/TooltipContent.svelte +58 -0
- package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
- package/dist/tooltip/index.d.ts +3 -0
- package/dist/tooltip/index.js +2 -0
- package/dist/tooltip/types.d.ts +8 -0
- package/dist/tooltip/types.js +1 -0
- package/dist/trajectory/Trajectory.svelte +1571 -0
- package/dist/trajectory/Trajectory.svelte.d.ts +78 -0
- package/dist/trajectory/TrajectoryError.svelte +128 -0
- package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
- package/dist/trajectory/TrajectoryExportPane.svelte +358 -0
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
- package/dist/trajectory/TrajectoryInfoPane.svelte +314 -0
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
- package/dist/trajectory/constants.d.ts +6 -0
- package/dist/trajectory/constants.js +7 -0
- package/dist/trajectory/extract.d.ts +5 -0
- package/dist/trajectory/extract.js +162 -0
- package/dist/trajectory/format-detect.d.ts +10 -0
- package/dist/trajectory/format-detect.js +90 -0
- package/dist/trajectory/frame-reader.d.ts +17 -0
- package/dist/trajectory/frame-reader.js +299 -0
- package/dist/trajectory/helpers.d.ts +15 -0
- package/dist/trajectory/helpers.js +164 -0
- package/dist/trajectory/index.d.ts +63 -0
- package/dist/trajectory/index.js +126 -0
- package/dist/trajectory/parse/ase.d.ts +2 -0
- package/dist/trajectory/parse/ase.js +73 -0
- package/dist/trajectory/parse/hdf5.d.ts +2 -0
- package/dist/trajectory/parse/hdf5.js +127 -0
- package/dist/trajectory/parse/index.d.ts +12 -0
- package/dist/trajectory/parse/index.js +306 -0
- package/dist/trajectory/parse/lammps.d.ts +5 -0
- package/dist/trajectory/parse/lammps.js +179 -0
- package/dist/trajectory/parse/vasp.d.ts +2 -0
- package/dist/trajectory/parse/vasp.js +87 -0
- package/dist/trajectory/parse/xyz.d.ts +26 -0
- package/dist/trajectory/parse/xyz.js +123 -0
- package/dist/trajectory/plotting.d.ts +28 -0
- package/dist/trajectory/plotting.js +423 -0
- package/dist/trajectory/types.d.ts +11 -0
- package/dist/trajectory/types.js +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.js +47 -0
- package/dist/xrd/XrdPlot.svelte +616 -0
- package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
- package/dist/xrd/broadening.d.ts +20 -0
- package/dist/xrd/broadening.js +97 -0
- package/dist/xrd/calc-xrd.d.ts +37 -0
- package/dist/xrd/calc-xrd.js +339 -0
- package/dist/xrd/index.d.ts +37 -0
- package/dist/xrd/index.js +4 -0
- package/dist/xrd/parse.d.ts +13 -0
- package/dist/xrd/parse.js +749 -0
- package/license +1 -1
- package/package.json +237 -1458
- package/readme.md +98 -171
- package/.vscode/launch.json +0 -13
- package/.vscodeignore +0 -7
- package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
- package/dist/assets/browser-DdDecX_W.js +0 -1
- package/dist/assets/export-qgn-H9y6.js +0 -2
- package/dist/assets/main-DiKYzti2.css +0 -1
- package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
- package/dist/extension.js +0 -31293
- package/dist/src/lib/FilePicker.svelte +0 -360
- package/dist/src/lib/Icon.svelte +0 -41
- package/dist/src/lib/MillerIndexInput.svelte +0 -66
- package/dist/src/lib/api/mp.ts +0 -26
- package/dist/src/lib/api/optimade.ts +0 -204
- package/dist/src/lib/app.css +0 -247
- package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
- package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
- package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
- package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
- package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
- package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
- package/dist/src/lib/brillouin/compute.ts +0 -529
- package/dist/src/lib/brillouin/index.ts +0 -8
- package/dist/src/lib/brillouin/types.ts +0 -51
- package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
- package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
- package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
- package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
- package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
- package/dist/src/lib/chempot-diagram/color.ts +0 -42
- package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
- package/dist/src/lib/chempot-diagram/index.ts +0 -6
- package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
- package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
- package/dist/src/lib/chempot-diagram/types.ts +0 -130
- package/dist/src/lib/colors/index.ts +0 -249
- package/dist/src/lib/composition/BarChart.svelte +0 -297
- package/dist/src/lib/composition/BubbleChart.svelte +0 -218
- package/dist/src/lib/composition/Composition.svelte +0 -165
- package/dist/src/lib/composition/Formula.svelte +0 -268
- package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
- package/dist/src/lib/composition/PieChart.svelte +0 -323
- package/dist/src/lib/composition/format.ts +0 -155
- package/dist/src/lib/composition/index.ts +0 -37
- package/dist/src/lib/composition/parse.ts +0 -605
- package/dist/src/lib/constants.ts +0 -134
- package/dist/src/lib/controls.ts +0 -42
- package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
- package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
- package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
- package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
- package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
- package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
- package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
- package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
- package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
- package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
- package/dist/src/lib/convex-hull/TemperatureSlider.svelte +0 -140
- package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
- package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
- package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
- package/dist/src/lib/convex-hull/helpers.ts +0 -932
- package/dist/src/lib/convex-hull/index.ts +0 -202
- package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
- package/dist/src/lib/convex-hull/types.ts +0 -267
- package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
- package/dist/src/lib/coordination/calc-coordination.ts +0 -93
- package/dist/src/lib/coordination/index.ts +0 -9
- package/dist/src/lib/effects.svelte.ts +0 -48
- package/dist/src/lib/element/ElementHeading.svelte +0 -26
- package/dist/src/lib/element/ElementPhoto.svelte +0 -57
- package/dist/src/lib/element/ElementStats.svelte +0 -80
- package/dist/src/lib/element/ElementTile.svelte +0 -484
- package/dist/src/lib/element/data.ts +0 -14
- package/dist/src/lib/element/index.ts +0 -8
- package/dist/src/lib/element/types.ts +0 -62
- package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
- package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
- package/dist/src/lib/feedback/index.ts +0 -4
- package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
- package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
- package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
- package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
- package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
- package/dist/src/lib/fermi-surface/compute.ts +0 -728
- package/dist/src/lib/fermi-surface/constants.ts +0 -32
- package/dist/src/lib/fermi-surface/export.ts +0 -64
- package/dist/src/lib/fermi-surface/index.ts +0 -14
- package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
- package/dist/src/lib/fermi-surface/parse.ts +0 -574
- package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
- package/dist/src/lib/fermi-surface/types.ts +0 -159
- package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
- package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
- package/dist/src/lib/heatmap-matrix/index.ts +0 -167
- package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
- package/dist/src/lib/icons.ts +0 -650
- package/dist/src/lib/index.ts +0 -61
- package/dist/src/lib/io/decompress.ts +0 -92
- package/dist/src/lib/io/export.ts +0 -385
- package/dist/src/lib/io/fetch.ts +0 -46
- package/dist/src/lib/io/file-drop.ts +0 -51
- package/dist/src/lib/io/index.ts +0 -7
- package/dist/src/lib/io/is-binary.ts +0 -24
- package/dist/src/lib/io/types.ts +0 -8
- package/dist/src/lib/io/url-drop.ts +0 -141
- package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
- package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
- package/dist/src/lib/isosurface/index.ts +0 -7
- package/dist/src/lib/isosurface/parse.ts +0 -656
- package/dist/src/lib/isosurface/slice.ts +0 -175
- package/dist/src/lib/isosurface/types.ts +0 -309
- package/dist/src/lib/labels.ts +0 -320
- package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
- package/dist/src/lib/layout/InfoCard.svelte +0 -120
- package/dist/src/lib/layout/InfoTag.svelte +0 -185
- package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
- package/dist/src/lib/layout/SettingsSection.svelte +0 -148
- package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
- package/dist/src/lib/layout/fullscreen.ts +0 -65
- package/dist/src/lib/layout/index.ts +0 -11
- package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
- package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
- package/dist/src/lib/layout/json-tree/index.ts +0 -3
- package/dist/src/lib/layout/json-tree/types.ts +0 -126
- package/dist/src/lib/layout/json-tree/utils.ts +0 -682
- package/dist/src/lib/marching-cubes.ts +0 -614
- package/dist/src/lib/math.ts +0 -1081
- package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
- package/dist/src/lib/overlays/CopyButton.svelte +0 -45
- package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
- package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
- package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
- package/dist/src/lib/overlays/index.ts +0 -3
- package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
- package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
- package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
- package/dist/src/lib/periodic-table/index.ts +0 -12
- package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
- package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
- package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
- package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
- package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
- package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
- package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
- package/dist/src/lib/phase-diagram/colors.ts +0 -58
- package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
- package/dist/src/lib/phase-diagram/index.ts +0 -13
- package/dist/src/lib/phase-diagram/parse.ts +0 -348
- package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
- package/dist/src/lib/phase-diagram/types.ts +0 -144
- package/dist/src/lib/phase-diagram/utils.ts +0 -775
- package/dist/src/lib/plot/AxisLabel.svelte +0 -51
- package/dist/src/lib/plot/BarPlot.svelte +0 -2113
- package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
- package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
- package/dist/src/lib/plot/ColorBar.svelte +0 -721
- package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
- package/dist/src/lib/plot/ElementScatter.svelte +0 -63
- package/dist/src/lib/plot/FillArea.svelte +0 -223
- package/dist/src/lib/plot/Histogram.svelte +0 -1558
- package/dist/src/lib/plot/HistogramControls.svelte +0 -212
- package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
- package/dist/src/lib/plot/Line.svelte +0 -84
- package/dist/src/lib/plot/PlotAxis.svelte +0 -169
- package/dist/src/lib/plot/PlotControls.svelte +0 -537
- package/dist/src/lib/plot/PlotLegend.svelte +0 -569
- package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
- package/dist/src/lib/plot/PortalSelect.svelte +0 -253
- package/dist/src/lib/plot/ReferenceLine.svelte +0 -204
- package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
- package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
- package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
- package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
- package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
- package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
- package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
- package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
- package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
- package/dist/src/lib/plot/Surface3D.svelte +0 -197
- package/dist/src/lib/plot/ZeroLines.svelte +0 -97
- package/dist/src/lib/plot/ZoomRect.svelte +0 -23
- package/dist/src/lib/plot/adaptive-density.ts +0 -316
- package/dist/src/lib/plot/auto-place.ts +0 -184
- package/dist/src/lib/plot/axis-utils.ts +0 -122
- package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
- package/dist/src/lib/plot/data-cleaning.ts +0 -1069
- package/dist/src/lib/plot/data-transform.ts +0 -69
- package/dist/src/lib/plot/defaults.ts +0 -9
- package/dist/src/lib/plot/fill-utils.ts +0 -494
- package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
- package/dist/src/lib/plot/index.ts +0 -53
- package/dist/src/lib/plot/interactions.ts +0 -119
- package/dist/src/lib/plot/layout.ts +0 -425
- package/dist/src/lib/plot/reference-line.ts +0 -426
- package/dist/src/lib/plot/scales.ts +0 -654
- package/dist/src/lib/plot/svg.ts +0 -23
- package/dist/src/lib/plot/types.ts +0 -1144
- package/dist/src/lib/plot/utils/label-placement.ts +0 -541
- package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
- package/dist/src/lib/plot/utils.ts +0 -11
- package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
- package/dist/src/lib/rdf/calc-rdf.ts +0 -167
- package/dist/src/lib/rdf/index.ts +0 -27
- package/dist/src/lib/sanitize.ts +0 -126
- package/dist/src/lib/settings.ts +0 -1479
- package/dist/src/lib/spectral/Bands.svelte +0 -1040
- package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
- package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
- package/dist/src/lib/spectral/Dos.svelte +0 -697
- package/dist/src/lib/spectral/helpers.ts +0 -1381
- package/dist/src/lib/spectral/index.ts +0 -8
- package/dist/src/lib/spectral/types.ts +0 -112
- package/dist/src/lib/state.svelte.ts +0 -64
- package/dist/src/lib/structure/Arrow.svelte +0 -72
- package/dist/src/lib/structure/AtomLegend.svelte +0 -815
- package/dist/src/lib/structure/Bond.svelte +0 -140
- package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
- package/dist/src/lib/structure/CellSelect.svelte +0 -349
- package/dist/src/lib/structure/Cylinder.svelte +0 -45
- package/dist/src/lib/structure/Lattice.svelte +0 -196
- package/dist/src/lib/structure/Structure.svelte +0 -2248
- package/dist/src/lib/structure/StructureControls.svelte +0 -1273
- package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
- package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
- package/dist/src/lib/structure/StructureScene.svelte +0 -2255
- package/dist/src/lib/structure/atom-properties.ts +0 -316
- package/dist/src/lib/structure/bond-order-perception.ts +0 -447
- package/dist/src/lib/structure/bonding.ts +0 -944
- package/dist/src/lib/structure/export.ts +0 -861
- package/dist/src/lib/structure/index.ts +0 -291
- package/dist/src/lib/structure/label-placement.ts +0 -130
- package/dist/src/lib/structure/measure.ts +0 -45
- package/dist/src/lib/structure/parse.ts +0 -1705
- package/dist/src/lib/structure/partial-occupancy.ts +0 -183
- package/dist/src/lib/structure/pbc.ts +0 -164
- package/dist/src/lib/structure/supercell.ts +0 -226
- package/dist/src/lib/structure/validation.ts +0 -11
- package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
- package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
- package/dist/src/lib/symmetry/cell-transform.ts +0 -118
- package/dist/src/lib/symmetry/index.ts +0 -348
- package/dist/src/lib/symmetry/spacegroups.ts +0 -404
- package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
- package/dist/src/lib/table/ToggleMenu.svelte +0 -385
- package/dist/src/lib/table/index.ts +0 -139
- package/dist/src/lib/theme/ThemeControl.svelte +0 -53
- package/dist/src/lib/theme/index.ts +0 -107
- package/dist/src/lib/time.ts +0 -71
- package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
- package/dist/src/lib/tooltip/index.ts +0 -2
- package/dist/src/lib/tooltip/types.ts +0 -13
- package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
- package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
- package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
- package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
- package/dist/src/lib/trajectory/constants.ts +0 -7
- package/dist/src/lib/trajectory/extract.ts +0 -196
- package/dist/src/lib/trajectory/format-detect.ts +0 -96
- package/dist/src/lib/trajectory/frame-reader.ts +0 -456
- package/dist/src/lib/trajectory/helpers.ts +0 -217
- package/dist/src/lib/trajectory/index.ts +0 -218
- package/dist/src/lib/trajectory/parse/ase.ts +0 -109
- package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
- package/dist/src/lib/trajectory/parse/index.ts +0 -411
- package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
- package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
- package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
- package/dist/src/lib/trajectory/plotting.ts +0 -599
- package/dist/src/lib/trajectory/types.ts +0 -13
- package/dist/src/lib/utils.ts +0 -56
- package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
- package/dist/src/lib/xrd/broadening.ts +0 -130
- package/dist/src/lib/xrd/calc-xrd.ts +0 -397
- package/dist/src/lib/xrd/index.ts +0 -38
- package/dist/src/lib/xrd/parse.ts +0 -858
- package/dist/webview.js +0 -29421
- package/icon.png +0 -0
- package/matterviz-0.3.2.vsix +0 -0
- package/matterviz-0.3.4.vsix +0 -0
- package/matterviz-0.3.5.vsix +0 -0
- package/scripts/sync-config.ts +0 -101
- package/src/declarations.d.ts +0 -2
- package/src/extension.ts +0 -972
- package/src/node-io.ts +0 -65
- package/src/types.ts +0 -17
- package/src/webview/JsonBrowser.svelte +0 -1079
- package/src/webview/PlotPanel.svelte +0 -346
- package/src/webview/detect.ts +0 -444
- package/src/webview/main.ts +0 -764
- package/src/webview/plot-utils.ts +0 -250
- package/test-fixtures/all-viz-types.json.gz +0 -0
- package/test-fixtures/plot-demo-data.json.gz +0 -0
- package/tests/detect.test.ts +0 -604
- package/tests/extension.test.ts +0 -2041
- package/tests/node-io.test.ts +0 -39
- package/tests/plot-utils.test.ts +0 -302
- package/tests/vite-plugin-json-gz.test.ts +0 -114
- package/tests/vscode-mock.ts +0 -18
- package/tests/webview.test.ts +0 -231
- package/tsconfig.json +0 -20
- package/vite-plugin-json-gz.ts +0 -29
- package/vite.config.ts +0 -34
- package/vite.extension.config.ts +0 -34
- /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
- /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
- /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
- /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
- /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
- /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
- /package/dist/{src/lib/element → element}/data.json +0 -0
- /package/dist/{src/lib/element → element}/data.json.gz +0 -0
- /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
- /package/dist/{src/lib/element → element}/data.schema.json +0 -0
- /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
- /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
- /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
- /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
- /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
- /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
- /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { BrillouinZoneData } from '../brillouin';
|
|
2
|
+
import type { Vec3 } from '../math';
|
|
3
|
+
import type { CameraProjection } from '../settings';
|
|
4
|
+
import * as extras from '@threlte/extras';
|
|
5
|
+
import type { ComponentProps } from 'svelte';
|
|
6
|
+
import type { Camera, Scene } from 'three';
|
|
7
|
+
import type { ColorProperty, FermiHoverData, FermiSurfaceData, RepresentationMode } from './types';
|
|
8
|
+
type $$ComponentProps = {
|
|
9
|
+
fermi_data?: FermiSurfaceData;
|
|
10
|
+
bz_data?: BrillouinZoneData;
|
|
11
|
+
camera_position?: Vec3 | undefined;
|
|
12
|
+
camera_projection?: CameraProjection;
|
|
13
|
+
color_property?: ColorProperty;
|
|
14
|
+
color_scale?: string;
|
|
15
|
+
representation?: RepresentationMode;
|
|
16
|
+
surface_opacity?: number;
|
|
17
|
+
selected_bands?: number[];
|
|
18
|
+
show_bz?: boolean;
|
|
19
|
+
bz_color?: string;
|
|
20
|
+
bz_opacity?: number;
|
|
21
|
+
bz_edge_color?: string;
|
|
22
|
+
bz_edge_width?: number;
|
|
23
|
+
show_vectors?: boolean;
|
|
24
|
+
tile_bz?: boolean;
|
|
25
|
+
clip_enabled?: boolean;
|
|
26
|
+
clip_axis?: `x` | `y` | `z`;
|
|
27
|
+
clip_position?: number;
|
|
28
|
+
clip_flip?: boolean;
|
|
29
|
+
vector_scale?: number;
|
|
30
|
+
rotation_damping?: number;
|
|
31
|
+
max_zoom?: number;
|
|
32
|
+
min_zoom?: number;
|
|
33
|
+
rotate_speed?: number;
|
|
34
|
+
zoom_speed?: number;
|
|
35
|
+
pan_speed?: number;
|
|
36
|
+
zoom_to_cursor?: boolean;
|
|
37
|
+
fov?: number;
|
|
38
|
+
initial_zoom?: number;
|
|
39
|
+
ambient_light?: number;
|
|
40
|
+
directional_light?: number;
|
|
41
|
+
gizmo?: boolean | ComponentProps<typeof extras.Gizmo>;
|
|
42
|
+
auto_rotate?: number;
|
|
43
|
+
camera_is_moving?: boolean;
|
|
44
|
+
scene?: Scene;
|
|
45
|
+
camera?: Camera;
|
|
46
|
+
hover_data?: FermiHoverData | null;
|
|
47
|
+
};
|
|
48
|
+
declare const FermiSurfaceScene: import("svelte").Component<$$ComponentProps, {}, "camera_position" | "camera_projection" | "camera" | "scene" | "camera_is_moving" | "surface_opacity" | "bz_data" | "hover_data" | "fermi_data">;
|
|
49
|
+
type FermiSurfaceScene = ReturnType<typeof FermiSurfaceScene>;
|
|
50
|
+
export default FermiSurfaceScene;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Tooltip component for Fermi surface hover information
|
|
3
|
+
// Displays band index, spin, k-coordinates, and optional property values
|
|
4
|
+
import { format_num } from '../labels'
|
|
5
|
+
import { KCoords, TooltipContent } from '../tooltip'
|
|
6
|
+
import type { FermiHoverData, FermiTooltipProp } from './types'
|
|
7
|
+
|
|
8
|
+
let { hover_data, tooltip }: {
|
|
9
|
+
hover_data: FermiHoverData
|
|
10
|
+
tooltip?: FermiTooltipProp
|
|
11
|
+
} = $props()
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<TooltipContent data={hover_data} snippet_arg={{ hover_data }} {tooltip}>
|
|
15
|
+
<div class="tooltip-content">
|
|
16
|
+
<div class="tooltip-title">
|
|
17
|
+
<strong>Band {hover_data.band_index}</strong>
|
|
18
|
+
{#if hover_data.spin}
|
|
19
|
+
<span class="spin-badge spin-{hover_data.spin}">{hover_data.spin}</span>
|
|
20
|
+
{/if}
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<KCoords
|
|
24
|
+
cartesian={hover_data.position_cartesian}
|
|
25
|
+
fractional={hover_data.position_fractional}
|
|
26
|
+
/>
|
|
27
|
+
|
|
28
|
+
{#if hover_data.property_value != null}
|
|
29
|
+
<div class="property-row">
|
|
30
|
+
{hover_data.property_name || `Property`}: {
|
|
31
|
+
format_num(hover_data.property_value, `.4~`)
|
|
32
|
+
}
|
|
33
|
+
<span class="nearest-note">(nearest)</span>
|
|
34
|
+
</div>
|
|
35
|
+
{/if}
|
|
36
|
+
|
|
37
|
+
{#if hover_data.is_tiled && hover_data.symmetry_index != null &&
|
|
38
|
+
hover_data.symmetry_index > 0}
|
|
39
|
+
<div class="tiling-info">
|
|
40
|
+
Symmetry copy #{hover_data.symmetry_index + 1}/48
|
|
41
|
+
</div>
|
|
42
|
+
{/if}
|
|
43
|
+
</div>
|
|
44
|
+
</TooltipContent>
|
|
45
|
+
|
|
46
|
+
<style>
|
|
47
|
+
.tooltip-content {
|
|
48
|
+
max-width: var(--tooltip-max-width, 250px);
|
|
49
|
+
}
|
|
50
|
+
.tooltip-title {
|
|
51
|
+
display: flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
gap: 6px;
|
|
54
|
+
margin-bottom: 4px;
|
|
55
|
+
}
|
|
56
|
+
.spin-badge {
|
|
57
|
+
font-size: 0.75em;
|
|
58
|
+
padding: 1px 4px;
|
|
59
|
+
border-radius: 3px;
|
|
60
|
+
font-weight: 500;
|
|
61
|
+
}
|
|
62
|
+
.spin-badge.spin-up {
|
|
63
|
+
background: #e41a1c;
|
|
64
|
+
color: white;
|
|
65
|
+
}
|
|
66
|
+
.spin-badge.spin-down {
|
|
67
|
+
background: #377eb8;
|
|
68
|
+
color: white;
|
|
69
|
+
}
|
|
70
|
+
.property-row {
|
|
71
|
+
margin-top: 4px;
|
|
72
|
+
font-size: 0.9em;
|
|
73
|
+
}
|
|
74
|
+
.nearest-note {
|
|
75
|
+
opacity: 0.6;
|
|
76
|
+
font-size: 0.85em;
|
|
77
|
+
margin-left: 3px;
|
|
78
|
+
}
|
|
79
|
+
.tiling-info {
|
|
80
|
+
margin-top: 4px;
|
|
81
|
+
font-size: 0.8em;
|
|
82
|
+
opacity: 0.7;
|
|
83
|
+
font-style: italic;
|
|
84
|
+
}
|
|
85
|
+
</style>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FermiHoverData, FermiTooltipProp } from './types';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
hover_data: FermiHoverData;
|
|
4
|
+
tooltip?: FermiTooltipProp;
|
|
5
|
+
};
|
|
6
|
+
declare const FermiSurfaceTooltip: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type FermiSurfaceTooltip = ReturnType<typeof FermiSurfaceTooltip>;
|
|
8
|
+
export default FermiSurfaceTooltip;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BandGridData, FermiSliceData, FermiSliceOptions, FermiSurfaceData, FermiSurfaceOptions, Isosurface } from './types';
|
|
2
|
+
export declare function extract_fermi_surface(band_data: BandGridData, options?: FermiSurfaceOptions): FermiSurfaceData;
|
|
3
|
+
export declare function compute_surface_area(surface: Isosurface): number;
|
|
4
|
+
export declare function compute_fermi_slice(fermi_data: FermiSurfaceData, options?: FermiSliceOptions): FermiSliceData;
|
|
5
|
+
export declare function detect_irreducible_bz(fermi_data: FermiSurfaceData): boolean;
|
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
// Fermi surface computation and analysis functions
|
|
2
|
+
import * as math from '../math';
|
|
3
|
+
import { EPS } from '../math';
|
|
4
|
+
import { CLOSED_CONTOUR_TOLERANCE, IRREDUCIBLE_BZ_MIN_VERTICES, IRREDUCIBLE_BZ_TOLERANCE, SPANNING_THRESHOLD, } from './constants';
|
|
5
|
+
import { marching_cubes } from './marching-cubes';
|
|
6
|
+
const safe_mod = (val, dim) => ((val % dim) + dim) % dim;
|
|
7
|
+
// Precompute Catmull-Rom coefficients for a given t value
|
|
8
|
+
// Returns [c0, c1, c2, c3] where result = c0*p0 + c1*p1 + c2*p2 + c3*p3
|
|
9
|
+
function catmull_rom_coeffs(t) {
|
|
10
|
+
const t2 = t * t;
|
|
11
|
+
const t3 = t2 * t;
|
|
12
|
+
const c1 = 0.5 * (-t + 2 * t2 - t3);
|
|
13
|
+
const c2 = 0.5 * (2 - 5 * t2 + 3 * t3);
|
|
14
|
+
const c3 = 0.5 * (t + 4 * t2 - 3 * t3);
|
|
15
|
+
const c4 = 0.5 * (-t2 + t3);
|
|
16
|
+
return [c1, c2, c3, c4];
|
|
17
|
+
}
|
|
18
|
+
// Tricubic interpolation with cached wrap indices and precomputed coefficients.
|
|
19
|
+
// px/py/pz are the wrap periods (unique points per axis): n for periodic grids,
|
|
20
|
+
// n−1 for endpoint-inclusive grids whose last point duplicates the first.
|
|
21
|
+
function tricubic_interpolate(grid, fx, fy, fz, px, py, pz) {
|
|
22
|
+
// Get integer and fractional parts
|
|
23
|
+
const ix = Math.floor(fx);
|
|
24
|
+
const iy = Math.floor(fy);
|
|
25
|
+
const iz = Math.floor(fz);
|
|
26
|
+
// Precompute Catmull-Rom coefficients
|
|
27
|
+
const [cx0, cx1, cx2, cx3] = catmull_rom_coeffs(fx - ix);
|
|
28
|
+
const [cy0, cy1, cy2, cy3] = catmull_rom_coeffs(fy - iy);
|
|
29
|
+
const [cz0, cz1, cz2, cz3] = catmull_rom_coeffs(fz - iz);
|
|
30
|
+
// Wrapped stencil indices (modulo hoisted out of the inner loop); a zero period
|
|
31
|
+
// (single-point axis) has no neighbours, so collapse the stencil onto index 0
|
|
32
|
+
const stencil = (idx, period) => [idx - 1, idx, idx + 1, idx + 2].map((v) => period > 0 ? ((v % period) + period) % period : 0);
|
|
33
|
+
const [wx, wy, wz] = [stencil(ix, px), stencil(iy, py), stencil(iz, pz)];
|
|
34
|
+
// Interpolate along z, then y, then x (fully inlined)
|
|
35
|
+
let result = 0;
|
|
36
|
+
const cx = [cx0, cx1, cx2, cx3];
|
|
37
|
+
const cy = [cy0, cy1, cy2, cy3];
|
|
38
|
+
const cz = [cz0, cz1, cz2, cz3];
|
|
39
|
+
for (let xi = 0; xi < 4; xi++) {
|
|
40
|
+
const row = grid[wx[xi]];
|
|
41
|
+
let y_sum = 0;
|
|
42
|
+
for (let yi = 0; yi < 4; yi++) {
|
|
43
|
+
const col = row[wy[yi]];
|
|
44
|
+
// Inline z interpolation
|
|
45
|
+
y_sum +=
|
|
46
|
+
cy[yi] *
|
|
47
|
+
(cz[0] * col[wz[0]] + cz[1] * col[wz[1]] + cz[2] * col[wz[2]] + cz[3] * col[wz[3]]);
|
|
48
|
+
}
|
|
49
|
+
result += cx[xi] * y_sum;
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
// Upsample a 3D grid with tricubic interpolation, preserving the grid convention:
|
|
54
|
+
// endpoint-inclusive (BXSF, point i ↔ frac i/(n−1)) vs periodic (FRMSF, i ↔ i/n).
|
|
55
|
+
// Mixing conventions rescales the surface and distorts the zone boundary.
|
|
56
|
+
function upsample_grid(grid, factor, periodic = false) {
|
|
57
|
+
if (factor <= 1)
|
|
58
|
+
return grid;
|
|
59
|
+
// Endpoint-inclusive grids carry one duplicated boundary sample per axis; the wrap
|
|
60
|
+
// period (count of unique points) doubles as the resampling span numerator
|
|
61
|
+
const endpoint = periodic ? 0 : 1;
|
|
62
|
+
const dims = [grid.length, grid[0]?.length || 0, grid[0]?.[0]?.length || 0];
|
|
63
|
+
const [px, py, pz] = dims.map((n) => n - endpoint);
|
|
64
|
+
const [new_nx, new_ny, new_nz] = [px, py, pz].map((p) => Math.round(p * factor) + endpoint);
|
|
65
|
+
// Map new index → source coordinate; a single-point axis (span 0) pins its lone
|
|
66
|
+
// output to source 0 to avoid 0/0 = NaN
|
|
67
|
+
const src_coords = (new_n, period) => {
|
|
68
|
+
const span = new_n - endpoint;
|
|
69
|
+
return Float64Array.from({ length: new_n }, (_, idx) => span > 0 ? (idx / span) * period : 0);
|
|
70
|
+
};
|
|
71
|
+
const [fx_arr, fy_arr, fz_arr] = [
|
|
72
|
+
[new_nx, px],
|
|
73
|
+
[new_ny, py],
|
|
74
|
+
[new_nz, pz],
|
|
75
|
+
].map(([new_n, period]) => src_coords(new_n, period));
|
|
76
|
+
// Preallocate output grid
|
|
77
|
+
const new_grid = Array(new_nx);
|
|
78
|
+
for (let ix = 0; ix < new_nx; ix++) {
|
|
79
|
+
const fx = fx_arr[ix];
|
|
80
|
+
const iy_arr = Array(new_ny);
|
|
81
|
+
for (let iy = 0; iy < new_ny; iy++) {
|
|
82
|
+
const fy = fy_arr[iy];
|
|
83
|
+
const iz_arr = new Float64Array(new_nz);
|
|
84
|
+
for (let iz = 0; iz < new_nz; iz++) {
|
|
85
|
+
iz_arr[iz] = tricubic_interpolate(grid, fx, fy, fz_arr[iz], px, py, pz);
|
|
86
|
+
}
|
|
87
|
+
// Convert Float64Array back to regular array for compatibility
|
|
88
|
+
iy_arr[iy] = Array.from(iz_arr);
|
|
89
|
+
}
|
|
90
|
+
new_grid[ix] = iy_arr;
|
|
91
|
+
}
|
|
92
|
+
return new_grid;
|
|
93
|
+
}
|
|
94
|
+
// Extract Fermi surface from band grid data
|
|
95
|
+
export function extract_fermi_surface(band_data, options = {}) {
|
|
96
|
+
const { mu = 0, wigner_seitz = true, compute_velocities = false, compute_dimensionality = false, selected_bands, interpolation_factor = 1, selected_spins, } = options;
|
|
97
|
+
const iso_value = band_data.fermi_energy + mu;
|
|
98
|
+
const isosurfaces = [];
|
|
99
|
+
let total_area = 0;
|
|
100
|
+
// Process each spin channel and band
|
|
101
|
+
for (let spin_idx = 0; spin_idx < band_data.n_spins; spin_idx++) {
|
|
102
|
+
const spin = band_data.n_spins === 2 ? (spin_idx === 0 ? `up` : `down`) : null;
|
|
103
|
+
// Skip if spin not selected
|
|
104
|
+
if (selected_spins && !selected_spins.includes(spin))
|
|
105
|
+
continue;
|
|
106
|
+
for (let band_idx = 0; band_idx < band_data.n_bands; band_idx++) {
|
|
107
|
+
// Skip if band not selected
|
|
108
|
+
if (selected_bands && !selected_bands.includes(band_idx))
|
|
109
|
+
continue;
|
|
110
|
+
const raw_energies = band_data.energies[spin_idx][band_idx];
|
|
111
|
+
// Check if Fermi level intersects this band
|
|
112
|
+
if (!band_intersects_fermi(raw_energies, iso_value))
|
|
113
|
+
continue;
|
|
114
|
+
// BXSF grids are endpoint-inclusive (store both equivalent k=0 and k=1 → false);
|
|
115
|
+
// FRMSF grids store k=i/n without the duplicated endpoint (→ true)
|
|
116
|
+
const periodic = band_data.periodic ?? false;
|
|
117
|
+
// Apply interpolation for smoother surfaces
|
|
118
|
+
const energies = interpolation_factor > 1
|
|
119
|
+
? upsample_grid(raw_energies, interpolation_factor, periodic)
|
|
120
|
+
: raw_energies;
|
|
121
|
+
// Extract isosurface using marching cubes
|
|
122
|
+
const mc_result = marching_cubes(energies, iso_value, band_data.k_lattice, {
|
|
123
|
+
periodic,
|
|
124
|
+
interpolate: true,
|
|
125
|
+
});
|
|
126
|
+
if (mc_result.vertices.length === 0)
|
|
127
|
+
continue;
|
|
128
|
+
// Build isosurface
|
|
129
|
+
// Note: We don't clip to Wigner-Seitz BZ here because marching cubes output is in
|
|
130
|
+
// a centered parallelepiped cell. BZ symmetry tiling in renderer handles full BZ.
|
|
131
|
+
const isosurface = {
|
|
132
|
+
vertices: mc_result.vertices,
|
|
133
|
+
faces: mc_result.faces,
|
|
134
|
+
normals: mc_result.normals,
|
|
135
|
+
band_index: band_idx,
|
|
136
|
+
spin,
|
|
137
|
+
};
|
|
138
|
+
// Compute surface area
|
|
139
|
+
isosurface.area = compute_surface_area(isosurface);
|
|
140
|
+
total_area += isosurface.area;
|
|
141
|
+
// Compute Fermi velocities if requested
|
|
142
|
+
if (compute_velocities && band_data.velocities) {
|
|
143
|
+
isosurface.properties = compute_fermi_velocities(isosurface, band_data.velocities[spin_idx][band_idx], band_data.k_lattice, band_data.k_grid, periodic);
|
|
144
|
+
isosurface.avg_velocity =
|
|
145
|
+
isosurface.properties.reduce((s, v) => s + v, 0) / isosurface.properties.length;
|
|
146
|
+
}
|
|
147
|
+
// Compute dimensionality if requested
|
|
148
|
+
if (compute_dimensionality) {
|
|
149
|
+
const { dimensionality, orientation } = analyze_surface_topology(isosurface, band_data.k_lattice);
|
|
150
|
+
isosurface.dimensionality = dimensionality;
|
|
151
|
+
isosurface.orientation = orientation;
|
|
152
|
+
}
|
|
153
|
+
isosurfaces.push(isosurface);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const metadata = {
|
|
157
|
+
n_bands: band_data.n_bands,
|
|
158
|
+
n_surfaces: isosurfaces.length,
|
|
159
|
+
total_area,
|
|
160
|
+
has_spin: band_data.n_spins === 2,
|
|
161
|
+
has_velocities: compute_velocities && band_data.velocities !== undefined,
|
|
162
|
+
};
|
|
163
|
+
return {
|
|
164
|
+
isosurfaces,
|
|
165
|
+
k_lattice: band_data.k_lattice,
|
|
166
|
+
fermi_energy: band_data.fermi_energy,
|
|
167
|
+
reciprocal_cell: wigner_seitz ? `wigner_seitz` : `parallelepiped`,
|
|
168
|
+
metadata,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Check if Fermi level intersects a band (has values both above and below)
|
|
172
|
+
function band_intersects_fermi(energies, iso_value) {
|
|
173
|
+
let has_below = false;
|
|
174
|
+
let has_above = false;
|
|
175
|
+
for (const plane of energies) {
|
|
176
|
+
for (const row of plane) {
|
|
177
|
+
for (const energy of row) {
|
|
178
|
+
if (energy < iso_value)
|
|
179
|
+
has_below = true;
|
|
180
|
+
else if (energy > iso_value)
|
|
181
|
+
has_above = true;
|
|
182
|
+
if (has_below && has_above)
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
// Compute surface area of an isosurface (assumes triangular faces from marching cubes)
|
|
190
|
+
export function compute_surface_area(surface) {
|
|
191
|
+
let total_area = 0;
|
|
192
|
+
const verts = surface.vertices;
|
|
193
|
+
for (const face of surface.faces) {
|
|
194
|
+
if (face.length < 3)
|
|
195
|
+
continue;
|
|
196
|
+
const [v0x, v0y, v0z] = verts[face[0]];
|
|
197
|
+
const [v1x, v1y, v1z] = verts[face[1]];
|
|
198
|
+
const [v2x, v2y, v2z] = verts[face[2]];
|
|
199
|
+
// Inlined edge subtraction and cross product
|
|
200
|
+
const [e1x, e1y, e1z] = [v1x - v0x, v1y - v0y, v1z - v0z];
|
|
201
|
+
const [e2x, e2y, e2z] = [v2x - v0x, v2y - v0y, v2z - v0z];
|
|
202
|
+
const cx = e1y * e2z - e1z * e2y;
|
|
203
|
+
const cy = e1z * e2x - e1x * e2z;
|
|
204
|
+
const cz = e1x * e2y - e1y * e2x;
|
|
205
|
+
// Area is half the magnitude of cross product
|
|
206
|
+
total_area += Math.sqrt(cx * cx + cy * cy + cz * cz) * 0.5;
|
|
207
|
+
}
|
|
208
|
+
return total_area;
|
|
209
|
+
}
|
|
210
|
+
// Compute Fermi velocities at surface vertices
|
|
211
|
+
function compute_fermi_velocities(surface, velocity_grid, k_lattice, k_grid, periodic = false) {
|
|
212
|
+
const [nx, ny, nz] = k_grid;
|
|
213
|
+
const velocities = [];
|
|
214
|
+
// Invert the marching-cubes transform cart = k_latticeᵀ·(frac − 0.5): frac =
|
|
215
|
+
// (k_latticeᵀ)⁻¹·cart + 0.5. Omitting the transpose samples wrong k-points for
|
|
216
|
+
// non-symmetric lattices; skipping the +0.5 is off by half a reciprocal cell.
|
|
217
|
+
const k_inv = math.matrix_inverse_3x3(math.transpose_3x3_matrix(k_lattice));
|
|
218
|
+
// Grid point i sits at frac i/(n−1) (endpoint-inclusive BXSF) or i/n (periodic)
|
|
219
|
+
const [sx, sy, sz] = periodic ? [nx, ny, nz] : [nx - 1, ny - 1, nz - 1];
|
|
220
|
+
// Clamp guards float jitter at the cell boundary
|
|
221
|
+
const clamp01 = (val) => Math.min(Math.max(val, 0), 1);
|
|
222
|
+
for (const vertex of surface.vertices) {
|
|
223
|
+
const frac = math.mat3x3_vec3_multiply(k_inv, vertex); // centered, in [-0.5, 0.5]
|
|
224
|
+
const gx = clamp01(frac[0] + 0.5) * sx;
|
|
225
|
+
const gy = clamp01(frac[1] + 0.5) * sy;
|
|
226
|
+
const gz = clamp01(frac[2] + 0.5) * sz;
|
|
227
|
+
// Trilinear interpolation of velocity
|
|
228
|
+
const velocity = trilinear_interpolate_vec3(velocity_grid, gx, gy, gz);
|
|
229
|
+
velocities.push(Math.hypot(...velocity)); // magnitude
|
|
230
|
+
}
|
|
231
|
+
return velocities;
|
|
232
|
+
}
|
|
233
|
+
// Trilinear interpolation for Vec3 grid
|
|
234
|
+
// Note: Assumes x, y, z are non-negative (e.g. from wrapped fractional coordinates)
|
|
235
|
+
function trilinear_interpolate_vec3(grid, x, y, z) {
|
|
236
|
+
const nx = grid.length;
|
|
237
|
+
const ny = grid[0]?.length || 0;
|
|
238
|
+
const nz = grid[0]?.[0]?.length || 0;
|
|
239
|
+
// Guard against empty or malformed grids to prevent division by zero in modulo
|
|
240
|
+
if (nx === 0 || ny === 0 || nz === 0)
|
|
241
|
+
return [0, 0, 0];
|
|
242
|
+
// Use safe modulo pattern to handle negative values from floating-point edge cases
|
|
243
|
+
const x0 = safe_mod(Math.floor(x), nx);
|
|
244
|
+
const y0 = safe_mod(Math.floor(y), ny);
|
|
245
|
+
const z0 = safe_mod(Math.floor(z), nz);
|
|
246
|
+
const x1 = (x0 + 1) % nx;
|
|
247
|
+
const y1 = (y0 + 1) % ny;
|
|
248
|
+
const z1 = (z0 + 1) % nz;
|
|
249
|
+
const xd = x - Math.floor(x);
|
|
250
|
+
const yd = y - Math.floor(y);
|
|
251
|
+
const zd = z - Math.floor(z);
|
|
252
|
+
const c000 = grid[x0][y0][z0];
|
|
253
|
+
const c001 = grid[x0][y0][z1];
|
|
254
|
+
const c010 = grid[x0][y1][z0];
|
|
255
|
+
const c011 = grid[x0][y1][z1];
|
|
256
|
+
const c100 = grid[x1][y0][z0];
|
|
257
|
+
const c101 = grid[x1][y0][z1];
|
|
258
|
+
const c110 = grid[x1][y1][z0];
|
|
259
|
+
const c111 = grid[x1][y1][z1];
|
|
260
|
+
const c00 = math.lerp_vec3(c000, c100, xd);
|
|
261
|
+
const c01 = math.lerp_vec3(c001, c101, xd);
|
|
262
|
+
const c10 = math.lerp_vec3(c010, c110, xd);
|
|
263
|
+
const c11 = math.lerp_vec3(c011, c111, xd);
|
|
264
|
+
const c0 = math.lerp_vec3(c00, c10, yd);
|
|
265
|
+
const c1 = math.lerp_vec3(c01, c11, yd);
|
|
266
|
+
return math.lerp_vec3(c0, c1, zd);
|
|
267
|
+
}
|
|
268
|
+
// Analyze surface topology to determine dimensionality
|
|
269
|
+
function analyze_surface_topology(surface, k_lattice) {
|
|
270
|
+
if (surface.vertices.length === 0) {
|
|
271
|
+
return { dimensionality: `3D`, orientation: null };
|
|
272
|
+
}
|
|
273
|
+
// Vertices live in the centered parallelepiped k_latticeᵀ·[-0.5, 0.5]³, whose bounding
|
|
274
|
+
// box along Cartesian axis j has half-extent 0.5·Σᵢ|k_lattice[i][j]| (a hardcoded box
|
|
275
|
+
// would make dimensionality depend on the absolute lattice scale)
|
|
276
|
+
const half_extent = [0, 1, 2].map((axis_idx) => 0.5 * k_lattice.reduce((sum, row) => sum + Math.abs(row[axis_idx]), 0));
|
|
277
|
+
const bz_extent = { min: half_extent.map((ext) => -ext), max: half_extent };
|
|
278
|
+
const surface_extent = math.compute_bounding_box(surface.vertices);
|
|
279
|
+
// Check spanning in each direction
|
|
280
|
+
const spans = [false, false, false];
|
|
281
|
+
for (let axis_idx = 0; axis_idx < 3; axis_idx++) {
|
|
282
|
+
const bz_size = bz_extent.max[axis_idx] - bz_extent.min[axis_idx];
|
|
283
|
+
const surface_size = surface_extent.max[axis_idx] - surface_extent.min[axis_idx];
|
|
284
|
+
// Consider spanning if surface covers significant fraction of BZ extent
|
|
285
|
+
spans[axis_idx] = surface_size > SPANNING_THRESHOLD * bz_size;
|
|
286
|
+
}
|
|
287
|
+
const n_spanning = spans.filter(Boolean).length;
|
|
288
|
+
if (n_spanning === 0) {
|
|
289
|
+
// Closed surface, no spanning directions
|
|
290
|
+
return { dimensionality: `3D`, orientation: null };
|
|
291
|
+
}
|
|
292
|
+
else if (n_spanning === 1) {
|
|
293
|
+
// 2D sheet spanning one direction
|
|
294
|
+
const axis_idx = spans.indexOf(true);
|
|
295
|
+
const orientation = [0, 0, 0];
|
|
296
|
+
orientation[axis_idx] = 1;
|
|
297
|
+
return { dimensionality: `2D`, orientation };
|
|
298
|
+
}
|
|
299
|
+
else if (n_spanning === 2) {
|
|
300
|
+
// 1D noodle-like (tube spanning 2 directions, bounded in 1)
|
|
301
|
+
const axis_idx = spans.indexOf(false);
|
|
302
|
+
const orientation = [0, 0, 0];
|
|
303
|
+
orientation[axis_idx] = 1;
|
|
304
|
+
return { dimensionality: `1D`, orientation };
|
|
305
|
+
}
|
|
306
|
+
// Spans all 3 directions - complex warped network
|
|
307
|
+
return { dimensionality: `quasi-2D`, orientation: null };
|
|
308
|
+
}
|
|
309
|
+
// Compute 2D Fermi slice along a specified plane
|
|
310
|
+
export function compute_fermi_slice(fermi_data, options = {}) {
|
|
311
|
+
const { miller_indices = [0, 0, 1], distance = 0 } = options;
|
|
312
|
+
// Validate miller indices are not all zero
|
|
313
|
+
if (miller_indices[0] === 0 && miller_indices[1] === 0 && miller_indices[2] === 0) {
|
|
314
|
+
throw new Error(`Invalid miller indices [0, 0, 0]: at least one index must be non-zero to define a plane`);
|
|
315
|
+
}
|
|
316
|
+
// Compute plane normal in Cartesian coordinates
|
|
317
|
+
const plane_normal = math.add(math.add(math.scale(fermi_data.k_lattice[0], miller_indices[0]), math.scale(fermi_data.k_lattice[1], miller_indices[1])), math.scale(fermi_data.k_lattice[2], miller_indices[2]));
|
|
318
|
+
const normal_len = Math.hypot(...plane_normal);
|
|
319
|
+
if (normal_len < EPS) {
|
|
320
|
+
throw new Error(`Degenerate plane normal: k_lattice vectors produce a zero-length normal for miller indices [${miller_indices.join(`, `)}]`);
|
|
321
|
+
}
|
|
322
|
+
const unit_normal = math.normalize_vec(plane_normal);
|
|
323
|
+
// Compute in-plane basis vectors
|
|
324
|
+
const [in_plane_u, in_plane_v] = math.compute_in_plane_basis(unit_normal);
|
|
325
|
+
// Slice each isosurface
|
|
326
|
+
const isolines = [];
|
|
327
|
+
for (const surface of fermi_data.isosurfaces) {
|
|
328
|
+
const lines = slice_surface_with_plane(surface, unit_normal, distance, in_plane_u, in_plane_v);
|
|
329
|
+
isolines.push(...lines);
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
isolines,
|
|
333
|
+
plane_normal: unit_normal,
|
|
334
|
+
plane_distance: distance,
|
|
335
|
+
k_lattice_2d: [in_plane_u, in_plane_v],
|
|
336
|
+
metadata: {
|
|
337
|
+
n_lines: isolines.length,
|
|
338
|
+
has_properties: isolines.some((line) => line.properties !== undefined),
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
// Helper to create edge key (sorted vertex indices)
|
|
343
|
+
const make_edge_key = (v0_idx, v1_idx) => `${Math.min(v0_idx, v1_idx)},${Math.max(v0_idx, v1_idx)}`;
|
|
344
|
+
// Compute intersection point on an edge
|
|
345
|
+
function compute_edge_intersection(surface, vertex_distances, v0_idx, v1_idx) {
|
|
346
|
+
const d0 = vertex_distances[v0_idx];
|
|
347
|
+
const d1 = vertex_distances[v1_idx];
|
|
348
|
+
// Edge must cross the plane (opposite signs)
|
|
349
|
+
if (d0 * d1 >= 0)
|
|
350
|
+
return null;
|
|
351
|
+
const t = d0 / (d0 - d1);
|
|
352
|
+
const v0 = surface.vertices[v0_idx];
|
|
353
|
+
const v1 = surface.vertices[v1_idx];
|
|
354
|
+
const point = [
|
|
355
|
+
v0[0] + t * (v1[0] - v0[0]),
|
|
356
|
+
v0[1] + t * (v1[1] - v0[1]),
|
|
357
|
+
v0[2] + t * (v1[2] - v0[2]),
|
|
358
|
+
];
|
|
359
|
+
let property;
|
|
360
|
+
if (surface.properties) {
|
|
361
|
+
property =
|
|
362
|
+
surface.properties[v0_idx] +
|
|
363
|
+
t * (surface.properties[v1_idx] - surface.properties[v0_idx]);
|
|
364
|
+
}
|
|
365
|
+
return { point, property };
|
|
366
|
+
}
|
|
367
|
+
// Slice a surface with a plane to get isolines
|
|
368
|
+
// Uses contour tracing to produce properly ordered line segments
|
|
369
|
+
function slice_surface_with_plane(surface, plane_normal, plane_distance, in_plane_u, in_plane_v) {
|
|
370
|
+
if (surface.vertices.length === 0 || surface.faces.length === 0)
|
|
371
|
+
return [];
|
|
372
|
+
// Compute signed distance of each vertex to plane
|
|
373
|
+
const vertex_distances = surface.vertices.map((vert) => math.dot(vert, plane_normal) - plane_distance);
|
|
374
|
+
const face_segments = [];
|
|
375
|
+
const edge_to_faces = new Map(); // edge_key -> face indices
|
|
376
|
+
for (let face_idx = 0; face_idx < surface.faces.length; face_idx++) {
|
|
377
|
+
const face = surface.faces[face_idx];
|
|
378
|
+
if (face.length < 3)
|
|
379
|
+
continue;
|
|
380
|
+
// Find which edges of this face cross the plane
|
|
381
|
+
const crossing_edges = [];
|
|
382
|
+
for (let edge_idx = 0; edge_idx < face.length; edge_idx++) {
|
|
383
|
+
const v0_idx = face[edge_idx];
|
|
384
|
+
const v1_idx = face[(edge_idx + 1) % face.length];
|
|
385
|
+
const edge_key = make_edge_key(v0_idx, v1_idx);
|
|
386
|
+
const intersection = compute_edge_intersection(surface, vertex_distances, v0_idx, v1_idx);
|
|
387
|
+
if (intersection) {
|
|
388
|
+
crossing_edges.push({ edge_key, intersection });
|
|
389
|
+
// Register this face with the edge
|
|
390
|
+
const faces = edge_to_faces.get(edge_key) ?? [];
|
|
391
|
+
faces.push(face_idx);
|
|
392
|
+
edge_to_faces.set(edge_key, faces);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// A face intersected by a plane has exactly 2 crossing edges
|
|
396
|
+
if (crossing_edges.length === 2) {
|
|
397
|
+
face_segments.push({
|
|
398
|
+
face_idx,
|
|
399
|
+
edge_keys: [crossing_edges[0].edge_key, crossing_edges[1].edge_key],
|
|
400
|
+
points: [crossing_edges[0].intersection.point, crossing_edges[1].intersection.point],
|
|
401
|
+
properties: surface.properties
|
|
402
|
+
? [
|
|
403
|
+
crossing_edges[0].intersection.property ?? 0,
|
|
404
|
+
crossing_edges[1].intersection.property ?? 0,
|
|
405
|
+
]
|
|
406
|
+
: undefined,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
if (face_segments.length === 0)
|
|
411
|
+
return [];
|
|
412
|
+
// Build face_idx -> segment map for O(1) lookup
|
|
413
|
+
const face_to_segment = new Map();
|
|
414
|
+
for (const seg of face_segments) {
|
|
415
|
+
face_to_segment.set(seg.face_idx, seg);
|
|
416
|
+
}
|
|
417
|
+
// Precompute in-plane basis dot products for faster 2D projection
|
|
418
|
+
const [ux, uy, uz] = in_plane_u;
|
|
419
|
+
const [vx, vy, vz] = in_plane_v;
|
|
420
|
+
// Trace connected contours by following adjacent faces
|
|
421
|
+
const used_faces = new Set();
|
|
422
|
+
const isolines = [];
|
|
423
|
+
for (const start_segment of face_segments) {
|
|
424
|
+
if (used_faces.has(start_segment.face_idx))
|
|
425
|
+
continue;
|
|
426
|
+
// Start a new contour from this segment
|
|
427
|
+
// Use arrays that we'll reverse at the end instead of unshift (O(1) vs O(n))
|
|
428
|
+
const forward_points = [start_segment.points[1]];
|
|
429
|
+
const backward_points = [];
|
|
430
|
+
const forward_props = start_segment.properties
|
|
431
|
+
? [start_segment.properties[1]]
|
|
432
|
+
: undefined;
|
|
433
|
+
const backward_props = start_segment.properties ? [] : undefined;
|
|
434
|
+
used_faces.add(start_segment.face_idx);
|
|
435
|
+
// Helper to trace in one direction
|
|
436
|
+
const trace_direction = (initial_edge, points, props) => {
|
|
437
|
+
let current_edge = initial_edge;
|
|
438
|
+
let found_next = true;
|
|
439
|
+
while (found_next) {
|
|
440
|
+
found_next = false;
|
|
441
|
+
const adjacent_faces = edge_to_faces.get(current_edge);
|
|
442
|
+
if (!adjacent_faces)
|
|
443
|
+
break;
|
|
444
|
+
for (const adj_face_idx of adjacent_faces) {
|
|
445
|
+
if (used_faces.has(adj_face_idx))
|
|
446
|
+
continue;
|
|
447
|
+
const adj_segment = face_to_segment.get(adj_face_idx);
|
|
448
|
+
if (!adj_segment)
|
|
449
|
+
continue;
|
|
450
|
+
// Find which end connects to current_edge
|
|
451
|
+
let next_point_idx;
|
|
452
|
+
let next_edge;
|
|
453
|
+
if (adj_segment.edge_keys[0] === current_edge) {
|
|
454
|
+
next_point_idx = 1;
|
|
455
|
+
next_edge = adj_segment.edge_keys[1];
|
|
456
|
+
}
|
|
457
|
+
else if (adj_segment.edge_keys[1] === current_edge) {
|
|
458
|
+
next_point_idx = 0;
|
|
459
|
+
next_edge = adj_segment.edge_keys[0];
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
points.push(adj_segment.points[next_point_idx]);
|
|
465
|
+
if (props && adj_segment.properties) {
|
|
466
|
+
props.push(adj_segment.properties[next_point_idx]);
|
|
467
|
+
}
|
|
468
|
+
used_faces.add(adj_face_idx);
|
|
469
|
+
current_edge = next_edge;
|
|
470
|
+
found_next = true;
|
|
471
|
+
break;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
};
|
|
475
|
+
// Trace forward and backward
|
|
476
|
+
trace_direction(start_segment.edge_keys[1], forward_points, forward_props);
|
|
477
|
+
trace_direction(start_segment.edge_keys[0], backward_points, backward_props);
|
|
478
|
+
// Combine: backward (reversed) + start_point[0] + forward
|
|
479
|
+
backward_points.reverse();
|
|
480
|
+
if (backward_props)
|
|
481
|
+
backward_props.reverse();
|
|
482
|
+
const contour_points = [
|
|
483
|
+
...backward_points,
|
|
484
|
+
start_segment.points[0],
|
|
485
|
+
...forward_points,
|
|
486
|
+
];
|
|
487
|
+
const contour_props = backward_props && forward_props && start_segment.properties
|
|
488
|
+
? [...backward_props, start_segment.properties[0], ...forward_props]
|
|
489
|
+
: undefined;
|
|
490
|
+
// Check if contour is closed
|
|
491
|
+
const first = contour_points[0];
|
|
492
|
+
const last = contour_points[contour_points.length - 1];
|
|
493
|
+
const is_closed = math.euclidean_dist(first, last) < CLOSED_CONTOUR_TOLERANCE;
|
|
494
|
+
// Project to 2D (inlined dot product for speed)
|
|
495
|
+
const points_2d = Array(contour_points.length);
|
|
496
|
+
for (let idx = 0; idx < contour_points.length; idx++) {
|
|
497
|
+
const point = contour_points[idx];
|
|
498
|
+
points_2d[idx] = [
|
|
499
|
+
point[0] * ux + point[1] * uy + point[2] * uz,
|
|
500
|
+
point[0] * vx + point[1] * vy + point[2] * vz,
|
|
501
|
+
];
|
|
502
|
+
}
|
|
503
|
+
isolines.push({
|
|
504
|
+
points: contour_points,
|
|
505
|
+
points_2d,
|
|
506
|
+
properties: contour_props,
|
|
507
|
+
band_index: surface.band_index,
|
|
508
|
+
spin: surface.spin,
|
|
509
|
+
is_closed,
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
return isolines;
|
|
513
|
+
}
|
|
514
|
+
// Detect if Fermi surface data appears to cover only the irreducible BZ wedge.
|
|
515
|
+
// For cubic Oh symmetry, this is the region where all vertices are in the first octant
|
|
516
|
+
// (x >= 0, y >= 0, z >= 0) with some tolerance. Such data needs tiling to show the full BZ.
|
|
517
|
+
export function detect_irreducible_bz(fermi_data) {
|
|
518
|
+
if (fermi_data.isosurfaces.length === 0)
|
|
519
|
+
return false;
|
|
520
|
+
// Check if all vertices are in the positive octant (with small tolerance for numerical error)
|
|
521
|
+
let all_positive = true;
|
|
522
|
+
let vertex_count = 0;
|
|
523
|
+
for (const surface of fermi_data.isosurfaces) {
|
|
524
|
+
for (const vertex of surface.vertices) {
|
|
525
|
+
vertex_count++;
|
|
526
|
+
if (vertex[0] < -IRREDUCIBLE_BZ_TOLERANCE ||
|
|
527
|
+
vertex[1] < -IRREDUCIBLE_BZ_TOLERANCE ||
|
|
528
|
+
vertex[2] < -IRREDUCIBLE_BZ_TOLERANCE) {
|
|
529
|
+
all_positive = false;
|
|
530
|
+
break;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
if (!all_positive)
|
|
534
|
+
break;
|
|
535
|
+
}
|
|
536
|
+
// Only consider it irreducible if we have significant data and all positive
|
|
537
|
+
return all_positive && vertex_count > IRREDUCIBLE_BZ_MIN_VERTICES;
|
|
538
|
+
}
|