implicit none

 real :: span, bre, hei, aspan, bspan, cspan, x1, x2, y1, y2, xl
 real :: a, b, x, f, last, s, ss, ds(10000,2), bx(10000), k, m,bb,bbb,fb
 integer :: i,ios,data
 character(1000) :: filename
 character(1000) :: dirname
 character(4)    :: csv
 character(1000) :: filecsv

  print *,'支間中央での一点載荷における試験にて'
  print *,'JSCE G552に従い曲げ靱性係数を求めます。(対応：csv形式のみ)'
  print *,'・一列目に荷重(kN)，二列目に変位(mm)'
  print *,'・荷重は正の値、変位は下側引張に対して負の値であること'
  print *,"求めたいファイル名を入力（拡張子不要）"
   read '(A)',filename

  print *,"曲げ試験におけるスパン(mm)を入力"
   read *,span

  print *,"供試体の幅(mm)を入力"
   read *,bre

  print *,"供試体の高さ(mm)を入力"
   read *,hei


 csv='.csv'
 filecsv=trim(adjustl(filename))//csv


  aspan=(span*1000)/150
  bspan=nint(aspan)
  cspan=bspan/1000


  open(11,file = filecsv)
   do i=1,90000
   k=0
   m=0
    read(11,*,iostat=ios),k,m

     if(ios < 0)exit

     ds(i,1)=(k*(3000)*span)/(2*bre*hei*hei)
     ds(i,2)=abs(m)
     data=i

   end do
  close(11)


  print *,"読み込んだデータ数：",data


  x1=0
  do i=1,90000
   if( (x1 <= ds(i,2)).and.(ds(i,2) <= cspan+0.00001) )then    !0.00001は安全マージン
     x1=ds(i,2)
      x2=ds(i+1,2)
     y1=ds(i,1)
      y2=ds(i+1,1)
     xl=cspan-ds(i,2)
   else
    if( ds(i,2) > cspan )exit                         
   end if
  end do
   
    a=((y2-y1)/(x2-x1))
    b=(y1-a*x1)
    
     x=cspan
     last=f(x,a,b)
     
   do i=1,90000
    if( ds(i+1,2) <= cspan )then
     bx(i)=ds(i+1,2)-ds(i,2)
    else
     if( ds(i+1,2) > cspan )exit
    end if
   end do
   
   
     
     s=0
  do i=2,50000
      if( ds(i+1,2) <= cspan )then
       s=s+(( ds(i,1)+ds(i+1,1) )*(bx(i)/2))
      else
       if( ds(i+1,2) > cspan )exit
      end if 
  end do

     
  ss=s+( ds(2,1)*ds(2,2)/2 )+( (last+y1)*xl/2 )
  bb=(last+y1)*xl/2
  bbb=ds(2,1)*ds(2,2)/2
  fb=ss/cspan
  
  print *,"面積(N/mm)は",ss
  print *,"曲げ靱性係数fbは",fb


end




 function f(x,a,b)
  real :: a,b,x
  
   f=a*x+b
  
  return

 end      
 