penelope-pengeom的简易几何定义文件生成器
pengeomgen的Python项目详细描述
彭吉奥姆根
易于生成penelope pengeom几何定义文件的python库。
pengeom可以描述任何由二次曲面约束的均匀体组成的材料系统。它的几何定义文件是一个严格格式化的文本行,用于定义元素块[1]。手动编写几何描述文件可能是一项长期而艰巨的任务(例如,中等复杂的材料系统可能有数千行格式非常严格的行)。
PoeOM.JAR(Java GUI应用程序不是佩内洛普分布包的一部分)允许通过可视化接口定义几何及其可视化[2 ]。
pengeomgen提供一个简单、轻巧且非常可定制的面向对象的api,用于创建和导出严格格式化的几何体定义文件,以便使用penelope pengeom。单个类允许定义所有基本元素和其他预定义元素。
参考文献:
< Buff行情>[1]F.萨尔瓦特。penelope,电子和光子输运蒙特卡罗模拟程序系统。研讨会论文集,西班牙巴塞罗那。国家能源局/MBDAV/R(2019)1.
< Buff行情>[2]Almansa,J.,F.Salvat Pujol,G.D_…Az Londo_?o,A.Carnicer,A.M.Lallena和F.Salvat。pengeom,一个用于蒙特卡罗模拟复杂材料结构中辐射输运的通用几何包。计算机。Phys。共同体。199。(2016)
设置
$ pip3 install pengeomgen
用法示例
importpengeomgeng=pengeomgen.GeometryDefinition("The pythonic champagne glass")s1=g.surface(indices=(0,0,0,1,-1),zscale=9)s2=g.surface(indices=(0,0,0,1,-1),zscale=7)s4=g.surface_plane(zshift=-6)s5=g.surface_plane(zshift=-6.4)s6=g.surface_plane(zshift=-6.8)g.surface_paraboloid("S7")g.surface_paraboloid("S8",scale=(0.98,0.98,1),translation=(0,0,0.35))g.surface_cone("S9",scale=(0.012,0.012,1),translation=(0,0,-20))g.surface_cone("S10",scale=(3.7,3.7,1),translation=(0,0,-6))g.surface_cone("S11",scale=(5.1,5.1,1),translation=(0,0,-6.35))g.body("B1",2,surfaces=[(s1,-1),("S7",-1),("S8",1)],comment="cup body")g.body("B2",1,surfaces=[("S8",-1),(s2,-1)],comment="liquid")g.body("B3",2,surfaces=[(s5,1),("S9",-1),("S7",1)],comment="trunk")g.body("B4",0,surfaces=[(s5,-1),(s6,1),("S11",-1)],comment="foot hole")g.body("B5",2,surfaces=[(s4,-1),(s6,1),("S10",-1)],bodies=["B3","B4"],comment="foot body")print(g)# export the geometry definition fileg.export_definition("glass")
用法和API
pengeomgen包提供的主要名称是geometrydefinition。这是用于管理几何图形定义文件中的元素块的类名。通过它的接口(方法),我们可以使用简单的数字表示法和其他特性定义曲面、实体、模块(在一行代码中)。此外,我们还可以执行以下操作:克隆、包含外部几何体定义等。
importpengeomgeng=pengeomgen.GeometryDefinition(description="",unit="cm",angle="DEG")
- 说明(字符串):信息性文本
- 单位(字符串):长度的测量单位(平移)。此参数允许我们以示意图为单位定义材料系统,例如。导出几何体定义文件时,当前单位(见下表)将转换为厘米
- 角度(字符串):角度(旋转)的度量单位。此参数可以是"rad"、"rad"(弧度)或"deg"、"deg"(度)
在下面描述的构造二次曲面、模块和克隆的方法中,可以覆盖单位和角度参数
<表><广告>-将几何体定义导出到文件中
要将构造的几何体定义导出到文件中,我们可以调用export_definition方法。此方法只有输出文件的绝对或相对路径作为参数。
g.export_definition("output_file_path")
显示空隙内部体积
可以使用材质值(小于或等于零的数值)对内部体积进行建模。建议材料值小于零而不是零,然后,使用显示内部体积的方法,我们可以在导出前将负值材料的符号更改为正值(固体材料)。
g.show_void_inner_volumes(show=True)
-用二次曲面描述材料系统
下面将详细介绍使用二次曲面、实体和模块描述材料系统以及进行其他操作的方法。
面S
方法surface允许根据下一个格式化的文本行分别创建二次曲面(默认情况下为简化形式)的简化形式和隐式形式。
简化形式:
0000000000000000000000000000000000000000000000000000000000000000
SURFACE ( A4) comment: reduced form
INDICES=(I2,I2,I2,I2,I2)
X-SCALE=( E22.15 , I4) (DEFAULT=1.0)
Y-SCALE=( E22.15 , I4) (DEFAULT=1.0)
Z-SCALE=( E22.15 , I4) (DEFAULT=1.0)
OMEGA=( E22.15 , I4) DEG (DEFAULT=0.0)
THETA=( E22.15 , I4) DEG (DEFAULT=0.0)
PHI=( E22.15 , I4) DEG (DEFAULT=0.0)
X-SHIFT=( E22.15 , I4) (DEFAULT=0.0)
Y-SHIFT=( E22.15 , I4) (DEFAULT=0.0)
Z-SHIFT=( E22.15 , I4) (DEFAULT=0.0)
隐式形式:
0000000000000000000000000000000000000000000000000000000000000000
SURFACE ( A4) comment: implicit form
INDICES=( 0, 0, 0, 0, 0)
AXX=( E22.15 , I4) (DEFAULT=0.0)
AXY=( E22.15 , I4) (DEFAULT=0.0)
AXZ=( E22.15 , I4) (DEFAULT=0.0)
AYY=( E22.15 , I4) (DEFAULT=0.0)
AYZ=( E22.15 , I4) (DEFAULT=0.0)
AZZ=( E22.15 , I4) (DEFAULT=0.0)
AX=( E22.15 , I4) (DEFAULT=0.0)
AY=( E22.15 , I4) (DEFAULT=0.0)
AZ=( E22.15 , I4) (DEFAULT=0.0)
A0=( E22.15 , I4) (DEFAULT=0.0)
1111111111111111111111111111111111111111111111111111111111111111
OMEGA=( E22.15 , I4) DEG (DEFAULT=0.0)
THETA=( E22.15 , I4) DEG (DEFAULT=0.0)
PHI=( E22.15 , I4) DEG (DEFAULT=0.0)
X-SHIFT=( E22.15 , I4) (DEFAULT=0.0)
Y-SHIFT=( E22.15 , I4) (DEFAULT=0.0)
Z-SHIFT=( E22.15 , I4) (DEFAULT=0.0)
方法和参数:
surface(label=None,indices=(1,1,1,1,1),scale=(1,1,1),rotation=(0,0,0),translation=(0,0,0),starred=False,comment="",**kwargs)
- label(string):元素的用户标签(最多4个字符)。此参数是可选的。如果用户没有设置它,则内部状态机会在xaaa到zzzz的范围内分配一个唯一的4字符值。没有显式标签的元素只能通过其实例引用
- 索引(元组):曲面表示的简化形式的系数(i1、i2、i3、i4、i5)
- 比例(元组):X、Y和Z轴的比例因子(X比例、Y比例、Z比例)
- 旋转(元组):通过欧拉角定义的旋转值(ω、θ、phi)
- 平移(元组):X、Y和Z轴的平移值(X-shift、Y-shift、Z-shift)
- 星号(布尔):如果为真,则允许定义固定曲面,该曲面不受几何定义后续阶段中可能发生的平移或旋转的影响
- 注释(字符串):短文本描述
- 返回值:当前曲面对象的实例
此外,我们可以使用一个参数的赋值来指定元组中一个压缩项的值,即缩放、旋转和平移。单个参数为:x scale(x-scale)、yscale(y-scale)、zscale(z-scale)、omega(omega)、theta(theta)、phi(phi)、x shift(x-shift)、yshift(y-shift)和zshift(z-shift)。在这种情况下,当两个参数都存在时,单个参数的值将覆盖元组中相应项的值。
自定义曲面:
为了方便、灵活、快速地构造材料系统的几何定义,geometrydefinition类包含了几种映射自定义和预定义的简化二次曲面的方法。下表中定义了这些曲面,并分别使用其系数和方法名。所有方法都是泛型曲面方法的重新实现,它们只是根据表达式设置系数(索引)的值。
<表><广告>隐式曲面:
我们可以使用方法surface以隐式形式创建曲面,将系数(索引)元组的所有项设置为零。但是,方法surface_implicit_form为我们这样做。有一组用于指定此曲面几何体的单个参数:axx、axy、axz、ayy、ayz、azz、ax、ay、az、a0(根据模型)。我们可以为我们的实现设置有用的值;其他的值取为默认值零。对于这个实现,在这个表示中的任何一个都忽略了scale的值。tion(元组或单个参数)。
车身
方法body允许根据下一个格式化文本行创建受二次曲面限制的均质体:
0000000000000000000000000000000000000000000000000000000000000000
BODY ( A4) comment
MATERIAL( A4)
SURFACE ( A4), SIDE POINTER=(I2)
BODY ( A4)
MODULE ( A4)
方法和参数:
$ pip3 install pengeomgen0
- label(string):元素的用户标签(最多4个字符)。此参数是可选的。如果用户没有设置它,则内部状态机会在xaaa到zzzz的范围内分配一个唯一的4字符值。没有显式标签的元素只能通过其实例引用
- 材料(字符串或整数):材料标识号符合模拟中采用的惯例
- 曲面(元组列表):当前实体的边界曲面。每个元组包含边界曲面的标签(字符串)或实例(曲面对象)及其曲面边指针(整数:1或-1)
- 实体(字符串或实体对象列表):当前实体的边界实体
- 模块(字符串或模块对象列表):当前主体的边界模块
- 注释(字符串):短文本描述
- 返回值:当前主体对象的实例
模块
方法模块允许根据下一个格式化文本行创建模块:
$ pip3 install pengeomgen1
方法和参数:
$ pip3 install pengeomgen2
- label(string):元素的用户标签(最多4个字符)。此参数是可选的。如果用户没有设置它,则内部状态机会在xaaa到zzzz的范围内分配一个唯一的4字符值。没有显式标签的元素只能通过其实例引用
- 材料(字符串或整数):材料标识号符合模拟中采用的惯例
- 曲面(元组列表):当前模块的边界曲面。每个元组包含边界曲面的标签(字符串)或实例(曲面对象)及其曲面边指针(整数:1或-1)
- 实体(字符串或实体对象列表):当前模块的边界实体
- 模块(字符串或模块对象列表):当前模块的边界模块
- 旋转(元组):通过欧拉角定义的旋转值(ω、θ、phi)
- 平移(元组):X、Y和Z轴的平移值(X-shift、Y-shift、Z-shift)
- 注释(字符串):短文本描述
- 返回值:当前模块对象的实例
与曲面一样,我们可以使用单个参数的赋值来指定元组中一个压缩项的值,该元组指的是旋转和平移。单个参数是:Ω(Ω)、θ(θ)、phi(phi)、x shift(x-shift)、yshift(y-shift)和zshift(z-shift)。在这种情况下,当两个参数都存在时,单个参数的值将覆盖元组中各自组件的值。
克隆
克隆方法允许根据下一个格式化文本行克隆模块(不能克隆实体;要克隆仅受曲面限制的实体,请将其定义为模块):
$ pip3 install pengeomgen3
方法和参数:
$ pip3 install pengeomgen4
- label(string):元素的用户标签(最多4个字符)。此参数是可选的。如果用户没有设置它,则内部状态机会在xaaa到zzzz的范围内分配一个唯一的4字符值。没有显式标签的元素只能通过其实例引用
- 模块(字符串或模块对象):要克隆的模块的标签或实例
- 旋转(元组):通过欧拉角定义的旋转值(ω、θ、phi)
- 平移(元组):X、Y和Z轴的平移值(X-shift、Y-shift、Z-shift)
- 注释(字符串):短文本描述
- 返回值:的实例当前克隆对象
与曲面和等于模块一样,我们可以使用一个参数的赋值来指定元组中一个压缩项的值,即旋转和平移。单个参数是:Ω(Ω)、θ(θ)、phi(phi)、x shift(x-shift)、yshift(y-shift)和zshift(z-shift)。在这种情况下,当两个参数都存在时,单个参数的值将覆盖元组中各自组件的值。
包括
方法include允许根据下一个格式化文本行插入其他几何体定义文件:
$ pip3 install pengeomgen5
方法和参数:
$ pip3 install pengeomgen6
- 文件名(字符串):要包含的几何定义文件的绝对或相对路径
- 星号(布尔):如果为true,则允许将包含的文件视为主文件的一部分
- 注释(字符串):短文本描述
- 返回值:当前包含对象的实例
结束
方法结束取消读取penelope pengeom应用程序的几何数据(如果在某个材料系统的几何定义中间调用此方法,则此调用之后的所有元素都将被应用程序忽略)。默认情况下,此生成器在几何体定义的末尾包含此元素,因此其调用不是必需的。
$ pip3 install pengeomgen7
方法和参数:
$ pip3 install pengeomgen8
- 返回值:当前结束对象的实例