150 subroutine coord_conv( x, y, xr, xs, yr, ys, &
155 real(rp),
intent(out) :: x(elem%np), y(elem%np)
156 real(rp),
intent(out) :: xr(elem%np), xs(elem%np), yr(elem%np), ys(elem%np)
157 real(rp),
intent(in) :: vx(elem%nv), vy(elem%nv)
158 end subroutine coord_conv
159 subroutine calc_normal( normal_fn, &
160 Escale_f, fid, elem )
164 real(rp),
intent(out) :: normal_fn(elem%nfptot,2)
165 integer,
intent(in) :: fid(elem%nfp,elem%nfaces)
166 real(rp),
intent(in) :: escale_f(elem%nfptot,2,2)
167 end subroutine calc_normal
175 integer :: node_ids(lcmesh%refelem%nv)
176 real(rp) :: vx(lcmesh%refelem%nv), vy(lcmesh%refelem%nv)
177 real(rp) :: xr(lcmesh%refelem%np), xs(lcmesh%refelem%np)
178 real(rp) :: yr(lcmesh%refelem%np), ys(lcmesh%refelem%np)
179 integer :: fmask(lcmesh%refelem%nfptot)
180 integer :: fid(lcmesh%refelem2d%nfp,lcmesh%refelem2d%nfaces)
181 real(rp) :: escale_f(lcmesh%refelem%nfptot,2,2)
185 refelem => lcmesh%refElem2D
187 allocate( lcmesh%pos_en(refelem%Np,lcmesh%Ne,2) )
190 allocate( lcmesh%normal_fn(refelem%NfpTot,lcmesh%Ne,2) )
191 allocate( lcmesh%sJ(refelem%NfpTot,lcmesh%Ne) )
192 allocate( lcmesh%J(refelem%Np,lcmesh%Ne) )
193 allocate( lcmesh%Fscale(refelem%NfpTot,lcmesh%Ne) )
194 allocate( lcmesh%Escale(refelem%Np,lcmesh%Ne,2,2) )
195 allocate( lcmesh%Gsqrt(refelem%Np,lcmesh%NeA) )
196 allocate( lcmesh%G_ij(refelem%Np,lcmesh%Ne, 2, 2) )
197 allocate( lcmesh%GIJ (refelem%Np,lcmesh%Ne, 2, 2) )
198 allocate( lcmesh%lon(refelem%Np,lcmesh%Ne) )
199 allocate( lcmesh%lat(refelem%Np,lcmesh%Ne) )
201 fmask(:) = reshape(refelem%Fmask, shape(fmask))
202 do f=1, refelem%Nfaces
204 fid(i,f) = i + (f-1)*refelem%Nfp
209 node_ids(:) = lcmesh%EToV(ke,:)
210 vx(:) = lcmesh%pos_ev(node_ids(:),1)
211 vy(:) = lcmesh%pos_ev(node_ids(:),2)
213 lcmesh%pos_en(:,ke,1), lcmesh%pos_en(:,ke,2), xr, xs, yr, ys, &
216 lcmesh%J(:,ke) = - xs*yr + xr*ys
218 lcmesh%Escale(:,ke,1,1) = ys/lcmesh%J(:,ke)
219 lcmesh%Escale(:,ke,1,2) = - xs/lcmesh%J(:,ke)
220 lcmesh%Escale(:,ke,2,1) = - yr/lcmesh%J(:,ke)
221 lcmesh%Escale(:,ke,2,2) = xr/lcmesh%J(:,ke)
232 escale_f(:,i,j) = lcmesh%Escale(fmask(:),ke,i,j)
236 call calc_normal( lcmesh%normal_fn(:,ke,:), &
237 escale_f, fid, refelem )
239 lcmesh%sJ(:,ke) = sqrt( lcmesh%normal_fn(:,ke,1)**2 + lcmesh%normal_fn(:,ke,2)**2 )
241 lcmesh%normal_fn(:,ke,d) = lcmesh%normal_fn(:,ke,d)/lcmesh%sJ(:,ke)
243 lcmesh%sJ(:,ke) = lcmesh%sJ(:,ke)*lcmesh%J(fmask(:),ke)
245 lcmesh%Fscale(:,ke) = lcmesh%sJ(:,ke)/lcmesh%J(fmask(:),ke)
250 lcmesh%Gsqrt (:,:) = 1.0_rp
251 lcmesh%GIJ (:,:,1,1) = 1.0_rp
252 lcmesh%GIJ (:,:,2,1) = 0.0_rp
253 lcmesh%GIJ (:,:,1,2) = 0.0_rp
254 lcmesh%GIJ (:,:,2,2) = 1.0_rp
255 lcmesh%G_ij (:,:,1,1) = 1.0_rp
256 lcmesh%G_ij (:,:,2,1) = 0.0_rp
257 lcmesh%G_ij (:,:,1,2) = 0.0_rp
258 lcmesh%G_ij (:,:,2,2) = 1.0_rp