program regrid_m
c December 2002
c This program is wriiten to work with EasyMesh
c Its purpose is to transfor EasyMesh output
c into input files for drain_m
logical add
character*80 aa
integer nbln
integer i,j,n,ntri,k
integer inod,jtri,int,ii
integer nside
integer Tri(3000,0:3)
integer Sup(3000,0:10)
integer Bound(0:150)
integer Bmark(150)
integer nmat
integer subbase ! material index of subbase
integer ntime
real phead,qflux,tstep
real lam1,sat,res,hd,ksat,lam2
real stime
real X(3000),Y(3000)
real Blen(3000),Bside
real Bval(150),Bcoef(150)
real pinit
real dum
print *, 'Please Wait While Program Runs'
Bound(0)=0
open(3,file='ex3.e')
open(4,file='ex3.n')
open(8,file='ex3.s')
open(5,file='drainin.dat')
open(6,file='tri.dat')
open(7,file='extra.dat')
c number of tris and nodes
read(3,*) ntri
read(4,*) n
do j=1,ntri
read(3,*) aa,(Tri(J,I),I=1,3),(dum,i=1,8),Tri(J,0)
c add 1 to each node number
do I=1,3
Tri(j,I)=Tri(j,I)+1
enddo
enddo
do j=1,n
read(4,*) aa,X(j),Y(j),nbln
if(nbln.eq.3.or.nbln.eq.4.or.nbln.eq.5) then
Bound(0)=Bound(0)+1
Bound(Bound(0))=j
Bmark(Bound(0))=nbln
BLen(j)=0.0
endif
enddo
do inod=1,n
sup(inod,0)=0
do jtri=1,ntri
do int=1,3
if(tri(jtri,int).eq.inod) then
if(int.eq.1) then
j=2
k=3
endif
if(int.eq.2) then
j=3
k=1
endif
if(int.eq.3) then
j=1
k=2
endif
add=.true.
do ii=1,sup(inod,0)
if(tri(jtri,j).eq.sup(inod,ii)) add=.false.
enddo
if(add) then
sup(inod,0)=sup(inod,0)+1
sup(inod,sup(inod,0))=tri(jtri,j)
endif
add=.true.
do ii=1,sup(inod,0)
if(tri(jtri,k).eq.sup(inod,ii)) add=.false.
enddo
if(add) then
sup(inod,0)=sup(inod,0)+1
sup(inod,sup(inod,0))=tri(jtri,k)
endif
endif
enddo
enddo
enddo
c Boundary lengths
c Only count length in x-direction
read(8,*) nside
do j=1,nside
read(8,*) aa,p1,p2,dum,dum,nbln
if (nbln.eq.5) then
Bside=sqrt((X(p1+1)-X(p2+1))**2) !+(Y(p1+1)-Y(p2+1))**2)
BLen(P1+1)=Blen(P1+1)+Bside/2.0
Blen(P2+1)=Blen(P2+1)+Bside/2.0
endif
enddo
c set up boundaries
read(7,*) phead
read(7,*) qflux
read(7,*) tstep
do j=1,Bound(0)
if(Bmark(j).eq.3) then !fixed value on pipe
Bcoef(j)=1e20
Bval(j)=1e20*phead
endif
if(Bmark(j).eq.4) then !fixed value on base
Bcoef(j)=5e18 !smaller value used to id pipe in drain
Bval(j)=5e18*phead
endif
if(Bmark(j).eq.5) then !fixed flux
Bcoef(j)=0
Bval(j)=tstep*qflux*Blen(Bound(j))
endif
enddo
c print out
write(5,*) n,ntri
do i=1,n
write(5,*) sup(i,0)
write(5,*) (sup(i,j), j=1,sup(i,0))
enddo
do i=1,ntri
write(5,*) tri(i,0),tri(i,1),tri(i,2),tri(i,3)
write(6,*) x(tri(i,1)),y(tri(i,1)),Tri(i,0)
write(6,*) x(tri(i,2)),y(tri(i,2)),Tri(i,0)
write(6,*) x(tri(i,3)),y(tri(i,3)),Tri(i,0)
write(6,*) x(tri(i,1)),y(tri(i,1)),Tri(i,0)
enddo
do i=1,n
write(5,*) x(i),y(i)
enddo
write(5,*) Bound(0)
write(5,*) (Bound(i),i=1,Bound(0))
write(5,*) (Bcoef(i),i=1,Bound(0))
write(5,*) (Bval(i),i=1,Bound(0))
read(7,*) nmat
write(5,*) nmat
do i=1,nmat
read(7,*) lam1,sat,res,hd,ksat,lam2
write(5,*)lam1,sat,res,hd,ksat,lam2
enddo
read(7,*) subbase
write(5,*) subbase
read(7,*) stime
stime=stime/tstep
ntime=IFIX(stime)
write(5,*) ntime
write(5,*) tstep
read(7,*) pinit
write(5,*) pinit
close(3)
close(4)
close(5)
close(6)
close(7)
close(8)
stop
end