-
Jan Willem Thorbecke authoredJan Willem Thorbecke authored
boundaries3D.c 136.81 KiB
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<assert.h>
#include"fdelmodc3D.h"
void vmess(char *fmt, ...);
long boundariesP3D(modPar mod, bndPar bnd, float *vx, float *vy, float *vz,
float *tzz, float *tyy, float *txx, float *txz, float *txy, float *tyz,
float ***rox, float ***roy, float ***roz, float ***l2m, float ***lam, float ***mul, long itime, long verbose)
{
/*********************************************************************
Joeri's original filling order
26 minicubes ordered as x-y-z
x can be left, mid, right
y can be top, mid, bottom
z can be front, mid, back
Code ordering:
TOP mid top mid
right top mid
right top back
left top mid
left top front
left top back
mid top front
mid top back
BOTTOM mid bottom mid
right bottom mid
right bottom front
right bottom back
left bottom mid
left bottom front
left bottom back
mid bottom front
mid bottom back
MID left mid mid
left mid front
left mid back
right mid mid
right mid front
right mid back
mid mid front
mid mid back
26*3 minicubes total (vz, vx, vy).
AUTHOR:
Jan Thorbecke (janth@xs4all.nl)
The Netherlands
***********************************************************************/
float c1, c2;
float dp, dvx, dvy, dvz;
long ix, iy, iz, ixs, iys, izs, ibnd, ib, ibx, iby, ibz;
long nx, ny, nz, n1, n2, n3;
long is0, isrc;
long ixo, ixe, iyo, iye, izo, ize;
long npml, ipml, pml;
float kappu, alphu, sigmax, R, a, m, fac, dx, dy, dt;
float dpx, dpy, dpz, *p;
static float *Vxpml, *Vypml, *Vzpml, *sigmu, *RA;
static long allocated=0;
float Jx, Jy, Jz, rho, d;
c1 = 9.0/8.0;
c2 = -1.0/24.0;
nx = mod.nx;
ny = mod.ny;
nz = mod.nz;
n1 = mod.naz;
n2 = mod.nax;
n3 = mod.nay;
dx = mod.dx;
dy = mod.dy;
dt = mod.dt;
fac = dt/dx;
if ( (bnd.top==2) || (bnd.bot==2) || (bnd.lef==2) || (bnd.rig==2) || (bnd.fro==2) || (bnd.bac==2) ) pml=1;
else pml=0;
ibnd = mod.iorder/2-1;
if (mod.ischeme <= 2) { /* Acoustic scheme */
if (bnd.top==1) { /* free surface at top */
#pragma omp for private (ix,iy) nowait
for (iy=mod.ioPy; iy<mod.iePy; iy++) {
for (ix=mod.ioPx; ix<mod.iePx; ix++) {
iz = bnd.surface[ix];
vz[iy*n2*n1+ix*n1+iz] = vz[iy*n2*n1+ix*n1+iz+1];
vz[iy*n2*n1+ix*n1+iz-1] = vz[iy*n2*n1+ix*n1+iz+2];
}
}
}
}
/************************************************************/
/* rigid boundary condition clears velocities on boundaries */
/************************************************************/
if (bnd.top==3) { /* rigid surface at top */
#pragma omp for private (ix, iy, iz) nowait
for (iy=1; iy<=ny; iy++) {
#pragma ivdep
for (ix=1; ix<=nx; ix++) {
vx[iy*n2*n1+ix*n1+ibnd] = 0.0;
vy[iy*n2*n1+ix*n1+ibnd] = 0.0;
vz[iy*n2*n1+ix*n1+ibnd] = -vz[iy*n2*n1+ix*n1+ibnd+1];
if (mod.iorder >= 4) vz[iy*n2*n1+ix*n1+ibnd-1] = -vz[iy*n2*n1+ix*n1+ibnd+2];
if (mod.iorder >= 6) vz[iy*n2*n1+ix*n1+ibnd-2] = -vz[iy*n2*n1+ix*n1+ibnd+3];
}
}
}
if (bnd.rig==3) { /* rigid surface at right */
#pragma omp for private (ix, iy, iz) nowait
for (iy=1; iy<=ny; iy++) {
#pragma ivdep
for (iz=1; iz<=nz; iz++) {
vz[iy*n2*n1+(nx+ibnd-1)*n1+iz] = 0.0;
vy[iy*n2*n1+(nx+ibnd-1)*n1+iz] = 0.0;
vx[iy*n2*n1+(nx+ibnd)*n1+iz] = -vx[iy*n2*n1+(nx+ibnd-1)*n1+iz];
if (mod.iorder == 4) vx[iy*n2*n1+(nx+2)*n1+iz] = -vx[iy*n2*n1+(nx-1)*n1+iz];
if (mod.iorder == 6) {
vx[iy*n2*n1+(nx+1)*n1+iz] = -vx[iy*n2*n1+(nx)*n1+iz];
vx[iy*n2*n1+(nx+3)*n1+iz] = -vx[iy*n2*n1+(nx-2)*n1+iz];
}
}
}
}if (bnd.bac==3) { /* rigid surface at back */
#pragma omp for private (ix, iy, iz) nowait
#pragma ivdep
for (ix=1; ix<=nx; ix++) {
for (iz=1; iz<=nz; iz++) {
vz[(ny+ibnd-1)*n2*n1+ix*n1+iz] = 0.0;
vx[(ny+ibnd-1)*n2*n1+ix*n1+iz] = 0.0;
vy[(ny+ibnd)*n2*n1+ix*n1+iz] = -vy[(ny+ibnd-1)*n2*n1+ix*n1+iz];
if (mod.iorder == 4) vy[(ny+2)*n2*n1+ix*n1+iz] = -vy[(ny-1)*n2*n1+iy*n1+iz];
if (mod.iorder == 6) {
vy[(ny+1)*n2*n1+ix*n1+iz] = -vy[ny*n2*n1+ix*n1+iz];
vy[(ny+3)*n2*n1+ix*n1+iz] = -vy[(ny-2)*n2*n1+ix*n1+iz];
}
}
}
}
if (bnd.bot==3) { /* rigid surface at bottom */
#pragma omp for private (ix, iy, iz) nowait
#pragma ivdep
for (iy=1; iy<=ny; iy++) {
for (ix=1; ix<=nx; ix++) {
vx[iy*n2*n1+ix*n1+nz+ibnd-1] = 0.0;
vy[iy*n2*n1+ix*n1+nz+ibnd-1] = 0.0;
vz[iy*n2*n1+ix*n1+nz+ibnd] = -vz[iy*n2*n1+ix*n1+nz+ibnd-1];
if (mod.iorder == 4) vz[iy*n2*n1+ix*n1+nz+2] = -vz[iy*n2*n1+ix*n1+nz-1];
if (mod.iorder == 6) {
vz[iy*n2*n1+ix*n1+nz+1] = -vz[iy*n2*n1+ix*n1+nz];
vz[iy*n2*n1+ix*n1+nz+3] = -vz[iy*n2*n1+ix*n1+nz-2];
}
}
}
}
if (bnd.lef==3) { /* rigid surface at left */
#pragma omp for private (ix, iy, iz) nowait
#pragma ivdep
for (iy=1; iy<=ny; iy++) {
for (iz=1; iz<=nz; iz++) {
vz[iy*n2*n1+ibnd*n1+iz] = 0.0;
vy[iy*n2*n1+ibnd*n1+iz] = 0.0;
vx[iy*n2*n1+ibnd*n1+iz] = -vx[iy*n2*n1+(ibnd+1)*n1+iz];
if (mod.iorder == 4) vx[iy*n2*n1+0*n1+iz] = -vx[iy*n2*n1+3*n1+iz];
if (mod.iorder == 6) {
vx[iy*n2*n1+1*n1+iz] = -vx[iy*n2*n1+4*n1+iz];
vx[iy*n2*n1+0*n1+iz] = -vx[iy*n2*n1+5*n1+iz];
}
}
}
}
if (bnd.fro==3) { /* rigid surface at front */
#pragma omp for private (ix, iy, iz) nowait
#pragma ivdep
for (ix=1; ix<=nx; ix++) {
for (iz=1; iz<=nz; iz++) {
vz[ibnd*n2*n1+ix*n1+iz] = 0.0;
vx[ibnd*n2*n1+ix*n1+iz] = 0.0;
vy[ibnd*n2*n1+ix*n1+iz] = -vy[(ibnd+1)*n2*n1+ix*n1+iz];
if (mod.iorder == 4) vy[0*n2*n1+ix*n1+iz] = -vy[3*n2*n1+ix*n1+iz];
if (mod.iorder == 6) {
vy[1*n2*n1+ix*n1+iz] = -vy[4*n2*n1+ix*n1+iz];
vy[0*n2*n1+ix*n1+iz] = -vy[5*n2*n1+ix*n1+iz];
}
}
}
}
/************************************************************/
/* Tapered boundaries for both elastic and acoustic schemes */
/* compute all field values in tapered areas */
/************************************************************/
/*********/
/* Top */
/*********/
if (bnd.top==4) {
if (mod.ischeme <= 2) { /* Acoustic scheme */
/* Vx field */
/* mid top mid vx */
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz-bnd.ntap;
ize = mod.ioXz;
ibz = (bnd.ntap+izo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ibz-iz];
}
}
}
/* right top mid corner vx */
if (bnd.rig==4) {
ixo = mod.ieXx;
ixe = mod.ieXx+bnd.ntap;
ibz = (bnd.ntap+izo-1);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
/* right top front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* right top back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz-bnd.ntap;
ize = mod.ioXz;
/* left top mid corner vx */
if (bnd.lef==4) {
ixo = mod.ioXx-bnd.ntap;
ixe = mod.ioXx;
ibz = (bnd.ntap+izo-1);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
/* left top front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* left top back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
/* mid top front corner vx */
if (bnd.fro==4) {
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibz = (bnd.ntap+izo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* mid top back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibz = (bnd.ntap+izo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* Vy field */
/* mid top mid vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz-bnd.ntap;
ize = mod.ioYz;
ib = (bnd.ntap+izo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[ib-iz];
}
}
}
/* right top mid corner vy */
if (bnd.rig==4) {
ixo = mod.ieYx;
ixe = mod.ieYx+bnd.ntap;
ibz = (bnd.ntap+izo-1);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
/* right top front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* right top back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz-bnd.ntap;
ize = mod.ioYz;
/* left top mid corner vy */
if (bnd.lef==4) {
ixo = mod.ioYx-bnd.ntap;
ixe = mod.ioYx;
ibz = (bnd.ntap+izo-1);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
/* left top front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* left top back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
/* front top mid corner vy */
if (bnd.fro==4) {
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibz = (bnd.ntap+izo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* back top mid corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibz = (bnd.ntap+izo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* Vz field */
/* mid top mid vz*/
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz-bnd.ntap;
ize = mod.ioZz;
ib = (bnd.ntap+izo-1);
#pragma omp for private (ix, iy, iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[ib-iz];
}
}
}
/* right top mid corner vz */
if (bnd.rig==4) {
ixo = mod.ieZx;
ixe = ixo+bnd.ntap;
ibz = (bnd.ntap+izo-1);
ibx = (ixo);
#pragma omp for private(ix,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
/* right top front corner vz */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* right top back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz-bnd.ntap;
ize = mod.ioZz;
/* left top mid corner vz */
if (bnd.lef==4) {
ixo = mod.ioZx-bnd.ntap;
ixe = mod.ioZx;
ibz = (bnd.ntap+izo-1);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
/* left top front corner vz */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* left top back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
/* mid top front corner vz */
if (bnd.fro==4) {
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibz = (bnd.ntap+izo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* mid top back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibz = (bnd.ntap+izo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
else { /* Elastic scheme */
/* Vx field */
/* mid top mid vx */
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz-bnd.ntap;
ize = mod.ioXz;
ibz = (bnd.ntap+izo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ibz-iz];
}
}
}
/* right top mid corner vx */
if (bnd.rig==4) {
ixo = mod.ieXx;
ixe = mod.ieXx+bnd.ntap;
ibz = (bnd.ntap+izo-1);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
/* right top front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* right top back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz-bnd.ntap;
ize = mod.ioXz;
/* left top mid corner vx */
if (bnd.lef==4) {
ixo = mod.ioXx-bnd.ntap;
ixe = mod.ioXx;
ibz = (bnd.ntap+izo-1);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
/* left top front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* left top back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
/* mid top front corner vx */
if (bnd.fro==4) {
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibz = (bnd.ntap+izo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* mid top back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibz = (bnd.ntap+izo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* Vy field */
/* mid top mid vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz-bnd.ntap;
ize = mod.ioYz;
ib = (bnd.ntap+izo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[ib-iz];
}
}
}
/* right top mid corner vy */
if (bnd.rig==4) {
ixo = mod.ieYx;
ixe = mod.ieYx+bnd.ntap;
ibz = (bnd.ntap+izo-1);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
/* right top front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* right top back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz-bnd.ntap;
ize = mod.ioYz;
/* left top mid corner vy */
if (bnd.lef==4) {
ixo = mod.ioYx-bnd.ntap;
ixe = mod.ioYx;
ibz = (bnd.ntap+izo-1);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
/* left top front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* left top back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
/* front top mid corner vy */
if (bnd.fro==4) {
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibz = (bnd.ntap+izo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* back top mid corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibz = (bnd.ntap+izo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* Vz field */
/* mid top mid vz*/
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz-bnd.ntap;
ize = mod.ioZz;
ib = (bnd.ntap+izo-1);
#pragma omp for private (ix, iy, iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[ib-iz];
}
}
}
/* right top mid corner vz */
if (bnd.rig==4) {
ixo = mod.ieZx;
ixe = ixo+bnd.ntap;
ibz = (bnd.ntap+izo-1);
ibx = (ixo);
#pragma omp for private(ix,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
/* right top front corner vz */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* right top back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz-bnd.ntap;
ize = mod.ioZz;
/* left top mid corner vz */
if (bnd.lef==4) {
ixo = mod.ioZx-bnd.ntap;
ixe = mod.ioZx;
ibz = (bnd.ntap+izo-1);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
/* left top front corner vz */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* left top back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
/* mid top front corner vz */
if (bnd.fro==4) {
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibz = (bnd.ntap+izo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibz-iz)];
}
}
}
}
/* mid top back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibz = (bnd.ntap+izo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibz-iz)];
}
}
}
}
}
}
/*********/
/* Bottom */
/*********/
if (bnd.bot==4) {
if (mod.ischeme <= 2) { /* Acoustic scheme */
/* Vx field */
/* mid bottom mid vx*/
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ieXz;
ize = mod.ieXz+bnd.ntap;
ib = (ize-bnd.ntap);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[iz-ib];
}
}
}
/* right bottom mid corner vx */
if (bnd.rig==4) {
ixo = mod.ieXx;
ixe = mod.ieXx+bnd.ntap;
ibz = (izo);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
/* right bottom front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* right bottom back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ieXz;
ize = mod.ieXz+bnd.ntap;
/* left bottom mid corner vx*/
if (bnd.lef==4) {
ixo = mod.ioXx-bnd.ntap;
ixe = mod.ioXx;
ibz = (izo);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
/* left bottom front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* left bottom back corner vx*/
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
/* mid bottom front corner vx */
if (bnd.fro==4) {
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibz = (izo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* mid bottom back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibz = (izo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* Vy field */
/* mid bottom mid vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ieYz;
ize = mod.ieYz+bnd.ntap;
ib = (ize-bnd.ntap);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iz-ib];
}
}
}
/* right bottom mid corner vy */
if (bnd.rig==4) {
ixo = mod.ieYx;
ixe = ixo+bnd.ntap;
ibz = (izo);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
/* right bottom front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* right bottom back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ieYz;
ize = mod.ieYz+bnd.ntap;
/* left bottom mid corner vy */
if (bnd.lef==4) {
ixo = mod.ioYx-bnd.ntap;
ixe = mod.ioYx;
ibz = (izo);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
/* left bottom front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* left bottom back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
/* mid bottom front corner vy */
if (bnd.fro==4) {
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibz = (izo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* mid bottom back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibz = (izo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* Vz field */
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ieZz;
ize = mod.ieZz+bnd.ntap;
ib = (ize-bnd.ntap);
#pragma omp for private (ix, iy, iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[iz-ib];
}
}
}
/* right bottom corner */
if (bnd.rig==4) {
ixo = mod.ieZx;
ixe = ixo+bnd.ntap;
ibz = (izo);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
/* right bottom front corner */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* right bottom back corner */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ieZz;
ize = mod.ieZz+bnd.ntap;
/* left bottom corner */
if (bnd.lef==4) {
ixo = mod.ioZx-bnd.ntap;
ixe = mod.ioZx;
ibz = (izo);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
/* left bottom front corner */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* left bottom back corner */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
/* front bottom corner */
if (bnd.fro==4) {
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibz = (izo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* Back bottom corner */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibz = (izo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
else { /* Elastic scheme */
/* Vx field */
/* mid bottom mid vx*/
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ieXz;
ize = mod.ieXz+bnd.ntap;
ib = (ize-bnd.ntap);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[iz-ib];
}
}
}
/* right bottom mid corner vx */
if (bnd.rig==4) {
ixo = mod.ieXx;
ixe = mod.ieXx+bnd.ntap;
ibz = (izo);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
/* right bottom front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* right bottom back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ieXz;
ize = mod.ieXz+bnd.ntap;
/* left bottom mid corner vx*/
if (bnd.lef==4) {
ixo = mod.ioXx-bnd.ntap;
ixe = mod.ioXx;
ibz = (izo);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
/* left bottom front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* left bottom back corner vx*/
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
/* mid bottom front corner vx */
if (bnd.fro==4) {
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibz = (izo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* mid bottom back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibz = (izo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* Vy field */
/* mid bottom mid vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ieYz;
ize = mod.ieYz+bnd.ntap;
ib = (ize-bnd.ntap);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iz-ib];
}
}
}
/* right bottom mid corner vy */
if (bnd.rig==4) {
ixo = mod.ieYx;
ixe = ixo+bnd.ntap;
ibz = (izo);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
/* right bottom front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* right bottom back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ieYz;
ize = mod.ieYz+bnd.ntap;
/* left bottom mid corner vy */
if (bnd.lef==4) {
ixo = mod.ioYx-bnd.ntap;
ixe = mod.ioYx;
ibz = (izo);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
/* left bottom front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* left bottom back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
/* mid bottom front corner vy */
if (bnd.fro==4) {
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibz = (izo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* mid bottom back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibz = (izo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* Vz field */
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ieZz;
ize = mod.ieZz+bnd.ntap;
ib = (ize-bnd.ntap);
#pragma omp for private (ix, iy, iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[iz-ib];
}
}
}
/* right bottom corner */
if (bnd.rig==4) {
ixo = mod.ieZx;
ixe = ixo+bnd.ntap;
ibz = (izo);
ibx = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
/* right bottom front corner */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* right bottom back corner */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ix-ibx)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ieZz;
ize = mod.ieZz+bnd.ntap;
/* left bottom corner */
if (bnd.lef==4) {
ixo = mod.ioZx-bnd.ntap;
ixe = mod.ioZx;
ibz = (izo);
ibx = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
//#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
/* left bottom front corner */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
for (iy=iyo; iy<iye; iy++) {
#pragma ivdep
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iby-iy)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* left bottom back corner */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxyz[(iy-iby)*bnd.ntap*bnd.ntap+(ibx-ix)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
/* front bottom corner */
if (bnd.fro==4) {
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibz = (izo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(iz-ibz)];
}
}
}
}
/* Back bottom corner */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibz = (izo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(iz-ibz)];
}
}
}
}
}
}
/*********/
/* Left */
/*********/
if (bnd.lef==4) {
if (mod.ischeme <= 2) { /* Acoustic scheme */
/* Vx field */
/* left mid mid vx */
ixo = mod.ioXx-bnd.ntap;
ixe = mod.ioXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz;
ize = mod.ieXz;
ib = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ib-ix];
}
}
}
/* left mid front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibx = (bnd.ntap+ixo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* left mid back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibx = (bnd.ntap+ixo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* Vy field */
/* left mid mid vy */
ixo = mod.ioYx-bnd.ntap;
ixe = mod.ioYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz;
ize = mod.ieYz;
ib = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ib-ix];
}
}
}
/* left mid front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibx = (bnd.ntap+ixo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* left mid back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibx = (bnd.ntap+ixo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* Vz field */
/* left mid mid vz */
ixo = mod.ioZx-bnd.ntap;
ixe = mod.ioZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz;
ize = mod.ieZz;
ib = (bnd.ntap+ixo-1);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[ib-ix];
}
}
}
/* left mid front corner vz*/
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibx = (bnd.ntap+ixo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* left mid back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibx = (bnd.ntap+ixo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibx-ix)];
}
}
}
}
}
else { /* Elastic scheme */
/* Vx field */
/* left mid mid vx */
ixo = mod.ioXx-bnd.ntap;
ixe = mod.ioXx;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz;
ize = mod.ieXz;
ib = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ib-ix];
}
}
}
/* left mid front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibx = (bnd.ntap+ixo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* left mid back corner vx */
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibx = (bnd.ntap+ixo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* Vy field */
/* left mid mid vy */
ixo = mod.ioYx-bnd.ntap;
ixe = mod.ioYx;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz;
ize = mod.ieYz;
ib = (bnd.ntap+ixo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ib-ix];
}
}
}
/* left mid front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibx = (bnd.ntap+ixo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* left mid back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibx = (bnd.ntap+ixo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* Vz field */
/* left mid mid vz */
ixo = mod.ioZx-bnd.ntap;
ixe = mod.ioZx;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz;
ize = mod.ieZz;
ib = (bnd.ntap+ixo-1);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[ib-ix];
}
}
}
/* left mid front corner vz*/
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibx = (bnd.ntap+ixo-1);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ibx-ix)];
}
}
}
}
/* left mid back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibx = (bnd.ntap+ixo-1);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ibx-ix)];
}
}
}
}
}
}
/*********/
/* Right */
/*********/
if (bnd.rig==4) {
if (mod.ischeme <= 2) { /* Acoustic scheme */
/* Vx field */
/* right mid mid vx */
ixo = mod.ieXx;
ixe = mod.ieXx+bnd.ntap;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz;
ize = mod.ieXz;
ib = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ix-ib];
}
}
}
/* right mid front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibx = (ixo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* right mid back corner vx*/
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibx = (ixo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* Vy field */
/* right mid mid vy */
ixo = mod.ieYx;
ixe = mod.ieYx+bnd.ntap;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz;
ize = mod.ieYz;
ib = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ix-ib];
}
}
}
/* right mid front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibx = (ixo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* right mid back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibx = (ixo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* Vz field */
/* right mid mid vz */
ixo = mod.ieZx;
ixe = mod.ieZx+bnd.ntap;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz;
ize = mod.ieZz;
ib = (ixo);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[ix-ib];
}
}
}
/* right mid front corner vz */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibx = (ixo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* right mid back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibx = (ixo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ix-ibx)];
}
}
}
}
}
else { /* Elastic scheme */
/* Vx field */
/* right mid mid vx */
ixo = mod.ieXx;
ixe = mod.ieXx+bnd.ntap;
iyo = mod.ioXy;
iye = mod.ieXy;
izo = mod.ioXz;
ize = mod.ieXz;
ib = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ix-ib];
}
}
}
/* right mid front corner vx */
if (bnd.fro==4) {
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
ibx = (ixo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* right mid back corner vx*/
if (bnd.bac==4) {
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
ibx = (ixo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* Vy field */
/* right mid mid vy */
ixo = mod.ieYx;
ixe = mod.ieYx+bnd.ntap;
iyo = mod.ioYy;
iye = mod.ieYy;
izo = mod.ioYz;
ize = mod.ieYz;
ib = (ixo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapx[ix-ib];
}
}
}
/* right mid front corner vy */
if (bnd.fro==4) {
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
ibx = (ixo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* right mid back corner vy */
if (bnd.bac==4) {
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
ibx = (ixo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* Vz field */
/* right mid mid vz */
ixo = mod.ieZx;
ixe = mod.ieZx+bnd.ntap;
iyo = mod.ioZy;
iye = mod.ieZy;
izo = mod.ioZz;
ize = mod.ieZz;
ib = (ixo);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapz[ix-ib];
}
}
}
/* right mid front corner vz */
if (bnd.fro==4) {
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
ibx = (ixo);
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iby-iy)*bnd.ntap+(ix-ibx)];
}
}
}
}
/* right mid back corner vz */
if (bnd.bac==4) {
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
ibx = (ixo);
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapxz[(iy-iby)*bnd.ntap+(ix-ibx)];
}
}
}
}
}
}
/*********/
/* Front */
/*********/
if (bnd.fro==4) {
if (mod.ischeme <= 2) { /* Acoustic scheme */
/* Vx field */
/* mid mid front vx */
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
izo = mod.ioXz;
ize = mod.ieXz;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iby-iy];
}
}
}
/* Vy field */
/* mid mid front vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
izo = mod.ioYz;
ize = mod.ieYz;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iby-iy];
}
}
}
/* Vz field */
/* mid mid front vz */
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
izo = mod.ioZz;
ize = mod.ieZz;
iby = (bnd.ntap+iyo-1);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iby-iy];
}
}
}
}
else { /* Elastic scheme */
/* Vx field */
/* mid mid front vx */
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ioXy-bnd.ntap;
iye = mod.ioXy;
izo = mod.ioXz;
ize = mod.ieXz;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iby-iy];
}
}
}
/* Vy field */
/* mid mid front vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ioYy-bnd.ntap;
iye = mod.ioYy;
izo = mod.ioYz;
ize = mod.ieYz;
iby = (bnd.ntap+iyo-1);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iby-iy];
}
}
}
/* Vz field */
/* mid mid front vz */
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ioZy-bnd.ntap;
iye = mod.ioZy;
izo = mod.ioZz;
ize = mod.ieZz;
iby = (bnd.ntap+iyo-1);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iby-iy];
}
}
}
}
}
/********/
/* Back */
/********/
if (bnd.bac==4) {
if (mod.ischeme <= 2) { /* Acoustic scheme */
/* Vx field */
/* mid mid back vx */
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
izo = mod.ioXz;
ize = mod.ieXz;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+(ix-1)*n1+iz]) +
c2*(tzz[iy*n1*n2+(ix+1)*n1+iz] - tzz[iy*n1*n2+(ix-2)*n1+iz]));
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iy-iby];
}
}
}
/* Vy field */
/* mid mid back vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
izo = mod.ioYz;
ize = mod.ieYz;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[(iy-1)*n1*n2+ix*n1+iz]) +
c2*(tzz[(iy+1)*n1*n2+ix*n1+iz] - tzz[(iy-2)*n1*n2+ix*n1+iz]));
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iy-iby];
}
}
}
/* Vz field */
/* mid mid back vz */
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
izo = mod.ioZz;
ize = mod.ieZz;
iby = (iyo);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n1*n2+ix*n1+iz] - tzz[iy*n1*n2+ix*n1+iz-1]) +
c2*(tzz[iy*n1*n2+ix*n1+iz+1] - tzz[iy*n1*n2+ix*n1+iz-2]));
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iy-iby];
}
}
}
}
else { /* Elastic scheme */
/* Vx field */
/* mid mid back vx */
ixo = mod.ioXx;
ixe = mod.ieXx;
iyo = mod.ieXy;
iye = mod.ieXy+bnd.ntap;
izo = mod.ioXz;
ize = mod.ieXz;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vx[iy*n1*n2+ix*n1+iz] -= rox[iy][ix][iz]*(
c1*(txx[iy*n2*n1+ix*n1+iz] - txx[iy*n2*n1+(ix-1)*n1+iz] +
txy[(iy+1)*n2*n1+ix*n1+iz] - txy[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+1] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(txx[iy*n2*n1+(ix+1)*n1+iz] - txx[iy*n2*n1+(ix-2)*n1+iz] +
txy[(iy+2)*n2*n1+ix*n1+iz] - txy[(iy-1)*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+ix*n1+iz+2] - txz[iy*n2*n1+ix*n1+iz-1]) );
vx[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iy-iby];
}
}
}
/* Vy field */
/* mid mid back vy */
ixo = mod.ioYx;
ixe = mod.ieYx;
iyo = mod.ieYy;
iye = mod.ieYy+bnd.ntap;
izo = mod.ioYz;
ize = mod.ieYz;
iby = (iyo);
#pragma omp for private(ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vy[iy*n1*n2+ix*n1+iz] -= roy[iy][ix][iz]*(
c1*(tyy[iy*n2*n1+ix*n1+iz] - tyy[(iy-1)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+1] - tyz[iy*n2*n1+ix*n1+iz] +
txy[iy*n2*n1+(ix+1)*n1+iz] - txy[iy*n2*n1+ix*n1+iz]) +
c2*(tyy[(iy+1)*n2*n1+ix*n1+iz] - tyy[(iy-2)*n2*n1+ix*n1+iz] +
tyz[iy*n2*n1+ix*n1+iz+2] - tyz[iy*n2*n1+ix*n1+iz-1] +
txy[iy*n2*n1+(ix+2)*n1+iz] - txy[iy*n2*n1+(ix-1)*n1+iz]) );
vy[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iy-iby];
}
}
}
/* Vz field */
/* mid mid back vz */
ixo = mod.ioZx;
ixe = mod.ieZx;
iyo = mod.ieZy;
iye = mod.ieZy+bnd.ntap;
izo = mod.ioZz;
ize = mod.ieZz;
iby = (iyo);
#pragma omp for private (ix,iy,iz)
for (ix=ixo; ix<ixe; ix++) {
#pragma ivdep
for (iy=iyo; iy<iye; iy++) {
for (iz=izo; iz<ize; iz++) {
vz[iy*n1*n2+ix*n1+iz] -= roz[iy][ix][iz]*(
c1*(tzz[iy*n2*n1+ix*n1+iz] - tzz[iy*n2*n1+ix*n1+iz-1] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+1)*n1+iz] - txz[iy*n2*n1+ix*n1+iz]) +
c2*(tzz[iy*n2*n1+ix*n1+iz+1] - tzz[iy*n2*n1+ix*n1+iz-2] +
tyz[(iy+1)*n2*n1+ix*n1+iz] - tyz[iy*n2*n1+ix*n1+iz] +
txz[iy*n2*n1+(ix+2)*n1+iz] - txz[iy*n2*n1+(ix-1)*n1+iz]) );
vz[iy*n1*n2+ix*n1+iz] *= bnd.tapy[iy-iby];
}
}
}
}
}
if ( (npml != 0) && (itime==mod.nt-1) && pml) {
#pragma omp master
{
if (allocated) {
free(Vxpml);
free(Vypml);
free(Vzpml);
free(sigmu);
free(RA);
allocated=0;
}
}
}
return 0;
}
long boundariesV3D(modPar mod, bndPar bnd, float *vx, float *vy, float *vz, float *tzz, float *tyy, float *txx, float *txz, float *txy, float *tyz, float ***rox, float ***roy, float ***roz, float ***l2m, float ***lam, float ***mul, long itime, long verbose)
{
/*********************************************************************
AUTHOR:
Jan Thorbecke (janth@xs4all.nl)
The Netherlands
***********************************************************************/
float c1, c2;
float dp, dvx, dvy, dvz;
long ix, iy, iz, ixs, iys, izs, izp, ib;
long nx, ny, nz, n1, n2, n3;
long is0, isrc;
long ixo, ixe, iyo, iye, izo, ize;
long npml, ipml, ipml2, pml;
float kappu, alphu, sigmax, R, a, m, fac, dx, dy, dt;
float *p;
static float *Pxpml, *Pypml, *Pzpml, *sigmu, *RA;
static long allocated=0;
float Jx, Jy, Jz, rho, d;
c1 = 9.0/8.0;
c2 = -1.0/24.0;
nx = mod.nx;
ny = mod.ny;
nz = mod.nz;
n1 = mod.naz;
n2 = mod.nax;
n3 = mod.nay;
dx = mod.dx;
dy = mod.dy;
dt = mod.dt;
fac = dt/dx;
if ( (bnd.top==2) || (bnd.bot==2) || (bnd.lef==2) || (bnd.rig==2) || (bnd.fro==2) || (bnd.bac==2) ) pml=1;
else pml=0;
/************************************************************/
/* PML boundaries for acoustic schemes */
/* compute all field values in tapered areas */
/************************************************************/
npml=bnd.npml; /* lenght of pml in grid-points */
if ( (npml != 0) && (itime==0) && pml) {
#pragma omp master
{
if (allocated) {
free(Pxpml);
free(Pypml);
free(Pzpml);
free(sigmu);
free(RA);
}
Pxpml = (float *)calloc(2*n1*n3*npml,sizeof(float));
Pypml = (float *)calloc(2*n2*n1*npml,sizeof(float));
Pzpml = (float *)calloc(2*n3*n2*npml,sizeof(float));
sigmu = (float *)calloc(npml,sizeof(float));
RA = (float *)calloc(npml,sizeof(float));
allocated = 1;
/* calculate sigmu and RA only once with fixed velocity Cp */
m=bnd.m; /* scaling order */
R=bnd.R; /* the theoretical reflection coefficient after discretization */
kappu = 1.0; /* auxiliary attenuation coefficient for small angles */
alphu=0.0; /* auxiliary attenuation coefficient for low frequencies */
d = (npml-1)*dx; /* depth of pml */
/* sigmu attenuation factor representing the loss in the PML depends on the grid position in the PML */
sigmax = ((3.0*mod.cp_min)/(2.0*d))*log(1.0/R);
for (ib=0; ib<npml; ib++) { /* ib=0 interface between PML and interior */
a = (float) (ib/(npml-1.0));
sigmu[ib] = sigmax*pow(a,m);
RA[ib] = (1.0)/(1.0+0.5*dt*sigmu[ib]);
}
}
}
#pragma omp barrier
if (mod.ischeme == 1 && pml) { /* Acoustic scheme PML's */
p = tzz; /* Tzz array pointer points to P-field */
if (bnd.top==2) mod.ioPz += bnd.npml;
if (bnd.bot==2) mod.iePz -= bnd.npml;
if (bnd.lef==2) mod.ioPx += bnd.npml;
if (bnd.rig==2) mod.iePx -= bnd.npml;
if (bnd.fro==2) mod.ioPy += bnd.npml;
if (bnd.bac==2) mod.iePy -= bnd.npml;
/* PML top P */
if (bnd.top == 2) {
/* PML top P-Vz-component */
#pragma omp for private (ix, iy, iz, dvx, dvy, dvz, Jz, ipml)
for (iy=mod.ioPy; iy<mod.iePy; iy++) {
ipml2 = npml-1;
for (ix=mod.ioPx; ix<mod.iePx; ix++) {
ipml = npml-1;
for (iz=mod.ioPz-npml; iz<mod.ioPz; iz++) {
dvx = c1*(vx[iy*n2*n1+(ix+1)*n1+iz] - vx[iy*n2*n1+ix*n1+iz]) +
c2*(vx[iy*n2*n1+(ix+2)*n1+iz] - vx[iy*n2*n1+(ix-1)*n1+iz]);
dvy = c1*(vy[(iy+1)*n2*n1+ix*n1+iz] - vy[iy*n2*n1+ix*n1+iz]) +
c2*(vy[(iy+2)*n2*n1+ix*n1+iz] - vy[(iy-1)*n2*n1+ix*n1+iz]);
dvz = c1*(vz[iy*n2*n1+ix*n1+iz+1] - vz[iy*n2*n1+ix*n1+iz]) +
c2*(vz[iy*n2*n1+ix*n1+iz+2] - vz[iy*n2*n1+ix*n1+iz-1]);
Jz = RA[ipml2]*RA[ipml]*dvz - RA[ipml2]*RA[ipml]*dt*Pzpml[ix*npml+ipml];
Pzpml[ix*npml+ipml] += sigmu[ipml]*Jz;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jz+dvx);
ipml--;
}
}
}
}
/* PML left P */
if (bnd.lef == 2) {
/* PML left P-Vx-component */
#pragma omp for private (ix, iz, dvx, dvz, Jx, ipml)
for (iz=mod.ioPz; iz<mod.iePz; iz++) {
ipml = npml-1;
for (ix=mod.ioPx-npml; ix<mod.ioPx; ix++) {
dvx = c1*(vx[(ix+1)*n1+iz] - vx[ix*n1+iz]) +
c2*(vx[(ix+2)*n1+iz] - vx[(ix-1)*n1+iz]);
dvz = c1*(vz[ix*n1+iz+1] - vz[ix*n1+iz]) +
c2*(vz[ix*n1+iz+2] - vz[ix*n1+iz-1]);
Jx = RA[ipml]*dvx - RA[ipml]*dt*Pxpml[iz*npml+ipml];
Pxpml[iz*npml+ipml] += sigmu[ipml]*Jx;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jx+dvz);
ipml--;
}
}
}
/* PML corner left-top P */
if (bnd.lef == 2 && bnd.top == 2) {
/* PML left P-Vx-component */
#pragma omp for private (ix, iz, dvx, Jx, ipml)
for (iz=mod.ioPz-npml; iz<mod.ioPz; iz++) {
ipml = npml-1;
for (ix=mod.ioPx-npml; ix<mod.ioPx; ix++) {
dvx = c1*(vx[(ix+1)*n1+iz] - vx[ix*n1+iz]) +
c2*(vx[(ix+2)*n1+iz] - vx[(ix-1)*n1+iz]);
Jx = RA[ipml]*dvx - RA[ipml]*dt*Pxpml[iz*npml+ipml];
Pxpml[iz*npml+ipml] += sigmu[ipml]*Jx;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jx);
ipml--;
}
}
/* PML top P-Vz-component */
#pragma omp for private (ix, iz, dvz, Jz, ipml)
for (ix=mod.ioPx-npml; ix<mod.ioPx; ix++) {
ipml = npml-1;
for (iz=mod.ioPz-npml; iz<mod.ioPz; iz++) {
dvz = c1*(vz[ix*n1+iz+1] - vz[ix*n1+iz]) +
c2*(vz[ix*n1+iz+2] - vz[ix*n1+iz-1]);
Jz = RA[ipml]*dvz - RA[ipml]*dt*Pzpml[ix*npml+ipml];
Pzpml[ix*npml+ipml] += sigmu[ipml]*Jz;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jz);
ipml--;
}
}
}
/* PML right P */
if (bnd.rig == 2) {
/* PML right P Vx-component */
#pragma omp for private (ix, iz, dvx, dvz, Jx, ipml)
for (iz=mod.ioPz; iz<mod.iePz; iz++) {
ipml = 0;
for (ix=mod.iePx; ix<mod.iePx+npml; ix++) {
dvx = c1*(vx[(ix+1)*n1+iz] - vx[ix*n1+iz]) +
c2*(vx[(ix+2)*n1+iz] - vx[(ix-1)*n1+iz]);
dvz = c1*(vz[ix*n1+iz+1] - vz[ix*n1+iz]) +
c2*(vz[ix*n1+iz+2] - vz[ix*n1+iz-1]);
Jx = RA[ipml]*dvx - RA[ipml]*dt*Pxpml[n1*npml+iz*npml+ipml];
Pxpml[n1*npml+iz*npml+ipml] += sigmu[ipml]*Jx;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jx+dvz);
ipml++;
}
}
}
/* PML corner right-top P */
if (bnd.rig == 2 && bnd.top == 2) {
/* PML right P Vx-component */
#pragma omp for private (ix, iz, dvx, Jx, ipml)
for (iz=mod.ioPz-npml; iz<mod.ioPz; iz++) {
ipml = 0;
for (ix=mod.iePx; ix<mod.iePx+npml; ix++) {
dvx = c1*(vx[(ix+1)*n1+iz] - vx[ix*n1+iz]) +
c2*(vx[(ix+2)*n1+iz] - vx[(ix-1)*n1+iz]);
Jx = RA[ipml]*dvx - RA[ipml]*dt*Pxpml[n1*npml+iz*npml+ipml];
Pxpml[n1*npml+iz*npml+ipml] += sigmu[ipml]*Jx;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jx);
ipml++;
}
}
/* PML top P-Vz-component */
#pragma omp for private (ix, iz, dvz, Jz, ipml)
for (ix=mod.iePx; ix<mod.iePx+npml; ix++) {
ipml = npml-1;
for (iz=mod.ioPz-npml; iz<mod.ioPz; iz++) {
dvz = c1*(vz[ix*n1+iz+1] - vz[ix*n1+iz]) +
c2*(vz[ix*n1+iz+2] - vz[ix*n1+iz-1]);
Jz = RA[ipml]*dvz - RA[ipml]*dt*Pzpml[ix*npml+ipml];
Pzpml[ix*npml+ipml] += sigmu[ipml]*Jz;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jz);
ipml--;
}
}
}
/* PML bottom P */
if (bnd.bot == 2) {
/* PML bottom P Vz-component */
#pragma omp for private (ix, iz, dvx, dvz, Jz, ipml)
for (ix=mod.ioPx; ix<mod.iePx; ix++) {
ipml = 0;
for (iz=mod.iePz; iz<mod.iePz+npml; iz++) {
dvx = c1*(vx[(ix+1)*n1+iz] - vx[ix*n1+iz]) +
c2*(vx[(ix+2)*n1+iz] - vx[(ix-1)*n1+iz]);
dvz = c1*(vz[ix*n1+iz+1] - vz[ix*n1+iz]) +
c2*(vz[ix*n1+iz+2] - vz[ix*n1+iz-1]);
Jz = RA[ipml]*dvz - RA[ipml]*dt*Pzpml[n2*npml+ix*npml+ipml];
Pzpml[n2*npml+ix*npml+ipml] += sigmu[ipml]*Jz;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jz+dvx);
ipml++;
}
}
}
/* PML corner bottom-right P */
if (bnd.bot == 2 && bnd.rig == 2) {
/* PML bottom P Vz-component */
#pragma omp for private (ix, iz, dvz, Jz, ipml)
for (ix=mod.iePx; ix<mod.iePx+npml; ix++) {
ipml = 0;
for (iz=mod.iePz; iz<mod.iePz+npml; iz++) {
dvz = c1*(vz[ix*n1+iz+1] - vz[ix*n1+iz]) +
c2*(vz[ix*n1+iz+2] - vz[ix*n1+iz-1]);
Jz = RA[ipml]*dvz - RA[ipml]*dt*Pzpml[n2*npml+ix*npml+ipml];
Pzpml[n2*npml+ix*npml+ipml] += sigmu[ipml]*Jz;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jz);
ipml++;
}
}
/* PML right P Vx-component */
#pragma omp for private (ix, iz, dvx, Jx, ipml)
for (iz=mod.iePz; iz<mod.iePz+npml; iz++) {
ipml = 0;
for (ix=mod.iePx; ix<mod.iePx+npml; ix++) {
dvx = c1*(vx[(ix+1)*n1+iz] - vx[ix*n1+iz]) +
c2*(vx[(ix+2)*n1+iz] - vx[(ix-1)*n1+iz]);
Jx = RA[ipml]*dvx - RA[ipml]*dt*Pxpml[n1*npml+iz*npml+ipml];
Pxpml[n1*npml+iz*npml+ipml] += sigmu[ipml]*Jx;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jx);
//p[ix*n1+iz] -= l2m[ix*n1+iz]*(dvx);
ipml++;
}
}
}
/* PML corner left-bottom P */
if (bnd.bot == 2 && bnd.lef == 2) {
/* PML bottom P Vz-component */
#pragma omp for private (ix, iz, dvz, Jz, ipml)
for (ix=mod.ioPx-npml; ix<mod.ioPx; ix++) {
ipml = 0;
for (iz=mod.iePz; iz<mod.iePz+npml; iz++) {
dvz = c1*(vz[ix*n1+iz+1] - vz[ix*n1+iz]) +
c2*(vz[ix*n1+iz+2] - vz[ix*n1+iz-1]);
Jz = RA[ipml]*dvz - RA[ipml]*dt*Pzpml[n2*npml+ix*npml+ipml];
Pzpml[n2*npml+ix*npml+ipml] += sigmu[ipml]*Jz;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jz);
ipml++;
}
}
/* PML left P Vx-component */
#pragma omp for private (ix, iz, dvx, Jx, ipml)
for (iz=mod.iePz; iz<mod.iePz+npml; iz++) {
ipml = npml-1;
for (ix=mod.ioPx-npml; ix<mod.ioPx; ix++) {
dvx = c1*(vx[(ix+1)*n1+iz] - vx[ix*n1+iz]) +
c2*(vx[(ix+2)*n1+iz] - vx[(ix-1)*n1+iz]);
Jx = RA[ipml]*dvx - RA[ipml]*dt*Pxpml[iz*npml+ipml];
Pxpml[iz*npml+ipml] += sigmu[ipml]*Jx;
p[ix*n1+iz] -= l2m[iy][ix][iz]*(Jx);
ipml--;
}
}
}
if (bnd.top==2) mod.ioPz -= bnd.npml;
if (bnd.bot==2) mod.iePz += bnd.npml;
if (bnd.lef==2) mod.ioPx -= bnd.npml;
if (bnd.rig==2) mod.iePx += bnd.npml;
} /* end acoustic PML */
/****************************************************************/
/* Free surface: calculate free surface conditions for stresses */
/****************************************************************/
ixo = mod.ioPx;
ixe = mod.iePx;
iyo = mod.ioPy;
iye = mod.iePy;
izo = mod.ioPz;
ize = mod.iePz;
if (mod.ischeme <= 2) { /* Acoustic scheme */
if (bnd.top==1) { /* free surface at top */
#pragma omp for private (ix,iy) nowait
for (ix=mod.ioPx; ix<mod.iePx; ix++) {
for (iy=mod.ioPy; iy<mod.iePy; iy++) {
iz = bnd.surface[iy*n2+ix];
tzz[iy*n2*n1+ix*n1+iz] = 0.0;
//vz[ix*n1+iz] = -vz[ix*n1+iz+1];
//vz[ix*n1+iz-1] = -vz[ix*n1+iz+2];
}
}
}
if (bnd.rig==1) { /* free surface at right */
#pragma omp for private (iy,iz) nowait
for (iz=mod.ioPz; iz<mod.iePz; iz++) {
for (iy=mod.ioPy; iy<mod.iePy; iy++) {
tzz[iy*n1*n2+(mod.iePx-1)*n1+iz] = 0.0;
}
}
}
if (bnd.fro==1) { /* free surface at front */
#pragma omp for private (ix,iz) nowait
for (iz=mod.ioPz; iz<mod.iePz; iz++) {
for (ix=mod.ioPx; ix<mod.iePx; ix++) {
tzz[(mod.ioPy-1)*n1*n2+ix*n1+iz] = 0.0;
}
}
}
if (bnd.bot==1) { /* free surface at bottom */
#pragma omp for private (ix,iy) nowait
for (ix=mod.ioPx; ix<mod.iePx; ix++) {
for (iy=mod.ioPy; iy<mod.iePy; iy++) {
tzz[iy*n1*n2+ix*n1+mod.iePz-1] = 0.0;
}
}
}
if (bnd.lef==1) { /* free surface at left */
#pragma omp for private (iy,iz) nowait
for (iz=mod.ioPz; iz<mod.iePz; iz++) {
for (iy=mod.ioPy; iy<mod.iePy; iy++) {
tzz[iy*n1*n2+(mod.ioPx-1)*n1+iz] = 0.0;
}
}
}
if (bnd.bac==1) { /* free surface at back */
#pragma omp for private (ix,iz) nowait
for (iz=mod.ioPz; iz<mod.iePz; iz++) {
for (ix=mod.ioPx; ix<mod.iePx; ix++) {
tzz[(mod.iePy-1)*n1*n2+ix*n1+iz] = 0.0;
}
}
}
}
if ( (npml != 0) && (itime==mod.nt-1) && pml) {
#pragma omp master
{
if (allocated) {
free(Pxpml);
free(Pypml);
free(Pzpml);
free(sigmu);
free(RA);
allocated=0;
}
}
}
return 0;
}