2022年5月26日 星期四

輸出一個專案當中所有設計的屬性值到CSV檔當中方便做比較

 


from pyaedt import Hfss

hfss = Hfss(specified_version='2022.1')

properties = {}
prop_list = []
for design in hfss.design_list:
properties[design] = {}
x = Hfss(projectname=hfss.project_name, designname=design)
props = x.odesign.GetProperties('LocalVariableTab', 'LocalVariables')
for i in props:
if i not in prop_list:
prop_list.append(i)
properties[design][i] = x.odesign.GetPropertyValue('LocalVariableTab', 'LocalVariables', i)

prop_list.sort()

with open('d:/demo/tabls.csv', 'w') as f:
f.writelines(','.join(hfss.design_list))
for p in prop_list:
row = [p]
for design in hfss.design_list:
try:
row.append(properties[design][p])
except:
row.append('NaN')
f.writelines(','.join(row) + '\n')



2022年5月22日 星期日

TDR 模擬

 執行Transient模擬,輸出tdr圖

#啟動非圖形模式
from pyaedt import Circuit
circuit = Circuit(non_graphical=True)

#網表內容
template = '''
.model diff_line S TSTONEFILE="D:/OneDrive - ANSYS, Inc/Models/S_Parameter/diff_line.s4p"
+ INTERPOLATION=LINEAR INTDATTYP=MA HIGHPASS=10 LOWPASS=10 convolution=0 enforce_passivity=0 Noisemodel=External

S2 net_1 net_2 net_3 net_4 FQMODEL="diff_line"
A3 net_2 net_1 COMPONENT=TDR_Differential_Ended enabled=1
R4 net_3 0 50
R7 net_4 0 50

.print TRAN V(*) O(*,z*)

.end
'''
#輸出template網表到檔案當中
with open('d:/demo/tdr.net', 'w') as f:
f.write(template)

#將網表加入到電路當中
oModule = circuit.add_netlist_datablock("D:/demo/tdr.net")

#加上Transient模擬設定並執行模擬
transient = circuit.create_setup('mytransient', circuit.SETUPS.NexximTransient)
transient.props['TransientData'] = ['0.1ns', '20ns']
circuit.analyse_nominal()

#取值並繪圖
data = circuit.post.get_solution_data('O(a3:zdiff)', domain='Time')
data.plot(math_formula='re')

#釋放license
circuit.release_desktop()


2022年5月21日 星期六

參數化結構範例

 

from math import sin, cos
from pyaedt import Q3d

q3d = Q3d(specified_version='2022.1', non_graphical=True)

q3d['r1'] = '150mm'
q3d['r2'] = '50mm'
q3d['dt'] = '1mm'
q3d['u_min'] = '-0.4*pi'
q3d['u_max'] = '0.4*pi'
q3d['du'] = 0.065
q3d['dr'] = '5mm'

q3d['v_min'] = '-0.3*pi'
q3d['v_max'] = '0.3*pi'
q3d['dv'] = 0.25

c1 = q3d.modeler.create_equationbased_curve('(r1+r2*cos(_t))*cos(u_min)', '(r1+r2*cos(_t))*sin(u_min)', 'r2*sin(_t)', 'v_min', 'v_max')
q3d.modeler.sweep_around_axis(c1, 2, 'u_max-u_min')
q3d.modeler.thicken_sheet(c1, 'dt')

spheres = []
for i in range(0, 100, 1):
for j in range(0, 10, 1):
x = f'if({i}*du+u_min<=u_max && {j}*dv+v_min<=v_max, (r1+r2*cos({j}*dv+v_min))*cos({i}*du+u_min), r1+r2*cos(v_min)*cos(u_min))'
y = f'if({i}*du+u_min<=u_max && {j}*dv+v_min<=v_max, (r1+r2*cos({j}*dv+v_min))*sin({i}*du+u_min), r1+r2*cos(v_min)*sin(u_min))'
z = f'if({i}*du+u_min<=u_max && {j}*dv+v_min<=v_max, r2*sin({j}*dv+v_min),r2*sin(v_min))'
s = q3d.modeler.create_sphere((x,y,z), 'dr')
s.color=(255,0,0)
spheres.append(s)

q3d.modeler.subtract(c1, spheres, False)
q3d.save_project('d:/demo/torus.aedt')
q3d.release_desktop()



不須啟動GUI執行PyAEDT電路模擬

 

#啟動非圖形模式
from pyaedt import Circuit
circuit = Circuit(non_graphical=True)

#輸出100級LC電路網表
with open('d:/demo/lc.net', 'w') as f:
for i in range(100):
f.writelines(f'L{i} net_{i} net_{i+1} 1e-9\n')
f.writelines(f'C{i} net_{i+1} 0 5e-12\n')

#將網表加入到電路當中
circuit.add_netlist_datablock('d:/demo/lc.net')

#加上ports
circuit.modeler.components.create_interface_port('net_0', (0,0))
circuit.modeler.components.create_interface_port('net_100', (0.01,0))

#加上模擬設定並執行模擬
lna = circuit.create_setup('mylna', circuit.SETUPS.NexximLNA)
lna.props['SweepDefinition']['Data']= 'LINC 0Hz 1GHz 101'
circuit.analyse_nominal()

#取值並繪圖
data = circuit.post.get_solution_data('db(Z11)')
data.plot(math_formula='re')

#釋放license
circuit.release_desktop()




2022年5月4日 星期三

生成帶有約束條件之線性規劃曲面

 

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure(figsize=(8,6))
ax3d = plt.axes(projection="3d")

def func(x, y):
result = (3*x+4*y)
return result

constraint = lambda x, y: (x+y<5)*(x+y>1)

xdata = np.linspace(0,3,100)
ydata = np.linspace(0,3,100)
X,Y = np.meshgrid(xdata,ydata)
Z = func(X, Y)/constraint(X, Y)


ax3d = plt.axes(projection='3d')
ax3d.plot_surface(X, Y, Z,cmap='jet')
ax3d.set_title('Surface Plot in Matplotlib')
ax3d.set_xlabel('X')
ax3d.set_ylabel('Y')
ax3d.set_zlabel('Z')

plt.show()



EDB建立PinGroup

為U2A5建立GND PinGroup,儲存之後匯入EDB from pyaedt import Edb edb = Edb(edbpath= r"D:\demo\Galileo_G87173_20454.aedb" , edbversion= '20...