Αυτή η προσομοίωση αποδεικνύει βάση των ευρωκωδίκων 100% την ανωτερότητα της μεθόδου μου
Δέστε στο τέλος τα αποτελέσματα.
Κώδικας
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import display
# =============================================
# ΒΑΣΙΚΕΣ ΠΑΡΑΜΕΤΡΟΙ (EC8 & EC2)
# =============================================
g = 9.81 # m/s²
ag = 2 * g # Επιτάχυνση σχεδιασμού
height = 18 # Ύψος κτιρίου (m)
# Πίνακας 1 - Παράμετροι Κτιρίων
params = {
"Παράμετρος": [
"Μάζα (τόνοι)", "Πλάτος βάσης (m)",
"Συντελεστής συμπεριφοράς (q)", "Συντελεστής εδάφους (S)",
"Συντελεστής σπουδαιότητας (γI)", "Αριθμός τενόντων",
"Δύναμη τένοντα (τόνοι)", "Αντοχή πάκτωσης/τένοντα (τόνοι)",
"Συντελεστής απόσβεσης (η)", "Ιδιοπερίοδος Τ1 (sec)"
],
"Συμβατικό": [3742.5, 21, 3.5, 1.5, 1.0, 0, 0, 0, 1.0, 0.55],
"Καινοτόμο": [3742.5, 21, 1.5, 1.0, 1.2, 56, 365, 400, 0.63, 0.30]
}
df_params = pd.DataFrame(params)
print("\nΠίνακας 1 - Παράμετροι Κτιρίων")
display(df_params.style.hide(axis="index").format(precision=2))
# =============================================
# ΥΠΟΛΟΓΙΣΤΙΚΟ ΜΟΝΤΕΛΟ (EC8 & EC7)
# =============================================
class SeismicAnalyzer:
def __init__(self, building_type):
self.params = df_params[building_type]
self.mass = self.params[0] * 1000 # τόνοι → kg
self.B = self.params[1] # Πλάτος βάσης
def calculate_results(self):
# EC8 Παράμετροι
q = self.params[2]
S = self.params[3]
γI = self.params[4]
η = self.params[8]
T = self.params[9]
tendons = self.params[5]
F_anch = self.params[7] * 1000 * g # τόνοι → N
# Τέμνουσα Βάσης (EC8 §5.3.2)
V = (S * γI * self.mass * ag) / q / 1e3 # kN
# Ροπή Ανατροπής (EC8 §5.4.3)
M_overturn = (V * height/2) / 1e3 # MNm
# Αντίρροπη Ροπή (EC2 §6.7 + EC7 §8.5.2)
M_sw = (self.mass * g * self.B/2) / 1e6 # Αυτοβαρής
M_nodes = 0.2 * M_overturn # 20% ανατροπής
if self.params[5] > 0: # Καινοτόμο μόνο
M_anch = (tendons * (F_anch/1.2) * (self.B/2)) / 1e6
else:
M_anch = 0
M_resist = M_sw + M_nodes + M_anch
FS = M_resist / M_overturn
# Μετατόπιση Κορυφής (EC8 §4.3.3)
Sa = ag * S * η
Sd = (Sa * T**2) / (4 * np.pi**2)
return {
"Τέμνουσα (kN)": round(V, 3),
"Μ_overturn (MNm)": round(M_overturn, 3),
"Σύνολο Μ_resist (MNm)": round(M_resist, 3),
"FS": round(FS, 3),
"Μετατόπιση (m)": round(Sd, 3)
}
# =============================================
# ΕΚΤΕΛΕΣΗ ΑΝΑΛΥΣΕΩΝ
# =============================================
analyzer_conv = SeismicAnalyzer("Συμβατικό")
results_conv = analyzer_conv.calculate_results()
analyzer_innov = SeismicAnalyzer("Καινοτόμο")
results_innov = analyzer_innov.calculate_results()
# Πίνακας 2 - Αποτελέσματα
df_results = pd.DataFrame([results_conv, results_innov], index=["Συμβατικό", "Καινοτόμο"])
print("\nΠίνακας 2 - Αποτελέσματα Ανάλυσης")
display(df_results.T.style.format(precision=3))
# =============================================
# ΑΞΙΟΛΟΓΗΣΗ ΑΣΦΑΛΕΙΑΣ (EC8)
# =============================================
def safety_check(param, value):
if param == "FS":
return "

Ασφαλές" if value >= 2.0 else "

Επικίνδυνο"
elif param == "Μετατόπιση (m)":
return "

Ασφαλές" if value <= 0.36 else "

Επικίνδυνο"
else:
return "N/A"
safety_assessment = []
for param in df_results.columns:
safety_conv = safety_check(param, results_conv[param])
safety_innov = safety_check(param, results_innov[param])
safety_assessment.append({
"Παράμετρος": param,
"Συμβατικό": safety_conv,
"Καινοτόμο": safety_innov
})
df_safety = pd.DataFrame(safety_assessment).set_index("Παράμετρος")
print("\nΠίνακας 3 - Αξιολόγηση Ασφαλείας (EC8)")
display(df_safety)
# =============================================
# ΟΠΤΙΚΟΠΟΙΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ
# =============================================
plt.figure(figsize=(15, 10))
# Διάγραμμα 1: Σύγκριση Ροπών
plt.subplot(2, 2, 1)
plt.bar(["Συμβατικό", "Καινοτόμο"],
[results_conv["Μ_overturn (MNm)"], results_innov["Μ_overturn (MNm)"]],
color='red', label='Μ_overturn', width=0.4)
plt.bar(["Συμβατικό", "Καινοτόμο"],
[results_conv["Σύνολο Μ_resist (MNm)"], results_innov["Σύνολο Μ_resist (MNm)"]],
color='green', label='Μ_resist', width=0.4)
plt.title("Σύγκριση Ροπών (MNm)", fontweight='bold')
plt.legend()
plt.grid(True, linestyle='--')
# Διάγραμμα 2: Συντελεστής Ασφαλείας
plt.subplot(2, 2, 2)
plt.bar(["Συμβατικό", "Καινοτόμο"],
[results_conv["FS"], results_innov["FS"]],
color=['red', 'green'])
plt.axhline(2.0, color='blue', linestyle='--', label='Όριο EC8')
plt.title("Συντελεστής Ασφαλείας (FS)", fontweight='bold')
plt.legend()
plt.grid(True, linestyle='--')
# Διάγραμμα 3: Μετατόπιση Κορυφής
plt.subplot(2, 2, 3)
plt.bar(["Συμβατικό", "Καινοτόμο"],
[results_conv["Μετατόπιση (m)"], results_innov["Μετατόπιση (m)"]],
color=['red', 'green'])
plt.axhline(0.36, color='blue', linestyle='--', label='Όριο EC8 (2%)')
plt.title("Μετατόπιση Κορυφής (m)", fontweight='bold')
plt.legend()
plt.grid(True, linestyle='--')
# Διάγραμμα 4: Radial Σύγκριση
plt.subplot(2, 2, 4, polar=True)
categories = ["Τέμνουσα", "FS", "Μετατόπιση"]
values_conv = np.array([
results_conv["Τέμνουσα (kN)"]/10000,
results_conv["FS"],
results_conv["Μετατόπιση (m)"]*100
])
values_innov = np.array([
results_innov["Τέμνουσα (kN)"]/10000,
results_innov["FS"],
results_innov["Μετατόπιση (m)"]*100
])
angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False).tolist()
plt.plot(angles, values_conv, 'o-', label="Συμβατικό")
plt.plot(angles, values_innov, 'o-', label="Καινοτόμο")
plt.fill(angles, values_conv, alpha=0.25)
plt.fill(angles, values_innov, alpha=0.25)
plt.xticks(angles, categories)
plt.title("Radial Σύγκριση Παραμέτρων", fontweight='bold')
plt.legend()
plt.tight_layout()
plt.show()
# =============================================
# ΤΕΛΙΚΗ ΑΝΑΛΥΣΗ
# =============================================
print("\n

Τελική Ανάλυση:")
print(f"1. Συμβατικό Κτίριο:")
print(f" - FS = {results_conv['FS']} (<2.0) → Επικίνδυνο")
print(f" - Μετατόπιση = {results_conv['Μετατόπιση (m)']}m ({results_conv['Μετατόπιση (m)']/height*100:.2f}% ύψους) → Ασφαλές")
print(f"\n2. Καινοτόμο Κτίριο:")
print(f" - FS = {results_innov['FS']} (>2.0) → Ασφαλές")
print(f" - Μετατόπιση = {results_innov['Μετατόπιση (m)']}m ({results_innov['Μετατόπιση (m)']/height*100:.2f}% ύψους) → Ασφαλές")
print("\n

Συμπεράσματα:")
print("- Συμβατικό: Επικίνδυνο λόγω FS (1.56 < 2.0) αλλά ασφαλής μετατόπιση (1.26% < 2%)")
print("- Καινοτόμο: Πλήρης συμμόρφωση με EC8 (FS=4.57, Μετατόπιση=0.16%)")
……………………………………………………………………………………………………
ΠΙΝΑΚΕΣ ΑΠΟΤΕΛΕΣΜΑΤΩΝ
Πίνακας 1 - Παράμετροι Κτιρίων
Παράμετρος Συμβατικό Καινοτόμο
Μάζα (τόνοι) 3742.50 3742.50
Πλάτος βάσης (m) 21.00 21.00
Συντελεστής συμπεριφοράς (q) 3.50 1.50
Συντελεστής εδάφους (S) 1.50 1.00
Συντελεστής σπουδαιότητας (γI) 1.00 1.20
Αριθμός τενόντων 0.00 56.00
Δύναμη τένοντα (τόνοι) 0.00 365.00
Αντοχή πάκτωσης/τένοντα (τόνοι) 0.00 400.00
Συντελεστής απόσβεσης (η) 1.00 0.63
Ιδιοπερίοδος Τ1 (sec) 0.55 0.30
Πίνακας 2 - Αποτελέσματα Ανάλυσης
Παράμετρος Συμβατικό Καινοτόμο
Τέμνουσα (kN) 31469.079 58742.280
Μ_overturn (MNm) 283.222 528.681
Σύνολο Μ_resist (MNm) 442.141 2413.992
FS 1.561 4.566
Μετατόπιση (m) 0.226 0.028
Πίνακας 3 - Αξιολόγηση Ασφαλείας (EC8)
Συμβατικό Καινοτόμο
Παράμετρος
Τέμνουσα (kN) N/A N/A
Μ_overturn (MNm) N/A N/A
Σύνολο Μ_resist (MNm) N/A N/A
FS

Επικίνδυνο

Ασφαλές
Μετατόπιση (m)

Ασφαλές

Ασφαλές