{"version":3,"file":"simclimat-lib.mjs","sources":["../../../projects/simclimat-lib/src/lib/simclimat-lib.utils.ts","../../../projects/simclimat-lib/src/lib/simclimat-lib.logger.ts","../../../projects/simclimat-lib/src/lib/simclimat-lib.physics-constants.ts","../../../projects/simclimat-lib/src/lib/simclimat-lib.model-vars.ts","../../../projects/simclimat-lib/src/lib/simclimat-lib.model.ts","../../../projects/simclimat-lib/src/lib/simclimat-lib.data-array.ts","../../../projects/simclimat-lib/src/lib/simclimat-lib.simulation-values.ts","../../../projects/simclimat-lib/src/lib/simclimat-lib.experience-values.ts","../../../projects/simclimat-lib/src/public-api.ts","../../../projects/simclimat-lib/src/simclimat-lib.ts"],"sourcesContent":["\nexport function add( num1: number, num2: number )\n{\n    return num1 + num2;\n}\n","\nexport class CLogger {\n    static debug: boolean = false;\n\n    static log( message: any, logLevel: String = 'info' ) : void \n    {\n        if ( ! this.debug )\n        {\n            return ;\n        }\n\n        switch ( logLevel )\n        {\n            case 'debug': {\n                console.info( message );\n                break;\n            }\n            \n            case 'info': {\n                console.log( message );\n                break;\n            }\n            \n            case 'warning': {\n                console.log( 'WARNING : ' + message );\n                \n                break;\n            }\n\n            case 'error': {\n                console.error( 'ERROR : ' + message );\n                \n                break;\n            }\n\n            default: {\n                console.log( message );\n                break;\n            }\n        }\n    } // eo log method\n\n\n    static setDebug( debug: boolean ) : void\n    {\n        this.debug  = debug;\n    }\n}","import {CLogger} from './simclimat-lib.logger';\n\n/**\n   * This class define physics constants and calculated physics constants.\n   *\n   * Instanciation example : \n   * \n   * ```typescript\n   * const instance = new CPhysicsConstants();\n   * ```\n   * \n   * @remarks\n   * This method is part of the {@link core-library#Statistics | Statistics subsystem}.\n   *  \n   * @author Alain Deseine\n   * \n   * @copyright CEI Alain Deseine 1992-2019\n   * \n   * @beta \n   */\n\nexport class CPhysicsConstants {\n\n    // Constantes mathématiques\n    \n    /** Pi math constant */\n    public static readonly pi: number                               = Math.PI;  \n\n    // constantes radiatives\n    public static readonly puissance_recue_zero: number             = 1370 / 4.;\n    public static readonly distance_ts_actuelle: number             = 1.5e11;\n    public static readonly sigma: number                            = 5.67e-8;\n\n    // constantes du calcul de l'albédo \n    public static readonly albedo_froid: number                     = 0.65;\n    public static readonly albedo_chaud: number                     = 0.325;\n    public static readonly temperature_froid: number                = 262;\n    public static readonly temperature_chaud: number                = 286;\n\n\n    // constantes des GES (Gaz à effet de serre)    \n    // conversions de Gt à ppm: \n\n    /** 5.13e6 en Gt */\n    public static readonly masse_atmosphere_Gt: number              = 1.4e6;    \n\n    /** Exprimée eng/mol */\n    public static readonly masse_molaire_coo: number                = 44;       \n    public static readonly masse_molaire_chhhh: number              = 16;\n    public static readonly masse_molaire_air: number                = 29;\n\n    // concentrations actuelles et naturelles   \n    public static readonly concentration_coo_actuel: number         = 405;              // ppm\n    public static readonly concentration_coo_2007: number           = 370;              // ppm: ajout mars 2022\n    public static readonly concentration_coo_1750: number           = 280;\n    public static readonly concentration_coo_naturel: number        = 280;\n    public static readonly concentration_coo_min: number            = 1e-1;             // pour ne pas avoir de nan en prenant le log\n    public static readonly coo_Gt_act: number                       = 750;              // masse de CO2 en Gt\n    public static readonly coo_Gt_2007: number                      = 750;              // masse de CO2 en Gt: ajout mars 2022\n    public static readonly coo_Gt_1750: number                      = 280 * 750 / 370;  // masse de CO2 en Gt\n    public static readonly concentration_coo_glaciaire: number      = 180;              // ppm\n\n    // constantes radiatives\n    public static readonly a_coo: number                            = 22e-3;            // 5.35; On peut changer cette valeur sans changer l'equilibre pre-industriel.\n    public static readonly concentration_coo_limite: number         = 10000;            // en ppm, la limite entre relation linéaire et log pour forcage serre\n\n    // pour extrapolations lin pour hautes concentrations\n    public static readonly concentration_coo_limite_bas: number     = 100;              // en ppm,idem pour extrapolation pour basses concnetrations\n    public static readonly G_min: number                            = 1e-4;             // forcage_serre min, pour eviter des nan\n\n    // temps de résidence\n    public readonly t_res_coo_actuel: number;\n\n    // on calcule tel qu'a l'équilibre, sans emissions humaines, concentration en C02=emission*temps de résidence=280ppm\n    public readonly t_res_coo_90: number;\n    public static readonly t_res_coo_0: number                      = 1.5e6;\n    public static readonly niveau_calotte_critique_coo: number      = 20;\n    public static readonly niveau_calottes_1750: number             = 60;\n    public readonly t_res_coo_critique: number;\n    // const double facteur_alteration_0=1e-3;\t\n    // const double facteur_alteration_90=1;\t\n\n    // températures\n    public static readonly tau_temperature: number                  = 30; // en années\n    public static readonly temperature_actuelle: number             = 15.5; // en °C ; necessaire dans modele_reset\n\n    // calculée à la main pour C02=370 et albédo=albédo_actuel\n    // public readonly temperature_1900: number;\n    public static readonly temperature_1750: number                 = 14.4;\n    public readonly deltaT_last_century: number   \n    public static readonly temperature_LGM: number                  = 10;\n    public static readonly C_terre: number                          = 5e9; // capacité calorifique de la Terre en J/K/m2\n    public static readonly Tkelvin: number                          = 273.0;\n\n    // données radiatives sur l'actuel\n    public static readonly albedo_1750: number                      = 0.33;\n    public readonly G0: number;\n\n    // données et constantes de bidouille sur le niveau de la mer\n    /** Facteur de pondération de la température il y a [[deltat0]] ans */\n    // constantes commentées par Camille le 19 avril 2024 car sont inutiles\n    // public static readonly p0: number                               = 1.;   \n    // public static readonly p1: number                               = 5.;\n    // public static readonly p2: number                               = 3.;\n    // public static readonly p3: number                               = 1.;\n\n    /** Retard en temps en année  */\n    public static readonly deltat0: number                          = 0.;   \n    public static readonly deltat1: number                          = 5.;\n    public static readonly deltat2: number                          = 20.;\n    public static readonly deltat3: number                          = 50.;\n    public static readonly C_niveau: number                         = 100.; // orig=96\n    public static readonly a_mer: number                            = 140;\n    public static readonly tmemoire_niveau_mer                           = 100.; // le 30 janvier 2011: en fait, tau_niveau_mer ne peut dépasser 100 ans car c'est la mémoire maximale d'une simul pour la simul précédente. # c est le pas de temps utilise pour calculer l effet memoire.\n    public static readonly tau_niveau_mer                           = 1000.; // c est l echelle de temps caracteristique de l evolution de la temperature de l ocean\n    public readonly pond_memoire_mer\n    // public readonly T_ressentie_actuelle: number; // commenté le 19 avril 2024 par Camille car c'est inutile\n\n    // niveau mer exprimé en m /t actuel\n    public static readonly niveau_mer_LGM: number                   = -130;\n    \n    // modif CR 4 nov 2019: on le calcule de maniere plus exacte plus bas\n    // public static readonly niveau_mer_1750: number                  = -0.2; // en m\n    public readonly Hmer_1750: number;\n    public readonly niveau_mer_1750: number;\n\n    // niveau des calottes\n    public static readonly niveau_calottes_LGM: number              = 45;\n    public static readonly niveau_calottes_LGM_noinsol: number      = 52;\n    public static readonly tau_niveau_calottes_englacement: number  = 5000.;\n    public static readonly tau_niveau_calottes_deglacement: number  = 5000.;\n    public readonly a_calottes: number;\n\n    // Une variation globale glaviaire-interglaciaire correspond à environ 5 à 10°C.\n    public readonly b_calottes: number;\n    public static readonly niveau_calottes_min: number              = 0;\n    public static readonly niveau_calottes_max: number              = 90;\n    public readonly niveau_calottes_actuel: number;\n\n    // nouveau traitement niveau de la mer\n    // public static readonly Hmer_tot: number                         = 3.8e3;    // en m // remplacé par Camille le 19 avril 2024 par un paramètre ajustable pour que niveau mer LGM -100m sans dilatation\n    public static Hmer_tot: number;\n    public static readonly dilat: number                            = 2.4e-4;   // en °C \n    public static readonly coef_dilat: number                       = 2.0; // c'est un param ajustable pour ajuster la dilatation. Avant on n'en avait pas besoin parce que Hmer_tot réaliste, mais là, on l'ajuste su le changement de niveau mer du LGM\n    public readonly Tressentie_act: number;\n    // public readonly fphig1: number;\n    // public static readonly fphig2: number                           = 0.10e-4;\n    public readonly dilatation_1750: number;\n    // public readonly optim1: number;\n    // public readonly optim2: number;\n    public static readonly expmer: number                         = 1.5; // constante ajoutée le 19 avril 2024 par Camille. C'est un exposant qui sert de maramètre ajustable pour que  niveau_mer_1750 soit à peu près égale à -0.2 m.\n\n    // modif CR 4 nov 2019, pour avoir niveau_mer_1750=-0.2 de maniere plus exacte\n    // public static readonly fphig3: number                           = -1.99447e-7; // plein de constantes supprimée le 19 avril 2024 par Camille car on change le calcul du niveau des mers\n\n    // tel que l'on soit à l'équilibre à niveau_mer_1750 en 1750\n    // et tel que -120m au LGM\n    public readonly Hmeract: number;\n    // public static readonly niveau_mer_1750_target: number\t    = -0.2; // commenté le 19 avril 2024 par Camille\n\n    // flux de carbone\n    // const double CO2_biologique_eq=concentration_coo_naturel;\n    // calcul CO2_ocean_eq en fonction temp�rature\n    public static readonly a_CO2_eq: number                         = 20;       // ppm/°C\t\t\n    public static readonly emit_anthro_coo_act: number              = 12;       // Gt: mise à jour mars 2022\n    public static readonly volcanisme_actuel: number                = 0.083;    // en Gt/an\n    public static readonly puit_ocean_act: number                   = 20.0;     // en pourcent des emissions anthro absorbées\n    \n    // const double B_ocean=-puit_ocean_act*emit_anthro_coo_act/ (concentration_coo_actuel-concentration_coo_1750 -a_CO2_eq*(temperature_actuelle-temperature_1750));\n    public readonly C_alteration_naturel: number;\n    public static readonly Tlim_oce: number                         = 10;       // en °K\n    \n    // const double rel_CO2_temperature=emit_anthro_coo_act/Tlim_oce;\n    public static readonly b_ocean: number                          = 1/5000.0;\n    public static readonly Tlim_oce_froid: number                   = 275;\n    public static readonly A_oce: number                            = 3e-2;\n    public readonly deltaT_poce: number;\n    public static readonly Tcrit_oce: number                        = 35;\n    public static readonly puit_oce_max: number                     = 40;       // en pourcent\n    public static readonly dFdegaz: number                          = 0.05;\n    public static readonly q_CO2: number                            = 0.26;     // CO2=26% de l'effet de serre\n\n    // retroactions vapeur d'eau\n    public static readonly q_H2O: number                            = 0.6;      // eau=60% de l'effet de serre\n    public readonly a_H2O: number;\n    // public static readonly tau_T: number                            = 200;      // en °K\n    public static readonly rapport_H2O_actconst: number             = 1.05719;  // rapport pour la température actuelle\n    public static readonly a_rankine: number                        = 13.7;\n    public static readonly b_rankine: number                        = 5120.;\n    public static readonly pow_H2O: number                          = 0.23; // normallement: 0.18\n\n    // paramétrisation de A_biologique en fonction \tde la température\n    public static readonly puit_bio_act: number                     = 30; // en pourcent\n    public readonly Tlim_bio_froid: number;\n    public static readonly Tlim_bio_chaud: number                   = 340; // en K\n    //const double A_biologique_act=-puit_bio_act*emit_anthro_coo_act/(concentration_coo_actuel-concentration_coo_1750); // en an-1\n\n    // parametres orbitaux\n    public static readonly lat_Mil: number                          = 65;\n    public static readonly c_calottes: number                       = 0.2;\n    //const double precession_actuel=-90;\n    public static readonly precession_actuel: number                = 102.7; // modif 31 janv 2009: on prend la même precession que LMDZ\n    // la formule de insol65N n'a pas été modifiée car 2 bugs se compensaient\n    public static readonly obliquite_actuel: number                 = 23.5;\n    public static readonly excentricite_actuel: number              = 0.0167;\n    public readonly delta_angle_actuel: number;\n    public readonly insol_actuel: number;\n\n    // albédo\n    public static readonly albedo_phi_min: number                   = 0.60;\n    public static readonly albedo_phi_max: number                   = 0.2;\n    public static readonly albedo_glace_const: number               = 0.90;\n    public static readonly phig_crit: number                        = 30.0; // 30\n    public static readonly albedo_ter: number                       = 0.25;\n    public readonly albedo_crit: number;\n    public readonly albedo_actuel: number;\n\n    // calcule de la température\n    public static readonly capacite_calorifique: number             = 0.1;\t\n\n    // stockage biologique\n    public static readonly flux_co2_stockage_max: number            = -10; // GT/an-1\n    public readonly stockage_max: number;\n    public static readonly flux_co2_stockage_carbonifere: number    = -0.396; // en Gt par an d'apres R.A. Berner et D.E. Canfield (1989)\n    public readonly concentration_coo_carbonifere: number;\n    public readonly stockage_carbonifere: number;\n    \n    // logicals\n    public static readonly echantillonage: number                   = 1;\n\t// if 1: échantillonage direct au pas de temps\n\t// if 2: échantillonage en moyennant sur les pas de temps autour du point d'échantillonage\n    public static readonly calcul_carbone: number                   = 1;\n\t// si 1: calcul Euler explicite\n\t// si 2: calcul par decroissance vers équilibre\n\n\n    /**\n     * Constructor. \n     * \n     * The constructor of this class calculate calculated physics constants.\n     *\n     * @remarks\n     * This method is part of the {@link core-library#Statistics | Statistics subsystem}.\n     *\n     * @beta\n     */\n\n    constructor () {\n        // Set calculated physics constants\n        CLogger.log( 'physics-constants: appel constructor');\n        this.t_res_coo_actuel               = 280 / 0.083 / ( CPhysicsConstants.concentration_coo_2007 / CPhysicsConstants.coo_Gt_2007 ); // Modification mars 2022\n        this.t_res_coo_90                   = this.t_res_coo_actuel * 0.9;\n        this.t_res_coo_critique             = this.t_res_coo_90 + ( 90 - CPhysicsConstants.niveau_calotte_critique_coo ) * - ( this.t_res_coo_90 - this.t_res_coo_actuel ) / ( 90 - CPhysicsConstants.niveau_calottes_1750 );\n\tthis.deltaT_last_century = CPhysicsConstants.temperature_actuelle-CPhysicsConstants.temperature_1750;\n        //this.temperature_1900               = CPhysicsConstants.temperature_actuelle - CPhysicsConstants.deltaT_last_century;     // en °C ; necessaire dans modele_reset\n        this.G0                             = CPhysicsConstants.puissance_recue_zero * ( 1 - CPhysicsConstants.albedo_1750 ) / CPhysicsConstants.sigma / Math.exp( 4 * Math.log( CPhysicsConstants.Tkelvin + CPhysicsConstants.temperature_1750 ) ); //0.584;\n        \n        // commenté le 19 avril 2024 par Camille car inutile\n        /*\n        this.T_ressentie_actuelle           = ( 1. / ( CPhysicsConstants.p0 + CPhysicsConstants.p1 + CPhysicsConstants.p2 + CPhysicsConstants.p3 ) ) * ( CPhysicsConstants.p0 * CPhysicsConstants.temperature_actuelle\n        + CPhysicsConstants.p1 * CPhysicsConstants.temperature_actuelle - CPhysicsConstants.deltaT_last_century / 100 * CPhysicsConstants.deltat1\n        + CPhysicsConstants.p2 * CPhysicsConstants.temperature_actuelle - CPhysicsConstants.deltaT_last_century / 100 * CPhysicsConstants.deltat2\n        + CPhysicsConstants.p3 * CPhysicsConstants.temperature_actuelle - CPhysicsConstants.deltaT_last_century / 100 * CPhysicsConstants.deltat3 );\n        */\n\n        this.a_calottes                     = ( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.niveau_calottes_LGM_noinsol ) / ( CPhysicsConstants.temperature_1750 - CPhysicsConstants.temperature_LGM ) * 0.8; // on suppose qu'une partie de la variation du niveau de calotte est lié à l'effet de la température (ici 40%), et l'autre est liée à l'effet de la variation d'insolation.\n        this.b_calottes                     = CPhysicsConstants.niveau_calottes_1750 - this.a_calottes * CPhysicsConstants.temperature_1750;\t \n        this.niveau_calottes_actuel         = CPhysicsConstants.niveau_calottes_1750 + ( this.a_calottes *  CPhysicsConstants.temperature_actuelle + this.b_calottes - CPhysicsConstants.niveau_calottes_1750 ) * ( 1. - Math.exp( - 100. / CPhysicsConstants.tau_niveau_calottes_deglacement ) );\n\tCLogger.log( 'physics-constants: niveau_calottes_actuel= ' + this.niveau_calottes_actuel );\n\t//CLogger.log( 'niveau_calottes_1750,temperature_actuelle,niveau_calottes_1750=' + CPhysicsConstants.niveau_calottes_1750 + CPhysicsConstants.temperature_actuelle + CPhysicsConstants.niveau_calottes_1750);\n\t//CLogger.log ('a_calottes,b_calottes,tau_niveau_calottes_deglacement=' + this.a_calottes + this.b_calottes + CPhysicsConstants.tau_niveau_calottes_deglacement);\n\n        // modif CR: 31 oct 2019: Tressentie_act doit correspondre au calcul dans calcul_niveau_mer\n        // this.Tressentie_act                 = CPhysicsConstants.temperature_actuelle - 0.7;     // orig -0.75\n\tthis.pond_memoire_mer = Math.exp(-CPhysicsConstants.tmemoire_niveau_mer/CPhysicsConstants.tau_niveau_mer);\n        CLogger.log( 'physics-constants: pond_memoire_mer= ' + this.pond_memoire_mer);\n\tCLogger.log( 'pond_memoire_mer=' + this.pond_memoire_mer);\n\tCLogger.log( 'temperature_actuelle=' + CPhysicsConstants.temperature_actuelle);\n\tCLogger.log( 'deltaT_last_century=' + this.deltaT_last_century);\n        this.Tressentie_act                 = CPhysicsConstants.temperature_actuelle - this.pond_memoire_mer * this.deltaT_last_century; // -0.64\n\n        this.dilatation_1750                = CPhysicsConstants.dilat * CPhysicsConstants.coef_dilat * ( CPhysicsConstants.temperature_1750 - this.Tressentie_act );\n\tCLogger.log( 'dilatation_1750=' + this.dilatation_1750);\n\tCLogger.log( 'dilat=' + CPhysicsConstants.dilat);\n\tCLogger.log( 'coef_dilat=' + CPhysicsConstants.coef_dilat);\n\tCLogger.log( 'temperature_1750=' + CPhysicsConstants.temperature_1750);\n\tCLogger.log( 'Tressentie_act=' + this.Tressentie_act);\n\n\n        // Commenté par Camille le 19 avril 2024 car c'est devenu inutile\n        /*\n        this.optim1                         = ( 1 + this.dilatation_1750 ) * ( 1\n                                                        - CPhysicsConstants.fphig2 * Math.pow( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.niveau_calottes_max, 2 )\n                                                        - CPhysicsConstants.fphig3 * Math.pow( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.niveau_calottes_max, 3 ) ) \n                                                        - ( 1 - CPhysicsConstants.fphig2 * Math.pow( this.niveau_calottes_actuel - CPhysicsConstants.niveau_calottes_max, 2 )\n                                                        - CPhysicsConstants.fphig3 * Math.pow( this.niveau_calottes_actuel - CPhysicsConstants.niveau_calottes_max, 3 ) );\n                this.optim2                         = ( this.niveau_calottes_actuel - CPhysicsConstants.niveau_calottes_max ) - ( 1 + this.dilatation_1750 ) * ( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.niveau_calottes_max );\n                this.fphig1                         = (CPhysicsConstants.niveau_mer_1750_target / CPhysicsConstants.Hmer_tot - this.optim1 ) / this.optim2;\n        */\n\n        // CR avril 2024: Hmer_tot est maintenant ajusté avec le LGM\n        CPhysicsConstants.Hmer_tot =\t(CPhysicsConstants.niveau_mer_LGM+10.0) / ((1.-Math.cos((CPhysicsConstants.niveau_calottes_max-this.niveau_calottes_actuel)*CPhysicsConstants.pi/180)) * Math.pow((1.-this.niveau_calottes_actuel/CPhysicsConstants.niveau_calottes_max),CPhysicsConstants.expmer ) - (1.-Math.cos((CPhysicsConstants.niveau_calottes_max-CPhysicsConstants.niveau_calottes_LGM)*CPhysicsConstants.pi/180)) * Math.pow((1.-CPhysicsConstants.niveau_calottes_LGM/CPhysicsConstants.niveau_calottes_max),CPhysicsConstants.expmer ));\t\n        CLogger.log( 'physics-constants: Hmer_tot = ' + CPhysicsConstants.Hmer_tot );\t\n\tCLogger.log( 'physics-constants: niveau_calottes_actuel=' + this.niveau_calottes_actuel);\n\n        // CR avril 2024: Hmeract calculé avec la nouvelle formule du niveau mer\n        this.Hmeract =\tCPhysicsConstants.Hmer_tot * ( 1. - (1.-Math.cos((CPhysicsConstants.niveau_calottes_max-this.niveau_calottes_actuel)*CPhysicsConstants.pi/180)) * Math.pow((1.-this.niveau_calottes_actuel/CPhysicsConstants.niveau_calottes_max),CPhysicsConstants.expmer ) );\n        CLogger.log( 'physics-constants: Hmeract = ' + this.Hmeract );\n        \n        /*\n        this.Hmeract                        = CPhysicsConstants.Hmer_tot * ( 1\n                                                - this.fphig1 * ( this.niveau_calottes_actuel - CPhysicsConstants.niveau_calottes_max)\n                                                - CPhysicsConstants.fphig2 * Math.pow( this.niveau_calottes_actuel - CPhysicsConstants.niveau_calottes_max, 2 )\n                                                - CPhysicsConstants.fphig3 * Math.pow( this.niveau_calottes_actuel - CPhysicsConstants.niveau_calottes_max, 3 ) );\n        */\n        \n        // modif CR 4 nov 2019: calcul exact de niveau_mer_1750\n        // this.niveau_mer_1750                = CPhysicsConstants.Hmer_tot * ( 1 + CPhysicsConstants.dilat * 0.5 * ( CPhysicsConstants.temperature_1750 - this.Tressentie_act ) ) * ( 1\n        //  - this.fphig1 * ( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.niveau_calottes_max)\n        //  - CPhysicsConstants.fphig2 * Math.pow( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.niveau_calottes_max, 2 )\n        //  - CPhysicsConstants.fphig3 * Math.pow( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.niveau_calottes_max, 3 ) ) - this.Hmeract;\n\n        // modif CR avril 2024 car on modifie le calcul de niveau mer.\n        this.Hmer_1750                =   CPhysicsConstants.Hmer_tot * ( 1 + this.dilatation_1750 ) * ( 1. - (1.-Math.cos((CPhysicsConstants.niveau_calottes_max-CPhysicsConstants.niveau_calottes_1750)*CPhysicsConstants.pi/180))* Math.pow((1.-CPhysicsConstants.niveau_calottes_1750/CPhysicsConstants.niveau_calottes_max),CPhysicsConstants.expmer ) ) ;\n        CLogger.log( 'physics-constants: Hmer_1750 = ' + this.Hmer_1750 );\n        CLogger.log( 'physics-constants: dilatation_1750= ' + this.dilatation_1750);\n        CLogger.log( 'physics-constants: Hmer_tot= ' + CPhysicsConstants.Hmer_tot);\n        CLogger.log( 'physics-constants: CPhysicsConstants.niveau_calottes_1750 = ' + CPhysicsConstants.niveau_calottes_1750 );\n\t\n        this.niveau_mer_1750                =   this.Hmer_1750- this.Hmeract;\n        CLogger.log( 'physics-constants: niveau_mer_1750 = ' + this.niveau_mer_1750 );\n        this.C_alteration_naturel           = - CPhysicsConstants.volcanisme_actuel / CPhysicsConstants.concentration_coo_1750;\n        this.deltaT_poce                    = 0.5 / CPhysicsConstants.A_oce;\n        this.a_H2O                          = - CPhysicsConstants.q_H2O * ( 1 - this.G0 );\n        this.Tlim_bio_froid                 = CPhysicsConstants.temperature_froid;\n        this.delta_angle_actuel             = ( CPhysicsConstants.lat_Mil - CPhysicsConstants.obliquite_actuel) / 360 * 2 * CPhysicsConstants.pi;\n        this.insol_actuel                   = CPhysicsConstants.puissance_recue_zero * Math.cos( this.delta_angle_actuel );\n        this.albedo_crit                    = ( CPhysicsConstants.albedo_1750 - CPhysicsConstants.albedo_ter * ( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.phig_crit ) / \n                                                ( CPhysicsConstants.niveau_calottes_max - CPhysicsConstants.phig_crit ) ) / \n                                                ( 1 - ( CPhysicsConstants.niveau_calottes_1750 - CPhysicsConstants.phig_crit ) / \n                                                ( CPhysicsConstants.niveau_calottes_max - CPhysicsConstants.phig_crit ) ); // 0.41\n        this.albedo_actuel                  = this.albedo_crit + ( this.niveau_calottes_actuel - CPhysicsConstants.phig_crit ) / ( CPhysicsConstants.niveau_calottes_max - CPhysicsConstants.phig_crit ) * ( CPhysicsConstants.albedo_ter - this.albedo_crit );\n        this.stockage_max                   = CPhysicsConstants.flux_co2_stockage_max / CPhysicsConstants.concentration_coo_1750;\n        this.concentration_coo_carbonifere  = CPhysicsConstants.concentration_coo_1750 * 2; // modif 7 avril 2009\n        this.stockage_carbonifere           = CPhysicsConstants.flux_co2_stockage_carbonifere / this.concentration_coo_carbonifere;\n    }\n\n\n    /**\n     * logModelConstants method. \n     * \n     * this method simply log to the console class properties and methods.\n     *\n     * @remarks\n     * This method is part of the {@link core-library#Statistics | Statistics subsystem}.\n     *\n     * @beta\n     */\n\n     public logModelConstants(): void {\n        console.log( this );\n    }\n\n    \n    /**\n     * toJSON method. \n     * \n     * this method return the public and protected object properties.\n     *\n     * @remarks\n     * This method is part of the {@link core-library#Statistics | Statistics subsystem}.\n     *\n     * @beta\n     */\n\n    public toJSON(): Object {\n        let properties  = Object.getOwnPropertyNames( this );\n        return properties;\n    }\n}\n","import { CPhysicsConstants } from './simclimat-lib.physics-constants';\n\nexport const enum graphTypes {\n    TEMPERATURE,\n    WATERLEVEL,\n    CALOTTESLEVEL,\n    CONCENTRATION_CO2,\n    EMISSIONS_CO2,\n    ALBEDO\n}\n\n\nexport interface IModelVars {\n\n\tenable_gl_animations: number;\n\techeance_min: number;\n\techeance_max: number;\n\techeance_reset_value: number;\n\ttime_slider_reset_value: number;\n\n\t/** initialisation des combo-boxes */\n\n    graphe_one_init: graphTypes;\n\tgraphe_two_init: graphTypes;\n\tgraphe_three_init: graphTypes;\n\tgraphe_four_init: graphTypes;\n\n\t/** type de simulation (simulation_type-dialog) */\n\tfixed_concentration_reset_value: number;\n\n\t/** concentration en CO2: utilisé dans concentration_dialog */\n\tcoo_concentr_terre_initiale: number;\n\tcoo_concentr_cretace: number;\n\tcoo_concentr_1750: number;\n\tcoo_concentr_today: number;\n\tcoo_concentr_min: number;\n\tcoo_concentr_max: number;\n\tcoo_concentr_reset_value: number;\n\n\t/** emission: utilisées dans emission_dialog */\n\temit_anthro_coo_nul: number;\n\temit_anthro_coo_actuel: number;\n\temit_anthro_coo_2xactuel: number;\n\temit_anthro_coo_min: number;\n\temit_anthro_coo_max: number;\n\temit_anthro_coo_reset_value: number;\n\n\tvolcan_terre_init: number;\n\tvolcan_actuel: number;\n\tvolcan_min: number;\n\tvolcan_max: number;\n\tvolcan_reset_value: number;\n\n\talteration_actuel: number;\n\talteration_min: number;\n\talteration_max: number;\n\talteration_reset_value: number;\n\n\tstockage_biologique_actuel: number;\n\tstockage_biologique_carbonifere: number;\n\tstockage_biologique_min: number;\n\tstockage_biologique_max: number;\n\tstockage_biologique_reset_value: number;\n\n\t/** retroactions climatiques (retroactions_dialog) */\n\t/** 1) albedo: */\n\tfixed_albedo_reset_value: number;\n\talbedo_act: number;\n\talbedo_glace: number;\n\talbedo_terre: number;\n\talbedo_min: number;\n\talbedo_max: number;\n\talbedo_reset_value: number;\n\n\t/** 2) ocean */\n\tfixed_ocean_reset_value: number;\n\tdebranche_ocean_reset_value: number;\n\tpuit_ocean_actuel: number;\n\tpuit_ocean_min: number;\n\tpuit_ocean_max: number;\n\tpuit_ocean_reset_value: number;\n\n\t/** 3) vegetation */\n\tdebranche_biologie_reset_value: number;\n\tpuit_bio_actuel: number;\n\tpuit_bio_min: number;\n\tpuit_bio_max: number;\n\tpuit_bio_reset_value: number;\n\n\t/** 4) vapeur d'eau */\n\tfixed_eau_reset_value: number;\n\trapport_H2O_actuel: number;\n\trapport_H2O_min: number;\n\trapport_H2O_max: number;\n\trapport_H2O_reset_value: number;\n\n\t/** param astro (parametres_astronomique_dialog) */\n\t/** 1) distance */\n\tdistance_ts_actuel: number;\n\tdistance_ts_min: number;\n\tdistance_ts_max: number;\n    distance_ts_reset_value: number;\n    \n\t/** 2) puissance */\n\tpuissance_soleil_terre_init: number;\n\tpuissance_soleil_actuel: number;\n\tpuissance_soleil_min: number;\n\tpuissance_soleil_max: number;\n\tpuissance_soleil_reset_value: number;\t\n    \n    /** 3) excentricite */\n\texcentricite_act: number;\n\texcentricite_valeur_min: number;\n\texcentricite_valeur_max: number;\n\texcentricite_autre_min: number;\n\texcentricite_autre_max: number;\n\texcentricite_reset_value: number;\n    \n    /** 4) obliquite */\n\tobliquite_act: number;\n\tobliquite_valeur_min: number;\n\tobliquite_valeur_max: number;\n\tobliquite_autre_min: number;\n\tobliquite_autre_max: number;\n\tobliquite_reset_value: number;\n    \n    /** 5) precession */\n\tprecession_act: number;\n\tprecession_valeur_min: number;\n\tprecession_valeur_max: number;\n\tprecession_autre_min: number;\n\tprecession_autre_max: number;\n\tprecession_reset_value: number;\n\n}\n\n\nexport const modelVarsConstants : IModelVars   = {\n\n    enable_gl_animations                : 0,        /** 0 si pas d'animation, 1 si animation */\n    echeance_min                        : 100,      /** en année */\n    echeance_max                        : 10e6,     /** en année */\n    echeance_reset_value                : 500,      /** en année */\n    time_slider_reset_value             : 0,        /** en %age de l'échéance */\n\n    /** affichage des results */\n\n    graphe_one_init: graphTypes.TEMPERATURE,\n    graphe_two_init: graphTypes.CONCENTRATION_CO2,\n    graphe_three_init: graphTypes.WATERLEVEL,\n    graphe_four_init: graphTypes.CALOTTESLEVEL,\n\n\n    /** simulation_type */\n    fixed_concentration_reset_value     : 1,\n\n    /** concentrations en CO2 en ppm */\n    coo_concentr_terre_initiale         : 0.3e6,\n    coo_concentr_cretace                : 1500,\n    coo_concentr_1750                   : CPhysicsConstants.concentration_coo_1750,\n    coo_concentr_today                  : CPhysicsConstants.concentration_coo_actuel,\n    coo_concentr_min                    : 0,\n    coo_concentr_max                    : 1e6,\n    coo_concentr_reset_value            : 0,\n\n    /** emissions de CO2, en Gt/an. */\n    /** emissions antropiques */\n    emit_anthro_coo_actuel              : CPhysicsConstants.emit_anthro_coo_act,    /** en GT */\n    emit_anthro_coo_2xactuel            : CPhysicsConstants.emit_anthro_coo_act * 2,\n    emit_anthro_coo_nul                 : 0.,\n    emit_anthro_coo_min                 : -2,\n    emit_anthro_coo_max                 : 50,\n    emit_anthro_coo_reset_value         : 0,\n\n    /** volcanisme */\n    volcan_actuel                       : CPhysicsConstants.volcanisme_actuel,      /** volcanisme continental? 0.083 */\n    volcan_terre_init                   : 0,\n    /** d'après les flux de chaleurs en fonction du temps depuis formation de la terre données sur www.geo.mtu.edu/svl/GE3320/LECTURE%206.ppt */\n    /** volcan_terre_600ma=volcan_actuel*2; // d'après la même source */\n    volcan_min                          : 0,\n    volcan_max                          : 0,\n    volcan_reset_value                  : 0,\n\n    /** alteration, en % de variation par rapport à la ref=C_alteration_naturel */\n    alteration_actuel                   : 100.,                                     /** en Gt/an: transport par fleuves: 0.4 */\n    alteration_min                      : 0.0,\n    alteration_max                      : 1000.0,                                   /** altération 10x plus forte */\n    alteration_reset_value              : 0,\n\n    /** stockage biologique */\n    stockage_biologique_actuel          : 0.,\n    stockage_biologique_carbonifere     : 0,        /** en Mt/an/ppm */\n    stockage_biologique_min             : 0.,\n    stockage_biologique_max             : 0,                /** en Mt/an/ppm */\n    stockage_biologique_reset_value     : 0.,\n\n    /** albédo */\n    fixed_albedo_reset_value            : 0,\n    albedo_act                          : 0,\n    albedo_reset_value                  : 0,\n    albedo_glace                        : CPhysicsConstants.albedo_glace_const * 100,\n    albedo_terre                        : CPhysicsConstants.albedo_ter * 100,\n    albedo_min                          : 0.,\n    albedo_max                          : 100.,\n\n    /** puit biologique */\n    debranche_biologie_reset_value      : 0,\n    puit_bio_actuel                     : CPhysicsConstants.puit_bio_act,           /** en fraction de l'excédent humain (emissions +deforest) absorbé */\n    puit_bio_min                        : -50,\n    puit_bio_max                        : 100.,\n    puit_bio_reset_value                : 0,\n\n    /** puit océanique */\n    fixed_ocean_reset_value             : 1,\n    debranche_ocean_reset_value         : 0,\n    puit_ocean_actuel                   : CPhysicsConstants.puit_ocean_act,         /** en fraction de l'excédent humain (emissions +deforest) absorbé */\n    puit_ocean_min                      : -50,\n    puit_ocean_max                      : 100.,\n    puit_ocean_reset_value              : 0,\n\n    /** vapeur d'eau */\n    fixed_eau_reset_value               : 0,\n    rapport_H2O_reset_value             : 100.,                                     /** H20(t)/H20_actuel */\n    rapport_H2O_actuel                  : 100. * CPhysicsConstants.rapport_H2O_actconst,\n    rapport_H2O_min                     : 0.,\n    rapport_H2O_max                     : 1000.,\n\n    /** parametres orbitaux */\n    /** en fraction d'augmentation par rapport à l'actuel, en % */\n    puissance_soleil_terre_init         : 70, // modif le 8 avril: -30% d'emission->70%\n    puissance_soleil_actuel             : 100,\n    puissance_soleil_min                : 0,\n    puissance_soleil_max                : 1000,\n    puissance_soleil_reset_value        : 0,\n    distance_ts_actuel                  : 100,                                      /** en fraction d'augmentation par rapport à l'actuel */\n    distance_ts_min                     : 0,\n    distance_ts_max                     : 1000,\n    distance_ts_reset_value             : 0,\n\n    /** paramètres orbitaux */\n    excentricite_act                    : CPhysicsConstants.excentricite_actuel,    /** en fraction */\n    excentricite_reset_value            : 0,                                        /** en fraction */\n    excentricite_valeur_min             : 0.,\n    excentricite_valeur_max             : 0.06,\n    excentricite_autre_min              : 0.,\n    excentricite_autre_max              : 0.2,\n\n    obliquite_act                       : CPhysicsConstants.obliquite_actuel,       /** en degrès */\n    obliquite_reset_value               : 0,                                        /** en degrès */\n    obliquite_valeur_min                : 21.8,\n    obliquite_valeur_max                : 24.4,\n    obliquite_autre_min                 : 0.,\n    obliquite_autre_max                 : 90.,\n\n    precession_act                      : CPhysicsConstants.precession_actuel,      /** en degrès */     \n    precession_reset_value              : 0,                                        /** en degrès */\n    /** 31 janv 2009: on met les min et max à -90 et 90 respectivement, au lieu de -180 et 180, car c'est avec -90 et 90 qu'on a les écarts de température les plus fort. */\n    precession_valeur_min               : 90,\n    precession_valeur_max               : 270,\n    precession_autre_min                : 0,\n    precession_autre_max                : 360\n};\n\nexport class CModelVars {\n    public modelConstants: IModelVars;\n\n    constructor( modelConstants?: IModelVars ) {\n        /** Merge default constants values with constructor passed values into private modelConstants property. */\n        if ( modelConstants == undefined )\n        {\n            this.modelConstants = { ...modelVarsConstants };\n        }\n        else\n        {\n            this.modelConstants = { ...modelVarsConstants, ...modelConstants };\n        }\n\n        /** Instantiate a CPhysicsConstants object */\n        let physicConstants = new CPhysicsConstants();\n\n        // Set reset vars + some others\n        this.modelConstants.precession_reset_value          = this.modelConstants.precession_act;\n        this.modelConstants.obliquite_reset_value           = this.modelConstants.obliquite_act;\n        this.modelConstants.excentricite_reset_value        = this.modelConstants.excentricite_act;\n        this.modelConstants.distance_ts_reset_value         = this.modelConstants.distance_ts_actuel;\n        this.modelConstants.puissance_soleil_reset_value    = this.modelConstants.puissance_soleil_actuel;\n        this.modelConstants.puit_ocean_reset_value          = this.modelConstants.puit_ocean_actuel;\n        this.modelConstants.puit_bio_reset_value            = this.modelConstants.puit_bio_actuel;\n        this.modelConstants.albedo_reset_value              = physicConstants.albedo_actuel * 100;\n        this.modelConstants.albedo_act                      = physicConstants.albedo_actuel * 100;\n        this.modelConstants.stockage_biologique_max         = - physicConstants.stockage_max * 1e3;\n        this.modelConstants.stockage_biologique_carbonifere = - physicConstants.stockage_carbonifere * 1e3;\n        this.modelConstants.alteration_reset_value          = this.modelConstants.alteration_actuel;\n        this.modelConstants.volcan_reset_value              = this.modelConstants.volcan_actuel;\n        this.modelConstants.volcan_terre_init               = this.modelConstants.volcan_actuel * 5;\n        this.modelConstants.volcan_max                      = this.modelConstants.volcan_terre_init * 6;\n        this.modelConstants.emit_anthro_coo_reset_value     = this.modelConstants.emit_anthro_coo_nul;\n        this.modelConstants.coo_concentr_reset_value        = this.modelConstants.coo_concentr_1750;\n\n    }\n\n    logModelConstants(): void {\n        console.log( this.modelConstants );\n    }\n}\n\n","import {CLogger} from './simclimat-lib.logger';\nimport {CModelVars, IModelVars} from './simclimat-lib.model-vars';\nimport {CPhysicsConstants} from './simclimat-lib.physics-constants';\nimport {CSimulationValues} from './simclimat-lib.simulation-values';\nimport {CExperienceValues} from './simclimat-lib.experience-values';\n\n\n/**\n * This class calculate climat simulation model.\n *\n * Instanciation example : \n * \n * ```typescript\n * const instance = new CModel();\n * ```\n * \n * @remarks\n * This method is part of the {@link core-library#Statistics | Statistics subsystem}.\n *  \n * @author Alain Deseine\n * \n * @copyright CEI Alain Deseine 1992-2019\n * \n * @beta \n */\n\nexport class CModel {\n    private modelPhysicsConstants: CPhysicsConstants;\n    private modelConstants: IModelVars;\n    private simulationValues: CSimulationValues; // TODO Alain changer le type\n    private experienceValues: CExperienceValues; // TODO Alain Changer le type\n\n\n    /**\n     * Constructor. \n     * \n     * The constructor of this class initialise Physics constants and model vars.\n     *\n     * @remarks\n     * This method is part of the {@link core-library#Statistics | Statistics subsystem}.\n     *\n     * @beta\n     */\n\n    constructor( modelConstants?: IModelVars ) {\n        // Instanciate a CModelVars object\n        let modelVars: CModelVars;\n\n        if ( modelConstants == undefined )\n        {\n            modelVars  = new CModelVars();\n        }\n        else\n        {\n            modelVars  = new CModelVars( modelConstants );\n        }\n\n        // Merge default constants values with constructor passed values into private modelConstants property.\n        this.modelConstants = { ...modelVars.modelConstants };\n\n        // Instanciate a CPhysicsConstants object\n        this.modelPhysicsConstants  = new CPhysicsConstants();\n    } // eo constructor\n\n\n    public logModelConstants(): void {\n        console.log( this.modelPhysicsConstants );\n        console.log( this.modelConstants );\n    } // eo logModelConstants method\n\n    \n    /**\n     * Utils methods\n     */\n\n    \n    public calculT( Teq: number, Tprec: number, tau: number, dt: number ): number {\n\t    let T: number;\n        T   = Tprec + ( Teq - Tprec ) * ( 1 - Math.exp( - dt / tau ) );\n        \n\t    return T;\n\t} // eo calculT method\n\n    \n    public calcul_forcage_serre_H2O( zrapport_H2O: number ): number {\n        let forcage_serre_H2O: number;\n        \n        CLogger.log( 'Method calcul_forcage_serre_H2O: zrapport_H2O = ' + zrapport_H2O );\n        \n        if ( zrapport_H2O > 1e-5 )\n        { \t\t\n            // forcage_serre_H2O=a_H2O*(1-exp(pow_H2O*log(zrapport_H2O)));\n            // modif le 7 avril pour éviter rétroactions trop positives\n            // on sature le forcage serre aux hautes concentrations en eau\n            // forcage_serre_H2O   = this.modelPhysicsConstants.a_H2O * ( 1 - Math.exp( CPhysicsConstants.pow_H2O * Math.log( zrapport_H2O ) ) );\n            forcage_serre_H2O   = this.modelPhysicsConstants.a_H2O * ( 1 - Math.exp( CPhysicsConstants.pow_H2O * Math.log( zrapport_H2O ) ) ) * ( 0.3 * Math.exp( - Math.sqrt( Math.abs( zrapport_H2O - 1 ) ) / 10.0 ) + 0.7 );\n\t    }\n        else\n        {\n\t\t    forcage_serre_H2O   = this.modelPhysicsConstants.a_H2O;\n        }\n\n        CLogger.log( 'Method calcul_forcage_serre_H2O: forcage_serre_H2O = ' + forcage_serre_H2O );\n        \n\t    return forcage_serre_H2O;\n\t} // eo calcul_forcage_serre_H2O method\n\n\n    public calcul_forcage_serre_CO2( zCO2:number ): number {\n\n        let forcage_serre_CO2: number;\n        \n        if ( zCO2 < CPhysicsConstants.concentration_coo_limite_bas )\n        {\n            CLogger.log( 'Method calcul_forcage_serre_CO2: relation linéaire, extrapolation basse' );\n            // forcage_serre_CO2   = - 0.2 * this.modelPhysicsConstants.G0 + zCO2 / CPhysicsConstants.concentration_coo_limite_bas * ( 0.2 * this.modelPhysicsConstants.G0 + CPhysicsConstants.a_coo * Math.log( CPhysicsConstants.concentration_coo_limite_bas / CPhysicsConstants.concentration_coo_1750 ) );\n            forcage_serre_CO2   = - CPhysicsConstants.q_CO2 * this.modelPhysicsConstants.G0 + zCO2 / CPhysicsConstants.concentration_coo_limite_bas * ( CPhysicsConstants.q_CO2 * this.modelPhysicsConstants.G0 + CPhysicsConstants.a_coo * Math.log( CPhysicsConstants.concentration_coo_limite_bas / CPhysicsConstants.concentration_coo_1750 ) );\n        }\n        else if  ( zCO2 > CPhysicsConstants.concentration_coo_limite )\n        {\n            CLogger.log( 'Method calcul_forcage_serre_CO2: relation linéaire, extrapolation haute' );\n            // forcage_serre_CO2   = CPhysicsConstants.a_coo * ( Math.log( CPhysicsConstants.concentration_coo_limite / CPhysicsConstants.concentration_coo_1750 ) + zCO2 / CPhysicsConstants.concentration_coo_limite - 1 );\n            forcage_serre_CO2   = CPhysicsConstants.a_coo * ( Math.log( CPhysicsConstants.concentration_coo_limite / CPhysicsConstants.concentration_coo_1750 ) + 1.0 * ( zCO2 / CPhysicsConstants.concentration_coo_limite - 1 ) );\n        }\n        else\n        {\n            // relation log\n            CLogger.log( 'Method calcul_forcage_serre_CO2: relation log' );\n            forcage_serre_CO2   = CPhysicsConstants.a_coo * Math.log( zCO2 / CPhysicsConstants.concentration_coo_1750 );\n        }\n        \n        CLogger.log( 'Method calcul_forcage_serre_CO2: forcage_serre_CO2 = ' + forcage_serre_CO2 );\n\n        return forcage_serre_CO2;\n    } // eo calcul_forcage_serre_CO2 method\n    \n\n    public calcul_phieq( zT: number, insol65N: number ): number {\n        \n\t    let zphieq: number;\n\t    // T en degre K\n        \n        CLogger.log( 'Method calcul_phieq: calcul_phig = ' + zT );\n        CLogger.log( 'Method calcul_phieq: calcul_phig: a_calottes = ' + this.modelPhysicsConstants.a_calottes );\n        CLogger.log( 'Method calcul_phieq: calcul_phig: b_calottes = ' + this.modelPhysicsConstants.b_calottes );\n        \n        // zphieq  = this.modelPhysicsConstants.a_calottes * ( zT - 273.0 ) + this.modelPhysicsConstants.b_calottes + CPhysicsConstants.c_calottes * ( insol65N - this.modelPhysicsConstants.insol_actuel );\n        zphieq  = this.modelPhysicsConstants.a_calottes * ( zT - CPhysicsConstants.Tkelvin ) + this.modelPhysicsConstants.b_calottes + CPhysicsConstants.c_calottes * ( insol65N - this.modelPhysicsConstants.insol_actuel );\n        \n        if ( zphieq > CPhysicsConstants.niveau_calottes_max )\n        {\n\t\t    zphieq  = CPhysicsConstants.niveau_calottes_max;\n        }\n        \n        if ( zphieq < CPhysicsConstants.niveau_calottes_min )\n        {\n\t\t    zphieq = CPhysicsConstants.niveau_calottes_min;\n\t    }\n\n        CLogger.log( 'Method calcul_phieq: calcul_phig: a_calottes * ( zT - CPhysicsConstants.Tkelvin ) = ' + this.modelPhysicsConstants.a_calottes * ( zT - CPhysicsConstants.Tkelvin ) );\n        CLogger.log( 'Method calcul_phieq: calcul_phig: c_calottes * ( insol65N - insol_actuel ) = ' + CPhysicsConstants.c_calottes * ( insol65N - this.modelPhysicsConstants.insol_actuel ) );\n        CLogger.log( 'Method calcul_phieq: calcul_phig: zphieq = ' + zphieq );\n\n\t    return zphieq;\n\t} // eo calcul_phieq method\n\n\n\tpublic calcul_tau_niveau_calottes( phieq: number, zphig_ancien: number ) {\n\n        let tau_niveau_calottes: number;\n        \n        if ( zphig_ancien < phieq )\n        {\n            CLogger.log( 'Method calcul_tau_niveau_calottes: désenglacement' );\n            tau_niveau_calottes     = CPhysicsConstants.tau_niveau_calottes_deglacement;\n\t    }\n        else\n        {\n            CLogger.log( 'Method calcul_tau_niveau_calottes: englacement' );\n            tau_niveau_calottes     = CPhysicsConstants.tau_niveau_calottes_englacement;\n        }\n        \n        CLogger.log( 'Method calcul_tau_niveau_calottes: calcul_phig: tau_niveau_calottes = ' + tau_niveau_calottes );\n\n        return tau_niveau_calottes;\n\t} // eo calcul_tau_niveau_calottes method\n\n   \n    /*\n    public calcul_niveau_mer_old( zphig: number, zT: number, t: number ): number {\n\n\t    // let sv: any  = this.experienceValues.back(); // TODO Alain : Revenir la dessus\n\t    let niveau_mer: number;\n        let Tressentie: number;\n        \n\t    // modif le 30 jan 2011: tau_niveau_mer est en année, il faut diviser par temps_elem pour l'avoir en nombre de pas\n        // let index: number   = Math.max( this.experienceValues.indice_min(), t - Math.trunc( CPhysicsConstants.tau_niveau_mer ) );  \n        // let index: number   = Math.max( this.experienceValues.indice_min(), t - Math.trunc( CPhysicsConstants.tau_niveau_mer / this.experienceValues.temps_elem() ) );\n        // modif CR: 31 oct 2019: index doit pouvoir être soit positif, soit négatif. On met juste des bornes entre -100 et +100\n        let index: number   = t - Math.trunc( CPhysicsConstants.tau_niveau_mer / this.experienceValues.temps_elem() );\n        index               = Math.min( this.experienceValues.indice_max() , index );\n        index               = Math.max( - this.experienceValues.indice_max() , index );\n\n        CLogger.log( 'Method calcul_niveau_mer: index = ' + index + ' - indice_min() = ' + this.experienceValues.indice_min() + ' - t = ' + t + ' - tau_niveau_mer = ' + CPhysicsConstants.tau_niveau_mer + ' - temps_elem() = ' + this.experienceValues.temps_elem() );\n        \n        if ( index < 0 )\n        {\n            Tressentie  = zT * 0.2 + this.simulationValues.temperature_data.get_past( - index ) * 0.8;\n            CLogger.log( 'Method calcul_niveau_mer: index neg: Tpast' +   this.simulationValues.temperature_data.get_past( - index ) );\n        }\n        else\n        {\n            Tressentie  = zT * 0.2 + this.simulationValues.temperature_data.get( index ) * 0.8;\n        }\n\n        CLogger.log( 'Method calcul_niveau_mer: zT = ' + zT + ' - Tressentie = ' + Tressentie );\n        \n\t    // le 30 jan 2011: on rajoute facteur 0.5 pour tenir compte de la sous-estimation de la constante de temps de l'océan.\n        // let dilatation: number  = CPhysicsConstants.dilat * ( Tressentie - 273 - this.modelPhysicsConstants.Tressentie_act );\n        let dilatation: number  = CPhysicsConstants.dilat * CPhysicsConstants.coef_dilat * ( Tressentie - CPhysicsConstants.Tkelvin - this.modelPhysicsConstants.Tressentie_act );\n\n        CLogger.log( 'Method calcul_niveau_mer: Tressentie_act = ' + this.modelPhysicsConstants.Tressentie_act );\n        CLogger.log( 'Method calcul_niveau_mer: Hmer_tot = ' + CPhysicsConstants.Hmer_tot );\n        CLogger.log( 'Method calcul_niveau_mer: dilatation = ' + dilatation );\n        CLogger.log( 'Method calcul_niveau_mer: zphig = ' + zphig );\n        // CLogger.log( 'Method calcul_niveau_mer: fmax*F(phig_act) = ' + ( -3.8827e-7 * Math.pow( this.modelPhysicsConstants.niveau_calottes_actuel, 3 ) + 1.2689e-4 * Math.pow( this.modelPhysicsConstants.niveau_calottes_actuel, 2 ) -0.0134 * this.modelPhysicsConstants.niveau_calottes_actuel + 0.4615 ) );\n        // CLogger.log( 'Method calcul_niveau_mer: fmax*F(phig) = ' + ( -3.8827e-7 * Math.pow( zphig, 3 ) + 1.2689e-4 * Math.pow( zphig, 2 ) - 0.0134 * zphig + 0.4615 ) );\n        CLogger.log( 'Method calcul_niveau_mer: f(phig_act) = ' + this.modelPhysicsConstants.fphig1 * ( zphig - CPhysicsConstants.niveau_calottes_max) + CPhysicsConstants.fphig2 * Math.pow( zphig - CPhysicsConstants.niveau_calottes_max, 2 ) + CPhysicsConstants.fphig3 * Math.pow( zphig - CPhysicsConstants.niveau_calottes_max, 3 ) );\n\n\t\t// let Hmer: number    = CPhysicsConstants.Hmer_tot * ( 1 + dilatation ) * ( 1 - ( -3.8827e-7 * Math.pow( zphig, 3 ) + 1.2689e-4 * Math.pow( zphig, 2 ) - 0.0134 * zphig + 0.4615 ) );\n\t\t// let Hmeract: number = CPhysicsConstants.Hmer_tot * ( 1 - ( -3.8827e-7 * Math.pow( this.modelPhysicsConstants.niveau_calottes_actuel, 3 ) + 1.2689e-4 * Math.pow( this.modelPhysicsConstants.niveau_calottes_actuel, 2 ) - 0.0134 * this.modelPhysicsConstants.niveau_calottes_actuel + 0.4615 ) );\n        let Hmer: number    = CPhysicsConstants.Hmer_tot * ( 1 + dilatation ) * ( 1 - this.modelPhysicsConstants.fphig1 * ( zphig - CPhysicsConstants.niveau_calottes_max ) - CPhysicsConstants.fphig2 * Math.pow( zphig - CPhysicsConstants.niveau_calottes_max, 2 ) - CPhysicsConstants.fphig3 * Math.pow( zphig - CPhysicsConstants.niveau_calottes_max, 3 ) );\n\n        CLogger.log( 'Method calcul_niveau_mer: Hmer = ' + Hmer );\n        CLogger.log( 'Method calcul_niveau_mer: Hmeract = ' + this.modelPhysicsConstants.Hmeract );\n        \n        niveau_mer  = Hmer - this.modelPhysicsConstants.Hmeract;\n    \n        CLogger.log( 'Method calcul_niveau_mer: niveau_mer = ' + niveau_mer );\n\n        return niveau_mer;\n    }  // eo calcul_niveau_mer_old method\n    */\n\n\n    public calcul_niveau_mer( zphig: number, zT: number, t: number ): number {\n\n\t    // let sv: any  = this.experienceValues.back(); // TODO Alain : Revenir la dessus\n\tlet niveau_mer: number;\n        let Tressentie: number;\n        \n\t// modif le 30 jan 2011: tau_niveau_mer est en année, il faut diviser par temps_elem pour l'avoir en nombre de pas\n        // let index: number   = Math.max( this.experienceValues.indice_min(), t - Math.trunc( CPhysicsConstants.tau_niveau_mer ) );  \n        // let index: number   = Math.max( this.experienceValues.indice_min(), t - Math.trunc( CPhysicsConstants.tau_niveau_mer / this.experienceValues.temps_elem() ) );\n        // modif CR: 31 oct 2019: index doit pouvoir être soit positif, soit négatif. On met juste des bornes entre -100 et +100\n        let index: number   = t - Math.trunc( CPhysicsConstants.tmemoire_niveau_mer / this.experienceValues.temps_elem() );\n        index               = Math.min( this.experienceValues.indice_max() , index );\n        index               = Math.max( - this.experienceValues.indice_max() , index );\n\n        CLogger.log( 'Method calcul_niveau_mer: index = ' + index + ' - indice_min() = ' + this.experienceValues.indice_min() + ' - t = ' + t + ' - tau_niveau_mer = ' + CPhysicsConstants.tmemoire_niveau_mer + ' - temps_elem() = ' + this.experienceValues.temps_elem() );\n        \n        if ( index < 0 )\n        {\n            Tressentie  = zT * (1.-this.modelPhysicsConstants.pond_memoire_mer) + this.simulationValues.temperature_data.get_past( - index ) * this.modelPhysicsConstants.pond_memoire_mer;\n            CLogger.log( 'Method calcul_niveau_mer: index neg: Tpast' +   this.simulationValues.temperature_data.get_past( - index ) );\n        }\n        else\n        {\n            Tressentie  = zT * (1.-this.modelPhysicsConstants.pond_memoire_mer) + this.simulationValues.temperature_data.get( index ) * this.modelPhysicsConstants.pond_memoire_mer;\n        }\n\n        CLogger.log( 'Method calcul_niveau_mer: zT = ' + zT + ' - Tressentie = ' + Tressentie );\n        \n\t// le 30 jan 2011: on rajoute facteur 0.5 pour tenir compte de la sous-estimation de la constante de temps de l'océan.\n        // let dilatation: number  = CPhysicsConstants.dilat * ( Tressentie - 273 - this.modelPhysicsConstants.Tressentie_act );\n        let dilatation: number  = CPhysicsConstants.dilat * CPhysicsConstants.coef_dilat * ( Tressentie - CPhysicsConstants.Tkelvin - this.modelPhysicsConstants.Tressentie_act );\n\n        CLogger.log( 'Method calcul_niveau_mer: Tressentie_act = ' + this.modelPhysicsConstants.Tressentie_act );\n        CLogger.log( 'Method calcul_niveau_mer: Hmer_tot = ' + CPhysicsConstants.Hmer_tot );\n        CLogger.log( 'Method calcul_niveau_mer: dilatation = ' + dilatation );\n        CLogger.log( 'Method calcul_niveau_mer: zphig = ' + zphig );\n\n        let Hmer: number    = CPhysicsConstants.Hmer_tot * ( 1 + dilatation ) * ( 1. - (1.-Math.cos((CPhysicsConstants.niveau_calottes_max-zphig)*CPhysicsConstants.pi/180)) * Math.pow((1.-zphig/CPhysicsConstants.niveau_calottes_max),CPhysicsConstants.expmer ) );\n\n        CLogger.log( 'Method calcul_niveau_mer: Hmer = ' + Hmer );\n        CLogger.log( 'Method calcul_niveau_mer: Hmeract = ' + this.modelPhysicsConstants.Hmeract );\n        CLogger.log( 'Method calcul_niveau_mer: Hmer_tot = ' + CPhysicsConstants.Hmer_tot );\n        \n        niveau_mer  = Hmer - this.modelPhysicsConstants.Hmeract;\n    \n        CLogger.log( 'Method calcul_niveau_mer: niveau_mer = ' + niveau_mer );\n\n        return niveau_mer;\n    }  // eo calcul_niveau_mer method\n\n\n    public calcul_zA_biologique( zT: number, A: number): number {\n        let zA: number;\n\n        if ( zT < this.modelPhysicsConstants.Tlim_bio_froid )\n        { \n            zA  = 0;\n        }\n        else if ( zT > CPhysicsConstants.Tlim_bio_chaud )\n        {\n            zA=0;\n        }\n        else\n        {\n            zA=A;\n        }\n\n        return zA;\n    } // eo calcul_zA_biologique method\n\n\n    public calcul_zCO2eq( zT: number ): number {\n\t    let zCO2eq: number;\n\n        CLogger.log( 'Method calcul_zCO2eq: calcul zCO2eq_oce: entrée: zT = ' + zT );\n\n\t\tlet Tc:number    = 13.7;\n\t\tlet c:number\t = 5.0;\n\t\tlet b:number    = ( CPhysicsConstants.concentration_coo_glaciaire - CPhysicsConstants.concentration_coo_1750 - c * (CPhysicsConstants.temperature_LGM - CPhysicsConstants.temperature_1750 ) ) / ( Math.atan( CPhysicsConstants.temperature_LGM - Tc ) - Math.atan( CPhysicsConstants.temperature_1750 - Tc ) );\n        let a:number    = CPhysicsConstants.concentration_coo_glaciaire - b * Math.atan( CPhysicsConstants.temperature_LGM - Tc ) - c * ( CPhysicsConstants.temperature_LGM - Tc );\n        \n\t\tzCO2eq          = a + b * Math.atan( zT - CPhysicsConstants.Tkelvin - Tc ) +  c * ( zT - CPhysicsConstants.Tkelvin - Tc );\n\n        CLogger.log( 'Method calcul_zCO2eq: calcul_zCO2eq: zT = ' + zT + ' - zCO2eq = ' + zCO2eq );\n\n        return zCO2eq;\n\t} // eo calcul_zCO2eq method\n\n\n\tpublic calcul_zCO2_ocean_eq( zT: number): number{\n        let zCO2_ocean_eq: number;\n        \n        CLogger.log( 'Method calcul_zCO2_ocean_eq: zT = ' + zT );\n\n\t    zCO2_ocean_eq   = CPhysicsConstants.concentration_coo_naturel + CPhysicsConstants.a_CO2_eq * ( zT - ( CPhysicsConstants.temperature_1750 + CPhysicsConstants.Tkelvin ) );\n        \n        CLogger.log( 'Method calcul_zCO2_ocean_eq: calcul_zCO2eq: zCO2_ocean_eq = ' + zCO2_ocean_eq );\n        \n\t    return zCO2_ocean_eq;\n\t} // eo calcul_zCO2_ocean_eq method\n\n\n\tpublic calcul_zC_alteration( Cmax: number, zphig: number ): number {\n        let zC_alteration: number;\n        \n        CLogger.log( 'Method calcul_zC_alteration: Cmax = ' + Cmax );\n        CLogger.log( 'Method calcul_zC_alteration: zphig = ' + zphig );\n        \n        if ( zphig > CPhysicsConstants.niveau_calotte_critique_coo )\n        {\n\t\t    zC_alteration   = Cmax;\n\t    }\n        else if ( zphig > 1e-2 )\n        {\n\t\t    zC_alteration   = Cmax * zphig / CPhysicsConstants.niveau_calotte_critique_coo;\n\t    }\n        else\n        {\n\t\t    zC_alteration   = 0.;\n\t    }\n\n\t    return zC_alteration;\n    } // eo calcul_zC_alteration method\n    \n\n\tpublic calcul_rapport_H2O( zT: number): number {\n        let zrapport_H2O: number;\n        \n        CLogger.log( 'Method calcul_rapport_H2O: zT = ' + zT );\n        CLogger.log( 'Method calcul_rapport_H2O: temperature_1750 + CPhysicsConstants.Tkelvin = ' + CPhysicsConstants.temperature_1750 + CPhysicsConstants.Tkelvin );\n        // CLogger.log( 'Method calcul_rapport_H2O: tau_T = ' + CPhysicsConstants.tau_T );\n\n        // utilisation de la formule de Rankine donnant Psat\t:\n        zrapport_H2O    = ( Math.exp( CPhysicsConstants.a_rankine - CPhysicsConstants.b_rankine / zT ) ) / ( Math.exp( CPhysicsConstants.a_rankine - CPhysicsConstants.b_rankine / ( CPhysicsConstants.temperature_1750 + CPhysicsConstants.Tkelvin ) ) );\n        \n        CLogger.log( 'Method calcul_rapport_H2O: zrapport_H2O = ' + zrapport_H2O );\n        \n\t    return zrapport_H2O;\n\t} // eo calcul_rapport_H2O method\n\n\n\tpublic calcul_albedo( zphig: number ): number{\n        let zalbedo: number;\n                \n        if ( zphig > CPhysicsConstants.phig_crit )\n        {\n            zalbedo     = this.modelPhysicsConstants.albedo_crit + ( zphig - CPhysicsConstants.phig_crit ) / ( CPhysicsConstants.niveau_calottes_max - CPhysicsConstants.phig_crit ) * ( CPhysicsConstants.albedo_ter - this.modelPhysicsConstants.albedo_crit );\n\n            CLogger.log( 'Method calcul_albedo: albedo_crit = ' + this.modelPhysicsConstants.albedo_crit );\n            CLogger.log( 'Method calcul_albedo: albedo_actuel = ' + this.modelPhysicsConstants.albedo_actuel );\n            CLogger.log( 'Method calcul_albedo: zphig > phig_crit' );\n            CLogger.log( 'Method calcul_albedo: B = ' + ( this.modelPhysicsConstants.niveau_calottes_actuel - CPhysicsConstants.phig_crit ) / ( CPhysicsConstants.niveau_calottes_max - CPhysicsConstants.phig_crit ) );\n            CLogger.log( 'Method calcul_albedo: 1 - B = ' + ( 1 - ( this.modelPhysicsConstants.niveau_calottes_actuel - CPhysicsConstants.phig_crit ) / ( CPhysicsConstants.niveau_calottes_max - CPhysicsConstants.phig_crit ) ) );\n            CLogger.log( 'Method calcul_albedo: Aact - B.Ater = ' + ( this.modelPhysicsConstants.albedo_actuel - CPhysicsConstants.albedo_ter * ( this.modelPhysicsConstants.niveau_calottes_actuel - CPhysicsConstants.phig_crit ) / ( CPhysicsConstants.niveau_calottes_max - CPhysicsConstants.phig_crit ) ) );\n        }\n        else\n        {\n            zalbedo     = CPhysicsConstants.albedo_glace_const + ( zphig - CPhysicsConstants.niveau_calottes_min ) / ( CPhysicsConstants.phig_crit - CPhysicsConstants.niveau_calottes_min ) * ( this.modelPhysicsConstants.albedo_crit - CPhysicsConstants.albedo_glace_const );\n        }\n\n        CLogger.log( 'Method calcul_albedo: zphig = ' + zphig );\n        CLogger.log( 'Method calcul_albedo: zalbedo = ' + zalbedo );\n\n        // ASSERT(zalbedo>0);\n        // ASSERT(zalbedo<1);\n\n        return zalbedo;\n\t} // eo calcul_albedo method\n\n\n\tpublic calcul_poce( zT: number ): number {\n\t    let zpoce: number;\n\t    let poce_act: number = 1 - CPhysicsConstants.puit_ocean_act;\n        \n        if ( zT > CPhysicsConstants.temperature_actuelle - CPhysicsConstants.Tkelvin )\n        {\n\t\t    zpoce   = poce_act + ( 1 - poce_act ) * ( 1 - Math.exp( - ( zT - CPhysicsConstants.temperature_actuelle - CPhysicsConstants.Tkelvin ) / this.modelPhysicsConstants.deltaT_poce ) );\n\t    }\n        else\n        {\n\t\t    zpoce   = poce_act * Math.exp( ( zT - CPhysicsConstants.temperature_actuelle - CPhysicsConstants.Tkelvin ) / this.modelPhysicsConstants.deltaT_poce );\n        }\n        \n\t    return zpoce;\t    \n\t} // eo calcul_poce method\n\n\n\tpublic calcul_zpuit_oce( zT: number ): number {\n        let zpuit_oce: number;\n        \n        zpuit_oce   = ( zT - CPhysicsConstants.Tcrit_oce - CPhysicsConstants.Tkelvin ) / ( CPhysicsConstants.temperature_actuelle - CPhysicsConstants.Tcrit_oce ) * CPhysicsConstants.puit_ocean_act / 100.0;\n\n        CLogger.log( 'Method calcul_zpuit_oce: zpuit_oce = ' + zpuit_oce );\n        \n        zpuit_oce   = Math.max( 0., zpuit_oce );\n        // zpuit_oce   = Math.min( CPhysicsConstants.puit_oce_max, zpuit_oce );\n        zpuit_oce   = Math.min( CPhysicsConstants.puit_oce_max / 100.0, zpuit_oce );\n        \n        CLogger.log( 'Method calcul_zpuit_oce: zpuit_oce = ' + zpuit_oce );\n\n        // TODO Alain : Eclaircir le besoin de ces deux assertions pour éventuellement faire autrement\n\t\tthis.assert( zpuit_oce >= 0.);\n        this.assert( zpuit_oce <= CPhysicsConstants.puit_oce_max / 100.0 );\n        \n        return zpuit_oce;\n\t} // eo calcul_zpuit_oce method\n\n\n\tpublic calcul_Fdegaz( zT: number ): number {\n        let Fdegaz: number;\n        \n        if ( zT - CPhysicsConstants.Tkelvin > CPhysicsConstants.Tcrit_oce )\n        {\n\t\t\t Fdegaz     = ( zT - CPhysicsConstants.Tcrit_oce - CPhysicsConstants.Tkelvin ) * CPhysicsConstants.dFdegaz;\n\t\t}\n        else \n        {\n            Fdegaz      = 0;\n        }\n\n        // TODO Alain : Eclaircir le besoin de cette assertion pour éventuellement faire autrement\n        this.assert( Fdegaz >= 0. );\n        \n\t    return Fdegaz;\n    } // eo calcul_Fdegaz method\n    \n\n\tpublic abs( x: number ): number {\n        let y: number;\n        \n        if ( x < 0 ) \n        {\n            y   = - x;\n        }\n        else\n        {\n            y   = x;\n        }\t\t    \n\n\t    return y;\n\t} // eo abs method\n\n\n    public assert( condition: Boolean, message: string = '' ): void {\n        if ( ! condition )\n        {\n            message     = message || \"Assertion failed\";\n            \n            if ( typeof Error !== \"undefined\" )\n            {\n                throw new Error( message );\n            }\n            \n            throw message; // Fallback\n        }\n    } // eo assert method\n\n\n    /** End of Utils methods */\n\n\n\n    /**\n     * Model execution method\n     */\n\n    modelExecute( simulationValue: CSimulationValues, experienceValue: CExperienceValues ): CSimulationValues \n    {\n        CLogger.log( 'Method modelExecute: Initialisation du modèle ...  ' );\n        CLogger.log( simulationValue );\n        CLogger.log( experienceValue );\n\n        simulationValue.set_annee_fin( experienceValue.echeance() );\n        simulationValue.set_resolution( experienceValue.temps_elem() );\n\n        /**\n         * On mappe l'objet CSimulationValues\n         */\n        this.simulationValues   = simulationValue;\n        this.experienceValues   = experienceValue;\n\n        /** \n         * declarations pour l'integration temporelle\n         */\n\n        let oscillation: number;\n        let zT: number = 0, zT_ancien: number, zT_ancien_prec: number;\t// température\n        let zCO2: number = 0, zCO2_ancien: number, zCO2_ancien_prec: number; // CO2\n        let zphig: number = 0, zphig_ancien: number, zphig_ancien_prec: number = 0; // niveau calotte\n        let zT_moy: number, zCO2_moy: number, zphig_moy: number;\n        let zT_moy1: number, zCO2_moy1: number, zphig_moy1: number;\n        let zT_moy2: number, zCO2_moy2: number, zphig_moy2: number;\n        let zT_moy2save: number, zCO2_moy2save: number, zphig_moy2save: number;\n        let zTeq: number;\n        let zsomme_flux: number;\n        let niter: number;\n        let nmid: number;\n        let dt: number;\n\n        /** variables intermédiaires */\n        let G: number;\n\n        let alteration_max: number;\n        let zC_alteration: number;\n        let zC_stockage: number;\n        let forcage_serre_eau: number = 0;\n        let forcage_serre_CO2: number = 0;\n        let forcage_serre: number = 0;\n        let zB_ocean: number;\n        let zalbedo: number = 0;\n        let Fin0: number, insol65N: number;\n        let emission_coo_ppm: number = 0;\n        let zrapport_H2O: number;\n        let delta_angle: number;\t\n        let Fin: number, Fout: number;\n        let zpuit_oce: number = 0, zpuit_bio: number = 0;\n        let phieq: number;\n        let tau_niveau_calottes: number;\n        let zCO2eq: number, tau_CO2_eq: number;\n        let zCO2eq_oce: number;\n        let B_ocean: number = 0;\n        let Fdegaz: number;\n        let zsomme_flux_const: number, zsomme_C: number;\n\n        // ** End of declarations\n\n        // prend en compte la nouvelle echeance et calcul indiciation des tableaux\n        niter   = Math.max( 4, Math.trunc( 3 * Math.exp( 0.3 * Math.log( this.experienceValues.temps_elem() ) ) ) );\n        nmid    = Math.trunc( niter / 2.+0.5 );\n\n        CLogger.log( 'Method modelExecute: temps_elem = ' + this.experienceValues.temps_elem() );\n        CLogger.log( 'Method modelExecute: Math.log( this.experienceValues.temps_elem() ) = ' + Math.log( this.experienceValues.temps_elem() ) );\n        CLogger.log( 'Method modelExecute: Math.exp( 0.3 * Math.log( this.experienceValues.temps_elem() ) ) = ' + Math.exp( 0.3 * Math.log( this.experienceValues.temps_elem() ) ) );\n        CLogger.log( 'Method modelExecute: Math.trunc( 3 * Math.exp( 0.3 * Math.log( this.experienceValues.temps_elem() ) ) ) = ' + Math.trunc( 3 * Math.exp( 0.3 * Math.log( this.experienceValues.temps_elem() ) ) ) );\n        CLogger.log( 'Method modelExecute: niter = ' + niter );\n        \n        dt      = this.experienceValues.temps_elem() / <number>( niter );    \n        \n        CLogger.log( 'Method modelExecute: dt = ' + dt );\n    \n        // remplit les tableaux des emissions de GES ou leurs concentration à partir des params de l'interface\n        // if (current_values.simulation_type==FIXED_CONCENTRATIONS){\n        CLogger.log( 'Method modelExecute: fixed_concentration = ' + this.simulationValues.fixed_concentration );\n        \n        if ( this.simulationValues.fixed_concentration )\n        {\n            CLogger.log( 'Method modelExecute: Entering fixed_concentration' );\n        \n            // on remplit les tableaux de concentrations de GES entre 1 et indice_max\n            for ( let t:number = 0; t <= this.experienceValues.indice_max(); t++ )\n            {\n                this.simulationValues.concentrations_coo_data.set( t, this.simulationValues.coo_concentr_value ); // en ppm\n                zCO2                                                = this.simulationValues.coo_concentr_value;\n\n                forcage_serre_CO2                                   = this.calcul_forcage_serre_CO2( zCO2 );\n                this.simulationValues.emissions_coo_data.set( t, 0. );\n            } // eo for\n\n            CLogger.log( 'Method modelExecute: zCO2 = ' + zCO2 );\n            CLogger.log( 'Method modelExecute: concentrations_coo_data[1] = ' + this.simulationValues.concentrations_coo_data.get( 1 ) );\n\n        } // endif if (current_values.simulation_type==FIXED_CONCENTRATIONS){\n        else\n        {\n            //endif if (current_values.simulation_type==FIXED_CONCENTRATIONS){\n            if ( this.simulationValues.debranche_biologie )\n            {\n                zpuit_bio   = 0;\n            }\n            else\n            {\n                zpuit_bio   = this.simulationValues.puit_bio_value / 100.0;\n            }\n\n            if ( this.simulationValues.debranche_ocean )\n            {\n                zpuit_oce   = 0;\n                B_ocean     = 0;\n            }\n            else\n            {\n                zpuit_oce   = this.simulationValues.puit_oce_value / 100.0;\n                \n                if ( this.simulationValues.fixed_ocean )\n                {\n                    B_ocean     = 0;\n                }\n                else\n                {\n                    B_ocean     = CPhysicsConstants.b_ocean;\n                }\t    \n            }\n            \n            CLogger.log( 'Method modelExecute: zpuit_oce = ' + zpuit_oce );\n            CLogger.log( 'Method modelExecute: zpuit_bio = ' + zpuit_bio );\n        } // endif if (current_values.simulation_type==FIXED_CONCENTRATIONS){\n\n        // attribution de variables dans le cas où elles sont en mode fixé:\n        // les variables précédées de z sont celles qui sont calculées aussi bien dans les cas\n        // avec et sans rétroaction\n        CLogger.log( 'Method modelExecute: fixed_eau = ' + this.simulationValues.fixed_eau );\n\n        if ( this.simulationValues.fixed_eau )\n        {\n            forcage_serre_eau   = this.calcul_forcage_serre_H2O( this.simulationValues.rapport_H2O_value / 100.0 );\n        }\t    \n    \n        if ( this.simulationValues.fixed_albedo )\n        {\n            zalbedo     = this.simulationValues.albedo_value / 100.; // conversion albedo en % en albedo en unité\n            \n            for ( let t:number = 0; t <= this.experienceValues.indice_max(); t++ )\n            {\t\n                this.simulationValues.albedo_data.set( t, this.simulationValues.albedo_value );\n            }\n        }\n        else\n        {\n            this.simulationValues.albedo_data.set( 0, this.calcul_albedo( this.simulationValues.niveau_calottes_data.get( 0 ) ) * 100. );\n        }\n    \n        CLogger.log( 'Method modelExecute: puissance_recue_zero = ' + CPhysicsConstants.puissance_recue_zero );\n        CLogger.log( 'Method modelExecute: puissance_soleil_value = ' + this.simulationValues.puissance_soleil_value );\n        CLogger.log( 'Method modelExecute: distance_ts_value = ' + this.simulationValues.distance_ts_value );\n        CLogger.log( 'Method modelExecute: distance_ts_value = ' + this.simulationValues.distance_ts_value );\n\n        Fin0        = CPhysicsConstants.puissance_recue_zero * ( this.simulationValues.puissance_soleil_value / 100. ) / ( this.simulationValues.distance_ts_value / 100 ) / ( this.simulationValues.distance_ts_value / 100 );\n        delta_angle = Math.abs( CPhysicsConstants.lat_Mil - this.simulationValues.obliquite_value ) / 360 * 2 * CPhysicsConstants.pi;\n        \n        insol65N    = Fin0 * Math.cos( delta_angle ) * Math.exp( 2 * Math.log( ( 1 - CPhysicsConstants.excentricite_actuel * 0.5 * Math.sin( - CPhysicsConstants.precession_actuel / 180 * Math.PI ) ) / ( 1 - ( 0.3 * this.simulationValues.excentricite_value + 0.7 * CPhysicsConstants.excentricite_actuel ) * 0.5 * Math.sin( - this.simulationValues.precession_value / 180 * Math.PI ) ) ) );\n    \n        // on fait une bidouille pour réduire l'effet de l'excentricité.\n        CLogger.log( 'Method modelExecute: Fin0 = ' + Fin0 );\n        CLogger.log( 'Method modelExecute: Fin0*cos(delta_angle) = ' + Fin0 * Math.cos( delta_angle ) );\n        CLogger.log( 'Method modelExecute: delta_angle_actuel = ' + this.modelPhysicsConstants.delta_angle_actuel );\n        CLogger.log( 'Method modelExecute: delta_angle = ' + delta_angle );\n        CLogger.log( 'Method modelExecute: puissance_recue_zero = ' + CPhysicsConstants.puissance_recue_zero );\n        CLogger.log( 'Method modelExecute: insol65N = ' + insol65N );\n        CLogger.log( 'Method modelExecute: insol_actuel = ' + this.modelPhysicsConstants.insol_actuel );\n        CLogger.log( 'Method modelExecute: G0 = ' + this.modelPhysicsConstants.G0 );\n        CLogger.log( 'Method modelExecute: albedo_actuel = ' + this.modelPhysicsConstants.albedo_actuel );\n        CLogger.log( 'Method modelExecute: niveau_calottes_actuel = ' + this.modelPhysicsConstants.niveau_calottes_actuel );\n    \n        CLogger.log( 'Method modelExecute: debugCR: excentricite_actuel=' + CPhysicsConstants.excentricite_actuel );\n        CLogger.log( 'Method modelExecute: debugCR: excentricite_value=' + this.simulationValues.excentricite_value );\n        CLogger.log( 'Method modelExecute: debugCR: precession_actuel=' + CPhysicsConstants.precession_actuel );\n        CLogger.log( 'Method modelExecute: debugCR: precession_value=' + this.simulationValues.precession_value );\n        CLogger.log( 'Method modelExecute: debugCR: numerateur=' + ( 1 - CPhysicsConstants.excentricite_actuel * 0.5 * Math.sin( - CPhysicsConstants.precession_actuel / 180 * Math.PI ) ) );\n        CLogger.log( 'Method modelExecute: debugCR: denominateur=' + ( 1 - ( 0.3 * this.simulationValues.excentricite_value + 0.7 * CPhysicsConstants.excentricite_actuel ) * 0.5 * Math.sin( - this.simulationValues.precession_value / 180 * Math.PI ) ) );\n        CLogger.log( 'Method modelExecute: debugCR: num/denom=' + ( 1 - CPhysicsConstants.excentricite_actuel * 0.5 * Math.sin( - CPhysicsConstants.precession_actuel / 180 * Math.PI ) ) / ( 1 - ( 0.3 * this.simulationValues.excentricite_value + 0.7 * CPhysicsConstants.excentricite_actuel ) * 0.5 * Math.sin( - this.simulationValues.precession_value / 180 * Math.PI ) ) );\n        CLogger.log( 'Method modelExecute: debugCR: facteur=' + Math.exp( 2 * Math.log( ( 1 - CPhysicsConstants.excentricite_actuel * 0.5 * Math.sin( - CPhysicsConstants.precession_actuel / 180 * Math.PI ) ) / ( 1 - ( 0.3 * this.simulationValues.excentricite_value + 0.7 * CPhysicsConstants.excentricite_actuel ) * 0.5 * Math.sin( - this.simulationValues.precession_value / 180 * Math.PI ) ) ) ) );\n\n        // mettons toutes les températures de indice_min à 0 en K:\n        for ( let t:number = 1; t <= this.experienceValues.indice_max(); t++ )\n        {\n            this.simulationValues.temperature_data.set_past( t, this.simulationValues.temperature_data.get_past( t ) + CPhysicsConstants.Tkelvin );\n        }\n       \n        this.simulationValues.temperature_data.set( 0, this.simulationValues.temperature_data.get( 0 ) + CPhysicsConstants.Tkelvin );\n\n        // mettons les albédo entre 0 et 1\n        \n        // variables nécessaires pour intégration temporelle:\n        zT_ancien           = this.simulationValues.temperature_data.get( 0 );\n        zT_ancien_prec      = zT_ancien;\n        zCO2_ancien         = this.simulationValues.concentrations_coo_data.get( 0 );\n        zCO2_ancien_prec    = zCO2_ancien;\n        zphig_ancien        = this.simulationValues.niveau_calottes_data.get( 0 );\n    \n        // ajout CR 19 decembre 2019\n        // on vérifie les températures passées:\n        for ( let t:number = 1; t <= this.experienceValues.indice_max(); t++ )\n        {\n            CLogger.log( 'verif past temperatures: t=' + t + '; T' + this.simulationValues.temperature_data.get_past( t ) );\n        }\n\n        // intégration temporelle\n        for ( let t:number = 1; t <= this.experienceValues.indice_max(); t++ )\n        {\n            CLogger.log( 'Method modelExecute: **** boucle d\\'integration, t = ' + t );\n\n            oscillation = 0;\n\n            CLogger.log( 'Method modelExecute: s.temperature_data[t-1] = ' + this.simulationValues.temperature_data.get( t - 1 ) );\n            CLogger.log( 'Method modelExecute: zT_ancien = ' + zT_ancien );\n\n            zT_moy1     = 0.;\n            zCO2_moy1   = 0.;\n            zphig_moy1  = 0.;\n            zT_moy2     = 0.;\n            zCO2_moy2   = 0.;\n            zphig_moy2  = 0.;\t\n    \n            for ( let iter:number = 1; iter <= niter; iter++ )\n            {\n                CLogger.log( 'Method modelExecute: **boucle d\\'integration, iter = ' + iter );\n                \n                if ( ! this.simulationValues.fixed_concentration )\n                {\n                    // calculs des flux de CO2\n                    CLogger.log( 'Method modelExecute: zphig_ancien = ' + zphig_ancien );\n\n                    alteration_max  = this.modelPhysicsConstants.C_alteration_naturel * ( this.simulationValues.alteration_value / 100. );\n                    zC_alteration   = this.calcul_zC_alteration( alteration_max, zphig_ancien );\n                    \n                    CLogger.log( 'Method modelExecute: zC_alteration = ' + zC_alteration );\n                    this.assert( zC_alteration <= 0 );\n\n                    zC_stockage     = this.calcul_zC_alteration( - this.simulationValues.stockage_biologique_value * 1e-3, zphig_ancien );\n                    \n                    CLogger.log( 'Method modelExecute: zC_stockage = ' + zC_stockage );\n\n                    this.assert( zC_stockage <= 0 );\n\n                    Fdegaz          = 0.;\n                    zB_ocean        = this.calcul_zC_alteration( B_ocean, zphig_ancien );\n    \n                    if ( ( ! this.simulationValues.debranche_ocean ) && ( ! this.simulationValues.fixed_ocean ) )\n                    {\n                        zpuit_oce   = this.calcul_zpuit_oce( zT_ancien );\n\n                        this.assert( zpuit_oce >= 0. );    \n                        this.assert( zpuit_oce <= CPhysicsConstants.puit_oce_max );\n\n                        Fdegaz      = this.calcul_Fdegaz( zT_ancien );\n                    }\n\n                    CLogger.log( 'Method modelExecute: zB_ocean = ' + zB_ocean );\n                    CLogger.log( 'Method modelExecute: zpuit_oce = ' + zpuit_oce );\n                    CLogger.log( 'Method modelExecute: zpuit_bio = ' + zpuit_bio );\n                    CLogger.log( 'Method modelExecute: Fdegaz = ' + Fdegaz );\n                    CLogger.log( 'Method modelExecute: zCO2_ancien = ' + zCO2_ancien );\n\n                    // ** calculs des emissions en Gt/an\n                    CLogger.log( 'Method modelExecute: s.emit_anthro_coo_value = ' + this.simulationValues.emit_anthro_coo_value );\n                    CLogger.log( 'Method modelExecute: s.volcan_value = ' + this.simulationValues.volcan_value );\n                    CLogger.log( 'Method modelExecute: zC_alteration * zCO2_ancien = ' + zC_alteration * zCO2_ancien );\n                    CLogger.log( 'Method modelExecute: zC_stockage * zCO2_ancien = ' + zC_stockage * zCO2_ancien );\n                    CLogger.log( 'Method modelExecute: zpuit_oce = ' + zpuit_oce );\n\n                    zCO2eq_oce      = this.calcul_zCO2eq( zT_ancien );\n\n                    CLogger.log( 'Method modelExecute: zCO2eq_oce = ' + zCO2eq_oce );\n    \n                    // attention, on met des min et max pour éviter les pbs.\n                    zsomme_flux_const   = Math.max( Math.min( 1.0 - zpuit_oce - zpuit_bio, 1.0 ), 0.0 ) * ( this.simulationValues.emit_anthro_coo_value + this.simulationValues.volcan_value ) + Math.max( Math.min( 1 - zpuit_bio, 1.0 ), 0.0 ) * zB_ocean*zCO2eq_oce + Fdegaz;\n                    zsomme_C            = Math.max( Math.min( 1 - zpuit_oce - zpuit_bio, 1.0 ) , 0.0 ) * ( zC_alteration + zC_stockage ) - Math.max( Math.min( 1 - zpuit_bio, 1.0 ), 0.0 ) * zB_ocean;\n\n                    CLogger.log( 'Method modelExecute: zsomme_flux_const = ' + zsomme_flux_const );\n                    CLogger.log( 'Method modelExecute: zsomme_C = ' + zsomme_C );\n\n                    this.assert( zsomme_flux_const >= 0 );\n                    this.assert( zsomme_C <= 0 );\n\n                    zsomme_flux         = zsomme_flux_const + zCO2_ancien*zsomme_C;\n                    \n                    CLogger.log( 'Method modelExecute: zsomme_flux = ' + zsomme_flux );\n    \n    \n                    if ( CPhysicsConstants.calcul_carbone == 1 )\n                    {\n                        // ** calcul concentration en CO2\n                        CLogger.log( 'Method modelExecute: méthode Euler' );\n\n                        emission_coo_ppm    = zsomme_flux * ( CPhysicsConstants.concentration_coo_2007 / CPhysicsConstants.coo_Gt_2007 ); //en ppm/an // modif mars 2022 dans le facteur de conversion\n\n                        CLogger.log( 'Method modelExecute: zCO2_ancien = ' + zCO2_ancien );\n                        CLogger.log( 'Method modelExecute: emission_coo_ppm = ' + emission_coo_ppm );\n                        CLogger.log( 'Method modelExecute: dt = ' + dt );\n                        \n                        zCO2                = zCO2_ancien + emission_coo_ppm * dt;\n                        zCO2                = Math.max( 0.0, zCO2 );\n                        \n                        CLogger.log( 'Method modelExecute: zCO2 = ' + zCO2 );\n                    }\n                    else if ( CPhysicsConstants.calcul_carbone == 2 )\n                    {\n                        //** calcul par zCO2eq: méthode directe:\n                        if ( zsomme_C > 0 )\n                        {\n                            CLogger.log( 'Method modelExecute: méthode equilibre: cas general' );\n\n                            zCO2eq      = -zsomme_flux_const / zsomme_C;\n                            tau_CO2_eq  = -1. / zsomme_C;\n                            \n                            CLogger.log( 'Method modelExecute: zCO2eq = ' + zCO2eq );\n                            CLogger.log( 'Method modelExecute: tau_CO2_eq = ' + tau_CO2_eq );\n\n                            zCO2        = this.calculT( zCO2eq, zCO2_ancien, tau_CO2_eq,dt );\n\n                            this.assert( zCO2 >= 0. );\n\n                            CLogger.log( 'Method modelExecute: zCO2 = ' + zCO2 );\n                        }\n                        else\n                        {\n                            CLogger.log( 'Method modelExecute: méthode equilibre: cas zsomme_C>O' );\n                            CLogger.log( 'Method modelExecute: emission_coo_ppm = ' + emission_coo_ppm );\n\n                            emission_coo_ppm    = zsomme_flux_const * ( CPhysicsConstants.concentration_coo_2007 / CPhysicsConstants.coo_Gt_2007 ); // modif mars 2022 dans le facteur de conversion\n                            zCO2                = zCO2_ancien + emission_coo_ppm*dt;\n                            \n                            this.assert( zCO2 >= 0. );\n\n                            CLogger.log( 'Method modelExecute: zCO2 = ' + zCO2 );\n                        }\n                    }\n\n                    // **calcul de l'effet de serre en t\n                    CLogger.log( 'Method modelExecute: calcul de l\\'effet de serre' );\n\n                    forcage_serre_CO2   = this.calcul_forcage_serre_CO2( zCO2 );\n                } //if (current_values.simulation_type==FIXED_EMISSIONS) {\n\n                if ( ! this.simulationValues.fixed_eau )\n                {\n                    zrapport_H2O        = this.calcul_rapport_H2O( zT_ancien );\n                    forcage_serre_eau   = this.calcul_forcage_serre_H2O( zrapport_H2O );\n                }\t\t    \t\n    \n                forcage_serre   = forcage_serre_CO2 + forcage_serre_eau;\n                G               = this.modelPhysicsConstants.G0 - forcage_serre;\n\n                if ( G < CPhysicsConstants.G_min )\n                {\n                    G   = CPhysicsConstants.G_min;\n                }\n\n                if ( G > 1 )\n                {\n                    G   = 1;\n                }\n    \n                CLogger.log( 'Method modelExecute: forcage_serre = ' + forcage_serre );\n                CLogger.log( 'Method modelExecute: G = ' + G );\n\n                //** calcul de la latitude de glace\n                phieq               = this.calcul_phieq( zT_ancien, insol65N );\n\n                CLogger.log( 'Method modelExecute: calcul_phig: zphig_ancien = ' + zphig_ancien );\n\n                tau_niveau_calottes = this.calcul_tau_niveau_calottes( phieq, zphig_ancien );\n\n                CLogger.log( 'Method modelExecute: calcul_phig: dt = ' + dt );\n\n                // Calcul de zphig\n                zphig               = this.calculT( phieq, zphig_ancien, tau_niveau_calottes, dt );\n                zphig               = Math.min( Math.max( CPhysicsConstants.niveau_calottes_min, zphig ), CPhysicsConstants.niveau_calottes_max );\n\n                CLogger.log( 'Method modelExecute: calcul_phig: zphig = ' + zphig );\n                CLogger.log( 'Method modelExecute: zphig = ' + zphig );\n    \n                //** calcul de l'albédo\n                CLogger.log( 'Method modelExecute: fixed_albedo = ' + this.simulationValues.fixed_albedo );\n\n                if ( ! this.simulationValues.fixed_albedo )\n                {\n                    CLogger.log( 'Method modelExecute: calcul_albedo: albedo_ter = ' + CPhysicsConstants.albedo_ter );\n\n                    zalbedo = this.calcul_albedo( zphig );\n                }\n\n                CLogger.log( 'Method modelExecute: zalbedo = ' + zalbedo );\n\n                //** déduction de la température\n\n                //Teq=exp(0.25*log(Fin0*(1-zalbedo)/G/sigma));\n                //zT=Teq;\t\t\n                //zT=calculT(Teq,temperature_data[t-1],tau_temperature,temps_elem);\n                Fin     = Fin0 * ( 1 - zalbedo );\t\t\n                Fout    =  G * CPhysicsConstants.sigma * Math.exp( 4 * Math.log( zT_ancien ) );\n\n                CLogger.log( 'Method modelExecute: zT_ancien = ' + zT_ancien.toFixed(8) );\n                CLogger.log( 'Method modelExecute: Fin = ' + Fin.toFixed(8) );\n                CLogger.log( 'Method modelExecute: Fout = ' + Fout.toFixed(8) );\n    \n                //zT=zT_ancien+min(max(capacite_calorifique*(Fin-Fout)*dt,-100.),100.);\n                zTeq    = Math.exp( 0.25 * Math.log( Fin / ( G * CPhysicsConstants.sigma ) ) );\n\n                CLogger.log( 'Method modelExecute: zTeq = ' + zTeq.toFixed(8) );\n                \n                zT      = this.calculT( zTeq, zT_ancien, CPhysicsConstants.tau_temperature, dt );\n                zT      = Math.max( 0.0, Math.min( 1e6, zT ) );\n                \n                CLogger.log( 'Method modelExecute: dT = ' + ( CPhysicsConstants.capacite_calorifique * ( Fin - Fout ) * dt ).toFixed(8) );\n                CLogger.log( 'Method modelExecute: zT = ' + zT.toFixed(8) );\n                CLogger.log( 'Method modelExecute: zT_ancien = ' + zT_ancien.toFixed(8) );\n                CLogger.log( 'Method modelExecute: zT_ancien_prec = ' + zT_ancien_prec.toFixed(8) );\n\n                // fin des calculs\n                if ( ( iter >= 3 ) && ( oscillation == 0 ) )\n                {\n                    // if ( zT_ancien < zT_ancien_prec -1e-5 ) \n                    // modif CR 19 dec 2019 pour éviter de détecter des oscillations à cause d'erreurs numériques\n                    // on rajoute marge de 1e-5\n                    if ( zT_ancien < zT_ancien_prec - 1e-5 )\n                    {\n                        if ( zT > zT_ancien + 1e-5 )\n                        {\n                            oscillation = 1;\n                        }\n                    }\n                    else if ( zT_ancien > zT_ancien_prec + 1e-5 )\n                    {\n                        if ( zT < zT_ancien - 1e-5 )\n                        {\n                            oscillation = 1;\n                        }\n                    } \n                }\n\n                if ( ! this.simulationValues.fixed_concentration )\n                {\n                    CLogger.log( 'Method modelExecute: test oscillation: zCO2 = ' + zCO2 );\n                    CLogger.log( 'Method modelExecute: test oscillation: zCO2_ancien = ' + zCO2_ancien );\n                    CLogger.log( 'Method modelExecute: test oscillation: zCO2_ancien_prec = ' + zCO2_ancien_prec );\n\n                    if ( ( iter >= 3 ) && ( oscillation == 0 ) )\n                    {\n                        // modif CR 19 dec 2019 pour éviter de détecter des oscillations à cause d'erreurs numériques\n                        // on rajoute marge de 1e-5\n                        if ( zCO2_ancien < zCO2_ancien_prec - 1e-5 )\n                        {\n                            if ( zCO2 > zCO2_ancien + 1e-5 )\n                            {\n                                CLogger.log( 'Method modelExecute: cas 1 d\\'oscillation en CO2' );\n                                oscillation = 1;\n                            }\n                        }\n                        else if ( zCO2_ancien > zCO2_ancien_prec + 1e-5 )\n                        {\n                            if ( zCO2 < zCO2_ancien - 1e-5 )\n                            {\n                                CLogger.log( 'Method modelExecute: cas 2 d\\'oscillation en CO2' );\n                                oscillation = 1;\n                            }\n                        } \n                    }\n                } // if (current_values.simulation_type==FIXED_EMISSIONS) {\n                \n                CLogger.log( 'Method modelExecute: oscillation = ' + oscillation );\n\n                if ( oscillation == 1 )\n                {\n                    zT  = ( zT + zT_ancien + 0.5 * zT_ancien_prec ) / 2.5;\n                \n                    // if (current_values.simulation_type==FIXED_EMISSIONS) {\n                    if ( ! this.simulationValues.fixed_concentration )\n                    {\n                        zCO2    = ( zCO2 + zCO2_ancien + 0.5 * zCO2_ancien_prec ) / 2.5;\n                    }\n                \n                    zphig   = ( zphig + zphig_ancien + 0.5 * zphig_ancien_prec ) / 2.5;\n                }\n\n                zCO2_ancien_prec    = zCO2_ancien;\n                zT_ancien_prec      = zT_ancien;\n                zphig_ancien_prec   = zphig_ancien;\n                zT_ancien           = zT;\n                zCO2_ancien         = zCO2;\n                zphig_ancien        = zphig;\t\t\t\t    \n        \n            } // for (int iter=1;iter<=niter;iter++) {\n\n            this.simulationValues.temperature_data.set( t, zT );\n\n            CLogger.log( 'Method modelExecute: s.temperature_data[t] = ' + this.simulationValues.temperature_data.get( t ) );\n            CLogger.log( 'Method modelExecute: fin de la sous boucle, zT = ' + zT );\n\n            if ( ! this.simulationValues.fixed_concentration )\n            {\n                CLogger.log( 'Method modelExecute: zCO2 = ' + zCO2 );\n\n                this.simulationValues.concentrations_coo_data.set( t, zCO2 );\n\n                // this.simulationValues.emissions_coo_data.set( t - 1, ( this.simulationValues.concentrations_coo_data.get( t ) - this.simulationValues.concentrations_coo_data.get( t - 1 ) ) / this.experienceValues.temps_elem() ); //en ppm/an /(concentration_coo_actuel/coo_Gt_act); // conversion en Gt/an\n                this.simulationValues.emissions_coo_data.set( t - 1, ( this.simulationValues.concentrations_coo_data.get( t ) - this.simulationValues.concentrations_coo_data.get( t - 1 ) ) / this.experienceValues.temps_elem() / ( CPhysicsConstants.concentration_coo_2007 / CPhysicsConstants.coo_Gt_2007 ) ); //en Gt/an; modif mars 2022: conversion en Gt/an\n\n                CLogger.log( 'Method modelExecute: emissions_coo_data[t - 1] = ' + this.simulationValues.emissions_coo_data.get( t - 1 ) );\n                CLogger.log( 'Method modelExecute: concentrations_coo_data[t] = ' + this.simulationValues.concentrations_coo_data.get( t ) );\n            }\t  \n        \n            CLogger.log( 'Method modelExecute: zphig = ' + zphig );\n\n            this.simulationValues.niveau_calottes_data.set( t, 90 - zphig );\n\n            CLogger.log( 'Method modelExecute: Niveau calottes = ' + (90 - zphig) + ' / ' + zphig );\n        \n            zphig_moy   = 0.0; // init ajoutée le 30 nov 2012 remise le 11jan2014\n\n            CLogger.log( 'Method modelExecute: zphig_moy = ' + zphig_moy );\n        \n            if ( ! this.simulationValues.fixed_albedo)\n            {\n                this.simulationValues.albedo_data.set( t, zalbedo * 100. );\n\n                CLogger.log( 'Method modelExecute: zalbedo = ' + zalbedo );\n            }\n        \n            //** calcul niveau de la mer\n            this.simulationValues.niveau_mer_data.set( t, this.calcul_niveau_mer( 90 - this.simulationValues.niveau_calottes_data.get( t ), this.simulationValues.temperature_data.get( t ), t ) );\n\n            CLogger.log( 'Method modelExecute: s.niveau_mer_data[t] = ' + this.simulationValues.niveau_mer_data.get( t ) );\n        } //for (int t=1;t<=indice_max;t++){\n    \n        this.simulationValues.emissions_coo_data.set( this.experienceValues.indice_max(), this.simulationValues.emissions_coo_data.get( this.experienceValues.indice_max() - 1 ) );\n\n        // met la température en °C\n        for ( let t:number = 0; t <= this.experienceValues.indice_max(); t++ )\n        {\n            this.simulationValues.temperature_data.set( t, this.simulationValues.temperature_data.get( t ) - CPhysicsConstants.Tkelvin );\n            // ajout affichage par CR 19 dec 2019\n            CLogger.log( 'verif temperatures: t=' + t + '; T'+   this.simulationValues.temperature_data.get( t ) );\n        }\n\n        // met la température en °C\n        for ( let t:number = 1; t <= this.experienceValues.indice_max(); t++ )\n        {\n            this.simulationValues.temperature_data.set_past( t, this.simulationValues.temperature_data.get_past( t ) - CPhysicsConstants.Tkelvin );\n            // ajout affichage par AD 19 dec 2019\n            CLogger.log( 'verif temperatures past: t=' + t + '; T'+   this.simulationValues.temperature_data.get_past( t ) );\n        }\n\n        // met l'albédo en %\n        for ( let t:number = 0; t <= this.experienceValues.indice_max(); t++ )\n        {\n            this.simulationValues.albedo_data.set( t, this.simulationValues.albedo_data.get( t ) );\n        }\n\n        // Fix calottes first element + niveau mer\n        let firstCalotte    = this.simulationValues.niveau_calottes_data.get(1);\n        let firstNiveauMer  = this.simulationValues.niveau_mer_data.get(1);\n\n        this.simulationValues.niveau_calottes_data.set(0, firstCalotte);\n        this.simulationValues.niveau_mer_data.set(0, firstNiveauMer);\n\n        return this.simulationValues;\n    }\n    /** End of Model execution method*/\n} // eo CModel class\n\n","import { CExperienceValues } from './simclimat-lib.experience-values';\nimport { CLogger } from './simclimat-lib.logger';\n\nexport class CDataArray {\n\n    N: number               = 100;\n    datas: number[]         = [];\n    past_datas: number[]    = [];\n    resolution: number;\n    indice_min: number;\n    indice_max: number;\n    imin: number;\n    imax: number;\n\n    /**\n     * Constructor. \n     * \n     * The constructor of this class initialise physics constants and model vars.\n     * \n     * @remarks\n     * This method is part of the {@link core-library#Statistics | Statistics subsystem}.\n     * \n     * @beta\n     */\n\n    constructor( temps_elem: number, indice_min: number, indice_max: number ) {\n        this.resolution = temps_elem;\n        this.indice_min = indice_min;\n        this.indice_max = indice_max;\n        this.imin       = this.indice_min;\n        this.imax       = this.indice_max;\n    } // eo constructor\n\n\n    public get( index: number ) : number {\n        if ( this.is_in_bounds( index ) )\n        {\n            return this.datas[index];\n        }\n        else\n        {\n            throw new Error( 'index is out of range' );\n        }\n    } // eo get method\n\n\n    public get_past( index: number ) : number {\n        if ( this.is_in_bounds( index ) )\n        {\n            return this.past_datas[index];\n        }\n        else\n        {\n            throw new Error( 'index is out of range' );\n        }\n    } // eo get_past method\n\n\n    public set( index: number, value: number ): void {\n        if ( this.is_in_bounds( index ) )\n        {\n            this.datas[index]   = value;\n        }\n        else\n        {\n            throw new Error( 'index is out of range' );\n        }\n    } // eo set method\n\n\n    public set_past( index: number, value: number ): void {\n        if ( this.is_in_bounds( index ) )\n        {\n            this.past_datas[index]   = value;\n        }\n        else\n        {\n            throw new Error( 'index is out of range' );\n        }\n    } // eo set_past method\n\n\n    public minimax( current_min: number, current_max: number, start_index: number, init: boolean )\n    {\n        if ( init )\n        {\n            current_min = Number.POSITIVE_INFINITY;\n            current_max = Number.NEGATIVE_INFINITY;\n        }\n        \n        let cur_val: number;\n\n        for ( let i = start_index; i<= this.indice_max; i++ )\n        {\n            cur_val = this.datas[i];\n\n            if ( cur_val > current_max ) current_max    = cur_val;\n            if ( cur_val < current_min ) current_min    = cur_val;\n        }\n    } // eo minimax method\n\n\n    public interpolation_old( x: number ) \n    {\n        let a:number        = x / this.resolution;\n        let ainf: number    = Math.floor( a );\n        let vinf: number    = this.datas[ainf];\n\n        if ( ainf == a ) return vinf;\n\n        let asup: number    = ainf + 1.;\n        let vsup: number    = this.datas[ainf + 1];\n        \n        return vsup * ( a - ainf ) + vinf * ( asup - a );\n    } // eo interpolation_old method\n\n\n    public is_in_bounds( i: number ) : boolean\n\t{\n\t    return i >= this.indice_min && i <= this.indice_max;\n    } // eo is_in_bounds method\n    \n\n    public xmin() : number\n\t{\n\t    return this.resolution * this.imin;\n    } // eo xmin method\n    \n\n    public xmax() : number\n\t{\n\t    return this.resolution * this.imax;\n    } // eo xmax method\n\n\n    public recast_final_initial_origin( t: CDataArray ) : boolean\n\t{\n        this.datas[0]   = t.datas[t.indice_max];\n\t    return true;\n    } // eo recast_final_initial_origin method\n\n\n    public recast_final_initial_origin_calotte( t: CDataArray ) : boolean\n\t{\n        this.datas[0]   = 90 - t.datas[t.indice_max];\n\t    return true;\n    } // eo recast_final_initial_origin method\n\n\n    public recast_final_initial_past( t: CDataArray, ev: CExperienceValues ) : boolean\n\t{\n        let temps_origin    = t.imax * t.resolution;\n\n        for ( let i = 1 ; i <= this.indice_max; i++)\n        {\n            let indice_old: number  = 0;\n            \n            indice_old  = this.indice_max - ( i * ev.temps_elem() / t.resolution );\n            indice_old  = Math.max( indice_old, 1 );\n            indice_old  = Math.min( indice_old, this.indice_max );\n\n            this.set_past( i, t.get( indice_old ) );\n\n            CLogger.log( 'recast_final_initial: indice_max=' + this.indice_max + ' - temps_elem=' + ev.temps_elem() + ' - Resolution=' + t.resolution );\n            CLogger.log( 'recast_final_initial: i=' + i + ' - indice_old=' + indice_old + ' - Température=' + t.get( indice_old ) );\n        }\n\n\t    return true;\n    } // eo recast_final_initial_past method\n\n} // eo CDataArray class\n","import {CLogger} from './simclimat-lib.logger';\nimport {modelVarsConstants, CModelVars} from './simclimat-lib.model-vars';\nimport {CPhysicsConstants} from './simclimat-lib.physics-constants';\nimport {CDataArray} from './simclimat-lib.data-array';\nimport {CExperienceValues} from './simclimat-lib.experience-values';\n\nexport class CSimulationValues {\n    // Simulation name\n    public simulation_name: string  = '';\n\n\tpublic annee_debut: number;\n\tpublic annee_fin: number;\n\n\t// Simulation_type_dialog\n\tpublic fixed_concentration: boolean;\n\n\t// Concentration_dialog\n\tpublic coo_concentr_value: number;\n\n\t// Emission_dialog\n\tpublic emit_anthro_coo_value: number;\n\tpublic volcan_value: number;\n\tpublic alteration_value: number;\n\tpublic stockage_biologique_value: number; \n\n\t// Parametres_astronomiques_dialog\n\tpublic puissance_soleil_value: number;\n\tpublic distance_ts_value: number;\n\tpublic precession_value: number;\n\tpublic excentricite_value: number;\n\tpublic obliquite_value: number;\n\n\t// Retroactions_dialog\n\t// Albedo\n\tpublic fixed_albedo: boolean;\n    public albedo_value: number;\n    \n\t// Ocean\n\tpublic debranche_ocean: boolean;\n\tpublic fixed_ocean: boolean;\n\tpublic puit_oce_value: number;\n    \n    // Vegetation\t\n\tpublic debranche_biologie: boolean;\n\tpublic puit_bio_value: number;\n    \n    // Vapeur d'eau\n\tpublic fixed_eau: boolean;\n\tpublic rapport_H2O_value: number;\n\n    // Tableaux de données\n\tpublic emissions_coo_data: CDataArray;\n\tpublic concentrations_coo_data: CDataArray;\n\tpublic temperature_data: CDataArray;\n\tpublic niveau_calottes_data: CDataArray;\n\tpublic niveau_mer_data: CDataArray;\n\tpublic albedo_data: CDataArray;\n\n\n    /** Constants */\n    // private readonly ID_MIN: number             = -100;\n    private readonly ID_MIN: number             = 0;\n    private readonly ID_MAX: number             = 100;\n    private readonly TEMPS_ELEM: number         = 1;\n    private readonly INTERN_ECHEANCE: number    = 100.;\n\n    /** Objects */\n    private modelPhysicsConstants: CPhysicsConstants;\n    private modelVarsConstants: CModelVars;\n\n    constructor() {\n        // Instanciate a CPhysicsConstants object\n        CLogger.log( 'Enter CSimulationValues constructor' );\n        this.modelPhysicsConstants  = new CPhysicsConstants();\n        this.modelVarsConstants  = new CModelVars();\n    } // eo constructor\n\n\n    public set_simulation_name( name: string ) : boolean {\n        this.simulation_name    = name;\n        return true;\n    } // eo set_simulation_name method\n\n\n    public get_simulation_name() : string {\n        return this.simulation_name;\n    } // eo get_simulation_name method\n\n\n    public set_annee_fin( echeance: number ) : boolean {\n        this.annee_fin    = Number.parseInt( this.annee_debut.toString() ) + Number.parseInt( echeance.toString() );\n        return true;\n    } // eo set_simulation_name method\n\n\n    public get_annee_fin() : number {\n        return this.annee_fin;\n    } // eo get_simulation_name method\n\n\n    public set_resolution( resolution: number ) : boolean {\n        this.emissions_coo_data.resolution      = resolution;\n        this.concentrations_coo_data.resolution = resolution;\n        this.niveau_calottes_data.resolution    = resolution;\n        this.niveau_mer_data.resolution         = resolution;\n        this.albedo_data.resolution             = resolution;\n        this.temperature_data.resolution        = resolution;\n\n        return true;\n    } // eo set_simulation_name method\n\n\n    public recast_final_initial( sv: CSimulationValues, ev: CExperienceValues ) : boolean {\n        // this.annee_debut    = Number.parseInt( sv.annee_debut.toString() ) + Number.parseInt( sv.annee_fin.toString() );\n        this.annee_debut    = sv.annee_fin;\n\n        this.emissions_coo_data.recast_final_initial_origin( sv.emissions_coo_data );\n        this.concentrations_coo_data.recast_final_initial_origin( sv.concentrations_coo_data );\n        this.niveau_calottes_data.recast_final_initial_origin_calotte( sv.niveau_calottes_data ); // Modif pour gérer le changement d'origine sur le niveau des calottes A. Deseine 13-05-2024\n        this.niveau_mer_data.recast_final_initial_origin( sv.niveau_mer_data );\n        this.albedo_data.recast_final_initial_origin( sv.albedo_data );\n        this.temperature_data.recast_final_initial_origin( sv.temperature_data );\n        this.temperature_data.recast_final_initial_past( sv.temperature_data, ev );\n\n        return true;\n    } // eo recast_final_initial method\n\n\n    public init_simulation_arrays( name?: string, indice_min?: number, indice_max?: number, temps_elem?: number )\n    {\n        CLogger.log( 'Enter init_simulation_arrays method' );\n\n        if ( name == undefined )\n        {\n            name = 'Nouvelle simulation';\n        }\n\n        if ( indice_min == undefined )\n        {\n            indice_min = this.ID_MIN;\n        }\n\n        if ( indice_max == undefined )\n        {\n            indice_max = this.ID_MAX;\n        }\n\n        if ( temps_elem == undefined )\n        {\n            temps_elem = this.TEMPS_ELEM;\n        }\n\n        this.simulation_name            = name;\n        this.emissions_coo_data         = new CDataArray( temps_elem, indice_min, indice_max );\n        this.concentrations_coo_data    = new CDataArray( temps_elem, indice_min, indice_max );\n        this.temperature_data           = new CDataArray( temps_elem, indice_min, indice_max );\n        this.niveau_calottes_data       = new CDataArray( temps_elem, indice_min, indice_max );\n        this.niveau_mer_data            = new CDataArray( temps_elem, indice_min, indice_max );\n        this.albedo_data                = new CDataArray( temps_elem, indice_min, indice_max );\n    \n    } // eo init_simulation_arrays method\n\n\n    public create_1750_state() \n    {\n        CLogger.log( 'Enter create_1750_state method' );\n\n        // SimulationValues s(\"le monde en 1750\",ID_MIN,ID_MAX,TEMPS_ELEM); // TODO ALain : Initialise les tableaux.\n        this.init_simulation_arrays( 'le monde en 1750', this.ID_MIN, this.ID_MAX, this.TEMPS_ELEM );\n\n        this.annee_debut                = 1750.; // 1650 ou 1750 ?\n        this.fixed_eau                  = false;\t\n        this.fixed_concentration        = false;\t\t\n        this.debranche_biologie         = false;\t\n        this.fixed_ocean                = false;\t\n        this.debranche_ocean            = false;\n        this.fixed_albedo               = false;\t\t\n        this.rapport_H2O_value          = 100.;\t\n        this.puit_bio_value             = this.modelVarsConstants.modelConstants.puit_bio_reset_value;\n        this.puit_oce_value             = this.modelVarsConstants.modelConstants.puit_ocean_reset_value;\n        this.albedo_value               = CPhysicsConstants.albedo_1750 * 100;\n        this.coo_concentr_value         = this.modelVarsConstants.modelConstants.coo_concentr_reset_value;\n        this.puissance_soleil_value     = this.modelVarsConstants.modelConstants.puissance_soleil_reset_value;\n        this.distance_ts_value          = this.modelVarsConstants.modelConstants.distance_ts_reset_value;\n        this.obliquite_value            = this.modelVarsConstants.modelConstants.obliquite_reset_value;\n        this.excentricite_value         = this.modelVarsConstants.modelConstants.excentricite_reset_value;\n        this.precession_value           = this.modelVarsConstants.modelConstants.precession_reset_value;\n        this.alteration_value           = this.modelVarsConstants.modelConstants.alteration_reset_value;\n        this.emit_anthro_coo_value      = this.modelVarsConstants.modelConstants.emit_anthro_coo_reset_value;\n        this.volcan_value               = this.modelVarsConstants.modelConstants.volcan_reset_value;\n        this.stockage_biologique_value  = this.modelVarsConstants.modelConstants.stockage_biologique_reset_value;\n    \n        for ( let t = this.ID_MIN; t <= this.ID_MAX; t++ )\n        {\n            this.temperature_data.set( t, CPhysicsConstants.temperature_1750 );\n            this.niveau_mer_data.set( t, this.modelPhysicsConstants.niveau_mer_1750 );\n            this.niveau_calottes_data.set( t, CPhysicsConstants.niveau_calottes_1750 );\n            this.concentrations_coo_data.set( t, CPhysicsConstants.concentration_coo_1750 );\n            this.emissions_coo_data.set( t, 0. );\n            this.albedo_data.set( t, CPhysicsConstants.albedo_1750 * 100 );\n\n            if ( t > 0 )\n            {\n                this.temperature_data.set_past( t, CPhysicsConstants.temperature_1750 );\n            } // eo if\n            else\n            {\n                this.temperature_data.set_past( t, 0 );\n            } // eo else\n        } //eo for\n        \n        return;\n    } // eo create_1750_state method\n    \n\n    public create_actual_state() \n    {\n        CLogger.log( 'Enter create_actual_state method' );\n\n        // SimulationValues s(\"le monde en 2022\",ID_MIN,ID_MAX,TEMPS_ELEM); // TODO ALain : Initialise les tableaux.\n        this.init_simulation_arrays( 'le monde en 2022', this.ID_MIN, this.ID_MAX, this.TEMPS_ELEM );\n\n        this.annee_debut                = 2022.; // CR: mise à jour mars 2022\n        this.fixed_eau                  = false;\t\n        this.fixed_concentration        = false;\t\t\n        this.debranche_biologie         = false;\t\n        this.fixed_ocean                = false;\t\n        this.debranche_ocean            = false;\n        this.fixed_albedo               = false;\t\t\n        this.rapport_H2O_value          = this.modelVarsConstants.modelConstants.rapport_H2O_actuel;\t\n        this.puit_bio_value             = this.modelVarsConstants.modelConstants.puit_bio_reset_value;\n        this.puit_oce_value             = this.modelVarsConstants.modelConstants.puit_ocean_reset_value;\n        this.albedo_value               = this.modelVarsConstants.modelConstants.albedo_reset_value;\n        this.coo_concentr_value         = CPhysicsConstants.concentration_coo_actuel;\n        this.puissance_soleil_value     = this.modelVarsConstants.modelConstants.puissance_soleil_reset_value;\n        this.distance_ts_value          = this.modelVarsConstants.modelConstants.distance_ts_reset_value;\n        this.obliquite_value            = this.modelVarsConstants.modelConstants.obliquite_reset_value;\n        this.excentricite_value         = this.modelVarsConstants.modelConstants.excentricite_reset_value;\n        this.precession_value           = this.modelVarsConstants.modelConstants.precession_reset_value;\n        this.alteration_value           = this.modelVarsConstants.modelConstants.alteration_reset_value;\n        this.emit_anthro_coo_value      = CPhysicsConstants.emit_anthro_coo_act;\n        this.volcan_value               = this.modelVarsConstants.modelConstants.volcan_reset_value;\n        this.stockage_biologique_value  = this.modelVarsConstants.modelConstants.stockage_biologique_reset_value;\n\n        for ( let t = this.ID_MIN; t <= this.ID_MAX; t++ )\n        {\n            // modif CR: 31 oct 2019: les températures positives ou nulles doivent être fixées à temperature_actuelle\n            // this.temperature_data.set( t, CPhysicsConstants.temperature_actuelle + ( this.TEMPS_ELEM * ( t - this.ID_MAX ) * CPhysicsConstants.deltaT_last_century ) / this.INTERN_ECHEANCE );\n\t    this.temperature_data.set( t, CPhysicsConstants.temperature_actuelle);\n            this.niveau_mer_data.set( t, 0. );\n            this.niveau_calottes_data.set( t, this.modelPhysicsConstants.niveau_calottes_actuel );\n            this.concentrations_coo_data.set( t, CPhysicsConstants.concentration_coo_actuel );\n            this.emissions_coo_data.set( t, CPhysicsConstants.emit_anthro_coo_act * ( 1 - CPhysicsConstants.puit_bio_act - CPhysicsConstants.puit_ocean_act ) );\n            this.albedo_data.set( t, this.modelPhysicsConstants.albedo_actuel * 100 );\n\n            if ( t > 0 )\n            {\n                // this.temperature_data.set_past( t, CPhysicsConstants.temperature_actuelle + ( this.TEMPS_ELEM * (  - t - this.ID_MAX ) * CPhysicsConstants.deltaT_last_century ) / this.INTERN_ECHEANCE );\n                this.temperature_data.set_past( t, CPhysicsConstants.temperature_actuelle - ( this.TEMPS_ELEM / this.INTERN_ECHEANCE * t * this.modelPhysicsConstants.deltaT_last_century ) );\n\t\t// modif Camille 28 avril 2024: deltaT_last_century est maintenant un this.modelPhysicsConstants\n            } // eo if\n            else\n            {\n                this.temperature_data.set_past( t, 0 );\n            } // eo else\n        } //eo for\n\n        return;\n    } // eo create_actual_state method\n} // eo CSimulationValues class\n","import {CSimulationValues} from './simclimat-lib.simulation-values';\n\nexport class CExperienceValues {\n    // etat\n    public echeance_value: number;\n    public temps_elem_priv: number;\n    public indice_min_priv: number;\n    public indice_max_priv: number;\n\n    constructor( nouvelle_echeance : number ) {\n        this.calcul_indices( nouvelle_echeance );\n    } // eo constructor\n\n\n    public temps_elem() : number {\n        return this.temps_elem_priv;\n    } // eo temps_elem method\n\n\n    public  indice_min() : number {\n        return this.indice_min_priv;\n    } // eo indice_min method\n\n    \n    public indice_max() : number {\n        return this.indice_max_priv;\n    } // eo indice_max method\n\n\n    public echeance() : number {\n        return this.echeance_value;\n    } // eo echeance method\n\n\n    // subroutine de calcul de temps_elem, indice_min et indice_max, en fonction de current_values.echeance_value\n    // !!! cam, le 2 juillet 2006\n    //\n    public calcul_indices( nouvelle_echeance : number )\n    {\n        this.echeance_value    = nouvelle_echeance;\n\n        if ( this.echeance_value <= 100 )\n        {\n            this.indice_max_priv    = <number>( this.echeance_value );\n            this.temps_elem_priv    = 1.;\n            // this.indice_min_priv    = -99;\n            this.indice_min_priv    = 0; // Modif A. Deseine - 2019-10-18\n        } // eo if\n        else\n        {\n            this.temps_elem_priv    = this.echeance_value / 100.;\n            this.indice_max_priv    = 100;\n            // this.indice_min_priv    = - <number>( 100. / this.temps_elem_priv );\n            this.indice_min_priv    = 0; // Modif A. Deseine - 2019-10-20\n        } // eo else\n    } // eo calcul_indices method\n\n} // eo CExperienceValues class ","/*\n * Public API Surface of simclimat-lib\n */\n\n// export * from './lib/simclimat-lib.service';\n// export * from './lib/simclimat-lib.component';\n// export * from './lib/simclimat-lib.module';\nexport * from './lib/simclimat-lib.utils';\nexport * from './lib/simclimat-lib.model-vars';\nexport * from './lib/simclimat-lib.physics-constants';\nexport * from './lib/simclimat-lib.model';\nexport * from './lib/simclimat-lib.simulation-values';\nexport * from './lib/simclimat-lib.data-array';\nexport * from './lib/simclimat-lib.experience-values';\nexport * from './lib/simclimat-lib.logger';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}