Skip to content

Commit cc670d1

Browse files
committed
add 3rd dimension for optimization
1 parent 91b568f commit cc670d1

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

hct/hydrodynamic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,8 +304,8 @@ def calc_volume_flow(fan_name: str, geometry: Geometry, plot: bool = False, figu
304304
plt.plot(fan_cubic_meter_second, np.array(result_list_delta_p_total), label=r'Heat sink', color=colors()["blue"])
305305
plt.plot(fan_cubic_meter_second, fan_pressure_drop_pascal, label="Fan", color=colors()["orange"]) # : {fan_name.replace('.csv', '')}
306306
plt.plot(intersection_volume_flow, intersection_pressure, color=colors()["red"], marker='o')
307-
plt.xlabel('Volume flow im m³/s')
308-
plt.ylabel(r'Pressure drop $\Delta p$ in Pa')
307+
plt.xlabel('Volume flow / (m³/s)')
308+
plt.ylabel(r'Pressure drop $\Delta p$ / Pa')
309309
plt.grid()
310310
plt.legend()
311311
plt.tight_layout()

hct/optimization.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,12 @@ def objective(trial: optuna.Trial, config: OptimizationParameters) -> tuple:
4646
if geometry.fin_distance_s <= 0.1e-3:
4747
return float('nan'), float('nan')
4848

49-
if length_l * width_b < config.area_min:
50-
return float('nan'), float('nan')
51-
5249
try:
50+
area = width_b * length_l
51+
52+
if config.number_directions == 2 and area < config.area_min:
53+
return float('nan'), float('nan')
54+
5355
volume_flow_v_dot, pressure = calc_volume_flow(fan_name, geometry, plot=False)
5456

5557
if np.isnan(volume_flow_v_dot):
@@ -59,15 +61,19 @@ def objective(trial: optuna.Trial, config: OptimizationParameters) -> tuple:
5961
# weight = calc_weight_heat_sink(geometry, constants)
6062
total_volume = calc_total_volume(geometry, fan_name)
6163

62-
return total_volume, r_th_sa
64+
if config.number_directions == 2:
65+
return total_volume, r_th_sa
66+
elif config.number_directions == 3:
67+
return total_volume, r_th_sa, area
6368
except:
64-
return float('nan'), float('nan')
69+
if config.number_directions == 2:
70+
return float('nan'), float('nan')
71+
elif config.number_directions == 3:
72+
return float('nan'), float('nan'), float('nan')
6573

6674
@staticmethod
67-
def start_proceed_study(config: OptimizationParameters, number_trials: int,
68-
storage: str = 'sqlite',
69-
sampler=optuna.samplers.NSGAIIISampler(),
70-
) -> None:
75+
def start_proceed_study(config: OptimizationParameters, number_trials: int, storage: str = 'sqlite',
76+
sampler=optuna.samplers.NSGAIIISampler()) -> None:
7177
"""Proceed a study which is stored as sqlite database.
7278
7379
:param number_trials: Number of trials adding to the existing study
@@ -81,6 +87,8 @@ def start_proceed_study(config: OptimizationParameters, number_trials: int,
8187
"""
8288
if os.path.exists(f"{config.heat_sink_optimization_directory}/{config.heat_sink_study_name}.sqlite3"):
8389
print("Existing study found. Proceeding.")
90+
else:
91+
os.makedirs(config.heat_sink_optimization_directory, exist_ok=True)
8492

8593
# introduce study in storage, e.g. sqlite or mysql
8694
if storage == 'sqlite':
@@ -111,7 +119,12 @@ def start_proceed_study(config: OptimizationParameters, number_trials: int,
111119
print("abort...")
112120
return None
113121

114-
directions = ['minimize', 'minimize']
122+
if config.number_directions == 2:
123+
directions = ['minimize', 'minimize']
124+
elif config.number_directions == 3:
125+
directions = ['minimize', 'minimize', 'minimize']
126+
else:
127+
logging.error(f"number_directions to optimize must be 2 or 3, but it is {config.number_directions}.")
115128

116129
func = lambda trial: Optimization.objective(trial, config)
117130
optuna.logging.set_verbosity(optuna.logging.ERROR)

hct/thermal_dataclasses.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ class Constants:
4242

4343
@dataclass
4444
class OptimizationParameters:
45-
"""Define optimization parameters."""
45+
"""Define optimization parameters.
46+
47+
2 directions: Optimize for minimum volume and minimum R_th,
48+
3 directions: Optimize for minimum volume, minimum R_th and minimum surface area A_min.
49+
"""
4650

4751
# general parameters
4852
heat_sink_study_name: str
@@ -61,6 +65,7 @@ class OptimizationParameters:
6165
t_ambient: float
6266

6367
# constraints
68+
number_directions: int
6469
area_min: float
6570

6671

0 commit comments

Comments
 (0)