1783x
001617
2020-01-10

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

Wenn man über die COM-Schnittstelle die Ergebnisse einer Fläche ausliest, so erhält man ein eindimensionales Feld mit allen Ergebnissen an den FE-Knoten oder Rasterpunkten. 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.

Ajustada según sy con

, resulta 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 sección, que se configuró con 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.

Sub selection_test2 ()
    
Dim line_no As Integer
Dim surface_no As Integer
Dim loadcase_no As Integer
Dim d_tol As Double
line_no = 11
surface_no = 1
loadcase_no = 1
d_tol = 0.001
    
' get interface from the opened model and lock the licence/program
Dim iModel As RFEM5.IModel2
Set iModel = GetObject(, "RFEM5.Model")
iModel.GetApplication.LockLicense
    
On Error GoTo e
    
Dim iModelData As RFEM5.IModelData2
Set iModelData = iModel.GetModelData

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.

' get line
Dim ILin As RFEM5.ILine
Set ILin = iModelData.GetLine(line_no, AtNo)
Dim lin As RFEM5.RfLine
lin = ILin.GetData
   
    
' get nodes from line
Dim n(0 To 1) As RFEM5.Node
    
Dim ints() As Integer
ints = strToIntArr(lin.NodeList)
    
Dim iNd As RFEM5.INode
Set iNd = iModelData.GetNode(ints(0), AtNo)
n(0) = iNd.GetData
Set iNd = iModelData.GetNode(ints(UBound(ints, 1)), AtNo)
n(1) = iNd.GetData
    
Set iNd = Nothing

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 ahora dados de la línea (punto inicial) y (punto final), puede configurar los primeros parámetros de la ecuación.

Dim v As RFEM5.Point3D
v.X = N(1).X - N(0).X
v.Y = N(1).Y - N(0).Y
v.Z = N(1).Z - N(0).Z
    
Dim A As RFEM5.Point3D
A.X = N(0).X
A.Y = N(0).Y
A.Z = N(0).Z
    
Dim v2 As Double
v2 = v.X ^ 2 + v.Y ^ 2 + v.Z ^ 2
    
Dim P_res As RFEM5.Point3D
Dim s As Double
Dim d As Double

Se calculan o preparan el vector de dirección

(v), el vector de apoyo (A) y el producto de escala del vector de dirección (v2). 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).

' get results in fe-nodes
Dim iCalc As ICalculation2
Set iCalc = iModel.GetCalculation
    
Dim iRes As RFEM5.IResults
Set iRes = iCalc.GetResultsInFeNodes(LoadCaseType, loadcase_no)
    
Dim surfBaStr() As RFEM5.SurfaceBasicStresses
surfBaStr = iRes.GetSurfaceBasicStresses(surface_no, AtNo)
    
' loop through stresses and calculate distance to line
Dim i As Integer
For i = 0 To UBound(surfBaStr, 1)
P_res.X = surfBaStr(i).Coordinates.X
P_res.Y = surfBaStr(i).Coordinates.Y
P_res.Z = surfBaStr(i).Coordinates.Z
' calculate factor for line equation of intersection
s = ((P_res.X-A.X)*v.X + (P_res.Y-A.Y)*v.Y + (P_res.Z-A.Z)*v.Z) / v2
        
If s <= 1 + d_tol And s >= 0 - d_tol Then
' calculate distance of intersection point and fe-node
d = ((P_res.X-(A.X+s*v.X))^2
+(P_res.Y-(A.Y+s*v.Y))^2
+(P_res.Z-(A.Z+s*v.Z))^2)^0.5
            
If (d < d_tol) Then
' here you can process the found result point
End If
End If
        
Next i

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,900,0
17,280,1
12,790.2
8,430,3
4,170,4
-0,040.5
-4,250.6
-8,510,7
-12,870,8
-17,360,9
-21,981,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.

Resumen

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