|
|
|
CFL3D Installation Notes - ODU Wahab Cluster
|
|
|
|
============================================
|
|
|
|
|
|
|
|
About the CFL3D Software
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
* Software home page: https://software.nasa.gov/software/LAR-16003-1
|
|
|
|
* Git repo: https://github.com/nasa/CFL3D
|
|
|
|
* Documentation: https://nasa.github.io/CFL3D/
|
|
|
|
|
|
|
|
Installation on ODU Cluster
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
* Base container: intel/2023.0 (ICC + Intel MPI)
|
|
|
|
|
|
|
|
* Following build instruction: https://nasa.github.io/CFL3D/Cfl3dv6/cfl3dv6_build.html#make
|
|
|
|
|
|
|
|
* Configuration: (This is called "Installation" stage in their lingo.)
|
|
|
|
From the `build` subfolder, issue: `./Install -noredirect -linux_compiler_flags=Intel`
|
|
|
|
|
|
|
|
* Build:
|
|
|
|
|
|
|
|
- `make cfl3d_seq`
|
|
|
|
- `make cfl3d_mpi`
|
|
|
|
- ... and so on. see the help doc issued by `make` with no target.
|
|
|
|
|
|
|
|
|
|
|
|
Usage Instruction
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
(Initially written for Dr. Adem Ibrahim, 2023-05-31)
|
|
|
|
|
|
|
|
Dr. Ibrahim,
|
|
|
|
|
|
|
|
Below is an instruction to run CFL3D on our cluster:
|
|
|
|
|
|
|
|
The software is currently installed in your home directory at the following path:
|
|
|
|
|
|
|
|
~/CFL3D/bin
|
|
|
|
|
|
|
|
**Prerequisites for running CFL3D**
|
|
|
|
|
|
|
|
This software was built on top of the "intel/2023.0" container,
|
|
|
|
so the first thing you must do is to invoke the following commands on the shell:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
module load container_env intel/2023.0
|
|
|
|
```
|
|
|
|
|
|
|
|
For serial runs, the main input file MUST be named to `cfl3d.inp`.
|
|
|
|
Assuming that this input file has existed in the current directory,
|
|
|
|
you will run the *serial* CFL3D software in this way:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
crun.intel ~/CFL3D/bin/cfl3d_seq
|
|
|
|
```
|
|
|
|
|
|
|
|
There is an MPI (parallel) version of CFL3D, called `cfl3d_mpi`
|
|
|
|
that has been installed into the the same folder.
|
|
|
|
|
|
|
|
|
|
|
|
This is an example of SLURM job script to run CFL3D in serial (sequential) mode:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
#!/bin/bash
|
|
|
|
#SBATCH --job-name cfl3d
|
|
|
|
#SBATCH --ntasks 1
|
|
|
|
|
|
|
|
module load container_env intel/2023.0
|
|
|
|
crun.intel ~/CFL3D/bin/cfl3d_seq
|
|
|
|
```
|
|
|
|
|
|
|
|
CFL3D has a lot of sample calculations located here:
|
|
|
|
https://nasa.github.io/CFL3D/Cfl3dv6/cfl3dv6_testcases.html
|
|
|
|
|
|
|
|
### Demo: Flat Plate Steady Flow
|
|
|
|
|
|
|
|
Source: https://nasa.github.io/CFL3D/Cfl3dv6/cfl3dv6_testcases.html#flatplate
|
|
|
|
|
|
|
|
Here are the commands I invoked:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
module load container_env intel/2023.0
|
|
|
|
|
|
|
|
mkdir -p ~/LIONS/Cfl3dv6/examples
|
|
|
|
cd ~/LIONS/Cfl3dv6/examples
|
|
|
|
|
|
|
|
# download and unpack the input files
|
|
|
|
wget https://nasa.github.io/CFL3D/Cfl3dv6/2DTestcases/Flatplate/Flatplate.tar.Z
|
|
|
|
tar xvf Flatplate.tar.Z
|
|
|
|
cd Flatplate/
|
|
|
|
|
|
|
|
# split the input files and generate the unformatted grid file,
|
|
|
|
# which is grdflat5.bin
|
|
|
|
crun.intel ~/CFL3D/bin/splitter < split.inp_1blk
|
|
|
|
|
|
|
|
# copy the main input file as "cfl3d.inp" before running:
|
|
|
|
cp grdflat5.inp cfl3d.inp
|
|
|
|
srun crun.intel ~/CLF3D/bin/cfl3d_seq
|
|
|
|
```
|
|
|
|
|
|
|
|
Files will be unpacked to a subfolder called `Flatplate`,
|
|
|
|
and this folder is also where the calculation is taking place.
|
|
|
|
The main output file will go to a file named `cfl3d.out`.
|
|
|
|
|
|
|
|
> FIXME: Run in parallel. Still has issue on Wahab.
|
|
|
|
|
|
|
|
### Update 2023-06-02
|
|
|
|
|
|
|
|
A few notes:
|
|
|
|
|
|
|
|
1. The CFL3D software can only run on Wahab as the hardware was new enough
|
|
|
|
for the instruction sets used in the code.
|
|
|
|
Please do not run this on Turing as it will quit with an error message.
|
|
|
|
|
|
|
|
2. With version 6, there is no more need to recompile CFL3D
|
|
|
|
every time you want to run with a different physical system (model).
|
|
|
|
The code now allocates arrays dynamically, so `precfl3d` is not needed anymore.
|
|
|
|
|
|
|
|
3. I included the source code in <<#TODO>> directory in case you want to play
|
|
|
|
around and modify the source code.
|
|
|
|
|
|
|
|
4. The code was built to NOT read from stdin. Please do not run in this way:
|
|
|
|
|
|
|
|
```
|
|
|
|
crun.intel ~/CFL3D/bin/cfl3d_seq < MY_INPUT.inp ### WON'T WORK
|
|
|
|
```
|
|
|
|
|
|
|
|
Instead, run it in two steps:
|
|
|
|
|
|
|
|
```
|
|
|
|
cp MY_INPUT.inp cfl3d.inp
|
|
|
|
crun.intel ~/CFL3D/bin/cfl3d_seq
|
|
|
|
```
|
|
|
|
|