MindSpore:MindScience之MindElec 电磁仿真结果可视化
MindScience之MindElec 电磁仿真结果可视化
1. MindElec(电磁仿真)简介
仿真就是对实际物体进行模型模拟,期望改善实力产品的性能,找到最优的设计方案。
电磁仿真就是对物体的电磁性能进行仿真模拟,以代替昂贵的原形,并改进设计。
其在手机容差、天线优化和芯片设计等场景中应用广泛。
MindElec是基于MindSpore开发的AI电磁仿真工具包,由数据构建及转换、仿真计算、
以及结果可视化组成。可以支持端到端的AI电磁仿真。
2. MindElec(电磁仿真)安装
a. 目前只支持Ascend
b. 需要安装mindspore包
c. 还有一些其他的依赖
二、编译与安装:
由于mindelec跟mindsponge共用一个仓,所以需要进入电磁仿真的目录后进行编译
cd mindscience/MindElec
bash build.sh
最后在output里面有个mindscience_mindelec_ascend-0.1.0rc1-cp37-cp37m-linux_aarch64.whl安装包
安装: pip install mindscience_mindelec_ascend-0.1.0rc1-cp37-cp37m-linux_aarch64.whl
3. 电磁仿真结果可视化
电磁仿真的结果一般包含仿真区域内的电磁场、S参数等物理量,因此仿真结果的可视化是非常重要的,它能够直观反映
电磁仿真物理量的大小和分布情况,辅助设计人员调试调优。mindelec.vision就是对训练/测试过程,以及仿
真结果的可视化模块。
一、训练/测试过程可视化
可视化文件通过回调函数Callback函数生成,MonitorEval中有个参数draw_flag=True, 指定是否保存summary记录。默认值:True
solver = Solver(network=model_net,
mode="Data",
optimizer=optim,
loss_fn=nn.MSELoss())
monitor_train = MonitorTrain(per_print_times=1,
summary_dir='./summary_dir_train')
monitor_eval = MonitorEval(summary_dir='./summary_dir_eval',
model=solver,
eval_ds=data["eval_loader"],
eval_interval=opt.print_interval,
draw_flag=True)
callbacks_train = [monitor_train, monitor_eval]
进入mindscience/MindElec/examples/data_driven/gprinversion
train.py 的draw_flag设置为True
执行训练:python train.py --epoch 10 --device_target "Ascend" --device_num 0 --checkpoint_dir './ckpt/'
执行完成后,看了一下保存文件的地址summary_dir_eval 里面确实有文件
然而教程也没有说这个文件是什么类型,该用什么打开,我尝试把它当成 jpg 打开,然而,失败了
二、S11可视化
MindElec提供了plot_s11
函数可视化S11曲线
代码用法
import numpy as np
from mindelec.vision import plot_s11
s11 = np.random.rand(1001, 2).astype(np.float32)
s11[:, 0] = np.linspace(0, 4 * 10 ** 9, 1001)
s11 = s11.astype(np.float32)
s11_tensor = s11
path_image_save = './result_s11'
legend = 's11'
dpi = 300
plot_s11(s11_tensor, path_image_save, legend, dpi)
s11_tensor 虽然名字是Tensor,但是输入类型却是numpy,
结果如下图所示,生成的是jpg文件
之后用看图软件打开:
三、二维电磁场可视化
plot_eh
函数可视化电磁波的二维剖面
具体代码如下面所示
import numpy as np
from mindelec.vision import plot_eh
simu_res_tensor = np.random.rand(20, 10, 10, 10, 6).astype(np.float32)
path_image_save = './result_eh'
z_index = 5
dpi = 300
plot_eh(simu_res_tensor, path_image_save, z_index, dpi)
path_image_save 是文件生成的地址
下面是生成的文件,都在result_eh
result_eh
├── Ex_0.jpg
├── Ex_10.jpg
├── Ex_11.jpg
├── Ex_12.jpg
├── Ex_13.jpg
├── Ex_14.jpg
├── Ex_15.jpg
├── Ex_16.jpg
├── Ex_17.jpg
├── Ex_18.jpg
├── Ex_19.jpg
├── Ex_1.jpg
├── Ex_2.jpg
├── Ex_3.jpg
├── Ex_4.jpg
├── Ex_5.jpg
├── Ex_6.jpg
├── Ex_7.jpg
├── Ex_8.jpg
├── Ex_9.jpg
├── Ey_0.jpg
├── Ey_10.jpg
├── Ey_11.jpg
├── Ey_12.jpg
Ex开头的文件是不同时刻的Ex二维可视化结果
Ey开头的文件是不同时刻的Ey二维可视化结果
三、三维结果可视化
三维可视化用的是vtk_structure
函数, 可以为仿真结果生成每个时刻的三维可视化文件,
以vts结尾。
可以通过ParaView读取展示三维效果
ParaView是对二维和三维数据进行分析和可视化的程序,它既是一个应用程序框架,
也可以直接使用(Turn-Key )
代码如下图所示
import numpy as np
from mindelec.vision import vtk_structure
grid_tensor = np.random.rand(20, 10, 10, 10, 4).astype(np.float32)
eh_tensor = np.random.rand(20, 10, 10, 10, 6).astype(np.float32)
path_res = './result_vtk'
vtk_structure(grid_tensor, eh_tensor, path_res)
grid_tensor为三维网格坐标文件, shape是 (dim_t, dim_x, dim_y, dim_z, 4)
eh_tensor为生成的电磁场三维网格文件, shape是(dim_t, dim_x, dim_y, dim_z, 6)
path_res 是保存文件的地址
最后生成的文件是以vts结尾的:
打开vts文件的软件没有安装,就不展示了
总结:
以上就是MindElec 电磁仿真结果可视化的各种结果,其中S11可视化和二维电磁场可视化生成的文件都是jpg结尾的
最后一个三维结果可视化是以vts结尾的文件可以用ParaView读取,但是第一个通过MonitorEval保存的文件
就不知道是什么格式了
而且有一个疑问,这个可视化就是指保存文件吗,我以为的可视化是边执行边显示图,但是这边的接口
并没有写明有这个功能,也没有
调用函数去解析这些生成文件的功能