Autor
|
Thema: DFLUX SNAME spezifizieren?! (1563 mal gelesen)
|
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 08. Apr. 2015 17:25 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, habe eine Diffusionsrechnung in Arbeit. Info zum Ziel & Modelle: Nutze DFLUX und teste Einstellungen (temperatur- und konzentrationsabhängige Diffusionskoeffizienten in Input, eigene Parameter für Berechnung des FLUX-Wertes) an 2D Modell mit DCAX4 sowie einfache 3D-Geometrie (Tortenstück) mit DC3D8-Elementen. Final sollen die Einstellungen in einer Rechnung mit komplexer Geometrie und hoher Elementzahl verwendet werden. Elementgröße in Diffusionsrichtung ist in 2- & 3D annähernd identisch und liegt bei 0,1mm. Problem und Fragestellung: In 2D erhalte ich gänzlich andere Werte als in 3D. Kleine Abweichungen habe ich erwartet, aber das sind Abweichungen zwischen 10 und 20%. Kennt jemand den möglichen Hintergrund? Auch unterscheiden sich in 3D die Werte aus dem Inneren und am Rand/Schnittbereich des Tortenstücks... bin davon ausgegangen, dass die Diffusion nur in das Material hinein, nicht an Randflächen wieder hinausdiffundiert - Fehler?! Daher war meine Überlegung den FLUX auch auf dem Schnittbereich festzulegen bzw. auf Null zu setzen (SURF-NoFlux). Habe es via IF-Abfrage und SNAME versucht, leider springt es aus der ersten IF-Abfrage nicht raus, sondern bleibt Null. Kann mir hier jemand bitte einen Tipp geben?! …stehe völlig auf dem Schlauch ;( Überlegung: Muss ich jede Surface-Zuweisung "_SURF-NoFlux_S2" , ... ansprechen? Hier der relevante Ausschnitte meiner DFLUX:
SUBROUTINE DFLUX(FLUX,SOL,KSTEP,KINC,TIME,NOEL,NPT,COORDS,JLTYP, TEMP,PRESS,SNAME) ........ ........ CALL GETPARTINFO(INTNUM, JTYP, CPNAME, LOCNUM, JRCD) JLTYP=0 write(*,*) CPNAME IF (SNAME .EQ. 'SURF-NoFlux') THEN P = 0.0 END IF IF (SNAME .EQ. 'SURF-DIFFUSION') THEN IF (TIME(2).LT.14640) THEN P = 0.009 END IF IF (TIME(2).GT.14640) THEN P = 0.0075 END IF END IF ........ ........ STROM = .... C--- Update H and dH/dT FLUX(1) = STROM C------------------- End of Subroutine FILM ------------------------ RETURN END Bin für jeden Rat dankbar!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 09. Apr. 2015 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für Flexi
|
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 09. Apr. 2015 10:19 <-- editieren / zitieren --> Unities abgeben:
|
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 09. Apr. 2015 17:23 <-- editieren / zitieren --> Unities abgeben:
Hallo, hat etwas gedauert, da ich zunächst eine LOAD mit NOFLUX hinzugefügt und eine neue Input geschrieben habe. Dabei sind mir leider Daten verloren gegangen, die ich, nachdem ich es endlich gecheckt hatte, noch mal einfügen musste... egal, jedenfalls klappt es immer noch nicht wie gewünscht. Habe die SNAME direkt via DFLUX ausschreiben lassen; Zielverzeichnis ist mir jedoch unbekannt… dachte Write (6,*) würde in die .dat schreiben. Hier habe ich die Namen auf gefunden, sind aber standardmäßig hinterlegt… Erhalte so folgende Surfaces: *surface, type=ELEMENT, name=ASSEMBLY_DISTFLUX-1 *surface, type=ELEMENT, name=ASSEMBLY_DISTFLUX-2 *surface, type=ELEMENT, name=ASSEMBLY_DISTFLUX-3 *surface, type=ELEMENT, name=ASSEMBLY_SURF-DIFFUSION *surface, type=ELEMENT, name=ASSEMBLY_SURF-NOFLUX In der Input wird die Diffusion via LOAD (Userdefinied) aufgebracht: ** LOADS ** ** Name: DISTFLUX-1 Type: Surface concentration flux *Dflux _DISTFLUX-1_S4, S4NU, 0. ** Name: DISTFLUX-2 Type: Surface concentration flux *Dflux _DISTFLUX-2_S3, S3NU, 0. ** Name: DISTFLUX-3 Type: Surface concentration flux *Dflux _DISTFLUX-3_S2, S2NU, 0. ** Name: NOFLUX Type: Surface concentration flux *Dflux _SURF-NOFLUX_S2, S2NU, 0. *Dflux _SURF-NOFLUX_S3, S3NU, 0. *Dflux _SURF-NOFLUX_S4, S4NU, 0. Folgende Tests für Diffusion / DISTFLUX waren nicht zielführend: 'ASSEMBLY_PROBE-1_DISTFLUX-1' 'ASSEMBLY_PROBE-1__DISTFLUX-1' 'ASSEMBLY__DISTFLUX-1' 'ASSEMBLY_DISTFLUX-1' ‘ASSEMBLY_DISTFLUX-1_S4' 'ASSEMBLY_PROBE-1_DISTFLUX-1_S4' Ausschnitt aus der Test-DFLUX.f: IF (TIME(2).GT. 0.0) THEN IF (SNAME .EQ. 'ASSEMBLY_***Testvarianten’) THEN P = 0.009 END IF IF (SNAME .EQ. 'ASSEMBLY_PROBE-1__SURF-NOFLUX_S2') THEN P = 0.0 END IF END IF
Ist es überhaupt möglich die SNAME in eine einfache IF-Abfrage zu integrieren oder benötige ich ggf. einen Platzhalter? Weiß jedenfalls nicht wo SNAME reingeschrieben wird; Log-Datei ist riesengroß, aber fast nur mit Leerzeichen besetzt... Habe zunächst negative Diffusion gehabt, sprich sinkender Elementgehalt im Bauteil - ausgehend von initial concentration = 0,002. Daher umgeschrieben in: P=-1.0 write(6,*) SNAME IF (SNAME .EQ. 'ASSEMBLY_DISTFLUX-1_S4') THE P = 0.009 END IF IF (SNAME .EQ. 'ASSEMBLY_DISTFLUX-1_S3') THEN P = 0.009 END IF IF (SNAME .EQ. 'ASSEMBLY_DISTFLUX-1_S2') THEN P = 0.009 END IF CR = P C0 = ….. STROM = 0.0 IF CR .LE. 0 THEN STROM = 0.0 CALL XIT END IF IF CR .GT. 0 THEN STROM=-beta * (C0 - CR) END IF FLUX(1) = CSTROM RETURN END Erhalte folgende Fehlermeldung: DFLUX.f:101.8: IF CR . LE. 0 THEN 1 Error: Unclassifiable statement at (1) DFLUX.f:104.11: END IF 1 Error: Expecting END SUBROUTINE statement at (1) DFLUX.f:105.7: IF CR .GT. 0 THEN 1 Error: Unclassifiable statement at (1) DFLUX.f:107.10: END IF 1 Error: Expecting END SUBROUTINE statement at (1) Abaqus Error: Problem during compilation - DFLUX.f Abaqus/Analysis exited with errors --> also folgende Fragen: Wo wird SNAME reingeschrieben? Worauf ist die Fehlermeldung voraussichtlich zurückzuführen? Viele Grüße und einen schönen Feierabend Flexi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 09. Apr. 2015 17:54 <-- editieren / zitieren --> Unities abgeben: Nur für Flexi
Du solltest den Namen nicht in der Eingabedatei anpassen, sondern in der Unterroutine. Anbei ein einfaches Beispiel für eine DLOAD. Das Prinzip ist dasselbe. Nimm die angehangene Eingabedatei und lasse ihn mit diesem Code laufen:
Code:
SUBROUTINE DLOAD(F,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS, 1 JLTYP,SNAME) C C SIMPLE PRESSURE LOAD C INCLUDE 'ABA_PARAM.INC' C DIMENSION COORDS(3),TIME(2) CHARACTER*80 SNAME DATA P_OBEN /5./ DATA P_SEITE /30./ C IF(SNAME.EQ.'ASSEMBLY_SURF-OBEN') F=P_OBEN*TIME(1) IF(SNAME.EQ.'ASSEMBLY_SURF-SEITE') F=P_SEITE*TIME(1) C IF(TIME(1).EQ.1 .AND. NPT.EQ.1) WRITE(6,*) ' LOAD APPLIED',F,'AT TIME=',TIME(1),' at element ',NOEL,' at ',SNAME C RETURN END
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 10. Apr. 2015 09:20 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, ich habe keine Namen in der Eingabedatei angepasst... das muss ein Missverständnis sein. Die Testversionen stellen Versuche dar die korrekte Eingabe der SNAME in der DFLUX.f zu treffen, so dass die lokale Zuweisung der Diffusion / des Fluxes funktioniert. Habe deine Variante getestet. Da du in der Input (block) eine DSLOAD zuweist, was verständlich ist, da wir ja SNAME in der Subroutine brauchen, habe ich DLOAD in DSLOAD umbenannt. Erhalte jedoch bei beiden Varianten Fehlermeldungen - siehe Anhang. So langsam fühle ich mich leicht begriffsstutzig... was mache ich falsch?! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 10. Apr. 2015 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für Flexi
Ich habe nochmal beide Dateien hochgeladen, falls bei einfügen des Codes hier die Formatierung Fehler bekommen hat. Deine Änderung zu DSLOAD kann ich nicht verstehen. Es gibt keine Unterroutine DSLOAD. Die Routine DLOAD kann auch mit Flächen arbeiten, so wie es mein Beispiel zeigt. Genauso ist es auch mit DFLUX. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 10. Apr. 2015 11:49 <-- editieren / zitieren --> Unities abgeben:
Hm, dachte, dass DSLOAD ne Subr. wäre - wer lesen kann... Sry. Mit exakt deiner Routine, umbenannt in DLOAD.f und dem Input block.inp erhalte ich folgende Fehlermeldung in der log-Datei: Begin Compiling Abaqus/Standard User Subroutines Fri 10 Apr 2015 11:41:00 AM CEST ABA_PARAM.INC:1.21: Included at DLOAD.f:6: implicit real*8(a-h,o-z) 1 Error: Nonstandard type declaration REAL*8 at (1) DLOAD.f:9.18: CHARACTER*80 SNAME 1 Warning: Obsolescent feature: Old-style character length at (1) Abaqus Error: Problem during compilation - DLOAD.f Abaqus/Analysis exited with errors. Bei dir läuft das fehlerfrei durch? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 10. Apr. 2015 12:24 <-- editieren / zitieren --> Unities abgeben: Nur für Flexi
|
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 10. Apr. 2015 12:55 <-- editieren / zitieren --> Unities abgeben:
Danke für den Hinweis, hatte ehrlich gesagt ne anlaysis gestartet. Ergebnis weiterhin Fehlermeldung in Log-Datei: Abaqus JOB block Abaqus 6.14-2 Abaqus License Manager checked out the following licenses: ** ** Begin Compiling Abaqus/Standard User Subroutines Fri 10 Apr 2015 12:33:25 PM CEST ABA_PARAM.INC:1.21: Included at test.f:6: implicit real*8(a-h,o-z) 1 Error: Nonstandard type declaration REAL*8 at (1) test.f:9.18: CHARACTER*80 SNAME 1 Warning: Obsolescent feature: Old-style character length at (1) Abaqus Error: Problem during compilation - test.f Abaqus/Analysis exited with errors Liegt das an meiner ABAQUS-Version oder Env.-Einstellungen?! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 10. Apr. 2015 14:05 <-- editieren / zitieren --> Unities abgeben: Nur für Flexi
|
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 10. Apr. 2015 15:31 <-- editieren / zitieren --> Unities abgeben:
Ja, die Fehlermeldung tritt auch bei den im Verification Modul vorhandenen Beispielen auf. Danke für den Hinweis! Werde dem nachgehen müssen. Kennt jemand den Fehler?! Arbeite mit 6.14-2. Abaqus JOB eca3sfp5 Abaqus 6.14-2 Abaqus License Manager checked out the following licenses: ** ** Begin Compiling Abaqus/Standard User Subroutines Fri 10 Apr 2015 03:17:45 PM CEST ABA_PARAM.INC:1.21: Included at eca3sfp5.f:4: implicit real*8(a-h,o-z) 1 Error: Nonstandard type declaration REAL*8 at (1) eca3sfp5.f:7.18: CHARACTER*80 SNAME 1 Warning: Obsolescent feature: Old-style character length at (1) Abaqus Error: Problem during compilation - eca3sfp5.f Abaqus/Analysis exited with errors Zum DFLUX allgemein: habe mir den 3D Körper im Schnitt angesehen: an den Schnittflächen "entweicht" der eindiffundierte Werkstoff doch nicht. Die Diskrepanz zwischen 2- & 3D hat sich auch erledigt, da ich in den Input-Dateien unterschiedliche Temp.-Amplituden vorgegeben hatte. Damit benötige ich diese Surface mit NoFlux nicht mehr; dennoch wurmt mich, dass die Zuweisung oder If-Abfrage nicht funktioniert. Für weitere Hilfe bin ich also dankbar! Euch ein schönes Wochenende! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Flexi Mitglied
Beiträge: 23 Registriert: 25.09.2014
|
erstellt am: 10. Apr. 2015 15:48 <-- editieren / zitieren --> Unities abgeben:
Nachtrag Habe nur einen Beitrag - ohne direkten Zusammenhang zu Abaqus - im Netz dazu gefunden: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52101 Wird wohl der FortranCompiler auf dem Linuxserver sein... Kann dies über die Env. angepasst werden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|