---
title: WRF编译和安装
description: "1. 执行以下命令进入目录解压安装包。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpcindapp/prtg-osc/kylin_kunpeng_hwrf_v40a_02_0017.html
sourcePath: /source/zh/kunpenghpcs/hpcindapp/prtg-osc/kylin_kunpeng_hwrf_v40a_02_0017.html
indexId: 374580c80137082946d17c0f60f42278c2affe4620f52f8203f852c9e8ac726178
---
# WRF编译和安装

#### 操作步骤

1. 执行以下命令进入目录解压安装包。

```
cd
/path/to/hwrf/wrfrun/sorc/
tar -xvf ../../HWRF_v4.0a_WRF.tar.gz
```


2. 执行以下命令设置编译变量。

```
export WRF_NMM_CORE=1
export WRF_NMM_NEST=1
export PNETCDF_QUILT=1
export IBM_REDUCE_BUG_WORKAROUND=1
```


3. 执行以下命令新建补丁patch-WRF。

```
vim patch-WRF
```


  输入以下内容并保存。

```
diff -Nru WRF/arch/configure.defaults WRF_ok/arch/configure.defaults
--- WRF/arch/configure.defaults	2018-10-29 23:26:06.000000000 +0800
+++ WRF_ok/arch/configure.defaults	2023-07-21 09:33:39.503770420 +0800
@@ -1,3 +1,41 @@
+############################################################
+#ARCH    Linux aarch64, LLVM compiler OpenMPI # serial smpar dmpar dm+sm
+#
+DESCRIPTION     =      LLVM ($SFC/$SCC): AArch64
+DMPARALLEL      =      1
+OMPCPP          =      -D_OPENMP
+OMP             =      -fopenmp
+OMPCC           =      -fopenmp
+SFC             =      flang
+SCC             =      clang
+CCOMP           =      clang
+DM_FC           =      mpif90 -mllvm -prefetch-loop-depth=3 -mllvm -min-prefetch-stride=9 -mllvm -prefetch-distance=940 -mllvm -unroll-runtime=1 -mllvm -unroll-indirect-loads=true -mllvm -disable-loop-idiom-all
+DM_CC           =      mpicc -DMPI2_SUPPORT -DMPI2_SUPPORT -DMPI2_THREAD_SUPPORT
+FC              =      time $(DM_FC)
+CC              =      $(DM_CC) -DFSEEKO64_OK
+LD              =      $(FC)
+RWORDSIZE       =      $(NATIVE_RWORDSIZE)
+PROMOTION       =
+ARCH_LOCAL      =
+CFLAGS_LOCAL    =      -w -O3 -c -ffp-model=precise -Wno-return-type -I/usr/include/tirpc/
+LDFLAGS_LOCAL   =      -fopenmp -Wl,--build-id -ltirpc
+FCOPTIM         =      -O1 -ffast-math -fopenmp -Wno-return-type -fvectorize -funroll-loops -mcpu=tsv110 -lmathlib -fopenmp -ljemalloc -fstack-arrays -lstringlib -L$(KML_LIB) -lkm -lkm_l9 -lm -ffp-model=precise
+FCREDUCEDOPT    =      $(FCOPTIM)
+FCNOOPT         =      -O1 -fopenmp -frecursive -Wno-return-type
+FCDEBUG         =      $(FCNOOPT)
+FORMAT_FIXED    =      -ffixed-form
+FORMAT_FREE     =      -ffree-form
+FCSUFFIX        =
+BYTESWAPIO      =      -fconvert=big-endian
+FCBASEOPTS      =      -w $(FORMAT_FREE) $(BYTESWAPIO)
+MODULE_SRCH_FLAG =     -module $(WRF_SRC_ROOT_DIR)/main
+TRADFLAG        =      -traditional-cpp
+CPP             =      /lib/cpp -p $(TRADFLAG)
+AR              =      ar
+ARFLAGS         =      ru
+M4              =      m4 -B 14000
+RANLIB          =      ranlib
+CC_TOOLS        =      $(SCC)
###########################################################
#ARCH    Linux i486 i586 i686,  NEC SX sxf90 sxcc #serial smpar dmpar dm+sm
#
diff -Nru WRF/dyn_nmm/module_ADVECTION.F WRF_ok/dyn_nmm/module_ADVECTION.F
--- WRF/dyn_nmm/module_ADVECTION.F	2018-10-29 23:26:06.000000000 +0800
+++ WRF_ok/dyn_nmm/module_ADVECTION.F	2023-07-21 09:33:39.503770420 +0800
@@ -1043,6 +1043,9 @@
!
REAL,DIMENSION(KTS:KTE) :: AFR,DEL,DQL,DWL,E3,E4,PETDTK           &
&                          ,RFACE,RFACQ,RFACW,Q3,Q4,W3,W4
+      LOGICAL :: BOT,TOP
+      !REAL*8 :: DPDN,DPUP,RFACEK,RFACQK,RFACWK
+
!
!-----------------------------------------------------------------------
!***********************************************************************
@@ -1052,10 +1055,10 @@
!
!-----------------------------------------------------------------------
!$omp parallel do                                                       &
-!$omp& private(afr,afrp,bot,d2pqe,d2pqq,d2pqw,del,dep,detap,dpdn,dpup   &
+!$omp& private(afr,afrp,bot,d2pqe,d2pqq,d2pqw,del,dep,detap,rdpdn,rdpup   &
!$omp&        ,dql,dqp,dwl,dwp,e00,e3,e4,e4p,ep,ep0,haddt,i,j,k         &
-!$omp&        ,la,lap,llap,petdtk,q00,q3,q4,q4p,qp,qp0,rfacek,rfacqk    &
-!$omp&        ,rfacwk,rfc,rr,sumne,sumnq,sumnw,sumpe,sumpq,sumpw,top    &
+!$omp&        ,la,lap,llap,petdtk,q00,q3,q4,q4p,qp,qp0,rface,rfacq    &
+!$omp&        ,rfacw,rfc,rr,sumne,sumnq,sumnw,sumpe,sumpq,sumpw,top    &
!$omp&        ,w00,w3,w4,w4p,wp,wp0)
!-----------------------------------------------------------------------
!
@@ -1538,9 +1541,9 @@
DARE(I,J)=HBM3(I,J)*DX(I,J)*DY
ENDDO
ENDDO
+      if(advect_Q2) then
!$omp parallel do                                                       &
!$omp& private(i,j)
-      if(advect_Q2) then
DO J=MYJS_P3,MYJE_P3
DO I=MYIS_P2,MYIE_P2
E1(I,J,KTE)=MAX(Q2(I,J,KTE)*0.5,EPSQ2)
diff -Nru WRF/dyn_nmm/module_IGWAVE_ADJUST.F WRF_ok/dyn_nmm/module_IGWAVE_ADJUST.F
--- WRF/dyn_nmm/module_IGWAVE_ADJUST.F	2018-10-29 23:26:06.000000000 +0800
+++ WRF_ok/dyn_nmm/module_IGWAVE_ADJUST.F	2023-07-21 09:34:47.863770420 +0800
@@ -747,11 +747,10 @@
ENDDO
ENDDO
!
-!$omp parallel do                                                       &
-!$omp& private(i,j)
TASK_CHANGE=0.
-
+!$omp parallel do                                                       &
+!$omp& private(i,j)
DO J=MYJS_P2,MYJE_P2
DO I=MYIS_P2,MYIE_P2
PD(I,J)=PSDT(I,J)*DT+PD(I,J)
@@ -1146,7 +1145,7 @@
!
FCXM=1.
!
-!$omp parallel do
+!$omp parallel do                                                       &
!$omp& private(i,j)
DO J=MYJS_P2,MYJE_P2
DO I=MYIS_P2,MYIE_P2
```


4. 执行以下命令打入补丁patch-WRF。

```
patch -p0 < ./patch-WRF
```


5. 执行以下命令进入目录配置生成编译文件。

```
cd WRF
echo 3 | ./configure
```


6. 执行以下命令进行编译。

```
./compile nmm_real 2>&1 | tee -a build.log
```


7. 执行以下命令查看二进制文件。

```
ls -l main/*.exe
```


  成功编译后将在目录main中生成两个可执行文件“real_nmm.exe”、“wrf.exe”。
