import scipy.optimize
from constants0 import *
import numpy as np
import tools.heat_cp as ent # Python-fil med funksjoner for varmekapasitet
import tools.file_handler as fil

massestrømmer = fil.file_to_dict('stromdata_dict.txt') # Henter massestrømmer fra simulator

#Kjente variabler

U = 1050 # [W/m^2*K]
#Cold stream
mc = float(massestrømmer['m4']) # Massestrømmene hentes ut av tekstfil som string. Må omgjøres til float.
Tc_in = 325 # [K]
Tc_out = 386 # [K]
cpc = ent.mean_Cp(Tc_in, Tc_out)
#Hot stream
mh = float(massestrømmer['m6'])
Th_in = 395 # [K]


def mean_log_temp(Th_out, Tc_in=Tc_in, Th_in=Th_in, Tc_out=Tc_out):

    while Th_out > Th_in:
        Th_out -= 1

    while Th_out < Tc_in:
        Th_out += 1

    dT1 = Th_in - Tc_out
    dT2 = Th_out - Tc_in
    a = np.log(dT1/dT2) # Bruker numpy for den naturlige logaritmen.

    dtlm = (dT1-dT2)/a

    return dtlm



def varm_ut_temp_og_areal(x_list):

    #Ukjente
    Th_out = x_list[0]
    A = x_list[1]


    #Estimerer dTlm
    dTlm = mean_log_temp(Th_out, Tc_in, Th_in, Tc_out)

    #Estimerer cph
    cph = ent.mean_Cp(Th_in, Th_out)

    #Likninger
    eq1 = Th_in - (mc*cpc)*(Tc_out-Tc_in)/(mh*cph) - Th_out # Fra energibalanser kald og varm side
    eq2 = (mc*cpc*(Tc_out - Tc_in))/(U*dTlm) - A # Q = U*A*dTlm


    balance = [eq1, eq2]

    return balance

#Alternativer for eq1:
#Th_in - (U*A*dTlm)/(mh*cph) - Th_out
#Th_in - (mc*cpc)*(Tc_out-Tc_in)/(mh*cph) - Th_out

guess = [340, 300]

ans = scipy.optimize.root(varm_ut_temp_og_areal, guess)

print(ans)

T7, Areal = ans['x']      # Gir resultatene til variablene T7 og Areal.

###########################
# Lagre til fil:

#Gname = ''' T7, Areal'''

#zipper = zip([x.strip() for x in Gname.split(',')], ans.x)
#dataList = list(zipper)

#fil.tuples_to_file('ResultsVV1.txt', dataList)

################################
# Printer Q og ser om den er ok

cph2 = ent.mean_Cp(Th_in, T7)
Q = -(mh*cph2*(T7-Th_in))
print('Q:',Q)


