博文

createMesh中用到的IOobject(2008-11-25 09:41:00)

摘要:         Foam::IOobject         (             Foam::fvMesh::defaultRegion,             runTime.timeName(),             runTime,             Foam::IOobject::MUST_READ         ) 上述代码是摘抄自createMesh.H中进行fvMesh构造时用到的临时IOobject对象的构造代码。 Foam::fvMesh::defaultRegion的值为"region0",这一部分是作为该IOobject的name_成员; runTime.timeName(),返回的是的runTime的量纲部分dimensioned<scalar>的name_,这一部分是作为该IOobject的instance_c成员; runTime是作为该IOobject的db_成员; 在由该IOobject构造其它类时这些信息是非常有用的,比如objectRegistry类,regIOobject类等,现在举objectRegistry为例,其以IOobject为参数的构造如下: Foam::objectRegistry::objectRegistry (     const IOobject& io,     const label nIoObjects ) : &n......

阅读全文(4555) | 评论:1

Windows动态库与Linux共享对象比较【转自www.bitsCN.com】(2008-11-09 21:27:00)

摘要:摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。   关键词:动态链接库 Linux编程 程序移植   1 引言   动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。采用动态库技术对于升级软件版本更加容易。与静态库(Static Link Library)不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。   在Windows和Linux操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同。本文首先分析了在这两种操作系统中通常采用的动态库调用方法以及程序编制方式,然后分析比较了这两种方式的不同之处,最后根据实际移植程序经验,介绍了将VC++编制的Windows动态库移植到Linux下的方法。
  2 动态库技术    2.1 Windows动态库技术   动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如Windows字体资源文件,称之为资源动态链接库。通常动态库以.dll,.drv、.fon等作为后缀。相应的windows静态库通常以.lib结尾,Windows自己就将一些主要的系统功能以动态库模块的形式实现。   Windows动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分。DLL也只能被该进程的线程所访问。DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。DLL模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中只有一个......

阅读全文(2151) | 评论:0

Dynamic, Absolute and Kinematic Viscosit(2008-11-06 17:09:00)

摘要:The viscosity of a fluid is an important property in the analysis of liquid behavior and fluid motion near solid boundaries. The viscosity is the fluid resistance to shear or flow and is a measure of the adhesive/cohesive or frictional fluid property. The resistance is caused by intermolecular friction exerted when layers of fluids attempt to slide by one another. * Viscosity is a measure of a fluid's resistance to flow The knowledge of viscosity is needed for proper design of required temperatures for storage, pumping or injection of fluids. Common used units for viscosity are * CentiPoises (cp) = CentiStokes (cSt) × SG (Specific Gravity) * SSU1 = Centistokes (cSt) × 4.55 * Degree Engler1 × 7.45 = Centistokes (cSt) * Seconds Redwood1 × 0.2469 = Centistokes (cSt) 1centistokes greater than 50 There are two related measures of fluid viscosity - known as dynamic (or absolute) and kinematic viscosity. Dynamic (absolute) Viscosity is the tang......

阅读全文(3258) | 评论:0

玩转Linux shell命令提示符(2008-11-06 10:18:00)

摘要:如果您很容易使 shell 提示行变得色彩绚烂斓且带有更多信息,为什么还要坚持用单调的标准 shell 提示行呢?在这篇技巧中,Daniel Robbins 将说明如何获得符合您的意愿的 shell 提示行,并会说明如何动态更新 X 终端的标题栏。cYiLinux联盟 cYiLinux联盟   作为 Linux/UNIX 人,我们有很长的时间是在 shell 中工作,并且在许多情况下,下面这一行就是始终盯着我们的那个提示行:cYiLinux联盟 cYiLinux联盟   bash-2.04$cYiLinux联盟 cYiLinux联盟   如果您恰巧是超级用户 (root),您就有权使用下面这个美丽的标示“身份”的提示行版本:cYiLinux联盟 cYiLinux联盟   bash-2.04#cYiLinux联盟 cYiLinux联盟   这些提示行并不是十分漂亮。这也就难怪几种 Linux 版本对默认提示行进行了升级,在其中增加了颜色和更多的信息。但是,即便您恰好有一个本身带有很好的彩色提示行的新式版本,它也不可能是完美无缺的。您或许希望在提示行中增加或更改几种颜色,或者增加(或删除)一些信息。从头开始设计属于您自己的彩色的、经过装饰的提示行并不难。cYiLinux联盟 cYiLinux联盟   提示行基础cYiLinux联盟   在 bash 下,可以通过更改 PS1 环境变量的值来设置提示行,如下所示:cYiLinux联盟 cYiLinux联盟   $ export PS1="> "cYiLinux联盟   >cYiLinux联盟 cYiLinux联盟   更改会立即生效,通过将 "export" 定义放在您的 ~/.bashrc 文件中可将这种更改固定下来。只要您愿意,PS1 可以包含任意数量的纯文本:cYiLinux联盟 cYiLinux联盟   $ export PS1="This is my super prompt > "cYiLinux联盟   This is my super prompt >cYiLinux联盟 cYiLinux联盟   尽管这很有趣,但在提示行中包含大量静态文本并不是特别有用。大多数定制的提示行包含诸如用户名、工作目录或主机名之类的信息。这些花絮信息可以帮助您在 shell 世界中遨......

阅读全文(2686) | 评论:0

linux中的重定向命令应用(2008-11-06 10:17:00)

摘要:1. 标准输入的控制 语法:命令 文件将命令的执行结果送至指定的文件中。 例如: ls -l > list 将执行“ls -l” 命令的结果写入文件list 中。 语法:命令>! 文件将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。 例如: ls -lg >! list 将执行“ls - lg” 命令的结果覆盖写入文件list 中。 语法:命令>& 文件将命令执行时屏幕上所产生的任何信息写入指定的文件中。 例如: cc file1.c >& error 将编译file1.c 文件时所产生的任何信息写入文件error 中。 语法:命令>> 文件将命令执行的结果附加到指定的文件中。 例如: ls - lag >> list 将执行“ls - lag” 命令的结果附加到文件list 中。 语法:命令>>& 文件将命令执行时屏幕上所产生的任何信息附加到指定的文件中。 例如: cc file2.c >>& error 将编译file2.c 文件时屏幕所产生的任何信息附加到文件error 中。 3. 命令语法 command > filename 把标准输出重定向到一个新文件中 command >> filename 把标准输出重定向到一个文件中(追加) command 1 > fielname 把标准输出重定向到一个文件中 command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中 command 2 > filename 把标准错误重定向到一个文件中 command 2 >> filename 把标准输出重定向到一个文件中(追加) command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加) command filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出 command &m 把标准输出重定向到文件描述符m中 command ......

阅读全文(1544) | 评论:0

模板类的友元模板函数(2008-11-04 20:46:00)

摘要:摘自:http://www.informit.com/ 一下内容说明了定义友元时需注意的规则及模板类中友元模板函数的特殊语法结构: friend Declarations PartI Last updated Aug 19, 2005. friend declarations have a few unintuitive properties that might confuse both beginners and experienced programmers. Some of the declarations use special syntactic forms, while others have an unusual semantics. Read all about friend declarations here. The Essence of Friendship A class may declare a function or another class as its friend. A friend has access to all the class' members, including private and protected ones. The name of a friend is not in the scope of the class. Here are two examples of friend declarations:bool operator < (const A&, const A&); class A { private: int x; public: A(); friend bool operator < (const A&, const A&);//friend function friend class B; }; class B { public: void func(int); }; A friend declaration of a function consists of the keyword friend followed by the function's declaration. Thi......

阅读全文(4098) | 评论:0

[备忘]理解dictionary的先决条件(2008-10-31 11:39:00)

摘要:在看dictionary的构造函数时碰到以下问题: 由于dictionary派生自IDLList<entry>,所以要想理解dictionary首先要理解IDLList<entry>相关的一系列类,这包括:ILList, UILList以及DLListBase类。......

阅读全文(3093) | 评论:0

关于OF中的函数指针(2008-10-29 17:36:00)

摘要:#define declareMemberFunctionSelectionTable\
(returnType,baseType,memberFunction,argNames,argList,parList)                 \
                                                                              \
    /* Construct from argList function pointer type */                        \
    typedef  returnType (*memberFunction##argNames##MemberFunctionPtr)argList; \
&nbs......

阅读全文(3195) | 评论:0

关于OF中的输入输出系统(2008-10-29 16:59:00)

摘要:在OF中引入了大量的自定义的变量类型(这里面也包括各种类的对象变量),要对这些变量进行输入与输出对于一个比较大的系统(OF可以算是一个比较大的系统了)来说都要有一个统一的格式,这样有了统一的标准,在这个平台上进行新的扩展就变得容易了。所以OF中自己构造了一个非常方便而且考虑周到的I/O系统,其中涉及并行运算中处理器间的通讯,简单类型变量、字符串格式的流,以及OF中定义的token流,他们分别对应于Pstream,IFstream,StringStream,Tstream等。
可以这样说,OF中所有关键的类对象的构造都是通过Istream的完成的,对象的输出又是通过Ostream来完成的,所以可以说I/O系统是OF的重要基石。 前面的内容过于细化了,往往不能把握程序大的方面,因而以后多发布些自己在程序中类之间的关系以及类的功能上的一些体会,当然代码分析部分也会陆续跟进!......

阅读全文(3174) | 评论:0

谈谈OF中的dictionary(2008-10-29 16:56:00)

摘要:dictionary,顾名思义即是字典的意思,那么针对一个关键词,便可在其中找到与之相应的“内容”,这里的“内容”在OF中以entry类对象的形式表现,这里面包括dictionaryEntry和primitiveEntry,这两个类的对象是dictionary对象中保存的最终的entry的形式。那么entry又是如何组织具体的数据的呢,通过阅读相关类实现源代码可以看出:实际上保存在dictionary的数据是保存在dictonary的私有变量hashedEntries_中,该变量是HashTable<entry*>类的实例,可以看作是一个保存有一系列entry的指针的hash表,可以通过每个entry指针对应的关键字(keyword)在该表中找到实际的entry对象的指针。
从根本上来说,dictionary中保存的dictionaryEntry是dictionaryEntry中的dictionary组件中的内容(dictionaryEntry公有继承自entry和dictionary),保存的primitiveEntry是保存的primitiveEntry中ITstream中tokenList组件中的内容(primitiveEntry公有继承自entry和ITstream,而ITstream公有继承自Istream和tokenList)。所以最终一个dictionary中保存的有用信息就是能够访问dictionaryEntry中dictionary组件中的tokenList中的token,或者是能够访问primitiveEntry中tokenList中的token的相应指针。保存指针一方面节省了空间,同时是执行效率也大大增加。
另外我们知道entry虽然是一个双向链表的节点类(继承自IDLList<entry>::link),即它具有指向前一元素的指针prev_(可公有访问的)又具有指向后一元素的指针next_(可公有访问),但是在dictionary中保存的entry对象都不在链表中,因而prev_=next_=null。 想到哪写到哪,内容有些乱!......

阅读全文(6423) | 评论:0