aboutsummaryrefslogtreecommitdiff
path: root/headers/baseElement.h
blob: fd77194b41e2d5094a1b4a3ca77afd008bae2b8c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#ifndef BASEELEMENT_H_INCLUDED
#define BASEELEMENT_H_INCLUDED


#include <iostream>
#include <math.h>
using namespace std;

class baseElement
{
private:
    string elementName;
    double latentHeatOfFusion;
    double latentHeatOfVaporization;
    double specificHeatSolid;
    double specificHeatLiquid;
    double specificHeatGas;
    double meltingPoint;
    double boilingPoint;

protected:
    void setElementName(string value) { elementName = value; }
    void setLatentHeatOfFusion(double value) { latentHeatOfFusion = value; }
    void setLatentHeatOfVaporization(double value) { latentHeatOfVaporization = value; }
    void setSpecificHeatSolid(double value) { specificHeatSolid = value; }
    void setSpecificHeatLiquid(double value) { specificHeatLiquid = value; }
    void setSpecificHeatGas(double value) { specificHeatGas = value; }
    void setMeltingPoint(double value) { meltingPoint = value; }
    void setBoilingPoint(double value) { boilingPoint = value; }

public:
    string getElementName() { return elementName; }
    double getLatentHeatOfFusion() { return latentHeatOfFusion; }
    double getLatentHeatOfVaporization() { return latentHeatOfVaporization; }
    double getSpecificHeatSolid() { return specificHeatSolid; }
    double getSpecificHeatLiquid() { return specificHeatLiquid; }
    double getSpecificHeatGas() { return specificHeatGas; }
    double getMeltingPoint() { return meltingPoint; }
    double getBoilingPoint() { return boilingPoint; }

    double totalHeatNeeded(double mass, double fromTemp, double toTemp)
    {
        double totalHeat = 0;
        if (fromTemp <= meltingPoint && toTemp <= meltingPoint)
        {
            totalHeat = mass * specificHeatSolid * (toTemp - fromTemp);
        }
        else if (fromTemp <= meltingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint)
        {
            totalHeat = mass * specificHeatSolid * (meltingPoint - fromTemp);
            totalHeat += mass * latentHeatOfFusion / meltingPoint;
            totalHeat += mass * specificHeatLiquid * (toTemp - meltingPoint);
        }
        else if (fromTemp <= meltingPoint && toTemp >= boilingPoint)
        {
            totalHeat = mass * specificHeatSolid * (meltingPoint - fromTemp);
            totalHeat += mass * latentHeatOfFusion;
            totalHeat += mass * specificHeatLiquid * (boilingPoint - meltingPoint);
            totalHeat += mass * latentHeatOfVaporization;
            totalHeat += mass * specificHeatGas * (toTemp - boilingPoint);
        }
        else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint)
        {
            totalHeat = mass * specificHeatLiquid * (toTemp - fromTemp);
        }
        else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= boilingPoint)
        {
            totalHeat = mass * specificHeatLiquid * (boilingPoint - fromTemp);
            totalHeat += mass * latentHeatOfVaporization;
            totalHeat += mass * specificHeatGas * (toTemp - boilingPoint);
        }
        else if (fromTemp >= boilingPoint && toTemp >= boilingPoint)
        {
            totalHeat = mass * specificHeatGas * (toTemp - fromTemp);
        }
        return totalHeat;
    }

    double totalEntropyChange(double mass, double fromTemp, double toTemp)
    {
        double totalEntropy = 0;
        if (fromTemp <= meltingPoint && toTemp <= meltingPoint)
        {
            totalEntropy = mass * specificHeatSolid * log(toTemp / fromTemp);
        }
        else if (fromTemp <= meltingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint)
        {
            totalEntropy = mass * specificHeatSolid * log(meltingPoint / fromTemp);
            totalEntropy += mass * latentHeatOfFusion / meltingPoint;
            totalEntropy += mass * specificHeatLiquid * log(toTemp / meltingPoint);
        }
        else if (fromTemp <= meltingPoint && toTemp >= boilingPoint)
        {
            totalEntropy = mass * specificHeatSolid * log(meltingPoint / fromTemp);
            totalEntropy += mass * latentHeatOfFusion;
            totalEntropy += mass * specificHeatLiquid * log(boilingPoint / meltingPoint);
            totalEntropy += mass * latentHeatOfVaporization;
            totalEntropy += mass * specificHeatGas * log(toTemp / boilingPoint);
        }
        else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint)
        {
            totalEntropy = mass * specificHeatLiquid * log(toTemp / fromTemp);
        }
        else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= boilingPoint)
        {
            totalEntropy = mass * specificHeatLiquid * log(boilingPoint / fromTemp);
            totalEntropy += mass * latentHeatOfVaporization;
            totalEntropy += mass * specificHeatGas * log(toTemp / boilingPoint);
        }
        else if (fromTemp >= boilingPoint && toTemp >= boilingPoint)
        {
            totalEntropy = mass * specificHeatGas * log(toTemp / fromTemp);
        }
        return totalEntropy;
    }
};

#endif // BASEELEMENT_H_INCLUDED