import math,sys
RHO=1.225
Z0_EAU=0.0002
Z0_SOL=0.03
PRIX_MWH=90.0
VALEUR_SOLAIRE=49.0
VALEUR_VENT=73.0
TAUX=0.062
def rayleigh(v,m):
    s=m/math.sqrt(math.pi/2);return v/s**2*math.exp(-v*v/(2*s*s))
def vent_hauteur(v10,z,z0): return v10*math.log(z/z0)/math.log(10/z0)
def energie_rotor(vaxe,surface,cp,pmax,vin=3.0,vout=20.0):
    E=0.0;v=vin
    while v<vout:
        E+=min(0.5*RHO*surface*cp*v**3,pmax)*rayleigh(v,vaxe)*0.01;v+=0.01
    return E*8760/1000.0
MODULES={"grand":dict(nom="grand module 6 x 18 m",diam=6.0,longueur=18.0,surface=108.0,cp=0.157,pmax=10000.0,kwc=14.0,prix=24000.0,axe=3.5,largeur_flotteur=10.0),
"petit":dict(nom="petit module 2 x 6,6 m",diam=2.0,longueur=6.6,surface=13.2,cp=0.157,pmax=1200.0,kwc=2.6,prix=5500.0,axe=1.5,largeur_flotteur=4.0)}
SITES=[("Bassin haut d'une V14, crete a 6,5 m/s",16.0,6.5,1100.0,"grand"),("Lac du bas d'une Sky 2, vallee, 5,5 m/s",64.0,5.5,1100.0,"grand"),("Lac du bas d'eau douce d'une Sky 3, cote, 6,0 m/s",100.0,6.0,1300.0,"grand"),("Retenue de barrage, 5,5 m/s",100.0,5.5,1100.0,"grand"),("Etang de ferme ou de carriere, 4,5 m/s",1.0,4.5,1100.0,"petit")]
if len(sys.argv)>4:
    SITES=[(sys.argv[1],float(sys.argv[2]),float(sys.argv[3]),float(sys.argv[4]),sys.argv[5] if len(sys.argv)>5 else "grand")]
for nom,ha,v10,heures,typ in SITES:
    M=MODULES[typ]
    cote=math.sqrt(ha*10000.0)
    pas=7.5*M["diam"]
    rangees=max(int(cote//pas),1)
    par_rangee=max(int(cote//(M["longueur"]+1.0)),1)
    n=rangees*par_rangee
    vaxe=vent_hauteur(v10,M["axe"],Z0_EAU)
    e_vent=energie_rotor(vaxe,M["surface"],M["cp"],M["pmax"])
    e_sol=M["kwc"]*heures*1.04
    bande=rangees*M["largeur_flotteur"]*cote
    libre=ha*10000.0-bande
    kwc_fpv=libre*0.75*0.1
    e_fpv=kwc_fpv*heures*1.04
    prix_modules=n*M["prix"]
    prix_pieu=60000.0+1500.0*n if typ=="grand" else 8000.0+400.0*n
    prix_fpv=kwc_fpv*750.0
    prix=prix_modules+prix_pieu+prix_fpv
    e_tot=n*(e_vent+e_sol)+e_fpv
    cout_kwh=prix*(TAUX+0.015)/e_tot
    kwc_v9=ha*10000.0*0.75*0.1
    e_v9=kwc_v9*heures*1.04
    prix_v9=kwc_v9*750.0
    cout_v9=prix_v9*(TAUX+0.015)/e_v9
    vsol=vent_hauteur(v10,9.0,Z0_SOL)
    e_vent_sol=energie_rotor(vsol,M["surface"],M["cp"],M["pmax"])
    print(f"{nom} : {ha:.0f} ha, {rangees} rangees de {par_rangee} {M['nom']} = {n} modules, vent a l'axe {vaxe:.2f} m/s (a terre sur mat de 5 m : {vsol:.2f})")
    print(f"  par module : vent {e_vent:.0f} kWh/an, solaire du rotor {e_sol:.0f} kWh/an ; a terre sur mat le vent ferait {e_vent_sol:.0f}")
    print(f"  flottant classique entre les rangees : {kwc_fpv:.0f} kWc, {e_fpv/1e6:.2f} GWh/an ; rotors : vent {n*e_vent/1e6:.2f} GWh, solaire {n*e_sol/1e6:.2f} GWh ; total {e_tot/1e6:.2f} GWh/an")
    print(f"  prix : modules {prix_modules/1e6:.2f} M€, pieu et treuils {prix_pieu/1e6:.2f}, flottant {prix_fpv/1e6:.2f}, total {prix/1e6:.2f} M€ ; kWh a {cout_kwh*100:.1f} c€ sur 25 ans")
    cout_module=M["prix"]*(TAUX+0.015)/(e_vent+e_sol)
    recette=((e_fpv+n*e_sol)*VALEUR_SOLAIRE+n*e_vent*VALEUR_VENT)/1e9
    recette_v9=e_v9*VALEUR_SOLAIRE/1e9
    print(f"  le module seul : {M['prix']:.0f} € pour {e_vent+e_sol:.0f} kWh/an, {cout_module*100:.1f} c€/kWh ; recette de l'ile au profil de prix ensoleille (solaire 49, vent 73 €/MWh) : {recette:.2f} M€/an, retour {prix/1e6/(recette-prix/1e6*0.015):.1f} ans")
    print(f"  couverture V9 seule (75 % de flottant) : {kwc_v9:.0f} kWc, {e_v9/1e6:.2f} GWh/an, {prix_v9/1e6:.2f} M€, {cout_v9*100:.1f} c€/kWh ; ile hybride = {100*e_tot/e_v9:.0f} % de l'energie pour {100*prix/prix_v9:.0f} % du prix ; recette V9 {recette_v9:.2f} M€/an, retour {prix_v9/1e6/(recette_v9-prix_v9/1e6*0.015):.1f} ans")
