import numpy as np
import matplotlib.pyplot as plt

#recrystallisation kinetics equation

#function for G0
def G0(T=300, M0=1e4, Q=156000, P_D=1e5):
    R = 8.314  # gas constant
    T += 273
    M = M0 * np.exp(-Q / (R * T))
    G0 = M * P_D
    print("G0",G0)
    return G0
G0()

def Johnson_Mehl_x(t, N_1=1.6 * 10**14):
    x = 1 - np.exp((-np.pi * N_1 * G0()**3 * t**4) / 3)
    print(x)
    return x

Johnson_Mehl_x(0.2)


#x = - (np.pi* N * G**3 * t[-1]**4) / 3


#Plot X vs t

def Johnson_Mehl_plot(dt=0.1, endring=0.0000001, N_1=1.6 * 10**14):

    t = [0]
    X = [0]

    while True:
        t.append(t[-1] + dt)
        x = 1 - np.exp( - (np.pi* N_1 * G**3 * t[-1]**4) / 3 )
        X.append(x)

        if (X[-1] - X[-2]) < endring:
            break

    print(X)
    return X

#grain size

def D_Johnson_Mehl(N_1=1.6 * 10**14):
    D = (G0() / N_1)**(1/4)
    return D

D_Johnson_Mehl()

