# Copyright (c) 2026 JSOL CORPORATION
#
# 本スクリプトはMITライセンスのもとで公開しています。
# ライセンス全文は以下を参照してください。
# https://www.jmag-international.com/jp/scriptlibrary/jmag_script_library_mit/

app = designer.GetApplication()

def paramItemModifyMinMaxValRange(optTbl, paramDataArray):
    """最適化におけるパラメータ変数範囲の設定、範囲を修正する寸法変数を選択"""
    optTbl.SetParameter(u"engine", u"jsol_moga")
    optTbl.SetParameter(u"jsol_moga_use_range_optimization", True)
    optTbl.SetParameter(u"jsol_moga_use_automatic_parameters_in_range_optimization", True)
    optTbl.SetParameter(u"jsol_moga_expand_range_search", True)
    for paramName, minVal, maxVal, minFlag, maxFlag in paramDataArray:
        optTbl.SetCheckOn(paramName, True)
        paramItem = optTbl.GetParametricItem(paramName)
        paramItem.SetMin(minVal)
        paramItem.SetMax(maxVal)
        # 範囲を修正する寸法変数を選択
        if minFlag: paramItem.SetModifyMinValueRange(minFlag)
        if maxFlag: paramItem.SetModifyMaxValueRange(maxFlag)


study = app.GetCurrentStudy()
optTbl = study.GetOptimizationTable()
paramDataArray = [
    # パラメータの名称、パラメータ最小値、パラメータ最大値、最小値を寸法範囲探索するかどうか、最大値を寸法範囲探索するかどうか
    [u"CS1 (3PhaseCurrentSource): PhaseU", 0, 70, None, None],
    [u"CAD parameters: FBCenterWidth0@Variables", 0.5, 6, True, False],
    [u"CAD parameters: Flux_In2_deg@Variables", 40, 120, False, True],
    [u"CAD parameters: Flux_Out1_deg@Variables", 55, 115, False, False],
    [u"CAD parameters: Flux_Out2_deg@Variables", 45, 125, True, True],
]
paramItemModifyMinMaxValRange(optTbl, paramDataArray)
