Z-Koordinate eines Knotens isolieren

Hallo Sofistik Community,

ich versuche gerade die Z-Koordinate eines Knotens zu isolieren, da ich über den Satz von Pythagoras die Länge einer Abrundung bestimmen muss. Ein Knoten ist ja wie folgt aufgebaut NODE - KNOTENNUMMER - X_WERT - Y_WERT - Z_WERT
Wie schaffe ich es nun nur den Z- bzw. nur den X-Wert zu isolieren, um jenen später für eine Berechnung verwenden zu können.

Vielen Dank im Voraus

Ivan

Die Koordinaten schon existierender Knoten kann man in SOFIMSHA mit GETN auslesen.
Z. B. für den Knoten 25 mit “GETN 25[-] var Kn_Koor” (Schreibweise für Version 2020), dann sollte anschließend die Variable #KnKoor(1) den x- und #KnKoor(3) den z-Koordinatenwert beinhalten (mit GETN kann man für bekannte Koordinaten auch den zugehörigen Knoten auslesen).
Und da man (teil-)generierte Systeme mit SYST REST(art) auch nach dem Erst-Generierungslauf noch ändern kann, kann man Knotenkoordinaten prinzipiell jederzeit auslesen (Lasten usw. werden bei Systemänderungen allerdings verworfen und müssen anschließend neu aufgebracht werden).

@ragl vielen Dank für deine Hilfe. Habe jetzt versucht das ganze so umzusetzen. Bei mir hat das ganze leider noch nicht funktioniert. Ich persönlich verwende die 2018 Version und bin wie folgt vorgegangen:

Wie verwendet man GETN in Sofistik 2018:

This record is intended for special cases where it might become necessary to identify a gen-erated node. The input for this record are the coordinates and SOFiMSHA will then scan thelist of generated or specified nodes for a match. If found the node number will be saved tothe specified CADINP variable with the optional index and may be used in subsequent datarecords.

As an alternate input it is possible to request coordinates for a given node number with thefollowing syntax:
GETN number[-] VAR varname

This will copy the current coordinate values of the node number to the variablesvarname[IND+1:IND+3]. varname[IND]contains the bit pattern of the support conditions.

Technical Hint: The access from a DLL (CADINP) to data of the calling program is so difficult,that there is definitely no easier solution available like a direct access to the coordinate arraysfor that purpose.SOFiSTiK 20183-29

    1. Zuerst habe ich die Koordinaten der Knoten 102 und 103 isoliert:
      GETN 102[-] var Kn_102_Koor
      GETN 103[-] var Kn_103_Koor
    1. Anschließend wurden die neu generierten Variablen in einer Berechnung verwendet:
      (2.98*100)/(((#Kn_103_Koor(1)-#Kn_102_Koor(1))^2+(#Kn_102_Koor(3)-#Kn_103_Koor(3))^2)^0.5)

-3) Fehlermeldung:
+++++ Fehler Nr. 10141 in Programm SOF_VAR
Variable KN_103_KOOR undefiniert oder mit ungültigem Index 0
RECHENZEIT 1, TOTAL 1
DATUM 2020-08-03, 10:14:58

Wo könnte hierbei das Problem liegen?

Gr. und vielen Dank im Vorraus

Also es klappt schon, nur ist der Variablenname zumindest für diesen Fall zu lang gewählt (lt. Handbuch gehen bis zu 16 Zeichen, hier scheint aber bei der GETN-internen Weiterverarbeitung bei 8 Zeichen Schluss zu sein):
– EINGABE (mit Tests) ------------------
-prog sofimsha urs:5 Auslesen Knoten xx syst rest; let#0 2 let#0: Steuerung Ausgabeumfang interner Werte
GETN 113[-] var Kn_113; let#1 #Kn_113(1)
TXA bb: x|y|z #(#Kn_113(1),3.2) | #(#Kn_113(2),3.2) | #(#Kn_113(3),3.2) || #(1,3.2)
GETN 113[-] var Kn_113_Koor; let#1 #Kn_113_Koor(1)
TXA aa: x|y|z #(#Kn_113_Koor(1),3.2) | #(#Kn_113_Koor(2),3.2) | #(#Kn_113_Koor(3),3.2) || #(1,3.2)
TXA —
GETN 113[-] var Kn_113; let#1 #Kn_113(1)
TXA bb: x|y|z #(#Kn_113(1),3.2) | #(#Kn_113(2),3.2) | #(#Kn_113(3),3.2) || #(1,3.2)
TXA —
GETN 113[-] var Kn_113_Koo ; let#1 #Kn_113_Koo(1)
TXA ab: x|y|z #(#Kn_113_Koo(1),3.2) | #(#Kn_113_Koo(2),3.2) | #(#Kn_113_Koo(3),3.2) || #(1,3.2)
GETN 113[-] var Kn_113_K ; let#1 #Kn_113_K(1)
TXA ac: x|y|z #(#Kn_113_K(1),3.2) | #(#Kn_113_K(2),3.2) | #(#Kn_113_K(3),3.2) || #(1,3.2)
let#Kn_113_Koor(1) 999; TXA 1 #(#Kn_113_Koor(1),3)
let#Kn_113_Koo(1) 999; TXA 2 #(#Kn_113_Koo(1),3)
let#Kn_113_Ko(1) 999; TXA 3 #(#Kn_113_Ko(1),3)
let#Kn_113Koo(1) 999; TXA 4 #(#Kn_113Koo(1),3)
let#Kn_113444(1) 999; TXA 5 #(#Kn_113444(1),3)
let#Kn1134445(1) 999; TXA 6 #(#Kn1134445(1),3)
let#001134445(1) 999; TXA 7 #(#001134445(1),3) (nur Ziffern sind unzulässig)
let#aaaaaaaaa(1) 999; TXA 8 #(#aaaaaaaaa(1),3)
let#aaaa(1) 999; TXA 9 #(#aaaa(1),3)
ende

– Ausgabe (hier Bsp-Datei “sofimsh10”) --------------------------------------
SOFiMSHA - FEM EXPORT & IMPORT & GENERATION V 2018-15.1 3.08.20 Seite: 1484

  Kreisplatte mit Zylinder

  bb: x|y|z -2.47 |  2.47 |  0.00 || -2.47
  aa: x|y|z (#Kn_113_Koor(1))3.2) |  (#Kn_113_Koor(2))3.2) |  (#Kn_113_Koor(3))3.2) || -2.47
     ---
  bb: x|y|z -2.47 |  2.47 |  0.00 || -2.47
     ---
  ab: x|y|z (#Kn_113_Koo(1))3.2) |  (#Kn_113_Koo(2))3.2) |  (#Kn_113_Koo(3))3.2) || -2.47
  ac: x|y|z -2.47 |  2.47 |  0.00 || -2.47
  1 999
  2 999
  3 999
  4 999
  5 999
  6 999
  7 (#001134445(1))3) (nur Ziffern sind unzulässig)
  8 999
  9 999

– Bewertung:
“Kn_113_K” ist als Bezeichner noch zulässig, eine längere Bezeichnung macht intern manchmal ( z. B. gerade bei GETN) Problem.

@ragl vielen Dank für deine Hilfe !!!
Habe jetzt den Variablenamen verkürzt, jedoch funktioniert die Berechnung bei mir immer noch nicht.

$Isolierung der Koordinaten, damit später die Länge der Abrundung berechnet werden kann:
GETN 102[-] var Kn102
GETN 103[-] var Kn103

Berechnung:
(2.98*100)/(((#Kn103(1)-#Kn102(1))^2+(#Kn102(3)-#Kn103(3))^2)^0.5)

Fehlermeldung:
+++++ Fehler Nr. 10141 in Programm SOF_VAR
Variable KN103 undefiniert oder mit ungültigem Index 0
RECHENZEIT 2, TOTAL 2
DATUM 2020-08-03, 14:10:30

Wo könnte hierbei das Problem liegen?

Gr. und vielen Dank im Vorraus

Also bei mir klappt es. Mit der Eingabe:
GETN 112[-] VAR KN112; TXA 112: X|Y|Z #(#KN112(1),3.3) | #(#KN112(2),3.3) | #(#KN112(3),3.3)
GETN 113[-] VAR KN113; TXA 113: X|Y|Z #(#KN113(1),3.3) | #(#KN113(2),3.3) | #(#KN113(3),3.3)
LET#2 (2.98*100)/(((#KN113(1)-#KN112(1))^2+(#KN112(3)-#KN113(3))^2)^0.5); TXA **: #(2,3.3)
ergibt sich bei der Beispieldatei “sofimsh10”:
112: x|y|z 2.475 | 2.475 | 0.000
113: x|y|z -2.475 | 2.475 | 0.000
**: 60.205
Falls die gesuchten Knoten zur GETN-Zeit vorhanden sind, werden sie eigentlich auch gefunden. Dazu würde ich immer unmittelbar nach GETN eine Kontrollausgabe empfehlen (hier mit TXA …).
Sind die Knoten aber noch nicht existent (z. B. weil sie “erst ein paar Zeilen später” erzeugt werden), gibt es ggf. sehr eigenartige Fehlermeldungen.
Für Testzwecke kann man die GETN-Zeilen auch in einem nachgeschobenen, reinen Auslese-MSHA-Lauf auch erst einmal ausprobieren.


Also GETN sollte schon klappen, eine weitere Möglichkeit ist das umständlichere Auslesen mit @key (welches dann allerdings nicht nur in SOFIMSHA funktioniert).
-prog sofiload
#define Kn_Ko_auslesen Block zur Geometrieknoten-Definition auf Grundlage von Elementknoten let#CDB_IER 0 Fehlerwert CDB-Zugriff initialisiern / auf Null setzen
@key NODE Datenbanksatz mit den knotenkoordinaten öffnen let#xkor @(#Such_Kn,1); let#ykor @(#Such_Kn,2); let#zkor @(#Such_Kn,3) knotenkoordinaten des Knoten xxx
if #CDB_IER==0
TXA Knoten #(Such_Kn,5) hat die Koordinaten x| y| z|: #(xkor,8.4)|#(ykor,8.4)|#(zkor,8.4)
else
TXA Knoten #(Such_Kn,5) WURDE ANSCHEINEND NICHT GEFUNDEN. (FEHLER - Rückgabewert “CDB_IER”= #CDB_IER (anstatt 0 bei fehlerlos))
endif
#enddef Kn_Ko_auslesen

let#Such_Kn 112;
#include Kn_Ko_auslesen
let#Such_Kn 113;
#include Kn_Ko_auslesen
ende
liefert:
Knoten 112 hat die Koordinaten x| y| z|: 2.4749| 2.4749| 0.0000
Knoten 113 hat die Koordinaten x| y| z|: -2.4749| 2.4749| 0.0000

@ragl jetzt hat es bei mir mit dem GETN-Befehl geklappt. Musste noch ein STO einbauen, da ich die Variable außerhalb von SOFIMSHA verwendet habe.

Vielen Dank nochmals