Skip to main content
University of North Dakota
University of North Dakota
    • Admitted Students
    • Current Students
    • Families of Current Students
    • Faculty & Staff
    • Alumni
    • Email
    • Blackboard
    • Campus Connection
    • Employee Self-Service
    • Hawk Central
    • Degree Map
    • Zoom
  • Directory
  • Academics
  • Admissions
  • Student Life
  • Research
  • Athletics
  • Majors & Programs
  • About
University of North Dakota
  • Academics
  • Admissions
  • Student Life
  • Research
  • Athletics
  • Majors & Programs
  • About
  • Request Info
  • Visit
  • Apply
  • Request Info
  • Visit
  • Apply
  • Home
  • Research & Economic Development
  • Computational Research Center
  • Tutorials
  • Program Tutorials
  • WRF Build
Skip Section Navigation
  • Computational Research Center
  • HPC Cluster and DREAM Lab Show/hide children
    • Talon - High Performance Computing Cluster
    • DREAM Lab
  • Tutorials
  • Collaboration & Outreach
  • Support Show/hide children
    • End-User Support
    • Windows Software
  • Research Support

WRF Build


WRF is a complicated program. This is a Hodor install guide for WRF (not WPS) for WRF version 3.8, with CHEM 3.8, and KPP 2.1.

NOTE: This guide assumes you are using the BASH shell.


STEP ONE-A - GCC

NOTE: WRF will not compile using GCC version 6 or higher. It will only work with version 4.8.5. The GCC6 module loads automatically when you log in. If you unload it, the system will default to GCC 4.8.5.

First type the following module command to make sure the correct gcc version is running.

module rm gcc

you can check the version you are currently using with the following command

gcc -v

The version of gcc that we want to use is 4.8.5

If you have the correct version the last line of the output should look something like this:

gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)

STEP ONE-B - Setting Up Environment Variables

First, set these environment variables. It assumes that you are installing WRFV3 at the root of your home directory.

export EM_CORE=1 export NMM_CORE=0 export WRF_CHEM=1 export WRF_KPP=1 export NETCDF=$HOME/netcdf export YACC='/share/apps/byacc/bin/yacc -d' export FLEX=/usr/bin export FLEX_LIB_DIR=/usr/lib64 export KPP_HOME=$HOME/WRFV3/chem/KPP/kpp/kpp-2.1 export PATH=$NETCDF/bin:$KPP_HOME/bin:$PATH export SED=/usr/bin/sed export WRFIO_NCD_LARGE_FILE_SUPPORT=1 export WRF_SRC_ROOT_DIR=$HOME/WRFV3 export CC=gcc export CXX=g++ export FC=gfortran export F77=gfortran export FFLAGS=–m64 export FCFLAGS=–m64

STEP TWO - Build NETCDF libraries for C and Fortran.

NOTE: Make sure you compile this with the same compiler as you are going to build WRF with

The versions of NETCDF we will be using are:

  • 4.4.0 for the C library
  • 4.4.3 for the Fortran library

Download and extract the netcdf-4.4.0.tar.gz (https://github.com/Unidata/netcdf-c/releases/tag/v4.4.0) source for NETCDF C libraries to your home directory using the following commands.

cd ~/ wget https://github.com/Unidata/netcdf-c/archive/v4.4.0.tar.gz tar -xfv v4.4.0.tar.gz

Use this method to build the C library:

cd netcdf-c-4.4.0 ./configure _prefix=${NETCDF} _disable-dap make check install

You should see the “Congratulations! You have successfully installed netCDF!” message

Next move back to your home directory, download and extract the netcdf-fortran-4.4.3.tar.gz (https://github.com/Unidata/netcdf-fortran/releases/tag/v4.4.3) source for NETCDF Fortran libraries using the following commands.

cd ~/ wget https://github.com/Unidata/netcdf-fortran/archive/v4.4.3.tar.gz tar -xfv v4.4.3.tar.gz

Use this method to build the Fortran library:

Setup the environment variables with the following commands

NCDIR=${NETCDF} NFDIR=${NETCDF} CC=/usr/bin/gcc FC=/usr/bin/gfortran export LD_LIBRARY_PATH=${NCDIR}/lib:${LD_LIBRARY_PATH}

Start the configure and install with the following commands

cd netcdf-fortran-4.4.3 ./configure _prefix=${NFDIR} make check make install

This is Very similar to: "Building with shared libraries" https://www.unidata.ucar.edu/software/netcdf/docs/building_netcdf_fortran.html There are some differences in the environment variables used though.


STEP THREE - Get WRF Source Code

Copy the WRFV3.8.TAR.gz file to your home directory using the following command:

cp /share/apps/wrf-3.8-libs/tar-files/WRFV3.8.TAR.gz ~/WRFV3.8.TAR.gz

If not already in your home directory, change to your home directory using the following command:

cd ~/

Use the following command to uncompress the TAR file:

tar -xvf WRFV3.8.TAR.gz

STEP FOUR - Get Chem/KPP WRF Source Code

Change to the directory just created using the following command:

cd $HOME/WRFV3

Copy the WRFV3-Chem-3.8.TAR.gz file to the current directory:

cp/share/apps/wrf-3.8-libs/tar-files/WRFV3-Chem-3.8.TAR.gz ./WRFV3-Chem-3.8.TAR.gz

Use the following command to uncompress the TAR file:

tar -xvf WRFV3-Chem-3.8.TAR.gz

STEP FIVE - Prepare the KPP code for compilation

Change to the KPP source directory using the following command:

cd chem/KPP/kpp/kpp-2.1/src

Run the flex command to create the lex.yy.c file using the following command:

/usr/bin/flex scan.l

Edit the lex.yy.c file using VIM or nano, placing the following lines of code at the top of the file, and then save the file:

############ #define INITIAL 0 #define CMD_STATE 1 #define INC_STATE 2 #define MOD_STATE 3 #define INT_STATE 4 #define PRM_STATE 5 #define DSP_STATE 6 #define SSP_STATE 7 #define INI_STATE 8 #define EQN_STATE 9 #define EQNTAG_STATE 10 #define RATE_STATE 11 #define LMP_STATE 12 #define CR_IGNORE 13 #define SC_IGNORE 14 #define ATM_STATE 15 #define LKT_STATE 16 #define INL_STATE 17 #define MNI_STATE 18 #define TPT_STATE 19 #define USE_STATE 20 #define COMMENT 21 #define COMMENT2 22 #define EQN_ID 23 #define INL_CODE 24 ############

STEP SIX - Prepare for Parallel code for compilation

First, type the following module command to load MPICH for GCC.

module load mpich/ge/gcc/64/3.2rc2

To verify it loaded, type:

module list

If loaded, "mpich/ge/gcc/64/3.2rc2" should be seen in the last commands output.

Next Return to the WRF home directory by typing:

cd $HOME/WRFV3

Then, run configure program like so:

./configure

When prompted select option 34 for parallel GNU and 1 for basic nesting


STEP SEVEN - Compile KPP

Once configured, run the following command to compile KPP:

./compile 2>&1 | tee compile_kpp.log

Watch for errors while it is compiling

This will save the compiler output to a log file while compiling so you can examine it later should the compile fail.


STEP EIGHT - Compile WRF with CHEM

Assuming you only want to compile the "em_real" portion of WRF, type the following command (this process with take about an hour):

./compile em_real 2>&1 | tee compile_wrf.log

Watch for errors while it is compiling


STEP NINE - "Clean" if you have to

Should the program fail to compile, run the clean program in order to clean out all the build files.

./clean

Then go through the build logs to try to find the problem. Once you have identified and fixed the build problem, start the build process at the beginning of STEP 4.


Build complete

The build of WRF should now be complete assuming there were no errors in the compiling.


Submitting a job

Assuming you have all the data files you want to test and have run the real.exe you should be ready to start the submission process to have your program run on the cluster.

To submit a job get all of the files you are going to be testing and move them to the WRFV3/test/em_real/ folder.

Run the real.exe program to complete the final file prep which allows the actual WRF program to run and check to make sure it ran successfully. Create a script called realSubmit.sh in your WRFV3/test/em_real/ and enter the following script:

#!/bin/bash #####Number of nodes #SBATCH -N1 #####Number of tasks per node #SBATCH _ntasks-per-node=1 #SBATCH _job-name=WRFV3_Real #SBATCH _workdir=./ #SBATCH -o slurm_real_run_%j_output.txt #SBATCH -e slurm_real_run_%j_error.txt #Changes working directory to your home directory cd $SLURM_SUBMIT_DIR printf 'Changing to the working directory: %s\n\n' "$SLURM_SUBMIT_DIR" cd $SLURM_SUBMIT_DIR #Load Necessary Modules printf 'Loading slurm and mpich modules\n' module purge module load slurm/16.05.8 module load mpich/ge/gcc/64/3.2rc2 #Load Local NetCDF printf 'Loading Local NetCDF\n' export NETCDF=$HOME/netcdf export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export PATH=$NETCDF/bin:$PATH export WRF_SRC_ROOT_DIR=$HOME/WRFV3 printf '\tNetCDF:\t%s\n' "$NETCDF" printf '\tPath:\t%s\n\n' "$PATH" #Determine the job host names and write a hosts file srun -n $SLURM_NTASKS hostname | sort -u > $SLURM_JOB_ID.hosts #Run WRF using MPIRUN mpirun -np $SLURM_NTASKS -machinefile $SLURM_JOB_ID.hosts ./real.exe #Output the information in the rsl.error file tail rsl.error.0000

Now you should be able to submit the job to the queue using:

sbatch ./realSubmit.sh

When it is finished running in the tail message there should be something that says SUCCESS

Once the real.exe program has run successfully, create a shell script in your WRFV3/test/em_real/ folder called wrfSubmit.sh and use the following script:

#!/bin/bash #####Number of nodes #SBATCH -N2 #####Number of tasks per node #SBATCH _ntasks-per-node=8 #SBATCH _job-name=WRFV3_WRF #SBATCH _workdir=./ #SBATCH -o slurm_wrf_run_%j_output.txt #SBATCH -e slurm_wrf_run_%j_error.txt #Changes working directory to your home directory cd $SLURM_SUBMIT_DIR printf 'Changing to the working directory: %s\n\n' "$SLURM_SUBMIT_DIR" cd $SLURM_SUBMIT_DIR #Load Necessary Modules printf 'Loading slurm and mpich modules\n' module purge module load slurm/16.05.8 module load mpich/ge/gcc/64/3.2rc2 #Load Local NetCDF printf 'Loading Local NetCDF\n' export NETCDF=$HOME/netcdf export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export PATH=$NETCDF/bin:$PATH export WRF_SRC_ROOT_DIR=$HOME/WRFV3 printf '\tNetCDF:\t%s\n' "$NETCDF" printf '\tPath:\t%s\n\n' "$PATH" #Determine the job host names and write a hosts file srun -n $SLURM_NTASKS hostname | sort -u > $SLURM_JOB_ID.hosts #Run WRF using MPIRUN mpirun -np $SLURM_NTASKS -machinefile $SLURM_JOB_ID.hosts ./wrf.exe #Output the information in the rsl.error file tail rsl.error.0000

Now you should be able to submit the job to the queue using:

sbatch ./wrfSubmit.sh

Once this has finished running your output files should be in the WRFV3/test/em_real folder

Computational Research Center
Chester Fritz Library Room 334
3051 University Ave Stop 8399
Grand Forks, ND 58202-8399
P 701.777.6514
und.hpc.support@UND.edu

Hours

Mon.-Fri.: 9 a.m. - 5 p.m.

We use cookies on this site to enhance your user experience.

By clicking any link on this page you are giving your consent for us to set cookies, Privacy Information.

Ready to Enroll?

  • Request Information
  • Schedule a Visit
  • Apply Now
  • UND.info@UND.edu
  • 701.777.3000
  • Instagram
  • Facebook
  • YouTube
  • LinkedIn
  • X
  • Contact UND
  • Campus Map
  • Events Calendar
  • Community & Belonging
  • Explore Programs
  • Employment
  • Make a Gift
  • Campus Safety (SafeUND)
University of North Dakota

© 2025 University of North Dakota - Grand Forks, ND - Member of ND University System

  • Accessibility & Website Feedback
  • Terms of Use & Privacy
  • Notice of Nondiscrimination
  • Student Disclosure Information
  • Title IX
©