Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions cpp/lammpsweb/lammpsweb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,13 @@ std::string LAMMPSWeb::getLastCommand() {
return lastCommand;
}

std::string LAMMPSWeb::getUnits() {
if (!m_lmp || !m_lmp->update) {
return "";
}
return std::string(m_lmp->update->unit_style);
}


int LAMMPSWeb::getTimesteps() {
if (!m_lmp) {
Expand Down
2 changes: 2 additions & 0 deletions cpp/lammpsweb/lammpsweb.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class LAMMPSWeb
Fix getFix(std::string name);
std::vector<std::string> getVariableNames();
Variable getVariable(std::string name);
std::string getUnits();
long getMemoryUsage();

// Pointer getters
Expand Down Expand Up @@ -121,6 +122,7 @@ EMSCRIPTEN_BINDINGS(LAMMPSWeb)
.function("getFixNames", &LAMMPSWeb::getFixNames)
.function("getVariable", &LAMMPSWeb::getVariable)
.function("getVariableNames", &LAMMPSWeb::getVariableNames)
.function("getUnits", &LAMMPSWeb::getUnits)
.function("syncComputes", &LAMMPSWeb::syncComputes)
.function("syncFixes", &LAMMPSWeb::syncFixes)
.function("syncVariables", &LAMMPSWeb::syncVariables)
Expand Down
11 changes: 7 additions & 4 deletions src/components/SelectedAtomsInfo.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Button } from "antd";
import { Particles } from "omovi";
import { useMemo } from "react";
import { useLammpsUnits } from "../hooks/useLammpsUnits";

interface SelectedAtomsInfoProps {
selectedAtoms: Set<number>;
Expand Down Expand Up @@ -48,6 +49,8 @@ const SelectedAtomsInfo = ({
particles,
onClearSelection,
}: SelectedAtomsInfoProps) => {
const distanceUnit = useLammpsUnits();

if (selectedAtoms.size === 0) {
return null;
}
Expand Down Expand Up @@ -117,7 +120,7 @@ const SelectedAtomsInfo = ({
Geometry
</div>
<div style={{ fontFamily: "monospace", fontSize: "11px" }}>
Distance: {calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} Å
Distance: {calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} {distanceUnit}
</div>
</div>
)}
Expand All @@ -130,15 +133,15 @@ const SelectedAtomsInfo = ({
</div>
<div style={{ fontFamily: "monospace", fontSize: "11px" }}>
d({atomData[0].atomId}-{atomData[1].atomId}):{" "}
{calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} Å
{calculateDistance(atomData[0].position, atomData[1].position).toFixed(3)} {distanceUnit}
</div>
<div style={{ fontFamily: "monospace", fontSize: "11px" }}>
d({atomData[1].atomId}-{atomData[2].atomId}):{" "}
{calculateDistance(atomData[1].position, atomData[2].position).toFixed(3)} Å
{calculateDistance(atomData[1].position, atomData[2].position).toFixed(3)} {distanceUnit}
</div>
<div style={{ fontFamily: "monospace", fontSize: "11px" }}>
d({atomData[0].atomId}-{atomData[2].atomId}):{" "}
{calculateDistance(atomData[0].position, atomData[2].position).toFixed(3)} Å
{calculateDistance(atomData[0].position, atomData[2].position).toFixed(3)} {distanceUnit}
</div>
<div style={{ marginTop: "5px" }}>
<div style={{ fontFamily: "monospace", fontSize: "11px" }}>
Expand Down
20 changes: 20 additions & 0 deletions src/hooks/useLammpsUnits.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { useMemo } from "react";
import { useStoreState } from "./index";
import { getDistanceUnitSymbol } from "../utils/parsers";

/**
* Hook to get the distance unit symbol based on the current LAMMPS unit system
* @returns The distance unit symbol (e.g., "Å", "σ", "m", "cm", etc.)
*/
export const useLammpsUnits = (): string => {
const lammps = useStoreState((state) => state.simulation.lammps);

return useMemo(() => {
if (!lammps) {
return "Å"; // Default to Angstroms if LAMMPS is not available
}

const unitStyle = lammps.getUnits();
return getDistanceUnitSymbol(unitStyle);
}, [lammps]);
};
1 change: 1 addition & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export type LammpsWeb = {
getFixNames: () => CPPArray<string>;
getVariable: (name: string) => LMPModifier;
getVariableNames: () => CPPArray<string>;
getUnits: () => string;
syncComputes: () => void;
syncFixes: () => void;
syncVariables: () => void;
Expand Down
32 changes: 32 additions & 0 deletions src/utils/parsers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,35 @@ export const parseAtomSizeAndColor = (line: string) => {
}
};

/**
* Gets the distance unit symbol for a given LAMMPS unit style
* @param unitStyle The LAMMPS unit style (e.g., "real", "metal", "lj", "si", etc.)
* @returns The distance unit symbol string
*/
export const getDistanceUnitSymbol = (unitStyle: string | undefined): string => {
if (!unitStyle) {
return "Å"; // Default to Angstroms if unit style is not found
}

const style = unitStyle.toLowerCase();
switch (style) {
case "lj":
return "σ";
case "real":
case "metal":
return "Å";
case "si":
return "m";
case "cgs":
return "cm";
case "electron":
return "a₀";
case "micro":
return "μm";
case "nano":
return "nm";
default:
return "Å"; // Default to Angstroms for unknown unit styles
}
};