mabuseif commited on
Commit
74ffb9d
verified
1 Parent(s): 7dc25d4

Update app/materials_library.py

Browse files
Files changed (1) hide show
  1. app/materials_library.py +49 -40
app/materials_library.py CHANGED
@@ -18,8 +18,8 @@ import uuid
18
  from typing import Dict, List, Any, Optional, Tuple, Union
19
  from enum import Enum
20
 
21
- # Import default data from centralized module
22
- from app.m_c_data import SAMPLE_MATERIALS, SAMPLE_FENESTRATIONS
23
 
24
  # Configure logging
25
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@@ -98,7 +98,7 @@ class MaterialLibrary:
98
  "Specific Heat (J/kg路K)": m.specific_heat,
99
  "Default Thickness (m)": m.default_thickness,
100
  "Embodied Carbon (kgCO鈧俥/kg)": m.embodied_carbon,
101
- "absorptivity": m.absorptivity,
102
  "Price (USD/m虏)": m.price,
103
  "Emissivity": m.emissivity
104
  }
@@ -221,31 +221,40 @@ def display_materials_page():
221
 
222
  # Initialize material library
223
  material_library = MaterialLibrary()
224
- material_library.library_materials = {
225
- k: Material(
226
- name=m["name"],
227
- category=MaterialCategory(m["category"]),
228
- conductivity=m["thermal_conductivity"],
229
- density=m["density"],
230
- specific_heat=m["specific_heat"],
231
- default_thickness=m["thickness_range"]["default"],
232
- embodied_carbon=m["embodied_carbon"],
233
- absorptivity=m.get("absorptivity", 0.6),
234
- price=m["cost"]["material"],
235
- emissivity=m.get("emissivity", 0.9),
236
- is_library=True
237
- ) for k, m in st.session_state.project_data["materials"]["library"].items()
238
- }
239
- material_library.library_glazing_materials = {
240
- k: GlazingMaterial(
241
- name=f["name"],
242
- shgc=f["shgc"] if "shgc" in f else 0.7,
243
- u_value=f["u_value"],
244
- h_o=f.get("h_o", 23.0),
245
- is_library=True
246
- ) for k, f in st.session_state.project_data["fenestrations"]["library"].items()
247
- if f["type"] in ["Window", "Skylight"]
248
- }
 
 
 
 
 
 
 
 
 
249
 
250
  with tab1:
251
  display_materials_tab(material_library)
@@ -285,7 +294,7 @@ def display_materials_tab(material_library: MaterialLibrary):
285
  st.subheader("Materials")
286
  # Category filter
287
  filter_options = ["All", "None"] + MATERIAL_CATEGORIES
288
- category = st.selectbox("Filter by Category", filter_options, key="material_filter")
289
 
290
  st.subheader("Library Materials")
291
  with st.container():
@@ -442,9 +451,9 @@ def display_materials_tab(material_library: MaterialLibrary):
442
  "specific_heat": 1000.0,
443
  "default_thickness": 0.1,
444
  "embodied_carbon": 0.5,
445
- "absorptivity": 0.6,
446
  "price": 50.0,
447
- "emissivity": 0.925
448
  })
449
  is_edit = editor_state.get("is_edit", False)
450
  original_name = editor_state.get("original_name", "")
@@ -502,10 +511,10 @@ def display_materials_tab(material_library: MaterialLibrary):
502
  key="material_embodied_carbon_input"
503
  )
504
  absorptivity = st.number_input(
505
- "absorptivity",
506
  min_value=0.0,
507
  max_value=1.0,
508
- value=form_state.get("absorptivity", editor_state.get("absorptivity", 0.6)),
509
  help="Solar radiation absorbed",
510
  key="material_absorptivity_input"
511
  )
@@ -520,7 +529,7 @@ def display_materials_tab(material_library: MaterialLibrary):
520
  "Emissivity",
521
  min_value=0.0,
522
  max_value=1.0,
523
- value=form_state.get("emissivity", editor_state.get("emissivity", 0.925)),
524
  help="Ratio of radiation emitted by the material (0.0 to 1.0)",
525
  key="material_emissivity_input"
526
  )
@@ -578,9 +587,9 @@ def display_materials_tab(material_library: MaterialLibrary):
578
  "specific_heat": 1000.0,
579
  "default_thickness": 0.1,
580
  "embodied_carbon": 0.5,
581
- "absorptivity": 0.6,
582
  "price": 50.0,
583
- "emissivity": 0.925
584
  }
585
  st.session_state.material_action = {"action": None, "id": None}
586
  st.session_state.rerun_trigger = None
@@ -601,7 +610,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
601
  st.subheader("Library Fenestrations")
602
  with st.container():
603
  library_fenestrations = list(material_library.library_glazing_materials.values())
604
- if fenestration_filter == "None":
605
  library_fenestrations = []
606
  elif fenestration_filter != "All":
607
  library_fenestrations = [f for f in library_fenestrations if f.__class__.__name__ == fenestration_filter]
@@ -742,7 +751,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
742
  "name": "",
743
  "shgc": 0.7,
744
  "u_value": 5.0,
745
- "h_o": 23.0
746
  })
747
  is_edit = editor_state.get("is_edit", False)
748
  original_name = editor_state.get("original_name", "")
@@ -770,7 +779,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
770
  h_o = st.number_input(
771
  "Exterior Surface Conductance (W/m虏路K)",
772
  min_value=0.0,
773
- value=form_state.get("h_o", editor_state.get("h_o", 23.0)),
774
  help="Exterior surface heat transfer coefficient",
775
  key="fenestration_h_o_input"
776
  )
@@ -810,7 +819,7 @@ def display_fenestrations_tab(material_library: MaterialLibrary):
810
  "name": "",
811
  "shgc": 0.7,
812
  "u_value": 5.0,
813
- "h_o": 23.0
814
  }
815
  st.session_state.fenestration_action = {"action": None, "id": None}
816
  st.session_state.rerun_trigger = None
 
18
  from typing import Dict, List, Any, Optional, Tuple, Union
19
  from enum import Enum
20
 
21
+ # Import default data and constants from centralized module
22
+ from app.m_c_data import SAMPLE_MATERIALS, SAMPLE_FENESTRATIONS, DEFAULT_MATERIAL_PROPERTIES, DEFAULT_WINDOW_PROPERTIES
23
 
24
  # Configure logging
25
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
 
98
  "Specific Heat (J/kg路K)": m.specific_heat,
99
  "Default Thickness (m)": m.default_thickness,
100
  "Embodied Carbon (kgCO鈧俥/kg)": m.embodied_carbon,
101
+ "Absorptivity": m.absorptivity,
102
  "Price (USD/m虏)": m.price,
103
  "Emissivity": m.emissivity
104
  }
 
221
 
222
  # Initialize material library
223
  material_library = MaterialLibrary()
224
+ material_library.library_materials = {}
225
+ for k, m in st.session_state.project_data["materials"]["library"].items():
226
+ try:
227
+ material_library.library_materials[k] = Material(
228
+ name=k,
229
+ category=MaterialCategory(m["category"]),
230
+ conductivity=m["thermal_properties"]["conductivity"],
231
+ density=m["thermal_properties"]["density"],
232
+ specific_heat=m["thermal_properties"]["specific_heat"],
233
+ default_thickness=m["thickness_range"]["default"],
234
+ embodied_carbon=m["embodied_carbon"],
235
+ absorptivity=m.get("absorptivity", DEFAULT_MATERIAL_PROPERTIES["absorptivity"]),
236
+ price=m["cost"]["material"],
237
+ emissivity=m.get("emissivity", DEFAULT_MATERIAL_PROPERTIES["emissivity"]),
238
+ is_library=True
239
+ )
240
+ except KeyError as e:
241
+ logger.error(f"Error processing material {k}: Missing key {e}")
242
+ continue
243
+
244
+ material_library.library_glazing_materials = {}
245
+ for k, f in st.session_state.project_data["fenestrations"]["library"].items():
246
+ if f["type"] in ["window", "skylight"]:
247
+ try:
248
+ material_library.library_glazing_materials[k] = GlazingMaterial(
249
+ name=k,
250
+ shgc=f["performance"]["shgc"],
251
+ u_value=f["performance"]["u_value"],
252
+ h_o=f.get("h_o", DEFAULT_WINDOW_PROPERTIES["h_o"]),
253
+ is_library=True
254
+ )
255
+ except KeyError as e:
256
+ logger.error(f"Error processing fenestration {k}: Missing key {e}")
257
+ continue
258
 
259
  with tab1:
260
  display_materials_tab(material_library)
 
294
  st.subheader("Materials")
295
  # Category filter
296
  filter_options = ["All", "None"] + MATERIAL_CATEGORIES
297
+ category = st.selectbox("Filter by Category", filter_options, Stuarts, key="material_filter")
298
 
299
  st.subheader("Library Materials")
300
  with st.container():
 
451
  "specific_heat": 1000.0,
452
  "default_thickness": 0.1,
453
  "embodied_carbon": 0.5,
454
+ "absorptivity": DEFAULT_MATERIAL_PROPERTIES["absorptivity"],
455
  "price": 50.0,
456
+ "emissivity": DEFAULT_MATERIAL_PROPERTIES["emissivity"]
457
  })
458
  is_edit = editor_state.get("is_edit", False)
459
  original_name = editor_state.get("original_name", "")
 
511
  key="material_embodied_carbon_input"
512
  )
513
  absorptivity = st.number_input(
514
+ "Absorptivity",
515
  min_value=0.0,
516
  max_value=1.0,
517
+ value=form_state.get("absorptivity", editor_state.get("absorptivity", DEFAULT_MATERIAL_PROPERTIES["absorptivity"])),
518
  help="Solar radiation absorbed",
519
  key="material_absorptivity_input"
520
  )
 
529
  "Emissivity",
530
  min_value=0.0,
531
  max_value=1.0,
532
+ value=form_state.get("emissivity", editor_state.get("emissivity", DEFAULT_MATERIAL_PROPERTIES["emissivity"])),
533
  help="Ratio of radiation emitted by the material (0.0 to 1.0)",
534
  key="material_emissivity_input"
535
  )
 
587
  "specific_heat": 1000.0,
588
  "default_thickness": 0.1,
589
  "embodied_carbon": 0.5,
590
+ "absorptivity": DEFAULT_MATERIAL_PROPERTIES["absorptivity"],
591
  "price": 50.0,
592
+ "emissivity": DEFAULT_MATERIAL_PROPERTIES["emissivity"]
593
  }
594
  st.session_state.material_action = {"action": None, "id": None}
595
  st.session_state.rerun_trigger = None
 
610
  st.subheader("Library Fenestrations")
611
  with st.container():
612
  library_fenestrations = list(material_library.library_glazing_materials.values())
613
+ if fenest Riyadh, key="fenestration_filter" == "None":
614
  library_fenestrations = []
615
  elif fenestration_filter != "All":
616
  library_fenestrations = [f for f in library_fenestrations if f.__class__.__name__ == fenestration_filter]
 
751
  "name": "",
752
  "shgc": 0.7,
753
  "u_value": 5.0,
754
+ "h_o": DEFAULT_WINDOW_PROPERTIES["h_o"]
755
  })
756
  is_edit = editor_state.get("is_edit", False)
757
  original_name = editor_state.get("original_name", "")
 
779
  h_o = st.number_input(
780
  "Exterior Surface Conductance (W/m虏路K)",
781
  min_value=0.0,
782
+ value=form_state.get("h_o", editor_state.get("h_o", DEFAULT_WINDOW_PROPERTIES["h_o"])),
783
  help="Exterior surface heat transfer coefficient",
784
  key="fenestration_h_o_input"
785
  )
 
819
  "name": "",
820
  "shgc": 0.7,
821
  "u_value": 5.0,
822
+ "h_o": DEFAULT_WINDOW_PROPERTIES["h_o"]
823
  }
824
  st.session_state.fenestration_action = {"action": None, "id": None}
825
  st.session_state.rerun_trigger = None