meteva

提供气象产品检验相关python程序


高空要素统计检验

<p>[TOC]</p> <pre><code class="language-python">%matplotlib inline %load_ext autoreload %autoreload 2 import pandas as pd import meteva.method as mem import meteva.base as meb import meteva.product as mpd import meteva.perspact as mps # 透视分析模块 import datetime import meteva import numpy as np import os import copy</code></pre> <h1>高空格点场统计检验</h1> <p>在对数值模式和AI大模型数据进行检验时,经常要对长序列的多层次高空数据进行统计检验。这种长序列的统计非常耗时,并且在批量数据统计时,时常会因为各种原因导致程序中断,完成统计并非易事。改进的策略时及时的将中间结果进行保存,出错后再重复启动的时候不必从头再来。本模块的目标就是实现这样的功能。 该模块可以根据设定的实况和预报数据路径等参数,读取多个层次、多个时效、一段时间、多个模式的高空要素,生成数值型检验指标计算所需的中间量。如果程序因异常中断,重新启动后,程序能够重新加载此前已经统计过的大部分结果,对其余部分进行补齐。 之所以只能加载此前的大部分结果,是因为考虑到输出频次过高会影响效率,程序默认是完成约500个单时刻单时次单层次的中间量统计时 输出一次。</p> <table> <thead> <tr> <th style="text-align: left;">参数</th> <th style="text-align: left;">说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><strong>&lt;font face=&quot;黑体&quot; color=blue size = 5&gt;para&lt;/font&gt;</strong></td> <td style="text-align: left;">统计的参数</td> </tr> <tr> <td style="text-align: left;">&lt;font face=&quot;黑体&quot; color=blue size=5&gt;return&lt;/font&gt;</td> <td style="text-align: left;">统计量中间结果输出到文件中,函数不返回结果</td> </tr> </tbody> </table> <p><strong> 参数示例和说明</strong> </p> <pre><code class="language-python">para = { &amp;quot;mid_method&amp;quot;:mem.tase, # 统计检验的总量计算函数, &amp;quot;grade_list&amp;quot;:None, #二分类检验所需的等级参数 &amp;quot;compare&amp;quot;:None, #二分类检验所需的对比方式参数 &amp;quot;middle_result_path&amp;quot;: r&amp;quot;D:\data\ssc\veri_t\tase_t_mcv_1024.h5&amp;quot;, #检验中间量数据的存储路径 &amp;quot;begin_time&amp;quot;: datetime.datetime(2023,7,20,12), #统计起始时刻, 它是预报的起报时间,而不是实况实况 &amp;quot;end_time&amp;quot;: datetime.datetime(2023,7,20,12), #统计结束时刻,它是预报的起报时间,而不是实况实况 &amp;quot;time_type&amp;quot;:&amp;quot;UT&amp;quot;, # 最终检验结果呈现时,采用北京时还是世界时,UT代表世界时,BT代表北京时 &amp;quot;time_step&amp;quot;:12, #起报时间间隔 &amp;quot;grid&amp;quot; : meteva.base.grid([70, 140, 0.5], [20, 60, 0.5]), # 检验区域 &amp;quot;level_list&amp;quot;: [1000.0,975.0,950.0, 925.0,900.0,850.0, 800.0, 750,700.0,650, 600.0,550, 500.0,450, 400.0, 350,300.0, 250.0, 200.0, 150.0, 100.0, 70.0, 50.0, 30.0, 20.0, 10.0], #检验的层次 &amp;quot;step&amp;quot;:2, #masker间隔(单位:°) &amp;quot;recover&amp;quot;:True, #False表示保留已经收集好的中间量,补齐未收集的数据,True表示删除已有的统计结果文件,重新开始收集 &amp;quot;cpu&amp;quot;:1, #cpu大于1时表示会采用python的multiprocessing进行并行的处理不同时间、时效和层次的统计任务,cpu是并行采用的核心数 &amp;quot;ob_data&amp;quot;: { #支持多个实况数据 &amp;quot;ERA5&amp;quot;:{ #实况数据名称之一 &amp;quot;dirm&amp;quot;: r&amp;quot;D:\data\ssc\era5\YYYYMMDD\ERA5-plevels-YYYYMMDDHH_t.nc&amp;quot;, # 实况场数据路径 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_nc, #读取数据的函数 &amp;quot;read_para&amp;quot;: {}, #读取数据的函数参数 &amp;quot;time_type&amp;quot;: &amp;quot;UT&amp;quot;, # 数据文件中的时间类型,UT代表世界时 &amp;quot;multiple&amp;quot;: 1, # 用于单位转换的系数,例如将比湿由kg/kg 转换成g/kg时, 该参数设置为10000 } }, &amp;quot;fo_data&amp;quot;: { &amp;quot;FV3&amp;quot;:{ #模式名称之一 &amp;quot;dirm&amp;quot;: r&amp;quot;D:\data\ssc\mcv_ncepphys\6hour_10days\post_YYYYMMDDHH0000.ctl&amp;quot;, # 数据路径 &amp;quot;dtime&amp;quot;: [0,241,6], #检验时效 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_ctl, #读取数据的函数 &amp;quot;read_para&amp;quot;: {&amp;quot;value_name&amp;quot;: &amp;quot;t&amp;quot;, &amp;quot;add_block_head_tail&amp;quot;:True, &amp;quot;dtime_dim&amp;quot;:&amp;quot;tdef&amp;quot;, &amp;quot;endian&amp;quot;:&amp;quot;&amp;gt;&amp;quot;}, #读取数据的函数参数 &amp;quot;time_type&amp;quot;: &amp;quot;UT&amp;quot;, # 预报数据时间类型是北京时,即08时起报 &amp;quot;multiple&amp;quot;: 1, # 用于单位转换的系数,例如将比湿由kg/kg 转换成g/kg时, 该参数设置为10000 &amp;quot;move_fo_time&amp;quot;:0, #是否对预报的时效进行平移,12 表示将1月1日08时的36小时预报转换成1月1日20时的24小时预报后参与对比 &amp;quot;veri_by&amp;quot;:&amp;quot;ERA5&amp;quot;, #self表示用自己的零场作为真值进行检验, &amp;quot;gh&amp;quot;:{ &amp;quot;dirm&amp;quot;: r&amp;quot;D:\data\ssc\mcv_ncepphys\6hour_10days\post_YYYYMMDDHH0000.ctl&amp;quot;, # 数据路径 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_ctl, # 读取数据的函数 &amp;quot;read_para&amp;quot;: {&amp;quot;value_name&amp;quot;: &amp;quot;h&amp;quot;, &amp;quot;add_block_head_tail&amp;quot;: True, &amp;quot;dtime_dim&amp;quot;: &amp;quot;tdef&amp;quot;, &amp;quot;endian&amp;quot;: &amp;quot;&amp;gt;&amp;quot;}, # 读取数据的函数参数 }, }, &amp;quot;MCV&amp;quot;: { #模式名称之 &amp;quot;dirm&amp;quot;: r&amp;quot;D:\data\ssc\mcv_grapesphys\6hour_10days\other\lnmask_ozone_mcvsst_cumict5\post_YYYYMMDDHH0000.ctl&amp;quot;, #数据路径 &amp;quot;dtime&amp;quot;: [0,241,6], #检验时效 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_ctl, #读取数据的函数 &amp;quot;read_para&amp;quot;: {&amp;quot;value_name&amp;quot;: &amp;quot;t&amp;quot;, &amp;quot;add_block_head_tail&amp;quot;:True, &amp;quot;dtime_dim&amp;quot;:&amp;quot;tdef&amp;quot;, &amp;quot;endian&amp;quot;:&amp;quot;&amp;gt;&amp;quot;}, #读取数据的函数参数 &amp;quot;time_type&amp;quot;: &amp;quot;UT&amp;quot;,#预报数据时间类型是北京时,即08时起报 &amp;quot;multiple&amp;quot;:1, #用于单位转换的系数,例如文件数据的单位是位势米,通过乘以9.8可转换成位势 &amp;quot;move_fo_time&amp;quot;: 0, &amp;quot;veri_by&amp;quot;: &amp;quot;ERA5&amp;quot;, #指定某一个实况数据作为真值进行检验, &amp;quot;gh&amp;quot;:{ &amp;quot;dirm&amp;quot;: r&amp;quot;D:\data\ssc\mcv_ncepphys\6hour_10days\post_YYYYMMDDHH0000.ctl&amp;quot;, # 数据路径 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_ctl, # 读取数据的函数 &amp;quot;read_para&amp;quot;: {&amp;quot;value_name&amp;quot;: &amp;quot;h&amp;quot;, &amp;quot;add_block_head_tail&amp;quot;: True, &amp;quot;dtime_dim&amp;quot;: &amp;quot;tdef&amp;quot;, &amp;quot;endian&amp;quot;: &amp;quot;&amp;gt;&amp;quot;}, # 读取数据的函数参数 }, }, }, &amp;quot;zs&amp;quot;: { #地形高度数据读取所需信息 &amp;quot;path&amp;quot;: r&amp;quot;D:\data\ssc\mcv_ncepphys\6hour_10days\post_20230720120000.ctl&amp;quot;, # 数据路径 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_ctl, # 读取数据的函数 &amp;quot;read_para&amp;quot;: {&amp;quot;value_name&amp;quot;: &amp;quot;zs&amp;quot;, &amp;quot;add_block_head_tail&amp;quot;: True, &amp;quot;dtime_dim&amp;quot;: &amp;quot;tdef&amp;quot;, &amp;quot;endian&amp;quot;: &amp;quot;&amp;gt;&amp;quot;,&amp;quot;dtime&amp;quot;:0}, # 读取数据的函数参数 } } </code></pre> <h2>关于para的补充说明:</h2> <ol> <li>mid_method 参数常用的选项包括 mem.tase,mem.tmmsss,mem.hfmc等。如果要统计平均误差、平均绝对误差、均方根误差就选mem.tase;如果要计算二分类的指标,如TS、BIAS等就选择mem.hfmc; 如果要选相关系数就选mem.tmmsss,大部分情况下高空要素一般要计算距平相关系数,而非普通的相关系数。在meteva中计算距平相关系数有专门的ACC模块。</li> <li>grade_list 和compare参数只有当mid_method = mem.hfmc时才需要设置,它们是二分类检验要用到的参数</li> <li>统计形成的中间量数据文件中包含但未报仅包含begin_time 至end_time 时段内的数据,如果recover=False,它还会包含上一次运行留下来的统计数据。</li> <li>time_step参数一般用于起报时间的间隔,例如全球模式一般是12小时间隔报一次。在调试阶段,time_step也可以设置得大一些,例如1200, 这样程序会跳跃着读取部分日期的数据进行统计,用户可以根据部分数据的统计结果来计算评分和绘图,如果检验结果合理,在重新将dtime 设置为12进行统计。避免花费很长时间完成统计后,结果是错误的,则又要重新返工,浪费大量时间。 对于非常长的时间序列,time_step 也未必一定要根据实际的预报起报时间间隔来进行设置,例如时间间隔是12小时,那将time_step 设置成60小时,也可以得到很有代表性的统计结果。此处只所以设置为60而不是48或72,是考虑到后面两种设置方法不能遍历到00和12时两种起报时间。</li> <li>read_method对应的读取数据函数应该包含参数time,level,dtime,本模块的程序会自动循环采用不同的time,dtime,level参数调用read_method。read_para 中则不必包含time,dtime,level相关的内容,因为本程序会自动设置这些参数。</li> <li>veri_by 用于指定检验实况,每个模式可用选择相同的实况,也可以选择不同的实况。</li> <li>para中zs关键词用于读取地形高度数据,每个模式的gh 参数用来读取每一层的位势高度数据,当位势高度低于地形高度时,对应网格点的数据样本会被设置成nan,并在最终的检验样本中被剔除。如果不需要实用地形剔除的功能,则将zs的取值设置为None即可。</li> </ol> <h2>调用方法</h2> <pre><code class="language-python"># 统计rmse,me,mae 相关的中间量 mps.middle_of_score(para)</code></pre> <pre><code>success read from D:\data\ssc\era5\20230720\ERA5-plevels-2023072012_t.nc success read data with D:\data\ssc\mcv_ncepphys\6hour_10days\post_20230720120000.ctl success read data with D:\data\ssc\mcv_ncepphys\6hour_10days\post_20230720120000.ctl success read data with D:\data\ssc\mcv_grapesphys\6hour_10days\other\lnmask_ozone_mcvsst_cumict5\post_20230720120000.ctl .... success read from D:\data\ssc\era5\20230730\ERA5-plevels-2023073012_t.nc success read data with D:\data\ssc\mcv_ncepphys\6hour_10days\post_20230720120000.ctl success read data with D:\data\ssc\mcv_ncepphys\6hour_10days\post_20230720120000.ctl success read data with D:\data\ssc\mcv_grapesphys\6hour_10days\other\lnmask_ozone_mcvsst_cumict5\post_20230720120000.ctl success read data with D:\data\ssc\mcv_ncepphys\6hour_10days\post_20230720120000.ctl 中间量统计程序运行完毕 中间结果已输出至D:\data\ssc\veri_t\tase_t_mcv_1024.h5 单进程耗时:931.0928151607513 检验计算耗时:45.604432344436646 读取ERA5耗时:806.7255029678345 读取FV3耗时:40.8194842338562 读取MCV耗时:29.385673761367798 总耗时:931.6759107112885</code></pre> <pre><code class="language-python">#加载中结果数据 df_mid = pd.read_hdf(para[&amp;quot;middle_result_path&amp;quot;]) print(df_mid)</code></pre> <pre><code> level time dtime member id T E \ 0 10.0 2023-07-20 12:00:00 0 FV3 20070 0.939693 -1.038601 1 10.0 2023-07-20 12:00:00 0 FV3 20072 3.758770 -3.005474 2 10.0 2023-07-20 12:00:00 0 FV3 20074 3.758770 -2.884430 3 10.0 2023-07-20 12:00:00 0 FV3 20076 3.758770 6.605784 4 10.0 2023-07-20 12:00:00 0 FV3 20078 3.758770 1.503090 .. ... ... ... ... ... ... ... 179 1000.0 2023-07-20 12:00:00 240 MCV 60072 0.500000 2.608284 180 1000.0 2023-07-20 12:00:00 240 MCV 60078 1.507538 2.711890 181 1000.0 2023-07-20 12:00:00 240 MCV 60080 6.090306 5.337546 182 1000.0 2023-07-20 12:00:00 240 MCV 60082 6.657801 10.963189 183 1000.0 2023-07-20 12:00:00 240 MCV 60084 2.082534 1.287826 A S M 0 1.038601 1.147919 216.234548 1 4.630156 11.051691 859.313193 2 5.575627 11.684649 854.057493 3 6.605784 11.803160 851.092762 4 1.901097 1.233169 862.144487 .. ... ... ... 179 2.608284 13.606290 147.014000 180 2.740965 7.665755 449.925190 181 5.418934 6.935573 1823.526962 182 10.963189 20.224089 1983.339122 183 1.823327 2.479527 617.696259 [1446086 rows x 10 columns]</code></pre> <pre><code class="language-python">#根据中间量结果绘制误差曲线 result = mps.score_df(df_mid,mem.rmse,s = {&amp;quot;level&amp;quot;:[850,300]},g = [&amp;quot;level&amp;quot;,&amp;quot;member&amp;quot;,&amp;quot;dtime&amp;quot;],plot =&amp;quot;line&amp;quot;,ncol = 2,sup_title = &amp;quot;RMSE&amp;quot;)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=9f53d4b50f221cdb5397731a4f978405&amp;amp;file=file.png" alt="" /></p> <pre><code class="language-python">result = mps.score_xy_df(df_mid,mem.me,s = {&amp;quot;level&amp;quot;:[850]},g = &amp;quot;member&amp;quot;,ncol = 2)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c8ec5fbbd9736d5d61dcd6189bbaba90&amp;amp;file=file.png" alt="" /></p> <pre><code class="language-python">result = mps.score_yz_df(df_mid,mem.me,s={&amp;quot;lon&amp;quot;:90},g = &amp;quot;member&amp;quot;,ncol = 2)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c7ac1056fd500c6080398feddeb10e7f&amp;amp;file=file.png" alt="" /></p> <pre><code class="language-python">result = mps.score_xz_df(df_mid,mem.me,s = {&amp;quot;lat&amp;quot;:30},g = &amp;quot;member&amp;quot;,ncol = 2)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=c3ac6f10d15bc0775eb4284757095a3e&amp;amp;file=file.png" alt="" /></p> <p>上面是对比不同模式的rmse的实现方式。如果需要对比模式对副高的预报性能,则可以用二分类检验指标来实现</p> <pre><code class="language-python"># 设置统计参数 para_hfmc = { &amp;quot;mid_method&amp;quot;:mem.hfmc, # 统计检验的总量计算函数, &amp;quot;grade_list&amp;quot;:[5880,5920], #二分类检验所需的等级参数 &amp;quot;compare&amp;quot;:None, #二分类检验所需的对比方式参数 &amp;quot;middle_result_path&amp;quot;: r&amp;quot;H:\test_data\output\mps\hfmc_500.h5&amp;quot;, #检验中间量数据的存储路径 &amp;quot;begin_time&amp;quot;: datetime.datetime(2018,8,1,0), #统计起始时刻, 它是预报的起报时间,而不是实况实况 &amp;quot;end_time&amp;quot;: datetime.datetime(2018,8,2,0), #统计结束时刻,它是预报的起报时间,而不是实况实况 &amp;quot;time_type&amp;quot;:&amp;quot;UT&amp;quot;, # 最终检验结果呈现时,采用北京时还是世界时,UT代表世界时,BT代表北京时 &amp;quot;time_step&amp;quot;:12, #起报时间间隔 &amp;quot;grid&amp;quot; : meteva.base.grid([70,140,0.25],[10,60,0.25]), # 检验区域 &amp;quot;level_list&amp;quot;: [500], #检验的层次 &amp;quot;step&amp;quot;:5, #masker间隔(单位:°) &amp;quot;recover&amp;quot;:False, #False表示保留已经收集好的中间量,补齐未收集的数据,True表示删除已有的统计结果文件,重新开始收集 &amp;quot;cpu&amp;quot;:64, #cpu大于1时表示会采用python的multiprocessing进行并行的处理不同时间、时效和层次的统计任务,cpu是并行采用的核心数 &amp;quot;ob_data&amp;quot;: { #支持多个实况数据 &amp;quot;CRA40&amp;quot;:{ #实况数据名称之一 &amp;quot;dirm&amp;quot;: r&amp;quot;\\10.28.16.234\data2\AI\CRA40\2018\Z\LLL\YYYYMMDDHH.nc&amp;quot;, # 实况场数据路径 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_nc, #读取数据的函数 &amp;quot;read_para&amp;quot;: {}, #读取数据的函数参数 &amp;quot;time_type&amp;quot;: &amp;quot;UT&amp;quot;, # 数据文件中的时间类型,UT代表世界时 &amp;quot;multiple&amp;quot;: 1, # 用于单位转换的系数,例如将比湿由kg/kg 转换成g/kg时, 该参数设置为10000 } }, &amp;quot;fo_data&amp;quot;: { &amp;quot;ECMWF&amp;quot;:{ #模式名称之一 &amp;quot;dirm&amp;quot;: r&amp;quot;\\10.28.16.234\data2\AI\ECMWF\grib\YYMMDD\YYMMDDHH.TTT.grib&amp;quot;, # 数据路径 &amp;quot;dtime&amp;quot;: [12, 240, 12], #检验的时效 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_grib, #读取数据的函数 &amp;quot;read_para&amp;quot;: {&amp;quot;level_type&amp;quot;:&amp;quot;isobaricInhPa&amp;quot;,&amp;quot;value_name&amp;quot;:&amp;quot;gh&amp;quot;}, #读取数据的函数参数 &amp;quot;time_type&amp;quot;: &amp;quot;UT&amp;quot;, # 预报数据时间类型是北京时,即08时起报 &amp;quot;multiple&amp;quot;: 1, # 用于单位转换的系数,例如将比湿由kg/kg 转换成g/kg时, 该参数设置为10000 &amp;quot;move_fo_time&amp;quot;:12, #是否对预报的时效进行平移,12 表示将1月1日08时的36小时预报转换成1月1日20时的24小时预报后参与对比 &amp;quot;veri_by&amp;quot;:&amp;quot;self&amp;quot; #self表示用自己的零场作为真值进行检验 }, &amp;quot;NMC1&amp;quot;: { #模式名称之 &amp;quot;dirm&amp;quot;: r&amp;quot;\\10.28.16.177\NMC_Tsinghua_reforecast\cra40\YYYYMMDDHH.nc&amp;quot;, #数据路径 &amp;quot;dtime&amp;quot;: [12, 240, 12], #检验时效 &amp;quot;read_method&amp;quot;: meteva.base.read_griddata_from_nc, #读取数据的函数 &amp;quot;read_para&amp;quot;: {&amp;quot;value_name&amp;quot;: &amp;quot;GPH&amp;quot;}, #读取数据的函数参数 &amp;quot;time_type&amp;quot;: &amp;quot;UT&amp;quot;,#预报数据时间类型是北京时,即08时起报 &amp;quot;multiple&amp;quot;:1, #用于单位转换的系数,例如文件数据的单位是位势米,通过乘以9.8可转换成位势 &amp;quot;move_fo_time&amp;quot;: 0, &amp;quot;veri_by&amp;quot;: &amp;quot;CRA40&amp;quot; #指定某一个实况数据作为真值进行检验 }, }, } # 统计rmse,me,mae 相关的中间量 mps.middle_of_score(para_hfmc)</code></pre> <pre><code>NMC12018年08月01日00时起报的检验中间量已存在 NMC12018年08月01日12时起报的检验中间量已存在 NMC12018年08月02日00时起报的检验中间量已存在 Waiting for all subprocesses done... All subprocesses done. 中间量拼接程序运行完毕 拼接后的中间结果已输出至H:\test_data\output\mps\hfmc_500.h5 总耗时:8.337354898452759</code></pre> <pre><code class="language-python">#加载中结果数据 df_mid = pd.read_hdf(para_hfmc[&amp;quot;middle_result_path&amp;quot;]) print(df_mid)</code></pre> <pre><code> level time dtime member id grade H F M C 0 500 2018-08-01 12 ECMWF 30080 5880 0.0 0.0 0.0 1600.0 1 500 2018-08-01 12 ECMWF 30080 5920 0.0 0.0 0.0 1600.0 0 500 2018-08-01 12 ECMWF 20100 5880 0.0 0.0 0.0 1600.0 1 500 2018-08-01 12 ECMWF 20100 5920 0.0 0.0 0.0 1600.0 0 500 2018-08-01 12 ECMWF 40070 5880 0.0 0.0 0.0 40.0 .. ... ... ... ... ... ... ... ... ... ... 1 500 2018-08-02 240 NMC1 30070 5920 0.0 0.0 0.0 40.0 0 500 2018-08-02 240 NMC1 20090 5880 0.0 0.0 0.0 1600.0 1 500 2018-08-02 240 NMC1 20090 5920 0.0 0.0 0.0 1600.0 0 500 2018-08-02 240 NMC1 10110 5880 0.0 0.0 0.0 40.0 1 500 2018-08-02 240 NMC1 10110 5920 0.0 0.0 0.0 40.0 [10944 rows x 10 columns]</code></pre> <pre><code class="language-python">#根据实况和预报的频次(累计格点数)的对比 result = mps.score_df(df_mid,mem.ob_fo_hc,g = [&amp;quot;grade&amp;quot;,&amp;quot;member&amp;quot;,&amp;quot;dtime&amp;quot;],plot =&amp;quot;line&amp;quot;,ncol = 2,sup_title = &amp;quot;RMSE&amp;quot;)</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=509f4225ac3e7d4eaa37b621b588fbd2&amp;amp;file=file.png" alt="" /></p> <p>如果数据时段很长,实况的副高累计格点数随时效基本是不变化的,但上面的数据集只包含一小段时间的数据,因此实况的副高累计格点数随时效变化非常剧烈。从上面的结果还可以看出,两种模式对副高面积(格点数)的预报都是偏低的。</p> <h1>并行任务下sbatch脚本</h1> <p>在大型机上如果使用并行方式运行mps.middle_of_score程序(即参数cpu大于1)时务必采用sbatch方式提交作业,否则可能导致登录节点卡顿。 下面是提交作业的sbatch脚本,其中:</p> <ul> <li>参数N=1表示只采用一个计算几点(其中包含多个cpu核心)。</li> <li>mem=64G表示计算所需的内存。如果统计中国附近区域中尺度模式一整年的数据,每天2个起报时次,每个起报时次10个预报时效,每个时效20层数据,para[&quot;step&quot;]设置为5,mem需要设置在16G以上。如果统计全球模式1整年的数据,每天2个起报时次,每个起报时间10个预报时效,每个时效有20个层次,para[&quot;step&quot;]参数设置为5,mem需要设置在128以上。</li> <li>参数p normal 表示用并行方式执行。</li> </ul> <pre><code class="language-python">#!/bin/bash #SBATCH --comment GRAPES #SBATCH --wckey=105-02 #SBATCH -J GRAPES #SBATCH -N 1 #SBATCH --mem=64G #SBATCH --ntasks-per-node=64 #SBATCH -p normal #SBATCH -t 72:00:00 #SBATCH -o ./out.print.%j.txt #SBATCH -e ./out.err.%j.txt #set runtime environment variables unset SLURM_MEM_PER_CPU #some shell commands ulimit -c unlimited ulimit -s unlimited #export QT_DEBUG_PLUGINS=1 export QT_QPA_PLATFORM=&amp;#039;offscreen&amp;#039; python hgt_data_prepare.py </code></pre> <pre><code class="language-python"></code></pre>

页面列表

ITEM_HTML