Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2013, 17:09   #1
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию fortran find error

нужно найти ошибку в программе на фортран, точнее мне нужно перевести программу на фортране на си, но это потом сначала нужно чтобы программа работала. Но у меня ошибка, мне пишет что переменная не объявлена, хотя по идее я все переписал правильно. Так как фортран я не знаю совсем прошу помочь найти ошибку. Вот код

Код:
!  FortranConsole.f90 
!
!  FUNCTIONS:
!  FortranConsole - Entry point of console application.
!

!****************************************************************************
!
!  PROGRAM: FortranConsole
!
!  PURPOSE:  Entry point for the console application.
!
!****************************************************************************

   ! program FortranConsole


    dimension ai(5), a(4,4), y(4), dery(5), b(4,4)
    open(unit=1,file='dan.dat')
    read(1, *) um, om0, rsa, rsb, rsc, rr, as, ar, aj, p0, hq, al, aaa, am
    print *, um, om0, rsa, rsb, rsc, rr, as, ar, aj, p0, hq, al, aaa, am
    close(1) 
    open (unit = 2, file = 'rez.dat')
    

    fi = 2.*314152/3.
    r3 = sqrt(3.)
    agg = 2186
    t = 0.
    dt = 0.02/360
    td = 30.*dt
    te = 2.
    tt = 0
    do i=1,5
        ai(i) = 0.
    end do
    ai(5) = 0.
1    continue
    
    
    aia = ai(1) + ai(3)
    aib = ai(2) + ai(4)
    aim = 2.*sqrt((aia * aia * aia * aib + aib * aib) / 3.)
    aa = aim - 11.
    if(aim.le.11.) then 
        tau = 1./9.
        ro = tau
    else
        if(aim.ge.40.) then
            tau = aim / (0.237 * aim + 13.)
            ro = 1./0.237
        else
            tau = aim / (9. + 0.508 * aa + 0.0064 * aa ** 2 + 0.000147 * aa ** 3)
            ro = 1./(0.508 + 0.0128 * aa +0.000441 * aa ** 2)
        endif
    endif
    
    rd = 1./ (as + ar + ro)
    tr = 1./ (ar + ar + tau)
    if(aim.le.11.) then
        bbb = 0
    else 
        bbb = 2.*(rd - tr) / (aim * aim * 3.)
    endif
    ba = bbb * (2.*aia + aib)
    bb = bbb * (aia + 2.*aib)
    
    a(1,1) = as * (1 - as * (tr + ba * aia))
    a(1,2) = -as * as * bb * aia
    a(1,3) =  -as * ar * (tr + ba * aia)
    a(1,4) =  -as * ar * bb * aia
    a(2,1) = -as * as * ba * aib
    a(2,2) = as * (1 - as *(tr + bb * aib))
    a(2,3) = -as * ar * ba * aib
    a(2,4) = -as * ar * (tr + bb * aib)
    a(3,1) = a(1,3)
    a(3,2) = a(1,4)
    a(3,3) = ar * (1 - ar * (tr + ba * aia))
    a(3,4) = -ar * ar * bb * aia
    a(4,1) = a(2,3)
    a(4,2) = a(2,4)
    a(4,3) = -ar * ar * ba * aib
    a(4,4) = ar * (1 - ar * (tr + bb * aib))
    aab = ai(5) / r3
    an = 1./ am
    usa = um * sin(om0 * t)
    usb = um * sin(om0 * t - fi)
    pra = aia / tau + ai(3) / ar
    prb = aib / tau + ai(4) / ar
    y(1) = usa((2.*rsa + rsc) * ai(1) + (rsc - rsb) * ai(2)) /3.
    y(2) = usb - ((rsc - rsa) * ai(1) + (2.* rsb + rsc) * ai(2)) /3.
    y(3) = -ai(5) * (pra + 2.*prb) / r3 - rr * ai(3)
    y(4) = ai(5) * (2.* pra + prb) / r3 - rr * ai(4)
    do i = 1,4
        dery(i) = 0
        do j = 1,4
            dery(i) = dery(i) + a(i,j) * y(j)
        end do
    end do
    ameh = 2.257 * ai(5) + 0.0000744 * ai(5) ** 3 + 0.211 * 10 ** (-10) * ai(5) ** 5
    ameh = 0.
    em = (r3 * p0 * (ai(3) *ai(2) - ai(4) * ai(1))) / tau
    dery(5) = p0 * (em - ameh) / aj
    do i = 1,5
        ai(i) = ai(i) * dt * dery(i)
    end do
    
    t = t + dt
    write(2, *) t, ai(1), ai(5)
    print *, t, ai(1), ai(5)
    if(t.le.te) goto 1
    close(2)
    stop
    end

  !  end program FortranConsole

Код:
Error	1	 error #6410: This name has not been declared as an array or a function.   [USA]	c:\users\\documents\visual studio 2012\Projects\FortranConsole\FortranConsole\FortranConsole.f90
Хотя я так посмотрел рядышком усб переменная на нее почему то не ругается.
rUs_LAN вне форума Ответить с цитированием
Старый 20.01.2013, 11:57   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
Код:
    ...
    y(1) = usa((2.*rsa + rsc) * ai(1) + (rsc - rsb) * ai(2)) /3.
    y(2) = usb - ((rsc - rsa) * ai(1) + (2.* rsb + rsc) * ai(2)) /3.
    ...
Судя по второй строке, между usa и открывающейся скобкой знак какой-то арифметической операции должен быть. Оригинальную формулу посмотрИте?..
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Find next & Find previous NeedLess Общие вопросы C/C++ 0 08.07.2012 13:42
compile error can't find project or library redwert Microsoft Office Excel 2 20.06.2012 15:15
Создание FORTRAN dll (Compaq visual fortran) для BorlandDelphi Melfa Помощь студентам 25 13.04.2012 23:49