seviprince / dromotherm

Code Python
MIT License
0 stars 1 forks source link

évolutions à apporter pour que couplage.py tourne à débit variable #3

Closed seviprince closed 4 years ago

seviprince commented 4 years ago

Voici une proposition pour rendre le débit du dromotherm variable:

1) je vire le qfu de l’initialisation

 def __init__(self,fname,dt,nt,L=4,l=7.5,dx=0.75): 

2) je ramène le débit comme un paramètre d'entrée de la fonction iterate et le reste du code reste intacte.

def iterate(self,n,Tinj,qf):
alexandrecuer commented 4 years ago

effectivement, celà parait une bonne idée 👍 celà revient à simuler un pompe on/off au niveau du dromotherme tu peux mettre en ligne... @fbernard494 : Fred, tu es OK pour celà ? il me semble que celà répond à ta demande suivante : https://github.com/seviprince/dromotherm/commit/133a2e07253dd2839e8aca2e7dc051dc23a19a2d#commitcomment-39909845

pour info le lien vers la classe :

https://github.com/seviprince/dromotherm/blob/0914c0a0427af466b0d0c4bddac75f20cd1bd0cf/dromosense/tools.py#L228

fbernard494 commented 4 years ago

je ne sais pas de quelle modif il est question. Je ne vois pas le message d'origine de Febron. Je vois bien mon message ou je disais d'introduire un coef, mais comment cela a été traité ? En fait, on aurait deux options :

Est-ce que les deux switchs sont pris en compte Febron ?

Il faut que l'on écrive de ce document qui donne le cahier des charges fonctionnel du code...

Frédéric

Le 19/06/2020 à 20:05, > Alexandre CUER (par Internet, dépôt noreply@github.com) a écrit :

effectivement, celà parait une bonne idée 👍 celà revient à simuler un pompe on/off au niveau du dromotherme tu peux mettre en ligne... @fbernard494 https://github.com/fbernard494 : Fred, tu es OK pour celà ? il me semble que celà répond à ta demande suivante : 133a2e0#commitcomment-39909845 https://github.com/seviprince/dromotherm/commit/133a2e07253dd2839e8aca2e7dc051dc23a19a2d#commitcomment-39909845

pour info le lien vers la classe :

https://github.com/seviprince/dromotherm/blob/0914c0a0427af466b0d0c4bddac75f20cd1bd0cf/dromosense/tools.py#L228

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/seviprince/dromotherm/issues/3#issuecomment-646797009, or unsubscribe https://github.com/notifications/unsubscribe-auth/AO7EJ7PY6B3EOH5VMOED2QLRXOSFNANCNFSM4OCYFFTA.

alexandrecuer commented 4 years ago

le message d'origine de Fébron est visible sur le site : https://github.com/seviprince/dromotherm/issues/3

il a ouvert une issue, on peut tout traiter dedans, y compris le cahier des charges que tu demandes par exemple :-) mais il faut aller sur le lien

Alexandre

Le 22/06/2020 à 09:11, > fbernard494 (par Internet, dépôt noreply@github.com) a écrit :

je ne sais pas de quelle modif il est question. Je ne vois pas le message d'origine de Febron. Je vois bien mon message ou je disais d'introduire un coef, mais comment cela a été traité ? En fait, on aurait deux options :

  • on peut laisser tourner Dromotherm mais on coupe l'échangeur avec le stockage.
  • on coupe dromotherm et on coupe aussi l'échangeur avec le stockage.

Est-ce que les deux switchs sont pris en compte Febron ?

Il faut que l'on écrive de ce document qui donne le cahier des charges fonctionnel du code...

Frédéric

Le 19/06/2020 à 20:05, > Alexandre CUER (par Internet, dépôt noreply@github.com) a écrit :

effectivement, celà parait une bonne idée 👍 celà revient à simuler un pompe on/off au niveau du dromotherme tu peux mettre en ligne... @fbernard494 https://github.com/fbernard494 : Fred, tu es OK pour celà ? il me semble que celà répond à ta demande suivante : 133a2e0#commitcomment-39909845

https://github.com/seviprince/dromotherm/commit/133a2e07253dd2839e8aca2e7dc051dc23a19a2d#commitcomment-39909845

pour info le lien vers la classe :

https://github.com/seviprince/dromotherm/blob/0914c0a0427af466b0d0c4bddac75f20cd1bd0cf/dromosense/tools.py#L228

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub

https://github.com/seviprince/dromotherm/issues/3#issuecomment-646797009, or unsubscribe

https://github.com/notifications/unsubscribe-auth/AO7EJ7PY6B3EOH5VMOED2QLRXOSFNANCNFSM4OCYFFTA.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/seviprince/dromotherm/issues/3#issuecomment-647331526, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF3KSC5DABD3M5XXJ4QKEFDRX373XANCNFSM4OCYFFTA.

alexandrecuer commented 4 years ago

Fébron propose quelque chose comme ceci, une fois la classe modifiée, avec y : Tsable = Tstockage,

def F(y,t):
    i = int(t/step)

    dro=agenda_dro[i]
    pac=agenda_pac[i]

    if dro == 1:
        dromo.iterate(i,Tinj_dro[i-1]+kelvin,qdro) 
    else:
        dromo.iterate(i,Tinj_dro[i-1]+kelvin,0)

    Tsor_dro[i]=dromo.T[i,1,-1]-kelvin
    Tsor_sto[i] = ( k * y + B * Tsor_dro[i] ) / ( k + B)
    Tinj_sto[i] = Tsor_sto[i] + coeff * eff * (Tsor_dro[i] - Tsor_sto[i])
    Tinj_dro[i] = Tsor_dro[i] - eff * (Tsor_dro[i] - Tsor_sto[i])

    der = (dro*msto * cpsto * (Tinj_sto[i] - Tsor_sto[i]) - Pgeo[i] * pac ) / (m_sable * Cp_sable) 

    if pac == 1 :
        Tinj_pac[i] = y-C*Pgeo[i]/k
        Tsor_pac[i] = Tinj_pac[i]-Pgeo[i]/(mpac*cpac)
    else:
        Tinj_pac[i] = Tinj_pac[i-1]
        Tsor_pac[i] = Tsor_pac[i-1]

    return der

Fébron, j'enlève les commentaires pour que ce soit lisible dans le post, mais dans le code, il faut que tu les gardes à minima....

là tu as fait à mon sens qdro=0 et qsto >0

Frédéric propose 2 cas :

si qdro est nul et/ou qsto est nul alors on ne peut plus passer par le calcul de k et B, comme écrit dans le notebook.... je rappelle le calcul de k et B qui est fait dans l'exemple couplage.py

mdro = qdro * rho_eau
msto = qsto * rho_eau
cpdro = Cpf
cpsto = Cpf
coeff = (mdro * cpdro) / (msto * cpsto)
B = (msto * cpsto -k/2) * coeff * eff

il faut revoir ce qu'il se passe...si le stockage ne tourne pas mais que le dromotherme oui, alors :

le modèle de stockage est supposé parfaitement isolé comme l'a dit Benoit, donc celà devrait être OK

alexandrecuer commented 4 years ago

Pour citer du code dans les posts de github, il faut entourer le code par ```

le caractère ` est une apostrophe inversée, par défaut "AltGr + 7" sur les claviers AZERTY français

donc un bloc de code = 3 apostrophes inversées .....le code.... 3 apostrophes inversées

une citation de code sur plusieurs lignes sur un post github = des commentaires dans un code python

c'est pour celà que si dans le code python il y a des commentaires, il faut les enlever pour que celà apparaisse correctement dans le post

seviprince commented 4 years ago

Voici ce que j'obtiens en tenant compte de votre remarque qui me semble être juste. simulation Pour l'affichage j'ai créé une fonction graphe qui prend comme paramètre start et stop et affiche les graphes. Par défaut, on affiche les graphes sur l'intégralité du temps. Pour l'affichage dynamique, j'ai essayé mais elle me semble un peu complexe vu que les graphiques n'ont pas exactement les mêmes dispositions. On se retrouve avec une boucle for et des if pour pouvoir gérer la disposition des graphiques. Pour le moment, j'ai fait simple. Le code est en ligne.

alexandrecuer commented 4 years ago

tu ne devrais pas mettre les graphes sur le repo mais faire du dragndrop...

seviprince commented 4 years ago

ok comme ceci: ?? simulation_on_off

Concernant l, on a toujours besoin de cette variable.

A présent, on peut commencer le cahier de charges je crois

alexandrecuer commented 4 years ago

exactement comme celà....

ainsi les illustrations sont intégrées aux issues et ne viennent pas polluer si on peut dire le code

alexandrecuer commented 4 years ago

pour travailler un peu plus dynamiquement, il y a dans github ce que l'on appelle les branches

je viens de créer une branche vardeb (pour débit variable) qui est exactement le clone de master....

donc si dans github desktop tu te positionnes localement sur la branche vardeb et que tu injectes tes modifs dedans depuis anaconda, et que tu les publies, github produira une compilation bien utile de tout ce que tu as modifié....d'un seul clic, on pourra afficher sur github toutes les modifs (actuellement, il faut y aller commit par commit, ce qui est un peu laborieux) du coup quant Fred regardera, il pourra avoir une vision de synthèse, pas morcelée et çà devrait mieux lui convenir......

C'est très courant et ensuite quant on est d'accord avec tout ce que tu as mis dans cette branche, on fusionne avec master....

la méthode

1) tu switches de branche dans github desktop

image

2) tes fichiers dans ton répertoire github dromotherm seront ceux de la branche vardeb

image tes fichiers contenus dans les répertoires spécifiés dans le gitignore(tests_python ?) ne devraient pas avoir changé

alexandrecuer commented 4 years ago

image

seviprince commented 4 years ago

Bien noté

alexandrecuer commented 4 years ago

J'ai fait tourner ton dernier code ....il y a celà qui m'interpelle

image

seviprince commented 4 years ago

Effectivement, il y a quelque chose qui cloche sur les graphes. Le Tsor_sto[i] devrait toujours être égale à Tsor_sto[i-1] tant que le rayonnement est en dessous des 250W/m2 Je vais relire le code.

seviprince commented 4 years ago

Bonjour, J'ai encore regardé les courbes et je fais une observation Figure_1 . Je remarque que la température Tsor_sto connait ses pics brusques souvent juste avant l'instant où la condition de mise en marche du dromotherm devient vraie. Peut-être que nous commettons une erreur d'indice ... un i au lieu d'un i-1 peut-être quelque part.

fbernard494 commented 4 years ago

Bonjour,

j'ai installer mon github desktop et installé python 3 sur ma macine (avec python 2.7, il y avait des pbs pour l'encodage des fichiers, ce que Python 3 gère de manière transparente). Environnement virtuel également pour l'installation des packages qd hoc sur dromotherm.

J'ai regardé de plus près le code, et il me semble qu'on pourrait modifier les choses pour la simulation de l'équation du stockage. On fait appel à la fonction ode de Python en définissant au préalable la fonction F. Mais on "triche" un peu car dans l'absolu, on aurait du définir une fonction F pour le systeme complet (comprenant non pas seulement la fonction scalaire du temps T_stock, mais le vecteur complet de toutes les températures en jeu, dont le dromotherm). Et ode aurait été appliqué au systeme complet. Comme c'est codé, on utilise dans la définition de la fonction F, déjà un algo de discrétisation pour les autres températures autres que Tstock. Et lorsqu'on lance ode pour résoudre y, on imagine que ca va faire avancer également l'algo en temps pour les autres températures mais on ne sait pas trop comment, ce qui pourrait forcer un couplage.

Je proposerais volontiers, pour tester, d'écrire un boucle en temps qui :

On n'utiliserait donc pas ode : on peut réutiliser F en la modifiant un peu pour que ca devienne la fonction que l'on appelle dans la boucle en temps (elle fait donc avancer les températures selon les deux items écrits précédemment).

Febron, tu vois ce que je veux dire ?

Frédéric

Le 29/06/2020 à 16:58, > seviprince (par Internet, dépôt noreply@github.com) a écrit :

Bonjour, J'ai encore regardé les courbes et je fais une observation Figure_1 https://user-images.githubusercontent.com/63263854/86021282-3858f180-ba29-11ea-9ceb-f1c71564c759.png . Je remarque que la température Tsor_sto connait ses pics brusques souvent juste avant l'instant où la condition de mise en marche du dromotherm devient vraie. Peut-être que nous commettons une erreur d'indice ... un i au lieu d'un i-1 peut-être quelque part.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/seviprince/dromotherm/issues/3#issuecomment-651176505, or unsubscribe https://github.com/notifications/unsubscribe-auth/AO7EJ7MZNOYXDCJ4ZVF6WODRZCT2PANCNFSM4OCYFFTA.

seviprince commented 4 years ago

Bonjour monsieur, Oui je comprends votre idée. Je pense aussi que les discontinuités inattendues observées sur les graphiques proviendraient de la fonction ode. Je pourrais écrire le code en y intégrant votre proposition avec un Euler implicite pour l'equa diff sur le Tstock. On pourra ensuite faire évoluer la précision en passant à un RK4( qui est utilisé derrière ode) qu'on écrira nous-mêmes.

Cordialement.

alexandrecuer commented 4 years ago

HelloSuper :-)Pense aussi à nettoyer les graphiques et à revoir la numérotation A plusAlexandreEnvoyé depuis mon smartphone Samsung Galaxy.

-------- Message d'origine -------- De : "> seviprince (par Internet, dépôt noreply@github.com)" notifications@github.com Date : 30/06/2020 14:30 (GMT+01:00) À : seviprince/dromotherm dromotherm@noreply.github.com Cc : Alexandre CUER alexandre.cuer@cerema.fr, Comment comment@noreply.github.com Objet : Re: [seviprince/dromotherm] évolutions à apporter pour que couplage.py tourne à débit variable (#3)

Bonjour monsieur,

Oui je comprends votre idée. Je pense aussi que les discontinuités inattendues observées sur les graphiques proviendraient de la fonction ode.

Je pourrais écrire le code en y intégrant votre proposition avec un Euler implicite pour l'equa diff sur le Tstock. On pourra ensuite faire évoluer la précision en passant à un RK4( qui est utilisé derrière ode) qu'on écrira nous-mêmes.

Cordialement.

--

You are receiving this because you commented.

Reply to this email directly or view it on GitHub:

https://github.com/seviprince/dromotherm/issues/3#issuecomment-651760632

fbernard494 commented 4 years ago

oui tout à fait on pourra ensuite améliorer les algos de discrétisation au besoin ! Bonne programmation :) N'hésite pas si tu as des questions.

Frédéric

Le 30/06/2020 à 14:30, > seviprince (par Internet, dépôt noreply@github.com) a écrit :

Bonjour monsieur, Oui je comprends votre idée. Je pense aussi que les discontinuités inattendues observées sur les graphiques proviendraient de la fonction ode. Je pourrais écrire le code en y intégrant votre proposition avec un Euler implicite pour l'equa diff sur le Tstock. On pourra ensuite faire évoluer la précision en passant à un RK4( qui est utilisé derrière ode) qu'on écrira nous-mêmes.

Cordialement.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/seviprince/dromotherm/issues/3#issuecomment-651760632, or unsubscribe https://github.com/notifications/unsubscribe-auth/AO7EJ7K2KOQORK3OVAUVQNTRZHLH7ANCNFSM4OCYFFTA.

seviprince commented 4 years ago

Bonjour, J'ai déposé une proposition sur Github, Un aperçu.... fig

alexandrecuer commented 4 years ago

Bizarre Tsable chute d'un coup....des qu'on chauffe....et des qu'on chauffe, on a l'impression qu'on a plus de stockage : Tsable=0

seviprince commented 4 years ago

Je crois avoir trouvé ce qui provoque la chute brusque de Tsable...il manquait le calcul de Tsable lorsque dro=0 et du coup il conserve le 0 lors de la déclaration de Tsable...J'ai corrigé cela et voilà ce que j'obtiens.. fig2

Concernant votre proposition de remonter certains calculs, j'ai pas bien saisi.. A mon avis, je pense qu'il serait mieux de laisser toutes les températures dans une même boucle pour des soucis de lisibilité et de compréhension...déplacer certains calculs dans la fonction risque encore de nous poser les mêmes problèmes lors de l'appel de la fonction un peu plus bas.

seviprince commented 4 years ago

Les températures au niveau de la PAC sont bizarres

alexandrecuer commented 4 years ago

C'est vraiment des fonctions qu'il faut faire....parce que là les formules qui se développent à rallonge, ca ne le fait pas...il faut 2 écrans pour les lire..la plupart du temps, je suis sur smartphone...

A l'arrache et sans tester, je proposerais la démarche suivante......

1) on crée 2 fonctions, une qui fait le schéma d'Euler, l'autre qui qui fait une boucle sur le système complet

def StockLoop(i):
    if pac == 1 :
        der = (msto * cpsto * (Tinj_sto[i] - Tsor_sto[i]) - Pgeo[i]) / (m_sable * Cp_sable)
    else :
        der = msto * cpsto * (Tinj_sto[i] - Tsor_sto[i]) / (m_sable * Cp_sable)
    return Tsable[i]+step*der

def SystemLoop(i):
    dro=agenda_dro[i]
    pac=agenda_pac[i]
    y = Tsable[i-1]
    if pac == 1 :
        Tinj_pac[i] = y-C*Pgeo[i]/k
        Tsor_pac[i] = Tinj_pac[i]-Pgeo[i]/(mpac*cpac)
    else:
        Tinj_pac[i] = Tinj_pac[i-1]
        Tsor_pac[i] = Tsor_pac[i-1]

    if dro == 1:
        dromo.iterate(i,Tinj_dro[i-1]+kelvin,qdro)
        Tsor_dro[i]=dromo.T[i,1,-1]-kelvin
        Tsor_sto[i] = ( k * y + B * Tsor_dro[i] ) / ( k + B)
        Tinj_sto[i] = Tsor_sto[i] + coeff * eff * (Tsor_dro[i] - Tsor_sto[i])
        Tinj_dro[i] = Tsor_dro[i] - eff * (Tsor_dro[i] - Tsor_sto[i])
        Tsable[i]=StockLoop(i-1)

    else:
        dromo.iterate(i,Tinj_dro[i-1]+kelvin,0)
        Tsor_dro[i]=dromo.T[i,1,-1]-kelvin
        Tinj_dro[i]=Tsor_dro[i]
        Tinj_sto[i] = Tinj_sto[i-1] 
        Tsor_sto[i] = Tsor_sto[i-1]
        Tsable[i]=StockLoop(i-1)

2) puis ensuite dans le programme principal :

for i in range (int(i_summerStart),int(simEnd)):
    SystemLoop(i)

En clair, on fait tout pareil mais on n'utilise plus Runge-Kutta et on calcule Tsable avec un schéma maison....

Alexandre

seviprince commented 4 years ago

D'accord. Je vais intégrer ça dans le code et je vous reviens avec les résultats

alexandrecuer commented 4 years ago

Ok mais ton second graphe avait l'air pas mal....qu'est qui te choquait pour la Pac ? Normalement avec ma méthode on devrait trouver pareil qu'avec ta méthode, sauf qu'avec ma méthode c'est plus simple pour changer de schéma... Par contre on ne voit pas trop les effets des starts and stops de dromotherme alors qu'avec le Runge Kutta, c'était visible...peut être en zoomant...sur le graphe 1 il faut passer la courbe bleue en arrière plan...a l'echelle de l'année, on y verra mieux les courbes de temperature

seviprince commented 4 years ago

Pour la PAC, finalement il n'y a pas de problèmes. Ce qui reste à faire c'est:

Pour les besoins du bâtiment, je le transforme en une fonction qui nous retourne le besoin en chauffage et le besoin en ECS??

seviprince commented 4 years ago

Bonjour, J'ai essayé d'intégrer votre proposition mais elle me génère des erreur de type Overflow que j'ai essayé de corriger mais pas totalement.. J'ai donc gardé ma méthode mais en la transformant sous forme de fonctions portant les mêmes noms que les vôtres aussi et elle marche. On peut facilement aussi changer de méthode résolution de l'equa diff sur le stockage juste sur la ligne de calcul de Tsable[i].

alexandrecuer commented 4 years ago

Hello as tu essayé de débugger ? pour débugger, le premier truc qu'on fait c'est d'afficher i pour voir à quel(s) indice(s) se passe(nt) les overflow et évaluer s'il y en a beaucoup, ensuite on affiche des résultats de calculs et on progresse pas à pas jusqu'à converge vers l'endroit du bug pour se concentrer dessus uniquement....

dans notre cas, ce n'est pas très utile car l'erreur que j'ai faite est assez évidente :-) mais trouver l'indice où çà plante est un réflexe à retenir....c'est le mode survie en code :-) mais t'inquiètes ca va venir....

donc pour revenir à l'erreur, j'ai écrit :

dromo.iterate(i,Tinj_dro[i-1]+kelvin,qdro)

non, c'est

dromo.iterate(i,Tinj_dro[i-1]+kelvin,qdro_u)

en plus tout ceci vient d'un commit assez récent lors duquel tu as réalisé une simplification intéressante et que j'ai failli ne pas saisir...

avec celà, je n'ai plus d'overflow......

et j'obtiens celà :

Figure_1

à suivre.....

alexandrecuer commented 4 years ago

pourquoi j'insiste : parce que je veux que le code soit fidèle au notebook et pas qu'il intègre des formules où l'on a 4 fois Tsor_dro comme celà

der = (dro*msto * cpsto * (((( k * y + B * Tsor_dro[i] ) / ( k + B)) + coeff * eff * (Tsor_dro[i] - (( k * y + B * Tsor_dro[i] ) / ( k + B)))) -(( k * y + B * Tsor_dro[i] ) / ( k + B)) ) - Pgeo[i] * pac ) / (m_sable * Cp_sable)
alexandrecuer commented 4 years ago

j'avais laissé une erreur...

donc voilà les fonctions améliorées et documentées :

def StockLoop(i):
    """
    réalise une itération sur la température du stockage

    4 cas distincts :

    1) appel d'énergie en provenance du bâtiment + dromotherme en marche

    2) appel d'énergie en provenance du bâtiment + dromotherme arrêté

    3) pas d'appel d'énergie en provenance du bâtiment + dromotherme en marche

    4) pas d'appel d'énergie en provenance du bâtiment + dromotherme arrêté
    """
    pac=agenda_pac[i]
    dro=agenda_dro[i]
    if pac==1 and dro==1:
        der = (msto * cpsto * (Tinj_sto[i] - Tsor_sto[i]) - Pgeo[i]) / (m_sable * Cp_sable)
    if pac==1 and dro==0:
        der = - Pgeo[i] / (m_sable * Cp_sable)
    if pac==0 and dro==1:
        der = msto * cpsto * (Tinj_sto[i] - Tsor_sto[i]) / (m_sable * Cp_sable)
    if pac==0 and dro==0:
        der = 0

    diff[i+1]=der

    ## schéma de discrétisation
    return Tsable[i]+step*der
def SystemLoop(i):
    """
    On commence par mettre à jour les température d'injection et de sortie de la PAC

    On réalise ensuite une itération de dromotherme selon 2 cas distincts :

    - le dromotherme est en marche et le fluide circule avec un débit unitaire qdro_u

      on récupère de l'énergie et on alimente le stockage via l'échangeur de séparation de réseaux

    - le dromotherme est à l'arrêt : le débit est nul et l'échangeur de séparation de réseau ne tourne pas

      1) pas de prélèvement par l'échangeur de séparation de réseau

         la température d'injection dans le dromotherme est égale à la température de sortie

      2) fonctionnement à perte nulle

         les températures d'injection et de sortie au niveau du stockage sont égales à celles correspondant à l'itération précédante

    Dans tous les cas, on applique StockLoop
    """

    dro=agenda_dro[i]
    pac=agenda_pac[i]
    y = Tsable[i-1]
    if pac == 1 :
        Tinj_pac[i] = y-C*Pgeo[i]/k
        Tsor_pac[i] = Tinj_pac[i]-Pgeo[i]/(mpac*cpac)
    else:
        Tinj_pac[i] = Tinj_pac[i-1]
        Tsor_pac[i] = Tsor_pac[i-1]

    if dro == 1:
        dromo.iterate(i,Tinj_dro[i-1]+kelvin,qdro_u)
        Tsor_dro[i]=dromo.T[i,1,-1]-kelvin
        Tsor_sto[i] = ( k * y + B * Tsor_dro[i] ) / ( k + B)
        Tinj_sto[i] = Tsor_sto[i] + coeff * eff * (Tsor_dro[i] - Tsor_sto[i])
        Tinj_dro[i] = Tsor_dro[i] - eff * (Tsor_dro[i] - Tsor_sto[i])

    else:
        dromo.iterate(i,Tinj_dro[i-1]+kelvin,0)
        Tsor_dro[i]=dromo.T[i,1,-1]-kelvin
        Tinj_dro[i]=Tsor_dro[i]
        Tinj_sto[i] = Tinj_sto[i-1] 
        Tsor_sto[i] = Tsor_sto[i-1]

    Tsable[i]=StockLoop(i-1)
alexandrecuer commented 4 years ago

j'ai revu ta procédure de graphique pour qu'elle marche mieux avec le start and stop...

la voilà :

def graphe(start,stop):

    xrange = meteo[start:stop,0]-start
    clearblue = "#8dd8ff"

    ## graphe 1 - la route
    ax1 = plt.subplot(511)
    l1 = "couplage dromotherme/échangeur de séparation de réseau/stockage/PAC et simulation été/hiver"
    l2 = "température de consigne dans le bâtiment : {} °C".format(Tconsigne)
    plt.title("{}\n{}\n{}\n".format(l1,l2,label))
    plt.ylabel('dromotherme')

    ax1.plot(xrange, agenda_dro[start:stop], color=clearblue, label="dro ON/OFF")
    ax1.legend(loc="upper left")

    ax11 = ax1.twinx()
    ax11.plot(xrange, Tsor_dro[start:stop], label="Tsor_dro", color="red")
    ax11.plot(xrange, Tinj_dro[start:stop], label="Tinj_dro", color="purple")
    ax11.legend(loc="upper right")

    ## graphe 2 - la météo
    ax2 = plt.subplot(512, sharex=ax1)

    ax2.plot(xrange,meteo[start:stop,2],label="rayonnement global en W/m2",color="orange")

    ax21 = ax2.twinx()
    ax21.plot(xrange, meteo[start:stop,1], label="T ext")
    ax2.legend(loc="upper left")
    ax21.legend(loc="upper right")

    ## graphe 3 - le stockage
    ax3 = plt.subplot(513, sharex=ax1)
    plt.ylabel('stockage')

    ax3.plot(xrange, diff[start:stop], color=clearblue, label="derivée")
    ax3.legend(loc="upper left")

    ax31 = ax3.twinx()
    ax31.plot(xrange, Tinj_sto[start:stop], label="Tinj_sto", color="orange")
    ax31.plot(xrange, Tsor_sto[start:stop], label="Tsor_sto", color="blue")
    ax31.plot(xrange, Tsable[start:stop], label="Tsable", color="red")
    ax31.legend(loc="upper right")

    ## graphe 4 - la PAC
    ax4 = plt.subplot(514, sharex=ax1)
    plt.ylabel('PAC')

    ax4.plot(xrange, Tinj_pac[start:stop], label="Tinj_pac", color="red")
    ax4.plot(xrange, Tsor_pac[start:stop], label="Tsor_pac", color="#7cb0ff")
    ax4.plot(xrange, Tinj_pac[start:stop]-Tsor_pac[start:stop], label="ecart de températures de la PAC", color="k")
    ax4.legend()

    ## graphe 5 - le besoin du bâtiment
    ax5 = plt.subplot(515, sharex=ax1)
    plt.ylabel('Bâtiment')
    plt.xlabel("Temps - 1 unité = {} s".format(step))

    ax5.plot(xrange, agenda_pac[start:stop], color=clearblue, label="PAC ON/OFF")
    ax5.legend(loc="upper left")

    ax51 = ax5.twinx()
    ax51.plot(xrange, besoin_total[start:stop], label="besoin total du bâtiment net W", color="orange")
    ax51.plot(xrange, besoin_ECS[start:stop], label="besoin en ECS en W", color="g")
    ax51.legend(loc="upper right")

    plt.show()
alexandrecuer commented 4 years ago

voila le graphique résultant.... j'ai réintégré les dérivées...c'est un indicateur de qualité....

Figure_1_correc3

par contre, vu comme le cas d'usage est codé, il n'y a pas de conso d'ECS l'été...donc ce que j'ai dit lors du copil est faux..la conso d'ECS doit largement pénaliser la recharge du stockage mais en fait la conso d'ECS était inactivée, en raison du fait que tu ne manipules pas correctement les cas d'usage encore je pense....

j'ai mis les on/off et la dérivée en arrière plan

fbernard494 commented 4 years ago

Pas mal ! Il y a une inversion des axes verticaux sur le graphe 3, non ? Sinon j'ai fait tourné et ça tourne bien plus vite désormais, non ? Et on ne voit plus les sauts comme avant !

alexandrecuer commented 4 years ago

oui il y a des inversions j'ai corrigé la fonction graphe fournie plus haut

alexandrecuer commented 4 years ago

et un petit zoom

Figure_1_correc3_zoom

seviprince commented 4 years ago

Bien reçu.Merci

alexandrecuer commented 4 years ago

j'ai un peu revu certaines choses...ce n'est encore finalisé mais dans l'après midi, je vais mettre le code en ligne sur la branche vardeb, comme celà vous pourrez aussi faire tourner les choses de votre côté.....

j'ai remanié le besoin pour pouvoir faire tourner avec ou sans ECS par exemple...je dois reprendre les cas d'usage en simplifiant, désormais nous avons bq avancé et la structuration des cas est un peu obsolète (au niveau code)....

ci joint les captures d'écran macro

une fois que j'aurais mis en ligne, je fermerai cette issue et nous passerons sur les autres....

chauffage_only

chauffage_et_ECS

alexandrecuer commented 4 years ago

résolu cf https://github.com/seviprince/dromotherm/blob/vardeb/examples/mod1D/couplage.py