From b32c92920051f0226e2bca51c92c306a55aa0f29 Mon Sep 17 00:00:00 2001 From: Carlos Adir Date: Sun, 14 Nov 2021 23:06:15 +0100 Subject: [PATCH 1/4] Add namespace compmec before rbdyn --- setup.cfg | 17 +++++++++++------ src/{ => compmec}/rbdyn/__classes__.py | 0 src/{ => compmec}/rbdyn/__init__.py | 1 + src/{ => compmec}/rbdyn/__validation__.py | 2 +- src/{ => compmec}/rbdyn/composition.py | 2 +- src/{ => compmec}/rbdyn/energy.py | 6 +++--- src/{ => compmec}/rbdyn/frames.py | 8 ++++---- src/{ => compmec}/rbdyn/kinematic.py | 6 +++--- src/{ => compmec}/rbdyn/object.py | 10 +++++----- src/{ => compmec}/rbdyn/variable.py | 4 ++-- tests/test_compute.py | 2 +- tests/test_energy.py | 4 ++-- tests/test_frame.py | 4 ++-- tests/test_kinematic.py | 2 +- tests/test_object.py | 6 +++--- tests/test_validation.py | 2 +- tests/test_variables.py | 2 +- 17 files changed, 42 insertions(+), 36 deletions(-) rename src/{ => compmec}/rbdyn/__classes__.py (100%) rename src/{ => compmec}/rbdyn/__init__.py (53%) rename src/{ => compmec}/rbdyn/__validation__.py (95%) rename src/{ => compmec}/rbdyn/composition.py (94%) rename src/{ => compmec}/rbdyn/energy.py (95%) rename src/{ => compmec}/rbdyn/frames.py (93%) rename src/{ => compmec}/rbdyn/kinematic.py (91%) rename src/{ => compmec}/rbdyn/object.py (92%) rename src/{ => compmec}/rbdyn/variable.py (91%) diff --git a/setup.cfg b/setup.cfg index 4e734a4..745a235 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,8 +1,11 @@ [metadata] -name = rbdyn +name = compmec-rbdyn +version = 0.1.0 description = Rigid Body Dynamics library +url = https://github.com/compmec/rbdyn author = Carlos Leite -license = MIT +author_email = compmecgit@gmail.com +license = GPL3.0 license_file = LICENSE.md platforms = unix, linux, osx, win32 classifiers = @@ -14,16 +17,18 @@ classifiers = Programming Language :: Python :: 3.9 [options] -packages = - rbdyn +package_dir = + =src +packages = find_namespace: install_requires = numpy>=1 sympy>=1.8 python_requires = >=3.6 -package_dir = - =src zip_safe = no +[options.packages.find] +where = src + [options.extras_require] testing = pytest>=6.0 diff --git a/src/rbdyn/__classes__.py b/src/compmec/rbdyn/__classes__.py similarity index 100% rename from src/rbdyn/__classes__.py rename to src/compmec/rbdyn/__classes__.py diff --git a/src/rbdyn/__init__.py b/src/compmec/rbdyn/__init__.py similarity index 53% rename from src/rbdyn/__init__.py rename to src/compmec/rbdyn/__init__.py index 3c09585..787f49b 100644 --- a/src/rbdyn/__init__.py +++ b/src/compmec/rbdyn/__init__.py @@ -1,3 +1,4 @@ +__import__("pkg_resources").declare_namespace(__name__) import sympy as sp diff --git a/src/rbdyn/__validation__.py b/src/compmec/rbdyn/__validation__.py similarity index 95% rename from src/rbdyn/__validation__.py rename to src/compmec/rbdyn/__validation__.py index e3e0676..666734b 100644 --- a/src/rbdyn/__validation__.py +++ b/src/compmec/rbdyn/__validation__.py @@ -1,5 +1,5 @@ import numpy as np -import rbdyn.__classes__ as classes +import compmec.rbdyn.__classes__ as classes def VerifyScalar(value): diff --git a/src/rbdyn/composition.py b/src/compmec/rbdyn/composition.py similarity index 94% rename from src/rbdyn/composition.py rename to src/compmec/rbdyn/composition.py index 5cb0ffc..a6afb14 100644 --- a/src/rbdyn/composition.py +++ b/src/compmec/rbdyn/composition.py @@ -1,6 +1,6 @@ import numpy as np from numpy import linalg as la -from rbdyn.__validation__ import Validation_Compute +from compmec.rbdyn.__validation__ import Validation_Compute class Compute: diff --git a/src/rbdyn/energy.py b/src/compmec/rbdyn/energy.py similarity index 95% rename from src/rbdyn/energy.py rename to src/compmec/rbdyn/energy.py index 04561a3..36a14bc 100644 --- a/src/rbdyn/energy.py +++ b/src/compmec/rbdyn/energy.py @@ -1,8 +1,8 @@ import numpy as np import sympy as sp -from rbdyn.__validation__ import Validation_Energy -from rbdyn.__classes__ import EnergyClass -from rbdyn.variable import Variable +from compmec.rbdyn.__validation__ import Validation_Energy +from compmec.rbdyn.__classes__ import EnergyClass +from compmec.rbdyn.variable import Variable def KineticEnergy(mass, velocity): diff --git a/src/rbdyn/frames.py b/src/compmec/rbdyn/frames.py similarity index 93% rename from src/rbdyn/frames.py rename to src/compmec/rbdyn/frames.py index cc4a00b..b7643b3 100644 --- a/src/rbdyn/frames.py +++ b/src/compmec/rbdyn/frames.py @@ -1,9 +1,9 @@ import numpy as np import sympy as sp -from rbdyn.kinematic import Kinematic -from rbdyn import time -from rbdyn.__classes__ import FrameReferenceClass -from rbdyn.__validation__ import Validation_FrameReference, Validation_FrameComposition +from compmec.rbdyn.kinematic import Kinematic +from compmec.rbdyn import time +from compmec.rbdyn.__classes__ import FrameReferenceClass +from compmec.rbdyn.__validation__ import Validation_FrameReference, Validation_FrameComposition class FrameReference(FrameReferenceClass): diff --git a/src/rbdyn/kinematic.py b/src/compmec/rbdyn/kinematic.py similarity index 91% rename from src/rbdyn/kinematic.py rename to src/compmec/rbdyn/kinematic.py index 2b7ad52..fd25960 100644 --- a/src/rbdyn/kinematic.py +++ b/src/compmec/rbdyn/kinematic.py @@ -1,8 +1,8 @@ import numpy as np from numpy import linalg as la -from rbdyn.__classes__ import KinematicClass -from rbdyn.__validation__ import Validation_Kinematic, Validation_ObjectKinematic -from rbdyn.composition import Compute +from compmec.rbdyn.__classes__ import KinematicClass +from compmec.rbdyn.__validation__ import Validation_Kinematic, Validation_ObjectKinematic +from compmec.rbdyn.composition import Compute class Kinematic(KinematicClass): diff --git a/src/rbdyn/object.py b/src/compmec/rbdyn/object.py similarity index 92% rename from src/rbdyn/object.py rename to src/compmec/rbdyn/object.py index e7002f0..6442819 100644 --- a/src/rbdyn/object.py +++ b/src/compmec/rbdyn/object.py @@ -1,11 +1,11 @@ import numpy as np import numpy.linalg as la import sympy as sp -from rbdyn.__classes__ import ObjectClass -from rbdyn.__validation__ import Validation_Object -from rbdyn.kinematic import ObjectKinematic -from rbdyn.frames import FrameReference, FrameComposition -from rbdyn import energy +from compmec.rbdyn.__classes__ import ObjectClass +from compmec.rbdyn.__validation__ import Validation_Object +from compmec.rbdyn.kinematic import ObjectKinematic +from compmec.rbdyn.frames import FrameReference, FrameComposition +from compmec.rbdyn import energy class Object(ObjectClass): diff --git a/src/rbdyn/variable.py b/src/compmec/rbdyn/variable.py similarity index 91% rename from src/rbdyn/variable.py rename to src/compmec/rbdyn/variable.py index dce8cb4..1346586 100644 --- a/src/rbdyn/variable.py +++ b/src/compmec/rbdyn/variable.py @@ -1,6 +1,6 @@ import sympy as sp -from rbdyn.__classes__ import VariableClass -from rbdyn import time +from compmec.rbdyn.__classes__ import VariableClass +from compmec.rbdyn import time class Variable(VariableClass, sp.Function): diff --git a/tests/test_compute.py b/tests/test_compute.py index 417ed2b..204f7f8 100644 --- a/tests/test_compute.py +++ b/tests/test_compute.py @@ -1,6 +1,6 @@ import pytest import numpy as np -from rbdyn.composition import Compute +from compmec.rbdyn.composition import Compute def getRandomUnit3DVector(): diff --git a/tests/test_energy.py b/tests/test_energy.py index 959b157..1186151 100644 --- a/tests/test_energy.py +++ b/tests/test_energy.py @@ -1,7 +1,7 @@ import pytest import numpy as np -from rbdyn.variable import Variable -from rbdyn.energy import KineticEnergy, Energy +from compmec.rbdyn.variable import Variable +from compmec.rbdyn.energy import KineticEnergy, Energy def randomSymmetricMatrix(n): diff --git a/tests/test_frame.py b/tests/test_frame.py index 7a899ea..ea8e29b 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -1,7 +1,7 @@ import pytest import numpy as np -from rbdyn.__classes__ import FrameReferenceClass -from rbdyn.frames import FrameReference +from compmec.rbdyn.__classes__ import FrameReferenceClass +from compmec.rbdyn.frames import FrameReference def getRandomUnit3DVector(): diff --git a/tests/test_kinematic.py b/tests/test_kinematic.py index 7f94b46..1dbd5a2 100644 --- a/tests/test_kinematic.py +++ b/tests/test_kinematic.py @@ -1,6 +1,6 @@ import pytest import numpy as np -from rbdyn.kinematic import Kinematic, ObjectKinematic +from compmec.rbdyn.kinematic import Kinematic, ObjectKinematic @pytest.mark.dependency() diff --git a/tests/test_object.py b/tests/test_object.py index 96caf48..adb9abb 100644 --- a/tests/test_object.py +++ b/tests/test_object.py @@ -1,8 +1,8 @@ import pytest import numpy as np -from rbdyn.variable import Variable -from rbdyn.object import Object -from rbdyn.frames import FrameReference +from compmec.rbdyn.variable import Variable +from compmec.rbdyn.object import Object +from compmec.rbdyn.frames import FrameReference @pytest.mark.dependency() diff --git a/tests/test_validation.py b/tests/test_validation.py index 9d6da7b..1f72314 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -1,6 +1,6 @@ import pytest import numpy as np -import rbdyn.__validation__ as validation +import compmec.rbdyn.__validation__ as validation def getRandomUnit3DVector(): diff --git a/tests/test_variables.py b/tests/test_variables.py index 6a28b5a..6fc138a 100644 --- a/tests/test_variables.py +++ b/tests/test_variables.py @@ -1,6 +1,6 @@ import pytest import numpy as np -from rbdyn.variable import Variable +from compmec.rbdyn.variable import Variable @pytest.mark.dependency() From 174f11cde7546f9a6a3ba33329f09149828d6e67 Mon Sep 17 00:00:00 2001 From: Carlos Adir Date: Sun, 14 Nov 2021 23:24:47 +0100 Subject: [PATCH 2/4] Remove unecessary files --- src/lagrange.py | 238 --------------------------------------- src/rbdyn/translation.py | 14 --- src/solveRungeKutta.py | 77 ------------- src/vibrations.py | 38 ------- 4 files changed, 367 deletions(-) delete mode 100644 src/lagrange.py delete mode 100644 src/rbdyn/translation.py delete mode 100644 src/solveRungeKutta.py delete mode 100644 src/vibrations.py diff --git a/src/lagrange.py b/src/lagrange.py deleted file mode 100644 index c1d2169..0000000 --- a/src/lagrange.py +++ /dev/null @@ -1,238 +0,0 @@ - -import sympy as sp -import numpy as np -import matplotlib.pyplot as plt - - -def get_M(Ec, U_): - n = len(U_) - - M = [] - for i in range(n): - M.append([]) - for j in range(n): - M[i].append(0) - - for i in range(n): - dEcdui_ = sp.diff(Ec, U_[i]) - for j in range(i, n): - mij = sp.diff(dEcdui_, U_[j]) - M[i][j] = mij - M[j][i] = mij - - return M - - -def get_K(Ep, U): - return get_M(Ep, U) - - -def transform_MtoN(M, U): - n = len(U) - - N = [] - for i in range(n): - N.append([]) - for j in range(n): - N[i].append([]) - for k in range(n): - N[i][j].append(0) - - for k in range(n): - for i in range(n): - for j in range(n): - P1 = sp.diff(M[k][i], U[j]) - P2 = sp.diff(M[i][j], U[k]) - N[k][i][j] = P1 - (P2 / 2) - - return N - - -def transform_EptoG(Ep, U): - n = len(U) - # if 1: - if isinstance(Ep, (int, float)): - G = sp.Array([0 for i in range(len(U))]) - else: - G = sp.derive_by_array(Ep, U) - G = G.subs([U], np.zeros(n)) - return G - - -def get_FunctionsExp(Ec, Ep, U, g, P): - t = sp.symbols("t") - Ec = sp.sympify(Ec) - Ep = sp.sympify(Ep) - U = sp.Array(U) - U_ = U.diff(t) - M = get_M(Ec, U_) - N = transform_MtoN(M, U) - K = get_K(Ep, U) - G = transform_EptoG(Ep, U) - - g = sp.Array(g) - g_ = sp.derive_by_array(g, U) - g__ = sp.derive_by_array(g_, U) - - Mexp = get_Mexp(M, g_, U) - Fexp = get_Fexp(N, K, G, g, g_, g__, U, U_, P) - Mexp = sp.Matrix(Mexp) - - return Mexp, Fexp - - -def get_Rexp(Mexp, Fexp): - # Lexp, Dexp = LDLFactorization(Mexp) - t = sp.symbols("t") - detMexp = 1 # Mexp.det() - - Mexp_inv = Mexp.inv() - Mexp_inv = Mexp_inv * detMexp - Mexp_inv = sp.expand(Mexp_inv) - # Mexp_inv = sp.simplify(Mexp_inv) - Rexp = sp.tensorproduct(Mexp_inv, Fexp) - Rexp = sp.tensorcontraction(Rexp, (1, 2)) - - Rexp /= detMexp - return Rexp - - -def get_Mexp(M, g_, U): - n, a = g_.shape - - Mexp = [] - for i in range(a + n): - Mexp.append([]) - for j in range(a + n): - Mexp[i].append(0) - - for i in range(n): - for j in range(n): - Mexp[i][j] = M[i][j] - for i in range(a): - for j in range(n): - Mexp[i + n][j] = g_[j][i] - Mexp[j][i + n] = g_[j][i] - Mexp = sp.Array(Mexp) - return Mexp - - -def get_Fexp(N, K, G, g, g_, g__, U, U_, P): - - alpha = 5 - # alpha = sp.symbols("alpha") - - n, a = g_.shape - N = sp.Array(N) - K = sp.Array(K) - G = sp.Array(G) - # g = sp.Array(g) - - # FUU_ = sp.lambdify([U], FUU_, "numpy") - # FU_ = sp.lambdify([U], FU_, "numpy") - # FU = sp.lambdify([U], FU, "numpy") - # FC = sp.lambdify([U], FC, "numpy") - - U = sp.Array(U) - U_ = sp.Array(U_) - UU_ = sp.tensorproduct(U_, U_) - - FUU_ = [] - FU_ = [] - FU = [] - FC = [] - for i in range(n + a): - FC.append(0) - FU.append([]) - FU_.append([]) - FUU_.append([]) - for j in range(n): - FU[i].append(0) - FU_[i].append(0) - FUU_[i].append([]) - for k in range(n): - FUU_[i][j].append(0) - - for i in range(n): - FC[i] = G[i] - FC[i] += P[i] - for j in range(n): - FU[i][j] = K[i][j] - for k in range(n): - FUU_[i][j][k] = -N[i][j][k] - - for i in range(a): - FC[i + n] = -alpha**2 * g[i] - for j in range(n): - FU_[i + n][j] = -2 * alpha * g_[j][i] - for k in range(n): - FUU_[i + n][j][k] = -g__[j][k][i] - - FUU_ = sp.Array(FUU_) - FU_ = sp.Array(FU_) - FU = sp.Array(FU) - FC = sp.Array(FC) - - # print("######## Shapes ##########") - # print("FUU_ = " + str(FUU_.shape)) - # print(" FU_ = " + str(FU_.shape)) - # print(" FU = " + str(FU.shape)) - # print(" FC = " + str(FC.shape)) - # print(" U_ = " + str(U_.shape)) - # print(" U = " + str(U.shape)) - - Pt1 = sp.tensorproduct(FUU_, UU_) - # print("Pt1_shape = " + str(Pt1.shape)) - Pt1 = sp.tensorcontraction(Pt1, (1, 3)) - # print("Pt1_shape = " + str(Pt1.shape)) - Pt1 = sp.tensorcontraction(Pt1, (1, 2)) - # print("Pt1_shape = " + str(Pt1.shape)) - - Pt2 = sp.tensorproduct(FU_, U_) - # print("Pt2_shape = " + str(Pt2.shape)) - Pt2 = sp.tensorcontraction(Pt2, (1, 2)) - # print("Pt2_shape = " + str(Pt2.shape)) - - Pt3 = sp.tensorproduct(FU, U) - # print("Pt3_shape = " + str(Pt3.shape)) - Pt3 = sp.tensorcontraction(Pt3, (1, 2)) - # print("Pt3_shape = " + str(Pt3.shape)) - - Pt4 = FC - - Pt1 = sp.simplify(Pt1) - Pt2 = sp.simplify(Pt2) - Pt3 = sp.simplify(Pt3) - Pt4 = sp.simplify(Pt4) - soma = Pt1 + Pt2 + Pt3 + Pt4 - return sp.simplify(soma) - - -def LDLFactorization(A): - n, n = A.shape - - L = [] - D = [] - for i in range(n): - D.append(0) - L.append([]) - for j in range(n): - L[i].append(0) - L[i][i] = 1 - - D[0] = A[0, 0] - for i in range(n): - for j in range(i): - soma = 0 - for k in range(j): - soma += L[i][k] * L[j][k] * D[k] - L[i][j] = (A[i][j] - soma) / D[j] - L[i][j] = sp.expand(L[i][j]) - L[i][j] = sp.simplify(L[i][j]) - soma = 0 - for j in range(i): - soma += L[i][j]**2 * D[j] - D[i] = A[i, i] - soma - D[i] = sp.expand(D[i]) - D[i] = sp.simplify(D[i]) - return L, D diff --git a/src/rbdyn/translation.py b/src/rbdyn/translation.py deleted file mode 100644 index 832a73d..0000000 --- a/src/rbdyn/translation.py +++ /dev/null @@ -1,14 +0,0 @@ - -import numpy as np -from __classes__ import TranslationClass -from __validation__ import ValidationTranslation - -class Translation(TranslationClass): - - def __init__(self, translation): - ValidationTranslation(translation) - if translation is None: - self._t = np.zeros(3) - - def __str__(self): - return str(self._t) diff --git a/src/solveRungeKutta.py b/src/solveRungeKutta.py deleted file mode 100644 index 76ca5ff..0000000 --- a/src/solveRungeKutta.py +++ /dev/null @@ -1,77 +0,0 @@ - -import sympy as sp -import numpy as np -import time - -# def f(t, w, Mexp, Fexp): -# n = len(w) // 2 -# U0 = w[:n] -# U0_ = w[n:] -# Mexp0 = Mexp(U0) -# Mexp0 = np.array(Mexp0) -# Fexp0 = Fexp(t, U0, U0_) -# Fexp0 = np.array(Fexp0) -# Rexp0 = np.linalg.solve(Mexp0, Fexp0) -# U0__ = Rexp0[:n] -# w1 = np.zeros(2 * n) -# w1[:n] = U0_ -# w1[n:] = U0__ -# return w1 - - -def f(t, w, Rexp): - n = len(w) // 2 - U0 = w[:n] - U0_ = w[n:] - Rexp0 = Rexp(t, U0, U0_) - U0__ = Rexp0[:n] - w1 = np.zeros(2 * n) - w1[:n] = U0_ - w1[n:] = U0__ - return w1 - - -def RungeKutta(U0, U0_, Ttotal, divisions, Rexp): - # U0 = np.array(U0, dtype=np.float64) - # U0_ = np.array(U0, dtype=np.float64) - - h = Ttotal / divisions # The step size - n = len(U0) - - t = np.linspace(0, Ttotal, divisions + 1) - u = np.zeros((divisions + 1, n)) - u_ = np.zeros((divisions + 1, n)) - u__ = np.zeros((divisions + 1, n)) - - # print("____________") - # print(type(U0)) - # print(type(U0_)) - - w0 = np.concatenate((U0, U0_)) - w0_ = f(t, w0, Rexp) - begin = time.process_time() - u[0] = U0 - u_[0] = U0_ - u__[0] = w0_[n:] - for i in range(divisions): - k1 = h * w0_ - k2 = h * f(t[i] + h / 2, w0 + h * k1 / 2, Rexp) - k3 = h * f(t[i] + h / 2, w0 + h * k2 / 2, Rexp) - k4 = h * f(t[i] + h, w0 + h * k3, Rexp) - dw = (k1 + 2 * k2 + 2 * k3 + k4) / 6 - # print("type = " + str(type(dw))) - # print("type = " + str(type(w0))) - # print("dw = " + str(dw)) - # print("w0 = " + str(w0)) - w0 += dw - w0_ = f(t[i + 1], w0, Rexp) - if i == divisions // 999: - end = time.process_time() - DeltaT = (end - begin) * 1000 / divisions - TotalT = divisions * DeltaT - print("Estimated time to solve Runge Kutta: " + str(TotalT) + " s") - u[i + 1] = w0[:n] - u_[i + 1] = w0[n:] - u__[i + 1] = w0_[n:] - - return t, u, u_, u__ diff --git a/src/vibrations.py b/src/vibrations.py deleted file mode 100644 index d4b4bb7..0000000 --- a/src/vibrations.py +++ /dev/null @@ -1,38 +0,0 @@ - -import sympy as sp - - -def linearize(M, U, U0): - n = len(U) - if isinstance(M, sp.Expr): - for i in range(n): - # dM = sp.diff(M, U[i]) - # ddM = sp.diff(dM, U[i]) - M = M.subs(U[i], U0[i]) # + dM.subs(U[i], U0[i]) * \ - # (U[i] - U0[i]) # + ddM.subs(U[i], U0[i]) * (U[i] - U0[i])**2 / 2 - elif type(M) == list: - for i in range(n): - M[i] = linearize(M[i], U, U0) - elif type(M) == int or type(M) == float: - return 0 - else: - raise Exception("Not expected get here. Type = " + str(type(M))) - return M - - -def get_vibrationmodules(K, M): - """ - We suppose that K and M doesn't depend of the state vector U - """ - # caracteristic polynominal: - w2 = sp.symbols("w2") - K = sp.Matrix(K) - M = sp.Matrix(M) - Minv = M.inv() - Mat = Minv * K - # polynominal = Mat.charpoly(w2) - # print("polynominal = " + str(polynominal)) - # co = polynominal.all_coeffs() - # print("co = " + str(co)) - eigen = Mat.eigenvals() - return eigen From 18e73d4f1b239a74f6bcf9c3b84d35313b3d19e6 Mon Sep 17 00:00:00 2001 From: Carlos Adir Date: Sun, 14 Nov 2021 23:25:12 +0100 Subject: [PATCH 3/4] Remove no old exemples --- examples/example1.py | 56 ----------------- examples/example2.py | 82 ------------------------ examples/example3.py | 84 ------------------------- examples/example4.py | 79 ----------------------- examples/example5.py | 74 ---------------------- examples/example6.py | 146 ------------------------------------------- examples/example7.py | 135 --------------------------------------- examples/example8.py | 83 ------------------------ 8 files changed, 739 deletions(-) delete mode 100644 examples/example1.py delete mode 100644 examples/example2.py delete mode 100644 examples/example3.py delete mode 100644 examples/example4.py delete mode 100644 examples/example5.py delete mode 100644 examples/example6.py delete mode 100644 examples/example7.py delete mode 100644 examples/example8.py diff --git a/examples/example1.py b/examples/example1.py deleted file mode 100644 index 799247d..0000000 --- a/examples/example1.py +++ /dev/null @@ -1,56 +0,0 @@ -import numpy as np -import sympy as sp -import sys -sys.path.append("../src/") -from frames import FrameReference -from objet import Objet - - -sp.init_printing(use_unicode=True) -t = sp.symbols("t", real=True) - -if __name__ == "__main__": - - ########################################################################### - # Definition of the variables # - ########################################################################### - l = sp.symbols("l", real=True, positive=True) - x = sp.Function("x")(t) - y = sp.Function("y")(t) - theta = sp.Function("theta")(t) - - ########################################################################### - # Definition of the Reference Frames # - ########################################################################### - R0 = FrameReference() # Inertial frame of reference - R1 = FrameReference(base=R0, translation=(x, y, 0)) - R2 = FrameReference(base=R1, rotation=(theta, "z")) - - print(R0) - print(R1) - print(R2) - - ########################################################################### - # Bar calculations # - ########################################################################### - if 1: - mass_bar = sp.symbols("m") - # CM_bar = (0, 0, 0) - II_bar = np.array([[0, 0, 0], - [0, 1, 0], - [0, 0, 1]]) - II_bar = II_bar * sp.Rational(1, 12) * mass_bar * l**2 - - bar = Objet(base=R2, name="bar") - bar.set_mass(mass_bar) - # bar.set_CM(CM_bar) - bar.set_II(II_bar) - - E = bar.get_energie_cinetique(R0) - if 1: # Print informations - print("########################") - print("# Bar #") - print("########################") - print("E = " + str(E)) - bar.print_cinematique_data(R1) - bar.print_cinematique_data(R0) diff --git a/examples/example2.py b/examples/example2.py deleted file mode 100644 index 0cd27dc..0000000 --- a/examples/example2.py +++ /dev/null @@ -1,82 +0,0 @@ - -import numpy as np -import sympy as sp -import sys -sys.path.append("../src/") -from frames import FrameReference -from objet import Objet - -sp.init_printing(use_unicode=True) -t = sp.symbols("t", real=True) - -if __name__ == "__main__": - - ########################################################################### - # Definition of the variables # - ########################################################################### - M, L, a, m = sp.symbols("M L a m", real=True, positive=True) - rho = sp.Function("rho")(t) - phi = sp.Function("phi")(t) - theta = sp.Function("theta")(t) - - ########################################################################### - # Definition of the Reference Frames # - ########################################################################### - R0 = FrameReference() - R1 = FrameReference(R0, rotation=(phi, (0, 0, 1))) - R2 = FrameReference(R1, translation=(rho, 0, 0), - rotation=(theta, (1, 0, 0))) - print(R0) - print(R1) - print(R2) - - ########################################################################### - # Bar calculations # - ########################################################################### - if 1: - mass_bar = M - CM_bar = sp.Rational(1, 2) * np.array([L, 0, 0]) - II_bar = np.array([[0, 0, 0], - [0, 1, 0], - [0, 0, 1]]) - II_bar = II_bar * sp.Rational(1, 3) * M * L**2 - - bar = Objet(base=R1, name="bar") - bar.set_mass(mass_bar) - bar.set_CM(CM_bar) - bar.set_II(II_bar) - if 1: # Print informations - print("########################") - print("# Bar #") - print("########################") - # E = bar.get_energie_cinetique(R0) - # print("E = " + str(E)) - bar.print_cinematique_data(R1) - bar.print_cinematique_data(R0) - - ########################################################################### - # Plate calculations # - ########################################################################### - if 1: - - mass_plate = m - CM_plate = (0, a, 0) - II_plate = np.array([[1, 0, 0], - [0, 2, 0], - [0, 0, 1]]) - II_plate = II_plate * sp.Rational(1, 3) * m * a**2 - - plate = Objet(base=R2, name="plate") - plate.set_mass(mass_plate) - plate.set_CM(CM_plate) - plate.set_II(II_plate) - - # E = plate.get_energie_cinetique(R0) - if 1: # Print informations - print("########################") - print("# Plaque #") - print("########################") - # print("E = " + str(E)) - plate.print_cinematique_data(R2) - plate.print_cinematique_data(R1) - plate.print_cinematique_data(R0) diff --git a/examples/example3.py b/examples/example3.py deleted file mode 100644 index 99d4ffe..0000000 --- a/examples/example3.py +++ /dev/null @@ -1,84 +0,0 @@ - -import numpy as np -import sympy as sp -import sys -sys.path.append("../src/") -from frames import FrameReference -from objet import Objet - -sp.init_printing(use_unicode=True) -t = sp.symbols("t", real=True) - -if __name__ == "__main__": - - ########################################################################### - # Definition of the variables # - ########################################################################### - l, a, g, m, MB, k = sp.symbols("l a g m M_{B} k") - - b = sp.Function("b")(t) - theta1 = sp.Function("t1")(t) - theta2 = sp.Function("t2")(t) - theta3 = sp.Function("t3")(t) - - ########################################################################### - # Definition of the Reference Frames # - ########################################################################### - R0 = FrameReference() - R1 = FrameReference(R0, translation=(b, 0, 0)) - - R2 = FrameReference(R1, translation=(-l, 0, 0), - rotation=(theta1 - sp.pi / 2, (0, 0, 1))) - R3 = FrameReference(R2, translation=(a, 0, 0)) - - R4 = FrameReference(R1, rotation=(theta2 - sp.pi / 2, (0, 0, 1))) - R5 = FrameReference(R4, translation=(a, 0, 0)) - - R6 = FrameReference(R1, translation=(l, 0, 0), - rotation=(theta3 - sp.pi / 2, (0, 0, 1))) - R7 = FrameReference(R6, translation=(a, 0, 0)) - - Corpo_MB = Objet(R1, "Corpo MB") - Corpo_MB.set_mass(MB) - Corpo_P1 = Objet(R3, "Corpo P1") - Corpo_P1.set_mass(m) - Corpo_P2 = Objet(R5, "Corpo P2") - Corpo_P2.set_mass(m) - Corpo_P3 = Objet(R7, "Corpo P3") - Corpo_P3.set_mass(m) - - # Corpo_MB.calcule_elements_speed(R0) - # Corpo_P1.calcule_elements_speed(R0) - # Corpo_P2.calcule_elements_speed(R0) - # Corpo_P3.calcule_elements_speed(R0) - - # Corpo_P1.print_cinematique_data(R0) - - Energ = [] - E = Corpo_MB.get_energie_cinetique(R0) - Energ.append(E) - print("Gotten Energie1") - E = Corpo_P1.get_energie_cinetique(R0) - Energ.append(E) - print("Gotten Energie2") - E = Corpo_P2.get_energie_cinetique(R0) - Energ.append(E) - print("Gotten Energie3") - E = Corpo_P3.get_energie_cinetique(R0) - Energ.append(E) - print("Gotten Energie4") - # Corpo_MB.print_all_data() - # Corpo_P1.print_all_data() - # Corpo_P2.print_all_data() - # Corpo_P3.print_all_data() - - Etotal = 0 - for i, E in enumerate(Energ): - Etotal += E - - Etotal = sp.expand(Etotal) - Etotal = sp.simplify(Etotal) - Etotal = sp.factor(Etotal) - - print("Energie totale: ") - print(Etotal) diff --git a/examples/example4.py b/examples/example4.py deleted file mode 100644 index 4818a44..0000000 --- a/examples/example4.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -import sympy as sp -import numpy as np -import sys -sys.path.append("../src/") -from lagrange import get_FunctionsExp - -if __name__ == "__main__": - t = sp.symbols("t") - - x = sp.Function("x")(t) - y = sp.Function("y")(t) - q = sp.Function("q")(t) - U = [x, y, q] - - x_ = sp.diff(x, t) - y_ = sp.diff(y, t) - q_ = sp.diff(q, t) - U_ = [x_, y_, q_] - - # Problem Data: - I0 = 1.3e-2 # kg*m^2 - m2 = 0.44 # kg - m3 = 0.470 # kg - a = 0.045 # m - l = 0.145 # m - grav = 0 # m/s^2 - # Force applied in the system - # is a function of t, U and U_ - P = (0, 0, 0) - # P(t, U, U_) - - g = (x**2 + y**2 - a**2, - y**2 + q**2 - l**2) - - t0 = 0 - U0 = (a, 0, l) - U0_ = (0, 1, 0) - - m1 = I0 / a**2 - M11 = m1 + m2 + m3 - M22 = m1 + m2 / 3 - M33 = m2 / 3 + m3 - M13 = m2 / 2 + m3 - - Ep = 0 - Ec = 0 - - # M11, M22, M33, M13 = sp.symbols("M11 M22 M33 M13") - Ec += M11 * x_**2 / 2 - Ec += M22 * y_**2 / 2 - Ec += M33 * q_**2 / 2 - Ec += M13 * x_ * q_ - - Ep += m2 * y * grav / 2 - - Mexp, Fexp = get_FunctionsExp(Ec, Ep, U, g, P) - print("Mexp = ") - print(Mexp) - print("Fexp = ") - print(Fexp) - Mexp = sp.lambdify([U], Mexp, "numpy") - Fexp = sp.lambdify([t, U, U_], Fexp, "numpy") - - Mexp0 = Mexp(U0) - Fexp0 = Fexp(t0, U0, U0_) - Mexp0 = np.array(Mexp0) - Fexp0 = np.array(Fexp0) - Uexp0 = np.linalg.solve(Mexp0, Fexp0) - U0__ = Uexp0[:len(U)] - - print("Mexp0 = " + str(type(Mexp0)) + " - shape = " + str(Mexp0.shape)) - print(Mexp0) - print("Fexp0 = " + str(type(Fexp0)) + " - shape = " + str(Fexp0.shape)) - print(Fexp0) - print("Uexp0 = " + str(type(Uexp0)) + " - shape = " + str(Uexp0.shape)) - print(Uexp0) - print("U0__ = " + str(type(U0__)) + " - shape = " + str(U0__.shape)) - print(U0__) diff --git a/examples/example5.py b/examples/example5.py deleted file mode 100644 index 9af1185..0000000 --- a/examples/example5.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -import sympy as sp -import numpy as np -import sys -sys.path.append("../src/") -from lagrange import get_FunctionsExp - -if __name__ == "__main__": - t = sp.symbols("t") - - theta = sp.Function("theta")(t) - beta = sp.Function("beta")(t) - p = sp.Function("p")(t) - U = [theta, beta, p] - - theta_ = sp.diff(theta, t) - beta_ = sp.diff(beta, t) - p_ = sp.diff(p, t) - U_ = [theta_, beta_, p_] - - # Problem Data - I0 = 1.3e-2 # kg*m^2 - m2 = 0.44 # kg - m3 = 0.470 # kg - a = 0.045 # m - l = 0.145 # m - grav = 0 # m/s^2 - P = (0, 0, 0) - - g = [a * sp.sin(theta) + l * sp.sin(beta), - p - a * sp.cos(theta) - l * sp.cos(beta)] - - t0 = 0 - U0 = [0, 0, 0] # Initial positionating of each variable - U0_ = [1, 0, 0] # Initial speed of each variable - - M11 = I0 + m2 * a**2 - M22 = m2 * l**2 / 3 - M33 = m3 - M12 = m2 * a * l / 2 - - Ec = 0 - Ep = 0 - - Ec += M11 * theta_**2 / 2 - Ec += M22 * beta_**2 / 2 - Ec += M33 * p**2 / 2 - Ec += M12 * theta_ * beta_ * sp.cos(theta - beta) - - Ep += m2 * a * sp.sin(theta) / 2 - - Mexp, Fexp = get_FunctionsExp(Ec, Ep, U, g, P) - print("Mexp = ") - print(Mexp) - print("Fexp = ") - print(Fexp) - Mexp = sp.lambdify([U], Mexp, "numpy") - Fexp = sp.lambdify([t, U, U_], Fexp, "numpy") - - Mexp0 = Mexp(U0) - Fexp0 = Fexp(t0, U0, U0_) - Mexp0 = np.array(Mexp0) - Fexp0 = np.array(Fexp0) - Uexp0 = np.linalg.solve(Mexp0, Fexp0) - U0__ = Uexp0[:len(U)] - - print("Mexp0 = " + str(type(Mexp0)) + " - shape = " + str(Mexp0.shape)) - print(Mexp0) - print("Fexp0 = " + str(type(Fexp0)) + " - shape = " + str(Fexp0.shape)) - print(Fexp0) - print("Uexp0 = " + str(type(Uexp0)) + " - shape = " + str(Uexp0.shape)) - print(Uexp0) - print("U0__ = " + str(type(U0__)) + " - shape = " + str(U0__.shape)) - print(U0__) diff --git a/examples/example6.py b/examples/example6.py deleted file mode 100644 index 7b61a64..0000000 --- a/examples/example6.py +++ /dev/null @@ -1,146 +0,0 @@ -# -*- coding: utf-8 -*- - -import sympy as sp -import numpy as np -import time -import matplotlib.pyplot as plt -import sys -sys.path.append("../src/") -from lagrange import get_FunctionsExp, get_Rexp -from solveRungeKutta import RungeKutta - - -if __name__ == "__main__": - t = sp.symbols("t") - - x = sp.Function("x")(t) - y = sp.Function("y")(t) - q = sp.Function("q")(t) - U = [x, y, q] - - x_ = sp.diff(x, t) - y_ = sp.diff(y, t) - q_ = sp.diff(q, t) - U_ = [x_, y_, q_] - - # Problem Data: - I0 = 1.3e-2 # kg*m^2 - m2 = 0.44 # kg - m3 = 0.470 # kg - a = 0.045 # m - l = 0.145 # m - grav = 0 # m/s^2 - # Force applied in the system - # is a function of t, U and U_ - P = (0, 0, 0) - # P(t, U, U_) - Ttotal = 10 - dt = 0.001 - divisions = int((Ttotal / dt)) + 1 - - # a, l = sp.symbols("a l") - - g = (x**2 + y**2 - a**2, - y**2 + q**2 - l**2) - - t0 = 0 - - m1 = I0 / a**2 - M11 = m1 + m2 + m3 - M22 = m1 + m2 / 3 - M33 = m2 / 3 + m3 - M13 = m2 / 2 + m3 - - Ep = 0 - Ec = 0 - - M12 = 0 - M23 = 0 - # M12, M13, M23 = sp.symbols("M12 M13 M23") - # M11, M22, M33 = sp.symbols("M11 M22 M33") - Ec += M11 * x_**2 / 2 - Ec += M22 * y_**2 / 2 - Ec += M33 * q_**2 / 2 - Ec += M13 * x_ * q_ - Ec += M12 * x_ * y_ - Ec += M23 * y_ * q_ - - # Ep += m2 * y * grav / 2 - - start = time.process_time() - # Mexp, Fexp = get_FunctionsExp(Ec, Ep, U, g, P) - Mexp, Fexp = get_FunctionsExp(Ec, Ep, U, g, P) - time1 = time.process_time() - print("Got Mexp and Fexp") - print(" Time = " + str(time1 - start) + " s") - Rexp = get_Rexp(Mexp, Fexp) - Rexp = sp.lambdify([t, U, U_], Rexp, "numpy") - time2 = time.process_time() - print("Got Rexp") - print(" Time = " + str(time2 - time1) + " s") - - if 1: # Initial Conditions - theta0 = -np.pi / 2 - theta0_ = 2 * np.pi - x0 = a * np.cos(theta0) - y0 = a * np.sin(theta0) - beta0 = np.arcsin(-y0 / l) - q0 = l * np.cos(beta0) - x0_ = -a * np.sin(theta0) * theta0_ - y0_ = a * np.cos(theta0) * theta0_ - beta0_ = -a * theta0_ * np.cos(theta0) / (l * np.cos(beta0)) - q0_ = -l * np.sin(beta0) * beta0_ - - U0 = (x0, y0, q0) - U0_ = (x0_, y0_, q0_) - time3 = time.process_time() - print("Set initial conditions") - print(" Time = " + str(time3 - time2) + " s") - - t, u, u_, u__ = RungeKutta(U0, U0_, Ttotal, divisions, Rexp) - end = time.process_time() - print("Runge Kutta solved") - print(" Time = " + str(end - time3) + " s") - - Xvalues = u[:, 0] - Yvalues = u[:, 1] - Qvalues = u[:, 2] - - plt.figure() - plt.plot(t, Xvalues, color="b", label=r"$x$") - plt.plot(t, Yvalues, color="r", label=r"$y$") - plt.plot(t, Qvalues, color="g", label=r"$q$") - plt.title("Values of solved system") - plt.legend() - - g_ = [] - for i in range(len(g)): - g_.append(sp.derive_by_array(g[i], U)) - g = sp.lambdify([U], g, "numpy") - g_ = sp.lambdify([U], g_, "numpy") - - g1 = np.zeros(divisions + 1) - g2 = np.zeros(divisions + 1) - for i in range(divisions + 1): - gi = g(u[i]) - g1[i] = gi[0] - g2[i] = gi[1] - plt.figure() - plt.plot(t, g1, color="b", label=r"$g_1$") - plt.plot(t, g2, color="r", label=r"$g_2$") - plt.legend() - plt.title("Equality constraints functions") - - g1_ = np.zeros(divisions + 1) - g2_ = np.zeros(divisions + 1) - for i in range(divisions + 1): - gi_ = g_(u[i]) - gi_ = np.dot(gi_, u_[i]) - g1_[i] = gi_[0] - g2_[i] = gi_[1] - plt.figure() - plt.plot(t, g1_, color="b", label=r"$g_{1}'$") - plt.plot(t, g2_, color="r", label=r"$g_{2}'$") - plt.legend() - plt.title("Derivative of equality constraints") - plt.show() diff --git a/examples/example7.py b/examples/example7.py deleted file mode 100644 index 5d9eb5d..0000000 --- a/examples/example7.py +++ /dev/null @@ -1,135 +0,0 @@ - -import sympy as sp -import numpy as np -import time -import matplotlib.pyplot as plt -import sys -sys.path.append("../src/") -from lagrange import get_FunctionsExp, get_Rexp -from solveRungeKutta import RungeKutta - - -if __name__ == "__main__": - t = sp.symbols("t") - - theta = sp.Function("theta")(t) - beta = sp.Function("beta")(t) - p = sp.Function("p")(t) - U = [theta, beta, p] - theta_ = sp.diff(theta, t) - beta_ = sp.diff(beta, t) - p_ = sp.diff(p, t) - U_ = [theta_, beta_, p_] - - # Problem Data - I0 = 1.3e-2 # kg*m^2 - m2 = 0.44 # kg - m3 = 0.470 # kg - a = 0.045 # m - l = 0.145 # m - grav = 0 # m/s^2 - - g = [a * sp.sin(theta) + l * sp.sin(beta), - p - a * sp.cos(theta) - l * sp.cos(beta)] - - t0 = 0 - P = (0, 0, 0) - Ttotal = 10 - dt = 0.001 - divisions = int((Ttotal / dt)) + 1 - - M11 = I0 + m2 * a**2 - M22 = m2 * l**2 / 3 - M33 = m3 - M12 = m2 * a * l / 2 - - Ec = 0 - Ep = 0 - - Ec += M11 * theta_**2 / 2 - Ec += M22 * beta_**2 / 2 - Ec += M33 * p**2 / 2 - Ec += M12 * theta_ * beta_ * sp.cos(theta - beta) - - Ep += m2 * grav * a * sp.sin(theta) / 2 - - start = time.process_time() - # Mexp, Fexp = get_FunctionsExp(Ec, Ep, U, g, P) - Mexp, Fexp = get_FunctionsExp(Ec, Ep, U, g, P) - time1 = time.process_time() - print("Got Mexp and Fexp") - print(" Time = " + str(time1 - start) + " s") - Rexp = get_Rexp(Mexp, Fexp) - Rexp = sp.lambdify([t, U, U_], Rexp, "numpy") - time2 = time.process_time() - print("Got Rexp") - print(" Time = " + str(time2 - time1) + " s") - - if 1: # Initial Conditions - theta0 = -np.pi / 2 - theta0_ = 2 * np.pi - x0 = a * np.cos(theta0) - y0 = a * np.sin(theta0) - beta0 = np.arcsin(-y0 / l) - q0 = l * np.cos(beta0) - p0 = x0 + q0 - x0_ = -a * np.sin(theta0) * theta0_ - y0_ = a * np.cos(theta0) * theta0_ - beta0_ = -a * theta0_ * np.cos(theta0) / (l * np.cos(beta0)) - q0_ = -l * np.sin(beta0) * beta0_ - p0_ = x0_ + q0_ - - U0 = (theta0, beta0, p0) - U0_ = (theta0_, beta0_, p0_) - time3 = time.process_time() - print("Set initial conditions") - print(" Time = " + str(time3 - time2) + " s") - - t, u, u_, u__ = RungeKutta(U0, U0_, Ttotal, divisions, Rexp) - end = time.process_time() - print("Runge Kutta solved") - print(" Time = " + str(end - time3) + " s") - - THETAvalues = u[:, 0] - BETAvalues = u[:, 1] - Pvalues = u[:, 2] - - plt.figure() - plt.plot(t, THETAvalues, color="b", label=r"$\theta$") - plt.plot(t, BETAvalues, color="r", label=r"$\beta$") - plt.plot(t, Pvalues, color="g", label=r"$p$") - plt.title("Values of solved system") - plt.legend() - - g_ = [] - for i in range(len(g)): - g_.append(sp.derive_by_array(g[i], U)) - g = sp.lambdify([U], g, "numpy") - g_ = sp.lambdify([U], g_, "numpy") - - g1 = np.zeros(divisions + 1) - g2 = np.zeros(divisions + 1) - for i in range(divisions + 1): - gi = g(u[i]) - g1[i] = gi[0] - g2[i] = gi[1] - plt.figure() - plt.plot(t, g1, color="b", label=r"$g_1$") - plt.plot(t, g2, color="r", label=r"$g_2$") - plt.legend() - plt.title("Equality constraints functions") - - g1_ = np.zeros(divisions + 1) - g2_ = np.zeros(divisions + 1) - for i in range(divisions + 1): - gi_ = g_(u[i]) - gi_ = np.dot(gi_, u_[i]) - g1_[i] = gi_[0] - g2_[i] = gi_[1] - plt.figure() - plt.plot(t, g1_, color="b", label=r"$g_{1}'$") - plt.plot(t, g2_, color="r", label=r"$g_{2}'$") - plt.legend() - plt.title("Derivative of equality constraints") - plt.show() - plt.show() diff --git a/examples/example8.py b/examples/example8.py deleted file mode 100644 index 6c4b8e1..0000000 --- a/examples/example8.py +++ /dev/null @@ -1,83 +0,0 @@ - -import sympy as sp -import numpy as np -import sys -sys.path.append("../src/") -from lagrange import get_M, get_K -from vibrations import linearize, get_vibrationmodules - -""" -Exemple of vibrations -""" - - -if __name__ == "__main__": - t = sp.symbols("t") - - a, l0, MB, m = sp.symbols("a l0 MB m", positive=True, real=True) - grav = sp.symbols("g") # gravity - k = sp.symbols("k") # spring constant - - b = sp.Function("b")(t) - theta1 = sp.Function("theta1")(t) - theta2 = sp.Function("theta2")(t) - theta3 = sp.Function("theta3")(t) - U = [b, theta1, theta2, theta3] - - g = [] - - b_ = sp.diff(b, t) - theta1_ = sp.diff(theta1, t) - theta2_ = sp.diff(theta2, t) - theta3_ = sp.diff(theta3, t) - U_ = [b_, theta1_, theta2_, theta3_] - - Ec = 0 - Ep = 0 - - Ec += (1 / 2) * b_**2 * (MB + 3 * m) - Ec += (1 / 2) * theta1_**2 * m * a**2 - Ec += (1 / 2) * theta2_**2 * m * a**2 - Ec += (1 / 2) * theta3_**2 * m * a**2 - Ec += m * a * b_ * theta1_ - Ec += m * a * b_ * theta2_ - Ec += m * a * b_ * theta3_ - - s1 = sp.sin(theta1) - c1 = sp.cos(theta1) - s2 = sp.sin(theta2) - c2 = sp.cos(theta2) - s3 = sp.sin(theta3) - c3 = sp.cos(theta3) - - dx12 = sp.sqrt(l0**2 + 2 * l0 * a * (s2 - s1) - + a ** 2 * ((s2 - s1)**2 + (c2 - c1)**2)) - l0 - dx23 = sp.sqrt(l0**2 + 2 * l0 * a * (s3 - s2) - + a ** 2 * ((s3 - s2)**2 + (c3 - c2)**2)) - l0 - Ep += (1 / 2) * k * b**2 - Ep += (1 / 2) * k * dx12**2 - Ep += (1 / 2) * k * dx23**2 - - Ep += m * grav * a * (3 - (c1 + c2 + c3)) - - Et = Ec + Ep - - M = get_M(Ec, U_) - K = get_K(Ep, U) - - U0 = [0, 0, 0, 0] - - M = linearize(M, U, U0) - Ec = np.dot(U_, np.dot(M, U_)) / 2 - - K = linearize(K, U, U0) - Ep = np.dot(U, np.dot(K, U)) / 2 - - print("M = ") - print(M) - print("K = ") - print(K) - - eigen = get_vibrationmodules(K, M) - print("eigen = ") - print(eigen) From beddf16b16fc426804a10bb132f27a4e34ceff7f Mon Sep 17 00:00:00 2001 From: Carlos Adir Date: Sun, 14 Nov 2021 23:30:21 +0100 Subject: [PATCH 4/4] Move docs into a new branch --- README.md | 6 +++--- docs/img/biela.gif | Bin 108438 -> 0 bytes 2 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 docs/img/biela.gif diff --git a/README.md b/README.md index b066f28..82f699c 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,11 @@ We can think a RBDyn problem as: An example is a connecting rod of a motor: -biela +biela So, this library does the simulation and returns the requested values: position, forces and so on. -For more details, please see the page [RBDyn Problems][rbdynproblemlink] and our [Start Guide][startguidelink]. +For more details, please see our [Start Guide][startguidelink]. ## Requirements and use @@ -32,7 +32,7 @@ As requirements, we use Python with the following libraries: To use this library, you just need to install it using the command: ``` -pip install rbdyn +pip install compmec-rbdyn ``` Another way is clone the repository and installing it manually. diff --git a/docs/img/biela.gif b/docs/img/biela.gif deleted file mode 100644 index 0300a6ca3e3ff0de26cb1df0d07f71c0951572c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108438 zcmdSAS5#9Azpp)KIz4nmO6a{vQ9#gy-aFDEASDzfC?Fu}482%r(t8&bk=}F#1O-J6 zpojt*5D^d+5D?TQUs!9s?|%0_=i+>q`!*vZSIL-9p6CBFF*DZE_IV4I0p9^&Z*LC( z02UUOPoF+*Zf*(*3H9~$RaaNPfB#-mQgUWyhMSw)z`)?vty?7}C5efNj*gCsii*0r zx)v4|85tRIad8t96HlHziHL|892`_vR}T#h_4D)d@bJjZ&E4AlxxM?Vt*!0Bg9ir> z9&BxG-P-+?lan(#I_mE3&cnmA{o_|iNQmgUHVFxd?cJXm8XA``Uj|W3FJ8Q`w6r{V z^5pj)zrKC@W@u=5@7}%Q;^NiSRS?Czx$_f5vq;9af8N{$kr)L9h3V;OVPWB0qwjCt zygC1QDAegM_hm?+2H=n#$yKr}Xd)K36L`=(6SYBON-yLj%HzF3Sd zxKrNq#3wq{)Iat@WzUhA`lGI=b>mwS3U8#=_2!n>y9Sa)&fMZM4kn+EPbj@}tBZQn z{$xf;Lu6UENN{<;wOgvk&B=Lpa;lqjO>CTeLyDXFR4s|OJMW!}OI9&;Q_$44bMID<1`WU{{>?p#m=3FjXh7!;sVs6Fna)q5i)JA=ug0K%XdD6?X03Hki?zxKxY$LAQ`AZWH2XnST{3F&JkidLdhE!qYMny0)dntIIUPmM&hNOsE9gG-*3D|1Q=~riP^K@LZUIY4fem+*m3n&5l@J~2S8i1Hd zLlICrQd$B`f|sTHL3o8B1n0V3M}U8pYw+=sG=xOZx7z(cG%^@JkSzNwQa=gAK!n6Y zVzvYd7nDDLC76v0#tHyh6Mz8EFnC#uPi_)yizIqmVGU~B?%{?71KemnxRol8jp zE%6JvL~DQG6o=nZ4vRX<76N@bn4FMRM#O4cz7l6jakR7%0Iv$CSKA^&ac>Zp7K2DO z%+az`&|H}62^$fXU$&M>JV7lnE477+3anRdSRNqP_h(y*Rmc{X*ZtsPnlZC&us`3i zm)h9aR^oE=azq+Dul)uQ+3{x_7(y$lt$aDV^v&)XZy5JaLEX@~u@6Q+z!f z5WQI<4;I@)ll{m(`PNFbOoh6OGTwRZSs6S1uA8C?R(ULX-~i|@;!EAEgeUTSaQl8?Q{3QS;zy z!+c*ZIzaF6ES6?DdKPU!e09;_-7}9n>CchfBlp#vdp!>{xc)j*h+g~QhDeRt-H0D4 z1H6i#nO_Ll#UE2vWMdr~CzM9_vmD*UaqyCX&pfHeSsU>1RD&X}DyjHrCJ*FLJ%l1cpts?* z2=+`>);!~cfY*-o>?GqUF$lp6SOp<)6gD9$Ov{5#66)gnb9oTy)Bs~YIevVM4MK1f zJjH2N2pZ~3LLC+?+DEv5W*i040d)m(#v+?#Q8d&WP+@oA&i9TapVAIxEt5V#1W~F?*K% z7BE%oNX<#P^^(a=W2}`NculLvPueHOf&ErpeGD_3uK#?zas+ro*6gid!kfp=?Dlyh zp|37hm~p4gBdn=2nW||)PXXct;s9Ox_J&mVQxbv2R?jTK^ngf^{Y1$(LZF-fq;6hg z?U^5lQLQJg&tZ5vh{CMilTWnh5VE{pm?eY8ninBw)XOuTRmTvhTb8H4%kGc8)6dMFt~Sb@YN>8sL4v0f-{U@#rl&{PJ2d4C z#X^1C&b>u;@zVUlwYrO>m;KsCaC4<}rUE|Xw%TNHku+?0CM51)_PcM%gE!SGU4bP9zTPO{&MU)@htY~z zn*ryflr!UbwtsToS>`9n-~tm&qo)S#cf@z~n_L_DfF7^fl#1K+{_8iUxR2Bj7LPu; zDo&lN6xd8tW0wdz#hT3r+fq0h`Nh$%*#63y++nG3u4`AO5~Vk%^h7pJIY2*+iyJlS zZH<{So@{aKDQK9*%j31UmqDKO z!(HNpBz^#einPG-1F2UBN9BU%lGKIg&lEju*2s&rE0F}?d4tF^nGbHrj30`9x_~HS zIt5p8ck_X#+aMbbJMuK&IMu!IsP#g2X8WnnRjgElkB#O%;!x0K)tIh!rSFc|X1OSb z4>Q5yM@-%b4CnG?U)^}f-1)RI>}nUlMsn#ezyhT(p6}us*Of0dgsejDL$KobTr;u~ z7gFQb9M{}8C-62oLo{jb^q%{QiK0(hwt^(QaxB`|#mw@%j?ScXJ~K?PO}0)8@Az3H zweG;|a_B{!k0deZ`eFJ;9;VUaV`RUE`)rVlgs?J+>uCdfU$SOI+@Ock@cCgTAIu&sJbYtAHE_zw4w~8uC#Qf zf_t2o%JgC5=LE4t7%v)#G8D9n7rxJD^f2opY)KkH29OQ00z??9*#p*(KSxG$JKMC+ ziE168*o#MU;5_Q?0{BE0oPZJ05&Rw)|9RX{Kow-d#bXNqZdKt0lZ4fI7#t8)T>{|L z^Y|S(dabl+L1K9eRDJi7^{~cny|lenl0yy%dy(iemE^UPL=;H&)k^krNe+lkCKV(H zcO}2&$Nq0ZJmmi!@euon$AtU`@p%3d@l1VmlKuzcdHxsT!IBX*NK-1AKJXzWS(uoK zgCbz8`~?|%qL;A!@TDrGY6TfgG{*AFl0{4DAZ%mjdLX3g1|*_hQ4H~LY=n#;;=n>Z zohV6CEkdAKAuf>JRJ91jrr0pYK)lR<5D#UHk3WB~PT&=i4}}9zTn`iRNR&CYEM2Qn z6F@KfVCj}{A`yo^v`DIPL1SO_U(gn#QAl!r(F?gAY*cT6Q*z1yC4y2VWH}~lUk3;E zpeh?2O#ly~QkSJ2c~klNujso%UdXV;LLQJcwWI%zoFhV+#Kq|0bxnYHhs0VW_#hOWfBi`&GVuO8L&)H#N8V5aiTy$G%0(=Hc+Xyd#!=8E4&V?03l3YE2PK}R2;V|9vNLYmM zcgtmyG!@KA=X!n__058;i2%&+3V?wqHikIii z@oQ+kUw9eG!7|o8CVhytpaL$d!S=gjKwoUY535)aZ|&7!@SS%()w9tj=yU@w=SmHW zrvMylq;4oKm<8ulrIDCbDdiNqvkc1iB%*?n3Dq1ivA5Fp7p)U?qLn0r`VNi4NASXrL4E#j0}D z&hswZ)k6XyqBgV${8OM!QN<4UvNlse1;T$~UmUKy|hSWd}8{-#IP1{V0NcHou++wWQ%a%=0t zgA5LM7UuOQ#0MtIXrJN|Q`DrB9_kOKCN5NDnE6q z+Eopr+4d;>0{QI(MqDjhqb9V%y#QU-MXNY5DIbFqw%H1gpKY9&XlP>k0Ly%wBQS?e zX}(T!vEp`9={(+N71|WJAqjSIOW{Z`egs(j1?ZH6N)F4>XlmK{VY^ z>BX6=I^7rEhN<`iBIeYt!m1{Ws-Wby;m01&!KW8`e#&7mSMJ?_ebsz=RB~6E9J`rD zzhqH6~Wf42$kaqQ?u*9q) zqH7$LcsYkK$1Gv-xv{XE*|EX9R3W^vWblYS5-;E*!3?dsifv5ZO?lZIc+CP%%7LND zrQ$I}Fj9R(mfurNEbPin#8%1oUfBvGtjkX$TtD(O5drqOyP#*(w)1=PX8iXcZ)Dlqb)&!Y|6t@~f3z7y70{Dmk8yS#pPLj?P zuyeWKV5%OW?&7ngEv_Y);+%W}P6^3Q4&Kph*i1g7l@j5S5*3{iU62ynl@d3Va&adG z5=hnH{NKlbF8%wOPvI}kHvsHwK1T)vGXDnyp7@vM)3szU;84bYX+8lh%T#=C8^k2y z@`u;6zIh}olPOCkG)G0kuxz4K906EH2q-)*RNgOe*nQ1EdL0JRma`u?hEawI-ncp;w~ zCY+k54>vpU`X%rinMsY;OT+pC+(JPg3hWQq&cF#bh$jK00DiI9)`=*ZMsUsaLX!Vs zK>bVu&gS^P8St1KwsfBXp>s^K&{B==J_BmY|C<4$zsEBe5L*SDzSy{8AsPJ$s;P*b28n&fp`YP3v!PJGc;cseHPJUT&sTvMrK-V5pu;Jgb$h5>X*yWMpoN-*s!ID zW^*GTSt&K`a~InUzy~&OUwaCe$^LZOAmPN5>;GoJqIA!HGvM3G-Rt`dxYmon%M#i= zwsv8IEGj?ofL!JeURc`!kM(xGXmqp74`$-$M;*Re6xVy^&_;`tf+ZhJ{Etutu+k2i z970Bfe5>S_p{u*d8-84Wp2Kc?*6l}Krt)~$V}|P!^93}k;56e8Zoiq=HeZ_AW2rAr z8P%&#g*9S};HR~z(r>~JL+dpE8^Y8{vh!=1vM`@LEC7#jPJ>8lowX225PiRDO8L>t zkFV2P1;nSrW3W_~tk&pgz`I@(m@7OldzgN9YniYle9ZdQQiFO!{5hFkfADfdXHy|4 zFwI-k(sATmI67+gT*TKWTgF z7dtkhw#;L83U}|pyb?C991E}$`6D*|Yhbe2+sF~C*gq4D(8oNxEPy@3Dj25_{gNw_ zRo%)N$_(3@1RLfGi5WV6E4rQ>ai9bcS>o(2tc!QD1Gm@Ix&U&s1ec-}C@X!N^R0jE z%cGSBWCjDSDJNE?Ra!LS&}vIHiLZ0!^!Kp%cr?Bt85AgVG92zM9UMR#(wJD2Fr4DY zh%hyYl$rOPQ?}7dcd6^4^eo4YD*vm>3Y65>qoYUk~s%XL8SEor0LB*e_iE z20QNcQ4FbD;rt`we#tKiGI2QV{x-kfGa{LtYD3{6w`}vpi?*Vp?39T1%0Rd(C!)2kM z%u|CRA6=sL#I1TAfzi>eqOLt|2}N<1BZc#iFgRH3#WanEems1mTWD|H5LrW{2!wFq zDV#6h!loShGPV?yr1fz-K@n>@J*n7(74}7(p&c{rCU~G~NjzSCOXBdx(^}_x_etOc zGkC@R42&aHu24`GDr_1$%Ch;wT9n3MKmf*}N;MfVEIv4&h;d7WS(Q0IGIQmGxwdgQ zvS9}g?FJTUXTe$4@Z8#ejlR;cm;}+PHQw8staBg;(B7DPjQ+?`zKzQ}n=0n+2 zMIr{TTDn^fqp$Ij7CerwnFvpsM}~I`D1GNPH~zwDeC?Lv;~8mciZ6^?t+3>xBF;RN zxgu9&>BDmj(2qWo%48?}iGOn5zOb+D7PSgtRmwBZ?UtH$?QMGD$=@e*-YnGG zRVE+3)1A}-Hp_btcgLUAKUX~K;g!0OpI5P4TeKK)O6O#!Zs*o5nF%S}sX?>+jJj7^ ztkl4`^MRcui+(H~xS@;3eY<%lJ1c}zfy3NAwnv$3r~{s6d@cYwkFE&(KE*Zb%iyics@Rt#Hf2}ka+yd8z+;_N_>=LJGKKi zcf^V>dP(gy`Ml&p$P!;2I=k>tymW-$_7F06cqGV)Q&I5v&Dsa)ub*+s9k||o2K`FUTp!K?RwdZiMVuI~W>WH1D$NEH>n4tjAcM{3%V9!qq)V?;1HD7c zC36HNpR)jIJ}?a5V7#QS#iVWMi14c~<9eM0$YYWQ#nB8VmVFeyQF@HdNk1f>>W32a!naR0YEk;eec+o2R!Lu{euMu}pk!V;|ESh_=LZ zvi^O+kM+hcKlzuZmrQ;5mf5G4$74t39Fyl1ue$r?Y}47d-HXDvTM_JT0K%wC88Rsj zr&()m&VQ(a_zBRe8UcT2$|#E0Fm^KH_U7WJs(7@<7aVW(x6Vg@8nsGFt=Ij(Eie3HVO@)TfICHd19=Qor zJN|=*jto4+flSyy)5MDwJ92}ELE)76@hk>=f{72MrKXaC5&-_cAW;MliqHXe8h|2$ zYMNLcEy29{WK(rBa4DtoB;G?dH90ypwIDUUEA{eJ>Q(NY)J%c2Y^}6hm$ba-v;r4C z5d7cd3X`yZ4O%K#0ZoE50XC6ABgT5uF+$b z^jKx%UhT}mkf`&9GSLve@6Uw;xYW1sNlPyi2eDBpDJpL?@W^!}bw3Ad zPlBzLwu~HHf&EtwUSi~6^mZ=cpB!xOPYvZD?o6QZ|IWdcM%XG_zJh<{;L32Il97Y4 z|H{D;f8}7TH*9!62lGQGpetsc|H{Fr(C-8P&cXJW>Ho~ZJi++^`dj@7aP?5gZEA9E ze-!tE;L9eZfCKxS2nfO-S`U4MomC4tWrWd{A+$Mg;(b6y4*p^w8h5bC2~K+QxocJA zuN?g0R_5o)j7)fC>686w56% z%E-o4zJzniry)C0 z3i&a>={rVvQvQ+S1*<{t+L!N4o=gr~k6d4g{$4nD5A=$EV|C2On%O%Rz}_l9kaXr% z($?Gt$E4Wzvm;+3e#;-Cg4z7Mvu2wl#yj<7X_77qY>46w zaAmGG4D7<0(N7eu8Vx0!i}BhtByqmJF0Jv)-5g!n$$dDn3abP9Y`M5(akv0SJz{-E z_q0+6N=*CFS+q3fm}pLz9~CYXO~~}pDiTnxP1Op5EA(YPpsCu4V^pbd98qM6NCh7p zxWXhM05Lt2BExpX4S2{9b6i~_H=`H-&LfP6Hp><3RCp*;b+x$`bPm$2gTw)lS%8=V z5GzO`rq}=6VmyZmkk-Fs9)SW7Ocql`Laf2qwICf%#y{rDf%^631s=wO+#0{A4anmV zyajl;$yvc=7r-|#$lGR-h!%Qlcy6PW3aXM##`m!c(@&?vWZ3EcCMyP|+?BFMe8PAyz^ zeI^sLMi2;YF|2B@S5KE@lMvRn8r6N2et0=iXwjDYwG`eT9_=ezA6;f2i-Ri&UCxP< z;V&8b>W#tl3xF$PsGaPyo-HhQ^ktejXjz3ptX44TH3;RXK}h6*bVD{kak8ECH0MG+ z>jNv;XBn6*Rz_RXueW@df^^Cp*_dx=1QUVW&zrQPHihFn%QD3}V*1=uIBu=a*7kq? z3S>H9OM!Q-+wNqS*yI&)p}NnQf7Zr}-MKb2MdxBIKSJ3~H^qv>Y^ld7lUu!Pkn34pe;GtzmJ+#hXR( zfD#rT^13ZQts>sIso1#Ulye)c8maO2xruw3AGXpt@(bUMuR0e6PNwGc%;Xr3_K$Kc z(<1M*Sh4#}7IR!YU3N6yFYltiFJ2_wRgUg6jv?N*_lhvZcc3)`Kfu;^Puj<=*u16| zR1_JfU5uOL#wY4O5oHqmRj@%DQszRAU5;qfRD-PUMaYEa!A&>eP1UN}Fg9r^bXDlQ zXM$f0*l@_IiJER0R}*qx^{X|O1{F3=*7-+mTQP$2W$U4&@qk7(N^l^?5qLhon3jW} z>NL6#kB$#9IaN2jR`8E3S!XxD#Y}rwK#a!ji@{x2)?;E!rQ2t zl;#I$*nJ-^d2Lk$TR4O`@%4ujmRg~Q6Ohg#Qg|fi0lV&Bnfz;1RCHX3$#2gu*87>6 zx^-<-oTC&PMk8KI)p0CLH4e3X;Jn1EWu&~MZ3kq~SFqVPU)7xt)&1B$4$v_8kz?A_ zs0za-7FzeabErR8Cd7ZhmMFamt^4J^S?ooFnxb;If+C7Xpfj zu2G{9wsq^nZR3M?Z|ns-evNB)fe6my`4-KYN%ELAXB2&$rE$x_p;PZ#gYq8%Gyy?W zbdO~A0-h}sj8i)*0-0*d2)g)3|3HhtA&@WtEJ|}-a1=a`1F`v`HV;GD3UJI2jIaS? zZ;s&}!^;6k$4yCk9kB3ON< zwol}s0)HMp`nPtB_=_t!$w@bzzypvNudHBIU2;g*Y3@uw+tld1s^hqrDcB%QA;_k- zsr_FFv*-K8Oo8+&t@Ij~^t$NuhJy6QuJl_|=}kN7%>o%MS{ZFF86D9Xu>Xbj@&7n7 zeBbszsFM93subC$O8kTWq)Ltdcd8^AvdVhUE3+OUnOU)Ej3YzJ&d(7eJoXAkKVjvs zBg5$=6a}**B`d%oNy0G-G~lvdpmB@>-CR#kj>*CjNHB7*qye@ z2x{qmg@cN=P0ko7uX$+N4fl>}j)F`d;5b6&5CNb9;qkL=1?oc|v1Z{B)lPG2y=ZY# zI7nYqlzGU6nC0bozNOe!3!k}_H@d3)RHl@(d26oBUO@*SIX3Y&19pL@q>yesTS7?R zCnFE)*}Faf4P5oNPr?rzRN~{P_*3EBb;x(`GhZp|s;3mJ(rG0RRyn4)lkE405Pt

s@@S=0;jI>ft4}J_lPJ&Cg4@h+^ZK5 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

1WLIp>ii6bu5ebeO8)hgF}jDnz#LB)6?(Edx?p7 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