게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
포트란 에러 좀 봐주세요.
게시물ID : programmer_9873짧은주소 복사하기
작성자 : 밝은달사랑
추천 : 0
조회수 : 331회
댓글수 : 2개
등록시간 : 2015/05/11 08:36:32
지금 작성중인 코드인데 중간에 연속구문을 사용한 곳에서 에러가 발생하는데 이유가 뭘까요?

      program slope1

      real B(100), yup(100), ydn(100), x(5), y(5), c, ifa, uw, r, n, k1, k2, rb(100)
     + rbc(100), A(100), l, w, ad(100), m(100), ryc(100), ws, wc, fs
      integer chk1

      open(100,file='output.dat')

      write(*,*) 'x1 ='
      read (*,*) x(1)
      y(1)=0        
      write(*,*) 'x2 ='
      read (*,*) x(2)
      write(*,*) 'y2 ='
      read (*,*) y(2)
      write(*,*) 'x3 ='
      read (*,*) x(3)
      write(*,*) 'y3 ='
      read (*,*) y(3)
      write(*,*) 'r ='
      read (*,*) r
      write(*,*) 'N ='
      read (*,*) n
      write(*,*) 'UW ='
      read (*,*) uw
      write(*,*) 'c ='
      read (*,*) c
      write(*,*) 'IFA ='
      read (*,*) ifa
      
      
      k1=(x(3)-x(1))*(x(3)-x(1))+y(2)*y(2)
      if(r.gt.sqrt(k1))then
        chk1=2
      elseif(r.eq.sqrt(k1)) then
        chk1=1
      else
        write(100,*) 'Radius is small'
        stop
      endif

      x(4)=(2*x(3)-sqrt(4*x(3)*x(3)-4*(x(3)*x(3)+y(3)*y(3)-r*r)))/2
      x(5)=(2*x(3)+sqrt(4*x(3)*x(3)-4*(x(3)*x(3)+y(2)*y(2)+y(3)*y(3)-r*r-
     + 2*y(2)*y(3))))/2

      k1=(x(5)-x(4))/2
      k2=x(4)
      
      do i=2,n
        if(x(2).ge.(k2+k1)) then
            if(x(2)-k2-k1.gt.k1)then
                k2=k2+k1
                b(i)=k2
             else
                b(i)=x(2)
                k2=x(2)
             endif
         else
            k2=k2+k1
            b(i)=k2
         endif
      enddo     
      b(1)=x(4)
      do i=1,n+1
        if (i.eq.(n+1)) b(i+1)=x(5)
      enddo
         
      do i=1,n+1
        if(x(2).ge.b(i)) then
            yup(i)=(y(2)/(x(2)-x(1)))*b(i)-x(1)*y(2)/(x(2)-x(1))
         else
            yup(i)=y(2)
         endif
       enddo   

       do i=1,n (여기랑)
         k1=2*y(3)+sqrt(4*y(3)*y(3)-4*(y(3)*y(3)+rbc(i)*rbc(i)+x(3)*x(3)-r*r-
     +   2*x(3)*b(i)))/2
         k2=(2*y(3)-sqrt(4*y(3)*y(3)-4*(y(3)*y(3)+rbc(i)*rbc(i)+x(3)*x(3)-r*r-
     +   2*x(3)*b(i))))/2


         if(y(3).ge.k2) then
            ryc(i)=k2
         else
            ryc(i)=k1
         endif
       enddo
 
       do i=1,n
         rb(i)=b(i+1)-b(i)
       enddo
       
       do i=1,n
         rbc(i)=b(i)+rb(i)/2
       enddo
       
       A(1)=0.5*rb(1)*(yup(2)-ydn(2))
       do i=1,n
        if (i.eq.n) A(i)=0.5*rb(i)*(yup(i-1)-ydn(i-1))
       enddo
       do i=2,n-1
         a(i)=0.5*rb(i)*((yup(i)-ydn(i))+(yup(i+1)-ydn(i+1)))
       enddo
       
       l=sqrt(rb(1)*rb(1)+ydn(2)*ydn(2))
       do i=1,n
         if (i.eq.n) l=l+sqrt(rb(i)*rb(i)+ydn(i-1)*ydn(i-1))
       enddo
       do i=2,n-1
         l=l+sqrt((ydn(i+1)-ydn(i))*(ydn(i+1)-ydn(i))+rb(i)*rb(i))
       enddo
       
       do i=1,n
         w=w+uw*A(i)
       enddo
       
       do i=1,n (여기)
         k1=(2*y(3)+sqrt(4*y(3)*y(3)-4*(y(3)*y(3)+b(i)*b(i)+x(3)*x(3)-r*r
     +   -2*x(3)*b(i))))/2
         k2=(2*y(3)-sqrt(4*y(3)*y(3)-4*(y(3)*y(3)+b(i)*b(i)+x(3)*x(3)-r*r
     +   -2*x(3)*b(i))))/2


         if(y(3).ge.k2) then
            ydn(i)=k2
         else
            ydn(i)=k1
         endif
       enddo
       
       do i=1,n
         m(i)=-(rbc(i)-x(3))/(ryc(i)-y(3))
         ad(i)=atan(m(i))
       enddo
       
       do i=1,n
         ws=ws+uw*a(i)*sin(ad(i))
         wc=wc+uw*a(i)*cos(ad(i))
       enddo
            
       fs=(c*l+wc*tan(ifa))/ws

      write(100,*) 'Fs=', fs
      
      stop
      end
             
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호