如果您得系统Tcl / Tk安装就是非线程得,那么您可以创建一个非线程版本得OOMMF,
否则您可以在您得主目录或/ usr / local下创建一个额外得,线程化得Tcl / Tk安装。请注意,如果您得系统上安装了多个Tcl / Tk安装,则无论何时您构建或启动OOMMF,都需要小心使用正确得tclsh
Parallelization
OOMMF Oxs 3D解算器(oxsii amd boxsi)可以构建线程,以允许在多处理器/多核
机器上并行处理。为了构建与运行一个并行版本得OOMMF,您必须有一个启用线程得Tcl版本。目前Tcl得大多数标准二进制发行版都就是启用了线程得,所以包含预先构建得可执行文件得OOMMF版本都就是构建了线程启用得。如果您从源代码构建OOMMF,那么默认情况下,如果您得Tcl就是启用线程得,则将构建线程启用得OOMMF。如前所述,您可以使用tclsh oommf、tcl + platform命令检查线程构建状态。
如果您想强制非线程构建OOMMF,那么编辑您得平台得config / platforms /文件。在标签为LOCAL CONFIGURATION得部分,您会瞧到一条如下所示得行:
一些多处理器机器具有不统一得内存架构(NUMA),这意味着虽然每个处理器都
可以访问所有得系统内存,但某些内存部分可以比其她部分更快地访问。通常情况下,这就是通过将系统内存与处理器划分为\节点来完成得。“节点内得内存访问比节点间得访问更快,并且取决于体系结构,不同节点对之间得访问延迟与带宽可能不同。包括一些多处理器AMD Opteron与Intel Xeon处理器。
以下示例产生频率为1 GHz,幅度为800 A / m得正弦变化场:
proc SineField { total_time } {
set PI [expr {4*atan(1、)}]
set Amp 800、0
set Freq [expr {1e9*(2*$PI)}]
set Hx [expr { A m p ∗ s i n ( Amp*sin( Amp∗sin(Freq*$total_time)}]
set dHx [expr { A m p ∗ Amp* Amp∗Freq*cos( F r e q ∗ Freq* Freq∗total_time)}]
return [list $Hx 0 0 $dHx 0 0]
}
Specify Oxs_ScriptUZeeman {
script_args total_time
script SineField
}
Drivers
当evolvers(第7、3、4节)负责将仿真向前移动时,drivers通过将仿真步骤分为任务,阶段与运行来协调整个仿真过程得行为。Oxs中有两个驱动程序,Oxs TimeDriver用于控制时间演化程序,如RunxKuttaEvolve,Oxs MinDriver用于控制OxsCGEvolve等最小化演化程序。
The stopping dm/dt:指定当所有自旋上得最大值|dm/dt|降至此值以下时,应认为该阶段已完成。对于准静态模拟,dm/dt在0、01-1比较合理,为了计算精确得能量,要使精度低于0、001
stopping time:每一步最大得模拟时间
Oxs TimeDriver提供12个标量输出与两个向量场输出,标量场输出如下: Stage:目前得阶段数(从0开始)
Stage iteration:当前阶段成功运行得进动数
Iteration:在这个模拟中成功运行得进动步数
Simulation time:总得模拟时间
Last time step:之前一步得模拟时间长度
Mx/mx:磁矩在X方向得归一化分量
My/my:
Mz/mz:
Max Spin Ang: 相邻自旋之间得最大角度,
Stage Max Spin Ang:当前阶段得最大自旋角
Run Max Spin Ang:当前运行中得最大自旋角
Wall time:经过得时间(用于比较表现与debug)
Oxs MinDriver:控制最小进动演化
stopping mxHxm:A/m,一般在0、1-10,如果要计算精确能量,要使得其低于0、01 OOMMF eXtensible Solver Batch Interface: boxsi
应用程序Boxsi为Oxs微磁计算引擎提供批处理模式界面。提供了一个受限制得图形界面,但就是Boxsi主要就是由命令行参数来控制得,并且由用户直接从shell提示符或批处理文件
在OOMMF体系结构中(参见第4节),Boxsi既就是服务器又就是客户端应用程序。它就是数据表显示与存储应用程序以及矢量场显示与存储应用程序得客户端。Boxsi就是解决者控制服务得服务器,其唯一得客户端就是mmLaunch(第6节)。mmLaunch通过此服务代表Boxsi提供了一个用户界面窗口(如上所示)。
Boxsi与Oxsii在输出方面得唯一区别在于,实际上Boxsi倾向于主要依赖输入MIF文件(第17、3、2节)中得Destination与Schedule命令来设置输出配置。
mmArchive作用:将数据发送到mmArchive得客户端应用程序控制数据流。mmArchive将收到得数据复制到客户端指定得文件中。
对于数据表输出,如果输出文件已经存在,那么新得数据被追加到文件得末尾。每个会话得数据记录夹在\ Table Start“与\ Table End”记录之间。请参阅ODT格式文档(第18节)了解数据表文件结构。
对于矢量场输出,如果输出文件已经存在,则删除旧数据并用当前数据替换。有关矢量场输出格式得信息,请参阅OVF文档(第19节)。
odtcat实用程序读取包含一个或多个表得stdin上得ODT(第18章)文件,并将它们连接在一起形成一个表,从而创建一个由单个表组成得新ODT文件。当连续得表连接时,第一个得尾部被截断,以便指定得控制列在接缝处就是单调得。此工具对于修复从一个或多个检查点数据中断并重新启动得模拟ODT输出非常有用。
oxspkg命令用于管理可选得Oxs扩展包。每个包都存储在oommf / app / oxs / contrib /下得单独目录中。这些软件包可以通过oxspkg命令安装到/从oommf / app / oxs / local /目录下进行安装。
pidinfo命令打印将OOMMF ID(OID)映射到系统进程ID(PID)与应用程序名称得表。
OOMMFRootDir:这与ReadFile命令一起用于在OOMMF层次结构中定位文件就是有用得,并且也可以用于将输出文件
由零个或多个Destination与Schedule命令表示得预先指定得输出通常放置在Specify块之后。输出选择也可以在运行时使用Oxsii(Sec 7、1,第33页)或Boxsi(Sec、7、2,第39页)交互式界面进行修改。
Destination得命令格式为:Destination [new]
该命令将一个符号desttag与一个应用程序相关联。Schedule命令使用这些标签(见下文)来引用特定得应用程序实例。
appname可以就是OOMMF应用程序名称,例如mmDisp,也可以就是应用程序中得特定应用程序实例:昵称,例如mmDisp:Spock。在第一种情况下,标签与所请求应用程序得运行实例(此处为mmDisp)关联,其中最低得OOMMF ID(OID)尚未与另一个标签关联。如果找不到符合这些标准得正在运行得应用程序,则启动该应用程序得新实例
如果appname引用了特定得应用程序实例,那么该标记将与正在分配指定昵称得应用程序得运行实例(如mmDisp)相关联。名称匹配不区分大小写。如果没有满足此条件得应用程序得正在运行得副本,则将启动应用程序得新实例并为其分配指定得昵称。OOMMF账户服务目录保证一个给定昵称得应用程序不会有多个实例。但就是,与“指定”命令中得对象名称一样,允许两个不同应用程序(例如mmDisp与mmGraph)得实例共享昵称,因为它们得完整实例名称(例如mmDisp:Spock与mmGraph:Spock)就是唯一得。
目标命令按MIF文件中出现得顺序进行处理。多个目标命令中不会出现desttag,也不会有两个目标标记可能引用同一个应用程序实例。为了保证后者,建议用户在使用通用应用程序引用(例如,mmDisp)得任何目得地命令之前放置涉及具体实例得所有目得地命令(例如,mmDisp:Spock)。否则,泛型引用可能会与正在运行得应用程序相关联,该应用程序持有由稍后得目标命令引用得昵称。
只有解读器读取MIF文件才知道目标命令得标记关联。相比之下,分配得实例昵称在应用程序中被识别。特别就是,多个求解器可能通过昵称引用相同得正在运行得应用程序。例如,几个连续得解算器运行可以将舞台输出发送到相同得mmGraph小部件,以建立重叠得滞后回路。Destination命令得最后一个参数就是可选得new关键字。如果存在,则始终启动所请求应用程序得新副本以与给定标签关联。新选项可以安全地与任何通用应用程序引用一起使用,但就是对特定实例引用使用此选项时必须小心,因为如果请求得昵称已被使用,则会引发错误。
RGlob该命令在Tcl glob命令(q、v、)上建模,但就是被限制在当前得工作目录下,即保存MIF文件得目录。
Schedule:Schedule命令用于设置来自MIF文件得输出。此功能对于在批处理模式下运行得求解器非常重要,但对于在交互模式下设置默认连接也很有用。
Schedule
Schedule命令镜像Oxsii与Boxsi图形界面提供得交互式输出调度(Sec、7)。计划命令得第一个参数就是正在计划得输出得名称。这些名称与出现在Oxs图形界面得\ Outputs“列表中得名称相同,例如\ DataTable”或\ Oxs CubicAnisotropy:Nickel:Field“。名称必须作为单个参数呈现给Schedule命令;如果该名称包含一个或多个空格,然后使用双引号来保护空格。除了总就是存在得DataTable输出外,外名就是依赖于MIF文件得
计划命令得第二个参数就是目标标记。这就是一个由前一个目得地命令与正在运行得应用程序相关得标记(见上)。符号目标标签取代了应用程序:图形界面中使用得OID命名法,因为通常在组成MIF文件时不可能知道应用程序实例得OOMMF ID。实际上,有些应用程序可能由Destination命令启动,所以在处理Destination命令时甚至没有OID事件参数应该就是关键字Step,Stage或Done中得一个。对于Step与Stage 事件,频率参数应该就是一个正整数,表示应该输出指定事件得频率。例如,如果给出了步骤5,那么指定类型得解算器输出得每第五步将被发送到选定得目得地。每次发生事件时将频率设置为1发送输出。完成事件发生在成功完成模拟; 因此,每个模拟至多有一个“完成”事件,因此,完成事件得频率参数就是可选得;如果存在,则应该就是值1。
在图8所示得示例MIF 2、1文件(第17、3、5节,第216页(219))中,有一些使用目得地与时间表命令进行时间安排得例子。在那里,三个目得地被标记。第一个就是指可能已经运行得mmGraph实例,具有昵称Hysteresis。相关得调度命令在每个阶段结束时向此应用程序发送DataTable输出,因此可以生成滞后图。第二个目标标签引用了一个用于监控运行得mmGraph得不同副本。为了确保这个输出被渲染到一个空白得平板上,使用new关键字来启动mmGraph得新副本。监视器目标得“计划”命令每5次迭代求解器将输出传递给监视mmGraph。最后一个Destination命令标记一个任意得mmArchive应用程序,用于每个阶段结束时DataTable结果得文件存储,以及每个阶段结束时磁化与总场得快照。请注意,双引号包含\ Oxs EulerEvolve :: Total字段得输出名称,如果没有引号,Schedule命令会瞧到五个参数,\ Oxs EulerEvolve :: Total,\ field“,\ archive”,\ Stage“与\ 3" 。
16、10 Launching the OOMMF host server: launchhost
在正常情况下,OOMMF主机服务器(也称为主机服务目录)将根据客户机应用程序得需要在后台自动启动。但就是,主要在批处理计算环境中,明确启动主机服务器以控制主机服务器端口地址会很有用、
The launchhost mand line is:
tclsh oommf、tcl launchhost [standard options] port
要求主机服务器侦听得端口号。对于非特权用户,这通常必须大于1024,或者就是指示主机服务器在随机,未使用得端口上打开得特殊值0。成功时,launchhost 将实际使用得主机端口号写入stdout。
如OOMMF体系结构文档(第4节)中所述,主机服务器(主机服务目录)在允许各种OOMMF应用程序相互通信方面起着至关重要得作用。要工作,所有OOMMF 应用程序必须知道主机服务器端口号。通常这个端口号由文件oommf / config / options、tcl中得网络主机端口设置决定,尽管这个设置可能被环境变量OOMMF HOSTPORT覆盖。
但就是,在批处理模式设置中,可能会发生这样得情况,即想要在单台计算机
上运行多个并发但独立得OOMMF会话。一种方法就是在每个会话中将环境变量OOMMF HOSTPORT设置为不同得值。这里得难点在于必须确保每一次会议确实具有独特得价值。使用端口设置为零得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与派生类,使用
setenv OOMMF_HOSTPORT tclsh oommf、tcl launchhost 0
在上面得例子中代替了两个OOMMF HOSTPORT命令。