Problem mit allgemeiner C Syntax



  • Ich arbeite mit dem CFD Programm Fluent.
    HIer gibt es spezielle Makros um eine Bewegungen anzuweisen.
    Leider habe ich durch mangelnde C Kenntnisse große Schwierigkeiten mit der Syntax.

    Mein Makro schaut wie folgt aus:

    #include "udf.h"

    static real omega1 = 0.0;

    DEFINE_CG_MOTION(box,dt,vel,omega,time,dtime)
    {
    NV_S(vel, =, 0.0);
    NV_S(omega, =, 0.0);

    omega1 = 0.8726 * time;
    omega[1] = omega1;
    Message ("time =%f, omega[1] = %f\n", time, omega[1]);
    

    }

    Dieses Makro CG_Motion führt um den Vektor Omega eine Rotation als Funktion von der Zeit aus. Es funktioniert so weit ganz gut. Um die Drehrichtung zu ändern, wird einfach vor 0.8726 das Vorzeichen geändert.

    Nun kommen wir zum eigentlichen Problem:

    Ich möchte das Makro über eine Bedingung gerne mit einen Profil erweitern:

    #include "udf.h"

    static real omega1 = 0.0;

    DEFINE_CG_MOTION(box,dt,vel,omega,time,dtime)
    {
    NV_S(vel, =, 0.0);
    NV_S(omega, =, 0.0);

        if (time > 0)
          omega1 = 0.8726 * time;
        else if (time > 1.4)
          omega1 = 0;
        else if (time > 5.4 < 6.8)
          omega1 = -0.8726 * time;
        else
          omega1 = 0;
          
        omega[1] = omega1;
        Message ("time =%f, omega[1] = %f\n", time, omega[1]);
    

    }

    Beim compilen wird hier kein Fehler ausgegeben. Trotzdem funktioniert das Makro nicht. Es wird nur die erste Bedingung:

    if (time > 0)
    omega1 = 0.8726 * time;

    angeommen und der Körper dreht sich in entsprechender Richtung. Die zwei anderen Bedingungen für einen Stillstand

    else if (time > 1.4)
    omega1 = 0;

    und eine Änderung der Drehrichtung

    else if (time > 5.4 < 6.8)
          omega1 = -0.8726 * time;
    

    werden einfach nicht ausgeführt. Ich habe mittlerweile auch schon erfolglos die Syntax geändert, z.B. in dem ich den Block der Bedingung mit

    return omega1

    abgeschlossen haben.
    Ich denke mal für einen C oder C++ler dürfte das eine Leichtigkeit sein.

    Vielen Danke schon mal



  • @Duke711 sagte in Problem mit allgemeiner C Syntax:

        if (time > 0)
          omega1 = 0.8726 * time;
        else if (time > 1.4)
          omega1 = 0;
        else if (time > 5.4 < 6.8)
          omega1 = -0.8726 * time;
        else
          omega1 = 0;
    
        if (0 < time && time <= 1.4)
          omega1 = 0.8726 * time;
        else if (1.4 < time && time <= 5.4)
          omega1 = 0;
        else if (5.4 < time && time < 6.8)
          omega1 = -0.8726 * time;
        else
          omega1 = 0;
    

    https://www.geeksforgeeks.org/operators-in-c-set-2-relational-and-logical-operators/


    Schreibe bitte in eine Zeile vor deinem Code ``` und in eine Zeile nach Deinem Code ```. Alternativ markiere Deinen Code und klicke auf das </> in der Toolbar über dem Textfeld Deines Beitrags. Du kannst Deinen Beitrag auch nachträglich bearbeiten. Den Menüpunkt "Bearbeiten" findest Du hinter dem Drei-Punkte-Menü rechts unter Deinem Beitrag. Danke.



  • @Duke711 Das ist kein Makro, sondern eine Funktion.

    Du musst die Reihenfolge der if-else-if Kette umdrehen, denn alle anderen Werte für time sind > 0.0
    Also ist schon die erste Bedingung wahr.

    if (time > 5.4 < 6.8) macht nicht das, was du möchtest.

    if (time >= 6.8) 
      omega1 = 0;
    else if (time > 5.4)
      omega1 = ...
    else if ...
    


  • Hey danke noch mal für eure blitz schnelle Hilfe, da wäre ich wohl nie darauf gekommen. Ist wahrscheinlich ein beliebter Anfängerfehler so funktioniert es tadellos:

    if (time >= 6.8)
    omega1 = 0;
    else if (time > 5.4)
    omega1 = -0.8726 * (time -5.4);
    else if (time > 1.4)
    omega1 = 0;
    else
    omega1 = 0.8726 * time;



  • @Duke711 Den letzten Absatz von Swordfisch Beitrag solltest du aber beherzigen.