181 subroutine coord_conv( x, y, z, xX, xY, xZ, yX, yY, yZ, zX, zY, zZ, &
186 real(rp),
intent(out) :: x(elem%np), y(elem%np), z(elem%np)
187 real(rp),
intent(out) :: xx(elem%np), xy(elem%np), xz(elem%np)
188 real(rp),
intent(out) :: yx(elem%np), yy(elem%np), yz(elem%np)
189 real(rp),
intent(out) :: zx(elem%np), zy(elem%np), zz(elem%np)
190 real(rp),
intent(in) :: vx(elem%nv), vy(elem%nv), vz(elem%nv)
191 end subroutine coord_conv
192 subroutine calc_normal( normal_fn, &
193 Escale_f, fid_h, fid_v, elem )
197 real(rp),
intent(out) :: normal_fn(elem%nfptot,3)
198 integer,
intent(in) :: fid_h(elem%nfp_h,elem%nfaces_h)
199 integer,
intent(in) :: fid_v(elem%nfp_v,elem%nfaces_v)
200 real(rp),
intent(in) :: escale_f(elem%nfptot,3,3)
201 end subroutine calc_normal
209 integer :: fmask(lcmesh%refelem%nfptot)
210 integer :: fid_h(lcmesh%refelem3d%nfp_h,lcmesh%refelem3d%nfaces_h)
211 integer :: fid_v(lcmesh%refelem3d%nfp_v,lcmesh%refelem3d%nfaces_v)
212 real(rp) :: escale_f(lcmesh%refelem%nfptot,3,3)
214 integer :: node_ids(lcmesh%refelem%nv)
215 real(rp) :: vx(lcmesh%refelem%nv), vy(lcmesh%refelem%nv), vz(lcmesh%refelem%nv)
216 real(rp) :: xx(lcmesh%refelem%np), xy(lcmesh%refelem%np), xz(lcmesh%refelem%np)
217 real(rp) :: yx(lcmesh%refelem%np), yy(lcmesh%refelem%np), yz(lcmesh%refelem%np)
218 real(rp) :: zx(lcmesh%refelem%np), zy(lcmesh%refelem%np), zz(lcmesh%refelem%np)
221 refelem => lcmesh%refElem3D
225 allocate( lcmesh%zS(refelem%Np,lcmesh%Ne) )
226 allocate( lcmesh%Sz(refelem%Np,lcmesh%Ne) )
227 allocate( lcmesh%zlev(refelem%Np,lcmesh%Ne) )
228 allocate( lcmesh%gam(refelem%Np,lcmesh%NeA) )
229 allocate( lcmesh%GsqrtH(refelem%Nfp_v,lcmesh%Ne2D) )
230 allocate( lcmesh%G_ij(refelem%Nfp_v,lcmesh%Ne2D,2,2) )
231 allocate( lcmesh%GIJ (refelem%Nfp_v,lcmesh%Ne2D,2,2) )
232 allocate( lcmesh%GI3 (refelem%Np,lcmesh%NeA,2) )
233 allocate( lcmesh%lon2D(refelem%Nfp_v,lcmesh%Ne2D) )
234 allocate( lcmesh%lat2D(refelem%Nfp_v,lcmesh%Ne2D) )
239 do f=1, refelem%Nfaces_h
240 do i=1, refelem%Nfp_h
241 fid_h(i,f) = i + (f-1)*refelem%Nfp_h
242 fmask(fid_h(i,f)) = refelem%Fmask_h(i,f)
245 do f=1, refelem%Nfaces_v
246 do i=1, refelem%Nfp_v
247 fid_v(i,f) = i + refelem%Nfaces_h*refelem%Nfp_h + (f-1)*refelem%Nfp_v
248 fmask(fid_v(i,f)) = refelem%Fmask_v(i,f)
258 node_ids(:) = lcmesh%EToV(ke,:)
259 vx(:) = lcmesh%pos_ev(node_ids(:),1)
260 vy(:) = lcmesh%pos_ev(node_ids(:),2)
261 vz(:) = lcmesh%pos_ev(node_ids(:),3)
263 lcmesh%pos_en(:,ke,1), lcmesh%pos_en(:,ke,2), lcmesh%pos_en(:,ke,3), &
264 xx, xy, xz, yx, yy, yz, zx, zy, zz, &
265 vx, vy, vz, refelem )
267 lcmesh%J(:,ke) = xx(:)*(yy(:)*zz(:) - zy(:)*yz) &
268 - yx(:)*(xy(:)*zz(:) - zy(:)*xz) &
269 + zx(:)*(xy(:)*yz(:) - yy(:)*xz)
271 lcmesh%Escale(:,ke,1,1) = (yy(:)*zz(:) - zy(:)*yz(:))/lcmesh%J(:,ke)
272 lcmesh%Escale(:,ke,1,2) = - (xy(:)*zz(:) - zy(:)*xz(:))/lcmesh%J(:,ke)
273 lcmesh%Escale(:,ke,1,3) = (xy(:)*yz(:) - yy(:)*xz(:))/lcmesh%J(:,ke)
275 lcmesh%Escale(:,ke,2,1) = - (yx(:)*zz(:) - zx(:)*yz(:))/lcmesh%J(:,ke)
276 lcmesh%Escale(:,ke,2,2) = (xx(:)*zz(:) - zx(:)*xz(:))/lcmesh%J(:,ke)
277 lcmesh%Escale(:,ke,2,3) = - (xx(:)*yz(:) - yx(:)*xz(:))/lcmesh%J(:,ke)
279 lcmesh%Escale(:,ke,3,1) = (yx(:)*zy(:) - zx(:)*yy(:))/lcmesh%J(:,ke)
280 lcmesh%Escale(:,ke,3,2) = - (xx(:)*zy(:) - zx(:)*xy(:))/lcmesh%J(:,ke)
281 lcmesh%Escale(:,ke,3,3) = (xx(:)*yy(:) - yx(:)*xy(:))/lcmesh%J(:,ke)
292 escale_f(:,i,j) = lcmesh%Escale(fmask(:),ke,i,j)
295 call calc_normal( lcmesh%normal_fn(:,ke,:), &
296 escale_f, fid_h, fid_v, refelem )
298 lcmesh%sJ(:,ke) = sqrt( &
299 lcmesh%normal_fn(:,ke,1)**2 + lcmesh%normal_fn(:,ke,2)**2 + lcmesh%normal_fn(:,ke,3)**2 )
301 lcmesh%normal_fn(:,ke,d) = lcmesh%normal_fn(:,ke,d)/lcmesh%sJ(:,ke)
303 lcmesh%sJ(:,ke) = lcmesh%sJ(:,ke)*lcmesh%J(fmask(:),ke)
305 lcmesh%Fscale(:,ke) = lcmesh%sJ(:,ke)/lcmesh%J(fmask(:),ke)
306 lcmesh%zlev(:,ke) = lcmesh%pos_en(:,ke,3)
312 lcmesh%Gsqrt (:,:) = 1.0_rp
313 lcmesh%GsqrtH(:,:) = 1.0_rp
314 lcmesh%GIJ (:,:,1,1) = 1.0_rp
315 lcmesh%GIJ (:,:,2,1) = 0.0_rp
316 lcmesh%GIJ (:,:,1,2) = 0.0_rp
317 lcmesh%GIJ (:,:,2,2) = 1.0_rp
318 lcmesh%G_ij (:,:,1,1) = 1.0_rp
319 lcmesh%G_ij (:,:,2,1) = 0.0_rp
320 lcmesh%G_ij (:,:,1,2) = 0.0_rp
321 lcmesh%G_ij (:,:,2,2) = 1.0_rp
322 lcmesh%GI3 (:,:,1) = 0.0_rp
323 lcmesh%GI3 (:,:,2) = 0.0_rp
324 lcmesh%gam (:,:) = 1.0_rp