## 5 Experimental Section
### Performance Optimisation Experiment  
The experiments in the performance optimisation section focus on adding ARM fast maths libraries, domain decomposition, tile division, and a study involving parallel IO and asynchronous IO.  
(a). During the Libamath optimisation experiments, we begin by running the WRF with 20, 40, 60 and 120 sums using Case B with the benchmark compilation option and the default namelist.input configuration, and we record the single iteration step running time of the WRF for the corresponding number of cores at this time. For the WRF code with a large number of mathematical calculations, such as pow, this paper compiles WRF with the baseline compilation option and adds the dynamic library path -path_to_libamath to configure.wrf. When running WRF, we run it with 20, 40, 60 and 120 cores, and record the runtime of WRF at this time to determine the corresponding single iteration step run times. The data before and after running the optimisation using the libamath math library are collated and plotted in a histogram; see Figure 1 for details.  
(b). During the optimisation of domain decomposition, we use 36 and 72 cores to run WRF in the default state, counting the total running time of a single iteration step and simulation for 6 h. Then, the default domain decomposition algorithm is changed by nproc_x and nproc_y in namelist.input, and the best-performing domain decomposition combination is selected through several different combinations of nproc_x and nproc_y. Finally, the performance improvement is calculated via cross-sectional comparison with the default domain decomposition method. The detailed experimental data are shown in Table 4. We also conduct domain decomposition experiments on a libamath optimised version to run WRF with 120 cores.  
(c). In the tile division optimization experiments, we focus on the optimized version of the libamath maths library and domain decomposition. For WRF running with 120 cores (32 processes * 4 threads), we run WRF with the default tile division algorithm numtiles = 4), record the single iteration step running time, and then modify the value of numtiles in the name.input The value of numtiles in name.input is then modified to change the number of tiles in each process. In this paper, the value of numtiles is set to 12, 16, 20, 24, 28 and 32 to run the WRF and the corresponding single iteration step running time is recorded.  
(d). When conducting experiments with parallel io, we run the WRF of serial IO to count the total running time and single IO output time of the WRF, after which we recompile the WRF, compile it with the address of Pnetcdf in configure.wrf, and change the values of io_form_history of namelist.input. Next, we rerun the WRF and count its runtime and single-step IO output time.  
(e). In the asynchronous IO optimization experiment, the value of nio_groups in namelist.input is set to 1 and the value of nio_tasks_per_group is set to 2, so that asynchronous IO is implemented. A total of 202 processes are used when WRF is run, 200 of which are computing processes and 2 are IO processes, and by running WRF asynchronously alongside IO, the total running time of WRF and the output time of individual IO are counted and compared with the data of serial IO.  
\begin{table}
\begin{tabular}{c c c c c} \hline \hline
**Process** & **nproc\_x** & **nproc\_y** & **total\_time/s** & **step\_time/s** \\ \hline
36 & 6 & 6 & 168.211 & 1.55 \\
36 & 2 & 18 & 154.720 & 1.46 \\
36 & 3 & 12 & 150.117 & 1.47 \\
36 & 4 & 9 & 151.701 & 1.52 \\
72 & 8 & 9 & 131.728 & 0.97 \\
72 & 2 & 36 & 121.098 & 0.89 \\
72 & 3 & 24 & 120.098 & 0.86 \\
72 & 4 & 18 & 122.605 & 0.92 \\
72 & 6 & 12 & 122.650 & 0.93 \\ \hline \hline \end{tabular}
\end{table}
Table 4: Combination of different regional decomposition preferences experiment.