Coverage for fiqus/getdp_runners/RunGetdpCCT.py: 97%
60 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-10-30 01:48 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2025-10-30 01:48 +0000
1import os
2import timeit
3from pathlib import Path
4import subprocess
6import gmsh
8from fiqus.utils.Utils import FilesAndFolders as uff
9from fiqus.utils.Utils import GmshUtils
10from fiqus.data.RegionsModelFiQuS import RegionsModel
11from fiqus.pro_assemblers.ProAssembler import ASS_PRO as ass_pro
14class RunGetdpCCT:
15 def __init__(self, fdm, GetDP_path: dict = None, verbose=True):
16 """
17 Class to preparing brep files by adding terminals.
18 :param fdm: FiQuS data model
19 :param verbose: If True more information is printed in python console.
20 """
21 self.fdm = fdm
22 self.cctdm = fdm.magnet
23 self.GetDP_path = GetDP_path
24 self.model_folder = os.path.join(os.getcwd())
25 self.magnet_name = fdm.general.magnet_name
26 self.mesh_folder = Path(self.model_folder).parent
27 self.verbose = verbose
28 self.cctrm = uff.read_data_from_yaml(os.path.join(self.model_folder, f'{self.magnet_name}.regions'), RegionsModel)
29 self.ap = ass_pro(os.path.join(self.model_folder, self.magnet_name))
30 self.gu = GmshUtils(self.model_folder, self.verbose)
31 self.gu.initialize(verbosity_Gmsh=fdm.run.verbosity_Gmsh)
32 self.pos_names = []
33 self.call_method = 'subprocess'
34 # for variable, volume, file_ext in zip(self.cctdm.solve.variables, self.cctdm.solve.volumes, self.cctdm.solve.file_exts):
35 # self.pos_names.append(f'{variable}_{volume}.{file_ext}')
37 def assemble_pro(self):
38 if self.verbose:
39 print('Assembling Pro File Started')
40 start_time = timeit.default_timer()
41 if self.verbose:
42 print('Assembling pro file')
43 self.ap.assemble_combined_pro(template=self.cctdm.solve.pro_template, rm=self.cctrm, dm=self.cctdm, mf=f"{os.path.join(self.mesh_folder, self.magnet_name)}.msh")
44 if self.verbose:
45 print(f'Assembling Pro File Took {timeit.default_timer() - start_time:.2f} s')
47 def solve_and_postprocess(self, gui=False):
48 command = "-solve -v2 -pos"
49 model_file = 'Center_line.csv'
50 self._run(command=command, model_file=model_file, gui=gui)
52 def postprocess(self, gui=False):
53 command = "-v2 -pos"
54 model_file = 'Test.dat'
55 self._run(command=command, model_file=model_file, gui=gui)
57 def _run(self, command, model_file, gui=False):
58 if self.verbose:
59 print('Solving Started !!!')
60 start_time = timeit.default_timer()
61 mpi_prefix = []
62 res = 'MagDynAVComplex'
63 post_op = 'Get_LocalFields'
65 if self.call_method == 'onelab':
66 gmsh.onelab.run(f"{self.magnet_name}", f"{self.GetDP_path} {os.path.join(self.model_folder, self.magnet_name)}.pro {command} -msh {os.path.join(self.mesh_folder, self.magnet_name)}.msh")
67 elif self.call_method == 'subprocess':
68 command = ["-solve", res, "-v2", "-pos", post_op, "-verbose", str(self.fdm.run.verbosity_GetDP), '-sub_pc_type lu', '-pc_type lu', '-pc_factor_mat_solver_type mumps']
69 subprocess.call(mpi_prefix + [f"{self.GetDP_path}", f"{os.path.join(self.model_folder, self.magnet_name)}.pro"] + command + [f"-msh {os.path.join(self.mesh_folder, self.magnet_name)}.msh"])
71 self.model_file = os.path.join(self.model_folder, model_file)
72 if self.verbose:
73 print(''
74 f'Solving Took {timeit.default_timer() - start_time:.2f} s !!!'
75 '')
76 if gui:
77 self.gu.launch_interactive_GUI()
78 else:
79 gmsh.clear()
80 gmsh.finalize()