(1) function parsv(x,xval) result(f_result) | (2) implicit none | (3) integer, intent(in):: x(:) | (4) integer:: length, k | (5) real(8), intent(in), dimension(3):: xval | (6) real(8), dimension(3):: f_result | (7) real(8), dimension(3,size(x)):: auxv | (8) | (9) length = size(x) | (10) | (11) auxv = mynan() | (12) f_result = auxv(:,1) | (13) | (14) do k=1,length | (15) if(x(k).ge.1.and. x(k).le. 10) auxv(:,k) = [1.d0*x(k), 0.d0, 0.d0] | (16) if(x(k).eq.11) auxv(:,k) = xval | (17) end do | (18) | (19) f_result = auxv(:,1) | (20) | (21) do k=length-1,1,-1 | (22) if(.not. isnan( auxv(1,k+1) ).and. narg(x(k)).eq. 0 ) then | (23) cycle | (24) | (25) elseif(.not. isnan( auxv(1,k+1) ).and. narg(x(k)).eq. 1 ) then | (26) auxv(:,k) = operf(x(k),auxv(:,k+1)) | (27) if( isnan(auxv(1,k)) ) return | (28) | (29) elseif(.not. isnan( auxv(1,k+1) ).and. narg(x(k)).eq.2)then | (30) auxv(:,k) = operf2(x(k),auxv(:,k+1:length)) | (31) | (32) if( isnan(auxv(1,k)) ) return | (33) end if | (34) end do | (35) | (36) f_result = auxv(:,1) | (37) | (38) end function parsv |
|