eulim 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|