【WRF教程第3.1期】预处理系统 WPS 详解:以4.5版本为例

预处理系统 WPS 详解:以4.5版本为例

  • 每个 WPS 程序的功能
    • 程序1:geogrid
    • 程序2:ungrib
    • 程序3:metgrid
  • WPS运行(Running the WPS)
    • 步骤1:Define model domains with geogrid
    • 步骤2:Extracting Meteorological Fields from GRIB Files with Ungrib
    • 步骤3:Horizontally interpolating meteorological data with metgrid
  • 参考

本系列专栏针对WRF4.5版本教程,详细理解教程每一步操作。
前期内容可参见博客-【WRF教程第一期】WRF模型概述:以4.5版本为例。

【WRF教程第二期】WRF编译全过程:以4.5版本为例

本博客继续针对WPS预处理模块进行详细介绍,具体参考-The WRF Preprocessing System (WPS)。

WRF 预处理系统 (WPS) 是一组三个程序,它们的共同作用是为真实数据模拟准备真实程序的输入。每个程序执行一个准备阶段:

  • geogrid 定义模型域并将静态地理数据插入网格
  • ungrib 从 GRIB 格式的文件中提取气象场
  • metgrid 将 ungrib 提取的气象场水平插入 geogrid 定义的模型网格

将气象场垂直插入 WRF eta 级别的工作在 真实程序(real) 中执行。
在这里插入图片描述
上图显示了 WPS 程序之间的数据流。每个程序都从公共名称列表文件 (namelist.wps) 读取参数,该文件包含代表每个程序的单独名称列表记录,以及定义多个 WPS 程序使用的参数的共享名称列表记录。图中未显示各个程序使用的附加表文件。这些表提供了对程序操作的额外控制(通常不需要修改)。本章后面将介绍 GEOGRID.TBL、METGRID.TBL 和 Vtable 文件。

WPS 的构建机制与 WRF 模型使用的构建机制非常相似,它提供了在各种平台上编译 WPS 的选项。当有 MPI 库和合适的编译器时,metgrid 和 geogrid 程序可以编译为分布式内存执行,从而允许在更短的时间内处理大型模型域。ungrib 程序执行的工作不适合并行化,因此 ungrib 只能在单个处理器上运行。

每个 WPS 程序的功能

WPS 由三个独立的程序组成:geogrid、ungrib 和 metgrid。
WPS 中还包括几个实用程序,这些程序在 WPS 实用程序部分进行了描述。下面对三个主要程序分别进行了简要说明,后续部分将介绍更多详细信息。

程序1:geogrid

地理网格(geogrid) 的目的是定义模拟域,并将各种陆地数据集插入到模型网格中。这些域是使用用户在 WPS 名称列表文件 (namelist.wps) 的地理网格名称列表记录 (&geogrid) 中指定的信息定义的。除了计算每个网格点的纬度、经度和地图比例因子外,地理网格还默认将土壤类别、土地利用类别、地形高度、年平均深层土壤温度、月植被分数、月反照率、最大雪反照率和坡度类别插入到模型网格中。每个字段的全局数据集均通过 WPS 地理静态数据下载页面提供,由于这些数据是时不变的,因此只需下载一次。一些数据集仅提供一种分辨率,但其他数据集则以“全分辨率”下载和“低分辨率”下载提供。通常,静态字段的低分辨率源仅适用于代码测试和教育目的,任何需要关注模型准确性的应用都应使用全分辨率地理数据集。

除了插入默认的陆地字段外,geogrid 程序还足够通用,可以将大多数连续和分类字段插入到模拟域中。可以使用表文件 GEOGRID.TBL 将新数据集或附加数据集插入到模拟域中。GEOGRID.TBL 文件定义了 geogrid 将生成的每个字段;它描述了要用于字段的插值方法,以及该字段的数据集在文件系统中的位置。

geogrid 的输出以 WRF I/O API 格式写入,因此,通过选择 netCDF I/O 格式,geogrid 可以将其输出写入 netCDF,以便使用外部软件包(包括 ncview、NCL 和 RIP4)轻松进行可视化。

ncview工具的使用可参见另一博客-【WRF工具】WRF 模型输出可视化工具 ncview。

程序2:ungrib

ungrib 程序读取 GRIB 文件,“分解”数据,并将数据写入一种称为中间格式的简单格式(有关格式的详细信息,请参阅“将气象数据写入中间格式”一节)。GRIB 文件包含随时间变化的气象场,通常来自另一个区域或全球模型,例如 NCEP 的 NAM 或 GFS 模型。ungrib 程序可以读取 GRIB 版本 1,如果使用“GRIB2”选项编译,还可以读取 GRIB 版本 2 文件。

GRIB 文件通常包含比初始化 WRF 所需的更多字段。两种版本的 GRIB 格式都使用各种代码来识别 GRIB 文件中的变量和级别。Ungrib 使用这些代码的表(称为 Vtables,即“变量表”)来定义从 GRIB 文件中提取哪些字段并写入中间格式。有关代码的详细信息,请参阅 WMO GRIB 文档和原始中心的文档。

ungrib 软件提供了以下用于常见 GRIB 模型输出文件的 Vtable(位于 ungrib/Variable_Tables):
在这里插入图片描述
用户可以使用任何 Vtable 作为模板为其他模型输出创建自己的 Vtable;有关 Vtable 中字段含义的更多详细信息,请参阅“创建和编辑 Vtable”部分。

Ungrib 可以以三种用户可选格式中的任意一种格式写入中间数据文件:

  • WPS - 包含对下游程序有用的附加信息的格式;
  • SI - WRF 系统的较旧中间格式;
  • 以及 MM5 格式,此处包含该格式,以便 ungrib 可用于向 MM5 建模系统提供 GRIB2 输入。

WPS 可以使用其中任何一种格式来初始化 WRF,但建议使用 WPS 格式。

程序3:metgrid

metgrid 程序将 ungrib 程序提取的中间格式气象数据水平插入 geogrid 程序定义的模拟域。然后,WRF real 程序可以获取插入的 metgrid 输出。metgrid 将插入的日期范围在 namelist.wps 中的 &share namelist 记录中定义,其中必须为每个模拟域指定日期范围。由于 metgrid 程序的工作与 ungrib 程序一样,与时间相关,因此每次初始化新模拟时都会运行 metgrid。

METGRID.TBL 文件控制每个气象场的插值方式。它为每个字段提供一个部分,并且在一个部分中,可以指定要用于该字段的插值方法、用作掩码插值的掩码的字段以及字段要插入到的网格交错(例如,ARW 中的 U、V;NMM 中的 H、V)。

metgrid 的输出以 WRF I/O API 格式写入,因此,通过选择 netCDF I/O 格式,metgrid 可以将其输出写入 netCDF,以便使用外部软件包(包括新版本的 RIP4)轻松进行可视化。

WPS运行(Running the WPS)

运行 WRF 预处理系统有三个主要步骤。
1、使用 geogrid 定义模型粗域和任何嵌套域。
2、使用 ungrib 从 GRIB 数据集中提取模拟期间的气象场。
3、使用 metgrid 将气象场水平插入到模型域中。

当要对同一模型域运行多个模拟时,只需执行 第一步(geogrid) 一次;此后,只需使用第二步和第三步为每个模拟处理 随时间变化的数据。同样,如果使用同一气象数据源在同一时间段运行多个模型域,则无需为每个模拟单独运行 ungrib。下面将详细说明这三个步骤。

如果成功安装了 WPS 软件,则 WPS 目录结构的根目录中应该存在指向 geogrid.exe、ungrib.exe 和 metgrid.exe 程序的符号链接。除了这三个链接之外,还应该存在 namelist.wps 文件。因此,WPS 根目录中的列表应如下所示:

ls -lsdrwxr-xr-x 2   4096 arch
-rwxr-xr-x 1   1765 clean
-rwxr-xr-x 1   4795 compile
-rw-r--r-- 1 118862 compile.log
-rwxr-xr-x 1  16613 configure
-rw-r--r-- 1   3424 configure.wps
drwxr-xr-x 4   4096 geogrid
lrwxrwxrwx 1     23 geogrid.exe -> geogrid/src/geogrid.exe
-rwxr-xr-x 1   1331 link_grib.csh
drwxr-xr-x 3   4096 metgrid
lrwxrwxrwx 1     23 metgrid.exe -> metgrid/src/metgrid.exe
-rw-r--r-- 1    705 namelist.wps
-rw-r--r-- 1   2749 namelist.wps.all_options
-rw-r--r-- 1   1637 namelist.wps.global
-rw-r--r-- 1   6232 README
drwxr-xr-x 4   4096 ungrib
lrwxrwxrwx 1     21 ungrib.exe -> ungrib/src/ungrib.exe
drwxr-xr-x 3   4096 util

步骤1:Define model domains with geogrid

模型粗域和任何嵌套域均在 namelist.wps 文件的 &geogrid 记录中定义,此外,还需要设置 &share namelist 记录中的参数。下面给出了这两个 namelist 记录的示例(有关每个变量的用途和选项的更多信息,请参阅 WPS Namelist 变量)。

&sharewrf_core = 'ARW',max_dom = 2,start_date = '2019-09-04_12:00:00','2019-09-04_12:00:00',end_date   = '2019-09-06_18:00:00','2019-09-04_12:00:00',interval_seconds = 10800,io_form_geogrid = 2
/&geogridparent_id         =   1,   1,parent_grid_ratio =   1,   3,i_parent_start    =   1,  53,j_parent_start    =   1,  25,e_we              =  150, 220,e_sn              =  130, 214,geog_data_res     = 'default','default',dx = 15000,dy = 15000,map_proj = 'lambert',ref_lat   =  33.00,ref_lon   = -79.00,truelat1  =  30.0,truelat2  =  60.0,stand_lon = -79.0.,geog_data_path = '/glade/work/wrfhelp/WPS_GEOG/'
/

总结与 geogrid 相关的 &share 名称列表记录的一组典型变化,

  • wrf_core:WRF 动态核心。如果 WPS 正在运行 ARW 模拟,则应将 wrf_core 设置为“ARW”,如果正在运行 NMM 模拟,则应将其设置为“NMM”。
  • max_dom:域的总数(对于 ARW)或嵌套级别(对于 NMM)
  • io_form_geogrid:geogrid 生成的文件的输出格式(geo_em*)

注意:由于 geogrid 仅生成与时间无关的数据,因此 geogrid 会忽略 start_date、end_date 和 interval_seconds 变量。可选地,可以使用 opt_output_from_geogrid_path 变量指示域文件应写入的位置(如果不是默认位置,则为当前工作目录)

在 &geogrid namelist 记录中,定义了模拟域的投影,以及所有模型网格的大小和位置。地图投影由 map_proj 变量指定。地图投影的详细介绍可参见另一博客-【WRF理论第六期】研究区设置技巧及投影介绍。
在这里插入图片描述

除了设置与模型域的投影、位置和覆盖范围相关的变量外,还必须使用 geog_data_path 变量指定静态地理数据集的路径。设置 geog_data_res 会告诉 geogrid 从哪个静态数据分辨率进行插值,并且该值应与 GEOGRID.TBL 中的数据分辨率之一匹配。

根据 wrf_core 名称列表变量的值,必须将适当的 GEOGRID.TBL 文件与 geogrid 一起使用,因为 WPS 插值的网格交错在动态核心之间有所不同。

  • 对于 ARW,应使用 GEOGRID.TBL.ARW 文件
  • 对于 NMM,应使用 GEOGRID.TBL.NMM 文件

通过将正确的文件链接到 geogrid 目录中的 GEOGRID.TBL(或 opt_geogrid_tbl_path 指定的目录中,如果此变量在名称列表中设置)来选择适当的 GEOGRID.TBL。

ls -ls geogrid/GEOGRID.TBLlrwxrwxrwx  1         15  GEOGRID.TBL -> GEOGRID.TBL.ARW

在 namelist.wps 中适当定义模拟粗域和嵌套域后,可以运行 geogrid.exe 可执行文件来生成域文件。

  • 对于 ARW 域,域文件命名为 geo_em.d0N.nc,其中 N 是每个文件中定义的嵌套数。
  • 当针对 NMM 域运行时,geogrid 会为粗域生成文件 geo_nmm.d01.nc,并为每个嵌套级别 N 生成 geo_nmm_nest.l0N.nc 文件。

另请注意,文件后缀将根据所选的 io_form_geogrid 而有所不同。要运行 geogrid,请发出以下命令:

./geogrid.exe

当 geogrid.exe 完成运行时,将显示以下消息

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  Successful completion of geogrid.        !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

并且 WPS 根目录(或 opt_output_from_geogrid_path 指定的目录,如果设置了此变量)的列表应显示域文件。如果没有,请查阅 geogrid.log 文件以确定失败的可能原因。有关详细信息,请参阅检查 WPS 输出。

ls -ls-rw-r--r-- 1  1957004 geo_em.d01.nc
-rw-r--r-- 1  4745324 geo_em.d02.nc
-rw-r--r-- 1    11169 geogrid.log

步骤2:Extracting Meteorological Fields from GRIB Files with Ungrib

已经下载了 GRIB 格式的气象数据,将字段提取为中间格式的第一步是编辑 namelist.wps 文件的 share 和 ungrib 名称列表记录 - 该文件与用于定义模拟域的文件相同。下面给出了两个名称列表记录的示例。

&sharewrf_core = 'ARW',max_dom = 2,start_date = '2019-09-04_12:00:00','2019-09-04_12:00:00',end_date   = '2019-09-04_18:00:00','2019-09-04_12:00:00',interval_seconds = 10800,io_form_geogrid = 2
/&ungribout_format = 'WPS',prefix     = 'FILE'
/

共享名称列表(share) 记录中,与 ungrib 相关的变量是粗域的开始和结束时间(start_date 和 end_date;或者 start_year、start_month、start_day、start_hour、end_year、end_month、end_day 和 end_hour)以及气象数据文件之间的间隔(interval_seconds)。

在 ungrib 名称列表记录中,变量 out_format 用于选择 ungrib 将写入的中间数据格式;metgrid 程序可以读取 ungrib 支持的任何格式(“WPS”、“SI”和“MM5”- 建议值为“WPS”)。
用户还可以使用前缀变量为中间文件指定路径和前缀。例如,如果前缀设置为“GFS”,则 ungrib 生成的中间文件将根据 GFS:YYYY-MM-DD_HH 命名,其中 YYYY-MM-DD_HH 是文件中数据的有效时间。

在适当修改 namelist.wps 后,必须提供 Vtable,并且必须将 GRIB 文件链接(或复制)到 ungrib 所需的文件名。WPS 为许多气象数据源提供了 Vtable 文件,并且适当的 Vtable 可以符号链接到文件 Vtable,这是 ungrib 所需的 Vtable 名称。

例如,如果 GRIB 数据来自 GFS 模型:

ln -s ungrib/Variable_Tables/Vtable.GFS Vtable

Ungrib 将尝试读取名为 GRIBFILE.AAA、GRIBFILE.AAB、…、GRIBFILE.ZZZ 的 GRIB 文件。

为了将 GRIB 文件链接到这些文件名,提供了一个 shell 脚本 link_grib.csh。link_grib.csh 脚本将要链接的 GRIB 文件列表作为命令行参数。例如,如果 GRIB 数据已下载到目录 /data/gfs,则文件将通过 link_grib.csh 链接,如下所示:

ls -ls /data/gfs-rw-r--r-- 1  42728372 gfs_20190904_12_00
-rw-r--r-- 1  48218303 gfs_20190904_12_03
-rw-r--r-- 1  48218303 gfs_20190904_12_06./link_grib.csh /data/gfs/gfs*

链接 GRIB 文件和 Vtable 后,WPS 目录列表应显示链接的 GRIBFILE* 文件及其链接路径。

ls -lslrwxrwxrwx 1       38 GRIBFILE.AAA -> /data/gfs/gfs_20190904_12_00
lrwxrwxrwx 1       38 GRIBFILE.AAA -> /data/gfs/gfs_20190904_12_03
lrwxrwxrwx 1       38 GRIBFILE.AAB -> /data/gfs/gfs_20190904_12_06

编辑 namelist.wps 并链接相应的 Vtable 和 GRIB 文件后,运行 ungrib.exe 可执行文件以生成中间格式的气象数据文件。要运行 ungrib,请输入以下内容:

./ungrib.exe

如果 ungrib.exe 成功运行,则会出现以下消息

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  Successful completion of ungrib.         !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

将被写入 ungrib.output 文件的末尾,中间文件应出现在当前工作目录中。
ungrib 写入的中间文件的名称将采用 FILE:YYYY-MM-DD_HH 格式(当然,除非前缀变量设置为 FILE 以外的前缀)。

ls -ls-rw-r--r-- 1  154946888 FILE:2019-09-04_12
-rw-r--r-- 1  154946888 FILE:2019-09-04_15
-rw-r--r-- 1  154946888 FILE:2019-09-04_18

步骤3:Horizontally interpolating meteorological data with metgrid

在运行 WPS 的最后一步,将 ungrib 提取的气象数据水平插入到 geogrid 定义的模拟网格中。为了运行 metgrid,必须编辑 namelist.wps 文件的 share 和 metgrid namelist 记录。这些记录的示例如下所示。

&sharewrf_core = 'ARW',max_dom = 2,start_date = '2019-09-04_12:00:00','2019-09-04_12:00:00',end_date   = '2019-09-04_18:00:00','2019-09-04_12:00:00',interval_seconds = 10800,io_form_geogrid = 2
/&metgridfg_name                      = 'FILE',io_form_metgrid              = 2,
/

到目前为止,通常不需要更改共享名称列表(share)记录中的任何变量,因为这些变量应该已经在前面的步骤中进行了适当设置。但是,如果在运行 geogrid 和 ungrib 时未编辑共享名称列表,则必须在共享名称列表记录中设置 WRF 动态核心、域数、开始和结束时间、气象数据之间的间隔以及静态域文件的路径,如运行 geogrid 和 ungrib 的步骤中所述。

在 metgrid 名称列表记录中,必须使用 fg_name 给出中间气象数据文件的路径和前缀,可以使用 constants_name 变量指定任何包含常量字段的中间文件的完整路径和文件名,可以使用 io_form_metgrid 变量指定水平插值文件的输出格式。 metgrid 名称列表记录中的其他变量,即 opt_output_from_metgrid_path 和 opt_metgrid_tbl_path,允许指定 metgrid 应写入插值数据文件的位置以及可以找到 METGRID.TBL 文件的位置。

与 geogrid 和 GEOGRID.TBL 文件一样,适用于 WRF 核心的 METGRID.TBL 文件必须链接到 metgrid 目录中(或 opt_metgrid_tbl_path 指定的目录中,如果设置了此变量)。如果使用 ARW 核心,默认情况下,以下内容已设置。

ls -ls metgrid/METGRID.TBLlrwxrwxrwx 1      15 METGRID.TBL -> METGRID.TBL.ARW

在适当编辑 namelist.wps 并验证将使用正确的 METGRID.TBL 后,通过发出命令运行 metgrid

./metgrid.exe

如果 metgrid 成功运行,则消息

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  Successful completion of metgrid.        !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

被打印出来,metgrid 输出文件应该出现在 WPS 根目录中(或者在 opt_output_from_metgrid_path 指定的目录中,如果设置了此变量)。

  • 这些文件将在 ARW 域的情况下命名为 met_em.d0N.YYYY-MM-DD_HH:mm:ss.nc,其中 N 是数据驻留在文件中的嵌套编号
  • 或者在 NMM 域的情况下命名为 met_nmm.d01.YYYY-MM-DD_HH:mm:ss.nc。这里,YYYY-MM-DD_HH:mm:ss 指的是每个文件中插入数据的日期。

如果在共享名称列表记录中给出的范围内的每个时间都不存在这些文件,请查阅 metgrid.log 文件以确定运行 metgrid 时的问题。

ls -ls-rw-r--r-- 1    5217648 met_em.d01.2008-03-24_12:00:00.nc
-rw-r--r-- 1    5217648 met_em.d01.2008-03-24_18:00:00.nc
-rw-r--r-- 1   12658200 met_em.d02.2008-03-24_12:00:00.nc
-rw-r--r-- 1      65970 metgrid.log

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493545.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源轮子 - Logback 和 Slf4j

spring boot内置:Logback 文章目录 spring boot内置:Logback一:Logback强在哪?二:简单使用三:把 log4j 转成 logback四:日志门面SLF4J1:什么是SLF4J2:SLF4J 解决了什么痛…

Linux下部署MySQL8.0集群 - 主从复制(一主两从)

目录 一、部署前准备 1、查看系统信息 # 查看系统版本 cat /etc/red* # 查看系统位数 getconf LONG_BIT[rootlocalhost ~]# cat /etc/red* CentOS Linux release 7.5.1804 (Core) [rootlocalhost ~]# getconf LONG_BIT 642、下载对应安装包 进入MySQL官网:https:…

springboot中的AOP以及面向切面编程思想

快速入门体验AOP aop中相关概念 实现导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 新建aop文件夹,里面声明XXXAspect类 @Aspect // 声…

在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。

在Java虚拟机(JVM)中,方法可以分为虚方法和非虚方法。以下是关于这两种方法的详细解释: 一、虚方法(Virtual Method) 定义:虚方法是指在运行时由实例的实际类型决定的方法。在Java中,所有的非私有、非静态、非final方法都是虚方法。当调用一个虚方法时,JVM会根据实…

Java图片拼接

最近遇到一个挺离谱的功能&#xff0c;某个表单只让上传一张图&#xff0c;多图上传会使导出失败。跟开发沟通后表示&#xff0c;这个问题处理不了。我... 遂自己思考&#xff0c;能否以曲线救国的方式拯救一下&#xff0c;即不伤及代码之根本&#xff0c;又能解决燃眉之急。灵…

webGL硬核知识:图形渲染管渲染流程,各个阶段对应的API调用方式

一、图形渲染管线基础流程概述 WebGL 的图形渲染管线大致可分为以下几个主要阶段&#xff0c;每个阶段都有其特定的任务&#xff0c;协同工作将 3D 场景中的物体最终转换为屏幕上呈现的 2D 图像&#xff1a; 顶点处理&#xff08;Vertex Processing&#xff09;阶段&#xff1…

大数据面试题--企业面试真题

大数据面试题--企业面试真题 PlanHub 点击访问获取&#xff1a; 大数据面试体系专栏_酷兜科技​www.kudoumh.top/hlwai/85.html 点击访问获取&#xff1a; 大数据面试体系专栏_酷兜科技​www.kudoumh.top/hlwai/85.html 大数据面试题汇总 HDFS 1、 HDFS 读写流程。 2、HDF…

lambda初探(一)

发生捕获时&#xff0c;拿到x,y的值 退出lambda表达式后&#xff0c;foo外层的值不变化。foo内部的x&#xff0c;值是持续的&#xff0c;像static。即使退出foo函数后&#xff0c;值的状态依然保持。 外层x的值变化&#xff0c;并不影响foo内部。 foo运行了两次&#xff0c;内…

【D3.js in Action 3 精译_046】DIY 实战:在 Observable 平台利用饼图布局函数实现 D3 多个环形图的绘制

当前内容所在位置&#xff1a; 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段&#xff08;一&#xff09;5.1.2 饼图布局生成器&#xff08;二&#xff09;5.1.3 圆弧的绘制&#xff08;三&#xff09;5.1.4 数据标签的添加&#xff08;四&#…

基于Spring Boot的智慧农业专家远程指导系统

一、系统背景与意义 随着科技的不断进步&#xff0c;农业领域也在积极寻求创新与发展。然而&#xff0c;传统农业生产中农民往往依靠经验进行种植和养殖&#xff0c;缺乏科学的指导和技术支持。同时&#xff0c;农业专家资源有限&#xff0c;难以覆盖广大的农村地区&#xff0…

【JavaEE初阶】线程 和 thread

本节⽬标 认识多线程 掌握多线程程序的编写 掌握多线程的状态 一. 认识线程&#xff08;Thread&#xff09; 1概念 1) 线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏着多份代码. 还…

练习题 最小栈

最小栈 最小栈 class MinStack {private Stack<Integer> stack;private Stack<Integer> minstack;public MinStack() {stacknew Stack<>();minstacknew Stack<>();}public void push(int val) {stack.push(val);if(minstack.empty()){minstack.push(…

全志H618 Android12修改doucmentsui鼠标单击图片、文件夹选中区域

背景: 由于当前的文件管理器在我们的产品定义当中,某些界面有改动的需求,所以需要在Android12 rom中进行定制以符合当前产品定义。 需求: 在进入File文件管理器后,鼠标左击整个图片、整个文件夹可以选中该类型,进行操作,故代码分析以及客制化如下: 主要涉及的代码:…

堆【Lecode_HOT100】

文章目录 1.数组中的第&#xff2b;个最大元素No.2152.前K个高频元素347 1.数组中的第&#xff2b;个最大元素No.215 方法一&#xff1a;NlogN不能满足时间复杂度的要求 public int findKthLargest(int[] nums, int k) {Arrays.sort(nums);return nums[nums.length-k];}方法二&…

Android 搭建AIDL Client和Server端,双向通信

一、背景 使用AIDL,搭建Client和Server端,实现跨进程通讯,即两个应用之间可以相互通讯。这里列举AIDL实现的方式和需注意的细节&#xff0c;并附上源码。 二、实现方式 2.1 定义AIDL需要的接口,名字为xxx.aidl,Client和Server端 AIDL接口的包名和aidl文件必须一致&#xff0c…

HIPT论文阅读

题目《Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning》 论文地址&#xff1a;[2206.02647] Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning 项目地址&#xff1a;mahmoodlab/HI…

[ESP]从零开始的Arduino IDE安装与ESP环境配置教程

一、前言 最近也是在比赛方面比较忙&#xff0c;没有更多的时间和精力去更新长文章了。这几周都更倾向于环境搭建的教程&#xff0c;这类教程写起来确实方便&#xff0c;也不怎么费时间&#xff0c;一个下午基本可以搞定&#xff0c;哈哈&#xff0c;我保证不是在为自己想摆烂找…

投标心态:如何在“标海战术”中保持清醒的头脑?

在竞争激烈的市场环境下&#xff0c;“标海战术”——即大规模参与投标——已经成为许多企业争取市场份额的重要策略。然而&#xff0c;盲目追求投标数量可能导致资源浪费、团队疲劳以及战略目标的模糊化。在这种高强度的竞争模式中&#xff0c;如何保持清醒的头脑&#xff0c;…

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候&#xff0c;需要使用Scintilla编辑器&#xff0c;来高亮显示SQL语句&#xff0c;作为C/C领域最成熟稳定又小巧的开源编辑器&#xff0c;Scintilla提供了强大的功能&#xff0c;wxWidgets对Scintilla进行包装后的是控件类&#xff1a;…

【原生js案例】让你的移动页面实现自定义的上拉加载和下拉刷新

目前很多前端UI都是自带有上拉加载和下拉刷新功能,按照官网配置去实现即可,比如原生小程序,vantUI等UI框架,都替我们实现了内部功能。 那如何自己来实现一个上拉加载和下拉刷新的功能? 实现效果 不用浏览器的css滚动条,自定义实现滚动效果 自定义实现滚动,添加上拉加载…