Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  DFlux-Subroutine

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  DFlux-Subroutine (1024 / mal gelesen)
Allanon
Mitglied
Student

Sehen Sie sich das Profil von Allanon an!   Senden Sie eine Private Message an Allanon  Schreiben Sie einen Gästebucheintrag für Allanon

Beiträge: 8
Registriert: 21.05.2015

erstellt am: 08. Jul. 2016 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

da ich mich neu mit den Subroutinen beschäftige, habe ich dies bezüglich noch Fragen. Ich möchte im Prinzip eine bewegte Laserquelle zu meiner Analyse hinzufügen. Diese sollte verschiedene Bewegungen machen können. Eine Bewegung wäre zum Beispiel ein Kreis mit einem bestimmten Radius, um einen gewissen Startpunkt. Leider habe ich noch Schwierigkeiten einen guten Ansatz dafür zu finden. Hätte jemand evtl. einen guten Ansatz dafür? Ist es auch möglich die Bewegung abhängig von der Zeit zu machen, wie zb.: wenn der Laser sich nur 1mm/sec bewegt?

Viel Grüße & Danke im Voraus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Mefh
Mitglied



Sehen Sie sich das Profil von Mefh an!   Senden Sie eine Private Message an Mefh  Schreiben Sie einen Gästebucheintrag für Mefh

Beiträge: 45
Registriert: 04.03.2015

erstellt am: 08. Jul. 2016 12:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Allanon 10 Unities + Antwort hilfreich

Ich würde es durchaus mit DFLUX probieren. Da man auf Zeit und Koordinaten zugreifen kann, sollten sich zeit- und ortsabhängige Wärmequellen modellieren lassen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Allanon
Mitglied
Student

Sehen Sie sich das Profil von Allanon an!   Senden Sie eine Private Message an Allanon  Schreiben Sie einen Gästebucheintrag für Allanon

Beiträge: 8
Registriert: 21.05.2015

erstellt am: 08. Jul. 2016 12:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,

Danke für die schnelle Antwort. Genau damit habe ich angefangen. Bis jetzt habe ich ganz simpel ein Rechteck modelliert. Es wäre nur schön, wenn dieses Rechteck nach einer gewissen Zeit entsteht. Also wenn der Laser sich mit einer Geschwindigkeit bewegt. Ich versteh leider noch nicht, wie man die Bewegung im Code genau beeinflussen kann. Der bisherige Code ist folgender:

Code:
      SUBROUTINE DFLUX(FLUX,SOL,KSTEP,KINC,TIME,NOEL,NPT,COORDS,
    1JLTYP,TEMP,PRESS,SNAME)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION FLUX(2),TIME(2),COORDS(3)


      integer :: A

   

      QL = 120000.d0                      !LaserPower[mW]
      R0=0.6d0                            !BEAM RADIUS [mm]
      DEPTH=0.5d0                        !PENETRATION DEPTH [mm]
      Q=(QL/(R0**2*3.1415926d0*DEPTH))    !BODY FLUX [mW/mm^3]
   
   
     

C    Startpunkt
     
      X0=0
      Y0=0 
      Z0=0
C    Quadratgröße
      A=3

      X=COORDS(1)
      Y=COORDS(2)
      Z=COORDS(3)
           
      IF(COORDS(1).LE.X0+A .AND. COORDS(1).GE.X0-A .AND. COORDS(2).EQ.Y0+A .And. Coords(3).EQ.0) THEN
      Flux(1)=Q
      Else IF(COORDS(1).LE.X0+A .AND. COORDS(1).GE.X0-A .AND. COORDS(2).EQ.Y0-A .And. Coords(3).EQ.0) THEN
      Flux(1)=Q
      Else IF(COORDS(2).LE.Y0+A .AND. COORDS(2).GE.Y0-A .AND. COORDS(1).EQ.X0+A .And. Coords(3).EQ.0) THEN
      Flux(1)=Q
      Else IF(COORDS(2).LE.Y0+A .AND. COORDS(2).GE.Y0-A .AND. COORDS(1).EQ.X0-A .And. Coords(3).EQ.0) THEN
      Flux(1)=Q
      Else
      Flux(1)=0
      End if


 

      Return
      End


Einzige Idee um eine Geschwindigkeit festlegen zu können wäre:

Code:
v=1.0

      dX=ABS(X0-Coords(1))
      dY=ABS(Y0-Coords(2))
      dX=dX + v*TIME(1)


Nur weißich leider noch nicht, wie genau ich das im kompletten Code implementieren soll.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Mefh
Mitglied



Sehen Sie sich das Profil von Mefh an!   Senden Sie eine Private Message an Mefh  Schreiben Sie einen Gästebucheintrag für Mefh

Beiträge: 45
Registriert: 04.03.2015

erstellt am: 08. Jul. 2016 13:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Allanon 10 Unities + Antwort hilfreich

Sieht gar nicht so schlecht aus, ist nur etwas ungeschickt aufgebaut:

C Berechne den Mittelpunkt des Quadrats
      x0 = vx * time(1)
      y0 = vy * time(1)

C Berechne den Abstand zum Mittelpunkt
      X=COORDS(1) - x0
      Y=COORDS(2) - y0
      Z=COORDS(3)

C Default-Wert (sollte immer zu Beginn gesetzt werden)
      Flux(1)=0

C Abfrage
      if (Z .EQ. 0)  then
        if ( (abs(X) .LT. A) .and. (abs(Y) .LT. A) ) then
            Flux(1)=Q
        end if
      end if

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Allanon
Mitglied
Student

Sehen Sie sich das Profil von Allanon an!   Senden Sie eine Private Message an Allanon  Schreiben Sie einen Gästebucheintrag für Allanon

Beiträge: 8
Registriert: 21.05.2015

erstellt am: 08. Jul. 2016 14:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für die Hilfe!

Aber es ist nicht ganz die Lösung. Ich versuche es mal simpel zu formulieren. Ich möchte im Prinzip von einem Startpunkt starten, und eine bestimmte Strecke mit einer vorgegebenen Geschwindigkeit entlang gehen. Sei es ein Kreis, eine Spirale oder ein Rechteck. Bei dir zum Beispiel wird der Inhalt des Rechteckes sofort erhitzt und das Rechteck an sich wird verschoben. Das ist leider nicht ganz die Lösung, die ich suche. Wonach ich suche, ist wie erwähnt einen Startpunkt wählen und gewisse Formen ablaufen (welche bestimmt mathematisch beschrieben werden können).
Als einstieg würde mir reichen, wenn ich einen Startpunkt auswähle und ihn in eine Richtung mit vorgegebener Geschwindigkeit laufen lasse. Ich verstehe leider noch nicht, wie ich den Verlauf des Flux(1) mit einer mathematischen Gleichung beeinflussen kann.

[Diese Nachricht wurde von Allanon am 08. Jul. 2016 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Mefh
Mitglied



Sehen Sie sich das Profil von Mefh an!   Senden Sie eine Private Message an Mefh  Schreiben Sie einen Gästebucheintrag für Mefh

Beiträge: 45
Registriert: 04.03.2015

erstellt am: 11. Jul. 2016 12:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Allanon 10 Unities + Antwort hilfreich

Da habe ich am Freitag wohl nicht ganz genau gelesen. Für solche bewegte Probleme ist die Lösung immer ähnlich: Berechne die Position (bspw. des Mittelpunkts des Beams) und berechne dann das Verhalten relativ zum Mittelpunkt.

Ausserdem habe ich noch die Tiefeninformation hinzugefügt.

C Berechne den Mittelpunkt des Beams (hier der Weg des Lasers)
      x0 = vx * time(1)
      y0 = vy * time(1)

C Berechne den Abstand zum Mittelpunkt des Beams
      X=COORDS(1) - x0
      Y=COORDS(2) - y0
      Z=COORDS(3)

C Default-Wert (sollte immer zu Beginn gesetzt werden)
      Flux(1)=0

C Abfrage
      if (Z .LT. DEPTH)  then
        if ( sqrt(x*x + y*y) < R0 ) then
            Flux(1)=Q
        end if
      end if

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Allanon
Mitglied
Student

Sehen Sie sich das Profil von Allanon an!   Senden Sie eine Private Message an Allanon  Schreiben Sie einen Gästebucheintrag für Allanon

Beiträge: 8
Registriert: 21.05.2015

erstellt am: 11. Jul. 2016 15:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke. Sieht besser aus

Habe mal versucht eine Kreisform, die mit einer Frequenz F abgelaufen wird, zu berechnen. Die Frequenz muss leider so hoch sein. Es sieht an sich gut aus, nur bin ich bei der If-Bedingung nicht sicher. Ich habe das Gefühl, dass nur die Punkte die in einem Step berechnet werden auch angestrahlt werden. Doch wenn zum Beispiel 0.01 Sekunden vergehen, muss ja eine gewisse Anzahl an Punkten bestrahl werden, da durch die Hohe Frequenz eine bestimmte Strecke abgelaufen wird.

Hier der Code:

Code:
     
SUBROUTINE DFLUX(FLUX,SOL,KSTEP,KINC,TIME,NOEL,NPT,COORDS,
    1JLTYP,TEMP,PRESS,SNAME)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION FLUX(2),TIME(2),COORDS(3)
   
      REAL, PARAMETER :: Pi = 3.1415927
 
      QL = 240000.d0                      !LaserPower[mW]
      R0 = 1                              !BEAM RADIUS [mm]
      DEPTH=0.5d0                        !PENETRATION DEPTH [mm]
      Q=(QL/(R0**2*3.1415926d0*DEPTH))    !BODY FLUX [mW/mm^3]   

C    Startpunkt
     
      X0=31
      Y0=5
      Z0=0

      X=COORDS(1)
      Y=COORDS(2)
      Z=COORDS(3)
           
C    Kreisgleichung
     
      F = 113  !Frequenz[1/s]
      R = 7    !Radius des Kreises

      x_new = anint( X0 + R*cos((2*Pi*F)*Time(1)))
      y_new = anint(Y0 + R*sin((2*Pi*F)*Time(1)))
         
      if(coords(1).EQ.x_new .And. coords(2).EQ.y_new .And. coords(3).eq.0) then
        Flux(1)=Q
      else
        Flux(1)=0
      end if
     
      Return
      End


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz