利用Gallop的Lua脚本实现RCS的批量计算

Posted 觅玄电子科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Gallop的Lua脚本实现RCS的批量计算相关的知识,希望对你有一定的参考价值。

摘要:通过总场散射场技术,FDTD可以计算在平面波入射条件下的散射远场,从而得到目标的双站RCS,如果需要不同入射角情况下的单站RCS谱线,需要遍历所有入射角进行逐个计算。Gallop可以使用Lua[1]语言实现批量建模、计算、后处理。本示例以杏仁体模型为例,利用脚本实现单站RCS的计算和后处理。

 

参考文献

[1]   http://www.lua.org/

 

建模和仿真步骤

 

(1)新建脚本文件

打开Gallop软件,在Lua菜单上,或者工具栏上,可以新建脚本文件。Gallop内置了脚本编辑器,可以编辑、修改、保存脚本文件。


2)编辑脚本

 

在脚本里,可以实现GUI界面的所有操作,并可以方便实现批量化建模和计算,尤其适合工程应用。针对RCS、天线罩等应用,Gallop已经预安装有大量的前后处理脚本,用户只需要进行相应的参数设置,既可方便进行计算。

 

第一步:引用所需文件

----------------------------------------------------------------------------

--首先引用所需的头文件:建模、RCS设置文件、多节点计算文件

require "geometry"

require "RCS"

require "MPIPond"

----------------------------------------------------------------------------

 

 

第二步:设置RCS计算参数:极化、入射角、散射目标的模型路径、远场的频率点、激励源的设置等等

----------------------------------------------------------------------------

-- RCS 计算参数设置

--需要计算的极化:HH 水平极化,VV垂直极化

local polars ={"HH","VV"};  

 

--激励源的入射角度设置

local angs = {0,2,4,6,8};

 

--所需要计算的模型路径,可以是相对路径,也可以是绝对路径

local paths = {"ALMOND253-export.stp" }

 

--所需要计算的散射场频率

local freqs = {1.19,7,9.92}

 

--激励源的频率范围:需要包含散射场频率范围

local signal_freq_min = 1

local signal_freq_max = 10

 

--剖分参考频率

local mesh_freq = 15

----------------------------------------------------------------------------

 

第三步:创建计算池,并往计算池添加计算模型

----------------------------------------------------------------------------

-- 创建计算池:用于多模型的多节点并行计算

local calculater = MPIPond:new()

----------------------------------------------------------------------------

 

----------------------------------------------------------------------------

-- 向计算池添加计算模型

for _, path in pairs(paths) do

 

       --根据需要计算的散射体三维模型目录创建散射体模型

       functionRCS:create_scaters()

              ---------------------------

              --建立散射体的模型,可以修改成介质等材料

              localmat_pec = Geometry.NewMaterial("PEC")

              mat_pec:fill_color(0.5,0.5,0.5)

              mat_pec:sigma_e(1.0e13)

              -------------------------    

             

              ---------------------------

              --Target:建立散射体的几何结构,并赋予材料特性

              localtarget = Geometry.load_step{ path = path }

              target:material(mat_pec)

              target:triangulate(0.02)

              target:material(mat_pec )

              ---------------------------

             

              ---------------------------

              --设置计算区域:模型几何边界

              posxm,posym,poszm,posxp,posyp,poszp= target:bbox()

              ---------------------------

             

              return{target}, {bbox_x1 = posxm, bbox_y1 = posym, bbox_z1 = poszm, bbox_x2 = posxp, bbox_y2 = posyp,  bbox_z2 = poszp, }

       end

      

       for_,polar in pairs(polars) do

              for_,ang in pairs( angs ) do

                     localalmond = RCS:new( {

                                   name="rcs-".."path".."("..ang..")-"..polar;

                                   num_threads= 16;              --计算线程数

                                   dext= 6;                       -- 物体到空气盒子

                                   farbox_info= { freq=freqs; dfarbox = 4; };

                                   source_info= { freq_min = signal_freq_min;

                                                        freq_max= signal_freq_max; 

                                                        dsrc  = 2;

                                                        type= polar,

                                                        theta= ang; };

                                   units= { freq = GHz; dim = mm };

                                   mesh_freq= mesh_freq;

                                   })

                     table.insert(calculater.model, almond );

              end

       end

end

             

第四步:调用求解器进行计算

----------------------------------------------------------------------------

calculater:find_results()

calculater:run()

----------------------------------------------------------------------------

 

 

(3)调用脚本求解

 

创建计算脚本文件后,我们可以在Gallop里调用计算脚本进行计算,另外我们也可以通过命令行模式调用Gallop求解器。

 

1 Gallop的GUI界面调用脚本: 在lua菜单里,或者工具栏上点击RunScript,然后执行相应的脚本文件进行RCS计算。

利用Gallop的Lua脚本实现RCS的批量计算

 

2 命令行模式调用脚本:通过命令行模式调用脚本可以减少显示、用户交互的过程,在进行批量计算时更稳定、效率更高。首先打开windows开始菜单里找到的“运行”,并键入cmd,通过cd命令把当前目录切换到脚本文件目录,并运行 runGallop rcs_script.lua,运行结束后,会输出各入射角情况下的模型文件,并导出RCS文件。

(4)计算结果后处理

 

上述脚本运行结束后,将得到不同角度入射情况下的远场散射方向图,存储在不同的文件中,模型文件也一并保存。通过Lua脚本可以实现数据的后处理,画图,导出等功能。Gallop示例里提供了处理RCS计算结果的脚本,运行脚本后,我们可以生成所需要的图形。

觅玄电子科技 发起了一个读者讨论 欢迎讨论和留言


以上是关于利用Gallop的Lua脚本实现RCS的批量计算的主要内容,如果未能解决你的问题,请参考以下文章

sh [LUA] Redis批量/批量操作脚本(重命名,删除)

StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改

基于 Redis 实现分布式锁,分析解决锁误删情况 及 利用Lua脚本解决原子性问题并改造锁

linux下SSH服务利用shell脚本实现密钥的批量分发与执行

LUA脚本怎么合函数传递参数

通过redis+lua实现加减库存