[Okada(1985)の手法検証プログラム]

      dimension disp(3)
c
      rmu=1.0
      ramda=1.0
      xx=2.0
      yy=3.0
      dd=4.0
      dl=3.0
      dw=2.0
      u1=0.0
      u2=0.0
      u3=1.0
      delta=70.0
c
      call okada85(disp,rmu,ramda,xx,yy,dd,delta,dl,dw,u1,u2,u3)
c
      write(*,*) 'Ux=',disp(1)
      write(*,*) 'Uy=',disp(2)
      write(*,*) 'Uz=',disp(3)
c
      stop
      end
c **********************************************************************
      subroutine okada85(disp,rmu,ramda,xx,yy,dd,delta,dl,dw,u1,u2,u3)
c **********************************************************************
      dimension disp(3),o1(3),o2(3),o3(3),o4(3)
c
      pai=2.0*acos(0.0)
      p=yy*cos(pai*delta/180.0)+dd*sin(pai*delta/180.0)
c
      gzi=xx
      rita=p
      call okadaff(rmu,ramda,yy,gzi,rita,dd,delta,u1,u2,u3,o1)
      gzi=xx
      rita=p-dw
      call okadaff(rmu,ramda,yy,gzi,rita,dd,delta,u1,u2,u3,o2)
      gzi=xx-dl
      rita=p
      call okadaff(rmu,ramda,yy,gzi,rita,dd,delta,u1,u2,u3,o3)
      gzi=xx-dl
      rita=p-dw
      call okadaff(rmu,ramda,yy,gzi,rita,dd,delta,u1,u2,u3,o4)
c
      disp(1)=o1(1)-o2(1)-o3(1)+o4(1)
      disp(2)=o1(2)-o2(2)-o3(2)+o4(2)
      disp(3)=o1(3)-o2(3)-o3(3)+o4(3)
c
      return
      end
c **********************************************************************
      subroutine okadaff(rmu,ramda,yy,gzi,rita,dd,delta,u1,u2,u3,oo)
c **********************************************************************
      dimension oo(3)
c
      pai=2.0*acos(0.0)
      delsin=sin(pai*delta/180.0)
      delcos=cos(pai*delta/180.0)
      p=yy*delcos+dd*delsin
      q=yy*delsin-dd*delcos
      y2=rita*delcos+q*delsin
      d2=rita*delsin-q*delcos
      rr=sqrt(gzi**2.0+rita**2.0+q**2.0)
      xx=sqrt(gzi**2.0+q**2.0)
      rmm=rmu/(ramda+rmu)
c
      if(abs(delta).eq.90.0 .or. abs(delta).eq.270.0) then
        delcos=0.0
        ri5=-1.0*rmm*gzi*delsin/(rr+d2)
        ri4=-1.0*rmm*q/(rr+d2)
        ri3=0.5*rmm*(rita/(rr+d2)+y2*q/(rr+d2)**2.0-alog(rr+rita))
        ri2=-1.0*rmm*alog(rr+rita)-ri3
        ri1=-0.5*rmm*gzi*q/(rr+d2)**2.0
      else
        ri5=rmm*2.0/delcos*atan((rita*(xx+q*delcos)+xx*(rr+xx)*delsin)
     &           /(gzi*(rr+xx)*delcos))
        ri4=rmm/delcos*(alog(rr+d2)-delsin*alog(rr+rita))
        ri3=rmm*(y2/(delcos*(rr+d2))-alog(rr+rita))+delsin*ri4/delcos
        ri2=-1.0*rmm*alog(rr+rita)-ri3
        ri1=rmm*(-1.0*gzi/(delcos*(rr+d2)))-delsin*ri5/delcos
      end if
c
      ux1=-0.5*u1/pai*(gzi*q/(rr*(rr+rita))+atan(gzi*rita/(q*rr))
     &                                                +ri1*delsin)
      uy1=-0.5*u1/pai*(y2*q/(rr*(rr+rita))+q*delcos/(rr+rita)
     &                                                +ri2*delsin)
      uz1=-0.5*u1/pai*(d2*q/(rr*(rr+rita))+q*delsin/(rr+rita)
     &                                                +ri4*delsin)
      ux2=-0.5*u2/pai*(q/rr-ri3*delsin*delcos)
      uy2=-0.5*u2/pai*(y2*q/(rr*(rr+gzi))
     &           +delcos*atan(gzi*rita/(q*rr))-ri1*delsin*delcos)
      uz2=-0.5*u2/pai*(d2*q/(rr*(rr+gzi))
     &           +delsin*atan(gzi*rita/(q*rr))-ri5*delsin*delcos)
      ux3=0.5*u3/pai*(q**2.0/(rr*(rr+rita))-ri3*delsin**2.0)
      uy3=0.5*u3/pai*(-1.0*d2*q/(rr*(rr+gzi))
     &          -delsin*(gzi*q/(rr*(rr+rita))-atan(gzi*rita/(q*rr)))
     &                                              -ri1*delsin**2.0)
      uz3=0.5*u3/pai*(y2*q/(rr*(rr+gzi))
     &          +delcos*(gzi*q/(rr*(rr+rita))-atan(gzi*rita/(q*rr)))
     &                                              -ri5*delsin**2.0)
c
      oo(1)=ux1+ux2+ux3
      oo(2)=uy1+uy2+uy3
      oo(3)=uz1+uz2+uz3
c
      return
      end