Commit 7aaecfde authored by Grand Francois's avatar Grand Francois
Browse files

Implémentation conduite distributrice + tests

Showing with 186 additions and 11 deletions
+186 -11
......@@ -21,8 +21,9 @@
},
"scripts": {
"build": "./node_modules/typescript/bin/tsc --p src/tsconfig.app.json",
"buildtest": "./node_modules/typescript/bin/tsc --p spec/tsconfig.spec.json",
"test": "./node_modules/typescript/bin/tsc --p spec/tsconfig.spec.json && ./node_modules/karma/bin/karma start",
"lint": "./node_modules/tslint/bin/tslint",
"viz": "tsviz -recursive src/ jalhyd_class_diagram.png"
}
}
}
\ No newline at end of file
/// <reference path="../node_modules/@types/jasmine/index.d.ts" />
import { Result } from "../src/base";
import { ConduiteDistrib } from "../src/cond_distri";
describe('Class ConduiteDistrib: ', () => {
// beforeEach(() => {
// nub.sVarsEq = ["C"];
// res.vCalc = 3;
// });
// beforeAll(() => {
// });
describe('Calc(): ', () => {
it('Q should be 9.393', () => {
let nub = new ConduiteDistrib();
nub.v.d = 1.2;
nub.v.j = 0.6;
nub.v.lg = 100;
nub.v.nu = 1e-6;
let res = new Result;
res.vCalc = 9.393428919333346;
expect(nub.Calc("q").vCalc).toEqual(res.vCalc);
});
});
describe('Calc(): ', () => {
it('Q should be 152.992', () => {
let nub = new ConduiteDistrib();
nub.v.d = 2;
nub.v.j = 0.7;
nub.v.lg = 10;
nub.v.nu = 1e-6;
let res = new Result;
res.vCalc = 152.99207150346;
expect(nub.Calc("q").vCalc).toEqual(res.vCalc);
});
});
describe('Calc(): ', () => {
it('D should be 2.128465006', () => {
let nub = new ConduiteDistrib();
nub.v.q = 3;
nub.v.j = 0.7;
nub.v.lg = 10;
nub.v.nu = 1e-6;
let res = new Result;
res.vCalc = 2.1284650063949666;
expect(nub.Calc("d").vCalc).toEqual(res.vCalc);
});
});
describe('Calc(): ', () => {
it('J should be 0.00814087671', () => {
let nub = new ConduiteDistrib();
nub.v.q = 3;
nub.v.d = 1.2;
nub.v.lg = 10;
nub.v.nu = 1e-6;
let res = new Result;
res.vCalc = 0.008140876712328136;
expect(nub.Calc("j").vCalc).toEqual(res.vCalc);
});
});
describe('Calc(): ', () => {
it('Lg should be 0.008140876712328136', () => {
let nub = new ConduiteDistrib();
nub.v.q = 3;
nub.v.d = 1.2;
nub.v.j = 0.6;
nub.v.nu = 1e-6;
let res = new Result;
res.vCalc = 737.0213567924325;
expect(nub.Calc("lg").vCalc).toEqual(res.vCalc);
});
});
describe('Calc(): ', () => {
it('Nu should be 0.00295066762', () => {
let nub = new ConduiteDistrib();
nub.v.q = 3;
nub.v.d = 1.2;
nub.v.j = 0.6;
nub.v.lg = 100;
let res = new Result;
res.vCalc = 0.0029506676187219757;
expect(nub.Calc("nu").vCalc).toEqual(res.vCalc);
});
});
});
......@@ -7,7 +7,7 @@ export class Result {
/** Valeur calculée */
public vCalc: number;
/** Variables intermédiaires, flags d'erreur */
public extraVar: {};
public extraVar: {};
}
/**
......@@ -25,7 +25,7 @@ export class Serie {
export interface IParametres {
[key: string]: number;
[key: string]: number; // map : array of numbers with string keys
}
......@@ -38,14 +38,14 @@ export abstract class Debug {
/**
* @param DBG Flag de débuggage
*/
constructor(private DBG: boolean) {}
constructor(private DBG: boolean) { }
/**
* Affiche un message dans la console si le flag this.DBG est à true
* @param s Message à afficher dans la console
*/
protected debug(s: any) {
if(this.DBG) console.log(s);
if (this.DBG) console.log(s);
}
}
......@@ -55,7 +55,7 @@ export abstract class Debug {
*/
export abstract class Nub extends Debug {
/// Nom des variables calculées par la méthode Equation
private _varsEq: string[];
private _varsEq: string[] = [];
public v: IParametres;
......@@ -65,7 +65,7 @@ export abstract class Nub extends Debug {
}
/**
/**
* Formule utilisée pour le calcul analytique (solution directe ou méthode de résolution spécifique)
*/
abstract Equation(sVarCalc: string): Result;
......@@ -75,10 +75,10 @@ export abstract class Nub extends Debug {
* Calcul d'une équation quelque soit l'inconnue à calculer
*/
Calc(sVarCalc: string): Result {
for(let sVarEq of this._varsEq) {
if(sVarCalc == sVarEq) {
for (let sVarEq of this._varsEq) {
if (sVarCalc == sVarEq) {
return this.Equation(sVarCalc);
}
}
}
return this.Solve(sVarCalc);
}
......
import { Nub, Result, IParametres } from "./base";
// export interface IParamConduiteDistrib extends IParametres {
export class ParamConduiteDistrib implements IParametres {
[key: string]: number;
/** Débit */
["q"]: number = 0;
/** Diamètre */
["d"]: number = 0;
/** Perte de charge */
["j"]: number = 0;
/** Longueur de la conduite */
["lg"]: number = 0;
/** Viscosité dynamique ni */
["nu"]: number = 0;
}
export class ConduiteDistrib extends Nub {
constructor() {
// let params: ParamConduiteDistrib;
// params = new ParamConduiteDistrib;
let params: { [key: string]: number };
params = {};
// params["q"] = 0;
// params["d"] = 0;
// params["j"] = 0;
// params["lg"] = 0;
// params["nu"] = 0;
super(params);
this.AddVarEq("q");
this.AddVarEq("d");
this.AddVarEq("j");
this.AddVarEq("lg");
this.AddVarEq("nu");
}
Equation(sVarCalc: string): Result {
let res: Result = new Result();
var K = 0.3164 * Math.pow(4, 1.75) / (5.5 * 9.81 * Math.pow(3.1415, 1.75)); // Constante de la formule
switch (sVarCalc) {
case "j":
res.vCalc = K * Math.pow(this.v.nu, 0.25) * Math.pow(this.v.q, 1.75) * this.v.lg / Math.pow(this.v.d, 4.75);
break;
case "d":
res.vCalc = Math.pow(this.v.j / (K * Math.pow(this.v.nu, 0.25) * Math.pow(this.v.q, 1.75) * this.v.lg), 1 / 4.75);
break;
case "q":
res.vCalc = Math.pow(this.v.j / (K * Math.pow(this.v.nu, 0.25) * this.v.lg / Math.pow(this.v.d, 4.75)), 1 / 1.75)
break;
case "lg":
res.vCalc = this.v.j / (K * Math.pow(this.v.nu, 0.25) * Math.pow(this.v.q, 1.75) / Math.pow(this.v.d, 4.75));
break;
case "nu":
res.vCalc = Math.pow(this.v.j / (K * Math.pow(this.v.q, 1.75) * this.v.lg / Math.pow(this.v.d, 4.75)), 1 / 0.25);
break;
}
return res;
}
}
\ No newline at end of file
......@@ -154,6 +154,6 @@ export class Dichotomie extends Debug {
}
}
res.vCalc = v
return ;
return res;
}
}
\ No newline at end of file
  • Bravo pour ce nouveau module de calcul :) Deux petites remarques :

    • Pense à citer le n° de l'issue dans le commentaire du commit (Ici #2 (closed)) pour que le commit apparaisse dans le suivi de l'issue (Comme je le cite ici, il devrait du coup apparaître)
    • Pour les tests sur les réels, il faut faire des tests pour une précision donnée. Jasmine propose la fonction ToBeCloseTo(Valeur,Precision). Tu peux voir un exemple avec les tests sur la dichotomie d18c6f60.
    Edited by Dorchies David
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment