Coverage for mpcforces_extractor\force_extractor.py: 80%
46 statements
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-10 21:25 +0100
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-10 21:25 +0100
1import os
2import time
3from typing import Optional
4from mpcforces_extractor.reader.modelreaders import FemFileReader
5from mpcforces_extractor.reader.mpcforces_reader import MPCForcesReader
6from mpcforces_extractor.datastructure.entities import Element
7from mpcforces_extractor.datastructure.rigids import MPC
8from mpcforces_extractor.datastructure.subcases import Subcase
11class MPCForceExtractor:
12 """
13 This class is used to extract the forces from the MPC forces file
14 and calculate the forces for each rigid element by property
15 """
17 def __init__(
18 self, fem_file_path, mpcf_file_path, output_folder: Optional[str] = None
19 ):
20 self.fem_file_path: str = fem_file_path
21 self.mpcf_file_path: str = mpcf_file_path
22 self.output_folder: str = output_folder
23 self.reader: FemFileReader = None
24 self.mpc_forces_reader = None
25 self.subcases = []
26 # reset the graph (very important) and the MPCs
27 Element.reset_graph()
28 MPC.reset()
29 Subcase.reset()
31 if output_folder:
32 # create output folder if it does not exist, otherwise delete the content
33 if os.path.exists(output_folder):
34 for file in os.listdir(output_folder):
35 file_path = os.path.join(output_folder, file)
36 try:
37 if os.path.isfile(file_path):
38 os.unlink(file_path)
39 except Exception as e:
40 print(e)
41 else:
42 os.makedirs(output_folder, exist_ok=True)
44 def build_fem_and_subcase_data(self, block_size: int) -> None:
45 """
46 This method reads the FEM File and the MPCF file and extracts the forces
47 in a dictory with the rigid element as the key and the property2forces dict as the value
48 """
49 if self.__mpcf_file_exists():
50 self.mpc_forces_reader = MPCForcesReader(self.mpcf_file_path)
51 self.mpc_forces_reader.build_subcases()
52 self.subcases = Subcase.subcases
54 self.reader = FemFileReader(self.fem_file_path, block_size)
55 print("Reading the FEM file")
56 start_time = time.time()
57 self.reader.create_entities()
59 print("..took ", round(time.time() - start_time, 2), "seconds")
60 print("Building the mpcs")
61 start_time = time.time()
62 self.reader.get_rigid_elements()
63 print("..took ", round(time.time() - start_time, 2), "seconds")
65 self.reader.get_loads()
67 def __mpcf_file_exists(self) -> bool:
68 """
69 This method checks if the MPC forces file exists
70 """
71 return os.path.exists(self.mpcf_file_path) and os.path.isfile(
72 self.mpcf_file_path
73 )