Autor
|
Thema: Subroutine VUAMP erstellen (1645 mal gelesen)
|
onrokchrist Mitglied
Beiträge: 10 Registriert: 23.05.2014
|
erstellt am: 22. Jul. 2014 12:08 <-- editieren / zitieren --> Unities abgeben:
Liebes Forum, ich habe zwei Fragen: 1. ich möchte mittels einer User Subroutine den Wert einer Amplitude ändern (zu 0 setzen), sobald sich ein bestimmter Knoten an einer Stelle um einen gewissen Wert verdreht. Zunächst habe ich dafür einen Sensor mit dem Namen Knoten1 definiert, der mir die Verdrehung UR1 an einem Knoten ausgibt. Leider weiß ich nicht, wie das mit den Subroutinen funktioniert. Nach einiger Recherche im Netz und in der Dokumentation bin ich so weit mit der Soubroutine (siehe Anhang). Meine Idee war den aktuellen Sensorwert unter U1rot abzuspeichern. Sobald der Absolutwert von U1rot größer als 1 wird, soll die Amplitude dann zu 0 gesetzt werden. Abaqus gibt beim Run des Jobs jedoch einfach nur zwei mal den Fehler: "Problem during compilation - Dateipfad" an. 2. Eine weitere Frage ist, was ich genau im CAE bei den Amplitudes vom Typ "User" für eine Variablenzahl eingeben muss bzw. was mir diese Zahl später sagt oder wie ich sie in der Subroutine verwende? Vielen Dank für die Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VUMAT Mitglied Student
Beiträge: 16 Registriert: 16.07.2014
|
erstellt am: 23. Jul. 2014 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für onrokchrist
Hey onrokchrist, zu 1. Ich denke der Fortranfehler kommt durch Fehler im Code. Wenn du Anweisungen über mehrere Zeilen schreibst, musst du das Fortran mit einem * (oder Zahl, &...) in der 5. Spalte mitteilen:
Code: U1rot=vGetSensorValue('Knoten1', * jSensorLookUpTable, * sensorValues)
Weiterhin verstehe ich nicht ganz die Schreibweise mit den zwei Sternen. Entweder du machst einen If-Einzeiler ohne then und End if,
Code: If(abs(U1rot).GE.1) ampValueNew=0
oder du nutzt die Langform Code: If(abs(U1rot).GE.1) then ampValueNew=0 END IF
zu 2. Du kannst in der VUAMP das Array sVars(nSvars) nutzen um beliebige eigene Werte zu speichern. Dafür musst du aber die Arraygröße nSvars vorher im CAE (oder Inputfile) definieren, da Fortran ja zu Beginn alle Arraygrößen dimensionieren muss. Wenn du sVars nicht brauchst, kannst du die Variable ja einfach auf 1 setzen. Viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
onrokchrist Mitglied
Beiträge: 10 Registriert: 23.05.2014
|
erstellt am: 04. Aug. 2014 15:38 <-- editieren / zitieren --> Unities abgeben:
Hey VUMAT, vielen dank für die wertvollen Tipps! Ich bin jetzt so weit, dass schonmal keine Fehlermeldung mehr auftritt! Es lag tatsächlich an den Leerzeichen vor den einzelnen Zeilen.... Ich stehe jetzt vor dem nächsten Problem: Ich benutze eine Amplitude Amp-1, welche ich ja zu 0 setzen möchte. Jetzt habe ich einfach mal nur ampValueNew=0.0 ohne if Abfrage hingeschrieben, aber leider wird das Ergebnis kein bischen davon beeinflusst. Gibt es dafür noch einen anderen Befehl? Ich dachte, dass ampValueNew eben genau der aktuelle Wert der Amplitude sei?! Viele Grüße und danke für die Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
onrokchrist Mitglied
Beiträge: 10 Registriert: 23.05.2014
|
erstellt am: 07. Aug. 2014 12:02 <-- editieren / zitieren --> Unities abgeben:
Ok, ich bin wieder einen Schritt weiter gekommen... Ja, man muss einmal darüber nachdenken, was man da eigentlich macht ;-) Ich muss im Interactionmodul natürlich auch die entsprechende User-Amplitude verwenden! Das heißt aber im Umkehrschluss, dass ich eine im CAE definierte Amplitude (Tabelle) nicht direkt mit einer VUAMP-Subroutine beeinflussen kann oder? Ich muss die Amplitude dann in der Subroutine definieren? Danke für die Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VUMAT Mitglied Student
Beiträge: 16 Registriert: 16.07.2014
|
erstellt am: 07. Aug. 2014 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für onrokchrist
Hey, ja so würde ich das auch verstehen. im Manual steht ja auch Zitat: [...]allows you to define the current value of an amplitude definition as a function of time;[...]
Also musst du in deiner VUAMP den genauen Zeitverlauf der Amplitude definieren und bei erreichen deines Kriteriums zu 0 setzen. Im Example Manual gibts genau ein Beispiel mit VUAMP. Dort wird auch nur die Amplitude ohne Tabelle definiert: Code:
[...] *AMPLITUDE, NAME=MOTOR_WITH_STOP_SENSOR, DEFINITION=USER, VARIABLES=2 [...]
Und anschließend einer Randbedingung zugewiesen: Code:
[...] *BOUNDARY, TYPE=VELOCITY, AMPLITUDE=MOTOR_WITH_STOP_SENSOR 90000,6,6,5.0 [...]
Viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
onrokchrist Mitglied
Beiträge: 10 Registriert: 23.05.2014
|
erstellt am: 07. Aug. 2014 14:46 <-- editieren / zitieren --> Unities abgeben:
Hi, danke für Deine Hilfe! Dieses Beispiel hab ich mir auch schon des öfteren angesehen und versuche so gut es geht analog dazu zu arbeiten. In meinem Fall wird die Amplitude jedoch im Interactionmodul bei einer sogenannten incident wave mit der Definition pressure verwendet (siehe Bild im Anhang). Bei dieser Interaction wird die Reference magnitude mit der entsprechenden Amplitude multipliziert. Wenn ich meine Amp-1 (in Tabellenform definierte Amplitude in CAE) verwende, funktioniert es. Sobald ich jedoch die Amp-2 verwende, scheint sie keine Auswirkungen zu haben (die Energie ändert sich ab 0,0015s nicht [siehe Monitor auf Bild]). Anbei noch die aus der Subroutine erstellte Textdatei. In ihr ändert sich der Amplitudenwert wie gewünscht bei 0,0015s zu 100. Danke für die Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VUMAT Mitglied Student
Beiträge: 16 Registriert: 16.07.2014
|
erstellt am: 07. Aug. 2014 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für onrokchrist
|
onrokchrist Mitglied
Beiträge: 10 Registriert: 23.05.2014
|
erstellt am: 08. Aug. 2014 17:59 <-- editieren / zitieren --> Unities abgeben:
|
onrokchrist Mitglied
Beiträge: 10 Registriert: 23.05.2014
|
erstellt am: 11. Aug. 2014 11:06 <-- editieren / zitieren --> Unities abgeben:
|
onrokchrist Mitglied
Beiträge: 10 Registriert: 23.05.2014
|
erstellt am: 11. Aug. 2014 22:25 <-- editieren / zitieren --> Unities abgeben:
|