eulim 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +12 -12
- data/.rspec +2 -2
- data/.travis.yml +5 -5
- data/CODE_OF_CONDUCT.md +74 -74
- data/Gemfile +4 -4
- data/LICENSE +21 -21
- data/LICENSE.txt +21 -21
- data/README.md +92 -71
- data/Rakefile +6 -6
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/eulim.gemspec +44 -43
- data/lib/class.rb +6 -0
- data/lib/eulim.rb +26 -8
- data/lib/eulim/chemical.rb +6 -0
- data/lib/eulim/chemical/reactors.rb +11 -0
- data/lib/eulim/chemical/reactors/batch_reactor.rb +14 -0
- data/lib/eulim/chemical/reactors/continuous_stirred_tank_reactor.rb +16 -0
- data/lib/eulim/chemical/reactors/plug_flow_reactor.rb +12 -0
- data/lib/eulim/chemical/reactors/reactor.rb +27 -0
- data/lib/eulim/chemistry.rb +6 -6
- data/lib/eulim/chemistry/compound.rb +61 -61
- data/lib/eulim/chemistry/element.rb +53 -54
- data/lib/eulim/chemistry/elements.csv +109 -109
- data/lib/eulim/chemistry/reaction.rb +82 -73
- data/lib/eulim/chemistry/substance.rb +18 -0
- data/lib/eulim/structures.rb +6 -6
- data/lib/eulim/structures/pipe.rb +13 -13
- data/lib/eulim/structures/structure.rb +12 -12
- data/lib/eulim/version.rb +3 -3
- data/lib/string.rb +16 -0
- metadata +14 -3
@@ -1,110 +1,110 @@
|
|
1
|
-
symbol,name,atomic_number,atomic_weight
|
2
|
-
H,Hydrogen,1,1.0079
|
3
|
-
He,Helium,2,4.002602
|
4
|
-
Li,Lithium,3,6.941
|
5
|
-
Be,Beryllium,4,9.012182
|
6
|
-
B,Boron,5,10.811
|
7
|
-
C,Carbon,6,12.0107
|
8
|
-
N,Nitrogen,7,14.0067
|
9
|
-
O,Oxygen,8,15.9996
|
10
|
-
F,Fluorine,9,18.9984
|
11
|
-
Ne,Neon,10,20.1797
|
12
|
-
Na,Sodium,11,22.9897
|
13
|
-
Mg,Magnesium,12,24.305
|
14
|
-
Al,Aluminium,13,26.9815
|
15
|
-
Si,Silicon,14,28.0855
|
16
|
-
P,Phosphorus,15,30.9738
|
17
|
-
S,Sulfur,16,32.065
|
18
|
-
Cl,Chlorine,17,35.453
|
19
|
-
Ar,Argon,18,39.948
|
20
|
-
K,Potassium,19,39.0983
|
21
|
-
Ca,Calcium,20,40.078
|
22
|
-
Sc,Scandium,21,44.9559
|
23
|
-
Ti,Titanium,22,47.867
|
24
|
-
V,Vanadium,23,50.9415
|
25
|
-
Cr,Chromium,24,51.9961
|
26
|
-
Mn,Manganese,25,54.938
|
27
|
-
Fe,Iron,26,55.845
|
28
|
-
Co,Cobalt,27,58.9332
|
29
|
-
Ni,Nickel,28,58.6934
|
30
|
-
Cu,Copper,29,63.546
|
31
|
-
Zn,Zinc,30,65.39
|
32
|
-
Ga,Gallium,31,69.723
|
33
|
-
Ge,Germanium,32,72.64
|
34
|
-
As,Arsenic,33,74.9216
|
35
|
-
Se,Selenium,34,78.96
|
36
|
-
Br,Bromine,35,79.904
|
37
|
-
Kr,Krypton,36,83.3
|
38
|
-
Rb,Rubidium,37,85.4678
|
39
|
-
Sr,Strontium,38,87.62
|
40
|
-
Y,Yttrium,39,88.9059
|
41
|
-
Zr,Zirconium,40,91.224
|
42
|
-
Nb,Niobium,41,92.9064
|
43
|
-
Mo,Molybdenum,42,95.94
|
44
|
-
Tc,Technitium,43,98
|
45
|
-
Ru,Ruthenium,44,101.07
|
46
|
-
Rh,Rhodium,45,102.9055
|
47
|
-
Pd,Palladium,46,106.42
|
48
|
-
Ag,Silver,47,107.8682
|
49
|
-
Cd,Cadmiuim,48,112.411
|
50
|
-
In,Indium,49,114.818
|
51
|
-
Sn,Tin,50,118.71
|
52
|
-
Sb,Antimony,51,121.76
|
53
|
-
Te,Tellurium,52,127.6
|
54
|
-
I,Iodine,53,126.9045
|
55
|
-
Xe,Xenon,54,131.293
|
56
|
-
Cs,Cesium,55,132.9055
|
57
|
-
Ba,Barium,56,137.327
|
58
|
-
La,Lanthanum,57,138.9055
|
59
|
-
Ce,Cerium,58,140.116
|
60
|
-
Pr,Praseodymium,59,140.9077
|
61
|
-
Nd,Neodymium,60,144.24
|
62
|
-
Pm,Promethium,61,145
|
63
|
-
Sm,Samarium,62,150.36
|
64
|
-
Eu,Europium,63,151.964
|
65
|
-
Gd,Gadolium,64,157.25
|
66
|
-
Tb,Terbium,65,158.9253
|
67
|
-
Dy,Dysprosium,66,162.5
|
68
|
-
Ho,Holmium,67,164.9303
|
69
|
-
Er,Erbium,68,167.259
|
70
|
-
Tm,Thulium,69,168.9342
|
71
|
-
Yb,Ytterbium,70,173.04
|
72
|
-
Lu,Lutetium,71,174.967
|
73
|
-
Hf,Hafnium,72,178.49
|
74
|
-
Ta,Tantalum,73,180.9479
|
75
|
-
W,Tungsten,74,183.84
|
76
|
-
Re,Rhenium,75,186.207
|
77
|
-
Os,Osmium,76,190.23
|
78
|
-
Ir,Iridium,77,192.217
|
79
|
-
Pt,Platinum,78,195.078
|
80
|
-
Au,Gold,79,196.9665
|
81
|
-
Hg,Mercury,80,200.59
|
82
|
-
Tl,Thallium,81,204.3833
|
83
|
-
Pb,Lead,82,207.2
|
84
|
-
Bi,Bismuth,83,208.9804
|
85
|
-
Po,Polonium,84,209
|
86
|
-
At,Astatine,85,210
|
87
|
-
Rn,Radon,86,222
|
88
|
-
Fr,Francium,87,223
|
89
|
-
Ra,Radium,88,226
|
90
|
-
Ac,Actinium,89,227
|
91
|
-
Th,Thorium,90,232.0381
|
92
|
-
Pa,Protactinium,91,231.0359
|
93
|
-
U,Uranium,92,238.0289
|
94
|
-
Np,Neptunum,93,237
|
95
|
-
Pu,Plutonium,94,244
|
96
|
-
Am,Americium,95,243
|
97
|
-
Cm,Curium,96,247
|
98
|
-
Bk,Berkilium,97,247
|
99
|
-
Cf,Californium,98,251
|
100
|
-
Es,Einsteinium,99,252
|
101
|
-
Fm,Fermium,100,257
|
102
|
-
Md,Mendelevium,101,258
|
103
|
-
No,Nobelium,102,259
|
104
|
-
Lr,Lawrencium,103,262
|
105
|
-
Rf,Rutherfordium,104,261
|
106
|
-
Db,Dubnium,105,262
|
107
|
-
Sg,Seaborgium,106,266
|
108
|
-
Bh,Bohrium,107,264
|
109
|
-
Hs,Hassium,108,277
|
1
|
+
symbol,name,atomic_number,atomic_weight
|
2
|
+
H,Hydrogen,1,1.0079
|
3
|
+
He,Helium,2,4.002602
|
4
|
+
Li,Lithium,3,6.941
|
5
|
+
Be,Beryllium,4,9.012182
|
6
|
+
B,Boron,5,10.811
|
7
|
+
C,Carbon,6,12.0107
|
8
|
+
N,Nitrogen,7,14.0067
|
9
|
+
O,Oxygen,8,15.9996
|
10
|
+
F,Fluorine,9,18.9984
|
11
|
+
Ne,Neon,10,20.1797
|
12
|
+
Na,Sodium,11,22.9897
|
13
|
+
Mg,Magnesium,12,24.305
|
14
|
+
Al,Aluminium,13,26.9815
|
15
|
+
Si,Silicon,14,28.0855
|
16
|
+
P,Phosphorus,15,30.9738
|
17
|
+
S,Sulfur,16,32.065
|
18
|
+
Cl,Chlorine,17,35.453
|
19
|
+
Ar,Argon,18,39.948
|
20
|
+
K,Potassium,19,39.0983
|
21
|
+
Ca,Calcium,20,40.078
|
22
|
+
Sc,Scandium,21,44.9559
|
23
|
+
Ti,Titanium,22,47.867
|
24
|
+
V,Vanadium,23,50.9415
|
25
|
+
Cr,Chromium,24,51.9961
|
26
|
+
Mn,Manganese,25,54.938
|
27
|
+
Fe,Iron,26,55.845
|
28
|
+
Co,Cobalt,27,58.9332
|
29
|
+
Ni,Nickel,28,58.6934
|
30
|
+
Cu,Copper,29,63.546
|
31
|
+
Zn,Zinc,30,65.39
|
32
|
+
Ga,Gallium,31,69.723
|
33
|
+
Ge,Germanium,32,72.64
|
34
|
+
As,Arsenic,33,74.9216
|
35
|
+
Se,Selenium,34,78.96
|
36
|
+
Br,Bromine,35,79.904
|
37
|
+
Kr,Krypton,36,83.3
|
38
|
+
Rb,Rubidium,37,85.4678
|
39
|
+
Sr,Strontium,38,87.62
|
40
|
+
Y,Yttrium,39,88.9059
|
41
|
+
Zr,Zirconium,40,91.224
|
42
|
+
Nb,Niobium,41,92.9064
|
43
|
+
Mo,Molybdenum,42,95.94
|
44
|
+
Tc,Technitium,43,98
|
45
|
+
Ru,Ruthenium,44,101.07
|
46
|
+
Rh,Rhodium,45,102.9055
|
47
|
+
Pd,Palladium,46,106.42
|
48
|
+
Ag,Silver,47,107.8682
|
49
|
+
Cd,Cadmiuim,48,112.411
|
50
|
+
In,Indium,49,114.818
|
51
|
+
Sn,Tin,50,118.71
|
52
|
+
Sb,Antimony,51,121.76
|
53
|
+
Te,Tellurium,52,127.6
|
54
|
+
I,Iodine,53,126.9045
|
55
|
+
Xe,Xenon,54,131.293
|
56
|
+
Cs,Cesium,55,132.9055
|
57
|
+
Ba,Barium,56,137.327
|
58
|
+
La,Lanthanum,57,138.9055
|
59
|
+
Ce,Cerium,58,140.116
|
60
|
+
Pr,Praseodymium,59,140.9077
|
61
|
+
Nd,Neodymium,60,144.24
|
62
|
+
Pm,Promethium,61,145
|
63
|
+
Sm,Samarium,62,150.36
|
64
|
+
Eu,Europium,63,151.964
|
65
|
+
Gd,Gadolium,64,157.25
|
66
|
+
Tb,Terbium,65,158.9253
|
67
|
+
Dy,Dysprosium,66,162.5
|
68
|
+
Ho,Holmium,67,164.9303
|
69
|
+
Er,Erbium,68,167.259
|
70
|
+
Tm,Thulium,69,168.9342
|
71
|
+
Yb,Ytterbium,70,173.04
|
72
|
+
Lu,Lutetium,71,174.967
|
73
|
+
Hf,Hafnium,72,178.49
|
74
|
+
Ta,Tantalum,73,180.9479
|
75
|
+
W,Tungsten,74,183.84
|
76
|
+
Re,Rhenium,75,186.207
|
77
|
+
Os,Osmium,76,190.23
|
78
|
+
Ir,Iridium,77,192.217
|
79
|
+
Pt,Platinum,78,195.078
|
80
|
+
Au,Gold,79,196.9665
|
81
|
+
Hg,Mercury,80,200.59
|
82
|
+
Tl,Thallium,81,204.3833
|
83
|
+
Pb,Lead,82,207.2
|
84
|
+
Bi,Bismuth,83,208.9804
|
85
|
+
Po,Polonium,84,209
|
86
|
+
At,Astatine,85,210
|
87
|
+
Rn,Radon,86,222
|
88
|
+
Fr,Francium,87,223
|
89
|
+
Ra,Radium,88,226
|
90
|
+
Ac,Actinium,89,227
|
91
|
+
Th,Thorium,90,232.0381
|
92
|
+
Pa,Protactinium,91,231.0359
|
93
|
+
U,Uranium,92,238.0289
|
94
|
+
Np,Neptunum,93,237
|
95
|
+
Pu,Plutonium,94,244
|
96
|
+
Am,Americium,95,243
|
97
|
+
Cm,Curium,96,247
|
98
|
+
Bk,Berkilium,97,247
|
99
|
+
Cf,Californium,98,251
|
100
|
+
Es,Einsteinium,99,252
|
101
|
+
Fm,Fermium,100,257
|
102
|
+
Md,Mendelevium,101,258
|
103
|
+
No,Nobelium,102,259
|
104
|
+
Lr,Lawrencium,103,262
|
105
|
+
Rf,Rutherfordium,104,261
|
106
|
+
Db,Dubnium,105,262
|
107
|
+
Sg,Seaborgium,106,266
|
108
|
+
Bh,Bohrium,107,264
|
109
|
+
Hs,Hassium,108,277
|
110
110
|
Mt,Meitnerium,109,268
|
@@ -1,73 +1,82 @@
|
|
1
|
-
module Eulim
|
2
|
-
module Chemistry
|
3
|
-
# This class has functionality for reaction
|
4
|
-
# Ex: check for balanced rxn, validity of a rxn
|
5
|
-
class Reaction
|
6
|
-
attr_accessor :equation, :is_valid, :is_balanced, :species
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
@
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
r
|
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
|
-
|
1
|
+
module Eulim
|
2
|
+
module Chemistry
|
3
|
+
# This class has functionality for reaction
|
4
|
+
# Ex: check for balanced rxn, validity of a rxn
|
5
|
+
class Reaction
|
6
|
+
attr_accessor :equation, :is_valid, :is_balanced, :species
|
7
|
+
|
8
|
+
STATES = { '(s)' => 'solid', '(l)' => 'liquid', '(g)' => 'gaseous', '(aq)' => 'aqueous', "" => 'liquid' }
|
9
|
+
|
10
|
+
def initialize(arg)
|
11
|
+
@equation = arg
|
12
|
+
@species = build_species
|
13
|
+
@is_valid = valid_rxn?
|
14
|
+
@is_balanced = balanced_rxn?
|
15
|
+
end
|
16
|
+
|
17
|
+
# private
|
18
|
+
|
19
|
+
def build_species
|
20
|
+
r = {}
|
21
|
+
result = {}
|
22
|
+
r[:reactants], r[:products] = @equation.split('>>')
|
23
|
+
r.each do |type, _type_species|
|
24
|
+
result[type] = {}
|
25
|
+
r[type].split('+').each do |specie|
|
26
|
+
result[type].merge!(get_specie_info(specie.strip))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
result
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_specie_info(specie)
|
33
|
+
sc = get_stoichiometry specie
|
34
|
+
st = get_state specie
|
35
|
+
offset_sc = sc.zero? ? 0 : sc.to_s.length
|
36
|
+
offset_st = st.empty? ? 0 : st.length
|
37
|
+
specie_str = specie[offset_sc..(specie.length - offset_st -1)]
|
38
|
+
{
|
39
|
+
specie_str => {
|
40
|
+
compound: Compound.new(specie_str),
|
41
|
+
stoichiometry: sc.zero? ? 1 : sc,
|
42
|
+
state: STATES[st]
|
43
|
+
}
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
def balanced_rxn?
|
48
|
+
bal = { reactants: {}, products: {} }
|
49
|
+
@species.each do |type, type_species|
|
50
|
+
type_species.each do |_specie, s_info|
|
51
|
+
s_info[:compound].constituents.each do |sym, c_info|
|
52
|
+
bal[type][sym] ||= 0
|
53
|
+
bal[type][sym] += c_info[:atom_count] * s_info[:stoichiometry]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
bal[:products] == bal[:reactants]
|
58
|
+
end
|
59
|
+
|
60
|
+
def valid_rxn?
|
61
|
+
valid = {}
|
62
|
+
@species.each do |type, type_species|
|
63
|
+
valid[type] = []
|
64
|
+
type_species.each do |_specie, info|
|
65
|
+
info[:compound].constituents.each do |symbol, _count|
|
66
|
+
valid[type] << symbol
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
valid[:reactants].sort.uniq == valid[:products].sort.uniq
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_stoichiometry(specie)
|
74
|
+
specie.match(/^\d*/).to_a.first.to_i
|
75
|
+
end
|
76
|
+
|
77
|
+
def get_state(specie)
|
78
|
+
specie.match(/\((s|l|g|aq)\)$/).to_s
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Eulim
|
2
|
+
module Chemistry
|
3
|
+
# This class is for mixture of compounds/elements
|
4
|
+
class Substance
|
5
|
+
attr_accessor :species
|
6
|
+
def initialize(args)
|
7
|
+
@species = {}
|
8
|
+
tt_wt_p = args.inject(0) { |sum, arg| sum + arg.last }
|
9
|
+
args.each do |specie, wt_p|
|
10
|
+
@species.merge! specie => {
|
11
|
+
compound: Compound.new(specie),
|
12
|
+
weight_percent: wt_p.to_f / tt_wt_p * 100
|
13
|
+
}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/eulim/structures.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
module Eulim
|
2
|
-
# This module will contain all physical structures
|
3
|
-
# Ex: pipes, sheets, walls, bridges, etc
|
4
|
-
module Structures
|
5
|
-
end
|
6
|
-
end
|
1
|
+
module Eulim
|
2
|
+
# This module will contain all physical structures
|
3
|
+
# Ex: pipes, sheets, walls, bridges, etc
|
4
|
+
module Structures
|
5
|
+
end
|
6
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
module Eulim
|
2
|
-
module Structures
|
3
|
-
# This is the class for Pipe
|
4
|
-
# It inherits from Structure
|
5
|
-
class Pipe < Structure
|
6
|
-
def initialize(*args) end
|
7
|
-
|
8
|
-
def self.requirements
|
9
|
-
'gimme radius, length, thickness, material...'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
1
|
+
module Eulim
|
2
|
+
module Structures
|
3
|
+
# This is the class for Pipe
|
4
|
+
# It inherits from Structure
|
5
|
+
class Pipe < Structure
|
6
|
+
def initialize(*args) end
|
7
|
+
|
8
|
+
def self.requirements
|
9
|
+
'gimme radius, length, thickness, material...'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
module Eulim
|
2
|
-
module Structures
|
3
|
-
# This is the base class for all structures
|
4
|
-
class Structure
|
5
|
-
def initialize(*args) end
|
6
|
-
|
7
|
-
def self.requirements
|
8
|
-
'gimme some stuff.'
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
1
|
+
module Eulim
|
2
|
+
module Structures
|
3
|
+
# This is the base class for all structures
|
4
|
+
class Structure
|
5
|
+
def initialize(*args) end
|
6
|
+
|
7
|
+
def self.requirements
|
8
|
+
'gimme some stuff.'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|