Coverage for fiqus/getdp_runners/RunGetdpCCT.py: 98%

52 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2024-05-20 03:24 +0200

1import os 

2import timeit 

3from pathlib import Path 

4 

5import gmsh 

6 

7from fiqus.utils.Utils import FilesAndFolders as uff 

8from fiqus.utils.Utils import GmshUtils 

9from fiqus.data.RegionsModelFiQuS import RegionsModel 

10from fiqus.pro_assemblers.ProAssembler import ASS_PRO as ass_pro 

11 

12 

13class RunGetdpCCT: 

14 def __init__(self, fdm, settings: dict = None, verbose=True): 

15 """ 

16 Class to preparing brep files by adding terminals. 

17 :param fdm: FiQuS data model 

18 :param verbose: If True more information is printed in python console. 

19 """ 

20 self.cctdm = fdm.magnet 

21 self.settings = settings 

22 self.model_folder = os.path.join(os.getcwd()) 

23 self.magnet_name = fdm.general.magnet_name 

24 self.mesh_folder = Path(self.model_folder).parent 

25 self.verbose = verbose 

26 self.cctrm = uff.read_data_from_yaml(os.path.join(self.model_folder, f'{self.magnet_name}.regions'), RegionsModel) 

27 self.ap = ass_pro(os.path.join(self.model_folder, self.magnet_name)) 

28 self.gu = GmshUtils(self.model_folder, self.verbose) 

29 self.gu.initialize() 

30 self.pos_names = [] 

31 # for variable, volume, file_ext in zip(self.cctdm.solve.variables, self.cctdm.solve.volumes, self.cctdm.solve.file_exts): 

32 # self.pos_names.append(f'{variable}_{volume}.{file_ext}') 

33 

34 def assemble_pro(self): 

35 if self.verbose: 

36 print('Assembling Pro File Started') 

37 start_time = timeit.default_timer() 

38 if self.verbose: 

39 print('Assembling pro file') 

40 self.ap.assemble_combined_pro(template=self.cctdm.solve.pro_template, rm=self.cctrm, dm=self.cctdm) 

41 if self.verbose: 

42 print(f'Assembling Pro File Took {timeit.default_timer() - start_time:.2f} s') 

43 

44 def solve_and_postprocess(self, gui=False): 

45 command = "-solve -v2 -pos" 

46 model_file = 'Center_line.csv' 

47 self._run(command=command, model_file=model_file, gui=gui) 

48 

49 def postprocess(self, gui=False): 

50 command = "-v2 -pos" 

51 model_file = 'Test.dat' 

52 self._run(command=command, model_file=model_file, gui=gui) 

53 

54 def _run(self, command, model_file, gui=False): 

55 if self.verbose: 

56 print('Solving Started !!!') 

57 start_time = timeit.default_timer() 

58 getdp_binary = self.settings['GetDP_path'] 

59 gmsh.onelab.run(f"{self.magnet_name}", f"{getdp_binary} {os.path.join(self.model_folder, self.magnet_name)}.pro {command} -msh {os.path.join(self.mesh_folder, self.magnet_name)}.msh") 

60 gmsh.onelab.setChanged("GetDP", 0) 

61 

62 self.model_file = os.path.join(self.model_folder, model_file) 

63 if self.verbose: 

64 print('' 

65 f'Solving Took {timeit.default_timer() - start_time:.2f} s !!!' 

66 '') 

67 if gui: 

68 self.gu.launch_interactive_GUI() 

69 else: 

70 gmsh.clear() 

71 gmsh.finalize()