structuraid_core 0.1.2 → 0.1.3
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/.rubocop.yml +6 -0
- data/lib/structuraid_core/design_codes/aci_318_19/rc/footings/min_height.rb +27 -0
- data/lib/structuraid_core/design_codes/nsr_10/rc/footings/min_height.rb +38 -0
- data/lib/structuraid_core/design_codes/schemas/rc/footings/min_height_schema.rb +16 -0
- data/lib/structuraid_core/elements/reinforcement/straight_longitudinal_layer.rb +17 -9
- data/lib/structuraid_core/engineering/analysis/footing/centric_isolated.rb +4 -1
- data/lib/structuraid_core/engineering/base.rb +0 -1
- data/lib/structuraid_core/engineering/locations/absolute.rb +11 -3
- data/lib/structuraid_core/engineering/locations/base.rb +1 -0
- data/lib/structuraid_core/engineering/locations/coordinates_system.rb +60 -0
- data/lib/structuraid_core/engineering/locations/relative.rb +31 -1
- data/lib/structuraid_core/errors/design_codes/requirement_not_fulfilled_error.rb +15 -0
- data/lib/structuraid_core/version.rb +1 -1
- metadata +20 -2
- data/lib/structuraid_core/engineering/vector.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6a3c25bdfad6f0af2c266ad01cf0321e74780e4366a9a0b941e37c108f6d152
|
4
|
+
data.tar.gz: 60afe6f91b70f5acd7ac3d12b1e0c33282afed9620f2c55ee2c29ada6fe3295f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc6983c21cb7278bb90e9b2b3d4a68e6c873e1fd7de57205724344385200e4674c05fceb61c02342a4329c5ce1515636c614ec8c55d5dba6952f08cd595a309b
|
7
|
+
data.tar.gz: da91f2acb4102987f40c8d05b314727349782e0ac170859423460e131aa6b5793c4761066c583b0c6836d1db0392f47b574911faf75368fef61ebf4b4485497e
|
data/.rubocop.yml
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module StructuraidCore
|
2
|
+
module DesignCodes
|
3
|
+
module ACI31819
|
4
|
+
module RC
|
5
|
+
module Footings
|
6
|
+
class MinHeight
|
7
|
+
include DesignCodes::Utils::CodeRequirement
|
8
|
+
use_schema DesignCodes::Schemas::RC::Footings::MinHeightSchema
|
9
|
+
|
10
|
+
MIN_HEIGHT = 150
|
11
|
+
CODE_REFERENCE = 'ACI 318-19 13.3.1.2'.freeze
|
12
|
+
|
13
|
+
def call
|
14
|
+
return true if bottom_rebar_effective_height >= MIN_HEIGHT
|
15
|
+
|
16
|
+
raise RequirementNotFulfilledError.new(
|
17
|
+
:min_height,
|
18
|
+
"Effective Height #{bottom_rebar_effective_height} is below #{MIN_HEIGHT} mininmum",
|
19
|
+
CODE_REFERENCE
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module StructuraidCore
|
2
|
+
module DesignCodes
|
3
|
+
module NSR10
|
4
|
+
module RC
|
5
|
+
module Footings
|
6
|
+
class MinHeight
|
7
|
+
include DesignCodes::Utils::CodeRequirement
|
8
|
+
use_schema DesignCodes::Schemas::RC::Footings::MinHeightSchema
|
9
|
+
|
10
|
+
MIN_HEIGHT_MAPPINGS = {
|
11
|
+
over_soil: 150,
|
12
|
+
over_piles: 300
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
CODE_REFERENCE = 'NSR-10 C.15.7'.freeze
|
16
|
+
|
17
|
+
def call
|
18
|
+
support_type = params.support_type || :over_soil
|
19
|
+
unless MIN_HEIGHT_MAPPINGS.keys.include?(support_type)
|
20
|
+
raise UnrecognizedValueError.new(:support_type, support_type)
|
21
|
+
end
|
22
|
+
|
23
|
+
min_height = MIN_HEIGHT_MAPPINGS[support_type]
|
24
|
+
|
25
|
+
return true if bottom_rebar_effective_height >= min_height
|
26
|
+
|
27
|
+
raise RequirementNotFulfilledError.new(
|
28
|
+
:min_height,
|
29
|
+
"Height #{bottom_rebar_effective_height} is below #{min_height} mininmum",
|
30
|
+
CODE_REFERENCE
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module StructuraidCore
|
2
|
+
module DesignCodes
|
3
|
+
module Schemas
|
4
|
+
module RC
|
5
|
+
module Footings
|
6
|
+
class MinHeightSchema
|
7
|
+
include DesignCodes::Utils::SchemaDefinition
|
8
|
+
|
9
|
+
required_params %i[bottom_rebar_effective_height]
|
10
|
+
optional_params %i[support_type]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'matrix'
|
2
|
+
|
1
3
|
module StructuraidCore
|
2
4
|
module Elements
|
3
5
|
module Reinforcement
|
@@ -44,7 +46,13 @@ module StructuraidCore
|
|
44
46
|
offset ||= 0.5 * diameter
|
45
47
|
|
46
48
|
[@start_location, @end_location].each do |location|
|
47
|
-
location.
|
49
|
+
location.update_from_vector(
|
50
|
+
Vector[
|
51
|
+
location.value_1,
|
52
|
+
location.value_2,
|
53
|
+
above_middle ? location.value_3 - offset : location.value_3 + offset
|
54
|
+
]
|
55
|
+
)
|
48
56
|
end
|
49
57
|
end
|
50
58
|
|
@@ -67,9 +75,9 @@ module StructuraidCore
|
|
67
75
|
def length
|
68
76
|
vector = length_vector
|
69
77
|
|
70
|
-
vector
|
71
|
-
vector
|
72
|
-
vector
|
78
|
+
vector[0] = 0 if @distribution_direction == :length_1
|
79
|
+
vector[1] = 0 if @distribution_direction == :length_2
|
80
|
+
vector[2] = 0 if @distribution_direction == :length_3
|
73
81
|
|
74
82
|
vector.magnitude
|
75
83
|
end
|
@@ -77,11 +85,11 @@ module StructuraidCore
|
|
77
85
|
private
|
78
86
|
|
79
87
|
def length_vector
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
88
|
+
Vector[
|
89
|
+
@end_location.value_1 - @start_location.value_1,
|
90
|
+
@end_location.value_2 - @start_location.value_2,
|
91
|
+
@end_location.value_3 - @start_location.value_3
|
92
|
+
]
|
85
93
|
end
|
86
94
|
end
|
87
95
|
end
|
@@ -7,7 +7,10 @@ module StructuraidCore
|
|
7
7
|
|
8
8
|
def initialize(footing:, load_from_column:, section_direction:)
|
9
9
|
if ORTHOGONALITIES.none?(section_direction)
|
10
|
-
raise Engineering::Analysis::SectionDirectionError.new(
|
10
|
+
raise Engineering::Analysis::SectionDirectionError.new(
|
11
|
+
section_direction,
|
12
|
+
ORTHOGONALITIES
|
13
|
+
)
|
11
14
|
end
|
12
15
|
|
13
16
|
@footing = footing
|
@@ -1,8 +1,10 @@
|
|
1
|
+
require 'matrix'
|
2
|
+
|
1
3
|
module StructuraidCore
|
2
4
|
module Engineering
|
3
5
|
module Locations
|
4
6
|
class Absolute < Base
|
5
|
-
|
7
|
+
attr_reader :value_x, :value_y, :value_z
|
6
8
|
|
7
9
|
def initialize(value_x:, value_y:, value_z:)
|
8
10
|
@value_x = value_x.to_f
|
@@ -10,8 +12,14 @@ module StructuraidCore
|
|
10
12
|
@value_z = value_z.to_f
|
11
13
|
end
|
12
14
|
|
13
|
-
def
|
14
|
-
|
15
|
+
def to_matrix
|
16
|
+
Matrix.column_vector(
|
17
|
+
[
|
18
|
+
value_x,
|
19
|
+
value_y,
|
20
|
+
value_z
|
21
|
+
]
|
22
|
+
)
|
15
23
|
end
|
16
24
|
end
|
17
25
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'matrix'
|
2
|
+
|
3
|
+
module StructuraidCore
|
4
|
+
module Engineering
|
5
|
+
module Locations
|
6
|
+
class CoordinatesSystem < Base
|
7
|
+
attr_reader :relative_locations, :axis_1
|
8
|
+
|
9
|
+
def initialize(anchor_location:, relative_locations: [])
|
10
|
+
@anchor_location = anchor_location
|
11
|
+
@relative_locations = relative_locations
|
12
|
+
@axis_1 = Vector[1.0, 0.0, 0.0]
|
13
|
+
@axis_3 = Vector[0.0, 0.0, 1.0]
|
14
|
+
end
|
15
|
+
|
16
|
+
def align_axis_1_with(vector:)
|
17
|
+
relative_locations.each { |relative_location| rotate_axes(relative_location, theta(vector)) }
|
18
|
+
@axis_1 = vector.normalize
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_location(relative_location)
|
22
|
+
relative_locations << relative_location
|
23
|
+
end
|
24
|
+
|
25
|
+
def axis_2
|
26
|
+
axis_3.cross_product axis_1
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
attr_reader :axis_3
|
32
|
+
|
33
|
+
def theta(vector)
|
34
|
+
unitary_vector = vector.normalize
|
35
|
+
return Math.acos(axis_1.inner_product(unitary_vector)) if axis_1.cross_product(unitary_vector)[2].zero?
|
36
|
+
|
37
|
+
Math.asin(axis_1.cross_product(unitary_vector)[2])
|
38
|
+
end
|
39
|
+
|
40
|
+
def rotate_axes(relative_location, theta)
|
41
|
+
transformed = rotation_matrix(theta) * relative_location.to_matrix
|
42
|
+
transformed_vector = Vector[
|
43
|
+
transformed[0, 0],
|
44
|
+
transformed[1, 0],
|
45
|
+
transformed[2, 0]
|
46
|
+
]
|
47
|
+
relative_location.update_from_vector(transformed_vector)
|
48
|
+
end
|
49
|
+
|
50
|
+
def rotation_matrix(theta)
|
51
|
+
Matrix[
|
52
|
+
[Math.cos(theta), Math.sin(theta), 0.0],
|
53
|
+
[-Math.sin(theta), Math.cos(theta), 0.0],
|
54
|
+
[0.0, 0.0, 1.0]
|
55
|
+
]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,14 +1,44 @@
|
|
1
|
+
require 'matrix'
|
2
|
+
|
1
3
|
module StructuraidCore
|
2
4
|
module Engineering
|
3
5
|
module Locations
|
4
6
|
class Relative < Base
|
5
|
-
|
7
|
+
attr_reader :value_1, :value_2, :value_3
|
8
|
+
|
9
|
+
def self.from_matrix(matrix)
|
10
|
+
new(
|
11
|
+
value_1: matrix[0, 0],
|
12
|
+
value_2: matrix[1, 0],
|
13
|
+
value_3: matrix[2, 0]
|
14
|
+
)
|
15
|
+
end
|
6
16
|
|
7
17
|
def initialize(value_1:, value_2:, value_3:)
|
8
18
|
@value_1 = value_1.to_f
|
9
19
|
@value_2 = value_2.to_f
|
10
20
|
@value_3 = value_3.to_f
|
11
21
|
end
|
22
|
+
|
23
|
+
def to_matrix
|
24
|
+
Matrix.column_vector(
|
25
|
+
[
|
26
|
+
value_1,
|
27
|
+
value_2,
|
28
|
+
value_3
|
29
|
+
]
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def update_from_vector(vector)
|
34
|
+
@value_1 = vector[0]
|
35
|
+
@value_2 = vector[1]
|
36
|
+
@value_3 = vector[2]
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_vector
|
40
|
+
Vector[value_1, value_2, value_3]
|
41
|
+
end
|
12
42
|
end
|
13
43
|
end
|
14
44
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module StructuraidCore
|
2
|
+
module DesignCodes
|
3
|
+
class RequirementNotFulfilledError < StandardError
|
4
|
+
attr_reader :requirement, :message, :code_reference
|
5
|
+
|
6
|
+
def initialize(requirement, message, code_reference)
|
7
|
+
@requirement = requirement
|
8
|
+
@message = message
|
9
|
+
@code_reference = code_reference
|
10
|
+
|
11
|
+
super(message)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: structuraid_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pradaing
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 0.22.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: matrix
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.4.2
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.4.2
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rake
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,13 +158,16 @@ files:
|
|
144
158
|
- lib/structuraid_core/db/base.rb
|
145
159
|
- lib/structuraid_core/db/rebars.yml
|
146
160
|
- lib/structuraid_core/design_codes/aci_318_19/rc/elastic_modulus.rb
|
161
|
+
- lib/structuraid_core/design_codes/aci_318_19/rc/footings/min_height.rb
|
147
162
|
- lib/structuraid_core/design_codes/aci_318_19/rc/footings/punching_shear_capacity.rb
|
148
163
|
- lib/structuraid_core/design_codes/base.rb
|
149
164
|
- lib/structuraid_core/design_codes/nsr_10/rc/elastic_modulus.rb
|
165
|
+
- lib/structuraid_core/design_codes/nsr_10/rc/footings/min_height.rb
|
150
166
|
- lib/structuraid_core/design_codes/nsr_10/rc/footings/punching_shear_capacity.rb
|
151
167
|
- lib/structuraid_core/design_codes/resolver.rb
|
152
168
|
- lib/structuraid_core/design_codes/schemas/empty_schema.rb
|
153
169
|
- lib/structuraid_core/design_codes/schemas/rc/elastic_modulus_schema.rb
|
170
|
+
- lib/structuraid_core/design_codes/schemas/rc/footings/min_height_schema.rb
|
154
171
|
- lib/structuraid_core/design_codes/schemas/rc/footings/punching_shear_capacity_schema.rb
|
155
172
|
- lib/structuraid_core/design_codes/utils/code_requirement.rb
|
156
173
|
- lib/structuraid_core/design_codes/utils/schema_definition.rb
|
@@ -168,10 +185,11 @@ files:
|
|
168
185
|
- lib/structuraid_core/engineering/base.rb
|
169
186
|
- lib/structuraid_core/engineering/locations/absolute.rb
|
170
187
|
- lib/structuraid_core/engineering/locations/base.rb
|
188
|
+
- lib/structuraid_core/engineering/locations/coordinates_system.rb
|
171
189
|
- lib/structuraid_core/engineering/locations/relative.rb
|
172
|
-
- lib/structuraid_core/engineering/vector.rb
|
173
190
|
- lib/structuraid_core/errors/base.rb
|
174
191
|
- lib/structuraid_core/errors/design_codes/missing_param_error.rb
|
192
|
+
- lib/structuraid_core/errors/design_codes/requirement_not_fulfilled_error.rb
|
175
193
|
- lib/structuraid_core/errors/design_codes/unknown_design_code_error.rb
|
176
194
|
- lib/structuraid_core/errors/design_codes/unrecognized_value_error.rb
|
177
195
|
- lib/structuraid_core/errors/engineering/analysis/section_direction_error.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module StructuraidCore
|
2
|
-
module Engineering
|
3
|
-
class Vector < Base
|
4
|
-
attr_accessor :value_x, :value_y, :value_z
|
5
|
-
|
6
|
-
def self.with_value(value:, direction:)
|
7
|
-
new(
|
8
|
-
value_x: value.to_f * direction[0],
|
9
|
-
value_y: value.to_f * direction[1],
|
10
|
-
value_z: value.to_f * direction[2]
|
11
|
-
)
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize(value_x:, value_y:, value_z:)
|
15
|
-
@value_x = value_x.to_f
|
16
|
-
@value_y = value_y.to_f
|
17
|
-
@value_z = value_z.to_f
|
18
|
-
end
|
19
|
-
|
20
|
-
def magnitude
|
21
|
-
Math.sqrt(value_x**2 + value_y**2 + value_z**2)
|
22
|
-
end
|
23
|
-
|
24
|
-
def direction
|
25
|
-
vector_magnitude = magnitude
|
26
|
-
|
27
|
-
[
|
28
|
-
@value_x / vector_magnitude,
|
29
|
-
@value_y / vector_magnitude,
|
30
|
-
@value_z / vector_magnitude
|
31
|
-
]
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|