qlearner的个人博客分享 http://blog.sciencenet.cn/u/qlearner

博文

OpenDX 数据类型详解

已有 3751 次阅读 2015-3-8 17:46 |个人分类:编程学习|系统分类:科研笔记

OpenDX数据模型使用面向对象的、自我描述的方法来定义导入或输入的数据集,其非常灵活,可以表达任意的数据类型。

属性attribute指的是一个OpenDX对象object(如array数组、component组件、field场、group组)与一个(简单的或复合的)数值的联系。通常对于attribute的使用是对一个数据集组合一个元数据metadata。
数组对象array object是一个存储真实数据的基本数据存储结构。OpenDX使用一维数组,数组元素可为任意类型,所以可以通过索引数组的元素来描述这个数组对象。
组件对象component object在数据描述中是一个场field中具有特定作用的元素。通常一个组件是有特定名字的有一个数组对象array object。
场对象field object是OpenDX中一个基本的复合对象,用来收集和封装相应的组件component。所有field的元素都必须是组件component。
组对象group object是用来组合或是field或是group的这些元素的复合对象,它不能组合组件component。组group的成员可以通过名字或索引来获取。
OpenDX也使用其他特定的对象object来描述特定的属性或特征,如Camera、Light、Transform等,其数据模型的可扩展性也体现在这里,可以自定义一些新的特定对象来满足特定的要求。
下图描述了对象Object及属性attribute之间的关系:

即:attribute附加在所有object上,group包含field和其他group,field包含component,component通常
就是有特定作用的已命名的array,如包含数值或坐标值。
下面详细介绍这些类型的作用:
Attribute:
OpenDX使用一系列标准预定义的属性attributes,同时也允许用户定义自己的attributes。预定义的attributes在OpenDX中经常使用,来定义数组、组件、场和组的关键特性。例如:
dep指定了给定的component所依赖的component。如data 组件依赖于positions组件。
ref指定了给定的component所引用的component。如connections组件通常引用positions组件。
der表明一个component派生于(derived from)另一个component,所以当源组件变化时,该组件将会重新计算或被删除。如box组件通常对positions组件有der属性。
element type是connections组件的一个属性,指明了内插的类型。
shade表明如果normals组件存在时,是否对该对象涂阴影。

Array Object:
Array Object是OpenDX中存储一系列真实数据的基本结构。数组内的元素有索引号,从0开始计数。通常,数组对象的特征由预定义的属性,比如type类型、category种类、rank级别和shape形状来给定。每一个数组定义都是自描述的,将数组本身的值和它的属性的值封装在同一结构中。OpenDX的数组可以是各向异性的,包含不同特征的元素(这与大多数编程语言中要求各向同性的数组不同)。
举例,"class array type float cateory real rank 1 shape 2 items 3 data follows 11 2.3 23 40 15 16"。标准OpenDX语言是在预定义的属性名称后紧跟该属性的值。数组的type属性描述了数组数据的内资数值格式。预定义的type值包括double、float、int、uint、short、ushort、byte、ubyte和string。category属性指定使用哪种可能的浮点数,即real实型还是complex复数型。rank属性指的是单元的维度,0级是标量,1是一个矢量,2是一个矩阵或2阶张量,3或更大数字为更高阶张量。shape属性定义了每一个维度上的维数,对于0级结构,即标量,没有shape,对于1级结构(矢量),shape是一个数字,对应于维数的数目,如这里的shape 2, 表明是一个2维的数据,而后面有3个数据,正好是6个data值,对于2级结构,shape是两个数字,等等。

Field Object:
Field是OpenDX数据模型中一个基本的复合结构,用来封装一系列的组件components(已命令的arrays)。Fields也可以有属性attributes。要描述复杂的数据,需要指定数据元素值和描述这些元素如何分布的元素,这需要至少两个数组arrays。尽管可以使用一个数组来存储数据值,然后附加上属性来存储空间分布,但OpenDX通常使用一个field对象在一些特定的、预定义的组件components中聚合所有这些信息。如下是一些标准的field的组件components:
positions在一个n维空间中存储一系列的位置坐标值。除了特殊情况外,这个组件总是需要定义的。
connections描述了如何准确将独立点联系起来,如点、面等,以及在位置之间内插数据值。
data存储了真实的数据值。一个field中仅有一个data组件,但其他组件也可以用来存储数据。
colors、front colors和back colors提供如何处理一个对象的特定的信息。

Group Object:
group对象用来聚合field和其他的group对象。一个组group内的每个对象称为一个成员member。每个成员必须有一个独特的数值标识,也可给定一个独特的名称。当一个group作为一个模块module的输入时,该模块通常检查整个group对象,寻找合适的组件component来操作。因此,一些成员可能被修改,而其他的保持不变,但所有的都被检测一下。
有四种特定的group类型:
(1) 通用组,generic group:是标准group对象,用来收集相关信息;
(2)多重网格组,multigrid group:分离的fields的一个聚合,每个field有自己的网格grids,但处理上看起来像是只有一个field;
(3)composite field group:与multigrid group类似,主要用在分段fields上,来允许在并行环境中处理field或group的一部分;
(4)系列组,series group:存储组中每个成员的一系列数据,如图:


OpenDX模块工作的原理:
大部分OpenDX模块的工作方式相似:将一个或多个group和/或field对象作为输入,对该输入的特定的components进行操作,产生一个或多个新对象作为中间值或最终值,使得该输入对象和中间对象的其中一些或所有部分作为输出。一个模块通常改变、增加和/或删除一个或多个components,也可能保持其他components不变。每一个对立的模块使用或操作不同的components。例如,Color模块仅仅操作color和opacity这两个组件,保持其他组件不变。
因为模块仅作用在特定的组件上吗,所以模块的顺序可能对结果无关,但有时会有很大关系。


——————

Reference: OpenDX :Paths to Visualization



https://blog.sciencenet.cn/blog-441611-872930.html

上一篇:OpenDX Compute模块详解
下一篇:OpenDX Plot模块详解
收藏 IP: 210.72.136.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-19 01:49

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部