def model(params, data, verbose=False):
        z1 = data[:, 0] / 100  # compound #1 composition data
        z2 = data[:, 1] / 100  # compound #2 composition data
        T = data[:, 3]  # temperature data

        if verbose:
            print ExcessSaltSolubilityModel.modelTag, "z1", z1
            print ExcessSaltSolubilityModel.modelTag, "z2", z2
            print ExcessSaltSolubilityModel.modelTag, "T", T

        s1 = params['s1'].value  # compound #1 solubility
        s2 = params['s2'].value  # compound #2 solubility

        rkp12 = []
        rkp12.append(
            params['rkp12_1'].value
        )  # #1 redlich-kister parameter for 1-2 compound composition
        rkp12.append(
            params['rkp12_2'].value
        )  # #2 redlich-kister parameter for 1-2 compound composition
        rkp12.append(
            params['rkp12_3'].value
        )  # #3 redlich-kister parameter for 1-2 compound composition

        solyid1 = z1 * math.log(s1)
        solyid2 = z2 * math.log(s2)

        solyid = solyid1 + solyid2

        soly12 = []
        solyexcess = []

        for i in range(len(data)):
            soly12.append(z1[i] * z2[i] * RedlichKisterEquation.calculate(\
                RedlichKisterTemperatureContribution.quadratic(rkp12, T[i]), z1[i], z2[i]))

            solyexcess.append(soly12[i])

        if verbose:
            print ExcessSaltSolubilityModel.modelTag, "ideal solubility", solyid
            print ExcessSaltSolubilityModel.modelTag, "12 contribution", soly12
            print ExcessSaltSolubilityModel.modelTag, "excess solubility", solyexcess

        soly = []

        for i in range(len(data)):
            v = math.exp(math.log(solyid[i]) + solyexcess[i])
            soly.append(v)

        if verbose:
            print ExcessSaltSolubilityModel.modelTag, "soly calculated", soly

        return soly
 def test_method(self):
     order1 = RedlichKisterEquation.calculate([1, 2, 3], 0.1, 0.9, True)
     order2 = RedlichKisterEquation.calculate([1, 2, 3], 0.9, 0.1, True)
     
     assert(order1 != order2)
 def model(params, data, verbose = False):
     n = range(len(data))
     
     z1 = data[:, 0]  # compound #1 composition data
     z2 = data[:, 1]  # compound #2 composition data
     z3 = data[:, 2]  # compound #3 composition data
     T = data[:, 3]   # temperature data
     
     if verbose:
         print TernaryRKModel.modelTag, "z1", z1
         print TernaryRKModel.modelTag, "z2", z2
         print TernaryRKModel.modelTag, "z3", z3
     
     c1 = params['c1'].value # compound #1 density
     c2 = params['c2'].value # compound #2 density
     c3 = params['c3'].value # compound #3 density
     
     rkp12 = []
     rkp12.append(params['rkp12_1'].value) # #1 redlich-kister parameter for 1-2 compound composition
     rkp12.append(params['rkp12_2'].value) # #2 redlich-kister parameter for 1-2 compound composition
     rkp12.append(params['rkp12_3'].value) # #3 redlich-kister parameter for 1-2 compound composition
     
     rkp13 = []
     rkp13.append(params['rkp13_1'].value) # #1 redlich-kister parameter for 1-3 compound composition
     rkp13.append(params['rkp13_2'].value) # #2 redlich-kister parameter for 1-3 compound composition
     rkp13.append(params['rkp13_3'].value) # #3 redlich-kister parameter for 1-3 compound composition
     
     rkp23 = []
     rkp23.append(params['rkp23_1'].value) # #1 redlich-kister parameter for 2-3 compound composition
     rkp23.append(params['rkp23_2'].value) # #2 redlich-kister parameter for 2-3 compound composition
     rkp23.append(params['rkp23_3'].value) # #3 redlich-kister parameter for 2-3 compound composition
     
     rkp123 = []
     rkp123.append(params['rkp123_1'].value) # #1 redlich-kister parameter for 1-2-3 compound composition
     rkp123.append(params['rkp123_2'].value) # #2 redlich-kister parameter for 1-2-3 compound composition
     rkp123.append(params['rkp123_3'].value) # #3 redlich-kister parameter for 1-2-3 compound composition
     
     # ideal
     # ternary expression to avoid division by zero
     id1 = z1 * c1
     id2 = z2 * c2
     id3 = z3 * c3
     
     ideal = id1 + id2 + id3
     
     # compounds contributions
     contrib12 = []
     contrib13 = []
     contrib23 = []
     contrib123 = []
     excess = []
     
     for i in n:
         
         # binaries
         contrib12.append(z1[i] * z2[i] * RedlichKisterEquation.calculate(rkp12, z1[i], z2[i]))
         
         contrib13.append(z1[i] * z3[i] * RedlichKisterEquation.calculate(rkp13, z1[i], z3[i]))
         
         contrib23.append(z2[i] * z3[i] * RedlichKisterEquation.calculate(rkp23, z2[i], z3[i]))
         
         # ternary
         contrib123.append(z1[i] * z2[i] * z3[i] * (rkp123[0] + (rkp123[1] * z1[i]) + (rkp123[2] * z2[i])))
         
         # excess
         excess.append(contrib12[i] + contrib13[i] + contrib23[i] + contrib123[i])
     
     calc = []
     
     for i in n:
         calc.append(ideal[i] + excess[i])
     
     if verbose:
         print TernaryRKModel.modelTag, "ideal", ideal
         print TernaryRKModel.modelTag, "12 contribution", contrib12
         print TernaryRKModel.modelTag, "13 contribution", contrib13
         print TernaryRKModel.modelTag, "23 contribution", contrib23
         print TernaryRKModel.modelTag, "123 contribution", contrib123
         print TernaryRKModel.modelTag, "excess", excess
         print TernaryRKModel.modelTag, "calculated", calc
     
     return calc
Exemple #4
0
    def test_method(self):
        order1 = RedlichKisterEquation.calculate([1, 2, 3], 0.1, 0.9, True)
        order2 = RedlichKisterEquation.calculate([1, 2, 3], 0.9, 0.1, True)

        assert (order1 != order2)
    def model(params, data, verbose=False):
        n = range(len(data))

        z1 = data[:, 0]  # compound #1 composition data
        z2 = data[:, 1]  # compound #2 composition data
        z3 = data[:, 2]  # compound #3 composition data
        T = data[:, 3]  # temperature data

        if verbose:
            print TernaryRKModel.modelTag, "z1", z1
            print TernaryRKModel.modelTag, "z2", z2
            print TernaryRKModel.modelTag, "z3", z3

        c1 = params['c1'].value  # compound #1 density
        c2 = params['c2'].value  # compound #2 density
        c3 = params['c3'].value  # compound #3 density

        rkp12 = []
        rkp12.append(
            params['rkp12_1'].value
        )  # #1 redlich-kister parameter for 1-2 compound composition
        rkp12.append(
            params['rkp12_2'].value
        )  # #2 redlich-kister parameter for 1-2 compound composition
        rkp12.append(
            params['rkp12_3'].value
        )  # #3 redlich-kister parameter for 1-2 compound composition

        rkp13 = []
        rkp13.append(
            params['rkp13_1'].value
        )  # #1 redlich-kister parameter for 1-3 compound composition
        rkp13.append(
            params['rkp13_2'].value
        )  # #2 redlich-kister parameter for 1-3 compound composition
        rkp13.append(
            params['rkp13_3'].value
        )  # #3 redlich-kister parameter for 1-3 compound composition

        rkp23 = []
        rkp23.append(
            params['rkp23_1'].value
        )  # #1 redlich-kister parameter for 2-3 compound composition
        rkp23.append(
            params['rkp23_2'].value
        )  # #2 redlich-kister parameter for 2-3 compound composition
        rkp23.append(
            params['rkp23_3'].value
        )  # #3 redlich-kister parameter for 2-3 compound composition

        rkp123 = []
        rkp123.append(
            params['rkp123_1'].value
        )  # #1 redlich-kister parameter for 1-2-3 compound composition
        rkp123.append(
            params['rkp123_2'].value
        )  # #2 redlich-kister parameter for 1-2-3 compound composition
        rkp123.append(
            params['rkp123_3'].value
        )  # #3 redlich-kister parameter for 1-2-3 compound composition

        # ideal
        id1 = z1 * c1
        id2 = z2 * c2
        id3 = z3 * c3

        ideal = id1 + id2 + id3

        # compounds contributions
        contrib12 = []
        contrib13 = []
        contrib23 = []
        contrib123 = []
        excess = []

        for i in n:

            # binaries
            contrib12.append(
                z1[i] * z2[i] *
                RedlichKisterEquation.calculate(rkp12, z1[i], z2[i]))

            contrib13.append(
                z1[i] * z3[i] *
                RedlichKisterEquation.calculate(rkp13, z1[i], z3[i]))

            contrib23.append(
                z2[i] * z3[i] *
                RedlichKisterEquation.calculate(rkp23, z2[i], z3[i]))

            # ternary
            contrib123.append(z1[i] * z2[i] * z3[i] *
                              (rkp123[0] + (rkp123[1] * z1[i]) +
                               (rkp123[2] * z2[i])))

            # excess
            excess.append(contrib12[i] + contrib13[i] + contrib23[i] +
                          contrib123[i])

        calc = []

        for i in n:
            calc.append(ideal[i] + excess[i])

        if verbose:
            print TernaryRKModel.modelTag, "ideal", ideal
            print TernaryRKModel.modelTag, "12 contribution", contrib12
            print TernaryRKModel.modelTag, "13 contribution", contrib13
            print TernaryRKModel.modelTag, "23 contribution", contrib23
            print TernaryRKModel.modelTag, "123 contribution", contrib123
            print TernaryRKModel.modelTag, "excess", excess
            print TernaryRKModel.modelTag, "calculated", calc

        return calc