学习自旋电子学的笔记01:微磁模拟软件OOMMF的教程(中文版)16章

 勉之期不止,多获由力耘。——欧阳修《送唐生 》​​​​​​​

# 前言

这是oommf软件教程《OOMMF User’s Guide》的中文翻译文章,由于本人水平有限,有些翻译可能有错误,望见谅。

目录

16命令行实用程序

16.1位图文件格式转换:any2ppm。

16.2从矢量场生成数据表:avf2odt。

16.3矢量场文件格式转换:avf2ovf。

16.4从矢量场生成位图:avf2ppm。

16.5从矢量场生成PostScript:avf2ps。

16.6矢量场文件差异:avfdiff。

16.7循环冗余校验:crc32。

16.8终止OOMMF进程:killoommf。

16.9最后一次Oxsii/Boxsi运行:lastjob。

16.10启动OOMMF主机服务:launchhost。

16.11从磁化计算H场:mag2hfield。

16.12 MIF格式转换:mifconvert。

16.13进程昵称:nickname。

16.14 ODT衍生数据计算器:odtcalc。

16.15 ODT表连接:odtcat。

16.16 ODT列数据获取:odtcols。

16.17 Oxs包管理:oxspkg。

16.18 Oxs回归测试:oxsregression。

16.19 OOMMF和进程ID信息:pidinfo。

16.20跨平台相关:pimake。


######

本文链接:https://blog.csdn.net/qq_43572058/article/details/123161051

CSDN@搬砖工人_0803号

######

16命令行实用程序

本节介绍了一些OOMMF附带的其他程序,这些程序是从命令行(Unix的 shell或Windows的 DOS)启动的,通常用于微磁模拟相关数据的预处理和后处理。

16.1位图文件格式转换:any2ppm。

any2ppm程序将位图文件从Portable Pixmap(PPM)、Windows的 BMP和GIF格式转换为Portable Pixmap P3(文本)或P6(二进制)格式,或未压缩的BMP二进制格式(每像素24比特位)。Tcl/Tk 8.6或更高版本支持Portable Network Graphics (PNG)格式。若系统上安装了Tcl/Tk Img 包,则可以支持更多格式。(注意:OOMMF对BMP的支持需要Tk 8.0或更高版本。)

启动

any2ppm的启动命令是:

tclsh oommf.tcl any2ppm [standard options] [-f] [-format fmt] \

[-noinfo] [-o outfile] [infile ...]

-f 强制输出。如果未指定-o选项,则去除输入文件名称的扩展名(如果有的话),然后加上特定格式的扩展名(如.ppm),以此自动生成输出文件的名称。如果指定了-f选项,则输出文件的名称就是该自动生成的文件名称。如果未指定-f,则检查自动生成的文件名称是否已存在,如果已存在的话,那么再追加一个“-000”或“-001”后缀以生成新的文件名称。如果输入来自stdin,即没有输入文件的名称,则默认输出为stdout。

-format fmt 输出文件的格式。默认值为PPM或P3(Portable Pixmap P3 (文本))格式。若fmt为P6,则会得到二进制的PPM P6格式。若fmt为BMP,则生成未压缩的Windows BMP(每像素24比特位)格式文件。在Tcl/Tk 8.6及更高版本中,可通过将fmt设置为PNG来使用Portable Network Graphics格式。如果安装了Tcl/Tk Img包,则可以使用其他格式,例如PNG(可用于Tcl/Tk 8.6之前的版本)、JPEG和TIFF。输出文件默认的扩展名取决于所选的格式,例如,PPM文件的扩展名为 .ppm,BMP文件为 .bmp。

-noinfo 禁止把进度信息写入stderr。

-o outfile 将输出写入outfile文件中。若outfile为“-”,则会输出到stdout。如果指定了outfile,那么所有的输出都将传输到这个文件,在这种情况下,不太可能需要指定多个输入文件。

infile . . . 要处理的输入文件列表。如果没有指定该选项,或者infile为空字符串,则会从stdin读取。

注意:如果输出是到stdout,并且选择的输出格式不是PPM,那么在写入到stdout之前,会先将输出写入到临时文件。在正常操作下,都会自动删除临时文件,但若程序异常终止,则无法保证自动删除。

Tk要求:any2ppm在处理过程中需要使用Tk image命令,这需要正确初始化Tk,且必须有可用的显示程序。在Windows上则不存在该问题,因为Windows都是有桌面的,但在Unix上必须运行X服务器。X服务器可以使用Xvfb。(Xvfb是一个与X11R6一起分发的X服务器,它不需要显示硬件或物理输入设备。)

16.2从矢量场生成数据表:avf2odt。

avf2odt程序将矢量场文件转换为ODT 1.0数据表格式的文件,输入文件里的矢量场是矩形网格化的,文件格式可以是任意可识别格式(OVF、VIO)。(此程序不支持不规则网格。注意,任何使用“irregular”网格类型的OVF文件都被视为使用了不规则网格,即使网格节点实际上位于矩形网格上。)

启动

avf2odt启动命令是:

tclsh oommf.tcl avf2odt [standard options] \

[-average <space|plane|line|point|ball>] [-axis <x|y|z>] \

[-ball_radius brad] [-defaultpos <0|1>] [-defaultvals <0|1>] \

[-extravals flag] [-filesort method] [-headers <full|collapse|none>] \

[-index label units valexpr] [-ipat pattern] [-normalize <0|1>] \

[-numfmt fmt] [-onefile outfile] [-opatexp regexp] [-opatsub sub] \

[-region xmin ymin zmin xmax ymax zmax] \

[-rregion rxmin rymin rzmin rxmax rymax rzmax] \

[-truncate <0|1>] [-v level] [-valfunc label units fcnexpr] \

[infile ...]

-average <space|plane|line|point|ball> 表示在所选区域中求平均矢量的方法类型。若选择space为参数,只会输出一个数据行(对于每个输入文件),这一行数据由所选区域中矢量场的平均vx、vy和vz值组成(见下面的-region选项)。例如,在磁化文件中,vx、vy和vz对应于Mx、My和Mz。如果选择了plane或line为参数,则它们的输出数据表都是由多行组成的,每行分别有4列和5列。在选择了plane或line为参数的情况下,它们输出数据表的最后3列都是指定的仿射子空间(即平面或直线)上的vx、vy和vz平均值(仿射子空间是轴平行的)。在参数为plane的情况下,第一列表示沿垂直于平面的坐标轴的平均偏移(见下面的-axis选项)。在参数为line的情况下,前两列是平均线在垂直于直线的平面中的偏移。如果参数为point,则不进行平均,输出由每行6列数据组成,选定区域中的每个点对应一行,其中前3列为点坐标,后3列为该点的vx、vy和vz值。如果参数为ball,则每个采样点输出一行数据,平均的范围是以位于选定区域内每个采样点为中心的指定半径为brad(参见-ball radius brad选项)的球,每一行的输出值由6列组成:球的中心点位置和整个球的平均vx、vy和vz值。作为一种特殊情况,如果选定区域的空间范围是二维的(例如,所有样本点具有相同的z坐标),则平均区域被视为一个圆盘而不是一个球。类似地,如果选定区域的空间范围是一维的,则平均区域将缩小为一维线段。(注意:-defaultpos和-defaultvals选项会限制上述输出列。-index和-valfunc选项会新增其它列。)默认的求平均类型是space。

-axis <x|y|z> 对于-average 为plane 和 line时,选择将在哪个仿射子空间上求平均。在平面情况下,-axis表示平面的法线方向,而对于直线,则表示平行于直线的方向。如果-average不是plane 或 line时,则忽略此参数。默认值为x。

-ball_radius brad 如果-average为ball,则需要此选项,在这种情况下,brad使用微磁问题中的单位(米)来表示平均球的半径。如果-average不是ball,则忽略此选项。

-defaultpos <0|1> 默认情况下,输出的数据列如上面的-average选项所述。可使用-defaultpos 0省略包含位置点坐标的列。

-defaultvals <0|1> 默认情况下,输出的数据列如上面的-average选项所述。可使用-defaultvals 0省略包含平均vx、vy和vz值的列,这通常与-valfunc选项结合使用。

-extravals<0 | 1> 使用-extravals 1表示增加平均L1范数 、标准化L2范数 、分量的最小绝对值和分量的最大绝对值的输出列。

-filesort method 指定输入文件列表的排序方法。当使用-onefile选项时,列表中文件的顺序很重要,因为它控制着每个输入文件中的行的连接顺序。method可以是关键字“none”,或者是Tcl命令lsort可识别的参数,例如“-ascii-discreating”。注意,lsort的排序参数都以连字符“-”开头,如果要使用多个选项,则必须将多个选项作为一整个元素传给filesort(例如,在列表中添加引号)。如果指定了-ipat选项,则method默认为“-dictionary”,否则默认为“none”。

-headers <full|collapse|none> 确定输出ODT文件的标题样式。full(默认)样式是标准样式(参见第18章ODT文档)。样式为none则会生成没有任何标题的原始数据行。collapse样式用于有多个输入文件并使用了-onefile选项的情况,表示在段之间,连接没有ODT标题信息的输出。

-index label units valexpr 将有关索引计算的列添加到输出文件中,索引列与输入文件有关。其中label是列的标题,units是列的单位,valexpr是一个Tcl 的expr表达式语句,语句中可以包括特殊变量$i、$f1、$f2…$d1,$d2….。其中$i是当前输入文件在输入文件列表中的索引(从0开始),$f1是当前输入文件的名称中出现的第一个数值,$f2是当前输入文件的名称中出现的第二个数值,$d1是当前输入文件内“Desc”字段中出现的第一个数值,等等。例如,如果有两个输入文件分别名为foo-100.ovf和foo-101.ovf,将valexpr设置为abs($f1)+1将在输出中增加一个列,输入文件foo-100.ovf输出的新增列的值为101(该新增列跨越所有的行),foo-101.ovf输出的新增列的值为102(该新增列跨越所有的行)。(使用Tcl函数abs的原因是,foo-100.ovf中前面的连字符被解释为负号,所以$f1实际表示的是-100。)在Unix系统上,valexpr表达式语句应该用单引号括起来,以防止shell插入特殊变量。在Windows上,valexpr表达式语句应该用双引号括起来,以便解析语句中的空格。若在命令行上指定了多个-index选项,则会在输出文件中按指定的顺序新增多个对应的列。索引列(如果有)是输出文件中的第一列。

-ipat pattern 使用“glob-style”样式通配符的模式来指定输入文件,这在DOS中特别有用,输入文件必须满足infile选项的要求(见下文)。

-normalize <0|1> 如果为1,则使用默认的平均输出值vx、vy和vz除以所有矢量对齐时的最大幅值得到标准化的输出值。(输出矢量的最大幅值为1。)应谨慎使用此选项,因为它是对每个输出行进行独立标准化的。若-normalize 0(默认值),则平均输出值是用输入文件中的单位来表示的。

-numfmt fmt 使用C语言风格的输出格式,用于输出表格正文中的数字数据。默认值为“%- #20.15g”。

-onefile outfile 通常情况下,avf2odt将其输出写入一系列文件中,并根据-opatexp和-opatsub选项生成这些文件的名称。但是使用本选项-onefile outfile则会重定义该行为,并将所有输出发送到一个地方:如果outfile为“-”,则将输出发送到标准输出,否则指定的outfile就是输出文件的名称。

-opatexp regexp 指定作用于输入文件名称的“正则表达式”,以查找在生成输出文件名称时要替换的部分。默认的正则表达式是:(\.[^.]?[^.]?[^.]?$|$)。

-opatsub sub 在生成输出文件名称的过程中,用sub来替换输入文件名称中与-opatexp regexp匹配的部分字符串。sub默认为 .odt。

-region xmin ymin zmin xmax ymax zmax 与轴平行的方形盒子,表示在矢量场文件中要采集数据的区域。盒子的位置使用微磁问题的单位(通常为米)来表示。可以把盒子的任何顶点坐标设为一个连字符“-”,在这种情况下,会使用输入文件中相应的极值。该选项是可选的;该选项默认为:-region - - - - - -,表示选择输入文件中的整个区域。

-rregion rxmin rzmin rxmax rzmax 此选项与-region相同,只是盒子的位置使用相对单位指定,这些值介于0和1之间。

-truncate <0|1> 在打开一个已存在的文件进行输出时,可以将新输出追加到文件(-truncate 0),或者删除文件中的原有数据(-truncate 1)再输出到该文件。该选项默认为-truncate 0。

-v level 提示信息的详细级别,0表示只生成错误消息,其他大于0的数字会生成额外提示信息。level是一个整数,默认为1。

-valfunc label units fcnexpr 类似于-index选项,-valfunc向输出文件中新增一个额外的列,其中label和units作为列标题,fcnexpr是一个可能包含特殊变量的Tcl的expr表达式语句。该选项允许的特殊变量是$x、$y、$z、$r、$vx、$vy、$vz、$vmag,其中$x、$y、$z和$r分别是样本点的位置和大小( ),而$vx、$vy、$vz和$vmag是矢量的分量值和幅值。该新增列的值就是受到-average选项作用后表达式fcnexpr 的值。(译者注:关于此参数的详细用法请参考oommf官网中追踪斯格明子的方法)下面是几个例子: 

-valfunc Ms A/m '$vmag'

-valfunc M110 A/m '($vx+$vy)/sqrt(2.)'

与-index的valexpr表达式语句一样,在Unix上,fcnexpr表达式语句应用单引号括起来,以防止shell对特殊变量进行插值。在Windows上,fcnexpr表达式语句应该用双引号括起来,以解析语句中的空格。输出值不受-normalize选项的影响。若在命令行上指定了多个-valfunc选项,则会在输出文件中按指定的顺序新增多个对应的列。这些新增列将被放到输出文件中所有其它列的右侧。

infile . . .输入文件列表。文件的格式必须是可识别的格式之一,即OVF 1.0或VIO,它们是矩形网格的子格式。

这里解释一下怎么指定输入文件。输入文件可以通过显式列表(infle…)来指定,也可以使用通配符模式来指定,例如,-ipat *.omf,它由avf2odt(使用Tcl的 glob命令)以普通的方式展开。Unix shell(sh、csh等)在将控制权移交给被调用的程序之前会自动展开通配符,故通常不需要-ipat选项,即便-ipat选项在出现“命令行过长”的错误时很有用。DOS不会进行这种展开,所以在Windows中必须使用-ipat选项展开通配符。最后的文件列表会根据上面介绍的-filesort选项进行排序。

如果没有使用-onefile选项,则在处理每个输入文件时,会将选项-opatexp和-opatsub的表达式语句传递给Tcl的regsub命令,通过该命令所确定的规则,从输入文件名称中生成相应输出文件的名称。有关详细信息,参阅Tcl regsub文档,在通常情况下,输入文件名称中与-opatexp的表达式语句匹配的任意部分字符串都将被删除并替换为-opatsub的字符串。-opatexp默认的表达式语句会与任意的文件扩展名(扩展名最多3个字符)匹配,-opatsub默认将扩展名替换为.odt。

16.3矢量场文件格式转换:avf2ovf。

avf2ovf程序将矢量场文件从任意可识别的格式(OVF、VIO)转换为OOMMF OVF或Python NumPy NPY格式。

启动

avf2ovf的启动命令是:

tclsh oommf.tcl avf2ovf [standard options] \

[-clip xmin ymin zmin xmax ymax zmax] [-dataformat <text|b4|b8>] \

[-fileformat <ovf|npy> version] [-flip flipstr] [-grid <rect|irreg>] \

[-info] [-keepbb] [-mag] [-pertran xoff yoff zoff] [-q] \

[-resample xstep ystep zstep order] [-rpertran rxoff ryoff rzoff] \

[-subsample period] [infile [outfile]]

-clip xmin ymin zmin xmax ymax zmax 这6个参数指定边界剪裁盒子的顶点。只有剪裁盒子里的网格点才会被发送到输出文件中。任意参数都可以设置为“-”,表示使用输入文件中的相应极值。

-dataformat <text|b4|b8> 指定输出数据的格式,可以是ASCII文本(text)、4字节二进制(b4)或8字节二进制(b8)。对于OOMMF OVF 输出文件,默认值为text(请注意,OVF在所有情况下都有一个ASCII文本格式的标题)。对于Python NumPy NPY输出文件,默认值为b8。对于OOMMF OVF 2版本的输出,若为text,还可以附加一个C语言风格的printf格式化字符串,例如,-dataformat "text %16.12e"(请注意使用引号,将其作为-dataformat的单个参数)。

-fileformat <ovf|npy> version 指定输出文件的格式和版本,OOMMF OVF的版本可以是1(默认)或2,Python NumPy 数组文件的版本是1。

-flip flipstr 可以变换坐标轴。flipstr的形式是A:B:C,其中A,B,C是x,y,z的排列,每项都有一个可选的负号。第一个分量A表示x映射到的轴,B表示y映射到的轴,C表示z映射到的轴。默认设置为标准映射x:y:z。若要坐标轴绕z轴旋转90°,则使用“-flip y:-x:z”,它将x发送到+y轴,y发送到-x轴,并保持z不变。

-grid <rect|irreg> 指定输出网格的结构。默认值为rect,即如果输入为规则的矩形网格,则将输出规则的矩形网格。选项“-grid ireg”会强制输出不规则的网格结构。

-info 不对文件格式进行转换,而是打印文件的信息,例如文件标题中的大小、范围和描述性文本。

-keepbb 如果使用了-clip选项,则输出的空间范围(即边界)通常被剪裁到指定的剪裁盒子的范围内。如果使用了-keepbb选项(keep bounding box),则输出文件的空间范围直接取自输入文件的整个空间范围,而且剪裁效果仍作用在矢量上;-keepbb仅影响剪裁盒子的边界。

-mag 会输出标量值字段,而不是矢量值字段,其中标量值是每个位置点r处的矢量大小|v(r)|。此选项仅适用于OOMMF OVF版本2输出。

-pertran xoff yoff zoff 平移矢量场(基于位置点坐标),按(xoff,yoff,zoff)来平移。例如,如果(xoff,yoff,zoff)是(50e-9,0,0),那么原始文件中位置点(rx,ry,rz)处的矢量v在输出文件中的位置为(rx+50e-9,ry,rz)。如果输入文件中x坐标的空间范围是从xmin到xmax,并且如果rx+50e-9大于xmax,则v将被放在rx+50e-9−xmax+xmin处(即周期性平移)。平移距离被四舍五入到最接近的整数步长;若没有剪裁,则输出文件与原始文件具有完全相同的空间范围和采样位置。如果同时使用了平移和剪裁,则先平移再使用剪裁。

-q 安静的运行,即不打印提示消息。

-resample xstep ystep zstep <0|1|3> 使用指定的步长对网格重新采样。在剪裁区域之后,每个步长都必须在相应的方向上精确划分网格范围。(也就是说,导出网格仅由整数的单元格组成。)最后一个参数指定多项式插值的阶数:0表示最近值,1表示三线性插值,3表示三次Catmull-Rom样条拟合。此控制选项仅适用于具有矩形网格结构的输入文件。默认情况下不进行重采样。

-rpertran rxoff ryoff rzoff 类似于-pertran,但(rxoff,ryoff,rzoff)表示为x、y、z空间坐标的在[0,1]范围内的相对偏移。例如,如果xmax−xmin=500 e-9,那么rxoff为0.1相当于xoff为50e-9。

-subsample period 通过沿x、y和z轴以指定周期对输入进行子采样,以便减少输出中的点密度。例如,如果周期period为2,则输出的点数将为输入点数的八分之一。此控制选项仅适用于具有矩形网格结构的输入文件。默认值为1,即无子采样。

infile 要处理的输入文件的名称。文件格式必须是可识别的格式之一:OVF 0.0、OVF 1.0、OVF 2.0或VIO。如果没有指定输入文件,则从stdin读取输入。

outfile 输出文件的名称。如果没有指定输出文件,则输出到stdout。

还有两个可识别但不推荐的选项,-format和-ovf。前者被-dataformat替代,后者被-fileformat替代。

当需要对大型磁体系的一小块区域进行分析时,-clip选项是非常有用的。-info选项有助于找到原始网格的范围。-clip选项也可以与-resample一起使用,以放大网格。

-flip选项可用于将不同的磁体系对齐到同一方向。它还可以用于将文件镜像变换,例如,“-flip -x:y:z”会使网格关于yz平面镜像对称。

如果指定了多个操作选项,则操作顺序为剪裁、重采样、子采样、翻转和平移。

-dataformat text和-grid ireg选项对于导入到非OOMMF程序的文件非常方便,因为所有非数据行都由一个“#”作为开头,每个数据行是一个6元组,由位置点和矢量值组成。“# valueunit”和“# valuemultiplier”标题行指定矢量值的单位和缩放(仅限OVF 1版本)。

有关输出格式的详细信息,请参考第19.2节OVF文件描述。

已知的Bugs

如果输入文件有显式的多边形边界(参考第19.2节OVF文件描述中Segment Header block小节中的boundary条目),于是输出文件也将包含一个显式的多边形边界。如果使用了剪裁选项,则输出的多边形边界是通过移动输入多边形边界的顶点来形成的,以便将多边形边界移动到剪裁区域中。但OOMMF的这种处理方法是不正确的,尤其是处理不平行于坐标轴的边界。

16.4从矢量场生成位图:avf2ppm。

avf2ppm程序将一系列矢量场文件(例如.omf、.ovf)转换为适合包含在文档中或整理成电影的彩色位图。命令行参数控制着文件的名称和格式,而纯文本的配置文件则以mmDisp配置对话框中的控制选项为参考模型,指定显示参数。

启动

avf2ppm的启动命令是:

tclsh oommf.tcl avf2ppm [standard options] [-config file] [-f] \

[-filter program] [-format <P3|P6|B24|PNG>] [-ipat pattern] \

[-opatexp regexp] [-opatsub sub] [-v level] [infile ...]

-config file 用户的配置文件,用于指定图像显示参数。后面将详细讨论该文件。

-f 强制重写已存在的(输出)文件。默认情况下,如果avf2ppm试图创建一个文件,比如foo.ppm(已存在),它会用foo.ppm-000,或foo.ppm-001, . . . ,或foo.ppm-999的形式来生成新名称,并向它写入图像数据。-f选项不会生成间隔的文件名称,而是对foo.ppm进行重写覆盖。

-filter program 对每个avf2ppm输出文件运行的后处理程序。后处理程序可以是一些程序的管道。

-format <P3|P6|B24|PNG> 指定输出图像的格式。目前支持的格式有Portable Pixmap (PPM)格式P3(ASCII文本)和P6(二进制)、未压缩的Windows BMP(每像素24比特位)格式以及压缩的Portable Network Graphics (PNG)格式。转换为PNG格式需要Tk 8.6+(更老版本的Tk需要使用Img包)。默认格式为P6。

-ipat pattern 使用 “glob-style”样式通配符的模式来指定输入文件,这在DOS中特别有用。

-opatexp regexp 指定作用于输入文件名称的“正则表达式”,以查找在生成输出文件名称时要替换的部分。默认的正则表达式是:(\.[^.]?[^.]?[^.]?$|$)。

-opatsub sub 在生成输出文件名称的过程中,用sub来替换输入文件名称中与-opatexp regexp匹配的部分字符串。对于输出图像的格式为P3和P6类型,默认值为.ppm;对于B24,默认值为.bmp;对于PNG,默认值为.png。

-v level提示信息的详细级别,0表示只生成错误消息,其他大于0的数字会生成额外提示信息。level是一个整数,默认为1。

infile . . . 要处理的输入文件列表。

这里解释一下怎么指定输入文件。输入文件可以通过显式列表(infle…)来指定,也可以使用通配符模式来指定,例如,-ipat *.omf,它由avf2ppm(使用Tcl的 glob命令)以普通的方式展开。Unix shell(sh、csh等)在将控制权移交给被调用的程序之前会自动展开通配符,故通常不需要-ipat选项,即便-ipat选项在出现“命令行过长”的错误时很有用。DOS不会进行这种展开,所以在Windows中必须使用-ipat选项展开通配符。最后的文件列表会根据上面介绍的-filesort选项进行排序。

在处理每个输入文件时,会将选项-opatexp和-opatsub的表达式语句传递给Tcl的regsub命令,通过该命令所确定的规则,从输入文件名称中生成相应输出文件的名称。有关详细信息,参阅Tcl regsub文档,在通常情况下,输入文件名称中与-opatexp的表达式语句匹配的任意部分字符串都将被删除并替换为-opatsub的字符串。-opatexp默认的表达式语句会与任意的文件扩展名(扩展名最多3个字符)匹配,而-opatsub默认将扩展名替换为.ppm或.bmp。

如果用户有可以在命令行上打开的图像处理程序,例如ppmtogif(NetPBM包的一部分),那么用户可以使用-filter选项将avf2ppm的输出连接到该处理程序,然后再将处理后的图像写入到-opat*表达式指定的输出文件中。若处理后的图像的格式变了的话(例如,ppmtogif会将PPM转换为GIF),则需要根据情况改变-opatsub选项的默认值。

下面是一个处理所有扩展名为.omf的文件的示例,在把扩展名保存为.gif之前,先通过ppmtogif程序处理图像,然后再将处理后的图像发送到输出:

tclsh oommf.tcl avf2ppm -ipat *.omf -opatsub .gif -filter ppmtogif

(在Unix上,要么不使用-ipat选项,要么使用引号保护输入文件名称不被shell展开,如-ipat’*.omf’)。还可以将多个处理程序连接在一起,例如,-filter "ppmquant 256 | ppmtogif"。

配置文件

详细的转换过程由纯文本的配置文件指定,格式与mmDisp配置文件相同。

每个可配置的参数都是plot_config数组中的一个元素。此数组的默认值是先从主配置文件oommf/app/mmdisp/scripts/avf2ppm.config中读取,然后从本地自定义文件(如果存在的话)oommf/app/mmdisp/scripts/local/avf2ppm.config中读取,最后从在命令行上-config选项指定的文件中读取。这些参数都是和mmDisp文档中的参数说明一样的,不过avf2ppm会忽略misc,defaultwindowwidth 和misc,defaultwindowheight参数,而且新增了以下参数:

arrow,antialias 如果为1,则箭头边缘的每个像素不是用箭头的颜色绘制的,而是用箭头颜色和背景色的混合颜色绘制的,这会使箭头边缘看起来没有那么多的锯齿(抗锯齿效果),但也会因此增加计算时间。此外,抗锯齿像素中使用的颜色不是从箭头或像素颜色映射离散化中得到的,因此输出位图中的颜色可能会更加丰富。

arrow,outlinewidth 每个箭头周围的彩色轮廓的宽度,这可以提高箭头在与其颜色相似的背景上叠加时的可见性。默认值为0,表示没有轮廓。值为1会自动生成推荐宽度的轮廓,其他正值则表示相对于推荐的宽度进行缩放。

arrow,outlinecolor 如果arrow,outlinewidth选项设置为正数,则该选项表示箭头轮廓的颜色。

misc,boundarypos 多边形边界的放置方式,可以是back(背景),也可以是front(前景),即在箭头和像素对象的后面或前面。

misc,matwidth 指定图像外边缘周围的衬边(框架)宽度(以像素为单位)。衬边绘制在所有其他对象的前面(即在最前景)。将matwidth设为0,可禁用该选项。

misc,matcolor 衬边的颜色。

misc,width, misc,height 输出位图的最大宽度和高度,以像素为单位。如果使用了misc,crop选项,则可能会在一个或两个方向上进行剪裁。

misc,crop 如果禁用(crop为0),则在写入图像后的位图中(尺寸由misc,width和misc,height指定),使用背景色来填充位图中的剩余空间。如果启用(crop为1),则位图将被裁剪为仅包含图像(包含使用misc,margin指定的页边距)。注意:某些电影格式要求位图尺寸为8或16的倍数。为此,应禁用misc,crop选项,并直接使用misc,width和misc,height为输出位图指定合适的尺寸。

用户的配置文件可以参考图16.1所示的默认配置文件。用户可以使用mmDisp中的菜单命令File|Write config生成配置文件,但必须使用纯文本编辑器手动添加上述的新增参数。用户可以忽略任何不想更改的默认设置条目。用户可以在命令行上指定多个配置文件来“分层”设置参数,从左到右依次读取命令行上的多个配置文件,avf2ppm的每个配置选项会采用该选项被设置的最终值。

16.5从矢量场生成PostScript:avf2ps。

avf2ps程序从一系列矢量场文件(例如.omf、.ovf)中创建一系列彩色封装的PostScript文件,这些文件可以嵌入到更大的PostScript文档中,或直接在PostScript打印机上打印。avf2ps的命令和avf2ppm的命令、mmDisp中的打印对话框都是类似的。

启动

avf2ps的启动命令是:

tclsh oommf.tcl avf2ps [standard options] [-config file] [-f] \

[-filter program] [-ipat pattern] [-opatexp regexp] [-opatsub sub] \

[-v level] [infile ...]

-config file 用户的配置文件,用于指定图像显示参数。下面将详细讨论该文件。

-f 强制重写已存在的(输出)文件。默认情况下,如果avf2ps试图创建一个文件,比如foo.ps(已存在),它会用foo.ps-000,或foo.ps-001, . . . ,或foo.ps-999的形式来生成新名称,并向它写入图像数据。-f选项不会生成间隔的文件名称,只是对foo.ps进行重写。

-filter program 对每个avf2ps输出文件运行的后处理程序。后处理程序可以是一些程序的管道。

-ipat pattern 使用 “glob-style”样式通配符的模式来指定输入文件,这在DOS中特别有用。

-opatexp regexp 指定作用于输入文件名称的“正则表达式”,以查找在生成输出文件名称时要替换的部分。默认的正则表达式是:(\.[^.]?[^.]?[^.]?$|$)。

-opatsub sub 在生成输出文件名称的过程中,用sub来替换输入文件名称中与-opatexp regexp匹配的部分字符串。默认值为.eps。

-v level 提示信息的详细级别,0表示只生成错误消息,其他大于0的数字会生成额外提示信息。level是一个整数,默认为1。

infile . . . 要处理的输入文件列表。

选项-ipat、-opatexp和-opatsub与avf2ppm程序相同。

如果用户有可以在命令行上打开的PostScript处理程序,例如ghostscript,那么用户可以使用-filter选项将avf2ps的输出连接到该处理程序,然后再将处理后的PostScript写入到-opat*表达式指定的输出文件中。若处理后的PostScript的格式变了的话(例如,从PostScript转换为PDF),则需要根据情况改变-opatsub选项的默认值。

下面是一个处理所有扩展名为.ovf的文件的示例,在把扩展名保存为.pdf之前,先通过ps2pdf程序处理PostScript,然后再将处理后的PostScript发送到输出:

tclsh oommf.tcl avf2ps -ipat *.ovf -opatsub .pdf -filter "ps2pdf - -"

(在Unix上,要么不使用-ipat选项,要么使用引号保护输入文件名称不被shell展开,如-ipat ’*.ovf’)。

配置文件

详细的转换过程由纯文本的配置文件指定,格式与mmDisp配置文件相同。

由数组plot_config和print_config持有可配置参数。这两个数组的默认值是先从主配置文件oommf/app/mmdisp/scripts/avf2ps.config中读取,然后从本地自定义文件(如果存在的话)oommf/app/mmdisp/scripts/local/avf2ps.config中读取,最后从在命令行上-config选项指定的文件中读取。这些参数都是和mmDisp文档中的参数说明一样的,不过avf2ps会忽略misc,defaultwindowwidth 和misc,defaultwindowheight参数,而且新增了以下参数:

arrow,outlinewidth 每个箭头周围的彩色轮廓的宽度,这可以提高箭头在与其颜色相似的背景上叠加时的可见性。默认值为0,表示没有轮廓。值为1会自动生成推荐宽度的轮廓,其他正值则表示相对于推荐的宽度进行缩放。

arrow,outlinecolor 如果arrow,outlinewidth选项设置为正数,则该选项表示箭头轮廓的颜色。

misc,boundarypos 多边形边界的放置,可以是back(背景),也可以是front(前景),即在箭头和像素对象的后面或前面。

misc,matwidth 指定图像外边缘周围的衬边(框架)宽度(以像素为单位)。衬边绘制在所有其他对象的前面(即在最前景)。将matwidth设为0,可禁用该选项。

misc,matcolor 衬边的颜色。

misc,width, misc,height 输出位图的最大宽度和高度,以像素为单位。如果使用了misc,crop选项,则可能会在一个或两个方向上剪裁。

misc,crop 如果禁用(crop为0),则在写入图像后的位图中(尺寸由misc,width和misc,height指定),使用背景色来填充位图中的剩余空间。如果启用(crop为1),则位图将被裁剪为仅包含图像(包含使用misc,margin指定的页边距)。注意:某些电影格式要求位图尺寸为8或16的倍数。为此,应禁用misc,crop选项,并直接使用misc,width和misc,height为输出位图指定合适的尺寸。

用户的配置文件可以参考图16.2所示的默认配置文件。用户可以使用mmDisp中的菜单命令File|Write config生成配置文件,但必须使用纯文本编辑器手动添加上述的新增参数。用户可以忽略任何不想更改的默认设置条目。用户可以在命令行上指定多个配置文件来“分层”设置参数,从左到右依次读取命令行上的多个配置文件,avf2ps的每个配置选项会采用该选项被设置的最终值。

16.6矢量场文件差异:avfdiff。

avfdiff程序用于计算矢量场文件之间的差异,矢量场文件格式是任何可识别的格式(OVF、VIO)。输入数据必须位于具有相同尺寸的矩形网格上。

启动

avfdiff的启动命令是:

tclsh oommf.tcl avfdiff [standard options] [-cross] [-filesort method] \

[-info] [-numfmt fmt] [-odt label units valexpr] \

[-resample fileselect interp_order] file-0 file-1 [... file-n]

-cross 计算每个目标文件file-k与file-0的逐点矢量叉积,而不是减法运算。

-filesort method 指定目标文件列表中file-1到file-n的排序方法。当使用-odt选项时,该顺序很重要,因为它控制输出中行的顺序。method应该是Tcl命令lsort可识别的选项参数,例如“-ascii-discreating”。注意,lsort的排序选项参数都以连字符“-”开头,如果要使用多个选项,则必须将多个选项作为一整个元素传给filesort(例如,在列表中添加引号)。如果未指定该选项,文件顺序则与在命令行上显示的顺序相同(或者由通配符展开生成顺序)。

-info 打印文件差异的统计信息。如果指定了此选项,则不会创建输出文件。

-numfmt fmt 若指定了-info或-odt选项,参数fmt会使用C语言风格的输出格式来输出数字数据。默认值为“%- #20.15g”。

-odt label units valexpr 计算文件的差异,但该选项不会把差异文件写入磁盘,而是以OOMMF数据表(odt格式)的方式输出到stdout。ODT输出由八列组成,第一列是标识目标文件(file-1到file-n)的索引列,label参数是一个字符串,用于指定此列的标签,units参数也是一个字符串,用于指定列的单位,第三个参数valexpr是一个任意有效的Tcl的expr表达式语句,语句中可以包括特殊变量$i、$f1、$f2…$d1,$d2….。其中$i是当前目标文件在目标文件列表中的索引(从0开始,file-1是索引0,file-2是索引1,等等),$f1是当前目标文件的名称中出现的第一个数值,$f2是当前目标文件的名称中出现的第二个数值,$d1是当前目标文件里面“Desc”字段中出现的第一个数值,等等。此控制选项类似于avf2odt的-index选项。接下来的三列是分别计算矢量的三个分量的差值(逐单元格),并把三分量的差值(对所有单元格的矢量分量的差值)分别进行求和。最后四列是差值的平均L1范数、标准化L2范数、分量的最小绝对值和分量的最大绝对值,这些列对应avf2odt使用-extravals选项生成的列。

-resample <0|n> <0|1|3> 重新采样基础文件(file-0)以匹配目标文件(file-1到file-n)的分辨率(网格尺寸),或重新采样每个目标文件以匹配基础文件的分辨率(网格尺寸)。对于前者,将第一个参数设置为0;对于后者,将第一个参数设置为n。第二个参数指定多项式插值顺序:0表示最近值,1表示三线性插值,3表示三次Catmull-Rom样条拟合。默认情况下不进行重采样。

file-0 其他文件和file-0代表的文件相减,file-0是文件的名称。该file-0代表的文件必须是矩形网格子格式中的OVF 1.0文件,或VIO文件。该选项是必选的。

file-1 要file-1减去file-0,file-1代表第一个被减的文件的名称。file-1代表的文件必须是矩形网格子格式中的OVF 1.0文件,或VIO文件,并且必须与file-0代表的文件具有相同的(网格)尺寸。该选项是必选的。

. . .file-n 其它需要与file-0相减的文件,文件要求与file-1相同,该选项是可选的。

如果既不指定-info也不指定-odt选项,则会为每个目标文件file-1到file-n生成一个单独的输出文件,格式为OVF 1.0。每个输出文件的名称都是基于相应输入文件的名称,后缀为-diff。如果已经存在同名文件,则会覆盖该同名文件。

有关输出文件格式的详细信息,参阅第19.2节OVF文件的描述。

16.7循环冗余校验:crc32。

crc32程序计算文件的32位循环冗余校验和(CRC-32)。

启动

crc32的启动命令是:

tclsh oommf.tcl crc32 [standard options] [-binary|-text] \

[-decimal|-hex] [-v level] [file ...]

-binary|-text 选择使用二进制(默认)或文本输入模式。

-decimal|-hex 使用十进制(默认)或十六进制格式输出CRC值。

-v level 提示消息的详细级别,0只生成错误消息和最小CRC输出,大于0的数字会生成额外的消息。level是一个整数,默认为1。

file . . . 要处理的文件列表。如果没有指定任何文件,则从stdin读取输入。

对输入文件列表中的每个文件,计算并输出CRC-32。默认情况下,CRC是基于原始字节流(二进制模式)计算的,但是,如果选择了文本输入模式,则在CRC-32计算之前执行文本模式的转换,例如回车+换行符→换行符。文本模式的转换通常对Unix系统没有影响。有关文本模式的更多信息,参阅Tcl文档的fconfigure,特别是“-translation auto”。

如果提示型消息的详细级别为1或更大,则还会得到CRC-32计算处理的字节流的长度。

16.8终止OOMMF进程:killoommf。

killoommf程序可以终止运行中的OOMMF进程。

启动

killoommf的启动命令是:

tclsh oommf.tcl killoommf [standard options] [-account name] \

[-hostport port] [-pid] [-q] [-show] [-shownames] [-test] \

[-timeout secs] oid [...]

-account name 指定帐户名称。默认值与mmLaunch使用的帐户名称相同:即当前用户登录名(Windows 9X上除外),在Windows 9X上使用的是虚拟帐户ID“oommf”。

-hostport port 主机服务器使用的监听端口。默认值由oommf/config/options.tcl中的Net_Host port设置的,或由环境变量OOMMF_HOSTPORT设置的(如果设置了该环境变量,则会覆盖前者)。监听端口默认设定为15136。

-pid 通过操作系统的pid而不是OOMMF的oid来选择子程序进程。

-q 安静的运行,不打印提示型消息。

-show 不会杀死任何进程,只会打印匹配的目标。

-shownames 不会杀死任何进程,只会打印匹配目标的昵称,其中昵称由MIF 2.1的Destination命令设置。

-test 不会杀死任何进程,只会测试目标是否有反应。

-timeout secs 等待服务器响应的最长时间,以秒为单位。默认值为5秒。

oid . . . OID(OOMMF ID)、子程序名称、昵称或关键字“all”中的一个或多个构成的列表。也可以使用全局的通配符。此选项是必选的(此选项没有默认杀死的进程目标)。如果指定了-pid选项,则该选项被解释为进程在操作系统上的ID,而不是在OOMMF中的ID。

killoommf命令会影响监听OOMMF消息的进程。这些程序与mmLaunch的“Running Applications”栏中列出的程序相同。命令:

tclsh oommf.tcl killoommf all

基本上相当于mmLaunch的菜单选项“File | Exit All OOMMF”,但是killoommf不会关闭mmLaunch进程。

若killoommf无法杀死OOMMF子程序,则可以使用OOMMF的pidinfo程序可以确定进程在操作系统上使用的PID(进程标识),然后使用系统工具来终止进程(例如,Unix上的kill或Windows上的Windows任务管理器)。

16.9最后一次Oxsii/Boxsi运行:lastjob。

lastjob会读取Oxs的日志文件并查找运行的最后一次微磁模拟。lastjob根据日志文件中的信息,会构造一个用于重启最后一次微磁模拟的命令,并将该命令打印到stdout。如果该模拟在日志文件中不是为完成状态,并且用户需要重启该模拟的话,则可以使用-restart 1选项重新启动该模拟。如果该模拟的重启(检查点)文件存在,则该命令将在检查点状态下重新启动该模拟。如果找不到重启文件,则重启将会失败。(默认情况下,oxsii和boxsi每十五分钟会把检查点文件写入磁盘。如果微磁模拟被中止,例如系统崩溃,则可以使用检查点文件重新启动模拟。)

启动

lastjob的启动命令是:

tclsh oommf.tcl lastjob [-logfile logname] [-unfinished] [-v] <show|restart> \

<oxsii|boxsi> [hostname] [username]

-logfile logname 用于确定运行的最后一次微磁模拟所在的日志文件的名称。该选项是可选的。默认情况下,lastjob会在OOMMF根目录中查找oxsii.errors或者boxsi.errors文件,分别对应于oxsii或boxsi中的模拟。

-unfinished 只查找未完成的模拟。该选项是可选的。

-v 输出更详细的信息。该选项是可选的。

show|restart 选择是简单地显示命令还是尝试重新启动。该选项是必选的。

oxsii|boxsi 选择oxsii或boxsi中的模拟。该选项是必选的。

hostname 运行的最后一次微磁模拟所在的主机的名称。该选项是可选的,默认为当前机器的名称。如果日志文件位于使用的共享驱动器的多台主机上,则此选项非常有用。可以用正则表达式指定主机名称,例如“.*”表示可用于在所有主机上查找运行的最后一次微磁模拟。

username 运行的最后一次微磁模拟的用户名称。该选项是可选的,默认为当前用户的名称。如果多个用户共享同一个日志文件,则此选项非常有用。可以用正则表达式指定用户名称,例如“.*”表示可用于在所有用户中查找运行的最后一次微磁模拟。

注意:如果shell像在Unix系统上一样展开通配符,那么可能需要转义或引用正则表达式,以防止它们被shell展开。

16.10启动OOMMF主机服务:launchhost。

在正常情况下,OOMMF主机服务器(也称为主机服务目录)会根据客户端程序的需要在后台自动启动。但是,主要在批处理计算环境中,为了控制主机服务器端口地址,可能需要显式的启动主机服务器。

启动

Launchhost的启动命令是:

tclsh oommf.tcl launchhost [standard options] port

port 主机服务器监听的请求端口号。对于普通用户来说,该端口号通常必须大于1024,或者为特殊值0,端口号为0表示主机服务器会打开一个随机的、未使用的端口。设置端口号成功后,launchhost会向stdout写入实际使用的主机端口号。

如第4章OOMMF架构的文档所述,在OOMMF各种子程序的相互通信中,主机服务器(也即主机服务目录)起着至关重要的作用。若要正常工作的话,OOMMF的所有子程序都必须知道主机服务器的端口号。通常,此端口号由文件oommf/config/options.tcl中的Net_Host port确定,但该参数也会被环境变量OOMMF_HOSTPORT覆盖。

但是,在批处理模式下,可能会在一台机器上运行多个并发且独立的OOMMF。有一种实现方法是在每个OOMMF会话中将环境变量OOMMF_HOSTPORT设置为不同的值,其中的一个困难是确保每个OOMMF会话真正获得不同的值,使用把端口设置为零的launchhost可以直接解决这个问题。例如,参见下面的Bourne shell脚本:

#!/bin/sh

OOMMF_HOSTPORT=`tclsh oommf.tcl launchhost 0`

export OOMMF_HOSTPORT

tclsh oommf.tcl mmArchive

tclsh oommf.tcl boxsi sample.mif

tclsh oommf.tcl killoommf all

第二行(OOMMF_HOSTPORT=...)表示在随机端口上启动主机服务器;所用的端口会被launchhost打印到stdout,并设置环境变量OOMMF_HOSTPORT。(特别注意launchhost命令周围的反引号,表示执行命令。)下面的命令表示在后台启动mmArchive程序的一个实例,并根据微磁问题文件sample.mif来运行boxsi。(默认情况下,boxsi是在前台运行的。)当boxsi退出时,killoommf命令用于终止此OOMMF会话中的所有子程序。(或者,可以使用boxsi的-kill命令选项来达到和killoommf相同的效果。)对于在csh(C shell)和衍生的其他壳程序中,可以使用:

setenv OOMMF_HOSTPORT `tclsh oommf.tcl launchhost 0`

代替上面示例中的前两行OOMMF_HOSTPORT命令。

16.11从磁化计算H场:mag2hfield。

mag2hfield程序接受一个MIF 1.1微磁问题文件(.mif)和磁化文件(.omf),并使用mmSolve2D计算引擎,来计算能量或H场的分量(自静磁、交换、晶体各向异性、塞曼)和总能量或总H场。此程序的主要用途是使用早期的mmSolve2D生成的磁化文件来研究模拟中的场。

启动

mag2hfield的启动命令是:

tclsh oommf.tcl mag2hfield [standard options]

[-component [all,][anisotropy,][demag,][exchange,][total,][zeeman] \

[-data [energy,][field]] [-energyfmt fmt] [-fieldstep #] \

mif_file omf_file [omf_file2 ...]

-component [all,][anisotropy,][demag,][exchange,][total,][zeeman] 选择所需能量或场的分量。该选项是可选的,默认值为total,表示由晶体各向异性项、退磁(自静磁)项、交换项和塞曼(外加磁场)项构成的总能量或场。

-data [energy,][field] 计算能量或H场,或两者都计算。能量值被打印到stdout中,H场被写入到如下所述的文件中。该选项是可选的,默认值为energy,field。

-energyfmt fmt 使用C语言风格的printf格式化字符串输出能量数据。该选项是可选的,默认格式化字符串为"%s"。

-fieldstep # 外加磁场的步进索引,遵循MIF文件中输出计划指定的外加磁场的步进(0表示初始磁场)。该选项是可选的,默认值为0。

mif_file 微磁问题文件(.mif)。该选项是必选的。

omf_file 磁化状态文件。该文件的格式是输入MIF文件的avfFile所接受的任何格式。该选项是必选的。

omf_file2 . . . 可选的附加磁化状态文件。

H场输出文件的格式是由输入MIF 1.1文件的Total Field Output Format决定的。输出文件的名称是根据basename-hanisotropy.ohf, basename-hzeeman.ohf,等等形式来构造的,其中basename是输入的.omf磁化文件的名称(去除了.omf或.ovf扩展名。)。

16.12 MIF格式转换:mifconvert。

mifconvert程序可将任意MIF格式转换为Oxs 3D求解器使用的MIF 2.1格式,它还可以在微磁问题编辑器生成的MIF 1.1和MIF 1.2格式之间进行转换。

作为迁移辅助工具,mifconvert可以把大多数文件从OOMMF 1.2a2使用的过时的MIF 2.0格式转换为较新的MIF 2.1格式。

启动

mifconvert的启动命令是:

tclsh oommf.tcl mifconvert [-f|--force] [--format fmt]

[-h|--help] [--nostagecheck] [-q|--quiet] [--unsafe]

[-v|--version] input_file output_file

-f或–force 强制覆盖输出文件。该选项是可选的。

–format fmt 指定输出格式,其中fmt是1.1、1.2或2.1中的一种。只有当输入文件也是1.x格式时,才可选用1.1和1.2格式。不支持从2.1格式转换为1.x格式。该选项是可选的,默认值为2.1。

-h或–help 打印帮助信息并停止转换。

–nostagecheck 将输出文件中的Oxs_Driver的stage_count_check参数(位于Oxs_Driver的Specify指定块中)设置为0,表示禁用Oxs求解器内阶段计数一致性检查。该选项是可选的。仅当输出的MIF格式为2.1时,此选项才处于可选用状态。

-q或–quiet 忽略正常的消息和警告消息。该选项是可选的。

–unsafe 在使用不安全模式的解释器中运行嵌入的Tcl脚本(如果有的话)。该选项是可选的。

-v或–version 打印版本字符串并停止转换。

input_file 输入MIF 1.1、MIF 1.2或MIF 2.0格式的微磁问题文件的名称。使用“-”则表示从stdin中读取。该选项是必选的。

output_file 导出的微磁问题文件的名称。使用“-”则表示写入到stdout中。该选项是必选的。

16.13进程昵称:nickname。

nickname可以为正在运行的OOMMF子程序实例关联一个昵称,子程序的昵称会在MIF 2.x 的Destination命令中用到。

启动

nickname的启动命令是:

tclsh oommf.tcl nickname [standard options] [-account name] \

[-hostport port] [-pid] [-timeout secs] oid nickname [nickname2 ...]

-account name 指定帐户名称。默认值与mmLaunch使用的帐户名称相同:即当前用户登录名(Windows 9X上除外),在Windows 9X上使用的是虚拟帐户ID“oommf”。

-hostport port 主机服务器使用的监听端口。默认值由oommf/config/options.tcl中的Net_Host port设置的,或由环境变量OOMMF_HOSTPORT设置的(如果设置了该环境变量,则会覆盖前者)。监听端口默认设定为15136。

-pid 根据操作系统的pid而不是OOMMF的oid选择子程序进程来设置昵称。

-timeout secs 等待服务器响应的最长时间,以秒为单位。默认值为5秒。

oid 需要设置昵称的正在运行的子程序的ID(在OOMMF中的ID),如果指定了-pid选项,则该选项被解释为该进程在操作系统上的ID,而不是在OOMMF中的ID。

nickname 要与指定的子程序实例关联的一个或多个昵称,每个昵称必须至少包含一个非数字字符。

此程序可以为正在运行的OOMMF子程序实例关联一个昵称,接着,MIF 2 的Destination命令可以在问题加载时使用子程序实例的昵称,将Oxs输出连接到给定的OOMMF子程序实例。GUI程序的昵称可以在“About”对话框中查看,也可以通过pidinfo程序的-names选项查看任何程序的昵称。

注意,使用标准的-nickname命令行选项或MIF的Destination命令使用application:nickname的方式来启动OOMMF子程序时,这些子程序也可以与昵称关联。

16.14 ODT衍生数据计算器:odtcalc。

odtcalc程序在stdin上读取包含一个或多个表格的ODT文件,并向stdout打印一个ODT文件,该ODT文件由相同的表格组成,并新增了由命令行参数控制的附加列。此程序可以计算和记录根据现有数据表的列中计算的新列。

启动

odtcalc的启动命令是:

tclsh oommf.tcl odtcalc [standard options] [var expr unit ...] \

<infile >outfile

var expr unit . . . 每个三元组命令行参数表示在输出数据表中生成新列所需的计算方法。在Columns行中新增每个var:位于数据表的标题条目中,新数据列的标签。在Units条目中新增每个unit值:位于数据表的标题条目中,新数据列的单位。每个expr值都是一个Tcl表达式语句,用于计算每个要存储在新数据列中的数据值。详见下文。

<infile odtcalc 程序会从stdin中读取其输入。使用重定向运算符“<”则表示从文件中读取输入。

>outfile odtcalc 程序将其输出写入到stdout中。使用重定向运算符“>” 则表示将输出发送到文件中。

将上述的expr命令行参数传递给Tcl的expr命令,可以为每个新列的每一行计算其数据值。在expr中可以使用标准的运算符和函数,可以使用列标签作为变量名来访问同一行中其他列的值,例如,Iteration列的值在expr中可以使用变量$Iteration代替。当列标签包含冒号时,在expr中可以仅使用列标签最后一个冒号后的部分作为变量名,例如,Oxs_UZeeman::Bx列的值在expr中可以使用变量$Bx代替。当使用多个三元组来新增多个数据列时,可以用已生成的新列的值来计算还未生成的新列的值。命令行参数的顺序控制着数据表右侧的新增列的顺序。

例子

假设ring.odt文件里面包含有来自Oxsii模拟的磁滞回线数据,其中外加磁场在xy平面上,与x轴的夹角为30°。数据文件包含磁场和平均磁化强度的分量值Bx、By、mx和my。假设需要投影到外加磁场方向上的磁场和磁化数据,则可以使用odtcalc来计算这些值,如下所示:

tclsh oommf.tcl odtcalc B '$Bx*0.86602540378443865+$By*0.5' mT \

m '$mx*0.86602540378443865+$my*0.5' '' \

< ring.odt > ring-augmented.odt

这里的cos(30°) = 0.8660254037844365 和 sin(30°) = 0.5。文件ring-augmented.odt包含ring.odt文件中的所有数据,并新增了两个附加列:一个列的标签为B,单位为mT,一个列的标签为m,单位为空。(注意:在Windows上,需要把上述命令中的单引号替换为双引号,此外,Windows命令行使用插入符号“^”作为续行符,而不是反斜杠“\”作为续行符)

若只需提取B和m列,并准备导入到支持CSV(逗号分隔值)格式的电子表格程序,则需要通过odtcols程序处理一下:

tclsh oommf.tcl odtcols -t csv B m < ring-augmented.odt > ring-export.dat

16.15 ODT表连接:odtcat。

odtcat程序在stdin上读取包含一个或多个表格的ODT文件,将它们连接到一个表格中,并创建一个由这一个表格构成的新的ODT文件。在依次连接表格过程中,会根据需要截断第一个表格的尾部,以便指定的控制列在整个表格中是单调的。(译者注:此处的控制列相当于数据库中的主键,主键就是单增或单减的)

该程序可用于修复从检查点数据一次或多次中断并重启的模拟的ODT输出。

启动

odtcat的启动命令是:

tclsh oommf.tcl odtcat [standard options] [-b overlap_lines] \

[-c control_column] [-o order] [-q] <infile >outfile

-b overlap_lines 重叠窗口的大小。表示在两个相邻表格之间查找重叠时要保留的最大行数。也表示连接两个表格时可以删除的行数上限。默认值为100。

-c control_column 通过数字或全局字符串指定控制列。默认值是全局字符串{Oxs_TimeDriver:*:Simulation time} Oxs_MinDriver:*:Iteration。

-o order 顺序选择:increase, decrease, auto(默认)或none。

-q 安静的运行,不会向stderr发送提示型消息。

<infile odtcat 程序会从stdin中读取其输入。使用重定向运算符“<”则表示从文件中读取输入。

>outfile odtcat 程序将其输出写入到stdout中。使用重定向运算符“>” 则表示将输出发送到文件中。

检查第一个表格的标题,并将其与用户指定的控制列进行比较,以确定表格中的控制列。如果表格中有多个列与用户指定的控制列匹配,则会报错并退出程序。在运行odtcat程序之前,可以利用odtcols程序的-s命令行选项查看列标题。

若输入流中的每个表格都与第一个表格具有相同的布局(即行列信息相同但数据值不同),则会删除其他表格的标题信息(即只连接数据)。每当连接一个表格时,会检查新表格的列数是否与第一个表格相同,若不同,则会报错并停止处理。

当遇到后续的表格时,会比较上一个表格末的控制列中的值和后续表格该列的值,使用order值用于确定后一张表格在前一张表格末的起始位置,如果数据与指定的顺序不兼容,则会报错并终止程序,如果发现相同的值,则将从输出流中删除先前表格中的相同行。

如果未使用-q选项,则在处理完成后,将向stderr写入一个报告,详细说明合并的表格数量和删除的数据行数。

16.16 ODT列数据获取:odtcols。

odtcols程序可以从ODT数据表文件中提取子列。

启动

odtcols的启动命令是:

tclsh oommf.tcl odtcols [standard options] [-f format] \

[-m missing] [-q] [-s] [-S] [-t output_type] \

[-table select] [-no-table deselect] [-w colwidth] \

[col ...] <infile >outfile

-f format 对每个输出项使用C语言的printf样式的格式化字符串。该选项是可选的。默认格式化字符串为"%$15s"。可同时使用多个-f选项作用于选择的多个输出列,在这种情况下,每种格式会作用于相应顺序的列。

-m missing 字符串,表示输出的默认值。默认值是开闭花括号对,即{}。

-q 会忽略一些无意义的错误消息,例如使用Unix的head或tail程序时出现的“broken pipe”消息。

-s 生成文件摘要但不提取子列。输出包括表格标题、列数和行数,以及每个指定列的标题。如果没有指定任何列,则会列出所有列的标题。

-S 与-s选项相同,但它会忽略指定的任何列,而直接列出所有列的标题。

-t output_type 指定输出格式。这里的output_type应该是odt、csv或bare之一。默认为odt,即ODT文件格式。选择csv将生成一个“Comma-Separated Values(逗号分隔值)”(CSV)文件,许多电子表格程序都可以读取该文件。选择bare将得到使用空格来分隔数字的输出,没有ODT的标题、尾部或注释行。后两个选项的输出格式不是ODT格式,一般用于将这些格式的数据传输到第三方程序,并且OOMMF不支持从CSV或bare格式转换回ODT格式。

-table select 选择要包含在输出中的表格。表格是按索引编号选择的,文件中的第一个表格的索引为0。select由一个或多个用逗号分隔的元素组成,其中每个元素要么是一个单独的索引号,要么是一个由冒号分隔的包含端点的索引区间。示例:0:3,7,9:12。默认选择所有表格。

-no-table deselect 选择要从输出中删除的表格。deselect格式与-table select选项相同。由于上面的选项已经默认输出所有表格,因此该项默认是空集。

-w colwidth 输出中每列的最小水平间距。该选项是可选的。默认值为15。若colwidth为负值,表示从左侧填充,正值则从右侧填充。(适用于格式化后的数据字符串,在-f format选项作用在列之后,保留剩余的空间。)可同时使用多个-w选项作用于选择的多个输出列,在这种情况下,每个colwidth会作用于相应顺序的列。

col . . . 选择输出的列。可以是表示列在输入表格中的位置的整数(第一列的编号为0),也可以是不区分大小写的全局样式的任意字符串(用于匹配列标题)。从左到右处理表格中的列,并按匹配顺序输出选中的列。如果没有指定任何列,则默认情况下会选择输出所有列。

<infile odtcols 程序会从stdin中读取其输入。使用重定向运算符“<”则表示从文件中读取输入。

>outfile odtcols 程序将其输出写入到stdout中。使用重定向运算符“>” 则表示将输出发送到文件中。

通常在第一次调用odtcols程序时使用-s选项,以便显示表格中列的标题,接着第二次调用odtcols程序时就可以选择所需的输出列。如果未指定选项或输出列,则会显示帮助消息。

16.17 Oxs包管理:oxspkg。

oxspkg用于管理Oxs可选的扩展包。每个包都存储在oommf/app/oxs/contrib/的单独目录中。这些包可以通过oxspkg在oommf/app/oxs/local/目录中进行“安装”和“卸载”。这里的“安装”只是简单的复制扩展包到该目录,oxspkg不会自动构建软件包或将其链接到Oxs可执行文件中(这些是由pimake完成的)。

启动

oxspkg的启动命令是:

tclsh oommf.tcl oxspkg list

或 tclsh oommf.tcl oxspkg listfiles pkg [pkg ...]

或 tclsh oommf.tcl oxspkg readme pkg [pkg ...]

或 tclsh oommf.tcl oxspkg requires pkg [pkg ...]

或 tclsh oommf.tcl oxspkg install [-v] [-nopatch] pkg [pkg ...]

或 tclsh oommf.tcl oxspkg uninstall pkg [pkg ...]

或 tclsh oommf.tcl oxspkg copyout pkg [pkg ...] destination

oxspkg可以接受glob-style样式通配符(*, ?)或者关键字all。(如果要求shell像在Unix系统上常见的那样扩展通配符,则可能需要转义或引用通配符,以便将它们完整地传递给oxspkg程序。)oxspkg后面的第一个参数是以下子命令中的一个:list, listfiles, install, uninstall, copyout:

list 罗列出oommf/app/oxs/contrib/中所有可用的扩展包,以及每个包中有多少(可安装)文件,以及包的安装状态。

listfiles pkg [pkg . . . ] 罗列出所选扩展包中的每个“可安装”文件。(扩展包中可能还有其他文件(在oommf/app/oxs/contrib/<pkg>/目录中),例如README文件或包含版本控制信息的文件,但是,这些文件会被oxspkg忽略。)

readme pkg [pkg ...] 将每个包的README文件(如果有)的内容打印到stdout。

requires pkg [pkg ...] 列出每个包所需的(在*.rules文件所声明)外部库。在安装Oxs扩展包之前,用户应确保这些库已安装在系统上,并包含在编译器和链接器的搜索路径中,使用以下命令来检查平台配置文件中的设置(第2.3.2节):

$config SetValue program_compiler_extra_include_dirs ...
$config SetValue program_linker_extra_lib_dirs ...

扩展包中的README文件可能有其他安装信息。

install [-v] [-nopatch] pkg [pkg . . . ] 将oommf/app/oxs/contrib/中所选扩展包的可安装文件安装(复制)到oommf/app/oxs/local/。此命令不会编译文件或将其链接到Oxs可执行文件。用户可以单独调用pimake来构建和链接软件包。如果用户运行的是预构建的OOMMF,那么用户应该首先切换到OOMMF根目录,并运行 tclsh oommf.tcl pimake distclean 删除分发的二进制文件,然后运行 tclsh oommf.tcl pimake 重新构建OOMMF,以此确保了新的二进制文件与OOMMF的其余部分兼容。

对于第三方软件包,会把其官方发布的软件包的一部分内容复制到oommf/app/oxs/contrib//目录中,如果这些文件没有根据当前OOMMF的版本来完整的编译,那么oommf/app/oxs/contrib/父目录中将包含一个补丁文件。通常情况下,在安装扩展包过程的,会自动使用该补丁文件(如果有的话),使用-nopatch选项则会忽略补丁文件。如果扩展包没有补丁文件,则在安装过程中会显示No patches found(未找到补丁)消息。

使用-v选项会输出更详细的信息。

uninstall pkg [pkg . . . ] 删除oommf/app/oxs/local/中与所选扩展包关联的所有文件。这里的“关联”是指与oommf/app/oxs/contrib/<pkg>/中具有相同名称的文件,而且不会检查文件的内容或时间戳。

copyout pkg [pkg . . . ] destination  选择文件的方式与uninstall相同,但不会删除文件,而是将文件复制到destination目标目录。该选项是为了帮助开发人员为软件包创建补丁。

oxspkg控制的大多数可选的扩展包都来自第三方开发者。但也有些来自OOMMF核心开发团队,但由于它们也需要第三方库,或者被认为是正在实验的功能,因此无法将它们包含在标准OOMMF包中,所以它们是可选的。有关详细信息,请查阅oommf/app/oxs/contrib/<pkg>/目录中的各种README文件。

16.18 Oxs回归测试:oxsregression。

oxsregression会对Oxs求解器运行一套测试。对于每个测试,都会运行一个boxsi程序实例,并将测试结果与存储在oommf/app/oxs/regression_tests/目录中的参考结果进行比较。

启动

oxsregression的启动命令是:

tclsh oommf.tcl runtests [-autoadd] [-alttestdir] [-cleanup] [-ignoreextra]

[-keepfail] [-listtests] [-loglevel level] [-noexcludes] [-parallel n]

[-resultsfile stemname] [-showoutput] [-sigfigs digits] [-threads count]

[-timeout seconds] [-updaterefdata] [-v] [testa testb ...]

-autoadd 会自动为在例程目录oommf/app/oxs/examples/中找到的MIF文件添加新测试。

-alttestdir 指定一个可选的测试目录来代替默认的目录列表(oommf/app/oxs/examples/、oommf/app/oxs/regression_tests/bug_tests/和oommf/app/oxs/regression_tests/local_tests/)。

-cleanup 如果oxsregression在运行中被终止或崩溃,那么一些临时的测试结果文件可能会留在磁盘上,此选项会搜索并删除这些无用文件。

-ignoreextra 忽略测试结果中的额外列(与参考结果相比,如果有的话)。该选项在MIF文件的更改引入了额外的数据表输出时很有用。

-keepfail 保存失败的测试结果。通常情况下,会自动删除测试结果。

-listtests 罗列出所有选定的测试,并在不运行任何测试的情况下退出。

-loglevel level 控制写入回归测试目录oommf/app/oxs/regression tests/中的oxsregression.log文件的日志信息量。level默认为0。

-noexcludes 一些测试会遇到各种数值问题,使用此选项,则这些数值问题都包含在测试范围内。

-parallel n 同时运行n个测试,默认n=1。此选项仅在Tcl 8.6或更高版本中可用。

-resultsfile stemname 测试结果会写入临时文件中,默认情况下,这些文件都具有oxsregression-test-output。如果在共享文件系统的不同机器上同时运行oxsregression,那么一个进程在重写文件时可能会干扰另一个进程处理该文件。-resultsfile选项可用于在同时运行时隔离结果。

-showoutput 如果未指定此选项,则oxsregression将忽略来自boxsi的stdout和stderr的输出。

-sigfigs digits 测试结果与参考结果进行比较的有效(十进制)位数,digits默认为8。

-threads count boxsi子程序使用的线程数。此选项仅适用于支持多线程的机器上。默认值是boxsi的默认线程数。

-timeout seconds 等待一个测试完成的最多秒数,在此时间范围内未能完成的任何单个测试将立即终止。默认时间为150秒,0表示没有时间限制。

-updaterefdata 仅供开发人员使用,此选项会导致引用结果被新的测试结果替换(重写)。

-v 启用详细输出。

testa testb . . . 要运行的测试,接受glob-style的通配符(*, ?)。如果未指定任何测试,则选择所有(非排除的)测试。在一类测试中指定的子测试必须使用引号引起来,以表示为单个参数,例如,"exch6ngbr 1,7,9"。如果未指定子测试,则运行这类测试的所有子测试。

注意-parallel n和-threads count选项之间的关系。前者是并行运行的测试数量,后者是每个测试中正在运行的计算线程数量。因此,同时正在运行的线程总数可以达到 n×count。

16.19 OOMMF和进程ID信息:pidinfo。

pidinfo会打印一个表格,分列显示OOMMF各个子程序进程的OID(即子程序在OOMMF里分配的ID)和它在操作系统中的PID。

启动

pidinfo的启动命令是:

tclsh oommf.tcl pidinfo [standard options] [-account name] \

[-hostport port] [-names] [-noheader] [-pid] [-ports] \

[-timeout secs] [-wait secs] [-v] [oid ...]

-account name 指定帐户名称。默认值与mmLaunch使用的帐户名称相同:即当前用户登录名(Windows 9X上除外),在Windows 9X上使用的是虚拟帐户ID“oommf”。

-hostport port 主机服务器使用的监听端口。默认值由oommf/config/options.tcl中的Net_Host port设置的,或由环境变量OOMMF_HOSTPORT设置的(如果设置了该环境变量,则会覆盖前者)。监听端口默认设定为15136。

-names 显示程序的昵称,程序的昵称是通过MIF 2.1的Destination命令指定的。

-noheader 不打印表格的列标题。

-pid 通过操作系统的pid而不是OOMMF的oid来选择子程序进程。

-ports 显示每个子程序的可用服务端口。

-timeout secs 等待服务器响应的最长时间,以秒为单位。默认值为5秒。

-v 显示有关主机和帐户服务器的信息。

-wait secs 如果找不到匹配项,最多重试secs秒。默认值为0秒,即重试一次。

oid . . . 显示在OOMMF ID列表中的程序的信息。默认值为当前正在运行的所有程序。如果使用了-pid选项,则此选项表示的是子程序在操作系统中的ID而不是OOMMF中的ID。

正在运行的OOMMF子程序的标题栏通常会显示自己的OID,OOMMF子程序使用OID来识别彼此。从0开始分配OID,OID在每次新启动的子程序向帐户服务器注册时递增。OID独立于操作系统的PID。利用PID可以获取关于正在运行的进程的信息,例如资源的使用情况,利用PID可以使用操作系统的“kill”功能来终止失控的OOMMF子程序。pidinfo程序用于把OID或OOMMF子程序的名称与PID对应起来。

16.20跨平台相关:pimake。

pimake程序用于从发布的OOMMF源码构建一个终端用户可执行的OOMMF软件。pimake程序的操作与Unix的make程序类似,但pimake完全是用Tcl语言编写的,因此它可以在安装了Tcl环境的任何地方运行。与make一样,pimake控制着从其他文件构建一个目标文件(target)的过程。正如make的构建规则在文件Makefile或makefile一样,pimake的构建规则在文件makerules.tcl中。pimake通常进行递归操作,从当前工作目录开始,向下遍历所有子目录。(oommf/doc下的文档除外,在OOMMF根目录中启动的pimake在构建时会忽略oommf/doc子目录。构建OOMMF文档需要安装有LATEX 或 LATEX2HTML 或 LATEXML,因此OOMMF发行的预构建版本包括完整的OOMMF文档,以减轻终端用户安装这些工具的负担。另一方面,清理请求,特别是maintainer clean,将递归到oommf/doc目录中。)OOMMF标准命令行选项-cwd可以用于更改启动目录。

启动

pimake的启动命令是:

tclsh oommf.tcl pimake [standard options] \

[-d] [-i] [-k] [-out file] [-root] [target]

-d 打印相关依赖项的详细信息。

-i 通常pimake遇到一个错误就会终止操作。当指定-i选项时,会忽略错误并尝试继续处理目标的所有依赖项。

-k 通常pimake遇到一个错误就会终止操作。当指定了-k选项并且遇到错误时,会停止处理依赖于该错误的依赖项,并继续处理目标的其他依赖项。

-out file 将输出写入file代表的文件中,而不是写入到标准输出。

-root 更改到OOMMF根目录。命令行选项是从左到右处理的,因此如果与选项-cwd一起使用,则应先使用-root。

target 要构建的文件。也可能是(通常是)一个符号化的target。符号化的标准target见下文。默认情况下,构建makerules.tcl中的第一个target。

有多个target可以作为pimake的参数,以完成不同的任务。每个target的作用范围为当前目录和OOMMF所有的子目录。标准的target有:

upgrade 在OOMMF发行版解包后立即使用,它会删除以前版本中的不在该发行版内的所有文件。

all 创建configure可以创建的所有文件(见下文),编译并链接所有可执行文件和库,并构造所有索引文件。

configure 创建与平台类型同名的子目录,然后在目录中构建一个ocport.h文件,其中包含与平台相关的C++信息。

objclean 删除在编译和链接过程中创建的中间对象文件,保留正在使用的可执行文件,将OOMMF与预编译的可执行文件保持在其发行的初始状态。

clean 将删除objclean可以删除的文件,还将删除all创建的可执行文件和库,保留configure生成的文件。

distclean 将删除clean可以删除的文件,还将删除configure生成的所有文件和目录,只保留发行版源码中的文件。

maintainer-clean 删除由其他文件所生成的所有文件(如果从OOMMF根目录使用该选项,则所有此类文件包括OOMMF文档都将被删除),重新构建可能需要专门的开发工具,此target不建议普通用户使用,但对开发人员会有所帮助。

help 打印标准target的摘要。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖工人_0803号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值