Maxwell 2D参数化后处理宏编写小技巧

Maxwell 2D参数化分析时,后处理结果有时人工处理非常不方便,此时就需要用宏的方法来解决,这里只是提出一种解决方案,如果大家有更好的方法,请多多交流。
& M- s2 R- l  s! D7 ^1、如何获取当前计算的参数值
9 L1 [& o: S4 a5 a7 h+ A6 |在2D后处理中不可以直接调用前处理中的变量(目前我没有找到直接访问变量的方法,有的话请告诉我),所以只有想办法获取当前变量值,通过文件查找可以发现,在每步变量分析时,initial.cn2文件中包含当前变量值的信息,例如以下内容就是来自initial.cn2中:
5 k$ r2 l8 P- ?+ S" S, m+ d$ _) _9 H B_SYMTAB & i# }; @" V# v
  nThickness = 20
& s2 h+ v% u3 ] E_SYMTAB
8 U1 b, e! A# Z3 V$ S这里有一个变量名称为nThickness,所以以下的宏就是从initial.cn2中获取nThickness的值:
  i  @# M# t! [1 e4 q8 z5 ]Assign sParaFile "initial.cn2"
4 j" J6 L  r$ r' E& M# I/ b6 f
, [! n6 b0 P8 v3 H/ Z" v7 C& I
#判断文件initial.cn2是否存在
9 P; j6 N2 O0 ?+ ]1 YAssign nReturn FileExists(sParaFile)
' f* _% u% ^- z% I8 G8 pIf EQ nReturn 1
' {/ l# f) I) G1 D. {#如果存在就打开这个文件
8 s7 `" h6 J0 `3 c! c FileOpen sParaFile

, S# Y: j" o! m" F# u2 t#从文件中格式化读取数据,将数据列表存到strList中
) t8 y" d( ^6 Q; h Assign strList FileRead sParaFile '$$"nThickness = "$$l'
: ?, w  C4 {; R
#文件读取完成后关闭文件" X; \& h+ U/ e, c+ S6 ?$ o  z4 e! o0 D
FileClose sParaFile
$ v. A5 S4 f8 O5 S  _6 m
#将数据列表中的第一个数据赋给nValue
9 B3 r' V. u" }. c& g. V5 a  D0 p Assign nValue Component 1 strList
3 c; }6 C' ]1 f! d. p7 l/ P+ SEnd

1 @4 k4 M9 [( i" b9 ]这样nValue中就保存的是20了,有了这个值,就可以在保存后处理结果时区分不同的曲线、或者存为不同的文件  z7 P; ]- ~7 D% g+ U
1 q! ]" A2 O) `6 X
2、如何导出一条直线上的磁感应强度7 B; H4 p! H; L8 v) F
这个问题我在以前的一个帖子上说过,具体命令的用法要参考宏手册,下面这个宏就是将一次求解结果时输出一条直线上的磁感应强度曲线,并且是整个分析过程中的所有结果都保存在一个文件Result_LineIn.dat中,而曲线的名称则定义为LineIn+nValue的值,通过这个就可以方便的区分每条曲线的意义,要观察图形,直接使用Plot程序打开即可。" ?* @# a# X% u& \
EditPline "LineIn"# f$ }$ C; ?2 F& r  w. k" `) X
AddVert [12, 0, 0]# j( b" ]2 G, I8 a
AddVert [12, 249.75, 0]
) k  _  q( J- b6 R8 k9 c6 G9 sEndPline 0

7 ]' T) t4 n# B$ H; O4 a; u* z, M: }0 n: EEnter "B"
; ~; N+ Q! E' [6 v$ l  xMag9 C2 v. s' U; [1 ^( o) F
smooth0 E( b; M4 J2 [( d2 b
EnterLine "LineIn"  h& L+ E3 ~* ?9 I$ @
Assign sFileName "Result_LineIn.dat"! u* w7 \. h8 ]5 Z) F( g6 j
Assign sLineName StrConcat "LineIn" nValue/ V) r8 l0 [8 \' d% _& l* D! z
Assign nReturn FileExists(sFileName)
' |4 O, S' K0 q* G3 O- FIf EQ nReturn 1, s6 I; O4 {+ p4 _0 _( |
Load2DPlot sFileName( C) q; Y. W' Q) f
LinePlot2D sLineName 10 2 3 1 0 1 0; c  s* Z1 t. S
Else0 ~  D  U! O- {' L
LinePlot2D sLineName 10 2 3 1 0 1 1
0 r7 U4 R0 P8 f; GEnd
& |5 @# B" g+ Z) o& p: mSave2DPlot sFileName; g: v' k' s' e
CloseWindow
: ~! F# s* H5 B9 s
Clear
3 c8 H" K% z! N) Z8 P4 g  f# wDeleteLine "LineIn"

& O! j9 x" g8 y3 c- ^6 N3、如何输出整个参数化求解过程中一个点的值7 [1 b; Q( C4 }: Q; [: N6 c
与输出直线的方法类似,只是这里文件输出要采用直接读写的方法:4 b+ ?; Z, Y6 X! M) y. _; w, _8 l
DefinePoint "PtMid" [15, 14, 0]
% Q) R' V9 o$ T6 kFileWrite sFileName "a" "$$\t" {nValue}
: F' `+ V* ?& p! `* KEnter "B"8 Q' j& l" F$ J
Mag9 `1 z( s, h3 y
EnterPoint "PtMid": n. a6 f, ^7 _' W1 N2 Z0 N- i; f
Value0 ?5 q1 s$ r0 q/ I; f# ^; ?3 I+ [
Evaluate
: U" E4 c' g1 D. U$ r( cAssign nTemp GetTopEntryValue! e/ g: Q" [3 o$ N* {
FileWrite sFileName "a" "$$\t" {nTemp}5 _3 q7 f  \5 g6 y
+ t& l8 p( `) \  U

7 V6 T" f, U0 y9 d3 ]5 JClear9 F  c& ~: b  l! F  G3 X9 }
DeletePoint "PtMid"# e3 c/ l5 b: J" ?0 ]
/ b) f( L7 h, q$ @& [: r% J1 T5 v
输出文件每一行代表一步的结果,第一个数据是当前的参数值,第二个是求解结果,这个文件可以用写字板查看。3 p- R! F' t4 g
. N9 ~5 h! o! d' i$ L- s
文中没有对宏进行详细解说,具体使用方法参见官方手册中的Introduction to the Ansoft Macro Language.pdf。
原文地址:https://www.cnblogs.com/yunbo/p/1263310.html