var calc = { 'solarConstant': function() { // Stefan Boltzmanova konstanta let sigma_B = 5.670374419 * Math.pow(10, -8); // W/(2mK4) // Povrchová teplota Slunce let T_s = 5777; // K // Poloměr Slunce let R_s$km = 695508; // km let R_s$m = R_s$km * 1000; // m // Poloměr Země let R_e$km = 6371; // km let R_e$m = R_e$km * 1000; // m // Vzdálenost Slunce Země let r_se = 149597871000; // Intenzita vyzařování na povrchu Slunce let M_s = sigma_B * Math.pow(T_s, 4); // Povrch Slunce let A_s = 4 * Math.PI * Math.pow(R_s$m, 2); // Povrch Země //let A_e = 4 * Math.PI * R_e$m^2; // Zářivý tok z povrchu Slunce let phi_s = M_s * A_s; // Povrch koule mezi Sluncem a Zemí let S_se = 4 * Math.PI * Math.pow(r_se, 2); // Solární konstanta let I_0 = phi_s / S_se; return I_0; } }; function mainCalc() { // *** KONSTANTY *** // // var Nd = 360 / 365; // deg // Solární konstanta - G_SC var I_0 = calc.solarConstant(); // W/m2 //console.log(I_0); // *** POLOHA *** // Odrazivost okolního terénu (albedo) var ro_albedo = null; // Nadmořská výška var H_nm = null; // m.n.m. // Zěměpisná šířka var zf = null; // deg // Zěměpisná délka var zg = null; // deg // Zněčištění atmosféry var Z_in = null; // - // Umístění var mesto = null; // ~ // Umístění var mesto_sip = null; // ~ // Skutečná měsíční doba slunečního svitu var tau_skut_month = []; // Skutečná měsíční doba slunečního svitu var albedo_month = []; // Průměrný měsíční atmosférický tlak var pressure_month = []; // Venkovní teplota v době slunečního svitu var tes_month = []; // Zněčištění atmosféry var Z_month = []; // - // *** PANEL *** // Referenční účinnost var ny_ref = parseFloat(document.querySelector('input[name="eta_ref"]').value); // % // Teplotní součinitel výkonu var gamma_P = parseFloat(document.querySelector('input[name="gamma"]').value); // %/K // Teplota článku v otevřeném stavu při NOCT var t_FVNOCT = parseFloat(document.querySelector('input[name="t_FV"]').value); // C // Odrazivost modulu var ro = parseFloat(document.querySelector('input[name="ro"]').value); // % // Plocha jednoho panelu var A_FV_s = parseFloat(document.querySelector('input[name="A_FV_s"]').value); // m2 // Počet panelů var A_FV_count = parseFloat(document.querySelector('input[name="A_FV_count"]').value); // ks // Činná plocha FTV panelu var A_FV = null; // m2 // Pohltivost modulu var alfa = null; // - // Součinitel tepelné ztráty z FV článku do okolí var U = null; // W/m2K // Azimut plochy od jihu var a_s = null; // Naklonění plochy od vodorovné plochy var beta = null; mesto = parseFloat(document.querySelector('input[name="mesto_nazev"]').value); // - mesto_sip = document.querySelector('input[name="mesto_name"]').value; // - zf = parseFloat(document.querySelector('input[name="mesto_zsirka"]').value.replace(",", ".")); // -49.96527778; zg = parseFloat(document.querySelector('input[name="mesto_zdelka"]').value.replace(",", ".")); // 16.97056; H_nm = parseFloat(document.querySelector('input[name="mesto_nvyska"]').value); // 300; Z_in = document.querySelector('select[name="Z"]').value; // - ro_alb_in = document.querySelector('select[name="albedo"]').value; // 0.2; for(let m = 0; m < 12; ++m) { let cur_tau_skut = parseFloat(document.querySelector('input[name="mesto_tau_skut-' + (m + 1) + '"]').value); let albedo = parseFloat(document.querySelector('input[name="albedo-' + (m + 1) + '"]').value); let pressure = parseFloat(document.querySelector('input[name="pressure-' + (m + 1) + '"]').value); let tes = parseFloat(document.querySelector('input[name="tes-' + (m + 1) + '"]').value); let Z = parseFloat(document.querySelector('input[name="Z-' + (m + 1) + '"]').value); tau_skut_month[m] = cur_tau_skut; albedo_month[m] = albedo; pressure_month[m] = pressure; tes_month[m] = tes; Z_month[m] = Z; } a_s = parseFloat(document.querySelector('input[name="a_s"]').value); beta = parseFloat(document.querySelector('input[name="alpha_sklon"]').value); // Referenční podmínky var t_eref = parseFloat(document.querySelector('input[name="t_eref"]').value); // C var G_ref = parseFloat(document.querySelector('input[name="G_ref"]').value); // W/m2 // Podmínky NOCT // Teplota při NOCT var t_eNOCT = parseFloat(document.querySelector('input[name="t_eNOCT"]').value); // C // Sluneční ozáření při NOCT var G_NOCT = parseFloat(document.querySelector('input[name="G_NOCT"]').value); // W/m2 // Srážky vlivem elektrických ztrát var p_1 = null; var p_2 = null; var p_3 = null; // Celkové srážky vlivem elektrických ztrát var p = null; // Srážka vlivem nekolmého dopadu paprsku var p_4 = null; // Spotřeba na m2 var consumptionPerSMeter = parseFloat(document.querySelector('input[name="consumption_per_square_meter"]').value); // Užitná plocha var houseArea = parseFloat(document.querySelector('input[name="house_area"]').value); p_1 = parseFloat(document.querySelector('input[name="p_1"]').value); p_2 = parseFloat(document.querySelector('input[name="p_2"]').value); p_3 = parseFloat(document.querySelector('input[name="p_3"]').value); p = (100 - (p_1 + p_2 + p_3)) / 100; // - p_4 = (100 - parseFloat(document.querySelector('input[name="p_4"]').value)) / 100; A_FV = A_FV_s * A_FV_count; alfa = (100 - ro) / 100; U = (alfa * G_NOCT) / (t_FVNOCT - t_eNOCT); var H_sdenteor = []; // kWh/m2 var H_smesteor = []; // kWh/m2 var H_dmesteor = []; // kWh/m2 var H_sden = []; // kWh/m2 var H_smes = []; // kWh/m2 var H_smes2 = []; // kWh/m2 var H_mes = []; // kWh/month var G_mes = []; // W/m2 var G_den = []; // W/m2 var S_a_arr = []; // - var pointsH = []; var pointsHm = []; var pointsG = []; var pointsHd = []; var pointsH2 = []; var pointsH_aver = []; var pointsCd = []; var pointsCm = []; var pointsCm2 = []; var slunovrat = 23.45; // Normální atmosférický tlak let p_0 = 101.325; // kPa let lastTau_skut_dayAprox = 0; let averageHouseholdConsumption = consumptionPerSMeter * 1000 * houseArea; let householdConsumption_month = []; let householdConsumption_day = []; for(let n = 1; n <= 365; ++n) { let date = getDateFromDayNum(n, 2021); let day = date.getDate(); let month = date.getMonth() + 1; let nextDay = n + 1; // Měsíční průměrná deklinace (dle Mädlowa) let d_om = 0.383 - 22.926 * Math.cos(degToRad(Nd * n)) - 0.381 * Math.cos(degToRad(2 * Nd * n)) - 0.152 * Math.cos(degToRad(3 * Nd * n)) - 0.008 * Math.cos(degToRad(4 * Nd * n)) - 0.003 * Math.cos(degToRad(5 * Nd * n)) + 3.939 * Math.sin(degToRad(Nd * n)) + 0.042 * Math.sin(degToRad(2 * Nd * n)) + 0.08 * Math.sin(degToRad(3 * Nd * n)) + 0.003 * Math.sin(degToRad(4 * Nd * n)) + 0.002 * Math.sin(degToRad(5 * Nd * n)); // Denní průměrná deklinace //let d_od = 23.45 * Math.sin(degToRad(Nd * (284 + n))); //let d_od = radToDeg(Math.asin(Math.sin(degToRad(-23.45)) * Math.cos(degToRad(360/365.24 * (n + 10) + 360 / Math.PI * 0.0167 * Math.sin(degToRad(360 / 365.24 * (n - 2))))))); // Day angle //let T = (2 * Math.PI * (n - 1)) / 365; // rad //let d_odpokus = radToDeg(0.006918 - 0.399912 * Math.cos(T) + 0.070257 * Math.sin(T) - 0.006758 * Math.cos(2 * T) + 0.000907 * Math.sin(2 * T) - 0.002697 * Math.cos(3 * T) + 0.00148 * Math.sin(3 * T)); let pn = n; let pL = 280.460 + 0.9856474 * pn; let pg = 357.528 + 0.9856003 * pn; let plambda = radToDeg(degToRad(pL) + 1.915 * Math.sin(degToRad(pg)) + 0.020 * Math.sin(2 * degToRad(pg))); //let pbeta = 0; let pR = 1.00014 - 0.01671 * Math.cos(degToRad(pg)) - 0.00014 * Math.cos(2 * degToRad(pg)); //console.log(pR * 149597870700); let peta = 23.439 - 0.0000004 * pn; let palfa = Math.atan(Math.cos(peta * Math.tan(degToRad(plambda)))); //let palfa = Math.atan2(Math.cos(peta * Math.sin(plambda)), Math.cos(plambda)); let d_od = radToDeg(Math.asin(Math.sin(degToRad(peta)) * Math.sin(degToRad(plambda)))); // Hodina východu slunce let h_vs = 12 / Math.PI * Math.acos(Math.tan(degToRad(zf)) * Math.tan(degToRad(d_od))); // Hodina východu slunce se zahrnutím ohybu slunečních paprsků (dřívější východ) - nevhodné pro výpočet //let h_vs2 = 1 / 15 * radToDeg(Math.acos((Math.sin(degToRad(f)) + Math.sin(degToRad(d_od)) + 0.010153) / (Math.cos(degToRad(f)) * Math.cos(degToRad(d_od))))); // Hodina západu slunce let h_zs = 24 - h_vs; // Teoretická doba slunečního svitu let S_a = h_zs - h_vs; // Solární konstanta korigovaná o proměnnou vzdálenost Země od Slunce - G_En let I_0A = G_En = I_0 * (1 + 1 / 30 * Math.cos(degToRad((360 * n) / 365))); // W/m2 // Časová rovnice (dle Aydinli) let W_d = (2 * Math.PI) / 365 * n; let ny = 0.0066 + 7.3525 * Math.cos(W_d + 1.4989) + 9.9359 * Math.cos(2 * W_d + 1.9006) + 0.3387 * (Math.cos(3 * W_d) + 1.836); // Korekce zohledňující proměnlivost rotace Země během oběhu okolo Slunce let B = (n - 1) * 360 / 365; let E = 222.9 * (0.000075 + 0.001868 * Math.cos(degToRad(B)) - 0.032077 * Math.sin(degToRad(B)) - 0.014615 * Math.cos(degToRad(2 * B)) - 0.04089 * Math.sin(degToRad(2 * B))); // Rozdíl mezi pravým slunečním časem a středním slunečním časem let ET = 10.2 * Math.sin(4 * Math.PI * (n - 80) / 373) - 7.74 * Math.sin(2 * Math.PI * (n - 8) / 355); let H_PUd_cur_teor = 0; let H_S_cur_day_teor = 0; let H_D_cur_day_teor = 0; if(!householdConsumption_month[month - 1]) { householdConsumption_month[month - 1] = 0; } if(!H_smes[month - 1]) { H_smes[month - 1] = 0; } if(!H_smesteor[month - 1]) { H_smesteor[month - 1] = 0; } if(!H_dmesteor[month - 1]) { H_dmesteor[month - 1] = 0; } if(!S_a_arr[month - 1]) { S_a_arr[month - 1] = 0; } if(!H_smes2[month - 1]) { H_smes2[month - 1] = 0; } pointsCd.push([n, pd.elConsumption["TTD5-SM-d"][n - 1] * 1000]); householdConsumption_month[month - 1] += averageHouseholdConsumption / 365; householdConsumption_day[n - 1] = pd.elConsumption["TTD5-SM-d"][n - 1] * 1000; for(let h = -12; h < 12; ++h) { // Pravý sluneční čas let psc = h + 12; /*if(psc <= h_vs || psc >= h_zs) { continue; }*/ // Časový úhel let tau = h * 15; //let d_oh = d_od - d_odp * h; let nh = n + (h / 24); let d_oh = radToDeg(Math.asin(Math.sin(degToRad(-23.44)) * Math.cos(degToRad(360/365.24 * (nh + 10) + 360 / Math.PI * 0.0167 * Math.sin(degToRad(360 / 365.24 * (nh - 2))))))); // Hodinová průměrná elevační výška Slunce //let h_0 = radToDeg(Math.asin(Math.sin(degToRad(f)) * Math.sin(degToRad(d_od)) + 12 / Math.PI * (Math.sin(((Math.PI * psc) / 12)) - Math.sin(((Math.PI * (psc + 1)) / 12))) * Math.cos(degToRad(f)) * Math.cos(degToRad(d_od)))); let k = Math.sin(degToRad(d_oh)) * Math.sin(degToRad(zf)) + Math.cos(degToRad(d_oh)) * Math.cos(degToRad(zf)) * Math.cos(degToRad(tau)); // Elevační výška Slunce let h_0 = radToDeg(Math.asin(k)); // Korekce úhlové výšky z důvodu ohybu paprsku let h_ref = 0.061359 * ((0.1594 + 1.123 * h_0 + 0.065656 * Math.pow(h_0, 2)) / (1 + 28.9344 * h_0 + 277.3971 * Math.pow(h_0, 2))); h_0 = h_0 + h_ref; if(h_0 < 0) { continue; } // Zenitový úhel let zen = radToDeg(Math.acos(k)); //zen = zen - h_ref; let kp = (pressure_month[month - 1]) / (p_0 * 10); // Poměrná optická tloušťka atmosféry // (dle Kasten a Young) let m = kp / (Math.cos(degToRad(zen)) + 0.50572 * Math.pow(96.07995 - zen, -1.6364)); // (dle Machotkina s korekcí na nadmořskou výšku) let m_alt = (2.0016 * (1 - H_nm * Math.pow(10, -4))) / (Math.sqrt(Math.pow(Math.sin(degToRad(h_0)), 2) + 0.003147) + Math.sin(degToRad(h_0))); // (dle Muneer 2004) let AM = 1 / (Math.sin(degToRad(h_0)) + 0.50572 * Math.pow(degToRad(h_0) + 6.07995, -1.6364)); let AMd = AM * Math.exp(-0.0001184 * H_nm); // Extinkční koeficient Rayleighyho atmosféry let a_r = 1 / (0.9 * m + 9.4); /* let SEC = psc - ny - (4 * (zg - 15)) / 60; let T_m = ET + psc; let polednik = 15; let ST = psc + 4 * (zg - polednik) + E; console.log(psc, T_m, ST, SEC, d_oh); */ // Azimut slunce let a_prep = Math.cos(degToRad(d_oh)) / Math.cos(degToRad(h_0)) * Math.sin(degToRad(tau)); // Make this check because asin cant be bigger then 1 or smaller then -1, due tu inaccuracy a_prep can slightly off if(a_prep > 1) { a_prep = 1; } if(a_prep < -1) { a_prep = -1; } let a = radToDeg(Math.asin(a_prep)); // Horizon height let hh = findClosest(horizonData, a); // Sun is behind the mountains if(hh.H_hor > h_0) { //console.log(a, hh, date, psc); continue; } // (Maxwellův model) let k_t = 0.6; let A = null; let B = null; let C = null; let K_nc = 0.866 - 0.122 * AMd + 0.012 * Math.pow(AMd, 2) - 0.000653 * Math.pow(AMd, 3) + 0.000014 * Math.pow(AMd, 4); if(k_t <= 0.6) { A = 0.512 - 1.56 * k_t + 2.286 * Math.pow(k_t, 2) - 2.222 * Math.pow(k_t, 3); B = 0.37 + 0.962 * k_t; C = -0.28 + 0.932 * k_t - 2.048 * Math.pow(k_t, 2); }else{ A = -5.743 + 21.77 * k_t - 27.49 * Math.pow(k_t, 2) + 11.56 * Math.pow(k_t, 3); B = 41.4 - 118.5 * k_t + 66.05 * Math.pow(k_t, 2) + 31.9 * Math.pow(k_t, 3); C = -47.01 + 184.2 * k_t - 222 * Math.pow(k_t, 2) + 73.81 * Math.pow(k_t, 3); } // Přímé normálové ozáření let G_Bn = G_En * (K_nc - (A + B * Math.exp(AMd * C))); // Úhel dopadu paprsků let gamma = radToDeg(Math.acos(Math.sin(degToRad(h_0)) * Math.cos(degToRad(beta)) + Math.cos(degToRad(h_0)) * Math.sin(degToRad(beta)) * Math.cos(degToRad(a - a_s)))); // Přímé sluneční záření let I_PN = I_0A * Math.exp(-a_r * m * Z_month[month - 1]); //console.log(I_PN, G_Bn); // Přímé sluneční záření na libovolně orientovanou plochu let I_PU = I_PN * Math.cos(degToRad(gamma)); // Difuzní sluneční záření jasné oblohy let I_DBH = (0.22 + 0.025 * Z_month[month - 1]) * (I_0A - I_PN) * Math.sin(degToRad(h_0)); // Difúzní sluneční záření jasné oblohy na libovolně orintovanou plochu let I_DBU = 0.5 * I_DBH * (Math.sin(degToRad(beta)) * 0.94 * Math.exp(Math.cos(degToRad(gamma)) + 1.84 / Z_month[month - 1] - 1.44) + 1 + Math.cos(degToRad(beta))); // Difúzní sluneční záření zamračené oblohy let I_DZH = (0.18 + 0.025 * Z_month[month - 1]) * I_0A * Math.sin(degToRad(h_0)); // Difúzní sluneční záření zamračené oblohy, na libovolně orintovanou plochu let I_DZU = I_DZH * (0.6 * Math.cos(degToRad(beta)) + 0.4); // Odražené sluneční záření jasné oblohy let I_RB = 0.5 * albedo_month[month - 1] * (1 - Math.cos(degToRad(beta))) * (I_DBH + I_PN * Math.sin(degToRad(h_0))); // Odražené sluneční záření zamračené oblohy let I_RZ = 0.5 * albedo_month[month - 1] * I_DZH * (1 - Math.cos(degToRad(beta))); // Celkové sluneční záření jasné oblohy let I_CB = I_PU + I_DBU + I_RB; // Celkové sluneční záření zamračené oblohy let I_CZ = I_DZU + I_RZ; if(I_CB > 0) { H_S_cur_day_teor += (I_CB / 1); H_D_cur_day_teor += (I_CZ / 1); } } /*if(n == 5) { break; }*/ let S_m = null; if(pd.places[mesto_sip]['tau_skut_day']) { S_m = pd.places[mesto_sip]['tau_skut_day'][n - 1] / S_a; }else{ S_m = pd.places[mesto_sip]['tau_skut_month'][month - 1] / (S_a * daysInMonth(month - 1, 2021)); } //let S_m = tau_skut_day / S_a; S_a_arr[month - 1] += S_a; let H_S_day = S_m * H_S_cur_day_teor + (1 - S_m) * H_D_cur_day_teor; H_sdenteor[n - 1] = H_S_cur_day_teor; H_smesteor[month - 1] += H_S_cur_day_teor; H_dmesteor[month - 1] += H_D_cur_day_teor; H_sden[n - 1] = H_S_day; G_den[n - 1] = H_S_cur_day_teor / S_a; H_smes2[month - 1] += H_S_day; pointsHd.push([n, H_S_day]); } var G_den_aver = []; var H_den_aver = []; var smoothAverage = 3; for(let i = 0; i < 365; ++i) { let G_den_sum = 0; let H_den_sum = 0; let G_den_count = 0; for(let a = -smoothAverage; a < smoothAverage; ++a) { if(G_den[i + a]) { G_den_sum += G_den[i + a]; H_den_sum += H_sden[i + a]; G_den_count++; } } G_den_aver[i] = G_den_sum / G_den_count; H_den_aver[i] = H_den_sum / G_den_count; pointsH_aver.push([i + 1, H_den_aver[i]]); } var H_year = 0; for(let month = 0; month < 12; ++month) { let S_m = tau_skut_month[month] / S_a_arr[month]; let H_month = S_m * H_smesteor[month] + (1 - S_m) * H_dmesteor[month]; let G_month = H_smesteor[month] / (S_a_arr[month]); H_smes[month] = H_month; H_mes[month] = H_month * A_FV; G_mes[month] = G_month; H_year += H_month; pointsH.push([month, H_month]); pointsHm.push([month, H_month * A_FV]); pointsH2.push([month, H_smes2[month]]); pointsG.push([month, G_month]); pointsCm.push([month, householdConsumption_month[month]]); //pointsCm2.push([month, pd.elConsumption['TTD5-SM-m'][month] * 1000]); }; var G_dec = 200; function FVprodMonth(G_mes, H_smes) { var n_FVstart = 1; var tFV = []; var k = []; var nFV = []; var E_FVsys = []; var E_FVsysm = []; var E_FVsys_year = 0; for(let m = 0; m < 300; ++m) { for(let i = 0; i < 12; ++i) { if(m == 0) { n_FVprev = n_FVstart; }else{ n_FVprev = nFV[i]; } if(G_mes[i] < 250) { G_mes[i] = 250; } tFV[i] = tes_month[i] + (alfa * G_mes[i] - n_FVprev / 100 * G_mes[i]) / U; //tFV[i] = tes_month[i] + G_mes[i] * ((t_FVNOCT - t_eNOCT) / G_NOCT) * (1 - ny_ref / (alfa * 100)); k[i] = (n_FVprev - ny_ref) / ny_ref * 1 / Math.log(G_dec / G_ref); nFV[i] = ny_ref * (1 + gamma_P / 100 * (tes_month[i] + (1 - (ny_ref / 100) / alfa) * G_mes[i] / G_NOCT * (t_FVNOCT - t_eNOCT) - t_eref)) * (1 + k[i] * Math.log(G_mes[i] / G_ref)); let E_FVsys_cur = nFV[i] / 100 * H_smes[i] / 1000 * p * p_4 * 1000; E_FVsysm[i] = E_FVsys_cur; E_FVsys[i] = E_FVsys_cur * A_FV; } let E_FVsys_year_new = E_FVsys.reduce((a, b) => a + b, 0); if(Math.abs(E_FVsys_year - E_FVsys_year_new) < 0.0001) { E_FVsys_year = E_FVsys_year_new; break; }else{ E_FVsys_year = E_FVsys_year_new; } } return { "E_FVsysm": E_FVsysm, "E_FVsys_year": E_FVsys_year, "E_FVsys": E_FVsys, "n": nFV, "t": tFV }; } function FVprodDay(G_mes, H_smes) { var n_FVstart = 1; var tFVd = []; var kd = []; var nFVd = []; var E_FVsysd = []; var E_FVsysdm = []; var E_FVsysd_year = 0; var n_FVprevd = null; for(let m = 0; m < 300; ++m) { for(let i = 0; i < 365; ++i) { let date = getDateFromDayNum(i, 2021); let day = date.getDate(); let month = date.getMonth(); if(m == 0) { n_FVprevd = n_FVstart; }else{ n_FVprevd = nFVd[i]; } let cur = tes_month[month]; let prev = null; let next = null; if(month == 0) { prev = tes_month[11]; }else{ prev = tes_month[month - 1] } if(month == 11) { next = tes_month[0]; }else{ next = tes_month[month + 1] } let predictedDayTemp = (cur - (next - prev) / 4) + ((next - prev)) / 60 * day; //let G_den_aver = G_den_sum / G_den_count; let cur_G_den_aver = G_den_aver[i]; //let H_den_aver = H_den_sum / G_den_count; let cur_H_den_aver = H_den_aver[i]; if(cur_G_den_aver < 250) { cur_G_den_aver = 250; } //let predictedDayTemp = tes_month[month]; /*if(i == 5) { break; }*/ // Výpočet dle TZB info //tFVd[i] = tes_month[month] + (alfa * G_den[i] - n_FVprevd / 100 * G_den[i]) / U; // Výpočet dle Homerovi metodologie - výpočet složitější protože U zakomponováno ve vzorci (shodné výsledky s TZBinfo) //tFVd[i] = tes_month[month] + G_den[i] * ((t_FVNOCT - t_eNOCT) / G_NOCT) * (1 - ny_ref / (alfa * 100)); // Efficiency of the PV array at max power point at test conditions let ny_mpstc = 0.36 / 1.824 * G_ref / 1000; // Temperature coefficient of power (%/C) let alfa_odhad = -0.304 / 33.9; // Efficiency of the PV array at max power point let ny_mp = ny_mpstc * (1 + alfa_odhad * (tFVd[i] - t_eref)); tFVd[i] = predictedDayTemp + (t_FVNOCT - t_eNOCT) * ((cur_G_den_aver*30) / G_NOCT) * (1 - ny_mp / alfa); // Součinitel panelu kd[i] = (n_FVprevd - ny_ref) / ny_ref * 1 / Math.log(G_dec / G_ref); // Účinnost FV modulu //let curnFVt = ny_ref * (1 + gamma_P / 100 * (tFVd[i] - t_eref)); //let curnFVG = ny_ref * (1 + kd[i] * Math.log(G_den[i] / G_ref)); //nFVd[i] = (curnFVt * curnFVG) / ny_ref; nFVd[i] = ny_ref * (1 + gamma_P / 100 * (predictedDayTemp + (1 - (ny_ref / 100) / alfa) * cur_G_den_aver / G_NOCT * (t_FVNOCT - t_eNOCT) - t_eref)) * (1 + kd[i] * Math.log(cur_G_den_aver / G_ref)); let E_FVsys_cur = nFVd[i] / 100 * cur_H_den_aver / 1000 * p * p_4 * 1000; //let E_FVsys_cur = P_pk / G_ref * nFVd[i] / ny_ref * H_sden[i] / 1000 * p * p_4 * 1000; E_FVsysdm[i] = E_FVsys_cur; E_FVsysd[i] = E_FVsys_cur * A_FV; } let E_FVsysd_year_new = E_FVsysd.reduce((a, b) => a + b, 0); if(Math.abs(E_FVsysd_year - E_FVsysd_year_new) < 0.0001) { E_FVsysd_year = E_FVsysd_year_new; break; }else{ E_FVsysd_year = E_FVsysd_year_new; } } return { "E_FVsysdm": E_FVsysdm, "E_FVsysd_year": E_FVsysd_year, "E_FVsysd": E_FVsysd, "n": nFVd }; } let dataD = FVprodDay(G_mes, H_smes); let dataM = FVprodMonth(G_mes, H_smes); let E_FVsysdm = dataD.E_FVsysdm; let E_FVsysd = dataD.E_FVsysd; let E_FVsysd_year = dataD.E_FVsysd_year; let nFVd = dataD.n; let E_FVsysm = dataM.E_FVsysm; let E_FVsys = dataM.E_FVsys; let tFV = dataM.t; let nFV = dataM.n; let nFVd_sum = 0; var pointsEdm = []; var pointsEd = []; var pointsE = []; var pointsEy = []; let pokus = []; for(let n = 0; n < 365; ++n) { let date = getDateFromDayNum(n, 2021); let day = date.getDate(); let month = date.getMonth(); let cur = tes_month[month]; let prev = null; let next = null; if(month == 0) { prev = tes_month[11]; }else{ prev = tes_month[month - 1] } if(month == 11) { next = tes_month[0]; }else{ next = tes_month[month + 1] } let val = (cur - (next - prev) / 4) + ((next - prev)) / 60 * day; pokus.push([n, val * 1000]); pointsEdm.push([n + 1, E_FVsysdm[n], day + "." + (month + 1) + "." + date.getFullYear()]); pointsEd.push([n + 1, E_FVsysd[n]]); nFVd_sum += nFVd[n]; //pointsCd.push([n, householdConsumption_day[n]]); } let nFV_year_average = nFVd_sum / 365; for(let month = 0; month < 12; ++month) { pointsE.push([month, E_FVsysm[month]]); pointsEy.push([month, E_FVsys[month]]); }; for(let i = 0; i < 12; ++i) { var elemE = document.querySelector('input[name="EFV-' + (i + 1) + '"]'); var elemEm = document.querySelector('input[name="EFVm-' + (i + 1) + '"]'); var elemH = document.querySelector('input[name="H-' + (i + 1) + '"]'); var elemG = document.querySelector('input[name="G-' + (i + 1) + '"]'); var elemt = document.querySelector('input[name="tFV-' + (i + 1) + '"]'); var elemn = document.querySelector('input[name="nFV-' + (i + 1) + '"]'); elemH.value = (H_smes[i] / 1000).toFixed(2); elemG.value = (G_mes[i]).toFixed(2); elemt.value = tFV[i].toFixed(2); elemn.value = nFV[i].toFixed(2); elemE.value = (E_FVsys[i] / 1000).toFixed(2); elemEm.value = (E_FVsysm[i] / 1000).toFixed(2); }; document.querySelector('input[name="U"]').value = U.toFixed(2); document.querySelector('input[name="E_FVsys_year"]').value = (E_FVsysd_year / 1000000).toFixed(2); document.querySelector('input[name="n_year"]').value = (nFV_year_average).toFixed(2); document.querySelector('input[name="alfa"]').value = alfa.toFixed(2); document.querySelector('input[name="p"]').value = p.toFixed(2); document.querySelector('input[name="A_FV"]').value = A_FV.toFixed(2); var minHmonthy = Math.min( ...E_FVsysd ), maxHmonthy = Math.max( ...E_FVsysd, ...householdConsumption_day ); var minHmonth = Math.min( ...E_FVsysm ), maxHmonth = Math.max( ...H_smes ); var minHday = Math.min( ...E_FVsysdm ), maxHday = Math.max( ...H_sden ); var smoothing = 0.2; var optionsHmonthy = { yMin: minHmonthy - (minHmonthy * 0.5), yMax: maxHmonthy + (maxHmonthy * 0.1), xMin: 0, xMax: 365 } var optionsHmonth = { yMin: minHmonth - (minHmonth * 0.5), yMax: maxHmonth + (maxHmonth * 0.1), xMin: 0, xMax: 11 } var optionsHday = { yMin: minHday - (minHday * 0.5), yMax: maxHday + (maxHday * 0.1), xMin: 0, xMax: 365 } const containerDay = document.getElementById('graph-day'); $('#graph-day').innerHTML = ""; const containerMonth = document.getElementById('graph-month'); $('#graph-month').innerHTML = ""; const containerMonthY = document.getElementById('graph-month-y'); $('#graph-month-y').innerHTML = ""; drawGraph( containerMonth, [ { name: "H2", unit: "kWh/měs·m²", style: { color: "#f7d56e", dashed: true, label: "all", labelVisibility: "always" }, points: pointsH2 }, /*{ name: "H", unit: "kWh/m²", style: { color: "#f7d56e", dashed: true, label: "none" }, points: pointsH },*/ { name: "E", unit: "kWh/měs·m²", style: { color: "#ff0a0a", label: "all", labelVisibility: "always" }, points: pointsE } ], smoothing, optionsHmonth, 1000 ); drawGraph( containerDay, [ { name: "Hd", unit: "kWh/den·m²", style: { color: "#f5823d", dashed: true, label: "all", labelVisibility: "pop" }, points: pointsH_aver }, { name: "Ed", unit: "kWh/den·m²", precision: 2, style: { color: "#ff0a0a", label: "all", labelVisibility: "pop" }, points: pointsEdm }/*, { name: "pokus", unit: "C", style: { color: "#fff", label: 30 }, points: pokus }*/ ], smoothing, optionsHday, 1000 ); drawGraph( containerMonthY, [ { name: "C", unit: "kWh/den", style: { color: "#668eff", label: "all", labelVisibility: "pop" }, points: pointsCd }, { name: "Ey", unit: "kWh/den", style: { color: "#ff0a0a", label: "all", labelVisibility: "pop" }, points: pointsEd } ], smoothing, optionsHmonthy, 1000 ); };