303 lines
8.4 KiB
Markdown
303 lines
8.4 KiB
Markdown
# TRIMSP-NL Workbench
|
|
|
|
### Contents ###
|
|
|
|
This repository contains TRIMSP-NL Workbench, an application for performing
|
|
[Monte Carlo] simulations of low-energy muon and ion implantation. The
|
|
workbench combines a [Fortran] transport engine with a graphical user
|
|
interface ([GUI]) for preparing input decks, running scans, and plotting the
|
|
results.
|
|
|
|
In the terminology used in the accompanying publication:
|
|
|
|
* **TRIM.SP-NL** is the generalized multilayer Fortran transport engine.
|
|
* **TRIMSP-NL Workbench** is the complete engine, GUI, and scan-management
|
|
workflow.
|
|
|
|
* This code is specifically tuned to simulate implantation of low-energy projectiles in materials.
|
|
* The code is maintained by the Low Energy Muons ([LEM]) group at the Paul Scherrer Institute ([PSI]).
|
|
* The [GUI] is written in [Node.js], [JavaScript] and [Electron].
|
|
* The [Fortran] executable is built from source during packaging.
|
|
* Linux packages can be generated locally from the current source tree.
|
|
|
|
Further information can be found in the following publications:
|
|
|
|
- Z. Salman, R. M. L. McFadden, and T. Prokscha,
|
|
<i>Modernization and Statistical Validation of a Multilayer TRIM.SP Code for
|
|
Low-Energy Muon and Ion Implantation</i> (2026).
|
|
- J. P. Biersack and W. Eckstein,
|
|
<i>Sputtering studies with the Monte Carlo program TRIM.SP</i>,
|
|
Appl. Phys. A <b>34</b> (2), 73-94 (1984).
|
|
<https://doi.org/10.1007/BF00614759>
|
|
- W. Eckstein,
|
|
<i>Computer Simulation of Ion-Solid Interactions</i>,
|
|
Springer Series in Materials Science Vol. 10
|
|
(Springer-Verlag, Berlin, Heidelberg, 1991).
|
|
<https://doi.org/10.1007/978-3-642-73513-4>
|
|
- W. Eckstein,
|
|
<i>Backscattering and sputtering with the Monte-Carlo program TRIM.SP</i>,
|
|
Radiat. Eff. Defects Solids <b>130-131</b> (1), 239-250 (1994).
|
|
<https://doi.org/10.1080/10420159408219787>
|
|
- E. Morenzoni et al.,
|
|
<i>Implantation studies of keV positive muons in thin metallic layers</i>,
|
|
Nucl. Instrum. Methods Phys. Res., Sect. B <b>192</b> (3), 245-266 (2002).
|
|
<https://doi.org/10.1016/S0168-583X(01)01166-1>
|
|
|
|
### How to cite ###
|
|
|
|
If you use this software in published work, please cite the relevant
|
|
TRIM.SP references listed above and the TRIMSP-NL Workbench paper.
|
|
|
|
Repository metadata is also provided in [CITATION.cff](CITATION.cff).
|
|
|
|
### Supported platforms ###
|
|
|
|
* [Linux]
|
|
* Online at: http://musruser.psi.ch/TRIMSP-NL/
|
|
* Source repository: https://gitea.psi.ch/LMU/TRIMSP
|
|
|
|
### Installation ###
|
|
|
|
Packages are not stored in this repository. You can either run the application
|
|
directly from source or build Linux packages locally as described below.
|
|
|
|
###### Fortran code compilation ######
|
|
|
|
Install the `gfortran` compiler, then:
|
|
|
|
```bash
|
|
cd trimsp/fortran
|
|
make
|
|
```
|
|
|
|
This creates the `trimspNL` binary in the repository root. For packaged
|
|
Electron builds, the default is now to use the static binary:
|
|
|
|
```bash
|
|
cd trimsp/fortran
|
|
make trimspNL-static
|
|
```
|
|
|
|
and copy or rebuild it into:
|
|
|
|
```text
|
|
resources/bin/trimspNL
|
|
```
|
|
|
|
The application will prefer that bundled copy when running from a packaged
|
|
install. During development it can still use a local checkout copy or a
|
|
`trimspNL` binary found in the configured path or in `PATH`.
|
|
|
|
`trimspNL` now requires an explicit run basename when called directly, for
|
|
example:
|
|
|
|
```bash
|
|
./trimspNL myrun
|
|
```
|
|
|
|
This reads `myrun.inp` and writes `myrun.out`, `myrun.rge`, and `myrun.err`.
|
|
|
|
If you need the dynamic binary explicitly, build:
|
|
|
|
```bash
|
|
cd trimsp/fortran
|
|
make trimspNL
|
|
```
|
|
|
|
###### Running the GUI ######
|
|
|
|
Install [Node.js] (`nodejs`, `nodejs-libs` and `npm`),
|
|
then run:
|
|
|
|
```bash
|
|
cd trimsp
|
|
npm install
|
|
npm start
|
|
```
|
|
|
|
Note: you do not need to run `npm install` every time.
|
|
Next time you can simply run `npm start` only.
|
|
|
|
Use the `?` button for contextual Quick Start help. The adjacent share button
|
|
copies a link containing the current scientific configuration for the web
|
|
application. Shared links include layers, projectile, scan, RNG, and advanced
|
|
settings, but exclude local paths, file prefixes, worker counts, and results.
|
|
|
|
###### Building RPM and DEB packages ######
|
|
|
|
Install [Node.js] (`nodejs`, `nodejs-libs` and `npm`), plus the Fortran toolchain
|
|
(`make` and `gfortran`), then run:
|
|
|
|
```bash
|
|
cd trimsp
|
|
npm install
|
|
npm run make
|
|
```
|
|
|
|
This automatically compiles `fortran/trimspNL-static` and copies it to
|
|
`resources/bin/trimspNL` before Electron Forge builds the packages.
|
|
|
|
If static linking fails on a given machine, you can stage the dynamic binary
|
|
manually instead:
|
|
|
|
```bash
|
|
npm run build:fortran:dynamic
|
|
```
|
|
|
|
To build packages with the dynamic binary in one step, run:
|
|
|
|
```bash
|
|
npm run make:dynamic
|
|
```
|
|
|
|
For Flatpak, build with the same default static Fortran binary:
|
|
|
|
```bash
|
|
npm run make:flatpak
|
|
```
|
|
|
|
This compiles `fortran/trimspNL-static` and stages it as
|
|
`resources/bin/trimspNL` before the Flatpak packaging step.
|
|
|
|
The generated files are written under:
|
|
|
|
```text
|
|
out/make/deb/x64/
|
|
out/make/rpm/x64/
|
|
```
|
|
|
|
Typical output files are:
|
|
|
|
```text
|
|
out/make/deb/x64/trimsp_<version>_amd64.deb
|
|
out/make/rpm/x64/TrimSP-<version>-1.x86_64.rpm
|
|
```
|
|
|
|
To generate matching checksum sidecar files for each generated package, run:
|
|
|
|
```bash
|
|
npm run checksums
|
|
```
|
|
|
|
This creates files next to each package, for example:
|
|
|
|
```text
|
|
out/make/rpm/x64/TrimSP-<version>-1.x86_64.rpm.md5
|
|
out/make/rpm/x64/TrimSP-<version>-1.x86_64.rpm.sha256
|
|
```
|
|
|
|
If you only want one checksum type, you can also run:
|
|
|
|
```bash
|
|
npm run checksums:md5
|
|
npm run checksums:sha256
|
|
```
|
|
|
|
Depending on the host system, additional packaging tools may be required for
|
|
the RPM/DEB build chain.
|
|
|
|
###### Building a Flatpak ######
|
|
|
|
Install the Flatpak build tools in addition to [Node.js]:
|
|
|
|
```bash
|
|
flatpak
|
|
flatpak-builder
|
|
elfutils
|
|
```
|
|
|
|
Then run:
|
|
|
|
```bash
|
|
cd trimsp
|
|
cp fortran/trimspNL resources/bin/trimspNL
|
|
npm install
|
|
npm run make:flatpak
|
|
```
|
|
|
|
This uses Electron Forge's Flatpak maker and writes the resulting `.flatpak`
|
|
under:
|
|
|
|
```text
|
|
out/make/flatpak/x86_64/
|
|
```
|
|
|
|
Checksum sidecar files can be generated afterward with:
|
|
|
|
```bash
|
|
npm run checksums
|
|
```
|
|
|
|
The current Flatpak config grants access to the home directory and `/tmp`,
|
|
which matches how the packaged app currently handles simulation input/output.
|
|
|
|
###### Deploying on a web server ######
|
|
|
|
The repository includes the browser assets, CGI runner, and a deployment
|
|
script for an Apache-style server. With the default settings, run:
|
|
|
|
```bash
|
|
sudo ./scripts/deploy-web.sh
|
|
```
|
|
|
|
The script expects the TRIM.SP-NL engine to be installed already and installs:
|
|
|
|
```text
|
|
/var/www/html/TRIMSP-NL/ browser application
|
|
/var/www/cgi-bin/singleTrimSP.cgi CGI runner
|
|
```
|
|
|
|
By default, the CGI uses the existing executable at
|
|
`/usr/local/bin/trimspNL`. Set `TRIMSP_BIN_PATH` if it is installed elsewhere.
|
|
|
|
Deployment paths and ownership can be changed through environment variables:
|
|
|
|
| Variable | Default | Purpose |
|
|
| --- | --- | --- |
|
|
| `TRIMSP_WEB_TARGET` | `/var/www/html/TRIMSP-NL` | Browser asset directory |
|
|
| `TRIMSP_CGI_TARGET` | `/var/www/cgi-bin/singleTrimSP.cgi` | Installed CGI path |
|
|
| `TRIMSP_WEB_OWNER` | `apache` | Web file owner |
|
|
| `TRIMSP_WEB_GROUP` | `apache` | Web file group |
|
|
| `TRIMSP_BIN_PATH` | `/usr/local/bin/trimspNL` | Existing engine executable used by the CGI |
|
|
|
|
For example, to use an engine installed in `/opt/trimsp/bin`:
|
|
|
|
```bash
|
|
sudo TRIMSP_BIN_PATH=/opt/trimsp/bin/trimspNL \
|
|
./scripts/deploy-web.sh
|
|
```
|
|
|
|
The web server must execute the CGI through `/cgi-bin/singleTrimSP.cgi`. The
|
|
CGI keeps simulation files in filesystem `/tmp` and serves only requested run
|
|
outputs and archives; `/tmp` does not need to be exposed through the web
|
|
server. On SELinux systems, inspect denied operations with:
|
|
|
|
```bash
|
|
ausearch -m avc -ts recent
|
|
```
|
|
|
|
The Apache account needs permission to execute the CGI and engine and to create
|
|
the per-run directories in `/tmp`.
|
|
|
|
After a web run, the status bar provides the results archive through
|
|
**Outputs** and shows CGI status plus captured TRIM.SP-NL output through
|
|
**Details**. Diagnostic output is kept in the browser session only and is not
|
|
included in the `.tgz` archive.
|
|
|
|
### Contact ###
|
|
|
|
Zaher Salman <zaher.salman@psi.ch>
|
|
|
|
|
|
[Fortran]: https://fortran-lang.org/
|
|
[Node.js]: https://nodejs.org/en/
|
|
[JavaScript]: https://www.javascript.com/
|
|
[Electron]: https://www.electronjs.org/
|
|
[PSI]: https://www.psi.ch/en
|
|
[LEM]: https://www.psi.ch/en/low-energy-muons
|
|
[RPM]: https://rpm.org/
|
|
[DEB]: https://en.wikipedia.org/wiki/Deb_(file_format)
|
|
[Linux]: https://en.wikipedia.org/wiki/Linux
|
|
[Monte Carlo]: https://en.wikipedia.org/wiki/Monte_Carlo_method
|
|
[GUI]: https://en.wikipedia.org/wiki/Graphical_user_interface
|