46 INTEGER :: POLY,V,NN,NSKIP
49 WRITE(*,2000)
'READING polygon geometry from poly.dat...' 51 INQUIRE(file=
'poly.dat',exist=present)
54 WRITE(*,
"('(PE ',I3,'): input data file, ',A11,' is missing: run aborted')" 63 OPEN(convert=
'BIG_ENDIAN',unit=333, file=
'poly.dat', status=
'OLD',
67 READ(333,*,err=920,end=930)
75 WRITE(*,*)
'ERROR WHILE READIND poly.dat:' 76 WRITE(*,*)
'POLYGON SIGN MUST BE +1.0 or -1.0.' 80 READ(333,*,err=920,end=930)
x_vertex(poly,v),y_vertex(poly,v
83 y_vertex(poly,
n_vertex(poly) + 1) = y_vertex(poly, 1)
88 WRITE(*,2010)
'Polygon geometry successfully read for ',
n_polygon' polygon(s).' 106 1500
FORMAT(/1x,70(
'*')//
' From: GET_POLY_DATA',/
' Message: ',&
107 'Unable to open poly.dat file',/1x,70(
'*')/)
108 1600
FORMAT(/1x,70(
'*')//
' From: GET_POLY_DATA',/
' Message: ',&
109 'Error while reading poly.dat file',/1x,70(
'*')/)
110 1700
FORMAT(/1x,70(
'*')//
' From: GET_POLY_DATA',/
' Message: ',&
111 'End of file reached while reading poly.dat file',/1x,70(
'*')/)
113 2010
FORMAT(1x,
a,i4,
a)
149 DOUBLE PRECISION x1,x2,x3
150 DOUBLE PRECISION f_pol
151 DOUBLE PRECISION,
DIMENSION(DIM_POLYGON) :: F_POLY
153 LOGICAL :: CLIP_X,CLIP_Y,CLIP_FLAG
154 LOGICAL :: test1,test2
156 INTEGER :: POLY,N_EDGE,COUNTER,EDGE
157 DOUBLE PRECISION :: X_VERTEX_MIN,X_VERTEX_MAX,Y_VERTEX_MIN,Y_VERTEX_MAX
158 DOUBLE PRECISION :: XV1,XV2,YV1,YV2
159 DOUBLE PRECISION :: x_west,x_east,y_north,y_south,slope,x_star,D1,D2
160 DOUBLE PRECISION :: max_slope = 200.0d0
161 DOUBLE PRECISION :: TOL_xstar
195 y_vertex_min = minval(y_vertex(poly,:)) - 2.0d0 *
tol_poly 196 y_vertex_max = maxval(y_vertex(poly,:)) + 2.0d0 *
tol_poly 198 clip_x = (x_vertex_min <= x1).AND.( x1 <= x_vertex_max)
199 clip_y = (y_vertex_min <= x2).AND.( x2 <= y_vertex_max)
202 IF(clip_x.AND.clip_y)
THEN 211 yv1 = y_vertex(poly,edge)
212 yv2 = y_vertex(poly,edge + 1)
215 d1 = dsqrt((x1 - xv1)**2 + (x2 - yv1)**2)
216 d2 = dsqrt((x1 - xv2)**2 + (x2 - yv2)**2)
225 x_west = dmin1(xv1,xv2)
226 x_east = dmax1(xv1,xv2)
227 test2 = (x_west <= x1).AND.( x1 <= x_east)
228 IF (test1.and.test2)
THEN 234 y_south = dmin1(yv1,yv2)
235 y_north = dmax1(yv1,yv2)
236 test1 = (y_south <= x2).AND.( x2 <= y_north)
238 slope = (xv2 - xv1) / (yv2 - yv1)
239 x_star = xv1 + slope * (x2 - yv1)
241 IF(dabs(slope)>max_slope)
THEN 247 IF (x_star < x1 - tol_xstar)
THEN 249 ELSEIF(dabs(x_star - x1) <= tol_xstar)
THEN 258 IF((counter/2) * 2 == counter)
THEN
double precision, dimension(dim_polygon, dim_vertex) x_vertex
integer, dimension(dim_polygon, dim_vertex) bc_id_p
double precision, parameter one
integer, dimension(dim_polygon) n_vertex
double precision, dimension(:), allocatable a
subroutine mfix_exit(myID, normal_termination)
subroutine eval_poly_fct(x1, x2, x3, Q, f_pol, CLIP_FLAG, BCID)
double precision tol_poly
double precision, parameter zero
double precision, dimension(dim_polygon) poly_sign