bibun 0.0.0
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 +7 -0
- checksums.yaml.gz.sig +3 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE.txt +26 -0
- data/README.md +909 -0
- data/lib/bibun/differential_butcher_table.rb +72 -0
- data/lib/bibun/differential_equation_logger.rb +157 -0
- data/lib/bibun/differential_equation_system.rb +367 -0
- data/lib/bibun/differential_stepper.rb +237 -0
- data/lib/bibun/differential_system_parameter.rb +21 -0
- data/lib/bibun/differential_system_symbol.rb +35 -0
- data/lib/bibun/differential_system_variable.rb +202 -0
- data/lib/bibun/log_entry.rb +131 -0
- data/lib/bibun/step_tracker.rb +129 -0
- data/lib/bibun/symbol_group.rb +100 -0
- data/lib/bibun/version.rb +6 -0
- data/lib/bibun.rb +22 -0
- data/lib/data/butcher_tables.toml +44 -0
- data.tar.gz.sig +0 -0
- metadata +255 -0
- metadata.gz.sig +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bibun
|
|
4
|
+
class DifferentialEquationSystem
|
|
5
|
+
# A single object of this class tracks positions relative to the step and the independent variable both for
|
|
6
|
+
# walking forward and logging each step. Separated from the DifferentialStepper to avoid excessive cluttering.
|
|
7
|
+
class StepTracker
|
|
8
|
+
# @return [Numeric] Stores the step size defined for the integration, which may change through it for
|
|
9
|
+
# adaptive methods.
|
|
10
|
+
attr_accessor :step_size
|
|
11
|
+
# @return [Numeric] The timespan set for a full integration.
|
|
12
|
+
attr_accessor :duration
|
|
13
|
+
# @return [Numeric] The independent variable interval for logging entries.
|
|
14
|
+
attr_accessor :logging_interval
|
|
15
|
+
# @return [Numeric] The number of steps to record a log entry when the logging interval differs from the step
|
|
16
|
+
# size.
|
|
17
|
+
attr_reader :steps_to_log
|
|
18
|
+
|
|
19
|
+
# @!group This attributes pertain keeping track of the logging and walking steps.
|
|
20
|
+
# @return [Numeric] For adaptive methods, stores the future value of the step size since logging still requires
|
|
21
|
+
# the previous value.
|
|
22
|
+
attr_accessor :next_step_size
|
|
23
|
+
# @return [Integer] The ordinal (number) of the current step of the integration.
|
|
24
|
+
attr_reader :current_step
|
|
25
|
+
# @return [Numeric] The initial value for the independent variable.
|
|
26
|
+
attr_reader :starting_point
|
|
27
|
+
# @return [Numeric] The current position of the independent value during the integration run.
|
|
28
|
+
attr_reader :current_point
|
|
29
|
+
# @return [Numeric] The previous position of the independent value during the integration run.
|
|
30
|
+
attr_reader :previous_point
|
|
31
|
+
# @return [Numeric] The current or last value of the independent variable in the log.
|
|
32
|
+
attr_reader :current_logging_point
|
|
33
|
+
# @return [Numeric] The previous value of the independent variable recorded in the log.
|
|
34
|
+
attr_reader :previous_logging_point
|
|
35
|
+
# @return [Integer] The current row number of the log (differs for dense output).
|
|
36
|
+
attr_reader :current_logging_step
|
|
37
|
+
# @return [Numeric] For dense output, last logged point from the previous walking step.
|
|
38
|
+
attr_accessor :last_mark
|
|
39
|
+
# @return [Boolean] Quick way to established whether dense output has been set or not.
|
|
40
|
+
attr_reader :dense_output
|
|
41
|
+
alias dense_output? dense_output
|
|
42
|
+
# @!endgroup
|
|
43
|
+
|
|
44
|
+
# Sets up all values of the tracker for the integration run.
|
|
45
|
+
def prepare(independent_start, adaptive, single_step:)
|
|
46
|
+
@current_step = 0
|
|
47
|
+
@current_logging_step = 0
|
|
48
|
+
@starting_point = independent_start
|
|
49
|
+
@current_point = independent_start
|
|
50
|
+
@current_logging_point = independent_start
|
|
51
|
+
@last_mark = 0
|
|
52
|
+
|
|
53
|
+
if single_step
|
|
54
|
+
raise ArgumentError, 'Missing step size' if step_size.nil?
|
|
55
|
+
elsif step_size.nil? || duration.nil?
|
|
56
|
+
raise ArgumentError, 'Missing duration or step_size'
|
|
57
|
+
end
|
|
58
|
+
define_steps_to_log(adaptive)
|
|
59
|
+
@dense_output = !logging_interval.nil? && adaptive
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Sets how many steps are necessary for logging when the method is non adaptive.
|
|
63
|
+
# @param adaptive [Boolean]
|
|
64
|
+
def define_steps_to_log(adaptive)
|
|
65
|
+
return unless steps_to_log.nil? || adaptive
|
|
66
|
+
|
|
67
|
+
l = logging_interval.nil? ? 0 : logging_interval
|
|
68
|
+
@steps_to_log = if l < step_size
|
|
69
|
+
1
|
|
70
|
+
else
|
|
71
|
+
l.fdiv(step_size).to_i
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Quick calculation of the total number of steps (only known a priori for non adaptive methods).
|
|
76
|
+
# @return [Integer]
|
|
77
|
+
def total_steps = (duration / step_size.to_f).to_i
|
|
78
|
+
|
|
79
|
+
# Calculates the end of the integration.
|
|
80
|
+
# @return [Numeric]
|
|
81
|
+
def ending_point = starting_point + duration
|
|
82
|
+
|
|
83
|
+
# For dense output, this is the fraction between the current point and the previous point a which an entry
|
|
84
|
+
# for logging sits. This is necessary for the polynomial interpolation.
|
|
85
|
+
# @param point [Integer] The independent variable value at which the theta is calculated.
|
|
86
|
+
# @return [Float]
|
|
87
|
+
def theta(point)
|
|
88
|
+
(point - previous_point) / (current_point - previous_point).to_f
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# @!group This methods change the value of the walking and logging steps.
|
|
92
|
+
# Quick method for advancing a step. Made a method expecting future changes which may demand other actions.
|
|
93
|
+
def walk_forward
|
|
94
|
+
@current_step += 1
|
|
95
|
+
@previous_point = current_point
|
|
96
|
+
@current_point += step_size
|
|
97
|
+
@step_size = next_step_size unless next_step_size.nil?
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Method for the pointer to the current logging step and point to advance.
|
|
101
|
+
def log_forward(logging_mark)
|
|
102
|
+
@current_logging_step += 1
|
|
103
|
+
@current_logging_point = logging_mark
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @return [Integer] The number of marks to log for a given step walked.
|
|
107
|
+
def num_marks
|
|
108
|
+
((current_point - last_mark) / logging_interval).to_i
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# @return [Array<Numeric>] The marks (logging points) where values have to be logged.
|
|
112
|
+
def marks_to_advance
|
|
113
|
+
leaps = []
|
|
114
|
+
if dense_output?
|
|
115
|
+
(1..num_marks).each { |i| leaps << last_mark + i * logging_interval }
|
|
116
|
+
elsif (current_step % steps_to_log).zero?
|
|
117
|
+
leaps << current_point
|
|
118
|
+
end
|
|
119
|
+
leaps
|
|
120
|
+
end
|
|
121
|
+
# @!endgroup
|
|
122
|
+
|
|
123
|
+
# json converter routine for the serializer.
|
|
124
|
+
def to_json(*_args)
|
|
125
|
+
{ 'step_size' => step_size, 'duration' => duration, 'logging_interval' => logging_interval }.to_json
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Bibun
|
|
3
|
+
class DifferentialEquationSystem
|
|
4
|
+
# This class emcompasses all methods relative to writing and reading parameter and variable values, separated here
|
|
5
|
+
# to avoid cluttering the outer class. Most of the time the DifferentialEquationSystem class has shortcuts
|
|
6
|
+
# to access its methods.
|
|
7
|
+
class SymbolGroup
|
|
8
|
+
# Hash with all the variables of the DES
|
|
9
|
+
attr_accessor :variables
|
|
10
|
+
# Hash with all the parameters of the DES
|
|
11
|
+
attr_accessor :parameters
|
|
12
|
+
# Reference to the outer DifferentialEquationSystem object.
|
|
13
|
+
attr_accessor :system
|
|
14
|
+
|
|
15
|
+
def initialize(sys)
|
|
16
|
+
@variables = {}
|
|
17
|
+
@parameters = {}
|
|
18
|
+
@system = sys
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Quick way to access the independent variable regardless of the name set to it.
|
|
22
|
+
# @return [DifferentialSystemVariable]
|
|
23
|
+
def ind_var = variables.values.find(&:independent?)
|
|
24
|
+
# Quick accessor to the dependent variables.
|
|
25
|
+
# @return [Hash{String => DifferentialSystemVariable}]
|
|
26
|
+
def rate_variables = variables.reject { |_, v| v.independent? }
|
|
27
|
+
# Quick access to the SubDifferentialEquation objects.
|
|
28
|
+
# @return [Hash{String => SubDifferentialEquation}]
|
|
29
|
+
def rate_equations = rate_variables.transform_values(&:rate_equation)
|
|
30
|
+
# Quick access to the variable values.
|
|
31
|
+
# @return [Hash{String => Numeric}]
|
|
32
|
+
def vars_values = variables.transform_values(&:value)
|
|
33
|
+
|
|
34
|
+
# This gives a hash with the string symbols of the variables as the keys rather than the names.
|
|
35
|
+
# For example: {'t' => 0, 'T' => 25 } instead of { 'time' => 0, 'temperature' => 25 }.
|
|
36
|
+
# This is useful to provide to the calculators.
|
|
37
|
+
# @return [Hash{String => Numeric}]
|
|
38
|
+
def vars_values_hash(with_step_change: false)
|
|
39
|
+
variables.map { |_, v| [v.symbol, v.value + (with_step_change ? v.step_change : 0)] }.to_h
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @return [Hash{String => Array<Numeric>}] Terms with their changes. Useful for debugging.
|
|
43
|
+
def terms_changes_hash
|
|
44
|
+
terms_array.map { |t| [t.id, [t.step_change, t.cumulative_change]] }.to_h
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Cleans the last addition of the step change for all terms. Necessary for adaptive step size when it is
|
|
48
|
+
# rejected and recalculated.
|
|
49
|
+
def undo_term_changes
|
|
50
|
+
terms_array.each do |t|
|
|
51
|
+
t.cumulative_change -= t.step_change
|
|
52
|
+
t.step_change = 0
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# This gives a hash with the string symbols of the parameters as the keys rather than the names.
|
|
57
|
+
# For example: {'g' => 0, 'ρ' => 25 } instead of { 'gravity' => 9.806, 'density' => 1000 }.
|
|
58
|
+
# This is useful to provide to the calculators.
|
|
59
|
+
# @return [Hash{String => Numeric}]
|
|
60
|
+
def pars_values_hash = parameters.values.map { |p| [p.symbol, p.value] }.to_h
|
|
61
|
+
# Merge of +vars_values_hash+ and +pars_values_hash+
|
|
62
|
+
# @return [Hash{String => Numeric}]
|
|
63
|
+
def syms_values_hash = pars_values_hash.merge(vars_values_hash)
|
|
64
|
+
# Like {#vars_values_hash} but for the buffer values. Useful for the evaluation of the ks
|
|
65
|
+
# @return [Hash{String => Numeric}]
|
|
66
|
+
def vars_buffers_hash = variables.map { |_, v| [v.symbol, v.buffer_value] }.to_h
|
|
67
|
+
# merge of +vars_buffers_hash+ and +pars_buffer_hash+
|
|
68
|
+
# @return [Hash{String => Numeric}]
|
|
69
|
+
def syms_buffers_hash = pars_values_hash.merge(vars_buffers_hash)
|
|
70
|
+
# Check if the des has any rate additive terms declared.
|
|
71
|
+
def terms? = rate_variables.any(&:terms?)
|
|
72
|
+
# Merge the variables and parameters hash.
|
|
73
|
+
def symbols = variables.merge(parameters)
|
|
74
|
+
# Check if any variable has tolerances set in for adaptive methods.
|
|
75
|
+
def tolerances_provided? = rate_variables.any? { |_,v| v.atol.nonzero? || v.rtol.nonzero? }
|
|
76
|
+
# Returns only the variables with declared tolerances.
|
|
77
|
+
def vars_with_tols = rate_variables.select { |_, v| v.atol.nonzero? || v.rtol.nonzero? }
|
|
78
|
+
|
|
79
|
+
# Returns an array with the rate additive terms to avoid having to traverse variable and equations each time.
|
|
80
|
+
# @return [Array<DifferentialTerm>]
|
|
81
|
+
def terms_array
|
|
82
|
+
rate_variables.values.each_with_object([]) { |v, ar| ar << v.terms.values unless v.terms.empty? }.flatten
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Method to assign values to variables and parameters in a single operation.
|
|
86
|
+
# Also registers those in the log buffer for logging purposes.
|
|
87
|
+
# @param values_hash [Hash{String => Numeric}] The hash with the variables and parameter names
|
|
88
|
+
# and the target values.
|
|
89
|
+
def assign_values(values_hash)
|
|
90
|
+
values_hash.each do |k, v|
|
|
91
|
+
symbols[k].value = v
|
|
92
|
+
if symbols[k].instance_of?(DifferentialSystemVariable)
|
|
93
|
+
symbols[k].buffer_value = v
|
|
94
|
+
system.logger.buffer[k] = v
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
data/lib/bibun.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'keisan'
|
|
2
|
+
require 'formatador'
|
|
3
|
+
require 'csv'
|
|
4
|
+
require 'json'
|
|
5
|
+
require 'tomlib'
|
|
6
|
+
|
|
7
|
+
require_relative 'bibun/version'
|
|
8
|
+
require_relative 'bibun/differential_equation_system'
|
|
9
|
+
require_relative 'bibun/differential_system_symbol'
|
|
10
|
+
require_relative 'bibun/differential_system_variable'
|
|
11
|
+
require_relative 'bibun/differential_system_parameter'
|
|
12
|
+
require_relative 'bibun/differential_stepper'
|
|
13
|
+
require_relative 'bibun/differential_butcher_table'
|
|
14
|
+
require_relative 'bibun/differential_equation_logger'
|
|
15
|
+
require_relative 'bibun/step_tracker'
|
|
16
|
+
require_relative 'bibun/symbol_group'
|
|
17
|
+
require_relative 'bibun/log_entry'
|
|
18
|
+
|
|
19
|
+
# Standard container for the whole library which consists of a single module.
|
|
20
|
+
module Bibun
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
[midpoint]
|
|
2
|
+
type = 'Runge-Kuta'
|
|
3
|
+
adaptive = false
|
|
4
|
+
order = 2
|
|
5
|
+
stages = 2
|
|
6
|
+
nodes = [0, '1/2']
|
|
7
|
+
weights = [0, 1]
|
|
8
|
+
matrix_coefficients = [['1/2']]
|
|
9
|
+
[rk4]
|
|
10
|
+
type = 'Runge-Kutta'
|
|
11
|
+
adaptive = false
|
|
12
|
+
order = 4
|
|
13
|
+
stages = 4
|
|
14
|
+
nodes = [0, '1/2', '1/2', 1]
|
|
15
|
+
weights = ['1/6', '1/3', '1/3', '1/6']
|
|
16
|
+
matrix_coefficients = [['1/2'], [0, '1/2'], [0, 0, 1]]
|
|
17
|
+
[dopr45]
|
|
18
|
+
type = 'Runge-Kutta'
|
|
19
|
+
adaptive = true
|
|
20
|
+
order = 5
|
|
21
|
+
stages = 7
|
|
22
|
+
nodes = [0, '1/5', '3/10', '4/5', '8/9', 1, 1]
|
|
23
|
+
weights = ['35/384', 0, '500/1113', '125/192', '-2187/6784', '11/84', 0]
|
|
24
|
+
alternate_weights = ['5179/57600', 0, '7571/16695', '393/640', '-92097/339200', '187/2100', '1/40']
|
|
25
|
+
matrix_coefficients = [['1/5'], ['3/40', '9/40'], ['44/45', '-56/15', '32/9'],
|
|
26
|
+
['19372/6561', '-25360/2187', '64448/6561', '-212/729'],
|
|
27
|
+
['9017/3168', '-355/33', '46732/5247', '49/176', '-5103/18656'],
|
|
28
|
+
['35/384', 0, '500/1113', '125/192', '-2187/6784', '11/84']]
|
|
29
|
+
[dopr45.interpolation.constants]
|
|
30
|
+
d1 = '-12715105075/11282082432'
|
|
31
|
+
d2 = 0
|
|
32
|
+
d3 = '87487479700/32700410799'
|
|
33
|
+
d4 = '-10690763975/1880347072'
|
|
34
|
+
d5 = '701980252875/199316789632'
|
|
35
|
+
d6 = '-1453857185/822651844'
|
|
36
|
+
d7 = '69997945/29380423'
|
|
37
|
+
[dopr45.interpolation.coefficients]
|
|
38
|
+
r1 = 'y0'
|
|
39
|
+
r2 = 'y1 - y0'
|
|
40
|
+
r3 = 'k1 - (y1 - y0)'
|
|
41
|
+
r4 = '2 * (y1 - y0) - k1 - k7'
|
|
42
|
+
r5 = 'd1 * k1 + d2 * k2 + d3 * k3 + d4 * k4 + d5 * k5 + d6 * k6 + d7 * k7'
|
|
43
|
+
[dopr45.interpolation.formula]
|
|
44
|
+
final = 'r1 + theta * (r2 + (1 - theta) * (r3 + theta * (r4 + (1 - theta) * r5)))'
|
data.tar.gz.sig
ADDED
|
Binary file
|
metadata
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: bibun
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Javier Oswaldo Hernández Batis
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain:
|
|
10
|
+
- |
|
|
11
|
+
-----BEGIN CERTIFICATE-----
|
|
12
|
+
MIIEojCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQsFADBLMRkwFwYDVQQDDBBqb2hl
|
|
13
|
+
cm5hbmRlemJhdGlzMRkwFwYKCZImiZPyLGQBGRYJc3RhcnRtYWlsMRMwEQYKCZIm
|
|
14
|
+
iZPyLGQBGRYDY29tMB4XDTI1MTAwNDIwMjgwMVoXDTI2MTAwNDIwMjgwMVowSzEZ
|
|
15
|
+
MBcGA1UEAwwQam9oZXJuYW5kZXpiYXRpczEZMBcGCgmSJomT8ixkARkWCXN0YXJ0
|
|
16
|
+
bWFpbDETMBEGCgmSJomT8ixkARkWA2NvbTCCAaIwDQYJKoZIhvcNAQEBBQADggGP
|
|
17
|
+
ADCCAYoCggGBALeKx5HEeuWn5qCjxPzjDhdm+PVZZqoVBsr0zOpgLXQ1fFbcchAo
|
|
18
|
+
TN6N5EBBpspNPTGseSoLVkbkYgkLj8xsoGIHnqooM3NsCEl10XKBH7WrHpkqGenV
|
|
19
|
+
7FU5cBhsOzyK9vHcYn6avgrivg918LBw6/jKTCpzci5g1raBn6n8ngrwVY2jOsqW
|
|
20
|
+
J78vwAA6VKPGpR555UmvO4lg8GrS03ktyvDdL99PlhHgzfaLDXYh4tUoy5izwM1t
|
|
21
|
+
JqpbiRimocklRs4jlTcZveBl4Pd/XGzNXSVmFqCmFz5lugFB+DFkyyt8ruhJ1Dtm
|
|
22
|
+
HZSKIy+Xmi17XcNAw+DeJeXMRGh/ddl5uAHWRxjX5tcpX7m/54QL1Hyi9uR/IQvR
|
|
23
|
+
L8oCHRq6l43vK8LCAoMV/LbCfzVOXHUhjtOCQnGkJJ5/27hz8MIxKhw+Sann/0jo
|
|
24
|
+
+KWrGFblBFp1lim477FuBbruP5SPReKjkXQ9dkU08O6woyYA0IjzWeSnXO49CpMm
|
|
25
|
+
3fywTmAXgKLbjQIDAQABo4GQMIGNMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0G
|
|
26
|
+
A1UdDgQWBBS2ZcS8Y0Z1s0+eOUjd6hq8LSP6UzApBgNVHREEIjAggR5qb2hlcm5h
|
|
27
|
+
bmRlemJhdGlzQHN0YXJ0bWFpbC5jb20wKQYDVR0SBCIwIIEeam9oZXJuYW5kZXpi
|
|
28
|
+
YXRpc0BzdGFydG1haWwuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQBvJpZUyWWtaeVw
|
|
29
|
+
A/UrnPCwjwM9H9W9aNUurWV8P+RJo74Th5Mpp7ZxAT2McIUveRDJNe8aZC7+D7li
|
|
30
|
+
NAOcGIABK8vj//iqh7WuiYIrPcCnzvwumZNtxDnnhaMjpk3DTdjJMwyOUcos7hMi
|
|
31
|
+
GNHX0DpWElZ1Lrkt8HaJpRefhmmDmQBrwGD3s6cztE5ynX6uKGVt1acBZNp3lrej
|
|
32
|
+
9QNc1iKB6K2DfuVzwxPU6da7HC5E/nQKh1/cIAOf/fgYiJ1f3Qq1jlR9jptPdKOu
|
|
33
|
+
k8yqdQxomOFGpEsrtiFw7NlChWENONF20k15vyGyuTVVBBFDvKuZiEqsGemm6o1j
|
|
34
|
+
yDbiN5LLe5fm2a15tXbu6fhj7ITmqwteZUIIhgF8JWs1jJyonWOlaSiAkeHpsAE/
|
|
35
|
+
Ns9BT67XevfsONA6aGf9YTMfyCdzqW8kkhlVQt24qZBz8Ebblv7dLUxJscWIl4tW
|
|
36
|
+
Ek0z5JjyW9vxbdAQ1KtrTm5X+tpdfERGuyRe+q2o0BlsccV/5xc=
|
|
37
|
+
-----END CERTIFICATE-----
|
|
38
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
39
|
+
dependencies:
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: csv
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '3.3'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '3.3'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: formatador
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '1.2'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '1.2'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: keisan
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0.9'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0.9'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: tomlib
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0.7'
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0.7'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: benchmark
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0.4'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "~>"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0.4'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: rake
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '13.3'
|
|
117
|
+
type: :development
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '13.3'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: rspec
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - "~>"
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '3.13'
|
|
131
|
+
type: :development
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '3.13'
|
|
138
|
+
- !ruby/object:Gem::Dependency
|
|
139
|
+
name: rubocop
|
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '1.80'
|
|
145
|
+
type: :development
|
|
146
|
+
prerelease: false
|
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - "~>"
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '1.80'
|
|
152
|
+
- !ruby/object:Gem::Dependency
|
|
153
|
+
name: rubocop-rspec
|
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
|
155
|
+
requirements:
|
|
156
|
+
- - "~>"
|
|
157
|
+
- !ruby/object:Gem::Version
|
|
158
|
+
version: '3.7'
|
|
159
|
+
type: :development
|
|
160
|
+
prerelease: false
|
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
162
|
+
requirements:
|
|
163
|
+
- - "~>"
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '3.7'
|
|
166
|
+
- !ruby/object:Gem::Dependency
|
|
167
|
+
name: ruby-prof
|
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - "~>"
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '1.7'
|
|
173
|
+
type: :development
|
|
174
|
+
prerelease: false
|
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
176
|
+
requirements:
|
|
177
|
+
- - "~>"
|
|
178
|
+
- !ruby/object:Gem::Version
|
|
179
|
+
version: '1.7'
|
|
180
|
+
- !ruby/object:Gem::Dependency
|
|
181
|
+
name: super_diff
|
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
|
183
|
+
requirements:
|
|
184
|
+
- - "~>"
|
|
185
|
+
- !ruby/object:Gem::Version
|
|
186
|
+
version: '0.16'
|
|
187
|
+
type: :development
|
|
188
|
+
prerelease: false
|
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
190
|
+
requirements:
|
|
191
|
+
- - "~>"
|
|
192
|
+
- !ruby/object:Gem::Version
|
|
193
|
+
version: '0.16'
|
|
194
|
+
- !ruby/object:Gem::Dependency
|
|
195
|
+
name: yard
|
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
|
197
|
+
requirements:
|
|
198
|
+
- - "~>"
|
|
199
|
+
- !ruby/object:Gem::Version
|
|
200
|
+
version: '0.9'
|
|
201
|
+
type: :development
|
|
202
|
+
prerelease: false
|
|
203
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
204
|
+
requirements:
|
|
205
|
+
- - "~>"
|
|
206
|
+
- !ruby/object:Gem::Version
|
|
207
|
+
version: '0.9'
|
|
208
|
+
description: "This gem allows to do simulation runs of systems of ordinary differential
|
|
209
|
+
equations of one independent variable \nusing numerical Runge-Kutta methods for
|
|
210
|
+
approximation. Contains some features like calculation of separate additive\nterms
|
|
211
|
+
of the differential equations, calculation of custom expressions and logging and
|
|
212
|
+
printing runs to a csv files,\nwhich engineers may find it convenient.\n"
|
|
213
|
+
email: johernandezbatis@startmail.com
|
|
214
|
+
executables: []
|
|
215
|
+
extensions: []
|
|
216
|
+
extra_rdoc_files: []
|
|
217
|
+
files:
|
|
218
|
+
- CHANGELOG.md
|
|
219
|
+
- LICENSE.txt
|
|
220
|
+
- README.md
|
|
221
|
+
- lib/bibun.rb
|
|
222
|
+
- lib/bibun/differential_butcher_table.rb
|
|
223
|
+
- lib/bibun/differential_equation_logger.rb
|
|
224
|
+
- lib/bibun/differential_equation_system.rb
|
|
225
|
+
- lib/bibun/differential_stepper.rb
|
|
226
|
+
- lib/bibun/differential_system_parameter.rb
|
|
227
|
+
- lib/bibun/differential_system_symbol.rb
|
|
228
|
+
- lib/bibun/differential_system_variable.rb
|
|
229
|
+
- lib/bibun/log_entry.rb
|
|
230
|
+
- lib/bibun/step_tracker.rb
|
|
231
|
+
- lib/bibun/symbol_group.rb
|
|
232
|
+
- lib/bibun/version.rb
|
|
233
|
+
- lib/data/butcher_tables.toml
|
|
234
|
+
homepage: https://rubygems.org/gems/bibun_hoteishiki
|
|
235
|
+
licenses:
|
|
236
|
+
- Nonstandard
|
|
237
|
+
metadata: {}
|
|
238
|
+
rdoc_options: []
|
|
239
|
+
require_paths:
|
|
240
|
+
- lib
|
|
241
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
242
|
+
requirements:
|
|
243
|
+
- - ">="
|
|
244
|
+
- !ruby/object:Gem::Version
|
|
245
|
+
version: 3.3.7
|
|
246
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
247
|
+
requirements:
|
|
248
|
+
- - ">="
|
|
249
|
+
- !ruby/object:Gem::Version
|
|
250
|
+
version: '0'
|
|
251
|
+
requirements: []
|
|
252
|
+
rubygems_version: 3.7.2
|
|
253
|
+
specification_version: 4
|
|
254
|
+
summary: A gem to run simulation of differential equation systems via numerical methods.
|
|
255
|
+
test_files: []
|
metadata.gz.sig
ADDED
|
Binary file
|