12 use dealias, only : vxd, vyd, vzd
13 use input, only : param, ifchar, ifcons, ifpert
14 use soln, only : vx, vy, vz
17 integer,
intent(in) :: igeom
19 if (igeom == 1)
return
20 if (param(99) < 0)
return
23 write(*,*)
"Oops: ifchar"
26 if (ifmhd) nelc = max(nelv,nelfld(ifldmhd))
27 if (ifmhd) call
exitti(
'no characteristics for mhd yet$',istep)
30 if (igeom > 2) ifnew = .false.
31 call set_conv_char(ct_vx,c_vx,vx,vy,vz,nelc,time,ifnew)
36 if ( .NOT. ifpert)
then
52 use size_m
, only : nelv
53 use size_m
, only : lxd, lyd, lzd, ldim
54 use size_m
, only : nx1, ny1, nz1, nxd, nyd, nzd
55 use input, only : if3d
57 use interp, only : jgl, jgt, dgl, dgt
61 real(DP) :: bdu(*),u(*),cx(*),cy(*),cz(*)
64 integer,
parameter :: ltd=lxd*lyd*lzd
65 real(DP) :: ur(ltd), us(ltd), ut(ltd), tr(ltd,3), uf(ltd)
67 integer :: e, iu, ic, ib, i, iptr, iptr2
68 integer :: nxyz1, nxyzd, nxyzu, nxyzc
70 real(DP) :: w((2*lxd)**ldim,2)
71 integer,
parameter :: ldw = 2*(2*lxd)**ldim
80 if (ifuf) nxyzu = nxyzd
83 if (ifcf) nxyzc = nxyzd
97 call
copy(tr(1,1),cx(ic),nxyzd)
98 call
copy(tr(1,2),cy(ic),nxyzd)
99 if (if3d) call
copy(tr(1,3),cz(ic),nxyzd)
102 write(*,*)
"Oops: ifcf"
104 call intp_rstd(fx,cx(ic),nx1,nxd,if3d,0)
105 call intp_rstd(fy,cy(ic),nx1,nxd,if3d,0)
106 if (if3d) call intp_rstd(fz,cz(ic),nx1,nxd,if3d,0)
111 tr(i,1)=rx(i,1,e)*fx(i)+rx(i,2,e)*fy(i)+rx(i,3,e)*fz(i)
112 tr(i,2)=rx(i,4,e)*fx(i)+rx(i,5,e)*fy(i)+rx(i,6,e)*fz(i)
113 tr(i,3)=rx(i,7,e)*fx(i)+rx(i,8,e)*fy(i)+rx(i,9,e)*fz(i)
119 tr(i,1)=rx(i,1,e)*fx(i)+rx(i,2,e)*fy(i)
120 tr(i,2)=rx(i,3,e)*fx(i)+rx(i,4,e)*fy(i)
130 call grad_rst(ur,us,ut,u(iu),nxd,if3d)
132 call intp_rstd(uf,u(iu),nx1,nxd,if3d,0)
133 call grad_rst(ur,us,ut,uf,nxd,if3d)
137 call
local_grad3(ur,us,ut,u(iu),nxd-1,1,dgl(iptr2),dgt(iptr2))
139 call
specmpn(uf,nxd,u(iu),nx1,jgl(iptr),jgt(iptr),if3d,w,ldw)
140 call
local_grad3(ur,us,ut,uf,nxd-1,1,dgl(iptr2),dgt(iptr2))
147 uf(i) = tr(i,1)*ur(i)+tr(i,2)*us(i)+tr(i,3)*ut(i)
151 uf(i) = tr(i,1)*ur(i)+tr(i,2)*us(i)
156 call intp_rstd(bdu(ib),uf,nx1,nxd,if3d,1)
158 call
specmpn(bdu(ib),nx1,uf,nxd,jgt(iptr),jgl(iptr),if3d,w,ldw)
177 use size_m
, only : lx1, ly1, lz1, lxd, lyd, lzd, ldim
178 use size_m
, only : nx1, ny1, nz1, nxd, nyd, nzd, nelv
180 use input, only : if3d
181 use mesh, only : if_ortho
183 use interp, only : jgl, jgt
188 integer,
parameter :: lxy=lx1*ly1*lz1, ltd=lxd*lyd*lzd
190 real(DP) :: cr(ltd,*),cs(ltd,*),ct(ltd,*)
191 real(DP) :: ux(lxy,*),uy(lxy,*),uz(lxy,*)
193 real(DP) :: fx(ltd), fy(ltd), fz(ltd)
194 real(DP) :: w((2*lxd)**ldim,2)
195 integer,
parameter :: ldw = 2*(2*lxd)**ldim
199 integer :: e, nxyz1, nxyzd, ic, i, j, iptr
221 call
specmpn(fx,nxd,ux(1,e),nx1,jgl(iptr),jgt(iptr),if3d,w,ldw)
222 call
specmpn(fy,nxd,uy(1,e),nx1,jgl(iptr),jgt(iptr),if3d,w,ldw)
223 if (if3d) call
specmpn(fz,nxd,uz(1,e),nx1,jgl(iptr),jgt(iptr),if3d,w,ldw)
225 call intp_rstd(fx,ux(1,e),nx1,nxd,if3d,0)
226 call intp_rstd(fy,uy(1,e),nx1,nxd,if3d,0)
227 if (if3d) call intp_rstd(fz,uz(1,e),nx1,nxd,if3d,0)
237 cr(i,e)=rx(i,1,e)*fx(i)
238 cs(i,e)=rx(i,2,e)*fy(i)
239 ct(i,e)=rx(i,3,e)*fz(i)
243 cr(i,e)=rx(i,1,e)*fx(i)+rx(i,2,e)*fy(i)+rx(i,3,e)*fz(i)
244 cs(i,e)=rx(i,4,e)*fx(i)+rx(i,5,e)*fy(i)+rx(i,6,e)*fz(i)
245 ct(i,e)=rx(i,7,e)*fx(i)+rx(i,8,e)*fy(i)+rx(i,9,e)*fz(i)
251 cr(i,e)=rx(i,1,e)*fx(i)+rx(i,2,e)*fy(i)
252 cs(i,e)=rx(i,3,e)*fx(i)+rx(i,4,e)*fy(i)
subroutine get_dgl_ptr(ip, mx, md)
Get pointer to GL-GL interpolation dgl() for pair (mx,md)
Module containing memoized interpolation matrices.
subroutine get_int_ptr(ip, mx, md)
Get pointer to jgl() for interpolation pair (mx,md)
subroutine local_grad3(ur, us, ut, u, N, e, D, Dt)
Output: ur,us,ut Input:u,N,e,D,Dt.
subroutine set_convect_new(cr, cs, ct, ux, uy, uz)
Put vxd,vyd,vzd into rst form on fine mesh For rst form, see eq. (4.8.5) in Deville, Fischer, Mund (2002).
subroutine setup_convect(igeom)
subroutine set_dealias_rx
Eulerian scheme, add convection term to forcing function.
real(dp) function dnekclock()
subroutine specmpn(b, nb, a, na, ba, ab, if3d, w, ldw)
Spectral interpolation from A to B via tensor products.
subroutine convect_new(bdu, u, ifuf, cx, cy, cz, ifcf)
Compute dealiased form: J^T Bf *JC .grad Ju w/ correct Jacobians.
subroutine exitti(stringi, idata)