stepanoxus
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору здравствуйте. Кто-нибудь сталкивался с такой проблемой: Все переменные вещественного типа определены как double precision. Есть также функции такого же типа CC и SS, принимающая аргументы типа тоже double precision. Компилятор ругается следующим образом: Compiling Fortran... C:\MSDEV\Projects\PAGANO\Text1.f90 C:\MSDEV\Projects\PAGANO\Text1.f90(104): warning FOR4639: inconsistent data type for argument 3 in call to SS C:\MSDEV\Projects\PAGANO\Text1.f90(105): warning FOR4639: inconsistent data type for argument 3 in call to CC C:\MSDEV\Projects\PAGANO\Text1.f90 : error FOR2205: wrong data type for reference to FUNCTION SS from procedure PAGANO C:\MSDEV\Projects\PAGANO\Text1.f90 : warning FOR4227: argument Z (number 3) in reference to procedure SS from procedure PAGANO incorrect: has the wrong data type C:\MSDEV\Projects\PAGANO\Text1.f90 : error FOR2205: wrong data type for reference to FUNCTION CC from procedure PAGANO C:\MSDEV\Projects\PAGANO\Text1.f90 : warning FOR4227: argument X (number 3) in reference to procedure CC from procedure PAGANO incorrect: has the wrong data type Error executing fl32.exe. Text1.exe - 2 error(s), 10 warning(s) То есть, по сути получается, что хоть все переменные и функции типа double precision, но не удается скомпилировать. пример кода: program PAGANO integer nlayer,i,j,n,m,res double precision a,b,p,q,sigma0 double precision pi,tmp double precision, allocatable:: F(:,:),G(:,:),C(:,:,:), h(:), L(:,:), R(:,:) double precision, allocatable:: alpha(:,:),mj(:,:),MM(:,:,:),x(:),SSS(:) double precision, allocatable:: matrix(:,:), w(:),XX(:) integer, allocatable:: typ(:),S(:,:),LLL(:) open (2,file='data.dat') read (2,*) nlayer allocate (F(3,nlayer) , G(3,nlayer), C(6,6,nlayer), typ(nlayer),h(nlayer),matrix(nlayer*6,nlayer*6),w(nlayer*6),L(3,nlayer), R(3,nlayer),alpha(3,nlayer),mj(3,nlayer),MM(3,3,nlayer),x(nlayer),XX(6*nlayer),S(6*nlayer,2),LLL(6*nlayer),SSS(6*nlayer)) ......... matrix (6*nlayer-2,i)=MM(3,i,nlayer)*CC(alpha(i,nlayer),mj(i,nlayer),x(nlayer)) !-пример обращения к функции ............ end function CC(alpha,m,x) double precision alpha,m,x,t double precision CC t=m*x print *,alpha,m,x CC=0.0 !cosh(t) !if (alpha>0) then ! CC=cosh(t) !else if (alpha<0) then ! CC=cos(t) !else ! print *,'Alpha is incorrect!' !end if end function CC П.С. компилятор Fortran PowerStation 4.0 (Microsoft Developer Studio) |