首页/文章/ 详情

Fluent与Patran的接口实现及其在船舶力学中的应用

3月前浏览795

吴龙周 冷文浩

(中国船舶科学研究中心 无锡 116 信箱信息技术室, 214082)


摘  要:本文结合当前 FLUENT 和 Patran 软件的特点,并针对船舶力学计算、流固耦合分析等的需要,阐述了两者接口开发的重要性。文章还对 FLUENT 和 Patran 接口的功能、开发过程做了详细的介绍, 并给出了应用的算例说明,对接口在船舶力学中的应用做了有启发性的展望。

关键词:FLUENT Patran    前后处理系统  PCL  二次开发


1 引 言

1.1 FLUENT 和 Patran 软件各自的优势

FLUENT 是专业的流体计算软件,具有强大的流场计算功能。作为最通用的CFD 软件包,用来模拟从不可压缩到高度可压缩范围内的复杂流动。由于采用了多种求解方法和多重网格加速收敛技术,因而 FLUENT 能达到最佳的收敛速度和求解精度。灵活的非结构化网格和基于解的自适应网格技术及成熟的物理模型,使 FLUENT 在转捩与湍流、传热与相变、化学反应与燃烧、多相流、旋转机械、动/变形网格、噪声、材料加工、燃料电池等方面有广泛应用。FLUENT 在流场计算领域的强大,得到了业界的充分肯定。

MSC.PATRAN 最早由美国宇航局(NASA)倡导开发的,  是工业领域最著名的并行框架式有限元前后处理及分析系统, 其开放式、多功能的体系结构可将工程设计、工程分析、结果评估、用户化身和交互图形界面集于一身,构成一个完整 CAE 集成环境。其突出特点是:

l 实用性  MSC.PATRAN 的用户界面既容易使用又方便记忆。这就意味着当有经验的使用者正专著于他们的问题而不是如何使用软件时,  那些新用户也可以很快成为熟练的使用者。

l 完全的分析集成  将世界先导的不同类型的分析软件和技术集成 MSC.PATRAN 一个公共的环境中共用一个模型,  为用户提供了其他任何软件所无可比拟的灵活性,  使用户能够在最短的时间内根据多种类型的仿真结果对产品的整体设计给出正确的判断,  提出相应的改进建议。

l 用户化技术  用户可将 MSC.PATRAN 作为自己的前后处理器,  并利用其强大的 PCL 语言和编程函数库把自行开发的应用程序和功能及针对特殊要求开发的内容直接嵌入MSC.PATRAN 的框架系统,  或单独使用或与其它系统联合使用,  提高市场竞争能力。

显而易见,开发两者的接口是强强联合的举措。

1.2  舰船 CFD 研究的特点

中国船舶科学研究中心在舰船 CFD 计算方面,有多年的经验,在舰船建模、网格划分、边界条件设置等方面,已经有了相当成熟的积累。但这些经验和知识, 往往只存在于专家的头脑中,这显然不利于舰船 CFD 研究工作的继承以及工作的深入、持续地开展。  如果能够针对舰船 CFD 研究的特点,结合专家在 CFD 应用方面的宝贵经验,用一种客户化的开发工具,开发和研制舰船 CFD 方面的专用前后处理软件,并向专家系统靠拢,必将大大方便和促进舰船 CFD 研究工作的开展,也使舰船 CFD 研究经验得以传承和发展。

1.3  流固耦合计算的需求

开发 FLUENT 和 Patran 接口的一个明显的好处就是,将大大方便流固耦合计算的开展。

以前的做法是用 Gambit 建模并设置边界条件,在 FLUENT 中求解;将模型和流场计算结果再导入 Patran,作为结构分析的模型,用 Nastran 进行结构分析。如果涉及优化,则需多次重复以上过程。而如果有了 FLUENT 和 Patran 的接口话,则有如下明显的优势:

(1) 流场和结构分析的前后处理器统一在 Patran 一个平台下

(2) 流场和结构分析共用一个模型,避免了模型转换中信息的丢失和不一致

(3) 流场计算的结果可以直接作为结构计算的边界条件,便于迭代、优化计算

(4) 模型及其所有的相关数据,以数据库的形式得以管理

2 系统设计

2.1  总体框架设计

依据 Patran 的接口设计规范,构造出接口系统的总体框架图,如图 1 所示。模型在 Patran中建立好后,通过一个转换程序,生成 cas 文件,供 FLUENT 读入。经 FLUENT 计算后,将结果文件再读入 Patran,并可进一步处理为边界条件,供结构分析求解器(如 Nastran)使用。

2.2  功能模块设计

整个接口系统的功能模块,依据 FLUENT 和 Patran 的工作流程特点,可以设计为以下几个模块:

(1) 几何建模  此部分直接沿用 Patran 强大的几何建模和模型导入/导出接口。

(2) 网格划分  此部分也直接沿用 Patran 的网格划分功能。

(3) 物理模型  此部分要在 Patran 中实现 FLUENT 所支持的所有物理模型,如求解方程、湍流模式、辐射模型、多项流模型、离散相模型、组分反应、燃烧模型等。

(4) 材料特性  此部分包括流体和固体两大类材料,流体计算的材料特性参数要比结构计算的材料特性复杂,需要扩充。

(5) 边界条件  此部分要包括所有的流场计算边界条件,如进出口边界条件:压力、速度、质量进口、进风口、进气扇、压力出口、压力远场边界条件、质量出口、通风口、排气扇; 再如壁面,对称,周期,轴;内部单元区域:流体、固体(多孔是一种流动区域类型)  ;内部表面边界:风扇、散热器、多孔跳跃、壁面、内部;等等。

(6) 求解控制  此部分包括 Operating Condition、Periodic Condition、Solution Controls、Multigrid Controls 、Limits 、Initia 以及 Iterate 等。

image.png

3 系统实现

使用 Patran 的二次开发语言,编程实现了系统的操作界面和相关功能。

3.1 物理模型

image.png

上图 2 是物理模型设置的主控界面,包括了数值求解方法、传热模型、多项流模型、湍流模型、离散相模型、Operating 条件、Periodic 条件、求解控制等的设定。

下图 3 是湍流设置的界面,其它界面类似,不一一列出。

03a1f062-60a9-4b05-b4bd-75c346f38b46.png

图 3  湍流模型



3.2 材料设置

本模块能对 fluid 和solid 两大类材料进行管理,包括创建、修改、删除, 以及从数据库或者文件导入/导出材料。

图 4  材料主界面                                                        5 fluid 材料参数设置界面


image.pngimage.png

3.3  边界条件

该模块处理所有的边界条件,如下图 6、图 7 所示。

6fe6f83a-e751-4e68-9932-41d62ecbfc53.png

图 6      LBC 设置界面下

图 7 是压力进口边界条件的设置界面。

下图 8 是速度进口边界条件的设置界面。

其它边界条件界面类似,不一一列出。

image.pngimage.png

图 7  压力进口设置                                              图 8  速度进口设置

3.4 cas 文件生成

对要求解的模型,通过 Patran 界面上的一系列设置后,就可以把数据写成 FLUENT 计算所需要的 cas 文件。具体包括以下功能:

(1)读取模型设置的信息,按 FLUENT 的 cas 文件格式写出;

(2)读取材料信息,按 FLUENT 的 cas 文件格式写出;

(3)读取边界条件信息,按 FLUENT 的 cas 文件格式写出;

(4)读取单元信息,按 FLUENT 的 cas 文件格式写出。

3.5 rst 文件读入

经 FLUENT 求解器计算的结果文件,通过此模块读入 Patran,并按要求作为边界条件加载到模型上。


4 实例应用

应用开发完成的接口系统,我们用多个算例进行了应用,下面是 3 个典型的算例。

4.1 二维环面自然对流

物理模型为:有两个半径不一样的圆柱体,小圆柱体套在大圆柱体里面,小圆柱体温度高于大圆柱体。两者之间介质是空气,考虑重力作用,就有自然对流现象发生。

图 9 是 Patran 中设置此物理模型的界面之一。

image.png

图 9 二维环面自然对流 Patran 界面

下图 10 是用 patran 做前处理器,在 FLUENT 中计算的结果显示。

image.png

 10 二维环面自然对流 FLUENT 计算流场显示

4.2 圆柱绕流

圆柱绕流是经典的流体计算算例。图 11 是圆柱绕流在 Patran 中建模的界面之一。

image.png

图 11 圆柱绕流 Patran 设置界面

image.png

图 12 圆柱绕流 FLUENT 计算流场显示

4.3 二维粒子射流

物理模型为:有一左下和右上开空的矩形盒,流体从左下口进入,经盒子腔体,从右上口流出。在入口处撒播粒子,这些粒子会随流体运动。

图 13 是该模型在 Patran 中模型设置图之一。

image.png

图 13  二维粒子射流 Patran 设置界面

image.png

5 在船舶力学中的应用和展望

舰船 CFD 计算和研究是一项高技术含量而又纷繁复杂的工作,尤其是对船舶运动这样的复杂流况的研究,要求 CFD 软件对舰船的模型精确导入和边界条件等的正确模拟。中国船舶科学研究中心是国内唯一对舰船流场进行系统研究的单位,比如在以下几个专业方向,就做了大量的 CFD 计算和研究工作:

l 带自由面水面舰船粘性流场数值计算

l 带全附体水面舰船伴流场预报

l 带全附体水下航行器伴流场预报

l 均匀流中螺旋桨水动力性能计算

l 螺旋桨/船体流场整体计算

l 水下物体粘性流场计算

l 水下航行体泵喷推进器流场计算

l 辅助泵喷设计

l 气水两相流计算

如果能够基于这些舰船 CFD 研究领域多年积累起来的工程应用经验,开发 CFD/CAD软件接口和专家型的前后处理模块,并把它们集成到 CFD 系统中去,将给舰船 CFD 计算提供高效、适用的模型处理和前后处理手段,这不仅能提高舰船 CFD 研究的速度、质量,而且使我国的舰船 CFD 计算的水平提高到一个新的台阶。FLUENT 和 Patran 接口的开发,为这一思路提供了有益的支撑。

6 结语

利用 PCL 语言开发的 FLUENT 和Patran 接口,将业界两个功能强大的软件联系起来,充分发挥各自优势,必将大大方便工程分析人员的工作,提高效率,并有助于诸如流固耦合一类复杂问题研究的开展。另外,Patran 二次开发语言 PCL  的强大客户化功能,还将为流体专业应用领域的深入应用,提供快捷、适用的手段。


免责声明:


本页面/内容部分素材来源于互联网公 开 信 息,旨在传递更多信息,不代表本平台立场。

版权归原作者或机构所有,如涉及侵权,请通过平台联系我们,我们将在核实后第一时间处理。

本平台对转载内容的真实性、准确性不作任何保证,用户需自行判断并承担使用风险。

船舶FluentPatranStar-CCM+
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-04-30
最近编辑:3月前
仿真支持爱好者
在仿真的路上越走越远
获赞 333粉丝 21文章 318课程 0
点赞
收藏
作者推荐

嵌入式实时操作系统:DSP 微内核设计与实现电子书 212页

嵌入式实时操作系统:DSP 微内核设计与实现(DSP_Realtime_Operating_Systems_for_Embedded_Systems)电子书摘要:本书是嵌入式 DSP 实时操作系统微内核设计与实现的专业指南,围绕嵌入式实时操作系统内核开发展开系统讲解。先明确嵌入式系统对内存、性能、可移植性的核心需求,再阐述抢占式多任务、任务控制块、信号量、环形缓冲队列等核心概念与原理。书中完整呈现内核架构、硬件适配、任务切换、中断处理、进程通信、串口 I/O、内存管理的代码实现,覆盖系统启动、任务创建 / 调度 / 销毁全流程,提供基于 MC68000 系列处理器的工程实例与调试监控工具,还详解跨平台开发环境搭建与移植方法,为嵌入式 DSP 实时内核开发提供全栈技术参考。Realtime Operating SystemsConcepts and Implementation of Microkernels for Embedded SystemsDr. Jürgen Sauermann, Melanie ThelenPrefaceEvery year, millions of microprocessor and microcontroller chips are sold as CPUs for general purpose computers, such as PCs or workstations, but also for devices that are not primarily used as computers, such as printers, TV sets, SCSI controllers, cameras, and even coffee machines. Such devices are commonly called embedded systems. Surprisingly, the number of chips used for embedded systems exceeds by far the number of chips used for general purpose computers.Both general purpose computers and embedded systems (except for the very simple ones) require an operating system. Most general purpose computers (except mainframes) use either UNIX, Windows, or DOS. For these operating systems, literature abounds. In contrast, literature on operating systems of embedded systems is scarce, although many different operating systems for embedded systems are available. One reason for this great variety of operating systems might be that writing an operating system is quite a challenge for a system designer. But what is more, individually designed systems can be extended in exactly the way required, and the developer does not depend on a commercial microkernel and its flaws.The microkernel presented in this book may not be any better than others, but at least you will get to know how it works and how you can modify it. Apart from that, this microkernel has been used in practice, so it has reached a certain level of maturity and stability. You will learn about the basic ideas behind this microkernel, and you are provided with the complete source code that you can use for your own extensions.The work on this microkernel was started in summer 1995 to study the efficiency of an embedded system that was mainly implemented in C++. Sometimes C++ is said to be less efficient than C and thus less suitable for embedded systems. This may be true when using a particular C++ compiler or programming style, but has not been confirmed by the experiences with the microkernel provided in this book. In 1995, there was no hardware platform available to the author on which the microkernel could be tested. So instead, the microkernel was executed on a simulated MC68020 processor. This simulation turned out to be more useful for the development than real hardware, since it provided more information about the execution profile of the code than hardware could have done. By mere coincidence, the author joined a project dealing with automated testing of telecommunication systems. In that project, originally a V25 microcontroller had been used, running a cooperative multitasking operating system. At that time, the system had already reached its limits, and the operating system had shown some serious flaws. It became apparent that at least the operating system called for major redesign, and chances were good that the performance of the microcontroller would be the next bottleneck. These problems had already caused serious project delay, and the most promising solution was to replace the old operating system by the new microkernel, and to design a new hardware based on a MC68020 processor. The new hardware was ready in summer 1996, and the port from the simulation to the real hardware took less than three days. In the two months that followed, the applications were ported from the old operating system to the new microkernel. This port brought along a dramatic simplification of the application as well as a corresponding reduction in source code size. This reduction was possible because serial I/O and interprocess communication were now provided by the microkernel rather than being part of the applications.Although the microkernel was not designed with any particular application in mind, it perfectly met the requirements of the project. This is neither by accident nor by particular ingenuity of the author. It is mainly due to a good example: the MIRAGE operating system written by William Dowling of Sahara Software Ltd. about twenty years ago. That operating system was entirely written in assembler and famous for its real-time performance. Many concepts of the microkernel presented in this book have been adopted from the MIRAGE operating system.1 Requirements1.1 General RequirementsProper software design starts with an alyzing the requirements that have to be fulfilled by the design. For embedded systems, the requirements are defined by the purpose of the system. General definitions of the requirements are not possible: for example, the requirements of a printer will definitely be different from those of a mobile phone. There are, however, a few common requirements for embedded systems which are described in the following sections.1.2 Memory RequirementsThe first PCs ofthe early eighties had 40 kilobytes ofROM, 256 or 512 kilobytes of RAM, and optionally a hard disk drive with 5 or 10 megabytes capacity. In the mid-nineties, an off-the-shelf PC had slightly more ROM, 32 megabytes of RAM, and a hard disk drive of 2 or 4 gigabytes capacity. Floppy disks with 360 or 720 kilobyte capacity, which were the standard medium for software packages and backups, had been replaced by CD-ROM and tape streamers with capacities well above 500 megabytes. Obviously, capacity has doubled about every two years, and there is no indication that this trend will change. So why bother about memory requirements?A PC is an open system that can be extended both in terms of memory and peripherals. For a short while, a PC can be kept up to date with technological developments by adding more memory and peripherals until it is ultimately outdated. Anyway, a PC could live for decades; but its actual lifetime is often determined by the increasing memory demands of operating systems and applications rather than by the lifetime of its hardware. So to extend the lifetime of a PC as much as possible and thus to reduce the costs, its configuration has to be planned thoroughly.For a given embedded system, in contrast, the memory requirements are known in advance; so costs can be saved by using only as much memory as required. Unlike PCs, where the ROM is only used for booting the system, ROM size plays a major role for the memory requirements of embedded systems, because in embedded systems, the ROM is used as program memory. For the ROM, various types of memory are available, and their prices differ dramatically: EEPROMs are most expensive, followed by static RAMs, EPROMs, dynamic RAMs, hard disks,floppy disks, CD-ROMs, and tapes. The most economical solution for embedded systems is to combine hard disks (which provide non-volatility) and dynamic RAMs (which provide fast access times).Generally, the memory technology used for an embedded system is determined by the actual application: For example, for a laser printer, the RAM will be dynamic, and the program memory will be either EEPROM, EPROM, or RAM loaded from a hard disk. For a mobile phone, EEPROMs and static RAMs will rather be used.One technology which is particularly interesting for embedded systems is on-chip memory. Comparatively large on-chip ROMs have been available for years, but their lack of flexibility limited their use to systems produced in large quantities. The next generation of microcontrollers were on-chip EPROMs, which were suitable also for s maller quantities. Recent microcontrollers provide on-chip EEPROM and static RAM. The Motorola 68HC9xx series, for example, offers on-chip EEPROM of 32 to 100 kilobytes and static RAM of 1 to 4 kilobytes.With the comeback of the Z80 microprocessor, another interesting solution has become available. Although it is over two decades old, this chip seems to outperform its successors. The structure of the Z80 is so simple that it can be integrated in FPGAs (Field Programmable Logic Arrays). With this technique, entire microcontrollers can be designed to fit on one chip, providing exactly the functions required by an application. Like several other microcontrollers, the Z80 provides a total memory space of 64 kilobytes.Although the memory size provided on chips will probably increase in the future, the capacities available today suggest that an operating system for embedded system should be less than 32 kilobytes in size, leaving enough space for the application.1.3 PerformanceThe increase in the PCs’ memory size is accompanied by a similar increase in performance. The first PCs had an 8 bit 8088 CPU running at 8 MHz, while today a 32 bit CPU running at 200 MHz is recommended. So CPU performance has doubled about every two years, too. Surprisingly, this dramatic increase in performance is not perceived by the user: today’s operating systems consume even more memory and CPU performance than technological development can provide. So the more advanced the operating system, the slower the applications. One reason for the decreasing performance of applications and also of big operating systems might be that re-use of code has become common practice; coding as such is avoided as much as possible. And since more and more code is executed in interfaces between existing modules, rather than used for the actual problem, performance steadily deteriorates.Typically, performance demands of embedded systems are higher than those of general purpose computers. Of course, if a PC or embedded system is too slow, you could use a faster CPU. This is a good option for PCs, where CPU costs are only a minor part of the total costs. For embedded systems, however, the cost increase would be enormous. So the performance of the operating system has significant impact on the costs of embedded systems, especially for single-chip systems.For example, assume an embedded system requiring serial communication at a speed of 38,400 Baud. In 1991, a manufacturer of operating systems located in Redmond, WA, writes in his C/C++ Version 7.0 run-time library reference: “The _bios_serialcom routine may not be able to establish reliable communications at baud rates in excess of 1,200 Baud (_COM_ 1200) due to the overhead associated with servicing computer interrupts”. Although this statement assumes a slow 8 bit PC running at 8 MHz, no PC would have been able to deal with 38,400 baud at that time. In contrast, embedded systems had been able to manage that speed already a decade earlier: using 8 bit CPUs at even lower clock frequencies than the PCs’.Performance is not only determined by the operating system, but also by power consumption. Power consumption becomes particularly important if an embedded system is operated from a battery, for example a mobile phone. For today’s commonly used CMOS semiconductor technology, the static power required is virtually zero, and the power actually consumed by a circuit is proportional to the frequency at which the circuit is operated. So if the performance of the operating system is poor, the CPU needs to be operated at higher frequencies, thus consuming more power. Consequently, the system needs larger batteries, or the time the system can be operated with a single battery charge is reduced. For mobile phones, where a weight of 140g including batteries and stand-by times of 80 hours are state ofthe art, both of these consequences would be show stoppers for the product. Also for other devices, power consumption is critical; and last, but not least, power consumption should be considered carefully for any electrical device for the sake of our environment.1.4 PortabilityAs time goes by, the demands on products are steadily increasing. A disk controller that was the fastest on the market yesterday will be slow tomorrow. Mainstream CPUs have a much wider performance range than the different microcontroller families available on the market. Thus eventually it will be necessary to change to a different family. At this point, commercial microkernels can be a problem if they support only a limited number of microcontrollers, or not the one that would otherwise perfectly meet the specific requirements for a product. In any case, portability should be considered from the outset.The obvious approach for achieving portability is to use high level languages, in particular C or C++. In principle, portability for embedded system is easier to achieve than for general purpose computers. The reason is that complex applications for general purpose computers not only depend on the CPU used, but also on the underlying operating system, the window system used, and the configuration of the system.A very s mall part of the microkernel presented in this book was written in Assembler; the rest was written in C++. The part of the kernel which depends on the CPU type and which needs to be ported when a different CPU family is used, is the Assembler part and consists of about 200 Assembler instructions. An experienced programmer, familiar with both the microkernel and the target CPU, will be able to port it in less than a week.The entire kernel, plus a simple application, fit in less than 16 kilobyte ROM for a MC68020 CPU. Hence it is especially suitable for single chip solutions.2 Concepts2.1 Specification and Execution of ProgramsThe following sections describe the structure of a program, how a program is prepared for execution, and how the actual execution of the program works.2.1.1 Compiling and LinkingLet us start with a variant of the well known “Hello World!” program:#include <stdio.h>const char * Text = "Hello World\n";char Data [] = "Hello Data\n";int Uninitialized; // Bad Practiceint main(int argc, char * argv []){printf(Text);}This C++ program prints “Hello World”, followed by a line feed on the screen of a computer when it is executed. Before it can be executed, however, it has to be transformed into a format that is executable by the computer. This transformation is done in two steps: compilation and linking.The first step, compilation, is performed by a program called compiler. The compiler takes the program text shown above from one file, for example Hello.cc, and produces another file, for example Hello.o. The command to compile a file is typically something likeg++ -o Hello.o Hello.ccThe name of the C++ compiler, g++ in our case, may vary from computer to computer. The Hello.o file, also referred to as objectfile, mainly consists of three sections: TEXT, DATA, and BSS. The so-called include file stdio.h is simply copied into Hello.cc in an early execution phase of the compiler, known as preprocessing. The purpose of stdio.h is to tell the compiler that printf is not a spelling mistake, but the name of a function that is defined elsewhere. We can imagine the generation of Hello.o as shown in Figure 2.1.1Several object files can be collected in one single file, a so-called library. An important library is libc.a (the name may vary with the operating system used): it contains the code for the printf function used in our example, and also for other functions. We can imagine the generation of libc.a as shown in Figure 2.2.1. Note: The BSS section contains space for symbols that uninitialized when starting the program. For example, the integer variable Uninitialized will be included here in order to speed up the loading of the program. However, this is bad programming practice, and the bad style is not weighed up by the gain in speed. Apart from that, the memory of embedded systems is rather s mall, and thus loading does not take long anyway. Moreover, we will initialize the complete data memory for security reasons; so eventually, there is no speed advantage at all. Therefore, we assume that the BSS section is always empty, which is why it is not shown in Figure 2.1, and why it will not be considered further on.The second step of transforming program text into an executable program is linking. A typical link command is e.g.ld -o Hello Hello.oWith the linking process, which is illustrated in Figure 2.3, all unresolved references are resolved. In our example, printfis such an unresolved reference, as it is used in main(), but defined in printf.o, which in turn is contained in libc.a. The linking process combines the TEXT and DATA sections of different object files in one single object file, consisting of one TEXT and one DTA section only. If an object file is linked against a library, only those object files containing definitions for unresolved symbols are used. It should be noted that a linker can produce different file formats. For our purposes, the so-called Motorola S-record format will be used.2.2 Loading and Execution of ProgramsAfter a program has been compiled and linked, it can be executed. While compilation and linking is basically identical for embedded systems and general purpose computers, there are some differences regarding the execution of programs. Table 2.1 lists the steps performed during program execution and shows the differences between general purpose computers and embedded systems:Obviously, the execution of a program in an embedded system is much easier than in a general purpose computer.更多内容见附件免责声明:本页面/内容部分素材来源于互联网公 开 信 息,旨在传递更多信息,不代表本平台立场。版权归原作者或机构所有,如涉及侵权,请通过平台联系我们,我们将在核实后第一时间处理。本平台对转载内容的真实性、准确性不作任何保证,用户需自行判断并承担使用风险。

有附件
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈