当前位置: 首页 > news >正文

【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

参考

相关文章:

【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:Extract…...

SD ComfyUI工作流 根据图像生成线稿草图

文章目录 线稿草图生成SD模型Node节点工作流程工作流下载效果展示线稿草图生成 该工作流的设计目标是将输入的图像转换为高质量的线稿风格输出。其主要流程基于 Stable Diffusion 技术,结合文本和图像条件,精确生成符合预期的线条艺术图像。工作流的核心是通过模型的条件设置…...

挑战一个月基本掌握C++(第六天)了解函数,数字,数组,字符串

一 C函数 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上&#xff…...

git中的多人协作

目录 1.1多人协作1.1.1创建仓库1.1.2协作处理1.1.3冲突处理 1.2分支推送协作1.3分支拉取协作1.4远程分支的删除 1.1多人协作 1.1.1创建仓库 新建两个文件夹,不需要初始化为git仓库,直接克隆远程仓库命名testGit1,testGit2 指定本地仓库级别…...

解决新安装CentOS 7系统mirrorlist.centos.org can‘t resolve问题

原因 mirrorlist.centos.org yum源用不了 解决办法就是 # cd /etc/yum.repos.d/ # mv CentOS-Base.repo CentOS-Base.repo_bak # vim CentOS-Base.repoCentOS系统操作 # mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/*.repo_bak # curl -o /etc/yum.repos.d/CentOS-Linux-Ba…...

RK3588 , mpp硬编码yuv, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBRK3588 , mpp硬编码yuv, 保存MP4视频文件....

Elasticsearch:什么是查询语言?

查询语言定义 查询语言包括数据库查询语言 (database query language - DQL),是一种用于查询和从数据库检索信息的专用计算机语言。它充当用户和数据库之间的接口,使用户能够管理来自数据库管理系统 (database management system - DBMS) 的数据。 最广…...

均值聚类算法

K-均值聚类算法是一种常用的无监督学习算法,用于将数据集划分为 K 个簇。它基于以下的思想:通过计算数据点与各个簇中心之间的距离来确定数据点所属的簇,并更新簇中心来最小化簇内数据点的平方误差。K-均值算法的步骤如下: 1. 选…...

MySQL 中快速插入大量数据

在 MySQL 中快速插入大量数据(例如 20 万条记录)可以通过多种方法实现。以下是一些优化技巧和步骤,可以帮助你高效地插入大量数据: 1. 禁用索引和约束(如果可能) 在插入大量数据之前,禁用索引和…...

腾讯云智能结构化OCR:以多模态大模型技术为核心,推动跨行业高效精准的文档处理与数据提取新时代

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…...

最大似然检测在通信解调中的应用

最大似然检测(Maximum Likelihood Detection,MLD),也称为最大似然序列估计(Maximum Likelihood Sequence Estimation,MLSE),是一种在通信系统中广泛应用的解调方法。其核心思想是在给…...

SKETCHPAD——允许语言模型生成中间草图,在几何、函数、图算法和游戏策略等所有数学任务中持续提高基础模型的性能

概述 论文地址:https://arxiv.org/pdf/2406.09403 素描是一种应用广泛的有效工具,包括产生创意和解决问题。由于素描能直接传达无法用语言表达的视觉和空间信息,因此从古代岩画到现代建筑图纸,素描在世界各地被用于各种用途。儿童…...

[JAVA备忘录] Lambda 表达式简单介绍

目录 前言 函数式接口 Lambda 表达式使用实例 简单示例 1. 无参数,无返回值 2. 有参数,无返回值 3. 无参数,有返回值 4. 有参数,有返回值 解释: 集合框架 1.forEach:遍历集合 2.排序&#xff1…...

[python]使用flask-caching缓存数据

简介 Flask-Caching 是 Flask 的一个扩展,为任何 Flask 应用程序添加了对各种后端的缓存支持。它基于 cachelib 运行,并通过统一的 API 支持 werkzeug 的所有原始缓存后端。开发者还可以通过继承 flask_caching.backends.base.BaseCache 类来开发自己的…...

裸机按键输入实验

一、硬件原理分析 按键就两个状态:按下或弹起,将按键连接到一个 IO 上,通过读取这个 IO 的值就知道按 键是按下的还是弹起的。至于按键按下的时候是高电平还是低电平要根据实际电路来判断。前 面几章我们都是讲解 I.MX6U 的 GPIO 作为输出使用…...

GaussDB运维管理工具(二)

GaussDB运维管理工具(二) 集群管理组件cm_ctl工具介绍cm_ctl工具使用查询集群状态启停集群主备切换重建备DN检测进程运行查看实例配置文件手动剔除故障CNCM参数获取和配置停止仲裁 Cluster Manager(缩写为CM)是GaussDB的集群管理工…...

【HarmonyOS之旅】HarmonyOS开发基础知识(一)

目录 1 -> 应用基础知识 1.1 -> 用户应用程序 1.2 -> 用户应用程序包结构 1.3 -> Ability 1.4 -> 库文件 1.5 -> 资源文件 1.6 -> 配置文件 1.7 -> pack.info 1.8 -> HAR 2 -> 配置文件简介 2.1 -> 配置文件的组成 3 -> 配置文…...

Mysql数据究竟是如何存储的

Mysql行列式 开篇 ​ 笔者这几日在学习mysql是这么运行的这本书,感觉书中的内容受益匪浅,想整理成自己的话分享给大家,平时大家工作和生活中可能没有时间去专心投入读取一本书,而mysql是这么运行的这本书需要投入大量的时间的学…...

STM32单片机使用CAN协议进行通信

CAN总线(控制器局域网总线) 理论知识 CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线 CAN总线特征 两根通信线(CAN_H、CAN_L),线路少,无需共地差分信号通信&…...

Docker 入门:如何使用 Docker 容器化 AI 项目(二)

四、将 AI 项目容器化:示例实践 - 完整的图像分类与 API 服务 让我们通过一个更完整的 AI 项目示例,展示如何将 AI 项目容器化。我们以一个基于 TensorFlow 的图像分类模型为例,演示如何将训练、推理、以及 API 服务过程容器化。 4.1 创建 …...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...