subroutine c_splot3D(pname,X1,X2,Y,xmin,xmax,ymin,ymax,nosurface,wlines,nlines)
integer :: i,j,Nx1,Nx2,count,Nl
character(len=*) :: pname
real(8),dimension(:) :: X1
real(8),dimension(:) :: X2
complex(8),dimension(size(X1),size(X2)) :: Y
real(8),optional :: xmin,xmax,ymin,ymax
integer,optional :: nlines
logical,optional :: wlines,nosurface
real(8) :: X1min,X1max
real(8) :: X2min,X2max
character(len=12) :: minx,miny,maxx,maxy
character(len=256) :: fname,dname
fname=get_filename(pname)
dname=get_filepath(pname)
Nx1=size(X1) ; Nx2=size(X2)
Nl=5; if(present(nlines))Nl=nlines
open(619,file=adjustl(trim(dname))//"re_"//adjustl(trim(fname)))
open(719,file=adjustl(trim(dname))//"im_"//adjustl(trim(fname)))
if(present(wlines))then
open(620,file=adjustl(trim(dname))//"re_"//adjustl(trim(fname))//"_withlines")
open(720,file=adjustl(trim(dname))//"im_"//adjustl(trim(fname))//"_withlines")
endif
do i=1,Nx1
count=mod(i,Nl)
do j=1,Nx2
write(619,*)X1(i),X2(j),dreal(Y(i,j))
write(719,*)X1(i),X2(j),dimag(Y(i,j))
if(present(wlines).AND.count==0)write(620,*)X1(i),X2(j),real(Y(i,j),8)
if(present(wlines).AND.count==0)write(720,*)X1(i),X2(j),aimag(Y(i,j))
enddo
write(619,*)""
write(719,*)""
if(present(wlines))then
write(620,*)""
write(620,*)""
write(720,*)""
write(720,*)""
endif
enddo
close(619)
close(719)
X1min=minval(X1);if(present(xmin))X1min=xmin
X1max=maxval(X1);if(present(xmax))X1max=xmax
X2min=minval(X2);if(present(ymin))X2min=ymin
X2max=maxval(X2);if(present(ymax))X2max=ymax
write(minx,"(f12.4)")X1min
write(maxx,"(f12.4)")X1max
write(miny,"(f12.4)")X2min
write(maxy,"(f12.4)")X2max
if(present(wlines))then
close(620)
close(720)
endif
!Re:
open(10,file=adjustl(trim(pname))//"_re_map.gp")
write(10,*)"set term wxt"
write(10,*)"set title 'Re_"//trim(fname)//"'"
write(10,*)"set pm3d map"
write(10,*)"set size square"
write(10,*)"set xrange ["//trim(adjustl(trim(minx)))//":"//trim(adjustl(trim(maxx)))//"]"
write(10,*)"set yrange ["//trim(adjustl(trim(miny)))//":"//trim(adjustl(trim(maxy)))//"]"
write(10,*)"splot 're_"//trim(fname)//"'"
write(10,*)"#set term png size 1920,1280"
write(10,*)"#set out 're_"//adjustl(trim(fname))//".png'"
write(10,*)"#rep"
close(10)
!Im
open(10,file=adjustl(trim(pname))//"_im_map.gp")
write(10,*)"set term wxt"
write(10,*)"set title 'Im_"//trim(fname)//"'"
write(10,*)"set pm3d map"
write(10,*)"set size square"
write(10,*)"set xrange ["//trim(adjustl(trim(minx)))//":"//trim(adjustl(trim(maxx)))//"]"
write(10,*)"set yrange ["//trim(adjustl(trim(miny)))//":"//trim(adjustl(trim(maxy)))//"]"
write(10,*)"splot 'im_"//trim(fname)//"'"
write(10,*)"#set term png size 1920,1280"
write(10,*)"#set out 'im_"//adjustl(trim(fname))//".png'"
write(10,*)"#rep"
close(10)
if(present(nosurface).AND.nosurface)return
!Re
open(10,file=adjustl(trim(pname))//"_re_surface.gp")
write(10,*)"set term wxt"
write(10,*)"set title 'Re_"//trim(fname)//"'"
write(10,*)"set nokey"
write(10,*)"set grid"
write(10,*)"set view 50,10,1,1"
write(10,*)"splot 're_"//trim(fname)//"' with pm3d"
if(present(wlines))write(10,*)"rep 're_"//trim(pname)//"_withlines' with lines"
write(10,*)"#set term png size 1920,1280"
write(10,*)"#set out 're_"//adjustl(trim(fname))//".png'"
write(10,*)"#rep"
close(10)
!Im
open(10,file=adjustl(trim(pname))//"_im_surface.gp")
write(10,*)"set term wxt"
write(10,*)"set title 'Im_"//trim(fname)//"'"
write(10,*)"set nokey"
write(10,*)"set grid"
write(10,*)"set view 50,10,1,1"
write(10,*)"splot 'im_"//trim(fname)//"' with pm3d"
if(present(wlines))write(10,*)"rep 'im_"//trim(pname)//"_withlines' with lines"
write(10,*)"#set term png size 1920,1280"
write(10,*)"#set out 'im_"//adjustl(trim(fname))//".png'"
write(10,*)"#rep"
close(10)
end subroutine c_splot3D