+
{onCollapse && (
}
onClick={handleCollapse}
- style={{ color: '#fff', padding: 0 }}
+ style={{ color: "#fff", padding: 0 }}
title="Collapse"
/>
)}
@@ -94,7 +87,7 @@ const SimulationSummary = ({
type="text"
icon={}
onClick={handleShowMore}
- style={{ color: '#fff', padding: 0 }}
+ style={{ color: "#fff", padding: 0 }}
title="Expand"
/>
)}
diff --git a/src/components/SimulationSummaryContent.tsx b/src/components/SimulationSummaryContent.tsx
index 0f488169..fd0d9398 100644
--- a/src/components/SimulationSummaryContent.tsx
+++ b/src/components/SimulationSummaryContent.tsx
@@ -1,16 +1,16 @@
-import { useStoreState, useStoreActions } from "../hooks";
import { SettingOutlined } from "@ant-design/icons";
-import { Table, Row, Col, Button, Slider, Checkbox } from "antd";
+import { Button, Checkbox, Col, Row, Slider, Table } from "antd";
import type { ColumnsType } from "antd/es/table";
import type { TableRowSelection } from "antd/es/table/interface";
-import { Compute, Fix, Variable } from "../types";
-import React, { useState, useMemo, useCallback } from "react";
-import Modifier from "../modifiers/modifier";
+import React, { useCallback, useMemo, useState } from "react";
+import Figure from "../components/Figure";
+import { useStoreActions, useStoreState } from "../hooks";
+import ColorModifierSettings from "../modifiers/ColorModifierSettings";
+import type ColorModifier from "../modifiers/colormodifier";
+import type Modifier from "../modifiers/modifier";
import SyncBondsSettings from "../modifiers/SyncBondsSettings";
import SyncParticlesSettings from "../modifiers/SyncParticlesSettings";
-import ColorModifierSettings from "../modifiers/ColorModifierSettings";
-import ColorModifier from "../modifiers/colormodifier";
-import Figure from "../components/Figure";
+import type { Compute, Fix, Variable } from "../types";
import { track } from "../utils/metrics";
interface SimulationSummaryType {
@@ -23,60 +23,38 @@ const SimulationSummaryContent = () => {
const [visibleSettings, setVisibleSettings] = useState();
const [visibleCompute, setVisibleCompute] = useState();
const [visibleFix, setVisibleFix] = useState();
- const [visibleVariable, setVisibleVariable] = useState<
- Variable | undefined
- >();
+ const [visibleVariable, setVisibleVariable] = useState();
- const simulationSettings = useStoreState(
- (state) => state.settings.simulation,
- );
- const modifiers = useStoreState(
- (state) => state.processing.postTimestepModifiers,
- );
- const colorModifier = modifiers.find(
- (modifier) => modifier.name === "Colors",
- ) as ColorModifier | undefined;
- const selectedModifiers = modifiers
- .filter((m) => m.active)
- .map((m) => m.name);
+ const simulationSettings = useStoreState((state) => state.settings.simulation);
+ const modifiers = useStoreState((state) => state.processing.postTimestepModifiers);
+ const colorModifier = modifiers.find((modifier) => modifier.name === "Colors") as
+ | ColorModifier
+ | undefined;
+ const selectedModifiers = modifiers.filter((m) => m.active).map((m) => m.name);
const simulation = useStoreState((state) => state.simulation.simulation);
const runType = useStoreState((state) => state.simulationStatus.runType);
const numAtoms = useStoreState((state) => state.simulationStatus.numAtoms);
const numBonds = useStoreState((state) => state.simulationStatus.numBonds);
const timesteps = useStoreState((state) => state.simulationStatus.timesteps);
- const remainingTime = useStoreState(
- (state) => state.simulationStatus.remainingTime,
- );
- const timestepsPerSecond = useStoreState(
- (state) => state.simulationStatus.timestepsPerSecond,
- );
- const memoryUsage = useStoreState(
- (state) => state.simulationStatus.memoryUsage,
- );
+ const remainingTime = useStoreState((state) => state.simulationStatus.remainingTime);
+ const timestepsPerSecond = useStoreState((state) => state.simulationStatus.timestepsPerSecond);
+ const memoryUsage = useStoreState((state) => state.simulationStatus.memoryUsage);
- const setSimulationSettings = useStoreActions(
- (actions) => actions.settings.setSimulation,
- );
+ const setSimulationSettings = useStoreActions((actions) => actions.settings.setSimulation);
const renderSettings = useStoreState((state) => state.settings.render);
- const setRenderSettings = useStoreActions(
- (actions) => actions.settings.setRender,
- );
+ const setRenderSettings = useStoreActions((actions) => actions.settings.setRender);
const computes = useStoreState((state) => state.simulationStatus.computes);
const fixes = useStoreState((state) => state.simulationStatus.fixes);
const variables = useStoreState((state) => state.simulationStatus.variables);
const setModifierSyncDataPointsAction = useStoreActions(
- (actions) => actions.simulationStatus.setModifierSyncDataPoints,
+ (actions) => actions.simulationStatus.setModifierSyncDataPoints
);
const handleToggleSyncDataPoints = useCallback(
- (
- name: string,
- type: "compute" | "fix" | "variable",
- value: boolean,
- ) => {
+ (name: string, type: "compute" | "fix" | "variable", value: boolean) => {
setModifierSyncDataPointsAction({ name, type, value });
},
- [setModifierSyncDataPointsAction],
+ [setModifierSyncDataPointsAction]
);
const setSyncFrequency = (value: number | null) => {
@@ -131,10 +109,7 @@ const SimulationSummaryContent = () => {
>
{value}
{" "}
- {" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ {` ${record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : ""}`}
>
);
} else {
@@ -142,9 +117,7 @@ const SimulationSummaryContent = () => {
<>
{value +
" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ (record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : "")}
>
);
}
@@ -171,10 +144,7 @@ const SimulationSummaryContent = () => {
>
{value}
{" "}
- {" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ {` ${record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : ""}`}
>
);
} else {
@@ -182,9 +152,7 @@ const SimulationSummaryContent = () => {
<>
{value +
" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ (record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : "")}
>
);
}
@@ -211,10 +179,7 @@ const SimulationSummaryContent = () => {
>
{value}
{" "}
- {" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ {` ${record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : ""}`}
>
);
} else {
@@ -222,9 +187,7 @@ const SimulationSummaryContent = () => {
<>
{value +
" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ (record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : "")}
>
);
}
@@ -237,7 +200,7 @@ const SimulationSummaryContent = () => {
title: "Name",
dataIndex: "name",
key: "name",
- render: (text, record) => (
+ render: (text, _record) => (
{text}{" "}
@@ -249,7 +212,7 @@ const SimulationSummaryContent = () => {
];
const rowSelection: TableRowSelection = {
- onChange: (selectedRowKeys, selectedRows) => {
+ onChange: (_selectedRowKeys, selectedRows) => {
modifiers.forEach((modifier) => {
modifier.active = selectedRows.indexOf(modifier) >= 0;
});
@@ -311,6 +274,7 @@ const SimulationSummaryContent = () => {
},
];
+ // biome-ignore lint/correctness/useExhaustiveDependencies(renderSettings.showSimulationBox): needed for simulationSummaryColumns render function
const simulationStatusData: SimulationSummaryType[] = useMemo(() => {
if (!simulation) {
return [];
@@ -339,7 +303,7 @@ const SimulationSummaryContent = () => {
{
key: "timeremain",
name: "Remaining time",
- value: Math.ceil(remainingTime).toString() + " s",
+ value: `${Math.ceil(remainingTime).toString()} s`,
},
{
key: "tsps",
@@ -349,7 +313,7 @@ const SimulationSummaryContent = () => {
{
key: "memory",
name: "Memory usage",
- value: (memoryUsage / 1024 / 1024).toFixed(2).toString() + " MB",
+ value: `${(memoryUsage / 1024 / 1024).toFixed(2).toString()} MB`,
},
{
key: "simulationspeed",
@@ -471,4 +435,3 @@ const SimulationSummaryContent = () => {
};
export default React.memo(SimulationSummaryContent);
-
diff --git a/src/components/SimulationSummaryExpanded.tsx b/src/components/SimulationSummaryExpanded.tsx
index 90377635..000d64ca 100644
--- a/src/components/SimulationSummaryExpanded.tsx
+++ b/src/components/SimulationSummaryExpanded.tsx
@@ -1,16 +1,16 @@
-import { useStoreState, useStoreActions } from "../hooks";
-import { SettingOutlined, MinusOutlined } from "@ant-design/icons";
-import { Table, Row, Col, Button, Slider } from "antd";
+import { MinusOutlined, SettingOutlined } from "@ant-design/icons";
+import { Button, Col, Row, Slider, Table } from "antd";
import type { ColumnsType } from "antd/es/table";
import type { TableRowSelection } from "antd/es/table/interface";
-import { Compute, Fix, Variable } from "../types";
-import React, { useState, useMemo, useCallback } from "react";
-import Modifier from "../modifiers/modifier";
+import React, { useCallback, useMemo, useState } from "react";
+import Figure from "../components/Figure";
+import { useStoreActions, useStoreState } from "../hooks";
+import ColorModifierSettings from "../modifiers/ColorModifierSettings";
+import type ColorModifier from "../modifiers/colormodifier";
+import type Modifier from "../modifiers/modifier";
import SyncBondsSettings from "../modifiers/SyncBondsSettings";
import SyncParticlesSettings from "../modifiers/SyncParticlesSettings";
-import ColorModifierSettings from "../modifiers/ColorModifierSettings";
-import ColorModifier from "../modifiers/colormodifier";
-import Figure from "../components/Figure";
+import type { Compute, Fix, Variable } from "../types";
import { track } from "../utils/metrics";
interface SimulationSummaryType {
@@ -27,59 +27,37 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
const [visibleSettings, setVisibleSettings] = useState();
const [visibleCompute, setVisibleCompute] = useState();
const [visibleFix, setVisibleFix] = useState();
- const [visibleVariable, setVisibleVariable] = useState<
- Variable | undefined
- >();
+ const [visibleVariable, setVisibleVariable] = useState();
- const simulationSettings = useStoreState(
- (state) => state.settings.simulation,
- );
- const modifiers = useStoreState(
- (state) => state.processing.postTimestepModifiers,
- );
- const postTimestepModifiers = useStoreState(
- (state) => state.processing.postTimestepModifiers,
- );
+ const simulationSettings = useStoreState((state) => state.settings.simulation);
+ const modifiers = useStoreState((state) => state.processing.postTimestepModifiers);
+ const postTimestepModifiers = useStoreState((state) => state.processing.postTimestepModifiers);
const colorModifier = postTimestepModifiers.filter(
- (modifier) => modifier.name === "Colors",
+ (modifier) => modifier.name === "Colors"
)[0] as ColorModifier;
- const selectedModifiers = postTimestepModifiers
- .filter((m) => m.active)
- .map((m) => m.name);
+ const selectedModifiers = postTimestepModifiers.filter((m) => m.active).map((m) => m.name);
const simulation = useStoreState((state) => state.simulation.simulation);
const runType = useStoreState((state) => state.simulationStatus.runType);
const numAtoms = useStoreState((state) => state.simulationStatus.numAtoms);
const numBonds = useStoreState((state) => state.simulationStatus.numBonds);
const timesteps = useStoreState((state) => state.simulationStatus.timesteps);
- const remainingTime = useStoreState(
- (state) => state.simulationStatus.remainingTime,
- );
- const timestepsPerSecond = useStoreState(
- (state) => state.simulationStatus.timestepsPerSecond,
- );
- const memoryUsage = useStoreState(
- (state) => state.simulationStatus.memoryUsage,
- );
+ const remainingTime = useStoreState((state) => state.simulationStatus.remainingTime);
+ const timestepsPerSecond = useStoreState((state) => state.simulationStatus.timestepsPerSecond);
+ const memoryUsage = useStoreState((state) => state.simulationStatus.memoryUsage);
- const setSimulationSettings = useStoreActions(
- (actions) => actions.settings.setSimulation,
- );
+ const setSimulationSettings = useStoreActions((actions) => actions.settings.setSimulation);
const computes = useStoreState((state) => state.simulationStatus.computes);
const fixes = useStoreState((state) => state.simulationStatus.fixes);
const variables = useStoreState((state) => state.simulationStatus.variables);
const setModifierSyncDataPointsAction = useStoreActions(
- (actions) => actions.simulationStatus.setModifierSyncDataPoints,
+ (actions) => actions.simulationStatus.setModifierSyncDataPoints
);
const handleToggleSyncDataPoints = useCallback(
- (
- name: string,
- type: "compute" | "fix" | "variable",
- value: boolean,
- ) => {
+ (name: string, type: "compute" | "fix" | "variable", value: boolean) => {
setModifierSyncDataPointsAction({ name, type, value });
},
- [setModifierSyncDataPointsAction],
+ [setModifierSyncDataPointsAction]
);
const setSyncFrequency = (value: number | null) => {
@@ -137,10 +115,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
>
{value}
{" "}
- {" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ {` ${record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : ""}`}
>
);
} else {
@@ -148,9 +123,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
<>
{value +
" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ (record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : "")}
>
);
}
@@ -177,10 +150,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
>
{value}
{" "}
- {" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ {` ${record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : ""}`}
>
);
} else {
@@ -188,9 +158,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
<>
{value +
" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ (record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : "")}
>
);
}
@@ -217,10 +185,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
>
{value}
{" "}
- {" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ {` ${record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : ""}`}
>
);
} else {
@@ -228,9 +193,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
<>
{value +
" " +
- (record.hasScalarData
- ? record.scalarValue.toPrecision(5).toString()
- : "")}
+ (record.hasScalarData ? record.scalarValue.toPrecision(5).toString() : "")}
>
);
}
@@ -243,7 +206,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
title: "Name",
dataIndex: "name",
key: "name",
- render: (text, record) => (
+ render: (text, _record) => (
{text}{" "}
@@ -255,7 +218,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
];
const rowSelection: TableRowSelection = {
- onChange: (selectedRowKeys, selectedRows) => {
+ onChange: (_selectedRowKeys, selectedRows) => {
modifiers.forEach((modifier) => {
modifier.active = selectedRows.indexOf(modifier) >= 0;
});
@@ -329,7 +292,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
{
key: "timeremain",
name: "Remaining time",
- value: Math.ceil(remainingTime).toString() + " s",
+ value: `${Math.ceil(remainingTime).toString()} s`,
},
{
key: "tsps",
@@ -339,7 +302,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
{
key: "memory",
name: "Memory usage",
- value: (memoryUsage / 1024 / 1024).toFixed(2).toString() + " MB",
+ value: `${(memoryUsage / 1024 / 1024).toFixed(2).toString()} MB`,
},
{
key: "simulationspeed",
@@ -374,7 +337,7 @@ const SimulationSummaryExpanded = ({ onShowLess }: SimulationSummaryExpandedProp
type="text"
icon={}
onClick={handleShowLess}
- style={{ color: '#fff', padding: 0 }}
+ style={{ color: "#fff", padding: 0 }}
/>
)}
diff --git a/src/components/SimulationSummaryModal.tsx b/src/components/SimulationSummaryModal.tsx
index 6d0c3a8c..c12cde2c 100644
--- a/src/components/SimulationSummaryModal.tsx
+++ b/src/components/SimulationSummaryModal.tsx
@@ -1,6 +1,6 @@
import { Modal } from "antd";
-import SimulationSummaryContent from "./SimulationSummaryContent";
import { track } from "../utils/metrics";
+import SimulationSummaryContent from "./SimulationSummaryContent";
interface SimulationSummaryModalProps {
open: boolean;
@@ -28,4 +28,3 @@ const SimulationSummaryModal = ({ open, onClose }: SimulationSummaryModalProps)
};
export default SimulationSummaryModal;
-
diff --git a/src/containers/Console.tsx b/src/containers/Console.tsx
index 513250e6..122298d8 100644
--- a/src/containers/Console.tsx
+++ b/src/containers/Console.tsx
@@ -1,7 +1,7 @@
import Editor from "@monaco-editor/react";
+import type * as Monaco from "monaco-editor";
import { useEffect, useRef } from "react";
import { useStoreState } from "../hooks";
-import type * as Monaco from "monaco-editor";
interface ConsoleProps {
width?: number | string;
@@ -18,7 +18,8 @@ const Console = ({ width, height }: ConsoleProps) => {
selectOnLineNumbers: true,
readOnly: true,
};
-
+
+ // biome-ignore lint/correctness/useExhaustiveDependencies: lammpsOutput is needed to trigger scroll when output changes
useEffect(() => {
const editor = editorRef.current;
if (editor) {
diff --git a/src/containers/Edit.tsx b/src/containers/Edit.tsx
index 927d95c6..b563d7aa 100644
--- a/src/containers/Edit.tsx
+++ b/src/containers/Edit.tsx
@@ -1,1414 +1,1413 @@
-import { useCallback } from "react";
-import { useStoreState } from "../hooks";
import Editor, { loader } from "@monaco-editor/react";
import type * as Monaco from "monaco-editor";
+import { useCallback } from "react";
+import { useStoreState } from "../hooks";
// Initialize Monaco
loader.init().then((monaco) => {
monaco.languages.register({ id: "lammps" });
monaco.languages.setMonarchTokensProvider("lammps", {
- keywords: [
- "ave/correlate",
- "lj/spica/coul/msm/omp",
- "return",
- "heat/gran",
- "pair_write",
- "fene/intel",
- "temper",
- "lj/charmm/coul/charmm/omp",
- "cna/atom",
- "nbond/atom",
- "boundary_integral",
- "airebo/intel",
- "rdf",
- "nodeset_to_elementset",
- "movie",
- "lb/momentum",
- "local/gran/vtk",
- "tersoff/mod/gpu",
- "colloid/omp",
- "atom/molecule",
- "threebody/table",
- "mesh/surface",
- "kspace_style",
- "plugin",
- "write_dump",
- "rebo/omp",
- "thermo",
- "qeq/point",
- "mvv/edpd",
- "colloid/gpu",
- "neigh_settings",
- "coul/shield",
- "compute",
- "scafacos",
- "check/timestep/gran",
- "lj/cut/thole/long",
- "dpd/tstat",
- "store/state",
- "temp/deform/kk",
- "group/group",
- "dpd/fdt",
- "edip/multi",
- "setforce/kk",
- "lj/charmm/coul/charmm",
- "run_style",
- "sph/taitwater/morris",
- "born/coul/wolf/cs",
- "yukawa/colloid",
- "nvt/sllod/kk",
- "sw/mod",
- "lj/class2/coul/cut/soft",
- "cross",
- "damping/cundall",
- "hbond/dreiding/lj/omp",
- "aveforce",
- "smd/damage",
- "nve/asphere/noforce",
- "rigid/npt/omp",
- "smd/triangle/vertices",
- "harmonic/shift/cut/omp",
- "srp",
- "lj/cut/coul/dsf/omp",
- "read_dump",
- "airebo/omp",
- "minimize",
- "voronoi/atom",
- "rigid/nph",
- "rigid/local",
- "pair/local",
- "nve/asphere/gpu",
- "lj/cut/dipole/cut/gpu",
- "coul/msm",
- "kernel_bandwidth",
- "tdpd/cc/atom",
- "zbl/kk",
- "lumped_lambda_solve",
- "suffix",
- "peri/lps/omp",
- "coul/wolf",
- "fene/expand",
- "pafi",
- "nm/cut/split",
- "stress/mop",
- "coul/wolf/omp",
- "nve/kk",
- "table/omp",
- "lj/cut/coul/debye/dielectric/omp",
- "group2ndx",
- "brownian",
- "neigh_modify",
- "lj/cut/coul/cut/soft",
- "hbond/dreiding/lj",
- "tersoff/zbl",
- "hybrid/overlay",
- "dump_modify",
- "bond/react",
- "nve/bpm/sphere",
- "lj/charmm/coul/charmm/kk",
- "lj/cut/coul/long/dielectric/omp",
- "pair",
- "colvars",
- "e3b",
- "custom/vtk",
- "equal",
- "coul/diel",
- "ke/multisphere",
- "temp/deform",
- "on_the_fly",
- "hybrid",
- "eim/omp",
- "lj/charmm/coul/long/omp",
- "vtk",
- "heat",
- "temp/chunk",
- "smd/tlsph/num/neighs",
- "multi/harmonic",
- "bubble",
- "neb/spin",
- "wall/body/polyhedron",
- "atom/adios",
- "reaxff/omp",
- "nvt/sllod/intel",
- "precession/spin",
- "pressure",
- "partition",
- "ave/sphere/atom/kk",
- "buck/long/coul/long",
- "bond",
- "buck",
- "third_order/kk",
- "cfg/uef",
- "rigid/nve/small",
- "buck/coul/long/cs",
- "damage/atom",
- "coul/cut/global",
- "reaxff/kk",
- "multisphere",
- "track_displacement",
- "temp/rotate",
- "sqdistharm",
- "smd/ulsph",
- "smd/ulsph/num/neighs",
- "smd/tri_surface",
- "off",
- "pressure/uef",
- "vcm/chunk",
- "lj/cut/coul/debye",
- "gravity",
- "sna/grid",
- "lj/charmm/coul/long/opt",
- "lj/cut/coul/long/omp",
- "dpd/kk",
- "harmonic/shift",
- "lj/cut/soft",
- "sph/density/corr",
- "lj/charmm/coul/long/soft/omp",
- "lj/cut/coul/long/cs",
- "smd/tlsph/stress",
- "qeq/reaxff/omp",
- "nve/line",
- "thermal",
- "gld",
- "halt",
- "reset_timestep",
- "gran",
- "msst",
- "smtbq",
- "force/tally",
- "body/rounded/polygon",
- "adp/kk",
- "morse/smooth/linear/omp",
- "bocs",
- "yes",
- "coul/long/soft/omp",
- "born/coul/dsf",
- "cosine/buck6d",
- "sph/artVisc/tensCorr",
- "lj/spica/coul/long/omp",
- "source_integration",
- "sph/rho/atom",
- "born/coul/long/cs/gpu",
- "setforce/spin",
- "min_style fire",
- "gran/hooke",
- "computes",
- "gauss/cut/omp",
- "tersoff/mod/c",
- "plumed",
- "smd/move_tri_surf",
- "amoeba/bitorsion",
- "awpmd/cut",
- "filter",
- "lj/cut/coul/msm",
- "localized_lambda",
- "coul/cut/omp",
- "wall/lj93",
- "hybrid/kk",
- "com",
- "coul/long/soft",
- "temp/deform/eff",
- "lj/gromacs/omp",
- "peri/pmb",
- "lj/cut/coul/long/soft/omp",
- "gauss",
- "wall/gran/region",
- "lj/charmm/coul/msm",
- "unfix",
- "pppm/disp",
- "multi/lucy/rx/kk",
- "morse/kk",
- "internal_element_set",
- "nve/omp",
- "qeq/comb/omp",
- "coul/cut/soft",
- "coul/streitz",
- "buck/gpu",
- "angle/local",
- "nph",
- "gayberne",
- "lj/gromacs/coul/gromacs",
- "rebo",
- "manifoldforce",
- "lj/spica/omp",
- "coul/long/dielectric",
- "adf",
- "smd/tlsph/strain",
- "gaussian",
- "compute_modify",
- "shake/kk",
- "lj/class2/gpu",
- "msd",
- "meam/spline/omp",
- "while",
- "reaxff/bonds",
- "yukawa/gpu",
- "tersoff/zbl/gpu",
- "multisphere/break",
- "lj/cut/opt",
- "ttm",
- "born/coul/long/cs",
- "if",
- "min_style sd",
- "rebo/intel",
- "dihedral/local",
- "special",
- "helix",
- "tersoff/zbl/omp",
- "body/local",
- "smd/rho",
- "bond_coeff",
- "sw/mod/omp",
- "dimension",
- "smd/ulsph/strain/rate",
- "smd/tlsph/defgrad",
- "npt/eff",
- "lj/spica/kk",
- "fep/ta",
- "nvt/sphere",
- "propel/self",
- "granular",
- "vashishta/table/omp",
- "special_bonds",
- "meam",
- "lj/cut/dipole/cut",
- "erotate/asphere",
- "lj/cut/coul/long/dielectric",
- "lj/cut/kk",
- "lcbop",
- "adapt/fep",
- "fabric",
- "coul/long/cs",
- "lubricateU",
- "com/chunk",
- "lj/charmm/coul/long/kk",
- "lj/cut/coul/debye/gpu",
- "temp/drude",
- "lj/cut/coul/cut/dielectric",
- "ke/atom/eff",
- "buoyancy",
- "lj/charmm/coul/charmm/implicit",
- "oxrna2/excv",
- "gayberne/omp",
- "rigid/npt/small",
- "lj/long/coul/long",
- "gravity/kk",
- "massflow/mesh/sieve",
- "lj96/cut/gpu",
- "snap",
- "NULL",
- "resquared",
- "freeze/kk",
- "temp/ramp",
- "charge/regulation",
- "pair_modify",
- "spica",
- "external",
- "property/atom/tracer/stream",
- "tersoff/mod/kk",
- "lebedeva/z",
- "gle",
- "lj/cut/coul/debye/omp",
- "ring",
- "smd/internal/energy",
- "stress/cartesian",
- "eam/cd",
- "oxdna/hbond",
- "lj/cut/coul/msm/gpu",
- "buck/coul/msm",
- "lj/relres",
- "continuum/weighted",
- "ke/eff",
- "oxdna/xstk",
- "wall/region",
- "orientorder/atom",
- "boundary_faceset",
- "heat/flux/virial/tally",
- "temp/eff",
- "pe/tally",
- "angmom/chunk",
- "coul/cut/kk",
- "pppm/stagger",
- "vashishta/gpu",
- "qeq/reaxff/kk",
- "nph/omp",
- "gradients",
- "thole",
- "setforce",
- "reset_atom_ids",
- "momentum/chunk",
- "deposit",
- "dihedral_coeff",
- "inversion/harmonic",
- "table/rx",
- "inertia/molecule",
- "lj/cut/coul/long/kk",
- "property/atom/kk",
- "pppm",
- "kolmogorov/crespi/z",
- "spring/rg",
- "particletemplate/sphere",
- "nvt/sphere/omp",
- "eam/alloy/gpu",
- "lj/cut/thole/long/omp",
- "smd/ulsph/strain",
- "oxdna2/hbond",
- "lj/class2/coul/long/kk",
- "harmonic/omp",
- "nve/gpu",
- "coul/slater/cut",
- "contour_integral",
- "morse/omp",
- "min_style spin",
- "agni/omp",
- "insert/rate/region",
- "ipi",
- "airebo/morse/intel",
- "buck/coul/cut/omp",
- "ke/atom",
- "peri/lps",
- "pair/gran/local",
- "wall/ees",
- "umbrella",
- "gran/hooke/history",
- "morse/smooth/linear",
- "lj/smooth/linear",
- "meso/move",
- "rann",
- "atc",
- "nve/intel",
- "cosine/kk",
- "kolmogorov/crespi/full",
- "temp/region/eff",
- "rhok",
- "nph/asphere",
- "wall/lj93/kk",
- "msd/chunk",
- "opls/intel",
- "then",
- "ave/euler",
- "run",
- "smd/plastic/strain",
- "yukawa",
- "wall/body/polygon",
- "lj/cut/tip4p/long/soft",
- "cossq",
- "lineforce",
- "sph/idealgas",
- "tgnvt/drude",
- "imd",
- "lj/charmm/coul/long",
- "rx/kk",
- "nharmonic",
- "cosine/shift",
- "orient/fcc",
- "pppm/tip4p",
- "wf/cut",
- "cmap",
- "nm/cut/coul/cut",
- "improper_coeff",
- "eam/omp",
- "nm/cut/coul/long/omp",
- "amoeba",
- "tip4p/long/soft",
- "morse",
- "controller",
- "spin/exchange",
- "dipole",
- "contact/atom",
- "edip",
- "mdpd/rhosum",
- "wall/lj1043",
- "spica/omp",
- "lj/cut/coul/cut/dielectric/omp",
- "nvt/manifold/rattle",
- "kim",
- "edip/omp",
- "vacf",
- "soft/omp",
- "contact/atom/gran",
- "units",
- "qmmm",
- "lj/cut/coul/wolf",
- "lubricate/omp",
- "exp6/rx",
- "buck/coul/cut",
- "coul/cut",
- "move/mesh",
- "comm_modify",
- "lj/long/coul/long/omp",
- "neb",
- "erotate/sphere",
- "lj/class2/omp",
- "omega/chunk",
- "lj/cut/coul/msm/omp",
- "lj/gromacs/coul/gromacs/kk",
- "sph/e/atom",
- "coul/wolf/kk",
- "molfile",
- "born/coul/wolf/gpu",
- "born/coul/wolf/cs/gpu",
- "nve/body",
- "amoeba/pitorsion",
- "npt",
- "lj/expand/omp",
- "electron_integration",
- "atom/swap",
- "create",
- "eff/cut",
- "lj96/cut",
- "saed/vtk",
- "pace/kk",
- "dsmc",
- "rigid/meso",
- "beck/gpu",
- "coul/dsf/omp",
- "rigid",
- "npt/asphere",
- "smd/adjust_dt",
- "born/matrix",
- "lj/charmmfsw/coul/charmmfsh",
- "table",
- "cosine/shift/exp/omp",
- "langevin/kk",
- "lj/expand",
- "yukawa/colloid/gpu",
- "insert/pack",
- "rigid/small",
- "newton",
- "atomic_charge",
- "dynamical_matrix",
- "dpd/fdt/energy/kk",
- "angle_style",
- "eim",
- "meam/sw/spline",
- "cosine/shift/omp",
- "variable",
- "read_restart",
- "mgpt",
- "viscosity/cos",
- "lj/gromacs",
- "dpd/gpu",
- "polymorphic",
- "phonon",
- "lj/gromacs/coul/gromacs/omp",
- "cosine/periodic",
- "coul/debye/omp",
- "smd/tlsph/shape",
- "lj/cut/coul/dsf",
- "label",
- "qbmsst",
- "morse/opt",
- "rigid/nve/omp",
- "indent",
- "eam",
- "eos/cv",
- "nb3b/harmonic",
- "dpd/tstat/kk",
- "gauss/gpu",
- "mliap",
- "polarize/bem/icc",
- "oxrna2/hbond",
- "property/atom",
- "sw/intel",
- "multisphere/single",
- "bond/swap",
- "nvt/asphere",
- "efield",
- "nm/cut",
- "lj/spica/coul/long/gpu",
- "mie/cut/gpu",
- "adapt",
- "lj/class2/coul/long/gpu",
- "fe_md_boundary",
- "grem",
- "buck/omp",
- "smd/hourglass/error",
- "peri/pmb/omp",
- "tersoff/mod/c/omp",
- "bond/break",
- "beck/omp",
- "smd/plastic/strain/rate",
- "append/atoms",
- "lj/cubic",
- "gromos/omp",
- "nvt/gpu",
- "nph/sphere/omp",
- "ffl",
- "for",
- "uncompute",
- "ti/spring",
- "class2/p6",
- "dynamical_matrix/kk",
- "lj/class2/soft",
- "oneway",
- "nvt/uef",
- "deform/kk",
- "property/chunk",
- "eam/fs",
- "eam/gpu",
- "harmonic/cut/omp",
- "particledistribution/discrete/massbased",
- "min_style fire/old",
- "local/density",
- "orient",
- "msm",
- "airebo/morse/omp",
- "coul/cut/soft/omp",
- "temp/partial",
- "wall/gran/local",
- "tip4p/long/soft/omp",
- "lj/cut/coul/long/intel",
- "wall/harmonic",
- "tracker",
- "coul/long",
- "enforce2d/kk",
- "cosine",
- "harmonic/cut",
- "quip",
- "smd/ulsph/effm",
- "morse/soft",
- "vashishta",
- "gravity/omp",
- "delete_elements",
- "lj/long/tip4p/long/omp",
- "harmonic/kk",
- "mesont/tpm",
- "consistent_fe_initialization",
- "gauss/cut",
- "body/rounded/polyhedron",
- "wall/reflect",
- "zbl/gpu",
- "yukawa/colloid/omp",
- "table/gpu",
- "edpd/temp/atom",
- "saip/metal",
- "flow/gauss",
- "lj/cut/coul/long/soft",
- "resquared/omp",
- "heat/gran/conduction",
- "lj/cut/dipole/long",
- "temp",
- "rates",
- "temp/sphere",
- "tip4p/long/omp",
- "lj/cubic/gpu",
- "nvt/kk",
- "spin/dipole/cut",
- "reaxff/species/kk",
- "dipole/omp",
- "drude",
- "nphug",
- "accelerate/cos",
- "eam/opt",
- "tad",
- "temper/npt",
- "tersoff/table",
- "coul/dsf/gpu",
- "gran/hooke/omp",
- "smd/vol",
- "buck/long/coul/long/omp",
- "lj/sf/dipole/sf/omp",
- "replicate",
- "npt/body",
- "mol/swap",
- "gyration/shape/chunk",
- "ilp/graphene/hbn",
- "colloid",
- "mass",
- "nm/cut/coul/long",
- "lj/cut/coul/cut/gpu",
- "cluster/atom",
- "property/global",
- "numdiff/virial",
- "insert/stream",
- "nvt",
- "lj/charmm/coul/long/soft",
- "ring/omp",
- "lj/cut/dipole/cut/omp",
- "airebo/morse",
- "initial",
- "min_style quickmin",
- "viscous/sphere",
- "nve/dotc/langevin",
- "zero",
- "viscosity",
- "gcmc",
- "momb",
- "buck/coul/long/intel",
- "mvv/dpd",
- "read",
- "msd/molecule",
- "tersoff/intel",
- "coul/tt",
- "molecule",
- "momentum",
- "hexorder/atom",
- "lj/cut/coul/dsf/gpu",
- "lj/charmm/coul/charmm/implicit/omp",
- "tersoff/table/omp",
- "reaxff",
- "widom",
- "mdi/qm",
- "nve/sphere/kk",
- "hbond/dreiding/morse/omp",
- "ttm/grid",
- "delete_bonds",
- "drag",
- "PI",
- "tip4p/cut",
- "sph/rhosum",
- "nonlinear/omp",
- "tune/kspace",
- "write_coeff",
- "lj/cut/coul/cut/omp",
- "reset_time",
- "reaxff/bonds/kk",
- "poisson_solver",
- "coul/long/cs/gpu",
- "spring",
- "opls/omp",
- "print",
- "lj/expand/gpu",
- "morse/gpu",
- "srd",
- "cosine/delta",
- "nve/awpmd",
- "nph/asphere/omp",
- "mdi",
- "add_to_nodeset",
- "lj/cut/tip4p/long/gpu",
- "distance",
- "mdpd",
- "cnp/atom",
- "smd",
- "ehex",
- "lj/class2/coul/long/omp",
- "lj/cut/coul/cut/soft/omp",
- "brownian/omp",
- "buck/coul/cut/intel",
- "drip",
- "ave/atom",
- "smd/hertz",
- "quadrature",
- "fene/nm",
- "reference_potential_energy",
- "nvt/omp",
- "soft/gpu",
- "sw/omp",
- "quartic",
- "oxdna2/fene",
- "min_modify",
- "material",
- "sw/angle/table",
- "sph/density/summation",
- "plasticity/atom",
- "cosine/omp",
- "coul/cut/dielectric",
- "coul/msm/omp",
- "enforce2d",
- "quadratic",
- "kspace_modify",
- "smd/contact/radius",
- "class2/kk",
- "lj/smooth/gpu",
- "coul/long/omp",
- "temp/body",
- "shardlow/kk",
- "fields",
- "global/atom",
- "oxdna2/excv",
- "class2/omp",
- "wall/reflect/kk",
- "temp/uef",
- "temp/com",
- "create_box",
- "lj/relres/omp",
- "origin",
- "nvt/body",
- "python/move",
- "lj/class2/coul/cut/kk",
- "cvff",
- "temp/rescale",
- "EDGE",
- "rigid/npt",
- "fene",
- "multi/lucy",
- "fep",
- "mass_matrix",
- "qeq/comb",
- "oxdna2/stk",
- "bpm/spring",
- "add_species",
- "atom_modify",
- "tersoff/mod/omp",
- "stress/cylinder",
- "angle",
- "nvt/intel",
- "source",
- "lj/long/tip4p/long",
- "sph/density/continuity",
- "nve/manifold/rattle",
- "smd/setvel",
- "create_bonds",
- "cosine/squared/omp",
- "meam/spline",
- "coul/cut/omp/global",
- "list",
- "group",
- "spring/self",
- "dpd",
- "pour",
- "peri/ves",
- "qeq/dynamic",
- "harmonic/intel",
- "erotate/superquadric",
- "particledistribution/discrete",
- "displace_atoms",
- "pppm/cg",
- "volume_integral",
- "cossq/omp",
- "move",
- "bond_style",
- "nve/sphere",
- "python/invoke",
- "output",
- "opls/kk",
- "region",
- "eam/alloy/omp",
- "temp/csvr",
- "ewald",
- "efield/atom",
- "press/berendsen",
- "pimd",
- "nph/body",
- "torque/chunk",
- "addtorque",
- "lj/charmm/coul/charmm/intel",
- "pace",
- "rx",
- "langevin/eff",
- "sample_frequency",
- "meam/kk",
- "sw",
- "charmmfsw",
- "polarize/bem/gmres",
- "write_data",
- "smd/integrate_tlsph",
- "ave/chunk",
- "vector",
- "lj/smooth",
- "born/coul/dsf/cs",
- "dpd/ext/tstat/kk",
- "include",
- "saed",
- "lubricate/poly/omp",
- "dpd/ext/tstat",
- "lj/cut/coul/debye/kk",
- "buck/intel",
- "gauss/omp",
- "hybrid/overlay/kk",
- "erotate/sphere/atom",
- "langevin",
- "lj/cut/coul/cut/kk",
- "snap/kk",
- "poems",
- "line/lj",
- "yukawa/kk",
- "sdpd/taitwater/isothermal",
- "freeze",
- "smd/ulsph/stress",
- "sph/lj",
- "table/cut",
- "nve/dot",
- "temperature_definition",
- "python",
- "pppm/disp/tip4p",
- "lj/class2/coul/long",
- "body/nparticle",
- "nvt/sllod/omp",
- "particletemplate/superquadric",
- "tip4p/long",
- "nve/noforce",
- "beck",
- "planeforce",
- "change_box",
- "born/coul/long/gpu",
- "lj/cut/tip4p/cut/omp",
- "h5md",
- "lj/charmm/coul/charmm/gpu",
- "kernel",
- "nve/spin",
- "eam/cd/old",
- "born/coul/msm",
- "lj/mdf",
- "lj/long/coul/long/intel",
- "eam/alloy",
- "lj/switch3/coulgauss/long",
- "sph",
- "particledistribution/discrete/numberbased",
- "rigid/nve",
- "displace/atom",
- "basal/atom",
- "nve/sphere/omp",
- "charmm/kk",
- "improper",
- "hdnnp",
- "ave/spatial",
- "lubricate",
- "coul/long/gpu",
- "buck/coul/msm/omp",
- "lj/spica",
- "eam/he",
- "fix_modify",
- "oxdna2/xstk",
- "erotate",
- "balance",
- "lj/cut/gpu",
- "mm3",
- "dump",
- "mie/cut",
- "nph/kk",
- "reaxff/species",
- "ewald/disp",
- "cosine/periodic/omp",
- "nve/tri",
- "event/displace",
- "umbrella/omp",
- "airebo",
- "lb/viscous",
- "npt/omp",
- "dpd/ext",
- "rigid/nvt/omp",
- "image",
- "sph/taitwater",
- "snav/atom",
- "fourier/intel",
- "lj/long/coul/long/opt",
- "hyper/local",
- "lj/expand/coul/long",
- "harmonic/shift/omp",
- "store/force",
- "npt/intel",
- "tersoff/gpu",
- "lj/gromacs/gpu",
- "pe",
- "true",
- "erotate/multisphere",
- "helix/omp",
- "buck/coul/long/kk",
- "nphug/omp",
- "mesocnt",
- "prd",
- "read_data",
- "oxdna/fene",
- "pair_coeff",
- "tersoff/mod",
- "lj/class2",
- "buck/coul/cut/gpu",
- "lj/cut/intel",
- "born/coul/wolf",
- "lj/long/dipole/long",
- "nvt/sllod",
- "lj/cut",
- "jump",
- "eam/alloy/opt",
- "bond_write",
- "entropy/atom",
- "brownian/poly",
- "hybrid/scaled",
- "msm/cg",
- "tersoff",
- "momentum/kk",
- "wall/srd",
- "neighbor",
- "write_restart",
- "lj/class2/kk",
- "nve/asphere",
- "dpd/intel",
- "opls",
- "eam/kk",
- "eam/intel",
- "spherical",
- "comb/omp",
- "min_style spin/cg",
- "velocity",
- "restrain",
- "deform",
- "fene/kk",
- "coul/slater",
- "echo",
- "clear",
- "eam/alloy/kk",
- "write_atom_weights",
- "multi/lucy/rx",
- "chunk/spread/atom",
- "lj/cut/coul/wolf/omp",
- "dpd/energy",
- "nve/asphere/intel",
- "multi/harmonic/omp",
- "evaporate",
- "lj/class2/coul/long/soft",
- "ave/histo",
- "dielectric",
- "boundary",
- "sph/heatconduction",
- "pair_style",
- "lj/charmm/coul/long/gpu",
- "restart",
- "vashishta/kk",
- "lj/cut/coul/long/opt",
- "qeq/slater",
- "remove_molecule",
- "nve/superquadric",
- "lj/spica/coul/msm",
- "sph/stationary",
- "pe/atom",
- "lj/cut/tip4p/long/omp",
- "fragment/atom",
- "shake",
- "exp6/rx/kk",
- "brownian/poly/omp",
- "dpd/ext/kk",
- "temp/cs",
- "coul/diel/omp",
- "npt/sphere/omp",
- "edpd",
- "bond/local",
- "smd/integrate_ulsph",
- "heat/flux",
- "shardlow",
- "zbl",
- "hbond/dreiding/morse",
- "on",
- "atom_style",
- "harmonic",
- "fene/expand/omp",
- "equilibrium_start",
- "born/omp",
- "addforce",
- "ti",
- "temp/rescale/eff",
- "snad/atom",
- "lj/cut/coul/cut",
- "latte",
- "type",
- "delete_atoms",
- "timestep",
- "smd/tlsph/strain/rate",
- "wall/piston",
- "spin",
- "gayberne/gpu",
- "smd/tlsph",
- "slice",
- "born/coul/wolf/omp",
- "cosine/squared",
- "lj/cut/coul/msm/dielectric",
- "create_elementset",
- "agni",
- "dpd/fdt/energy",
- "property/molecule",
- "dihedral",
- "ke",
- "nm/cut/coul/cut/omp",
- "lj/sf/dipole/sf/gpu",
- "lj/cut/coul/dsf/kk",
- "coul/debye/gpu",
- "min_style cg",
- "gyration/shape",
- "time_integration",
- "dpd/atom",
- "tersoff/omp",
- "gw",
- "improper_style",
- "plane",
- "lj/cut/soft/omp",
- "set",
- "lj/cut/tip4p/long/soft/omp",
- "mask_direction",
- "coul/dsf/kk",
- "exchange",
- "temp/asphere",
- "lj/cut/coul/long/gpu",
- "born",
- "fix_flux",
- "lj/charmm/coul/long/intel",
- "spin/dmi",
- "box/relax",
- "elif",
- "charmm",
- "ufm",
- "class2",
- "quartic/omp",
- "box",
- "info",
- "gyration",
- "couple/cfd",
- "spring/chunk",
- "tip4p/cut/omp",
- "sna/atom",
- "undump",
- "nve",
- "lattice",
- "qeq/reaxff",
- "qtb",
- "wall/reflect/stochastic",
- "gyration/molecule",
- "buck/coul/long",
- "nparticles/tracer/region",
- "fourier",
- "timer",
- "gran/hertz/history",
- "smd/wall_surface",
- "soft",
- "lj/spica/coul/long",
- "cvff/omp",
- "com/molecule",
- "angle_coeff",
- "lubricate/poly",
- "lj/cut/tip4p/long",
- "lj/charmm/coul/charmm/implicit/kk",
- "lj/cut/coul/long",
- "spin/neel",
- "msd/nongauss",
- "charmm/omp",
- "INF",
- "oxrna2/stk",
- "massflow/mesh",
- "reduce/region",
- "lj/cut/coul/debye/dielectric",
- "lj/class2/coul/cut",
- "npt/asphere/omp",
- "create_atoms",
- "comb",
- "bond/create",
- "langevin/spin",
- "hyper/global",
- "lj/expand/kk",
- "boundary_dynamics",
- "lj/cut/tip4p/cut",
- "package",
- "bpm/rotational",
- "third_order",
- "lj/expand/coul/long/gpu",
- "coul/long/kk",
- "lj/smooth/omp",
- "write",
- "buck/mdf",
- "coul/dsf",
- "coord/atom/kk",
- "property/atom/tracer",
- "eos/table/rx",
- "ave/sphere/atom",
- "communicate",
- "nodeset",
- "comb3",
- "dihedral_style",
- "buck/coul/long/omp",
- "coord/gran",
- "sph/pressure",
- "acks2/reaxff/kk",
- "tfmc",
- "electron/stopping",
- "extep",
- "rigid/small/omp",
- "xrd",
- "orientorder/atom/kk",
- "dpd/energy/kk",
- "add_molecule",
- "spin/magelec",
- "distharm",
- "stress/atom",
- "rigid/nph/omp",
- "cosine/shift/exp",
- "qeq/shielded",
- "rigid/omp",
- "dpd/omp",
- "log",
- "cosine/delta/omp",
- "property/local",
- "ke/rigid",
- "acks2/reaxff",
- "shell",
- "hyper",
- "reduce",
- "coul/exclude",
- "centro/atom",
- "eam/alloy/intel",
- "yukawa/omp",
- "no",
- "dipole/chunk",
- "next",
- "fene/omp",
- "coul/cut/gpu",
- "temp/profile",
- "zbl/omp",
- "remove_source",
- "reset_mol_ids",
- "adp/omp",
- "ptm/atom",
- "rattle",
- "fourier/simple",
- "cvff/intel",
- "coul/debye/kk",
- "sw/gpu",
- "none",
- "ave/correlate/long",
- "inertia/chunk",
- "born/gpu",
- "lj/sf/dipole/sf",
- "npt/cauchy",
- "tmd",
- "lj/cut/dipole/long/gpu",
- "drude/transform/direct",
- "oxrna2/coaxstk",
- "nvt/asphere/omp",
- "ufm/omp",
- "heat/flux/tally",
- "oxdna/excv",
- "ufm/opt",
- "gran/hooke/history/omp",
- "nonlinear",
- "lj/spica/gpu",
- "vashishta/omp",
- "npt/gpu",
- "atm",
- "smd/tlsph/dt",
- "edpd/source",
- "numdiff",
- "thermo_style",
- "lj/cubic/omp",
- "recenter",
- "table/kk",
- "brownian/sphere",
- "multicontact/halfspace",
- "lj/charmm/coul/msm/omp",
- "lb/fluid",
- "thermal/conductivity",
- "coord/atom",
- "tri/lj",
- "eos/table",
- "processors",
- "scale",
- "lj/cut/omp",
- "adp",
- "nharmonic/omp",
- "nvt/sllod/eff",
- "oxdna2/coaxstk",
- "ackland/atom",
- "lj/gromacs/kk",
- "nvt/eff",
- "erotate/rigid",
- "mesont",
- "born/coul/msm/omp",
- "labelmap",
- "born/coul/long/omp",
- "gran/hertz/history/omp",
- "tersoff/kk",
- "create_nodeset",
- "decomposition",
- "bop",
- "reduce/chunk",
- "sw/kk",
- "property/atom/regiontracer/time",
- "temp/region",
- "reset_atomic_reference_positions",
- "lj96/cut/omp",
- "buck/coul/long/gpu",
- "quadratic/omp",
- "resquared/gpu",
- "dt/reset",
- "atom_weight",
- "nvk",
- "nve/limit",
- "unfix_flux",
- "ufm/gpu",
- "fourier/omp",
- "comm_style",
- "rigid/nvt",
- "chunk/atom",
- "vashishta/table",
- "nph/sphere",
- "sph/t/atom",
- "mscg",
- "filter/corotate",
- "temper/grem",
- "min_style hftn",
- "npt/kk",
- "dpd/tstat/omp",
- "dilatation/atom",
- "buck6d/coul/gauss/dsf",
- "mesh/surface/planar",
- "langevin/drude",
- "fourier/simple/omp",
- "lj/smooth/linear/omp",
- "dpd/tstat/gpu",
- "nm/cut/omp",
- "pair_interactions",
- "lj/cut/tip4p/long/opt",
- "netcdf",
- "remove_species",
- "eos/table/rx/kk",
- "smatb",
- "table/rx/kk",
- "neighbor_skin",
- "ilp/tmd",
- "hma",
- "buck/coul/cut/kk",
- "buck/kk",
- "ave/time",
- "quit",
- "gran/hooke/history/kk",
- "harmonic/shift/cut",
- "coul/wolf/cs",
- "thermo_modify",
- "coul/debye",
- "tersoff/zbl/kk",
- "gyration/chunk",
- "lj/class2/coul/cut/omp",
- "particletemplate/multisphere",
- "oxdna/stk",
- "rerun",
- "fix",
- "rigid/nvt/small",
- "viscous",
- "atom_element_map",
- "temp/kk",
- "born/coul/long",
- "wall/gran",
- "wall/region/sph",
- "pe/mol/tally",
- "wall/lj126",
- "charmm/intel",
- "temp/berendsen",
- "else",
- "gayberne/intel",
- "false",
- "oxrna2/xstk",
- "wall/colloid",
- "improper/local",
- "npt/sphere",
- "internal_quadrature",
- "nve/eff",
- "gromos",
- ],
+ keywords: [
+ "ave/correlate",
+ "lj/spica/coul/msm/omp",
+ "return",
+ "heat/gran",
+ "pair_write",
+ "fene/intel",
+ "temper",
+ "lj/charmm/coul/charmm/omp",
+ "cna/atom",
+ "nbond/atom",
+ "boundary_integral",
+ "airebo/intel",
+ "rdf",
+ "nodeset_to_elementset",
+ "movie",
+ "lb/momentum",
+ "local/gran/vtk",
+ "tersoff/mod/gpu",
+ "colloid/omp",
+ "atom/molecule",
+ "threebody/table",
+ "mesh/surface",
+ "kspace_style",
+ "plugin",
+ "write_dump",
+ "rebo/omp",
+ "thermo",
+ "qeq/point",
+ "mvv/edpd",
+ "colloid/gpu",
+ "neigh_settings",
+ "coul/shield",
+ "compute",
+ "scafacos",
+ "check/timestep/gran",
+ "lj/cut/thole/long",
+ "dpd/tstat",
+ "store/state",
+ "temp/deform/kk",
+ "group/group",
+ "dpd/fdt",
+ "edip/multi",
+ "setforce/kk",
+ "lj/charmm/coul/charmm",
+ "run_style",
+ "sph/taitwater/morris",
+ "born/coul/wolf/cs",
+ "yukawa/colloid",
+ "nvt/sllod/kk",
+ "sw/mod",
+ "lj/class2/coul/cut/soft",
+ "cross",
+ "damping/cundall",
+ "hbond/dreiding/lj/omp",
+ "aveforce",
+ "smd/damage",
+ "nve/asphere/noforce",
+ "rigid/npt/omp",
+ "smd/triangle/vertices",
+ "harmonic/shift/cut/omp",
+ "srp",
+ "lj/cut/coul/dsf/omp",
+ "read_dump",
+ "airebo/omp",
+ "minimize",
+ "voronoi/atom",
+ "rigid/nph",
+ "rigid/local",
+ "pair/local",
+ "nve/asphere/gpu",
+ "lj/cut/dipole/cut/gpu",
+ "coul/msm",
+ "kernel_bandwidth",
+ "tdpd/cc/atom",
+ "zbl/kk",
+ "lumped_lambda_solve",
+ "suffix",
+ "peri/lps/omp",
+ "coul/wolf",
+ "fene/expand",
+ "pafi",
+ "nm/cut/split",
+ "stress/mop",
+ "coul/wolf/omp",
+ "nve/kk",
+ "table/omp",
+ "lj/cut/coul/debye/dielectric/omp",
+ "group2ndx",
+ "brownian",
+ "neigh_modify",
+ "lj/cut/coul/cut/soft",
+ "hbond/dreiding/lj",
+ "tersoff/zbl",
+ "hybrid/overlay",
+ "dump_modify",
+ "bond/react",
+ "nve/bpm/sphere",
+ "lj/charmm/coul/charmm/kk",
+ "lj/cut/coul/long/dielectric/omp",
+ "pair",
+ "colvars",
+ "e3b",
+ "custom/vtk",
+ "equal",
+ "coul/diel",
+ "ke/multisphere",
+ "temp/deform",
+ "on_the_fly",
+ "hybrid",
+ "eim/omp",
+ "lj/charmm/coul/long/omp",
+ "vtk",
+ "heat",
+ "temp/chunk",
+ "smd/tlsph/num/neighs",
+ "multi/harmonic",
+ "bubble",
+ "neb/spin",
+ "wall/body/polyhedron",
+ "atom/adios",
+ "reaxff/omp",
+ "nvt/sllod/intel",
+ "precession/spin",
+ "pressure",
+ "partition",
+ "ave/sphere/atom/kk",
+ "buck/long/coul/long",
+ "bond",
+ "buck",
+ "third_order/kk",
+ "cfg/uef",
+ "rigid/nve/small",
+ "buck/coul/long/cs",
+ "damage/atom",
+ "coul/cut/global",
+ "reaxff/kk",
+ "multisphere",
+ "track_displacement",
+ "temp/rotate",
+ "sqdistharm",
+ "smd/ulsph",
+ "smd/ulsph/num/neighs",
+ "smd/tri_surface",
+ "off",
+ "pressure/uef",
+ "vcm/chunk",
+ "lj/cut/coul/debye",
+ "gravity",
+ "sna/grid",
+ "lj/charmm/coul/long/opt",
+ "lj/cut/coul/long/omp",
+ "dpd/kk",
+ "harmonic/shift",
+ "lj/cut/soft",
+ "sph/density/corr",
+ "lj/charmm/coul/long/soft/omp",
+ "lj/cut/coul/long/cs",
+ "smd/tlsph/stress",
+ "qeq/reaxff/omp",
+ "nve/line",
+ "thermal",
+ "gld",
+ "halt",
+ "reset_timestep",
+ "gran",
+ "msst",
+ "smtbq",
+ "force/tally",
+ "body/rounded/polygon",
+ "adp/kk",
+ "morse/smooth/linear/omp",
+ "bocs",
+ "yes",
+ "coul/long/soft/omp",
+ "born/coul/dsf",
+ "cosine/buck6d",
+ "sph/artVisc/tensCorr",
+ "lj/spica/coul/long/omp",
+ "source_integration",
+ "sph/rho/atom",
+ "born/coul/long/cs/gpu",
+ "setforce/spin",
+ "min_style fire",
+ "gran/hooke",
+ "computes",
+ "gauss/cut/omp",
+ "tersoff/mod/c",
+ "plumed",
+ "smd/move_tri_surf",
+ "amoeba/bitorsion",
+ "awpmd/cut",
+ "filter",
+ "lj/cut/coul/msm",
+ "localized_lambda",
+ "coul/cut/omp",
+ "wall/lj93",
+ "hybrid/kk",
+ "com",
+ "coul/long/soft",
+ "temp/deform/eff",
+ "lj/gromacs/omp",
+ "peri/pmb",
+ "lj/cut/coul/long/soft/omp",
+ "gauss",
+ "wall/gran/region",
+ "lj/charmm/coul/msm",
+ "unfix",
+ "pppm/disp",
+ "multi/lucy/rx/kk",
+ "morse/kk",
+ "internal_element_set",
+ "nve/omp",
+ "qeq/comb/omp",
+ "coul/cut/soft",
+ "coul/streitz",
+ "buck/gpu",
+ "angle/local",
+ "nph",
+ "gayberne",
+ "lj/gromacs/coul/gromacs",
+ "rebo",
+ "manifoldforce",
+ "lj/spica/omp",
+ "coul/long/dielectric",
+ "adf",
+ "smd/tlsph/strain",
+ "gaussian",
+ "compute_modify",
+ "shake/kk",
+ "lj/class2/gpu",
+ "msd",
+ "meam/spline/omp",
+ "while",
+ "reaxff/bonds",
+ "yukawa/gpu",
+ "tersoff/zbl/gpu",
+ "multisphere/break",
+ "lj/cut/opt",
+ "ttm",
+ "born/coul/long/cs",
+ "if",
+ "min_style sd",
+ "rebo/intel",
+ "dihedral/local",
+ "special",
+ "helix",
+ "tersoff/zbl/omp",
+ "body/local",
+ "smd/rho",
+ "bond_coeff",
+ "sw/mod/omp",
+ "dimension",
+ "smd/ulsph/strain/rate",
+ "smd/tlsph/defgrad",
+ "npt/eff",
+ "lj/spica/kk",
+ "fep/ta",
+ "nvt/sphere",
+ "propel/self",
+ "granular",
+ "vashishta/table/omp",
+ "special_bonds",
+ "meam",
+ "lj/cut/dipole/cut",
+ "erotate/asphere",
+ "lj/cut/coul/long/dielectric",
+ "lj/cut/kk",
+ "lcbop",
+ "adapt/fep",
+ "fabric",
+ "coul/long/cs",
+ "lubricateU",
+ "com/chunk",
+ "lj/charmm/coul/long/kk",
+ "lj/cut/coul/debye/gpu",
+ "temp/drude",
+ "lj/cut/coul/cut/dielectric",
+ "ke/atom/eff",
+ "buoyancy",
+ "lj/charmm/coul/charmm/implicit",
+ "oxrna2/excv",
+ "gayberne/omp",
+ "rigid/npt/small",
+ "lj/long/coul/long",
+ "gravity/kk",
+ "massflow/mesh/sieve",
+ "lj96/cut/gpu",
+ "snap",
+ "NULL",
+ "resquared",
+ "freeze/kk",
+ "temp/ramp",
+ "charge/regulation",
+ "pair_modify",
+ "spica",
+ "external",
+ "property/atom/tracer/stream",
+ "tersoff/mod/kk",
+ "lebedeva/z",
+ "gle",
+ "lj/cut/coul/debye/omp",
+ "ring",
+ "smd/internal/energy",
+ "stress/cartesian",
+ "eam/cd",
+ "oxdna/hbond",
+ "lj/cut/coul/msm/gpu",
+ "buck/coul/msm",
+ "lj/relres",
+ "continuum/weighted",
+ "ke/eff",
+ "oxdna/xstk",
+ "wall/region",
+ "orientorder/atom",
+ "boundary_faceset",
+ "heat/flux/virial/tally",
+ "temp/eff",
+ "pe/tally",
+ "angmom/chunk",
+ "coul/cut/kk",
+ "pppm/stagger",
+ "vashishta/gpu",
+ "qeq/reaxff/kk",
+ "nph/omp",
+ "gradients",
+ "thole",
+ "setforce",
+ "reset_atom_ids",
+ "momentum/chunk",
+ "deposit",
+ "dihedral_coeff",
+ "inversion/harmonic",
+ "table/rx",
+ "inertia/molecule",
+ "lj/cut/coul/long/kk",
+ "property/atom/kk",
+ "pppm",
+ "kolmogorov/crespi/z",
+ "spring/rg",
+ "particletemplate/sphere",
+ "nvt/sphere/omp",
+ "eam/alloy/gpu",
+ "lj/cut/thole/long/omp",
+ "smd/ulsph/strain",
+ "oxdna2/hbond",
+ "lj/class2/coul/long/kk",
+ "harmonic/omp",
+ "nve/gpu",
+ "coul/slater/cut",
+ "contour_integral",
+ "morse/omp",
+ "min_style spin",
+ "agni/omp",
+ "insert/rate/region",
+ "ipi",
+ "airebo/morse/intel",
+ "buck/coul/cut/omp",
+ "ke/atom",
+ "peri/lps",
+ "pair/gran/local",
+ "wall/ees",
+ "umbrella",
+ "gran/hooke/history",
+ "morse/smooth/linear",
+ "lj/smooth/linear",
+ "meso/move",
+ "rann",
+ "atc",
+ "nve/intel",
+ "cosine/kk",
+ "kolmogorov/crespi/full",
+ "temp/region/eff",
+ "rhok",
+ "nph/asphere",
+ "wall/lj93/kk",
+ "msd/chunk",
+ "opls/intel",
+ "then",
+ "ave/euler",
+ "run",
+ "smd/plastic/strain",
+ "yukawa",
+ "wall/body/polygon",
+ "lj/cut/tip4p/long/soft",
+ "cossq",
+ "lineforce",
+ "sph/idealgas",
+ "tgnvt/drude",
+ "imd",
+ "lj/charmm/coul/long",
+ "rx/kk",
+ "nharmonic",
+ "cosine/shift",
+ "orient/fcc",
+ "pppm/tip4p",
+ "wf/cut",
+ "cmap",
+ "nm/cut/coul/cut",
+ "improper_coeff",
+ "eam/omp",
+ "nm/cut/coul/long/omp",
+ "amoeba",
+ "tip4p/long/soft",
+ "morse",
+ "controller",
+ "spin/exchange",
+ "dipole",
+ "contact/atom",
+ "edip",
+ "mdpd/rhosum",
+ "wall/lj1043",
+ "spica/omp",
+ "lj/cut/coul/cut/dielectric/omp",
+ "nvt/manifold/rattle",
+ "kim",
+ "edip/omp",
+ "vacf",
+ "soft/omp",
+ "contact/atom/gran",
+ "units",
+ "qmmm",
+ "lj/cut/coul/wolf",
+ "lubricate/omp",
+ "exp6/rx",
+ "buck/coul/cut",
+ "coul/cut",
+ "move/mesh",
+ "comm_modify",
+ "lj/long/coul/long/omp",
+ "neb",
+ "erotate/sphere",
+ "lj/class2/omp",
+ "omega/chunk",
+ "lj/cut/coul/msm/omp",
+ "lj/gromacs/coul/gromacs/kk",
+ "sph/e/atom",
+ "coul/wolf/kk",
+ "molfile",
+ "born/coul/wolf/gpu",
+ "born/coul/wolf/cs/gpu",
+ "nve/body",
+ "amoeba/pitorsion",
+ "npt",
+ "lj/expand/omp",
+ "electron_integration",
+ "atom/swap",
+ "create",
+ "eff/cut",
+ "lj96/cut",
+ "saed/vtk",
+ "pace/kk",
+ "dsmc",
+ "rigid/meso",
+ "beck/gpu",
+ "coul/dsf/omp",
+ "rigid",
+ "npt/asphere",
+ "smd/adjust_dt",
+ "born/matrix",
+ "lj/charmmfsw/coul/charmmfsh",
+ "table",
+ "cosine/shift/exp/omp",
+ "langevin/kk",
+ "lj/expand",
+ "yukawa/colloid/gpu",
+ "insert/pack",
+ "rigid/small",
+ "newton",
+ "atomic_charge",
+ "dynamical_matrix",
+ "dpd/fdt/energy/kk",
+ "angle_style",
+ "eim",
+ "meam/sw/spline",
+ "cosine/shift/omp",
+ "variable",
+ "read_restart",
+ "mgpt",
+ "viscosity/cos",
+ "lj/gromacs",
+ "dpd/gpu",
+ "polymorphic",
+ "phonon",
+ "lj/gromacs/coul/gromacs/omp",
+ "cosine/periodic",
+ "coul/debye/omp",
+ "smd/tlsph/shape",
+ "lj/cut/coul/dsf",
+ "label",
+ "qbmsst",
+ "morse/opt",
+ "rigid/nve/omp",
+ "indent",
+ "eam",
+ "eos/cv",
+ "nb3b/harmonic",
+ "dpd/tstat/kk",
+ "gauss/gpu",
+ "mliap",
+ "polarize/bem/icc",
+ "oxrna2/hbond",
+ "property/atom",
+ "sw/intel",
+ "multisphere/single",
+ "bond/swap",
+ "nvt/asphere",
+ "efield",
+ "nm/cut",
+ "lj/spica/coul/long/gpu",
+ "mie/cut/gpu",
+ "adapt",
+ "lj/class2/coul/long/gpu",
+ "fe_md_boundary",
+ "grem",
+ "buck/omp",
+ "smd/hourglass/error",
+ "peri/pmb/omp",
+ "tersoff/mod/c/omp",
+ "bond/break",
+ "beck/omp",
+ "smd/plastic/strain/rate",
+ "append/atoms",
+ "lj/cubic",
+ "gromos/omp",
+ "nvt/gpu",
+ "nph/sphere/omp",
+ "ffl",
+ "for",
+ "uncompute",
+ "ti/spring",
+ "class2/p6",
+ "dynamical_matrix/kk",
+ "lj/class2/soft",
+ "oneway",
+ "nvt/uef",
+ "deform/kk",
+ "property/chunk",
+ "eam/fs",
+ "eam/gpu",
+ "harmonic/cut/omp",
+ "particledistribution/discrete/massbased",
+ "min_style fire/old",
+ "local/density",
+ "orient",
+ "msm",
+ "airebo/morse/omp",
+ "coul/cut/soft/omp",
+ "temp/partial",
+ "wall/gran/local",
+ "tip4p/long/soft/omp",
+ "lj/cut/coul/long/intel",
+ "wall/harmonic",
+ "tracker",
+ "coul/long",
+ "enforce2d/kk",
+ "cosine",
+ "harmonic/cut",
+ "quip",
+ "smd/ulsph/effm",
+ "morse/soft",
+ "vashishta",
+ "gravity/omp",
+ "delete_elements",
+ "lj/long/tip4p/long/omp",
+ "harmonic/kk",
+ "mesont/tpm",
+ "consistent_fe_initialization",
+ "gauss/cut",
+ "body/rounded/polyhedron",
+ "wall/reflect",
+ "zbl/gpu",
+ "yukawa/colloid/omp",
+ "table/gpu",
+ "edpd/temp/atom",
+ "saip/metal",
+ "flow/gauss",
+ "lj/cut/coul/long/soft",
+ "resquared/omp",
+ "heat/gran/conduction",
+ "lj/cut/dipole/long",
+ "temp",
+ "rates",
+ "temp/sphere",
+ "tip4p/long/omp",
+ "lj/cubic/gpu",
+ "nvt/kk",
+ "spin/dipole/cut",
+ "reaxff/species/kk",
+ "dipole/omp",
+ "drude",
+ "nphug",
+ "accelerate/cos",
+ "eam/opt",
+ "tad",
+ "temper/npt",
+ "tersoff/table",
+ "coul/dsf/gpu",
+ "gran/hooke/omp",
+ "smd/vol",
+ "buck/long/coul/long/omp",
+ "lj/sf/dipole/sf/omp",
+ "replicate",
+ "npt/body",
+ "mol/swap",
+ "gyration/shape/chunk",
+ "ilp/graphene/hbn",
+ "colloid",
+ "mass",
+ "nm/cut/coul/long",
+ "lj/cut/coul/cut/gpu",
+ "cluster/atom",
+ "property/global",
+ "numdiff/virial",
+ "insert/stream",
+ "nvt",
+ "lj/charmm/coul/long/soft",
+ "ring/omp",
+ "lj/cut/dipole/cut/omp",
+ "airebo/morse",
+ "initial",
+ "min_style quickmin",
+ "viscous/sphere",
+ "nve/dotc/langevin",
+ "zero",
+ "viscosity",
+ "gcmc",
+ "momb",
+ "buck/coul/long/intel",
+ "mvv/dpd",
+ "read",
+ "msd/molecule",
+ "tersoff/intel",
+ "coul/tt",
+ "molecule",
+ "momentum",
+ "hexorder/atom",
+ "lj/cut/coul/dsf/gpu",
+ "lj/charmm/coul/charmm/implicit/omp",
+ "tersoff/table/omp",
+ "reaxff",
+ "widom",
+ "mdi/qm",
+ "nve/sphere/kk",
+ "hbond/dreiding/morse/omp",
+ "ttm/grid",
+ "delete_bonds",
+ "drag",
+ "PI",
+ "tip4p/cut",
+ "sph/rhosum",
+ "nonlinear/omp",
+ "tune/kspace",
+ "write_coeff",
+ "lj/cut/coul/cut/omp",
+ "reset_time",
+ "reaxff/bonds/kk",
+ "poisson_solver",
+ "coul/long/cs/gpu",
+ "spring",
+ "opls/omp",
+ "print",
+ "lj/expand/gpu",
+ "morse/gpu",
+ "srd",
+ "cosine/delta",
+ "nve/awpmd",
+ "nph/asphere/omp",
+ "mdi",
+ "add_to_nodeset",
+ "lj/cut/tip4p/long/gpu",
+ "distance",
+ "mdpd",
+ "cnp/atom",
+ "smd",
+ "ehex",
+ "lj/class2/coul/long/omp",
+ "lj/cut/coul/cut/soft/omp",
+ "brownian/omp",
+ "buck/coul/cut/intel",
+ "drip",
+ "ave/atom",
+ "smd/hertz",
+ "quadrature",
+ "fene/nm",
+ "reference_potential_energy",
+ "nvt/omp",
+ "soft/gpu",
+ "sw/omp",
+ "quartic",
+ "oxdna2/fene",
+ "min_modify",
+ "material",
+ "sw/angle/table",
+ "sph/density/summation",
+ "plasticity/atom",
+ "cosine/omp",
+ "coul/cut/dielectric",
+ "coul/msm/omp",
+ "enforce2d",
+ "quadratic",
+ "kspace_modify",
+ "smd/contact/radius",
+ "class2/kk",
+ "lj/smooth/gpu",
+ "coul/long/omp",
+ "temp/body",
+ "shardlow/kk",
+ "fields",
+ "global/atom",
+ "oxdna2/excv",
+ "class2/omp",
+ "wall/reflect/kk",
+ "temp/uef",
+ "temp/com",
+ "create_box",
+ "lj/relres/omp",
+ "origin",
+ "nvt/body",
+ "python/move",
+ "lj/class2/coul/cut/kk",
+ "cvff",
+ "temp/rescale",
+ "EDGE",
+ "rigid/npt",
+ "fene",
+ "multi/lucy",
+ "fep",
+ "mass_matrix",
+ "qeq/comb",
+ "oxdna2/stk",
+ "bpm/spring",
+ "add_species",
+ "atom_modify",
+ "tersoff/mod/omp",
+ "stress/cylinder",
+ "angle",
+ "nvt/intel",
+ "source",
+ "lj/long/tip4p/long",
+ "sph/density/continuity",
+ "nve/manifold/rattle",
+ "smd/setvel",
+ "create_bonds",
+ "cosine/squared/omp",
+ "meam/spline",
+ "coul/cut/omp/global",
+ "list",
+ "group",
+ "spring/self",
+ "dpd",
+ "pour",
+ "peri/ves",
+ "qeq/dynamic",
+ "harmonic/intel",
+ "erotate/superquadric",
+ "particledistribution/discrete",
+ "displace_atoms",
+ "pppm/cg",
+ "volume_integral",
+ "cossq/omp",
+ "move",
+ "bond_style",
+ "nve/sphere",
+ "python/invoke",
+ "output",
+ "opls/kk",
+ "region",
+ "eam/alloy/omp",
+ "temp/csvr",
+ "ewald",
+ "efield/atom",
+ "press/berendsen",
+ "pimd",
+ "nph/body",
+ "torque/chunk",
+ "addtorque",
+ "lj/charmm/coul/charmm/intel",
+ "pace",
+ "rx",
+ "langevin/eff",
+ "sample_frequency",
+ "meam/kk",
+ "sw",
+ "charmmfsw",
+ "polarize/bem/gmres",
+ "write_data",
+ "smd/integrate_tlsph",
+ "ave/chunk",
+ "vector",
+ "lj/smooth",
+ "born/coul/dsf/cs",
+ "dpd/ext/tstat/kk",
+ "include",
+ "saed",
+ "lubricate/poly/omp",
+ "dpd/ext/tstat",
+ "lj/cut/coul/debye/kk",
+ "buck/intel",
+ "gauss/omp",
+ "hybrid/overlay/kk",
+ "erotate/sphere/atom",
+ "langevin",
+ "lj/cut/coul/cut/kk",
+ "snap/kk",
+ "poems",
+ "line/lj",
+ "yukawa/kk",
+ "sdpd/taitwater/isothermal",
+ "freeze",
+ "smd/ulsph/stress",
+ "sph/lj",
+ "table/cut",
+ "nve/dot",
+ "temperature_definition",
+ "python",
+ "pppm/disp/tip4p",
+ "lj/class2/coul/long",
+ "body/nparticle",
+ "nvt/sllod/omp",
+ "particletemplate/superquadric",
+ "tip4p/long",
+ "nve/noforce",
+ "beck",
+ "planeforce",
+ "change_box",
+ "born/coul/long/gpu",
+ "lj/cut/tip4p/cut/omp",
+ "h5md",
+ "lj/charmm/coul/charmm/gpu",
+ "kernel",
+ "nve/spin",
+ "eam/cd/old",
+ "born/coul/msm",
+ "lj/mdf",
+ "lj/long/coul/long/intel",
+ "eam/alloy",
+ "lj/switch3/coulgauss/long",
+ "sph",
+ "particledistribution/discrete/numberbased",
+ "rigid/nve",
+ "displace/atom",
+ "basal/atom",
+ "nve/sphere/omp",
+ "charmm/kk",
+ "improper",
+ "hdnnp",
+ "ave/spatial",
+ "lubricate",
+ "coul/long/gpu",
+ "buck/coul/msm/omp",
+ "lj/spica",
+ "eam/he",
+ "fix_modify",
+ "oxdna2/xstk",
+ "erotate",
+ "balance",
+ "lj/cut/gpu",
+ "mm3",
+ "dump",
+ "mie/cut",
+ "nph/kk",
+ "reaxff/species",
+ "ewald/disp",
+ "cosine/periodic/omp",
+ "nve/tri",
+ "event/displace",
+ "umbrella/omp",
+ "airebo",
+ "lb/viscous",
+ "npt/omp",
+ "dpd/ext",
+ "rigid/nvt/omp",
+ "image",
+ "sph/taitwater",
+ "snav/atom",
+ "fourier/intel",
+ "lj/long/coul/long/opt",
+ "hyper/local",
+ "lj/expand/coul/long",
+ "harmonic/shift/omp",
+ "store/force",
+ "npt/intel",
+ "tersoff/gpu",
+ "lj/gromacs/gpu",
+ "pe",
+ "true",
+ "erotate/multisphere",
+ "helix/omp",
+ "buck/coul/long/kk",
+ "nphug/omp",
+ "mesocnt",
+ "prd",
+ "read_data",
+ "oxdna/fene",
+ "pair_coeff",
+ "tersoff/mod",
+ "lj/class2",
+ "buck/coul/cut/gpu",
+ "lj/cut/intel",
+ "born/coul/wolf",
+ "lj/long/dipole/long",
+ "nvt/sllod",
+ "lj/cut",
+ "jump",
+ "eam/alloy/opt",
+ "bond_write",
+ "entropy/atom",
+ "brownian/poly",
+ "hybrid/scaled",
+ "msm/cg",
+ "tersoff",
+ "momentum/kk",
+ "wall/srd",
+ "neighbor",
+ "write_restart",
+ "lj/class2/kk",
+ "nve/asphere",
+ "dpd/intel",
+ "opls",
+ "eam/kk",
+ "eam/intel",
+ "spherical",
+ "comb/omp",
+ "min_style spin/cg",
+ "velocity",
+ "restrain",
+ "deform",
+ "fene/kk",
+ "coul/slater",
+ "echo",
+ "clear",
+ "eam/alloy/kk",
+ "write_atom_weights",
+ "multi/lucy/rx",
+ "chunk/spread/atom",
+ "lj/cut/coul/wolf/omp",
+ "dpd/energy",
+ "nve/asphere/intel",
+ "multi/harmonic/omp",
+ "evaporate",
+ "lj/class2/coul/long/soft",
+ "ave/histo",
+ "dielectric",
+ "boundary",
+ "sph/heatconduction",
+ "pair_style",
+ "lj/charmm/coul/long/gpu",
+ "restart",
+ "vashishta/kk",
+ "lj/cut/coul/long/opt",
+ "qeq/slater",
+ "remove_molecule",
+ "nve/superquadric",
+ "lj/spica/coul/msm",
+ "sph/stationary",
+ "pe/atom",
+ "lj/cut/tip4p/long/omp",
+ "fragment/atom",
+ "shake",
+ "exp6/rx/kk",
+ "brownian/poly/omp",
+ "dpd/ext/kk",
+ "temp/cs",
+ "coul/diel/omp",
+ "npt/sphere/omp",
+ "edpd",
+ "bond/local",
+ "smd/integrate_ulsph",
+ "heat/flux",
+ "shardlow",
+ "zbl",
+ "hbond/dreiding/morse",
+ "on",
+ "atom_style",
+ "harmonic",
+ "fene/expand/omp",
+ "equilibrium_start",
+ "born/omp",
+ "addforce",
+ "ti",
+ "temp/rescale/eff",
+ "snad/atom",
+ "lj/cut/coul/cut",
+ "latte",
+ "type",
+ "delete_atoms",
+ "timestep",
+ "smd/tlsph/strain/rate",
+ "wall/piston",
+ "spin",
+ "gayberne/gpu",
+ "smd/tlsph",
+ "slice",
+ "born/coul/wolf/omp",
+ "cosine/squared",
+ "lj/cut/coul/msm/dielectric",
+ "create_elementset",
+ "agni",
+ "dpd/fdt/energy",
+ "property/molecule",
+ "dihedral",
+ "ke",
+ "nm/cut/coul/cut/omp",
+ "lj/sf/dipole/sf/gpu",
+ "lj/cut/coul/dsf/kk",
+ "coul/debye/gpu",
+ "min_style cg",
+ "gyration/shape",
+ "time_integration",
+ "dpd/atom",
+ "tersoff/omp",
+ "gw",
+ "improper_style",
+ "plane",
+ "lj/cut/soft/omp",
+ "set",
+ "lj/cut/tip4p/long/soft/omp",
+ "mask_direction",
+ "coul/dsf/kk",
+ "exchange",
+ "temp/asphere",
+ "lj/cut/coul/long/gpu",
+ "born",
+ "fix_flux",
+ "lj/charmm/coul/long/intel",
+ "spin/dmi",
+ "box/relax",
+ "elif",
+ "charmm",
+ "ufm",
+ "class2",
+ "quartic/omp",
+ "box",
+ "info",
+ "gyration",
+ "couple/cfd",
+ "spring/chunk",
+ "tip4p/cut/omp",
+ "sna/atom",
+ "undump",
+ "nve",
+ "lattice",
+ "qeq/reaxff",
+ "qtb",
+ "wall/reflect/stochastic",
+ "gyration/molecule",
+ "buck/coul/long",
+ "nparticles/tracer/region",
+ "fourier",
+ "timer",
+ "gran/hertz/history",
+ "smd/wall_surface",
+ "soft",
+ "lj/spica/coul/long",
+ "cvff/omp",
+ "com/molecule",
+ "angle_coeff",
+ "lubricate/poly",
+ "lj/cut/tip4p/long",
+ "lj/charmm/coul/charmm/implicit/kk",
+ "lj/cut/coul/long",
+ "spin/neel",
+ "msd/nongauss",
+ "charmm/omp",
+ "INF",
+ "oxrna2/stk",
+ "massflow/mesh",
+ "reduce/region",
+ "lj/cut/coul/debye/dielectric",
+ "lj/class2/coul/cut",
+ "npt/asphere/omp",
+ "create_atoms",
+ "comb",
+ "bond/create",
+ "langevin/spin",
+ "hyper/global",
+ "lj/expand/kk",
+ "boundary_dynamics",
+ "lj/cut/tip4p/cut",
+ "package",
+ "bpm/rotational",
+ "third_order",
+ "lj/expand/coul/long/gpu",
+ "coul/long/kk",
+ "lj/smooth/omp",
+ "write",
+ "buck/mdf",
+ "coul/dsf",
+ "coord/atom/kk",
+ "property/atom/tracer",
+ "eos/table/rx",
+ "ave/sphere/atom",
+ "communicate",
+ "nodeset",
+ "comb3",
+ "dihedral_style",
+ "buck/coul/long/omp",
+ "coord/gran",
+ "sph/pressure",
+ "acks2/reaxff/kk",
+ "tfmc",
+ "electron/stopping",
+ "extep",
+ "rigid/small/omp",
+ "xrd",
+ "orientorder/atom/kk",
+ "dpd/energy/kk",
+ "add_molecule",
+ "spin/magelec",
+ "distharm",
+ "stress/atom",
+ "rigid/nph/omp",
+ "cosine/shift/exp",
+ "qeq/shielded",
+ "rigid/omp",
+ "dpd/omp",
+ "log",
+ "cosine/delta/omp",
+ "property/local",
+ "ke/rigid",
+ "acks2/reaxff",
+ "shell",
+ "hyper",
+ "reduce",
+ "coul/exclude",
+ "centro/atom",
+ "eam/alloy/intel",
+ "yukawa/omp",
+ "no",
+ "dipole/chunk",
+ "next",
+ "fene/omp",
+ "coul/cut/gpu",
+ "temp/profile",
+ "zbl/omp",
+ "remove_source",
+ "reset_mol_ids",
+ "adp/omp",
+ "ptm/atom",
+ "rattle",
+ "fourier/simple",
+ "cvff/intel",
+ "coul/debye/kk",
+ "sw/gpu",
+ "none",
+ "ave/correlate/long",
+ "inertia/chunk",
+ "born/gpu",
+ "lj/sf/dipole/sf",
+ "npt/cauchy",
+ "tmd",
+ "lj/cut/dipole/long/gpu",
+ "drude/transform/direct",
+ "oxrna2/coaxstk",
+ "nvt/asphere/omp",
+ "ufm/omp",
+ "heat/flux/tally",
+ "oxdna/excv",
+ "ufm/opt",
+ "gran/hooke/history/omp",
+ "nonlinear",
+ "lj/spica/gpu",
+ "vashishta/omp",
+ "npt/gpu",
+ "atm",
+ "smd/tlsph/dt",
+ "edpd/source",
+ "numdiff",
+ "thermo_style",
+ "lj/cubic/omp",
+ "recenter",
+ "table/kk",
+ "brownian/sphere",
+ "multicontact/halfspace",
+ "lj/charmm/coul/msm/omp",
+ "lb/fluid",
+ "thermal/conductivity",
+ "coord/atom",
+ "tri/lj",
+ "eos/table",
+ "processors",
+ "scale",
+ "lj/cut/omp",
+ "adp",
+ "nharmonic/omp",
+ "nvt/sllod/eff",
+ "oxdna2/coaxstk",
+ "ackland/atom",
+ "lj/gromacs/kk",
+ "nvt/eff",
+ "erotate/rigid",
+ "mesont",
+ "born/coul/msm/omp",
+ "labelmap",
+ "born/coul/long/omp",
+ "gran/hertz/history/omp",
+ "tersoff/kk",
+ "create_nodeset",
+ "decomposition",
+ "bop",
+ "reduce/chunk",
+ "sw/kk",
+ "property/atom/regiontracer/time",
+ "temp/region",
+ "reset_atomic_reference_positions",
+ "lj96/cut/omp",
+ "buck/coul/long/gpu",
+ "quadratic/omp",
+ "resquared/gpu",
+ "dt/reset",
+ "atom_weight",
+ "nvk",
+ "nve/limit",
+ "unfix_flux",
+ "ufm/gpu",
+ "fourier/omp",
+ "comm_style",
+ "rigid/nvt",
+ "chunk/atom",
+ "vashishta/table",
+ "nph/sphere",
+ "sph/t/atom",
+ "mscg",
+ "filter/corotate",
+ "temper/grem",
+ "min_style hftn",
+ "npt/kk",
+ "dpd/tstat/omp",
+ "dilatation/atom",
+ "buck6d/coul/gauss/dsf",
+ "mesh/surface/planar",
+ "langevin/drude",
+ "fourier/simple/omp",
+ "lj/smooth/linear/omp",
+ "dpd/tstat/gpu",
+ "nm/cut/omp",
+ "pair_interactions",
+ "lj/cut/tip4p/long/opt",
+ "netcdf",
+ "remove_species",
+ "eos/table/rx/kk",
+ "smatb",
+ "table/rx/kk",
+ "neighbor_skin",
+ "ilp/tmd",
+ "hma",
+ "buck/coul/cut/kk",
+ "buck/kk",
+ "ave/time",
+ "quit",
+ "gran/hooke/history/kk",
+ "harmonic/shift/cut",
+ "coul/wolf/cs",
+ "thermo_modify",
+ "coul/debye",
+ "tersoff/zbl/kk",
+ "gyration/chunk",
+ "lj/class2/coul/cut/omp",
+ "particletemplate/multisphere",
+ "oxdna/stk",
+ "rerun",
+ "fix",
+ "rigid/nvt/small",
+ "viscous",
+ "atom_element_map",
+ "temp/kk",
+ "born/coul/long",
+ "wall/gran",
+ "wall/region/sph",
+ "pe/mol/tally",
+ "wall/lj126",
+ "charmm/intel",
+ "temp/berendsen",
+ "else",
+ "gayberne/intel",
+ "false",
+ "oxrna2/xstk",
+ "wall/colloid",
+ "improper/local",
+ "npt/sphere",
+ "internal_quadrature",
+ "nve/eff",
+ "gromos",
+ ],
- typeKeywords: [],
+ typeKeywords: [],
- operators: [
- "=",
- ">",
- "<",
- "!",
- "~",
- "?",
- ":",
- "==",
- "<=",
- ">=",
- "!=",
- "&&",
- "||",
- "++",
- "--",
- "+",
- "-",
- "*",
- "/",
- "&",
- "|",
- "^",
- "%",
- "<<",
- ">>",
- ">>>",
- "+=",
- "-=",
- "*=",
- "/=",
- "&=",
- "|=",
- "^=",
- "%=",
- "<<=",
- ">>=",
- ">>>=",
- ],
+ operators: [
+ "=",
+ ">",
+ "<",
+ "!",
+ "~",
+ "?",
+ ":",
+ "==",
+ "<=",
+ ">=",
+ "!=",
+ "&&",
+ "||",
+ "++",
+ "--",
+ "+",
+ "-",
+ "*",
+ "/",
+ "&",
+ "|",
+ "^",
+ "%",
+ "<<",
+ ">>",
+ ">>>",
+ "+=",
+ "-=",
+ "*=",
+ "/=",
+ "&=",
+ "|=",
+ "^=",
+ "%=",
+ "<<=",
+ ">>=",
+ ">>>=",
+ ],
- // we include these common regular expressions
- symbols: /[=>](?!@symbols)/, "@brackets"],
- [/@symbols/, { cases: { "@operators": "operator", "@default": "" } }],
+ // delimiters and operators
+ [/[{}()[\]]/, "@brackets"],
+ [/[<>](?!@symbols)/, "@brackets"],
+ [/@symbols/, { cases: { "@operators": "operator", "@default": "" } }],
- // @ annotations.
- // As an example, we emit a debugging log message on these tokens.
- // Note: message are supressed during the first load -- change some lines to see them.
+ // @ annotations.
+ // As an example, we emit a debugging log message on these tokens.
+ // Note: message are supressed during the first load -- change some lines to see them.
- // numbers
- [/\d*\.\d+([eE][-+]?\d+)?/, "number.float"],
- [/0[xX][0-9a-fA-F]+/, "number.hex"],
- [/\d+/, "number"],
+ // numbers
+ [/\d*\.\d+([eE][-+]?\d+)?/, "number.float"],
+ [/0[xX][0-9a-fA-F]+/, "number.hex"],
+ [/\d+/, "number"],
- // delimiter: after number because of .\d floats
- [/[;,.]/, "delimiter"],
+ // delimiter: after number because of .\d floats
+ [/[;,.]/, "delimiter"],
- // strings
- [/"([^"\\]|\\.)*$/, "string.invalid"], // non-teminated string
- [/"/, { token: "string.quote", bracket: "@open", next: "@string" }],
+ // strings
+ [/"([^"\\]|\\.)*$/, "string.invalid"], // non-teminated string
+ [/"/, { token: "string.quote", bracket: "@open", next: "@string" }],
- // characters
- [/'[^\\']'/, "string"],
- [/(')(@escapes)(')/, ["string", "string.escape", "string"]],
- [/'/, "string.invalid"],
- ],
+ // characters
+ [/'[^\\']'/, "string"],
+ [/(')(@escapes)(')/, ["string", "string.escape", "string"]],
+ [/'/, "string.invalid"],
+ ],
- comment: [
- [/[^/*]+/, "comment"],
- [/\/\*/, "comment", "@push"], // nested comment
- ["\\*/", "comment", "@pop"],
- [/[/*]/, "comment"],
- [/^#/, "comment"],
- ],
+ comment: [
+ [/[^/*]+/, "comment"],
+ [/\/\*/, "comment", "@push"], // nested comment
+ ["\\*/", "comment", "@pop"],
+ [/[/*]/, "comment"],
+ [/^#/, "comment"],
+ ],
- string: [
- [/[^\\"]+/, "string"],
- [/@escapes/, "string.escape"],
- [/\\./, "string.escape.invalid"],
- [/"/, { token: "string.quote", bracket: "@close", next: "@pop" }],
- ],
+ string: [
+ [/[^\\"]+/, "string"],
+ [/@escapes/, "string.escape"],
+ [/\\./, "string.escape.invalid"],
+ [/"/, { token: "string.quote", bracket: "@close", next: "@pop" }],
+ ],
- whitespace: [
- [/[ \t\r\n]+/, "white"],
- [/\/\*/, "comment", "@comment"],
- [/\/\/.*$/, "comment"],
- ],
- },
+ whitespace: [
+ [/[ \t\r\n]+/, "white"],
+ [/\/\*/, "comment", "@comment"],
+ [/\/\/.*$/, "comment"],
+ ],
+ },
});
});
@@ -1419,24 +1418,19 @@ const Edit = () => {
selectOnLineNumbers: true,
};
- const handleEditorDidMount = useCallback(
- (editor: Monaco.editor.IStandaloneCodeEditor) => {
- editor.focus();
- },
- [],
- );
+ const handleEditorDidMount = useCallback((editor: Monaco.editor.IStandaloneCodeEditor) => {
+ editor.focus();
+ }, []);
const onEditorChange = useCallback(
(newValue: string | undefined) => {
if (!newValue) return;
- const file = simulation?.files.find(
- (file) => file.fileName === selectedFile?.fileName,
- );
+ const file = simulation?.files.find((file) => file.fileName === selectedFile?.fileName);
if (file) {
file.content = newValue;
}
},
- [selectedFile?.fileName, simulation?.files],
+ [selectedFile?.fileName, simulation?.files]
);
if (!selectedFile) {
diff --git a/src/containers/Examples.css b/src/containers/Examples.css
index a178e6f7..918035b6 100644
--- a/src/containers/Examples.css
+++ b/src/containers/Examples.css
@@ -2,9 +2,14 @@
.modern-card {
border-radius: 16px;
overflow: hidden;
- transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
+ transition:
+ transform 0.3s ease,
+ box-shadow 0.3s ease,
+ border-color 0.3s ease;
border: 1px solid rgba(255, 255, 255, 0.1);
- box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2), 0 8px 32px rgba(0, 0, 0, 0.1);
+ box-shadow:
+ inset 0 0 20px rgba(0, 0, 0, 0.2),
+ 0 8px 32px rgba(0, 0, 0, 0.1);
background: rgba(42, 41, 47, 0.6);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
@@ -20,11 +25,7 @@
left: 0;
width: 100%;
height: 100%;
- background: linear-gradient(
- to bottom,
- rgba(255, 255, 255, 0.15) 0%,
- transparent 50%
- );
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, transparent 50%);
pointer-events: none;
opacity: 0.5;
z-index: 1;
@@ -34,7 +35,9 @@
.modern-card:hover {
transform: translateY(-4px);
- box-shadow: inset 0 0 30px rgba(0, 0, 0, 0.3), 0 12px 40px rgba(0, 0, 0, 0.2);
+ box-shadow:
+ inset 0 0 30px rgba(0, 0, 0, 0.3),
+ 0 12px 40px rgba(0, 0, 0, 0.2);
border-color: rgba(255, 255, 255, 0.2);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
@@ -220,7 +223,7 @@
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 16px;
}
-
+
.card-image {
height: 160px;
}
diff --git a/src/containers/Examples.tsx b/src/containers/Examples.tsx
index 6096bffe..24baf846 100644
--- a/src/containers/Examples.tsx
+++ b/src/containers/Examples.tsx
@@ -1,15 +1,14 @@
-import { useCallback, useState, useEffect } from "react";
-import { Select, Divider } from "antd";
-import { Simulation } from "../store/simulation";
-import { SimulationFile } from "../store/app";
-import { useStoreActions, useStoreState } from "../hooks";
import { CaretRightOutlined, EditOutlined } from "@ant-design/icons";
-import { Layout, Skeleton, notification } from "antd";
-import { track } from "../utils/metrics";
+import { Divider, Layout, notification, Select, Skeleton } from "antd";
+import { useCallback, useEffect, useState } from "react";
import ReactMarkdown from "react-markdown";
-import remarkMath from "remark-math";
-import rehypeKatex from "rehype-katex";
import rehypeExternalLinks from "rehype-external-links";
+import rehypeKatex from "rehype-katex";
+import remarkMath from "remark-math";
+import { useStoreActions, useStoreState } from "../hooks";
+import type { SimulationFile } from "../store/app";
+import type { Simulation } from "../store/simulation";
+import { track } from "../utils/metrics";
import "katex/dist/katex.min.css";
import "./Examples.css";
@@ -36,29 +35,25 @@ const Examples = () => {
const [examples, setExamples] = useState
([]);
const [filterKeywords, setFilterKeywords] = useState([]);
// Width measurement no longer needed with CSS Grid
- const setNewSimulation = useStoreActions(
- (actions) => actions.simulation.newSimulation,
- );
+ const setNewSimulation = useStoreActions((actions) => actions.simulation.newSimulation);
const simulation = useStoreState((state) => state.simulation.simulation);
const running = useStoreState((state) => state.simulation.running);
- const setPreferredView = useStoreActions(
- (actions) => actions.app.setPreferredView,
- );
+ const setPreferredView = useStoreActions((actions) => actions.app.setPreferredView);
useEffect(() => {
const fetchExamples = async (examplesUrl: string) => {
let response = await fetch(examplesUrl, { cache: "no-store" });
const data = await response.json();
- const baseUrl = data["baseUrl"];
- const title = data["title"] || "Examples";
- const descriptionsUrl = `${baseUrl}/${data["descriptionFile"]}`;
+ const baseUrl = data.baseUrl;
+ const title = data.title || "Examples";
+ const descriptionsUrl = `${baseUrl}/${data.descriptionFile}`;
response = await fetch(descriptionsUrl);
if (response.status !== 404) {
const description = await response.text();
setDescription(description);
}
- const examples: Example[] = data["examples"];
+ const examples: Example[] = data.examples;
examples.forEach((example) => {
example.imageUrl = `${baseUrl}/${example.imageUrl}`;
example.files.forEach((file) => {
@@ -67,7 +62,7 @@ const Examples = () => {
});
setTitle(title);
- setExamples(data["examples"]);
+ setExamples(data.examples);
track("Examples.Fetch", { examplesUrl });
};
@@ -75,15 +70,15 @@ const Examples = () => {
const urlSearchParams = new URLSearchParams(window.location.search);
const params = Object.fromEntries(urlSearchParams.entries());
- let defaultExamplesUrl = "examples/examples.json";
+ const defaultExamplesUrl = "examples/examples.json";
let examplesUrl = defaultExamplesUrl;
- if (params["examplesUrl"] != null) {
- examplesUrl = params["examplesUrl"];
+ if (params.examplesUrl != null) {
+ examplesUrl = params.examplesUrl;
}
try {
await fetchExamples(examplesUrl);
- } catch (e) {
+ } catch (_e) {
notification.error({
message: `Could not fetch examples from ${examplesUrl}. Fetching default.`,
});
@@ -106,15 +101,14 @@ const Examples = () => {
if (running) {
notification.info({
message: "Simulation already running",
- description:
- "You can't start a new simulation while another one is running.",
+ description: "You can't start a new simulation while another one is running.",
});
} else {
setNewSimulation(newSimulation);
setPreferredView("view");
}
},
- [running, setNewSimulation, setPreferredView],
+ [running, setNewSimulation, setPreferredView]
);
const onEdit = useCallback(
@@ -129,35 +123,43 @@ const Examples = () => {
if (simulation?.id !== newSimulation.id) {
setNewSimulation(newSimulation);
} else {
- setPreferredView("file" + newSimulation.inputScript);
+ setPreferredView(`file${newSimulation.inputScript}`);
}
},
- [setNewSimulation, setPreferredView, simulation?.id],
+ [setNewSimulation, setPreferredView, simulation?.id]
);
- let keywordsSet: Set = new Set();
+ const keywordsSet: Set = new Set();
examples.forEach((example) => {
if (example.keywords) {
- example.keywords.forEach((keyword) => keywordsSet.add(keyword));
+ example.keywords.forEach((keyword) => {
+ keywordsSet.add(keyword);
+ });
}
});
const keywords = Array.from(keywordsSet);
keywords.sort();
const renderCard = (example: Example) => (
- onPlay(example)}
+ onKeyDown={(e) => {
+ if (e.key === "Enter" || e.key === " ") {
+ e.preventDefault();
+ onPlay(example);
+ }
+ }}
>
-

+
-
-
-
{example.title}
-
{example.description}
+
+ {example.title}
+
+
+ {example.description}
+
{example.author && (
>
diff --git a/src/containers/Main.tsx b/src/containers/Main.tsx
index da93d355..ecacbb55 100644
--- a/src/containers/Main.tsx
+++ b/src/containers/Main.tsx
@@ -1,13 +1,14 @@
-import { Modal, Tabs, Progress, Button, Layout } from "antd";
-import { useState, useEffect, useMemo } from "react";
-import View from "./View";
-import Notebook from "./Notebook";
-import Edit from "./Edit";
+import { Button, Layout, Modal, Progress, Tabs } from "antd";
+import { useEffect, useMemo, useState } from "react";
+import LoadingSimulationScreen from "../components/LoadingSimulationScreen";
+import { useStoreActions, useStoreState } from "../hooks";
import Console from "./Console";
+import Edit from "./Edit";
import Examples from "./Examples";
+import Notebook from "./Notebook";
import RunInCloud from "./RunInCloud";
-import LoadingSimulationScreen from "../components/LoadingSimulationScreen";
-import { useStoreActions, useStoreState } from "../hooks";
+import View from "./View";
+
const { Content } = Layout;
const Main = ({ isEmbedded }: { isEmbedded: boolean }) => {
@@ -15,17 +16,13 @@ const Main = ({ isEmbedded }: { isEmbedded: boolean }) => {
const showConsole = useStoreState((state) => state.simulation.showConsole);
const [consoleKey, setConsoleKey] = useState(0);
const [hasStarted, setHasStarted] = useState(false);
- const setShowConsole = useStoreActions(
- (actions) => actions.simulation.setShowConsole,
- );
+ const setShowConsole = useStoreActions((actions) => actions.simulation.setShowConsole);
const selectedMenu = useStoreState((state) => state.app.selectedMenu);
const running = useStoreState((state) => state.simulation.running);
- const setPreferredView = useStoreActions(
- (actions) => actions.app.setPreferredView,
- );
+ const setPreferredView = useStoreActions((actions) => actions.app.setPreferredView);
const status = useStoreState((state) => state.app.status);
-
+
// Update console key when modal opens
useEffect(() => {
if (showConsole) {
@@ -46,11 +43,12 @@ const Main = ({ isEmbedded }: { isEmbedded: boolean }) => {
{
key: "view",
label: "View",
- children: isEmbedded && !hasStarted ? (
-
- ) : (
-
- ),
+ children:
+ isEmbedded && !hasStarted ? (
+
+ ) : (
+
+ ),
},
{
key: "console",
@@ -80,9 +78,7 @@ const Main = ({ isEmbedded }: { isEmbedded: boolean }) => {
];
// Filter out Examples tab in embedded mode
- return isEmbedded
- ? allTabs.filter(tab => tab.key !== "examples")
- : allTabs;
+ return isEmbedded ? allTabs.filter((tab) => tab.key !== "examples") : allTabs;
}, [isEmbedded, selectedMenu, hasStarted, status, wasm]);
return (
diff --git a/src/containers/NewSimulation.tsx b/src/containers/NewSimulation.tsx
index 1724975f..cd95d102 100644
--- a/src/containers/NewSimulation.tsx
+++ b/src/containers/NewSimulation.tsx
@@ -1,21 +1,11 @@
import { InboxOutlined } from "@ant-design/icons";
+import type { UploadFile, UploadProps } from "antd";
+import { Button, Checkbox, Divider, Input, Modal, message, Select, Tooltip, Upload } from "antd";
+import type { UploadChangeParam } from "antd/es/upload";
import { useCallback, useEffect, useState } from "react";
import { useStoreActions } from "../hooks";
-import {
- message,
- Upload,
- Modal,
- Button,
- Select,
- Divider,
- Tooltip,
- Input,
- Checkbox,
-} from "antd";
-import type { UploadProps, UploadFile } from "antd";
-import type { UploadChangeParam } from "antd/es/upload";
-import { Simulation } from "../store/simulation";
-import { SimulationFile } from "../store/app";
+import type { SimulationFile } from "../store/app";
+import type { Simulation } from "../store/simulation";
import { track } from "../utils/metrics";
const { Option } = Select;
@@ -31,12 +21,8 @@ const NewSimulation = ({ onClose }: NewSimulationProps) => {
const [files, setFiles] = useState
([]);
const [startImmediately, setStartImmediately] = useState(false);
const [inputScript, setInputScript] = useState();
- const setNewSimulation = useStoreActions(
- (actions) => actions.simulation.newSimulation,
- );
- const setPreferredView = useStoreActions(
- (actions) => actions.app.setPreferredView,
- );
+ const setNewSimulation = useStoreActions((actions) => actions.simulation.newSimulation);
+ const setPreferredView = useStoreActions((actions) => actions.app.setPreferredView);
const validSimulation =
name != null &&
@@ -52,9 +38,7 @@ const NewSimulation = ({ onClose }: NewSimulationProps) => {
async (info: UploadChangeParam) => {
// Need to use window.files because these async functions can't seem to agree on the state
if (info.file.status === "removed") {
- const newFiles = files.filter(
- (file) => file.fileName !== info.file.name,
- );
+ const newFiles = files.filter((file) => file.fileName !== info.file.name);
window.files = newFiles;
setFiles(newFiles);
return;
@@ -72,7 +56,7 @@ const NewSimulation = ({ onClose }: NewSimulationProps) => {
setFiles(window.files);
message.success(`${file.fileName} uploaded successfully.`);
},
- [files, setFiles],
+ [files]
);
const props: UploadProps = {
@@ -105,15 +89,7 @@ const NewSimulation = ({ onClose }: NewSimulationProps) => {
setPreferredView("view");
}
onClose();
- }, [
- files,
- inputScript,
- name,
- onClose,
- startImmediately,
- setPreferredView,
- setNewSimulation,
- ]);
+ }, [files, inputScript, name, onClose, startImmediately, setPreferredView, setNewSimulation]);
return (
{
Name
- setName(e.target.value)}
- placeholder="Simulation name"
- >
+ setName(e.target.value)} placeholder="Simulation name">
Files
@@ -162,12 +135,10 @@ const NewSimulation = ({ onClose }: NewSimulationProps) => {
-
- Click or drag file to this area to upload
-
+ Click or drag file to this area to upload
- Upload the files you need for your simulation. Note that these files
- are not stored across Atomify sessions yet.
+ Upload the files you need for your simulation. Note that these files are not stored across
+ Atomify sessions yet.
{files.length > 0 && (
@@ -176,12 +147,11 @@ const NewSimulation = ({ onClose }: NewSimulationProps) => {
Select input script
-
);
};
export default ShareSimulation;
-
diff --git a/src/containers/View.tsx b/src/containers/View.tsx
index b61e6851..962853f7 100644
--- a/src/containers/View.tsx
+++ b/src/containers/View.tsx
@@ -1,34 +1,31 @@
-import { useEffect, useState, useRef, useCallback } from "react";
-import { Layout, Row, Col, Progress, Modal, Button } from "antd";
-
-import { useStoreState, useStoreActions } from "../hooks";
-import { Particles, Bonds, Visualizer, ParticleClickEvent } from "omovi";
+import { Button, Col, Layout, Modal, Progress, Row } from "antd";
+import { type Bonds, type ParticleClickEvent, type Particles, Visualizer } from "omovi";
+import { useCallback, useEffect, useRef, useState } from "react";
+import styled from "styled-components";
+import * as THREE from "three";
+import ColorLegend from "../components/ColorLegend";
import ResponsiveSimulationSummary from "../components/ResponsiveSimulationSummary";
import SelectedAtomsInfo from "../components/SelectedAtomsInfo";
-import ColorLegend from "../components/ColorLegend";
-import ColorModifierSettings from "../modifiers/ColorModifierSettings";
-import styled from "styled-components";
-import { track } from "../utils/metrics";
+import { useStoreActions, useStoreState } from "../hooks";
import { useEmbeddedMode } from "../hooks/useEmbeddedMode";
-import ColorModifier from "../modifiers/colormodifier";
-import * as THREE from "three";
+import ColorModifierSettings from "../modifiers/ColorModifierSettings";
+import type ColorModifier from "../modifiers/colormodifier";
import {
- createBoxGeometry,
calculateBoxRadius,
+ createBoxGeometry,
getSimulationBoxBounds,
} from "../utils/boxGeometry";
+import { track } from "../utils/metrics";
// Type guard for Visualizer with updateCameraPlanes method
interface VisualizerWithCameraPlanes extends Visualizer {
updateCameraPlanes: (box: THREE.Box3) => void;
}
-function visualizerHasCameraPlanes(
- v: Visualizer,
-): v is VisualizerWithCameraPlanes {
+function visualizerHasCameraPlanes(v: Visualizer): v is VisualizerWithCameraPlanes {
return (
"updateCameraPlanes" in v &&
- typeof (v as any).updateCameraPlanes === "function"
+ typeof (v as unknown as VisualizerWithCameraPlanes).updateCameraPlanes === "function"
);
}
@@ -46,7 +43,7 @@ const VisualizerWrapper = styled.div`
`;
const MOBILE_BREAKPOINT = 900;
-const SIMULATION_SUMMARY_DRAWER_VISIBLE_KEY = 'simulationSummaryDrawerVisible';
+const SIMULATION_SUMMARY_DRAWER_VISIBLE_KEY = "simulationSummaryDrawerVisible";
const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
const [loading, setLoading] = useState(false);
@@ -58,13 +55,13 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
const [isOverlayCollapsed, setIsOverlayCollapsed] = useState(isMobile);
const [selectedAtoms, setSelectedAtoms] = useState>(new Set());
const { embedConfig } = useEmbeddedMode();
-
+
// Initialize from localStorage, defaulting to false (show overlay, not expanded)
// Embedded mode override is handled in useEffect below
const [showAnalyze, setShowAnalyze] = useState(() => {
- if (typeof window !== 'undefined' && window.localStorage) {
+ if (typeof window !== "undefined" && window.localStorage) {
const stored = localStorage.getItem(SIMULATION_SUMMARY_DRAWER_VISIBLE_KEY);
- return stored !== null ? stored === 'true' : false;
+ return stored !== null ? stored === "true" : false;
}
return false;
});
@@ -79,8 +76,8 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
setIsOverlayCollapsed(newIsMobile);
}
};
- window.addEventListener('resize', handleResize);
- return () => window.removeEventListener('resize', handleResize);
+ window.addEventListener("resize", handleResize);
+ return () => window.removeEventListener("resize", handleResize);
}, [isMobile]);
// Handle embedded mode override for drawer visibility
@@ -93,58 +90,44 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
// Persist drawer visibility to localStorage (only when not in embedded mode)
useEffect(() => {
- if (!isEmbeddedMode && typeof window !== 'undefined' && window.localStorage) {
+ if (!isEmbeddedMode && typeof window !== "undefined" && window.localStorage) {
localStorage.setItem(SIMULATION_SUMMARY_DRAWER_VISIBLE_KEY, showAnalyze.toString());
}
}, [showAnalyze, isEmbeddedMode]);
// const simulationBox = useStoreState(state => state.simulation.simulationBox)
// const simulationOrigo = useStoreState(state => state.simulation.simulationOrigo)
- const cameraPosition = useStoreState(
- (state) => state.simulation.cameraPosition,
- );
+ const cameraPosition = useStoreState((state) => state.simulation.cameraPosition);
const cameraTarget = useStoreState((state) => state.simulation.cameraTarget);
const particles = useStoreState((state) => state.render.particles);
const bonds = useStoreState((state) => state.render.bonds);
const visualizer = useStoreState((state) => state.render.visualizer);
- const setVisualizer = useStoreActions(
- (actions) => actions.render.setVisualizer,
- );
+ const setVisualizer = useStoreActions((actions) => actions.render.setVisualizer);
const renderSettings = useStoreState((state) => state.settings.render);
- const setRenderSettings = useStoreActions(
- (actions) => actions.settings.setRender,
- );
+ const setRenderSettings = useStoreActions((actions) => actions.settings.setRender);
const domElement = useRef(null);
const running = useStoreState((state) => state.simulation.running);
const simulation = useStoreState((state) => state.simulation.simulation);
- const runTotalTimesteps = useStoreState(
- (state) => state.simulationStatus.runTotalTimesteps,
- );
- const runTimesteps = useStoreState(
- (state) => state.simulationStatus.runTimesteps,
- );
- const timesteps = useStoreState(
- (state) => state.simulationStatus.timesteps,
- );
+ const runTotalTimesteps = useStoreState((state) => state.simulationStatus.runTotalTimesteps);
+ const runTimesteps = useStoreState((state) => state.simulationStatus.runTimesteps);
+ const timesteps = useStoreState((state) => state.simulationStatus.timesteps);
const simulationBox = useStoreState((state) => state.simulationStatus.box);
- const simulationOrigo = useStoreState(
- (state) => state.simulationStatus.origo,
- );
- const postTimestepModifiers = useStoreState(
- (state) => state.processing.postTimestepModifiers,
- );
+ const simulationOrigo = useStoreState((state) => state.simulationStatus.origo);
+ const postTimestepModifiers = useStoreState((state) => state.processing.postTimestepModifiers);
const computes = useStoreState((state) => state.simulationStatus.computes);
const fixes = useStoreState((state) => state.simulationStatus.fixes);
const variables = useStoreState((state) => state.simulationStatus.variables);
const boxGroupRef = useRef(null);
-
+
// Get color modifier for legend display
- const colorModifier = postTimestepModifiers.find(
- (modifier) => modifier.name === "Colors",
- ) as ColorModifier | undefined;
+ const colorModifier = postTimestepModifiers.find((modifier) => modifier.name === "Colors") as
+ | ColorModifier
+ | undefined;
// Determine the type of the computeName (compute, fix, or variable)
- const getModifierType = (name: string | undefined): "compute" | "fix" | "variable" | undefined => {
+ const getModifierType = (
+ name: string | undefined
+ ): "compute" | "fix" | "variable" | undefined => {
if (!name) return undefined;
if (computes[name]) return "compute";
if (fixes[name]) return "fix";
@@ -162,18 +145,17 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
// Add Esc key handler to clear selection
useEffect(() => {
const handleKeyDown = (event: KeyboardEvent) => {
- if (event.key === 'Escape' && selectedAtoms.size > 0) {
+ if (event.key === "Escape" && selectedAtoms.size > 0) {
handleClearSelection();
}
};
- window.addEventListener('keydown', handleKeyDown);
+ window.addEventListener("keydown", handleKeyDown);
return () => {
- window.removeEventListener('keydown', handleKeyDown);
+ window.removeEventListener("keydown", handleKeyDown);
};
}, [selectedAtoms, handleClearSelection]);
-
const disposeBoxGroup = useCallback(() => {
if (boxGroupRef.current && visualizer) {
// Dispose of all cylinders in the group
@@ -198,10 +180,10 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
// onCameraChanged: (position: THREE.Vector3, target: THREE.Vector3) => {console.log(position, target)}
onParticleClick: (event: ParticleClickEvent) => {
const { particleIndex, shiftKey } = event;
-
+
setSelectedAtoms((prevSelection) => {
const newSelection = new Set(prevSelection);
-
+
if (shiftKey) {
// Shift+click: toggle selection
if (newSelection.has(particleIndex)) {
@@ -218,21 +200,21 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
newSelection.add(particleIndex);
}
}
-
+
// Update visualizer selection
newVisualizer.clearSelection();
newSelection.forEach((idx) => {
newVisualizer.setSelected(idx, true);
});
-
+
return newSelection;
});
- }
+ },
});
setVisualizer(newVisualizer);
setLoading(false);
newVisualizer.materials.particles.shininess = 50;
-
+
// Initialize post-processing with settings
newVisualizer.initPostProcessing({
ssao: {
@@ -241,12 +223,12 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
intensity: renderSettings.ssaoIntensity,
},
});
-
+
// Apply lighting settings
newVisualizer.pointLight.intensity = renderSettings.pointLightIntensity;
newVisualizer.ambientLight.intensity = renderSettings.ambientLightIntensity;
}
- }, [domElement, setVisualizer, visualizer, loading, renderSettings]);
+ }, [setVisualizer, visualizer, loading, renderSettings]);
useEffect(() => {
if (visible && domElement.current) {
@@ -259,6 +241,7 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
}, [visible, visualizer]);
// Auto-reset selection when simulation changes
+ // biome-ignore lint/correctness/useExhaustiveDependencies(simulation): intentionally included to clear selection when simulation changes
useEffect(() => {
handleClearSelection();
}, [simulation, handleClearSelection]);
@@ -302,7 +285,7 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
}
if (prevBonds && prevBonds !== bonds) {
- visualizer.remove(prevBonds!);
+ visualizer.remove(prevBonds);
prevBonds.dispose();
}
@@ -324,7 +307,7 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
},
});
}
-
+
// Update lighting
visualizer.pointLight.intensity = renderSettings.pointLightIntensity;
visualizer.ambientLight.intensity = renderSettings.ambientLightIntensity;
@@ -339,7 +322,7 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
if (visualizer) {
// Apply camera controls setting
visualizer.setControlsEnabled(embedConfig.enableCameraControls);
-
+
// Apply particle picking setting
visualizer.setPickingEnabled(embedConfig.enableParticlePicking);
}
@@ -422,7 +405,7 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
}}
>
- {title}
+ {title}
{running && (
@@ -441,10 +422,7 @@ const View = ({ visible, isEmbeddedMode = false }: ViewProps) => {
{showColorSettings && (
- setShowColorSettings(false)}
- />
+ setShowColorSettings(false)} />
)}
{(!isEmbeddedMode || embedConfig.showSimulationSummary) && (
{
open
onCancel={() => setHideNoSimulation(true)}
footer={[
- ,
+ ,
]}
title="No simulation"
>
diff --git a/src/global.d.ts b/src/global.d.ts
index 9a874dd6..4b212951 100644
--- a/src/global.d.ts
+++ b/src/global.d.ts
@@ -14,10 +14,7 @@ declare global {
syncFrequency?: number;
visualizer?: Visualizer;
cancel?: boolean;
- postStepCallback?: () => boolean | void;
+ postStepCallback?: () => boolean | undefined;
files?: SimulationFile[];
}
}
-
-export {};
-
diff --git a/src/hooks/index.ts b/src/hooks/index.ts
index 132cca80..932a54fc 100644
--- a/src/hooks/index.ts
+++ b/src/hooks/index.ts
@@ -1,5 +1,5 @@
import { createTypedHooks } from "easy-peasy"; // 👈import the helper
-import { StoreModel } from "../store/model";
+import type { StoreModel } from "../store/model";
// Provide our model to the helper 👇
const typedHooks = createTypedHooks();
diff --git a/src/hooks/useEmbeddedMode.ts b/src/hooks/useEmbeddedMode.ts
index 9a1956c8..c0a77c03 100644
--- a/src/hooks/useEmbeddedMode.ts
+++ b/src/hooks/useEmbeddedMode.ts
@@ -1,5 +1,5 @@
+import type { EmbedConfig } from "../types";
import { isEmbeddedMode } from "../utils/embeddedMode";
-import { EmbedConfig } from "../types";
export interface EmbeddedModeResult {
embeddedSimulationUrl: string | null;
@@ -18,14 +18,14 @@ export interface EmbeddedModeResult {
*/
function parseVars(varsString: string | null): Record {
if (!varsString) return {};
-
+
const vars: Record = {};
- varsString.split(',').forEach(varDef => {
- const parts = varDef.trim().split(':');
+ varsString.split(",").forEach((varDef) => {
+ const parts = varDef.trim().split(":");
if (parts.length >= 2) {
const name = parts[0];
const value = parseFloat(parts[1]);
- if (!isNaN(value)) {
+ if (!Number.isNaN(value)) {
vars[name] = value;
}
}
@@ -55,16 +55,19 @@ function parseEmbedConfig(configString: string | null): EmbedConfig {
try {
const decoded = atob(configString);
const parsed = JSON.parse(decoded) as Partial;
-
+
// Apply defaults for any missing properties
return {
- showSimulationSummary: parsed.showSimulationSummary ?? DEFAULT_EMBED_CONFIG.showSimulationSummary,
+ showSimulationSummary:
+ parsed.showSimulationSummary ?? DEFAULT_EMBED_CONFIG.showSimulationSummary,
showSimulationBox: parsed.showSimulationBox ?? DEFAULT_EMBED_CONFIG.showSimulationBox,
- enableCameraControls: parsed.enableCameraControls ?? DEFAULT_EMBED_CONFIG.enableCameraControls,
- enableParticlePicking: parsed.enableParticlePicking ?? DEFAULT_EMBED_CONFIG.enableParticlePicking,
+ enableCameraControls:
+ parsed.enableCameraControls ?? DEFAULT_EMBED_CONFIG.enableCameraControls,
+ enableParticlePicking:
+ parsed.enableParticlePicking ?? DEFAULT_EMBED_CONFIG.enableParticlePicking,
};
} catch (error) {
- console.warn('Failed to parse embed config:', error);
+ console.warn("Failed to parse embed config:", error);
// Return defaults on parse error
return DEFAULT_EMBED_CONFIG;
}
@@ -72,14 +75,14 @@ function parseEmbedConfig(configString: string | null): EmbedConfig {
export function useEmbeddedMode(): EmbeddedModeResult {
const urlSearchParams = new URLSearchParams(window.location.search);
- const embeddedSimulationUrl = urlSearchParams.get('embeddedSimulationUrl');
- const simulationIndex = parseInt(urlSearchParams.get('simulationIndex') || '0', 10);
- const embeddedData = urlSearchParams.get('data');
- const autoStartParam = urlSearchParams.get('autostart');
- const autoStart = autoStartParam === 'true';
- const vars = parseVars(urlSearchParams.get('vars'));
- const embedConfig = parseEmbedConfig(urlSearchParams.get('config'));
-
+ const embeddedSimulationUrl = urlSearchParams.get("embeddedSimulationUrl");
+ const simulationIndex = parseInt(urlSearchParams.get("simulationIndex") || "0", 10);
+ const embeddedData = urlSearchParams.get("data");
+ const autoStartParam = urlSearchParams.get("autostart");
+ const autoStart = autoStartParam === "true";
+ const vars = parseVars(urlSearchParams.get("vars"));
+ const embedConfig = parseEmbedConfig(urlSearchParams.get("config"));
+
// Use shared utility function to determine embedded mode
const embeddedMode = isEmbeddedMode(urlSearchParams);
@@ -92,4 +95,4 @@ export function useEmbeddedMode(): EmbeddedModeResult {
vars,
embedConfig,
};
-}
\ No newline at end of file
+}
diff --git a/src/index.css b/src/index.css
index 6f6dafc9..78ed5559 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,10 +1,9 @@
/* Four-corner gradient background - optimized (static, no animation) */
html {
/* Simplified to 3 layers for better performance while maintaining four-corner effect */
- background:
- /* Top-left corner */
- radial-gradient(circle at 0% 0%, rgb(57, 76, 93) 0%, transparent 60%),
- /* Bottom-right corner */
+ /* Top-left corner */
+ background:
+ radial-gradient(circle at 0% 0%, rgb(57, 76, 93) 0%, transparent 60%), /* Bottom-right corner */
radial-gradient(circle at 100% 100%, rgb(41, 63, 86) 0%, transparent 60%),
/* Base gradient blend */
linear-gradient(135deg, rgb(42, 44, 52) 0%, rgb(31, 36, 47) 50%, rgb(41, 63, 86) 100%);
@@ -19,12 +18,7 @@ html::before {
left: 0;
width: 100%;
height: 100%;
- background: linear-gradient(
- 135deg,
- transparent 0%,
- rgba(30, 35, 45, 0.3) 50%,
- transparent 100%
- );
+ background: linear-gradient(135deg, transparent 0%, rgba(30, 35, 45, 0.3) 50%, transparent 100%);
pointer-events: none;
z-index: 0;
}
@@ -32,9 +26,9 @@ html::before {
body {
margin: 0;
padding: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
- "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
- sans-serif;
+ font-family:
+ -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell",
+ "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
height: 100%;
@@ -43,8 +37,7 @@ body {
}
code {
- font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
- monospace;
+ font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
}
html,
@@ -87,7 +80,7 @@ body,
/* Liquid Glass Sidebar - optimized */
.ant-layout-sider {
- background: rgba(41, 40, 45, 0.3) !important;
+ background: rgba(41, 40, 45, 0.3);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-right: 1px solid rgba(255, 255, 255, 0.08);
@@ -104,11 +97,7 @@ body,
left: 0;
width: 100%;
height: 100%;
- background: linear-gradient(
- to bottom,
- rgba(255, 255, 255, 0.15) 0%,
- transparent 50%
- );
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, transparent 50%);
pointer-events: none;
opacity: 0.6;
z-index: 0;
@@ -116,7 +105,7 @@ body,
}
.ant-menu-dark {
- background: transparent !important;
+ background: transparent;
}
/* Remove padding/margin/borders from ant-menu-sub that make items look smaller */
@@ -125,15 +114,17 @@ body,
padding: 0 !important;
margin: 0 !important;
border: none !important;
+ outline: none !important;
+ box-shadow: none !important;
background: transparent !important;
}
.ant-menu-item {
- margin: 4px 8px !important;
- width: calc(100% - 16px) !important;
+ margin: 4px 8px;
+ width: calc(100% - 16px);
border-radius: 8px;
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
- background: transparent !important;
+ background: transparent;
position: relative;
border: none !important;
outline: none !important;
@@ -144,7 +135,7 @@ body,
background: linear-gradient(135deg, rgb(73, 107, 187), rgb(100, 173, 230)) !important;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
- color: #fff !important;
+ color: #fff;
font-weight: 600;
border: none !important;
outline: none !important;
@@ -152,7 +143,7 @@ body,
}
.ant-menu-item:hover:not(.ant-menu-item-selected) {
- background-color: rgba(255, 255, 255, 0.05) !important;
+ background-color: rgba(255, 255, 255, 0.05);
transform: translateX(4px);
}
@@ -162,11 +153,11 @@ body,
}
.ant-layout-content {
- background: transparent !important;
+ background: transparent;
}
.ant-layout {
- background: transparent !important;
+ background: transparent;
}
.site-layout .site-layout-background h1 {
@@ -182,11 +173,11 @@ body,
}
.console-modal .ant-modal-footer {
- background-color: #1e1e1e !important;
+ background-color: #1e1e1e;
}
.settingsbutton {
- position: fixed !important;
+ position: fixed;
bottom: 0;
right: 0;
margin-right: 20px;
@@ -194,7 +185,7 @@ body,
}
.analyzebutton {
- position: fixed !important;
+ position: fixed;
bottom: 0;
right: 0;
margin-right: 70px;
@@ -203,7 +194,7 @@ body,
/* Liquid Glass Overlay Components - optimized */
.simulationsummary {
- position: fixed !important;
+ position: fixed;
background: rgba(42, 41, 47, 0.6);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
@@ -215,8 +206,9 @@ body,
right: 10px;
color: #fff;
opacity: 1;
- box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2), 0 8px 32px rgba(0, 0, 0, 0.1);
- position: relative;
+ box-shadow:
+ inset 0 0 20px rgba(0, 0, 0, 0.2),
+ 0 8px 32px rgba(0, 0, 0, 0.1);
overflow: hidden;
z-index: 1000;
contain: layout style paint;
@@ -229,20 +221,16 @@ body,
left: 0;
width: 100%;
height: 100%;
- background: linear-gradient(
- to bottom,
- rgba(255, 255, 255, 0.15) 0%,
- transparent 50%
- );
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, transparent 50%);
pointer-events: none;
opacity: 0.5;
transform: translateZ(0);
}
.simulationsummary-collapsed {
- width: auto !important;
+ width: auto;
min-width: 200px;
- padding: 8px 16px !important;
+ padding: 8px 16px;
cursor: pointer;
transition: all 0.2s ease;
border: none;
@@ -253,7 +241,7 @@ body,
}
.simulationsummary-collapsed:hover {
- background: rgba(42, 41, 47, 0.8) !important;
+ background: rgba(42, 41, 47, 0.8);
}
.simulationsummary-collapsed button {
@@ -272,8 +260,8 @@ body,
}
.show-more-button {
- padding: 0 !important;
- color: #fff !important;
+ padding: 0;
+ color: #fff;
text-decoration: underline;
font-size: 12px;
}
@@ -296,15 +284,16 @@ body,
}
.simulation-summary-minimize-button button {
- pointer-events: auto !important;
+ pointer-events: auto;
z-index: 101;
- cursor: pointer !important;
+ cursor: pointer;
}
.simulationsummary-expanded {
- width: 400px !important;
- height: calc(100vh - 20px) !important;
- top: 10px !important;
+ position: fixed;
+ width: 400px;
+ height: calc(100vh - 20px);
+ top: 10px;
overflow-y: auto;
}
@@ -313,7 +302,6 @@ body,
z-index: 1;
}
-
.selected-atoms-info {
position: absolute;
background: rgba(42, 41, 47, 0.6);
@@ -327,7 +315,9 @@ body,
left: 20px;
color: #fff;
z-index: 1000;
- box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2), 0 8px 32px rgba(0, 0, 0, 0.1);
+ box-shadow:
+ inset 0 0 20px rgba(0, 0, 0, 0.2),
+ 0 8px 32px rgba(0, 0, 0, 0.1);
overflow: hidden;
contain: layout style paint;
}
@@ -339,11 +329,7 @@ body,
left: 0;
width: 100%;
height: 100%;
- background: linear-gradient(
- to bottom,
- rgba(255, 255, 255, 0.15) 0%,
- transparent 50%
- );
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, transparent 50%);
pointer-events: none;
opacity: 0.5;
transform: translateZ(0);
@@ -362,7 +348,9 @@ body,
left: 20px;
color: #fff;
z-index: 1000;
- box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2), 0 8px 32px rgba(0, 0, 0, 0.1);
+ box-shadow:
+ inset 0 0 20px rgba(0, 0, 0, 0.2),
+ 0 8px 32px rgba(0, 0, 0, 0.1);
overflow: hidden;
contain: layout style paint;
font-family: monospace;
@@ -376,11 +364,7 @@ body,
left: 0;
width: 100%;
height: 100%;
- background: linear-gradient(
- to bottom,
- rgba(255, 255, 255, 0.15) 0%,
- transparent 50%
- );
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, transparent 50%);
pointer-events: none;
opacity: 0.5;
transform: translateZ(0);
@@ -421,11 +405,11 @@ body,
/* Dygraph dark theme styling */
.dygraph-legend {
- background: rgba(0, 0, 0, 0.8) !important;
- color: #fff !important;
- border: 1px solid #333 !important;
- border-radius: 4px !important;
- padding: 8px !important;
+ background: rgba(0, 0, 0, 0.8);
+ color: #fff;
+ border: 1px solid #333;
+ border-radius: 4px;
+ padding: 8px;
}
.dygraph-custom-legend {
@@ -440,28 +424,28 @@ body,
}
.dygraph-axis-label {
- color: #ffffff !important;
+ color: #ffffff;
}
.dygraph-title {
- color: #ffffff !important;
+ color: #ffffff;
}
.dygraph-xlabel,
.dygraph-ylabel {
- color: #ffffff !important;
+ color: #ffffff;
}
.dygraph-label {
- color: #ffffff !important;
+ color: #ffffff;
}
/* Respect user motion preferences */
@media (prefers-reduced-motion: reduce) {
* {
- animation-duration: 0.01ms !important;
- animation-iteration-count: 1 !important;
- transition-duration: 0.01ms !important;
+ animation-duration: 0.01ms;
+ animation-iteration-count: 1;
+ transition-duration: 0.01ms;
}
}
@@ -472,7 +456,9 @@ body,
-webkit-backdrop-filter: blur(8px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
- box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.2), 0 8px 32px rgba(0, 0, 0, 0.1);
+ box-shadow:
+ inset 0 0 20px rgba(0, 0, 0, 0.2),
+ 0 8px 32px rgba(0, 0, 0, 0.1);
position: relative;
overflow: hidden;
padding: 16px;
@@ -486,11 +472,7 @@ body,
left: 0;
width: 100%;
height: 100%;
- background: linear-gradient(
- to bottom,
- rgba(255, 255, 255, 0.15) 0%,
- transparent 50%
- );
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, transparent 50%);
pointer-events: none;
opacity: 0.5;
transform: translateZ(0);
@@ -513,25 +495,25 @@ body,
/* Make tables transparent to show glass effect */
.ant-table-wrapper {
- background: transparent !important;
+ background: transparent;
}
.ant-table {
- background: transparent !important;
+ background: transparent;
}
.ant-table-thead > tr > th {
- background: transparent !important;
- border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;
- color: #ffffff !important;
+ background: transparent;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+ color: #ffffff;
}
.ant-table-tbody > tr > td {
- background: transparent !important;
- border-bottom: 1px solid rgba(255, 255, 255, 0.05) !important;
- color: #ffffff !important;
+ background: transparent;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
+ color: #ffffff;
}
.ant-table-tbody > tr:hover > td {
- background: rgba(255, 255, 255, 0.05) !important;
+ background: rgba(255, 255, 255, 0.05);
}
diff --git a/src/index.tsx b/src/index.tsx
index 6a5d6ae1..15c49494 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,12 +1,11 @@
import "./index.css";
import "dygraphs/dist/dygraph.css";
-import React from "react";
+import { StoreProvider } from "easy-peasy";
+import mixpanel from "mixpanel-browser";
import { createRoot } from "react-dom/client";
import App from "./App";
-import { StoreProvider } from "easy-peasy";
import store from "./store";
-import mixpanel from "mixpanel-browser";
-import { track, getEmbeddingParams } from "./utils/metrics";
+import { getEmbeddingParams, track } from "./utils/metrics";
mixpanel.init("b5022dd7fe5b3cd0396d84284ae647e6", { debug: false });
@@ -14,7 +13,9 @@ track("Page.Load", getEmbeddingParams());
const container = document.getElementById("root");
if (!container) {
- throw new Error("Failed to find the root element. Please ensure an element with id 'root' exists in your index.html.");
+ throw new Error(
+ "Failed to find the root element. Please ensure an element with id 'root' exists in your index.html."
+ );
}
const root = createRoot(container);
diff --git a/src/modifiers/ColorModifierSettings.tsx b/src/modifiers/ColorModifierSettings.tsx
index 7d59e402..613417bf 100644
--- a/src/modifiers/ColorModifierSettings.tsx
+++ b/src/modifiers/ColorModifierSettings.tsx
@@ -1,35 +1,27 @@
-import { Modal, Select, Divider, InputNumber, Checkbox, Button, Space } from "antd";
-import { useStoreState, useStoreActions } from "../hooks";
+import { Button, Checkbox, Divider, InputNumber, Modal, Select, Space } from "antd";
import { useCallback, useState } from "react";
+import { useStoreActions, useStoreState } from "../hooks";
import { track } from "../utils/metrics";
-import ColorModifier from "./colormodifier";
+import type ColorModifier from "./colormodifier";
+
const { Option, OptGroup } = Select;
const ColorModifierSettings = ({ open, onClose }: { open: boolean; onClose: () => void }) => {
const computes = useStoreState((state) => state.simulationStatus.computes);
- const postTimestepModifiers = useStoreState(
- (state) => state.processing.postTimestepModifiers,
- );
+ const postTimestepModifiers = useStoreState((state) => state.processing.postTimestepModifiers);
const setParticleStylesUpdated = useStoreActions(
- (actions) => actions.render.setParticleStylesUpdated,
+ (actions) => actions.render.setParticleStylesUpdated
);
const colorModifier = postTimestepModifiers.filter(
- (modifier) => modifier.name === "Colors",
+ (modifier) => modifier.name === "Colors"
)[0] as ColorModifier;
- const perAtomComputes = Object.values(computes).filter(
- (compute) => compute.isPerAtom,
- );
+ const perAtomComputes = Object.values(computes).filter((compute) => compute.isPerAtom);
const [useCustomRange, setUseCustomRange] = useState(
- colorModifier.customMinValue !== undefined ||
- colorModifier.customMaxValue !== undefined
- );
- const [customMin, setCustomMin] = useState(
- colorModifier.customMinValue ?? null
- );
- const [customMax, setCustomMax] = useState(
- colorModifier.customMaxValue ?? null
+ colorModifier.customMinValue !== undefined || colorModifier.customMaxValue !== undefined
);
+ const [customMin, setCustomMin] = useState(colorModifier.customMinValue ?? null);
+ const [customMax, setCustomMax] = useState(colorModifier.customMaxValue ?? null);
const onChange = useCallback(
(value: string) => {
@@ -45,7 +37,7 @@ const ColorModifierSettings = ({ open, onClose }: { open: boolean; onClose: () =
setParticleStylesUpdated(true);
}
},
- [colorModifier, setParticleStylesUpdated],
+ [colorModifier, setParticleStylesUpdated]
);
const handleCustomRangeToggle = useCallback(
@@ -56,15 +48,19 @@ const ColorModifierSettings = ({ open, onClose }: { open: boolean; onClose: () =
colorModifier.customMaxValue = undefined;
} else {
// Initialize with global values only if they are finite
- const minValue = isFinite(colorModifier.globalMinValue) ? colorModifier.globalMinValue : 0;
- const maxValue = isFinite(colorModifier.globalMaxValue) ? colorModifier.globalMaxValue : 1;
+ const minValue = Number.isFinite(colorModifier.globalMinValue)
+ ? colorModifier.globalMinValue
+ : 0;
+ const maxValue = Number.isFinite(colorModifier.globalMaxValue)
+ ? colorModifier.globalMaxValue
+ : 1;
colorModifier.customMinValue = customMin ?? minValue;
colorModifier.customMaxValue = customMax ?? maxValue;
setCustomMin(colorModifier.customMinValue);
setCustomMax(colorModifier.customMaxValue);
}
},
- [colorModifier, customMin, customMax],
+ [colorModifier, customMin, customMax]
);
const handleMinChange = useCallback(
@@ -74,7 +70,7 @@ const ColorModifierSettings = ({ open, onClose }: { open: boolean; onClose: () =
colorModifier.customMinValue = value;
}
},
- [colorModifier, useCustomRange],
+ [colorModifier, useCustomRange]
);
const handleMaxChange = useCallback(
@@ -84,7 +80,7 @@ const ColorModifierSettings = ({ open, onClose }: { open: boolean; onClose: () =
colorModifier.customMaxValue = value;
}
},
- [colorModifier, useCustomRange],
+ [colorModifier, useCustomRange]
);
const handleResetRange = useCallback(() => {
@@ -96,10 +92,8 @@ const ColorModifierSettings = ({ open, onClose }: { open: boolean; onClose: () =
setUseCustomRange(false);
}, [colorModifier]);
- const defaultValue = colorModifier.computeName
- ? colorModifier.computeName
- : "type";
-
+ const defaultValue = colorModifier.computeName ? colorModifier.computeName : "type";
+
const showRangeControls = colorModifier.computeName !== undefined;
const colormapOptions = [
@@ -124,25 +118,15 @@ const ColorModifierSettings = ({ open, onClose }: { open: boolean; onClose: () =
colorModifier.colormap = value;
track("Settings.Render.Colormap", { colormap: value });
},
- [colorModifier],
+ [colorModifier]
);
-
+
return (
-
+
Color by:
-
+