#include<stdlib.h> #include<stdio.h> #include<math.h> #include<assert.h> #include"fdelmodc3D.h" #define ISODD(n) ((n) & 01) static float *src1x, *src1y, *src1z, *src2x, *src2y, *src2z; static long first=1; void vmess(char *fmt, ...); long allocStoreSourceOnSurface3D(srcPar src) { /* allocated 2x size for dipole Potential sources */ src1x = (float *)calloc(2*src.n, sizeof(float)); src1y = (float *)calloc(2*src.n, sizeof(float)); src1z = (float *)calloc(2*src.n, sizeof(float)); src2x = (float *)calloc(2*src.n, sizeof(float)); src2y = (float *)calloc(2*src.n, sizeof(float)); src2z = (float *)calloc(2*src.n, sizeof(float)); first = 0; return 0; } long freeStoreSourceOnSurface3D(void) { free(src1x); free(src1y); free(src1z); free(src2x); free(src2y); free(src2z); first = 1; return 0; } long storeSourceOnSurface3D(modPar mod, srcPar src, bndPar bnd, long ixsrc, long iysrc, long izsrc, float *vx, float *vy, float *vz, float *tzz, float *tyy, float *txx, float *txz, float *txy, float *tyz, long verbose) { /********************************************************************** AUTHOR: Jan Thorbecke (janth@xs4all.nl) The Netherlands ***********************************************************************/ long ixs, iys, izs, isrc, is0; long ibndz, ibndy, ibndx, store; long nx, ny, nz, n1, n2; nx = mod.nx; ny = mod.ny; nz = mod.nz; n1 = mod.naz; n2 = mod.nax; if (src.type==6) { ibndz = mod.ioXz; ibndy = mod.ioXy; ibndx = mod.ioXx; } else if (src.type==7) { ibndz = mod.ioZz; ibndy = mod.ioZy; ibndx = mod.ioZx; } else if (src.type==2) { ibndz = mod.ioTz; ibndy = mod.ioTy; ibndx = mod.ioTx; if (bnd.lef==4 || bnd.lef==2) ibndx += bnd.ntap; if (bnd.fro==4 || bnd.fro==2) ibndy += bnd.ntap; } else { ibndz = mod.ioPz; ibndy = mod.ioPy; ibndx = mod.ioPx; if (bnd.lef==4 || bnd.lef==2) ibndx += bnd.ntap; if (bnd.fro==4 || bnd.fro==2) ibndy += bnd.ntap; } /* check if there are sources placed on the boundaries */ is0 = -1*floor((src.n-1)/2); #pragma omp for private (isrc, ixs, iys, izs, store) for (isrc=0; isrc<src.n; isrc++) { /* calculate the source position */ if (src.random || src.multiwav) { ixs = src.x[isrc] + ibndx; iys = src.y[isrc] + ibndy; izs = src.z[isrc] + ibndz; } else if (src.plane) {/* plane wave sources */ ixs = ixsrc + ibndx + src.x[isrc]; iys = iysrc + ibndy + src.y[isrc]; izs = izsrc + ibndz + src.z[isrc]; } else { /* point sources */ ixs = ixsrc + ibndx + isrc; iys = iysrc + ibndy + isrc; izs = izsrc + ibndz; } /* check if there are source positions placed on the boundaries. * In that case store them and reapply them after the boundary * conditions have been set */ store=0; if ( (ixs <= ibndx+1) && ISODD(bnd.lef)) store=1; if ( (ixs >= nx+ibndx) && ISODD(bnd.rig)) store=1; if ( (iys <= ibndy+1) && ISODD(bnd.fro)) store=1; if ( (iys >= ny+ibndy) && ISODD(bnd.bac)) store=1; if ( (izs <= ibndz+1) && ISODD(bnd.top)) store=1; if ( (izs >= nz+ibndz) && ISODD(bnd.bot)) store=1; if (mod.ischeme <= 2) { /* Acoustic scheme */ if (store) { if (verbose>=5) vmess("source at x=%li y=%li z=%li stored before free surface", ixs, iys, izs); /* Compressional source */ if (src.type == 1) { if (src.orient==1) { /* monopole */ src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; } else if (src.orient==2) { /* dipole +/- */ src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; src2z[isrc] = tzz[iys*n1*n2+ixs*n1+izs+1]; } else if (src.orient==3) { /* dipole - + */ src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; src2z[isrc] = tzz[iys*n1*n2+(ixs-1)*n1+izs]; } else if (src.orient==4) { /* dipole +/0/- */ if (izs > ibndz) src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs-1]; if (izs < mod.nz+ibndz-1) src2z[isrc] = tzz[iys*n1*n2+ixs*n1+izs+1]; } else if (src.orient==5) { /* dipole + - */ src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; src2z[isrc] = tzz[iys*n1*n2+(ixs+1)*n1+izs]; } } else if (src.type==6) { src1x[isrc] = vx[iys*n1*n2+ixs*n1+izs]; } else if (src.type==7) { src1z[isrc] = vz[iys*n1*n2+ixs*n1+izs]; } } } else { /* Elastic scheme */ if (store) { if (verbose>=5) vmess("source at x=%li y=%li z=%li stored before free surface", ixs, iys, izs); if (src.type==1) { if (src.orient==1) { /* monopole */ src1x[isrc] = txx[iys*n1*n2+ixs*n1+izs]; src1y[isrc] = tyy[iys*n1*n2+ixs*n1+izs]; src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; } else if (src.orient==2) { /* dipole +/- */ src1x[isrc] = txx[iys*n1*n2+ixs*n1+izs]; src1y[isrc] = tyy[iys*n1*n2+ixs*n1+izs]; src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; src2x[isrc] = txx[iys*n1*n2+ixs*n1+izs+1]; src2y[isrc] = tyy[iys*n1*n2+ixs*n1+izs+1]; src2z[isrc] = tzz[iys*n1*n2+ixs*n1+izs+1]; } else if (src.orient==3) { /* dipole - + */ src1x[isrc] = txx[iys*n1*n2+ixs*n1+izs]; src1y[isrc] = tyy[iys*n1*n2+ixs*n1+izs]; src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; src2x[isrc] = txx[iys*n1*n2+(ixs-1)*n1+izs]; src2y[isrc] = tyy[iys*n1*n2+(ixs-1)*n1+izs]; src2z[isrc] = tzz[iys*n1*n2+(ixs-1)*n1+izs]; } else if (src.orient==4) { /* dipole +/0/- */ if (izs > ibndz) { src1x[isrc] = txx[iys*n1*n2+ixs*n1+izs-1]; src1y[isrc] = tyy[iys*n1*n2+ixs*n1+izs-1]; src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs-1]; } if (izs < mod.nz+ibndz-1) { src1x[isrc] = txx[iys*n1*n2+ixs*n1+izs+1]; src1y[isrc] = tyy[iys*n1*n2+ixs*n1+izs+1]; src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs+1]; } } else if (src.orient==5) { /* dipole + - */ src1x[isrc] = txx[iys*n1*n2+ixs*n1+izs]; src1y[isrc] = tyy[iys*n1*n2+ixs*n1+izs]; src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; src2x[isrc] = txx[iys*n1*n2+(ixs+1)*n1+izs]; src2y[isrc] = tyy[iys*n1*n2+(ixs+1)*n1+izs]; src2z[isrc] = tzz[iys*n1*n2+(ixs+1)*n1+izs]; } } else if (src.type==2) { /* Txz source */ if ((izs == ibndz) && bnd.top==1) { src1x[isrc] = txz[iys*n1*n2+(ixs-1)*n1+izs-1]; src2x[isrc] = txz[iys*n1*n2+ixs*n1+izs-1]; } else { src1x[isrc] = txz[iys*n1*n2+ixs*n1+izs]; } /* possible dipole orientations for a txz source */ if (src.orient == 2) { /* dipole +/- */ src2x[isrc] = txz[iys*n1*n2+ixs*n1+izs+1]; } else if (src.orient == 3) { /* dipole - + */ src2x[isrc] = txz[iys*n1*n2+(ixs-1)*n1+izs]; } else if (src.orient == 4) { /* dipole +/O/- */ /* correction: subtrace previous value to prevent z-1 values. */ src1x[isrc] = txz[iys*n1*n2+ixs*n1+izs]; src2x[isrc] = txz[iys*n1*n2+ixs*n1+izs+1]; } else if (src.orient == 5) { /* dipole + - */ src2x[isrc] = txz[iys*n1*n2+(ixs+1)*n1+izs]; } } else if (src.type==3) { src1z[isrc] = tzz[iys*n1*n2+ixs*n1+izs]; } else if (src.type==4) { src1x[isrc] = txx[iys*n1*n2+ixs*n1+izs]; } else if (src.type==5) { src1x[isrc] = vx[iys*n1*n2+ixs*n1+izs]; src1y[isrc] = vy[iys*n1*n2+ixs*n1+izs]; src1z[isrc] = vz[iys*n1*n2+ixs*n1+izs]; src2x[isrc] = vx[iys*n1*n2+ixs*n1+izs-1]; src2y[isrc] = vy[(iys-1)*n1*n2+ixs*n1+izs]; src2z[isrc] = vz[iys*n1*n2+(ixs-1)*n1+izs]; /* determine second position of dipole */ if (src.orient == 2) { /* dipole +/- vertical */ izs += 1; src1x[isrc+src.n] = vx[iys*n1*n2+ixs*n1+izs]; src1y[isrc+src.n] = vy[iys*n1*n2+ixs*n1+izs]; src1z[isrc+src.n] = vz[iys*n1*n2+ixs*n1+izs]; src2x[isrc+src.n] = vx[iys*n1*n2+ixs*n1+izs-1]; src2y[isrc+src.n] = vz[(iys-1)*n1*n2+ixs*n1+izs]; src2z[isrc+src.n] = vz[iys*n1*n2+(ixs-1)*n1+izs]; } else if (src.orient == 3) { /* dipole - + horizontal */ ixs += 1; src1x[isrc+src.n] = vx[iys*n1*n2+ixs*n1+izs]; src1y[isrc+src.n] = vy[iys*n1*n2+ixs*n1+izs]; src1z[isrc+src.n] = vz[iys*n1*n2+ixs*n1+izs]; src2x[isrc+src.n] = vx[iys*n1*n2+ixs*n1+izs-1]; src2y[isrc+src.n] = vz[(iys-1)*n1*n2+ixs*n1+izs]; src2z[isrc+src.n] = vz[iys*n1*n2+(ixs-1)*n1+izs]; } } else if (src.type==6) { src1x[isrc] = vx[iys*n1*n2+ixs*n1+izs]; } else if (src.type==7) { src1z[isrc] = vz[iys*n1*n2+ixs*n1+izs]; } else if (src.type==8) { src1x[isrc] = vx[iys*n1*n2+(ixs+1)*n1+izs]; src1y[isrc] = vy[(iys+1)*n1*n2+ixs*n1+izs]; src1z[isrc] = vz[iys*n1*n2+ixs*n1+izs+1]; src2x[isrc] = vx[iys*n1*n2+ixs*n1+izs]; src2y[isrc] = vy[iys*n1*n2+ixs*n1+izs]; src2z[isrc] = vz[iys*n1*n2+ixs*n1+izs]; /* determine second position of dipole */ if (src.orient == 2) { /* dipole +/- vertical */ izs += 1; src1x[isrc+src.n] = vx[iys*n1*n2+(ixs+1)*n1+izs]; src1y[isrc] = vy[(iys+1)*n1*n2+ixs*n1+izs]; src1z[isrc+src.n] = vz[iys*n1*n2+ixs*n1+izs+1]; src2x[isrc+src.n] = vx[iys*n1*n2+ixs*n1+izs]; src2y[isrc] = vy[iys*n1*n2+ixs*n1+izs]; src2z[isrc+src.n] = vz[iys*n1*n2+ixs*n1+izs]; } else if (src.orient == 3) { /* dipole - + horizontal */ ixs += 1; src1x[isrc+src.n] = vx[iys*n1*n2+(ixs+1)*n1+izs]; src1y[isrc] = vy[(iys+1)*n1*n2+ixs*n1+izs]; src1z[isrc+src.n] = vz[iys*n1*n2+ixs*n1+izs+1]; src2x[isrc+src.n] = vx[iys*n1*n2+ixs*n1+izs]; src2y[isrc] = vy[iys*n1*n2+ixs*n1+izs]; src2z[isrc+src.n] = vz[iys*n1*n2+ixs*n1+izs]; } } /* end of source.type */ } } } return 0; } long reStoreSourceOnSurface3D(modPar mod, srcPar src, bndPar bnd, long ixsrc, long iysrc, long izsrc, float *vx, float *vy, float *vz, float *tzz, float *tyy, float *txx, float *txz, float *txy, float *tyz, long verbose) { /********************************************************************** AUTHOR: Jan Thorbecke (janth@xs4all.nl) The Netherlands ***********************************************************************/ long ixs, iys, izs, isrc, is0; long ibndz, ibndy, ibndx, store; long nx, ny, nz, n1, n2; nx = mod.nx; ny = mod.ny; nz = mod.nz; n1 = mod.naz; n2 = mod.nax; if (src.type==6) { ibndz = mod.ioXz; ibndy = mod.ioXy; ibndx = mod.ioXx; } else if (src.type==7) { ibndz = mod.ioZz; ibndy = mod.ioZy; ibndx = mod.ioZx; } else if (src.type==2) { ibndz = mod.ioTz; ibndy = mod.ioTy; ibndx = mod.ioTx; if (bnd.lef==4 || bnd.lef==2) ibndx += bnd.ntap; if (bnd.fro==4 || bnd.fro==2) ibndy += bnd.ntap; } else { ibndz = mod.ioPz; ibndy = mod.ioPy; ibndx = mod.ioPx; if (bnd.lef==4 || bnd.lef==2) ibndx += bnd.ntap; if (bnd.fro==4 || bnd.fro==2) ibndy += bnd.ntap; } /* restore source positions on the edge */ is0 = -1*floor((src.n-1)/2); #pragma omp for private (isrc, ixs, iys, izs, store) for (isrc=0; isrc<src.n; isrc++) { /* calculate the source position */ if (src.random || src.multiwav) { ixs = src.x[isrc] + ibndx; iys = src.y[isrc] + ibndy; izs = src.z[isrc] + ibndz; } else { /* plane wave and point sources */ ixs = ixsrc + ibndx + is0 + isrc; iys = iysrc + ibndy + is0 + isrc; izs = izsrc + ibndz; } store=0; if ( (ixs <= ibndx+1) && ISODD(bnd.lef)) store=1; if ( (ixs >= nx+ibndx) && ISODD(bnd.rig)) store=1; if ( (iys <= ibndy+1) && ISODD(bnd.fro)) store=1; if ( (iys >= ny+ibndy) && ISODD(bnd.bac)) store=1; if ( (izs <= ibndz+1) && ISODD(bnd.top)) store=1; if ( (izs >= nz+ibndz) && ISODD(bnd.bot)) store=1; if (mod.ischeme <= 2) { /* Acoustic scheme */ if (store) { if (verbose>=5) vmess("source at x=%li y=%li z=%li restored at free surface", ixs, iys, izs); /* Compressional source */ if (src.type == 1) { if (src.orient==1) { /* monopole */ tzz[iys*n1*n2+ixs*n1+izs]= src1z[isrc]; } else if (src.orient==2) { /* dipole +/- */ tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; tzz[iys*n1*n2+ixs*n1+izs+1] = src2z[isrc]; } else if (src.orient==3) { /* dipole - + */ tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; tzz[iys*n1*n2+(ixs-1)*n1+izs] = src2z[isrc]; } else if (src.orient==4) { /* dipole +/0/- */ if (izs > ibndz) tzz[iys*n1*n2+ixs*n1+izs-1] = src1z[isrc]; if (izs < mod.nz+ibndz-1) tzz[iys*n1*n2+ixs*n1+izs+1] = src2z[isrc]; } else if (src.orient==5) { /* dipole + - */ tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; tzz[iys*n1*n2+(ixs+1)*n1+izs] = src2z[isrc]; } } else if (src.type==6) { vx[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; } else if (src.type==7) { vz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; } } } else { /* Elastic scheme */ if (store) { if (verbose>=5) vmess("source at x=%li y=%li z=%li restored at free surface", ixs, iys, izs); if (src.type==1) { if (src.orient==1) { /* monopole */ txx[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; tyy[iys*n1*n2+ixs*n1+izs] = src1y[isrc]; tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; } else if (src.orient==2) { /* dipole +/- */ txx[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; tyy[iys*n1*n2+ixs*n1+izs] = src1y[isrc]; tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; txx[iys*n1*n2+ixs*n1+izs+1] = src2x[isrc]; tyy[iys*n1*n2+ixs*n1+izs+1] = src2y[isrc]; tzz[iys*n1*n2+ixs*n1+izs+1] = src2z[isrc]; } else if (src.orient==3) { /* dipole - + */ txx[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; tyy[iys*n1*n2+ixs*n1+izs] = src1y[isrc]; tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; txx[iys*n1*n2+(ixs-1)*n1+izs] = src2x[isrc]; tyy[iys*n1*n2+(ixs-1)*n1+izs] = src2y[isrc]; tzz[iys*n1*n2+(ixs-1)*n1+izs] = src2z[isrc]; } else if (src.orient==4) { /* dipole +/0/- */ if (izs > ibndz) { txx[iys*n1*n2+ixs*n1+izs-1] = src1x[isrc]; tyy[iys*n1*n2+ixs*n1+izs-1] = src1y[isrc]; tzz[iys*n1*n2+ixs*n1+izs-1] = src1z[isrc]; } if (izs < mod.nz+ibndz-1) { txx[iys*n1*n2+ixs*n1+izs+1] = src1x[isrc]; tyy[iys*n1*n2+ixs*n1+izs+1] = src1y[isrc]; tzz[iys*n1*n2+ixs*n1+izs+1] = src1z[isrc]; } } else if (src.orient==5) { /* dipole + - */ txx[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; tyy[iys*n1*n2+ixs*n1+izs] = src1y[isrc]; tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; txx[iys*n1*n2+(ixs+1)*n1+izs] = src2x[isrc]; tyy[iys*n1*n2+(ixs+1)*n1+izs] = src2y[isrc]; tzz[iys*n1*n2+(ixs+1)*n1+izs] = src2z[isrc]; } } else if (src.type==2) { /* Txz source */ if ((izs == ibndz) && bnd.top==1) { txz[iys*n1*n2+(ixs-1)*n1+izs-1] = src1x[isrc]; txz[iys*n1*n2+ixs*n1+izs-1] = src2x[isrc]; } else { txz[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; } /* possible dipole orientations for a txz source */ if (src.orient == 2) { /* dipole +/- */ txz[iys*n1*n2+ixs*n1+izs+1] = src2x[isrc]; } else if (src.orient == 3) { /* dipole - + */ txz[iys*n1*n2+(ixs-1)*n1+izs] = src2x[isrc]; } else if (src.orient == 4) { /* dipole +/O/- */ /* correction: subtrace previous value to prevent z-1 values. */ txz[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; txz[iys*n1*n2+ixs*n1+izs+1] = src2x[isrc]; } else if (src.orient == 5) { /* dipole + - */ txz[iys*n1*n2+(ixs+1)*n1+izs] = src2x[isrc]; } } else if (src.type==3) { tzz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; } else if (src.type==4) { txx[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; } else if (src.type==5) { vx[iys*n1*n2+ixs*n1+izs]= src1x[isrc]; vy[iys*n1*n2+ixs*n1+izs] = src1y[isrc]; vz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; vx[iys*n1*n2+ixs*n1+izs-1] = src2x[isrc]; vy[(iys-1)*n1*n2+ixs*n1+izs] = src2y[isrc]; vz[iys*n1*n2+(ixs-1)*n1+izs] = src2z[isrc]; /* determine second position of dipole */ if (src.orient == 2) { /* dipole +/- vertical */ izs += 1; vx[iys*n1*n2+ixs*n1+izs] = src1x[isrc+src.n]; vy[iys*n1*n2+ixs*n1+izs] = src1y[isrc+src.n]; vz[iys*n1*n2+ixs*n1+izs] = src1z[isrc+src.n]; vx[iys*n1*n2+ixs*n1+izs-1] = src2x[isrc+src.n]; vy[(iys-1)*n1*n2+ixs*n1+izs] = src2y[isrc+src.n]; vz[iys*n1*n2+(ixs-1)*n1+izs] = src2z[isrc+src.n]; } else if (src.orient == 3) { /* dipole - + horizontal */ ixs += 1; vx[iys*n1*n2+ixs*n1+izs] = src1x[isrc+src.n]; vy[iys*n1*n2+ixs*n1+izs] = src1y[isrc+src.n]; vz[iys*n1*n2+ixs*n1+izs] = src1z[isrc+src.n]; vx[iys*n1*n2+ixs*n1+izs-1] = src2x[isrc+src.n]; vy[(iys-1)*n1*n2+ixs*n1+izs] = src2y[isrc+src.n]; vz[iys*n1*n2+(ixs-1)*n1+izs] = src2z[isrc+src.n]; } } else if (src.type==6) { vx[iys*n1*n2+ixs*n1+izs] = src1x[isrc]; } else if (src.type==7) { vz[iys*n1*n2+ixs*n1+izs] = src1z[isrc]; } else if (src.type==8) { vx[iys*n1*n2+(ixs+1)*n1+izs] = src1x[isrc]; vy[(iys+1)*n1*n2+ixs*n1+izs] = src1z[isrc]; vz[iys*n1*n2+ixs*n1+izs+1] = src1z[isrc]; vx[iys*n1*n2+ixs*n1+izs] = src2x[isrc]; vy[iys*n1*n2+ixs*n1+izs] = src2y[isrc]; vz[iys*n1*n2+ixs*n1+izs] = src2z[isrc]; /* determine second position of dipole */ if (src.orient == 2) { /* dipole +/- vertical */ izs += 1; vx[iys*n1*n2+(ixs+1)*n1+izs] = src1x[isrc+src.n]; vy[(iys+1)*n1*n2+ixs*n1+izs] = src1y[isrc+src.n]; vz[iys*n1*n2+ixs*n1+izs+1] = src1z[isrc+src.n]; vx[iys*n1*n2+ixs*n1+izs] = src2x[isrc+src.n]; vy[iys*n1*n2+ixs*n1+izs] = src2y[isrc+src.n]; vz[iys*n1*n2+ixs*n1+izs] = src2z[isrc+src.n]; } else if (src.orient == 3) { /* dipole - + horizontal */ ixs += 1; vx[iys*n1*n2+(ixs+1)*n1+izs] = src1x[isrc+src.n]; vy[(iys+1)*n1*n2+ixs*n1+izs] = src1y[isrc+src.n]; vz[iys*n1*n2+ixs*n1+izs+1] = src1z[isrc+src.n]; vx[iys*n1*n2+ixs*n1+izs] = src2x[isrc+src.n]; vy[iys*n1*n2+ixs*n1+izs] = src2y[isrc+src.n]; vz[iys*n1*n2+ixs*n1+izs] = src2z[isrc+src.n]; } } } } } return 0; }