setting sail
This commit is contained in:
commit
cfcbf22469
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
sims/*
|
||||
!*/.keep
|
||||
.direnv
|
75
README.md
Normal file
75
README.md
Normal file
|
@ -0,0 +1,75 @@
|
|||
# OpenFOAM nix shell environment
|
||||
|
||||
## Usage
|
||||
|
||||
With `direnv` installed and active (`eval $"(direnv hook bash)"`) the
|
||||
environment loads itself when you enter this directory or any below it.
|
||||
Simulations can be placed inside the `sims` directory. The `sims`
|
||||
directory is ignored by git. If you change branches your simulations
|
||||
should stay untouched. However it may lead to confusion if you have
|
||||
simulation results from one OpenFOAM version and then change to another.
|
||||
Clone this repository again for each OpenFOAM version you want to use to
|
||||
not confuse yourself ;-)
|
||||
|
||||
## Requirements
|
||||
|
||||
### nix with flakes
|
||||
On `nixos` flakes can be enabled by adding the following to your system
|
||||
configuration:
|
||||
|
||||
``` nix
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
```
|
||||
|
||||
On other systems add the following to your `/etc/nix/nix.conf`:
|
||||
|
||||
``` conf
|
||||
experimental-features = nix-command flakes
|
||||
```
|
||||
|
||||
### direnv
|
||||
|
||||
After installing `direnv` it has to be loaded. Maybe add the hook to your
|
||||
shellrc:
|
||||
|
||||
``` sh
|
||||
echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
|
||||
```
|
||||
|
||||
See https://direnv.net/docs/hook.html for more information.
|
||||
You'll need to `allow` the current directory:
|
||||
|
||||
``` sh
|
||||
direnv allow
|
||||
```
|
||||
|
||||
## Update nixpkgs
|
||||
|
||||
From within this directory run
|
||||
|
||||
``` sh
|
||||
nix flake update
|
||||
```
|
||||
|
||||
to pin to the latest `nixpkgs` version.
|
||||
|
||||
## Update OpenFOAM version
|
||||
|
||||
The OpenFOAM derivation is defined in `pkgs/openfoam/default.nix`. Edit the
|
||||
variables in the `let` block at the top of the file and replace the
|
||||
`"sha256-..."` string with an empty string. The first build will then fail
|
||||
and give you the correct sha hash. Replace the empty string with it.
|
||||
|
||||
## Add different OpenFOAM release
|
||||
|
||||
There are branches for each OpenFOAM release. The main branch has always the
|
||||
latest version. If you want to add a new one:
|
||||
|
||||
- create a new branch to hold the current version (e.g. openfoam-12)
|
||||
- update the repository path in `pkgs/openfoam/default.nix` by editing the
|
||||
parameters in the `let` block.
|
||||
- adjust the `patches`, `postPatch`, `configurePhase`, `buildPhase` and
|
||||
`installPhase` if required
|
||||
|
||||
Reevaluating `envrc` will build the new OpenFOAM (this may take a while (expect
|
||||
up to 1h).
|
59
flake.lock
Normal file
59
flake.lock
Normal file
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1744868846,
|
||||
"narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
14
flake.nix
Normal file
14
flake.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
description = "OpenFOAM 12 Simulation Environment for pirates";
|
||||
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem
|
||||
(system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system}; in
|
||||
{
|
||||
devShells.default = import ./shell.nix { inherit pkgs; };
|
||||
}
|
||||
);
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
From 8043842ab7feceae999addf2725d44ab0f65071a Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Woetzel <wose@zuendmasse.de>
|
||||
Date: Sun, 20 Apr 2025 18:00:41 +0200
|
||||
Subject: [PATCH] etc/bashrc: add placeholder for FOAM_INST_DIR
|
||||
|
||||
---
|
||||
etc/bashrc | 11 ++---------
|
||||
1 file changed, 2 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/etc/bashrc b/etc/bashrc
|
||||
index 1ead5cc1c7..59d0bdb2ad 100644
|
||||
--- a/etc/bashrc
|
||||
+++ b/etc/bashrc
|
||||
@@ -42,15 +42,8 @@ export WM_PROJECT_VERSION=12
|
||||
# the directory two levels below this file, or $HOME/$WM_PROJECT if that
|
||||
# directory cannot be determined.
|
||||
#
|
||||
-[ "$BASH" ] && bashrcFile=${BASH_SOURCE}
|
||||
-[ "$ZSH_NAME" ] && bashrcFile=$0
|
||||
-if [ -n "$bashrcFile" ]
|
||||
-then
|
||||
- export FOAM_INST_DIR=$(cd $(dirname $bashrcFile)/../.. && pwd -P)
|
||||
-else
|
||||
- export FOAM_INST_DIR=$HOME/$WM_PROJECT
|
||||
-fi
|
||||
-unset bashrcFile
|
||||
+# FOAM_INST_DIR is set in postPatch phase
|
||||
+# __inst_dir_placeholder__
|
||||
#
|
||||
# Please set to the appropriate path if the above default is not correct. E.g.,
|
||||
#
|
||||
--
|
||||
2.49.0
|
||||
|
87
pkgs/openfoam/default.nix
Normal file
87
pkgs/openfoam/default.nix
Normal file
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
stdenv,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
version = "12.20250206";
|
||||
major = "12";
|
||||
revision = "20250206";
|
||||
realname = "OpenFOAM";
|
||||
in let
|
||||
pkg = stdenv.mkDerivation {
|
||||
pname = "openfoam";
|
||||
inherit version major;
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = realname;
|
||||
repo = "${realname}-${major}";
|
||||
rev = "${revision}";
|
||||
sha256 = "sha256-MZ29G5+49ZjE2hHC4uRF6PTR7cI5hrdjOn66lMnIgIw=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = with pkgs; [bash m4 flex bison];
|
||||
|
||||
buildInputs = with pkgs; [fftw mpi scotch boost cgal zlib];
|
||||
|
||||
patches = [
|
||||
./0001-etc-bashrc-add-placeholder-for-FOAM_INST_DIR.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace etc/bashrc \
|
||||
--replace 'export SCOTCH_TYPE=ThirdParty' 'export SCOTCH_TYPE=system' \
|
||||
--replace 'export ZOLTAN_TYPE=ThirdParty' 'export ZOLTAN_TYPE=none'
|
||||
|
||||
patchShebangs Allwmake
|
||||
patchShebangs etc
|
||||
patchShebangs wmake
|
||||
patchShebangs applications
|
||||
patchShebangs bin
|
||||
'';
|
||||
|
||||
configurePhase = ''
|
||||
export FOAM_INST_DIR=$NIX_BUILD_TOP/source
|
||||
export WM_PROJECT_DIR=$FOAM_INST_DIR/${realname}-${major}
|
||||
mkdir $WM_PROJECT_DIR
|
||||
|
||||
mv $(find $FOAM_INST_DIR/ -maxdepth 1 -not -path $WM_PROJECT_DIR -not -path $FOAM_INST_DIR/) \
|
||||
$WM_PROJECT_DIR/
|
||||
|
||||
set +e
|
||||
. $WM_PROJECT_DIR/etc/bashrc
|
||||
set -e
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
sh $WM_PROJECT_DIR/Allwmake -j$CORES
|
||||
wclean all
|
||||
wmakeLnIncludeAll
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/${realname}-${major}
|
||||
|
||||
substituteInPlace $WM_PROJECT_DIR/etc/bashrc \
|
||||
--replace '# __inst_dir_placeholder__' "export FOAM_INST_DIR=$out"
|
||||
|
||||
cp -Ra $WM_PROJECT_DIR/* $out/${realname}-${major}
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
shellHook = ''
|
||||
. ${pkg}/${realname}-${major}/etc/bashrc
|
||||
'';
|
||||
};
|
||||
|
||||
meta = with pkgs.lib; {
|
||||
homepage = "https://www.openfoam.org/";
|
||||
description = "OpenFOAM is a free, open source CFD software released and developed by OpenFOAM Foundation";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ "wose" ];
|
||||
broken = pkgs.stdenv.isDarwin;
|
||||
};
|
||||
};
|
||||
in
|
||||
pkg
|
31
shell.nix
Normal file
31
shell.nix
Normal file
|
@ -0,0 +1,31 @@
|
|||
{ pkgs ? import <nixpkgs> { } }:
|
||||
with pkgs;
|
||||
mkShell rec {
|
||||
openfoam = callPackage ./pkgs/openfoam/default.nix { };
|
||||
buildInputs = [
|
||||
gnumake
|
||||
mpi
|
||||
openfoam
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo "⠀⢰⣿⣷⣦⣄⡀⠀⣀⣀⣀⣀⣀⡀⠀⢀⣠⣴⣶⣿⡆"
|
||||
echo "⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡃"
|
||||
echo "⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿"
|
||||
echo "⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇"⠀
|
||||
echo "⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄"⠀
|
||||
echo "⠀⢸⣿⣿⠟⠁⠀⠈⢹⣿⣿⣿⣿⠏⠁⠀⠙⢻⣿⣿⡇"
|
||||
echo "⠀⠈⢿⣿⣷⣄⣀⣠⣼⣿⣿⣿⣿⣦⣀⣀⣠⣾⣿⡿"
|
||||
echo "⢠⣤⡀⠉⠻⠿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⠿⠟⢁⣤⣄"
|
||||
echo "⣼⣿⣿⣦⣄⡀⠘⠿⠻⠿⠟⠿⡿⠻⠿⠀⢀⣀⣤⣾⣿⣧⡀"
|
||||
echo "⠉⠉⠉⠉⠛⠿⣿⣷⣶⣤⣀⣀⣤⣶⣾⣿⠿⠟⠋⠉⠉⠛"
|
||||
echo "⢀⡀⠀⠀⢀⣀⣤⣴⣿⣿⠿⠿⣿⣿⣦⣤⣀⡀⠀⠀⢀⡀"
|
||||
echo "⢿⣿⣷⣾⠿⠟⠛⠋⠁⠀⠀⠀⠀⠈⠙⠛⠻⢿⣷⣶⣿⣿⠆"
|
||||
echo "⠘⢿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⡇⠀"
|
||||
echo ""
|
||||
echo "Setting sail to the open foaming sea!"
|
||||
echo "Arrrrr!"
|
||||
echo ""
|
||||
. ${openfoam}/OpenFOAM-12/etc/bashrc
|
||||
'';
|
||||
}
|
0
sims/.keep
Normal file
0
sims/.keep
Normal file
Loading…
Reference in a new issue