-
Notifications
You must be signed in to change notification settings - Fork 15
Open
Description
There is an apparent offset in the winding arrangement in the bottom window when using a Vertical Stacked winding scheme
vww_top.set_interleaved_winding(winding1, 24, winding2, 0, fmt.InterleavedWindingScheme.**VerticalStacked**)
vww_bot.set_interleaved_winding(winding1, 38, winding2, 9, fmt.InterleavedWindingScheme.**VerticalStacked**)
To Reproduce, here is the code:
import femmt as fmt
import os
def basic_example_transformer_stacked(onelab_folder: str = None, show_visual_outputs: bool = True,
is_test: bool = False):
def example_thermal_simulation(show_thermal_visual_outputs: bool = True, flag_insulation: bool = True):
# Thermal simulation:
# The losses calculated by the magnetics simulation can be used to calculate the heat distribution of the
# given magnetic component. In order to use the thermal simulation, thermal conductivities for each material
# can be entered as well as a boundary temperature which will be applied on the boundary of the
# simulation (dirichlet boundary condition).
# The case parameter sets the thermal conductivity for a case which will be set around the core.
# This could model some case in which the transformer is placed in together with a set potting material.
thermal_conductivity_dict = {
"air": 0.0263,
"case": { # epoxy resign
"top": 1.54,
"top_right": 1.54,
"right": 1.54,
"bot_right": 1.54,
"bot": 1.54
},
"core": 5, # ferrite
"winding": 400, # copper
"air_gaps": 180, # aluminium nitride
"insulation": 0.42 if flag_insulation else None # polyethylene
}
# Here the case size can be determined
case_gap_top = 0.002
case_gap_right = 0.0025
case_gap_bot = 0.002
# Here the boundary temperatures can be set, currently it is set to 20°C (around 293°K).
# This does not change the results of the simulation (at least when every boundary is set equally)
# but will set the temperature offset.
boundary_temperatures = {
"value_boundary_top": 20,
"value_boundary_top_right": 20,
"value_boundary_right_top": 20,
"value_boundary_right": 20,
"value_boundary_right_bottom": 20,
"value_boundary_bottom_right": 20,
"value_boundary_bottom": 20
}
# Here the boundary sides can be turned on (1) or off (0)
# By turning off the flag a neumann boundary will be applied at this point with heat flux = 0
boundary_flags = {
"flag_boundary_top": 0,
"flag_boundary_top_right": 0,
"flag_boundary_right_top": 1,
"flag_boundary_right": 1,
"flag_boundary_right_bottom": 1,
"flag_boundary_bottom_right": 1,
"flag_boundary_bottom": 1
}
# In order for the thermal simulation to work an electro_magnetic simulation has to run before.
# The em-simulation will create a file containing the losses.
# When the losses file is already created and contains the losses for the current model, it is enough to
# run geo.create_model in order for the thermal simulation to work (geo.single_simulation is not needed).
# Obviously when the model is modified and the losses can be out of date and therefore the
# geo.single_simulation needs to run again.
geo.thermal_simulation(thermal_conductivity_dict, boundary_temperatures, boundary_flags, case_gap_top,
case_gap_right, case_gap_bot, show_thermal_visual_outputs,
color_scheme=fmt.colors_ba_jonas, colors_geometry=fmt.colors_geometry_ba_jonas,
flag_insulation=flag_insulation)
example_results_folder = os.path.join(os.path.dirname(__file__), "example_results")
if not os.path.exists(example_results_folder):
os.mkdir(example_results_folder)
working_directory = os.path.join(example_results_folder, os.path.splitext(os.path.basename(__file__))[0])
if not os.path.exists(working_directory):
os.mkdir(working_directory)
# 1. chose simulation type
geo = fmt.MagneticComponent(component_type=fmt.ComponentType.IntegratedTransformer,
working_directory=working_directory, verbosity=fmt.Verbosity.ToConsole, is_gui=is_test)
# This line is for automated pytest running on GitHub only. Please ignore this line!
if onelab_folder is not None:
geo.file_data.onelab_folder_path = onelab_folder
# 2. set core parameters
core_dimensions = fmt.dtos.StackedCoreDimensions(core_inner_diameter=0.0149, window_w=0.01105, window_h_top=0.0082,
window_h_bot=0.019040108947520836)
core = fmt.Core(core_type=fmt.CoreType.Stacked, core_dimensions=core_dimensions,
material=fmt.Material.N95, temperature=100, frequency=200000,
permeability_datasource=fmt.MaterialDataSource.Measurement,
permeability_datatype=fmt.MeasurementDataType.ComplexPermeability,
permeability_measurement_setup=fmt.MeasurementSetup.LEA_LK,
permittivity_datasource=fmt.MaterialDataSource.Measurement,
permittivity_datatype=fmt.MeasurementDataType.ComplexPermittivity,
permittivity_measurement_setup=fmt.MeasurementSetup.LEA_LK, mdb_verbosity=fmt.Verbosity.Silent)
geo.set_core(core)
# 3. set air gap parameters
air_gaps = fmt.AirGaps(fmt.AirGapMethod.Stacked, core)
air_gaps.add_air_gap(fmt.AirGapLegPosition.CenterLeg, 0.0018582395770570534, stacked_position=fmt.StackedPosition.Top)
air_gaps.add_air_gap(fmt.AirGapLegPosition.CenterLeg, 0.0005611610617151149, stacked_position=fmt.StackedPosition.Bot)
geo.set_air_gaps(air_gaps)
# 4. set insulations
insulation = fmt.Insulation(flag_insulation=False)
insulation.add_core_insulations(0.0015, 0.0015, 0.0015, 0.0015) # [bot, top, left, right]
insulation.add_winding_insulations([[0.0002, 0.0002],
[0.0002, 0.0002]])
geo.set_insulation(insulation)
winding_window_top, winding_window_bot = fmt.create_stacked_winding_windows(core, insulation)
vww_top = winding_window_top.split_window(fmt.WindingWindowSplit.NoSplit)
vww_bot = winding_window_bot.split_window(fmt.WindingWindowSplit.NoSplit)
# 6. set conductor parameters
winding1 = fmt.Conductor(0, fmt.Conductivity.Copper)
winding1.set_litz_round_conductor(0.00055, 60, 5e-05, None, fmt.ConductorArrangement.Square)
winding2 = fmt.Conductor(1, fmt.Conductivity.Copper)
# winding2.set_solid_round_conductor(1e-3, fmt.ConductorArrangement.Square)
winding2.set_litz_round_conductor(1e-3, 405, 0.035e-3, None, fmt.ConductorArrangement.Square)
# 7. add conductor to vww and add winding window to MagneticComponent
vww_top.set_interleaved_winding(winding1, 24, winding2, 0, fmt.InterleavedWindingScheme.VerticalStacked)
vww_bot.set_interleaved_winding(winding1, 38, winding2, 9, fmt.InterleavedWindingScheme.VerticalStacked)
geo.set_winding_windows([winding_window_top, winding_window_bot])
# 8. start simulation with given frequency, currents and phases
geo.create_model(freq=200000, pre_visualize_geometry=show_visual_outputs)
# geo.single_simulation(freq=200000, current=[3.5, 16], phi_deg=[0, 180],
# show_fem_simulation_results=show_visual_outputs)
if __name__ == "__main__":
basic_example_transformer_stacked(show_visual_outputs=True)
Metadata
Metadata
Assignees
Labels
No labels
