Giter Site home page Giter Site logo

nek5000 / nekrs Goto Github PK

View Code? Open in Web Editor NEW
254.0 22.0 68.0 86.16 MB

our next generation fast and scalable CFD code

Home Page: https://nek5000.mcs.anl.gov/

License: Other

CMake 1.89% Shell 1.09% Fortran 1.31% C++ 59.76% Makefile 0.03% C 35.92%
high-order hpc cfd exascale turbulence gpu

nekrs's Introduction

                 __    ____  _____
   ____   ___   / /__ / __ \/ ___/
  / __ \ / _ \ / //_// /_/ /\__ \ 
 / / / //  __// ,<  / _, _/___/ / 
/_/ /_/ \___//_/|_|/_/ |_|/____/  
COPYRIGHT (c) 2019-2023 UCHICAGO ARGONNE, LLC

Build Status License DOI

nekRS is a fast and scaleable computational fluid dynamics (CFD) solver targeting HPC applications. The code started as an early fork of libParanumal in 2019.

Capabilities:

  • Incompressible and low Mach-number Navier-Stokes + scalar transport
  • High-order curvilinear conformal spectral elements in space
  • Variable time step 2nd/3rd order semi-implicit time integration
  • MPI + OCCA (backends: CUDA, HIP, OPENCL, SERIAL/C++)
  • LES and RANS turbulence models
  • Arbitrary-Lagrangian-Eulerian moving mesh
  • Lagrangian phase model
  • Overlapping overset grids
  • Conjugate fluid-solid heat transfer
  • Various boundary conditions
  • VisIt & Paraview support for data analysis and visualization
  • Legacy interface to Nek5000

Build Instructions

Requirements:

  • Linux, Mac OS X (Microsoft WSL and Windows is not supported)
  • C++17/C99 compatible compiler
  • GNU/Intel/NVHPC Fortran compiler
  • MPI-3.1 or later
  • CMake version 3.18 or later

Download the latest release available under

https://github.com/Nek5000/nekRS/archive/refs/tags/v23.0.tar.gz 

or clone our GitHub repository:

https://github.com/Nek5000/nekRS.git

The master branch always points to the latest stable release while next provides an early preview of the next upcoming release (do not use in a production environment).

To build and install the code run:

CC=mpicc CXX=mpic++ FC=mpif77 ./nrsconfig [-DCMAKE_INSTALL_PREFIX=$HOME/.local/nekrs]

Build settings can be customized through CMake options passed to nrsconfig. Please remove the previous build and installation directory in case of an update.

Setting the Enviroment

Assuming you run bash and your install directory is $HOME/.local/nekrs, add the following line to your $HOME/.bash_profile:

export NEKRS_HOME=$HOME/.local/nekrs
export PATH=$NEKRS_HOME/bin:$PATH

then type source $HOME/.bash_profile in the current terminal window.

Run the Code

We try hard not to break userland but the code is evolving quickly so things might change from one version to another without being backward compatible. Please consult RELEASE.md before using the code.

cd $NEKRS_HOME/examples/turbPipePeriodic
mpirun -np 2 nekrs --setup turbPipe.par

For convenience we provide various launch scripts in the bin directory.

Documentation

For documentation, see our readthedocs page. For now it's just a dummy. We hope to improve it soon.

Discussion Group

Please visit GitHub Discussions. Here we help, find solutions, share ideas, and follow discussions.

Contributing

Our project is hosted on GitHub. To learn how to contribute, see CONTRIBUTING.md.

Reporting Bugs

All bugs are reported and tracked through Issues. If you are having trouble installing the code or getting your case to run properly, you should first vist our discussion group.

License

nekRS is released under the BSD 3-clause license (see LICENSE file). All new contributions must be made under the BSD 3-clause license.

Citing nekRS

NekRS, a GPU-Accelerated Spectral Element Navier-Stokes Solver

Acknowledgment

This research was supported by the Exascale Computing Project (17-SC-20-SC), a joint project of the U.S. Department of Energy's Office of Science and National Nuclear Security Administration, responsible for delivering a capable exascale ecosystem, including software, applications, and hardware technology, to support the nation's exascale computing imperative.

nekrs's People

Contributors

alikarakus avatar aprilnovak avatar luspi avatar malachitimothyphillips avatar nchristensen avatar pwang234 avatar ronrahaman avatar stgeke avatar yslan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nekrs's Issues

Add linAlg Class

This can include libP's linAlg (available in staging) and our own operations.

Avoid using system()

Currently our jit-compilation relies on system(). This can be troublesome (see e.g. #166) and lead to an undefined behaviour.

Updates:
d39e9d3: This commit ensures that we don't call system() provided that the user runs nrspre first.

  1. Cross compilation
    Our current --build-only will not work in a cross compiling context using a different front end (compiler, CPU-arch, GPU etc). In this case one has precompile on the compute node provided this is supported.

  2. OCCA relies on system() to jit-compile kernels. Using nrspre will precompile all required kernels. The actual will then load the kernels from cache. Another option (not available yet) would be to switch a true runtime compilation (e.g. NVRTC for Cuda). However this might be not supported for all backends. Moreover it doesn't allow caching.

Add scalar (temperature) transport

  • merge CDS PR into our libP next branch
  • update to latest BC treatment
  • add tolerance and diffusitivty to cds struct
  • add pointer to cds struct to ins struct
  • Integrate CDS solver into nekRS
  • add our own insSetup() and clean it up
  • add CDS to nekRS build system
  • pass number of scalars to mkSIZE
  • set nek's ifheat and npscal
  • read nek's boundaryID into mesh->EtoB
  • read in insSetup nek's cbc (for field 1 and 2) into ins->EtoB and cds->EtoB
  • add scalar support to nek_copyTo() and nek_copyFrom ()
  • call cdsSetup in nekrs.cpp:main
  • call cdsSolveStep in timerstepper:runPlan4
  • BC Treatment
  • Introduce ins->EtoB and cds->EtoB
  • Support Dirichlet + non-zero Neumann (cdsDirichletCondition/cdsNeumannCondition)
  • Add sM and sP to bcData struct
  • velocity value shall be accessible in cdsDirichletCondition and cdsNeumannCondition
  • scalar value shall be accessible in insDirichletCondition and insNeumannCondition
  • Support user specified source term
  • add scalarSource function pointer to udf sturct
  • call function pointer in timerstepper:runPlan4
  • Extend par reader
  • read tolerance and diffusivity and set correspondig internal libP parameter
  • Add RBC example

Eliminate all global + o(P) storage

There is some libP legacy during the setup phase:

Non-scaleable communication:

  • non-scaleable MPI_Allgather(...)
  • non-scaleable MPI_AllToAll(ellipticBuildContinuousHex3D, meshParallelConnect)

Non-scaleable data:

  • mesh->boundaryInfo holds (face vertex ids, boundaryID) for the whole mesh

Update to new libP version (staging branch)

  • switch to new bcData struct for all elements types
  • disable TOMBO support for tris, tets
  • remove makefile changes (except if they are HYPRE related)
  • don't build HYPRE by default
  • merge our libP changes into libP's experimental branch
  • port ins to staging (Noel)
  • update nekRS to staging

Encapsulate libP

Encapsulate into a namespace and load needed function dynamically at runtime.

Current dependencies:

  • mesh struct
  • setupAide struct
  • elliptic struct

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.