program f90_PQ4 !Saturation line implicit none integer::i,j,k,n,ne,kk character::strcom*50 !書出用コメント integer::NODT !節点総数 integer::NELT !要素総数 integer::MATEL !材料種類数 integer::KOH !全水頭指定節点数 integer::KOQ !流量指定節点数 integer::KOU !浸潤境界指定節点数 integer::nt !全自由度(総節点数×1[1節点自由度]) integer::nod !1要素節点数 integer::nhen=1 !1節点自由度 integer,allocatable::kakom(:,:) !要素構成節点番号 integer,allocatable::matno(:) !材料種別No real(4),allocatable::x(:) !節点x座標 real(4),allocatable::z(:) !節点y座標 real(4),allocatable::hvec(:) !全体全水頭ベクトル real(4),allocatable::qvec(:) !全体節点流量ベクトル real(4),allocatable::pvec(:) !圧力指定点流量 real(4)::QTi,QTo,Qmax real(4)::rw,el real(4)::xmin,xmax,dx,ymin,ymax,dy,y2min,y2max,dy2 real(4),allocatable::xs(:) real(4),allocatable::zs(:) real(4),allocatable::qs(:) real(4),allocatable::ps(:) real(4),allocatable::xw(:) real(4),allocatable::zw(:) real(4),allocatable::qw(:) integer::nd integer::id,iw,ik real(4)::x1u,z1u,x2u,z2u,x1d,z1d,x2d,z2d real(4)::a1,b1,a2,b2,xx,zz real(4)::ds=0.01 character::s*20,sline*100 !*************************** !data input !*************************** open(11,file='fnameW.csv',status='old') read(11,*) strcom,x1u,z1u,x2u,z2u,x1d,z1d,x2d,z2d read(11,'()') read(11,*) nod,NODT,NELT,MATEL,KOH,KOQ,KOU !------------------------------------------------------------------------------------------ !配列寸法宣言 !------------------------------------------------------------------------------------------ nt=NODT*nhen allocate(kakom(1:NELT,1:nod)) allocate(matno(1:NELT)) allocate(x(1:NODT)) allocate(z(1:NODT)) allocate(hvec(1:nt)) allocate(qvec(1:nt)) allocate(pvec(1:nt)) allocate(xs(1:NODT)) allocate(zs(1:NODT)) allocate(qs(1:NODT)) allocate(ps(1:NODT)) allocate(xw(1:NODT)) allocate(zw(1:NODT)) allocate(qw(1:NODT)) read(11,'()') read(11,'()') !node,x,z,KOH,KOQ,KOU,Hinp,Qinp k=0 do i=1,NODT read(11,*) iw,rw,rw,ik,iw,iw,rw,rw end do read(11,'()') read(11,'()') !element,node-1,node-2,node-3,node-4,Ak0,alpha,em,matno do ne=1,NELT read(11,*) i,(kakom(ne,j),j=1,nod),rw,rw,rw,matno(ne) end do read(11,'()') read(11,'()') !node,coord-x,coord-z,hvec,qvec,pvec do i=1,NODT read(11,*) j,x(i),z(i),hvec(i),qvec(i),pvec(i) end do close(11) !堤体表面の節点の検索 a1=(z2u-z1u)/(x2u-x1u) b1=(x2u*z1u-x1u*z2u)/(x2u-x1u) a2=(z2d-z1d)/(x2d-x1d) b2=(x2d*z1d-x1d*z2d)/(x2d-x1d) k=0 do i=1,NODT xx=x(i) zz=z(i) id=0 if(a1*xx+b1-dsxs(j))then rw=xs(i) xs(i)=xs(j) xs(j)=rw rw=zs(i) zs(i)=zs(j) zs(j)=rw rw=qs(i) qs(i)=qs(j) qs(j)=rw rw=ps(i) ps(i)=ps(j) ps(j)=rw end if end do end do QTi=0.0 QTo=0.0 do i=1,nd if(0.0