CN1421004A - 利用符号语言翻译器产生软件代码的方法和系统 - Google Patents
利用符号语言翻译器产生软件代码的方法和系统 Download PDFInfo
- Publication number
- CN1421004A CN1421004A CN00816064A CN00816064A CN1421004A CN 1421004 A CN1421004 A CN 1421004A CN 00816064 A CN00816064 A CN 00816064A CN 00816064 A CN00816064 A CN 00816064A CN 1421004 A CN1421004 A CN 1421004A
- Authority
- CN
- China
- Prior art keywords
- symbol
- model
- symbolic
- produce
- code
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Debugging And Monitoring (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
公开一种在计算机上产生模拟多孔介质中流体流动的有限元模拟程序的本机运算符和测试代码文件的改进方法和系统。本发明的方法包括把描述将由模拟程序产生的模型的方程式和参数输入符号语言翻译器并根据所述方程式和参数产生一个或多个模型对象的步骤。本发明的方法还包括产生模型对象的残数和正切矩阵运算符的符号表示并产生任意几何不变参量的优化规则的步骤。根据符号语言翻译器的语言,按照高级程序语言产生模拟程序的数字核心代码和初始化核心代码的数据结构。数字核心代码被格式化并被优化。本发明通过借助符号语言翻译器处理接合文件,产生本机运算符和测试代码文件。
Description
技术领域
本发明一般涉及利用有限元问题分析来建立物理系统的模型的方法和系统,具体地说,涉及产生用于对多孔介质中流体流动建模的有限元模拟程序的方法和系统。更具体地说,本发明涉及利用符号语言翻译器(translator)产生软件代码的方法和系统。
背景技术
模拟物理系统的行为的数学模型的产生既费时又复杂。人类几乎难以处理多维(例如四维空间和时间)中的有限元问题。这些类型的问题如此复杂,以致人们很难在不出错的情况下进行分析。随着问题包含的维数的增大,在实际的计算和必须进行的计算的难度这两方面,问题本身几乎按指数规则地变得更加困难。处理多维有限元问题的难处理问题的一种方法是符号处理。符号处理涉及把数学公式转换成符号表示,所述符号表示可用于产生供建立物理系统的模型的模拟程序之用的程序代码。
但是,由于现有的符号处理方法依赖于人为列出必需的数学等式,并且把这些等式转换成程序代码,因此现有的符号处理方法易于出错。至少在两个方面会出现人为错误。一方面是代数计算,这方面会产生诸如遗漏符号或者抄写错误之类的错误。另一方面,在利用诸如Fortran、C++之类的编程语言或者其它一些高级编程语言把代数转换成代码的过程中会产生人为错误。
此外,即使假定把代数公式转换成编程语言代码的个人100%正确地完成该转换,所得到的代码仍然不能象希望的那样高效或简练。例如,代码可能较慢,过大及过于复杂,或者可能包含不必要的过多浮点运算。
更重要的是,用于产生建立物理系统的模型的模拟程序的现有方法和系统需要大量的人力资本,所述人力资本表现为熟练的分析人员,所述分析人员必须精通高等数学,以便产生所需的复杂等式,又必须是熟练的程序人员,以便根据数学公式生成必需的代码。另一方面,常常需要分析问题的专业数学人员和程序人员组,用公式表示数学等式,并且书写相应的代码。寻找在这两方面都有经验的个人既昂贵又费时,或者不得不通过拥有单独的分析人员和程序人员,增加解决这种问题所需的人数。
类似地,有限元问题分析领域中的研究既困难又缓慢,因为研究一种新的有限元方法或者新的物理学(physics),并且完成证明该方法或物理学可行所必需的工作需要数月或者数年。从而,产生建立物理系统的模型的新模拟程序(simulator)花费很高并且所需的时间并不总是较少。
发明内容
于是,需要一种利用符号语言翻译器产生软件代码的方法和系统,所述方法和系统可有效解决人力求解过于困难的多维有限元问题,例如产生模拟多孔介质中的流体流动的模拟程序,并且减少求解这种问题所需的计算机时间。
还需要一种利用符号语言翻译器产生软件代码的方法和系统,所述方法和系统显著降低或消除处理复杂数学公式及把数学公式转换成程序语言代码所固有的人为错误的倾向。
还需要一种利用符号语言翻译器产生软件代码的方法和系统,所述方法和系统显著提高由被求解从而产生物理系统的模型的数学公式的符号转换产生的程序代码的性能。由这种方法和系统产生的代码的性能包括速度增大、复杂性降低及更少的浮点运算。
还需要一种利用符号语言翻译器产生软件代码的方法和系统,所述方法和系统通过改进用于产生物理系统,例如多孔介质中流体流动的数学模型的模拟程序的形成过程,提供快速的模型建立。这种方法和系统使得能够在较短的时间内产生模拟程序。
还需要一种利用符号语言翻译器产生软件代码的方法和系统,所述方法和系统显著降低现有的这种系统对诸如分析人员/程序人员之类专业人员的依赖,所述专业人员必须熟悉物理建模过程中的数学,并且必须具有把数学翻译成程序代码所需的编程技能。
还需要一种利用利用符号语言翻译器产生软件代码的方法和系统,所述方法和系统提供通过供给在和当前的这种方法和系统相比更短的时间内,根据新的有限元方法或者使用新的物理学产生新模拟程序的手段,降低研究周转时间的能力。
根据本发明,提供一种利用符号语言翻译器产生软件代码的方法和系统,所述方法和系统基本消除或减少与以前开发的这种系统和方法相关的缺陷和问题。具体地说,本发明为模拟多孔介质中流体流动的有限元模拟程序提供一种用于在计算机上产生本机运算符和测试代码文件的改进方法和系统。本发明的方法包括下述步骤:把描述将由模拟程序产生的模型的方程式和参数输入符号语言翻译器中,根据所述方程式和参数产生一个或多个模型对象。本发明的方法还包括产生模型对象的残数和正切矩阵运算符的符号表示,并且产生关于任何几何不变参量的优化规则的步骤。根据符号语言翻译器的语言,为用高级程序语言编写的模拟程序产生数字核心代码和初始化核心代码的数据结构。格式化并优化数值代码,并且产生包含格式化和优化后的数字核心代码及初始化核心代码的数据结构的文件。
本发明通过利用符号语言翻译器产生软件代码,提供可有效解决人力求解过于困难的多维有限元问题,例如产生模拟多孔介质中流体流动的翻译器,并且减少解这种问题所需的计算机时间的重要技术优点。
本发明通过利用符号语言翻译器产生软件代码,提供显著降低或消除处理复杂数学公式及把数学公式转换成程序语言代码所固有的人为错误的倾向的另一技术优点。
本发明通过利用符号语言翻译器产生软件代码,提供显著提高由被求解从而产生物理系统的模型的数学公式的符号转换产生的程序代码的性能的另一技术优点。由这种方法和系统产生的代码的性能包括速度增大、复杂性降低及更少的浮点运算。
本发明还通过使用符号语言翻译器产生软件代码,提供通过改进用于产生物理系统,例如多孔介质中流体流动的数学模型的模拟程序的形成过程,提供快速模型建立的另一技术优点。这种方法和系统使得能够在较短的时间内产生模拟程序。
本发明还通过使用符号语言翻译器产生软件代码,提供显著降低现有的这种系统对诸如分析人员/程序人员之类专业人员的依赖的另一技术优点,所述专业人员必须熟悉物理建模过程中的数学,并且必须具有把数学翻译成程序代码所需的编程技能。
本发明还通过使用符号语言翻译器产生软件代码,获得通过提供在和当前的这种方法和系统相比更短的时间内,根据新的有限元方法或者利用新的物理学产生新模拟程序的手段降低研究周转时间的能力的另一技术优点。
附图说明
结合附图参考下述说明,能够更全面地理解本发明及本发明的优点,附图中相同的附图标记表示相同的特征,其中:
图1表示可用作本发明的输入的典型数学方程式;
图2是图1的方程式的符号残数表示法的一个例子;
图3A和3B表示根据图2的符号表示,由本发明产生的源代码的例子;
图4是本发明的改进的Mathematica用户界面的符号选项板的屏幕画面;
图5是表示本发明的不同模块的相互关系和操作的数据流程图;
图6表示现有的模型离散化;
图7表示图6中所示的同一模型的有限元解;
图8表示完整的离散模拟程序的概述。
具体实施方式
附图中图解说明了本发明的优选实施例,相同的数字用于表示各个附图相同和相应的部分。
本发明提供通过利用符号语言翻译器产生软件代码的方法和系统,和现有技术的方法和系统相比,所述语言翻译器更灵活、更高效、不易出错并且更少依赖于具有专业技能的个人。本发明通过提供用于输入描述要建模的物理系统的数学等式的简单界面,并且提供改进的自动符号翻译及代码生成,解决了多维有限元问题的难处理问题。类似地,本发明通过实现代数等式自动化输入功能,消除了代数等式翻译过程中易于出现人为错误的倾向。另外,通过提供从代数等式到程序代码的改进的自动符号翻译,本发明的方法和系统显著提高最后得到的代码的性能,并且简化建立物理系统的模型的模拟程序的开发过程并使之更有效率。于是能够以较少的时间为新的物理学产生建立这些物理系统的模型的新模拟程序。从而本发明的方法和系统为新的有限元方法或新的物理学提供一种快速原型,它可用于产生对物理系统建模的新模拟程序。
本发明提供一种用于输入描述要被对物理系统建模的模拟程序,例如建立多孔介质中的流体流动的模型的有限元模拟程序解决的物理学的数学公式的简单界面。本发明依赖于如S.Wolfram在“The MathematicaBook”,第三版(Wolfram Media,Cambridge Univ.Press 1996年出版)中描述的编程语言Matehmatica。Matehmatica作为把代数公式的符号处理实现为借助诸如JAVA、C++或Fortran之类编程语言产生的代码的工具包含到本发明中。
图1表示非常类似于可在典型的数学教科书中看到的典型数学等式。如图1中所示的数学等式包括由一般的分析人员产生的输入,所述输入随后可被输入Matehmatica程序中。
图2是对应于图1中所示的等式的符号残数表示(symbolic residualrepresentation)的一个例子。为了把有限元法应用于例如图1中所示的数学等式,通常由产生相应的数学等式的分析人员手工产生图2中所示的符号残数表示。在现有的符号翻译方法和系统中,为了产生如图2中所示的那些数学公式的初始数学公式及图2中所示的符号表示,需要非常有经验的分析人员。图2的符号表示代表Matehmatica程序的典型输出。
图3A和3B表示根据如图1中所示的数学公式的符号表示(图2),由Matehmatica程序产生的源代码的一个例子。就现有的符号翻译系统而论,在伴随着易于出错的情况下,利用高层次的人类交互作用(humaninteraction)完成由图1、2和3表示的三个阶段。本发明自动完成这些功能中的大部分。
具体地说,专门为此目的编写的本发明的Matehmatica程序包(代码模块)自动把分析人员产生的数学公式翻译成符号表示,并且生成相应的代码。本发明还提供一种符号系统,所述符号系统允许产生初始的数学公式的分析人员按照和分析人员书写数学符号完全相同的格式输入这些数学符号。分析人员能够仅仅点击计算机屏幕上的图形用户界面(GUI)按钮输入导数、积分和其它数学符号。虽然本发明的界面不是完全由按钮驱动的,但是分析人员可免于在不存在本发明的辅助代码模块的情况下Matehmatica的语法限制。换句话说,分析人员不仅不必成为生成代码最终输出的语言方面的专业程序人员,而且也不必成为熟练的Matehmatica程序人员。从而本发明提供一种把数学公式输入Matehmatica自身的常见界面。
图4的符号选项板(notation palette)向分析人员提供与他或她手写复杂的数学公式相同的方式,或者按照在教科书中通常看到复杂的数学公式那样,容易地输入复杂的数学公式的能力。从而在处理复杂的数学公式的同时,分析人员感到更加舒适和熟悉。分析人员也不必成为专业的程序人员,以便无需程序人员的帮助有效生成对物理系统建模的模拟程序。
本发明从而为Matehmatica程序的分析人员提供一种更好的界面。例如,符号选项板10包括分析人员可点击从而输入诸如积分号和导数、特殊的运算符号之类的复杂符号的按钮12。这种复杂符号不再必须由分析人员手工输入。本发明的利用符号语言翻译器产生软件代码的方法和系统由Matehmatica代码实现,并且因此在其基础功能方面依赖于Matehmatica,不过只是在任意程序代码依赖于其编程语言的程度上依赖于Matehmatica。对本发明来说,Matehmatica只是实现本发明的符号处理的编程语言。从而可产生高等数学描述,并可把有限元法分析应用于该高等数学描述,并且产生所得到的程序代码。
本发明的利用符号语言翻译器产生软件代码的方法和系统包括利用Matehmatica语言编写的若干独特的软件包(代码模块)。这些独特的模块与其它各种现有的Matehmatica模块连系,完成产生对例如多孔介质中的流体流动建立模型的模拟程序所需的符号处理。本发明中使用的程序代码是模块化的,并且包括不同的Matehmatica文件,所述不同的Matehmatica文件包含互不相关的功能块。
图5是表示本发明的只有本发明才有的以及Matehmatica内已存在的不同Matehmatica模块的相互关系和操作的数据流程图。Notation模块16、模型(Model)模块20、Modelmaker模块24、Operator模块28、CodeGen模块32、Simplex模块34、MatrixOps模块36、RuleSort模块38、Util模块42和Test模块44是本发明的一些新模块。
图5的等式14和模型参数18是用户(分析人员)提供的输入。等式14和模型参数18代表分析人员正在求解的变量。图1中表示了等式14的一个例子。Notation模块16是本发明的一个功能单元(图4的符号选项板的基础代码),和现有系统相比,它允许分析人员付出明显要少的努力利用恰当的数学符号表示法把他的等式和模型参数输入计算机中。分析人员利用前面如图4的部分说明的符号选项板完成等式和模型参数的输入。Notation模块16允许分析人员把等式14输入Matehmatica程序中。
模型模块(程序包)20提供一种内务功能。模型模块20用分析人员的参数和等式产生称为模型的对象。一个模型是构建指定等式14的残数和正切矩阵运算符所必需的变量、等式和其它信息的集合。以模块或更大的对象的形式给出作为结果产生的代码处理的一切事物。
另外,Modelmaker模块24以输出的形式把解提供给由分析人员可能需要的等式组成的其它可能子系统,以便估计等式14的最终解中的错误。Modelmaker模块24可包括称为“产生拉格朗日模型”的功能,所述“产生拉格朗日模型”的功能以输入的形式获得模型对象22,并且以另一模型的形式输出初始模型的Dirichlet边界条件26。类似地,Modelmaker模块24可包括称为“产生错误模型”的功能,所述“产生错误模型”的功能以输入的形式获得模型对象22,并且输出估计初始模型中的错误的新的模型对象27。利用单一功能调用自动完成这些功能;不需要分析人员对所有不同的模型编码。于是,一旦分析人员建立好主模型,则本发明可自动产生其它所需模型。
模型模块20结构
以图5的有限元建模模块20为目标的几种设计导致了这种结构。在生成汇编语言代码之前,最好允许分析人员查看建模过程的人们可读的中间结果。本发明允许分析人员查看呈模型对象22、26和27的建模过程中间结果。另外,为了提高效率,Matehmatica接合(splice)文件也可涉及这些中间结果。接合文件在下面进一步说明。
为了实现这些目的,似乎必须用全局变量保持某些结果。但是这会导致每次处理一个以上的模型极度困难并且易于出错。于是,本发明的方法和系统隔离各个模型的变量组。
这可通过把模型的数值保存为DownValues(在Matehmatica内建立的函数),例如model[R]、model[PU]等来实现。特殊符号R、PU等在Matehmatica中受到保护,不能被用户设定。例如,设定R=5的尝试将导致$Model[R]被设定为5,这里$Model是当前模型。对于Matehmatica内的这种设计来说存在两个额外的优点。首先,结构Block[{$Model=othermodel},expression]仅仅在该Block的持续内有效改变当前模型。这种结构被有限元‘Operator’程序包(下面更充分地说明)用于完成关于模型变量的计算。其次,拦截设置模型变量的所有尝试使得能够在模型构建过程中很早地进行错误检查。
模型变量
就各个模型来说保存下述模型变量:
输入
R是有限元模型的偏微分方程系。
PU是有限元模型的主要未知变量的列表。在可设置PU之前,模型必须具有SystemSpaceObject(SYS)。
SU是有限元模型的具有明确相关性的次要未知变量的列表。在设置SU之前,该模型必须具有SystemSpaceObject(SYS)。
EA是有限元模型的具有明确相关性的元素平均组变量(element-averaged group variables)的列表。
CF是有限元模型的常数字段的列表。在可设置CF之前,该模型必须具有SystemSpaceObject(SYS)。
K是有限元模型的全局常数初始化规则的列表。
GC是有限元模型的全局坐标(global coordinate)的列表。它是只读的模型变量(使用MakeSystemSpace间接设置GC)。
PHY是识别有限元法的物理类型的字符串。它是只读的模型变量(使用MakeNodeSpace间接设置PHY)。
SYS是有限元模型的SystemSpaceObject。
TOPDIM是有限元模型的单形(Simplex)的拓扑维数。
OP是识别有限元模型的运算符(operator)名称的字符串。它确定产生的运算符的目录名称。
OPTYPE应被设置为OpInterior或者OpBoundary(默认:OpInterior)。它由CodeGen模块32用于选择接合文件。
OpInterior和OpBoundary是OPTYPE模型变量的可能值。
EQ是有限元模型的残数中的等式的等式标识符(符号或者带下标的符号)的列表。
OBJ是SU相关性规则中出现的Java对象的Object[类型名、对象名、基类]的列表。
Object[t,0,“bc”]规定由OBJ模型变量中的基类bc(包含完整的类路径的字符串)得到的类型t(产生的界面名称)的Java对象。Object[t,0,“bc”,“init”]利用在初始化串(init)中找到的汇编语文代码(默认:“null”)初始化该对象。
MAP是形成global coordinate→[point Coordinates]的规则列表。点坐标被规定为Point[O]、Point[1]等。它默认为模型的SystemSpace图。
INITCF、INITPU、FINCF、FINPU和UPDATE包含外部对象初始化、更新或结束的方法调用和/或分配规则的列表。
BUILDER规定模型的条件生成器的自变量。它应是字符串或(可能嵌套的)字符串列表,所有字符串具有相同的深度。例子包括:“Operator”、“WellPostCondition”、{{“DirichletCondition”},{strings…}}。默认值为“”(无条件生成器)。
OPGEN规定为其生成代码的运算符。它可以是零或者更多的关键字ResidualVector、TangentMatrix、TangentAdjointMatrix、TangentImage和TangentAdjointImage或者所有关键字的列表。默认为所有关键字。
ResidualVector、TangentMatrix、TangentAdjointMatrix、TangentImage和TangentAdjointImage是运算符关键字。
CACHE是规定隐藏在各个ElementSystem对象中的元素-几何数量的最大数目的模型变量。CACHE可被设置为任意非负整数或者无穷大符号。
输出
SSU是保存在NodeSpace中的次要未知变量和次要未知变量导数的列表。它是只读的模型变量。
CSU是计算的次要未知变量(未保存在NodeSpace中的次要未知变量或次要未知变量的导数)的列表。它是只读的模型变量。
ZSU是同样为零的次要未知变量(或者它们的导数)的列表。它是只读的模型变量。
RI是离散残数的内部分量的隐藏(cached)值。它是只读的模型变量。
RB是离散残数的边界分量的隐藏值。它是只读的模型变量。
TI是离散正切的内部分量的隐藏值。它是只读的模型变量。每次调用Residual[]时清除TI。如果在生成代码的时候TI未定义,则不产生任何正切运算符。
TB是离散正切的边界分量的隐藏值。它是只读的模型变量。每次调用Residual[]时清除TB。如果在生成代码的时候TB未定义,则不产生任何正切运算符。
DIM[model]返回有限元模型的空间尺度。DIM[]等同于DIM[$Model]。
NS是有限元模型的NodeSpaceObject。它是由SYS间接确定的只读模型变量。
ObjectTypes[]返回由当前的有限元模型引用的外部对象类型的列表。
ObjectInstance[pattern]返回其类别名称匹配模式的当前有限元模型中的所有外部对象的实例列表。
产生、消灭和询问模型特性的函数
BeginModel[model]使模型成为现用模型(active model),从而model[R]、model[PU]等的标记可被缩写为R、PU等。它返回最新的现用模型的一组模型值。
EndModel[model]停用现用模型,重新激活先前的现用模型,并且返回最新的现用模型的一组模型值。利用syntax model[R]、model[PU]等仍可存取停用模型的值。
$Model评估现用模型。
DefaultModel是默认的有限元模型,当不存在用户规定的现用模型时被激活。
ClearModel[model]使所有模型的值返回它们的默认值。
CopyModel[model1,model2]清除mdoel2,把model1的输入复制到model2中,并且把当前模型设定为model2。
$ModelStack返回模型堆栈。
ModeValues[model]返回关于模型确定的表述为一系列规则的值。ModelValues[]返回现用模型的值。
如果x是有限元模型,则ModelQ[x]返回真,否则返回假。
如果x是模型变量,并且在现用模型中某一值已被赋给x,则ModelValueQ[x]返回真。
现在返回图5,模型对象22、Dirichlet BC模型对象26和错误(Error)模型对象27(所有的模型)被发送给执行绝大多数数学处理的Operator模块28。Operator模块28将模型对象(模型对象22、Dirichlet BC模型对象26或错误模型对象27)作为输入并输出残数和正切矩阵运算符的符号计算,符号残数和正切运算符30。
为了输出符号残数和正切运算符30,位于基础级的Operator模块28计算可以是几个变量的函数的数学方程式14的积分。Mathematica程序自身具有可求方程式积分的内部“积分”函数。但是,多维有限元问题分析可处于使Mathematica不能在足够短从而感到经济的时间内得到解的复杂程度。另外,能够在把数学表达式的哪些部分输入Mathematica的方面进行各种简化。如果进行这种简化,能够在不利用Mathematica的“积分”函数的情况下获得方程式的解。为了实现这种方程式简化,把方程式的那些恒定元素和不恒定的元素分开。随后在不同层次的指令下进行计算。从而数学表达式的不同特性可被用于按照不同的方式获得答案。从而Operator模块28可被用作避免显式积分的工具。
有限元Operator模块28通过把域分成Simplex元素并在各个单独的Simplex元素上结合系统的解,在该域内构建偏微分方程(PDE)系统的解。
Simplex
Simplex是具有最少数目的边界点的欧几里德几何空间元素,例如一维(1D)空间中的线段、2D空间中的三角形或者3D空间中的四面体。从而n维的Simplex具有标记为顶点1,…,顶点n+1的n+1个顶点。与顶点i相对的面被标记为面i。nD Simplex的各个面是一个(n-1)D的Simplex。
基本函数、主元素
基本函数如下所述形成用于指定Simplex中的任意点的坐标系:第i个基本函数Ni指定沿来自第i面的直线从Simplex的第i面的点到第i个顶点的距离。对于n维的Simplex来说,存在n+1个基本函数。在顶点i,Ni被定义为1,在面i上的任意点,Ni被定义为0。
nD中的主元素被定义为具有位于笛卡尔坐标系原点的一个顶点和位于笛卡尔点(1,0,0,…0)、(0,1,0,…0)…(0,0,0,…1)的其它n个顶点的nD Simplex。例如,在2D空间中,主元素(三角形)具有位于(0,0)、(1,0)和(0,1)的顶点。
可按照反时钟方向从位于点(x=1,y=0)的顶点I开始标记顶点,则面1是直线x=0,面2是直线y=0,面3是直线x+y=1。对于该元素来说,基本函数如下所示:
N1(x,y)=x
N2(x,y)=y 方程式(1)
N3(x,y)=1-x-y
可利用基本函数指定Simplex内的任意点。例如,三角形的质心位于点(N1,N2,N3)=(1/3,1/3,1/3)。
有限元方法
假定偏微分方程系中的变量在各个单独Simplex的范围内线性变化。换句话说,在特定的nD Simplex中,变量p(x,y,…)可被重写为: 方程式(2)
这里pi是位于Simplex的顶点i的p值。方程式(2)右侧的求和被称为左侧变量的离散形式或者离散化。pi被称为p的分量。
形成如下述形式的一个或多个方程式的问题: 方程式(3)
方程式3左侧的积分被称为连续残数。目的是求解使残数等于0的p,q(主要未知变量)的值。计算残数的数值的途径有两种:
1.
数值求积。这种技术利用在Simplex上仔细选择的点求值的被积函数的加权和近似各个Simplex上的积分值。这种方法的缺点是必须计算被积函数在足够多的求积点处的值,以便获得所要求的数值精度。
2.
精确符号积分。一旦利用符号计算积分,则对积分数值求值的费用远远少于使用求积求积分值的费用。但是,维数更高的Simplex上方程式(3)的精确积分涉及的符号计算是难以通过手工完成的。有限元‘Operator’模块28的目的是完成这种符号计算。
离散残数的计算
通过利用方程式(2)的关系式,离散方程式(3)中的各个未知变量获得离散残数。在Mathematica中这可通过使用内部函数ReplaceAll来实现。这把方程式(3)的左侧转换成: 方程式(4)
理论上,可通过利用基本函数在笛卡尔坐标系方面的等同表达式(如方程式(1)中所示,不过是关于任意维数)替换基本函数并把变量变换成笛卡尔坐标系变量产生 方程式(5)来求该积分的值,这里
是Simplex Jacobian。但是,即使对于中小型的问题来说,在现代计算机工作站上利用计算机代数系统求方程式(5)的值也需要数天的计算时间和几百到几千兆字节的随机存取存储器。
本发明的Operator模块28采取不同的途径。由于在任意特定的Simplex,分量pi,qi等和基本函数的导数恒定不变,因此方程式(4)可被重写为: 方程式(6)
不借助计算机,这种变换实际上是不可能进行的,但是即使对于四维的大型问题,在现代工作站上运行的计算机代数系统也可仅仅在几分钟内实现这种变换。利用本发明的方法,可利用内部函数ExpandAll完成这种变换,随后借助内部函数Collect的几种应用简化作为结果得到的表达式。
利用下述公式可高效地求方程式(6)中的积分的值: 方程式(7)
把方程式(7)代入方程式(6)产生Simplex内连续残数的离散近似的精确积分(称为离散残数)的公式。
注意在基本函数上的指数的置换下,方程式(7)的值不变;于是,方程式(6)中的各个积分可被其指数按照分类顺序出现的等效积分所替代。这极大地减少了所需的方程式(7)的求值量。
当连续残数包含对Simplex边界的积分时,则单个连续残数导致n+1个离散残数,每个离散残数用于Simplex的一个面。面i上Ni为零的面提供简化面专用离散残数的机会。
Operator模块28内支持的运算和运算对象的类别
有限元Operator模块28允许利用下述任一或者下述全部表述连续残数:
1.主要未知变量、次要未知变量(即主要未知变量的函数)和常数字段,它们被假定具有在Simplex的各个顶点确定的数值并且可利用方程式(2)展开。这些参量可由用户定义。
2.元素平均化未知变量,它表示在Simplex的质心求值的上述1中列举的任意参量的函数。这些参量可由用户定义。
3、笛卡尔坐标x,y,…。这些可由用户规定。
4、主要、次要或者元素平均化未知变量关于任意笛卡尔坐标的一阶和二阶导数。由于一般来说Mathematica中的微分运算符立即求值,因此必须实现代表这些运算符的相似运算符,但不求值,从而它们可被诸如高斯散度定理之类的高级变换处理。函数Dh被规定为代表这些导数。
5.诸如散度(divergence)和梯度之类未知变量的其它基于坐标的微分运算符。如上面第4条中那样,相同的注释适用于这些运算符。函数GradS、GradST、Gradh、DivS、DivST和Divh代表这些运算。
6.表达式相对于任意变量或者一组变量的变化。函数Variationh代表这种运算。
7.基本函数和关于笛卡尔坐标的基本函数的导数。函数BasisFunction和BasisDerivative代表这些参量。
8.Simplex的任意面的法向矢量。函数FaceNormal代表这些参量。
9.Simplex内或者边界的积分。函数IntegrateInterior和Integrateboundary代表这些函数。
10.把高斯散度理论应用于包含微分运算符的积分。函数GDT代表这种运算。
虽然4-9条中列举的任意参量和运算可由用户直接输入,例如Integrateinterior[Variation[w*Dh[p,x],w]],但是这不是本发明的目标用户输入这些参量的自然方式。利用上面讨论的符号模块16可实现目标用户熟悉的用于输入4-9条的特殊语法(例如对于刚才给出的例子为
数值计算离散运算符的优化
虽然在理论上把方程式(7)代入方程式(6)产生关于离散残数的公式,但是实际上直到在利用产生的代码对方程式(7)数值求值(对唯一分类的每组指数进行一次)之后,我们才进行这种代入。这使求解方程式(7)所需的时间降至最少,从而使产生的代码效率更高。
按照这种方式优化的其它常见表达式是基本函数的导数和Simplex面的法向矢量。如图5中所示,由有限元Simplex模块34计算这些参量。
这些计算涉及矩阵行列式和对称矩阵的倒置,二者都包含高度的冗余度。为了确定可能的最大数目的公有子表达式,由有限元MatrixOps模块36,而不是利用诸如Det和Inverse之类的Mathematica内部函数完成矩阵计算。
另外,在利用生成的代码进行数值求值之前,不代入次要未知变量或者元素平均化未知变量及它们的导数的数值。用户只规定这些未知变量的函数形式,Operator模块28自动计算在运算符计算过程中产生的这些函数形式的任意导数。
Operator模块28函数IntegraRules针对这些类型的表达式的出现扫描运算符表达式,并且构建包含它们的符号值的Rule对象。IntegralRules被有限元CodeGen模块32和有限元Test模块44调用,在有限元CodeGen模块32,规则被转换成临时变量的生成赋值,在有限元Test模块44,规则和Mathematica ReplaceAll函数一起被用于对运算符进行数值求值。
现在返回图5,从Operator模块28输出的符号残数和正切运算符30被转送给CodeGen模块32。CodeGen模块32可把方程式14和参数18从Mathematica语言翻译成JAVA、C++或者Fortran,或者其它高级计算机语言的程序代码。另外,Simplex模块34、MatrixOps模块36和RuleSort模块38适于计算除了几何形状之外不变的各种参量的优化规则。换句话说,给定三角形坐标的情况下,Simplex模块34、MatrixOps模块36和RuleSort模块38可共同计算各种几何参量,例如体积、横越结构体表面的变化的各种速率等等。这些类别的参量反复出现,并且会导致计算时间和计算能力的增大。为了避免这种现象,本发明的利用符号语言翻译器产生软件代码的方法和系统预先计算如前所述的各种参数,从而一旦代码被生成,则它们均只需被计算一次。
图5的有限元CodeGen模块32确定产生生成代码的“片段”的若干函数,所述若干函数本身并不构成可编辑的程序模块。相反,这些代码段被插入包含形成可编辑的程序模块的所有必需的外层说明、语法等的文本文件中。这是通过利用Mathematica Splice命令和若干称为接合文件的外部文件实现的。如同在Mathematica文献中说明的一样:
“Splice[“file”]把Mathematica输出接合到外部文件中。它获取该文件中<*和*>之间围住的文本,以Mathematica输入的形式求该文本的值,并且用最后得到的Mathematica输出替换该文本。在不对输出文件进行改变的情况下复制未包围在<*和*>之间的输入文件中的文本。Splice[“file”]获取名称为name.mx的文件,并且把输出写入名称为name.x的文件中。”
例如,简单的Java语言接合文件如下所示:
public class SplicExample{
public static void main(String[]args){
System.out.println(“The cosine of the square root of 2 is”+<*
Cos[Sqrt[2.]]*>);}};
如果该文件被命名为SpliceExample.mjava,并且命令Splice[“SpliceExample.mjava”]被发布给Mathematica,则将生成文件SpliceExample.java,其内容如下所示:
public class SplicExample{
public static void main(String[]args){
System.out.println(“The cosine of the square root of 2 is”+0.155944);}};
该文件可由Java字节码编译器编译,产生可执行的Java类别文件。
格式和优化程序包(现有技术)
在万维网上在下述URLS可获得如图5中所示的MathematicaFormat模块46和Optimize模块47:
http://www.mathsource.com/Content/Enhancements/Interfacing/Other/0205-254
http://www.mathsource.com/Content/Enhancements/Language/0206-592
Format模块46把有限类别的Mathematica表达式翻译成C、Fortran或者Maple(少量的后处理把Format模块函数CAssign的C输出变成依照句法纠正的Java代码)。Format模块46处理的表达式的类别是算术运算、绝大多数的初等函数及变量的赋值。Format模块46的限制在于它不产生变量说明或者控制流语句(例如if-then-else语句、循环等)。
Optimize模块47试图借助语法检查从Mathematica表达式中消除公有的子表达式。Optimize模块47和Format模块46一起工作,从而由Format CAssign产生的代码包含由Optimize模块47计算的优化变量的赋值。一个简单的例子如下所示:
CAssign[x,Cos[a+b]+Sin[a+b],AssignOptimize->True
0l=a+b
r=cos(0l)+sin(0l);
如上所述,FormatCAssign不产生这些优化变量的说明。
下述示例说明Optimize的一个等量的局限:
CAssign[x,Cos[a+b]+Sin[a+b+c],AssignOptimize->True
x=cos(a+b)+sin(a+b+c);
虽然a+b是a+b+c的子表达式,Optimize模块47并没有发现这一点。该问题不是Optimize模块47的特定实现的局限,相反是语法驱动的表达式优化的基本局限。a+b+c的重要的不同子表达式有四种:a+b、a+c、b+c、a+b+c。对于具有n个自变量的任意结合运算符(例如加法、乘法)来说,在不考虑由单个自变量组成的无关紧要的子表达式的情况下,存在2n-n-1个子表达式。从而即使对于不大的n值,子表达式的数目也会难控制地变大。
CodeGen模块32
本发明使用Format模块46翻译不具有分支的连续数值计算,例如离散的残数运算符。本发明还使用该模块产生由Operator模块28函数IntegralRules计算的优化规则的代码。这两种情况下,产生的代码仅仅由具有位于它们右侧的简单算术运算的一系列赋值语句组成。CodeGen模块32把关于适当的临时变量的说明添加到产生的代码中。
和这种优化代码产生相反,本发明还可“根据草稿”产生代码,初始化由模拟引擎和模拟程序的用户界面使用的各种数据结构。本发明还可产生允许生成的运算符调用其它手写的代码模块中的函数的代码。
CodeGen模块2运算符产生
如上所述,离散残余和正切矩阵运算符包含许多预先已知的公用子表达式,例如几何不变量(Simplex体积、基本函数导数、基本函数积分、Simplex面的法向矢量)和用户确定的未知变量(次要未知变量、元素平均化未知变量)。CodeGen模块32调用Operator模块28函数IntegralRules产生几何不变式的一系列优化规则。可选地,计算计算这些子表达式的代价,并且产生规则来隐藏数据结构中代价最大的那些子表达式。CodeGen模块32可计算评估所考虑的运算符必需的一组用户定义未知变量以及它们的导数。这两组规则被结合并在Optimize模块47内运行从而实现通用优化。Format模块46被用于产生评估优化规则及其运算符的代码。最后,相对于该代码预先考虑临时变量的恰当说明,该代码被接合到接合文件50中产生输出文件52。
存在在计算优化程序不能检测的用户定义未知变量的导数过程中出现的一些公用表达式。如前所述,这是语法驱动的表达式优化的根本局限。幸运的是如果已知关于导数性质的某些信息,则可优化这些表达式。当利用众所周知的链式规则(chain rule)求几项乘积的微分时产生这些表达式。在如下所示的表示式中: 方程式(8)
在计算导数之前,我们知道在各个导数的各项中将出现子表达式ab,因为它与所有变量无关;在关于y的各个导数的各项中将出现abf(x),因为它与y无关;等等。从而可通过检查方程式(8)左侧的更简单的表达式优化方程式(8)右侧的表达式。这是与语法优化相反的语义优化的一个例子,因其依赖于微分运算符的符号学。
如果允许测试代码生成,则CodeGen模块32可产生运算符的几种测试输入值(一些预定输入值和一些随机输入值),并调用有限元Test模块44根据这些输入值计算运算符的数值。输入值和计算得到的输出值被接合到接合文件50的另一部分中。执行测试的实际代码是接合文件50的静态(未发生变化的)部分。当产生的文件52被编译并运行时,静态测试代码把产生的输入值送给产生的运算符代码以便计算输出,并将其与产生的输出值进行比较。
图5的Util模块42把构成有效的Mathematica符号名称的内容转换成将借助其生成代码的计算机程序语言,例如JAVA、C++或Fortran的有效符号名称。在Mathematica中产生有效符号名称的约定可不同于利用程序语言,例如JAVA或C++产生有效符号名称的约定。Util模块42在Mathematica和最终产品程序语言之间转化并把这些称号名称返回给CodeGen模块32。
如上更充分说明的那样,在CodeGen模块32之后,Format模块46和Optimize模块47执行一部分的代码翻译。如上所述,Format模块46和Optimize模块47是由Mark Sofroniou编写的现有模块。
CodeGen模块32产生的一部分代码并不经过Format模块46或Optimize模块47。相反它通过接合文件50。从CodeGen模块32出来并进入接合文件50的该部分代码由箭头62表示。和进行实际的数值计算相反,产生代码62是为了初始化各种数据结构。从而如前所述,数值代码可由Format模块46和Optimize模块47产生,初始化数据结构的代码可由CodeGen模块32直接产生。
CodeGen模块32的输出也可被传到Test模块44。Test模块44可获得符号运算符和关于该运算符的一组输入,计算该运算符的输出应该是什么。如前所述,所述输入和输出都被写入最终的程序语言代码中。Test模块44从CodeGen模块32接收指令它提出运算符,插入特定的输入,查看该输入是否和预期的输入相符,并且如果不相符则打印错误消息的代码。Test模块44可用作本发明的利用符号语言翻译器产生软件代码的方法和系统的测试设备。
接合文件50是由Mathematica设计人员产生的接合机制的输入。在本说明书的开始部分中已说明了接合文件50的作用。贯穿Mathematica程序运行接合文件50的结果是包含相同文件名称的文件,但是没有“m”的后缀。在图5中该文件被表示为本机运算符和测试代码52。本机运算符和测试代码52代表由本发明的利用符号翻译器产生软件代码的方法和系统产生的最终程序语言。
现在返回Simplex、MatrixOps和RuleSort模块34、36和38,如上所述,这些模块以Simplex的数学结构为基础。必须进行各种矩阵运算以便计算诸如四面体之类结构体的几何变量。Simplex模块34和MatrixOps模块36的输出是用于计算几何结构体的体积等的方程式。这些方程式被分类以致当它们被写成作为结果的代码并且运行程序时,按照正确的顺序对它们求值。例如,如果代码包含诸如A=B+C之类的方程式以及稍后的方程式D=A2,则必须按照正确的顺序给出这些方程式。该功能由RuleSort模块38完成。RuleSort模块38可包含文献中众所周知的称为“拓扑分类”的算法。
图5的CodeGen模块32还可产生求输入系统中的运算符的值的代码。作为本发明的方法的一部分产生的数据结构被用于通过CodeGen模块32实现代码的产生,所述代码随后被转送给Format模块46和Optimize模块47。CodeGen模块32将符号残数和正切运算符30作为输入并且产生对这些运算符求值的代码。为此,CodeGen模块32要求Simplex 34、MatrixOps模块36和Rulesort模块38预先优化在符号残数和正切运算符中反复出现的参量。在这种意义上,CodeGen模块32也可用作本发明的利用符号语言翻译器产生软件代码的方法和系统的不同模块之间的交通控制器。另外,CodeGen模块32可为Format模块46和Optimize模块47设定各种设置。在Format模块46和Optimize模块47中,在其它代数处理过程中,可遮蔽优化质量。其原因在于预先优化是由CodeGen模块32和Simplex模块34、MatrixOps模块36和Rulesort模块38合作完成的。
图5的本机运算符和测试代码52代表本发明的利用符号语言翻译器产生软件代码的方法和系统的输出。这是第二组分析人员可用于产生诸如通过多孔介质的流体流动之类物理系统的模型的代码。图5的本机运算符和测试代码52被表示为单个文件,但是也可产生多个文件以包含多达500个Java文件或者更多文件的较大结构,所述多个文件一起可被用于模拟诸如贮油层之类多孔介质中的流体流动。本机运算符和测试代码文件52可和本发明的用户界面及称为解算器的辅助文件一起用于产生物理系统的模型。
本机运算符和测试代码52代表用于表现并对通过多孔介质的流体流动(或者其它一些物理系统)建模的极大型线性代数系的通用解代码。但是通过利用迭代解算器,这种通用解可用于获得更好的近似。通过在最新的最佳估计值的基础上反复对运算符重新求值,可产生解的新的估计值,并可把新的估计值反馈到先前的各个解中从而也可更好地近似其它数值。随后可把这些新的数值反馈回运算符中产生新的解,所述新的解可被再次反馈。从而本机运算符和测试代码52可被看作可被迭代解算器不断重新求值,从而获得日益逼近物理系统模型的真实解的近似值的核心代码。从而可向以后的分析人员提供由产生的核心代码和使用产生的核心代码的解算器文件组成的最终产品。另外,用户界面可用于访问解算器和产生的核心代码。它们一起构成产生物理系统的模型的模拟程序。
于是本发明的利用符号语言翻译器产生软件代码的方法和系统向分析人员提供产生更高效、无错和自动地对诸如通过多孔介质的流体流动之类物理系统建模的有限元方法模拟程序的工具。通过利用便于把符号输入Mathematica程序中的符号选项板,可降低代数错误和翻译错误。另外,通过提供复杂数学公式的极度简化并且直观的输入方式,分析人员不必成为编程专家。
本发明的利用符号语言翻译器产生软件代码的方法和系统可用于解决对贮油层建模的物理问题。该问题是一个四维空间,因为完全描述贮油层需要三个空间维数和一个时间维数。贮油层是四维问题的一个真实例子,其中用于描述该系统的偏微分方程如此复杂,以致出错的概率极高。本发明的利用符号语言翻译器产生软件代码的方法和系统易于在较短的时间内产生对这种系统建模的模拟程序。从而更更高效地开采贮油层的容量,因为从贮油层采油的公司可更快并且更经济地产生更准确地建立贮油层的流体流动的模型的模拟程序。
本发明的利用符号语言翻译器产生软件代码的方法和系统向分析人员提供特定物理学的工作模型,即分析人员希望模拟的一组特殊方程式,所述分析人员一般是流体动力学专家,其工作是产生建立物理系统的模型的模拟程序。从而分析人员具有任其自由处理的工作离散模拟程序。
工作离散模拟程序包括用户界面、解算器(解关于离散模型、匹配模型或离散类型模型的一组方程式的系统)和本发明的本机运算符和测试代码52。例如,图6表示现有的模型离散化。图6中所示的模型是位于圆形贮油层中心的油井的1相3D模型。图7表示利用使用符号语言翻译器产生软件代码的方法和系统的同一油井的有限元解。
图7中的模型同样是离散化的模型,存在构成该模型的三角形的每个节点的一个数值。
本发明的利用符号语言翻译器产生软件代码的方法和系统允许单个分析人员根据他们希望模拟的偏微分方程描述和物理学描述,产生求解关于如此描述的物理系统的特定离散模型的一组方程式的离散模拟程序。该离散模拟程序随后可被对模拟程序本身的产生不感兴趣,但是对利用该模拟程序建立模型感兴趣,并且知道如何使用该模拟程序的第二分析人员(例如地球化学公司)使用。
第二分析人员可以是其工作是利用模拟程序求解特定模型问题的一组流体流动分析人员和工程师。这种情况下作为最终用户的第二分析人员感兴趣的是利用本发明的使用符号语言翻译器产生软件代码的方法和系统把各种各样的物理现象安放到提供给他们的模拟程序中。例如这些分析人员可能需要能够处理通过多孔或混合介质的流动的物理学。这是产生模拟程序的现有系统的代价和困难之所在,因为对于这些另外的物理现象中的各个物理现象,存在全新的研究周期和必须产生的一批全新代码。
现有系统要求大部分手工产生这种新代码,同时有经验的分析人员和程序人员输入并转化这些数据。本发明的利用符号语言翻译器产生软件代码的方法和系统使该过程自动实现,并且经济可行地产生提供给最终用户分析人员的离散模拟程序的后续物理学。从而能够很快地添加新的物理学,并产生新的模拟程序模型。在这方面,本发明的标题是一种产品产生系统。
本发明的使用符号语言翻译器产生软件代码的方法和系统的最终用户可改变由模拟贮油层的模拟程序使用的方程式的参数。最终用户同样可数学描述从贮油层中泵出石油的油井,并且当描述该系统时把边界条件应用于偏微分方程,利用该模拟程序求解该方程式。本发明的利用符号语言翻译器产生软件代码的方法和系统提供允许最终用户分析人员通过把特定物理系统的边界条件输入模拟程序来模拟该物理系统的特殊方程式组模拟程序。从而本发明的利用符号语言翻译器产生软件代码的方法和系统提供一种产生模拟诸如多孔介质内的流体流动的物理系统的有限元问题模拟程序的改进方法和系统。
图8提供可通过利用本发明的使用符号语言翻译器产生软件代码的方法和系统产生完整模拟程序的概述。图8的PDE和物理描述70是为了在模拟程序76中模拟物理系统而必须求解的分析人员输入。如前所述,Mathematica物理学产生系统72把PDE和物理描述看作输入和输出产生的物理学52(参见图5)。产生的物理学52可以是多种产生的物理学系统52,并且可如图5中所示被插入模拟程序76中。产生的物理学52可被最终用户分析人员动态用于建模(而不是用于数据输入)。例如,图8表示向最终用户分析人员提供从中选择物理学的三种生成的物理学52。从而单一的模拟程序76可和不同的插入的生成物理学52一起使用。
通过提供供模拟程序76中使用的多种生成物理学52,当物理系统中的变化需要产生新的描述时,能够在较短的时间内高效快速地周转。从而,例如如果遇到预料之外的贮油层,可在相当短的时间内产生新的生成物理学。最终用户可提供需要模拟的微分方程,并且随后可把这些微分方程插入Mathematica物理学生成系统72中,快速产生用于模拟这些方程式的模拟程序。
虽然参考例证的实施例详细说明了本发明,但是应明白上述说明只是作为例子,而不是对本发明的限制。另外要明白的是在参考上述说明的情况下,对本领域的普通技术人员来说,本发明的实施例及本发明其它实施例细节方面的各种变化是显而易见的,并且可作出这些变化。所有这些变化和另外的实施例在如下要求的本发明的精神和真实范围内。
Claims (33)
1、在计算机上为模拟介质中流体流动的有限元模拟程序产生本机运算符和测试代码文件的方法,包括下述步骤:
把描述将由模拟程序产生的模型的一个或多个方程式和参数输入符号语言翻译器;
根据一个或多个方程式和参数产生一个或多个模型对象;
产生一个或多个模型对象的一个或多个残数及正切矩阵运算符的符号表示;
产生残数和正切矩阵运算符的几何不变参量的优化规则;
根据符号语言翻译器,用预定的编程语言产生数字核心代码和初始化核心代码的数据结构;
利用符号语言翻译器格式化并优化数字核心代码;
通过借助符号语言翻译器处理接合文件以产生本机运算符和测试代码文件,产生本机运算符和测试代码文件。
2、按照权利要求1所述的方法,其中输入步骤包括利用图形用户界面把一个或多个方程式和参数输入符号语言翻译器,图形用户界面包括输入数学符号的符号选项板。
3、按照权利要求1所述的方法,其中多孔介质包括贮油层。
4、按照权利要求1所述的方法,还包括根据一个或多个模型对象产生估计一个或多个方程式中的错误的一个或多个错误模型对象及Dirichlet边界条件模型对象的步骤,其中产生符号表示的步骤还包括利用一个或多个错误模型对象产生符号表示。
5、按照权利要求4所述的方法,其中模型对象和错误模型对象是可用于验证进展的用户可检查的中间对象。
6、按照权利要求1所述的方法,其中所述产生优化规则的步骤包括预先计算simplex的几何不变参量。
7、按照权利要求6所述的方法,其中所述预先计算包括把正确布置的一个或多个作为结果得到的方程式分为数字核心代码。
8、按照权利要求1所述的方法,其中优化规则是语义优化规则。
9、按照权利要求1所述的方法,还包括把符号名称从符号语言翻译器的语言转换成高级程序语言的步骤。
10、按照权利要求1所述的方法,还包括产生一个或多个符号残数和正切矩阵运算符的一组测试输入,并根据产生的输入计算一个或多个符号残数和正切矩阵运算符的输出以便测试错误的步骤。
11、按照权利要求1所述的方法,其中符号语言翻译器是Mathematica。
12、按照权利要求11所述的方法,还包括在不利用Mathematica的积分函数的情况下求解一个或多个方程式的步骤。
13、按照权利要求1所述的方法,其中一个或多个方程式是偏微分方程。
14、按照权利要求13所述的方法,其中一个或多个方程式描述四维物理系统。
15、按照权利要求1所述的方法,其中输入步骤由人完成,所有其它步骤由计算机自动完成。
16、按照权利要求1所述的方法,其中模拟程序包括解算器、用户界面及本机运算符和测试代码文件。
17、一种在计算机上为模拟多孔介质中流体流动的有限元模拟程序产生本机运算符和测试代码文件的系统,包括:
把描述将由模拟程序产生的模型的一个或多个方程式和参数输入符号语言翻译器的装置;
根据一个或多个方程式和参数产生一个或多个模型对象的指令;
产生一个或多个模型对象的一个或多个残数及正切矩阵运算符的符号表示的指令;
产生残数和正切矩阵运算符的几何不变参量的优化规则的指令;
根据符号语言翻译器,用高级编程语言产生数字核心代码和初始化核心代码的数据结构的指令;
利用符号语言翻译器格式化并优化数字核心代码的指令;
通过借助符号语言翻译器处理接合文件以产生本机运算符和测试代码文件,产生本机运算符和测试代码文件的指令。
18、按照权利要求17所述的系统,其中输入指令还包括利用图形用户界面把一个或多个方程式和参数输入符号语言翻译器的指令,图形用户界面包括输入数学符号的符号选项板。
19、按照权利要求17所述的系统,其中多孔介质包括贮油层。
20、按照权利要求17所述的系统,还包括根据一个或多个模型对象产生估计一个或多个方程式中的错误的一个或多个错误模型对象的指令,其中产生符号表示的指令还包括利用一个或多个错误模型对象产生符号表示的指令。
21、按照权利要求20所述的系统,其中模型对象和错误模型对象是可用于验证进展的用户可检查的中间对象。
22、按照权利要求17所述的系统,其中所述产生优化规则的指令包括预先计算几何不变参量。
23、按照权利要求22所述的系统,其中所述预先计算包括使用simplex方法和矩阵运算计算几何不变参量,并把正确布置的一个或多个作为结果得到的方程式分为数字核心代码。
24、按照权利要求17所述的系统,其中优化规则是语义优化规则。
25、按照权利要求17所述的系统,还包括把符号名称从符号语言翻译器的语言转换成高级程序语言的指令。
26、按照权利要求17所述的系统,还包括产生一个或多个符号残数和正切矩阵运算符的一组测试输入,并根据产生的输入计算一个或多个符号残数和正切矩阵运算符的输出以便测试错误的指令。
27、按照权利要求17所述的系统,其中符号语言翻译器是Mathematica。
28、按照权利要求27所述的系统,还包括在不利用Mathematica的积分函数的情况下求解一个或多个方程式的指令。
29、按照权利要求17所述的系统,其中一个或多个方程式是偏微分方程。
30、按照权利要求29所述的系统,其中一个或多个方程式描述一个四维物理系统。
31、按照权利要求17所述的系统,其中输入装置是计算机界面,并且其中人输入所述一个或多个方程式和参数,其它所有指令由计算机自动完成。
32、按照权利要求17所述的系统,其中高级编程语言是Java、C++或者Fortran。
33、按照权利要求17所述的系统,其中模拟程序包括解算器、用户界面及本机运算符和测试代码文件。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/419,717 | 1999-10-14 | ||
US09/419,717 US6633837B1 (en) | 1999-10-14 | 1999-10-14 | Method and system for generating software code using a symbolic language translator |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1421004A true CN1421004A (zh) | 2003-05-28 |
CN1172238C CN1172238C (zh) | 2004-10-20 |
Family
ID=23663452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB008160643A Expired - Fee Related CN1172238C (zh) | 1999-10-14 | 2000-10-12 | 利用符号语言翻译器产生软件代码的方法和系统 |
Country Status (11)
Country | Link |
---|---|
US (1) | US6633837B1 (zh) |
EP (1) | EP1230593A2 (zh) |
JP (1) | JP2003524227A (zh) |
CN (1) | CN1172238C (zh) |
AU (1) | AU8016300A (zh) |
BR (1) | BR0014862A (zh) |
CA (1) | CA2386187A1 (zh) |
EA (1) | EA004383B1 (zh) |
MX (1) | MXPA02003699A (zh) |
NO (1) | NO20021733L (zh) |
WO (1) | WO2001027750A2 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063555A (zh) * | 2011-01-26 | 2011-05-18 | 河海大学 | 基于网格结构的有限元数值模型查错方法 |
CN104298497A (zh) * | 2014-04-04 | 2015-01-21 | 沈阳化工大学 | 大规模非线性动态优化算法代码生成系统 |
CN108304166A (zh) * | 2018-01-18 | 2018-07-20 | 北京航空航天大学 | 一种人工智能程序员根据公式描述书写源程序的方法 |
CN111309302A (zh) * | 2020-02-06 | 2020-06-19 | 杭州电子科技大学 | 一种基于LaTeX的四则运算与三角函数混合运算公式转换Verilog代码的方法 |
CN112926176A (zh) * | 2019-12-05 | 2021-06-08 | 富士通株式会社 | 用于数学公式分解和自动代码生成的图公式建模 |
CN113051725A (zh) * | 2021-03-12 | 2021-06-29 | 哈尔滨工程大学 | 基于通用型辅助变量法的det与relap5耦合的动态特性分析方法 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7369973B2 (en) * | 2000-06-29 | 2008-05-06 | Object Reservoir, Inc. | Method and system for representing reservoir systems |
AU2001270265A1 (en) * | 2000-06-29 | 2002-01-14 | Object Reservoir, Inc. | Method and system for coordinate transformation to model radial flow near a singularity |
US7319945B1 (en) * | 2000-11-10 | 2008-01-15 | California Institute Of Technology | Automated methods for simulating a biological network |
US6895574B2 (en) * | 2001-06-28 | 2005-05-17 | Sun Microsystems, Inc. | Method and apparatus for automatically producing efficient code for computing derivatives |
US7219352B2 (en) * | 2002-04-15 | 2007-05-15 | Microsoft Corporation | Methods and apparatuses for facilitating processing of interlaced video images for progressive video displays |
US7302677B2 (en) * | 2003-05-08 | 2007-11-27 | Microsoft Corporation | Event driven graph explorer for model-based testing of software |
CN100489558C (zh) | 2004-06-07 | 2009-05-20 | 埃克森美孚上游研究公司 | 用于求解隐式储层仿真矩阵的方法 |
US20080086432A1 (en) * | 2006-07-12 | 2008-04-10 | Schmidtler Mauritius A R | Data classification methods using machine learning techniques |
US20090150124A1 (en) * | 2007-12-07 | 2009-06-11 | Schlumberger Technology Corporation | Model based workflow for interpreting deep-reading electromagnetic data |
CN101896690B (zh) | 2007-12-13 | 2015-02-18 | 埃克森美孚上游研究公司 | 使用非结构化网格的储层模拟上的并行自适应数据分区 |
WO2011002473A1 (en) * | 2009-07-01 | 2011-01-06 | Halliburton Energy Services | Estimating mineral content using geochemical data |
US20150142399A1 (en) * | 2010-11-17 | 2015-05-21 | Toyota Motor Engineering & Manufacturing North America, Inc. | Exact parameter space reduction |
FR2969207B1 (fr) * | 2010-12-15 | 2021-05-07 | Ifp Energies Now | Methode de recuperation assistee d'hydrocarbures comprenant l'optimisation de l'injection d'une solution aqueuse de conditionnement |
US9146652B1 (en) * | 2011-08-31 | 2015-09-29 | Comsol Ab | System and method for creating user interfaces in a multiphysics modeling system |
US9922453B1 (en) * | 2013-05-03 | 2018-03-20 | Msc.Software Corporation | Shrink wrap generation systems and methods |
US20160061974A1 (en) * | 2014-09-02 | 2016-03-03 | Reeshidev Bansal | Full-Wavefield Inversion Using Mirror Source-Receiver Geometry |
US20170228225A1 (en) * | 2016-02-05 | 2017-08-10 | Honeywell International, Inc. | System and method for preserving value and extending life of legacy software in face of processor unavailability, rising processor costs, or other issues |
US10387210B2 (en) * | 2016-04-04 | 2019-08-20 | International Business Machines Corporation | Resource schedule optimization |
CN115756416B (zh) * | 2022-10-18 | 2023-06-02 | 元计算(天津)科技发展有限公司 | 物理机理求解器计算单元的程序生成方法及装置 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5099413A (en) | 1987-12-12 | 1992-03-24 | Sadashiro Sakai | System which reads type and position of task element marks on a matrix of program tasks for automatically generating programs |
US5103421A (en) | 1988-11-29 | 1992-04-07 | Massachusetts Institute Of Technology | Process and apparatus for designing a system made of components |
IE69192B1 (en) * | 1990-12-21 | 1996-08-21 | Hitachi Europ Ltd | A method of generating partial differential equations for simulation a simulation method and a method of generating simulation programs |
US5289567A (en) | 1991-04-01 | 1994-02-22 | Digital Equipment Corporation | Computer apparatus and method for finite element identification in interactive modeling |
US5557773A (en) * | 1991-06-12 | 1996-09-17 | Wang; Cheh C. | Computational automation for global objectives |
JPH0778742B2 (ja) * | 1992-08-12 | 1995-08-23 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピユータ・プログラム言語変換装置及びその方法 |
US5442569A (en) * | 1993-06-23 | 1995-08-15 | Oceanautes Inc. | Method and apparatus for system characterization and analysis using finite element methods |
US5537641A (en) * | 1993-11-24 | 1996-07-16 | University Of Central Florida | 3D realtime fluid animation by Navier-Stokes equations |
US5526475A (en) * | 1994-03-02 | 1996-06-11 | Mathsoft, Inc. | Method for live symbolic calculations in a mathematical document editor |
US5784553A (en) * | 1996-01-16 | 1998-07-21 | Parasoft Corporation | Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs |
US5675147A (en) * | 1996-01-22 | 1997-10-07 | Schlumberger Technology Corporation | System and method of petrophysical formation evaluation in heterogeneous formations |
US5668374A (en) * | 1996-05-07 | 1997-09-16 | Core Laboratories N.V. | Method for stabilizing near-infrared models and determining their applicability |
US6272556B1 (en) * | 1996-07-01 | 2001-08-07 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for migrating a client-server application (#5) |
US6018497A (en) * | 1997-02-27 | 2000-01-25 | Geoquest | Method and apparatus for generating more accurate earth formation grid cell property information for use by a simulator to display more accurate simulation results of the formation near a wellbore |
US5813798A (en) * | 1997-03-28 | 1998-09-29 | Whiffen; Greg | Piecewise continuous control of groundwater remediation |
GB9707550D0 (en) * | 1997-04-15 | 1997-06-04 | British Telecomm | Design of computer networks |
US6106561A (en) * | 1997-06-23 | 2000-08-22 | Schlumberger Technology Corporation | Simulation gridding method and apparatus including a structured areal gridder adapted for use by a reservoir simulator |
US6167155A (en) * | 1997-07-28 | 2000-12-26 | Physical Optics Corporation | Method of isomorphic singular manifold projection and still/video imagery compression |
US5796678A (en) * | 1997-08-11 | 1998-08-18 | Trans Seismic International, Inc. | Method for determining the presence of fluids in a subterranean formation |
US6236738B1 (en) * | 1998-04-09 | 2001-05-22 | Board Of Trustees Of The Leland Stanford Junior University | Spatiotemporal finite element method for motion analysis with velocity data |
US6271856B1 (en) * | 1998-11-19 | 2001-08-07 | Paraform, Inc. | Creating and modifying parameterizations of surfaces |
US6256038B1 (en) * | 1998-12-10 | 2001-07-03 | The Board Of Trustees Of The Leland Stanford Junior University | Parameterized surface fitting technique having independent control of fitting and parameterization |
US6353801B1 (en) * | 1999-04-09 | 2002-03-05 | Agilent Technologies, Inc. | Multi-resolution adaptive solution refinement technique for a method of moments-based electromagnetic simulator |
-
1999
- 1999-10-14 US US09/419,717 patent/US6633837B1/en not_active Expired - Lifetime
-
2000
- 2000-10-12 AU AU80163/00A patent/AU8016300A/en not_active Abandoned
- 2000-10-12 WO PCT/US2000/028237 patent/WO2001027750A2/en active Application Filing
- 2000-10-12 BR BR0014862-8A patent/BR0014862A/pt not_active IP Right Cessation
- 2000-10-12 EP EP00970842A patent/EP1230593A2/en not_active Ceased
- 2000-10-12 CA CA002386187A patent/CA2386187A1/en not_active Abandoned
- 2000-10-12 EA EA200200433A patent/EA004383B1/ru not_active IP Right Cessation
- 2000-10-12 MX MXPA02003699A patent/MXPA02003699A/es unknown
- 2000-10-12 CN CNB008160643A patent/CN1172238C/zh not_active Expired - Fee Related
- 2000-10-12 JP JP2001530696A patent/JP2003524227A/ja not_active Withdrawn
-
2002
- 2002-04-12 NO NO20021733A patent/NO20021733L/no not_active Application Discontinuation
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063555A (zh) * | 2011-01-26 | 2011-05-18 | 河海大学 | 基于网格结构的有限元数值模型查错方法 |
CN102063555B (zh) * | 2011-01-26 | 2012-08-15 | 河海大学 | 基于网格结构的有限元数值模型查错方法 |
CN104298497A (zh) * | 2014-04-04 | 2015-01-21 | 沈阳化工大学 | 大规模非线性动态优化算法代码生成系统 |
CN108304166A (zh) * | 2018-01-18 | 2018-07-20 | 北京航空航天大学 | 一种人工智能程序员根据公式描述书写源程序的方法 |
CN112926176A (zh) * | 2019-12-05 | 2021-06-08 | 富士通株式会社 | 用于数学公式分解和自动代码生成的图公式建模 |
CN111309302A (zh) * | 2020-02-06 | 2020-06-19 | 杭州电子科技大学 | 一种基于LaTeX的四则运算与三角函数混合运算公式转换Verilog代码的方法 |
CN111309302B (zh) * | 2020-02-06 | 2023-04-18 | 杭州电子科技大学 | 一种基于LaTeX的四则运算与三角函数混合运算公式转换Verilog代码的方法 |
CN113051725A (zh) * | 2021-03-12 | 2021-06-29 | 哈尔滨工程大学 | 基于通用型辅助变量法的det与relap5耦合的动态特性分析方法 |
Also Published As
Publication number | Publication date |
---|---|
MXPA02003699A (es) | 2005-06-30 |
NO20021733L (no) | 2002-06-12 |
JP2003524227A (ja) | 2003-08-12 |
WO2001027750A3 (en) | 2002-06-13 |
NO20021733D0 (no) | 2002-04-12 |
EA200200433A1 (ru) | 2003-02-27 |
EA004383B1 (ru) | 2004-04-29 |
CA2386187A1 (en) | 2001-04-19 |
CN1172238C (zh) | 2004-10-20 |
AU8016300A (en) | 2001-04-23 |
BR0014862A (pt) | 2003-07-29 |
EP1230593A2 (en) | 2002-08-14 |
US6633837B1 (en) | 2003-10-14 |
WO2001027750A2 (en) | 2001-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1172238C (zh) | 利用符号语言翻译器产生软件代码的方法和系统 | |
US6807651B2 (en) | Procedure for optimizing mergeability and datapath widths of data flow graphs | |
Venkataraman | Applied optimization with MATLAB programming | |
CN1920837A (zh) | 面向复杂装备多学科设计软件集成的参数映射方法 | |
CN1147813C (zh) | 生产数字信号处理器的方法 | |
CN1368693A (zh) | 用于全球化软件的方法和设备 | |
CN1685346A (zh) | 优化专家系统 | |
CN1975720A (zh) | 一种基于Web的数据挖掘系统及其控制方法 | |
CN1609856A (zh) | 查询中间语言的方法和系统 | |
CN1773508A (zh) | 把源文档转换成目标网页文件的方法 | |
CN1885295A (zh) | 使用逻辑单元建置集成电路 | |
CN1770107A (zh) | 提取小树转换对 | |
CN1802632A (zh) | 用于在程序代码转换期间执行解释器优化的方法和装置 | |
CN1310824A (zh) | 用于数据仓库的选择聚集层和交叉产品层的方法和装置 | |
CN1728153A (zh) | 支持配置实体的选择性表示的配置说明语言的方法和系统 | |
CN1955991A (zh) | 在业务模型中集成模型语义和领域语义的方法和装置 | |
CN1650327A (zh) | 可训练可扩充的自动数据-知识转换器 | |
CN101034414A (zh) | 信息处理设备和方法以及程序 | |
CN1892641A (zh) | 用于在电子表单中隐藏模型内的敏感数据的方法和系统 | |
CN1609861A (zh) | 有向无尺度对象关系模型 | |
Nikolić et al. | Design and implementation of numerical linear algebra algorithms on fixed point DSPs | |
Tairas et al. | Corpus-based analysis of domain-specific languages | |
CN100342367C (zh) | 资源的并发、分布式网络的协作 | |
Sanghi et al. | HYDRA: a dynamic big data regenerator | |
CN106649095A (zh) | 一种面向目标代码的程序静态分析系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20041020 Termination date: 20101012 |