UNPKG

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
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==