From 909667ac8eb5aa40fb0a04e6ee2c092d903cc41b Mon Sep 17 00:00:00 2001 From: gituser789 <62549000+gituser789@users.noreply.github.com> Date: Wed, 11 Mar 2026 07:41:26 +0100 Subject: [PATCH 1/3] fix missing factor 2 in reluctance model winding loss calculation, as RMS is needed but peak currents are given --- femmt/optimization/io.py | 3 ++- femmt/optimization/ito.py | 14 +++++++------- femmt/optimization/sto.py | 10 +++++----- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/femmt/optimization/io.py b/femmt/optimization/io.py index 444b13ac..ff7adfe4 100644 --- a/femmt/optimization/io.py +++ b/femmt/optimization/io.py @@ -324,7 +324,8 @@ def single_reluctance_model_simulation(reluctance_input: IoReluctanceModelInput) iso_core_top=reluctance_input.insulations.core_top, iso_core_bot=reluctance_input.insulations.core_bot, frequency=fft_frequency, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) - p_winding += proximity_factor_assumption * winding_dc_resistance * reluctance_input.fft_amplitude_list[count] ** 2 + # factor 0.5 due to RMS value needed, but fft returns peak values + p_winding += proximity_factor_assumption * winding_dc_resistance * 0.5 * reluctance_input.fft_amplitude_list[count] ** 2 p_loss = p_winding + p_core diff --git a/femmt/optimization/ito.py b/femmt/optimization/ito.py index 12cd896b..1ba105da 100644 --- a/femmt/optimization/ito.py +++ b/femmt/optimization/ito.py @@ -378,8 +378,8 @@ def single_reluctance_model_simulation(reluctance_input: ItoReluctanceModelInput r_1=reluctance_input.insulations.iso_window_top_core_left, frequency=fft_frequency, winding_area=winding_area_1_top, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) - - p_winding_1_top += proximity_factor_1_top * primary_resistance_top * reluctance_input.fft_amplitude_list_1[count] ** 2 + # factor 0.5 due to RMS value needed, but fft returns peak values + p_winding_1_top += proximity_factor_1_top * primary_resistance_top * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 if number_bot_prim_turns_per_column > reluctance_input.turns_1_bot: winding_area_1_bot = 2 * reluctance_input.litz_dict_1["conductor_radii"] * \ @@ -409,9 +409,9 @@ def single_reluctance_model_simulation(reluctance_input: ItoReluctanceModelInput window_h=reluctance_input.window_h_bot, iso_core_top=reluctance_input.insulations.iso_window_bot_core_top, iso_core_bot=reluctance_input.insulations.iso_window_bot_core_bot, frequency=fft_frequency, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) - - p_winding_1_bot_inner = proximity_factor_1_bot_inner * primary_resistance_bot_inner * reluctance_input.fft_amplitude_list_1[count] ** 2 - p_winding_1_bot_outer = proximity_factor_1_bot_outer * primary_resistance_bot_outer * reluctance_input.fft_amplitude_list_1[count] ** 2 + # factor 0.5 due to RMS value needed, but fft returns peak values + p_winding_1_bot_inner = proximity_factor_1_bot_inner * primary_resistance_bot_inner * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 + p_winding_1_bot_outer = proximity_factor_1_bot_outer * primary_resistance_bot_outer * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 p_winding_1_bot += p_winding_1_bot_inner + p_winding_1_bot_outer @@ -421,8 +421,8 @@ def single_reluctance_model_simulation(reluctance_input: ItoReluctanceModelInput litz_wire_name=reluctance_input.litz_wire_name_2, number_turns=reluctance_input.turns_2_bot, window_h=reluctance_input.window_h_bot, iso_core_top=reluctance_input.insulations.iso_window_bot_core_top, iso_core_bot=reluctance_input.insulations.iso_window_bot_core_bot, frequency=fft_frequency, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) - - p_winding_2 += proximity_factor_assumption_2 * secondary_resistance * reluctance_input.fft_amplitude_list_2[count] ** 2 + # factor 0.5 due to RMS value needed, but fft returns peak values + p_winding_2 += proximity_factor_assumption_2 * secondary_resistance * 0.5 * reluctance_input.fft_amplitude_list_2[count] ** 2 p_loss_total = p_hyst + p_winding_1_top + p_winding_1_bot + p_winding_2 diff --git a/femmt/optimization/sto.py b/femmt/optimization/sto.py index 601f28cc..3507c1c3 100644 --- a/femmt/optimization/sto.py +++ b/femmt/optimization/sto.py @@ -472,9 +472,9 @@ def single_reluctance_model_simulation(reluctance_input: StoReluctanceModelInput window_h=reluctance_input.window_h_bot, iso_core_top=reluctance_input.insulations.iso_window_bot_core_top, iso_core_bot=reluctance_input.insulations.iso_window_bot_core_bot, frequency=fft_frequency, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) - - p_winding_1_bot_inner = proximity_factor_1_bot_inner * primary_resistance_bot_inner * reluctance_input.fft_amplitude_list_1[count] ** 2 - p_winding_1_bot_outer = proximity_factor_1_bot_outer * primary_resistance_bot_outer * reluctance_input.fft_amplitude_list_1[count] ** 2 + # factor 0.5 due to RMS value needed, but fft returns peak values + p_winding_1_bot_inner = proximity_factor_1_bot_inner * primary_resistance_bot_inner * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 + p_winding_1_bot_outer = proximity_factor_1_bot_outer * primary_resistance_bot_outer * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 p_winding_1_bot += p_winding_1_bot_inner + p_winding_1_bot_outer @@ -484,8 +484,8 @@ def single_reluctance_model_simulation(reluctance_input: StoReluctanceModelInput litz_wire_name=reluctance_input.litz_wire_name_2, number_turns=reluctance_input.turns_2_bot, window_h=reluctance_input.window_h_bot, iso_core_top=reluctance_input.insulations.iso_window_bot_core_top, iso_core_bot=reluctance_input.insulations.iso_window_bot_core_bot, frequency=fft_frequency, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) - - p_winding_2 += proximity_factor_assumption_2 * secondary_resistance * reluctance_input.fft_amplitude_list_2[count] ** 2 + # factor 0.5 due to RMS value needed, but fft returns peak values + p_winding_2 += proximity_factor_assumption_2 * secondary_resistance * 0.5 * reluctance_input.fft_amplitude_list_2[count] ** 2 p_loss_total = p_hyst + p_winding_1_top + p_winding_1_bot + p_winding_2 From 096702a7d082055862eb6c0f91089e6d480ba9c4 Mon Sep 17 00:00:00 2001 From: gituser789 <62549000+gituser789@users.noreply.github.com> Date: Wed, 11 Mar 2026 07:49:43 +0100 Subject: [PATCH 2/3] fix missing factor 2 in reluctance model winding loss calculation, as RMS is needed but peak currents are given --- femmt/optimization/sto.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/femmt/optimization/sto.py b/femmt/optimization/sto.py index 3507c1c3..690c0df1 100644 --- a/femmt/optimization/sto.py +++ b/femmt/optimization/sto.py @@ -442,7 +442,7 @@ def single_reluctance_model_simulation(reluctance_input: StoReluctanceModelInput frequency=fft_frequency, winding_area=winding_area_1_top, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) - p_winding_1_top += proximity_factor_1_top * primary_resistance_top * reluctance_input.fft_amplitude_list_1[count] ** 2 + p_winding_1_top += proximity_factor_1_top * primary_resistance_top * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 if number_bot_prim_turns_per_column > reluctance_input.turns_1_bot: winding_area_1_bot = 2 * reluctance_input.primary_litz_dict["conductor_radii"] * \ From f545821d7af890eab560e26ef370d5e251b437b3 Mon Sep 17 00:00:00 2001 From: gituser789 <62549000+gituser789@users.noreply.github.com> Date: Wed, 11 Mar 2026 08:05:02 +0100 Subject: [PATCH 3/3] linting --- femmt/optimization/sto.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/femmt/optimization/sto.py b/femmt/optimization/sto.py index 690c0df1..0c22440c 100644 --- a/femmt/optimization/sto.py +++ b/femmt/optimization/sto.py @@ -473,7 +473,7 @@ def single_reluctance_model_simulation(reluctance_input: StoReluctanceModelInput iso_core_top=reluctance_input.insulations.iso_window_bot_core_top, iso_core_bot=reluctance_input.insulations.iso_window_bot_core_bot, frequency=fft_frequency, litz_wire_material_name='Copper', temperature=reluctance_input.temperature) # factor 0.5 due to RMS value needed, but fft returns peak values - p_winding_1_bot_inner = proximity_factor_1_bot_inner * primary_resistance_bot_inner * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 + p_winding_1_bot_inner = proximity_factor_1_bot_inner * primary_resistance_bot_inner * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 p_winding_1_bot_outer = proximity_factor_1_bot_outer * primary_resistance_bot_outer * 0.5 * reluctance_input.fft_amplitude_list_1[count] ** 2 p_winding_1_bot += p_winding_1_bot_inner + p_winding_1_bot_outer