преобразование кода уравнения Пенга Робинсона в Фортране в C ++ - PullRequest
0 голосов
/ 27 октября 2010

Я хотел бы, чтобы кто-нибудь помог преобразовать этот код в C ++

c ----------------------------------------------------------------------
c Calculate pressure based on the generalized Peng-Robinson equation of state.
c for water.
c Variables Used ...
c   T ... temperature (K)
c   P ... vapor pressure (MPa)
c   V ... volume (m^3/kmol)
c ----------------------------------------------------------------------
c Instructor: Nam Sun Wang
c ----------------------------------------------------------------------
      common /cblock/T

c Program Header -------------------------------------------------------
      print *, 'This program calculates pressure based on the'
      print *, 'generalized Peng-Robinson equation of state for water.'
      print *, ' '

c Temperature ----------------------------------------------------------
      print *, 'Enter temperature (K): '
      read *, T

c Generate a table of P at different values of V in 0.5 increments.
      print *, ' '
      print *, '------------------------'
      print *, ' Volume       Pressure  '
      print *, '(m^3/kmol)      (MPa)   '
      print *, '------------------------'
c                 xx.x123456789012345678   --- ruler
      do i=1, 100
        V = 0.5*float(i)
        print 650, V, P(V)
      end do

c Some formats ---------------------------------------------------------
650   format(f7.1, 1p, e18.6)
      end



c ----------------------------------------------------------------------
      function P(V)
c ----------------------------------------------------------------------
c Calculate pressure based on the generalized Peng-Robinson equation of state.
c for water.
c ----------------------------------------------------------------------
      common /cblock/T

c Gas Constant ---------------------------------------------------------
      R = 8.314E-3      ! (in MPa m3/kmol K)

c Critical parameters for water ----------------------------------------
      Tc = 647.3        ! (critical temperature in K)
      Pc = 22.048       ! (critical pressure in MPa)
      w  = 0.344        ! (acentric factor, dimensionless)

c Peng-Robinson EOS parameters -----------------------------------------
      xk = 0.37464 + 1.54226*w - 0.26992*w*w
      alpha = ( 1. + xk*(1.-sqrt(T/Tc)) )**2
      a = 0.45724*R*R*Tc*Tc*alpha/Pc
      b = 0.07780*R*Tc/Pc

      P = R*T/(V-b) - a/(V*(V+b)+b*(V-b))

      end

Ответы [ 2 ]

3 голосов
/ 27 октября 2010

Вот некоторые конверсии для вас, попробуйте, а затем опубликуйте результаты. Затем мы можем помочь вам завершить его.

сообщение

print *, '...'

заменить на cout << "..."

счетный цикл

do i=1, 100
...
end do

заменить на

for(int i = 1; i <= 100; ++i) {
   ....
}

комментарий

....! Комментарий

заменить на

....; // комментарий

переменная

X = 99,879

заменить на

float X = 99.879

функция

function P(V)
.
.
.
P = .... ! the result

заменить на

double P(double V){
.
.
.
 return ....; // the result
} 
0 голосов
/ 19 апреля 2012

Я знаю, что уже поздно, но я пришел сюда в поисках ответа и нашел другое решение.

Попробуйте пакет f2c.Я просто использовал его в вашем примере кода, и он работал отлично.Хотя это немного уродливо, так как ссылки на библиотеки, эмулирующие функции Fortran, такие как print, но вы можете просто использовать основную логическую часть и выполнить ввод / вывод самостоятельно.

...