Skip to content
Merged
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
4 changes: 2 additions & 2 deletions SRC/FEMAIN/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ all: FastEddy
# Module=specific compile rules
# ################################################################################

../TIME_INTEGBRATION/CUDA/cuda_timeIntDevice.o: ../CUDA/cuda_timeIntDevice.cu \
../TIME_INTEGRATION.CUDA/cuda_RKschemes.cu
../TIME_INTEGRATION/CUDA/cuda_timeIntDevice.o: ../TIME_INTEGRATION/CUDA/cuda_timeIntDevice.cu \
../TIME_INTEGRATION/CUDA/cuda_RKschemes.cu
$(TEST_CU_CC) $(TEST_CU_CFLAGS) -dc $< -o $@

../IO/io.o: ../IO/io.c \
Expand Down
35 changes: 29 additions & 6 deletions SRC/FEMAIN/Makefile.hip
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ TEST_CU_CC = hipcc -Rpass-analysis=kernel-resource-usage --gpu-max-threads-per-b
ROCM_PATH ?= /opt/rocm
MPI_ROOT ?= ""
NETCDF_C_ROOT ?= ""
GPU_ARCH ?= gfx90a
#GPU_ARCH ?= gfx90a
GPU_ARCH ?= gfx942

# For compilation on NCAR's Casper or Derecho supercomputers use the OTHER_INCLUDES below
OTHER_INCLUDES = -I${MPI_ROOT}/include
Expand Down Expand Up @@ -121,6 +122,30 @@ TEST_OBJS = ./FastEddy.o \
../PARAMETERS/parameters.o \
../PARAMETERS/hashTable.o


################################################################################
# Extensions
################################################################################
WITH_GAD = 0
ifeq ($(WITH_GAD),1)
DEFINES+=-DGAD_EXT
INCLUDES+=-I../EXTENSIONS/GAD/ \
-I../EXTENSIONS/GAD/CUDA/
$(info WITH_GAD=1)
$(info ${DEFINES})
$(info ${INCLUDES})
endif

WITH_URBAN = 0
ifeq ($(WITH_URBAN),1)
DEFINES+=-DURBAN_EXT
INCLUDES+=-I../EXTENSIONS/URBAN/ \
-I../EXTENSIONS/URBAN/CUDA/
$(info WITH_URBAN=1)
$(info ${DEFINES})
$(info ${INCLUDES})
endif

################################################################################
# Targets
# ###############################################################################
Expand All @@ -137,7 +162,6 @@ hipify:
# Generic compile rules
# ################################################################################
%.o: %.cu
rm -rf ./FastEddy_devlink.o; \
$(TEST_CU_CC) $(TEST_CU_CFLAGS) -fgpu-rdc -c $< -o $@

.c.o:
Expand All @@ -149,7 +173,6 @@ hipify:

../TIME_INTEGRATION/CUDA/cuda_timeIntDevice.o: ../TIME_INTEGRATION/CUDA/cuda_timeIntDevice.cu \
../TIME_INTEGRATION/CUDA/cuda_RKschemes.cu
rm -rf ./FastEddy_devlink.o; \
$(TEST_CU_CC) $(TEST_CU_CFLAGS) -fgpu-rdc -c $< -o $@

../IO/io.o: ../IO/io.c \
Expand All @@ -160,7 +183,6 @@ hipify:
../FECUDA/fecuda_Device.o: ../FECUDA/fecuda_Device.cu \
../FECUDA/fecuda_Utils.cu \
../FECUDA/fecuda_PlugIns.cu
rm -rf ./FastEddy_devlink.o; \
$(TEST_CU_CC) $(TEST_CU_CFLAGS) -fgpu-rdc -c $< -o $@

../HYDRO_CORE/CUDA/cuda_hydroCoreDevice.o: ../HYDRO_CORE/CUDA/cuda_hydroCoreDevice.cu \
Expand All @@ -178,8 +200,8 @@ hipify:
../HYDRO_CORE/CUDA/cuda_canopyDevice.cu \
../HYDRO_CORE/CUDA/cuda_largeScaleForcingsDevice.cu \
../HYDRO_CORE/CUDA/cuda_moistureDevice.cu \
../HYDRO_CORE/CUDA/cuda_filtersDevice.cu
rm -rf ./FastEddy_devlink.o; \
../HYDRO_CORE/CUDA/cuda_filtersDevice.cu \
../HYDRO_CORE/CUDA/cuda_cellpertDevice.cu
$(TEST_CU_CC) $(TEST_CU_CFLAGS) -fgpu-rdc -c $< -o $@
################################################################################
# Generic Executable
Expand All @@ -190,6 +212,7 @@ FastEddy: COMP_FLAGS = ${TEST_CC} ${TEST_CFLAGS}
TEST_DEPENDENCIES = ${TEST_OBJS} ${TEST_HDRS} FastEddy_devlink.o

FastEddy_devlink.o:
rm -rf ./FastEddy_devlink.o; \
$(TEST_CU_CC) ${ARCH_CU_FLAGS} ${TEST_OBJS} ${TEST_LDFLAGS} ${TEST_LIBS} -fgpu-rdc --hip-link --emit-static-lib -o FastEddy_devlink.o
FastEddy: ${TEST_DEPENDENCIES}
${COMP_FLAGS} -o FastEddy ${TEST_OBJS} ./FastEddy_devlink.o ${TEST_LDFLAGS} ${TEST_LIBS}
Expand Down
2 changes: 1 addition & 1 deletion docs/Tutorials/cases_extensions/GAD.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Turbine array flow with the GAD model
=====================================

This is an idealized scenario of wind farm (3 x 3 turbine array) flow in neutrally stratified boundary layer with an evolving wind direction spanning 90 degrees of clockwise turning over 40 minutes. This idealized scenario demonstrates the generalized actuator disk (GAD) implementation in FastEddy (*Sanchez Gomez et al., 2024*), with the inclusion of a turbine yawing capability to align with the meteorological wind direction at the turbine's nacelle. The initial and boundary conditions for this idealized case are derived from a horizontally averaged LES run of a neutral ABL with a geostrophic wind aligned in the zonal direction (:math:`[U_g,V_g]=[10.0,0.0]` m/s) with and a latitude of :math:`40.0^{\circ}` N. The required datasets to run this tutorial are provided at this Zenodo record [TO BE UPDATED].
This is an idealized scenario of wind farm (3 x 3 turbine array) flow in neutrally stratified boundary layer with an evolving wind direction spanning 90 degrees of clockwise turning over 40 minutes. This idealized scenario demonstrates the generalized actuator disk (GAD) implementation in FastEddy (*Sanchez Gomez et al., 2024*), with the inclusion of a turbine yawing capability to align with the meteorological wind direction at the turbine's nacelle. The initial and boundary conditions for this idealized case are derived from a horizontally averaged LES run of a neutral ABL with a geostrophic wind aligned in the zonal direction (:math:`[U_g,V_g]=[10.0,0.0]` m/s) with and a latitude of :math:`40.0^{\circ}` N. The required datasets to run this tutorial are provided at this `Zenodo record <https://zenodo.org/records/17400464>`_.

The GAD model is activated by the selector (:code:`GADSelector = 1`) in the parameters file. This case uses the parameters file **tutorials/examples/Example09_GAD.in**. The lines below correspond to additions to the FastEddy parameters file necessary for turbine-inclusive LES runs. These correspond to the turbine specification file (:code:`turbineSpecsFile`) and a parameter to choose whether or not to write GAD forces to output files (:code:`GADoutputForces`).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Real-world downscaled FastEddy simulation with buildings
========================================================

This tutorial involves setting up a real-world downscaled simulation that includes resolved buildings and closely follows the same procedure outlined in section 4.1. Additional steps for including buildings are described below and all required input datasets to run this tutorial are provided in this Zenodo record [TO BE UPDATED].
This tutorial involves setting up a real-world downscaled simulation that includes resolved buildings and closely follows the same procedure outlined in section 4.1. Additional steps for including buildings are described below and all required input datasets to run this tutorial are provided in this `Zenodo record <https://zenodo.org/records/17419234>`_.

In the *GeoSpec* preprocessing step, and additional 2d field describing building heights above ground level is required in the georeference input NetCDF file.

Expand All @@ -27,7 +27,7 @@ The urban model capability has been implemented into FastEddy as an extension mo

make WITH_URBAN=1

The model used to represent buildings follows the immersed body force approach described in *Muñoz-Esparza et al., 2020*, and the tutorial case corresponds to the passage of a cold front (*Muñoz-Esparza et al. (2021, 2025)*. The figure below shows instantaneous wind speed and vertical velocity fields corresponding to 30min hindcast valid at 1500 UTC on November 11th 2011 (pre-frontal conditions). These horizontal contours are from the model's third vertical level, located at approximately 23 m above ground level.
The model used to represent buildings follows the immersed body force approach described in *Muñoz-Esparza et al., 2020*, and the tutorial case corresponds to the passage of a cold front (*Muñoz-Esparza et al. (2021, 2025)*. The figure below shows instantaneous wind speed and vertical velocity fields corresponding to 30min hindcast valid at 1500 UTC on November 11th 2019 (pre-frontal conditions). These horizontal contours are from the model's third vertical level, located at approximately 23 m above ground level.

.. image:: ../images/URBAN_tutorial_nz2_2panel.png
:width: 900
Expand Down
2 changes: 1 addition & 1 deletion docs/Tutorials/cases_real.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Real Cases

Real cases are performed by dynamically downscaling from a mesoscale model such as WRF that can provide initial and boundary conditions for a one-way nested FastEddy simulation. These mesoscale-LES coupled simulations require the following preprocessing steps:

* Step 1: **GeoSpec**. Georeference specification step. Expects a NetCDF-formatted file of location-specific, georeferenceed coordinate frame (lat/lon), projected Cartesian coordinate frame (x,y), elevation and land cover to establish a new NetCDF file of reference geolocated domain static characteristics specification including mapping of land cover category to roughness length.
* Step 1: **GeoSpec**. Georeference specification step. Expects a NetCDF-formatted file of location-specific, georeferenced coordinate frame (lat/lon), projected Cartesian coordinate frame (x,y), elevation and land cover to establish a new NetCDF file of reference geolocated domain static characteristics specification including mapping of land cover category to roughness length.
* Step 2: **SimGrid**. Simulation grid definition step. Defines a FastEddy gridded domain at a specificed grid spacing, location and extent using the file resulting from ther previous GeoSpec step and a FastEddy input parameters file (with targeted domain configuration parameters) as inputs.
* Step 3: **GenICBCs**. Generate initial conditions/boundary (ICBCs) conditions step. Creates ICBCs for a targeted FastEddy domain (defined in the SimGrid step) from a set of mesoscale model results.

Expand Down
6 changes: 3 additions & 3 deletions docs/Tutorials/cases_real/WRF_coupling_case0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ The first preprocessing step is **GeoSpec.py**. The purpose of this step is to c
int LandCover(y, x) ;
float cellsize ;

Two required fields from an external GIS source are the terrain topography (:code:`elevation`, in m above seal level) and the categorical land cover (:code:`LandCover`). Note that high-resolution fields are desirable as inputs. Terrain can usually be obtained from lidar data at a few meters resolution, while land cover datasets are typically coarser. For U.S. locations we recommend using the National Land Cover Database (NLCD) dataset that comes at a high resolution of 30 m. The input NetCDF file should also include the corresponding latitude and longitude 2d fields (:code:`lat` and :code:`lon`) provided as double precision due to the high-resolution typically used in these FastEddy simulations. All fields must be projected consistently and discretized in the projected coordinate frame at the same resolution (:code:`cellsize`, in m).
Two required fields from an external GIS source are the terrain topography (:code:`elevation`, in m above seal level) and the categorical land cover (:code:`LandCover`). Note that high-resolution fields are desirable as inputs. Terrain can usually be obtained from lidar data at a few meters resolution, while land cover datasets are typically coarser. For U.S. locations we recommend using the National Land Cover Database (NLCD) dataset that comes at a high resolution of 30 m. The input NetCDF file should also include the corresponding latitude and longitude 2d fields (:code:`lat` and :code:`lon`) provided as double precision due to the high-resolution typically used in these FastEddy simulations. All fields must be projected consistently and discretized in the projected coordinate frame at the same resolution (:code:`cellsize`, in m).

Input parameters to **GeoSpec.py** are specified in the **geospec.json** file. These include the path and file name of the input GIS data (*gis_root* and *gis_file*, respectively), along with other parameters including the output path of the standard format, reference NetCDF output file of this step (*FE_dataset_path*). In order to convert the land cover class into a roughness length value, a look-up table must be provided (*nlcd_name*). In this tutorial, a lookup table is provided based on the 16-class NLCD dataset (:code:`LandCoverMetadata_NLCD16.csv`). Finally, the JSON file entry *water_cats* needs to list all of the land cover categories that correspond to water bodies, so an appropriate roughness length parameterization can be used by FastEddy. Once all the required input files are ready, **GeoSpec.py** can be executed:

Expand Down Expand Up @@ -49,9 +49,9 @@ If the JSON file option *save_plot_opt* is set to 1, then a plot will be produce
:alt: Alternative text

.. note::

* Any user-provided georeference input NetCDF file should be oriented south-to-north and west-to-east. Georeferenced arrays created in a GIS tool may need to be flipped to orient them as south-north within the georeference input NetCDF file required here.
* The input GIS data should be projected consistently with the WRF mesoscale data be used to provide initial and boundary conditions to FastEddy.
* All three preprocessing steps make use of functions defined in *couplingUtils.py*. This file either needs to be present in the same directory as the preprocessing Python scripts or alternatively the location of *couplingUtils.py* must be included in your PYTHONPATH (e.g. using *sys.path.append*).
* The input GIS data should be projected consistently with the WRF mesoscale data that will be used to provide initial and boundary conditions.
* Optionally (:code:`gis_opt = 1`), the user can point to a WRF restart file, inheriting the WRF domain georeference specification as an alternative to providing the standard GIS-derived input file to **GeoSpec.py**. A WRF output file can also be used, but it needs to include the variable *ZNT* (roughness length) not present by default in WRF output files.

SimGrid
Expand Down
Binary file modified docs/Tutorials/images/CONCENTRATION-XY-dispersion_CBL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/CONCENTRATION-XY-dispersion_SBL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/CONCENTRATION-YZ-dispersion_CBL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/CONCENTRATION-YZ-dispersion_SBL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/GAD_tutorial.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/MEAN-PROF-convective.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/MEAN-PROF-neutral.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/MEAN-PROF-offshore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/MEAN-PROF-stable.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/PDF-offshore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/RealCase_figure_zplot1_25m.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/TURB-PROF-canopy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/TURB-PROF-convective.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/TURB-PROF-neutral.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/TURB-PROF-offshore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/TURB-PROF-stable.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/TimeEvolution_cldthres0.01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/URBAN_tutorial_nz2_2panel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XY-canopy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XY-convective.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XY-dispersion_CBL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XY-dispersion_SBL.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XY-neutral.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XY-offshore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XY-stable.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Tutorials/images/UVWTHETA-XZ-canopy.png
Binary file modified docs/Tutorials/images/UVWTHETA-XZ-convective.png
Binary file modified docs/Tutorials/images/UVWTHETA-XZ-neutral.png
Binary file modified docs/Tutorials/images/UVWTHETA-XZ-offshore.png
Binary file modified docs/Tutorials/images/UVWTHETA-XZ-stable.png
Binary file modified docs/Tutorials/images/VerticalProfiles.png
Binary file modified docs/Tutorials/images/VerticalProfilesTurb.png
6 changes: 3 additions & 3 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@

project = 'FastEddy'
author = 'UCAR/NCAR'
author_list = 'Sauer, J., D. Muñoz-Esparza'
version = '3.0'
author_list = 'Muñoz-Esparza, D., J. Sauer'
version = '4.0'
verinfo = version
release = f'{version}'
release_year = '2025'
release_date = f'{release_year}-04-15'
release_date = f'{release_year}-10-23'
copyright = f'{release_year}, {author}'

# -- General configuration ---------------------------------------------------
Expand Down
4 changes: 4 additions & 0 deletions docs/downloads.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ Downloads
- Release Date
- Tar File
- Release Notes
* - 4.0.0
- October 23, 2025
- `v4.0.0.tar.gz <https://github.com/NCAR/FastEddy-model/archive/refs/tags/v4.0.0.tar.gz>`_
- `v4.0.0 Release Notes <https://fasteddy-model.readthedocs.io/en/main_v4.0/release_notes.html>`_
* - 3.0.0
- April 15, 2025
- `v3.0.0.tar.gz <https://github.com/NCAR/FastEddy-model/archive/refs/tags/v3.0.0.tar.gz>`_
Expand Down
22 changes: 21 additions & 1 deletion docs/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,33 @@
Release Notes
*************

FastEddy-model Version 4.0 Release Notes (20251023)
===================================================

.. dropdown:: Repository, build, and test

* Two new tutorials for coupled mesoscale-LES real-world case including urban structure impacts and an idealized demonstration of wind farm flow under a wind shift
* New comprehensive model parameter reference guide
* Documentation updates to organization and content clarity
* IO module feature extensions providing output field attributes (units and description) in both netCDF and raw binary forms
* Modular framework and Makefile-based build process for model extensions (GAD and URBAN)

.. dropdown:: Bugfixes

* Fix to the Coriolis force term to properly pass down parameters to the GPU
* Introduction of limiters for instantaneous heat and moisture exchange coefficients to avoid unrealistically large values in surface-layer fluxes

.. dropdown:: Enhancements

* Urban model using an immersed body force method (IBFM) (urbanSelector=1)
* Wind turbine model using a generalized actuator disk (GAD) method (GADSelector=1)

FastEddy-model Version 3.0 Release Notes (20250415)
===================================================

.. dropdown:: Repository, build, and test

* 1 new tutorial for coupled mesoscale-LES real-world case
* One new tutorial for coupled mesoscale-LES real-world case
* Additional makefile for building for AMD GPUs with hip and corresponding documentation [Contributed by Dr. Joe Schoonover from Fluid Numerics]


Expand Down
Loading