1. Fichiers modèles

Pour cette documentation, nous reprenons le modèle du guide Modéliser pour Ladybug, ainsi qu’un fichier Grasshopper qui reprend l’implémentation de ce modèle dans Grasshopper :

Télécharger le modèle d’exemple Rhino

Télécharger le fichier Grasshopper d’exemple

Le fichier Grasshopper d'exemple contient les dépendances suivantes, il convient de les installer :

  • Ladybug Tools 1.8.0 (Guide d’installation) ;
  • Bifocals 0.5.0.0 (optionnel, pour l’affichage des noms de composants) ;
  • Moonlight 1.0.0.0 (optionnel, pour l’affichage en mode sombre).

2. Décomposition du script

Le script est divisé en groupes (visibles sous la forme de blobs de couleur et portant chacun un titre). La suite de ce guide indique l’usage de chacun de ces groupe et sa fonction dans la définition.

Définition du script Grasshopper pour le paramétrage de la ventilation naturelle dans une simulation avec Ladybug Tools

Définition du script Grasshopper pour le paramétrage de la ventilation naturelle dans une simulation avec Ladybug Tools

2.1. Définition du modèle de base

Les groupes 1 (Rooms), 2 (Apertures), 3 (Shades) et 4 (Modèle) sont tous définis dans le guide Modéliser pour Ladybug. Ces 4 groupes de composants permettent de créer le modèle Honeybee à partir de la géométrie définie dans Rhino.

Ce guide se concentre uniquement sur le paramétrage de la ventilation naturelle, qui est situé entre le composant HB Add Subface et le composant HB Model, soit le groupe 5 (Ventilation naturelle).

Il est indispensable de définir l'entrée operable_ sur le composant HB Aperture en True, pour bien signifier que la fenêtre défini dans la pièce peut être ouverte. Si cette action n'est pas faite, le composant HB Window Opening présentera une erreur.

 La fenêtre est paramétrée comme étant 'ouvrable'

2.2. Ventilation naturelle

Détail des composants pour le paramétrage de la ventilation naturelle

Détail des composants pour le paramétrage de la ventilation naturelle

2.2.1. Le composant HB Window Opening

C’est le principal composant, qui vient se placer entre la définition de Rooms ayant des Apertures, et le HB Model. Ce composant comporte 6 entrées :

Nom de l’entréeInformation attenduePrésence
_rooms_Pièces HoneybeeObligatoire
_vent_cntrlObjet Ventilation Control (cf. partie suivante)Obligatoire
_fract_area_operUn nombre entre 0.0 et 1.0 pour la fraction de la surface de la fenêtre qui est ouvrable.
Valeur par défaut : 0.5 (typique des fenêtres coulissantes).
Optionnel
_fract_height_oper_Un nombre compris entre 0.0 et 1.0 pour la fraction de la distance entre le bas et le haut de la fenêtre qui est ouvrable.
Valeur par défaut : 1.0 (typique des fenêtres qui glissent horizontalement).
Optionnel
_discharge_coeff_Nombre compris entre 0.0 et 1.0 qui sera multiplié par la surface de la fenêtre dans la partie de l’équation relative à la poussée aérostatique, afin de tenir compte du frottement supplémentaire dû à la géométrie de la fenêtre, aux moustiquaires, etc. Cette valeur doit être réduite si les fenêtres sont de type auvent ou battant et ne peuvent pas s’ouvrir complètement. Voici quelques valeurs courantes pour ce coefficient :
0.0 : La ventilation n’est pas prise en compte dans le calcul.
0.45 : Pour des fenêtres non obstruées avec une moustiquaire.
0.65 : Pour les fenêtres non obstruées sans moustiquaire.
Optionnel
_wind_cross_vent_Booléen indiquant s’il existe une ouverture de surface à peu près égale sur le côté opposé de la pièce, de sorte à créer une ventilation traversante. Si False, la pièce est considérée comme mono-orientée.
Si rien n’est renseigné, les normales des ouvertures utilisables seront analysés : si les normales des fenêtres d’une pièce donnée présentent une différence d’angle supérieure à 90 degrés, la ventilation transversale sera réglée sur True. Dans le cas contraire, la valeur sera False.
Optionnel

Il est important de renseigner ces valeurs en conformité avec le projet ou le bâtiment existant représenté, et selon les ordres de grandeurs indiqués par Honeybee dans le tableau ci-dessus.

Par exemple, un ouvrant à la française aura les caractéristiques suivantes sur le modèle d’exemple :

  • _fract_area_oper : 1.0
  • _fract_height_oper_ : 1.0
  • _discharge_coeff_ : 0.65
  • _wind_cross_vent_ : False (car les pièces sont ici toutes mono-orientées)

2.2.2. Le composant HB Ventilation Control

Ce composant permet de gérer des conditions pour autoriser ou non l’ouverture d’une fenêtre. Il est principalement orienté sur la détection de températures, et peut recevoir un calendrier d’ouverture. Ses entrées sont :

Nom de l’entréeInformation attenduePrésence
min_in_temp_Un nombre entre -100 et 100 pour la température intérieure minimale à laquelle ventiler (en degrés Celsius). En général, cette variable est utilisée pour déclencher la ventilation avec des valeurs proches de la température ambiante au-delà desquelles les fenêtres s’ouvrent (par exemple, 22 °C). (Valeur par défaut : -100 °C).Optionnel
max_in_temp_Un nombre entre -100 et 100 pour la température intérieure maximale à laquelle ventiler (en degrés Celsius). Cette valeur peut être utilisée pour définir une température maximale à partir de laquelle la ventilation naturelle est arrêtée et un système de climatisation est mis en marche. (Valeur par défaut : 100 °C).Optionnel
min_out_temp_Un nombre entre -100 et 100 pour la température extérieure minimale à laquelle ventiler (en degrés Celsius). Cette valeur peut être utilisée pour s’assurer que le refroidissement par ventilation naturelle n’a pas lieu en hiver, même si la pièce est au-dessus de la température min_in_temp (valeur par défaut : -100 °C).Optionnel
max_out_temp_Un nombre entre -100 et 100 pour la température extérieure maximale à laquelle ventiler (en degrés Celsius). Cette valeur peut être utilisée pour fixer une limite lorsqu’il fait trop chaud à l’extérieur pour un refroidissement par ventilation. (Valeur par défaut : 100 °C).Optionnel
delta_temp_Un nombre entre -100 et 100 pour le delta de température (en degrés Celsius) entre l’intérieur et l’extérieur en dessous duquel la ventilation est arrêtée. Il s’agit généralement d’un nombre positif, de sorte que la ventilation n’a lieu que lorsque l’extérieur est plus froid que l’intérieur. Les nombres négatifs indiquent à quel point l’extérieur peut être plus chaud que l’intérieur avant que la ventilation ne soit arrêtée. (Valeur par défaut : -100).Optionnel
_schedule_Un calendrier facultatif pour la ventilation au cours de l’année. Il peut également s’agir du nom d’un programme à rechercher dans la bibliothèque des normes. Notez que ce programme est appliqué en plus des points de consigne. Le type de ce programme doit être On/Off et les valeurs doivent être soit 0 (pas de possibilité de ventilation), soit 1 (ventilation possible). (Valeur par défaut : Toujours ouvert).Optionnel

Ce composant peut être utilisé de différentes manières, selon la meilleure représentation de l’usage réel de la fenêtre. Une seule valeur peut par exemple être entrée dans min_in_temp_ (par exemple 22 °C), et indiquera une ouverture de fenêtre uniquement lorsqu’il fait plus de 22 °C à l’intérieur de la pièce, donc à priori uniquement en été.

Dans le cas du fichier d’exemple, une série de composants a été spécialement développée pour gérer l’ouverture des fenêtres arbitrairement quelques minutes par heure :

  1. Pour cela, nous utilisons un HB Fixed Interval Schedule, relié à l’entrée _schedule_. Ce composant doit être alimenté par une série de valeurs, qui varie selon le pas de temps (par défaut, une valeur par heure, soit 8760 valeurs pour une année complète).
  2. Dans le cas présent, nous souhaitons avoir un contrôle sur un pas de temps de 5 minutes. C’est la raison pour laquelle l’entrée _timestep_ du composant est renseignée avec la valeur 12 (1h divisée par 12 = 5 minutes).
  3. Nous devons donc produire un calendrier d’une année, avec une valeur toute les 5 minutes, soit 8760 x 12 = 105 120 valeurs.
  4. Le composant GhPython Script a été spécifiquement développé pour géré ce paramétrage facilement (son code source est disponible ci-après). En entrée, il reçoit un Gene Pool, qui permet de choisir à quelles heures la fenêtre est ouverte (les heures d’occupation), et le temps d’ouverture à chacune de ces heures (window_open_time).
  5. Enfin, le paramétrage de cette journée type est répétée avec le composant Repeat Data, qui permet de répéter ce calendrier sur toute l’année.

Avec les paramètres renseignés sur l'exemple ci-dessous, on a indiqué que tous les jours, les fenêtres seraient ouvertes 5 minutes par heure entre 8h et 12h, puis entre 14h et 19h.

 Détail du calendrier d'ouverture des fenêtres

L'usage de ce calendrier permet d'ouvrir les fenêtres 5 minutes par heure, même en hiver, et de quantifier les déperditions dues à une ventilation naturelle sur toute l'année.

Par défaut, le pas de temps de la simulation est d'une heure. L'entrée _timestep_ du composant HB Simulation Parameter doit être modulée en fonction du calendrier de ventilation naturelle, sans quoi la simulation n'intègrera pas des évènements se déroulant en dessous du pas de temps paramétré.

2.2.3. Code source du composant GhPython

Pour fonctionner correctement, l’entrée gene_pool du composant doit être paramétrée sur ‘Tree Access’. Pour cela, cliquer-droit sur gene_pool et choisir dans le menu qui s’ouvre ‘Tree Access’ (au lieu de la valeur par défaut, ‘Item Access).

Paramétrage d'une entrée en Tree Access

Paramétrage d'une entrée en Tree Access

Le code source contenu dans le composant GhPython Script est le suivant :

import rhinoscriptsyntax as rs
import math
 
def extract_from_datatree(tree):
    """Extracts values from a Grasshopper DataTree."""
    if hasattr(tree, 'Branches'):
        if tree.BranchCount > 0:
            return [float(x) for x in tree.Branch(0)]
    elif isinstance(tree, list):
        return tree
    return [0] * 24
 
def validate_gene_pool(gene_pool):
    """Validates the gene pool input and returns a valid 24-hour schedule."""
    values = extract_from_datatree(gene_pool)
    if len(values) != 24:
        return [0] * 24
    
    return [1 if abs(float(x) - 1) < 0.01 else 0 for x in values]
 
def process_window_time(window_time):
    """Processes and validates the window open time input."""
    try:
        window_time = float(window_time)
        window_time = round(window_time / 5) * 5
        return max(0, min(60, window_time))
    
    except (ValueError, TypeError):
        return 0
 
def create_ventilation_schedule(gene_pool, window_open_time):
    """Creates a 288-element ventilation schedule based on inputs."""
    valid_gene_pool = validate_gene_pool(gene_pool)
    valid_window_time = process_window_time(window_open_time)
    
    num_intervals_open = int(valid_window_time // 5)
    
    output = [0] * 288
    
    # Populate output based on gene pool
    for hour in range(24):
        if valid_gene_pool[hour] == 1:
            start_index = hour * 12
            # Set the first num_intervals_open intervals to 1
            output[start_index:start_index + num_intervals_open] = [1] * num_intervals_open
    
    return output
 
# Debug prints
print("Input gene_pool type:", type(gene_pool))
print("Input gene_pool:", gene_pool)
print("Input window_open_time type:", type(window_open_time))
print("Input window_open_time:", window_open_time)
 
try:
    # Extract values from DataTree and validate
    valid_gene_pool = validate_gene_pool(gene_pool)
    print("Validated gene_pool:", valid_gene_pool)
    
    valid_window_time = process_window_time(window_open_time)
    print("Validated window_time:", valid_window_time)
    
    a = create_ventilation_schedule(gene_pool, window_open_time)
    
    print("First 24 elements of output:", a[:24])
except Exception as e:
    print("Error occurred:", str(e))
    a = [0] * 288