1839x
001617
2020-01-10

Selección de nudos a lo largo de una línea por medio de la interfaz COM

Si lee los resultados de una superficie por medio de la interfaz COM, obtiene un campo unidimensional con todos los resultados en los nudos de EF o puntos de rejilla. Para obtener los resultados en el borde de una superficie o a lo largo de una línea dentro de las superficies, se deben filtrar los resultados en la zona de la línea. El artículo siguiente describe una función para este paso.

Introducción teórica para el cálculo de la distancia

Para encontrar los nudos de elementos finitos que están cerca de la línea o en ella, se debe calcular la distancia del nudo a la línea. Se proporciona la línea con el punto inicial y final (N0 y N1) y el punto P cuya distancia a la línea será determinada. Una forma común de calcular esta distancia es extender un plano que atraviesa el punto P y es perpendicular a la línea recta. Para este propósito, primero se debe establecer una ecuación lineal adecuada. En este caso, se recomienda utilizar la forma del parámetro, que contiene un vector de dirección v. Puede usarlo para configurar la ecuación del plano.

Para el vector de apoyo A, se usa el punto de partida (vector de posición) de la línea y para el vector de dirección v, se usa la diferencia de los dos vectores de posición. La forma normal se usa como la ecuación plana por la razón ya mencionada.

El vector de apoyo P es el punto de resultado Pres a analizar. El vector normal es el vector de dirección de la línea recta porque el plano es ortogonal a esa línea. Antes de calcular la distancia, es necesario determinar el factor s de la línea donde el plano se cruza con la línea. Para este propósito, se reemplaza el vector de ubicación X en la ecuación del plano por la ecuación de la línea recta.

Convertido a s y comenzando con

obtenemos la siguiente ecuación.

Por lo tanto, es posible determinar el punto de intersección S utilizando la ecuación 1.


La distancia d entre S y Pres se determina por medio de la cantidad vectorial de la diferencia entre los dos.

La figura 01 muestra la representación esquemática de todos los elementos enumerados. La superficie azul es la superficie a analizar y la superficie roja representa el plano de la sección, que está definido por el punto Pres y el vector de dirección

. El factor s es solo 0,5 en la figura para que la intersección del plano y la línea esté exactamente en el centro de la línea.

Implementación del cálculo de la distancia en un programa

Una vez que las fórmulas estén disponibles, puede crear el programa correspondiente. Para la conversión se utiliza VBA en Excel. La figura 02 muestra la numeración de los elementos.

Primero, es necesaria una conexión con RFEM. Luego, obtenga la interfaz para los datos del modelo. Dado que este procedimiento ya se ha descrito en otros varios artículos (ver enlaces), no se describirá en detalle aquí. A continuación se muestra el código fuente para iniciar el programa.

  1. código.vb#

Sub selection_test2 ()

  1. Dim line_no As Integer
  2. Dim surface_no As Integer
  3. Dim loadcase_no As Integer
  4. Dim d_tol As Double
  5. line_no = 11
  6. surface_no = 1
  7. loadcase_no = 1
  8. d_tol = 0,001
  9. ' get interface from the opened model and lock the licence/program
  10. Dim iModel As RFEM5.IModel2
  11. Set iModel = GetObject(, "RFEM5.Model")
  12. iModel.GetApplication.LockLicense

On Error GoTo e

  1. Dim iModelData As RFEM5.IModelData2
  2. Establecer iModelData = iModel.GetModelData
#/code#

Antes de iniciar el programa, defina primero los parámetros variables. Estos incluyen el número de línea line_no de la línea donde quiera buscar resultados y, por supuesto, el número de superficie surface_no de la superficie donde se encuentra la línea. Además, necesita el número del caso de carga loadcase_no al que pertenecen los resultados. Dado que este es un cálculo numérico con precisión limitada, se requiere una tolerancia d_tol que especifique la distancia máxima entre la línea y el nudo. En este ejemplo, se usa una tolerancia de un milímetro.

Ya que la interfaz para los datos del modelo (IModelData) ahora está disponible, puede buscar primero la línea y, por tanto, también su punto inicial y final.

  1. código.vb#
  2. ' obtener línea
  3. Dim ILin As RFEM5.ILínea
  4. Establecer ILin = iModelData.GetLine(line_no, AtNo)
  5. Dim lin As RFEM5.RfLine
  6. lin = ILin.GetData
  7. ' obtener nudos de la línea
  8. Dim n(0 a 1) As RFEM5.Node
  9. Dim ints() como entero
  10. ints = strToIntArr(lin.NodeList)
  11. Dim iNd As RFEM5.INode
  12. Set iNd = iModelData.GetNode(ints(0), AtNo)
  13. n(0) = iNd.GetData
  14. Set iNd = iModelData.GetNode(ints(UBound(ints, 1)), AtNo)
  15. n(1) = iNd.GetData
  16. Establecer iNd = Nada
#/code#

Se obtienen tanto los nudos como la línea por separado directamente a través de su interfaz (INode o ILine). Para extraer los números de los nudos de la cadena (RfLine.NodeList), use la función strToIntArr descrita en otro artículo (ver enlaces). Convierte la cadena en un campo entero.

Con los puntos dados ahora de la línea

(punto inicial) y (Punto final) puede configurar los primeros parámetros de la ecuación.

  1. código.vb#
  2. Dim vAs RFEM5.Point3D
  3. vX = N(1).X - N(0).X
  4. vY = N(1).Y - N(0).Y
  5. vZ = N(1).Z - N(0).Z
  6. Dim A As RFEM5.Point3D
  7. AX = N(0).X
  8. AY = N(0).Y
  9. AZ = N(0).Z
  10. Dim v2 como doble
  11. v2 = vX^2 + vY^2 + vZ^2
  12. Dim P_res As RFEM5.Point3D
  13. Dim s As Double
  14. Dim d como doble
#/code#

Se convierte en el vector de dirección

(v), el vector de apoyo (A) y el producto a escala del vector de dirección (v2) está calculado o preparado. Además, también se definen las variables Pres (P_res) para el punto del resultado y s para el factor de la ecuación lineal (1).

Cálculo de la distancia en un bucle

En este ejemplo, se ha seleccionado el procesamiento de los resultados sobre la base de los nudos de elementos finitos. La comprobación de la distancia se realiza en un bucle sobre el campo de estos resultados. Primero, se deben obtener estos resultados a través de la interfaz ICalculation2 y luego en IResults. Dentro del bucle, el punto Pres se describe primero con las coordenadas del valor del resultado (para mayor claridad). Luego, puede realizar el cálculo directo de la ecuación (4). Después de calcular s, es posible verificar si el valor es menor que 0 o mayor que 1 porque estos valores se encuentran o bien fuera, o bien antes y después de la línea recta. Si un valor está dentro de este intervalo, la distancia se calcula con la ecuación (6).

  1. código.vb#
  2. ' obtener resultados en nudos fe
  3. Dim iCalc As ICalculation2
  4. Set iCalc = iModel.GetCalculation
  5. Dim iRes As RFEM5.IResults
  6. Establecer iRes = iCalc.GetResultsInFeNodes(LoadCaseType, loadcase_no)
  7. Dim surfBaStr() As RFEM5.SurfaceBasicStresses
  8. surfBaStr = iRes.GetSurfaceBasicStresses(surface_no, AtNo)
  9. ' bucle a través de las tensiones y cálculo de la distancia a la línea
  10. Dim i como entero
  11. Para i = 0 Para UBound(superficieBaStr, 1)
  12. P_res.X = surfBaStr(i).Coordinates.X
  13. P_res.Y = surfBaStr(i).Coordinates.Y
  14. P_res.Z = surfBaStr(i).Coordinates.Z
  15. ' calcula el factor para la ecuación de la línea de intersección
  16. s = ((P_res.XA.X)*vX + (P_res.YA.Y)*vY + (P_res.ZA.Z)*vZ)/v2
  17. Si s <= 1 + d_tol y s >= 0 - d_tol Entonces
  18. ' calcular la distancia del punto de intersección y el nudo fe
  19. d = ((P_res.X-(A.X+s*vX))^2
  20. +(P_res.Y-(A.Y+s*vY))^2
  21. +(P_res.Z-(A.Z+s*vZ))^2)^0,5
  22. Si (d < d_tol) Entonces
  23. ' aquí puede procesar el punto de resultados encontrado
  24. End If
  25. End If
  26. Siguiente i
#/code#

La tolerancia se aplica tanto a la comprobación del factor s como a la distancia d para que cualquier pequeña inexactitud no conduzca a la exclusión de un resultado.

Resultados del programa

Los valores encontrados por el programa se muestran en la tabla, con los valores redondeados con dos decimales.

σy+ [N/mm²] Factor s [-]
21,90 0,0
17,28 0,1
12,79 0.2
8,43 0,3
4,17 0,4
-0,04 0.5
-4,25 0.6
-8,51 0,7
-12,87 0,8
-17,36 0,9
-21,98 1,0

Como comparación, los valores del diagrama de resultados en la línea correspondiente se muestran en la Figura 03.


Es claramente evidente que los valores son los mismos y que hay una coincidencia del 100% o que todos los valores se encontraron en la línea.

Conclusión

Con la ayuda del cálculo vectorial, se ha creado un programa que puede encontrar nudos a lo largo de una línea. Con este algoritmo, también es posible buscar no solo los resultados, sino también todos los demás elementos geométricos. Esto es especialmente útil porque, por supuesto, la selección visual no es posible a través de la interfaz COM, pero sí es posible de otra manera a través de una función. Especialmente para los programas que se ejecutan completamente en segundo plano, es posible realizar una evaluación automática de resultados.


Autor

El Sr. Günthel proporciona soporte técnico para los clientes de Dlubal Software y se ocupa de sus solicitudes.

Enlaces
Descargas


;