Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  OpenFOAM
  Scalar aus dict einlesen

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:  Scalar aus dict einlesen (1683 mal gelesen)
Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 24. Feb. 2016 07:52    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 zusammen,

ich würde gerne "nur" einen Scalar aus den Files im 0-Ordner einlesen, um ihn dann in dem C-File der Boundary weiter zu verwenden.
Ich habe es zwar bisher durch copy-paste geschafft einen Wert einzulesen, jedoch macht er bei U ein Vektor draus, den ich aber nicht haben möchte.

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 24. Feb. 2016 09: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 Micha6982 10 Unities + Antwort hilfreich

Hey Michael,

deine Frage ist etwas undeutlich. U ist allgemein das Vektorfeld von OpenFOAM. Willst du ein scalar, dimensionedScalar, ein scalarField oder ein volScalarField?

Für die ersten zwei würde ich nämlich nicht den 0 Ordner (da hier nur vol...Fields sind) sondern das transportProperties File oder thermodynamicProperties File verwenden (je nach dem was du eben für Dictionarys als Objekte zur Verfügung hast).

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 24. Feb. 2016 10:27    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 Tobias,

ich dachte mir schon, dass es nicht so verständlich ist. Jedoch wusste ich nicht wie ich es anders erklären sollte.

Ich möchte gerade einen Relaxationsfaktor in die "mapped"-Boundary integrieren. Aber jetzt wo du es sagst, macht es natürlich Sinn, dass der Faktor bei U eben auch ein Vektor ist.

Ich möchte folgendermaßen meinen Wert am Inlet berechnen lassen (Beispiel Temperatur):

Code:
Tein = Tein + (Taus - Tein) * Faktor


Kannst ud mir eventuell sagen, wie ich die Bezeichnung "inlet" automatisch ermitteln kann?

Code:
    const label patchIDM =
        nbrMesh.boundaryMesh().findPatchID("inlet");

Das müsste eigentlich der aufrufende Patch sein.
 

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 24. Feb. 2016 12:51    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 Micha6982 10 Unities + Antwort hilfreich

Wieso machst du es so schwer?

Nimm einfach GroovyBC und du kannst sowas bereits machen.

Code:

       inlet
       {
           type groovyBC;

           variables "Tin@inlet=sum(T*mag(Sf()))/sum(mag(Sf()); Tout@outlet=sum(T*mag(Sf()))/sum(mag(Sf()); alpha=0.3;";
           valueExpression "Tin+(Tout-Tin) * alpha";
           value uniform 400;
       }



  

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 24. Feb. 2016 15:16    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 Tobias,

daran hatte ich auch schon gedacht. Gibt es bei groovy auch noch eine Möglichkeit, das erhaltene Feld auf einen gewissen Durchschnittswert anzupassen.

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 24. Feb. 2016 19:43    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 Micha6982 10 Unities + Antwort hilfreich

Ich versteh deine Frage nicht ganz.
Du kannst, sofern es mathematische ausgedrückt werden kann, alles in Groovy einbauen.

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 25. Feb. 2016 09:34    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 Tobias,

da habe ich, nach ein wenig nachdenken, auch eine Idee wie ich das machen kann. Jedoch habe ich gerade noch Probleme das zu installieren.

In der Boundary (hard-coded) funktioniert geht es soweit. Nur muss ich hier eben den "Faktor" vor dem Compilieren festlegen. Gibt es nun eine Möglichkeit den "Faktor"

Code:
Tein = Tein + (Taus - Tein) * Faktor

ganz normal über die U,T - Files einzulesen?

Ich schaffe es zwar, dass er in den Files nach dem Faktor fragt, jedoch muss das ein Skalar sein und kein Vektor.

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 25. Feb. 2016 10:49    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 Micha6982 10 Unities + Antwort hilfreich

Okay du verwendest also nicht Groovy,...

Klar kannst du das machen aber bitte nicht in den Files 0/U 0/T oder sonst wo in den vol***Fields. Was du in deiner Boundary benötigst ist ein Objekt das dir bspw. Zugang zum transportProperties File gibt, hier mal ein Beispiel:

Code:

    Info<< "Boudary access to transportProperties\n" << endl;

    IOdictionary transportProperties
    (
        IOobject
        (
            "transportProperties",
            runTime.constant(),
            mesh,
            IOobject::MUST_READ_IF_MODIFIED,
            IOobject::NO_WRITE
        )
    );

    Info<< "Reading relaxation factor alpha\n" << endl;

    dimensionedScalar alpha
    (
        transportProperties.lookup("alpha")
    );


Geht sicher auch ein normaler Scalar ansonsten in deinem C++ Abschnitt:

Code:

(^-^) + ( <3 <3 <3 <3 - :-* :-* :-*) * alpha.value()

den Wert von "alpha" ansprechen. Sonst macht er noch mehr Vergleiche (Dimensionscheck).

Du kannst natürlich auch Zugang zu jedem x-beliebigen File bekommen. Denkbar wäre hier ggf. auch das du dein Relaxfaktor in fvSolutions in die RelaxFactors reinpackst. Aber das ist dann eher ne Sache die nebensächlich ist (:

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 25. Feb. 2016 11:24    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 Tobias,

vielen Dank für deine schnelle Rückmeldung.

Mit groovy werde ich es auch noch probieren, sofern es sich installieren lässt 


Wenn ich deinen Code in die C-Datei (mappedPatchFieldBase.C) einfüge, dann kommt ein Fehler, dass er die einzelnen Punkte unter IOobjects nicht kennt:

Code:

fields/fvPatchFields/derived/mappedField/mappedPatchFieldBase.C:289:13: error: ‘runTime’ was not declared in this scope
            runTime.constant(),

Jetzt müsste ich nur noch wissen, wie ich ihm die Sachen deklarieren kann? Muss ich noch irgendwelche Dateien einbinden? Oder ist das in der C-Datei falsch?

------------------
Viele Grüße
Michael

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 25. Feb. 2016 12:32    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 zusammen,

ich konnte mein Problem lösen. Ich war schon auf dem richtigen Weg, nur scheiterte es an der Definition des Skalares.

Ich finde die Trennung durch die U/T/k/o-Files sehr sinnvoll. Da ich so bestimmen kann, welche Parameter eventuell weniger relaxiert werden oder nicht.
Ich werde es jetzt mal ausgiebig testen und euch dann eine Rückmeldung geben.

Vielen Dank für die Unterstützung.

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 25. Feb. 2016 12:39    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 Micha6982 10 Unities + Antwort hilfreich

Na das ist bei dir nicht gegeben weil die Run-Time fehlt, das zu implementieren würd ich nicht. Du hast die Möglichkeit auch über "mesh.time().constant()" zu gehen. Die Frage ist halt ob dein mesh Objekt auch definiert ist.

Du hast viele Möglichkeiten. Entweder du schaust das du dein mappedPatchFieldsBase via Dictionary aufrufst, dann hast du das "dict" nämlich schon da wie hier zu sehen:

Code:

template<class Type>
mappedPatchFieldBase<Type>::mappedPatchFieldBase
(
    const mappedPatchBase& mapper,
    const fvPatchField<Type>& patchField,
    const dictionary& dict
)
:
    mapper_(mapper),
    patchField_(patchField),
    fieldName_
    (
        dict.template lookupOrDefault<word>
        (
            "fieldName",
            patchField_.dimensionedInternalField().name()
        )
    ),
    setAverage_(readBool(dict.lookup("setAverage"))),
    average_(pTraits<Type>(dict.lookup("average"))),

Dann wäre es für dich einfach. Header, const scalar alpha_; und in dem Constructor einfach noch ergänzend

Code:

alpha_(readScalar(dict.lookup("alpha")))


Frag ist dann nur welches Dict das ist (:, da müsste man tiefer in den Code.

Du könntest auch dein Alpha Feld im Solver definieren (createFields.H) und dann an deiner Codestelle das Feld holen. Allerdings muss es ein regObject sein, sonst gehts nicht. Kann mich aber daran jetzt nicht erinnern. War irgendwas mit ->DB() oder so.

Ich nehm mal an du bist irgendwo hier am werkeln:

Code:

        if (mag(averagePsi)/mag(average_) > 0.5)
        {
            newValues *= mag(average_)/mag(averagePsi);
        }
        else
        {
            newValues += (average_ - averagePsi);
        }

Wenn ja, dann sollte es möglich sein dein Dict hier zu erstellen und demnach auch dein Scalar zu lesen:

Code:

    IOdictionary tP
    (
        IOobject
        (
            "transportProperties",
            mesh.time().constant(),
            mesh,
            IOobject::MUST_READ_IF_MODIFIED,
            IOobject::NO_WRITE
        )
    );

    Info<< "Reading relaxation factor alpha\n" << endl;

    alpha(readScalar(tP.lookup("alpha"));



Möglich wäre natürlich das du noch ne Header einbinden musst zwecks dem IODictionary.

------------------
Viele Grüße,
Tobias Holzmann

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 25. Feb. 2016 12:45    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 Micha6982 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Micha6982:

Ich finde die Trennung durch die U/T/k/o-Files sehr sinnvoll.

Ich hab keine Ahnung was du machst 
Trotzdem gutes gelingen.

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 01. Mrz. 2016 08:06    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 Tobias,

vielen Dank. Wenn ich fertig bin, werde ich es mal ausführlich erklären.

Weißt du vielleicht, wie ich in einer Boundary (.c-File) die aktuelle Iteration herauslesen kann?

------------------
Viele Grüße
Michael

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 03. Mrz. 2016 09:23    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 Tobias,

ich habe es nun endlich geschafft swak4Foam zu installieren. Wenn ich deinen Code verwende, dann kam eine Fehlermeldung. Kann es sein, dass hinter

Code:

sum(mag(Sf())

noch eine Klammer fehlt?

Wenn ich das korrigiere (ich hoffe das ist richtig), dann bekomme ich folgende Fehlermeldung:

Code:

--> FOAM FATAL ERROR:
Parser Error for driver PatchValueExpressionDriver at "1.1-3" :"field Tin not existing or of wrong type"
"Tin+(Tout-Tin)*alpha"
  ^^^
--| 

Context of the error:


- From dictionary: /home/mleck/Daten/MSc/case_groovy_1/0/T.boundaryField.(inlet)
  Evaluating expression "Tin+(Tout-Tin)*alpha"


    From function parsingValue
    in file lnInclude/CommonValueExpressionDriverI.H at line 1204.


Folgende libs habe ich in der controlDict hinzugefügt:

Code:

libs (
      "libOpenFOAM.so"
      "libsimpleSwakFunctionObjects.so"
      "libswakFunctionObjects.so"
      "libgroovyBC.so"
    );


Habe ich irgend etwas übersehen?

------------------
Viele Grüße
Michael

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 03. Mrz. 2016 09:49    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

Wer lesen kann ist klar im Vorteil!

Code:

Note: New versions of groovyBC included with swak4Foam replace the syntax <variable name>@<patch name> = <expression> with <variable name>{<patch name>} = <expression>

------------------
Viele Grüße
Michael

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 03. Mrz. 2016 10:41    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 zusammen,

jetzt funktioniert es zwar, aber leider bekomme ich nicht das Temperaturfeld heraus, sondern lediglich nur einen Mittelwert.

Gibt es mit groovy eine Möglichkeit, auch das Geschwindigkeitsfeld zu erhalten?

Im Prinzip möchte ich die Berechnung

Code:

Tin = Tin -(Tout-Tin)*alpha


zellbasiert durchführen.

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 03. Mrz. 2016 11:14    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 Micha6982 10 Unities + Antwort hilfreich

Mit groovy kannst du fast alles machen. U hast du auch. Schau einfach mal die Tutorials auf der wiki an. Übrigens ist das nicht zellbasiert sondern du willst die Faces mappen. Vllt wäre es auch einfach die Cyclic BC zu manipulieren. Die Mapped dir ja deine Werte von Outlet auf Inlet.

PS: Deine anderen 2 Beiträge erst jetzt gesehen... hast recht, da fehlt die Klammer (: ist aber auch logisch und du warst richtig. Freut mich das swak4Foam nun läuft.

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 03. Mrz. 2016 11:37    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 Tobias,

das geht wohl mit groovy nicht:

Code:

This is an example of using groovyBC for creating a simple 2-Way coupling between two patches, such that it acts as more or less, one continuously connected mesh during the simulation. As the title specifies, it is a very limited and simplistic approach to the complex concept of full 2-Way patch to patch coupling, but is sufficient in a lot of situations.

Das Äquivalent zu der Cyclic BC ist ja die mapped BC an der ich mich versuche. Das mit dem Relaxationsfaktor klappt eigentlich auch, nur näherst sich bei mir der Inlet nicht dem Outlet an, zumindestens bei Faktoren um die 0.05 - 0.10. Bei höheren Werten funktioniert es einigermaßen, nur nicht zu 100 %. Warum weiß ich auch nicht.

Bisher habe ich folgendes in "mappedPatchFieldBase.C" eingefügt:

Code:

  oldValues = nbrField.boundaryField()[patchIDM];
  newValues = nbrField.boundaryField()[nbrPatchID];
  mapValues = oldValues + (newValues-oldValues) * relaxationFactor_;

  mapper_.distribute(mapValues);


"OldValues" sind Werte vom inlet und die "newValues" sind die Werte vom "outlet". "mapValues" ist dann mein berechneter Wert.

Gibt es eine Möglichkeit in dieser C-Datei die Iterationen heraus zu bekommen?

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 03. Mrz. 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 Micha6982 10 Unities + Antwort hilfreich

Ich weiß nicht wie deine Geometrie aussieht und deine Settings, daher auch etwas schwer zu beurteilen wieso das bei dir nicht 100% geht.
Allerdings solltest du beachten, dass du nicht Face-to-Face betrachtest, sondern interpolierst (glaub ich). Weiß nicht was die FUnktion distribute() macht. Am Besten wäre in deinem Fall ein einfacher Rechteckkanal in dem du identische Faces am Inlet und Outlet hast. Dann könntest du auch direkt auf die Faces zugreifen. Face 1 von outlet = Face 1 von inlet mit dem modifizierten Werten.

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 03. Mrz. 2016 12:16    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 Tobias,

vielen Dank für deine Rückmeldung.
Kannst du das deuten:

Code:

    if (setAverage_)
    {

        Type averagePsi =
            gSum(patchField_.patch().magSf()*mapValues)
          /gSum(patchField_.patch().magSf());

        if (mag(averagePsi)/mag(average_) > 0.5)
        {
            mapValues *= mag(average_)/mag(averagePsi);
        }
        else
        {
            mapValues += (average_ - averagePsi);
        }
    }


Mir ist unklar, warum hier der Mittelwert mit zwei veschiedenen Methoden berechnet wird?

Weißt du wie ich die aktuelle Iteration heraus bekomme?

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 03. Mrz. 2016 14: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 Nur für Micha6982 10 Unities + Antwort hilfreich

Hat sicher eine Bedeutung. Habs mir gerade mal aufgezeichnet und versucht zu verstehen warum. Allerdings weiß ich nicht was "average_" für einen Wert hat und ob du selber "setAverage_" setzen kannst. Letzten Endes machst du ja nichts anders als


  • Berechne den flächengemittelten Wert phi
  • Teile  diesen durch setAverage
  • Wenn,... dann,...

Was meinst du mit aktueller Iteration?
Debug halt die Funktion und setzt ein paar Info Ausgaben rein. Dann wird dir hoffentlich schnell klar warum da was gemacht wird.

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 03. Mrz. 2016 16:28    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 Tobias,

vielen Dank für deine Hilfe.

Den Wert "average_" kann ich vorgeben (z.B. 290 K) und "setAverage_" (0 oder 1) gibt an, ob ein Mittelwert gesetzt werden soll oder nicht.

Kannst du mir sagen, was "+=" und "*=" macht?

Bezüglich der aktuellen Iteration möchte ich wissen, in welcher Iteration (aktueller Timestep) sich der Solver befindet.
Ich möchte gerne versuchen den alpha-Wert, mit zunehmenen Iterationen, ansteigen zu lassen. Oder nur alle x Iterationen einen neuen Wert schreiben.


P.S.: Danke für den Hinweis mit dem Rechteckkanal. Ich habe es natürlich wieder an einer komplizierteren Geometrie. Bei der jetzigen sieht es schon besser aus.

Viele Grüße
Michael

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 03. Mrz. 2016 22:38    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 Micha6982 10 Unities + Antwort hilfreich

Hi,

+= bedeutet:  a = a + b
*= bedeutet: a = a * b

Die Iteration kannst du glaub über mesh.time() bekommen. Sofern es ein stationärer Solver ist. Bei transienten hast das ja nicht direkt.

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 04. Mrz. 2016 06:30    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

Guten Morgen Tobias,

vielen Dank für die Erklärung, das habe ich mir schon fast gedacht. Nur ist mir noch unklar, warum das so gehandhabt wird. Aber ich werde es mir wohl auch mal aufzeichnen müssen.

Wenn ich "mesh.time()" aufrufen kommt folgender Fehler:

Code:

fields/fvPatchFields/derived/mappedField/mappedPatchFieldBase.C: In member function ‘virtual Foam::tmp<Foam::Field<Type> > Foam::mappedPatchFieldBase<Type>::mappedField() const’:
fields/fvPatchFields/derived/mappedField/mappedPatchFieldBase.C:299:23: error: ‘mesh’ was not declared in this scope
  Info<< "Time = " << mesh.time() << endl;

Muss da noch etwas eingebunden werden?

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 04. Mrz. 2016 08:39    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 Micha6982 10 Unities + Antwort hilfreich

Die Sache ist die, du hast in deiner C++ Datei noch kein Objekt das "mesh" heißt:

Code:

error: ‘mesh’ was not declared in this scope
  Info<< "Time = " << mesh.time() << endl;

Heißt also du versuchst es mal mit: mesh().time();

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 04. Mrz. 2016 09:16    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 Tobias,

das funktioniert leider auch nicht:

Code:

fields/fvPatchFields/derived/mappedField/mappedPatchFieldBase.C:334:31: error: there are no arguments to ‘mesh’ that depend on a template parameter, so a declaration of ‘mesh’ must be available [-fpermissive]
    Info<< "Michael = " << mesh().time() << endl;

Hast du noch eine Idee?

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 04. Mrz. 2016 09:22    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 Micha6982 10 Unities + Antwort hilfreich

Joa hab ich:

Code:

this->mesh().time()


Möglich auch das du auf thisMesh zugreifen kannst (wird in Zeile 178 definiert).
Code:

thisMesh.time()

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 04. Mrz. 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

War das so gemeint?:

Code:

Info<< "Zeit = " << thisMesh.time() << endl;

Dann kommt:

Code:

fields/fvPatchFields/derived/mappedField/mappedPatchFieldBase.C:336:20: error: ambiguous overload for ‘operator<<’ (operand types are ‘Foam::Ostream’ and ‘const Foam::Time’)
  Info<< "Zeit = " << thisMesh.time() << endl;

------------------
Viele Grüße
Michael

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 04. Mrz. 2016 12:43    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

Ich habe es geschafft die Zeit auszulesen. 

Ich melde mich in der kommenden Woche noch einmal und erkläre dann mehr dazu.

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 04. Mrz. 2016 14:27    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 Micha6982 10 Unities + Antwort hilfreich

Mit welchem Objekt gings? Bzw wie hast Zugriff gehabt?

------------------
Viele Grüße,
Tobias Holzmann

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

Micha6982
Mitglied
Akademischer Mitarbeiter


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

Beiträge: 130
Registriert: 20.01.2014

ubuntu 16.04
Salome 7.7.1 & 7.8.0
OpenFOAM 3.x & 4.x

erstellt am: 10. Mrz. 2016 15:22    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,

ich habe so Zugriff bekommen:

Code:

const Time& runTime = thisMesh.time();
runTime.value()

------------------
Viele Grüße
Michael

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

Shor-ty
Moderator





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

Beiträge: 2463
Registriert: 27.08.2010

OpenFOAM-dev (Foundation)
OpenFOAM-xxxx (ESI)

erstellt am: 10. Mrz. 2016 15:59    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 Micha6982 10 Unities + Antwort hilfreich

Wie ich erwähnt habe ... wunderbar (:

------------------
Viele Grüße,
Tobias Holzmann

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