program f90_DRAWseep !Saturation line implicit none integer::i,j,k,l,n,ne,kk,ii,jj integer::n1,n2,n3,k1,k2,k3 character::strcom*256 !書出用コメント 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(:) !圧力指定点流量 integer,allocatable::nokh(:) integer,allocatable::nokq(:) integer,allocatable::noku(:) real(4),allocatable::vx(:) !x方向流速ベクトル real(4),allocatable::vz(:) !y方向流速ベクトル real(4),allocatable::Akr(:) !透水係数比 real(4)::QTi,QTo real(4)::rw real(4)::x1,y1,z1,x2,y2,z2,x3,y3,z3 real(4)::xg,zg,xx,zz,yy real(4),allocatable::hpv(:) real(4),allocatable::satx(:,:) real(4),allocatable::satz(:,:) integer,allocatable::nd(:) real(4),allocatable::yp(:) integer::id,iw,ik integer::kkmax,kkm1,kkm2,nsat,kdraw character :: linebuf*1000 open(11,file='tmp_sat.txt',status='old') read(11,*) kkm1,kkm2 kkmax=kkm1+kkm2 if(0 hpv(i).and.yy< hpv(j).and.yy< hpv(k))id=1 if(yy< hpv(i).and.yy> hpv(j).and.yy< hpv(k))id=1 if(yy< hpv(i).and.yy< hpv(j).and.yy> hpv(k))id=1 if(yy> hpv(i).and.yy> hpv(j).and.yy< hpv(k))id=1 if(yy< hpv(i).and.yy> hpv(j).and.yy> hpv(k))id=1 if(yy> hpv(i).and.yy< hpv(j).and.yy> hpv(k))id=1 if(id==1)then n=n+1 x1=x(i); y1=hpv(i); z1=z(i) x2=x(j); y2=hpv(j); z2=z(j) x3=x(k); y3=hpv(k); z3=z(k) xg=(x1+x2+x3)/3.0 zg=(z1+z2+z3)/3.0 call SATPOINT(yy,x1,y1,z1,x2,y2,z2,x3,y3,z3,xg,zg,xx,zz) satx(kk,n)=xx satz(kk,n)=zz end if end do end do nd(kk)=n !x座標の小さい順の並び替え do i=1,nd(kk)-1 do j=i+1,nd(kk) if(satx(kk,i)>satx(kk,j))then rw=satx(kk,i) satx(kk,i)=satx(kk,j) satx(kk,j)=rw rw=satz(kk,i) satz(kk,i)=satz(kk,j) satz(kk,j)=rw end if end do end do end do call DRAW_MESH(kakom,matno,x,z,nokh,nokq,noku,nod,NODT,NELT,KOH,KOQ,KOU) call DRAW_SAT(kakom,matno,x,z,nokh,satx,satz,nd,nod,NODT,NELT,KOH,kkmax,nsat) call DRAW_VEC(kakom,Akr,x,z,vx,vz,satx,satz,nd,kdraw,nod,NODT,NELT,kkmax,nsat) stop contains subroutine DRAW_MESH(kakom,matno,x,z,nokh,nokq,noku,nod,NODT,NELT,KOH,KOQ,KOU) integer::nod,NODT,NELT,KOH,KOQ,KOU integer::kakom(1:NELT,1:nod),matno(1:NELT) integer::nokh(1:KOH),nokq(1:KOQ),noku(1:KOU) real(4)::x(1:NODT),z(1:NODT) integer::i,ne,ii real(4)::xmin,xmax,zmin,zmax xmin=(x(1)) xmax=(x(1)) zmin=(z(1)) zmax=(z(1)) do i=1,NODT if((x(i))