CN113900808B - 一种基于任意多面体非结构网格的mpi并行数据结构 - Google Patents
一种基于任意多面体非结构网格的mpi并行数据结构 Download PDFInfo
- Publication number
- CN113900808B CN113900808B CN202111176696.XA CN202111176696A CN113900808B CN 113900808 B CN113900808 B CN 113900808B CN 202111176696 A CN202111176696 A CN 202111176696A CN 113900808 B CN113900808 B CN 113900808B
- Authority
- CN
- China
- Prior art keywords
- grid
- units
- connection relation
- elements
- global
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
- G06F30/28—Design optimisation, verification or simulation using fluid dynamics, e.g. using Navier-Stokes equations or computational fluid dynamics [CFD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2113/00—Details relating to the application field
- G06F2113/08—Fluids
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2119/00—Details relating to the type or aim of the analysis or the optimisation
- G06F2119/14—Force analysis or force optimisation, e.g. static or dynamic forces
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Fluid Mechanics (AREA)
- Computing Systems (AREA)
- Human Computer Interaction (AREA)
- Algebra (AREA)
- Complex Calculations (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于任意多面体非结构网格的MPI并行数据结构,使用多面体非结构网格对流场区域进行网格划分,按照划分网格的网格元素进行全局编号,并记录不同网格元素之间的连接关系,其中,网格元素包括点、线、面、单元,通过自定义分区程序对网格进行分区生成若干网格块,并将网格块分配至不同的进程且每个进程分配至少一个网格块,创建并存储进程内不同网格元素的分布式列表,将网格元素的分布式列表结合全局的网格连接关系生成当前进程中的网格连接关系,并使用稀疏矩阵CSR方式存储当前进程内的网格连接关系;本发明的MPI并行数据结构,能够降低单CPU存储负荷保证CFD程序求解规模,同时可以保持较高的并行效率。
Description
技术领域
本发明属于算流体力学计算领域,尤其是MPI并行数据结构领域。
背景技术
随着飞行器外形日益复杂,网格规模日益扩大,同时高精度格式需要巨大的计算开销,传统单处理器的串行求解将很难满足实际需求,因此流体力学CFD的实际应用需要借助高性能的并行计算方法,CFD中常用的并行编程模型主要包括OpenMP、CUDA等共享存储模型和MPI等分布式存储模型;由于CFD数值求解中,网格单元之间的求解是耦合的,因此直接使用OpenMP等共享存储模型其并行效率很低,同时对于大规模网格,单机内存可能无法存储所有网格数据;MPI等分布式存储模型配合自定义分区工具(如Metis)的使用,将整体网格的求解划分到多个进程中,通过MPI函数实现进程之间的通信。这种分布式存储的方式很适合CFD的并行计算;尽管MPI并行编程模型很适合CFD的并行计算,但是程序的结构设计比较复杂,具体的对于网格元素如何分布式表示,网格元素之间的连接关系如何分布式存储,是实现并行的难点,尤其对于任意多面体非结构网格,其网格信息较于结构网格更难处理。
发明内容
为了解决上述的问题,本发明通过以下技术方案来实现上述目的:
一种基于任意多面体非结构网格的MPI并行数据结构,包括以下步骤,
S1、使用多面体非结构网格对流场区域进行网格划分;
S2、按照划分网格的网格元素进行全局编号,并记录不同网格元素之间的连接关系,其中,网格元素包括点、线、面、单元;
S3、通过自定义分区程序对网格进行分区生成若干网格块,并将网格块分配至不同的进程且每个进程分配至少一个网格块,其中,进程数为m,m≥1;
S4、创建并存储第i进程内不同网格元素的分布式列表,其中,1≤i≤m;
S5、将网格元素的分布式列表结合全局的网格连接关系生成当前i进程中的网格连接关系,并使用稀疏矩阵CSR方式存储i进程内的网格连接关系,其中,1≤i≤m。
作为本发明的进一步优化方案,所述网格元素进行全局编号的步骤为:
S21、由网格元素的点坐标和点、线之间的连接关系,确定点和线的全局编号;
S22、采用网格拓扑结构依次确定网格元素中面的全局编号和单元的全局编号。
作为本发明的进一步优化方案,所述网格分区的方式包括多级递归二分法和多级k路划分,其中,若分区个数小于8时,采用多级递归二分法;若分区个数大于等于8时,采用多级k路划分。
作为本发明的进一步优化方案,所述创建i进程中分布式列表的步骤包括:
S41、在每个进程中生成单元局部编号和全局编号的映射数组;
S42、根据网格拓扑结构在编号映射数组中增加虚拟单元编号,其中,虚拟单元指的是与当前进程相邻的单元;
S43、创建单元的分布式列表,然后生成其他网格元素的分布式列表。
作为本发明的进一步优化方案,所述创建单元的分布式列表的内容包括用于进程之间通信的单元,该单元包括网格块内边界单元和虚拟单元。
作为本发明的进一步优化方案,所述存储第i进程内不同网格元素的分布式列表的内容包括网格元素的全局编号、当前进程中局部编号、在相邻进程中的局部编号。
作为本发明的进一步优化方案,所述进程之间的通信采用MPI并行通信方式,且每个进程均遍历所有网格块;当所遍历的网格块属于当前进程时,则向邻居网格块所在进程发送数据;当所遍历的网格块属于其邻居时,则从邻居网格块所在进程接收数据;其中,发送和接受数据使用MPI非阻塞式发送接受函数,实际计算部分在MPI后台进行。
作为本发明的进一步优化方案,所述进程内的网格连接关系包括进程内网格元素的分布式列表、CSR存储信息、连接关系局部编号对应的全局编号。
作为本发明的进一步优化方案,所述稀疏矩阵CSR方式存储i进程内的单元和面之间网格连接关系的实现方式包括记录单元周围面数量的一维数组及记录单元周围面进程内局部编号的一维数组。
本发明的有益效果在于:
1)本发明通过采用Metis分区和MPI并行通信的策略,等效于将任务分成多个子任务,可以有效降低单CPU存储负荷,保证CFD程序求解规模;
2)MPI通信模式使用非阻塞式通信,可以实现计算与通信的重叠,保持较高的并行效率;
3)分布式列表和网格连接关系分布式CSR存储方式,适应于任意多面体非结构网格,可以有效提高并行CFD程序的运行;并且按行压缩稀疏矩阵CSR方式可以减少网格连接关系所占存储空间。
附图说明
图1是本发明中多面体非结构网格的MPI并行数据结构实现的流程图;
图2为本发明中分布式数据的产生与存储示意图;
图3为本发明中进程内单元属性分类图;
具体实施方式
下面结合附图对本申请作进一步详细描述,有必要在此指出的是,以下具体实施方式只用于对本申请进行进一步的说明,不能理解为对本申请保护范围的限制,该领域的技术人员可以根据上述申请内容对本申请作出一些非本质的改进和调整。
如图1至图3所示的一种基于任意多面体非结构网格的MPI并行数据结构,通过网格信息的分布式存储,提高网格求解规模并且提升并行求解效率;
其中,如图1所示的并行数据结构实现步骤包括:
步骤1:使用任意多面体非结构网格对所研究的流场区域进行网格划分;
步骤2:创建点、线、面、单元等网格元素的编号信息,根据网格拓扑结构,记录网格元素之间连接关系;
步骤3:使用Metis分区程序包对网格进行分区,根据为当前求解任务设置的进程数,一个进程分配一个或多个网格块;
步骤4:运行CFD并行程序,为各进程创建网格元素的分布式列表;
步骤5:根据点、线、面、单元等网格元素的分布式列表数据以及全局网格连接关系,通过分布式CSR存储方式存储进程内网格连接关系;
具体的,步骤S1如图2所示包括:使用网格划分软件对所研究流场使用非结构网格进行网格划分,网格数据保持成自定义后缀.emesh的网格文件;网格文件内容主要包括:①网格点的坐标;②网格线与点的连接关系,即网格线两端的点编号;③边界的网格线编号;优选的可以选择发明人研究团队自主研发的CFD解算器EasyCFD求解流场;
步骤S2、将网格划分软件中生成的网格文件(后缀为.emesh)导入CFD解算器中,根据程序前处理模块功能,生成点、线、面、单元等网格元素的全局编号信息,并记录网格元素之间的连接关系;其中,该网格元素之间的连接关系包括:单元与单元、单元与面、单元与点、面与线、线与点等连接关系;
步骤S3、使用自定义分区程序包对网格进行分区,根据为当前求解任务设置的进程数,一个进程分配一个或多个网格块;例如、网格的分区可通过调用Metis程序库中的METIS_PartGraphRecursive或METIS_PartGraphKway来实现;其中,若分区个数小于8时,采用多级递归二分法,即METIS_PartGraphRecursive函数;若分区个数大于等于8时,采用多级k路划分,即METIS_PartGraphKway函数;
如图3所示具体的,进程内的网格单元为原始网格的部分网格块的网格单元的集合,进程内网格单元属性包括:内部单元、边界单元和虚拟单元三类,①内部单元:网格块内部,仅在当前进程中参与计算;②边界单元:网格块边界,参与当前进程和相邻进程的计算,在相邻进程中为虚拟单元;③虚拟单元:与边界单元相邻的其他进程单元,需要参与到当前进程计算,在相邻进程中为边界单元;
步骤S4、建并存储第i进程内不同网格元素的分布式列表,其中,创建i进程中分布式列表的步骤包括:
S41、在每个进程中生成单元局部编号和全局编号的映射数组;
S42、根据网格拓扑结构在编号映射数组中增加虚拟单元编号,其中,虚拟单元指的是与当前进程相邻的单元;
S43、创建单元的分布式列表,然后生成其他网格元素的分布式列表;
具体的,步骤S43中创建单元的分布式列表的内容,如表1所示;
①进程信息:当前MPI进程编号mpi_comm_rank_和参与MPI通信的总进程数mpi_comm_size_;
②网格元素数量信息:全局网格元素数量size_global、局部网格元素的数量size_local_和虚拟网格元素数量size_ghost_;
③全局和局部编号映射信息:网格块内网格元素和虚拟网格元素局部编号对应的全局编号item_list_、网格块内网格元素全局编号对应的局部编号item_idx_map_、虚拟网格元素全局编号对应的局部编号ghost_idx_map_;
④用于进程之间通信的网格元素信息:内部网格块边界网格元素编号ghosts_of_cur_和虚拟网格元素编号ghosts_of_adj_;
⑤进程内编号重新排序次数reordered_times_;
表1分布式列表存储内容(以单元为例)
其中,用于进程之间通信的网格元素信息(以单元为例),包括用于进程之间通信的单元,该单元包括网格块内边界单元和虚拟单元;存储第i进程内不同网格元素的分布式列表的存储信息包括(以边界单元为例):①全局编号。②当前进程中局部编号。③在相邻进程中的局部编号(在相邻进程中,该边界单元为虚拟单元);
进程内编号重新排序的方法为RCM算法,经过RCM排序后稀疏矩阵非零元素将集中在对角线附近,对于CFD线性化后的方程组,使用排序后的编号可以将雅克比矩阵非零元素集中在对角线附近;
此外,进程之间的通信采用MPI并行通信方式,且每个进程均遍历所有网格块;当所遍历的网格块属于当前进程时,则向邻居网格块所在进程发送数据;当所遍历的网格块属于其邻居时,则从邻居网格块所在进程接收数据;并且发送和接受数据使用MPI非阻塞式发送接受函数,实际计算部分在MPI后台进行;
步骤S5,将网格元素的分布式列表结合全局的网格连接关系生成当前i进程中的网格连接关系,并使用稀疏矩阵CSR方式存储i进程内的网格连接关系,其中,1≤i≤m;
具体的,进程内的网格连接关系分布式存储内容主要包括(以单元面连接关系为例):以表2为例;
①分布式列表信息:进程内单元的分布式列表dl_row_和面的分布式列表dl_col_;
②CSR存储信息:记录单元周围面数量的一维数组offset和单元周围面编号的一维数组data;
③连接关系局部编号对应的全局编号global_edge_idx。表2为分布式网格连接关系存储内容(以单元面连接关系为例);
表2分布式网格连接关系存储内容(以单元面连接关系为例)
稀疏矩阵CSR方式存储i进程内的单元和面之间网格连接关系的实现方式包括记录单元周围面数量的一维数组及记录单元周围面进程内局部编号的一维数组;
本发明中采用网格分区和MPI并行通信的策略,等效于将任务分成多个子任务,可以有效降低单CPU存储负荷,保证CFD程序求解规模;其中,MPI通信模式使用非阻塞式通信,可以实现计算与通信的重叠,保持较高的并行效率;
MPI并行数据结构主要表现为使用分布式列表的方式存储进程内网格元素,使用分布式CSR方式存储网格连接关系,按行压缩稀疏矩阵CSR方式可以减少网格连接关系所占存储空间,因此,这种分布式结构和CSR存储方式可以有效降低单CPU存储负荷,保证CFD程序求解规模,适应于任意多面体非结构网格,可以有效提高并行CFD程序;
同时采用MPI_WINDOWS技术实现虚拟元素数据的更新,可有效提高具备RDMA特性的计算机集群上的运行性能。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
Claims (4)
1.一种基于任意多面体非结构网格的MPI并行数据结构的实现方法,其特征在于:包括以下步骤,
S1、使用多面体非结构网格对流场区域进行网格划分;
S2、按照划分网格的网格元素进行全局编号,并记录不同网格元素之间的连接关系,其中,网格元素包括点、线、面、单元;
S3、通过自定义分区程序对网格进行分区生成若干网格块,并将网格块分配至不同的进程且每个进程分配至少一个网格块,其中,进程数为m,m ≥ 1;
S4、创建并存储第i进程内不同网格元素的分布式列表,其中,1 ≤ i ≤ m;
S5、将网格元素的分布式列表结合全局的网格连接关系生成当前i进程中的网格连接关系,并使用稀疏矩阵CSR方式存储i进程内的网格连接关系,其中,1 ≤ i ≤ m;
所述创建的第i进程中分布式列表的步骤包括:
S41、在每个进程中生成单元局部编号和全局编号的映射数组;
S42、根据网格拓扑结构在编号映射数组中增加虚拟单元编号,其中,虚拟单元指的是与当前进程相邻的单元;
S43、创建单元的分布式列表,然后生成其他网格元素的分布式列表;
所述存储第i进程内不同网格元素的分布式列表的内容包括网格元素的全局编号、当前进程中局部编号、在相邻进程中的局部编号;
所述创建单元的分布式列表的内容包括用于进程之间通信的单元,该单元包括网格块内边界单元和虚拟单元;
所述进程内的网格连接关系包括进程内网格元素的分布式列表、CSR存储信息、连接关系局部编号对应的全局编号;
所述稀疏矩阵CSR方式存储i进程内的单元和面之间网格连接关系的实现方式包括记录单元周围面数量的一维数组及记录单元周围面进程内局部编号的一维数组。
2.根据权利要求1所述的一种基于任意多面体非结构网格的MPI并行数据结构的实现方法,其特征在于:所述网格元素进行全局编号的步骤为:
S21、由网格元素的点坐标和点、线之间的连接关系,确定点和线的全局编号;
S22、采用网格拓扑结构依次确定网格元素中面的全局编号和单元的全局编号。
3.根据权利要求2所述的一种基于任意多面体非结构网格的MPI并行数据结构的实现方法,其特征在于:所述网格分区的方式包括多级递归二分法和多级k路划分,其中,若分区个数小于8时,采用多级递归二分法;若分区个数大于等于8时,采用多级k路划分。
4.根据权利要求3所述的一种基于任意多面体非结构网格的MPI并行数据结构的实现方法,其特征在于:所述进程之间的通信采用MPI并行通信方式,且每个进程均遍历所有网格块;当所遍历的网格块属于当前进程时,则向邻居网格块所在进程发送数据;当所遍历的网格块属于其邻居时,则从邻居网格块所在进程接收数据;其中,发送和接受数据使用MPI非阻塞式发送接受函数,实际计算部分在MPI后台进行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111176696.XA CN113900808B (zh) | 2021-10-09 | 2021-10-09 | 一种基于任意多面体非结构网格的mpi并行数据结构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111176696.XA CN113900808B (zh) | 2021-10-09 | 2021-10-09 | 一种基于任意多面体非结构网格的mpi并行数据结构 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113900808A CN113900808A (zh) | 2022-01-07 |
CN113900808B true CN113900808B (zh) | 2024-09-20 |
Family
ID=79190803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111176696.XA Active CN113900808B (zh) | 2021-10-09 | 2021-10-09 | 一种基于任意多面体非结构网格的mpi并行数据结构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113900808B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116225722B (zh) * | 2023-05-08 | 2023-07-14 | 中国空气动力研究与发展中心计算空气动力研究所 | 流场变量的通信方法、装置、终端设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461466A (zh) * | 2013-09-25 | 2015-03-25 | 广州中国科学院软件应用技术研究所 | 基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法 |
CN104765589A (zh) * | 2014-01-02 | 2015-07-08 | 广州中国科学院软件应用技术研究所 | 基于mpi的网格并行预处理方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190113597A (ko) * | 2018-03-27 | 2019-10-08 | 주식회사 엘쏠텍 | 오픈소스 코드를 이용한 통합 전산유체역학 환경 구축 장치 및 그 방법 |
CN108595277B (zh) * | 2018-04-08 | 2021-01-19 | 西安交通大学 | 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法 |
CN111367665B (zh) * | 2020-02-28 | 2020-12-18 | 清华大学 | 一种并行通信路由建立方法及系统 |
-
2021
- 2021-10-09 CN CN202111176696.XA patent/CN113900808B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461466A (zh) * | 2013-09-25 | 2015-03-25 | 广州中国科学院软件应用技术研究所 | 基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法 |
CN104765589A (zh) * | 2014-01-02 | 2015-07-08 | 广州中国科学院软件应用技术研究所 | 基于mpi的网格并行预处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113900808A (zh) | 2022-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111178519B (zh) | 卷积神经网络加速引擎、卷积神经网络加速系统及方法 | |
CN108416434A (zh) | 针对神经网络的卷积层与全连接层进行加速的电路结构 | |
CN110222818B (zh) | 一种用于卷积神经网络数据存储的多bank行列交织读写方法 | |
US20250097282A1 (en) | Three-class vertex degree aware-based 1.5-dimensional graph division method and application | |
CN111124675A (zh) | 一种面向图计算的异构存内计算设备及其运行方法 | |
CN110209353A (zh) | 区域耦合预报系统中roms模式的i/o并行加速方法、装置及介质 | |
CN113901746B (zh) | 一种用于向量代数的硬件加速器的设计方法 | |
WO2023045445A1 (zh) | 数据处理装置、数据处理方法及相关产品 | |
CN111639054A (zh) | 一种海洋模式与资料同化的数据耦合方法、系统及介质 | |
CN113900808B (zh) | 一种基于任意多面体非结构网格的mpi并行数据结构 | |
Bhatele et al. | Application-specific topology-aware mapping for three dimensional topologies | |
CN112732630A (zh) | 针对深度学习的浮点矩阵乘算子众核并行优化方法 | |
CN112015735A (zh) | 一种非结构化网格的数据存储结构及数据存储方法 | |
CN113191491B (zh) | 多维度并行的人工智能处理器架构 | |
CN105874437B (zh) | 存储器管理方法和装置 | |
CN117786909B (zh) | 基于cad的光伏系统快速布置方法及装置 | |
CN101436204A (zh) | 一种基于并行元胞自动机的城市演变模拟实现方法 | |
CN112988621A (zh) | 一种张量数据的数据载入装置及方法 | |
CN105373492A (zh) | 一种面向任务流的基于寄存器文件的快速数据交换结构 | |
CN116303219A (zh) | 一种网格文件的获取方法、装置及电子设备 | |
CN114969857B (zh) | 一种结构设计优化方法、系统、计算机设备和存储介质 | |
CN109271344A (zh) | 基于申威芯片架构并行文件读取的数据预处理方法 | |
Yang et al. | A parallel method for matrix inversion based on gauss-jordan algorithm | |
CN113297537B (zh) | 一种稀疏结构化三角方程组求解的高性能实现方法和装置 | |
CN113065035A (zh) | 一种单机核外属性图计算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |