DDorch / jacase

JAvascript CAlculators for Scientific Equations
http://hydraulique.g-eau.net/-Calculettes-pour-l-hydraulique-
MIT License
0 stars 0 forks source link

Calculs hydrauliques sur les sections de canaux #21

Open DDorch opened 8 years ago

DDorch commented 8 years ago

Ces calculs concernent les calculettes suivantes :

Comme ces calculettes travaillent sur le même objet, il y a une grosse partie du code qui doit être mise en commun. Je propose qu'on crée un dossier "common/section" où sera regroupé tout le code commun de ces calculettes.

La première chose à mettre en commun sont la description des champs qui décrivent le type de section hydraulique et les paramètres de chacun des types (rectangulaire, trapézoïdal, circulaire, puissance). Cette description se trouvera au même format que les fichiers json des formulaires dans le fichier common/section/section.config.json. Pour lire ce fichier json, je pense qu'il faut créer un composant qui va hériter du composant Formulaire et qui servira de composant parent pour les calculettes traitant les sections hydrauliques. De cette façon, on pourra réécrire une méthode getFields qui chargera se fichier json, appelera la méthode getFields de la classe parente et concaténera les deux tableaux fields.

Ensuite, il y a un gros travail de reprise des codes PHP qui effectuent les nombreux calculs au niveau des sections. Sur ce point, je crois que le mieux et de prendre les fichiers sources tels que et les convertir en typescript.

manalaf commented 8 years ago

La classe FormSection va hériter de Formulaire, donc on appelera le nom du fichier json dans son constructeur : constructor(public http: Http){ super(http,'section'); } Ce qui chargera automatiquement le fichier json commun aux trois calculettes. Cependant, lors la methode getFields de la Formulaire contient la methode initJsonVar qui initialise des champs qui ne sont pas forcément dans section.config.json (tq fs_hydraulique).

manalaf commented 8 years ago

Ah on peut tout simplement les appeler dans le json en les laissant vide ? Je pense qu'il faudrait ajouter un paramètre au constructeur de FormSection qui récupérera le nom des json des classes filles pour pouvoir les charger et concaténer les 2 par la suite.

manalaf commented 8 years ago

Je suis entrain de lire les méthodes de calculs faites en php. Pour le calcul de débit en régime uniforme, je n'arrive pas à retrouver où sont initialisés les paramètres R et S qui correspondent respectivement au rayon hydraulique et à la surface mouillée. Sont ils déclarés comme des constantes ?

manalaf commented 8 years ago

Est ce qu'il faudrait créer une classe pour chaque type de section comme ce qui a déjà été fait et qui héritent toutes de la classe aSection ?

DDorch commented 8 years ago

Oui. La plupart des calculs hydrauliques sont communs à toutes les sections (par exemple, la charge, l'impulsion...). Seules les données géométriques sont propres à chaque type de section. Il est donc nécessaire d'avoir une classe mère qui gère les calculs généraux et des classes filles par type pour les calculs propres au type de section.

DDorch commented 8 years ago

Pour le calcul de B, S et les autres tout fonctionne avec un système de cache un peu complexe. Les données sont enregistrées dans un tableau à leur premier calcul et tant que Z ne change pas, on utilise la donnée stockée dans le tableau sans la recalculer.

manalaf commented 8 years ago

public $oP; /// Paramètres du système canal (classe oParam) protected $oLog; /// Pour l'affichage du journal de calcul oLog est un tableau comportant les paramètres à calculer et que l'on affiche lors du calcul des courbes de remous. C'est ça ? oP est de type cParam ?

DDorch commented 8 years ago

oLog est une instanciation de la classe cLog qui sert à gérer les messages du journal de calcul. Ça sert à mémoriser les messages des étapes de calcul et à les afficher à la fin du calcul.

oP est de type cParam et contient les paramètres de calculs ne dépendant pas de la section et peut être d'autres choses, il faut regarder le code.

Le PHP orienté objet étant proche de TypeScript, le mieux est de reprendre les codes PHP et les modifier pour que ça compile en TypeScript. Le code de calcul est assez long et complexe et vouloir le réécrire de zéro risque de prendre un temps énorme sans compter le débogage qui avait déjà été très long pour le code PHP.

manalaf commented 8 years ago

Le tirant d'eau Y est considéré comme booléen des fois alors que c'est une valeur numérique. Que signifie Y=false par exemple ? ça veut dire qu'il y en a pas, autrement dit : !Y ?

DDorch commented 8 years ago

La réponse est ici : http://zone.spip.org/trac/spip-zone/browser/_plugins_/hydraulic/trunk/hyd_inc/section.class.php#L148

Lorsqu'on appelle la fonction Calc, si rY n'est pas spécifié alors il vaut false.

Si rY vaut false alors on utilise la valeur de rY définie lors d'un appel précédent.

Si rY est différent de false et que sa valeur a changé par rapport à avant alors il faut effacer le cache des variables hydrauliques déjà calculées.

Ensuite dans les deux cas, on vérifie si la variable demandée à déjà été calculée, si oui, on la prend dans le cache, si non, on la calcule.