cd /path/to/hwrf/wrfrun/sorc/ tar -xvf ../../HWRF_v4.0a_WRF.tar.gz
export WRF_NMM_CORE=1 export WRF_NMM_NEST=1 export PNETCDF_QUILT=1 export IBM_REDUCE_BUG_WORKAROUND=1
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
patch -p0 < ./patch-WRF
cd WRF echo 3 | ./configure
./compile nmm_real 2>&1 | tee -a build.log
ls -l main/*.exe
成功编译后将在目录main中生成两个可执行文件“real_nmm.exe”、“wrf.exe”。