Компилятор Фортрана указывает на недопустимое выражение - PullRequest
0 голосов
/ 18 декабря 2018

У меня 2 ошибки компилятора в этой функции под названием kawa.

Первая ошибка в первой строке:

ошибка 471 - Недопустимые элементы в списке аргументов

Я думаю, что явместо этого предполагается написать function kawa(dd,ee,owari2,r,t,ttt,s,at12).

Вторая ошибка в строке

t (i) = 0

, говорящая неверный аргумент наleft

Я попробовал следующее:

  1. t(i)=0.0, но все равно не получилось.
  2. объявить t как двойную точность в основной программе.

    function kawa(dd,ee,owari2,r(all),t(all),ttt(all),s(all),at12(all))
    integer m,i 
     double precision denmin, denmax,sumgosa,alfa,sumgosa3
     double precision w(250),nmax(250),ice(250),bata(250)
     double precision sumw,sumr,fw,sumdp,batat,gosa,sumfw
     double precision ttt(250)
     double precision dp(250),den(250),k(250),n
     denmin=dd
    denmax=0.5
    sumgosa=0
    alfa=ee
     do i=0, owari2,+1
     w(i)=r(i)
     if(t(i)<0) then 
      t(i)=0
       else
     ttt(i)=tttt(i)+2
     endif
     if(ttt(i)<0) then 
      ttt(i)=0
       else
          k(i)=((denmin+(denmax-denmin)*t(i)/3)/denmin)**2.0      
      nmax(i)=denmax*denmax/denmin/denmin-k(i)
        ice(i)=r(i)
      endif
     if(at(i)>2)then 
         ice(i)=0
     else
           bata(i)=alfa*ttt(i)
    end if
    enddo
    
    sumfw=0 
    sumr=0 
    do m=0, owari2,+1
      fw=0
      sumdp=0 
      sumw=0 
      sumr=0 
      i=m 
      batat=bata(i)
         do i=m,0,-1
        n=m-i
        if(ice(i)-batat<=0) then 
          dp(i)=0 
          fw=w(i)+fw
          w(i)=0
          batat=batat-ice(i)
          ice(i)=0
          else if(n>nmax(i)) then
                  dp(i)=(ice(i)-batat)/denmax
                  else
                  dp(i)=(ice(i)-batat)/denmin*((k(i)+n)**0.5)
                  ice(i)=ice(i)-batat
                  batat=0 
                  den(i)=(w(i)+fw)/dp(i)
                  w(i)=w(i)+fw
                  fw=0
                  endif
                  if(den(i)>denmax) then
                     den(i)=denmax
                     fw=w(i)-dp(i)*denmax
                      w(i)=dp(i)*denmax
                endif 
     sumdp=sumdp+dp(i)
     sumw=sumw+w(i)
     sumr=sumr+r(i)
     enddo
     sumfw=sumfw+fw
     i=m 
     if(s(i)==32767)then 
       gosa=0
       goto 10
     else 
        gosa=(sumdp-s(i))*(sumdp-s(i))
      endif
      enddo        
     10 sumgosa =sumgosa+gosa 
    kawa=sumgosa**0.5
    
    end function kawa
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...