@@ -267,12 +267,7 @@ def export_mesh_stats(self, setup, variations="", output_file=None, setup_type="
267267 return str (output_file )
268268
269269 @pyaedt_function_handler ()
270- def edit_sources (
271- self ,
272- cg = None ,
273- acrl = None ,
274- dcrl = None ,
275- ):
270+ def edit_sources (self , cg = None , acrl = None , dcrl = None , harmonic_loss = None ):
276271 """Set up the source loaded for Q3D or Q2D in multiple sources simultaneously.
277272
278273 Parameters
@@ -293,6 +288,12 @@ def edit_sources(
293288 - 1 Magnitude to set up ``0deg`` as the default
294289 - 2 Values tuple or list (magnitude and phase)
295290
291+ harmonic_loss: dict, optional
292+ Dictionary of real and imaginary currents for each source in order to compute harmonic loss.
293+ Dictionary values can be:
294+ - 1 Real part of the current
295+ - 2 Imag part of the current
296+
296297 Returns
297298 -------
298299 bool
@@ -306,11 +307,17 @@ def edit_sources(
306307 >>> sources_acrl = {"Box1:Source1": ("5A", "0deg")}
307308 Values can also be passed as lists instead of tuples.
308309 >>> sources_dcrl = {"Box1_1:Source2": ["5V", "0deg"]}
309- >>> q3d.edit_sources(cg=sources_cg, acrl=sources_acrl, dcrl=sources_dcrl)
310+ Assuming to have two TAB files containing respectively the real and imaginary parts
311+ of the current for the source ``Box1:Source1``.
312+ >>> real_data_set = q3d.import_dataset1d("real_dataset_file_path", name="real_dataset")
313+ >>> imag_data_set = q3d.import_dataset1d("imag_dataset_file_path", name="imag_dataset")
314+ >>> harmonic_loss = {"Box1:Source1": (real_data_set.name, imag_data_set.name)}
315+ >>> q3d.edit_sources(cg=sources_cg, acrl=sources_acrl, dcrl=sources_dcrl, harmonic_loss=harmonic_loss)
310316 """
311317 settings_ac = []
312318 settings_cg = []
313319 settings_dc = []
320+ settings_harmonic_loss = []
314321 if cg :
315322 source_list = ["NAME:Source Names" ]
316323 if self .default_solution_type == "Q3D Extractor" :
@@ -399,8 +406,36 @@ def edit_sources(
399406
400407 settings_dc = ["NAME:DC" , "Value Type:=" , magnitude_unit , source_list , magnitude_list , phase_list ]
401408
409+ if harmonic_loss :
410+ source_list = ["NAME:Source Names" ]
411+ source_real_dataset_names = ["NAME:Source real dataset names" ]
412+ source_imag_dataset_names = ["NAME:Source imag dataset names" ]
413+ sources = [source .name for source in self .excitations_by_type ["Source" ]]
414+
415+ for key , vals in harmonic_loss .items ():
416+ if key not in sources and key not in self .get_all_sources ():
417+ self .logger .error ("Not existing source " + key )
418+ return False
419+
420+ source_list .append (key )
421+ if not isinstance (vals , (tuple , list )):
422+ self .logger .error ("Real and Imag part of current must be provided" )
423+ return False
424+ else :
425+ source_real_dataset_names .append (vals [0 ])
426+ source_imag_dataset_names .append (vals [1 ])
427+
428+ settings_harmonic_loss = [
429+ "NAME:HarmonicLoss" ,
430+ "Value Type:=" ,
431+ "A" ,
432+ source_list ,
433+ source_real_dataset_names ,
434+ source_imag_dataset_names ,
435+ ]
436+
402437 if self .default_solution_type == "Q3D Extractor" :
403- self .osolution .EditSources (settings_ac , settings_cg , settings_dc )
438+ self .osolution .EditSources (settings_ac , settings_cg , settings_dc , settings_harmonic_loss )
404439 else :
405440 self .osolution .EditSources (settings_cg , settings_ac )
406441 return True
0 commit comments