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

app = designer.GetApplication()

def createFunctionObjSin(amp, freq, phase):
    """関数を生成する(正弦波)"""
    funcObjFac = app.FunctionFactory()
    funcObj = funcObjFac.Sin(amp, freq, phase, False)
    return funcObj

def createDataSetHarmonic():
    """高調波に設定するデータセットを作成"""
    dataMng = app.GetDataManager()
    dataSet = dataMng.CreatePointArray(u"harmonic_amplitudes", u"val")
    refarray = [[0 for i in range(2)] for j in range(4)]
    refarray[0][0] = 2  # 2次の振幅
    refarray[0][1] = 0  # 2次の相対位相
    refarray[1][0] = 1  # 3次
    refarray[1][1] = 60
    refarray[2][0] = 0  # 4次
    refarray[2][1] = 0
    refarray[3][0] = 1  # 5次
    refarray[3][1] = 120
    dataSet.SetTable(refarray)
    return dataSet

def createFunctionObjHarmonic(amp, freq, phase):
    """関数を生成する(高調波)"""
    funcObjFac = app.FunctionFactory()
    funcObj = funcObjFac.Harmonic(amp, freq, phase)
    return funcObj

def createFunctionObjConstant(amp):
    """関数を生成する(一定値)"""
    funcObjFac = app.FunctionFactory()
    funcObj = funcObjFac.Constant(20)
    return funcObj

def createFunctionObjExp(amp, initial, time):
    """関数を生成する(指数関数)"""
    funcObjFac = app.FunctionFactory()
    funcObj = funcObjFac.Exp(amp, initial, time)
    return funcObj

study = app.GetCurrentStudy()
amp = 3.46
freq = 315
phase = 0
isRMS = True
functionObj = createFunctionObjSin(amp, freq, phase)
cond = study.GetCondition(u"current_1")
cond.SetFunction(functionObj)

amp = 20
freq = 60
dataSet = createDataSetHarmonic()
functionObj = createFunctionObjHarmonic(amp, freq, phase)
functionObj.SetTableProperty(u"Harmonics", dataSet)
cond = study.GetCondition(u"current_density_1")
cond.SetFunction(functionObj)

circuit = study.GetCircuit()
compo = circuit.GetComponent(u"V1")
functionObj = createFunctionObjConstant(amp)
compo.SetFunction(functionObj)

compo = circuit.GetComponent(u"V2")
initial = 10
time = 5
functionObj = createFunctionObjExp(amp, initial, time)
compo.SetFunction(functionObj)
