Autor
|
Thema: DFlux-Subroutine (1024 / mal gelesen)
|
Allanon Mitglied Student
Beiträge: 8 Registriert: 21.05.2015
|
erstellt am: 08. Jul. 2016 11:04 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 45 Registriert: 04.03.2015
|
erstellt am: 08. Jul. 2016 12:05 <-- editieren / zitieren --> Unities abgeben: Nur für Allanon
|
Allanon Mitglied Student
Beiträge: 8 Registriert: 21.05.2015
|
erstellt am: 08. Jul. 2016 12:19 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 45 Registriert: 04.03.2015
|
erstellt am: 08. Jul. 2016 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für Allanon
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
Beiträge: 8 Registriert: 21.05.2015
|
erstellt am: 08. Jul. 2016 14:12 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 45 Registriert: 04.03.2015
|
erstellt am: 11. Jul. 2016 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für Allanon
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
Beiträge: 8 Registriert: 21.05.2015
|
erstellt am: 11. Jul. 2016 15:08 <-- editieren / zitieren --> Unities abgeben:
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 >>)
|