Closed alexandrecuer closed 4 years ago
J'ai fait quelques tests pour comparer avec ta façon de calculer l'ECS.... il y a un petit décalage du fait que tu faisais partir tout du 1er mai, ce qui n'est pas le milieu de l'année..... pour moi le calcul ne doit pas dépendre de summerstart, qui n'est que le point à partir duquel on décide de lancer la simulation
Je suis parfaitement d'accord avec vous sur le fait de prendre le 1er janvier comme point de départ. Désolé si je ne suis pas trop dans le code aujourd'hui. Je suis un peu plus dans la rédaction du mémoire.
cf https://github.com/seviprince/dromotherm/blob/vardeb/examples/mod1D/couplage.py
on peut générer 8 usecases désormais, vous pouvez les tester : configuration | cas d'usage |
---|---|
usecase=0 avec ECSupply=False | recharge du stock été sans consommation aucune |
usecase=0 avec ECSupply=True | consommation estivale d'ECS |
usecase=1 avec ECSSupply=False | dromotherme été pour recharge du stock puis utilisation pour chauffage sur début hiver |
usecase=1 avec ECSSupply=True | dromotherme été pour recharge du stock puis utilisation pour chauffage+ECS sur début hiver |
usecase=2 avec ECSSupply=False | dromotherme toute l'année et utilisation pour chauffage sur hiver entier |
usecase=2 avec ECSSupply=True | dromotherme toute l'année et utilisation pour chauffage+ECS sur hiver entier |
usecase=3 avec ECSSupply=False | dromotherme été + hiver si rayonnement au dessus d'un seuil et utilisation pour chauffage sur hiver entier |
usecase=3 avec ECSSupply=True | dromotherme été + hiver si rayonnement au dessus d'un seuil et utilisation pour chauffage+ECS sur hiver entier |
cf
@seviprince : il faudra que tu reprennes le notebook https://github.com/seviprince/dromotherm/blob/master/01_couplage.ipynb les éléments d'algorithmique ne sont plus bons....
Oui et il faudra écrire précisément tous les algos utilisés pour Dromotherme, la PAC, le stockage, à l'identique de ce qui est codé. On retrouvera nos petits comme ça ! On pourra donner d'ailleurs un nom de version au code, tel que renseigné dans le mémoire, non ?
Oui, on peut faire des releases Je vais en faire une
@seviprince : il faudra que tu reprennes le notebook https://github.com/seviprince/dromotherm/blob/master/01_couplage.ipynb les éléments d'algorithmique ne sont plus bons....
Bonjour monsieur, D'accord. Je m'y mets
Ok prends ton temps et surtout bien se plonger dans la dernière version du code...
Bonsoir monsieur, Voici une portion du code:
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]
Je ne comprends pas pourquoi vous posez y = Tsable[i-1]
(ligne 72) au lieu de y = Tsable[i]
Puisque Tinj_pac[i] = y-C*Pgeo[i]/k
( il y a un décalage entre Pgeo et y dans ce cas je pense.)
Ou soit Pgeo[i-1] au lieu de Pgeo[i]
Hello
A ce stade, tu ne pourrais poser y=Tsable[i] car il n'est pas calculé...en fait nous avons toutes les valeurs de l'étape i-1 et nous voulons celles de l'étape i....mais bien sur, par construction, nous connaissons Pgeo a toutes les étapes....
d'après le notebook, si y est la température du stock au début de l'étape i et Pgeo[i] la puissance que nous avons prévu de consommer a l'étape i, nous pouvons écrire :
Tinj_pac[i] = y-C*Pgeo[i]/k
c'est ainsi que nous procédions lorsque nous utilisions Runge-Kutta donc j'ai gardé cette façon de faire et tu l'avais toi aussi gardé en fait lorsque tu as abandonné RK....
Ceci dit je te le concède on pourrait faire :
Avant
et donc dans le if dro==1: blabla else: blabla
on pourrait remplacer y par Tsable[i]
Mais à mon avis, cela a peu d'impact....
Alexandre
Tu as raison...Il y a bien un problème.... voici 2 graphiques, l'un sans aucun prélèvement du bâtiment, l'autre avec un besoin ECS à satisfaire... on dirait que le besoin ECS est satisfait par la PAC mais aucun effet sur le stockage...
Il y a bien une différence toutefois....sans ECS, le stock finit à 20°C à la sortie de l'été...avec ECS, c'est plutôt 17.5°C
cf des zooms
j'ai proposé une modification, peut-être les choses seront-elles plus claires ainsi ?
le calcul des valeurs pour l'état i se fait en 3 étapes :
1) On applique StockLoop avec les résultats de l'état précédant, ce qui nous permet de calculer Tsable[i]
. On pose y = Tsable[i]
2) On calcule les températures d'injection et de sortie de la PAC :
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]
3) On réalise ensuite une itération de dromotherme selon 2 cas distincts. Cette étape va nous permettre de calculer les valeurs de Tsor_dro[i]
, Tinj_dro[i]
, T sor_sto[i]
et Tinj_sto[i]
- cas 1 : 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.
```
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])
```
- cas 2 : le dromotherme est à l'arrêt : le débit est nul et l'échangeur de séparation de réseau ne tourne pas. On calcule `Tsor_dro[i]` en utilisant `dromo.iterate(i,Tinj_dro[i-1]+kelvin,0)`
- pas de prélèvement par l'échangeur de séparation de réseau : `Tinj_dro[i] = Tsor_dro[i]`
- fonctionnement à perte nulle pour le stockage: `Tsor_sto[i]=Tsor_sto[i-1]` et `Tinj_sto[i]=Tinj_sto[i-1]`
Nota : dans le notebook, lorsque tu décris l'algorithme, tu peux citer le code comme je viens de le faire, c'est fait pour.....d'ailleurs, tu pourrais presque reprendre cette rédaction en l'illustrant par un logigramme en plus...on peut en faire dans calc de manière assez simple.....qu'en penses-tu ?
autre précision : j'ai fait évoluer le code pour qu'il ait un fonctionnement ressemblant à celui d'une API..... pour changer de cas d'usage, plus besoin de modifier le code, on peut faire :
python couplage.py True 0
celà te fait tourner le cas d'usage 0 avec ECS
j'ai aussi activé les workflows de github (il faut aller dans l'onglet actions pour voir les résultats des actions....celà permet de tester la syntaxe du code avec un outil qui s'appelle flake8 et aussi de faire tourner le code et de produire des sorties automatiquement (pas encore finalisé)
Bonjour monsieur, L'idée du logigramme est une bonne idée..elle va bien illustrer le fonctionnement. Je vais intégrer votre nouvelle proposition dans le code et voir ce que ça donne.
j'ai proposé une modification, peut-être les choses seront-elles plus claires ainsi ?
le calcul des valeurs pour l'état i se fait en 3 étapes :
- On applique StockLoop avec les résultats de l'état précédant, ce qui nous permet de calculer
Tsable[i]
. On posey = Tsable[i]
- On calcule les températures d'injection et de sortie de la PAC :
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]
On réalise ensuite une itération de dromotherme selon 2 cas distincts. Cette étape va nous permettre de calculer les valeurs de
Tsor_dro[i]
,Tinj_dro[i]
,T sor_sto[i]
etTinj_sto[i]
- cas 1 : 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.
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])
cas 2 : le dromotherme est à l'arrêt : le débit est nul et l'échangeur de séparation de réseau ne tourne pas. On calcule
Tsor_dro[i]
en utilisantdromo.iterate(i,Tinj_dro[i-1]+kelvin,0)
- pas de prélèvement par l'échangeur de séparation de réseau :
Tinj_dro[i] = Tsor_dro[i]
- fonctionnement à perte nulle pour le stockage:
Tsor_sto[i]=Tsor_sto[i-1]
etTinj_sto[i]=Tinj_sto[i-1]
Nota : dans le notebook, lorsque tu décris l'algorithme, tu peux citer le code comme je viens de le faire, c'est fait pour.....d'ailleurs, tu pourrais presque reprendre cette rédaction en l'illustrant par un logigramme en plus...on peut en faire dans calc de manière assez simple.....qu'en penses-tu ?
La modification que vous aviez apportée est plus compréhensible. Je m'y retrouve cette fois-ci
désormais on va utiliser les workflows....
c'est très pratique : j'en ai crée un appelé couplage1, chacun d'entre nous peut en créer..... le workflow se lance après chaque modification de quelque chose dans le code... pour ce qui est de couplage1:
En page d'accueil on peut afficher le status de ces workflow, via un système de badge....celà permet de suivre la qualité de code :
pour créer un workflow, il faut aller dans le répertoire ./github/workflows et créer un fichier yml avec la syntaxe qui va bien.....
D'accord.
le calcul du besoin du bâtiment est à reprendre...l'intégration du besoin en ECS doit être améliorée.....
une première idée pour améliorer est de créer la fonction suivante :
on génère ainsi le vecteur numpy de l'ECS de manière très simple :
cette génération doit être réalisée dans les usecases à mon sens.....