!
! This file is part of SACAMOS, State of the Art CAble MOdels in Spice.
! It was developed by the University of Nottingham and the Netherlands Aerospace
! Centre (NLR) for ESA under contract number 4000112765/14/NL/HK.
!
! Copyright (C) 2016-2017 University of Nottingham
!
! SACAMOS is free software: you can redistribute it and/or modify it under the
! terms of the GNU General Public License as published by the Free Software
! Foundation, either version 3 of the License, or (at your option) any later
! version.
!
! SACAMOS is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! for more details.
!
! A copy of the GNU General Public License version 3 can be found in the
! file GNU_GPL_v3 in the root or at .
!
! SACAMOS uses the EISPACK library (in /SRC/EISPACK). EISPACK is subject to
! the GNU Lesser General Public License. A copy of the GNU Lesser General Public
! License version can be found in the file GNU_LGPL in the root of EISPACK
! (/SRC/EISPACK ) or at .
!
! The University of Nottingham can be contacted at: ggiemr@nottingham.ac.uk
!
! FILE CONTENTS:
!SUBROUTINE write_circle
!SUBROUTINE write_rectangle
!SUBROUTINE write_Dshape
!SUBROUTINE write_semicircle
!
!SUBROUTINE write_circle
!
! NAME
! SUBROUTINE write_circle
!
! DESCRIPTION
! write a circle with specified x,y centre and radius to file for plotting with gnuplot
!
!
! COMMENTS
! return the extent of the plotting area...
!
! HISTORY
!
! started 10/05/2013 CJS
! using generate_shapes.F90 20/4/2017 CJS
!
!
SUBROUTINE write_circle(x,y,r,unit,xmin,xmax,ymin,ymax)
USE type_specifications
USE constants
IMPLICIT NONE
real(dp),intent(IN) :: x,y,r ! centre x and y coordinates and radius
real(dp),intent(INOUT) :: xmin,xmax,ymin,ymax ! extent of the plotting area
integer, intent(IN) :: unit ! unit to write to
! local variables
integer :: npts
real(dp),allocatable :: shape_x(:)
real(dp),allocatable :: shape_y(:)
integer :: i
! START
CALL generate_circle_points(npts,shape_x,shape_y,x,y,r)
do i=1,npts
write(unit,8000)shape_x(i),shape_y(i)
8000 format (4E14.6)
xmin=min(xmin,shape_x(i))
xmax=max(xmax,shape_x(i))
ymin=min(ymin,shape_y(i))
ymax=max(ymax,shape_y(i))
end do
write(unit,*)
write(unit,*)
DEALLOCATE( shape_x )
DEALLOCATE( shape_y )
RETURN
END SUBROUTINE write_circle
!
!SUBROUTINE write_rectangle
!
! NAME
! SUBROUTINE write_rectangle
!
! DESCRIPTION
! write a rectangle with specified x,y centre, width, height and angle to file for plotting with gnuplot
!
!
! COMMENTS
! return the extent of the plotting area...
!
! HISTORY
!
! started 23/9/2016 CJS
! using generate_shapes.F90 20/4/2017 CJS
!
!
SUBROUTINE write_rectangle(x,y,w,h,theta,unit,xmin,xmax,ymin,ymax)
USE type_specifications
USE constants
IMPLICIT NONE
real(dp),intent(IN) :: x,y,w,h,theta ! centre x and y coordinates, width, height and angle of rectangle
real(dp),intent(INOUT) :: xmin,xmax,ymin,ymax ! extent of the plotting area
integer, intent(IN) :: unit ! unit to write to
! local variables
integer :: npts
real(dp),allocatable :: shape_x(:)
real(dp),allocatable :: shape_y(:)
integer :: i
! START
CALL generate_rectangle_points(npts,shape_x,shape_y,x,y,theta,w,h)
do i=1,npts
write(unit,8000)shape_x(i),shape_y(i)
8000 format (4E14.6)
xmin=min(xmin,shape_x(i))
xmax=max(xmax,shape_x(i))
ymin=min(ymin,shape_y(i))
ymax=max(ymax,shape_y(i))
end do
write(unit,*)
write(unit,*)
DEALLOCATE( shape_x )
DEALLOCATE( shape_y )
RETURN
END SUBROUTINE write_rectangle
!
! NAME
! SUBROUTINE write_Dshape
!
! DESCRIPTION
! write a Dshape with specified x,y centre, width1, width2, conductor separation, shell offset and angle to file for plotting with gnuplot
!
!
! COMMENTS
! Also return the extent of the plotting area
!
! HISTORY
!
! started 15/11/2016 CJS
! using generate_shapes.F90 20/4/2017 CJS
!
!
SUBROUTINE write_Dshape(x,y,w1,w2,s,r,theta,unit,xmin,xmax,ymin,ymax)
USE type_specifications
USE constants
IMPLICIT NONE
real(dp),intent(IN) :: x,y,w1,w2,s,r,theta ! centre x and y coordinates, width1, width2, separation of wire rows, offset of D shapeand angle
real(dp),intent(INOUT) :: xmin,xmax,ymin,ymax ! extent of the plotting area
integer, intent(IN) :: unit ! unit to write to
! local variables
! local variables
integer :: npts
real(dp),allocatable :: shape_x(:)
real(dp),allocatable :: shape_y(:)
integer :: i
! START
CALL generate_Dshape_points(npts,shape_x,shape_y,x,y,w1,w2,s,r,theta)
do i=1,npts
write(unit,8000)shape_x(i),shape_y(i)
8000 format (4E14.6)
xmin=min(xmin,shape_x(i))
xmax=max(xmax,shape_x(i))
ymin=min(ymin,shape_y(i))
ymax=max(ymax,shape_y(i))
end do
write(unit,*)
write(unit,*)
DEALLOCATE( shape_x )
DEALLOCATE( shape_y )
RETURN
END SUBROUTINE write_Dshape
!
!SUBROUTINE write_semicircle
!
! NAME
! SUBROUTINE write_semicircle
!
! DESCRIPTION
! write a semicircle with specified x,y centre and radius to file for plotting with gnuplot
! the semicircle is in the region y>=0
!
!
! COMMENTS
! return the extent of the plotting area...
!
! HISTORY
!
! started 10/05/2013 CJS
! using generate_shapes.F90 20/4/2017 CJS
!
!
SUBROUTINE write_semicircle(x,y,r,unit,xmin,xmax,ymin,ymax)
USE type_specifications
USE constants
IMPLICIT NONE
real(dp),intent(IN) :: x,y,r ! centre x and y coordinates and radius
real(dp),intent(INOUT) :: xmin,xmax,ymin,ymax ! extent of the plotting area
integer, intent(IN) :: unit ! unit to write to
! local variables
integer :: npts
real(dp),allocatable :: shape_x(:)
real(dp),allocatable :: shape_y(:)
integer :: i
! START
CALL generate_semicircle_points(npts,shape_x,shape_y,x,y,r)
do i=1,npts
write(unit,8000)shape_x(i),shape_y(i)
8000 format (4E14.6)
xmin=min(xmin,shape_x(i))
xmax=max(xmax,shape_x(i))
ymin=min(ymin,shape_y(i))
ymax=max(ymax,shape_y(i))
end do
write(unit,*)
write(unit,*)
DEALLOCATE( shape_x )
DEALLOCATE( shape_y )
RETURN
END SUBROUTINE write_semicircle