pulo 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pulo.rb +28 -0
  3. data/lib/pulo/exceptions.rb +6 -0
  4. data/lib/pulo/figure/figure2d.rb +248 -0
  5. data/lib/pulo/figure/figure3d.rb +166 -0
  6. data/lib/pulo/formatting.rb +140 -0
  7. data/lib/pulo/frames/frame.rb +289 -0
  8. data/lib/pulo/frames/frame_cell.rb +83 -0
  9. data/lib/pulo/frames/frame_column.rb +149 -0
  10. data/lib/pulo/frames/frame_row.rb +87 -0
  11. data/lib/pulo/helpers.rb +1 -0
  12. data/lib/pulo/machine/hydraulics/pipe.rb +71 -0
  13. data/lib/pulo/machine/machines.rb +10 -0
  14. data/lib/pulo/machine/mechanics/moments_of_inertia.rb +64 -0
  15. data/lib/pulo/machine/steam/boiler.rb +61 -0
  16. data/lib/pulo/machine/steam/boiler_deaerator.rb +64 -0
  17. data/lib/pulo/machine/steam/deaerator.rb +37 -0
  18. data/lib/pulo/machine/steam/desuperheater.rb +29 -0
  19. data/lib/pulo/machine/steam/header.rb +20 -0
  20. data/lib/pulo/machine/steam/if97.rb +378 -0
  21. data/lib/pulo/machine/steam/steam_process.rb +27 -0
  22. data/lib/pulo/machine/steam/steam_turbine.rb +42 -0
  23. data/lib/pulo/machine/steam/water_steam.rb +229 -0
  24. data/lib/pulo/material/water.rb +34 -0
  25. data/lib/pulo/quantity/dimension.rb +63 -0
  26. data/lib/pulo/quantity/numeric_overloads.rb +217 -0
  27. data/lib/pulo/quantity/quantity.rb +285 -0
  28. data/lib/pulo/quantity/quantity_builder.rb +185 -0
  29. data/lib/pulo/quantity/quantity_definitions.rb +8 -0
  30. data/lib/pulo/quantity/quantity_definitions/area_volume.rb +73 -0
  31. data/lib/pulo/quantity/quantity_definitions/basic.rb +157 -0
  32. data/lib/pulo/quantity/quantity_definitions/electric.rb +22 -0
  33. data/lib/pulo/quantity/quantity_definitions/energy.rb +50 -0
  34. data/lib/pulo/quantity/quantity_definitions/fluids.rb +23 -0
  35. data/lib/pulo/quantity/quantity_definitions/force_power.rb +82 -0
  36. data/lib/pulo/quantity/quantity_definitions/rotation.rb +49 -0
  37. data/lib/pulo/quantity/quantity_definitions/value.rb +65 -0
  38. data/lib/pulo/quantity/quantity_definitions/velocity_acc_flow.rb +66 -0
  39. data/lib/pulo/quantity/quantity_groups/quantity_groups.rb +36 -0
  40. data/lib/pulo/quantity/unit.rb +45 -0
  41. data/lib/pulo/quantity_checker.rb +13 -0
  42. data/lib/pulo/tables/density.rb +10 -0
  43. data/lib/pulo/tables/melting_temperature.rb +9 -0
  44. data/lib/pulo/tables/specific_energy.rb +10 -0
  45. data/lib/pulo/tables/speed_of_sound.rb +9 -0
  46. data/lib/pulo/tables/tables.rb +104 -0
  47. data/lib/pulo/tables/tensile_strength.rb +10 -0
  48. data/lib/pulo/tables/yield_strength.rb +10 -0
  49. data/lib/pulo/version.rb +3 -0
  50. metadata +51 -3
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ module Pulo
4
+
5
+ QuantityBuilder.build(:Value) do
6
+ dimensions V:1
7
+ si_unit :dollar,:s, '$',1
8
+ si_unit :cent,:s, 'c',10.0**-2
9
+
10
+ synonyms :Cost, :Price
11
+ end
12
+ QuantityBuilder.build(:MassValue) do
13
+ dimensions V:1,M:-1
14
+ si_unit :dollar_per_gram,:sf, '$.g⁻¹',10.0**3
15
+ si_unit :dollar_per_kilogram,:sf, '$.kg⁻¹',1
16
+ si_unit :dollar_per_tonne,:sf, '$.t⁻¹',10.0**-3
17
+
18
+ non_si_unit :dollar_per_pound,:sf,'$.lb⁻¹',:dollar_per_kilogram,2.20462
19
+ end
20
+ QuantityBuilder.build(:VolumeValue) do
21
+ dimensions V:1,L:-3
22
+ si_unit :dollar_per_cubic_meter,:sf, '$.m⁻³',1
23
+ non_si_unit :dollar_per_litre,:sf,'$.lt⁻¹',:dollar_per_cubic_meter,10**-3
24
+ end
25
+ QuantityBuilder.build(:AreaValue) do
26
+ dimensions V:1,L:-2
27
+ si_unit :dollar_per_square_meter,:sf, '$.m⁻²',1
28
+ non_si_unit :dollar_per_hectare,:sf,'$.ha⁻¹',:dollar_per_square_meter,10**4
29
+ end
30
+
31
+ QuantityBuilder.build(:ValueFlow) do
32
+ dimensions V:1,T:-1
33
+ si_unit :dollar_per_second,:sf, '$.s⁻¹',1
34
+ si_unit :dollar_per_day,:sf, '$.dy⁻¹',1.0/(60*60*24)
35
+ si_unit :dollar_per_month,:sf, '$.mnth⁻¹',1.0/(60*60*24*365/12)
36
+ si_unit :dollar_per_year,:sf, '$.yr⁻¹',1.0/(60*60*24*365)
37
+ end
38
+ QuantityBuilder.build(:LengthValue) do
39
+ dimensions V:1,L:-1
40
+ si_unit :dollar_per_millimeter,:sf, '$.mm⁻¹',10.0**3
41
+ si_unit :dollar_per_meter,:sf, '$.m⁻¹',1
42
+ si_unit :dollar_per_kilometer,:sf, '$.km⁻¹',10.0**-3
43
+
44
+ synonyms :TransportCost
45
+ end
46
+ QuantityBuilder.build(:SpecificLengthValue) do
47
+ dimensions V:1,L:-1,M:-1
48
+ si_unit :dollar_per_kilogram_meter,:sf, '$.m⁻¹.kg⁻¹',1
49
+ si_unit :dollar_per_kilogram_kilometer,:sf, '$.km⁻¹.kg⁻¹',10.0**-3
50
+
51
+ non_si_unit :dollar_per_tonne_kilometer,:sf,'$.t⁻¹.km⁻¹',:dollar_per_kilogram_kilometer,10**3
52
+ synonyms :SpecificTransportCost
53
+ end
54
+ QuantityBuilder.build(:EnergyValue) do
55
+ dimensions V:1,M:-1,L:-2,T:2
56
+ si_unit :dollar_per_joule,:sf, '$.J⁻¹',1
57
+ si_unit :dollar_per_megajoule,:sf, '$.MJ⁻¹',10**-6
58
+
59
+ non_si_unit :dollar_per_kilowatt_hour,:sf, '$.kWh⁻¹',:dollar_per_megajoule,1.0/0.277777778
60
+ non_si_unit :dollar_per_million_btu,:sf, '$.kWh⁻¹',:dollar_per_megajoule,1055.05585
61
+
62
+ synonyms :EnergyCost
63
+ end
64
+
65
+ end
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+
3
+ module Pulo
4
+ QuantityBuilder.build(:Velocity) do
5
+ dimensions L:1,T:-1
6
+ si_unit :kilometer_per_second,:sf, 'km.s⁻¹',10**3
7
+ si_unit :meter_per_second,:sf, 'm.s⁻¹',1.0
8
+ si_unit :kilometer_per_hour,:sf, 'km.hr⁻¹',1000.0/3600.0
9
+ si_unit :meter_per_hour,:sf, 'm.hr⁻¹',1.0/3600.0
10
+
11
+ non_si_unit :mile_per_hour,:sf, 'ml.hr⁻¹',:kilometer_per_hour,0.621371
12
+ non_si_unit :millimeter_per_hour,:sf, 'mm.hr⁻¹',:kilometer_per_hour,10**6
13
+
14
+
15
+ constant :speed_of_light, 'c',:meter_per_second,299792458
16
+ constant :speed_of_sound, 'c',:meter_per_second,343.2
17
+
18
+ synonyms :Speed
19
+ end
20
+
21
+ QuantityBuilder.build(:Acceleration) do
22
+ dimensions L:1,T:-2
23
+
24
+ si_unit :meter_per_second_squared,:sf, 'm.s⁻²',1
25
+ non_si_unit :foot_per_second_squared,:feet_per_second_squared, 'ft.s⁻²',:meter_per_second_squared,3.2808399
26
+
27
+ constant :standard_gravity, 'g',:meter_per_second_squared,9.80665
28
+ end
29
+
30
+ QuantityBuilder.build(:MassFlow) do
31
+ dimensions M:1,T:-1
32
+ si_unit :kilogram_per_second,:sf, 'kg.s⁻¹',1
33
+ si_unit :gram_per_second,:sf, 'g.s⁻¹',10**-3
34
+
35
+ non_si_unit :tonne_per_year,:sf, 't.yr⁻¹',:kilogram_per_second,60.0*60*24*365/1000
36
+ non_si_unit :tonne_per_month,:sf, 't.mnth⁻¹',:kilogram_per_second,60.0*60*24*365/12/1000
37
+ non_si_unit :tonne_per_day,:sf, 't.dy⁻¹',:kilogram_per_second,60.0*60*24/1000
38
+ non_si_unit :tonne_per_hour,:sf, 't.hr⁻¹',:kilogram_per_second,60.0*60/1000
39
+ non_si_unit :pound_per_second,:sf, 'lb.s⁻¹',:kilogram_per_second,2.20462262
40
+ non_si_unit :slug_per_second,:sf, 'slug.s⁻¹',:kilogram_per_second,0.0685217659
41
+ non_si_unit :pound_per_hour,:sf, 'lb.hr⁻¹',:kilogram_per_second,2.20462262*60*60
42
+
43
+
44
+ synonyms :MassFlux
45
+ end
46
+
47
+ QuantityBuilder.build(:VolumeFlow) do
48
+ dimensions L:3,T:-1
49
+ si_unit :cubic_meter_per_year,:cubic_meters_per_year, 'm³.yr⁻¹',1.0/(3600*24*365)
50
+ si_unit :cubic_meter_per_day,:cubic_meters_per_day, 'm³.day⁻¹',1.0/(3600*24)
51
+ si_unit :cubic_meter_per_hour,:cubic_meters_per_hour, 'm³.hr⁻¹',1.0/3600
52
+ si_unit :cubic_meter_per_second,:cubic_meters_per_second, 'cumec',1
53
+ si_unit :cubic_centimeter_per_second,:cubic_centimeters_per_second, 'cm³.s⁻¹',10**-6
54
+
55
+ non_si_unit :litre_per_second,:sf, 'lt.s⁻¹',:cubic_meter_per_second,10**3
56
+ non_si_unit :litre_per_hour,:sf, 'lt.hr⁻¹',:cubic_meter_per_hour,10**3
57
+ non_si_unit :megalitre_per_hour,:sf, 'Mlt.hr⁻¹',:cubic_meter_per_hour,10**-3
58
+ non_si_unit :cubic_foot_per_second,:cubic_feet_per_second, 'cusec',:cubic_meter_per_second,35.3146667
59
+ non_si_unit :gallon_per_second,:sf, 'gal.s⁻¹',:cubic_meter_per_second,264.172052
60
+
61
+ non_si_unit :hectolitre_per_year,:sf,'hl.yr⁻¹',:cubic_meter_per_year,10
62
+
63
+ synonyms :Discharge, :Flow
64
+ end
65
+
66
+ end
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ module Pulo
4
+
5
+ module QuantityGroups
6
+ US_THERMO={
7
+ Energy: :millions_btu,
8
+ SpecificEnthalpy: :btu_per_pound,
9
+ SpecificEntropy: :btu_per_pound_rankine,
10
+ Pressure: :psig,
11
+ Temperature: :fahrenheit,
12
+ SpecificVolume: :cubic_feet_per_pound,
13
+ Volume: :cubic_feet,
14
+ Mass: :pounds,
15
+ MassFlow: :pounds_per_hour
16
+ }
17
+ METRIC_THERMO={
18
+ Energy: :megawatts,
19
+ SpecificEnthalpy: :kilojoules_per_kilogram,
20
+ SpecificEntropy: :kilojoules_per_kilogram_kelvin,
21
+ Pressure: :kilopascals,
22
+ Temperature: :kelvin,
23
+ SpecificVolume: :cubic_meters_per_kilogram,
24
+ Volume: :cubic_meters,
25
+ Mass: :kilograms,
26
+ MassFlow: :kilograms_per_hour
27
+ }
28
+ IRRIGATION={
29
+ Area: :hectares,
30
+ Mass: :tonnes,
31
+ Volume: :cubic_meters
32
+ }
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ module Pulo
4
+ class Unit
5
+ attr_reader :name, :plural, :abbreviation
6
+ def initialize(name, plural, abbreviation)
7
+ case plural
8
+ when :s
9
+ plural=name.to_s + 's'
10
+ when :sf
11
+ plural=name.to_s.sub(/(?<=.)_{1}/, 's_')
12
+ else
13
+ plural=plural.to_s
14
+ end
15
+ @name, @plural, @abbreviation=name, plural, abbreviation
16
+ end
17
+ def to_s
18
+ ret=abbreviation.ljust(12,' ') + name.to_s.ljust(30) + plural.ljust(30)
19
+ if self.is_si?
20
+ ret+='*10^' + self.scale.round(2).to_s.ljust(7,' ')
21
+ else
22
+ ret+=self.si_convert_factor.round(4).to_s + ' per ' + self.si_convert_unit.to_s
23
+ end
24
+ ret
25
+ end
26
+ end
27
+
28
+ class SI_Unit < Unit
29
+ attr_reader :scale
30
+ def initialize(name, plural, abbreviation, scale)
31
+ super name, plural, abbreviation
32
+ @scale=scale
33
+ end
34
+ def is_si?; true; end
35
+ end
36
+
37
+ class NonSI_Unit < Unit
38
+ attr_reader :si_convert_unit, :si_convert_factor
39
+ def initialize(name, plural, abbreviation, si_convert_unit, si_convert_factor)
40
+ super name, plural, abbreviation
41
+ @si_convert_unit, @si_convert_factor=si_convert_unit, si_convert_factor
42
+ end
43
+ def is_si?; false; end
44
+ end
45
+ end
@@ -0,0 +1,13 @@
1
+ module Pulo
2
+
3
+ module Quantity_Checker
4
+ def quantity_check(*args)
5
+ args.each do |arg|
6
+ unless arg[0].class==arg[1] or arg[0].nil?
7
+ raise ("Wrong argument type expecting a #{arg[1].name}")
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ end
@@ -0,0 +1,10 @@
1
+
2
+ module Pulo
3
+ module Densities
4
+ include Tables
5
+
6
+ @quantity=Density
7
+ @unit=:kilogram_per_cubic_meter
8
+
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+
2
+ module Pulo
3
+ module MeltingTemperatures
4
+ include Tables
5
+
6
+ @quantity=Temperature
7
+ @unit=:kelvin
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+
2
+ module Pulo
3
+ module SpecificEnergies
4
+ include Tables
5
+
6
+ @quantity=SpecificEnergy
7
+ @unit=:megajoule_per_kilogram
8
+
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ module Pulo
2
+ module SpeedOfSound
3
+ include Tables
4
+
5
+ @quantity=Velocity
6
+ @unit=:meter_per_second
7
+
8
+ end
9
+ end
@@ -0,0 +1,104 @@
1
+ module Pulo
2
+ module Tables
3
+ @tables=[]
4
+ def self.included base
5
+ base.send :include, InstanceMethods
6
+ base.extend ClassMethods
7
+
8
+ @tables << base.name.split('::')[1]
9
+ base.send :load_yaml
10
+
11
+ end
12
+ def self.list
13
+ @tables
14
+ end
15
+ module InstanceMethods
16
+ end
17
+ module ClassMethods
18
+ def method_missing(method_sym, *arguments, &block)
19
+ if @values[method_sym]
20
+ @quantity.new(@values[method_sym],@unit)
21
+ else
22
+ if @values.respond_to?(method_sym)
23
+ @values.send(method_sym,*arguments,&block)
24
+ else
25
+ raise "Can't find item '#{method_sym}' in table #{self.name.split('::')[1]}."
26
+ end
27
+ end
28
+ end
29
+
30
+ def find value
31
+ search_value=value.downcase
32
+ Hash[(@values.select { |key, value| key.to_s.downcase.include? search_value }).map do |elm|
33
+ [elm[0],@quantity.new(elm[1],@unit)]
34
+ end]
35
+ end
36
+
37
+ #the unit specified for the table
38
+ def unit
39
+ @unit
40
+ end
41
+
42
+ #the quantity specified for the table
43
+ def quantity
44
+ @quantity
45
+ end
46
+
47
+ def to_a
48
+ @values.to_a.map do |elm|
49
+ [elm[0],@quantity.new(elm[1],@unit)]
50
+ end
51
+ end
52
+ def to_h
53
+ to_a.to_h
54
+ end
55
+ def sort
56
+ (@values.sort_by {|k,v| v}).map do |elm|
57
+ [elm[0],@quantity.new(elm[1],@unit)]
58
+ end
59
+ end
60
+ def sort_reverse
61
+ (@values.sort_by {|k,v| -v}).map do |elm|
62
+ [elm[0],@quantity.new(elm[1],@unit)]
63
+ end
64
+ end
65
+
66
+ def to_frame
67
+ frm=Frame.new
68
+ frm.append_column('Item')
69
+ frm.append_column(@quantity.quantity_name)
70
+ @values.to_a.each do |ar|
71
+ frm.append_row([ar[0],self.send(ar[0],ar[1])])
72
+ end
73
+ frm
74
+ end
75
+ def to_yaml
76
+ @values.to_yaml
77
+ end
78
+ def save_yaml
79
+ File.write(File.join(__dir__,'table_data', self.name.split('::')[1] + '.yaml'),self.to_yaml)
80
+ end
81
+ def load_yaml
82
+ @values=YAML.load_file(File.join(__dir__,'table_data', self.name.split('::')[1] + '.yaml'))
83
+ end
84
+ def add_item(key,value)
85
+ key=key.to_s.gsub(/\s+/,"_").to_sym unless key.is_a?(Symbol)
86
+ @values.merge!({key=>value})
87
+ self.save_yaml
88
+ end
89
+ def remove_item(key)
90
+ key=key.to_s.gsub(/\s+/,"_").to_sym unless key.is_a?(Symbol)
91
+ @values.delete(key)
92
+ self.save_yaml
93
+ end
94
+ end
95
+
96
+ end
97
+ end
98
+
99
+ require_relative 'density'
100
+ require_relative 'melting_temperature'
101
+ require_relative 'specific_energy'
102
+ require_relative 'yield_strength'
103
+ require_relative 'tensile_strength'
104
+ require_relative 'speed_of_sound'
@@ -0,0 +1,10 @@
1
+
2
+ module Pulo
3
+ module TensileStrengths
4
+ include Tables
5
+
6
+ @quantity=TensileStrength
7
+ @unit=:megapascal
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+
2
+ module Pulo
3
+ module YieldStrengths
4
+ include Tables
5
+
6
+ @quantity=YieldStrength
7
+ @unit=:megapascal
8
+
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Pulo
2
+ VERSION = '0.1.2'
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pulo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Fleming
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-21 00:00:00.000000000 Z
11
+ date: 2017-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,7 +73,55 @@ email:
73
73
  executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
- files: []
76
+ files:
77
+ - lib/pulo.rb
78
+ - lib/pulo/exceptions.rb
79
+ - lib/pulo/figure/figure2d.rb
80
+ - lib/pulo/figure/figure3d.rb
81
+ - lib/pulo/formatting.rb
82
+ - lib/pulo/frames/frame.rb
83
+ - lib/pulo/frames/frame_cell.rb
84
+ - lib/pulo/frames/frame_column.rb
85
+ - lib/pulo/frames/frame_row.rb
86
+ - lib/pulo/helpers.rb
87
+ - lib/pulo/machine/hydraulics/pipe.rb
88
+ - lib/pulo/machine/machines.rb
89
+ - lib/pulo/machine/mechanics/moments_of_inertia.rb
90
+ - lib/pulo/machine/steam/boiler.rb
91
+ - lib/pulo/machine/steam/boiler_deaerator.rb
92
+ - lib/pulo/machine/steam/deaerator.rb
93
+ - lib/pulo/machine/steam/desuperheater.rb
94
+ - lib/pulo/machine/steam/header.rb
95
+ - lib/pulo/machine/steam/if97.rb
96
+ - lib/pulo/machine/steam/steam_process.rb
97
+ - lib/pulo/machine/steam/steam_turbine.rb
98
+ - lib/pulo/machine/steam/water_steam.rb
99
+ - lib/pulo/material/water.rb
100
+ - lib/pulo/quantity/dimension.rb
101
+ - lib/pulo/quantity/numeric_overloads.rb
102
+ - lib/pulo/quantity/quantity.rb
103
+ - lib/pulo/quantity/quantity_builder.rb
104
+ - lib/pulo/quantity/quantity_definitions.rb
105
+ - lib/pulo/quantity/quantity_definitions/area_volume.rb
106
+ - lib/pulo/quantity/quantity_definitions/basic.rb
107
+ - lib/pulo/quantity/quantity_definitions/electric.rb
108
+ - lib/pulo/quantity/quantity_definitions/energy.rb
109
+ - lib/pulo/quantity/quantity_definitions/fluids.rb
110
+ - lib/pulo/quantity/quantity_definitions/force_power.rb
111
+ - lib/pulo/quantity/quantity_definitions/rotation.rb
112
+ - lib/pulo/quantity/quantity_definitions/value.rb
113
+ - lib/pulo/quantity/quantity_definitions/velocity_acc_flow.rb
114
+ - lib/pulo/quantity/quantity_groups/quantity_groups.rb
115
+ - lib/pulo/quantity/unit.rb
116
+ - lib/pulo/quantity_checker.rb
117
+ - lib/pulo/tables/density.rb
118
+ - lib/pulo/tables/melting_temperature.rb
119
+ - lib/pulo/tables/specific_energy.rb
120
+ - lib/pulo/tables/speed_of_sound.rb
121
+ - lib/pulo/tables/tables.rb
122
+ - lib/pulo/tables/tensile_strength.rb
123
+ - lib/pulo/tables/yield_strength.rb
124
+ - lib/pulo/version.rb
77
125
  homepage: https://github.com/AndyFlem/pulo
78
126
  licenses:
79
127
  - MIT