Files
2025AsianB/org/chatgpt2/q2_all.py
2025-11-20 21:32:58 +08:00

391 lines
16 KiB
Python

# -----------------------------
# Question 2: Comprehensive Evaluation of PDMS Thin Film Radiative Cooling Performance
# -----------------------------
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import simpson
from scipy.optimize import fsolve
import pandas as pd
from org.use.q1_2 import cs_n, cs_k
# Use previously defined core functions
# from first_question_core import read_split_data, make_strictly_increasing, thin_film_emissivity, cs_n, cs_k
# ==========================
# Improved Physical Parameters and Environmental Conditions
# ==========================
class EnvironmentalConditions:
"""Environmental conditions parameters class"""
def __init__(self):
# Basic environmental parameters
self.T_amb = 25 + 273.15 # Ambient temperature (K)
self.rh = 0.6 # Relative humidity (60%)
self.wind_speed = 1.0 # Wind speed (m/s)
self.cloud_cover = 0.1 # Cloud cover (0-1)
# Solar radiation parameters
self.G_sun_total = 1000 # Total solar irradiance (W/m²)
self.T_sun = 5778 # Sun surface temperature (K)
# Convective heat transfer coefficient (based on wind speed)
self.h_conv = 5 + 3.8 * self.wind_speed # Convective heat transfer coefficient (W/m²·K)
# ==========================
# Improved Radiation Models
# ==========================
def planck_blackbody(wl, T):
"""Planck blackbody spectral radiance (W/(m²·μm·sr))"""
h = 6.62607015e-34
c = 299792458
k = 1.380649e-23
wl_m = wl * 1e-6
numerator = 2 * h * c ** 2 / (wl_m ** 5)
denominator = np.exp(h * c / (wl_m * k * T)) - 1
return numerator / 1e6
def load_AM15_spectrum(wl):
"""Load standard AM1.5 solar spectrum (approximate implementation)"""
solar_spec = np.zeros_like(wl)
# Main characteristics of solar spectrum (simplified model)
mask_visible = (wl >= 0.3) & (wl <= 0.78)
mask_nir = (wl > 0.78) & (wl <= 2.5)
# Visible band (peak at 0.5μm)
if np.any(mask_visible):
wl_vis = wl[mask_visible]
solar_spec[mask_visible] = 1.0 * np.exp(-((wl_vis - 0.5) / 0.2) ** 2)
# Near-infrared band
if np.any(mask_nir):
wl_nir = wl[mask_nir]
solar_spec[mask_nir] = 0.7 * np.exp(-((wl_nir - 1.0) / 0.5) ** 2)
# Normalize to 1000 W/m²
total_power = simpson(solar_spec, wl)
solar_spec = solar_spec * 1000 / total_power
return solar_spec
def atmospheric_transmittance(wl, humidity=0.6):
"""Improved atmospheric transmittance model"""
tau = np.ones_like(wl)
# Atmospheric window 8-13μm (high transmittance with fluctuations)
window_mask = (wl >= 8) & (wl <= 13)
if np.any(window_mask):
wl_window = wl[window_mask]
# Fluctuations within the window, not fixed values
tau_window = 0.85 + 0.1 * np.sin(2 * np.pi * (wl_window - 8) / 2.5)
tau[window_mask] = np.clip(tau_window, 0.7, 0.95)
# Water vapor absorption bands
h2o_bands = [(5.5, 7.5, 0.3), (13.5, 16, 0.4), (16, 20, 0.2)]
for band_start, band_end, absorption in h2o_bands:
band_mask = (wl >= band_start) & (wl <= band_end)
if np.any(band_mask):
tau[band_mask] = tau[band_mask] * (1 - absorption * humidity)
# CO2 absorption band (15μm)
co2_mask = (wl >= 14) & (wl <= 16)
if np.any(co2_mask):
tau[co2_mask] = tau[co2_mask] * 0.3
# O3 absorption band (9.6μm)
o3_mask = (wl >= 9.3) & (wl <= 9.9)
if np.any(o3_mask):
tau[o3_mask] = tau[o3_mask] * 0.5
return tau
def atmospheric_downward_radiation(wl, T_atm, humidity=0.6):
"""Improved atmospheric downward radiation model"""
planck_atm = planck_blackbody(wl, T_atm)
tau_atm = atmospheric_transmittance(wl, humidity)
# Atmospheric emissivity = 1 - transmittance
epsilon_atm = 1 - tau_atm
return planck_atm * epsilon_atm
# ==========================
# Core Cooling Performance Evaluation
# ==========================
def calculate_comprehensive_cooling_metrics(d, env_conditions):
"""Comprehensive cooling performance evaluation"""
# Define calculation wavelength range
wl_calc = np.linspace(0.3, 20, 2000)
# Get material optical properties
n_film = cs_n(wl_calc)
k_film = cs_k(wl_calc)
epsilon = thin_film_emissivity(n_film, k_film, d, wl_calc)
alpha = epsilon # Kirchhoff's law
# Calculate energy components
# 1. Solar radiation absorption
solar_spec = load_AM15_spectrum(wl_calc)
P_sun = simpson(alpha * solar_spec, wl_calc)
# 2. Atmospheric radiation absorption
atm_spec = atmospheric_downward_radiation(wl_calc, env_conditions.T_amb, env_conditions.rh)
P_atm = simpson(alpha * atm_spec, wl_calc)
def radiative_cooling_power(T_film):
planck_film = planck_blackbody(wl_calc, T_film)
# 应该乘以立体角π(对半球积分),不是乘以π
return simpson(epsilon * planck_film, wl_calc) * np.pi
# 4. Initial net cooling power (T_film = T_amb)
P_rad_initial = radiative_cooling_power(env_conditions.T_amb)
P_net_initial = P_rad_initial - (P_sun + P_atm)
# 5. Solve equilibrium temperature
def net_power_balance(T_film):
P_rad = radiative_cooling_power(T_film) # 表面向外辐射
P_atm_absorb = P_atm # 大气辐射吸收(在环境温度下计算)
P_sun_absorb = P_sun # 太阳辐射吸收
P_conv = env_conditions.h_conv * (T_film - env_conditions.T_amb)
# 能量平衡:辐射冷却功率 = 吸收的大气辐射 + 吸收的太阳辐射 + 对流换热
return P_rad - P_atm_absorb - P_sun_absorb - P_conv
try:
T_eq = fsolve(net_power_balance, env_conditions.T_amb - 10)[0]
delta_T = T_eq - env_conditions.T_amb # Temperature change (K)
except:
T_eq = env_conditions.T_amb
delta_T = 0
# 6. Calculate maximum cooling power (at lower temperatures)
T_test = np.linspace(env_conditions.T_amb - 50, env_conditions.T_amb, 100)
P_net_values = [net_power_balance(T) for T in T_test]
P_cooling_max = max(P_net_values) if P_net_values else 0
# 7. Calculate atmospheric window utilization
wl_window = np.linspace(8, 13, 200)
epsilon_window = thin_film_emissivity(cs_n(wl_window), cs_k(wl_window), d, wl_window)
window_efficiency = np.mean(epsilon_window)
# 8. Solar reflectance (visible band)
wl_visible = np.linspace(0.38, 0.78, 100)
alpha_visible = thin_film_emissivity(cs_n(wl_visible), cs_k(wl_visible), d, wl_visible)
solar_reflectance = 1 - np.mean(alpha_visible)
return {
'Thickness_μm': d,
'Net_Cooling_Power_Wm2': P_net_initial,
'Max_Cooling_Power_Wm2': P_cooling_max,
'Equilibrium_Temp_C': T_eq - 273.15,
'Temperature_Reduction_C': delta_T,
'Solar_Absorption_Wm2': P_sun,
'Atmospheric_Absorption_Wm2': P_atm,
'Window_Efficiency': window_efficiency,
'Solar_Reflectance': solar_reflectance,
'Convection_Coefficient_Wm2K': env_conditions.h_conv
}
# ==========================
# Multi-Environment Analysis
# ==========================
def analyze_environmental_impact(d):
"""Analyze performance under different environmental conditions"""
environments = {
'Standard': EnvironmentalConditions(),
'High_Humidity': EnvironmentalConditions(),
'Windy': EnvironmentalConditions(),
'Cloudy': EnvironmentalConditions()
}
# Set different environmental parameters
environments['High_Humidity'].rh = 0.9
environments['Windy'].wind_speed = 5.0
environments['Windy'].h_conv = 5 + 3.8 * 5.0
environments['Cloudy'].cloud_cover = 0.8
environments['Cloudy'].G_sun_total = 200 # Reduced solar radiation on cloudy days
results = {}
for name, env in environments.items():
results[name] = calculate_comprehensive_cooling_metrics(d, env)
return results
# ==========================
# Main Execution
# ==========================
def main():
print("=== Question 2: Comprehensive Evaluation of PDMS Thin Film Radiative Cooling Performance ===")
# Define thickness range
thicknesses = [0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
env_std = EnvironmentalConditions()
# Calculate performance for all thicknesses
all_results = []
for d in thicknesses:
result = calculate_comprehensive_cooling_metrics(d, env_std)
all_results.append(result)
# Convert to DataFrame for analysis
df_results = pd.DataFrame(all_results)
# Output detailed results
print("\n=== Cooling Performance Comparison of Different PDMS Film Thicknesses ===")
print(df_results.round(3))
# Find optimal thickness
best_cooling_idx = df_results['Net_Cooling_Power_Wm2'].idxmax()
best_temp_idx = df_results['Temperature_Reduction_C'].idxmin()
best_cooling = df_results.iloc[best_cooling_idx]
best_temp = df_results.iloc[best_temp_idx]
print(f"\n=== Optimal Performance Analysis ===")
print(
f"Maximum net cooling power: {best_cooling['Thickness_μm']}μm, Power: {best_cooling['Net_Cooling_Power_Wm2']:.2f} W/m²")
print(
f"Lowest equilibrium temperature: {best_temp['Thickness_μm']}μm, Temperature: {best_temp['Equilibrium_Temp_C']:.2f}°C")
print(f"Maximum temperature reduction: {abs(best_temp['Temperature_Reduction_C']):.2f}°C")
# Environmental sensitivity analysis (using optimal thickness)
optimal_thickness = best_cooling['Thickness_μm']
print(f"\n=== Environmental Sensitivity Analysis (Thickness: {optimal_thickness}μm) ===")
env_results = analyze_environmental_impact(optimal_thickness)
for env_name, result in env_results.items():
print(f"{env_name}: Net cooling power = {result['Net_Cooling_Power_Wm2']:.2f} W/m², "
f"Equilibrium temperature = {result['Equilibrium_Temp_C']:.2f}°C")
# Visualize results
plot_comprehensive_results(df_results, env_results)
# Output technical recommendations
provide_technical_recommendations(df_results, env_results, optimal_thickness)
def plot_comprehensive_results(df_results, env_results):
"""Plot comprehensive results"""
fig, axes = plt.subplots(2, 3, figsize=(18, 12))
# Subplot 1: Net cooling power vs thickness
axes[0, 0].plot(df_results['Thickness_μm'], df_results['Net_Cooling_Power_Wm2'], 'o-', linewidth=3, markersize=8)
axes[0, 0].set_xlabel('Film Thickness (μm)')
axes[0, 0].set_ylabel('Net Cooling Power (W/m²)')
axes[0, 0].set_title('Net Cooling Power vs Thickness')
axes[0, 0].grid(True, alpha=0.3)
axes[0, 0].axhline(y=0, color='red', linestyle='--', alpha=0.7)
# Subplot 2: Equilibrium temperature vs thickness
axes[0, 1].plot(df_results['Thickness_μm'], df_results['Equilibrium_Temp_C'], 's-', linewidth=3, markersize=8,
color='orange')
axes[0, 1].set_xlabel('Film Thickness (μm)')
axes[0, 1].set_ylabel('Equilibrium Temperature (°C)')
axes[0, 1].set_title('Equilibrium Temperature vs Thickness')
axes[0, 1].grid(True, alpha=0.3)
axes[0, 1].axhline(y=25, color='red', linestyle='--', alpha=0.7, label='Ambient Temp')
# Subplot 3: Atmospheric window utilization
axes[0, 2].plot(df_results['Thickness_μm'], df_results['Window_Efficiency'], '^-', linewidth=3, markersize=8,
color='green')
axes[0, 2].set_xlabel('Film Thickness (μm)')
axes[0, 2].set_ylabel('Atmospheric Window Efficiency')
axes[0, 2].set_title('8-13μm Atmospheric Window Emissivity')
axes[0, 2].grid(True, alpha=0.3)
# Subplot 4: Solar reflectance
axes[1, 0].plot(df_results['Thickness_μm'], df_results['Solar_Reflectance'], 'd-', linewidth=3, markersize=8,
color='purple')
axes[1, 0].set_xlabel('Film Thickness (μm)')
axes[1, 0].set_ylabel('Visible Light Reflectance')
axes[1, 0].set_title('Solar Reflectance vs Thickness')
axes[1, 0].grid(True, alpha=0.3)
# Subplot 5: Environmental sensitivity
env_names = list(env_results.keys())
cooling_powers = [env_results[name]['Net_Cooling_Power_Wm2'] for name in env_names]
axes[1, 1].bar(env_names, cooling_powers, color=['blue', 'green', 'orange', 'red'], alpha=0.7)
axes[1, 1].set_ylabel('Net Cooling Power (W/m²)')
axes[1, 1].set_title('Cooling Performance under Different Conditions')
axes[1, 1].tick_params(axis='x', rotation=45)
axes[1, 1].axhline(y=0, color='black', linestyle='--', alpha=0.5)
# Subplot 6: Energy component breakdown (optimal thickness)
best_idx = df_results['Net_Cooling_Power_Wm2'].idxmax()
best_result = df_results.iloc[best_idx]
components = ['Radiative Cooling', 'Solar Absorption', 'Atmospheric Absorption']
values = [best_result['Net_Cooling_Power_Wm2'] + best_result['Solar_Absorption_Wm2'] + best_result[
'Atmospheric_Absorption_Wm2'],
-best_result['Solar_Absorption_Wm2'],
-best_result['Atmospheric_Absorption_Wm2']]
colors = ['green', 'red', 'orange']
axes[1, 2].bar(components, values, color=colors, alpha=0.7)
axes[1, 2].set_ylabel('Power (W/m²)')
axes[1, 2].set_title(f'Energy Balance Breakdown (Thickness: {best_result["Thickness_μm"]}μm)')
axes[1, 2].axhline(y=0, color='black', linestyle='-', alpha=0.8)
plt.tight_layout()
plt.savefig('PDMS_comprehensive_cooling_analysis.png', dpi=300, bbox_inches='tight')
plt.show()
def provide_technical_recommendations(df_results, env_results, optimal_thickness):
"""Provide detailed technical recommendations"""
print("\n" + "=" * 80)
print("=== Radiative Cooling Technology Development and Application Recommendations ===")
print("=" * 80)
best_result = df_results[df_results['Thickness_μm'] == optimal_thickness].iloc[0]
print("1. Optimal Thickness Selection:")
print(f" • Recommended thickness: {optimal_thickness} μm")
print(f" • Performance metrics: Net cooling power {best_result['Net_Cooling_Power_Wm2']:.2f} W/m², "
f"Equilibrium temperature {best_result['Equilibrium_Temp_C']:.2f} °C")
print(f" • Technical advantages: Atmospheric window efficiency {best_result['Window_Efficiency']:.3f}, "
f"Solar reflectance {best_result['Solar_Reflectance']:.3f}")
print("\n2. Environmental Adaptability Analysis:")
for env_name, result in env_results.items():
power = result['Net_Cooling_Power_Wm2']
temp = result['Equilibrium_Temp_C']
print(f"{env_name}: Net power {power:.2f} W/m², Equilibrium temperature {temp:.2f} °C")
print("\n3. Technical Improvement Directions:")
print(
" • Optical performance optimization: Enhance 8-13μm emissivity through surface microstructure or nanoparticle doping")
print(" • Solar reflection enhancement: Add visible light reflection layers to reduce solar absorption")
print(" • Environmental robustness: Develop composite materials adaptable to high humidity and cloudy conditions")
print("\n4. Application Scenarios:")
print(
" • Building energy efficiency: Building facades, roof coatings, expected to reduce AC energy consumption by 15-25%")
print(" • Electronic device cooling: Server rooms, photovoltaic panel cooling")
print(" • Personal thermal management: Smart textiles, wearable devices")
print(" • Special applications: Cold chain logistics, agricultural greenhouse cooling")
print("\n5. Industrialization Development Path:")
print(" • Short-term (1-2 years): Optimize PDMS film fabrication process, reduce costs")
print(" • Medium-term (2-3 years): Develop multilayer composite structures, improve performance")
print(" • Long-term (3-5 years): Achieve integration of intelligent radiative cooling systems")
# ==========================
# Mock core functions for testing (replace with actual implementations)
# ==========================
def thin_film_emissivity(n_film, k_film, d, wl):
"""Mock implementation - replace with actual function"""
# Simplified implementation for testing
R = 0.1 # Approximate reflectance
alpha = 4 * np.pi * k_film * d / wl
T = np.exp(-alpha)
return 1 - R - T
if __name__ == "__main__":
main()