mnspy 0.9.14__py3-none-any.whl → 0.9.16__py3-none-any.whl
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.
- mnspy/ecuaciones_diferenciales_parciales/mef/marco.py +63 -67
- mnspy/ecuaciones_diferenciales_parciales/mef/viga.py +61 -84
- {mnspy-0.9.14.dist-info → mnspy-0.9.16.dist-info}/METADATA +1 -1
- {mnspy-0.9.14.dist-info → mnspy-0.9.16.dist-info}/RECORD +7 -7
- {mnspy-0.9.14.dist-info → mnspy-0.9.16.dist-info}/WHEEL +0 -0
- {mnspy-0.9.14.dist-info → mnspy-0.9.16.dist-info}/licenses/LICENSE +0 -0
- {mnspy-0.9.14.dist-info → mnspy-0.9.16.dist-info}/top_level.txt +0 -0
|
@@ -215,28 +215,18 @@ class Marco(Elemento):
|
|
|
215
215
|
# Esto se hace aplicando un momento corrector en el nodo i y las fuerzas
|
|
216
216
|
# cortantes correspondientes en ambos nodos para mantener el equilibrio.
|
|
217
217
|
if self._nodo_j.es_rotula:
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
self.
|
|
226
|
-
self.
|
|
227
|
-
self.
|
|
228
|
-
self.
|
|
229
|
-
self.
|
|
230
|
-
self._fuerzas_i_rot[2, 0] -= m_corrector_i
|
|
231
|
-
|
|
232
|
-
self._nodo_j.grados_libertad['x'].fuerza -= -self._s * -v_corrector
|
|
233
|
-
self._fuerzas_j_rot[0, 0] -= -self._s * -v_corrector
|
|
234
|
-
self._nodo_j.grados_libertad['y'].fuerza -= self._c * -v_corrector
|
|
235
|
-
self._fuerzas_j_rot[1, 0] -= self._c * -v_corrector
|
|
236
|
-
|
|
237
|
-
# La fuerza de momento en el nodo j se anula completamente.
|
|
238
|
-
self._nodo_j.grados_libertad['eje_z'].fuerza -= m_fem_j
|
|
239
|
-
self._fuerzas_j_rot[2, 0] -= m_fem_j
|
|
218
|
+
self._nodo_i.grados_libertad['x'].fuerza -= -self._s * (-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
219
|
+
self._fuerzas_i_rot[0, 0] -= -self._s * (-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
220
|
+
self._nodo_i.grados_libertad['y'].fuerza -= self._c * (-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
221
|
+
self._fuerzas_i_rot[1, 0] -= self._c * (-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
222
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (-q * self._L ** 2 / 12)
|
|
223
|
+
self._fuerzas_i_rot[2, 0] -= 0.5 * (-q * self._L ** 2 / 12)
|
|
224
|
+
self._nodo_j.grados_libertad['x'].fuerza -= -self._s * -(-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
225
|
+
self._fuerzas_j_rot[0, 0] -= -self._s * -(-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
226
|
+
self._nodo_j.grados_libertad['y'].fuerza -= self._c * -(-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
227
|
+
self._fuerzas_j_rot[1, 0] -= self._c * -(-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
228
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -q * self._L ** 2 / 12
|
|
229
|
+
self._fuerzas_j_rot[2, 0] -= -q * self._L ** 2 / 12
|
|
240
230
|
|
|
241
231
|
def agregar_carga_trapezoidal(self, q_1: float, q_2: float):
|
|
242
232
|
"""Agrega una carga trapezoidalmente distribuida perpendicular al elemento.
|
|
@@ -273,25 +263,31 @@ class Marco(Elemento):
|
|
|
273
263
|
|
|
274
264
|
# Corrección por rótula en el nodo j
|
|
275
265
|
if self._nodo_j.es_rotula:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
self._nodo_i.grados_libertad['
|
|
282
|
-
|
|
283
|
-
self.
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
self.
|
|
287
|
-
|
|
288
|
-
self.
|
|
289
|
-
self.
|
|
290
|
-
|
|
291
|
-
self._fuerzas_j_rot[
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
self.
|
|
266
|
+
self._nodo_i.grados_libertad['x'].fuerza -= -self._s * (-q_1 * self._L ** 2 / 12 - (
|
|
267
|
+
q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
268
|
+
self._fuerzas_i_rot[0, 0] -= -self._s * (
|
|
269
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (
|
|
270
|
+
2.0 * self._L)
|
|
271
|
+
self._nodo_i.grados_libertad['y'].fuerza -= self._c * (-q_1 * self._L ** 2 / 12 - (
|
|
272
|
+
q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
273
|
+
self._fuerzas_i_rot[1, 0] -= self._c * (
|
|
274
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (
|
|
275
|
+
2.0 * self._L)
|
|
276
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (
|
|
277
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20)
|
|
278
|
+
self._fuerzas_i_rot[2, 0] -= 0.5 * (-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20)
|
|
279
|
+
self._nodo_j.grados_libertad['x'].fuerza -= -self._s * -(
|
|
280
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
281
|
+
self._fuerzas_j_rot[0, 0] -= -self._s * -(
|
|
282
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (
|
|
283
|
+
2.0 * self._L)
|
|
284
|
+
self._nodo_j.grados_libertad['y'].fuerza -= self._c * -(
|
|
285
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
286
|
+
self._fuerzas_j_rot[1, 0] -= self._c * -(
|
|
287
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (
|
|
288
|
+
2.0 * self._L)
|
|
289
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20
|
|
290
|
+
self._fuerzas_j_rot[2, 0] -= -q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20
|
|
295
291
|
|
|
296
292
|
def agregar_carga_puntual(self, p: float, a: float = None):
|
|
297
293
|
"""Agrega una carga puntual perpendicular al elemento a una distancia 'a'.
|
|
@@ -332,24 +328,25 @@ class Marco(Elemento):
|
|
|
332
328
|
|
|
333
329
|
# Corrección por rótula en el nodo j
|
|
334
330
|
if self._nodo_j.es_rotula:
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
self._nodo_i.grados_libertad['
|
|
340
|
-
|
|
341
|
-
self.
|
|
342
|
-
self.
|
|
343
|
-
self.
|
|
344
|
-
self.
|
|
345
|
-
|
|
346
|
-
self.
|
|
347
|
-
|
|
348
|
-
self._nodo_j.grados_libertad['y'].fuerza -= self._c * -
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
self.
|
|
352
|
-
self.
|
|
331
|
+
self._nodo_i.grados_libertad['x'].fuerza -= -self._s * (
|
|
332
|
+
-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (
|
|
333
|
+
2.0 * self._L)
|
|
334
|
+
self._fuerzas_i_rot[0, 0] -= -self._s * (-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
335
|
+
self._nodo_i.grados_libertad['y'].fuerza -= self._c * (-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (
|
|
336
|
+
2.0 * self._L)
|
|
337
|
+
self._fuerzas_i_rot[1, 0] -= self._c * (-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
338
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (-p * (self._L - a) * a ** 2 / self._L ** 2)
|
|
339
|
+
self._fuerzas_i_rot[2, 0] -= 0.5 * (-p * (self._L - a) * a ** 2 / self._L ** 2)
|
|
340
|
+
self._nodo_j.grados_libertad['x'].fuerza -= -self._s * -(
|
|
341
|
+
-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
342
|
+
self._fuerzas_j_rot[0, 0] -= -self._s * -(-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (
|
|
343
|
+
2.0 * self._L)
|
|
344
|
+
self._nodo_j.grados_libertad['y'].fuerza -= self._c * -(
|
|
345
|
+
-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (
|
|
346
|
+
2.0 * self._L)
|
|
347
|
+
self._fuerzas_j_rot[1, 0] -= self._c * -(-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
348
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -p * (self._L - a) * a ** 2 / self._L ** 2
|
|
349
|
+
self._fuerzas_j_rot[2, 0] -= -p * (self._L - a) * a ** 2 / self._L ** 2
|
|
353
350
|
|
|
354
351
|
def agregar_momento(self, m: float, a: float = None):
|
|
355
352
|
m *= -1.0
|
|
@@ -708,8 +705,8 @@ class Marco(Elemento):
|
|
|
708
705
|
return lista_x, lista_m, lista_p
|
|
709
706
|
|
|
710
707
|
def _obtener_arrays_angulos(self, n_puntos: int = 100):
|
|
711
|
-
x = sp.symbols('x'
|
|
712
|
-
f = self.ecuacion_de_giro()
|
|
708
|
+
x = sp.symbols('x')
|
|
709
|
+
f = self.ecuacion_de_giro()
|
|
713
710
|
x_1 = 0.0
|
|
714
711
|
x_2 = self._L
|
|
715
712
|
lista_x = np.linspace(x_1, x_2, n_puntos)
|
|
@@ -1054,12 +1051,11 @@ class Marco(Elemento):
|
|
|
1054
1051
|
else:
|
|
1055
1052
|
desplazamiento = np.hstack((desplazamiento, d_i))
|
|
1056
1053
|
b = np.array(desplazamiento).reshape(-1, 1)
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1054
|
+
# Si hay una rotula en el nodo derecho, se ajusta el ángulo
|
|
1055
|
+
if self._nodo_j.es_rotula:
|
|
1056
|
+
b[5] = (self._fuerzas_j[2] * self._L / self._E - np.matmul(np.array(
|
|
1057
|
+
[[- 6 * self._I * self._s / self._L, 6 * self._I * self._c / self._L, 2 * self._I,
|
|
1058
|
+
6 * self._I * self._s / self._L, -6 * self._I * self._c / self._L]]), b[0:5, ])) / 4 / self._I
|
|
1063
1059
|
return b
|
|
1064
1060
|
|
|
1065
1061
|
def mostrar_sistema(self, reducida: bool = False):
|
|
@@ -163,25 +163,14 @@ class Viga(Elemento):
|
|
|
163
163
|
# Esto se hace aplicando un momento corrector y las fuerzas cortantes
|
|
164
164
|
# correspondientes para mantener el equilibrio.
|
|
165
165
|
if self._nodo_j.es_rotula:
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
# Aplicar correcciones a las fuerzas nodales
|
|
176
|
-
self._nodo_i.grados_libertad['y'].fuerza += v_corrector
|
|
177
|
-
self._fuerzas_i_rot[0, 0] += v_corrector
|
|
178
|
-
self._nodo_i.grados_libertad['eje_z'].fuerza += m_carry_over_i
|
|
179
|
-
self._fuerzas_i_rot[1, 0] += m_carry_over_i
|
|
180
|
-
|
|
181
|
-
self._nodo_j.grados_libertad['y'].fuerza -= v_corrector
|
|
182
|
-
self._fuerzas_j_rot[0, 0] -= v_corrector
|
|
183
|
-
self._nodo_j.grados_libertad['eje_z'].fuerza += m_corrector
|
|
184
|
-
self._fuerzas_j_rot[1, 0] += m_corrector
|
|
166
|
+
self._nodo_i.grados_libertad['y'].fuerza -= (-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
167
|
+
self._fuerzas_i_rot[0, 0] -= (-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
168
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (-q * self._L ** 2 / 12)
|
|
169
|
+
self._fuerzas_i_rot[1, 0] -= 0.5 * (-q * self._L ** 2 / 12)
|
|
170
|
+
self._nodo_j.grados_libertad['y'].fuerza -= -(-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
171
|
+
self._fuerzas_j_rot[0, 0] -= -(-q * self._L ** 2 / 12) * 3.0 / (2.0 * self._L)
|
|
172
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -q * self._L ** 2 / 12
|
|
173
|
+
self._fuerzas_j_rot[1, 0] -= -q * self._L ** 2 / 12
|
|
185
174
|
|
|
186
175
|
def agregar_carga_trapezoidal(self, q_1: float, q_2: float):
|
|
187
176
|
"""Agrega una carga trapezoidalmente distribuida."""
|
|
@@ -199,20 +188,19 @@ class Viga(Elemento):
|
|
|
199
188
|
|
|
200
189
|
# Corrección por rótula en el nodo j
|
|
201
190
|
if self._nodo_j.es_rotula:
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
self._fuerzas_i_rot[
|
|
209
|
-
self.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
self.
|
|
214
|
-
self.
|
|
215
|
-
self._fuerzas_j_rot[1, 0] += m_corrector
|
|
191
|
+
self._nodo_i.grados_libertad['y'].fuerza -= (-q_1 * self._L ** 2 / 12 - (
|
|
192
|
+
q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
193
|
+
self._fuerzas_i_rot[0, 0] -= (-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (
|
|
194
|
+
2.0 * self._L)
|
|
195
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (
|
|
196
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20)
|
|
197
|
+
self._fuerzas_i_rot[1, 0] -= 0.5 * (-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20)
|
|
198
|
+
self._nodo_j.grados_libertad['y'].fuerza -= -(
|
|
199
|
+
-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
200
|
+
self._fuerzas_j_rot[0, 0] -= -(-q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20) * 3.0 / (
|
|
201
|
+
2.0 * self._L)
|
|
202
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20
|
|
203
|
+
self._fuerzas_j_rot[1, 0] -= -q_1 * self._L ** 2 / 12 - (q_2 - q_1) * self._L ** 2 / 20
|
|
216
204
|
|
|
217
205
|
def agregar_carga_puntual(self, p: float, a: float = None):
|
|
218
206
|
"""Agrega una carga puntual perpendicular a una distancia 'a'."""
|
|
@@ -232,20 +220,16 @@ class Viga(Elemento):
|
|
|
232
220
|
|
|
233
221
|
# Corrección por rótula en el nodo j
|
|
234
222
|
if self._nodo_j.es_rotula:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
self.
|
|
241
|
-
|
|
242
|
-
self.
|
|
243
|
-
self.
|
|
244
|
-
|
|
245
|
-
self._nodo_j.grados_libertad['y'].fuerza -= v_corrector
|
|
246
|
-
self._fuerzas_j_rot[0, 0] -= v_corrector
|
|
247
|
-
self._nodo_j.grados_libertad['eje_z'].fuerza += m_corrector
|
|
248
|
-
self._fuerzas_j_rot[1, 0] += m_corrector
|
|
223
|
+
self._nodo_i.grados_libertad['y'].fuerza -= (-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (
|
|
224
|
+
2.0 * self._L)
|
|
225
|
+
self._fuerzas_i_rot[0, 0] -= (-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
226
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (-p * (self._L - a) * a ** 2 / self._L ** 2)
|
|
227
|
+
self._fuerzas_i_rot[1, 0] -= 0.5 * (-p * (self._L - a) * a ** 2 / self._L ** 2)
|
|
228
|
+
self._nodo_j.grados_libertad['y'].fuerza -= -(-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (
|
|
229
|
+
2.0 * self._L)
|
|
230
|
+
self._fuerzas_j_rot[0, 0] -= -(-p * (self._L - a) * a ** 2 / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
231
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -p * (self._L - a) * a ** 2 / self._L ** 2
|
|
232
|
+
self._fuerzas_j_rot[1, 0] -= -p * (self._L - a) * a ** 2 / self._L ** 2
|
|
249
233
|
|
|
250
234
|
def agregar_momento(self, m: float, a: float = None):
|
|
251
235
|
"""Agrega un momento concentrado a una distancia 'a'."""
|
|
@@ -266,20 +250,16 @@ class Viga(Elemento):
|
|
|
266
250
|
|
|
267
251
|
# Corrección por rótula en el nodo j
|
|
268
252
|
if self._nodo_j.es_rotula:
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
self.
|
|
275
|
-
|
|
276
|
-
self.
|
|
277
|
-
self.
|
|
278
|
-
|
|
279
|
-
self._nodo_j.grados_libertad['y'].fuerza -= v_corrector
|
|
280
|
-
self._fuerzas_j_rot[0, 0] -= v_corrector
|
|
281
|
-
self._nodo_j.grados_libertad['eje_z'].fuerza += m_corrector
|
|
282
|
-
self._fuerzas_j_rot[1, 0] += m_corrector
|
|
253
|
+
self._nodo_i.grados_libertad['y'].fuerza -= (m * a * (2 * self._L - 3 * a) / self._L ** 2) * 3.0 / (
|
|
254
|
+
2.0 * self._L)
|
|
255
|
+
self._fuerzas_i_rot[0, 0] -= (m * a * (2 * self._L - 3 * a) / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
256
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (m * a * (2 * self._L - 3 * a) / self._L ** 2)
|
|
257
|
+
self._fuerzas_i_rot[1, 0] -= 0.5 * (m * a * (2 * self._L - 3 * a) / self._L ** 2)
|
|
258
|
+
self._nodo_j.grados_libertad['y'].fuerza -= -(m * a * (2 * self._L - 3 * a) / self._L ** 2) * 3.0 / (
|
|
259
|
+
2.0 * self._L)
|
|
260
|
+
self._fuerzas_j_rot[0, 0] -= -(m * a * (2 * self._L - 3 * a) / self._L ** 2) * 3.0 / (2.0 * self._L)
|
|
261
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= m * a * (2 * self._L - 3 * a) / self._L ** 2
|
|
262
|
+
self._fuerzas_j_rot[1, 0] -= m * a * (2 * self._L - 3 * a) / self._L ** 2
|
|
283
263
|
|
|
284
264
|
def agregar_carga_triangular_descendente(self, q: float):
|
|
285
265
|
"""Agrega una carga triangular con valor máximo en el nodo i."""
|
|
@@ -296,15 +276,14 @@ class Viga(Elemento):
|
|
|
296
276
|
|
|
297
277
|
# Corrección por rótula en el nodo j
|
|
298
278
|
if self._nodo_j.es_rotula:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
self.
|
|
305
|
-
self.
|
|
306
|
-
self.
|
|
307
|
-
self._fuerzas_i_rot[1, 0] += m_carry_over_i
|
|
279
|
+
self._nodo_i.grados_libertad['y'].fuerza -= (-q * self._L ** 2 / 30) * 3.0 / (2.0 * self._L)
|
|
280
|
+
self._fuerzas_i_rot[0, 0] -= (-q * self._L ** 2 / 30) * 3.0 / (2.0 * self._L)
|
|
281
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (-q * self._L ** 2 / 30)
|
|
282
|
+
self._fuerzas_i_rot[1, 0] -= 0.5 * (-q * self._L ** 2 / 30)
|
|
283
|
+
self._nodo_j.grados_libertad['y'].fuerza -= -(-q * self._L ** 2 / 30) * 3.0 / (2.0 * self._L)
|
|
284
|
+
self._fuerzas_j_rot[0, 0] -= -(-q * self._L ** 2 / 30) * 3.0 / (2.0 * self._L)
|
|
285
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -q * self._L ** 2 / 30
|
|
286
|
+
self._fuerzas_j_rot[1, 0] -= -q * self._L ** 2 / 30
|
|
308
287
|
|
|
309
288
|
def agregar_carga_triangular_ascendente(self, q: float):
|
|
310
289
|
"""Agrega una carga triangular con valor máximo en el nodo j."""
|
|
@@ -321,15 +300,14 @@ class Viga(Elemento):
|
|
|
321
300
|
|
|
322
301
|
# Corrección por rótula en el nodo j
|
|
323
302
|
if self._nodo_j.es_rotula:
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
self.
|
|
330
|
-
self.
|
|
331
|
-
self.
|
|
332
|
-
self._fuerzas_i_rot[1, 0] += m_carry_over_i
|
|
303
|
+
self._nodo_i.grados_libertad['y'].fuerza -= (-q * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
304
|
+
self._fuerzas_i_rot[0, 0] -= (-q * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
305
|
+
self._nodo_i.grados_libertad['eje_z'].fuerza -= 0.5 * (-q * self._L ** 2 / 20)
|
|
306
|
+
self._fuerzas_i_rot[1, 0] -= 0.5 * (-q * self._L ** 2 / 20)
|
|
307
|
+
self._nodo_j.grados_libertad['y'].fuerza -= -(-q * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
308
|
+
self._fuerzas_j_rot[0, 0] -= -(-q * self._L ** 2 / 20) * 3.0 / (2.0 * self._L)
|
|
309
|
+
self._nodo_j.grados_libertad['eje_z'].fuerza -= -q * self._L ** 2 / 20
|
|
310
|
+
self._fuerzas_j_rot[1, 0] -= -q * self._L ** 2 / 20
|
|
333
311
|
|
|
334
312
|
def _obtener_cargas(self) -> dict:
|
|
335
313
|
return self._cargas
|
|
@@ -720,11 +698,10 @@ class Viga(Elemento):
|
|
|
720
698
|
else:
|
|
721
699
|
desplazamiento = np.hstack((desplazamiento, d_i))
|
|
722
700
|
b = np.array(desplazamiento).reshape(-1, 1)
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
# sistema global y esta función solo debe recolectarlos.
|
|
701
|
+
# Si hay una rotula en el nodo derecho, se ajusta el ángulo
|
|
702
|
+
if self._nodo_j.es_rotula:
|
|
703
|
+
b[3] = (self._fuerzas_j[1] * self._L ** 3 / self._E / self._I - np.matmul(np.array(
|
|
704
|
+
[[6 * self._L, 2 * self._L ** 2, - 6 * self._L]]), b[0:3, ])) / 4 / self._L ** 2
|
|
728
705
|
return b
|
|
729
706
|
|
|
730
707
|
def __obtener_path_elemento(self, espesor: float) -> Path:
|
|
@@ -28,11 +28,11 @@ mnspy/ecuaciones_diferenciales_parciales/mef/__init__.py,sha256=-ZqVb1Pn4CGcUKL5
|
|
|
28
28
|
mnspy/ecuaciones_diferenciales_parciales/mef/armadura.py,sha256=J0Og6NCSBLcwZCsb2_tzPdZAnUfLiSO-BZ82b86GC7Q,14761
|
|
29
29
|
mnspy/ecuaciones_diferenciales_parciales/mef/barra.py,sha256=FB8dVdtRSMRAQYCjYgC8_yO8nShk8_uDBt5meHrAz9c,9867
|
|
30
30
|
mnspy/ecuaciones_diferenciales_parciales/mef/ensamble.py,sha256=U6OrhxMubrmnIKkXyfTdM9UoQcAunTqRUcfxMGWtx30,105934
|
|
31
|
-
mnspy/ecuaciones_diferenciales_parciales/mef/marco.py,sha256=
|
|
31
|
+
mnspy/ecuaciones_diferenciales_parciales/mef/marco.py,sha256=LGTZ--wfC3Bytp242aCX4iVQ4okD69tC04dIbaX8fJQ,70564
|
|
32
32
|
mnspy/ecuaciones_diferenciales_parciales/mef/mef.py,sha256=SotSyqCblPRwcnzr1j0srKA60hKuPIzIWTjXSZu3nhw,43812
|
|
33
33
|
mnspy/ecuaciones_diferenciales_parciales/mef/resorte.py,sha256=Jeq9bQjLfmIW0jkNA-ob6C27k5JGywZ1T9qLr4hMD0Q,13852
|
|
34
34
|
mnspy/ecuaciones_diferenciales_parciales/mef/triangular_cst.py,sha256=nWK1uv9F9wpE_eelfhm1LyDiW7aMnckKf0mIcuhiY7U,12094
|
|
35
|
-
mnspy/ecuaciones_diferenciales_parciales/mef/viga.py,sha256
|
|
35
|
+
mnspy/ecuaciones_diferenciales_parciales/mef/viga.py,sha256=-YNv-_XJabSmvSKGUREWhjClNd9Ip0QSa8zYNASF05s,42505
|
|
36
36
|
mnspy/ecuaciones_diferenciales_parciales/mvf/__init__.py,sha256=TDanegLPvu7-F5UYKEFdDXhXUeptbYDzPcD7N3Ozd8s,1369
|
|
37
37
|
mnspy/ecuaciones_diferenciales_parciales/mvf/mvf.py,sha256=nthYy1DeRYHEi3E_yX4GeEbAhZAdJAkZJzPEWwjkpfg,30053
|
|
38
38
|
mnspy/ecuaciones_diferenciales_parciales/mvf/volumen_finito.py,sha256=cjIenv-mMDhfPXj0uL24G0Sm9WexWAane3ni8GXvoPc,32334
|
|
@@ -63,8 +63,8 @@ mnspy/raíces/raices.py,sha256=lTjSOk84sg1VdlElmHaZSRen00zpt0jNrnFBx_SStnU,17510
|
|
|
63
63
|
mnspy/raíces/secante.py,sha256=t8-NcN-Ki8BYrh3Cf3VUjaaRLxz6qV1v5i8johKBlZs,5220
|
|
64
64
|
mnspy/raíces/secante_modificada.py,sha256=0bLgcG8K_O6Ras3vKBIQpUdDlB69tWKHbx_fE8-47SE,5105
|
|
65
65
|
mnspy/raíces/wegstein.py,sha256=23HQ6QuelMNo8S8W1fzha8ozbcy_NdsjK5XLMaH-m38,5397
|
|
66
|
-
mnspy-0.9.
|
|
67
|
-
mnspy-0.9.
|
|
68
|
-
mnspy-0.9.
|
|
69
|
-
mnspy-0.9.
|
|
70
|
-
mnspy-0.9.
|
|
66
|
+
mnspy-0.9.16.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
67
|
+
mnspy-0.9.16.dist-info/METADATA,sha256=HHpKYobl4Z5NXZj2Or0JDvX9o0m5x4CV9njoPk_LcC4,4641
|
|
68
|
+
mnspy-0.9.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
69
|
+
mnspy-0.9.16.dist-info/top_level.txt,sha256=fbooZdZwS41I8vFuAXnn5qL4_mfc1aPt_DM60ZpvtKE,6
|
|
70
|
+
mnspy-0.9.16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|