simclimat-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
110 lines • 15.3 kB
JavaScript
import { CLogger } from './simclimat-lib.logger';
export class CDataArray {
/**
* Constructor.
*
* The constructor of this class initialise physics constants and model vars.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
constructor(temps_elem, indice_min, indice_max) {
this.N = 100;
this.datas = [];
this.past_datas = [];
this.resolution = temps_elem;
this.indice_min = indice_min;
this.indice_max = indice_max;
this.imin = this.indice_min;
this.imax = this.indice_max;
} // eo constructor
get(index) {
if (this.is_in_bounds(index)) {
return this.datas[index];
}
else {
throw new Error('index is out of range');
}
} // eo get method
get_past(index) {
if (this.is_in_bounds(index)) {
return this.past_datas[index];
}
else {
throw new Error('index is out of range');
}
} // eo get_past method
set(index, value) {
if (this.is_in_bounds(index)) {
this.datas[index] = value;
}
else {
throw new Error('index is out of range');
}
} // eo set method
set_past(index, value) {
if (this.is_in_bounds(index)) {
this.past_datas[index] = value;
}
else {
throw new Error('index is out of range');
}
} // eo set_past method
minimax(current_min, current_max, start_index, init) {
if (init) {
current_min = Number.POSITIVE_INFINITY;
current_max = Number.NEGATIVE_INFINITY;
}
let cur_val;
for (let i = start_index; i <= this.indice_max; i++) {
cur_val = this.datas[i];
if (cur_val > current_max)
current_max = cur_val;
if (cur_val < current_min)
current_min = cur_val;
}
} // eo minimax method
interpolation_old(x) {
let a = x / this.resolution;
let ainf = Math.floor(a);
let vinf = this.datas[ainf];
if (ainf == a)
return vinf;
let asup = ainf + 1.;
let vsup = this.datas[ainf + 1];
return vsup * (a - ainf) + vinf * (asup - a);
} // eo interpolation_old method
is_in_bounds(i) {
return i >= this.indice_min && i <= this.indice_max;
} // eo is_in_bounds method
xmin() {
return this.resolution * this.imin;
} // eo xmin method
xmax() {
return this.resolution * this.imax;
} // eo xmax method
recast_final_initial_origin(t) {
this.datas[0] = t.datas[t.indice_max];
return true;
} // eo recast_final_initial_origin method
recast_final_initial_origin_calotte(t) {
this.datas[0] = 90 - t.datas[t.indice_max];
return true;
} // eo recast_final_initial_origin method
recast_final_initial_past(t, ev) {
let temps_origin = t.imax * t.resolution;
for (let i = 1; i <= this.indice_max; i++) {
let indice_old = 0;
indice_old = this.indice_max - (i * ev.temps_elem() / t.resolution);
indice_old = Math.max(indice_old, 1);
indice_old = Math.min(indice_old, this.indice_max);
this.set_past(i, t.get(indice_old));
CLogger.log('recast_final_initial: indice_max=' + this.indice_max + ' - temps_elem=' + ev.temps_elem() + ' - Resolution=' + t.resolution);
CLogger.log('recast_final_initial: i=' + i + ' - indice_old=' + indice_old + ' - Température=' + t.get(indice_old));
}
return true;
} // eo recast_final_initial_past method
} // eo CDataArray class
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltY2xpbWF0LWxpYi5kYXRhLWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltY2xpbWF0LWxpYi9zcmMvbGliL3NpbWNsaW1hdC1saWIuZGF0YS1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakQsTUFBTSxPQUFPLFVBQVU7SUFXbkI7Ozs7Ozs7OztPQVNHO0lBRUgsWUFBYSxVQUFrQixFQUFFLFVBQWtCLEVBQUUsVUFBa0I7UUFwQnZFLE1BQUMsR0FBeUIsR0FBRyxDQUFDO1FBQzlCLFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBQzdCLGVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBbUJ6QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFTLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksR0FBUyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxpQkFBaUI7SUFHWixHQUFHLENBQUUsS0FBYTtRQUNyQixJQUFLLElBQUksQ0FBQyxZQUFZLENBQUUsS0FBSyxDQUFFLEVBQy9CO1lBQ0ksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO2FBRUQ7WUFDSSxNQUFNLElBQUksS0FBSyxDQUFFLHVCQUF1QixDQUFFLENBQUM7U0FDOUM7SUFDTCxDQUFDLENBQUMsZ0JBQWdCO0lBR1gsUUFBUSxDQUFFLEtBQWE7UUFDMUIsSUFBSyxJQUFJLENBQUMsWUFBWSxDQUFFLEtBQUssQ0FBRSxFQUMvQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMs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QUFVLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBRSxVQUFVLENBQUUsQ0FBRSxDQUFDO1NBQzNIO1FBRUosT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDLENBQUMsc0NBQXNDO0NBRTNDLENBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0V4cGVyaWVuY2VWYWx1ZXMgfSBmcm9tICcuL3NpbWNsaW1hdC1saWIuZXhwZXJpZW5jZS12YWx1ZXMnO1xuaW1wb3J0IHsgQ0xvZ2dlciB9IGZyb20gJy4vc2ltY2xpbWF0LWxpYi5sb2dnZXInO1xuXG5leHBvcnQgY2xhc3MgQ0RhdGFBcnJheSB7XG5cbiAgICBOOiBudW1iZXIgICAgICAgICAgICAgICA9IDEwMDtcbiAgICBkYXRhczogbnVtYmVyW10gICAgICAgICA9IFtdO1xuICAgIHBhc3RfZGF0YXM6IG51bWJlcltdICAgID0gW107XG4gICAgcmVzb2x1dGlvbjogbnVtYmVyO1xuICAgIGluZGljZV9taW46IG51bWJlcjtcbiAgICBpbmRpY2VfbWF4OiBudW1iZXI7XG4gICAgaW1pbjogbnVtYmVyO1xuICAgIGltYXg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yLiBcbiAgICAgKiBcbiAgICAgKiBUaGUgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyBpbml0aWFsaXNlIHBoeXNpY3MgY29uc3RhbnRzIGFuZCBtb2RlbCB2YXJzLlxuICAgICAqIFxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUge0BsaW5rIGNvcmUtbGlicmFyeSNTdGF0aXN0aWNzIHwgU3RhdGlzdGljcyBzdWJzeXN0ZW19LlxuICAgICAqIFxuICAgICAqIEBiZXRhXG4gICAgICovXG5cbiAgICBjb25zdHJ1Y3RvciggdGVtcHNfZWxlbTogbnVtYmVyLCBpbmRpY2VfbWluOiBudW1iZXIsIGluZGljZV9tYXg6IG51bWJlciApIHtcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uID0gdGVtcHNfZWxlbTtcbiAgICAgICAgdGhpcy5pbmRpY2VfbWluID0gaW5kaWNlX21pbjtcbiAgICAgICAgdGhpcy5pbmRpY2VfbWF4ID0gaW5kaWNlX21heDtcbiAgICAgICAgdGhpcy5pbWluICAgICAgID0gdGhpcy5pbmRpY2VfbWluO1xuICAgICAgICB0aGlzLmltYXggICAgICAgPSB0aGlzLmluZGljZV9tYXg7XG4gICAgfSAvLyBlbyBjb25zdHJ1Y3RvclxuXG5cbiAgICBwdWJsaWMgZ2V0KCBpbmRleDogbnVtYmVyICkgOiBudW1iZXIge1xuICAgICAgICBpZiAoIHRoaXMuaXNfaW5fYm91bmRzKCBpbmRleCApIClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlJyApO1xuICAgICAgICB9XG4gICAgfSAvLyBlbyBnZXQgbWV0aG9kXG5cblxuICAgIHB1YmxpYyBnZXRfcGFzdCggaW5kZXg6IG51bWJlciApIDogbnVtYmVyIHtcbiAgICAgICAgaWYgKCB0aGlzLmlzX2luX2JvdW5kcyggaW5kZXggKSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhc3RfZGF0YXNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlJyApO1xuICAgICAgICB9XG4gICAgfSAvLyBlbyBnZXRfcGFzdCBtZXRob2RcblxuXG4gICAgcHVibGljIHNldCggaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlciApOiB2b2lkIHtcbiAgICAgICAgaWYgKCB0aGlzLmlzX2luX2JvdW5kcyggaW5kZXggKSApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNbaW5kZXhdICAgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZScgKTtcbiAgICAgICAgfVxuICAgIH0gLy8gZW8gc2V0IG1ldGhvZFxuXG5cbiAgICBwdWJsaWMgc2V0X3Bhc3QoIGluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIgKTogdm9pZCB7XG4gICAgICAgIGlmICggdGhpcy5pc19pbl9ib3VuZHMoIGluZGV4ICkgKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnBhc3RfZGF0YXNbaW5kZXhdICAgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZScgKTtcbiAgICAgICAgfVxuICAgIH0gLy8gZW8gc2V0X3Bhc3QgbWV0aG9kXG5cblxuICAgIHB1YmxpYyBtaW5pbWF4KCBjdXJyZW50X21pbjogbnVtYmVyLCBjdXJyZW50X21heDogbnVtYmVyLCBzdGFydF9pbmRleDogbnVtYmVyLCBpbml0OiBib29sZWFuIClcbiAgICB7XG4gICAgICAgIGlmICggaW5pdCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGN1cnJlbnRfbWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICAgICAgY3VycmVudF9tYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBjdXJfdmFsOiBudW1iZXI7XG5cbiAgICAgICAgZm9yICggbGV0IGkgPSBzdGFydF9pbmRleDsgaTw9IHRoaXMuaW5kaWNlX21heDsgaSsrIClcbiAgICAgICAge1xuICAgICAgICAgICAgY3VyX3ZhbCA9IHRoaXMuZGF0YXNbaV07XG5cbiAgICAgICAgICAgIGlmICggY3VyX3ZhbCA+IGN1cnJlbnRfbWF4ICkgY3VycmVudF9tYXggICAgPSBjdXJfdmFsO1xuICAgICAgICAgICAgaWYgKCBjdXJfdmFsIDwgY3VycmVudF9taW4gKSBjdXJyZW50X21pbiAgICA9IGN1cl92YWw7XG4gICAgICAgIH1cbiAgICB9IC8vIGVvIG1pbmltYXggbWV0aG9kXG5cblxuICAgIHB1YmxpYyBpbnRlcnBvbGF0aW9uX29sZCggeDogbnVtYmVyICkgXG4gICAge1xuICAgICAgICBsZXQgYTpudW1iZXIgICAgICAgID0geCAvIHRoaXMucmVzb2x1dGlvbjtcbiAgICAgICAgbGV0IGFpbmY6IG51bWJlciAgICA9IE1hdGguZmxvb3IoIGEgKTtcbiAgICAgICAgbGV0IHZpbmY6IG51bWJlciAgICA9IHRoaXMuZGF0YXNbYWluZl07XG5cbiAgICAgICAgaWYgKCBhaW5mID09IGEgKSByZXR1cm4gdmluZjtcblxuICAgICAgICBsZXQgYXN1cDogbnVtYmVyICAgID0gYWluZiArIDEuO1xuICAgICAgICBsZXQgdnN1cDogbnVtYmVyICAgID0gdGhpcy5kYXRhc1thaW5mICsgMV07XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdnN1cCAqICggYSAtIGFpbmYgKSArIHZpbmYgKiAoIGFzdXAgLSBhICk7XG4gICAgfSAvLyBlbyBpbnRlcnBvbGF0aW9uX29sZCBtZXRob2RcblxuXG4gICAgcHVibGljIGlzX2luX2JvdW5kcyggaTogbnVtYmVyICkgOiBib29sZWFuXG5cdHtcblx0ICAgIHJldHVybiBpID49IHRoaXMuaW5kaWNlX21pbiAmJiBpIDw9IHRoaXMuaW5kaWNlX21heDtcbiAgICB9IC8vIGVvIGlzX2luX2JvdW5kcyBtZXRob2RcbiAgICBcblxuICAgIHB1YmxpYyB4bWluKCkgOiBudW1iZXJcblx0e1xuXHQgICAgcmV0dXJuIHRoaXMucmVzb2x1dGlvbiAqIHRoaXMuaW1pbjtcbiAgICB9IC8vIGVvIHhtaW4gbWV0aG9kXG4gICAgXG5cbiAgICBwdWJsaWMgeG1heCgpIDogbnVtYmVyXG5cdHtcblx0ICAgIHJldHVybiB0aGlzLnJlc29sdXRpb24gKiB0aGlzLmltYXg7XG4gICAgfSAvLyBlbyB4bWF4IG1ldGhvZFxuXG5cbiAgICBwdWJsaWMgcmVjYXN0X2ZpbmFsX2luaXRpYWxfb3JpZ2luKCB0OiBDRGF0YUFycmF5ICkgOiBib29sZWFuXG5cdHtcbiAgICAgICAgdGhpcy5kYXRhc1swXSAgID0gdC5kYXRhc1t0LmluZGljZV9tYXhdO1xuXHQgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBlbyByZWNhc3RfZmluYWxfaW5pdGlhbF9vcmlnaW4gbWV0aG9kXG5cblxuICAgIHB1YmxpYyByZWNhc3RfZmluYWxfaW5pdGlhbF9vcmlnaW5fY2Fsb3R0ZSggdDogQ0RhdGFBcnJheSApIDogYm9vbGVhblxuXHR7XG4gICAgICAgIHRoaXMuZGF0YXNbMF0gICA9IDkwIC0gdC5kYXRhc1t0LmluZGljZV9tYXhdO1xuXHQgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBlbyByZWNhc3RfZmluYWxfaW5pdGlhbF9vcmlnaW4gbWV0aG9kXG5cblxuICAgIHB1YmxpYyByZWNhc3RfZmluYWxfaW5pdGlhbF9wYXN0KCB0OiBDRGF0YUFycmF5LCBldjogQ0V4cGVyaWVuY2VWYWx1ZXMgKSA6IGJvb2xlYW5cblx0e1xuICAgICAgICBsZXQgdGVtcHNfb3JpZ2luICAgID0gdC5pbWF4ICogdC5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGZvciAoIGxldCBpID0gMSA7IGkgPD0gdGhpcy5pbmRpY2VfbWF4OyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpbmRpY2Vfb2xkOiBudW1iZXIgID0gMDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW5kaWNlX29sZCAgPSB0aGlzLmluZGljZV9tYXggLSAoIGkgKiBldi50ZW1wc19lbGVtKCkgLyB0LnJlc29sdXRpb24gKTtcbiAgICAgICAgICAgIGluZGljZV9vbGQgID0gTWF0aC5tYXgoIGluZGljZV9vbGQsIDEgKTtcbiAgICAgICAgICAgIGluZGljZV9vbGQgID0gTWF0aC5taW4oIGluZGljZV9vbGQsIHRoaXMuaW5kaWNlX21heCApO1xuXG4gICAgICAgICAgICB0aGlzLnNldF9wYXN0KCBpLCB0LmdldCggaW5kaWNlX29sZCApICk7XG5cbiAgICAgICAgICAgIENMb2dnZXIubG9nKCAncmVjYXN0X2ZpbmFsX2luaXRpYWw6IGluZGljZV9tYXg9JyArIHRoaXMuaW5kaWNlX21heCArICcgLSB0ZW1wc19lbGVtPScgKyBldi50ZW1wc19lbGVtKCkgKyAnIC0gUmVzb2x1dGlvbj0nICsgdC5yZXNvbHV0aW9uICk7XG4gICAgICAgICAgICBDTG9nZ2VyLmxvZyggJ3JlY2FzdF9maW5hbF9pbml0aWFsOiBpPScgKyBpICsgJyAtIGluZGljZV9vbGQ9JyArIGluZGljZV9vbGQgKyAnIC0gVGVtcMOpcmF0dXJlPScgKyB0LmdldCggaW5kaWNlX29sZCApICk7XG4gICAgICAgIH1cblxuXHQgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBlbyByZWNhc3RfZmluYWxfaW5pdGlhbF9wYXN0IG1ldGhvZFxuXG59IC8vIGVvIENEYXRhQXJyYXkgY2xhc3NcbiJdfQ==