Commit d3a7ba8a authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[EXPERIMENT][EUROCODE] refactor eurocode data.

parent e875695e
No related merge requests found
Showing with 39 additions and 21 deletions
+39 -21
from enum import Enum
from experiment.eurocode_data.region_eurocode import AbstractRegionType, E, C2, C1
from experiment.eurocode_data.eurocode_region import AbstractEurocodeRegion, E, C2, C1
class AbstractDepartementAlpesFrancaises(object):
def __init__(self, region: type):
self.region = region() # type: AbstractRegionType
self.region = region() # type: AbstractEurocodeRegion
class HauteSavoie(AbstractDepartementAlpesFrancaises):
......@@ -27,6 +27,11 @@ class Isere(AbstractDepartementAlpesFrancaises):
super().__init__(C2)
class Drome(AbstractDepartementAlpesFrancaises):
def __init__(self):
super().__init__(C2)
class HautesAlpes(AbstractDepartementAlpesFrancaises):
def __init__(self):
......@@ -45,9 +50,4 @@ class AlpesDeHauteProvence(AbstractDepartementAlpesFrancaises):
super().__init__(C1)
class Drome(AbstractDepartementAlpesFrancaises):
def __init__(self):
super().__init__(C2)
class AbstractRegionType(object):
class AbstractEurocodeRegion(object):
def __init__(self, sk0, sad) -> None:
# Valeurs caracteristique de la charge de neige sur le sol à une altitude inférieure à 200m
......@@ -41,19 +41,19 @@ class AbstractRegionType(object):
return 3.5, -2.45
class C1(AbstractRegionType):
class C1(AbstractEurocodeRegion):
def __init__(self) -> None:
super().__init__(0.65, None)
class C2(AbstractRegionType):
class C2(AbstractEurocodeRegion):
def __init__(self) -> None:
super().__init__(0.65, 1.35)
class E(AbstractRegionType):
class E(AbstractEurocodeRegion):
def __init__(self) -> None:
super().__init__(1.40, None)
......
from collections import OrderedDict
import matplotlib.pyplot as plt
from experiment.eurocode_data.massif_name_to_departement import massif_name_to_departements
from experiment.eurocode_data.region_eurocode import AbstractRegionType
from experiment.eurocode_data.massif_name_to_departement import massif_name_to_departement_objects
from experiment.eurocode_data.eurocode_region import AbstractEurocodeRegion
from utils import get_display_name_from_object_type
def display_region_limit(region_type, altitudes, ordered_massif_name_to_quantiles, ordered_massif_name_to_significances=None,
def display_region_limit(region_type, altitudes, ordered_massif_name_to_quantiles,
ordered_massif_name_to_significances=None,
display=True):
assert isinstance(ordered_massif_name_to_quantiles, OrderedDict)
assert ordered_massif_name_to_significances is None or isinstance(ordered_massif_name_to_significances, OrderedDict)
# First, select massif name correspond to the region
massif_name_belong_to_the_region = []
for massif_name in ordered_massif_name_to_quantiles.keys():
if any([isinstance(dep.region, region_type) for dep in massif_name_to_departements[massif_name]]):
if any([isinstance(dep.region, region_type) for dep in massif_name_to_departement_objects[massif_name]]):
massif_name_belong_to_the_region.append(massif_name)
region_object = region_type() # type: AbstractRegionType
region_object = region_type() # type: AbstractEurocodeRegion
# Then, display the limit for the region
fig, ax = plt.subplots(1, 1)
ax.plot(altitudes, [region_object.eurocode_max_loading(altitude) for altitude in altitudes], label='Eurocode limit')
......@@ -27,4 +28,4 @@ def display_region_limit(region_type, altitudes, ordered_massif_name_to_quantile
ax.set_ylabel('0.98 quantile (in N $m^-2$)')
ax.legend()
if display:
plt.show()
\ No newline at end of file
plt.show()
from typing import Dict, List
from experiment.eurocode_data.departementalpesfrancaises import HauteSavoie, Savoie, Isere, Drome, HautesAlpes, \
from experiment.eurocode_data.departement_alpes_francaises import HauteSavoie, Savoie, Isere, Drome, HautesAlpes, \
AlpesDeHauteProvence, AlpesMaritimes, AbstractDepartementAlpesFrancaises
massif_name_to_departements = {
massif_name_to_departement_types = {
'Chablais': [HauteSavoie],
'Aravis': [HauteSavoie, Savoie],
'Mont-Blanc': [HauteSavoie],
......@@ -27,4 +29,18 @@ massif_name_to_departements = {
'Ubaye': [AlpesDeHauteProvence],
'Haut_Var-Haut_Verdon': [AlpesDeHauteProvence],
'Mercantour': [AlpesMaritimes, AlpesDeHauteProvence]}
massif_name_to_departements = {m: [d() for d in deps] for m, deps in massif_name_to_departements.items()} # type: Dict[str, List[AbstractDepartementAlpesFrancaises]]
massif_name_to_departement_objects = {m: [d() for d in deps] for m, deps in massif_name_to_departement_types.items()} # type: Dict[str, List[AbstractDepartementAlpesFrancaises]]
DEPARTEMENT_TYPES = [HauteSavoie, Savoie, Isere, Drome, HautesAlpes, AlpesMaritimes, AlpesDeHauteProvence]
departement_type_to_massif_names = {dep: [k for k, v in massif_name_to_departement_types.items() if dep in v]
for dep in DEPARTEMENT_TYPES
}
if __name__ == '__main__':
for k, v in departement_type_to_massif_names.items():
print(k, v)
......@@ -2,7 +2,7 @@ import unittest
from collections import OrderedDict
from experiment.eurocode_data.eurocode_visualizer import display_region_limit
from experiment.eurocode_data.region_eurocode import C1, E
from experiment.eurocode_data.eurocode_region import C1, E, C2
class TestCoordinateSensitivity(unittest.TestCase):
......@@ -14,6 +14,7 @@ class TestCoordinateSensitivity(unittest.TestCase):
ordered_massif_name_to_quantiles['Vanoise'] = [1.2, 1.5, 1.7, 2.1]
ordered_massif_name_to_quantiles['Vercors'] = [0.7, 0.8, 1.1, 1.5]
display_region_limit(C1, altitudes, ordered_massif_name_to_quantiles, display=self.DISPLAY)
display_region_limit(C2, altitudes, ordered_massif_name_to_quantiles, display=self.DISPLAY)
display_region_limit(E, altitudes, ordered_massif_name_to_quantiles, display=self.DISPLAY)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment