pulo 0.1.1 → 0.1.2

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.
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