112 alfa11,alfa12,alfa13,&
113 alfa21,alfa22,alfa23,&
114 alfa31,alfa32,alfa33,&
115 beta11,beta12,beta13,&
116 beta21,beta22,beta23,&
117 beta31,beta32,beta33,&
118 gamma1,gamma2,gamma3,&
119 delta1,delta2,delta3,&
121 alfa11_mn,alfa12_mn,alfa13_mn,&
122 alfa21_mn,alfa22_mn,alfa23_mn,&
123 alfa31_mn,alfa32_mn,alfa33_mn,&
124 beta11_mn,beta12_mn,beta13_mn,&
125 beta21_mn,beta22_mn,beta23_mn,&
126 beta31_mn,beta32_mn,beta33_mn,&
127 gamma1_mn,gamma2_mn,gamma3_mn,&
128 delta1_mn,delta2_mn,delta3_mn,&
129 cp_a,cp_b,cp_c,cp_d,cp_e,cp_f,cp_g,cp_n,cp_p, &
130 pen, dg_cnst,JP,JM,id_mpi,det_scal, testmode,&
131 JP_uv, JM_uv, fr_yn, invZ)
140 integer*4 :: i, id_mpi, testmode, fr_yn
141 integer*4 :: ip1 , i1, j1, h1, m1, n1, p1, L1, K1
142 integer*4 :: ip2 , i2, j2, h2, m2, n2, p2, L2, K2
143 integer*4 :: ip3 , i3, j3, h3, m3, n3, p3, L3, K3
144 !
integer*4 :: nthreads, OMP_GET_NUM_THREADS
146 integer*4,
intent(in) :: nn, nq, mm, ine
148 integer*4,
dimension(1:nq,0:3),
intent(in) :: o_minus
151 real*8 :: dxdx1,dxdy1,dxdz1,dydx1,dydy1,dydz1,dzdx1,dzdy1,dzdz1,det_j1
152 real*8 :: dxdx2,dxdy2,dxdz2,dydx2,dydy2,dydz2,dzdx2,dzdy2,dzdz2,det_j2
153 real*8 :: dxdx3,dxdy3,dxdz3,dydx3,dydy3,dydz3,dzdx3,dzdy3,dzdz3,det_j3
154 real*8 :: dxdu1, dydu1, dzdu1, dxdv1, dydv1, dzdv1
155 real*8 :: dxdu2, dydu2, dzdu2, dxdv2, dydv2, dzdv2
156 real*8 :: dxdu3, dydu3, dzdu3, dxdv3, dydv3, dzdv3
157 real*8 :: dxdx_m,dxdy_m,dxdz_m,dydx_m,dydy_m,dydz_m,dzdx_m,dzdy_m,dzdz_m
158 real*8 :: dpdc1, dpde1, dpdz1, dpdx1, dpdy1, dpdzt1, plx1, pkx1
159 real*8 :: dpdc2, dpde2, dpdz2, dpdx2, dpdy2, dpdzt2, plx2, pkx2
160 real*8 :: dpdc3, dpde3, dpdz3, dpdx3, dpdy3, dpdzt3, plx3, pkx3
161 real*8 :: tempo1, tempo2
163 real*8,
intent(in) :: alfa11, alfa12, alfa13, alfa21, alfa22, alfa23
164 real*8,
intent(in) :: beta11, beta12, beta13, beta21, beta22, beta23
165 real*8,
intent(in) :: gamma1, gamma2, gamma3, delta1, delta2, delta3
166 real*8,
intent(in) :: alfa11_mn, alfa12_mn, alfa13_mn
167 real*8,
intent(in) :: alfa21_mn, alfa22_mn, alfa23_mn
168 real*8,
intent(in) :: alfa31_mn, alfa32_mn, alfa33_mn
169 real*8,
intent(in) :: beta11_mn, beta12_mn, beta13_mn
170 real*8,
intent(in) :: beta21_mn, beta22_mn, beta23_mn
171 real*8,
intent(in) :: beta31_mn, beta32_mn, beta33_mn
172 real*8,
intent(in) :: gamma1_mn, gamma2_mn, gamma3_mn
173 real*8,
intent(in) :: delta1_mn, delta2_mn, delta3_mn
174 real*8,
intent(in) :: cp_a, cp_b, cp_c, cp_d, cp_e, cp_f, cp_g, cp_n
175 real*8,
intent(in) :: pen, dg_cnst, det_scal
176 real*8,
dimension(nq),
intent(in) :: x_pl, y_pl, z_pl, wx_pl, wy_pl
177 real*8,
dimension(nn) :: ctp
178 real*8,
dimension(mm) :: ctm
180 real*8,
dimension(:,:),
allocatable :: dd,ee,ff,gg,hh,ii,qq
181 real*8,
dimension(:,:),
allocatable :: aa,bb,cc,pp
182 real*8,
dimension(3*nn**3,3*nn**3),
intent(out) :: jp, jp_uv
183 real*8,
dimension(3*nn**3,3*mm**3),
intent(out) :: jm, jm_uv
184 real*8,
dimension(3,3) :: invz
197 allocate(aa(nn**3,nn**3),bb(nn**3,nn**3),cc(nn**3,nn**3),pp(nn**3,nn**
205 allocate(dd(nn**3,mm**3),ee(nn**3,mm**3),ff(nn**3,mm**3),qq(nn**3,mm
214 allocate(gg(nn**3,mm**3),hh(nn**3,mm**3),ii(nn**3,mm**3))
230 l1 = m1 + (n1-1)*nn + (p1-1)*nn*nn
236 k1 = i1 + (j1-1)*nn + (h1-1)*nn*nn
240 if( o_minus(ip1,1) .eq. ine)
then
242 dxdx1 = alfa11 + beta12*z_pl(ip1) + beta13*y_pl(ip1) + gamma1
243 dydx1 = alfa21 + beta22*z_pl(ip1) + beta23*y_pl(ip1) + gamma2
244 dzdx1 = alfa31 + beta32*z_pl(ip1) + beta33*y_pl(ip1) + gamma3
246 dxdy1 = alfa12 + beta11*z_pl(ip1) + beta13*x_pl(ip1) + gamma1
247 dydy1 = alfa22 + beta21*z_pl(ip1) + beta23*x_pl(ip1) + gamma2
248 dzdy1 = alfa32 + beta31*z_pl(ip1) + beta33*x_pl(ip1) + gamma3
250 dxdz1 = alfa13 + beta11*y_pl(ip1) + beta12*x_pl(ip1) + gamma1
251 dydz1 = alfa23 + beta21*y_pl(ip1) + beta22*x_pl(ip1) + gamma2
252 dzdz1 = alfa33 + beta31*y_pl(ip1) + beta32*x_pl(ip1) + gamma3
254 det_j1 = dxdz1 * (dydx1*dzdy1 - dzdx1*dydy1) &
255 - dydz1 * (dxdx1*dzdy1 - dzdx1*dxdy1) &
256 + dzdz1 * (dxdx1*dydy1 - dydx1*dxdy1)
259 dpdc1 = dphi(nn-1, ctp(i1), x_pl(ip1)) *
phi(nn-1, ctp(j1)
260 dpde1 =
phi(nn-1, ctp(i1), x_pl(ip1)) * dphi(nn-1, ctp(j1)
261 dpdz1 =
phi(nn-1, ctp(i1), x_pl(ip1)) *
phi(nn-1, ctp(j1),
263 plx1 =
phi(nn-1, ctp(m1), x_pl(ip1)) *
phi(nn-1, ctp(n1)
264 pkx1 =
phi(nn-1, ctp(i1), x_pl(ip1)) *
phi(nn-1, ctp(j1)
267 dpdx1 = (dydx1*(dzdy1*dpdz1 - dzdz1*dpde1) - dydy1*(dzdx1*dpdz1
268 dydz1*(dzdx1*dpde1 - dzdy1*dpdc1))/det_j1
270 dpdy1 = (dzdx1*(dxdy1*dpdz1 - dxdz1*dpde1) - dzdy1*(dxdx1*dpdz1
271 dzdz1*(dxdx1*dpde1 - dxdy1*dpdc1))/det_j1
274 dpdzt1 = (dxdx1*(dydy1*dpdz1 - dydz1*dpde1) - dxdy1*(dydx1*dpdz1
275 dxdz1*(dydx1*dpde1 - dydy1*dpdc1))/det_j1
278 det_s1 = det_scal/4.d0
281 aa(l1,k1) = aa(l1,k1) + det_s1 * wx_pl(ip1)*wy_pl(ip1)*wz_pl
282 bb(l1,k1) = bb(l1,k1) + det_s1 * wx_pl(ip1)*wy_pl(ip1)*wz_pl
283 cc(l1,k1) = cc(l1,k1) + det_s1 * wx_pl(ip1)*wy_pl(ip1)*wz_pl
284 pp(l1,k1) = pp(l1,k1) + det_s1 * wx_pl(ip1)*wy_pl(ip1)*wz_pl
311 l2 = m2 + (n2-1)*nn + (p2-1)*nn*nn
317 k2 = i2 + (j2-1)*mm + (h2-1)*mm*mm
324 if( o_minus(ip2,1) .eq. ine)
then
326 dxdx2 = alfa11 + beta12*z_pl(ip2) + beta13*y_pl(ip2) + gamma1
327 dydx2 = alfa21 + beta22*z_pl(ip2) + beta23*y_pl(ip2) + gamma2
328 dzdx2 = alfa31 + beta32*z_pl(ip2) + beta33*y_pl(ip2) + gamma3
330 dxdy2 = alfa12 + beta11*z_pl(ip2) + beta13*x_pl(ip2) + gamma1
331 dydy2 = alfa22 + beta21*z_pl(ip2) + beta23*x_pl(ip2) + gamma2
332 dzdy2 = alfa32 + beta31*z_pl(ip2) + beta33*x_pl(ip2) + gamma3
334 dxdz2 = alfa13 + beta11*y_pl(ip2) + beta12*x_pl(ip2) + gamma1
335 dydz2 = alfa23 + beta21*y_pl(ip2) + beta22*x_pl(ip2) + gamma2
336 dzdz2 = alfa33 + beta31*y_pl(ip2) + beta32*x_pl(ip2) + gamma3
339 dxdx_m = alfa11_mn + beta12_mn*z_mn(ip2) + beta13_mn*y_mn
340 dydx_m = alfa21_mn + beta22_mn*z_mn(ip2) + beta23_mn*y_mn
341 dzdx_m = alfa31_mn + beta32_mn*z_mn(ip2) + beta33_mn*y_mn
343 dxdy_m = alfa12_mn + beta11_mn*z_mn(ip2) + beta13_mn*x_mn
344 dydy_m = alfa22_mn + beta21_mn*z_mn(ip2) + beta23_mn*x_mn
345 dzdy_m = alfa32_mn + beta31_mn*z_mn(ip2) + beta33_mn*x_mn
347 dxdz_m = alfa13_mn + beta11_mn*y_mn(ip2) + beta12_mn*x_mn
348 dydz_m = alfa23_mn + beta21_mn*y_mn(ip2) + beta22_mn*x_mn
349 dzdz_m = alfa33_mn + beta31_mn*y_mn(ip2) + beta32_mn*x_mn
351 det_j_m = dxdz_m * (dydx_m*dzdy_m - dzdx_m*dydy_m) &
352 - dydz_m * (dxdx_m*dzdy_m - dzdx_m*dxdy_m) &
353 + dzdz_m * (dxdx_m*dydy_m - dydx_m*dxdy_m)
357 dpdc2 = dphi(mm-1, ctm(i2), x_mn(ip2)) *
phi(mm-1, ctm(j2)
358 dpde2 =
phi(mm-1, ctm(i2), x_mn(ip2)) * dphi(mm-1, ctm(j2)
359 dpdz2 =
phi(mm-1, ctm(i2), x_mn(ip2)) *
phi(mm-1, ctm(j2),
362 plx2 =
phi(nn-1, ctp(m2), x_pl(ip2)) *
phi(nn-1, ctp(n2)
363 pkx2 =
phi(mm-1, ctm(i2), x_mn(ip2)) *
phi(mm-1, ctm(j2)
366 dpdx2 = (dydx_m*(dzdy_m*dpdz2 - dzdz_m*dpde2) - dydy_m*(dzdx_m
367 dydz_m*(dzdx_m*dpde2 - dzdy_m*dpdc2))/det_j_m
369 dpdy2 = (dzdx_m*(dxdy_m*dpdz2 - dxdz_m*dpde2) - dzdy_m*(dxdx_m
370 dzdz_m*(dxdx_m*dpde2 - dxdy_m*dpdc2))/det_j_m
372 dpdzt2 = (dxdx_m*(dydy_m*dpdz2 - dydz_m*dpde2) - dxdy_m*(dydx_m
373 dxdz_m*(dydx_m*dpde2 - dydy_m*dpdc2))/det_j_m
376 det_s2 = det_scal/4.d0
378 dd(l2,k2) = dd(l2,k2) + det_s2 * wx_pl(ip2)*wy_pl(ip2)*wz_pl
379 ee(l2,k2) = ee(l2,k2) + det_s2 * wx_pl(ip2)*wy_pl(ip2)*wz_pl
380 ff(l2,k2) = ff(l2,k2) + det_s2 * wx_pl(ip2)*wy_pl(ip2)*wz_pl
381 qq(l2,k2) = qq(l2,k2) + det_s2 * wx_pl(ip2)*wy_pl(ip2)*wz_pl
408 l3 = m3 + (n3-1)*nn + (p3-1)*nn*nn
414 k3 = i3 + (j3-1)*mm + (h3-1)*mm*mm
418 if( o_minus(ip3,1) .eq. ine)
then
420 dxdx3 = alfa11 + beta12*z_pl(ip3) + beta13*y_pl(ip3) + gamma1
421 dydx3 = alfa21 + beta22*z_pl(ip3) + beta23*y_pl(ip3) + gamma2
422 dzdx3 = alfa31 + beta32*z_pl(ip3) + beta33*y_pl(ip3) + gamma3
424 dxdy3 = alfa12 + beta11*z_pl(ip3) + beta13*x_pl(ip3) + gamma1
425 dydy3 = alfa22 + beta21*z_pl(ip3) + beta23*x_pl(ip3) + gamma2
426 dzdy3 = alfa32 + beta31*z_pl(ip3) + beta33*x_pl(ip3) + gamma3
428 dxdz3 = alfa13 + beta11*y_pl(ip3) + beta12*x_pl(ip3) + gamma1
429 dydz3 = alfa23 + beta21*y_pl(ip3) + beta22*x_pl(ip3) + gamma2
430 dzdz3 = alfa33 + beta31*y_pl(ip3) + beta32*x_pl(ip3) + gamma3
432 det_j3 = dxdz3 * (dydx3*dzdy3 - dzdx3*dydy3) &
433 - dydz3 * (dxdx3*dzdy3 - dzdx3*dxdy3) &
434 + dzdz3 * (dxdx3*dydy3 - dydx3*dxdy3)
437 dpdc3 = dphi(nn-1, ctp(m3), x_pl(ip3)) *
phi(nn-1, ctp(n3)
438 dpde3 =
phi(nn-1, ctp(m3), x_pl(ip3)) * dphi(nn-1, ctp(n3)
439 dpdz3 =
phi(nn-1, ctp(m3), x_pl(ip3)) *
phi(nn-1, ctp(n3),
443 pkx3 =
phi(mm-1, ctm(i3), x_mn(ip3)) *
phi(mm-1, ctm(j3)
446 dpdx3 = (dydx3*(dzdy3*dpdz3 - dzdz3*dpde3) - dydy3*(dzdx3*dpdz3
447 dydz3*(dzdx3*dpde3 - dzdy3*dpdc3))/det_j3
449 dpdy3 = (dzdx3*(dxdy3*dpdz3 - dxdz3*dpde3) - dzdy3*(dxdx3*dpdz3
450 dzdz3*(dxdx3*dpde3 - dxdy3*dpdc3))/det_j3
453 dpdzt3 = (dxdx3*(dydy3*dpdz3 - dydz3*dpde3) - dxdy3*(dydx3*dpdz3
454 dxdz3*(dydx3*dpde3 - dydy3*dpdc3))/det_j3
458 det_s3 = det_scal/4.d0
460 gg(l3,k3) = gg(l3,k3) + det_s3 * wx_pl(ip3)*wy_pl(ip3)*wz_pl
461 hh(l3,k3) = hh(l3,k3) + det_s3 * wx_pl(ip3)*wy_pl(ip3)*wz_pl
462 ii(l3,k3) = ii(l3,k3) + det_s3 * wx_pl(ip3)*wy_pl(ip3)*wz_pl
484 if (fr_yn .eq. 0)
then
487 jp(1 : nn**3, 1 : nn**3) = pen*pp - cp_a*aa - cp_c*bb - cp_d*cc &
488 + dg_cnst*cp_a*transpose(aa) + dg_cnst*cp_c*transpose(bb)
490 jp(1 : nn**3, nn**3+1 : 2*nn**3) = - cp_c*aa - cp_b*bb &
491 + dg_cnst*cp_g*transpose(aa) + dg_cnst*cp_e*transpose(bb)
493 jp(1 : nn**3, 2*nn**3+1 : 3*nn**3) = - cp_d*aa - cp_b*cc &
494 + dg_cnst*cp_p*transpose(aa) + dg_cnst*cp_e*transpose(cc)
499 jp(nn**3+1 : 2*nn**3, 1 : nn**3) = - cp_g*aa - cp_e*bb &
500 + dg_cnst*cp_c*transpose(aa) + dg_cnst*cp_b*transpose(bb)
502 jp(nn**3+1 : 2*nn**3, nn**3+1 : 2*nn**3) = pen*pp - cp_e*aa - cp_f*bb
503 + dg_cnst*cp_e*transpose(aa) + dg_cnst*cp_f*transpose(bb)
505 jp(nn**3+1 : 2*nn**3, 2*nn**3+1 : 3*nn**3) = - cp_d*bb - cp_g*cc &
506 + dg_cnst*cp_p*transpose(bb) + dg_cnst*cp_c*transpose(cc)
508 jp(2*nn**3+1 : 3*nn**3, 1 : nn**3) = - cp_p*aa - cp_e*cc &
509 + dg_cnst*cp_d*transpose(aa) + dg_cnst*cp_b*transpose(cc)
511 jp(2*nn**3+1 : 3*nn**3, nn**3+1 : 2*nn**3) = - cp_p*bb - cp_c*cc &
512 + dg_cnst*cp_d*transpose(bb) + dg_cnst*cp_g*transpose(cc)
514 jp(2*nn**3+1 : 3*nn**3, 2*nn**3+1 : 3*nn**3) = pen*pp - cp_e*aa - cp_c
515 + dg_cnst*cp_e*transpose(aa) + dg_cnst*cp_c*transpose(bb)
521 jm(1 : nn**3, 1 : mm**3) = - pen*qq - cp_a*dd - cp_c*ee - cp_d*ff &
522 - dg_cnst*cp_a*gg -dg_cnst*cp_c*hh - dg_cnst
524 jm(1 : nn**3, mm**3+1 : 2*mm**3) = - cp_c*dd - cp_b*ee - dg_cnst*cp_g*gg
526 jm(1 : nn**3, 2*mm**3+1 : 3*mm**3) = - cp_d*dd - cp_b*ff - dg_cnst*cp_p
528 jm(nn**3+1 : 2*nn**3, 1 : mm**3) = - cp_g*dd - cp_e*ee - dg_cnst*cp_c*gg
530 jm(nn**3+1 : 2*nn**3, mm**3+1 : 2*mm**3) = - pen*qq - cp_e*dd - cp_f*ee
531 - dg_cnst*cp_e*gg - dg_cnst
533 jm(nn**3+1 : 2*nn**3, 2*mm**3+1 : 3*mm**3) = - cp_d*ee - cp_g*ff - dg_cnst
535 jm(2*nn**3+1 : 3*nn**3, 1 : mm**3) = - cp_p*dd - cp_e*ff - dg_cnst*cp_d
537 jm(2*nn**3+1 : 3*nn**3, mm**3+1 : 2*mm**3) = - cp_p*ee - cp_c*ff - dg_cnst
539 jm(2*nn**3+1 : 3*nn**3, 2*mm**3+1 : 3*mm**3) = - pen*qq - cp_e*dd - cp_c
540 - dg_cnst*cp_e*gg - dg_cnst
545 jp(1 : nn**3, 1 : nn**3) = invz(1,1)*pp
546 jp(1 : nn**3, nn**3+1 : 2*nn**3) = invz(1,2)*pp
547 jp(1 : nn**3, 2*nn**3+1 : 3*nn**3) = invz(1,3)*pp
548 jp(nn**3+1 : 2*nn**3, 1 : nn**3) = invz(2,1)*pp
549 jp(nn**3+1 : 2*nn**3, nn**3+1 : 2*nn**3) = invz(2,2)*pp
550 jp(nn**3+1 : 2*nn**3, 2*nn**3+1 : 3*nn**3) = invz(2,3)*pp
551 jp(2*nn**3+1 : 3*nn**3, 1 : nn**3) = invz(3,1)*pp
552 jp(2*nn**3+1 : 3*nn**3, nn**3+1 : 2*nn**3) = invz(3,2)*pp
553 jp(2*nn**3+1 : 3*nn**3, 2*nn**3+1 : 3*nn**3) = invz(3,3)*pp
558 jm(1 : nn**3, 1 : mm**3) = - invz(1,1)*qq
559 jm(1 : nn**3, mm**3+1 : 2*mm**3) = - invz(1,2)*qq
560 jm(1 : nn**3, 2*mm**3+1 : 3*mm**3) = - invz(1,3)*qq
561 jm(nn**3+1 : 2*nn**3, 1 : mm**3) = - invz(2,1)*qq
562 jm(nn**3+1 : 2*nn**3, mm**3+1 : 2*mm**3) = - invz(2,2)*qq
563 jm(nn**3+1 : 2*nn**3, 2*mm**3+1 : 3*mm**3) = - invz(2,3)*qq
564 jm(2*nn**3+1 : 3*nn**3, 1 : mm**3) = - invz(3,1)*qq
565 jm(2*nn**3+1 : 3*nn**3, mm**3+1 : 2*mm**3) = - invz(3,2)*qq
566 jm(2*nn**3+1 : 3*nn**3, 2*mm**3+1 : 3*mm**3) = - invz(3,3)*qq
573 if(testmode .eq. 1)
then
576 jp_uv(1 : nn**3, 1 : nn**3) = pen*pp
577 jp_uv(nn**3+1 : 2*nn**3, nn**3+1 : 2*nn**3) = pen*pp
578 jp_uv(2*nn**3+1 : 3*nn**3, 2*nn**3+1 : 3*nn**3) = pen*pp
581 jm_uv(1 : nn**3, 1 : mm**3) = - pen*qq
582 jm_uv(nn**3+1 : 2*nn**3, mm**3+1 : 2*mm**3) = - pen*qq
583 jm_uv(2*nn**3+1 : 3*nn**3, 2*mm**3+1 : 3*mm**3) = - pen*qq
591 deallocate(aa,bb,cc,pp)
592 deallocate(dd,ee,ff,qq)
subroutine make_loc_matrix_dg(x_pl, y_pl, z_pl, wx_pl, wy_pl, wz_pl, x_mn, y_mn, z_mn, nq, nn, mm, o_minus, alfa11, alfa12, alfa13, alfa21, alfa22, alfa23, alfa31, alfa32, alfa33, beta11, beta12, beta13, beta21, beta22, beta23, beta31, beta32, beta33, gamma1, gamma2, gamma3, delta1, delta2, delta3, ine, alfa11_mn, alfa12_mn, alfa13_mn, alfa21_mn, alfa22_mn, alfa23_mn, alfa31_mn, alfa32_mn, alfa33_mn, beta11_mn, beta12_mn, beta13_mn, beta21_mn, beta22_mn, beta23_mn, beta31_mn, beta32_mn, beta33_mn, gamma1_mn, gamma2_mn, gamma3_mn, delta1_mn, delta2_mn, delta3_mn, cp_a, cp_b, cp_c, cp_d, cp_e, cp_f, cp_g, cp_n, cp_p, pen, dg_cnst, jp, jm, id_mpi, det_scal, testmode, jp_uv, jm_uv, fr_yn, invz)
Computes DG matrices for jumps.