48 xx_elev, yy_elev, zz_elev, &
49 node1_elem, node2_elem, node3_elem, &
50 cs_nnz_loc, cs_loc, nm, tm, sd, &
51 nn_s, xx_s, yy_s, zz_s, zz_elevation, &
58 integer*4 :: nn_elev,nn_elem,cs_nnz_loc,nm,ne,nn_s
59 integer*4 :: im,ie,i,j,k,nn,ip,isn,ic
63 integer*4,
dimension(nn_s) :: loc_n_num
64integer*4,
dimension(nn_elem) :: node1_elem,node2_elem,node3_elem
65 integer*4,
dimension(0:cs_nnz_loc) :: cs_loc
66 integer*4,
dimension(nm) :: tm
67 integer*4,
dimension(nm) :: sd
69 real*8 :: dx,dy,dz,tol
73 real*8 :: ux,uy,uz,vx,vy,vz
77 real*8 :: v0x,v0y,v1x,v1y,v2x,v2y
78 real*8 :: dot00,dot01,dot02,dot11,dot12
79 real*8 :: invdenom,u,v
83 real*8,
dimension(:),
allocatable :: ct,ww
84 real*8,
dimension(nn_elev) :: xx_elev,yy_elev,zz_elev
85 real*8,
dimension(nn_s) :: xx_s, yy_s, zz_s
86 real*8,
dimension(nn_s) :: zz_elevation
88 real*8,
dimension(:,:),
allocatable :: dd
90 d2min = (5 * max_es)**2
92 zz_elev_min = zz_elev(1)
94 if (zz_elev(i).lt.zz_elev_min)
then
95 zz_elev_min = zz_elev(i)
101 allocate(ct(nn),ww(nn),dd(nn,nn))
107 if ((sd(im) +1).ne.nn)
then
110 allocate(ct(nn),ww(nn),dd(nn,nn))
115 if (cs_loc(cs_loc(ie -1) +0).eq.tagmat)
then
120 ip = nn*nn*(k -1) +nn*(j -1) +i
121 isn = cs_loc(cs_loc(ie -1) + ip)
126 if (zz_elevation(ic) .eq. -1.0e+30)
then
130 x1 = xx_elev(node1_elem(h))
131 y1 = yy_elev(node1_elem(h))
132 z1 = zz_elev(node1_elem(h))
134 if (((x1 - xx_s(ic))**2 + (y1 - yy_s(ic)
then
135 x2 = xx_elev(node2_elem(h))
136 y2 = yy_elev(node2_elem(h))
137 z2 = zz_elev(node2_elem(h))
139 x3 = xx_elev(node3_elem(h))
140 y3 = yy_elev(node3_elem(h))
141 z3 = zz_elev(node3_elem(h))
163 dot00 = v0x * v0x + v0y * v0y
165 dot01 = v0x * v1x + v0y * v1y
167 dot02 = v0x * v2x + v0y * v2y
169 dot11 = v1x * v1x + v1y * v1y
171 dot12 = v1x * v2x + v1y * v2y
174 invdenom = 1 / (dot00 * dot11 - dot01
175 u = (dot11 * dot02 - dot01 * dot12
176 v = (dot00 * dot12 - dot01 * dot02
180 if ( (u.ge.0.0d0).and.(v.ge.0.0d0
then
184 ux=(x1-x2)/sqrt((x1-x2)*
185 uy=(y1-y2)/sqrt((x1-x2)*
186 uz=(z1-z2)/sqrt((x1-x2)*
187 vx=(x3-x2)/sqrt((x3-x2)*
188 vy=(y3-y2)/sqrt((x3-x2)*
189 vz=(z3-z2)/sqrt((x3-x2)*
191 a = uy * vz - uz * vy
192 b = uz * vx - ux * vz
193 c = ux * vy - uy * vx
195 zz_interp = -a/c * (xx_s
196 zz_elevation(ic) = ( zz_interp
198 if (abs(zz_elevation(ic)
then
204 if ( (u.ge.0.0d0).and.(v.ge.0.0d0
exit