ovf文件分析器

ovf的Python项目详细描述


ovf语法分析器库
==
**oommf向量字段文件解析的简单api**<;br/>;

[ovf格式规范](规范)


[![构建状态](https://travis-ci.org/spirit-code/ovf.svg?branch=master)(https://travis ci.org/spirit code/ovf)
[![构建状态](https://ci.appveyor.com/api/projects/status/ur0cq1tykfdlj06/branch/master?svg=true)(https://ci.appveyor.com/project/gpmueller/ovf)

**[python包](https://pypi.org/project/ovf/):**[![PYPI版本](https://badge.fury.io/py/ovf.svg)](https://badge.fury.io/py/ovf)



m/spirit code/ovf/tree/master/python/test)或[fortran/test](https://github.com/spirit code/ovf/tree/master/fortran/test)。


除了打开文件或初始化段外,所有函数都返回状态码
(通常为"ovf撸ok"、"ovf撸invalid"或"ovf撸error")。
不是'OVFYOK’,你可以查看最新的消息,
它应该告诉你问题是什么:
(在C API中的const char *OVFFLATestEngEnter(StrutoOffxFix*))。在B//> B/>在C/C++和FORTRAN中,在写一段之前,确保进入的'OVFFI段'被初始化为BR/>,也就是说,你已经调用了'OffRead StultMyHealth'或'OffthSeaTimeIpdial'。< B/> > C/C++< BR/>< BR/>:BR/>< BR/> > 'MulfFixFrase*MyFielsOVFYOPEN("MyFrimeNo.OVF")'''打开文件'Br/> -MyFiels','找到'来检查文件是否存在于磁盘
-MyField&ovf`检查文件是否包含ovf头
-`myfile->;n_segments`检查文件应包含的段数
-`ovf_close(myfile);`关闭文件并释放资源


初始化段并获取指针
-`ovf_read_segment_header(myfile,index,segment)`将头读入段结构
-创建适当大小的浮点数据数组…
-`ovf_read_segment_data_4(myfile,index,segment,data)`将段数据读入浮点array

写入并追加到文件:

-`struct ovf_segment*segment=ovf_segment_initialize()`初始化一个段并获取指针
-`segment->;n_cells[0]=…`etc以设置数据维度、标题和描述等。
-`ovf_write_segment_4(myfile、segment、data,ovf_format_text)`写入包含段头和数据的文件
-`ovf_append_segment_4(myfile,段,数据,ovf_format_text)`将段头和数据附加到文件


\python

/>或者简单使用pip install ovf






>使用来自python的"ovf"来使用来自python的"ovf",例如来自ovf的"python"








data=np.zeros(2,2,1,1,3,1,3,1,1,dttype=





>ovf_文件:

#写入一个段
segment=ovf.ovf_segment(n_cells=[2,2,1])
如果是ovf_file.write_segment(segment,data)!=-1:
打印("写入_段失败:",ovf_file.get_latest_message())

=-1:
print("append_segment failed:",ovf_file.get_latest_message())
````

Fortran绑定是以面向对象的方式编写的,便于使用。
编写文件,例如:

``Fortran
type(ovf_file)::file
type(ovf_segment)::段
整数::成功
实数(kind=4),可分配::数组4(:,:)
实数(kind=8),分配ble::数组8(:,:)

!初始化段
调用段%initialize()

!写一个文件
调用文件%open_文件(fortran/test/test file/testfile-f.ovf)
%n单元段%n单元段%n单元段=[2,2,1]
%n单元段%n=产品(段%n单元段)

allocallocallocallocallocallocallocallocallocallocallocallocallocallocallocallocarray(3,段%n))
array 4=0
array 4(:,1)=[6.0,7.0,7.0,7.0,7.0,8.0]
array 4 4(:,2)=[5.0,2)=[5.0,4.0,4.br/>
成功=文件%write_segment(segment,array_4,ovf_format_text)
如果(success==ovf_ok),则
write(*,*)"测试write_segment成功。"
!写入(*,*)"n_cells=",段%n_cells
!write(*,*)"n_total=",段%n
否则
write(*,*)"测试写入段不起作用。消息:",文件%最新消息
stop 1
endif
```


有关如何生成现代Fortran绑定的详细信息,
另请参阅https://github.com/mredies/interface fortran

/>



build










通常:
`````
mkdir build
cd build
cmake。
make
```










build build


build

build
=>

>

=







<
-打开在vs中生成的项目并构建它

d_fortran_u bindings`
-`ovf戋u build戋test`


/>让您无需重新安装就可以更改/更新包。

```
cd python
pip install-e.
````

MT-Head=C=C+11+C SRC/OVF.CPP-O OVF.CP.O.BR/>使用GCC。< BR/> BR/> C文库:
'BR/> G++-DF.> 'BR/G++/-C.P.-C.O.M.CP.O.BR/G++II-包含-ITS+C++-1/C测试/Simple .CPP-O简单。CP.O.BR/> BR/Link静态LIB BR/G++-LC++LIBOVFIOFSTATION。主CPP.O简单。CPO。C/C++测试可执行文件:BR/>g++libovf共享.so main.cpp.o simple.cpp.o-o测试cpp.o简单
````


fortran库:
`````
gfortran-fpic-c fortran/ovf.f90-o ovf.f90.f90.o



ar qc libovf.a libovf静态.a ovf.f90.o
ranlibovf.a libovf.a libovf静态.a ovf.f90.o
>ranliblibliblibovf.a fortran.a
``````
>




Fortran测试可执行文件ortran-c fortran/test/simple.f90-o simple.f90.o
gfortran-lc++libovf_fortran.a simple.f90.o-o test_fortran_simple
````

静态链接时,还可以链接对象文件"ovf.cpp.o",而不是"libovf_static.a"。

*注意:根据编译器和/或系统的不同,您可以Y需要`-lstdc++`而不是`-lc++`.*






a0/userguide/ovf_2.0_format.html)
已实现,但未针对oommf进行测试或验证。

*注意:ovf 2.0格式是对ovf 1.0格式的修改,该格式还支持跨三个空间维度的字段,但具有任意(但固定)维度的值。下面是一个完整的规范2.0格式的位置。*



general
--------


-ovf文件有一个ascii头和尾,数据块可以是ascii或二进制。
-所有非数据行都以一个``字符开头
-注释以``字符开头,解析器将忽略这些注释。注释将一直持续到行尾。
-没有行尾字符
-以` `开头但只包含空格的行将被忽略
-以` `开头但包含未知关键字的行是错误的标题、数据块和尾部。

-字段域(即空间范围)横跨三维,单位通常用米或纳米表示
-字段可以是任意维度"n>;0"(但是,此维度在每个段中是固定的)。



---

-ovf 2.0文件的第一行必须是"oommf ovf 2.0"
-头还应包含段的数量,指定为例如"段计数:000001"
-未指定段计数的零填充s以一个`开始:<;块类型>;`行结束,并以一个对应的`结束:<;块类型>;`行结束
-非空的非注释行由一个关键字和一个值组成:
-关键字由首个` `字符后直至第一个冒号(`:`)字符的所有字符组成。忽略大小写,并删除所有空格
-未知关键字是错误
-该值由第一个冒号(`:`)后面的所有字符组成,直到注释(` `)或结束于
-未指定关键字的顺序
-没有任何关键字具有默认值,因此除非另有说明,否则所有关键字都是必需的"header"块中的内容应该是注释或以下文件关键字行之一
-`title`:长文件名或标题
-`desc`(可选):描述行,根据需要使用
-`meshUnit`:基本网格空间单位。此行中不允许使用注释标记` `。示例值:`nm`
-`value units`:应该是值单位的(tcl)列表。此行中不允许使用注释标记` `。示例值:"ka/m"。列表的长度应该是
-`n`:每个元素表示对应维度索引的单位
-`1`:单个元素应用于所有维度索引
-`value labels`:这应该是值标签的"n`-项(tcl)列表,每个值维度一个。标签标识每个维度中的数量。例如,在能量密度文件中,"n"是"1",valueunits可以是"j/m3",valuelabels可以是"exchange energy density"`
-`valuedim`(integer):指定一个整数值"n",它是字段的维数。` n>;=1`
-`xmin`,`ymin`,`zmin`,`xmax`,`ymax`,`zmax`:六条单独的线,指定网格的边界框,单位为`meshUnit`
-`meshType`:网格结构;其中一条
-`rectangle`:还需要
-`xBase`,`ybase`,`zbase`:三条单独的线,表示原点(即第一个点的位置nt在数据段中),以"meshUnit"
-`xstepSize`、`ystepSize`、`zstepSize`:三条单独的线,指定相邻网格点之间的距离,以"meshUnit"
-`xnodes`、`ynodes`、`znodes`(整数)为单位:三条单独的线,指定每个轴上的节点数。
-`unregular`:requires还
-`pointcount`(整数):数据采样点/位置的数量,即节点。仅适用于不规则网格


**段数据**

-数据块开始用` begin:data<;repressentation>;`(因此由` end:data<;representation>;`)关闭,其中`<;representation>;`是数据块中的
-`text`
-`binary 4`
-`binary 8`
-中的一个,对于规则网格,每条记录由'n'值组成,其中'n'是指定的值维度由段头中的"valuedim"记录IED。对于不规则网格,每条记录由"n+3"值组成,其中前三个值是节点位置的x、y和z分量。
-通常将"text"数据放在"n"列中,并用空格隔开
-数据排序通常是以x索引增量进行的首先是ed,然后是y索引,最后是z索引

对于二进制数据:
-二进制表示是ieee 754标准化的小尾数(lsb)顺序浮点数。为确保字节顺序正确,并提供文件未通过非8位干净通道发送的部分检查,对于4字节模式,第一个数据值固定为"1234567.0",对应于LSB十六进制字节序列"38 B4 96 49",对于8字节模式,固定为"12345678901235.0",对应于lsb十六进制字节序列'40 de 77 83 21 12 dc 42'
-数据紧跟在检查值之后
-最后一个数据值后面的第一个字符应该是一个新行




ONS主要用于帮助处理原子系统的数据。

-段计数用零填充到6位(这样就可以附加段并增加计数,而无需重新写入整个文件)
-以` `开头但包含未知关键字的行是忽略。
-` 35; `始终是注释,在所有关键字行中都允许使用,包括'meshUnit'和'valueUnits'
-所有关键字都有默认值,因此不需要任何值
-`csv'也是有效的ascii数据表示形式,对应于'text'类型的逗号分隔列


此库的当前限制
----------

-结构/类中变量的命名与文件格式规范不一致
-并非段中的所有默认值都保证是合理的
-`valueunits`和`valuelabels`是由d已分析,但未检查
-`min`和`max`值中的维度或内容,以确保它们是合理的界限
-`unregular`网格类型不受正确支持,因为在读或写中不考虑位置




-



n=2的不规则网格的示例ovf 2.0文件:不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的示例ovf 2.0文件:


` ` `
` `;oommf ovf 2.0的不规则网格的不规则网格ovf 2.0的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格ovf 2.0的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的不规则网格的ovf 2.0文件的示例ovf 2.0文件:1#描述:可选描述行2.
描述:…

基本网格测量单元。作为标签处理:
网格单元:nm

网格类型:不规则
点计数:5网格中的节点数

xmin:0。##在
ymin:0中定义网格边界框的角点。##"网格单元"。浮点值。
zmin:0。
xmax:10。
ymax:5。
zmax:1。

zmax:5。
zmax:5。
zmax:5。
zmax:1。

;valuedim:2;值维度


基本字段值单位,作为标签(即未分析)处理(即未分析)处理(即未分析)。
一般而言,在一般情况下,在基本字段值单位中,作为标签(即未分析)处理(即未分析)处理(即未分析)的基本字段值单位。

v值单位:j/m^3 a/m
值标签:"塞曼能量密度""各向异性场"
在这个例子中,两个值分量分别以j/m^3和a/m为单位,分别对应于塞曼能量密度和磁晶各向异性场。开始:数据文本
0.5 0.5 0.5 500。4e4
9.5 0.5 0.5 300。5e3
0.5 4.5 0.5 400。4e4
9.5 4.5 0.5 200。5e3
5.0 2.5 0.5 350。2.1e4
结束:数据文本
结束:段
````


-在段头块中,不支持ovf 1.0格式的关键字"valuemultiplier"、"boundary"、"valuerangemaxmag"和"valuerangeminmag"。
-需要新关键字"valuedim"。必须指定一个大于或等于1的整数值"n"。
-新的"valueunits"关键字替换ovf 1.0的"valueunit"关键字,ovf 2.0文件中不允许这样做。
-需要新的"valuelabels"关键字。
-在段数据块中g与ovf 1.0格式相同。
-对于使用"n=3"文本表示的数据块,ovf1.0和ovf 2.0文件中的数据块完全相同。另一种常见的情况是"n=1",它表示标量场,例如能量密度(即‘j/m3’)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java检查整数是0还是检查变量是null更好?   java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri   java JavaFx在“内部场景”和根场景之间切换   spring将XMLBean配置转换为java配置   java JPA HIBERNATE映射列两次(embeddedID和POJO)   c#单态模式模型在什么情况下适用?   java请求。getRemoteUser在特定时间后返回null?   spring boot中PUT api控制器的java my单元测试用例失败   java在字符串中互换地解析和替换值   java Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常   JavaSpringDataMongo:使用非简单键持久化映射   爪哇玻璃鱼连接被拒绝   java如何在用户注册时发送特定电子邮件id的自动回复?   Java列表:实例化时和之后的赋值之间的差异