pyfemtet 0.4.2__py3-none-any.whl → 0.4.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyfemtet might be problematic. Click here for more details.
- pyfemtet/FemtetPJTSample/_her_ex40_parametric.py +148 -0
- pyfemtet/__init__.py +1 -1
- pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_NX.prt +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_NX.py +132 -0
- pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj +0 -0
- pyfemtet/opt/femprj_sample/cad_ex01_SW.py +132 -0
- pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/gal_ex58_parametric.py +75 -0
- pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/gau_ex08_parametric.py +59 -0
- pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/her_ex40_parametric.py +137 -0
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py +61 -0
- pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py +62 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj +0 -0
- pyfemtet/opt/femprj_sample/wat_ex14_parametric.py +59 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py +126 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py +126 -0
- pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py +71 -0
- pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py +58 -0
- pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.py +137 -0
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.py +59 -0
- pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +60 -0
- pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj +0 -0
- pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py +57 -0
- pyfemtet/opt/interface/_femtet.py +5 -1
- pyfemtet/opt/interface/_femtet_with_nx/_interface.py +2 -8
- pyfemtet/opt/interface/_femtet_with_sldworks.py +2 -8
- {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.3.dist-info}/METADATA +1 -1
- pyfemtet-0.4.3.dist-info/RECORD +71 -0
- pyfemtet-0.4.2.dist-info/RECORD +0 -38
- {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.3.dist-info}/LICENSE +0 -0
- {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.3.dist-info}/WHEEL +0 -0
- {pyfemtet-0.4.2.dist-info → pyfemtet-0.4.3.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""単目的最適化: 有限長ヘリカルコイルの自己インダクタンス
|
|
2
|
+
|
|
3
|
+
Femtet の磁場解析ソルバを利用して、
|
|
4
|
+
有限長ヘリカルコイルの自己インダクタンスを
|
|
5
|
+
目標の値にする設計を行います。
|
|
6
|
+
|
|
7
|
+
対応プロジェクト: gau_ex08_parametric_jp.femprj
|
|
8
|
+
"""
|
|
9
|
+
from optuna.integration.botorch import BoTorchSampler
|
|
10
|
+
from pyfemtet.opt import FEMOpt, OptunaOptimizer
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def inductance(Femtet):
|
|
14
|
+
"""自己インダクタンスを取得します。
|
|
15
|
+
|
|
16
|
+
Note:
|
|
17
|
+
目的関数または制約関数は、
|
|
18
|
+
第一引数としてFemtetを受け取り、
|
|
19
|
+
戻り値としてfloat型を返す必要があります。
|
|
20
|
+
|
|
21
|
+
Params:
|
|
22
|
+
Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
float: 自己インダクタンスです。
|
|
26
|
+
"""
|
|
27
|
+
Gogh = Femtet.Gogh
|
|
28
|
+
|
|
29
|
+
coil_name = Gogh.Gauss.GetCoilList()[0]
|
|
30
|
+
return Gogh.Gauss.GetL(coil_name, coil_name) # 単位: F
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == '__main__':
|
|
34
|
+
|
|
35
|
+
# 数値最適化問題の初期化 (最適化手法を決定します)
|
|
36
|
+
opt = OptunaOptimizer(
|
|
37
|
+
sampler_class=BoTorchSampler,
|
|
38
|
+
sampler_kwargs=dict(
|
|
39
|
+
n_startup_trials=5,
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)。
|
|
44
|
+
femopt = FEMOpt(opt=opt)
|
|
45
|
+
|
|
46
|
+
# 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)。
|
|
47
|
+
femopt.add_parameter("helical_pitch", 6, lower_bound=4.2, upper_bound=8)
|
|
48
|
+
femopt.add_parameter("coil_radius", 10, lower_bound=1, upper_bound=10)
|
|
49
|
+
femopt.add_parameter("n_turns", 5, lower_bound=1, upper_bound=5)
|
|
50
|
+
|
|
51
|
+
# 目的関数を最適化問題に追加
|
|
52
|
+
# 目標の自己インダクタンスは 0.1 μF です。
|
|
53
|
+
femopt.add_objective(inductance, name='自己インダクタンス (F)', direction=1e-7)
|
|
54
|
+
|
|
55
|
+
# 最適化を実行
|
|
56
|
+
femopt.set_random_seed(42)
|
|
57
|
+
femopt.optimize(n_trials=20)
|
|
58
|
+
femopt.terminate_all()
|
|
Binary file
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""単目的最適化: 円形パッチアンテナの共振周波数
|
|
2
|
+
|
|
3
|
+
Femtet の電磁波解析ソルバを利用して、円形パッチアンテナの
|
|
4
|
+
電磁波調和解析を行い、共振特性を目標の値にする設計を行います。
|
|
5
|
+
|
|
6
|
+
対応プロジェクト: her_ex40_parametric_jp.femprj
|
|
7
|
+
"""
|
|
8
|
+
from time import sleep
|
|
9
|
+
|
|
10
|
+
import numpy as np
|
|
11
|
+
from scipy.signal import find_peaks
|
|
12
|
+
from tqdm import tqdm
|
|
13
|
+
from optuna.integration.botorch import BoTorchSampler
|
|
14
|
+
|
|
15
|
+
from pyfemtet.core import SolveError
|
|
16
|
+
from pyfemtet.opt import OptunaOptimizer, FEMOpt
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class SParameterCalculator:
|
|
20
|
+
"""Sパラメータ計算用クラス"""
|
|
21
|
+
|
|
22
|
+
def __init__(self):
|
|
23
|
+
self.freq = []
|
|
24
|
+
self.S = []
|
|
25
|
+
self.interpolated_function = None
|
|
26
|
+
self.resonance_frequency = None
|
|
27
|
+
self.minimum_S = None
|
|
28
|
+
|
|
29
|
+
def _get_freq_and_S_parameter(self, Femtet):
|
|
30
|
+
"""周波数とSパラメータの関係を取得します。"""
|
|
31
|
+
|
|
32
|
+
Gogh = Femtet.Gogh
|
|
33
|
+
|
|
34
|
+
freq_list = []
|
|
35
|
+
dB_S_list = []
|
|
36
|
+
for mode in tqdm(range(Gogh.Hertz.nMode), '周波数と S(1, 1) の関係を取得'):
|
|
37
|
+
# 周波数モード設定
|
|
38
|
+
Gogh.Hertz.Mode = mode
|
|
39
|
+
sleep(0.01)
|
|
40
|
+
|
|
41
|
+
# 周波数を取得
|
|
42
|
+
freq = Gogh.Hertz.GetFreq().Real
|
|
43
|
+
|
|
44
|
+
# S(1, 1) を取得
|
|
45
|
+
comp_S = Gogh.Hertz.GetSMatrix(0, 0)
|
|
46
|
+
norm = np.linalg.norm((comp_S.Real, comp_S.Imag))
|
|
47
|
+
dB_S = 20 * np.log10(norm)
|
|
48
|
+
|
|
49
|
+
# 結果を保存
|
|
50
|
+
freq_list.append(freq)
|
|
51
|
+
dB_S_list.append(dB_S)
|
|
52
|
+
|
|
53
|
+
self.freq = freq_list
|
|
54
|
+
self.S = dB_S_list
|
|
55
|
+
|
|
56
|
+
def _calc_resonance_frequency(self):
|
|
57
|
+
"""Sパラメータの第一ピークを与える周波数を取得します。"""
|
|
58
|
+
peaks, _ = find_peaks(-np.array(self.S), height=None, threshold=None, distance=None, prominence=0.5, width=None, wlen=None, rel_height=0.5, plateau_size=None)
|
|
59
|
+
if len(peaks) == 0:
|
|
60
|
+
raise SolveError('S(1,1) のピークを取得できませんでした。')
|
|
61
|
+
self.resonance_frequency = self.freq[peaks[0]]
|
|
62
|
+
self.minimum_S = self.S[peaks[0]]
|
|
63
|
+
|
|
64
|
+
def get_resonance_frequency(self, Femtet):
|
|
65
|
+
"""パッチアンテナの共振周波数を計算します。
|
|
66
|
+
|
|
67
|
+
Note:
|
|
68
|
+
目的関数または制約関数は、
|
|
69
|
+
第一引数としてFemtetを受け取り、
|
|
70
|
+
戻り値としてfloat型を返す必要があります。
|
|
71
|
+
|
|
72
|
+
Params:
|
|
73
|
+
Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
float: パッチアンテナの共振周波数。
|
|
77
|
+
"""
|
|
78
|
+
self._get_freq_and_S_parameter(Femtet)
|
|
79
|
+
self._calc_resonance_frequency()
|
|
80
|
+
return self.resonance_frequency # 単位: Hz
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def antenna_is_smaller_than_substrate(Femtet):
|
|
84
|
+
"""アンテナの大きさと基板の大きさの関係を計算します。
|
|
85
|
+
|
|
86
|
+
この関数は、変数の更新によってモデル形状が破綻しないように
|
|
87
|
+
変数の組み合わせを拘束するために使われます。
|
|
88
|
+
|
|
89
|
+
Params:
|
|
90
|
+
Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
float: 基板エッジとアンテナエッジの間隙。1 mm 以上が必要です。
|
|
94
|
+
"""
|
|
95
|
+
r = Femtet.GetVariableValue('antenna_radius')
|
|
96
|
+
w = Femtet.GetVariableValue('substrate_w')
|
|
97
|
+
return w / 2 - r # 単位: mm
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def port_is_inside_antenna(Femtet):
|
|
101
|
+
"""給電ポートの位置とアンテナの大きさの関係を計算します。"""
|
|
102
|
+
r = Femtet.GetVariableValue('antenna_radius')
|
|
103
|
+
x = Femtet.GetVariableValue('port_x')
|
|
104
|
+
return r - x # 単位: mm。1 mm 以上が必要です。
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
if __name__ == '__main__':
|
|
108
|
+
# 周波数特性を計算するためのオブジェクトを初期化
|
|
109
|
+
s = SParameterCalculator()
|
|
110
|
+
|
|
111
|
+
# 数値最適化問題の初期化 (最適化手法を決定します)
|
|
112
|
+
opt = OptunaOptimizer(
|
|
113
|
+
sampler_class=BoTorchSampler,
|
|
114
|
+
sampler_kwargs=dict(
|
|
115
|
+
n_startup_trials=10,
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
|
|
120
|
+
femopt = FEMOpt(opt=opt)
|
|
121
|
+
|
|
122
|
+
# 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
|
|
123
|
+
femopt.add_parameter('antenna_radius', 10, 5, 20)
|
|
124
|
+
femopt.add_parameter('substrate_w', 50, 40, 60)
|
|
125
|
+
femopt.add_parameter('port_x', 5, 1, 20)
|
|
126
|
+
|
|
127
|
+
# 拘束関数を最適化問題に追加
|
|
128
|
+
femopt.add_constraint(antenna_is_smaller_than_substrate, 'アンテナと基板エッジの間隙', lower_bound=1)
|
|
129
|
+
femopt.add_constraint(port_is_inside_antenna, 'アンテナエッジと給電ポートの間隙', lower_bound=1)
|
|
130
|
+
|
|
131
|
+
# 目的関数を最適化問題に追加
|
|
132
|
+
# 共振周波数の目標は 3.0 GHz です。
|
|
133
|
+
femopt.add_objective(s.get_resonance_frequency, '第一共振周波数(Hz)', direction=3.0 * 1e9)
|
|
134
|
+
|
|
135
|
+
femopt.set_random_seed(42)
|
|
136
|
+
femopt.optimize(n_trials=15)
|
|
137
|
+
femopt.terminate_all()
|
|
Binary file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""多目的の最適化: プリント基板上ICの空冷(強制対流)
|
|
2
|
+
|
|
3
|
+
Femtet の簡易熱流体解析ソルバを利用して、強制対流を受ける
|
|
4
|
+
プリント基板上のICチップについて、チップ温度を低減しつつ
|
|
5
|
+
基板サイズを小さくする設計を行います。
|
|
6
|
+
|
|
7
|
+
対応プロジェクト:paswat_ex1_parametric_jp.femprj
|
|
8
|
+
"""
|
|
9
|
+
from pyfemtet.opt import FEMOpt
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def chip_temp(Femtet, chip_name):
|
|
13
|
+
"""チップの最高温度を取得します。
|
|
14
|
+
|
|
15
|
+
Note:
|
|
16
|
+
目的関数または制約関数は、
|
|
17
|
+
第一引数としてFemtetを受け取り、
|
|
18
|
+
戻り値としてfloat型を返す必要があります。
|
|
19
|
+
|
|
20
|
+
Params:
|
|
21
|
+
Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
|
|
22
|
+
chip_name (str): femprj 内で定義されているボディ属性名です。有効な値は 'MAINCHIP' 又は 'SUBCHIP' です。
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
float: 指定されたボディ属性名のボディの最高温度です。
|
|
26
|
+
"""
|
|
27
|
+
Gogh = Femtet.Gogh
|
|
28
|
+
|
|
29
|
+
max_temperature, min_temperature, mean_temperature = Gogh.Watt.GetTemp(chip_name)
|
|
30
|
+
|
|
31
|
+
return max_temperature # 単位: 度
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def substrate_size(Femtet):
|
|
35
|
+
"""基板のXY平面上での専有面積を計算します。"""
|
|
36
|
+
substrate_w = Femtet.GetVariableValue('substrate_w')
|
|
37
|
+
substrate_d = Femtet.GetVariableValue('substrate_d')
|
|
38
|
+
return substrate_w * substrate_d # 単位: mm2
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
if __name__ == '__main__':
|
|
42
|
+
|
|
43
|
+
# FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
|
|
44
|
+
femopt = FEMOpt()
|
|
45
|
+
|
|
46
|
+
# 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
|
|
47
|
+
femopt.add_parameter("substrate_w", 40, lower_bound=22, upper_bound=60)
|
|
48
|
+
femopt.add_parameter("substrate_d", 60, lower_bound=34, upper_bound=60)
|
|
49
|
+
femopt.add_parameter("rot", 0, lower_bound=0, upper_bound=180)
|
|
50
|
+
|
|
51
|
+
# 目的関数を最適化問題に追加
|
|
52
|
+
femopt.add_objective(chip_temp, name='MAINCHIP<br>最高温度(度)', direction='minimize', args=('MAINCHIP',))
|
|
53
|
+
femopt.add_objective(chip_temp, name='SUBCHIP<br>最高温度(度)', direction='minimize', args=('SUBCHIP',))
|
|
54
|
+
femopt.add_objective(substrate_size, name='基板サイズ(mm2)', direction='minimize')
|
|
55
|
+
|
|
56
|
+
# 最適化を実行
|
|
57
|
+
femopt.set_random_seed(42)
|
|
58
|
+
femopt.optimize(n_trials=15)
|
|
59
|
+
femopt.terminate_all()
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""多目的の最適化: プリント基板上ICの空冷(強制対流)
|
|
2
|
+
|
|
3
|
+
Femtet の簡易熱流体解析ソルバを利用して、強制対流を受ける
|
|
4
|
+
プリント基板上のICチップについて、チップ温度を低減しつつ
|
|
5
|
+
基板サイズを小さくする設計を行います。
|
|
6
|
+
|
|
7
|
+
対応プロジェクト:paswat_ex1_parametric_jp.femprj
|
|
8
|
+
"""
|
|
9
|
+
from pyfemtet.opt import FEMOpt
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def chip_temp(Femtet, chip_name):
|
|
13
|
+
"""チップの最高温度を取得します。
|
|
14
|
+
|
|
15
|
+
Note:
|
|
16
|
+
目的関数または制約関数は、
|
|
17
|
+
第一引数としてFemtetを受け取り、
|
|
18
|
+
戻り値としてfloat型を返す必要があります。
|
|
19
|
+
|
|
20
|
+
Params:
|
|
21
|
+
Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
|
|
22
|
+
chip_name (str): femprj 内で定義されているボディ属性名です。有効な値は 'MAINCHIP' 又は 'SUBCHIP' です。
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
float: 指定されたボディ属性名のボディの最高温度です。
|
|
26
|
+
"""
|
|
27
|
+
Gogh = Femtet.Gogh
|
|
28
|
+
|
|
29
|
+
max_temperature, min_temperature, mean_temperature = Gogh.Watt.GetTemp(chip_name)
|
|
30
|
+
|
|
31
|
+
return max_temperature # 単位: 度
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def substrate_size(Femtet):
|
|
35
|
+
"""基板のXY平面上での専有面積を計算します。"""
|
|
36
|
+
substrate_w = Femtet.GetVariableValue('substrate_w')
|
|
37
|
+
substrate_d = Femtet.GetVariableValue('substrate_d')
|
|
38
|
+
return substrate_w * substrate_d # 単位: mm2
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
if __name__ == '__main__':
|
|
42
|
+
|
|
43
|
+
# FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
|
|
44
|
+
femopt = FEMOpt()
|
|
45
|
+
|
|
46
|
+
# 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
|
|
47
|
+
femopt.add_parameter("substrate_w", 40, lower_bound=22, upper_bound=60)
|
|
48
|
+
femopt.add_parameter("substrate_d", 60, lower_bound=34, upper_bound=60)
|
|
49
|
+
femopt.add_parameter("rot", 0, lower_bound=0, upper_bound=180)
|
|
50
|
+
|
|
51
|
+
# 目的関数を最適化問題に追加
|
|
52
|
+
femopt.add_objective(chip_temp, name='MAINCHIP<br>最高温度(度)', direction='minimize', args=('MAINCHIP',))
|
|
53
|
+
femopt.add_objective(chip_temp, name='SUBCHIP<br>最高温度(度)', direction='minimize', args=('SUBCHIP',))
|
|
54
|
+
femopt.add_objective(substrate_size, name='基板サイズ(mm2)', direction='minimize')
|
|
55
|
+
|
|
56
|
+
# 最適化を実行
|
|
57
|
+
femopt.set_random_seed(42)
|
|
58
|
+
# femopt.optimize(n_trials=15)
|
|
59
|
+
femopt.optimize(n_trials=30, n_parallel=3) # 並列計算しない場合との差はこの行のみです。
|
|
60
|
+
femopt.terminate_all()
|
|
Binary file
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""多目的最適化: プリント基板上ICの発熱
|
|
2
|
+
|
|
3
|
+
Femtetの熱伝導解析ソルバを使用して、ICチップの発熱を抑えつつ
|
|
4
|
+
基板サイズを小さくする設計を行います。
|
|
5
|
+
|
|
6
|
+
対応プロジェクト: wat_ex14_parametric_jp.femprj
|
|
7
|
+
"""
|
|
8
|
+
from pyfemtet.opt import FEMOpt
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def chip_temp(Femtet, chip_name):
|
|
12
|
+
"""チップの最高温度を取得します。
|
|
13
|
+
|
|
14
|
+
Note:
|
|
15
|
+
目的関数または制約関数は、
|
|
16
|
+
第一引数としてFemtetを受け取り、
|
|
17
|
+
戻り値としてfloat型を返す必要があります。
|
|
18
|
+
|
|
19
|
+
Params:
|
|
20
|
+
Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
|
|
21
|
+
chip_name (str): femprj 内で定義されているボディ属性名です。有効な値は 'MAINCHIP' 又は 'SUBCHIP' です。
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
float: 指定されたボディ属性名のボディの最高温度です。
|
|
25
|
+
"""
|
|
26
|
+
Gogh = Femtet.Gogh
|
|
27
|
+
|
|
28
|
+
max_temperature, min_temperature, mean_temperature = Gogh.Watt.GetTemp(chip_name)
|
|
29
|
+
|
|
30
|
+
return max_temperature # 単位: 度
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def substrate_size(Femtet):
|
|
34
|
+
"""基板のXY平面上での専有面積を計算します。"""
|
|
35
|
+
substrate_w = Femtet.GetVariableValue('substrate_w')
|
|
36
|
+
substrate_d = Femtet.GetVariableValue('substrate_d')
|
|
37
|
+
return substrate_w * substrate_d # 単位: mm2
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if __name__ == '__main__':
|
|
41
|
+
|
|
42
|
+
# FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
|
|
43
|
+
femopt = FEMOpt()
|
|
44
|
+
|
|
45
|
+
# 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
|
|
46
|
+
femopt.add_parameter("substrate_w", 40, lower_bound=22, upper_bound=60)
|
|
47
|
+
femopt.add_parameter("substrate_d", 60, lower_bound=34, upper_bound=60)
|
|
48
|
+
|
|
49
|
+
# 目的関数を最適化問題に追加
|
|
50
|
+
femopt.add_objective(chip_temp, name='MAINCHIP<br>最高温度(度)', direction='minimize', args=('MAINCHIP',))
|
|
51
|
+
femopt.add_objective(chip_temp, name='SUBCHIP<br>最高温度(度)', direction='minimize', args=('SUBCHIP',))
|
|
52
|
+
femopt.add_objective(substrate_size, name='基板サイズ(mm2)')
|
|
53
|
+
|
|
54
|
+
# 最適化を実行
|
|
55
|
+
femopt.set_random_seed(42)
|
|
56
|
+
femopt.optimize(n_trials=15)
|
|
57
|
+
femopt.terminate_all()
|
|
@@ -59,6 +59,7 @@ class FemtetInterface(FEMInterface):
|
|
|
59
59
|
connect_method='auto',
|
|
60
60
|
strictly_pid_specify=True,
|
|
61
61
|
allow_without_project=False,
|
|
62
|
+
open_result_with_gui=True,
|
|
62
63
|
**kwargs # 継承されたクラスからの引数
|
|
63
64
|
):
|
|
64
65
|
|
|
@@ -74,6 +75,7 @@ class FemtetInterface(FEMInterface):
|
|
|
74
75
|
self.connect_method = connect_method
|
|
75
76
|
self.allow_without_project = allow_without_project
|
|
76
77
|
self.original_femprj_path = self.femprj_path
|
|
78
|
+
self.open_result_with_gui = open_result_with_gui
|
|
77
79
|
|
|
78
80
|
# その他のメンバーの宣言や初期化
|
|
79
81
|
self.Femtet = None
|
|
@@ -108,6 +110,7 @@ class FemtetInterface(FEMInterface):
|
|
|
108
110
|
super().__init__(
|
|
109
111
|
femprj_path=self.femprj_path,
|
|
110
112
|
model_name=self.model_name,
|
|
113
|
+
open_result_with_gui=self.open_result_with_gui,
|
|
111
114
|
**kwargs
|
|
112
115
|
)
|
|
113
116
|
|
|
@@ -559,13 +562,14 @@ class FemtetInterface(FEMInterface):
|
|
|
559
562
|
SolveError, # 生きてるのに開けない場合
|
|
560
563
|
error_message='解析結果のオープンに失敗しました',
|
|
561
564
|
is_Gaudi_method=True,
|
|
562
|
-
args=(
|
|
565
|
+
args=(self.open_result_with_gui,),
|
|
563
566
|
)
|
|
564
567
|
|
|
565
568
|
def update(self, parameters: 'pd.DataFrame') -> None:
|
|
566
569
|
"""See :func:`FEMInterface.update`"""
|
|
567
570
|
self.parameters = parameters.copy()
|
|
568
571
|
self.update_model(parameters)
|
|
572
|
+
# TODO: CAD 連携における座標を基にした境界条件の割当直しなどの処理をここに挟めるようにする
|
|
569
573
|
self.solve()
|
|
570
574
|
|
|
571
575
|
def quit(self, timeout=1, force=True):
|
|
@@ -27,10 +27,7 @@ class FemtetWithNXInterface(FemtetInterface):
|
|
|
27
27
|
def __init__(
|
|
28
28
|
self,
|
|
29
29
|
prt_path,
|
|
30
|
-
|
|
31
|
-
model_name=None,
|
|
32
|
-
connect_method='auto',
|
|
33
|
-
strictly_pid_specify=True,
|
|
30
|
+
**kwargs
|
|
34
31
|
):
|
|
35
32
|
|
|
36
33
|
# check NX installation
|
|
@@ -51,11 +48,8 @@ class FemtetWithNXInterface(FemtetInterface):
|
|
|
51
48
|
# FemtetInterface の設定 (femprj_path, model_name の更新など)
|
|
52
49
|
# + restore 情報の上書き
|
|
53
50
|
super().__init__(
|
|
54
|
-
femprj_path=femprj_path,
|
|
55
|
-
model_name=model_name,
|
|
56
|
-
connect_method=connect_method,
|
|
57
|
-
strictly_pid_specify=strictly_pid_specify,
|
|
58
51
|
prt_path=self.prt_path,
|
|
52
|
+
**kwargs
|
|
59
53
|
)
|
|
60
54
|
|
|
61
55
|
def check_param_value(self, name):
|
|
@@ -26,10 +26,7 @@ class FemtetWithSolidworksInterface(FemtetInterface):
|
|
|
26
26
|
def __init__(
|
|
27
27
|
self,
|
|
28
28
|
sldprt_path,
|
|
29
|
-
|
|
30
|
-
model_name=None,
|
|
31
|
-
connect_method='auto',
|
|
32
|
-
strictly_pid_specify=True,
|
|
29
|
+
**kwargs
|
|
33
30
|
):
|
|
34
31
|
# 引数の処理
|
|
35
32
|
# dask サブプロセスのときは space 直下の sldprt_path を参照する
|
|
@@ -43,11 +40,8 @@ class FemtetWithSolidworksInterface(FemtetInterface):
|
|
|
43
40
|
# FemtetInterface の設定 (femprj_path, model_name の更新など)
|
|
44
41
|
# + restore 情報の上書き
|
|
45
42
|
super().__init__(
|
|
46
|
-
femprj_path=femprj_path,
|
|
47
|
-
model_name=model_name,
|
|
48
|
-
connect_method=connect_method,
|
|
49
|
-
strictly_pid_specify=strictly_pid_specify,
|
|
50
43
|
sldprt_path=self.sldprt_path,
|
|
44
|
+
**kwargs
|
|
51
45
|
)
|
|
52
46
|
|
|
53
47
|
def initialize_sldworks_connection(self):
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.femprj,sha256=JfzRl_C72doQFJO0hJq8BTX6TSFB_Skh2C4l-kiWoXY,170268
|
|
2
|
+
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
|
|
3
|
+
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.py,sha256=YJ3nszFLYfd7m4CaQ6ZG9DS_aHdgQIdSHCopmGakBWE,3980
|
|
4
|
+
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.SLDPRT,sha256=U0Yh559Fygd5sp013NwwhZ5vRA8D_E6kmiUXDP5isJQ,83094
|
|
5
|
+
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.femprj,sha256=omF3QvS8gzi_fSr2yobbVVaspR2YzDiUcMYvei-8ZmQ,155307
|
|
6
|
+
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.py,sha256=Irv3nNXkQpCGZgy41IcWwGKVddW6oOziwe6EyantUn4,4182
|
|
7
|
+
pyfemtet/FemtetPJTSample/_her_ex40_parametric.py,sha256=B5PQoh71Q3KN2CyLU1gP_Yh9g3o6poi0HFasWzHQ_vk,5144
|
|
8
|
+
pyfemtet/FemtetPJTSample/gau_ex08_parametric.femprj,sha256=EguPWZHcwZMMX8cX1rZhLc2Pr__P4PR8RF4_n4uxDaI,268761
|
|
9
|
+
pyfemtet/FemtetPJTSample/gau_ex08_parametric.py,sha256=B-ibQDodTLcJ-wc8sNVb1Dxae2ksL6Fns3uNBRU7s5g,1799
|
|
10
|
+
pyfemtet/FemtetPJTSample/her_ex40_parametric.femprj,sha256=ZFQ1Rl31dmLhYW__yahRYLejKw5DdccPGdpg67CWlS0,126336
|
|
11
|
+
pyfemtet/FemtetPJTSample/her_ex40_parametric.py,sha256=B5PQoh71Q3KN2CyLU1gP_Yh9g3o6poi0HFasWzHQ_vk,5144
|
|
12
|
+
pyfemtet/FemtetPJTSample/wat_ex14_parallel_parametric.py,sha256=UfhJffuXyhzdIWNpOrpV6xLTK1fuVvgyhlyg4Rp-628,2148
|
|
13
|
+
pyfemtet/FemtetPJTSample/wat_ex14_parametric.femprj,sha256=pxacKe0NPNUPAcxqo2cATFApsMKiVt2g2e_FOk4fpjA,172895
|
|
14
|
+
pyfemtet/FemtetPJTSample/wat_ex14_parametric.py,sha256=LGbWxCek0Ad2YrDCKykiQkE3aIypM4g8P3mLd_2anEE,2052
|
|
15
|
+
pyfemtet/__init__.py,sha256=-0DFAS3GW84dLmJEuzbtUA7qvIf_cBb4LhqSg0oFfeI,21
|
|
16
|
+
pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
|
|
17
|
+
pyfemtet/dispatch_extensions.py,sha256=MhWiUXVt2Cq8vDeajMK4SrajjiAmb4m2fK8gXwHLrWA,16177
|
|
18
|
+
pyfemtet/logger.py,sha256=JYD0FvzijMS2NvZN7VT7vZA5hqtHEkvS93AHlIMDePw,2507
|
|
19
|
+
pyfemtet/opt/__init__.py,sha256=_P8unESvqCRD5pmuo6-5yo7BbrPi7c0aE6UZpqUD-_I,596
|
|
20
|
+
pyfemtet/opt/_femopt.py,sha256=mkawFpY0UXENeJYuH2mkLpNgUncIWY3QYMHUj-lL-4o,20602
|
|
21
|
+
pyfemtet/opt/_femopt_core.py,sha256=bCSb1XvqeEfX6T2Z24eLI8nIa82omy8_Pnf5HXEmEsQ,24361
|
|
22
|
+
pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj,sha256=KC8JlHqHzqgyKriK911QSnQByQpRlw-SX5OSQ_GNe5M,149193
|
|
23
|
+
pyfemtet/opt/femprj_sample/cad_ex01_NX.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
|
|
24
|
+
pyfemtet/opt/femprj_sample/cad_ex01_NX.py,sha256=qpfbU41qsJSMWnROzTOU1mpmHngGoa0cjnLHqNkt0EY,4519
|
|
25
|
+
pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT,sha256=jjBi4aRRwZPK-4-YRKDC4eO_Ch2jwd7M7chvJlnBbZU,97158
|
|
26
|
+
pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj,sha256=knN0bBTHm5CqExLdmxdJvPldJ6ahnQesKt974qRjWh4,126837
|
|
27
|
+
pyfemtet/opt/femprj_sample/cad_ex01_SW.py,sha256=HOpxWC_jxnKmabO4u5JrHNHPR8b7WFm-PauJSoTxRrQ,4586
|
|
28
|
+
pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj,sha256=-HDpYkp0bi2ZGKerQGVm-TIHq67D5dkIFcgl_QmZXy4,72896
|
|
29
|
+
pyfemtet/opt/femprj_sample/gal_ex58_parametric.py,sha256=yNAgkHknRY6CPnYR6ETl6ZNOElepvQNwwnofUGpFhVw,2485
|
|
30
|
+
pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj,sha256=Yb9ILeTEKx5xfJGk8IZH_DVlgkpGB33Vy9-LGIEQboY,279251
|
|
31
|
+
pyfemtet/opt/femprj_sample/gau_ex08_parametric.py,sha256=7SLe6Qbi2AGm1Li7kotyy2qSYynX2YitoW255XRxOOI,1956
|
|
32
|
+
pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj,sha256=LLAUDlUo1dIpRzlKPs1lvACzJQxjnWW3xAGAodYEqRM,117221
|
|
33
|
+
pyfemtet/opt/femprj_sample/her_ex40_parametric.py,sha256=9ubwnEavFpjbTAbH5RmYwYoGxATl-ehW_oH_kDLTlXs,4839
|
|
34
|
+
pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj,sha256=z2NHFJWiuiLv_zhxjFpLpmRbYVvQ43bAMj_NLioQGsk,262283
|
|
35
|
+
pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py,sha256=nFBQPr2gaCoLVxZDsKVUU_aZ3I9ZwbQCwz1_qJTSgOU,2388
|
|
36
|
+
pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py,sha256=2IPq3SMrd2TCQMKL0_NA7ELBAj9yqwNe2RiMWpopw_M,2499
|
|
37
|
+
pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj,sha256=F-yu2dGrsbrIA1Lhizu2aHTjQFTohyBmOuJv-Iyl8jk,179596
|
|
38
|
+
pyfemtet/opt/femprj_sample/wat_ex14_parametric.py,sha256=sGj0khYO7_yGyXGHbdWJ883XvzO1HUbrgBLjiS2d7TM,2240
|
|
39
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj,sha256=0RBhOGhtiFAp0QSCTBYEaDY9EZymn9hJYchAOJ6PaBA,143533
|
|
40
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py,sha256=2LE-3d0XEChqCSwgUi45V8eAsF_YUGUgO9jLx5u5bjQ,4797
|
|
41
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj,sha256=ZZhT9XjB9Xu9YwHWv4gbvKBiUWlOFKEoHjAcGWb3vvQ,128026
|
|
42
|
+
pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py,sha256=o8P6o7Q0d0Jj02Qeij8kxbduyyKf_fNHSlXU_1H65S8,4864
|
|
43
|
+
pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj,sha256=zmKyHbVI2vYaQU3KYrAfsiA1d87HVfDYw27VAcd1Yno,75668
|
|
44
|
+
pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py,sha256=gnCPiaxCPITAP-972DylFQ0BNpDJLeal9HPf5cfbhRI,2488
|
|
45
|
+
pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj,sha256=TTXw_8YT8pzHQlu4ufGzTq1IFYSwcWWt4GA6sIY1YPM,295600
|
|
46
|
+
pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py,sha256=GxfAb5_0F9tK_i9almLdQh7OjzdNFo_leoyIPtPCqvM,2114
|
|
47
|
+
pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.femprj,sha256=OJ7f8iw0z1BZqanuNn71uEaoM2Kgb93ptUU8iYwYON0,129783
|
|
48
|
+
pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.py,sha256=FFXO4GblaCHXrU7yUapBcescscESrVv-dutVYs4Fp4s,5272
|
|
49
|
+
pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.femprj,sha256=y7eURFBdqh6PmD4zbelGuB458HmfihVht0K4wVI-mik,265368
|
|
50
|
+
pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.py,sha256=cm_P-qXX0p4GBzst6IUuarkSczrDhitCNodzlcbyRPM,2516
|
|
51
|
+
pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py,sha256=zpkGyKBhPJhEoc_pfYX6m27FgGcEV8D8HIBUg6EL_ps,2632
|
|
52
|
+
pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj,sha256=dMwQMt6yok_PbZLyxPYdmg5wJQwgQDZ4RhS76zdGLGk,177944
|
|
53
|
+
pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py,sha256=vnfI4WuCvyjQN1MhnzyB-jcAPtTwz3yNiwtTm2yQZHU,2311
|
|
54
|
+
pyfemtet/opt/interface/__init__.py,sha256=qz5BszPuU3jZIoDnPjkPDAgvgHLlx1sYhuqh5ID798k,480
|
|
55
|
+
pyfemtet/opt/interface/_base.py,sha256=lDjdvKYmBMxSc7SfoWSu91qVijGaQ2Ng-0C7z_f4eFM,2079
|
|
56
|
+
pyfemtet/opt/interface/_femtet.py,sha256=4FoDG5OBMPh3mIy-_EPIgQ9v37XOa3jKLTIqpjf3vAA,24754
|
|
57
|
+
pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
|
|
58
|
+
pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=kTEmfAyLMEZvYTYjGXgYnoyhi-wDzhKK7opyVp7rOcY,3931
|
|
59
|
+
pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=t0AB7mKY7rmrI_9stP1-5qhzmugEQ19DnZ4CCrCdTSw,2856
|
|
60
|
+
pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=400FidHp7mBAVLyxzLlLtGYNzK_TtK61ycd4vFjHES0,6254
|
|
61
|
+
pyfemtet/opt/opt/__init__.py,sha256=eQh-7PJN2YEUbHZnjinbeIyb0bk1wSh76TaEAa2l8SU,191
|
|
62
|
+
pyfemtet/opt/opt/_base.py,sha256=aO71a8lIHHb5xIEoIu7oO_maynrNIEHfwt4uFFOUY58,7101
|
|
63
|
+
pyfemtet/opt/opt/_optuna.py,sha256=TWtp9auU6GBWtEJVOuo8aWSvLcCHCUNUyOQRnqyln4I,9996
|
|
64
|
+
pyfemtet/opt/visualization/__init__.py,sha256=PUCHoZnuZrHjTd0QQQBgzWkCpKY2noBPTvi-lyvxQyw,193
|
|
65
|
+
pyfemtet/opt/visualization/_graphs.py,sha256=G6HaoGD3GpuwXih1nuTeFQMD0zv4jrhogedP9hxaG1c,5306
|
|
66
|
+
pyfemtet/opt/visualization/_monitor.py,sha256=WcbuMjnp5LiybwCYBnJ78ju2h7sBJJtqUf1CbUacfXI,42104
|
|
67
|
+
pyfemtet-0.4.3.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
68
|
+
pyfemtet-0.4.3.dist-info/METADATA,sha256=8OEDM6wEqTEZc_6SJN8sBd55ie3OHYQZRguABCT_ulA,1848
|
|
69
|
+
pyfemtet-0.4.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
70
|
+
pyfemtet-0.4.3.dist-info/entry_points.txt,sha256=E_NUq8BEuKLM3z6Ou0sh6HyvaKE5O6NBDlmO-wgEGaQ,67
|
|
71
|
+
pyfemtet-0.4.3.dist-info/RECORD,,
|
pyfemtet-0.4.2.dist-info/RECORD
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.femprj,sha256=JfzRl_C72doQFJO0hJq8BTX6TSFB_Skh2C4l-kiWoXY,170268
|
|
2
|
-
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.prt,sha256=3okHLeMdslrRA_wkhppZtxIe-2-ZPMfNqWCdQwUV31o,226626
|
|
3
|
-
pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.py,sha256=YJ3nszFLYfd7m4CaQ6ZG9DS_aHdgQIdSHCopmGakBWE,3980
|
|
4
|
-
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.SLDPRT,sha256=U0Yh559Fygd5sp013NwwhZ5vRA8D_E6kmiUXDP5isJQ,83094
|
|
5
|
-
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.femprj,sha256=omF3QvS8gzi_fSr2yobbVVaspR2YzDiUcMYvei-8ZmQ,155307
|
|
6
|
-
pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.py,sha256=Irv3nNXkQpCGZgy41IcWwGKVddW6oOziwe6EyantUn4,4182
|
|
7
|
-
pyfemtet/FemtetPJTSample/gau_ex08_parametric.femprj,sha256=EguPWZHcwZMMX8cX1rZhLc2Pr__P4PR8RF4_n4uxDaI,268761
|
|
8
|
-
pyfemtet/FemtetPJTSample/gau_ex08_parametric.py,sha256=B-ibQDodTLcJ-wc8sNVb1Dxae2ksL6Fns3uNBRU7s5g,1799
|
|
9
|
-
pyfemtet/FemtetPJTSample/her_ex40_parametric.femprj,sha256=ZFQ1Rl31dmLhYW__yahRYLejKw5DdccPGdpg67CWlS0,126336
|
|
10
|
-
pyfemtet/FemtetPJTSample/her_ex40_parametric.py,sha256=B5PQoh71Q3KN2CyLU1gP_Yh9g3o6poi0HFasWzHQ_vk,5144
|
|
11
|
-
pyfemtet/FemtetPJTSample/wat_ex14_parallel_parametric.py,sha256=UfhJffuXyhzdIWNpOrpV6xLTK1fuVvgyhlyg4Rp-628,2148
|
|
12
|
-
pyfemtet/FemtetPJTSample/wat_ex14_parametric.femprj,sha256=pxacKe0NPNUPAcxqo2cATFApsMKiVt2g2e_FOk4fpjA,172895
|
|
13
|
-
pyfemtet/FemtetPJTSample/wat_ex14_parametric.py,sha256=LGbWxCek0Ad2YrDCKykiQkE3aIypM4g8P3mLd_2anEE,2052
|
|
14
|
-
pyfemtet/__init__.py,sha256=Y-I6FXKes4hB39WcBm3HZ1OCtCWiErPB6YZ-YSgexuE,21
|
|
15
|
-
pyfemtet/core.py,sha256=3lqfBGJ5IuKz2Nqj5pRo7YQqKwx_0ZDL72u95Ur_1p0,1386
|
|
16
|
-
pyfemtet/dispatch_extensions.py,sha256=MhWiUXVt2Cq8vDeajMK4SrajjiAmb4m2fK8gXwHLrWA,16177
|
|
17
|
-
pyfemtet/logger.py,sha256=JYD0FvzijMS2NvZN7VT7vZA5hqtHEkvS93AHlIMDePw,2507
|
|
18
|
-
pyfemtet/opt/__init__.py,sha256=_P8unESvqCRD5pmuo6-5yo7BbrPi7c0aE6UZpqUD-_I,596
|
|
19
|
-
pyfemtet/opt/_femopt.py,sha256=mkawFpY0UXENeJYuH2mkLpNgUncIWY3QYMHUj-lL-4o,20602
|
|
20
|
-
pyfemtet/opt/_femopt_core.py,sha256=bCSb1XvqeEfX6T2Z24eLI8nIa82omy8_Pnf5HXEmEsQ,24361
|
|
21
|
-
pyfemtet/opt/interface/__init__.py,sha256=qz5BszPuU3jZIoDnPjkPDAgvgHLlx1sYhuqh5ID798k,480
|
|
22
|
-
pyfemtet/opt/interface/_base.py,sha256=lDjdvKYmBMxSc7SfoWSu91qVijGaQ2Ng-0C7z_f4eFM,2079
|
|
23
|
-
pyfemtet/opt/interface/_femtet.py,sha256=VzwJ4srviYIb9X4HNDx1_W2w2xUpNYBxa928qBZpdAc,24439
|
|
24
|
-
pyfemtet/opt/interface/_femtet_with_nx/__init__.py,sha256=-6W2g2FDEcKzGHmI5KAKQe-4U5jDpMj0CXuma-GZca0,83
|
|
25
|
-
pyfemtet/opt/interface/_femtet_with_nx/_interface.py,sha256=OU0nYmePEVKsjplokisfyuaepB-PkL6E-cwCiIhXNS0,4192
|
|
26
|
-
pyfemtet/opt/interface/_femtet_with_nx/update_model.py,sha256=t0AB7mKY7rmrI_9stP1-5qhzmugEQ19DnZ4CCrCdTSw,2856
|
|
27
|
-
pyfemtet/opt/interface/_femtet_with_sldworks.py,sha256=t3CZ-ni2kXBpbCdr9C5xEc2GHgW8LscJNMV97wJRnTk,6515
|
|
28
|
-
pyfemtet/opt/opt/__init__.py,sha256=eQh-7PJN2YEUbHZnjinbeIyb0bk1wSh76TaEAa2l8SU,191
|
|
29
|
-
pyfemtet/opt/opt/_base.py,sha256=aO71a8lIHHb5xIEoIu7oO_maynrNIEHfwt4uFFOUY58,7101
|
|
30
|
-
pyfemtet/opt/opt/_optuna.py,sha256=TWtp9auU6GBWtEJVOuo8aWSvLcCHCUNUyOQRnqyln4I,9996
|
|
31
|
-
pyfemtet/opt/visualization/__init__.py,sha256=PUCHoZnuZrHjTd0QQQBgzWkCpKY2noBPTvi-lyvxQyw,193
|
|
32
|
-
pyfemtet/opt/visualization/_graphs.py,sha256=G6HaoGD3GpuwXih1nuTeFQMD0zv4jrhogedP9hxaG1c,5306
|
|
33
|
-
pyfemtet/opt/visualization/_monitor.py,sha256=WcbuMjnp5LiybwCYBnJ78ju2h7sBJJtqUf1CbUacfXI,42104
|
|
34
|
-
pyfemtet-0.4.2.dist-info/LICENSE,sha256=sVQBhyoglGJUu65-BP3iR6ujORI6YgEU2Qm-V4fGlOA,1485
|
|
35
|
-
pyfemtet-0.4.2.dist-info/METADATA,sha256=Dl3D0ipVFiUvEwcDOMbp5c8N3gPvLzjvg7Wuc7ahrCA,1848
|
|
36
|
-
pyfemtet-0.4.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
37
|
-
pyfemtet-0.4.2.dist-info/entry_points.txt,sha256=E_NUq8BEuKLM3z6Ou0sh6HyvaKE5O6NBDlmO-wgEGaQ,67
|
|
38
|
-
pyfemtet-0.4.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|