cd /path/to/hwrf/wrfrun/sorc/ tar -xvf ../../HWRF_v4.0a_hwrf-utilities.tar.gz
export LAPACK_PATH=${KML_LIB}
vim patch-hwrf-utilities
输入以下内容并保存。
diff -Nur hwrf-utilities/arch/configure.defaults hwrf-utilities_ok/arch/configure.defaults --- hwrf-utilities/arch/configure.defaults 2018-07-21 04:53:22.144299000 +0800 +++ hwrf-utilities_ok/arch/configure.defaults 2023-07-21 14:51:24.575770420 +0800 @@ -1,4 +1,52 @@ ########################################################### +#ARCH Linux aarch64, Kunpeng Bisheng compiler HyperMPI KML # dmpar +DESCRIPTION = BISHENG +WRF_PNETCDF = -L$(WRF_DIR)/external/io_pnetcdf -lwrfio_pnf -L$(PNETCDF_LIB) -lpnetcdf +NETCDF_INCLUDE = -I$(NETCDF_INC) +NETCDF_LDFLAGS = -L$(NETCDF_LIB) -lnetcdf -lnetcdff +HMPI = -L$(MPI_LIB) -I$(MPI_INC) +MATHLIB = -L$(KML_LIB) -lkm_l9 -lmathlib -lm + +BYTE_ORDER = BIG_ENDIAN +SFC = mpifort $(HMPI) $(MATHLIB) -fopenmp -DLINUX -L$(LIBPNG_LIB) -lpng -L$(JASPER_LIB) -ljasper -std=legacy # -fno-range-check -ffree-line-length-none -fdefault-double-8 +SF90 = $(SFC) +SCC = mpicc $(HMPI) $(MATHLIB) -fopenmp -DLINUX -L$(LIBPNG_LIB) -lpng -L$(JASPER_LIB) -ljasper -Wno-int-conversion +OMP_FFLAGS = -fopenmp +DEBUG_FLAGS = -g -traceback +FFLAGS_TRACKER = -O3 -convert big_endian -qcheck -qarch=auto -qflttrap=ov:zero:inv:enbale # $(DEBUG_FLAGS) +CPP = cpp +CPPFLAGS = -P -traditional-cpp -D$(BYTE_ORDER) -DWRF -DLINUX -I$(WRF_DIR)/inc +FPPFLAGS = $(CPPFLAGS) +FPP = cpp -P -traditional-cpp +ARFLAGS = ru +M4 = m4 -G +RANLIB = ranlib + +DM_FC = mpifort $(MATHLIB) -DLINUX -std=legacy -fopenmp -DLINUX -L$(LIBPNG_LIB) -lpng -L$(JASPER_LIB) -ljasper # -fno-range-check -ffree-line-length-none -fdefault-double-8 +DM_F90 = $(DM_FC) +DM_CC = mpicc $(MATHLIB) -DMPI2_SUPPORT -DLINUX -L$(LIBPNG_LIB) -lpng -L$(JASPER_LIB) -ljasper -Wno-int-conversion + +FC = $(SFC) +F90 = mpifort $(HMPI) $(MATHLIB) -ffree-form -ffree-line-length-none -std=legacy -fopenmp -DLINUX -L$(LIBPNG_LIB) -lpng -L$(JASPER_LIB) -ljasper +CC = $(SCC) + +CFLAGS = -O0 -DLINUX -DUNDERSCORE -Dfunder -DFortranByte=char \ + -DFortranInt=int -DFortranLlong='long long' +FCFALGS = -ffree-line-length-none -std=legacy + +DEBUG_CFLAGS = + +ESSLLIB = -L$(KML_LIB)/kblas/omp -lkblas +MASSLIB = #-I$(R_LIB)/MASS +SED_FTN = $(WRF_DIR)/tools/standard.exe +LIB_EXTERNAL = -L$(WRF_DIR)/external/io_grib1 -lio_grib1 \ + -L$(WRF_DIR)/external/io_grib_share -lio_grib_share \ + -L$(WRF_DIR)/external/io_int -lwrfio_int \ + -L$(WRF_DIR)/external/esmf_time_f90 -lesmf_time \ + -L$(WRF_DIR)/external/RSL_LITE -lrsl_lite \ + -L$(WRF_DIR)/external/io_netcdf -lwrfio_nf \ + -L$(WRF_DIR)/external/fftpack/fftpack5 -lfftpack +########################################################### #ARCH AIX #dmpar # @@ -736,3 +784,4 @@ ################################################################## #ARCH NULL + diff -Nur hwrf-utilities/libs/src/g2/intmath.f hwrf-utilities_ok/libs/src/g2/intmath.f --- hwrf-utilities/libs/src/g2/intmath.f 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/g2/intmath.f 2023-07-21 14:51:10.647770420 +0800 @@ -165,7 +165,8 @@ function ilog2_2(i_in) implicit none integer(kind=2), value :: i_in - integer(kind=2)::ilog2_2,i + integer(kind=2)::ilog2_2 + integer::i ilog2_2=0 i=i_in if(i<=0) return @@ -200,7 +201,8 @@ function ilog2_1(i_in) implicit none integer(kind=1), value :: i_in - integer(kind=1)::ilog2_1,i + integer(kind=1)::ilog2_1 + integer::i ilog2_1=0 i=i_in if(i<=0) return diff -Nur hwrf-utilities/libs/src/hwrfutil/decomp_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/decomp_module.f90 --- hwrf-utilities/libs/src/hwrfutil/decomp_module.f90 2014-02-22 09:25:07.110185000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/decomp_module.f90 2023-07-21 14:51:10.647770420 +0800 @@ -16,18 +16,18 @@ integer :: ips,ipe,jps,jpe,kps,kpe contains procedure same_dims - procedure free => free_decomp - procedure memdims => memdims_decomp - procedure validate_dims => validate_dims_decomp - procedure my_rank => my_rank_decomp - procedure ranks_for => ranks_for_decomp - procedure decomp_rank => decomp_rank_decomp + procedure::free => free_decomp + procedure::memdims => memdims_decomp + procedure::validate_dims => validate_dims_decomp + procedure::my_rank => my_rank_decomp + procedure::ranks_for => ranks_for_decomp + procedure::decomp_rank => decomp_rank_decomp end type decomp type, extends(decomp) :: decomp_dummy ! This exists as a workaround for an Intel compiler bug contains - procedure free => free_decomp_dummy + procedure::free => free_decomp_dummy end type decomp_dummy contains diff -Nur hwrf-utilities/libs/src/hwrfutil/fileop_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/fileop_module.f90 --- hwrf-utilities/libs/src/hwrfutil/fileop_module.f90 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/fileop_module.f90 2023-07-21 14:51:10.647770420 +0800 @@ -352,7 +352,8 @@ logical, intent(in) :: lstat,quiet ! locals character(len=flen+1) :: cfilename - integer(kind=C_INT64_T) :: iflags,ilstat,iquiet + integer(kind=C_INT64_T) :: ilstat,iquiet + integer :: iflags s%lstat_flag=lstat s%initialized=.true. diff -Nur hwrf-utilities/libs/src/hwrfutil/interp_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/interp_module.f90 --- hwrf-utilities/libs/src/hwrfutil/interp_module.f90 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/interp_module.f90 2023-07-21 14:51:10.647770420 +0800 @@ -34,11 +34,11 @@ type interpolator contains - procedure clear => clear_interpolator - procedure free => free_interpolator - procedure prep => prep_interpolator - procedure scalar => scalar_interpolator ! scalar (not wind) interpolation - procedure hwind => hwind_interpolator ! horizontal wind interpolation + procedure::clear => clear_interpolator + procedure::free => free_interpolator + procedure::prep => prep_interpolator + procedure::scalar => scalar_interpolator ! scalar (not wind) interpolation + procedure::hwind => hwind_interpolator ! horizontal wind interpolation end type interpolator type, extends(interpolator) :: averager2d_real @@ -51,10 +51,10 @@ class(decomp), pointer :: dec=>NULL() real, pointer :: lat(:,:,:)=>NULL(), lon(:,:,:)=>NULL() contains - procedure clear => clear_averager2d_real - procedure free => free_averager2d_real - procedure prep => prep_averager2d_real - procedure scalar => scalar_averager2d_real + procedure::clear => clear_averager2d_real + procedure::free => free_averager2d_real + procedure::prep => prep_averager2d_real + procedure::scalar => scalar_averager2d_real end type averager2d_real type, extends(interpolator) :: bilinear_real @@ -86,13 +86,13 @@ logical, pointer :: ihave(:)=>NULL(), jhave(:)=>NULL() contains - procedure free => free_bilinear_real - procedure prep => prep_bilinear_real - procedure scalar => scalar_bilinear_real - procedure hwind => hwind_bilinear_real + procedure::free => free_bilinear_real + procedure::prep => prep_bilinear_real + procedure::scalar => scalar_bilinear_real + procedure::hwind => hwind_bilinear_real - procedure masked_interp => masked_bilinear_real - procedure unmasked_interp => unmasked_bilinear_real + procedure::masked_interp => masked_bilinear_real + procedure::unmasked_interp => unmasked_bilinear_real end type bilinear_real interface init_bilinear_real diff -Nur hwrf-utilities/libs/src/hwrfutil/Makefile hwrf-utilities_ok/libs/src/hwrfutil/Makefile --- hwrf-utilities/libs/src/hwrfutil/Makefile 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/Makefile 2023-07-21 14:51:10.647770420 +0800 @@ -5,7 +5,7 @@ include ../../../configure.hwrf CFLAGS+=$(NETCDF_INCLUDE) -FFLAGS+=-I. $(NETCDF_INCLUDE) +FFLAGS+=-I. $(NETCDF_INCLUDE) -I../../../tools/hwrf_afos LDFLAGS+=$(NETCDF_LDFLAGS) $(NETCDF_INCLUDE) include ../../../pure-openmp.inc diff -Nur hwrf-utilities/libs/src/hwrfutil/out4wave_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/out4wave_module.f90 --- hwrf-utilities/libs/src/hwrfutil/out4wave_module.f90 2014-02-22 09:25:07.110185000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/out4wave_module.f90 2023-07-21 14:51:10.647770420 +0800 @@ -19,11 +19,11 @@ ! NOTE: If you add pointers, make sure you update ! invalidate4wave, close4wave and open4wave contains - procedure free => close4wave - procedure close => close4wave - procedure invalidate => invalidate4wave - procedure write => write4wave - procedure read => read4wave + procedure::free => close4wave + procedure::close => close4wave + procedure::invalidate => invalidate4wave + procedure::write => write4wave + procedure::read => read4wave end type data4wave interface init_data4wave diff -Nur hwrf-utilities/libs/src/hwrfutil/projection_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/projection_module.f90 --- hwrf-utilities/libs/src/hwrfutil/projection_module.f90 2014-03-11 03:10:00.878970000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/projection_module.f90 2023-07-21 14:51:10.651770420 +0800 @@ -718,7 +718,7 @@ else clat=sqrt(1-slat**2) clon=min(1.,max(-1.,(this%clat0*clatr*clonr - this%slat0*slatr)/clat)) - hs=hi*sign(1.,this%x0+1-this%is1) + hs=hi*sign(0.1D0,this%x0+1-this%is1) if(abs(hs)/=1) hs=1 this%lon1=mod(this%lon0+hs*RADDEG*acos(min(1.,max(-1.,clon)))+3600,360.) this%lat1=asin(max(-1.,min(1.,slat)))*RADDEG @@ -822,7 +822,7 @@ this%slat1=sin(this%lat1*DEGRAD) this%clat1=cos(this%lat1*DEGRAD) - this%HS0=sign(1.,mod(this%lon1-this%lon0+180+3600,360.)-180) + this%HS0=sign(0.1D0,mod(this%lon1-this%lon0+180+3600,360.)-180) this%clon1=cos((this%lon1-this%lon0)*DEGRAD) this%slatr=this%clat0*this%slat1-this%slat0*this%clat1*this%clon1 @@ -928,7 +928,7 @@ bigi: do i=ips,ipe vlat=lat(i,j,k)*DEGRAD vlon=lon(i,j,k)*DEGRAD - hs=sign(1.,mod(lon(i,j,k)-this%lon0+180+3600,360.)-180.) + hs=sign(0.1D0,mod(lon(i,j,k)-this%lon0+180+3600,360.)-180.) clon=cos(vlon-cenlon) slat=sin(vlat) clat=cos(vlat) @@ -952,7 +952,7 @@ rot: if(present(crot)) then if_grid_winds: if(.not. this%earth_winds) then rotpole: if(clatr<=0) then - crot(i,j,k)=-sign(1.,slatr*this%slat0) + crot(i,j,k)=-sign(0.1D0,slatr*this%slat0) srot(i,j,k)=0 else slon=sin(vlon-cenlon) diff -Nur hwrf-utilities/libs/src/hwrfutil/swathgen_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/swathgen_module.f90 --- hwrf-utilities/libs/src/hwrfutil/swathgen_module.f90 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/swathgen_module.f90 2023-07-21 14:51:10.651770420 +0800 @@ -254,7 +254,7 @@ endif allocate(character(len=writesize) :: writeme) - !$OMP PARALLEL DO PRIVATE(lengrib,i,ivar) DEFAULT(SHARED) + !OMP PARALLEL DO PRIVATE(lengrib,i,ivar) DEFAULT(SHARED) do ivar=1,num_vars !write(0,*) 'copy var',ivar lengrib=lengribs(ivar) @@ -274,7 +274,7 @@ writeme(i+4+lengrib:i+4+lengrib+3)=writeme(i:i+3) endif enddo - !$OMP END PARALLEL DO + !OMP END PARALLEL DO 19 format('Write ',I0,' bytes to grib file at pos=',I0,'.') write(0,19) len(writeme),this%grib_pos @@ -390,7 +390,7 @@ enddo enddo -20 format('var ',A,': mean=',F0.3,', lon=',I,' ... ',I0,' by ',I0,', lat=',I0,' ... ',I0,' by ',I0,', iscan=',I0,', nmask=',I0) +20 format('var ',A,': mean=',F0.3,', lon=',I0,' ... ',I0,' by ',I0,', lat=',I0,' ... ',I0,' by ',I0,', iscan=',I0,', nmask=',I0) if(nmask>0) then print 20,trim(swath_wrfname(ivar)),sum/nmask,ilon0,ilon1,idlon, ilat0,ilat1,idlat, iscan, nmask else diff -Nur hwrf-utilities/libs/src/hwrfutil/tcf_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/tcf_module.f90 --- hwrf-utilities/libs/src/hwrfutil/tcf_module.f90 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/tcf_module.f90 2023-07-21 14:51:10.651770420 +0800 @@ -193,8 +193,8 @@ type(atcf), intent(in) :: atcf0 integer :: istmtyp character*(*) :: model_name - character*(19), parameter, dimension(3) :: stmtyp= & - (/'TROPICAL DEPRESSION','TROPICAL STORM','HURRICANE'/) + character(len=19), parameter, dimension(3) :: stmtyp= & + (/character(len=19) :: 'TROPICAL DEPRESSION','TROPICAL STORM','HURRICANE'/) integer :: imonth character*(3), parameter :: month(12) = & diff -Nur hwrf-utilities/libs/src/hwrfutil/vardata_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/vardata_module.f90 --- hwrf-utilities/libs/src/hwrfutil/vardata_module.f90 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/vardata_module.f90 2023-07-21 14:51:10.651770420 +0800 @@ -18,18 +18,18 @@ logical, pointer :: mask(:,:,:)=>NULL() ! mask: optional, allocated by alloc_mask logical :: ownmask = .true. ! am I responsible for deallocating mask? contains - procedure alloc => alloc_vardata - procedure getmask => getmask_vardata - procedure getreal => getreal_vardata - procedure getint => getint_vardata - procedure alloc_mask => alloc_mask_vardata - procedure is_masked => is_masked_vardata - procedure is_loaded => is_loaded_vardata + procedure::alloc => alloc_vardata + procedure::getmask => getmask_vardata + procedure::getreal => getreal_vardata + procedure::getint => getint_vardata + procedure::alloc_mask => alloc_mask_vardata + procedure::is_masked => is_masked_vardata + procedure::is_loaded => is_loaded_vardata !procedure load => load_vardata !procedure save => save_vardata - procedure free => free_vardata - procedure average => average_vardata - procedure fill_mask => fill_mask_vardata + procedure::free => free_vardata + procedure::average => average_vardata + procedure::fill_mask => fill_mask_vardata end type vardata interface init_vardata @@ -41,11 +41,11 @@ real, pointer :: rdata(:,:,:) logical :: owns contains - procedure getreal => getreal_vardata_real - procedure alloc => alloc_vardata_real - procedure free => free_vardata_real - procedure average => average_vardata_real - procedure is_loaded => is_loaded_vardata_real + procedure::getreal => getreal_vardata_real + procedure::alloc => alloc_vardata_real + procedure::free => free_vardata_real + procedure::average => average_vardata_real + procedure::is_loaded => is_loaded_vardata_real end type vardata_real interface init_vardata_real @@ -58,11 +58,11 @@ integer, pointer :: idata(:,:,:) logical :: owns contains - procedure getint => getint_vardata_int - procedure alloc => alloc_vardata_int - procedure free => free_vardata_int - procedure average => average_vardata_int - procedure is_loaded => is_loaded_vardata_int + procedure::getint => getint_vardata_int + procedure::alloc => alloc_vardata_int + procedure::free => free_vardata_int + procedure::average => average_vardata_int + procedure::is_loaded => is_loaded_vardata_int end type vardata_int interface init_vardata_int diff -Nur hwrf-utilities/libs/src/hwrfutil/wrfdiag_module.f90 hwrf-utilities_ok/libs/src/hwrfutil/wrfdiag_module.f90 --- hwrf-utilities/libs/src/hwrfutil/wrfdiag_module.f90 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/libs/src/hwrfutil/wrfdiag_module.f90 2023-07-21 14:51:10.651770420 +0800 @@ -69,9 +69,9 @@ type(proj_nmme), pointer :: eproj(:) type(decomp) :: de_ij, de_ijk_masswind, de_ijk_interface contains - procedure close => close_file - procedure free => close_file ! to match other classes - procedure open => open_file + procedure::close => close_file + procedure::free => close_file ! to match other classes + procedure::open => open_file procedure free_latlonrot procedure make_latlonrot procedure latlon_bounds @@ -105,9 +105,9 @@ real, pointer :: rdata(:,:,:)=>NULL() integer, pointer :: idata(:,:,:)=>NULL() contains - procedure open => open_var - procedure load => load_var - procedure free => free_wrfdiag_var + procedure::open => open_var + procedure::load => load_var + procedure::free => free_wrfdiag_var procedure set_time procedure alloc_real procedure alloc_int diff -Nur hwrf-utilities/libs/src/w3nco/gbyte.f hwrf-utilities_ok/libs/src/w3nco/gbyte.f --- hwrf-utilities/libs/src/w3nco/gbyte.f 2016-04-01 22:25:17.669181000 +0800 +++ hwrf-utilities_ok/libs/src/w3nco/gbyte.f 2023-07-21 14:51:10.651770420 +0800 @@ -66,7 +66,7 @@ MASKS(NBITSW) = -1 IFIRST = 0 ENDIF -!$OMP CRITICAL +!$OMP END CRITICAL ENDIF C C NBITS MUST BE LESS THAN OR EQUAL TO NBITSW diff -Nur hwrf-utilities/tools/bufr_remorest/remorest.f hwrf-utilities_ok/tools/bufr_remorest/remorest.f --- hwrf-utilities/tools/bufr_remorest/remorest.f 2013-12-04 01:41:22.539598000 +0800 +++ hwrf-utilities_ok/tools/bufr_remorest/remorest.f 2023-07-21 14:51:10.651770420 +0800 @@ -199,7 +199,9 @@ CALL W3TAGB('BUFR_REMOREST',2013,0074,0061,'NP22') - READ(11,'(Q,A)',END=1) NBYTES,FILE(1:NBYTES) +C READ(11,'(Q,A)',END=1) NBYTES,FILE(1:NBYTES) + READ(11,'(A)',END=1) FILE + NBYTES=LEN_TRIM(FILE) 1 CONTINUE diff -Nur hwrf-utilities/tools/grb2index/grb2index.f hwrf-utilities_ok/tools/grb2index/grb2index.f --- hwrf-utilities/tools/grb2index/grb2index.f 2017-07-21 02:22:23.346804000 +0800 +++ hwrf-utilities_ok/tools/grb2index/grb2index.f 2023-07-21 14:51:10.651770420 +0800 @@ -180,7 +180,7 @@ C C$$$ CHARACTER CGB*(*) - CHARACTER CD8*8,CT10*10,HOSTNAM*15 + CHARACTER CD8*8,CT10*10,HOSTNAME*15 CHARACTER CHEAD(2)*81 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C FILL FIRST 81-BYTE HEADER @@ -197,7 +197,7 @@ CHEAD(1)(42:47)='GB2IX1' !CHEAD(1)(49:54)=CGB(NCGB2:NCGB1-2) CHEAD(1)(49:54)=' ' - CHEAD(1)(56:70)=HOSTNAM(HOSTNAME) + CHEAD(1)(56:70)=HOSTNAME CHEAD(1)(72:80)='grb2index' CHEAD(1)(81:81)=CHAR(10) C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nur hwrf-utilities/tools/hwrf_aux_rw/Makefile hwrf-utilities_ok/tools/hwrf_aux_rw/Makefile --- hwrf-utilities/tools/hwrf_aux_rw/Makefile 2012-11-20 00:16:14.474329000 +0800 +++ hwrf-utilities_ok/tools/hwrf_aux_rw/Makefile 2023-07-21 14:51:10.651770420 +0800 @@ -18,7 +18,7 @@ -L$(WRF_DIR)/external/io_grib_share -lio_grib_share \ -L$(WRF_DIR)/external/esmf_time_f90 -lesmf_time \ -L$(WRF_DIR)/external/io_netcdf -lwrfio_nf \ - -L$(WRF_DIR)/external/atm_ocn -latm_ocn +# -L$(WRF_DIR)/external/atm_ocn -latm_ocn LIBS = $(WRF_LIB) $(NETCDF_LDFLAGS) diff -Nur hwrf-utilities/tools/hwrf_bdy_update/Makefile hwrf-utilities_ok/tools/hwrf_bdy_update/Makefile --- hwrf-utilities/tools/hwrf_bdy_update/Makefile 2013-10-02 05:54:12.817535000 +0800 +++ hwrf-utilities_ok/tools/hwrf_bdy_update/Makefile 2023-07-21 14:51:10.651770420 +0800 @@ -23,6 +23,11 @@ ${WRF_DIR}/frame/module_internal_header_util.o \ ${WRF_DIR}/frame/pack_utils.o \ ${WRF_DIR}/external/esmf_time_f90/module_utility.o \ + ${WRF_DIR}/external/io_grib2/*.o\ + ${WRF_DIR}/external/io_grib2/g2lib/*.o \ + ${WRF_DIR}/external/atm_ocn/*.o \ + ${WRF_DIR}/external/io_grib2/bacio-1.3/*.o\ + ../../libs/src/w3nco/w3fi71.o ../../libs/src/w3nco/r63w72.o\ $(WRF_GRIB2) $(WRF_PNETCDF) EXEC = ../../exec/hwrf_bdy_update.exe diff -Nur hwrf-utilities/tools/hwrf_ensemble/mpi-interface.f90 hwrf-utilities_ok/tools/hwrf_ensemble/mpi-interface.f90 --- hwrf-utilities/tools/hwrf_ensemble/mpi-interface.f90 2016-10-26 05:18:54.227314000 +0800 +++ hwrf-utilities_ok/tools/hwrf_ensemble/mpi-interface.f90 2023-07-21 14:51:10.651770420 +0800 @@ -236,8 +236,8 @@ ! Define format statements -500 format('MPI_INTERFACE_DEADLOCK: Processor ID: ', i6, ' Sent: ', f, & - & ' Received: ', f) +500 format('MPI_INTERFACE_DEADLOCK: Processor ID: ', i6, ' Sent: ', f6.0, & + & ' Received: ', f6.0) !================================================================= diff -Nur hwrf-utilities/tools/hwrf_ens_prob/atcf_prob_module.F90 hwrf-utilities_ok/tools/hwrf_ens_prob/atcf_prob_module.F90 --- hwrf-utilities/tools/hwrf_ens_prob/atcf_prob_module.F90 2016-03-17 01:03:27.136076000 +0800 +++ hwrf-utilities_ok/tools/hwrf_ens_prob/atcf_prob_module.F90 2023-07-21 14:51:10.651770420 +0800 @@ -491,7 +491,7 @@ ierr=gerr return endif - do while(search.next()) + do while(search%next()) if(ensid<=m%ensmax) then call m%atcf(ensid)%read_atcf(search%match,max_atcf_records,ierr1,& reflon,have_reflon,minlat,maxlat,minlon,maxlon,atime) diff -Nur hwrf-utilities/tools/hwrf_ens_prob/ens_prob_module.F90 hwrf-utilities_ok/tools/hwrf_ens_prob/ens_prob_module.F90 --- hwrf-utilities/tools/hwrf_ens_prob/ens_prob_module.F90 2016-03-17 01:03:27.136076000 +0800 +++ hwrf-utilities_ok/tools/hwrf_ens_prob/ens_prob_module.F90 2023-07-21 14:51:10.651770420 +0800 @@ -1858,6 +1858,8 @@ real, parameter :: s2pi=2.50662827463 ! sqrt(2*pi) integer :: istart,istop real :: ilonmax,ilonmin,norm1,norm2 + real :: RAD + RAD=PI/180. 10 format('Get dist from P=(',F0.1,',',F0.1,') to L1=(',F0.1,',',F0.1, & ') L2=(',F0.1,',',F0.1,').') @@ -1899,7 +1901,7 @@ !$OMP PARALLEL DO PRIVATE(i,j,px,py,dist,prob,istart,istop) do j=1,ny - dist=abs(maxdist*1.1*cosd(lats(j))/Rearth*180/pi / (lons(2)-lons(1))) + dist=abs(maxdist*1.1*cos(lats(j)*RAD)/Rearth*180/pi / (lons(2)-lons(1))) istart=min(nx,max(1, floor(ilonmin-dist) )) istop=min(nx,max(1, floor(ilonmax+dist) )) @@ -1932,7 +1934,7 @@ !$OMP dy2,prob,istart,istop) do j=1,ny - dist=abs(maxdist*1.1*cosd(lats(j))/Rearth*180/pi / (lons(2)-lons(1))) + dist=abs(maxdist*1.1*cos(lats(j)*RAD)/Rearth*180/pi / (lons(2)-lons(1))) istart=min(nx,max(1, floor(ilonmin-dist) )) istop=min(nx,max(1, floor(ilonmax+dist) )) diff -Nur hwrf-utilities/tools/hwrf_ens_prob/Makefile hwrf-utilities_ok/tools/hwrf_ens_prob/Makefile --- hwrf-utilities/tools/hwrf_ens_prob/Makefile 2016-04-09 02:08:44.944706000 +0800 +++ hwrf-utilities_ok/tools/hwrf_ens_prob/Makefile 2023-07-21 14:51:10.651770420 +0800 @@ -1,9 +1,9 @@ include ../../configure.hwrf -PROBOBJS = hwrf_ens_prob.o ens_prob_module.o ens_output_module.o +PROBOBJS = hwrf_ens_prob.o ens_prob_module.o ens_output_module.o ../hwrf_afos/ATAN2D.o PROBEXEC=../../exec/hwrf_ens_prob.exe -ATCFOBJS = atcf_prob_module.o atcf_prob.o ens_prob_module.o ens_output_module.o +ATCFOBJS = atcf_prob_module.o atcf_prob.o ens_prob_module.o ens_output_module.o ../hwrf_afos/ATAN2D.o ATCFEXEC=../../exec/hwrf_atcf_prob.exe EXECS=$(PROBEXEC) $(ATCFEXEC) diff -Nur hwrf-utilities/tools/hwrf_htcfstats/stats.f90 hwrf-utilities_ok/tools/hwrf_htcfstats/stats.f90 --- hwrf-utilities/tools/hwrf_htcfstats/stats.f90 2012-04-30 23:55:45.465906000 +0800 +++ hwrf-utilities_ok/tools/hwrf_htcfstats/stats.f90 2023-07-21 14:51:10.651770420 +0800 @@ -243,7 +243,7 @@ inited=.true. endif - call etime(ymdh,temp) + call etime_(ymdh,temp) epochtime=real(temp,kind=8) end function epochtime @@ -820,7 +820,7 @@ real, intent(in) :: hourstep, trackwidth, intenswidth integer :: iwindlat,iwindlon,ipreslat,ipreslon,icentlat,icentlon - type(data) :: data + type(data) :: data1 integer :: ndata real(kind=8), parameter :: s2h=3600.0 real(kind=8) :: start,now @@ -856,20 +856,20 @@ now=start+hour*real(3600.0,kind=8) ! Get the "peak" wind and pressure: - data=htcf_get(hs,nh,now-intenswidth/2,now+intenswidth/2,now, & + data1=htcf_get(hs,nh,now-intenswidth/2,now+intenswidth/2,now, & locs=.false.,vals=.true.,sort=.true.) - windpeak=data%swind(1+nint(windpercentile/100.0*data%N)) - prespeak=data%spres(1+nint(prespercentile/100.0*data%N)) - call free_data(data) + windpeak=data1%swind(1+nint(windpercentile/100.0*data1%N)) + prespeak=data1%spres(1+nint(prespercentile/100.0*data1%N)) + call free_data(data1) ! Get the wind, pressure and center positions: - data=htcf_get(hs,nh,now-trackwidth/2,now+trackwidth/2,now, & + data1=htcf_get(hs,nh,now-trackwidth/2,now+trackwidth/2,now, & locs=.true.,vals=.false.,sort=.false.) ! Calculate the mean locations and output the track if(present(windfile)) then - iwindlat=nint(meanreal(data%N,data%wlat)*10.0) - iwindlon=nint(meanreal(data%N,data%wlon)*10.0) + iwindlat=nint(meanreal(data1%N,data1%wlat)*10.0) + iwindlon=nint(meanreal(data1%N,data1%wlon)*10.0) write(windunit,1500) as(1)%basin2,as(1)%storm2,as(1)%ymdh, & as(1)%method2,as(1)%model4,nint(hour), & abs(iwindlat),snn(sign(1,iwindlat)), & @@ -878,8 +878,8 @@ endif if(present(presfile)) then - ipreslat=nint(meanreal(data%N,data%plat)*10.0) - ipreslon=nint(meanreal(data%N,data%plon)*10.0) + ipreslat=nint(meanreal(data1%N,data1%plat)*10.0) + ipreslon=nint(meanreal(data1%N,data1%plon)*10.0) write(presunit,1500) as(1)%basin2,as(1)%storm2,as(1)%ymdh, & as(1)%method2,as(1)%model4,nint(hour), & abs(ipreslat),snn(sign(1,ipreslat)), & @@ -888,8 +888,8 @@ endif if(present(centfile)) then - icentlat=nint(meanreal(data%N,data%clat)*10.0) - icentlon=nint(meanreal(data%N,data%clon)*10.0) + icentlat=nint(meanreal(data1%N,data1%clat)*10.0) + icentlon=nint(meanreal(data1%N,data1%clon)*10.0) write(centunit,1500) as(1)%basin2,as(1)%storm2,as(1)%ymdh, & as(1)%method2,as(1)%model4,nint(hour), & abs(icentlat),snn(sign(1,icentlat)), & @@ -897,7 +897,7 @@ windpeak,prespeak endif - call free_data(data) + call free_data(data1) hour=hour+hourstep enddo hourloop diff -Nur hwrf-utilities/tools/hwrf_nhc_products/Makefile hwrf-utilities_ok/tools/hwrf_nhc_products/Makefile --- hwrf-utilities/tools/hwrf_nhc_products/Makefile 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/tools/hwrf_nhc_products/Makefile 2023-07-21 14:51:10.655770420 +0800 @@ -1,7 +1,7 @@ include ../../configure.hwrf include ../../pure-openmp.inc -OBJS = products.o +OBJS = products.o ../hwrf_afos/ATAN2D.o EXEC = ../../exec/hwrf_nhc_products.exe LIBS = -L../../libs -lhwrfutil_i4r4 $(NETCDF_LDFLAGS) -lg2 $(LDFLAGS_GRIB2_LIB) diff -Nur hwrf-utilities/tools/hwrf_nhc_products/products.f90 hwrf-utilities_ok/tools/hwrf_nhc_products/products.f90 --- hwrf-utilities/tools/hwrf_nhc_products/products.f90 2016-08-16 01:45:31.326580000 +0800 +++ hwrf-utilities_ok/tools/hwrf_nhc_products/products.f90 2023-07-21 14:51:10.655770420 +0800 @@ -393,6 +393,17 @@ character*200 :: message real, parameter :: deg2rad=0.017453292519943295 + namelist/nhc_products/ & + intcvitals, inatcf, outpre, want_stid, want_centername, write_grib, & + want_ymdh, mdstatus, coupler_dt, fcst_len, grace_period, & + ide_moad, jde_moad, out4wave_out, dlmd_moad, dphd_moad, clat, clon, & + nesting_level, parent_nest_ratio, nauxphr,nunint, grads_byteswap, & + time_step_fract_num, time_step_fract_den, time_step, inhifreq, & + model, submodel, htcf_distcutoff, htcf_hourstep, & + header_coupled, header_uncoupled, moad_resolution, resolution_cutoffs, & + min_swath_hours, outlist, realtime, inwrfdiag, swath_latpad, & + swath_lonpad, swath_latres, swath_lonres + outlist='outlist' mdstatus='MDstatus' intcvitals='in.tcvitals' @@ -439,17 +450,7 @@ nunint=3 grads_byteswap=.true. min_swath_hours=6.0 - namelist/nhc_products/ & - intcvitals, inatcf, outpre, want_stid, want_centername, write_grib, & - want_ymdh, mdstatus, coupler_dt, fcst_len, grace_period, & - ide_moad, jde_moad, out4wave_out, dlmd_moad, dphd_moad, clat, clon, & - nesting_level, parent_nest_ratio, nauxphr,nunint, grads_byteswap, & - time_step_fract_num, time_step_fract_den, time_step, inhifreq, & - model, submodel, htcf_distcutoff, htcf_hourstep, & - header_coupled, header_uncoupled, moad_resolution, resolution_cutoffs, & - min_swath_hours, outlist, realtime, inwrfdiag, swath_latpad, & - swath_lonpad, swath_latres, swath_lonres - + if(nesting_level>maxdom-1 .or. nesting_level<0) then 308 format("Invalid nesting_level ",I0,": it must be between ",I0," and ",I0," inclusive.") write(message,308) nesting_level,0,maxdom-1 diff -Nur hwrf-utilities/tools/hwrf_obstobufr/obs_to_bufr_interface.F90 hwrf-utilities_ok/tools/hwrf_obstobufr/obs_to_bufr_interface.F90 --- hwrf-utilities/tools/hwrf_obstobufr/obs_to_bufr_interface.F90 2018-03-04 05:58:08.443753000 +0800 +++ hwrf-utilities_ok/tools/hwrf_obstobufr/obs_to_bufr_interface.F90 2023-07-21 14:51:10.655770420 +0800 @@ -427,8 +427,8 @@ ! Check local variable and proceed accordingly - if(obs_plev .gt. interp_spline%xa(i) .and. obs_plev .gt. & - & obs_plev .le. interp_spline%xa(i+1)) then + if(obs_plev .gt. interp_spline%xa(i) .and. & + & obs_plev .le. interp_spline%xa(i+1)) then ! Define local variables diff -Nur hwrf-utilities/tools/wgrib2/wgrib2.c hwrf-utilities_ok/tools/wgrib2/wgrib2.c --- hwrf-utilities/tools/wgrib2/wgrib2.c 2016-03-29 07:29:09.060878000 +0800 +++ hwrf-utilities_ok/tools/wgrib2/wgrib2.c 2023-07-21 14:51:10.655770420 +0800 @@ -88,7 +88,7 @@ const char *end_inv; /* string to write after end of inventory */ /* current grib location */ -long int pos; +long int pos1; unsigned long int len; int submsg, msg_no, inv_no; @@ -330,7 +330,7 @@ msg_no = 1; inv_no = 0; - len = pos = 0; + len = pos1 = 0; submsg = 0; msg = NULL; @@ -340,14 +340,14 @@ /* if dump mode .. position io stream */ if (input == dump_mode) { while (msg_no < dump_msg) { -// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos, &len, &num_submsgs); -// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); -// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos, &len, &num_submsgs); +// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos1, &len, &num_submsgs); +// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); +// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos1, &len, &num_submsgs); - msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); + msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); if (msg == NULL) fatal_error_i("record %d not found", dump_msg); - last_pos = pos; - pos += len; + last_pos = pos1; + pos1 += len; msg_no++; } #ifdef DEBUG @@ -368,8 +368,8 @@ /* need position and submessage number of message */ if (input == inv_mode || input == dump_mode) { if (input == inv_mode) { - if (rd_inventory(&msg_no,&submsg, &pos, &rd_inventory_input)) break; - if (fseek_file(&in_file, pos,SEEK_SET) != 0) fatal_error("fseek_file failed",""); + if (rd_inventory(&msg_no,&submsg, &pos1, &rd_inventory_input)) break; + if (fseek_file(&in_file, pos1,SEEK_SET) != 0) fatal_error("fseek_file failed",""); } else if (input == dump_mode) { if (dump_msg == -1) break; @@ -377,20 +377,20 @@ dump_msg = -1; } - if (pos != last_pos) { -// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos, &len, &num_submsgs); -// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); -// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos, &len, &num_submsgs); - msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); + if (pos1 != last_pos) { +// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos1, &len, &num_submsgs); +// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); +// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos1, &len, &num_submsgs); + msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); if (msg == NULL) { fatal_error_i("grib message #%d not found", msg_no); break; } - last_pos = pos; + last_pos = pos1; last_submsg = -1; } - if (pos == last_pos && submsg == last_submsg + 1) { + if (pos1 == last_pos && submsg == last_submsg + 1) { /* read previous submessage */ if (parse_next_msg(sec) != 0) { fprintf(stderr,"\n*** grib message #%d.%d not found ***\n\n", msg_no, submsg); @@ -414,20 +414,20 @@ } else if (input == all_mode) { if (submsg == 0) { -// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos, &len, &num_submsgs); -// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); -// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos, &len, &num_submsgs); - msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); +// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos1, &len, &num_submsgs); +// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); +// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos1, &len, &num_submsgs); + msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); if (msg == NULL) break; submsg = 1; } else if (submsg > num_submsgs) { - pos += len; + pos1 += len; msg_no++; -// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos, &len, &num_submsgs); -// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); -// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos, &len, &num_submsgs); - msg = rd_grib2_msg_seq_file(sec, &in_file, &pos, &len, &num_submsgs); +// // if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq(sec, in, &pos1, &len, &num_submsgs); +// if (in_file.file_type == PIPE) msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); +// else if (in_file.file_type == DISK) msg = rd_grib2_msg(sec, in, &pos1, &len, &num_submsgs); + msg = rd_grib2_msg_seq_file(sec, &in_file, &pos1, &len, &num_submsgs); if (msg == NULL) break; submsg = 1; } @@ -702,13 +702,13 @@ use_scale = scaling(sec, &ref, &dec_scale, &bin_scale, &i) == 0; - /* make sure msg_no:pos is put in inv_out so that -last will work */ + /* make sure msg_no:pos1 is put in inv_out so that -last will work */ new_inv_out(); // inv_out[0] = 0; if (num_submsgs > 1) { - sprintf(inv_out, "%d.%d%s%ld", msg_no, submsg, ":", pos); + sprintf(inv_out, "%d.%d%s%ld", msg_no, submsg, ":", pos1); } else { - sprintf(inv_out, "%d%s%ld", msg_no, ":", pos); + sprintf(inv_out, "%d%s%ld", msg_no, ":", pos1); } // fprintf(inv_file, "%s", inv_out); fwrite_file(inv_out, 1, strnlen(inv_out,INV_BUFFER), &inv_file); @@ -863,3 +863,4 @@ void set_mode(int new_mode) { mode = new_mode; } +
patch -p0 < ./patch-hwrf-utilities
cd hwrf-utilities echo 1 | ./configure
./compile 2>&1 | tee -a build.log
ls -l exec/*.exe
成功编译后将在目录exec中生成可执行文件。