Ungleichheitsrestriktion

#1
Hallo zusammen,
ich bekomme mal wieder eine Fehlermeldung ausgegeben bei der Formulierung einer größer gleich Restriktion (>=1,5).
Wenn ich die Ungleichung mit Fließkommazahl angebe erscheint eine Fehlermeldung, jedoch aber nicht wenn ich die Fließkommazahl als Bruch umforme. Eine Klammer um den Bruch wird nicht akzeptiert, hier erscheint ebenfalls wieder eine Fehlermeldung. Ich frage mich nun, ob mit dem Bruch auch wirklich die 1,5 dargestellt werden?

Restriktion mit Fehlermeldung:
G(6)=-(275/(((8*X(2))/(4*X(3)))**2
& +((8*X(2))/(2*X(3)))**2
& -((8*X(2))/(4*X(3)))*((8*X(2))/(2*X(3))))**0.5)+1.5.0d0

Folgende Fehlermeldung wird ausgegeben:
error unclassifiable statement at (1)

Restriktion ohne Fehlermeldung:
G(6)=-(275/(((8*X(2))/(4*X(3)))**2
& +((8*X(2))/(2*X(3)))**2
& -((8*X(2))/(4*X(3)))*((8*X(2))/(2*X(3))))**0.5)+3/2.0d0

Quellcode:
Code:
  SUBROUTINE GFUN(G,X)
      IMPLICIT NONE

      REAL*8 G(10) , X(3)
      
      
      
      G(1)= X(1)-1400.0d0
      G(2)= -X(2)+100.0d0
      G(3)= X(2)-400.0d0
      G(4)=-X(3)+2.0d0
      G(5)=-(4/3)*(0.5*X(2)-X(3))**3*3.141592654-3.141592654*(0.5*X(2)
     &     -X(3))**2*X(1)+50.0d0
      G(6)=-(275/(((8*X(2))/(4*X(3)))**2
     &     +((8*X(2))/(2*X(3)))**2
     &     -((8*X(2))/(4*X(3)))*((8*X(2))/(2*X(3))))**0.5)+1.5.0d0
      G(7)=-(275/(((12*X(2))/(4*X(3)))**2
     &     +((12*X(2))/(2*X(3)))**2
     &     -((12*X(2))/(4*X(3)))*((12*X(2))/(2*X(3))))**0.5)+1.1.0d0
      G(8)=-X(1)+0.0d0
      G(9)=-X(2)+0.0d0
      G(10)=-X(3)+0.0d0

      END

 
      REAL*8 FUNCTION FFUN(X)
      IMPLICIT NONE
    REAL*8 X(3)
      ffun =0.25942*3.141592654*X(1)*X(2)*X(3)
     &      +1+0.25942*3.141592654*X(2)**2*X(3)
     &      +(2*0.0001*X(3)*(2*3.141592654*X(2)+X(1))
     &      +0.0008*X(3)**2*(2*3.141592654*X(2)+X(1)))
     &      +0.1592*10**5*(3.141592654*X(2)**2+3.141592654*X(2)*X(1))

      END
Um jeglichen Rat bin ich mit Dank verbunden!

Beste Grüße
Georg
 

dominikb

Well-Known Member
#2
Ich kann kein Fortran, habe aber auf die Schnelle herausgefunden, dass immer nur D0 an die Dezimalzahl angehängt wird (nicht 0D0 und auch nicht mit davorstehendem Punkt).

Die richtige Schreibweise für 1,5 wäre also 1.5D0. Deine Schreibweise als Bruch mit 3/2.0d0 funktioniert vermutlich deshalb, weil einfach 3 geteilt durch 2.0d0 gerechnet wird (man könnte auch 2.d0 schreiben).
 
#3
Ich kann kein Fortran, habe aber auf die Schnelle herausgefunden, dass immer nur D0 an die Dezimalzahl angehängt wird (nicht 0D0 und auch nicht mit davorstehendem Punkt).

Die richtige Schreibweise für 1,5 wäre also 1.5D0. Deine Schreibweise als Bruch mit 3/2.0d0 funktioniert vermutlich deshalb, weil einfach 3 geteilt durch 2.0d0 gerechnet wird (man könnte auch 2.d0 schreiben).
Was heißt den dieses .d0 und .0d0? Sagt meine schreibweise nun 1,5 aus? Nicht verwundern über die Frage ich programmiere erst seit 2 Wochen
 

dominikb

Well-Known Member
#4
Wie gesagt wird immer nur d0 angehängt, nicht .0d0. Das .0 gehört in Wirklichkeit noch zur Dezimalzahl, z. B. 1.0.

Bei dieser Dezimalzahl kann man auch einfach die 0 weglassen, also 1.. Dann sieht es so aus, als wäre an die 1 ein .d0 angehängt, in Wirklichkeit wurde aber an die 1. ein d0 angehängt.

Die Bedeutung von d0 ist, dass die Zahl mit der doppelten Genauigkeit (vermutlich mit 64 anstatt 32 Bit) gespeichert wird.

Alle Angaben ohne Gewähr, da ich kein Fortran kann. :)
 

-AB-

Well-Known Member
c-b Team
c-b Experte
#5
Oben