From 2607899f36a76b692eba941abec280fbd9c4d886 Mon Sep 17 00:00:00 2001 From: Tilman Metz Date: Fri, 12 Aug 2016 18:56:23 +0200 Subject: [PATCH] imolemented structs --- src/CPML_coeff.c | 119 ++-- src/av_mat.c | 23 +- src/checkfd_ssg.c | 39 +- src/comm_ini.c | 31 +- src/comm_ini_s.c | 29 +- src/conjugategrad.c | 44 +- src/constant_boundary.c | 98 +-- src/cpmodel.c | 62 +- src/disc_fourier.c | 14 +- src/exchange_Fv.c | 130 ++-- src/exchange_s.c | 102 ++- src/exchange_v.c | 105 ++-- src/fd.h | 393 ++++++------ src/gradient_F.c | 100 +-- src/hess_F.c | 106 ++-- src/hess_apply.c | 26 +- src/hh.c | 25 +- src/hh_3DSchach.c | 18 +- src/hh_toy_start.c | 15 +- src/hh_toy_true.c | 55 +- src/ifos3d.c | 1027 ++++++++++++++++--------------- src/lbfgs.c | 18 +- src/lbfgs_save.c | 8 +- src/matcopy.c | 123 ++-- src/model2_5D.c | 24 +- src/modelupdate.c | 40 +- src/outmod.c | 8 +- src/precongrad.c | 92 +-- src/psource.c | 6 +- src/readhess.c | 14 +- src/readmod.c | 15 +- src/saveseis.c | 30 +- src/seismo_ssg.c | 116 ++-- src/snap_ssg.c | 79 ++- src/surface_ssg.c | 316 +++++----- src/surface_ssg_elastic.c | 219 ++++--- src/update_s_ssg.c | 846 +++++++++++++------------ src/update_s_ssg_CPML.c | 819 ++++++++++++------------ src/update_s_ssg_CPML_elastic.c | 456 +++++++------- src/update_s_ssg_elastic.c | 526 ++++++++-------- src/update_v_ssg.c | 420 ++++++------- src/update_v_ssg_CPML.c | 372 ++++++----- src/writemod.c | 4 +- src/zero_grad.c | 8 +- src/zero_invers.c | 26 +- src/zero_wavefield.c | 66 +- 46 files changed, 3596 insertions(+), 3616 deletions(-) diff --git a/src/CPML_coeff.c b/src/CPML_coeff.c index 7413f07..92aa982 100644 --- a/src/CPML_coeff.c +++ b/src/CPML_coeff.c @@ -84,12 +84,7 @@ #include "fd.h" -void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, - float * K_x_half, float * alpha_prime_x_half, float * a_x_half, float * b_x_half, - float * K_y, float * alpha_prime_y, float * a_y, float * b_y, - float * K_y_half, float * alpha_prime_y_half, float * a_y_half, float * b_y_half, - float * K_z, float * alpha_prime_z, float * a_z, float * b_z, - float * K_z_half, float * alpha_prime_z_half, float * a_z_half, float * b_z_half) +void CPML_coeff(st_pml_coeff *pml_coeff) { extern float DX, DY, DZ , VPPML, DT, FPML; @@ -126,7 +121,7 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, for (i=1;i<=FW+1;i++){ - K_x[i] = 1.0; + pml_coeff->K_x[i] = 1.0; /* define damping profile at the grid points */ position_in_PML = (FW-i+1)*DX; /*distance to boundary in meter */ @@ -135,16 +130,16 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, d_x[i] = d0_x *(a*position_norm+b*pow(position_norm,npower)+c*pow(position_norm,(4))); /* this taken from Gedney page 8.2 */ - K_x[i] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); - alpha_prime_x[i] = alpha_max_PML * (1.0 - position_norm); + pml_coeff->K_x[i] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); + pml_coeff->alpha_prime_x[i] = alpha_max_PML * (1.0 - position_norm); - if(alpha_prime_x[i] < 0.0){ fprintf(FP,"ERROR:alpha_prime_x[i] < 0.0, i %d", i);} + if(pml_coeff->alpha_prime_x[i] < 0.0){ fprintf(FP,"ERROR:alpha_prime_x[i] < 0.0, i %d", i);} - b_x[i] = exp(- (d_x[i] / K_x[i] + alpha_prime_x[i]) * DT); + pml_coeff->b_x[i] = exp(- (d_x[i] / pml_coeff->K_x[i] + pml_coeff->alpha_prime_x[i]) * DT); /* avoid division by zero outside the PML */ - if(abs(d_x[i]) > 1.0e-6){ a_x[i] = d_x[i] * (b_x[i] - 1.0) / (K_x[i] * (d_x[i] + K_x[i] * alpha_prime_x[i]));} - else a_x[i]=0.0; + if(abs(d_x[i]) > 1.0e-6){ pml_coeff->a_x[i] = d_x[i] * (pml_coeff->b_x[i] - 1.0) / (pml_coeff->K_x[i] * (d_x[i] + pml_coeff->K_x[i] * pml_coeff->alpha_prime_x[i]));} + else pml_coeff->a_x[i]=0.0; if(i<=FW){ @@ -154,35 +149,35 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, i1=i; - K_x_half[i1] = 1.0; + pml_coeff->K_x_half[i1] = 1.0; d_x_half[i1] = d0_x * (a*position_norm+b*pow(position_norm,npower)+c*pow(position_norm,(4))); if(position_in_PML < 0.0) {fprintf(FP,"ERROR: Position in PML (x-boundary) smaller 0");} /* this taken from Gedney page 8.2 */ - K_x_half[i1] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); - alpha_prime_x_half[i1] = alpha_max_PML * (1.0 - position_norm); + pml_coeff->K_x_half[i1] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); + pml_coeff->alpha_prime_x_half[i1] = alpha_max_PML * (1.0 - position_norm); /* just in case, for -5 at the end */ - if(alpha_prime_x_half[i1] < 0.0) {fprintf(FP,"ERROR:alpha_prime_x_half[i] < 0.0, i %d", i);} + if(pml_coeff->alpha_prime_x_half[i1] < 0.0) {fprintf(FP,"ERROR:alpha_prime_x_half[i] < 0.0, i %d", i);} - b_x_half[i1] = exp(- (d_x_half[i1] / K_x_half[i1] + alpha_prime_x_half[i1]) * DT); + pml_coeff->b_x_half[i1] = exp(- (d_x_half[i1] / pml_coeff->K_x_half[i1] + pml_coeff->alpha_prime_x_half[i1]) * DT); - if(abs(d_x_half[i1]) > 1.0e-6){ a_x_half[i1] = d_x_half[i1] * (b_x_half[i1] - 1.0) / (K_x_half[i1] * (d_x_half[i1] + K_x_half[i1] * alpha_prime_x_half[i1]));} + if(abs(d_x_half[i1]) > 1.0e-6){ pml_coeff->a_x_half[i1] = d_x_half[i1] * (pml_coeff->b_x_half[i1] - 1.0) / (pml_coeff->K_x_half[i1] * (d_x_half[i1] + pml_coeff->K_x_half[i1] * pml_coeff->alpha_prime_x_half[i1]));} /* right boundary --> mirroring left boundary*/ l = 2* FW -i+1; if(i>1){ - K_x[l+1]=K_x[i]; - b_x[l+1] = b_x[i]; - if(abs(d_x[i]) > 1.0e-6){ a_x[l+1] = a_x[i]; } + pml_coeff->K_x[l+1]=pml_coeff->K_x[i]; + pml_coeff->b_x[l+1] = pml_coeff->b_x[i]; + if(abs(d_x[i]) > 1.0e-6){ pml_coeff->a_x[l+1] = pml_coeff->a_x[i]; } } - K_x_half[l]=K_x_half[i]; - b_x_half[l] = b_x_half[i]; /*half a grid point in +x)*/ - if(abs(d_x[i]) > 1.0e-6){ a_x_half[l] = a_x_half[i]; } + pml_coeff->K_x_half[l]=pml_coeff->K_x_half[i]; + pml_coeff->b_x_half[l] = pml_coeff->b_x_half[i]; /*half a grid point in +x)*/ + if(abs(d_x[i]) > 1.0e-6){ pml_coeff->a_x_half[l] = pml_coeff->a_x_half[i]; } } } @@ -194,7 +189,7 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, for (i=1;i<=FW+1;i++){ - K_y[i] = 1.0; + pml_coeff->K_y[i] = 1.0; /* define damping profile at the grid points */ position_in_PML = (FW-i+1)*DY; /*distance to boundary in meter */ @@ -203,17 +198,17 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, d_y[i] = d0_y * (a*position_norm+b*pow(position_norm,npower)+c*pow(position_norm,(4))); /* this taken from Gedney page 8.2 */ - K_y[i] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); - alpha_prime_y[i] = alpha_max_PML * (1.0 - position_norm); + pml_coeff->K_y[i] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); + pml_coeff->alpha_prime_y[i] = alpha_max_PML * (1.0 - position_norm); /* just in case, for -5 at the end */ - if(alpha_prime_y[i] < 0.0){ fprintf(FP,"ERROR:alpha_prime_y[i] < 0.0, i %d", i);} + if(pml_coeff->alpha_prime_y[i] < 0.0){ fprintf(FP,"ERROR:alpha_prime_y[i] < 0.0, i %d", i);} - b_y[i] = exp(- (d_y[i] / K_y[i] + alpha_prime_y[i]) * DT); + pml_coeff->b_y[i] = exp(- (d_y[i] / pml_coeff->K_y[i] + pml_coeff->alpha_prime_y[i]) * DT); /* avoid division by zero outside the PML */ - if(abs(d_y[i]) > 1.0e-6){ a_y[i] = d_y[i] * (b_y[i] - 1.0) / (K_y[i] * (d_y[i] + K_y[i] * alpha_prime_y[i]));} - else a_x[i]=0.0; + if(abs(d_y[i]) > 1.0e-6){ pml_coeff->a_y[i] = d_y[i] * (pml_coeff->b_y[i] - 1.0) / (pml_coeff->K_y[i] * (d_y[i] + pml_coeff->K_y[i] *pml_coeff->alpha_prime_y[i]));} + else pml_coeff->a_x[i]=0.0; if(i<=FW){ @@ -222,33 +217,33 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, position_norm = position_in_PML / (FW*DY); i1=i; - K_y_half[i1] = 1.0; + pml_coeff->K_y_half[i1] = 1.0; d_y_half[i1] = d0_y * (a*position_norm+b*pow(position_norm,npower)+c*pow(position_norm,(4))); if(position_in_PML < 0.0) {fprintf(FP,"ERROR: Position in PML (y-boundary) <0");} /* this taken from Gedney page 8.2 */ - K_y_half[i1] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); - alpha_prime_y_half[i1] = alpha_max_PML * (1.0 - position_norm); + pml_coeff->K_y_half[i1] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); + pml_coeff->alpha_prime_y_half[i1] = alpha_max_PML * (1.0 - position_norm); - if(alpha_prime_y_half[i1] < 0.0) {fprintf(FP,"ERROR:alpha_prime_y_half[i] < 0.0, i %d", i);} - b_y_half[i1] = exp(- (d_y_half[i1] / K_y_half[i1] + alpha_prime_y_half[i1]) * DT); + if(pml_coeff->alpha_prime_y_half[i1] < 0.0) {fprintf(FP,"ERROR:alpha_prime_y_half[i] < 0.0, i %d", i);} + pml_coeff->b_y_half[i1] = exp(- (d_y_half[i1] / pml_coeff->K_y_half[i1] + pml_coeff->alpha_prime_y_half[i1]) * DT); - if(abs(d_y_half[i1]) > 1.0e-6){ a_y_half[i1] = d_y_half[i1] * (b_y_half[i1] - 1.0) / (K_y_half[i1] * (d_y_half[i1] + K_y_half[i1] * alpha_prime_y_half[i1]));} + if(abs(d_y_half[i1]) > 1.0e-6){ pml_coeff->a_y_half[i1] = d_y_half[i1] * (pml_coeff->b_y_half[i1] - 1.0) / (pml_coeff->K_y_half[i1] * (d_y_half[i1] + pml_coeff->K_y_half[i1] * pml_coeff->alpha_prime_y_half[i1]));} /* right boundary --> mirroring left boundary*/ l = 2* FW -i+1; if(i>1){ - K_y[l+1] = K_y[i]; - b_y[l+1] = b_y[i]; - if(abs(d_y[i]) > 1.0e-6){ a_y[l+1] = a_y[i]; } + pml_coeff->K_y[l+1] = pml_coeff->K_y[i]; + pml_coeff->b_y[l+1] = pml_coeff->b_y[i]; + if(abs(d_y[i]) > 1.0e-6){ pml_coeff->a_y[l+1] = pml_coeff->a_y[i]; } } - K_y_half[l]=K_y_half[i]; - b_y_half[l] = b_y_half[i]; /*half a grid point in +x)*/ - if(abs(d_y[i]) > 1.0e-6){ a_y_half[l] = a_y_half[i]; } + pml_coeff->K_y_half[l]=pml_coeff->K_y_half[i]; + pml_coeff->b_y_half[l] = pml_coeff->b_y_half[i]; /*half a grid point in +x)*/ + if(abs(d_y[i]) > 1.0e-6){ pml_coeff->a_y_half[l] = pml_coeff->a_y_half[i]; } } } @@ -258,7 +253,7 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, for (i=1;i<=FW+1;i++){ - K_z[i] = 1.0; + pml_coeff->K_z[i] = 1.0; /* define damping profile at the grid points */ position_in_PML = (FW-i+1)*DZ; /*distance to boundary in meter */ @@ -267,16 +262,16 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, d_z[i] = d0_z * (a*position_norm+b*pow(position_norm,npower)+c*pow(position_norm,(4))); /* this taken from Gedney page 8.2 */ - K_z[i] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); - alpha_prime_z[i] = alpha_max_PML * (1.0 - position_norm); + pml_coeff->K_z[i] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); + pml_coeff->alpha_prime_z[i] = alpha_max_PML * (1.0 - position_norm); /* just in case, for -5 at the end */ - if(alpha_prime_z[i] < 0.0){ fprintf(FP,"ERROR:alpha_prime_z[i] < 0.0, i %d", i);} + if(pml_coeff->alpha_prime_z[i] < 0.0){ fprintf(FP,"ERROR:alpha_prime_z[i] < 0.0, i %d", i);} - b_z[i] = exp(- (d_z[i] / K_z[i] + alpha_prime_z[i]) * DT); + pml_coeff->b_z[i] = exp(- (d_z[i] / pml_coeff->K_z[i] + pml_coeff->alpha_prime_z[i]) * DT); /* avoid division by zero outside the PML */ - if(abs(d_z[i]) > 1.0e-6){ a_z[i] = d_z[i] * (b_z[i] - 1.0) / (K_z[i] * (d_z[i] + K_z[i] * alpha_prime_z[i]));} + if(abs(d_z[i]) > 1.0e-6){ pml_coeff->a_z[i] = d_z[i] * (pml_coeff->b_z[i] - 1.0) / (pml_coeff->K_z[i] * (d_z[i] + pml_coeff->K_z[i] *pml_coeff->alpha_prime_z[i]));} if(i<=FW){ /* define damping profile at half the grid points (half a grid point in -x)*/ @@ -285,34 +280,34 @@ void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, i1=i; - K_z_half[i1] = 1.0; + pml_coeff->K_z_half[i1] = 1.0; d_z_half[i1] = d0_z *(a*position_norm+b* pow(position_norm,npower)+c*pow(position_norm,(4))); if(position_in_PML < 0.0) {fprintf(FP,"ERROR: Position in PML (y-boundary) <0");} /* this taken from Gedney page 8.2 */ - K_z_half[i1] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); - alpha_prime_z_half[i1] = alpha_max_PML * (1.0 - position_norm); + pml_coeff->K_z_half[i1] = 1.0 + (k_max_PML - 1.0) * pow(position_norm,npower); + pml_coeff->alpha_prime_z_half[i1] = alpha_max_PML * (1.0 - position_norm); - if(alpha_prime_z_half[i1] < 0.0) {fprintf(FP,"ERROR:alpha_prime_z_half[i] < 0.0, i %d", i);} + if(pml_coeff->alpha_prime_z_half[i1] < 0.0) {fprintf(FP,"ERROR:alpha_prime_z_half[i] < 0.0, i %d", i);} - b_z_half[i1] = exp(- (d_z_half[i1] / K_z_half[i1] + alpha_prime_z_half[i1]) * DT); + pml_coeff->b_z_half[i1] = exp(- (d_z_half[i1] / pml_coeff->K_z_half[i1] + pml_coeff->alpha_prime_z_half[i1]) * DT); - if(abs(d_z_half[i1]) > 1.0e-6){ a_z_half[i1] = d_z_half[i1] * (b_z_half[i1] - 1.0) / (K_z_half[i1] * (d_z_half[i1] + K_z_half[i1] * alpha_prime_z_half[i1]));} + if(abs(d_z_half[i1]) > 1.0e-6){ pml_coeff->a_z_half[i1] = d_z_half[i1] * (pml_coeff->b_z_half[i1] - 1.0) / (pml_coeff->K_z_half[i1] * (d_z_half[i1] + pml_coeff->K_z_half[i1] * pml_coeff->alpha_prime_z_half[i1]));} /* right boundary --> mirroring left boundary*/ l = 2* FW -i+1; if(i>1){ - K_z[l+1] = K_z[i]; - b_z[l+1] = b_z[i]; - if(abs(d_z[i]) > 1.0e-6){ a_z[l+1] = a_z[i]; } + pml_coeff->K_z[l+1] = pml_coeff->K_z[i]; + pml_coeff->b_z[l+1] = pml_coeff->b_z[i]; + if(abs(d_z[i]) > 1.0e-6){ pml_coeff->a_z[l+1] = pml_coeff->a_z[i]; } } - K_z_half[l]=K_z_half[i]; - b_z_half[l] = b_z_half[i]; /*half a grid point in +x)*/ - if(abs(d_z[i]) > 1.0e-6){ a_z_half[l] = a_z_half[i]; } + pml_coeff->K_z_half[l]=pml_coeff->K_z_half[i]; + pml_coeff->b_z_half[l] = pml_coeff->b_z_half[i]; /*half a grid point in +x)*/ + if(abs(d_z[i]) > 1.0e-6){ pml_coeff->a_z_half[l] = pml_coeff->a_z_half[i]; } } } free_vector(d_x,1,2*FW); diff --git a/src/av_mat.c b/src/av_mat.c index 6300a1e..1f724e4 100755 --- a/src/av_mat.c +++ b/src/av_mat.c @@ -25,10 +25,7 @@ #include "fd.h" -void av_mat(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup, -float *** uipjp, float *** ujpkp, float *** uipkp, float *** tausipjp, -float *** tausjpkp, float *** tausipkp, float *** rjp, float *** rkp, float *** rip ){ +void av_mat(st_model *mod,st_model_av *mod_av){ extern int NX, NY, NZ, MYID,L,VERBOSE; @@ -48,20 +45,20 @@ float *** tausjpkp, float *** tausipkp, float *** rjp, float *** rkp, float /* harmonic averaging of shear modulus */ - uipjp[j][i][k]=4.0/((1.0/u[j][i][k])+(1.0/u[j][i+1][k])+(1.0/u[j+1][i+1][k])+(1.0/u[j+1][i][k])); - ujpkp[j][i][k]=4.0/((1.0/u[j][i][k])+(1.0/u[j][i][k+1])+(1.0/u[j+1][i][k+1])+(1.0/u[j+1][i][k])); - uipkp[j][i][k]=4.0/((1.0/u[j][i][k])+(1.0/u[j][i][k+1])+(1.0/u[j][i+1][k+1])+(1.0/u[j][i+1][k])); + mod_av->uipjp[j][i][k]=4.0/((1.0/mod->u[j][i][k])+(1.0/mod->u[j][i+1][k])+(1.0/mod->u[j+1][i+1][k])+(1.0/mod->u[j+1][i][k])); + mod_av->ujpkp[j][i][k]=4.0/((1.0/mod->u[j][i][k])+(1.0/mod->u[j][i][k+1])+(1.0/mod->u[j+1][i][k+1])+(1.0/mod->u[j+1][i][k])); + mod_av->uipkp[j][i][k]=4.0/((1.0/mod->u[j][i][k])+(1.0/mod->u[j][i][k+1])+(1.0/mod->u[j][i+1][k+1])+(1.0/mod->u[j][i+1][k])); /* arithmetic averaging of TAU for S-waves and density */ if (L){ - tausipjp[j][i][k]=0.25*(taus[j][i][k]+taus[j][i+1][k]+taus[j+1][i+1][k]+taus[j+1][i][k]); - tausjpkp[j][i][k]=0.25*(taus[j][i][k]+taus[j+1][i][k]+taus[j+1][i][k+1]+taus[j][i][k+1]); - tausipkp[j][i][k]=0.25*(taus[j][i][k]+taus[j][i+1][k]+taus[j][i+1][k+1]+taus[j][i][k+1]); + mod_av->tausipjp[j][i][k]=0.25*(mod->taus[j][i][k]+mod->taus[j][i+1][k]+mod->taus[j+1][i+1][k]+mod->taus[j+1][i][k]); + mod_av->tausjpkp[j][i][k]=0.25*(mod->taus[j][i][k]+mod->taus[j+1][i][k]+mod->taus[j+1][i][k+1]+mod->taus[j][i][k+1]); + mod_av->tausipkp[j][i][k]=0.25*(mod->taus[j][i][k]+mod->taus[j][i+1][k]+mod->taus[j][i+1][k+1]+mod->taus[j][i][k+1]); } - rjp[j][i][k]=0.5*(rho[j][i][k]+rho[j+1][i][k]); - rkp[j][i][k]=0.5*(rho[j][i][k]+rho[j][i][k+1]); - rip[j][i][k]=0.5*(rho[j][i][k]+rho[j][i+1][k]); + mod_av->rjp[j][i][k]=0.5*(mod->rho[j][i][k]+mod->rho[j+1][i][k]); + mod_av->rkp[j][i][k]=0.5*(mod->rho[j][i][k]+mod->rho[j][i][k+1]); + mod_av->rip[j][i][k]=0.5*(mod->rho[j][i][k]+mod->rho[j][i+1][k]); } diff --git a/src/checkfd_ssg.c b/src/checkfd_ssg.c index 1db3072..1bf5178 100755 --- a/src/checkfd_ssg.c +++ b/src/checkfd_ssg.c @@ -37,8 +37,7 @@ void err2(char errformat[],char errfilename[]){ err(outtxt); } -void checkfd(FILE *fp, float *** prho, float *** ppi, float *** pu, -float *** ptaus, float *** ptaup, float *peta, float **srcpos, int nsrc, int **recpos, int ntr){ +void checkfd(FILE *fp, st_model *mod, float **srcpos, int nsrc, int **recpos, int ntr){ extern float DX, DY, DZ, DT, TS, TIME, TSNAP2; extern float XREC1, XREC2, YREC1, YREC2, ZREC1, ZREC2; @@ -80,12 +79,12 @@ float *** ptaus, float *** ptaup, float *peta, float **srcpos, int nsrc, int **r for (k=1+nfw;k<=(nz-nfw);k++){ for (i=1+nfw;i<=(nx-nfw);i++){ for (j=ny1;j<=(ny-nfw);j++){ - if (prho[j][i][k]==0.0) - printf("prho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); + if (mod->rho[j][i][k]==0.0) + printf("rho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); else{ if(L){ - c=sqrt(pu[j][i][k]*(1.0+L*ptaus[j][i][k])/prho[j][i][k]);} - else c=sqrt(pu[j][i][k]/prho[j][i][k]); + c=sqrt(mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k])/mod->rho[j][i][k]);} + else c=sqrt(mod->u[j][i][k]/mod->rho[j][i][k]); } if (cmax_seta[l]; + sum=sum+((w*w*mod->taus[j][i][k]*ts*ts)/(1.0+w*w*ts*ts)); } - if (prho[j][i][k]==0.0) - printf("prho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); + if (mod->rho[j][i][k]==0.0) + printf("rho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); else - c=sqrt(pu[j][i][k]*(1.0+sum)/prho[j][i][k]); + c=sqrt(mod->u[j][i][k]*(1.0+sum)/mod->rho[j][i][k]); if ((c>cwater)&&(cmin_s>c)) cmin_s=c; } } @@ -112,24 +111,24 @@ float *** ptaus, float *** ptaup, float *peta, float **srcpos, int nsrc, int **r for (k=1+nfw;k<=(nz-nfw);k++){ for (i=1+nfw;i<=(nx-nfw);i++){ for (j=ny1;j<=(ny-nfw);j++){ - if (prho[j][i][k]==0.0) - printf("prho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); + if (mod->rho[j][i][k]==0.0) + printf("rho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); else{ - if(L) c=sqrt(ppi[j][i][k]*(1.0+L*ptaup[j][i][k])/prho[j][i][k]); - else c=sqrt(ppi[j][i][k]/prho[j][i][k]); + if(L) c=sqrt(mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k])/mod->rho[j][i][k]); + else c=sqrt(mod->pi[j][i][k]/mod->rho[j][i][k]); } if (cmax_peta[l]; + sum=sum+((w*w*mod->taup[j][i][k]*ts*ts)/(1.0+w*w*ts*ts)); } - if (prho[j][i][k]==0.0) - printf("prho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); + if (mod->rho[j][i][k]==0.0) + printf("rho=0 detected from MYID=%d at i=%d,j=%d,k=%d\n",MYID,i,j,k); else - c=sqrt(ppi[j][i][k]*(1.0+sum)/prho[j][i][k]); + c=sqrt(mod->pi[j][i][k]*(1.0+sum)/mod->rho[j][i][k]); if (cmin_p>c) cmin_p=c; } } diff --git a/src/comm_ini.c b/src/comm_ini.c index 7336d51..54f078f 100644 --- a/src/comm_ini.c +++ b/src/comm_ini.c @@ -26,10 +26,7 @@ #include "fd.h" -void comm_ini(float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, -MPI_Request *req_send, MPI_Request *req_rec){ +void comm_ini(st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec){ extern int NX, NY, NZ, INDEX[7], FDORDER; @@ -50,22 +47,24 @@ MPI_Request *req_send, MPI_Request *req_rec){ nf2=nf1-1; - MPI_Bsend_init(&bufferlef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD,&req_send[0]); - MPI_Bsend_init(&bufferrig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD,&req_send[1]); - MPI_Bsend_init(&bufferfro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD,&req_send[2]); - MPI_Bsend_init(&bufferbac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD,&req_send[3]); - MPI_Bsend_init(&buffertop_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD,&req_send[4]); - MPI_Bsend_init(&bufferbot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD,&req_send[5]); + MPI_Bsend_init(&buffer->lef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD,&req_send[0]); + MPI_Bsend_init(&buffer->rig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD,&req_send[1]); + MPI_Bsend_init(&buffer->fro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD,&req_send[2]); + MPI_Bsend_init(&buffer->bac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD,&req_send[3]); + MPI_Bsend_init(&buffer->top_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD,&req_send[4]); + MPI_Bsend_init(&buffer->bot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD,&req_send[5]); /* initialising of receive of buffer arrays. Same arrays for send and receive are used. Thus, before starting receive, it is necessary to check if Bsend has copied data into local buffers, i.e. has completed. */ - MPI_Recv_init(&bufferlef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&req_rec[0]); - MPI_Recv_init(&bufferrig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&req_rec[1]); - MPI_Recv_init(&bufferfro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&req_rec[2]); - MPI_Recv_init(&bufferbac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&req_rec[3]); - MPI_Recv_init(&buffertop_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&req_rec[4]); - MPI_Recv_init(&bufferbot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&req_rec[5]); + MPI_Recv_init(&buffer->lef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&req_rec[0]); + MPI_Recv_init(&buffer->rig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&req_rec[1]); + MPI_Recv_init(&buffer->fro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&req_rec[2]); + MPI_Recv_init(&buffer->bac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&req_rec[3]); + MPI_Recv_init(&buffer->top_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&req_rec[4]); + MPI_Recv_init(&buffer->bot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&req_rec[5]); } + + diff --git a/src/comm_ini_s.c b/src/comm_ini_s.c index 4032774..fa80a42 100755 --- a/src/comm_ini_s.c +++ b/src/comm_ini_s.c @@ -7,10 +7,7 @@ #include "fd.h" -void comm_ini_s(float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, -MPI_Request *req_send, MPI_Request *req_rec){ +void comm_ini_s(st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec){ extern int NX, NY, NZ, INDEX[7], FDORDER; @@ -31,22 +28,22 @@ MPI_Request *req_send, MPI_Request *req_rec){ nf2=nf1-1; - MPI_Bsend_init(&bufferlef_to_rig[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD,&req_send[0]); - MPI_Bsend_init(&bufferrig_to_lef[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD,&req_send[1]); - MPI_Bsend_init(&bufferfro_to_bac[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD,&req_send[2]); - MPI_Bsend_init(&bufferbac_to_fro[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD,&req_send[3]); - MPI_Bsend_init(&buffertop_to_bot[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD,&req_send[4]); - MPI_Bsend_init(&bufferbot_to_top[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD,&req_send[5]); + MPI_Bsend_init(&buffer->lef_to_rig[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD,&req_send[0]); + MPI_Bsend_init(&buffer->rig_to_lef[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD,&req_send[1]); + MPI_Bsend_init(&buffer->fro_to_bac[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD,&req_send[2]); + MPI_Bsend_init(&buffer->bac_to_fro[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD,&req_send[3]); + MPI_Bsend_init(&buffer->top_to_bot[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD,&req_send[4]); + MPI_Bsend_init(&buffer->bot_to_top[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD,&req_send[5]); /* initialising of receive of buffer arrays. Same arrays for send and receive are used. Thus, before starting receive, it is necessary to check if Bsend has copied data into local buffers, i.e. has completed. */ - MPI_Recv_init(&bufferlef_to_rig[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&req_rec[0]); - MPI_Recv_init(&bufferrig_to_lef[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&req_rec[1]); - MPI_Recv_init(&bufferfro_to_bac[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&req_rec[2]); - MPI_Recv_init(&bufferbac_to_fro[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&req_rec[3]); - MPI_Recv_init(&buffertop_to_bot[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&req_rec[4]); - MPI_Recv_init(&bufferbot_to_top[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&req_rec[5]); + MPI_Recv_init(&buffer->lef_to_rig[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&req_rec[0]); + MPI_Recv_init(&buffer->rig_to_lef[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&req_rec[1]); + MPI_Recv_init(&buffer->fro_to_bac[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&req_rec[2]); + MPI_Recv_init(&buffer->bac_to_fro[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&req_rec[3]); + MPI_Recv_init(&buffer->top_to_bot[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&req_rec[4]); + MPI_Recv_init(&buffer->bot_to_top[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&req_rec[5]); } diff --git a/src/conjugategrad.c b/src/conjugategrad.c index 7f99a59..b720402 100644 --- a/src/conjugategrad.c +++ b/src/conjugategrad.c @@ -24,7 +24,7 @@ #include "fd.h" -void conjugate(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***grad3, float ***gradprior1, float ***gradprior2, float ***gradprior3, float ***gradprior4, float ***gradprior5, float ***gradprior6,float *beta, int iteration,int cdf){ +void conjugate(int nx,int ny,int nz, st_gradient *grad, st_gradient *grad_prior1,st_gradient *grad_prior2, float *beta, int iteration,int cdf){ extern FILE *FP; @@ -43,12 +43,12 @@ void conjugate(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***gra for (j=1;j<=ny;j++){ for (i=1;i<=nx;i++){ for (k=1;k<=nz;k++){ - gradprior1[j][i][k]=grad1[j][i][k]; - gradprior2[j][i][k]=grad2[j][i][k]; - gradprior3[j][i][k]=grad3[j][i][k]; - gradprior4[j][i][k]=grad1[j][i][k]; - gradprior5[j][i][k]=grad2[j][i][k]; - gradprior6[j][i][k]=grad3[j][i][k]; + grad_prior1->vp[j][i][k]=grad->vp[j][i][k]; + grad_prior1->vs[j][i][k]=grad->vs[j][i][k]; + grad_prior1->rho[j][i][k]=grad->rho[j][i][k]; + grad_prior2->vp[j][i][k]=grad->vp[j][i][k]; + grad_prior2->vs[j][i][k]=grad->vs[j][i][k]; + grad_prior2->rho[j][i][k]=grad->rho[j][i][k]; } } } @@ -59,17 +59,17 @@ void conjugate(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***gra for (j=1;j<=ny;j++){ for (i=1;i<=nx;i++){ for (k=1;k<=nz;k++){ - betadum[0]+=grad1[j][i][k]*(grad1[j][i][k]-gradprior1[j][i][k]); - betadum[1]+=gradprior1[j][i][k]*gradprior1[j][i][k]; - betadum[2]+=grad2[j][i][k]*(grad2[j][i][k]-gradprior2[j][i][k]); - betadum[3]+=gradprior2[j][i][k]*gradprior2[j][i][k]; - betadum[4]+=grad3[j][i][k]*(grad3[j][i][k]-gradprior3[j][i][k]); - betadum[5]+=gradprior3[j][i][k]*gradprior3[j][i][k]; + betadum[0]+=grad->vp[j][i][k]*(grad->vp[j][i][k]-grad_prior1->vp[j][i][k]); + betadum[1]+=grad_prior1->vp[j][i][k]*grad_prior1->vp[j][i][k]; + betadum[2]+=grad->vs[j][i][k]*(grad->vs[j][i][k]-grad_prior1->vs[j][i][k]); + betadum[3]+=grad_prior1->vs[j][i][k]*grad_prior1->vs[j][i][k]; + betadum[4]+=grad->rho[j][i][k]*(grad->rho[j][i][k]-grad_prior1->rho[j][i][k]); + betadum[5]+=grad_prior1->rho[j][i][k]*grad_prior1->rho[j][i][k]; /*save preconditioned gradient for next iteration*/ - gradprior1[j][i][k]=grad1[j][i][k]; - gradprior2[j][i][k]=grad2[j][i][k]; - gradprior3[j][i][k]=grad3[j][i][k]; + grad_prior1->vp[j][i][k]=grad->vp[j][i][k]; + grad_prior1->vs[j][i][k]=grad->vs[j][i][k]; + grad_prior1->rho[j][i][k]=grad->rho[j][i][k]; } } } @@ -94,14 +94,14 @@ void conjugate(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***gra for (j=1;j<=ny;j++){ for (i=1;i<=nx;i++){ for (k=1;k<=nz;k++){ - grad1[j][i][k]=gradprior4[j][i][k]*beta[0]+grad1[j][i][k]; - grad2[j][i][k]=gradprior5[j][i][k]*beta[1]+grad2[j][i][k]; - grad3[j][i][k]=gradprior6[j][i][k]*beta[2]+grad3[j][i][k]; + grad->vp[j][i][k]=grad_prior2->vp[j][i][k]*beta[0]+grad->vp[j][i][k]; + grad->vs[j][i][k]=grad_prior2->vs[j][i][k]*beta[1]+grad->vs[j][i][k]; + grad->rho[j][i][k]=grad_prior2->rho[j][i][k]*beta[2]+grad->rho[j][i][k]; /*save conjugate gradient for next iteration*/ - gradprior4[j][i][k]=grad1[j][i][k]; - gradprior5[j][i][k]=grad2[j][i][k]; - gradprior6[j][i][k]=grad3[j][i][k]; + grad_prior2->vp[j][i][k]=grad->vp[j][i][k]; + grad_prior2->vs[j][i][k]=grad->vs[j][i][k]; + grad_prior2->rho[j][i][k]=grad->rho[j][i][k]; } } } diff --git a/src/constant_boundary.c b/src/constant_boundary.c index 4196d7c..6478f9d 100644 --- a/src/constant_boundary.c +++ b/src/constant_boundary.c @@ -24,7 +24,7 @@ #include "fd.h" -void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** pi, float *** u, float *** rho){ +void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_model *mod){ /*extern int FREE_SURF;*/ @@ -42,9 +42,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum1=2; for (i=1;i<=FW+dist;i++){ for (k=nz1;k<=nz2;k++){ - u[1][i][k]=u[1][FW+1+dist][k]; - pi[1][i][k]= pi[1][FW+1+dist][k]; - rho[1][i][k]= rho[1][FW+1+dist][k]; + mod->u[1][i][k]=mod->u[1][FW+1+dist][k]; + mod->pi[1][i][k]= mod->pi[1][FW+1+dist][k]; + mod->rho[1][i][k]= mod->rho[1][FW+1+dist][k]; } } } @@ -52,18 +52,18 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum2=NY-1; for (i=1;i<=FW+dist;i++){ for (k=nz1;k<=nz2;k++){ - u[NY][i][k]=u[NY][FW+1+dist][k]; - pi[NY][i][k]= pi[NY][FW+1+dist][k]; - rho[NY][i][k]= rho[NY][FW+1+dist][k]; + mod->u[NY][i][k]=mod->u[NY][FW+1+dist][k]; + mod->pi[NY][i][k]= mod->pi[NY][FW+1+dist][k]; + mod->rho[NY][i][k]= mod->rho[NY][FW+1+dist][k]; } } } for (j=dum1;j<=dum2;j++){ for (i=1;i<=FW+dist;i++){ for (k=nz1;k<=nz2;k++){ - u[j][i][k]=(3.0*u[j][FW+1+dist][k]+u[j-1][FW+1+dist][k]+u[j+1][FW+1+dist][k]+u[j][FW+1+dist][k-1]+u[j][FW+1+dist][k+1]+u[j][FW+2+dist][k])/8.0; - pi[j][i][k]= (3.0*pi[j][FW+1+dist][k]+pi[j-1][FW+1+dist][k]+pi[j+1][FW+1+dist][k]+pi[j][FW+1+dist][k-1]+pi[j][FW+1+dist][k+1]+pi[j][FW+2+dist][k])/8.0; - rho[j][i][k]= (3.0*rho[j][FW+1+dist][k]+rho[j-1][FW+1+dist][k]+rho[j+1][FW+1+dist][k]+rho[j][FW+1+dist][k-1]+rho[j][FW+1+dist][k+1]+rho[j][FW+2+dist][k])/8.0; + mod->u[j][i][k]=(3.0*mod->u[j][FW+1+dist][k]+mod->u[j-1][FW+1+dist][k]+mod->u[j+1][FW+1+dist][k]+mod->u[j][FW+1+dist][k-1]+mod->u[j][FW+1+dist][k+1]+mod->u[j][FW+2+dist][k])/8.0; + mod->pi[j][i][k]= (3.0*mod->pi[j][FW+1+dist][k]+mod->pi[j-1][FW+1+dist][k]+mod->pi[j+1][FW+1+dist][k]+mod->pi[j][FW+1+dist][k-1]+mod->pi[j][FW+1+dist][k+1]+mod->pi[j][FW+2+dist][k])/8.0; + mod->rho[j][i][k]= (3.0*mod->rho[j][FW+1+dist][k]+mod->rho[j-1][FW+1+dist][k]+mod->rho[j+1][FW+1+dist][k]+mod->rho[j][FW+1+dist][k-1]+mod->rho[j][FW+1+dist][k+1]+mod->rho[j][FW+2+dist][k])/8.0; } } } @@ -76,9 +76,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum1=2; for (i=nx2+1-dist;i<=nx2+FW;i++){ for (k=nz1;k<=nz2;k++){ - u[1][i][k]=u[1][nx2-dist][k]; - pi[1][i][k]= pi[1][nx2-dist][k]; - rho[1][i][k]= rho[1][nx2-dist][k]; + mod->u[1][i][k]=mod->u[1][nx2-dist][k]; + mod->pi[1][i][k]= mod->pi[1][nx2-dist][k]; + mod->rho[1][i][k]= mod->rho[1][nx2-dist][k]; } } } @@ -86,18 +86,18 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum2=NY-1; for (i=nx2+1-dist;i<=nx2+FW;i++){ for (k=nz1;k<=nz2;k++){ - u[NY][i][k]=u[NY][nx2-dist][k]; - pi[NY][i][k]= pi[NY][nx2-dist][k]; - rho[NY][i][k]= rho[NY][nx2-dist][k]; + mod->u[NY][i][k]=mod->u[NY][nx2-dist][k]; + mod->pi[NY][i][k]= mod->pi[NY][nx2-dist][k]; + mod->rho[NY][i][k]= mod->rho[NY][nx2-dist][k]; } } } for (j=dum1;j<=dum2;j++){ for (i=nx2+1-dist;i<=nx2+FW;i++){ for (k=nz1;k<=nz2;k++){ - u[j][i][k]=(3.0*u[j][nx2-dist][k]+u[j-1][nx2-dist][k]+u[j+1][nx2-dist][k]+u[j][nx2-dist][k-1]+u[j][nx2-dist][k+1]+u[j][nx2-1-dist][k])/8.0; - pi[j][i][k]=(3.0*pi[j][nx2-dist][k]+pi[j-1][nx2-dist][k]+pi[j+1][nx2-dist][k]+pi[j][nx2-dist][k-1]+pi[j][nx2-dist][k+1]+pi[j][nx2-1-dist][k])/8.0; - rho[j][i][k]=(3.0*rho[j][nx2-dist][k]+rho[j-1][nx2-dist][k]+rho[j+1][nx2-dist][k]+rho[j][nx2-dist][k-1]+rho[j][nx2-dist][k+1]+rho[j][nx2-1-dist][k])/8.0; + mod->u[j][i][k]=(3.0*mod->u[j][nx2-dist][k]+mod->u[j-1][nx2-dist][k]+mod->u[j+1][nx2-dist][k]+mod->u[j][nx2-dist][k-1]+mod->u[j][nx2-dist][k+1]+mod->u[j][nx2-1-dist][k])/8.0; + mod->pi[j][i][k]=(3.0*mod->pi[j][nx2-dist][k]+mod->pi[j-1][nx2-dist][k]+mod->pi[j+1][nx2-dist][k]+mod->pi[j][nx2-dist][k-1]+mod->pi[j][nx2-dist][k+1]+mod->pi[j][nx2-1-dist][k])/8.0; + mod->rho[j][i][k]=(3.0*mod->rho[j][nx2-dist][k]+mod->rho[j-1][nx2-dist][k]+mod->rho[j+1][nx2-dist][k]+mod->rho[j][nx2-dist][k-1]+mod->rho[j][nx2-dist][k+1]+mod->rho[j][nx2-1-dist][k])/8.0; } } } @@ -108,9 +108,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum1=2; for (i=1;i<=NX;i++){ for (k=1;k<=FW+dist;k++){ - u[1][i][k]=u[1][i][FW+1+dist]; - pi[1][i][k]= pi[1][i][FW+1+dist]; - rho[1][i][k]= rho[1][i][FW+1+dist]; + mod->u[1][i][k]=mod->u[1][i][FW+1+dist]; + mod->pi[1][i][k]= mod->pi[1][i][FW+1+dist]; + mod->rho[1][i][k]= mod->rho[1][i][FW+1+dist]; } } } @@ -118,9 +118,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum2=NY-1; for (i=1;i<=NX;i++){ for (k=1;k<=FW+dist;k++){ - u[NY][i][k]=u[NY][i][FW+1+dist]; - pi[NY][i][k]= pi[NY][i][FW+1+dist]; - rho[NY][i][k]= rho[NY][i][FW+1+dist]; + mod->u[NY][i][k]=mod->u[NY][i][FW+1+dist]; + mod->pi[NY][i][k]= mod->pi[NY][i][FW+1+dist]; + mod->rho[NY][i][k]= mod->rho[NY][i][FW+1+dist]; } } } @@ -128,9 +128,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo for (j=dum1;j<=dum2;j++){ for (i=1;i<=FW+dist;i++){ for (k=1;k<=FW+dist;k++){ - u[j][i][k]=u[j][i][FW+1+dist]; - pi[j][i][k]=pi[j][i][FW+1+dist]; - rho[j][i][k]=rho[j][i][FW+1+dist]; + mod->u[j][i][k]=mod->u[j][i][FW+1+dist]; + mod->pi[j][i][k]=mod->pi[j][i][FW+1+dist]; + mod->rho[j][i][k]=mod->rho[j][i][FW+1+dist]; } } } @@ -139,9 +139,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo for (j=dum1;j<=dum2;j++){ for (i=nx2+1-dist;i<=nx2+FW;i++){ for (k=1;k<=FW+dist;k++){ - u[j][i][k]=u[j][i][FW+1+dist]; - pi[j][i][k]=pi[j][i][FW+1+dist]; - rho[j][i][k]=rho[j][i][FW+1+dist]; + mod->u[j][i][k]=mod->u[j][i][FW+1+dist]; + mod->pi[j][i][k]=mod->pi[j][i][FW+1+dist]; + mod->rho[j][i][k]=mod->rho[j][i][FW+1+dist]; } } } @@ -152,9 +152,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo for (j=dum1;j<=dum2;j++){ for (i=nx1;i<=nx2;i++){ for (k=1;k<=FW+dist;k++){ - u[j][i][k]=(3.0*u[j][i][FW+1+dist]+u[j-1][i][FW+1+dist]+u[j+1][i][FW+1+dist]+u[j][i-1][FW+1+dist]+u[j][i+1][FW+1+dist]+u[j][i][FW+2+dist])/8.0; - pi[j][i][k]=(3.0*pi[j][i][FW+1+dist]+pi[j-1][i][FW+1+dist]+pi[j+1][i][FW+1+dist]+pi[j][i-1][FW+1+dist]+pi[j][i+1][FW+1+dist]+pi[j][i][FW+2+dist])/8.0; - rho[j][i][k]=(3.0*rho[j][i][FW+1+dist]+rho[j-1][i][FW+1+dist]+rho[j+1][i][FW+1+dist]+rho[j][i-1][FW+1+dist]+rho[j][i+1][FW+1+dist]+rho[j][i][FW+2+dist])/8.0; + mod->u[j][i][k]=(3.0*mod->u[j][i][FW+1+dist]+mod->u[j-1][i][FW+1+dist]+mod->u[j+1][i][FW+1+dist]+mod->u[j][i-1][FW+1+dist]+mod->u[j][i+1][FW+1+dist]+mod->u[j][i][FW+2+dist])/8.0; + mod->pi[j][i][k]=(3.0*mod->pi[j][i][FW+1+dist]+mod->pi[j-1][i][FW+1+dist]+mod->pi[j+1][i][FW+1+dist]+mod->pi[j][i-1][FW+1+dist]+mod->pi[j][i+1][FW+1+dist]+mod->pi[j][i][FW+2+dist])/8.0; + mod->rho[j][i][k]=(3.0*mod->rho[j][i][FW+1+dist]+mod->rho[j-1][i][FW+1+dist]+mod->rho[j+1][i][FW+1+dist]+mod->rho[j][i-1][FW+1+dist]+mod->rho[j][i+1][FW+1+dist]+mod->rho[j][i][FW+2+dist])/8.0; } } } @@ -168,9 +168,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum1=2; for (i=1;i<=NX;i++){ for (k=nz2+1-dist;k<=nz2+FW;k++){ - u[1][i][k]=u[1][i][nz2-dist]; - pi[1][i][k]= pi[1][i][nz2-dist]; - rho[1][i][k]= rho[1][i][nz2-dist]; + mod->u[1][i][k]=mod->u[1][i][nz2-dist]; + mod->pi[1][i][k]= mod->pi[1][i][nz2-dist]; + mod->rho[1][i][k]= mod->rho[1][i][nz2-dist]; } } } @@ -178,9 +178,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo dum2=NY-1; for (i=1;i<=NX;i++){ for (k=nz2+1-dist;k<=nz2+FW;k++){ - u[NY][i][k]=u[NY][i][nz2-dist]; - pi[NY][i][k]= pi[NY][i][nz2-dist]; - rho[NY][i][k]= rho[NY][i][nz2-dist]; + mod->u[NY][i][k]=mod->u[NY][i][nz2-dist]; + mod->pi[NY][i][k]= mod->pi[NY][i][nz2-dist]; + mod->rho[NY][i][k]= mod->rho[NY][i][nz2-dist]; } } } @@ -188,9 +188,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo for (j=dum1;j<=dum2;j++){ for (i=1;i<=FW+dist;i++){ for (k=nz2+1-dist;k<=nz2+FW;k++){ - u[j][i][k]=u[j][i][nz2-dist]; - pi[j][i][k]=pi[j][i][nz2-dist]; - rho[j][i][k]=rho[j][i][nz2-dist]; + mod->u[j][i][k]=mod->u[j][i][nz2-dist]; + mod->pi[j][i][k]=mod->pi[j][i][nz2-dist]; + mod->rho[j][i][k]=mod->rho[j][i][nz2-dist]; } } } @@ -199,9 +199,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo for (j=dum1;j<=dum2;j++){ for (i=nx2+1-dist;i<=nx2+FW;i++){ for (k=nz2+1-dist;k<=nz2+FW;k++){ - u[j][i][k]=u[j][i][nz2-dist]; - pi[j][i][k]=pi[j][i][nz2-dist]; - rho[j][i][k]=rho[j][i][nz2-dist]; + mod->u[j][i][k]=mod->u[j][i][nz2-dist]; + mod->pi[j][i][k]=mod->pi[j][i][nz2-dist]; + mod->rho[j][i][k]=mod->rho[j][i][nz2-dist]; } } } @@ -209,9 +209,9 @@ void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, flo for (j=dum1;j<=dum2;j++){ for (i=nx1;i<=nx2;i++){ for (k=nz2+1-dist;k<=nz2+FW;k++){ - u[j][i][k]=(3.0*u[j][i][nz2-dist]+u[j-1][i][nz2-dist]+u[j+1][i][nz2-dist]+u[j][i-1][nz2-dist]+u[j][i+1][nz2-dist]+u[j][i][nz2-1-dist])/8.0; - pi[j][i][k]=(3.0*pi[j][i][nz2-dist]+pi[j-1][i][nz2-dist]+pi[j+1][i][nz2-dist]+pi[j][i-1][nz2-dist]+pi[j][i+1][nz2-dist]+pi[j][i][nz2-dist-1])/8.0; - rho[j][i][k]=(3.0*rho[j][i][nz2-dist]+rho[j-1][i][nz2-dist]+rho[j+1][i][nz2-dist]+rho[j][i-1][nz2-dist]+rho[j][i+1][nz2-dist]+rho[j][i][nz2-dist-1])/8.0; + mod->u[j][i][k]=(3.0*mod->u[j][i][nz2-dist]+mod->u[j-1][i][nz2-dist]+mod->u[j+1][i][nz2-dist]+mod->u[j][i-1][nz2-dist]+mod->u[j][i+1][nz2-dist]+mod->u[j][i][nz2-1-dist])/8.0; + mod->pi[j][i][k]=(3.0*mod->pi[j][i][nz2-dist]+mod->pi[j-1][i][nz2-dist]+mod->pi[j+1][i][nz2-dist]+mod->pi[j][i-1][nz2-dist]+mod->pi[j][i+1][nz2-dist]+mod->pi[j][i][nz2-dist-1])/8.0; + mod->rho[j][i][k]=(3.0*mod->rho[j][i][nz2-dist]+mod->rho[j-1][i][nz2-dist]+mod->rho[j+1][i][nz2-dist]+mod->rho[j][i-1][nz2-dist]+mod->rho[j][i+1][nz2-dist]+mod->rho[j][i][nz2-dist-1])/8.0; } } } diff --git a/src/cpmodel.c b/src/cpmodel.c index 1ba30d6..7aea28d 100644 --- a/src/cpmodel.c +++ b/src/cpmodel.c @@ -2,46 +2,60 @@ * Copyright (C) 2015 For the list of authors, see file AUTHORS. * * This file is part of IFOS3D. - * + * * IFOS3D is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 2.0 of the License only. - * + * * IFOS3D is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License - * along with IFOS3D. See file COPYING and/or + * along with IFOS3D. See file COPYING and/or * . --------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ - Copying of model parmeters into a testmodel + Copying of model parmeters into a testmodel S. Butzer 2013 * ----------------------------------------------------------------------*/ #include "fd.h" -void cpmodel(int nx, int ny, int nz, float ***rho, float ***pi, float ***u,float *** testrho, float *** testpi, float *** testu){ - - int j,i,k; - - for (j=1;j<=ny;j++){ - for (i=1;i<=nx;i++){ - for (k=1;k<=nz;k++){ - - testrho[j][i][k]=0.0; - testrho[j][i][k]=rho[j][i][k]; - - testu[j][i][k]=0.0; - testu[j][i][k]=u[j][i][k]; - - testpi[j][i][k]=0.0; - testpi[j][i][k]=pi[j][i][k]; - +void cpmodel(int nx, int ny, int nz, st_model *mod,st_model *testmod) { + extern int L; + int j,i,k,l; + + for (j=1; j<=ny; j++) { + for (i=1; i<=nx; i++) { + for (k=1; k<=nz; k++) { + + testmod->rho[j][i][k]=0.0; + testmod->rho[j][i][k]=mod->rho[j][i][k]; + + testmod->u[j][i][k]=0.0; + testmod->u[j][i][k]=mod->u[j][i][k]; + + testmod->pi[j][i][k]=0.0; + testmod->pi[j][i][k]=mod->pi[j][i][k]; + + if (L) { + testmod->taup[j][i][k]=0.0; + testmod->taup[j][i][k]=mod->taup[j][i][k]; + testmod->taus[j][i][k]=0.0; + testmod->taus[j][i][k]=mod->taus[j][i][k]; } + } } - -} \ No newline at end of file + } + + if (L) { + for (l=1; l<=L; l++) { + testmod->eta[l]=0.0; + testmod->eta[l]=mod->eta[l]; + } + } + +} diff --git a/src/disc_fourier.c b/src/disc_fourier.c index 7c081e0..015837d 100644 --- a/src/disc_fourier.c +++ b/src/disc_fourier.c @@ -25,7 +25,7 @@ #include "fd.h" -void discfourier(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, float *** vx, float *** vy, float *** vz, float **** Fvx, float **** Fvy,float **** Fvz, float **** Fvxi, float **** Fvyi,float **** Fvzi,float *finv, int nf, int ntast, int pshot1, int back){ +void discfourier(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, st_velocity *vel, st_freq_velocity *fourier_vel,float *finv, int nf, int ntast, int pshot1, int back){ extern float DT,TIME; @@ -47,13 +47,13 @@ void discfourier(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, f for (i=nx1;i<=nx2;i++){ for (k=nz1;k<=nz2;k++){ - Fvx[m][j][i][k]+=vx[j][i][k]*trig1; - Fvy[m][j][i][k]+=vy[j][i][k]*trig1; - Fvz[m][j][i][k]+=vz[j][i][k]*trig1; + fourier_vel->Fvx_re[m][j][i][k]+=vel->vx[j][i][k]*trig1; + fourier_vel->Fvy_re[m][j][i][k]+=vel->vy[j][i][k]*trig1; + fourier_vel->Fvz_re[m][j][i][k]+=vel->vz[j][i][k]*trig1; - Fvxi[m][j][i][k]+=vx[j][i][k]*trig2; - Fvyi[m][j][i][k]+=vy[j][i][k]*trig2; - Fvzi[m][j][i][k]+=vz[j][i][k]*trig2; + fourier_vel->Fvx_im[m][j][i][k]+=vel->vx[j][i][k]*trig2; + fourier_vel->Fvy_im[m][j][i][k]+=vel->vy[j][i][k]*trig2; + fourier_vel->Fvz_im[m][j][i][k]+=vel->vz[j][i][k]*trig2; } } diff --git a/src/exchange_Fv.c b/src/exchange_Fv.c index caf57fe..5d4720e 100644 --- a/src/exchange_Fv.c +++ b/src/exchange_Fv.c @@ -24,25 +24,35 @@ #include "fd.h" -double exchange_Fv(float **** vx, float **** vy, float **** vz,int nf, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Request * req_rec, int ntr_hess){ +double exchange_Fv(st_freq_velocity *fourier_vel,int nf, +st_buffer *buffer, MPI_Request * req_send, MPI_Request * req_rec, int ntr_hess){ extern int NX, NY, NZ, POS[4], NPROCX, NPROCY, NPROCZ, BOUNDARY, FDORDER, INDEX[7]; extern const int TAG1,TAG2,TAG3,TAG4,TAG5,TAG6; MPI_Status status; - int i, j, k, l, n, nf1, nf2,m; + int i, j, k, l, n, nf1, nf2,m,p; double time=0.0; /*, time1=0.0;*/ nf1=3*FDORDER/2-1; nf2=nf1-1; + + float **** vx = fourier_vel->Fvx_re; + float **** vy = fourier_vel->Fvy_re; + float **** vz = fourier_vel->Fvz_re; /*if (LOG){ if (MYID==0) time1=MPI_Wtime();}*/ + for(p=1;p<=2;p++){ + if(p==2){ + float **** vx = fourier_vel->Fvx_im; + float **** vy = fourier_vel->Fvy_im; + float **** vz = fourier_vel->Fvz_im; + } + + for(m=1;m<=nf*(ntr_hess+1);m++){ /* top-bottom -----------------------------------------------------------*/ @@ -53,11 +63,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of top of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - buffertop_to_bot[i][k][n++] = vx[m][l][i][k]; - buffertop_to_bot[i][k][n++] = vz[m][l][i][k]; + buffer->top_to_bot[i][k][n++] = vx[m][l][i][k]; + buffer->top_to_bot[i][k][n++] = vz[m][l][i][k]; + } for (l=1;l<=(FDORDER/2-1);l++) - buffertop_to_bot[i][k][n++] = vy[m][l][i][k]; + buffer->top_to_bot[i][k][n++] = vy[m][l][i][k]; } } @@ -70,11 +81,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of bottom of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++) - bufferbot_to_top[i][k][n++] = vy[m][NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = vy[m][NY-l+1][i][k]; for (l=1;l<=(FDORDER/2-1);l++){ - bufferbot_to_top[i][k][n++] = vx[m][NY-l+1][i][k]; - bufferbot_to_top[i][k][n++] = vz[m][NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = vx[m][NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = vz[m][NY-l+1][i][k]; } } } @@ -90,16 +101,16 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, }*/ - MPI_Sendrecv_replace(&buffertop_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,INDEX[4],TAG5,MPI_COMM_WORLD,&status); - MPI_Sendrecv_replace(&bufferbot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,INDEX[3],TAG6,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->top_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,INDEX[4],TAG5,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->bot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,INDEX[3],TAG6,MPI_COMM_WORLD,&status); /* - MPI_Bsend(&buffertop_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD); + MPI_Bsend(&buffer->top_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&buffertop_to_bot[1][1][1], NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferbot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD); + MPI_Recv(&buffer->top_to_bot[1][1][1], NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->bot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferbot_to_top[1][1][1], NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->bot_to_top[1][1][1], NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&status); */ if (POS[2]!=NPROCY-1) /* no boundary exchange at bottom of global grid */ @@ -108,12 +119,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - vx[m][NY+l][i][k] = buffertop_to_bot[i][k][n++]; - vz[m][NY+l][i][k] = buffertop_to_bot[i][k][n++]; + vx[m][NY+l][i][k] = buffer->top_to_bot[i][k][n++]; + vz[m][NY+l][i][k] = buffer->top_to_bot[i][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++) - vy[m][NY+l][i][k] = buffertop_to_bot[i][k][n++]; + vy[m][NY+l][i][k] = buffer->top_to_bot[i][k][n++]; } @@ -126,11 +137,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++) - vy[m][1-l][i][k] = bufferbot_to_top[i][k][n++]; + vy[m][1-l][i][k] = buffer->bot_to_top[i][k][n++]; for (l=1;l<=(FDORDER/2-1);l++){ - vx[m][1-l][i][k] = bufferbot_to_top[i][k][n++]; - vz[m][1-l][i][k] = bufferbot_to_top[i][k][n++]; + vx[m][1-l][i][k] = buffer->bot_to_top[i][k][n++]; + vz[m][1-l][i][k] = buffer->bot_to_top[i][k][n++]; } } } @@ -145,12 +156,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of left edge of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferlef_to_rig[j][k][n++] = vy[m][j][l][k]; - bufferlef_to_rig[j][k][n++] = vz[m][j][l][k]; + buffer->lef_to_rig[j][k][n++] = vy[m][j][l][k]; + buffer->lef_to_rig[j][k][n++] = vz[m][j][l][k]; } for (l=1;l<=(FDORDER/2-1);l++) - bufferlef_to_rig[j][k][n++] = vx[m][j][l][k]; + buffer->lef_to_rig[j][k][n++] = vx[m][j][l][k]; } } @@ -162,11 +173,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of right edge of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++) - bufferrig_to_lef[j][k][n++] = vx[m][j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = vx[m][j][NX-l+1][k]; for (l=1;l<=(FDORDER/2-1);l++){ - bufferrig_to_lef[j][k][n++] = vy[m][j][NX-l+1][k]; - bufferrig_to_lef[j][k][n++] = vz[m][j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = vy[m][j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = vz[m][j][NX-l+1][k]; } } } @@ -182,16 +193,16 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, }*/ - MPI_Sendrecv_replace(&bufferlef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,INDEX[2],TAG1,MPI_COMM_WORLD,&status); - MPI_Sendrecv_replace(&bufferrig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,INDEX[1],TAG2,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->lef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,INDEX[2],TAG1,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->rig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,INDEX[1],TAG2,MPI_COMM_WORLD,&status); - /* MPI_Bsend(&bufferlef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD); + /* MPI_Bsend(&buffer->lef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferlef_to_rig[1][1][1], NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferrig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD); + MPI_Recv(&buffer->lef_to_rig[1][1][1], NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->rig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferrig_to_lef[1][1][1], NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->rig_to_lef[1][1][1], NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&status); */ if ((BOUNDARY) || (POS[1]!=NPROCX-1)) /* no boundary exchange at right edge of global grid */ @@ -200,12 +211,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - vy[m][j][NX+l][k] = bufferlef_to_rig[j][k][n++]; - vz[m][j][NX+l][k] = bufferlef_to_rig[j][k][n++]; + vy[m][j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; + vz[m][j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++) - vx[m][j][NX+l][k] = bufferlef_to_rig[j][k][n++]; + vx[m][j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; } } @@ -216,11 +227,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++) - vx[m][j][1-l][k] = bufferrig_to_lef[j][k][n++]; + vx[m][j][1-l][k] = buffer->rig_to_lef[j][k][n++]; for (l=1;l<=(FDORDER/2-1);l++){ - vy[m][j][1-l][k] = bufferrig_to_lef[j][k][n++]; - vz[m][j][1-l][k] = bufferrig_to_lef[j][k][n++]; + vy[m][j][1-l][k] = buffer->rig_to_lef[j][k][n++]; + vz[m][j][1-l][k] = buffer->rig_to_lef[j][k][n++]; } @@ -238,12 +249,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of front side of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferfro_to_bac[j][i][n++] = vx[m][j][i][l]; - bufferfro_to_bac[j][i][n++] = vy[m][j][i][l]; + buffer->fro_to_bac[j][i][n++] = vx[m][j][i][l]; + buffer->fro_to_bac[j][i][n++] = vy[m][j][i][l]; } for (l=1;l<=(FDORDER/2-1);l++) - bufferfro_to_bac[j][i][n++] = vz[m][j][i][l]; + buffer->fro_to_bac[j][i][n++] = vz[m][j][i][l]; } } @@ -256,11 +267,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of back side of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++) - bufferbac_to_fro[j][i][n++] = vz[m][j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = vz[m][j][i][NZ-l+1]; for (l=1;l<=(FDORDER/2-1);l++){ - bufferbac_to_fro[j][i][n++] = vx[m][j][i][NZ-l+1]; - bufferbac_to_fro[j][i][n++] = vy[m][j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = vx[m][j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = vy[m][j][i][NZ-l+1]; } } @@ -276,17 +287,17 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Wait(&req_rec[i],&status); }*/ - MPI_Sendrecv_replace(&bufferfro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,INDEX[6],TAG3,MPI_COMM_WORLD,&status); - MPI_Sendrecv_replace(&bufferbac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,INDEX[5],TAG4,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->fro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,INDEX[6],TAG3,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->bac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,INDEX[5],TAG4,MPI_COMM_WORLD,&status); /* - MPI_Bsend(&bufferfro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD); + MPI_Bsend(&buffer->fro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferfro_to_bac[1][1][1], NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferbac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD); + MPI_Recv(&buffer->fro_to_bac[1][1][1], NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->bac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferbac_to_fro[1][1][1], NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->bac_to_fro[1][1][1], NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&status); */ /* no exchange if periodic boundary condition is applied */ @@ -296,12 +307,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - vx[m][j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; - vy[m][j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; + vx[m][j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; + vy[m][j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; } for (l=1;l<=(FDORDER/2-1);l++) - vz[m][j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; + vz[m][j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; } @@ -314,15 +325,16 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, for (j=1;j<=NY;j++){ n=1; for (l=1;l<=FDORDER/2;l++) - vz[m][j][i][1-l] = bufferbac_to_fro[j][i][n++]; + vz[m][j][i][1-l] = buffer->bac_to_fro[j][i][n++]; for (l=1;l<=(FDORDER/2-1);l++){ - vx[m][j][i][1-l] = bufferbac_to_fro[j][i][n++]; - vy[m][j][i][1-l] = bufferbac_to_fro[j][i][n++]; + vx[m][j][i][1-l] = buffer->bac_to_fro[j][i][n++]; + vy[m][j][i][1-l] = buffer->bac_to_fro[j][i][n++]; } } } + } } /*if (LOG) if (MYID==0){ diff --git a/src/exchange_s.c b/src/exchange_s.c index cfdfeec..8228360 100644 --- a/src/exchange_s.c +++ b/src/exchange_s.c @@ -24,11 +24,7 @@ #include "fd.h" -double exchange_s(st_stress *stress, float *** syy, float *** szz, -float *** sxy, float *** syz, float *** sxz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Request * req_rec) { +double exchange_s(st_stress *stress,st_buffer *buffer, MPI_Request * req_send, MPI_Request * req_rec) { extern int NX, NY, NZ, POS[4], NPROCX, NPROCY, NPROCZ, BOUNDARY, FDORDER, INDEX[7]; /*MYID,LOG,*/ @@ -55,12 +51,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of top of local volume into buffer */ n=1; for (l=1;l<=(FDORDER/2);l++){ - buffertop_to_bot[i][k][n++] = syy[l][i][k]; + buffer->top_to_bot[i][k][n++] = stress->syy[l][i][k]; } for (l=1;l<=(FDORDER/2-1);l++){ - buffertop_to_bot[i][k][n++] = sxy[l][i][k]; - buffertop_to_bot[i][k][n++] = syz[l][i][k]; + buffer->top_to_bot[i][k][n++] = stress->sxy[l][i][k]; + buffer->top_to_bot[i][k][n++] = stress->syz[l][i][k]; } } @@ -75,12 +71,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of bottom of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferbot_to_top[i][k][n++] = sxy[NY-l+1][i][k]; - bufferbot_to_top[i][k][n++] = syz[NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = stress->sxy[NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = stress->syz[NY-l+1][i][k]; } for (l=1;l<=(FDORDER/2-1);l++){ - bufferbot_to_top[i][k][n++] = syy[NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = stress->syy[NY-l+1][i][k]; } } @@ -97,12 +93,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, }*/ - MPI_Bsend(&buffertop_to_bot[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD); + MPI_Bsend(&buffer->top_to_bot[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&buffertop_to_bot[1][1][1], NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferbot_to_top[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD); + MPI_Recv(&buffer->top_to_bot[1][1][1], NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->bot_to_top[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferbot_to_top[1][1][1], NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->bot_to_top[1][1][1], NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&status); @@ -112,12 +108,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=(FDORDER/2);l++){ - syy[NY+l][i][k] = buffertop_to_bot[i][k][n++]; + stress->syy[NY+l][i][k] = buffer->top_to_bot[i][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++){ - sxy[NY+l][i][k] = buffertop_to_bot[i][k][n++]; - syz[NY+l][i][k] = buffertop_to_bot[i][k][n++]; + stress->sxy[NY+l][i][k] = buffer->top_to_bot[i][k][n++]; + stress->syz[NY+l][i][k] = buffer->top_to_bot[i][k][n++]; } @@ -130,12 +126,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - sxy[1-l][i][k] = bufferbot_to_top[i][k][n++]; - syz[1-l][i][k] = bufferbot_to_top[i][k][n++]; + stress->sxy[1-l][i][k] = buffer->bot_to_top[i][k][n++]; + stress->syz[1-l][i][k] = buffer->bot_to_top[i][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++){ - syy[1-l][i][k] = bufferbot_to_top[i][k][n++]; + stress->syy[1-l][i][k] = buffer->bot_to_top[i][k][n++]; } } @@ -158,12 +154,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of left edge of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferlef_to_rig[j][k][n++] = stress->sxx[j][l][k]; + buffer->lef_to_rig[j][k][n++] = stress->sxx[j][l][k]; } for (l=1;l<=(FDORDER/2-1);l++){ - bufferlef_to_rig[j][k][n++] = sxy[j][l][k]; - bufferlef_to_rig[j][k][n++] = sxz[j][l][k]; + buffer->lef_to_rig[j][k][n++] = stress->sxy[j][l][k]; + buffer->lef_to_rig[j][k][n++] = stress->sxz[j][l][k]; } } } @@ -176,12 +172,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=(FDORDER/2);l++){ - bufferrig_to_lef[j][k][n++] = sxy[j][NX-l+1][k]; - bufferrig_to_lef[j][k][n++] = sxz[j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = stress->sxy[j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = stress->sxz[j][NX-l+1][k]; } for (l=1;l<=(FDORDER/2-1);l++){ - bufferrig_to_lef[j][k][n++] = stress->sxx[j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = stress->sxx[j][NX-l+1][k]; } } } @@ -198,12 +194,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, - MPI_Bsend(&bufferlef_to_rig[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD); + MPI_Bsend(&buffer->lef_to_rig[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferlef_to_rig[1][1][1], NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferrig_to_lef[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD); + MPI_Recv(&buffer->lef_to_rig[1][1][1], NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG1,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->rig_to_lef[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[2],TAG2,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferrig_to_lef[1][1][1], NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->rig_to_lef[1][1][1], NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG2,MPI_COMM_WORLD,&status); @@ -216,12 +212,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=(FDORDER/2);l++){ - stress->sxx[j][NX+l][k] = bufferlef_to_rig[j][k][n++]; + stress->sxx[j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++){ - sxy[j][NX+l][k] = bufferlef_to_rig[j][k][n++]; - sxz[j][NX+l][k] = bufferlef_to_rig[j][k][n++]; + stress->sxy[j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; + stress->sxz[j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; } } } @@ -232,12 +228,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=(FDORDER/2);l++){ - sxy[j][1-l][k] = bufferrig_to_lef[j][k][n++]; - sxz[j][1-l][k] = bufferrig_to_lef[j][k][n++]; + stress->sxy[j][1-l][k] = buffer->rig_to_lef[j][k][n++]; + stress->sxz[j][1-l][k] = buffer->rig_to_lef[j][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++){ - stress->sxx[j][1-l][k] = bufferrig_to_lef[j][k][n++]; + stress->sxx[j][1-l][k] = buffer->rig_to_lef[j][k][n++]; } } } @@ -256,12 +252,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of front side of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferfro_to_bac[j][i][n++] = szz[j][i][l]; + buffer->fro_to_bac[j][i][n++] = stress->szz[j][i][l]; } for (l=1;l<=(FDORDER/2-1);l++){ - bufferfro_to_bac[j][i][n++] = syz[j][i][l]; - bufferfro_to_bac[j][i][n++] = sxz[j][i][l]; + buffer->fro_to_bac[j][i][n++] = stress->syz[j][i][l]; + buffer->fro_to_bac[j][i][n++] = stress->sxz[j][i][l]; } } } @@ -274,12 +270,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of back side of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferbac_to_fro[j][i][n++] = syz[j][i][NZ-l+1]; - bufferbac_to_fro[j][i][n++] = sxz[j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = stress->syz[j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = stress->sxz[j][i][NZ-l+1]; } for (l=1;l<=(FDORDER/2-1);l++){ - bufferbac_to_fro[j][i][n++] = szz[j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = stress->szz[j][i][NZ-l+1]; } } } @@ -295,12 +291,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, }*/ - MPI_Bsend(&bufferfro_to_bac[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD); + MPI_Bsend(&buffer->fro_to_bac[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferfro_to_bac[1][1][1], NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferbac_to_fro[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD); + MPI_Recv(&buffer->fro_to_bac[1][1][1], NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->bac_to_fro[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferbac_to_fro[1][1][1], NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->bac_to_fro[1][1][1], NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&status); @@ -310,12 +306,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - szz[j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; + stress->szz[j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; } for (l=1;l<=(FDORDER/2-1);l++){ - syz[j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; - sxz[j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; + stress->syz[j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; + stress->sxz[j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; } } } @@ -327,12 +323,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - syz[j][i][1-l] = bufferbac_to_fro[j][i][n++]; - sxz[j][i][1-l] = bufferbac_to_fro[j][i][n++]; + stress->syz[j][i][1-l] = buffer->bac_to_fro[j][i][n++]; + stress->sxz[j][i][1-l] = buffer->bac_to_fro[j][i][n++]; } for (l=1;l<=(FDORDER/2-1);l++){ - szz[j][i][1-l] = bufferbac_to_fro[j][i][n++]; + stress->szz[j][i][1-l] = buffer->bac_to_fro[j][i][n++]; } } diff --git a/src/exchange_v.c b/src/exchange_v.c index cc4416e..3961363 100644 --- a/src/exchange_v.c +++ b/src/exchange_v.c @@ -7,10 +7,7 @@ #include "fd.h" -double exchange_v(float *** vx, float *** vy, float *** vz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Request * req_rec){ +double exchange_v(st_velocity *vel,st_buffer *buffer, MPI_Request * req_send, MPI_Request * req_rec){ extern int NX, NY, NZ, POS[4], NPROCX, NPROCY, NPROCZ, BOUNDARY, FDORDER, INDEX[7]; /*MYID,LOG,*/ extern const int TAG1,TAG2,TAG3,TAG4,TAG5,TAG6; @@ -34,11 +31,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of top of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - buffertop_to_bot[i][k][n++] = vx[l][i][k]; - buffertop_to_bot[i][k][n++] = vz[l][i][k]; + buffer->top_to_bot[i][k][n++] = vel->vx[l][i][k]; + buffer->top_to_bot[i][k][n++] = vel->vz[l][i][k]; } for (l=1;l<=(FDORDER/2-1);l++) - buffertop_to_bot[i][k][n++] = vy[l][i][k]; + buffer->top_to_bot[i][k][n++] = vel->vy[l][i][k]; } } @@ -51,11 +48,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of bottom of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++) - bufferbot_to_top[i][k][n++] = vy[NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = vel->vy[NY-l+1][i][k]; for (l=1;l<=(FDORDER/2-1);l++){ - bufferbot_to_top[i][k][n++] = vx[NY-l+1][i][k]; - bufferbot_to_top[i][k][n++] = vz[NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = vel->vx[NY-l+1][i][k]; + buffer->bot_to_top[i][k][n++] = vel->vz[NY-l+1][i][k]; } } } @@ -71,16 +68,16 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, }*/ - MPI_Sendrecv_replace(&buffertop_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,INDEX[4],TAG5,MPI_COMM_WORLD,&status); - MPI_Sendrecv_replace(&bufferbot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,INDEX[3],TAG6,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->top_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,INDEX[4],TAG5,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->bot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,INDEX[3],TAG6,MPI_COMM_WORLD,&status); /* - MPI_Bsend(&buffertop_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD); + MPI_Bsend(&buffer->top_to_bot[1][1][1],NX*NZ*nf1,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&buffertop_to_bot[1][1][1], NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferbot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD); + MPI_Recv(&buffer->top_to_bot[1][1][1], NX*NZ*nf1,MPI_FLOAT,INDEX[4],TAG5,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->bot_to_top[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[4],TAG6,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferbot_to_top[1][1][1], NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->bot_to_top[1][1][1], NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG6,MPI_COMM_WORLD,&status); */ if (POS[2]!=NPROCY-1) /* no boundary exchange at bottom of global grid */ @@ -89,12 +86,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - vx[NY+l][i][k] = buffertop_to_bot[i][k][n++]; - vz[NY+l][i][k] = buffertop_to_bot[i][k][n++]; + vel->vx[NY+l][i][k] = buffer->top_to_bot[i][k][n++]; + vel->vz[NY+l][i][k] = buffer->top_to_bot[i][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++) - vy[NY+l][i][k] = buffertop_to_bot[i][k][n++]; + vel->vy[NY+l][i][k] = buffer->top_to_bot[i][k][n++]; } @@ -107,11 +104,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++) - vy[1-l][i][k] = bufferbot_to_top[i][k][n++]; + vel->vy[1-l][i][k] = buffer->bot_to_top[i][k][n++]; for (l=1;l<=(FDORDER/2-1);l++){ - vx[1-l][i][k] = bufferbot_to_top[i][k][n++]; - vz[1-l][i][k] = bufferbot_to_top[i][k][n++]; + vel->vx[1-l][i][k] = buffer->bot_to_top[i][k][n++]; + vel->vz[1-l][i][k] = buffer->bot_to_top[i][k][n++]; } } } @@ -126,12 +123,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of left edge of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferlef_to_rig[j][k][n++] = vy[j][l][k]; - bufferlef_to_rig[j][k][n++] = vz[j][l][k]; + buffer->lef_to_rig[j][k][n++] = vel->vy[j][l][k]; + buffer->lef_to_rig[j][k][n++] = vel->vz[j][l][k]; } for (l=1;l<=(FDORDER/2-1);l++) - bufferlef_to_rig[j][k][n++] = vx[j][l][k]; + buffer->lef_to_rig[j][k][n++] = vel->vx[j][l][k]; } } @@ -143,11 +140,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of right edge of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++) - bufferrig_to_lef[j][k][n++] = vx[j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = vel->vx[j][NX-l+1][k]; for (l=1;l<=(FDORDER/2-1);l++){ - bufferrig_to_lef[j][k][n++] = vy[j][NX-l+1][k]; - bufferrig_to_lef[j][k][n++] = vz[j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = vel->vy[j][NX-l+1][k]; + buffer->rig_to_lef[j][k][n++] = vel->vz[j][NX-l+1][k]; } } } @@ -163,8 +160,8 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, }*/ - MPI_Sendrecv_replace(&bufferlef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,INDEX[2],TAG1,MPI_COMM_WORLD,&status); - MPI_Sendrecv_replace(&bufferrig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,INDEX[1],TAG2,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->lef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,INDEX[2],TAG1,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->rig_to_lef[1][1][1],NY*NZ*nf2,MPI_FLOAT,INDEX[2],TAG2,INDEX[1],TAG2,MPI_COMM_WORLD,&status); /* MPI_Bsend(&bufferlef_to_rig[1][1][1],NY*NZ*nf1,MPI_FLOAT,INDEX[1],TAG1,MPI_COMM_WORLD); @@ -181,12 +178,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - vy[j][NX+l][k] = bufferlef_to_rig[j][k][n++]; - vz[j][NX+l][k] = bufferlef_to_rig[j][k][n++]; + vel->vy[j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; + vel->vz[j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; } for (l=1;l<=(FDORDER/2-1);l++) - vx[j][NX+l][k] = bufferlef_to_rig[j][k][n++]; + vel->vx[j][NX+l][k] = buffer->lef_to_rig[j][k][n++]; } } @@ -197,11 +194,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++) - vx[j][1-l][k] = bufferrig_to_lef[j][k][n++]; + vel->vx[j][1-l][k] = buffer->rig_to_lef[j][k][n++]; for (l=1;l<=(FDORDER/2-1);l++){ - vy[j][1-l][k] = bufferrig_to_lef[j][k][n++]; - vz[j][1-l][k] = bufferrig_to_lef[j][k][n++]; + vel->vy[j][1-l][k] = buffer->rig_to_lef[j][k][n++]; + vel->vz[j][1-l][k] = buffer->rig_to_lef[j][k][n++]; } @@ -219,12 +216,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of front side of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++){ - bufferfro_to_bac[j][i][n++] = vx[j][i][l]; - bufferfro_to_bac[j][i][n++] = vy[j][i][l]; + buffer->fro_to_bac[j][i][n++] = vel->vx[j][i][l]; + buffer->fro_to_bac[j][i][n++] = vel->vy[j][i][l]; } for (l=1;l<=(FDORDER/2-1);l++) - bufferfro_to_bac[j][i][n++] = vz[j][i][l]; + buffer->fro_to_bac[j][i][n++] = vel->vz[j][i][l]; } } @@ -237,11 +234,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, /* storage of back side of local volume into buffer */ n=1; for (l=1;l<=FDORDER/2;l++) - bufferbac_to_fro[j][i][n++] = vz[j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = vel->vz[j][i][NZ-l+1]; for (l=1;l<=(FDORDER/2-1);l++){ - bufferbac_to_fro[j][i][n++] = vx[j][i][NZ-l+1]; - bufferbac_to_fro[j][i][n++] = vy[j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = vel->vx[j][i][NZ-l+1]; + buffer->bac_to_fro[j][i][n++] = vel->vy[j][i][NZ-l+1]; } } @@ -257,17 +254,17 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Wait(&req_rec[i],&status); }*/ - MPI_Sendrecv_replace(&bufferfro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,INDEX[6],TAG3,MPI_COMM_WORLD,&status); - MPI_Sendrecv_replace(&bufferbac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,INDEX[5],TAG4,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->fro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,INDEX[6],TAG3,MPI_COMM_WORLD,&status); + MPI_Sendrecv_replace(&buffer->bac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,INDEX[5],TAG4,MPI_COMM_WORLD,&status); /* - MPI_Bsend(&bufferfro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD); + MPI_Bsend(&buffer->fro_to_bac[1][1][1],NX*NY*nf1,MPI_FLOAT,INDEX[5],TAG3,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferfro_to_bac[1][1][1], NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&status); - MPI_Bsend(&bufferbac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD); + MPI_Recv(&buffer->fro_to_bac[1][1][1], NX*NY*nf1,MPI_FLOAT,INDEX[6],TAG3,MPI_COMM_WORLD,&status); + MPI_Bsend(&buffer->bac_to_fro[1][1][1],NX*NY*nf2,MPI_FLOAT,INDEX[6],TAG4,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - MPI_Recv(&bufferbac_to_fro[1][1][1], NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&status); + MPI_Recv(&buffer->bac_to_fro[1][1][1], NX*NY*nf2,MPI_FLOAT,INDEX[5],TAG4,MPI_COMM_WORLD,&status); */ /* no exchange if periodic boundary condition is applied */ @@ -277,12 +274,12 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, n=1; for (l=1;l<=FDORDER/2;l++){ - vx[j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; - vy[j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; + vel->vx[j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; + vel->vy[j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; } for (l=1;l<=(FDORDER/2-1);l++) - vz[j][i][NZ+l] = bufferfro_to_bac[j][i][n++]; + vel->vz[j][i][NZ+l] = buffer->fro_to_bac[j][i][n++]; } @@ -295,11 +292,11 @@ float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, for (j=1;j<=NY;j++){ n=1; for (l=1;l<=FDORDER/2;l++) - vz[j][i][1-l] = bufferbac_to_fro[j][i][n++]; + vel->vz[j][i][1-l] = buffer->bac_to_fro[j][i][n++]; for (l=1;l<=(FDORDER/2-1);l++){ - vx[j][i][1-l] = bufferbac_to_fro[j][i][n++]; - vy[j][i][1-l] = bufferbac_to_fro[j][i][n++]; + vel->vx[j][i][1-l] = buffer->bac_to_fro[j][i][n++]; + vel->vy[j][i][1-l] = buffer->bac_to_fro[j][i][n++]; } } } diff --git a/src/fd.h b/src/fd.h index c40cdf0..2b9309e 100644 --- a/src/fd.h +++ b/src/fd.h @@ -2,18 +2,18 @@ * Copyright (C) 2015 For the list of authors, see file AUTHORS. * * This file is part of IFOS3D. - * + * * IFOS3D is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 2.0 of the License only. - * + * * IFOS3D is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License - * along with IFOS3D. See file COPYING and/or + * along with IFOS3D. See file COPYING and/or * . --------------------------------------------------------------------------*/ @@ -46,13 +46,100 @@ #define NPROCY_MAX 100 #define NPROCZ_MAX 100 - typedef struct Stress{ - //stress tensor - // Pointer for dynamic wavefields: - float *** sxx, *** syy, *** szz; - float *** sxy, *** syz, *** sxz; - }st_stress; - + typedef struct Model{ + //model + float *** rho, *** pi, *** u; + /* Variables for viscoelastic modeling */ + float *** taus, *** taup, *eta; + + }st_model; + + typedef struct Model_AV{ + //Averaged model for staggered grid + float *** uipjp, *** ujpkp, *** uipkp, *** rjp, *** rkp, *** rip; + /* Variables for viscoelastic modeling */ + float *** tausipjp, *** tausjpkp, *** tausipkp; + }st_model_av; + + +typedef struct Stress { + //stress tensor + // Pointer for dynamic wavefields: + float ** *sxx, * **syy, * **szz; + float ** *sxy, * **syz, * **sxz; +} st_stress; + +typedef struct Particle_velocity { + //particle velocity + // Pointer for dynamic wavefields: + float ** *vx, * **vy, * **vz; +} st_velocity; + +typedef struct Freq_Particle_velocity { + //particle velocity in the frequency domain + // Pointer for dynamic wavefields: + float **** Fvx_re, **** Fvy_re, **** Fvz_re; + float **** Fvx_im, **** Fvy_im, **** Fvz_im; + +} st_freq_velocity; + +typedef struct PML_Coefficients { + //Pml coefficients for pml damping boundaries + float *K_x, * K_x_half, * K_y, * K_y_half , * K_z , * K_z_half; + float *a_x, * a_x_half, * a_y, * a_y_half, * a_z, * a_z_half; + float *b_x, * b_x_half, * b_y, * b_y_half, * b_z, * b_z_half; + float *alpha_prime_x, * alpha_prime_x_half, * alpha_prime_y, * alpha_prime_y_half, * alpha_prime_z, * alpha_prime_z_half; + +} st_pml_coeff; + +typedef struct PML_Wavefield { + //Pml Damping Wavefields for pml damping boundaries + float ***psi_sxx_x, ***psi_syy_y, ***psi_szz_z; + float ***psi_sxy_y, ***psi_sxy_x, ***psi_sxz_x, ***psi_sxz_z, ***psi_syz_y, ***psi_syz_z; + float ***psi_vxx, ***psi_vyy, ***psi_vzz; + float ***psi_vxy, ***psi_vxz, ***psi_vyx, ***psi_vyz, ***psi_vzx, ***psi_vzy; +} st_pml_wfd; + + typedef struct Visco_memory{ + /* memory variables for viscoelastic modeling */ + float *** rxy, *** ryz, *** rxz; + float *** rxx, *** ryy, *** rzz; + }st_visc_mem; + + typedef struct Buffer{ + // buffer arrays in which the wavefield is exchanged between neighbouring PEs + float *** lef_to_rig, *** rig_to_lef; + float *** top_to_bot, *** bot_to_top; + float *** fro_to_bac, *** bac_to_fro; + }st_buffer; + + typedef struct Hessian{ + // diagonal Hessian approximation + float *** vp, *** vs, *** rho; + }st_hessian; + + typedef struct Gradient{ + // Gradients for vp, vs and rho + float *** vp, *** vs, *** rho; + }st_gradient; + + typedef struct Seismogram{ + float ** vx, ** vy, ** vz, ** p, + ** curl, ** div, ** read, ** readf; + + }st_seismogram; + + typedef struct signals{ + float ** fw; + float ** sectionvxdiff, ** sectionvydiff,** sectionvzdiff; + + }st_signals; + +typedef struct Acquisition{ + //Acquisition + float ** srcpos, **srcpos_loc, **srcpos_loc_back; + int ** recpos, ** recpos_loc, *snum_loc,*rnum_loc; + }st_acquisition; /* declaration of functions */ @@ -60,42 +147,23 @@ void absorb(float *** absorb_coeff); void absorb_PML(float *** absorb_coeffx, float *** absorb_coeffy, float *** absorb_coeffz); -void CPML_coeff(float * K_x, float * alpha_prime_x, float * a_x, float * b_x, - float * K_x_half, float * alpha_prime_x_half, float * a_x_half, float * b_x_half, - float * K_y, float * alpha_prime_y, float * a_y, float * b_y, - float * K_y_half, float * alpha_prime_y_half, float * a_y_half, float * b_y_half, - float * K_z, float * alpha_prime_z, float * a_z, float * b_z, - float * K_z_half, float * alpha_prime_z_half, float * a_z_half, float * b_z_half); +void CPML_coeff(st_pml_coeff *pml_coeff); -void av_mat(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup, -float *** uipjp, float *** ukpkp, float *** uipkp, float *** tausipjp, -float *** tausjpkp, float *** tausipkp, float *** rjp, float *** rkp, float *** rip ); +void av_mat(st_model *mod, st_model_av *mod_av); -void av_mat_acoustic(float *** rho, float *** rjp, float *** rkp, float *** rip ); +void av_mat_acoustic(float *** rho, float *** rjp, float *** rkp, float *** rip); -void checkfd(FILE *fp, float *** prho, float *** ppi, float *** pu, -float *** ptaus, float *** ptaup, float *peta, float **srcpos, int nsrc, int **recpos, int ntr); +void checkfd(FILE *fp, st_model *mod, float **srcpos, int nsrc, int **recpos, int ntr); -void checkfd_acoustic(FILE *fp, float *** prho, float *** ppi); +void checkfd_acoustic(FILE *fp, st_model *mod); -void checkfd_rsg(FILE *fp, float *** prho, float *** ppi, float *** pu, -float *** ptaus, float *** ptaup, float *peta); +void checkfd_rsg(FILE *fp, st_model *mod); -void comm_ini(float *** bufferlef_to_rig, -float *** bufferrig_to_lef, float *** buffertop_to_bot, -float *** bufferbot_to_top, float *** bufferfro_to_bac, -float *** bufferbac_to_fro, MPI_Request *req_send, MPI_Request *req_rec); +void comm_ini(st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec); -void comm_ini_s(float *** bufferlef_to_rig, -float *** bufferrig_to_lef, float *** buffertop_to_bot, -float *** bufferbot_to_top, float *** bufferfro_to_bac, -float *** bufferbac_to_fro, MPI_Request *req_send, MPI_Request *req_rec); +void comm_ini_s(st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec); -void comm_ini_acoustic(float *** bufferlef_to_rig, -float *** bufferrig_to_lef, float *** buffertop_to_bot, -float *** bufferbot_to_top, float *** bufferfro_to_bac, -float *** bufferbac_to_fro, MPI_Request *req_send, MPI_Request *req_rec); +void comm_ini_acoustic(st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec); void info(FILE *fp); @@ -104,123 +172,89 @@ void initproc(void); /*int initsour(int nxs,int nys, int nzs, int *nxsl,int *nysl, int *nzsl );*/ -void matcopy(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup); +void matcopy(st_model *mod); -void matcopy_acoustic(float *** rho, float *** pi); +void matcopy_acoustic(st_model *mod); void merge(int nsnap, int type); void mergemod(char modfile[STRING_SIZE], int format); -void readmod(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup, float * eta); +void readmod(st_model *mod); -void model(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup, float * eta); +void model(st_model *mod); -void model_acoustic(float *** rho, float *** pi); +void model_acoustic(st_model *mod); void note(FILE *fp); void outseis(FILE *fp, FILE *fpdata, int comp, float **section, -int **recpos, int **recpos_loc, int ntr, float ** srcpos_loc, -int nsrc, int ns, int seis_form); - -float *rd_sour(int *nts,FILE* fp_source); + int **recpos, int **recpos_loc, int ntr, float **srcpos_loc, + int nsrc, int ns, int seis_form); + +float *rd_sour(int *nts,FILE *fp_source); int plane_wave(float *** force_points); -void CPML_ini_elastic(int * xb, int * yb, int * zb); +void CPML_ini_elastic(int *xb, int *yb, int *zb); -void psource(int nt, st_stress *stress, float *** syy, float *** szz, float **srcpos_loc, float **signals, int nsrc); +void psource(int nt, st_stress *stress, float **srcpos_loc, float **signals, int nsrc); -void psource_acoustic(int nt, float *** sxx, float ** srcpos_loc, float ** signals, int nsrc, int * stype); +void psource_acoustic(int nt, st_stress *stress, float **srcpos_loc, float **signals, int nsrc, int *stype); -void psource_rsg(int nt, float *** sxx, float *** syy, float *** szz, -float ** srcpos_loc, float ** signals, int nsrc); +void psource_rsg(st_stress *stress, float **srcpos_loc, float **signals, int nsrc); -void readbufs(float *** sxx, float *** syy, float *** szz, -float *** sxy, float *** syz, float *** sxz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro); +void readbufs(st_stress *stress, st_buffer *buffer); void exchange_par(void); -void exchange_s_rsg(float *** sxx, float *** syy, float *** szz, -float *** sxy, float *** syz, float *** sxz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro); +void exchange_s_rsg(st_stress *stress,st_buffer *buffer); -double exchange_s(st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** bufferlef_to_rig, float *** bufferrig_to_lef, float *** buffertop_to_bot, float *** bufferbot_to_top, float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request *req_send, MPI_Request *req_rec); +double exchange_s(st_stress *stress, st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec); -double exchange_s_acoustic(float *** sxx, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Request * req_rec); +double exchange_s_acoustic(st_stress *stress, st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec); -void readbufv(float *** vx, float *** vy, float *** vz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro); +void readbufv(st_velocity *vel, st_buffer *buffer); -void exchange_v_rsg(float *** vx, float *** vy, float *** vz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro); +void exchange_v_rsg(st_velocity *vel,st_buffer *buffer); -double exchange_v(float *** vx, float *** vy, float *** vz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Request * req_rec); +double exchange_v(st_velocity *vel, st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec); -double exchange_Fv(float **** vx, float **** vy, float **** vz, int nf, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro, MPI_Request * req_send, MPI_Request * req_rec, int ntr_hess); +double exchange_Fv(st_freq_velocity *fourier_vel, int nf, st_buffer *buffer, MPI_Request *req_send, MPI_Request *req_rec, int ntr_hess); float readdsk(FILE *fp_in, int format); void read_par_json(FILE *fp, char *fileinp); -void readmod_acoustic(float *** rho, float *** pi, int ishot); +void readmod_acoustic(st_model *mod, int ishot); int **receiver(FILE *fp, int *ntr); -void saveseis(FILE *fp, float **sectionvx, float **sectionvy,float **sectionvz, -float **sectionp, float **sectioncurl, float **sectiondiv, -int **recpos, int **recpos_loc, int ntr, float ** srcpos, int nsrc,int ns, int obs, int iteration); - -void seismo_acoustic(int lsamp, int ntr, int **recpos, float **sectionvx, float **sectionvy, -float **sectionvz, float **sectiondiv, float **sectioncurl, float **sectionp, -float ***vx, float ***vy, float ***vz, float ***sxx, float ***pi); +void saveseis(FILE *fp, st_seismogram *section, st_acquisition *acq, int ntr, int ishot, int ns, int obs, int iteration); + +void seismo_acoustic(int lsamp, int ntr, int **recpos, float **sectionvx, float **sectionvy, + float **sectionvz, float **sectiondiv, float **sectioncurl, float **sectionp, + st_velocity *vel, st_stress *stress, st_model *mod); -void seismo(int lsamp, int ntr, int **recpos, float **sectionvx, float **sectionvy, float **sectionvz, float **sectiondiv, float **sectioncurl, float **sectionp, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** pi, float *** u); +void seismo(int lsamp, int ntr, int **recpos, st_seismogram *section, st_velocity *vel, st_stress *stress, st_model *mod); -void seismo_rsg(int lsamp, int ntr, int **recpos, float **sectionvx, float **sectionvy, -float **sectionvz, float **sectiondiv, float **sectioncurl, float **sectionp, -float ***vx, float ***vy, float ***vz, -float ***sxx, float ***syy, float ***szz, float ***pi, float ***u); +void seismo_rsg(int lsamp, int ntr, int **recpos, float **sectionvx, float **sectionvy, + float **sectionvz, float **sectiondiv, float **sectioncurl, float **sectionp, + st_velocity *vel,st_stress *stress, st_model *mod); -void snap_acoustic(FILE *fp, int nt, int nsnap, int format, int type, -float ***vx, float ***vy, float ***vz, float ***sxx, float ***pi, -int idx, int idy, int idz, int nx1, int ny1, int nz1, int nx2, -int ny2, int nz2); +void snap_acoustic(FILE *fp, int nt, int nsnap, int format, int type, + st_velocity *vel, st_stress *stress, st_model *mod,int idx, int idy, int idz, int nx1, int ny1, int nz1, int nx2,int ny2, int nz2); -void snap(FILE *fp, int nt, int nsnap, int format, int type, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** u, float *** pi, int idx, int idy, int idz, int nx1, int ny1, int nz1, int nx2, int ny2, int nz2); +void snap(FILE *fp, int nt, int nsnap, int format, int type, st_velocity *vel, st_stress *stress, st_model *mod, int idx, int idy, int idz, int nx1, int ny1, int nz1, int nx2, int ny2, int nz2); -void snap_rsg(FILE *fp, int nt, int nsnap, int format, int type, -float ***vx, float ***vy, float ***vz, float ***sxx, float ***syy, float ***szz, -float ***u, float ***pi, -int idx, int idy, int idz, int nx1, int ny1, int nz1, int nx2, -int ny2, int nz2); +void snap_rsg(FILE *fp, int nt, int nsnap, int format, int type, + st_velocity *vel, st_stress *stress,st_model *mod, + int idx, int idy, int idz, int nx1, int ny1, int nz1, int nx2,int ny2, int nz2); void snapmerge(int nsnap); -void sources(FILE * fpsrc, int *nsrc, float **srcpos); +void sources(FILE *fpsrc, int *nsrc, float **srcpos); void pwsources(int *nsrc, float **srcpos); @@ -230,95 +264,76 @@ int **splitrec(int **recpos,int *ntr_loc, int ntr, int *rnum_loc); float **splitsrc(float **srcpos,int *nsrc_loc, int nsrc, int *snum_loc); -void surface(int ndepth, float *** u, float *** pi, float *** taus, float *** taup, float *eta, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** rxx, float *** ryy, float *** rzz, float *** vx, float *** vy, float *** vz); +void surface(int ndepth, st_model *mod, st_stress *stress, st_visc_mem *mem, st_velocity *vel); -void surface_acoustic(int ndepth, float *** pi, float *** sxx, float *** vx, float *** vy, float *** vz); +void surface_acoustic(int ndepth, st_model *mod, st_stress *stress, st_velocity *vel); /*void timing(double * time_v_update, double * time_s_update, double * time_s_exchange, double * time_v_exchange, double * time_timestep, int ishot);*/ -double update_s(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rxx, float *** ryy, float *** rzz, float *** rxy, float *** ryz, float *** rxz, float *** pi, float *** u, float *** uipjp, float *** ujpkp, float *** uipkp, float *** taus, float *** tausipjp, float *** tausjpkp, float *** tausipkp, float *** taup, float *eta); +double update_s(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, st_stress *stress, st_visc_mem *mem, st_model *mod, st_model_av *mod_av); -double update_s_CPML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rxx, float *** ryy, float *** rzz, float *** rxy, float *** ryz, float *** rxz, float *** pi, float *** u, float *** uipjp, float *** ujpkp, float *** uipkp, float *** taus, float *** tausipjp, float *** tausjpkp, float *** tausipkp, float *** taup, float *eta, float *K_x, float *a_x, float *b_x, float *K_x_half, float *a_x_half, float *b_x_half, float *K_y, float *a_y, float *b_y, float *K_y_half, float *a_y_half, float *b_y_half, float *K_z, float *a_z, float *b_z, float *K_z_half, float *a_z_half, float *b_z_half, float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, float *** psi_vyy, float *** psi_vzy, float *** psi_vxz, float *** psi_vyz, float *** psi_vzz); +double update_s_CPML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, st_stress *stress, st_visc_mem *mem, st_model *mod, st_model_av *mod_av, st_pml_coeff *pml_coeff, st_pml_wfd *pml_wfd); double update_s_acoustic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -float *** vx, float *** vy, float *** vz, float *** sxx, float *** pi); + st_velocity *vel, st_stress *stress, st_model *mod); double update_s_acoustic_PML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -float *** vx, float *** vy, float *** vz, -float *** sxx, float *** sxx1, float *** sxx2, float *** sxx3, -float *** pi, float ***absorb_coeffx, float ***absorb_coeffy, float ***absorb_coeffz); + st_velocity *vel,st_stress *stress,st_model *mod, float ***absorb_coeffx, float ***absorb_coeffy, float ***absorb_coeffz); -void update_s_rsg(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -float *** vx, float *** vy, float *** vz, -float *** sxx, float *** syy, float *** szz, float *** sxy, -float *** syz, float *** sxz, float *** rxx, float *** ryy, -float *** rzz, float *** rxy, float *** ryz, float *** rxz, -float *** pi, float *** u, -float *** taus, float *** taup, float * eta); +void update_s_rsg(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel,st_stress *stress, st_visc_mem *mem, + st_model *mod,float *** taus, float *** taup, float *eta); -double update_v(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rho, float *** rjp, float *** rkp, float *** rip, float **srcpos_loc, float **signals, float **signaly, float **signalz, int nsrc, float *** absorb_coeff, int back); +double update_v(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, st_velocity *vel, st_stress *stress, st_model_av *mod_av, float **srcpos_loc, st_signals *signals, int nsrc, float *** absorb_coeff, int back); -double update_v_CPML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rho, float *** rjp, float *** rkp, float *** rip, float **srcpos_loc, float **signals, float **signaly, float **signalz, int nsrc, float *** absorb_coeff, int back, float *K_x, float *a_x, float *b_x, float *K_x_half, float *a_x_half, float *b_x_half, float *K_y, float *a_y, float *b_y, float *K_y_half, float *a_y_half, float *b_y_half, float *K_z, float *a_z, float *b_z, float *K_z_half, float *a_z_half, float *b_z_half, float *** psi_sxx_x, float *** psi_sxy_x, float *** psi_sxz_x, float *** psi_sxy_y, float *** psi_syy_y, float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz_z); +double update_v_CPML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, st_velocity *vel, st_stress *stress, st_model_av *mod_av, float **srcpos_loc, st_signals *signals, int nsrc, float *** absorb_coeff, int back, st_pml_coeff *pml_coeff, st_pml_wfd *pml_wfd); -double update_v_acoustic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -int nt, float *** vx, float *** vy, float *** vz, -float *** sxx, float *** rho, float ** srcpos_loc, float ** signals, int nsrc, float ***absorb_coeff, int * stype); +double update_v_acoustic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2,st_velocity *vel, + st_stress *stress, float *** rho, float **srcpos_loc, float **signals, int nsrc, float ***absorb_coeff, int *stype); double update_v_acoustic_PML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -int nt, float *** vx, float *** vy, float *** vz, float *** sxx, float *** vx1, -float *** vy2, float *** vz3, float *** rho, float ** srcpos_loc, -float ** signals, int nsrc, float ***absorb_coeffx, float ***absorb_coeffy, float ***absorb_coeffz, int * stype); + int nt, st_velocity *vel, st_stress *stress, float *** rho, float **srcpos_loc, + float **signals, int nsrc, float ***absorb_coeffx, float ***absorb_coeffy, float ***absorb_coeffz, int *stype); -void update_v_rsg(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -int nt, float *** vx, float *** vy, float *** vz, -float *** sxx, float *** syy, float *** szz, float *** sxy, -float *** syz, float *** sxz, float *** rho, -float ** srcpos_loc, float ** signals, int nsrc, float ***absorb_coeff); +void update_v_rsg(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, + st_velocity *vel,st_stress *stress, float *** rho,float **srcpos_loc, float **signals, int nsrc, float ***absorb_coeff); -void wavelet(float **srcpos_loc, int nsrc, int sourceshape, float ** signals); +void wavelet(float **srcpos_loc, int nsrc, int sourceshape, float **signals); -void writebufs(float *** sxx, float *** syy, float *** szz, -float *** sxy, float *** syz, float *** sxz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro); +void writebufs(st_stress *stress, st_buffer *buffer); -void writebufv(float *** vx, float *** vy, float *** vz, -float *** bufferlef_to_rig, float *** bufferrig_to_lef, -float *** buffertop_to_bot, float *** bufferbot_to_top, -float *** bufferfro_to_bac, float *** bufferbac_to_fro); +void writebufv(st_velocity *vel, st_buffer *buffer); void writedsk(FILE *fp_out, float amp, int format); -void writemod(char modfile[STRING_SIZE], float *** rho, int format); +void writemod(char modfile[74], st_model *mod, int format); void writepar(FILE *fp, int ns); /* declaration of functions for json parser in json_parser.c*/ -int read_objects_from_intputfile(FILE *fp, char input_file[STRING_SIZE],char ** varname_list,char ** value_list); +int read_objects_from_intputfile(FILE *fp, char input_file[STRING_SIZE],char **varname_list,char **value_list); -void print_objectlist_screen(FILE *fp, int number_readobject,char ** varname_list,char ** value_list); +void print_objectlist_screen(FILE *fp, int number_readobject,char **varname_list,char **value_list); int count_occure_charinstring(char stringline[STRING_SIZE], char teststring[]); void copy_str2str_uptochar(char string_in[STRING_SIZE], char string_out[STRING_SIZE], char teststring[]); -int get_int_from_objectlist(char string_in[STRING_SIZE], int number_readobject, int * int_buffer, - char ** varname_list,char ** value_list); +int get_int_from_objectlist(char string_in[STRING_SIZE], int number_readobject, int *int_buffer, + char **varname_list,char **value_list); -int get_float_from_objectlist(char string_in[STRING_SIZE], int number_readobject, float * double_buffer, - char ** varname_list,char ** value_list); +int get_float_from_objectlist(char string_in[STRING_SIZE], int number_readobject, float *double_buffer, + char **varname_list,char **value_list); int get_string_from_objectlist(char string_in[STRING_SIZE], int number_readobject, char string_buffer[STRING_SIZE], - char ** varname_list,char ** value_list); + char **varname_list,char **value_list); int is_string_blankspace(char string_in[STRING_SIZE]); -void remove_blankspaces_around_string(char string_in[STRING_SIZE] ); +void remove_blankspaces_around_string(char string_in[STRING_SIZE]); -void add_object_tolist(char string_name[STRING_SIZE],char string_value[STRING_SIZE], int * number_read_object, - char ** varname_list,char ** value_list ); +void add_object_tolist(char string_name[STRING_SIZE],char string_value[STRING_SIZE], int *number_read_object, + char **varname_list,char **value_list); /* utility functions (defined in file util.c)*/ @@ -332,17 +347,17 @@ float **fmatrix(int nrl, int nrh, int ncl, int nch); int *ivector(int nl, int nh); int **imatrix(int nrl, int nrh, int ncl, int nch); -float ***f3tensor(int nrl, int nrh, int ncl, int nch,int ndl, int ndh); -float ****f4tensor(int nrl, int nrh, int ncl, int nch,int ndl, int ndh, int nvl, int nvh); +float ** *f3tensor(int nrl, int nrh, int ncl, int nch,int ndl, int ndh); +float ** **f4tensor(int nrl, int nrh, int ncl, int nch,int ndl, int ndh, int nvl, int nvh); void free_vector(float *v, int nl, int nh); void free_ivector(int *v, int nl, int nh); void free_matrix(float **m, int nrl, int nrh, int ncl, int nch); void free_imatrix(int **m, int nrl, int nrh, int ncl, int nch); void free_f3tensor(float ***t, int nrl, int nrh, int ncl, int nch, int ndl, -int ndh); -void free_f4tensor(float ****t, int nrl, int nrh, int ncl, int nch, int ndl, int -ndh, int nvl,int nvh); + int ndh); +void free_f4tensor(float ** **t, int nrl, int nrh, int ncl, int nch, int ndl, int + ndh, int nvl,int nvh); double *dvector(int nl, int nh); @@ -350,44 +365,44 @@ void free_dvector(double *v, int nl, int nh); void readseis(int ishot, float **section, float **sectionf, int ntr, int ns, int comp); void readseis_split(int ishot, float **section, int ntr, int *rnum_loc, int ns, int comp); -void residual(float **sectiondata, float **sectiondataf, float **section, float **sectiondiff, int ntr, int ns, float *L2,float *L2f ); -void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rxx, float *** ryy, float *** rzz, float *** rxy, float *** ryz, float *** rxz, float *** psi_sxx_x, float *** psi_sxy_x, float *** psi_sxz_x, float *** psi_sxy_y, float *** psi_syy_y, float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz_z, float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, float *** psi_vyy, float *** psi_vzy, float *** psi_vxz, float *** psi_vyz, float *** psi_vzz); +void residual(float **sectiondata, float **sectiondataf, float **section, float **sectiondiff, int ntr, int ns, float *L2, float *L2f); +void zero_wavefield(int NX, int NY, int NZ, st_velocity *vel, st_stress *stress, st_visc_mem *mem, st_pml_wfd *pml_wfd); -void gradient_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fvz,float **** fivx,float **** fivy,float **** fivz,float **** bvx,float **** bvy,float **** bvz,float **** bivx,float **** bivy,float **** bivz,float ***gradlam, float ***gradmu,float ***gradrho, int nt,float *** rho, float *** pi, float *** u, float * finv,int nf, int iteration); -void modelupdate(int nx, int ny, int nz, float ***gradlam, float ***gradmu, float ***gradrho, float *** rho, float *** pi, float *** u, float **bfgsmod1, float step, float *beta, int iteration); +void gradient_F(int nx, int ny, int nz, st_freq_velocity *fw, st_freq_velocity *back, st_gradient *grad, int nt, st_model *mod, float *finv, int nf, int iteration); +void modelupdate(int nx, int ny, int nz, st_gradient *grad, st_model *mod, float **bfgsmod1, float step, float *beta, int it_group); -void zero_invers(int NX, int NY, int NZ, float **** Ffvx, float **** Ffvy, float **** Ffvz, float **** Ffivx, float **** Ffivy, float **** Ffivz, float **** Fbvx, float **** Fbvy, float **** Fbvz, float **** Fbivx, float **** Fbivy, float **** Fbivz,int nfmax, int ntr_hess); -void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***grad3, int nsrc, float ** srcpos, int ntr_glob, int **recpos, float finv, int iteration,int cdf); +void zero_invers(int NX, int NY, int NZ, st_freq_velocity *fourier_fw, st_freq_velocity *fourier_back, int nfmax, int ntr_hess); +void precon_grad(int nx, int ny, int nz, st_gradient *grad, int nsrc, float **srcpos, int ntr_glob, int **recpos, float finv, int iteration, int cdf); void outgrad(int nx,int ny,int nz,float ***grad1, float ***grad2,float ***grad3, float finv, int iteration, char outfile[STRING_SIZE]); -void outmod(int nx,int ny,int nz,float ***rho, float ***pi,float ***u, int iteration); -void steplength(float *L2, float * step, int iteration, int it_group); -void zero_grad(int NX, int NY, int NZ, float *** grad1, float *** grad2, float *** grad3); -void cpmodel(int nx, int ny, int nz, float ***rho, float ***pi, float ***u,float *** testrho, float *** testpi, float *** testu); -void conjugate(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***grad3, float ***gradprior1, float ***gradprior2, float ***gradprior3, float ***gradprior4, float ***gradprior5, float ***gradprior6,float *beta, int iteration,int cdf); +void outmod(int nx, int ny, int nz, st_model *mod, int iteration); +void steplength(float *L2, float *step, int iteration, int it_group); +void zero_grad(int NX, int NY, int NZ, st_gradient *grad); +void cpmodel(int nx, int ny, int nz, st_model *mod, st_model *testmod); +void conjugate(int nx, int ny, int nz, st_gradient *grad, st_gradient *grad_prior1, st_gradient *grad_prior2, float *beta, int iteration, int cdf); -double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** pi, float *** u, float *** uipjp, float *** ujpkp, float *** uipkp); +double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, st_stress *stress, st_model *mod, st_model_av *mod_av); -double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** pi, float *** u, float *** uipjp, float *** ujpkp, float *** uipkp, float * K_x, float * a_x, float * b_x, float * K_x_half, float * a_x_half, float * b_x_half, float * K_y, float * a_y, float * b_y, float * K_y_half, float * a_y_half, float * b_y_half, float * K_z, float * a_z, float * b_z, float * K_z_half, float * a_z_half, float * b_z_half, float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, float *** psi_vyy, float *** psi_vzy, float *** psi_vxz, float *** psi_vyz, float *** psi_vzz); -void surface_elastic(int ndepth, float *** u, float *** pi, st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** vx, float *** vy, float *** vz); +double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, st_stress *stress, st_model *mod, st_model_av *mod_av, st_pml_coeff *pml_coeff, st_pml_wfd *pml_wfd); +void surface_elastic(int ndepth, st_model *mod, st_stress *stress, st_velocity *vel); void readinv(float *finv, int *nf, int *groupnum,int *itpergroup,int nfmax); -void discfourier(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, float *** vx, float *** vy, float *** vz, float **** Fvx, float **** Fvy,float **** Fvz, float **** Fvxi, float **** Fvyi,float **** Fvzi,float *finv, int nf,int ntast, int pshot, int back); +void discfourier(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, int nt, st_velocity *vel, st_freq_velocity *fourier_vel, float *finv, int nf, int ntast, int pshot1, int back); -/*void model_gauss(float *** rho, float *** pi, float *** u, float *** taus, float *** taup, float * eta);*/ +/*void model_gauss(st_model *mod);*/ -void filt_seis(float ** data,int ntr, int ns, float finv); +void filt_seis(float **data,int ntr, int ns, float finv); -void model2_5(float *** rho, float *** pi, float *** u, float *** taus, float *** taup); +void model2_5(st_model *mod); void smooth(int nx,int ny,int nz,float ***mod, float ***mod1); -void hess_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fvz,float **** fivx,float **** fivy,float **** fivz,float **** bvx,float **** bvy,float **** bvz, float **** bivx,float **** bivy,float **** bivz, float ***hess1, float ***hess2,float ***hess3,int nt, float *** rho, float *** pi, float *** u, float * finv, int nf, int pshot); +void hess_F(int nx, int ny, int nz, st_freq_velocity *fw, st_freq_velocity *back, st_hessian *hessian, int nt, st_model *mod, float *finv, int nf, int ntr_hess); -void hess_apply(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float ***grad1, float ***grad2,float ***grad3, float ***hess1, float ***hess2, float ***hess3, float finv, int iteration); +void hess_apply(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_gradient *grad, st_hessian *hessian, float finv, int iteration); -void readhess(int nx, int ny, int nz, float *** hess1, float *** hess2, float ***hess3, float finv, int iteration); +void readhess(int nx, int ny, int nz, st_hessian *hessian, float finv, int iteration); -void lbfgs(float ***grad1, float ***grad2, float ***grad3, float *bfgsscale, float **bfgsmod, float **bfgsgrad, int iteration); -void lbfgs_savegrad(float ***grad1, float ***grad2, float ***grad3,float **bfgsgrad1); +void lbfgs(st_gradient *grad, float *bfgsscale, float **bfgsmod, float **bfgsgrad, int iteration); +void lbfgs_savegrad(st_gradient *grad, float **bfgsgrad1); -void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** pi, float *** u, float *** rho); \ No newline at end of file +void constant_boundary(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_model *mod); diff --git a/src/gradient_F.c b/src/gradient_F.c index 709ca04..0b6ed18 100644 --- a/src/gradient_F.c +++ b/src/gradient_F.c @@ -27,7 +27,7 @@ #include "fd.h" -void gradient_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fvz,float **** fivx,float **** fivy,float **** fivz,float **** bvx,float **** bvy,float **** bvz, float **** bivx,float **** bivy,float **** bivz, float ***grad1, float ***grad2,float ***grad3,int nt, float *** rho, float *** pi, float *** u, float * finv, int nf, int iteration){ +void gradient_F(int nx,int ny,int nz,st_freq_velocity *fw,st_freq_velocity *back, st_gradient *grad,int nt, st_model *mod, float * finv, int nf, int iteration){ extern float DX, DY, DZ; extern int POS[4], FDCOEFF; @@ -76,45 +76,45 @@ void gradient_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fv /* spatial derivatives of the components of the velocities are computed */ - fvxx = (b1*(fvx[l][j][i][k]-fvx[l][j][i-1][k])+b2*(fvx[l][j][i+1][k]-fvx[l][j][i-2][k]))/DX; - fvxy = (b1*(fvx[l][j+1][i][k]-fvx[l][j][i][k])+b2*(fvx[l][j+2][i][k]-fvx[l][j-1][i][k]))/DY; - fvxz = (b1*(fvx[l][j][i][k+1]-fvx[l][j][i][k])+b2*(fvx[l][j][i][k+2]-fvx[l][j][i][k-1]))/DZ; - fvyx = (b1*(fvy[l][j][i+1][k]-fvy[l][j][i][k])+b2*(fvy[l][j][i+2][k]-fvy[l][j][i-1][k]))/DX; - fvyy = (b1*(fvy[l][j][i][k]-fvy[l][j-1][i][k])+b2*(fvy[l][j+1][i][k]-fvy[l][j-2][i][k]))/DY; - fvyz = (b1*(fvy[l][j][i][k+1]-fvy[l][j][i][k])+b2*(fvy[l][j][i][k+2]-fvy[l][j][i][k-1]))/DZ; - fvzx = (b1*(fvz[l][j][i+1][k]-fvz[l][j][i][k])+b2*(fvz[l][j][i+2][k]-fvz[l][j][i-1][k]))/DX; - fvzy = (b1*(fvz[l][j+1][i][k]-fvz[l][j][i][k])+b2*(fvz[l][j+2][i][k]-fvz[l][j-1][i][k]))/DY; - fvzz = (b1*(fvz[l][j][i][k]-fvz[l][j][i][k-1])+b2*(fvz[l][j][i][k+1]-fvz[l][j][i][k-2]))/DZ; + fvxx = (b1*(fw->Fvx_re[l][j][i][k]-fw->Fvx_re[l][j][i-1][k])+b2*(fw->Fvx_re[l][j][i+1][k]-fw->Fvx_re[l][j][i-2][k]))/DX; + fvxy = (b1*(fw->Fvx_re[l][j+1][i][k]-fw->Fvx_re[l][j][i][k])+b2*(fw->Fvx_re[l][j+2][i][k]-fw->Fvx_re[l][j-1][i][k]))/DY; + fvxz = (b1*(fw->Fvx_re[l][j][i][k+1]-fw->Fvx_re[l][j][i][k])+b2*(fw->Fvx_re[l][j][i][k+2]-fw->Fvx_re[l][j][i][k-1]))/DZ; + fvyx = (b1*(fw->Fvy_re[l][j][i+1][k]-fw->Fvy_re[l][j][i][k])+b2*(fw->Fvy_re[l][j][i+2][k]-fw->Fvy_re[l][j][i-1][k]))/DX; + fvyy = (b1*(fw->Fvy_re[l][j][i][k]-fw->Fvy_re[l][j-1][i][k])+b2*(fw->Fvy_re[l][j+1][i][k]-fw->Fvy_re[l][j-2][i][k]))/DY; + fvyz = (b1*(fw->Fvy_re[l][j][i][k+1]-fw->Fvy_re[l][j][i][k])+b2*(fw->Fvy_re[l][j][i][k+2]-fw->Fvy_re[l][j][i][k-1]))/DZ; + fvzx = (b1*(fw->Fvz_re[l][j][i+1][k]-fw->Fvz_re[l][j][i][k])+b2*(fw->Fvz_re[l][j][i+2][k]-fw->Fvz_re[l][j][i-1][k]))/DX; + fvzy = (b1*(fw->Fvz_re[l][j+1][i][k]-fw->Fvz_re[l][j][i][k])+b2*(fw->Fvz_re[l][j+2][i][k]-fw->Fvz_re[l][j-1][i][k]))/DY; + fvzz = (b1*(fw->Fvz_re[l][j][i][k]-fw->Fvz_re[l][j][i][k-1])+b2*(fw->Fvz_re[l][j][i][k+1]-fw->Fvz_re[l][j][i][k-2]))/DZ; - bvxx = (b1*(bvx[l][j][i][k]-bvx[l][j][i-1][k])+b2*(bvx[l][j][i+1][k]-bvx[l][j][i-2][k]))/DX; - bvxy = (b1*(bvx[l][j+1][i][k]-bvx[l][j][i][k])+b2*(bvx[l][j+2][i][k]-bvx[l][j-1][i][k]))/DY; - bvxz = (b1*(bvx[l][j][i][k+1]-bvx[l][j][i][k])+b2*(bvx[l][j][i][k+2]-bvx[l][j][i][k-1]))/DZ; - bvyx = (b1*(bvy[l][j][i+1][k]-bvy[l][j][i][k])+b2*(bvy[l][j][i+2][k]-bvy[l][j][i-1][k]))/DX; - bvyy = (b1*(bvy[l][j][i][k]-bvy[l][j-1][i][k])+b2*(bvy[l][j+1][i][k]-bvy[l][j-2][i][k]))/DY; - bvyz = (b1*(bvy[l][j][i][k+1]-bvy[l][j][i][k])+b2*(bvy[l][j][i][k+2]-bvy[l][j][i][k-1]))/DZ; - bvzx = (b1*(bvz[l][j][i+1][k]-bvz[l][j][i][k])+b2*(bvz[l][j][i+2][k]-bvz[l][j][i-1][k]))/DX; - bvzy = (b1*(bvz[l][j+1][i][k]-bvz[l][j][i][k])+b2*(bvz[l][j+2][i][k]-bvz[l][j-1][i][k]))/DY; - bvzz = (b1*(bvz[l][j][i][k]-bvz[l][j][i][k-1])+b2*(bvz[l][j][i][k+1]-bvz[l][j][i][k-2]))/DZ; + bvxx = (b1*(back->Fvx_re[l][j][i][k]-back->Fvx_re[l][j][i-1][k])+b2*(back->Fvx_re[l][j][i+1][k]-back->Fvx_re[l][j][i-2][k]))/DX; + bvxy = (b1*(back->Fvx_re[l][j+1][i][k]-back->Fvx_re[l][j][i][k])+b2*(back->Fvx_re[l][j+2][i][k]-back->Fvx_re[l][j-1][i][k]))/DY; + bvxz = (b1*(back->Fvx_re[l][j][i][k+1]-back->Fvx_re[l][j][i][k])+b2*(back->Fvx_re[l][j][i][k+2]-back->Fvx_re[l][j][i][k-1]))/DZ; + bvyx = (b1*(back->Fvy_re[l][j][i+1][k]-back->Fvy_re[l][j][i][k])+b2*(back->Fvy_re[l][j][i+2][k]-back->Fvy_re[l][j][i-1][k]))/DX; + bvyy = (b1*(back->Fvy_re[l][j][i][k]-back->Fvy_re[l][j-1][i][k])+b2*(back->Fvy_re[l][j+1][i][k]-back->Fvy_re[l][j-2][i][k]))/DY; + bvyz = (b1*(back->Fvy_re[l][j][i][k+1]-back->Fvy_re[l][j][i][k])+b2*(back->Fvy_re[l][j][i][k+2]-back->Fvy_re[l][j][i][k-1]))/DZ; + bvzx = (b1*(back->Fvz_re[l][j][i+1][k]-back->Fvz_re[l][j][i][k])+b2*(back->Fvz_re[l][j][i+2][k]-back->Fvz_re[l][j][i-1][k]))/DX; + bvzy = (b1*(back->Fvz_re[l][j+1][i][k]-back->Fvz_re[l][j][i][k])+b2*(back->Fvz_re[l][j+2][i][k]-back->Fvz_re[l][j-1][i][k]))/DY; + bvzz = (b1*(back->Fvz_re[l][j][i][k]-back->Fvz_re[l][j][i][k-1])+b2*(back->Fvz_re[l][j][i][k+1]-back->Fvz_re[l][j][i][k-2]))/DZ; - fivxx = (b1*(fivx[l][j][i][k]-fivx[l][j][i-1][k])+b2*(fivx[l][j][i+1][k]-fivx[l][j][i-2][k]))/DX; - fivxy = (b1*(fivx[l][j+1][i][k]-fivx[l][j][i][k])+b2*(fivx[l][j+2][i][k]-fivx[l][j-1][i][k]))/DY; - fivxz = (b1*(fivx[l][j][i][k+1]-fivx[l][j][i][k])+b2*(fivx[l][j][i][k+2]-fivx[l][j][i][k-1]))/DZ; - fivyx = (b1*(fivy[l][j][i+1][k]-fivy[l][j][i][k])+b2*(fivy[l][j][i+2][k]-fivy[l][j][i-1][k]))/DX; - fivyy = (b1*(fivy[l][j][i][k]-fivy[l][j-1][i][k])+b2*(fivy[l][j+1][i][k]-fivy[l][j-2][i][k]))/DY; - fivyz = (b1*(fivy[l][j][i][k+1]-fivy[l][j][i][k])+b2*(fivy[l][j][i][k+2]-fivy[l][j][i][k-1]))/DZ; - fivzx = (b1*(fivz[l][j][i+1][k]-fivz[l][j][i][k])+b2*(fivz[l][j][i+2][k]-fivz[l][j][i-1][k]))/DX; - fivzy = (b1*(fivz[l][j+1][i][k]-fivz[l][j][i][k])+b2*(fivz[l][j+2][i][k]-fivz[l][j-1][i][k]))/DY; - fivzz = (b1*(fivz[l][j][i][k]-fivz[l][j][i][k-1])+b2*(fivz[l][j][i][k+1]-fivz[l][j][i][k-2]))/DZ; + fivxx = (b1*(fw->Fvx_im[l][j][i][k]-fw->Fvx_im[l][j][i-1][k])+b2*(fw->Fvx_im[l][j][i+1][k]-fw->Fvx_im[l][j][i-2][k]))/DX; + fivxy = (b1*(fw->Fvx_im[l][j+1][i][k]-fw->Fvx_im[l][j][i][k])+b2*(fw->Fvx_im[l][j+2][i][k]-fw->Fvx_im[l][j-1][i][k]))/DY; + fivxz = (b1*(fw->Fvx_im[l][j][i][k+1]-fw->Fvx_im[l][j][i][k])+b2*(fw->Fvx_im[l][j][i][k+2]-fw->Fvx_im[l][j][i][k-1]))/DZ; + fivyx = (b1*(fw->Fvy_im[l][j][i+1][k]-fw->Fvy_im[l][j][i][k])+b2*(fw->Fvy_im[l][j][i+2][k]-fw->Fvy_im[l][j][i-1][k]))/DX; + fivyy = (b1*(fw->Fvy_im[l][j][i][k]-fw->Fvy_im[l][j-1][i][k])+b2*(fw->Fvy_im[l][j+1][i][k]-fw->Fvy_im[l][j-2][i][k]))/DY; + fivyz = (b1*(fw->Fvy_im[l][j][i][k+1]-fw->Fvy_im[l][j][i][k])+b2*(fw->Fvy_im[l][j][i][k+2]-fw->Fvy_im[l][j][i][k-1]))/DZ; + fivzx = (b1*(fw->Fvz_im[l][j][i+1][k]-fw->Fvz_im[l][j][i][k])+b2*(fw->Fvz_im[l][j][i+2][k]-fw->Fvz_im[l][j][i-1][k]))/DX; + fivzy = (b1*(fw->Fvz_im[l][j+1][i][k]-fw->Fvz_im[l][j][i][k])+b2*(fw->Fvz_im[l][j+2][i][k]-fw->Fvz_im[l][j-1][i][k]))/DY; + fivzz = (b1*(fw->Fvz_im[l][j][i][k]-fw->Fvz_im[l][j][i][k-1])+b2*(fw->Fvz_im[l][j][i][k+1]-fw->Fvz_im[l][j][i][k-2]))/DZ; - bivxx = (b1*(bivx[l][j][i][k]-bivx[l][j][i-1][k])+b2*(bivx[l][j][i+1][k]-bivx[l][j][i-2][k]))/DX; - bivxy = (b1*(bivx[l][j+1][i][k]-bivx[l][j][i][k])+b2*(bivx[l][j+2][i][k]-bivx[l][j-1][i][k]))/DY; - bivxz = (b1*(bivx[l][j][i][k+1]-bivx[l][j][i][k])+b2*(bivx[l][j][i][k+2]-bivx[l][j][i][k-1]))/DZ; - bivyx = (b1*(bivy[l][j][i+1][k]-bivy[l][j][i][k])+b2*(bivy[l][j][i+2][k]-bivy[l][j][i-1][k]))/DX; - bivyy = (b1*(bivy[l][j][i][k]-bivy[l][j-1][i][k])+b2*(bivy[l][j+1][i][k]-bivy[l][j-2][i][k]))/DY; - bivyz = (b1*(bivy[l][j][i][k+1]-bivy[l][j][i][k])+b2*(bivy[l][j][i][k+2]-bivy[l][j][i][k-1]))/DZ; - bivzx = (b1*(bivz[l][j][i+1][k]-bivz[l][j][i][k])+b2*(bivz[l][j][i+2][k]-bivz[l][j][i-1][k]))/DX; - bivzy = (b1*(bivz[l][j+1][i][k]-bivz[l][j][i][k])+b2*(bivz[l][j+2][i][k]-bivz[l][j-1][i][k]))/DY; - bivzz = (b1*(bivz[l][j][i][k]-bivz[l][j][i][k-1])+b2*(bivz[l][j][i][k+1]-bivz[l][j][i][k-2]))/DZ; + bivxx = (b1*(back->Fvx_im[l][j][i][k]-back->Fvx_im[l][j][i-1][k])+b2*(back->Fvx_im[l][j][i+1][k]-back->Fvx_im[l][j][i-2][k]))/DX; + bivxy = (b1*(back->Fvx_im[l][j+1][i][k]-back->Fvx_im[l][j][i][k])+b2*(back->Fvx_im[l][j+2][i][k]-back->Fvx_im[l][j-1][i][k]))/DY; + bivxz = (b1*(back->Fvx_im[l][j][i][k+1]-back->Fvx_im[l][j][i][k])+b2*(back->Fvx_im[l][j][i][k+2]-back->Fvx_im[l][j][i][k-1]))/DZ; + bivyx = (b1*(back->Fvy_im[l][j][i+1][k]-back->Fvy_im[l][j][i][k])+b2*(back->Fvy_im[l][j][i+2][k]-back->Fvy_im[l][j][i-1][k]))/DX; + bivyy = (b1*(back->Fvy_im[l][j][i][k]-back->Fvy_im[l][j-1][i][k])+b2*(back->Fvy_im[l][j+1][i][k]-back->Fvy_im[l][j-2][i][k]))/DY; + bivyz = (b1*(back->Fvy_im[l][j][i][k+1]-back->Fvy_im[l][j][i][k])+b2*(back->Fvy_im[l][j][i][k+2]-back->Fvy_im[l][j][i][k-1]))/DZ; + bivzx = (b1*(back->Fvz_im[l][j][i+1][k]-back->Fvz_im[l][j][i][k])+b2*(back->Fvz_im[l][j][i+2][k]-back->Fvz_im[l][j][i-1][k]))/DX; + bivzy = (b1*(back->Fvz_im[l][j+1][i][k]-back->Fvz_im[l][j][i][k])+b2*(back->Fvz_im[l][j+2][i][k]-back->Fvz_im[l][j-1][i][k]))/DY; + bivzz = (b1*(back->Fvz_im[l][j][i][k]-back->Fvz_im[l][j][i][k-1])+b2*(back->Fvz_im[l][j][i][k+1]-back->Fvz_im[l][j][i][k-2]))/DZ; @@ -128,28 +128,28 @@ void gradient_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fv gradmu=-gradmu*fdummy; gradrho=0.0; - gradrho=(fvx[l][j][i][k]*bvx[l][j][i][k]+fvy[l][j][i][k]*bvy[l][j][i][k]+fvz[l][j][i][k]*bvz[l][j][i][k])+ (fivx[l][j][i][k]*bivx[l][j][i][k]+fivy[l][j][i][k]*bivy[l][j][i][k]+fivz[l][j][i][k]*bivz[l][j][i][k]); + gradrho=(fw->Fvx_re[l][j][i][k]*back->Fvx_re[l][j][i][k]+fw->Fvy_re[l][j][i][k]*back->Fvy_re[l][j][i][k]+fw->Fvz_re[l][j][i][k]*back->Fvz_re[l][j][i][k])+ (fw->Fvx_im[l][j][i][k]*back->Fvx_im[l][j][i][k]+fw->Fvy_im[l][j][i][k]*back->Fvy_im[l][j][i][k]+fw->Fvz_im[l][j][i][k]*back->Fvz_im[l][j][i][k]); gradrho=gradrho; /*parametrisation vp, vs, rho*/ - grad1[j][i][k]+=sqrt(rho[j][i][k]*pi[j][i][k])*2*gradlam; /*gradient vp*/ + grad->vp[j][i][k]+=sqrt(mod->rho[j][i][k]*mod->pi[j][i][k])*2*gradlam; /*gradient vp*/ - grad2[j][i][k]+=-4*sqrt(rho[j][i][k]*u[j][i][k])*gradlam+2*sqrt(rho[j][i][k]*u[j][i][k])*gradmu; /*gradient vs*/ + grad->vs[j][i][k]+=-4*sqrt(mod->rho[j][i][k]*mod->u[j][i][k])*gradlam+2*sqrt(mod->rho[j][i][k]*mod->u[j][i][k])*gradmu; /*gradient vs*/ - grad3[j][i][k]+=gradrho+u[j][i][k]/rho[j][i][k]*gradmu+(pi[j][i][k]-2*u[j][i][k])/rho[j][i][k]*gradlam; /*gradient rho*/ + grad->rho[j][i][k]+=gradrho+mod->u[j][i][k]/mod->rho[j][i][k]*gradmu+(mod->pi[j][i][k]-2*mod->u[j][i][k])/mod->rho[j][i][k]*gradlam; /*gradient rho*/ /*parametrisation lambda, mu, rho*/ - /*grad1[j][i][k]+=gradlam; - grad2[j][i][k]+=gradmu; - grad3[j][i][k]+=gradrho;*/ + /*grad->vp[j][i][k]+=gradlam; + grad->vs[j][i][k]+=gradmu; + grad->rho[j][i][k]+=gradrho;*/ - /*fwrite(&fvz[l][j][i][k], sizeof(float), 1,fpmod1); - fwrite(&fivz[l][j][i][k], sizeof(float), 1,fpmod2); - fwrite(&bvz[l][j][i][k], sizeof(float), 1,fpmod3); - fwrite(&bivz[l][j][i][k], sizeof(float), 1,fpmod4); - fwrite(&bvx[l][j][i][k], sizeof(float), 1,fpmod5); - fwrite(&fivx[l][j][i][k], sizeof(float), 1,fpmod6); + /*fwrite(&fw->Fvz_re[l][j][i][k], sizeof(float), 1,fpmod1); + fwrite(&fw->Fvz_im[l][j][i][k], sizeof(float), 1,fpmod2); + fwrite(&back->Fvz_re[l][j][i][k], sizeof(float), 1,fpmod3); + fwrite(&back->Fvz_im[l][j][i][k], sizeof(float), 1,fpmod4); + fwrite(&back->Fvx_re[l][j][i][k], sizeof(float), 1,fpmod5); + fwrite(&fw->Fvx_im[l][j][i][k], sizeof(float), 1,fpmod6); fwrite(&fvxy, sizeof(float), 1,fpmod7);*/ } diff --git a/src/hess_F.c b/src/hess_F.c index 7a5311e..e90f41c 100644 --- a/src/hess_F.c +++ b/src/hess_F.c @@ -25,7 +25,7 @@ #include "fd.h" -void hess_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fvz,float **** fivx,float **** fivy,float **** fivz,float **** bvx,float **** bvy,float **** bvz, float **** bivx,float **** bivy,float **** bivz, float ***hess1, float ***hess2,float ***hess3,int nt, float *** rho, float *** pi, float *** u, float * finv, int nf, int ntr_hess){ +void hess_F(int nx,int ny,int nz,st_freq_velocity *fw,st_freq_velocity *back, st_hessian *hessian,int nt, st_model *mod, float * finv, int nf, int ntr_hess){ extern float DX, DY, DZ; extern int FDCOEFF; @@ -78,45 +78,45 @@ void hess_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fvz,fl /* spatial derivatives of the components of the velocities are computed */ - fvxx = (b1*(fvx[l][j][i][k]-fvx[l][j][i-1][k])+b2*(fvx[l][j][i+1][k]-fvx[l][j][i-2][k]))/DX; - fvxy = (b1*(fvx[l][j+1][i][k]-fvx[l][j][i][k])+b2*(fvx[l][j+2][i][k]-fvx[l][j-1][i][k]))/DY; - fvxz = (b1*(fvx[l][j][i][k+1]-fvx[l][j][i][k])+b2*(fvx[l][j][i][k+2]-fvx[l][j][i][k-1]))/DZ; - fvyx = (b1*(fvy[l][j][i+1][k]-fvy[l][j][i][k])+b2*(fvy[l][j][i+2][k]-fvy[l][j][i-1][k]))/DX; - fvyy = (b1*(fvy[l][j][i][k]-fvy[l][j-1][i][k])+b2*(fvy[l][j+1][i][k]-fvy[l][j-2][i][k]))/DY; - fvyz = (b1*(fvy[l][j][i][k+1]-fvy[l][j][i][k])+b2*(fvy[l][j][i][k+2]-fvy[l][j][i][k-1]))/DZ; - fvzx = (b1*(fvz[l][j][i+1][k]-fvz[l][j][i][k])+b2*(fvz[l][j][i+2][k]-fvz[l][j][i-1][k]))/DX; - fvzy = (b1*(fvz[l][j+1][i][k]-fvz[l][j][i][k])+b2*(fvz[l][j+2][i][k]-fvz[l][j-1][i][k]))/DY; - fvzz = (b1*(fvz[l][j][i][k]-fvz[l][j][i][k-1])+b2*(fvz[l][j][i][k+1]-fvz[l][j][i][k-2]))/DZ; + fvxx = (b1*(fw->Fvx_re[l][j][i][k]-fw->Fvx_re[l][j][i-1][k])+b2*(fw->Fvx_re[l][j][i+1][k]-fw->Fvx_re[l][j][i-2][k]))/DX; + fvxy = (b1*(fw->Fvx_re[l][j+1][i][k]-fw->Fvx_re[l][j][i][k])+b2*(fw->Fvx_re[l][j+2][i][k]-fw->Fvx_re[l][j-1][i][k]))/DY; + fvxz = (b1*(fw->Fvx_re[l][j][i][k+1]-fw->Fvx_re[l][j][i][k])+b2*(fw->Fvx_re[l][j][i][k+2]-fw->Fvx_re[l][j][i][k-1]))/DZ; + fvyx = (b1*(fw->Fvy_re[l][j][i+1][k]-fw->Fvy_re[l][j][i][k])+b2*(fw->Fvy_re[l][j][i+2][k]-fw->Fvy_re[l][j][i-1][k]))/DX; + fvyy = (b1*(fw->Fvy_re[l][j][i][k]-fw->Fvy_re[l][j-1][i][k])+b2*(fw->Fvy_re[l][j+1][i][k]-fw->Fvy_re[l][j-2][i][k]))/DY; + fvyz = (b1*(fw->Fvy_re[l][j][i][k+1]-fw->Fvy_re[l][j][i][k])+b2*(fw->Fvy_re[l][j][i][k+2]-fw->Fvy_re[l][j][i][k-1]))/DZ; + fvzx = (b1*(fw->Fvz_re[l][j][i+1][k]-fw->Fvz_re[l][j][i][k])+b2*(fw->Fvz_re[l][j][i+2][k]-fw->Fvz_re[l][j][i-1][k]))/DX; + fvzy = (b1*(fw->Fvz_re[l][j+1][i][k]-fw->Fvz_re[l][j][i][k])+b2*(fw->Fvz_re[l][j+2][i][k]-fw->Fvz_re[l][j-1][i][k]))/DY; + fvzz = (b1*(fw->Fvz_re[l][j][i][k]-fw->Fvz_re[l][j][i][k-1])+b2*(fw->Fvz_re[l][j][i][k+1]-fw->Fvz_re[l][j][i][k-2]))/DZ; - bvxx = (b1*(bvx[m][j][i][k]-bvx[m][j][i-1][k])+b2*(bvx[m][j][i+1][k]-bvx[m][j][i-2][k]))/DX; - bvxy = (b1*(bvx[m][j+1][i][k]-bvx[m][j][i][k])+b2*(bvx[m][j+2][i][k]-bvx[m][j-1][i][k]))/DY; - bvxz = (b1*(bvx[m][j][i][k+1]-bvx[m][j][i][k])+b2*(bvx[m][j][i][k+2]-bvx[m][j][i][k-1]))/DZ; - bvyx = (b1*(bvy[m][j][i+1][k]-bvy[m][j][i][k])+b2*(bvy[m][j][i+2][k]-bvy[m][j][i-1][k]))/DX; - bvyy = (b1*(bvy[m][j][i][k]-bvy[m][j-1][i][k])+b2*(bvy[m][j+1][i][k]-bvy[m][j-2][i][k]))/DY; - bvyz = (b1*(bvy[m][j][i][k+1]-bvy[m][j][i][k])+b2*(bvy[m][j][i][k+2]-bvy[m][j][i][k-1]))/DZ; - bvzx = (b1*(bvz[m][j][i+1][k]-bvz[m][j][i][k])+b2*(bvz[m][j][i+2][k]-bvz[m][j][i-1][k]))/DX; - bvzy = (b1*(bvz[m][j+1][i][k]-bvz[m][j][i][k])+b2*(bvz[m][j+2][i][k]-bvz[m][j-1][i][k]))/DY; - bvzz = (b1*(bvz[m][j][i][k]-bvz[m][j][i][k-1])+b2*(bvz[m][j][i][k+1]-bvz[m][j][i][k-2]))/DZ; + bvxx = (b1*(back->Fvx_re[m][j][i][k]-back->Fvx_re[m][j][i-1][k])+b2*(back->Fvx_re[m][j][i+1][k]-back->Fvx_re[m][j][i-2][k]))/DX; + bvxy = (b1*(back->Fvx_re[m][j+1][i][k]-back->Fvx_re[m][j][i][k])+b2*(back->Fvx_re[m][j+2][i][k]-back->Fvx_re[m][j-1][i][k]))/DY; + bvxz = (b1*(back->Fvx_re[m][j][i][k+1]-back->Fvx_re[m][j][i][k])+b2*(back->Fvx_re[m][j][i][k+2]-back->Fvx_re[m][j][i][k-1]))/DZ; + bvyx = (b1*(back->Fvy_re[m][j][i+1][k]-back->Fvy_re[m][j][i][k])+b2*(back->Fvy_re[m][j][i+2][k]-back->Fvy_re[m][j][i-1][k]))/DX; + bvyy = (b1*(back->Fvy_re[m][j][i][k]-back->Fvy_re[m][j-1][i][k])+b2*(back->Fvy_re[m][j+1][i][k]-back->Fvy_re[m][j-2][i][k]))/DY; + bvyz = (b1*(back->Fvy_re[m][j][i][k+1]-back->Fvy_re[m][j][i][k])+b2*(back->Fvy_re[m][j][i][k+2]-back->Fvy_re[m][j][i][k-1]))/DZ; + bvzx = (b1*(back->Fvz_re[m][j][i+1][k]-back->Fvz_re[m][j][i][k])+b2*(back->Fvz_re[m][j][i+2][k]-back->Fvz_re[m][j][i-1][k]))/DX; + bvzy = (b1*(back->Fvz_re[m][j+1][i][k]-back->Fvz_re[m][j][i][k])+b2*(back->Fvz_re[m][j+2][i][k]-back->Fvz_re[m][j-1][i][k]))/DY; + bvzz = (b1*(back->Fvz_re[m][j][i][k]-back->Fvz_re[m][j][i][k-1])+b2*(back->Fvz_re[m][j][i][k+1]-back->Fvz_re[m][j][i][k-2]))/DZ; - fivxx = (b1*(fivx[l][j][i][k]-fivx[l][j][i-1][k])+b2*(fivx[l][j][i+1][k]-fivx[l][j][i-2][k]))/DX; - fivxy = (b1*(fivx[l][j+1][i][k]-fivx[l][j][i][k])+b2*(fivx[l][j+2][i][k]-fivx[l][j-1][i][k]))/DY; - fivxz = (b1*(fivx[l][j][i][k+1]-fivx[l][j][i][k])+b2*(fivx[l][j][i][k+2]-fivx[l][j][i][k-1]))/DZ; - fivyx = (b1*(fivy[l][j][i+1][k]-fivy[l][j][i][k])+b2*(fivy[l][j][i+2][k]-fivy[l][j][i-1][k]))/DX; - fivyy = (b1*(fivy[l][j][i][k]-fivy[l][j-1][i][k])+b2*(fivy[l][j+1][i][k]-fivy[l][j-2][i][k]))/DY; - fivyz = (b1*(fivy[l][j][i][k+1]-fivy[l][j][i][k])+b2*(fivy[l][j][i][k+2]-fivy[l][j][i][k-1]))/DZ; - fivzx = (b1*(fivz[l][j][i+1][k]-fivz[l][j][i][k])+b2*(fivz[l][j][i+2][k]-fivz[l][j][i-1][k]))/DX; - fivzy = (b1*(fivz[l][j+1][i][k]-fivz[l][j][i][k])+b2*(fivz[l][j+2][i][k]-fivz[l][j-1][i][k]))/DY; - fivzz = (b1*(fivz[l][j][i][k]-fivz[l][j][i][k-1])+b2*(fivz[l][j][i][k+1]-fivz[l][j][i][k-2]))/DZ; + fivxx = (b1*(fw->Fvx_im[l][j][i][k]-fw->Fvx_im[l][j][i-1][k])+b2*(fw->Fvx_im[l][j][i+1][k]-fw->Fvx_im[l][j][i-2][k]))/DX; + fivxy = (b1*(fw->Fvx_im[l][j+1][i][k]-fw->Fvx_im[l][j][i][k])+b2*(fw->Fvx_im[l][j+2][i][k]-fw->Fvx_im[l][j-1][i][k]))/DY; + fivxz = (b1*(fw->Fvx_im[l][j][i][k+1]-fw->Fvx_im[l][j][i][k])+b2*(fw->Fvx_im[l][j][i][k+2]-fw->Fvx_im[l][j][i][k-1]))/DZ; + fivyx = (b1*(fw->Fvy_im[l][j][i+1][k]-fw->Fvy_im[l][j][i][k])+b2*(fw->Fvy_im[l][j][i+2][k]-fw->Fvy_im[l][j][i-1][k]))/DX; + fivyy = (b1*(fw->Fvy_im[l][j][i][k]-fw->Fvy_im[l][j-1][i][k])+b2*(fw->Fvy_im[l][j+1][i][k]-fw->Fvy_im[l][j-2][i][k]))/DY; + fivyz = (b1*(fw->Fvy_im[l][j][i][k+1]-fw->Fvy_im[l][j][i][k])+b2*(fw->Fvy_im[l][j][i][k+2]-fw->Fvy_im[l][j][i][k-1]))/DZ; + fivzx = (b1*(fw->Fvz_im[l][j][i+1][k]-fw->Fvz_im[l][j][i][k])+b2*(fw->Fvz_im[l][j][i+2][k]-fw->Fvz_im[l][j][i-1][k]))/DX; + fivzy = (b1*(fw->Fvz_im[l][j+1][i][k]-fw->Fvz_im[l][j][i][k])+b2*(fw->Fvz_im[l][j+2][i][k]-fw->Fvz_im[l][j-1][i][k]))/DY; + fivzz = (b1*(fw->Fvz_im[l][j][i][k]-fw->Fvz_im[l][j][i][k-1])+b2*(fw->Fvz_im[l][j][i][k+1]-fw->Fvz_im[l][j][i][k-2]))/DZ; - bivxx = (b1*(bivx[m][j][i][k]-bivx[m][j][i-1][k])+b2*(bivx[m][j][i+1][k]-bivx[m][j][i-2][k]))/DX; - bivxy = (b1*(bivx[m][j+1][i][k]-bivx[m][j][i][k])+b2*(bivx[m][j+2][i][k]-bivx[m][j-1][i][k]))/DY; - bivxz = (b1*(bivx[m][j][i][k+1]-bivx[m][j][i][k])+b2*(bivx[m][j][i][k+2]-bivx[m][j][i][k-1]))/DZ; - bivyx = (b1*(bivy[m][j][i+1][k]-bivy[m][j][i][k])+b2*(bivy[m][j][i+2][k]-bivy[m][j][i-1][k]))/DX; - bivyy = (b1*(bivy[m][j][i][k]-bivy[m][j-1][i][k])+b2*(bivy[m][j+1][i][k]-bivy[m][j-2][i][k]))/DY; - bivyz = (b1*(bivy[m][j][i][k+1]-bivy[m][j][i][k])+b2*(bivy[m][j][i][k+2]-bivy[m][j][i][k-1]))/DZ; - bivzx = (b1*(bivz[m][j][i+1][k]-bivz[m][j][i][k])+b2*(bivz[m][j][i+2][k]-bivz[m][j][i-1][k]))/DX; - bivzy = (b1*(bivz[m][j+1][i][k]-bivz[m][j][i][k])+b2*(bivz[m][j+2][i][k]-bivz[m][j-1][i][k]))/DY; - bivzz = (b1*(bivz[m][j][i][k]-bivz[m][j][i][k-1])+b2*(bivz[m][j][i][k+1]-bivz[m][j][i][k-2]))/DZ; + bivxx = (b1*(back->Fvx_im[m][j][i][k]-back->Fvx_im[m][j][i-1][k])+b2*(back->Fvx_im[m][j][i+1][k]-back->Fvx_im[m][j][i-2][k]))/DX; + bivxy = (b1*(back->Fvx_im[m][j+1][i][k]-back->Fvx_im[m][j][i][k])+b2*(back->Fvx_im[m][j+2][i][k]-back->Fvx_im[m][j-1][i][k]))/DY; + bivxz = (b1*(back->Fvx_im[m][j][i][k+1]-back->Fvx_im[m][j][i][k])+b2*(back->Fvx_im[m][j][i][k+2]-back->Fvx_im[m][j][i][k-1]))/DZ; + bivyx = (b1*(back->Fvy_im[m][j][i+1][k]-back->Fvy_im[m][j][i][k])+b2*(back->Fvy_im[m][j][i+2][k]-back->Fvy_im[m][j][i-1][k]))/DX; + bivyy = (b1*(back->Fvy_im[m][j][i][k]-back->Fvy_im[m][j-1][i][k])+b2*(back->Fvy_im[m][j+1][i][k]-back->Fvy_im[m][j-2][i][k]))/DY; + bivyz = (b1*(back->Fvy_im[m][j][i][k+1]-back->Fvy_im[m][j][i][k])+b2*(back->Fvy_im[m][j][i][k+2]-back->Fvy_im[m][j][i][k-1]))/DZ; + bivzx = (b1*(back->Fvz_im[m][j][i+1][k]-back->Fvz_im[m][j][i][k])+b2*(back->Fvz_im[m][j][i+2][k]-back->Fvz_im[m][j][i-1][k]))/DX; + bivzy = (b1*(back->Fvz_im[m][j+1][i][k]-back->Fvz_im[m][j][i][k])+b2*(back->Fvz_im[m][j+2][i][k]-back->Fvz_im[m][j-1][i][k]))/DY; + bivzz = (b1*(back->Fvz_im[m][j][i][k]-back->Fvz_im[m][j][i][k-1])+b2*(back->Fvz_im[m][j][i][k+1]-back->Fvz_im[m][j][i][k-2]))/DZ; @@ -134,34 +134,34 @@ void hess_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fvz,fl immu=fdummy*immu; rerho=0.0; imrho=0.0;/*rho noch nicht abgeändert!!*/ - rerho=(fvx[l][j][i][k]*bvx[m][j][i][k]+fvy[l][j][i][k]*bvy[m][j][i][k]+fvz[l][j][i][k]*bvz[m][j][i][k])- (fivx[l][j][i][k]*bivx[m][j][i][k]+fivy[l][j][i][k]*bivy[m][j][i][k]+fivz[l][j][i][k]*bivz[m][j][i][k]); - imrho=(fvx[l][j][i][k]*bivx[m][j][i][k]+fvy[l][j][i][k]*bivy[m][j][i][k]+fvz[l][j][i][k]*bivz[m][j][i][k])+ (fivx[l][j][i][k]*bvx[m][j][i][k]+fivy[l][j][i][k]*bvy[m][j][i][k]+fivz[l][j][i][k]*bvz[m][j][i][k]); + rerho=(fw->Fvx_re[l][j][i][k]*back->Fvx_re[m][j][i][k]+fw->Fvy_re[l][j][i][k]*back->Fvy_re[m][j][i][k]+fw->Fvz_re[l][j][i][k]*back->Fvz_re[m][j][i][k])- (fw->Fvx_im[l][j][i][k]*back->Fvx_im[m][j][i][k]+fw->Fvy_im[l][j][i][k]*back->Fvy_im[m][j][i][k]+fw->Fvz_im[l][j][i][k]*back->Fvz_im[m][j][i][k]); + imrho=(fw->Fvx_re[l][j][i][k]*back->Fvx_im[m][j][i][k]+fw->Fvy_re[l][j][i][k]*back->Fvy_im[m][j][i][k]+fw->Fvz_re[l][j][i][k]*back->Fvz_im[m][j][i][k])+ (fw->Fvx_im[l][j][i][k]*back->Fvx_re[m][j][i][k]+fw->Fvy_im[l][j][i][k]*back->Fvy_re[m][j][i][k]+fw->Fvz_im[l][j][i][k]*back->Fvz_re[m][j][i][k]); revs=0.0; imvs=0.0; revs=-2*relam+remu; imvs=-2*imlam+immu; rerho1=0.0; imrho1=0.0; - rerho1=rerho+relam*(pi[j][i][k]-2*u[j][i][k])/rho[j][i][k]+remu*u[j][i][k]/rho[j][i][k]; - imrho1=imrho+imlam*(pi[j][i][k]-2*u[j][i][k])/rho[j][i][k]+immu*u[j][i][k]/rho[j][i][k]; + rerho1=rerho+relam*(mod->pi[j][i][k]-2*mod->u[j][i][k])/mod->rho[j][i][k]+remu*mod->u[j][i][k]/mod->rho[j][i][k]; + imrho1=imrho+imlam*(mod->pi[j][i][k]-2*mod->u[j][i][k])/mod->rho[j][i][k]+immu*mod->u[j][i][k]/mod->rho[j][i][k]; /*hesslam=relam*relam+imlam*imlam; hessmu=remu*remu+immu*immu; hessrho=rerho*rerho+imrho*imrho;*/ - hess1[j][i][k]+=(relam*relam+imlam*imlam)*rho[j][i][k]*pi[j][i][k]*4; - hess2[j][i][k]+=(revs*revs+imvs*imvs)*4*rho[j][i][k]*u[j][i][k]; - hess3[j][i][k]+=rerho1*rerho1+imrho1*imrho1; + hessian->vp[j][i][k]+=(relam*relam+imlam*imlam)*mod->rho[j][i][k]*mod->pi[j][i][k]*4; + hessian->vs[j][i][k]+=(revs*revs+imvs*imvs)*4*mod->rho[j][i][k]*mod->u[j][i][k]; + hessian->rho[j][i][k]+=rerho1*rerho1+imrho1*imrho1; - /*fwrite(&hess1[j][i][k], sizeof(float), 1,fpmod1); - fwrite(&hess2[j][i][k], sizeof(float), 1,fpmod2); - fwrite(&hess3[j][i][k], sizeof(float), 1,fpmod3); - fwrite(&bivz[l][j][i][k], sizeof(float), 1,fpmod4); - fwrite(&bvx[l][j][i][k], sizeof(float), 1,fpmod5); - fwrite(&fivx[l][j][i][k], sizeof(float), 1,fpmod6); + /*fwrite(&hessian->vp[j][i][k], sizeof(float), 1,fpmod1); + fwrite(&hessian->vs[j][i][k], sizeof(float), 1,fpmod2); + fwrite(&hessian->rho[j][i][k], sizeof(float), 1,fpmod3); + fwrite(&back->Fvz_im[l][j][i][k], sizeof(float), 1,fpmod4); + fwrite(&back->Fvx_re[l][j][i][k], sizeof(float), 1,fpmod5); + fwrite(&fw->Fvx_im[l][j][i][k], sizeof(float), 1,fpmod6); fwrite(&fvxy, sizeof(float), 1,fpmod7);*/ } @@ -173,9 +173,9 @@ void hess_F(int nx,int ny,int nz,float **** fvx,float **** fvy,float **** fvz,fl /*for (j=1;j<=ny;j++){ for (i=1;i<=nx;i++){ for (k=1;k<=nz;k++){ - hess1[j][i][k]=hess1[j][i][k]*pow(vp0,2.0); - hess2[j][i][k]=hess2[j][i][k]*pow(vs0,2.0); - hess3[j][i][k]=hess3[j][i][k]*pow(rho0,2.0); + hessian->vp[j][i][k]=hessian->vp[j][i][k]*pow(vp0,2.0); + hessian->vs[j][i][k]=hessian->vs[j][i][k]*pow(vs0,2.0); + hessian->rho[j][i][k]=hessian->rho[j][i][k]*pow(rho0,2.0); } } diff --git a/src/hess_apply.c b/src/hess_apply.c index 8be4f29..71db157 100644 --- a/src/hess_apply.c +++ b/src/hess_apply.c @@ -25,7 +25,7 @@ #include "fd.h" -void hess_apply(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float ***grad1, float ***grad2,float ***grad3, float ***hess1, float ***hess2, float ***hess3, float finv, int iteration){ +void hess_apply(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_gradient *grad, st_hessian *hessian, float finv, int iteration){ extern float WATER_HESS[3], VP0, VS0, RHO0; extern int NXG, NYG, NZG, FW, NX, NY, NZ; @@ -44,12 +44,12 @@ void hess_apply(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float ***g for (j=1;j<=ny2;j++){ for (i=1;i<=nx2;i++){ for (k=1;k<=nz2;k++){ - grad1[j][i][k]=grad1[j][i][k]*VP0; - grad2[j][i][k]=grad2[j][i][k]*VS0; - grad3[j][i][k]=grad3[j][i][k]*RHO0; - /*hess1[j][i][k]=hess1[j][i][k]*pow(vp0,2.0); - hess2[j][i][k]=hess2[j][i][k]*pow(vs0,2.0); - hess3[j][i][k]=hess3[j][i][k]*pow(rho0,2.0);*/ + grad->vp[j][i][k]=grad->vp[j][i][k]*VP0; + grad->vs[j][i][k]=grad->vs[j][i][k]*VS0; + grad->rho[j][i][k]=grad->rho[j][i][k]*RHO0; + /*hessian->vp[j][i][k]=hessian->vp[j][i][k]*pow(vp0,2.0); + hessian->vs[j][i][k]=hessian->vs[j][i][k]*pow(vs0,2.0); + hessian->rho[j][i][k]=hessian->rho[j][i][k]*pow(rho0,2.0);*/ } } } @@ -59,9 +59,9 @@ void hess_apply(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float ***g for (j=ny1;j<=ny2;j++){ for (i=nx1;i<=nx2;i++){ for (k=nz1;k<=nz2;k++){ - wl[0]+=log10(hess1[j][i][k]); - wl[1]+=log10(hess2[j][i][k]); - wl[2]+=log10(hess3[j][i][k]); + wl[0]+=log10(hessian->vp[j][i][k]); + wl[1]+=log10(hessian->vs[j][i][k]); + wl[2]+=log10(hessian->rho[j][i][k]); } } } @@ -79,9 +79,9 @@ void hess_apply(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float ***g for (j=1;j<=NY;j++){ for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ - grad1[j][i][k]=grad1[j][i][k]/(hess1[j][i][k]+WATER_HESS[0]); - grad2[j][i][k]=grad2[j][i][k]/(hess2[j][i][k]+WATER_HESS[1]); - grad3[j][i][k]=grad3[j][i][k]/(hess3[j][i][k]+WATER_HESS[2]); + grad->vp[j][i][k]=grad->vp[j][i][k]/(hessian->vp[j][i][k]+WATER_HESS[0]); + grad->vs[j][i][k]=grad->vs[j][i][k]/(hessian->vs[j][i][k]+WATER_HESS[1]); + grad->rho[j][i][k]=grad->rho[j][i][k]/(hessian->rho[j][i][k]+WATER_HESS[2]); } } } diff --git a/src/hh.c b/src/hh.c index b71431c..de1a371 100644 --- a/src/hh.c +++ b/src/hh.c @@ -24,8 +24,7 @@ #include "fd.h" -void model(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup, float * eta){ +void model(st_model *mod){ /*--------------------------------------------------------------------------*/ /* extern variables */ @@ -55,7 +54,7 @@ float *** taus, float *** taup, float * eta){ pts=vector(1,L); for (l=1;l<=L;l++) { pts[l]=1.0/(2.0*PI*FL[l]); - eta[l]=DT/pts[l]; + mod->eta[l]=DT/pts[l]; } ts=TAU; tp=TAU; @@ -86,12 +85,12 @@ float *** taus, float *** taup, float * eta){ jj=j-POS[2]*NY; kk=k-POS[3]*NZ; if(L){ - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } } @@ -118,12 +117,12 @@ float *** taus, float *** taup, float * eta){ jj=j-POS[2]*NY; kk=k-POS[3]*NZ; if(L){ - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } diff --git a/src/hh_3DSchach.c b/src/hh_3DSchach.c index 389ad32..4c845f8 100644 --- a/src/hh_3DSchach.c +++ b/src/hh_3DSchach.c @@ -5,8 +5,7 @@ #include "fd.h" -void model(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup, float * eta){ +void model(st_model *mod){ /*--------------------------------------------------------------------------*/ /* extern variables */ @@ -36,7 +35,7 @@ float *** taus, float *** taup, float * eta){ pts=vector(1,L); for (l=1;l<=L;l++) { pts[l]=1.0/(2.0*PI*FL[l]); - eta[l]=DT/pts[l]; + mod->eta[l]=DT/pts[l]; } ts=TAU; tp=TAU; @@ -70,12 +69,13 @@ float *** taus, float *** taup, float * eta){ jj=j-POS[2]*NY; kk=k-POS[3]*NZ; if(L){ - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } } @@ -92,7 +92,7 @@ float *** taus, float *** taup, float * eta){ sprintf(modfile,"%s.mod",MFILE); - writemod(modfile,rho,3); + writemod(modfile,mod,3); MPI_Barrier(MPI_COMM_WORLD); diff --git a/src/hh_toy_start.c b/src/hh_toy_start.c index a4b290f..661778a 100644 --- a/src/hh_toy_start.c +++ b/src/hh_toy_start.c @@ -5,8 +5,7 @@ #include "fd.h" -void model(float *** rho, float *** pi, float *** u, - float *** taus, float *** taup, float *eta) { +void model(st_model *mod) { /*-----------------------------------------------------------------------*/ /* extern variables */ @@ -37,7 +36,7 @@ void model(float *** rho, float *** pi, float *** u, for (l=1; l<=L; l++) { pts[l]=1.0/(2.0*PI*FL[l]); - eta[l]=DT/pts[l]; + mod->eta[l]=DT/pts[l]; } ts=TAU; @@ -73,13 +72,13 @@ void model(float *** rho, float *** pi, float *** u, kk=k-POS[3]*NZ; if (L) { - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } } diff --git a/src/hh_toy_true.c b/src/hh_toy_true.c index 7d9cf85..c0d1f48 100644 --- a/src/hh_toy_true.c +++ b/src/hh_toy_true.c @@ -5,8 +5,7 @@ #include "fd.h" -void model(float *** rho, float *** pi, float *** u, - float *** taus, float *** taup, float *eta) { +void model(st_model *mod) { /*-----------------------------------------------------------------------*/ /* extern variables */ @@ -38,7 +37,7 @@ void model(float *** rho, float *** pi, float *** u, for (l=1; l<=L; l++) { pts[l]=1.0/(2.0*PI*FL[l]); - eta[l]=DT/pts[l]; + mod->eta[l]=DT/pts[l]; } ts=TAU; @@ -74,13 +73,13 @@ void model(float *** rho, float *** pi, float *** u, kk=k-POS[3]*NZ; if (L) { - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } } @@ -111,13 +110,13 @@ void model(float *** rho, float *** pi, float *** u, kk=k-POS[3]*NZ; if (L) { - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } @@ -148,13 +147,13 @@ void model(float *** rho, float *** pi, float *** u, kk=k-POS[3]*NZ; if (L) { - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } @@ -185,13 +184,13 @@ void model(float *** rho, float *** pi, float *** u, kk=k-POS[3]*NZ; if (L) { - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } @@ -222,13 +221,13 @@ void model(float *** rho, float *** pi, float *** u, kk=k-POS[3]*NZ; if (L) { - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp; + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp; } - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=Rho; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=Rho; + mod->pi[jj][ii][kk]=piv; } } diff --git a/src/ifos3d.c b/src/ifos3d.c index 1751b8e..2dfbed4 100644 --- a/src/ifos3d.c +++ b/src/ifos3d.c @@ -37,51 +37,65 @@ int main(int argc, char **argv){ st_stress *stress=NULL; - - float *** absorb_coeff=NULL; - float *** sxy=NULL, *** syz=NULL, *** sxz=NULL; + st_velocity *vel=NULL; + st_pml_coeff *pml_coeff=NULL; + st_pml_wfd *pml_wfd=NULL; - float *** syy=NULL, *** szz=NULL; - //float *** sxx=NULL, *** syy=NULL, *** szz=NULL; + st_model *mod=NULL; + st_model *testmod=NULL; + st_model_av *mod_av=NULL; + st_visc_mem *visco_mem=NULL; - float *** rxy=NULL, *** ryz=NULL, *** rxz=NULL; - float *** rxx=NULL, *** ryy=NULL, *** rzz=NULL; - float *** vx=NULL, *** vy=NULL, *** vz=NULL; - float *** rho=NULL, *** pi=NULL, *** u=NULL; - float *** taus=NULL, *** taup=NULL, *eta=NULL; - float *** uipjp=NULL, *** ujpkp=NULL, *** uipkp=NULL, *** tausipjp=NULL, *** tausjpkp=NULL, *** tausipkp=NULL,*** rjp=NULL, *** rkp=NULL, *** rip=NULL; + st_buffer *velbuff; + st_buffer *stressbuff; - float ** srcpos=NULL, **srcpos_loc=NULL, **srcpos_loc_back=NULL,** srcpos1=NULL, ** signals=NULL; - int ** recpos=NULL, ** recpos_loc=NULL, *snum_loc=NULL,*rnum_loc=NULL ; - float ** sectionvx=NULL, ** sectionvy=NULL, ** sectionvz=NULL, ** sectionp=NULL, - ** sectioncurl=NULL, ** sectiondiv=NULL; + st_freq_velocity *fourier_vel_fw; + st_freq_velocity *fourier_vel_back; - float *** bufferlef_to_rig, *** bufferrig_to_lef; - float *** buffertop_to_bot, *** bufferbot_to_top; - float *** bufferfro_to_bac, *** bufferbac_to_fro; + st_hessian *hessian; + st_gradient *grad; + st_gradient *grad_prior1; + st_gradient *grad_prior2; + st_seismogram *section; + st_signals *signals; + st_acquisition *acq; - float *** sbufferlef_to_rig, *** sbufferrig_to_lef; - float *** sbuffertop_to_bot, *** sbufferbot_to_top; - float *** sbufferfro_to_bac, *** sbufferbac_to_fro; - - float * K_x=NULL, * alpha_prime_x=NULL, * a_x=NULL, * b_x=NULL, * K_x_half=NULL, * alpha_prime_x_half=NULL, * a_x_half=NULL, * b_x_half=NULL, * K_y=NULL, * alpha_prime_y=NULL, * a_y=NULL, * b_y=NULL, * K_y_half=NULL, * alpha_prime_y_half=NULL, * a_y_half=NULL, * b_y_half=NULL, * K_z=NULL, * alpha_prime_z=NULL, * a_z=NULL, * b_z=NULL, * K_z_half=NULL, * alpha_prime_z_half=NULL, * a_z_half=NULL, * b_z_half=NULL; - float *** psi_sxx_x=NULL, *** psi_syy_y=NULL, *** psi_szz_z=NULL, *** psi_sxy_y=NULL, *** psi_sxy_x=NULL, *** psi_sxz_x=NULL, *** psi_sxz_z=NULL, *** psi_syz_y=NULL, *** psi_syz_z=NULL, *** psi_vxx=NULL, *** psi_vyy=NULL, *** psi_vzz=NULL, *** psi_vxy=NULL, *** psi_vxz=NULL, *** psi_vyx=NULL, *** psi_vyz=NULL, *** psi_vzx=NULL, *** psi_vzy=NULL; + /*allocation of structs*/ + stress = (st_stress *) malloc(sizeof(st_stress)); + vel = (st_velocity *) malloc(sizeof(st_velocity)); + pml_coeff = (st_pml_coeff *) malloc(sizeof(st_pml_coeff)); + pml_wfd = (st_pml_wfd *) malloc(sizeof(st_pml_wfd)); + + mod = (st_model *) malloc(sizeof(st_model)); + testmod = (st_model *) malloc(sizeof(st_model)); + mod_av = (st_model_av *) malloc(sizeof(st_model_av)); + visco_mem = (st_visc_mem *) malloc(sizeof(st_visc_mem)); + + velbuff = (st_buffer *) malloc(sizeof(st_buffer)); + stressbuff = (st_buffer *) malloc(sizeof(st_buffer)); + + fourier_vel_fw = (st_freq_velocity *) malloc(sizeof(st_freq_velocity)); + fourier_vel_back = (st_freq_velocity *) malloc(sizeof(st_freq_velocity)); + + hessian = (st_hessian *) malloc(sizeof(st_hessian)); + grad = (st_gradient *) malloc(sizeof(st_gradient)); + grad_prior1 = (st_gradient *) malloc(sizeof(st_gradient)); + grad_prior2 = (st_gradient *) malloc(sizeof(st_gradient)); + + section = (st_seismogram *) malloc(sizeof(st_seismogram)); + signals = (st_signals *) malloc(sizeof(st_signals)); + acq =(st_acquisition *) malloc(sizeof(st_acquisition)); + + float *** absorb_coeff=NULL; - float ** sectionread=NULL, ** sectionreadf=NULL, ** sectionvxdiff=NULL, ** sectionvydiff=NULL,** sectionvzdiff=NULL, * misfit; + float* misfit; float L2=0.0, L2all=0.0, L2f=0.0; /*inversion variables*/ - /*float **** fvx=NULL, **** fvy=NULL, **** fvz=NULL;*/ - float *** grad1=NULL, *** grad2=NULL, *** grad3=NULL; - float *** gradprior1=NULL, *** gradprior2=NULL, *** gradprior3=NULL; - float *** gradprior4=NULL, *** gradprior5=NULL, *** gradprior6=NULL; - float *** hess1=NULL, *** hess2=NULL, *** hess3=NULL; - float **** Ffvx=NULL, **** Ffvy=NULL, **** Ffvz=NULL, **** Ffivx=NULL, **** Ffivy=NULL, **** Ffivz=NULL; - float **** Fbvx=NULL, **** Fbvy=NULL, **** Fbvz=NULL, **** Fbivx=NULL, **** Fbivy=NULL, **** Fbivz=NULL; + int iteration=0, steptest=0,cdf=0, groupnum=0, nf=0, * itpergroup,it_group=0,itmax=0, ntast=1; int ntr_hess=0; float * step , *finv, *beta; - float *** testrho, *** testpi, *** testu; float buf; /*MPI_Status status;*/ float dummy=0.0; @@ -203,13 +217,13 @@ int main(int argc, char **argv){ store local receiver coordinates in recpos_loc */ if (SEISMO){ fprintf(FP,"\n ------------------ READING RECEIVER PARAMETERS ----------------- \n"); - recpos=receiver(FP,&ntr); - rnum_loc=ivector(1,ntr); - recpos_loc = splitrec(recpos,&ntr_loc, ntr, rnum_loc); + acq->recpos=receiver(FP,&ntr); + acq->rnum_loc=ivector(1,ntr); + acq->recpos_loc = splitrec(acq->recpos,&ntr_loc, ntr, acq->rnum_loc); ntr_glob=ntr; ntr=ntr_loc; } - if (METHOD) srcpos_loc_back=fmatrix(1,7,1,ntr_loc); + if (METHOD) acq->srcpos_loc_back=fmatrix(1,7,1,ntr_loc); // /* number of seismogram sections which have to be stored in core memory*/ @@ -285,6 +299,8 @@ MPI_Barrier(MPI_COMM_WORLD); /* send_statuses=(MPI_Status *)malloc(REQUEST_COUNT*sizeof(MPI_Status)); rec_statuses=(MPI_Status *)malloc(REQUEST_COUNT*sizeof(MPI_Status)); */ + + /* allocation for timing arrays used for performance analysis */ time_v_update=dvector(1,NT); time_s_update=dvector(1,NT); @@ -299,62 +315,62 @@ MPI_Barrier(MPI_COMM_WORLD); else ntr_hess=0; /* memory allocation for dynamic (wavefield) arrays */ if(POS[2]==0){ - vx = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - vy = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - vz = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + vel->vx = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + vel->vy = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + vel->vz = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); /*fvx = f4tensor(1,NT,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); fvy = f4tensor(1,NT,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); fvz = f4tensor(1,NT,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2);*/ if(METHOD){ - Ffvx = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffvy = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffvz = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbvx = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbvy = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbvz = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffivx = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffivy = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffivz = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbivx = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbivy = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbivz = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvx_re = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvy_re = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvz_re = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvx_re = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvy_re = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvz_re = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvx_im = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvy_im = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvz_im = f4tensor(1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvx_im = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvy_im = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvz_im = f4tensor(1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); } - sxy = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - syz = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + stress->sxy = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + stress->syz = f3tensor(0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); } if(POS[2]>0){ - vx = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - vy = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - vz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + vel->vx = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + vel->vy = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + vel->vz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); /*fvx = f4tensor(1,NT,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); fvy = f4tensor(1,NT,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); fvz = f4tensor(1,NT,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2);*/ if(METHOD){ - Ffvx = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffvy = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffvz = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbvx = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbvy = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbvz = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffivx = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffivy = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Ffivz = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbivx = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbivy = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - Fbivz = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvx_re = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvy_re = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvz_re = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvx_re = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvy_re = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvz_re = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvx_im = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvy_im = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_fw->Fvz_im = f4tensor(1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvx_im = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvy_im = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + fourier_vel_back->Fvz_im = f4tensor(1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); } - sxy = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - syz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + stress->sxy = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + stress->syz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); } - stress = (st_stress *) malloc(sizeof(st_stress)); - sxz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + + stress->sxz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); stress->sxx = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - syy = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - szz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + stress->syy = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + stress->szz = f3tensor(1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); xb=ivector(0,1); yb=ivector(0,1); @@ -362,19 +378,19 @@ MPI_Barrier(MPI_COMM_WORLD); /*memory allocation for inversion parameter*/ if(METHOD){ - grad1 = f3tensor(1,NY,1,NX,1,NZ); - grad2 = f3tensor(1,NY,1,NX,1,NZ); - grad3 = f3tensor(1,NY,1,NX,1,NZ); - gradprior1 = f3tensor(1,NY,1,NX,1,NZ); - gradprior2 = f3tensor(1,NY,1,NX,1,NZ); - gradprior3 = f3tensor(1,NY,1,NX,1,NZ); - gradprior4 = f3tensor(1,NY,1,NX,1,NZ); - gradprior5 = f3tensor(1,NY,1,NX,1,NZ); - gradprior6 = f3tensor(1,NY,1,NX,1,NZ); + grad->vp = f3tensor(1,NY,1,NX,1,NZ); + grad->vs = f3tensor(1,NY,1,NX,1,NZ); + grad->rho = f3tensor(1,NY,1,NX,1,NZ); + grad_prior1->vp = f3tensor(1,NY,1,NX,1,NZ); + grad_prior1->vs = f3tensor(1,NY,1,NX,1,NZ); + grad_prior1->rho = f3tensor(1,NY,1,NX,1,NZ); + grad_prior2->vp = f3tensor(1,NY,1,NX,1,NZ); + grad_prior2->vs = f3tensor(1,NY,1,NX,1,NZ); + grad_prior2->rho = f3tensor(1,NY,1,NX,1,NZ); if(HESS){ - hess1 = f3tensor(1,NY,1,NX,1,NZ); - hess2 = f3tensor(1,NY,1,NX,1,NZ); - hess3 = f3tensor(1,NY,1,NX,1,NZ); + hessian->vp = f3tensor(1,NY,1,NX,1,NZ); + hessian->vs = f3tensor(1,NY,1,NX,1,NZ); + hessian->rho = f3tensor(1,NY,1,NX,1,NZ); } } @@ -399,89 +415,94 @@ MPI_Barrier(MPI_COMM_WORLD); /* memory allocation for CPML variables*/ if(ABS_TYPE==1){ - K_x = vector(1,2*FW); - alpha_prime_x = vector(1,2*FW); - a_x = vector(1,2*FW); - b_x = vector(1,2*FW); - K_x_half = vector(1,2*FW); - alpha_prime_x_half = vector(1,2*FW); - a_x_half = vector(1,2*FW); - b_x_half = vector(1,2*FW); - - K_y = vector(1,2*FW); - alpha_prime_y = vector(1,2*FW); - a_y = vector(1,2*FW); - b_y = vector(1,2*FW); - K_y_half = vector(1,2*FW); - alpha_prime_y_half = vector(1,2*FW); - a_y_half = vector(1,2*FW); - b_y_half = vector(1,2*FW); - - K_z = vector(1,2*FW); - alpha_prime_z = vector(1,2*FW); - a_z = vector(1,2*FW); - b_z = vector(1,2*FW); - K_z_half = vector(1,2*FW); - alpha_prime_z_half = vector(1,2*FW); - a_z_half = vector(1,2*FW); - b_z_half = vector(1,2*FW); - - - psi_sxx_x = f3tensor(1,NY,1,2*FW,1,NZ); - psi_sxy_x = f3tensor(1,NY,1,2*FW,1,NZ); - psi_sxz_x = f3tensor(1,NY,1,2*FW,1,NZ); - psi_syy_y = f3tensor(1,2*FW,1,NX,1,NZ); - psi_sxy_y = f3tensor(1,2*FW,1,NX,1,NZ); - psi_syz_y = f3tensor(1,2*FW,1,NX,1,NZ); - psi_szz_z = f3tensor(1,NY,1,NX,1,2*FW); - psi_sxz_z = f3tensor(1,NY,1,NX,1,2*FW); - psi_syz_z = f3tensor(1,NY,1,NX,1,2*FW); - - - psi_vxx = f3tensor(1,NY,1,2*FW,1,NZ); - psi_vyy = f3tensor(1,2*FW,1,NX,1,NZ); - psi_vzz = f3tensor(1,NY,1,NX,1,2*FW); - psi_vxy = f3tensor(1,2*FW,1,NX,1,NZ); - psi_vxz = f3tensor(1,NY,1,NX,1,2*FW); - psi_vyx = f3tensor(1,NY,1,2*FW,1,NZ); - psi_vyz = f3tensor(1,NY,1,NX,1,2*FW); - psi_vzx = f3tensor(1,NY,1,2*FW,1,NZ); - psi_vzy = f3tensor(1,2*FW,1,NX,1,NZ); + pml_coeff->K_x = vector(1,2*FW); + pml_coeff->alpha_prime_x = vector(1,2*FW); + pml_coeff->a_x = vector(1,2*FW); + pml_coeff->b_x = vector(1,2*FW); + pml_coeff->K_x_half = vector(1,2*FW); + pml_coeff->alpha_prime_x_half = vector(1,2*FW); + pml_coeff->a_x_half = vector(1,2*FW); + pml_coeff->b_x_half = vector(1,2*FW); + + pml_coeff->K_y = vector(1,2*FW); + pml_coeff->alpha_prime_y = vector(1,2*FW); + pml_coeff->a_y = vector(1,2*FW); + pml_coeff->b_y = vector(1,2*FW); + pml_coeff->K_y_half = vector(1,2*FW); + pml_coeff->alpha_prime_y_half = vector(1,2*FW); + pml_coeff->a_y_half = vector(1,2*FW); + pml_coeff->b_y_half = vector(1,2*FW); + + pml_coeff->K_z = vector(1,2*FW); + pml_coeff->alpha_prime_z = vector(1,2*FW); + pml_coeff->a_z = vector(1,2*FW); + pml_coeff->b_z = vector(1,2*FW); + pml_coeff->K_z_half = vector(1,2*FW); + pml_coeff->alpha_prime_z_half = vector(1,2*FW); + pml_coeff->a_z_half = vector(1,2*FW); + pml_coeff->b_z_half = vector(1,2*FW); + + + pml_wfd->psi_sxx_x = f3tensor(1,NY,1,2*FW,1,NZ); + pml_wfd->psi_sxy_x = f3tensor(1,NY,1,2*FW,1,NZ); + pml_wfd->psi_sxz_x = f3tensor(1,NY,1,2*FW,1,NZ); + pml_wfd->psi_syy_y = f3tensor(1,2*FW,1,NX,1,NZ); + pml_wfd->psi_sxy_y = f3tensor(1,2*FW,1,NX,1,NZ); + pml_wfd->psi_syz_y = f3tensor(1,2*FW,1,NX,1,NZ); + pml_wfd->psi_szz_z = f3tensor(1,NY,1,NX,1,2*FW); + pml_wfd->psi_sxz_z = f3tensor(1,NY,1,NX,1,2*FW); + pml_wfd->psi_syz_z = f3tensor(1,NY,1,NX,1,2*FW); + + + pml_wfd->psi_vxx = f3tensor(1,NY,1,2*FW,1,NZ); + pml_wfd->psi_vyy = f3tensor(1,2*FW,1,NX,1,NZ); + pml_wfd->psi_vzz = f3tensor(1,NY,1,NX,1,2*FW); + pml_wfd->psi_vxy = f3tensor(1,2*FW,1,NX,1,NZ); + pml_wfd->psi_vxz = f3tensor(1,NY,1,NX,1,2*FW); + pml_wfd->psi_vyx = f3tensor(1,NY,1,2*FW,1,NZ); + pml_wfd->psi_vyz = f3tensor(1,NY,1,NX,1,2*FW); + pml_wfd->psi_vzx = f3tensor(1,NY,1,2*FW,1,NZ); + pml_wfd->psi_vzy = f3tensor(1,2*FW,1,NX,1,NZ); } if(L){ - rxy = f3tensor(1,NY,1,NX,1,NZ); - ryz = f3tensor(1,NY,1,NX,1,NZ); - rxz = f3tensor(1,NY,1,NX,1,NZ); - rxx = f3tensor(1,NY,1,NX,1,NZ); - ryy = f3tensor(1,NY,1,NX,1,NZ); - rzz = f3tensor(1,NY,1,NX,1,NZ); - taus= f3tensor(0,NY+1,0,NX+1,0,NZ+1); - taup= f3tensor(0,NY+1,0,NX+1,0,NZ+1); - eta = vector(1,L); - tausipjp=f3tensor(1,NY,1,NX,1,NZ); - tausjpkp=f3tensor(1,NY,1,NX,1,NZ); - tausipkp=f3tensor(1,NY,1,NX,1,NZ); + visco_mem->rxy = f3tensor(1,NY,1,NX,1,NZ); + visco_mem->ryz = f3tensor(1,NY,1,NX,1,NZ); + visco_mem->rxz = f3tensor(1,NY,1,NX,1,NZ); + visco_mem->rxx = f3tensor(1,NY,1,NX,1,NZ); + visco_mem->ryy = f3tensor(1,NY,1,NX,1,NZ); + visco_mem->rzz = f3tensor(1,NY,1,NX,1,NZ); + mod->taus= f3tensor(0,NY+1,0,NX+1,0,NZ+1); + mod->taup= f3tensor(0,NY+1,0,NX+1,0,NZ+1); + + //testmodel dummy (currently no viscoelastic gradients) + testmod->taus= f3tensor(0,NY+1,0,NX+1,0,NZ+1); + testmod->taup= f3tensor(0,NY+1,0,NX+1,0,NZ+1); + + mod->eta = vector(1,L); + mod_av->tausipjp=f3tensor(1,NY,1,NX,1,NZ); + mod_av->tausjpkp=f3tensor(1,NY,1,NX,1,NZ); + mod_av->tausipkp=f3tensor(1,NY,1,NX,1,NZ); } - /* memory allocation for static (model) arrays */ - rho = f3tensor(0,NY+1,0,NX+1,0,NZ+1); - pi = f3tensor(0,NY+1,0,NX+1,0,NZ+1); - u = f3tensor(0,NY+1,0,NX+1,0,NZ+1); + /* visco_memory allocation for static (model) arrays */ + mod->rho = f3tensor(0,NY+1,0,NX+1,0,NZ+1); + mod->pi = f3tensor(0,NY+1,0,NX+1,0,NZ+1); + mod->u = f3tensor(0,NY+1,0,NX+1,0,NZ+1); absorb_coeff= f3tensor(1,NY,1,NX,1,NZ); - testrho = f3tensor(0,NY+1,0,NX+1,0,NZ+1); - testpi = f3tensor(0,NY+1,0,NX+1,0,NZ+1); - testu = f3tensor(0,NY+1,0,NX+1,0,NZ+1); + testmod->rho = f3tensor(0,NY+1,0,NX+1,0,NZ+1); + testmod->pi = f3tensor(0,NY+1,0,NX+1,0,NZ+1); + testmod->u = f3tensor(0,NY+1,0,NX+1,0,NZ+1); /* averaged material parameters */ - uipjp=f3tensor(1,NY,1,NX,1,NZ); - ujpkp=f3tensor(1,NY,1,NX,1,NZ); - uipkp=f3tensor(1,NY,1,NX,1,NZ); + mod_av->uipjp=f3tensor(1,NY,1,NX,1,NZ); + mod_av->ujpkp=f3tensor(1,NY,1,NX,1,NZ); + mod_av->uipkp=f3tensor(1,NY,1,NX,1,NZ); - rjp=f3tensor(1,NY,1,NX,1,NZ); - rkp=f3tensor(1,NY,1,NX,1,NZ); - rip=f3tensor(1,NY,1,NX,1,NZ); + mod_av->rjp=f3tensor(1,NY,1,NX,1,NZ); + mod_av->rkp=f3tensor(1,NY,1,NX,1,NZ); + mod_av->rip=f3tensor(1,NY,1,NX,1,NZ); @@ -492,54 +513,52 @@ MPI_Barrier(MPI_COMM_WORLD); nf1=(3*FDORDER/2)-1; nf2=nf1-1; - bufferlef_to_rig = f3tensor(1,NY,1,NZ,1,nf1); - bufferrig_to_lef = f3tensor(1,NY,1,NZ,1,nf2); - buffertop_to_bot = f3tensor(1,NX,1,NZ,1,nf1); - bufferbot_to_top = f3tensor(1,NX,1,NZ,1,nf2); - bufferfro_to_bac = f3tensor(1,NY,1,NX,1,nf1); - bufferbac_to_fro = f3tensor(1,NY,1,NX,1,nf2); + velbuff->lef_to_rig = f3tensor(1,NY,1,NZ,1,nf1); + velbuff->rig_to_lef = f3tensor(1,NY,1,NZ,1,nf2); + velbuff->top_to_bot = f3tensor(1,NX,1,NZ,1,nf1); + velbuff->bot_to_top = f3tensor(1,NX,1,NZ,1,nf2); + velbuff->fro_to_bac = f3tensor(1,NY,1,NX,1,nf1); + velbuff->bac_to_fro = f3tensor(1,NY,1,NX,1,nf2); - sbufferlef_to_rig = f3tensor(1,NY,1,NZ,1,nf2); - sbufferrig_to_lef = f3tensor(1,NY,1,NZ,1,nf1); - sbuffertop_to_bot = f3tensor(1,NX,1,NZ,1,nf2); - sbufferbot_to_top = f3tensor(1,NX,1,NZ,1,nf1); - sbufferfro_to_bac = f3tensor(1,NY,1,NX,1,nf2); - sbufferbac_to_fro = f3tensor(1,NY,1,NX,1,nf1); + stressbuff->lef_to_rig = f3tensor(1,NY,1,NZ,1,nf2); + stressbuff->rig_to_lef = f3tensor(1,NY,1,NZ,1,nf1); + stressbuff->top_to_bot = f3tensor(1,NX,1,NZ,1,nf2); + stressbuff->bot_to_top = f3tensor(1,NX,1,NZ,1,nf1); + stressbuff->fro_to_bac = f3tensor(1,NY,1,NX,1,nf2); + stressbuff->bac_to_fro = f3tensor(1,NY,1,NX,1,nf1); if (ntr>0){ switch (SEISMO){ case 1 : /* particle velocities only */ - sectionvx=fmatrix(1,ntr,1,ns); - sectionvy=fmatrix(1,ntr,1,ns); - sectionvz=fmatrix(1,ntr,1,ns); + section->vx=fmatrix(1,ntr,1,ns); + section->vy=fmatrix(1,ntr,1,ns); + section->vz=fmatrix(1,ntr,1,ns); break; case 2 : /* pressure only */ - sectionp=fmatrix(1,ntr,1,ns); + section->p=fmatrix(1,ntr,1,ns); break; case 3 : /* curl and div only */ - sectioncurl=fmatrix(1,ntr,1,ns); - sectiondiv=fmatrix(1,ntr,1,ns); + section->curl=fmatrix(1,ntr,1,ns); + section->div=fmatrix(1,ntr,1,ns); break; case 4 : /* everything */ - sectionvx=fmatrix(1,ntr,1,ns); - sectionvy=fmatrix(1,ntr,1,ns); - sectionvz=fmatrix(1,ntr,1,ns); - sectioncurl=fmatrix(1,ntr,1,ns); - sectiondiv=fmatrix(1,ntr,1,ns); - sectionp=fmatrix(1,ntr,1,ns); + section->vx=fmatrix(1,ntr,1,ns); + section->vy=fmatrix(1,ntr,1,ns); + section->vz=fmatrix(1,ntr,1,ns); + section->curl=fmatrix(1,ntr,1,ns); + section->div=fmatrix(1,ntr,1,ns); + section->p=fmatrix(1,ntr,1,ns); break; } } /* memory for inversion */ - sectionread=fmatrix(1,ntr_glob,1,ns); - sectionreadf=fmatrix(1,ntr_glob,1,1); - sectionvxdiff=fmatrix(1,ntr_glob,1,ns); - sectionvydiff=fmatrix(1,ntr_glob,1,ns); - sectionvzdiff=fmatrix(1,ntr_glob,1,ns); + section->read=fmatrix(1,ntr_glob,1,ns); + section->readf=fmatrix(1,ntr_glob,1,1); + signals->sectionvxdiff=fmatrix(1,ntr_glob,1,ns); + signals->sectionvydiff=fmatrix(1,ntr_glob,1,ns); + signals->sectionvzdiff=fmatrix(1,ntr_glob,1,ns); - /* memory for source position definition */ - srcpos1=fmatrix(1,6,1,1); @@ -549,14 +568,14 @@ MPI_Barrier(MPI_COMM_WORLD); /* create model grids */ fprintf(FP,"\n ------------------ MODEL CREATION AND OUTPUT-------------------- \n"); - if(READMOD) readmod(rho,pi,u,taus,taup,eta); - else model(rho,pi,u,taus,taup,eta); - /*model_gauss(rho,pi,u,taus,taup,eta);*/ - /*model2_5(rho,pi,u,taus,taup);*/ - outmod(NX,NY,NZ,rho,pi,u,0); - /*smooth(NX,NY,NZ,pi,testpi); - smooth(NX,NY,NZ,u,testu); - smooth(NX,NY,NZ,rho,testrho);*/ + if(READMOD) readmod(mod); + else model(mod); + /*model_gauss(mod);*/ + /*model2_5(mod);*/ + outmod(NX,NY,NZ,mod,0); + /*smooth(NX,NY,NZ,mod,testmod); + smooth(NX,NY,NZ,mod,testmod); + smooth(NX,NY,NZ,mod,testmod);*/ if(ABS_TYPE==1){ CPML_ini_elastic(xb,yb,zb); @@ -598,8 +617,8 @@ MPI_Barrier(MPI_COMM_WORLD); /*fprintf(FP,"\n nsrc= %i with NGX=%i, NYG=%i and FW=%i. \n",nsrc,NXG,NYG,FW);*/ MPI_Barrier(MPI_COMM_WORLD); MPI_Bcast(&nsrc,1,MPI_INT,0,MPI_COMM_WORLD); - srcpos= fmatrix(1,7,1,nsrc); - pwsources(&nsrc,srcpos); + acq->srcpos= fmatrix(1,7,1,nsrc); + pwsources(&nsrc,acq->srcpos); } else { err("SRCREC parameter specifies PLANE_WAVE excitation, but PLANE_WAVE_DEPTH<=0!"); } @@ -610,29 +629,29 @@ MPI_Barrier(MPI_COMM_WORLD); MPI_Bcast(&nsrc,1,MPI_INT,0,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); - srcpos= fmatrix(1,7,1,nsrc); - sources(fpsrc,&nsrc,srcpos); + acq->srcpos= fmatrix(1,7,1,nsrc); + sources(fpsrc,&nsrc,acq->srcpos); /*originally, SOURCE_TYPE (stype) is defined in the source file, if not, SOURCE_TYPE is taken from the input file */ /*if (stype==NULL) printf("PE%d: Source type(s) undefined?! \n",MYID);*/ - snum_loc = ivector(1,nsrc); - srcpos_loc = splitsrc(srcpos,&nsrc_loc, nsrc,snum_loc); + acq->snum_loc = ivector(1,nsrc); + acq->srcpos_loc = splitsrc(acq->srcpos,&nsrc_loc, nsrc,acq->snum_loc); if (RUN_MULTIPLE_SHOTS){ nshots=nsrc; - if (nsrc_loc>0) signals=fmatrix(1,1,1,NT);} + if (nsrc_loc>0) signals->fw=fmatrix(1,1,1,NT);} else {nshots=1; - if (nsrc_loc>0) signals=fmatrix(1,nsrc_loc,1,NT);} + if (nsrc_loc>0) signals->fw=fmatrix(1,nsrc_loc,1,NT);} /* check if the FD run will be stable and free of numerical dispersion */ - checkfd(FP,rho,pi,u,taus,taup,eta,srcpos,nsrc,recpos,ntr_glob); + checkfd(FP,mod,acq->srcpos,nsrc,acq->recpos,ntr_glob); /* calculate damping coefficients for CPML boundary*/ if(ABS_TYPE==1){ -CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_half,K_y,alpha_prime_y,a_y,b_y,K_y_half,alpha_prime_y_half,a_y_half,b_y_half,K_z,alpha_prime_z,a_z,b_z,K_z_half,alpha_prime_z_half,a_z_half,b_z_half); + CPML_coeff(pml_coeff); } /* calculate 3-D array for exponential damping of reflections @@ -643,13 +662,9 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha /* comunication initialisation for persistent communication */ - /*comm_ini(bufferlef_to_rig, bufferrig_to_lef, - buffertop_to_bot, bufferbot_to_top, bufferfro_to_bac, - bufferbac_to_fro, req_send, req_rec); + /*comm_ini(velbuff, req_send, req_rec); - comm_ini_s(sbufferlef_to_rig, sbufferrig_to_lef, - sbuffertop_to_bot, sbufferbot_to_top, sbufferfro_to_bac, - sbufferbac_to_fro, sreq_send, sreq_rec);*/ + comm_ini_s(stressbuff, sreq_send, sreq_rec);*/ /* initialisation of PML and ABS domain */ if(ABS_TYPE==1){ @@ -664,15 +679,15 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if(HESS&&READ_HESS==0) hloop=ntr_hess; - if(HESS&&READ_HESS==1) readhess(NX,NY,NZ,hess1,hess2,hess3,finv[0], iteration+1-it_group); + if(HESS&&READ_HESS==1) readhess(NX,NY,NZ,hessian,finv[0], iteration+1-it_group); MPI_Barrier(MPI_COMM_WORLD); if(METHOD==1 && EXTOBS==1){ for (ishot=1;ishot<=nshots;ishot++){ if(ntr_loc>0){ - readseis_split(ishot, sectionvx, ntr_glob, rnum_loc, ns, 1); - readseis_split(ishot, sectionvy, ntr_glob, rnum_loc, ns, 2); - readseis_split(ishot, sectionvz, ntr_glob, rnum_loc, ns, 3);} - saveseis(FP,sectionvx,sectionvy,sectionvz,sectionp,sectioncurl,sectiondiv,recpos,recpos_loc,ntr,srcpos,ishot,ns,1,1); + readseis_split(ishot, section->vx, ntr_glob, acq->rnum_loc, ns, 1); + readseis_split(ishot, section->vy, ntr_glob, acq->rnum_loc, ns, 2); + readseis_split(ishot, section->vz, ntr_glob, acq->rnum_loc, ns, 3);} + saveseis(FP,section,acq,ntr,ishot,ns,1,1); } } for (iteration=ITMIN;iteration<=ITMAX;iteration++){ @@ -684,12 +699,12 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha } if(METHOD){ - zero_grad(NX,NY,NZ,grad1,grad2,grad3); - zero_invers(NX,NY,NZ,Ffvx,Ffvy,Ffvz,Ffivx,Ffivy,Ffivz,Fbvx,Fbvy,Fbvz,Fbivx,Fbivy,Fbivz,NFMAX,ntr_hess);} + zero_grad(NX,NY,NZ,grad); + zero_invers(NX,NY,NZ,fourier_vel_fw,fourier_vel_back,NFMAX,ntr_hess);} - matcopy(rho,pi,u,taus,taup); - if (FREE_SURF)constant_boundary(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],pi, u, rho); - av_mat(rho,pi,u,taus,taup,uipjp,ujpkp,uipkp,tausipjp,tausjpkp,tausipkp,rjp,rkp,rip); + matcopy(mod); + if (FREE_SURF)constant_boundary(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],mod); + av_mat(mod,mod_av); L2all=0.0; L2f=0.0; misfit[0]=0.0; @@ -715,7 +730,7 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if(METHOD){ for(i=1;i<=4;i++){ - for(j=1;j<=ntr_loc;j++){srcpos_loc_back[i][j]=recpos_loc[i][j]; }} + for(j=1;j<=ntr_loc;j++){acq->srcpos_loc_back[i][j]=acq->recpos_loc[i][j]; }} } for (ishot=1;ishot<=nshots;ishot++){ @@ -724,28 +739,23 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if (MYID==0) fprintf(FI,"SHOT %d",ishot); fprintf(FP,"\n ********** Starting simulation for shot %d of %d ********** \n",ishot,nshots); - if (RUN_MULTIPLE_SHOTS){nsrc_loc=snum_loc[ishot]; + if (RUN_MULTIPLE_SHOTS){nsrc_loc=acq->snum_loc[ishot]; if(nsrc_loc>0){ - for (nt=4;nt<=7;nt++) srcpos_loc[nt][1]=srcpos[nt][ishot]; - srcpos_loc[1][1]=(float)(((iround(srcpos[1][ishot]/DX)-1)%IENDX)+1); - srcpos_loc[2][1]=(float)(((iround(srcpos[2][ishot]/DY)-1)%IENDY)+1); - srcpos_loc[3][1]=(float)(((iround(srcpos[3][ishot]/DZ)-1)%IENDZ)+1); + for (nt=4;nt<=7;nt++) acq->srcpos_loc[nt][1]=acq->srcpos[nt][ishot]; + acq->srcpos_loc[1][1]=(float)(((iround(acq->srcpos[1][ishot]/DX)-1)%IENDX)+1); + acq->srcpos_loc[2][1]=(float)(((iround(acq->srcpos[2][ishot]/DY)-1)%IENDY)+1); + acq->srcpos_loc[3][1]=(float)(((iround(acq->srcpos[3][ishot]/DZ)-1)%IENDZ)+1); } } /*printf("source=%e,%e,%e,%e,%e,%e,%e\n",srcpos_loc[1][1],srcpos_loc[2][1],srcpos_loc[3][1],srcpos_loc[4][1],srcpos_loc[5][1],srcpos_loc[6][1],srcpos_loc[7][1]);*/ - if(nsrc_loc>0){ wavelet(srcpos_loc,nsrc_loc,SOURCE_SHAPE,signals); - /*if (SEISMO){ - saveseis(FP,signals,sectionvy,sectionvz,sectionp,sectioncurl,sectiondiv,recpos,recpos_loc,ntr,srcpos,ishot,ns,0,11); - }*/ - if(FILT==1) filt_seis(signals,nsrc_loc,NT,finv[nf-1]); - /*if (SEISMO){ - saveseis(FP,signals,sectionvy,sectionvz,sectionp,sectioncurl,sectiondiv,recpos,recpos_loc,ntr,srcpos,ishot,ns,0,12); - }*/ + if(nsrc_loc>0){ + wavelet(acq->srcpos_loc,nsrc_loc,SOURCE_SHAPE,signals->fw); + if(FILT==1) filt_seis(signals->fw,nsrc_loc,NT,finv[nf-1]); } /* initialize wavefield with zero */ - zero_wavefield(NX,NY,NZ,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,psi_sxx_x,psi_sxy_x,psi_sxz_x,psi_sxy_y,psi_syy_y,psi_syz_y,psi_sxz_z,psi_syz_z,psi_szz_z,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz); - if(METHOD) zero_invers(NX,NY,NZ,Ffvx,Ffvy,Ffvz,Ffivx,Ffivy,Ffivz,Fbvx,Fbvy,Fbvz,Fbivx,Fbivy,Fbivz,NFMAX,0); + zero_wavefield(NX,NY,NZ,vel,stress,visco_mem,pml_wfd); + if(METHOD) zero_invers(NX,NY,NZ,fourier_vel_fw,fourier_vel_back,NFMAX,0); /*---------------------------- forward propagation-----------------------------------------------*/ pshot=0; @@ -767,47 +777,45 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha time_s_update[nt]=0.0; /* Check if simulation is still stable */ - if (isnan(vy[NY/2][NX/2][NZ/2])) err(" Simulation is unstable !"); /* maybe just breaking the loop would be better */ + if (isnan(vel->vy[NY/2][NX/2][NZ/2])) err(" Simulation is unstable !"); /* maybe just breaking the loop would be better */ /* update of particle velocities */ - time_v_update[nt]+=update_v(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rho,rjp, rkp,rip,srcpos_loc,signals,signals,signals,nsrc_loc,absorb_coeff,0); + time_v_update[nt]+=update_v(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vel,stress,mod_av,acq->srcpos_loc,signals,nsrc_loc,absorb_coeff,0); if(ABS_TYPE==1){ - update_v_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rho,rjp,rkp,rip,srcpos_loc,signals,signals,signals,nsrc_loc,absorb_coeff,0,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half, K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_sxx_x,psi_sxy_x,psi_sxz_x,psi_sxy_y,psi_syy_y,psi_syz_y,psi_sxz_z,psi_syz_z,psi_szz_z);} + update_v_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vel,stress,mod_av,acq->srcpos_loc,signals,nsrc_loc,absorb_coeff,0,pml_coeff,pml_wfd);} /* exchange values of particle velocities at grid boundaries between PEs */ - time_v_exchange[nt]+=exchange_v(vx,vy,vz, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, - bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec); + time_v_exchange[nt]+=exchange_v(vel, velbuff, req_send, req_rec); - /*time_s_update[nt]+=update_s(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,pi,u,uipjp,ujpkp,uipkp,taus,tausipjp,tausjpkp,tausipkp,taup,eta);*/ - time_s_update[nt]+=update_s_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,pi,u,uipjp,ujpkp,uipkp); + /*time_s_update[nt]+=update_s(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,visco_mem,mod,mod_av);*/ + time_s_update[nt]+=update_s_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,mod,mod_av); if(ABS_TYPE==1){ - /*update_s_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,pi,u,uipjp,ujpkp,uipkp,taus,tausipjp,tausjpkp,tausipkp,taup,eta,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half,K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz);*/ - update_s_CPML_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,pi,u,uipjp,ujpkp,uipkp,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half,K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz); + /*update_s_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,visco_mem,mod,mod_av,pml_coeff,pml_wfd);*/ + update_s_CPML_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,mod,mod_av,pml_coeff,pml_wfd); } /* explosive source */ - psource(nt,stress,syy,szz,srcpos_loc,signals,nsrc_loc); + psource(nt,stress,acq->srcpos_loc,signals->fw,nsrc_loc); /* exchange values of stress at boundaries between PEs */ - time_s_exchange[nt]+=exchange_s(stress,syy,szz,sxy,syz,sxz,sbufferlef_to_rig,sbufferrig_to_lef,sbuffertop_to_bot,sbufferbot_to_top,sbufferfro_to_bac,sbufferbac_to_fro, sreq_send, sreq_rec); + time_s_exchange[nt]+=exchange_s(stress,stressbuff, sreq_send, sreq_rec); /* extracting monochromatic wavefields */ if(nt%ntast==0&&METHOD){ - discfourier(1,NX,1,NY,1,NZ,nt,vx,vy,vz,Ffvx,Ffvy,Ffvz, Ffivx, Ffivy,Ffivz,finv,nf,ntast,pshot,0); + discfourier(1,NX,1,NY,1,NZ,nt,vel,fourier_vel_fw,finv,nf,ntast,pshot,0); l++; } /* stress free surface ? */ if ((FREE_SURF) && (POS[2]==0)) - surface_elastic(1,u,pi,stress,syy,szz,sxy,syz,vx,vy,vz); - /*surface(1,u,pi,taus,taup,eta,stress,syy,szz,sxy,syz,rxx,ryy,rzz,vx,vy,vz);*/ + surface_elastic(1,mod,stress,vel); + /*surface(1,mod,stress,visco_mem,vx,vy,vz);*/ /* store amplitudes at receivers in sectionvx-sectionvz */ if ((SEISMO) && (ntr>0) && (nt==lsamp)){ - seismo(nlsamp,ntr,recpos_loc,sectionvx,sectionvy,sectionvz, - sectiondiv,sectioncurl,sectionp,vx,vy,vz,stress,syy,szz,pi,u); + seismo(nlsamp,ntr,acq->recpos_loc,section,vel,stress,mod); nlsamp++; lsamp+=NDT; } @@ -815,7 +823,7 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha /* save snapshot in file */ if ((SNAP) && (nt==lsnap) && (nt<=TSNAP2/DT)){ MPI_Barrier(MPI_COMM_WORLD); - snap(FP,nt,++nsnap,SNAP_FORMAT,SNAP,vx,vy,vz,stress,syy,szz,u,pi, + snap(FP,nt,++nsnap,SNAP_FORMAT,SNAP,vel,stress,mod, IDX,IDY,IDZ,1,1,1,NX,NY,NZ); lsnap=lsnap+iround(TSNAPINC/DT); } @@ -823,7 +831,7 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha } /* end of loop over timesteps forward propagation*/ if (SEISMO){ - saveseis(FP,sectionvx,sectionvy,sectionvz,sectionp,sectioncurl,sectiondiv,recpos,recpos_loc,ntr,srcpos,ishot,ns,0,iteration); + saveseis(FP,section,acq,ntr,ishot,ns,0,iteration); } /* output timing information (real times for update and exchange) */ @@ -835,36 +843,33 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha MPI_Barrier(MPI_COMM_WORLD); if(METHOD){ /* exchange frequency domain wavefields */ - exchange_Fv(Ffvx,Ffvy,Ffvz,nf, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, - bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec,0); - exchange_Fv(Ffivx,Ffivy,Ffivz,nf, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, - bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec,0);} + exchange_Fv(fourier_vel_fw,nf, velbuff, req_send, req_rec,0);} /*---------------START INVERSION-------------*/ if(ntr_loc>0){ /* read seismic "observed" data (xcomp.) */ - readseis(ishot, sectionread, sectionreadf, ntr_loc, ns,1); + readseis(ishot, section->read, section->readf, ntr_loc, ns,1); if(FILT==1){ - filt_seis(sectionread,ntr_loc,NT,finv[nf-1]);} + filt_seis(section->read,ntr_loc,NT,finv[nf-1]);} /* calculate residuals and L2 Norm */ - residual(sectionread, sectionreadf,sectionvx,sectionvxdiff,ntr_loc,ns,&L2,&L2f); + residual(section->read, section->readf,section->vx,signals->sectionvxdiff,ntr_loc,ns,&L2,&L2f); /* read seismic "observed" data (ycomp.) */ - readseis(ishot, sectionread, sectionreadf, ntr_loc, ns,2); + readseis(ishot, section->read, section->readf, ntr_loc, ns,2); if(FILT==1){ - filt_seis(sectionread,ntr_loc,NT,finv[nf-1]);} + filt_seis(section->read,ntr_loc,NT,finv[nf-1]);} /* calculate residuals and L2 Norm */ - residual(sectionread, sectionreadf,sectionvy,sectionvydiff,ntr_loc,ns,&L2,&L2f); + residual(section->read, section->readf,section->vy,signals->sectionvydiff,ntr_loc,ns,&L2,&L2f); /* read seismic "observed" data (zcomp.)*/ - readseis(ishot, sectionread, sectionreadf, ntr_loc, ns,3); + readseis(ishot, section->read, section->readf, ntr_loc, ns,3); if(FILT==1){ - filt_seis(sectionread,ntr_loc,NT,finv[nf-1]);} + filt_seis(section->read,ntr_loc,NT,finv[nf-1]);} /* calculate residuals and L2 Norm */ - residual(sectionread, sectionreadf,sectionvz,sectionvzdiff,ntr_loc,ns,&L2,&L2f); + residual(section->read, section->readf,section->vz,signals->sectionvzdiff,ntr_loc,ns,&L2,&L2f); } @@ -895,23 +900,23 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha nlsamp=1; if(pshot>0){/*only for Hessian wavefields*/ pshot1=pshot; - ntr_loc=rnum_loc[pshot]; + ntr_loc=acq->rnum_loc[pshot]; fprintf(FP,"\nstart Hessian wavefields pshot %d, ntr=%d\n", pshot,ntr); if(ntr_loc>0){ - for(i=1;i<=4;i++) {srcpos_loc_back[i][1]=recpos_loc[i][pshot_loc];srcpos_loc_back[6][1]=1.0;} - wavelet(srcpos_loc_back,ntr_loc,5,sectionvydiff); - if(FILT)filt_seis(sectionvydiff,ntr_loc,NT,finv[nf-1]); + for(i=1;i<=4;i++) {acq->srcpos_loc_back[i][1]=acq->recpos_loc[i][pshot_loc];acq->srcpos_loc_back[6][1]=1.0;} + wavelet(acq->srcpos_loc_back,ntr_loc,5,signals->sectionvydiff); + if(FILT)filt_seis(signals->sectionvydiff,ntr_loc,NT,finv[nf-1]); for(i=1;i<=NT;i++){ - sectionvxdiff[1][i]=0.0; - sectionvzdiff[1][i]=0.0; + signals->sectionvxdiff[1][i]=0.0; + signals->sectionvzdiff[1][i]=0.0; } pshot_loc++; } } /* Initialisieren de Wellenfeldes mit Nullen */ - zero_wavefield(NX,NY,NZ,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,psi_sxx_x,psi_sxy_x,psi_sxz_x,psi_sxy_y,psi_syy_y,psi_syz_y,psi_sxz_z,psi_syz_z,psi_szz_z,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz); + zero_wavefield(NX,NY,NZ,vel,stress,visco_mem,pml_wfd); if(MYID==0) fprintf(FP,"\n ****************************************\n "); @@ -922,46 +927,45 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha time_s_update[nt]=0.0; /* Check if simulation is still stable */ - if (isnan(vy[NY/2][NX/2][NZ/2])) err(" Simulation is unstable !"); /* maybe just breaking the loop would be better */ + if (isnan(vel->vy[NY/2][NX/2][NZ/2])) err(" Simulation is unstable !"); /* maybe just breaking the loop would be better */ /* update of particle velocities */ - time_v_update[nt]+=update_v(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rho,rjp,rkp,rip,srcpos_loc_back,sectionvxdiff,sectionvydiff,sectionvzdiff,ntr_loc,absorb_coeff,1); + time_v_update[nt]+=update_v(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vel,stress,mod_av,acq->srcpos_loc_back,signals,ntr_loc,absorb_coeff,1); - if(ABS_TYPE==1){update_v_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rho,rjp,rkp,rip,srcpos_loc_back,sectionvxdiff,sectionvydiff,sectionvzdiff,ntr_loc,absorb_coeff,1,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half,K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_sxx_x,psi_sxy_x,psi_sxz_x,psi_sxy_y,psi_syy_y,psi_syz_y,psi_sxz_z,psi_syz_z,psi_szz_z);} + if(ABS_TYPE==1){update_v_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vel,stress,mod_av,acq->srcpos_loc_back,signals,ntr_loc,absorb_coeff,1,pml_coeff,pml_wfd);} /* exchange values of particle velocities at grid boundaries between PEs */ - time_v_exchange[nt]+=exchange_v(vx,vy,vz, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec); - /*time_s_update[nt]+=update_s(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,pi,u,uipjp,ujpkp,uipkp,taus,tausipjp,tausjpkp,tausipkp,taup,eta); + time_v_exchange[nt]+=exchange_v(vel, velbuff, req_send, req_rec); + /*time_s_update[nt]+=update_s(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,visco_mem,mod,mod_av); if(ABS_TYPE==1){ - update_s_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,pi,u,uipjp,ujpkp,uipkp,taus,tausipjp,tausjpkp,tausipkp,taup,eta,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half,K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz);}*/ + update_s_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,visco_mem,mod,mod_av,pml_coeff,pml_wfd);}*/ - time_s_update[nt]+=update_s_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,pi,u,uipjp,ujpkp,uipkp); + time_s_update[nt]+=update_s_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,mod,mod_av); if(ABS_TYPE==1){ - update_s_CPML_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,pi,u,uipjp,ujpkp,uipkp,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half,K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz);} + update_s_CPML_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,mod,mod_av,pml_coeff,pml_wfd);} - time_s_exchange[nt]+=exchange_s(stress,syy,szz,sxy,syz,sxz,sbufferlef_to_rig,sbufferrig_to_lef,sbuffertop_to_bot,sbufferbot_to_top,sbufferfro_to_bac,sbufferbac_to_fro, sreq_send, sreq_rec); + time_s_exchange[nt]+=exchange_s(stress,stressbuff, sreq_send, sreq_rec); if(nt%ntast==0&&(METHOD)){ - discfourier(1,NX,1,NY,1,NZ,nt,vx,vy,vz,Fbvx,Fbvy,Fbvz, Fbivx, Fbivy,Fbivz,finv,nf,ntast,pshot1,1); + discfourier(1,NX,1,NY,1,NZ,nt,vel,fourier_vel_back,finv,nf,ntast,pshot1,1); l++; } /* stress free surface ? */ if ((FREE_SURF) && (POS[2]==0)) - /*surface(1,u,pi,taus,taup,eta,stress,syy,szz,sxy,syz,rxx,ryy,rzz,vx,vy,vz);*/ - surface_elastic(1,u,pi,stress,syy,szz,sxy,syz,vx,vy,vz); + /*surface(1,mod,stress,visco_mem,vel);*/ + surface_elastic(1,mod,stress,vel); /* store amplitudes at receivers in sectionvx-sectionvz */ if ((SEISMO) && (ntr>0) && (nt==lsamp)){ - seismo(nlsamp,ntr,recpos_loc,sectionvx,sectionvy,sectionvz, - sectiondiv,sectioncurl,sectionp,vx,vy,vz,stress,syy,szz,pi,u); + seismo(nlsamp,ntr,acq->recpos_loc,section,vel,stress,mod); nlsamp++; lsamp+=NDT; } /* save snapshot in file (backpropagation) */ /*if ((SNAP) && (nt==lsnap) && (nt<=TSNAP2/DT)){ - snap(FP,nt,++nsnap,SNAP_FORMAT,SNAP,vx,vy,vz,stress,syy,szz,u,pi, + snap(FP,nt,++nsnap,SNAP_FORMAT,SNAP,vel,stress,mod, IDX,IDY,IDZ,1,1,1,NX,NY,NZ); lsnap=lsnap+iround(TSNAPINC/DT); } */ @@ -969,32 +973,26 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha }/*end of time loop*/ fprintf(FP,"\n End backpropagation \n"); - /*saveseis(FP,sectionvx,sectionvy,sectionvz,sectionp,sectioncurl,sectiondiv,recpos,recpos_loc,ntr,srcpos,ishot,ns,0,pshot+10 );*/ - /*saveseis(FP,sectionvxdiff,sectionvydiff,sectionvzdiff,sectionp,sectioncurl,sectiondiv,recpos,recpos_loc,ntr,srcpos,ishot,ns,0,pshot+100 );*/ + /*saveseis(FP,section,recpos,recpos_loc,ntr,srcpos,ishot,ns,0,pshot+10 );*/ + /*saveseis(FP,section,recpos,recpos_loc,ntr,srcpos,ishot,ns,0,pshot+100 );*/ MPI_Barrier(MPI_COMM_WORLD); if(!pshot){ - exchange_Fv(Fbvx,Fbvy,Fbvz,nf, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, - bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec,0); - exchange_Fv(Fbivx,Fbivy,Fbivz,nf, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, - bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec,0); + exchange_Fv(fourier_vel_back,nf, velbuff, req_send, req_rec,0); MPI_Barrier(MPI_COMM_WORLD); - gradient_F(NX,NY,NZ,Ffvx,Ffvy,Ffvz,Ffivx,Ffivy,Ffivz,Fbvx,Fbvy,Fbvz,Fbivx,Fbivy,Fbivz,grad1,grad2,grad3,nt,rho,pi,u,finv,nf,iteration); + gradient_F(NX,NY,NZ,fourier_vel_fw,fourier_vel_back,grad,nt,mod,finv,nf,iteration); } } /*hloop*/ if(iteration==1 && HESS && !READ_HESS){ - exchange_Fv(Fbvx,Fbvy,Fbvz,nf, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, - bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec,ntr_hess); - exchange_Fv(Fbivx,Fbivy,Fbivz,nf, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, - bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec,ntr_hess); + exchange_Fv(fourier_vel_back,nf, velbuff, req_send, req_rec,ntr_hess); MPI_Barrier(MPI_COMM_WORLD); - hess_F(NX,NY,NZ,Ffvx,Ffvy,Ffvz,Ffivx,Ffivy,Ffivz,Fbvx,Fbvy,Fbvz, Fbivx,Fbivy,Fbivz, hess1,hess2,hess3,nt,rho, pi, u, finv, nf,ntr_hess); + hess_F(NX,NY,NZ,fourier_vel_fw,fourier_vel_back, hessian,nt,mod, finv, nf,ntr_hess); } hloop=0; ntr_loc=ntr; if(iteration==1 && HESS && !READ_HESS){ for(i=1;i<=4;i++){ - for(j=1;j<=ntr_loc;j++){srcpos_loc_back[i][j]=recpos_loc[i][j]; }}} + for(j=1;j<=ntr_loc;j++){acq->srcpos_loc_back[i][j]=acq->recpos_loc[i][j]; }}} } /*end if(METHOD)*/ }/*end of loop over shots */ @@ -1002,27 +1000,27 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if(METHOD){ /*output Hessian*/ - if(HESS&&iteration==1) outgrad(NX,NY,NZ,hess1,hess2,hess3,finv[0],iteration, HESS_FILE); + if(HESS&&iteration==1) outgrad(NX,NY,NZ,hessian->vp,hessian->vs,hessian->rho,finv[0],iteration, HESS_FILE); /*output "raw" gradient*/ fprintf(FP,"\n raw Gradient: \n"); - outgrad(NX,NY,NZ,grad1,grad2,grad3,finv[0],iteration, GRAD_FILE); + outgrad(NX,NY,NZ,grad->vp,grad->vs,grad->rho,finv[0],iteration, GRAD_FILE); - if(HESS) hess_apply(1,NX,1,NY,1,NZ,grad1,grad2,grad3,hess1,hess2,hess3,finv[0],iteration); + if(HESS) hess_apply(1,NX,1,NY,1,NZ,grad,hessian,finv[0],iteration); /*preconditioning of gradient*/ - precon_grad(NX,NY,NZ,grad1,grad2,grad3,nsrc,srcpos,ntr_glob,recpos,finv[0],iteration,cdf); - outgrad(NX,NY,NZ,grad1,grad2,grad3,finv[0],iteration+1000, GRAD_FILE); + precon_grad(NX,NY,NZ,grad,nsrc,acq->srcpos,ntr_glob,acq->recpos,finv[0],iteration,cdf); + outgrad(NX,NY,NZ,grad->vp,grad->vs,grad->rho,finv[0],iteration+1000, GRAD_FILE); if(LBFGS){ if(it_group>1){ /*lbfgs(grad1, hess1, bfgsscale1, bfgsmod1, bfgsgrad1,iteration);*/ - lbfgs(grad1, grad2, grad3, bfgsscale1, bfgsmod1, bfgsgrad1,it_group); + lbfgs(grad, bfgsscale1, bfgsmod1, bfgsgrad1,it_group); /*lbfgs(grad3, hess3, bfgsscale3, bfgsmod3, bfgsgrad3,iteration);*/ } - else lbfgs_savegrad(grad1,grad2,grad3,bfgsgrad1); + else lbfgs_savegrad(grad,bfgsgrad1); } - if(!LBFGS) conjugate(NX,NY,NZ,grad1,grad2,grad3,gradprior1,gradprior2,gradprior3,gradprior4,gradprior5,gradprior6,beta,iteration,cdf); - outgrad(NX,NY,NZ,grad1,grad2,grad3,finv[0],iteration+2000, GRAD_FILE); + if(!LBFGS) conjugate(NX,NY,NZ,grad,grad_prior1,grad_prior2,beta,iteration,cdf); + outgrad(NX,NY,NZ,grad->vp,grad->vs,grad->rho,finv[0],iteration+2000, GRAD_FILE); /*---------------------------------------steplength calculation----------------------------------------------------------------*/ @@ -1038,11 +1036,11 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if(MYID==0) fprintf(FI,"\n steptest %d: steplength=%e \n",steptest ,step[steptest]); - cpmodel(NX,NY,NZ,rho,pi,u,testrho,testpi,testu); - modelupdate(NX,NY,NZ,grad1,grad2,grad3,testrho,testpi,testu,bfgsmod1, step[steptest],beta,it_group); - matcopy(testrho,testpi,testu,taus,taup); - if (FREE_SURF)constant_boundary(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],testpi, testu, testrho); - av_mat(testrho,testpi,testu,taus,taup,uipjp,ujpkp,uipkp,tausipjp,tausjpkp,tausipkp,rjp,rkp,rip); + cpmodel(NX,NY,NZ,mod,testmod); + modelupdate(NX,NY,NZ,grad,testmod,bfgsmod1, step[steptest],beta,it_group); + matcopy(testmod); + if (FREE_SURF)constant_boundary(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],testmod); + av_mat(mod,mod_av); L2=0.0; L2f=0.0; @@ -1054,19 +1052,19 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha fprintf(FP,"\n ********** Starting simulation for shot %d of %d ********** \n",ishot1,nshots); if (RUN_MULTIPLE_SHOTS){ - nsrc_loc=snum_loc[ishot1]; + nsrc_loc=acq->snum_loc[ishot1]; if(nsrc_loc>0){ - for (nt=4;nt<=7;nt++) srcpos_loc[nt][1]=srcpos[nt][ishot1]; - srcpos_loc[1][1]=(float)(((iround(srcpos[1][ishot1]/DX)-1)%IENDX)+1); - srcpos_loc[2][1]=(float)(((iround(srcpos[2][ishot1]/DY)-1)%IENDY)+1); - srcpos_loc[3][1]=(float)(((iround(srcpos[3][ishot1]/DZ)-1)%IENDZ)+1); + for (nt=4;nt<=7;nt++) acq->srcpos_loc[nt][1]=acq->srcpos[nt][ishot1]; + acq->srcpos_loc[1][1]=(float)(((iround(acq->srcpos[1][ishot1]/DX)-1)%IENDX)+1); + acq->srcpos_loc[2][1]=(float)(((iround(acq->srcpos[2][ishot1]/DY)-1)%IENDY)+1); + acq->srcpos_loc[3][1]=(float)(((iround(acq->srcpos[3][ishot1]/DZ)-1)%IENDZ)+1); } } if(nsrc_loc>0){ - wavelet(srcpos_loc,nsrc_loc,SOURCE_SHAPE,signals); - if(FILT==1) filt_seis(signals,nsrc_loc,NT,finv[nf-1]);} - zero_wavefield(NX,NY,NZ,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,psi_sxx_x,psi_sxy_x,psi_sxz_x,psi_sxy_y,psi_syy_y,psi_syz_y,psi_sxz_z,psi_syz_z,psi_szz_z,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz); + wavelet(acq->srcpos_loc,nsrc_loc,SOURCE_SHAPE,signals->fw); + if(FILT==1) filt_seis(signals->fw,nsrc_loc,NT,finv[nf-1]);} + zero_wavefield(NX,NY,NZ,vel,stress,visco_mem,pml_wfd); lsamp=NDTSHIFT+1; nlsamp=1; @@ -1081,46 +1079,46 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha time_v_update[nt]=0.0; time_s_update[nt]=0.0; - if (isnan(vy[NY/2][NX/2][NZ/2])) err(" Simulation is unstable !"); + if (isnan(vel->vy[NY/2][NX/2][NZ/2])) err(" Simulation is unstable !"); - time_v_update[nt]+=update_v(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,testrho,rjp, rkp,rip,srcpos_loc,signals,signals,signals,nsrc_loc,absorb_coeff,0); + time_v_update[nt]+=update_v(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vel,stress,mod_av,acq->srcpos_loc,signals,nsrc_loc,absorb_coeff,0); - if(ABS_TYPE==1){ update_v_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vx,vy,vz,stress,syy,szz,sxy,syz,sxz,testrho,rjp,rkp,rip,srcpos_loc,signals,signals,signals,nsrc_loc,absorb_coeff,0,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half, K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_sxx_x,psi_sxy_x,psi_sxz_x,psi_sxy_y,psi_syy_y,psi_syz_y,psi_sxz_z,psi_syz_z,psi_szz_z);} + if(ABS_TYPE==1){update_v_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],nt,vel,stress,mod_av,acq->srcpos_loc,signals,nsrc_loc,absorb_coeff,0,pml_coeff,pml_wfd);} ; - time_v_exchange[nt]+=exchange_v(vx,vy,vz, bufferlef_to_rig, bufferrig_to_lef, buffertop_to_bot, bufferbot_to_top, bufferfro_to_bac, bufferbac_to_fro, req_send, req_rec); + time_v_exchange[nt]+=exchange_v(vel, velbuff, req_send, req_rec); - /*time_s_update[nt]+=update_s(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,testpi,testu,uipjp,ujpkp,uipkp,taus,tausipjp,tausjpkp,tausipkp,taup,eta); + /*time_s_update[nt]+=update_s(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,visco_mem,testmod,mod_av); if(ABS_TYPE==1){ - update_s_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,rxx,ryy,rzz,rxy,ryz,rxz,testpi,testu,uipjp,ujpkp,uipkp,taus,tausipjp,tausjpkp,tausipkp,taup,eta,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half,K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz);}*/ + update_s_CPML(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,visco_mem,testmod,mod_av,pml_coeff,pml_wfd);}*/ - time_s_update[nt]+=update_s_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,testpi,testu,uipjp,ujpkp,uipkp); + time_s_update[nt]+=update_s_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,testmod,mod_av); - if(ABS_TYPE==1){ update_s_CPML_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vx,vy,vz,stress,syy,szz,sxy,syz,sxz,testpi,testu,uipjp,ujpkp,uipkp,K_x,a_x,b_x,K_x_half,a_x_half,b_x_half,K_y,a_y,b_y,K_y_half,a_y_half,b_y_half,K_z,a_z,b_z,K_z_half,a_z_half,b_z_half,psi_vxx,psi_vyx,psi_vzx,psi_vxy,psi_vyy,psi_vzy,psi_vxz,psi_vyz,psi_vzz);} + if(ABS_TYPE==1){update_s_CPML_elastic(xb[0],xb[1],yb[0],yb[1],zb[0],zb[1],vel,stress,testmod,mod_av,pml_coeff,pml_wfd);} - psource(nt,stress,syy,szz,srcpos_loc,signals,nsrc_loc); + psource(nt,stress,acq->srcpos_loc,signals->fw,nsrc_loc); - time_s_exchange[nt]+=exchange_s(stress,syy,szz,sxy,syz,sxz,sbufferlef_to_rig,sbufferrig_to_lef,sbuffertop_to_bot,sbufferbot_to_top,sbufferfro_to_bac,sbufferbac_to_fro, sreq_send, sreq_rec); + time_s_exchange[nt]+=exchange_s(stress,stressbuff, sreq_send, sreq_rec); if ((FREE_SURF) && (POS[2]==0)) - /*surface(1,testu,testpi,taus,taup,eta,stress,syy,szz,sxy,syz,rxx,ryy,rzz,vx,vy,vz);*/ - surface_elastic(1,u,pi,stress,syy,szz,sxy,syz,vx,vy,vz); + /*surface(1,testmod,stress,visco_mem,vel);*/ + surface_elastic(1,testmod,stress,vel); if ((SEISMO) && (ntr>0) && (nt==lsamp)){ - seismo(nlsamp,ntr,recpos_loc,sectionvx,sectionvy,sectionvz,sectiondiv,sectioncurl,sectionp,vx,vy,vz,stress,syy,szz,testpi,testu); + seismo(nlsamp,ntr,acq->recpos_loc,section,vel,stress,testmod); nlsamp++; lsamp+=NDT; } } if(ntr_loc>0){ - readseis(ishot1, sectionread, sectionreadf, ntr_loc, ns,1); - if(FILT==1){filt_seis(sectionread,ntr_loc,NT,finv[nf-1]);} - residual(sectionread, sectionreadf,sectionvx,sectionvxdiff,ntr_loc,ns,&L2,&L2f); - readseis(ishot1, sectionread, sectionreadf, ntr_loc, ns,2); - if(FILT==1){filt_seis(sectionread,ntr_loc,NT,finv[nf-1]);} - residual(sectionread, sectionreadf,sectionvy,sectionvydiff,ntr_loc,ns,&L2,&L2f); - readseis(ishot1, sectionread, sectionreadf, ntr_loc, ns,3); - if(FILT==1){filt_seis(sectionread,ntr_loc,NT,finv[nf-1]);} - residual(sectionread, sectionreadf,sectionvz,sectionvzdiff,ntr_loc,ns,&L2,&L2f); + readseis(ishot1, section->read, section->readf, ntr_loc, ns,1); + if(FILT==1){filt_seis(section->read,ntr_loc,NT,finv[nf-1]);} + residual(section->read, section->readf,section->vx,signals->sectionvxdiff,ntr_loc,ns,&L2,&L2f); + readseis(ishot1, section->read, section->readf, ntr_loc, ns,2); + if(FILT==1){filt_seis(section->read,ntr_loc,NT,finv[nf-1]);} + residual(section->read, section->readf,section->vy,signals->sectionvydiff,ntr_loc,ns,&L2,&L2f); + readseis(ishot1, section->read, section->readf, ntr_loc, ns,3); + if(FILT==1){filt_seis(section->read,ntr_loc,NT,finv[nf-1]);} + residual(section->read, section->readf,section->vz,signals->sectionvzdiff,ntr_loc,ns,&L2,&L2f); } } /*ishot*/ @@ -1144,10 +1142,10 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if(MYID==0)fprintf(FP,"\n stepength calculation finished\n"); - modelupdate(NX,NY,NZ,grad1,grad2,grad3,rho,pi,u,bfgsmod1,step[3],beta,it_group); + modelupdate(NX,NY,NZ,grad,mod,bfgsmod1,step[3],beta,it_group); if(MYID==0)fprintf(FP,"\n Modeloutput \n"); - outmod(NX,NY,NZ,rho,pi,u,iteration); + outmod(NX,NY,NZ,mod,iteration); if(MYID==0){ time4=MPI_Wtime(); @@ -1164,72 +1162,72 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if(ABS_TYPE==1 && FDORDER==2){l=2;} if(POS[2]==0){ - free_f3tensor(vx,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(vy,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(vz,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(sxy,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(syz,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(vel->vx,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(vel->vy,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(vel->vz,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(stress->sxy,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(stress->syz,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); if(METHOD){ - free_f4tensor(Ffvx,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffvy,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffvz,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbvx,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbvy,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbvz,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffivx,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffivy,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffivz,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbivx,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbivy,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbivz,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvx_re,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvy_re,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvz_re,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvx_re,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvy_re,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvz_re,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvx_im,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvy_im,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvz_im,1,NFMAX,0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvx_im,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvy_im,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvz_im,1,NFMAX*(ntr_hess+1),0-FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); } } if(POS[2]>0){ - free_f3tensor(vx,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(vy,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(vz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(sxy,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(syz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(vel->vx,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(vel->vy,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(vel->vz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(stress->sxy,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(stress->syz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); /*free_f4tensor(fvx,1,NT,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); free_f4tensor(fvy,1,NT,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); free_f4tensor(fvz,1,NT,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2);*/ if(METHOD){ - free_f4tensor(Ffvx,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffvy,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffvz,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbvx,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbvy,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbvz,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffivx,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffivy,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Ffivz,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbivx,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbivy,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f4tensor(Fbivz,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvx_re,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvy_re,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvz_re,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvx_re,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvy_re,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvz_re,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvx_im,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvy_im,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_fw->Fvz_im,1,NFMAX,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvx_im,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvy_im,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f4tensor(fourier_vel_back->Fvz_im,1,NFMAX*(ntr_hess+1),1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); } } - free_f3tensor(sxz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(stress->sxz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); free_f3tensor(stress->sxx,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(syy,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); - free_f3tensor(szz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(stress->syy,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); + free_f3tensor(stress->szz,1-l*FDORDER/2,NY+l*FDORDER/2,1-l*FDORDER/2,NX+l*FDORDER/2,1-l*FDORDER/2,NZ+l*FDORDER/2); if(METHOD){ - free_f3tensor(grad1,1,NX,1,NY,1,NZ); - free_f3tensor(grad2,1,NX,1,NY,1,NZ); - free_f3tensor(grad3,1,NX,1,NY,1,NZ); - free_f3tensor(gradprior1,1,NX,1,NY,1,NZ); - free_f3tensor(gradprior2,1,NX,1,NY,1,NZ); - free_f3tensor(gradprior3,1,NX,1,NY,1,NZ); - free_f3tensor(gradprior4,1,NX,1,NY,1,NZ); - free_f3tensor(gradprior5,1,NX,1,NY,1,NZ); - free_f3tensor(gradprior6,1,NX,1,NY,1,NZ); + free_f3tensor(grad->vp,1,NX,1,NY,1,NZ); + free_f3tensor(grad->vs,1,NX,1,NY,1,NZ); + free_f3tensor(grad->rho,1,NX,1,NY,1,NZ); + free_f3tensor(grad_prior1->vp,1,NX,1,NY,1,NZ); + free_f3tensor(grad_prior1->vs,1,NX,1,NY,1,NZ); + free_f3tensor(grad_prior1->rho,1,NX,1,NY,1,NZ); + free_f3tensor(grad_prior2->vp,1,NX,1,NY,1,NZ); + free_f3tensor(grad_prior2->vs,1,NX,1,NY,1,NZ); + free_f3tensor(grad_prior2->rho,1,NX,1,NY,1,NZ); if(HESS){ - free_f3tensor(hess1,1,NY,1,NX,1,NZ); - free_f3tensor(hess2,1,NY,1,NX,1,NZ); - free_f3tensor(hess3,1,NY,1,NX,1,NZ); + free_f3tensor(hessian->vp,1,NY,1,NX,1,NZ); + free_f3tensor(hessian->vs,1,NY,1,NX,1,NZ); + free_f3tensor(hessian->rho,1,NY,1,NX,1,NZ); } } @@ -1241,140 +1239,143 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha if(ABS_TYPE==1){ - free_vector(K_x,1,2*FW); - free_vector(alpha_prime_x,1,2*FW); - free_vector(a_x,1,2*FW); - free_vector(b_x,1,2*FW); - free_vector(K_x_half,1,2*FW); - free_vector(alpha_prime_x_half,1,2*FW); - free_vector(a_x_half,1,2*FW); - free_vector(b_x_half,1,2*FW); - - free_vector(K_y,1,2*FW); - free_vector(alpha_prime_y,1,2*FW); - free_vector(a_y,1,2*FW); - free_vector(b_y,1,2*FW); - free_vector(K_y_half,1,2*FW); - free_vector(alpha_prime_y_half,1,2*FW); - free_vector(a_y_half,1,2*FW); - free_vector(b_y_half,1,2*FW); - - free_vector(K_z,1,2*FW); - free_vector(alpha_prime_z,1,2*FW); - free_vector(a_z,1,2*FW); - free_vector(b_z,1,2*FW); - free_vector(K_z_half,1,2*FW); - free_vector(alpha_prime_z_half,1,2*FW); - free_vector(a_z_half,1,2*FW); - free_vector(b_z_half,1,2*FW); - - free_f3tensor(psi_sxx_x,1,NY,1,2*FW,1,NZ); - free_f3tensor(psi_syy_y,1,2*FW,1,NX,1,NZ); - free_f3tensor(psi_szz_z,1,NY,1,NX,1,2*FW); - free_f3tensor(psi_sxy_x,1,NY,1,2*FW,1,NZ); - free_f3tensor(psi_sxy_y,1,2*FW,1,NX,1,NZ); - free_f3tensor(psi_sxz_x,1,NY,1,2*FW,1,NZ); - free_f3tensor(psi_sxz_z,1,NY,1,NX,1,2*FW); - free_f3tensor(psi_syz_y,1,2*FW,1,NX,1,NZ); - free_f3tensor(psi_syz_z,1,NY,1,NX,1,2*FW); - - free_f3tensor(psi_vxx,1,NY,1,2*FW,1,NZ); - free_f3tensor(psi_vyy,1,2*FW,1,NX,1,NZ); - free_f3tensor(psi_vzz,1,NY,1,NX,1,2*FW); - free_f3tensor(psi_vxy,1,2*FW,1,NX,1,NZ); - free_f3tensor(psi_vyx,1,NY,1,2*FW,1,NZ); - free_f3tensor(psi_vxz,1,NY,1,NX,1,2*FW); - free_f3tensor(psi_vzx,1,NY,1,2*FW,1,NZ); - free_f3tensor(psi_vyz,1,NY,1,NX,1,2*FW); - free_f3tensor(psi_vzy,1,2*FW,1,NX,1,NZ); + free_vector(pml_coeff->K_x,1,2*FW); + free_vector(pml_coeff->alpha_prime_x,1,2*FW); + free_vector(pml_coeff->a_x,1,2*FW); + free_vector(pml_coeff->b_x,1,2*FW); + free_vector(pml_coeff->K_x_half,1,2*FW); + free_vector(pml_coeff->alpha_prime_x_half,1,2*FW); + free_vector(pml_coeff->a_x_half,1,2*FW); + free_vector(pml_coeff->b_x_half,1,2*FW); + + free_vector(pml_coeff->K_y,1,2*FW); + free_vector(pml_coeff->alpha_prime_y,1,2*FW); + free_vector(pml_coeff->a_y,1,2*FW); + free_vector(pml_coeff->b_y,1,2*FW); + free_vector(pml_coeff->K_y_half,1,2*FW); + free_vector(pml_coeff->alpha_prime_y_half,1,2*FW); + free_vector(pml_coeff->a_y_half,1,2*FW); + free_vector(pml_coeff->b_y_half,1,2*FW); + + free_vector(pml_coeff->K_z,1,2*FW); + free_vector(pml_coeff->alpha_prime_z,1,2*FW); + free_vector(pml_coeff->a_z,1,2*FW); + free_vector(pml_coeff->b_z,1,2*FW); + free_vector(pml_coeff->K_z_half,1,2*FW); + free_vector(pml_coeff->alpha_prime_z_half,1,2*FW); + free_vector(pml_coeff->a_z_half,1,2*FW); + free_vector(pml_coeff->b_z_half,1,2*FW); + + free_f3tensor(pml_wfd->psi_sxx_x,1,NY,1,2*FW,1,NZ); + free_f3tensor(pml_wfd->psi_syy_y,1,2*FW,1,NX,1,NZ); + free_f3tensor(pml_wfd->psi_szz_z,1,NY,1,NX,1,2*FW); + free_f3tensor(pml_wfd->psi_sxy_x,1,NY,1,2*FW,1,NZ); + free_f3tensor(pml_wfd->psi_sxy_y,1,2*FW,1,NX,1,NZ); + free_f3tensor(pml_wfd->psi_sxz_x,1,NY,1,2*FW,1,NZ); + free_f3tensor(pml_wfd->psi_sxz_z,1,NY,1,NX,1,2*FW); + free_f3tensor(pml_wfd->psi_syz_y,1,2*FW,1,NX,1,NZ); + free_f3tensor(pml_wfd->psi_syz_z,1,NY,1,NX,1,2*FW); + + free_f3tensor(pml_wfd->psi_vxx,1,NY,1,2*FW,1,NZ); + free_f3tensor(pml_wfd->psi_vyy,1,2*FW,1,NX,1,NZ); + free_f3tensor(pml_wfd->psi_vzz,1,NY,1,NX,1,2*FW); + free_f3tensor(pml_wfd->psi_vxy,1,2*FW,1,NX,1,NZ); + free_f3tensor(pml_wfd->psi_vyx,1,NY,1,2*FW,1,NZ); + free_f3tensor(pml_wfd->psi_vxz,1,NY,1,NX,1,2*FW); + free_f3tensor(pml_wfd->psi_vzx,1,NY,1,2*FW,1,NZ); + free_f3tensor(pml_wfd->psi_vyz,1,NY,1,NX,1,2*FW); + free_f3tensor(pml_wfd->psi_vzy,1,2*FW,1,NX,1,NZ); } if(L){ - free_f3tensor(rxx,1,NY,1,NX,1,NZ); - free_f3tensor(ryy,1,NY,1,NX,1,NZ); - free_f3tensor(rzz,1,NY,1,NX,1,NZ); - free_f3tensor(rxy,1,NY,1,NX,1,NZ); - free_f3tensor(ryz,1,NY,1,NX,1,NZ); - free_f3tensor(rxz,1,NY,1,NX,1,NZ); - free_f3tensor(taus,0,NY+1,0,NX+1,0,NZ+1); - free_f3tensor(taup,0,NY+1,0,NX+1,0,NZ+1); - free_vector(eta,1,L); - free_f3tensor(tausipjp,1,NY,1,NX,1,NZ); - free_f3tensor(tausjpkp,1,NY,1,NX,1,NZ); - free_f3tensor(tausipkp,1,NY,1,NX,1,NZ); + free_f3tensor(visco_mem->rxx,1,NY,1,NX,1,NZ); + free_f3tensor(visco_mem->ryy,1,NY,1,NX,1,NZ); + free_f3tensor(visco_mem->rzz,1,NY,1,NX,1,NZ); + free_f3tensor(visco_mem->rxy,1,NY,1,NX,1,NZ); + free_f3tensor(visco_mem->ryz,1,NY,1,NX,1,NZ); + free_f3tensor(visco_mem->rxz,1,NY,1,NX,1,NZ); + free_f3tensor(mod->taus,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(mod->taup,0,NY+1,0,NX+1,0,NZ+1); + + free_f3tensor(testmod->taus,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(testmod->taup,0,NY+1,0,NX+1,0,NZ+1); + + free_vector(mod->eta,1,L); + free_f3tensor(mod_av->tausipjp,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->tausjpkp,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->tausipkp,1,NY,1,NX,1,NZ); } - free_f3tensor(rho,0,NY+1,0,NX+1,0,NZ+1); - free_f3tensor(pi,0,NY+1,0,NX+1,0,NZ+1); - free_f3tensor(u,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(mod->rho,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(mod->pi,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(mod->u,0,NY+1,0,NX+1,0,NZ+1); free_f3tensor(absorb_coeff,1,NY,1,NX,1,NZ); - free_f3tensor(testrho ,0,NY+1,0,NX+1,0,NZ+1); - free_f3tensor(testpi,0,NY+1,0,NX+1,0,NZ+1); - free_f3tensor(testu,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(testmod->rho ,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(testmod->pi,0,NY+1,0,NX+1,0,NZ+1); + free_f3tensor(testmod->u,0,NY+1,0,NX+1,0,NZ+1); /* averaged material parameters */ - free_f3tensor(uipjp,1,NY,1,NX,1,NZ); - free_f3tensor(ujpkp,1,NY,1,NX,1,NZ); - free_f3tensor(uipkp,1,NY,1,NX,1,NZ); - free_f3tensor(rjp,1,NY,1,NX,1,NZ); - free_f3tensor(rkp,1,NY,1,NX,1,NZ); - free_f3tensor(rip,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->uipjp,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->ujpkp,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->uipkp,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->rjp,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->rkp,1,NY,1,NX,1,NZ); + free_f3tensor(mod_av->rip,1,NY,1,NX,1,NZ); - free_f3tensor(bufferlef_to_rig,1,NY,1,NZ,1,nf1); - free_f3tensor(bufferrig_to_lef,1,NY,1,NZ,1,nf2); - free_f3tensor(buffertop_to_bot,1,NX,1,NZ,1,nf1); - free_f3tensor(bufferbot_to_top,1,NX,1,NZ,1,nf2); - free_f3tensor(bufferfro_to_bac,1,NY,1,NX,1,nf1); - free_f3tensor(bufferbac_to_fro,1,NY,1,NX,1,nf2); - - free_f3tensor(sbufferlef_to_rig,1,NY,1,NZ,1,nf2); - free_f3tensor(sbufferrig_to_lef,1,NY,1,NZ,1,nf1); - free_f3tensor(sbuffertop_to_bot,1,NX,1,NZ,1,nf2); - free_f3tensor(sbufferbot_to_top,1,NX,1,NZ,1,nf1); - free_f3tensor(sbufferfro_to_bac,1,NY,1,NX,1,nf2); - free_f3tensor(sbufferbac_to_fro,1,NY,1,NX,1,nf1); + free_f3tensor(velbuff->lef_to_rig,1,NY,1,NZ,1,nf1); + free_f3tensor(velbuff->rig_to_lef,1,NY,1,NZ,1,nf2); + free_f3tensor(velbuff->top_to_bot,1,NX,1,NZ,1,nf1); + free_f3tensor(velbuff->bot_to_top,1,NX,1,NZ,1,nf2); + free_f3tensor(velbuff->fro_to_bac,1,NY,1,NX,1,nf1); + free_f3tensor(velbuff->bac_to_fro,1,NY,1,NX,1,nf2); + + free_f3tensor(stressbuff->lef_to_rig,1,NY,1,NZ,1,nf2); + free_f3tensor(stressbuff->rig_to_lef,1,NY,1,NZ,1,nf1); + free_f3tensor(stressbuff->top_to_bot,1,NX,1,NZ,1,nf2); + free_f3tensor(stressbuff->bot_to_top,1,NX,1,NZ,1,nf1); + free_f3tensor(stressbuff->fro_to_bac,1,NY,1,NX,1,nf2); + free_f3tensor(stressbuff->bac_to_fro,1,NY,1,NX,1,nf1); /* free memory for global source positions */ - free_imatrix(recpos,1,3,1,ntr_glob); + free_imatrix(acq->recpos,1,3,1,ntr_glob); /* free memory for source positions */ if (nsrc_loc>0){ - if(RUN_MULTIPLE_SHOTS){ free_matrix(signals,1,1,1,NT); - free_matrix(srcpos_loc,1,7,1,1);} - else { free_matrix(signals,1,nsrc_loc,1,NT); - free_matrix(srcpos_loc,1,7,1,nsrc_loc);} + if(RUN_MULTIPLE_SHOTS){ free_matrix(signals->fw,1,1,1,NT); + free_matrix(acq->srcpos_loc,1,7,1,1);} + else { free_matrix(signals->fw,1,nsrc_loc,1,NT); + free_matrix(acq->srcpos_loc,1,7,1,nsrc_loc);} } - if(METHOD)free_matrix(srcpos_loc_back,1,7,1,ntr); - free_matrix(srcpos,1,7,1,nsrc); - free_matrix(srcpos1,1,6,1,1); - free_ivector(snum_loc,1,nsrc); - free_ivector(rnum_loc,1,ntr); + if(METHOD)free_matrix(acq->srcpos_loc_back,1,7,1,ntr); + free_matrix(acq->srcpos,1,7,1,nsrc); + free_ivector(acq->snum_loc,1,nsrc); + free_ivector(acq->rnum_loc,1,ntr); if ((ntr>0) && (SEISMO)){ - free_imatrix(recpos_loc,1,4,1,ntr); + free_imatrix(acq->recpos_loc,1,4,1,ntr); switch (SEISMO){ case 1 : /* particle velocities only */ - free_matrix(sectionvx,1,ntr,1,ns); - free_matrix(sectionvy,1,ntr,1,ns); - free_matrix(sectionvz,1,ntr,1,ns); + free_matrix(section->vx,1,ntr,1,ns); + free_matrix(section->vy,1,ntr,1,ns); + free_matrix(section->vz,1,ntr,1,ns); break; case 2 : /* pressure only */ - free_matrix(sectionp,1,ntr,1,ns); + free_matrix(section->p,1,ntr,1,ns); break; case 3 : /* curl and div only */ - free_matrix(sectioncurl,1,ntr,1,ns); - free_matrix(sectiondiv,1,ntr,1,ns); + free_matrix(section->curl,1,ntr,1,ns); + free_matrix(section->div,1,ntr,1,ns); break; case 4 : /* everything */ - free_matrix(sectionvx,1,ntr,1,ns); - free_matrix(sectionvy,1,ntr,1,ns); - free_matrix(sectionvz,1,ntr,1,ns); - free_matrix(sectionp,1,ntr,1,ns); - free_matrix(sectioncurl,1,ntr,1,ns); - free_matrix(sectiondiv,1,ntr,1,ns); + free_matrix(section->vx,1,ntr,1,ns); + free_matrix(section->vy,1,ntr,1,ns); + free_matrix(section->vz,1,ntr,1,ns); + free_matrix(section->p,1,ntr,1,ns); + free_matrix(section->curl,1,ntr,1,ns); + free_matrix(section->div,1,ntr,1,ns); break; } @@ -1382,11 +1383,11 @@ CPML_coeff(K_x,alpha_prime_x,a_x,b_x,K_x_half,alpha_prime_x_half,a_x_half,b_x_ha /* free inversion variables */ - free_matrix(sectionread,1,ntr_glob,1,ns); - free_matrix(sectionreadf,1,ntr_glob,1,1); - free_matrix(sectionvxdiff,1,ntr_glob,1,ns); - free_matrix(sectionvydiff,1,ntr_glob,1,ns); - free_matrix(sectionvzdiff,1,ntr_glob,1,ns); + free_matrix(section->read,1,ntr_glob,1,ns); + free_matrix(section->readf,1,ntr_glob,1,1); + free_matrix(signals->sectionvxdiff,1,ntr_glob,1,ns); + free_matrix(signals->sectionvydiff,1,ntr_glob,1,ns); + free_matrix(signals->sectionvzdiff,1,ntr_glob,1,ns); /* de-allocate buffer for messages */ MPI_Buffer_detach(buff_addr,&buffsize); diff --git a/src/lbfgs.c b/src/lbfgs.c index 3b9a348..74dc76e 100644 --- a/src/lbfgs.c +++ b/src/lbfgs.c @@ -23,7 +23,7 @@ --------------------------------------------------------------------------*/ #include "fd.h" -void lbfgs(float ***grad1, float ***grad2, float ***grad3, float *bfgsscale, float **bfgsmod, float **bfgsgrad, int iteration){ +void lbfgs(st_gradient *grad, float *bfgsscale, float **bfgsmod, float **bfgsgrad, int iteration){ int m=0,v=0,w=0; int i,j,k,l; @@ -53,8 +53,8 @@ void lbfgs(float ***grad1, float ***grad2, float ***grad3, float *bfgsscale, flo for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ l++; - bfgsgrad[w][l]+=-grad1[j][i][k]; - q[l]=grad1[j][i][k]; + bfgsgrad[w][l]+=-grad->vp[j][i][k]; + q[l]=grad->vp[j][i][k]; } } } @@ -64,8 +64,8 @@ void lbfgs(float ***grad1, float ***grad2, float ***grad3, float *bfgsscale, flo for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ l++; - bfgsgrad[w][l]+=-grad2[j][i][k]; - q[l]=grad2[j][i][k]; + bfgsgrad[w][l]+=-grad->vs[j][i][k]; + q[l]=grad->vs[j][i][k]; } } } @@ -159,8 +159,8 @@ void lbfgs(float ***grad1, float ***grad2, float ***grad3, float *bfgsscale, flo for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ l++; /*w=(j-1)*Nx*Nz+(i-1)*Nz+k*/ - bfgsgrad[w][l]=grad1[j][i][k]; - grad1[j][i][k]=q[l]; + bfgsgrad[w][l]=grad->vp[j][i][k]; + grad->vp[j][i][k]=q[l]; } } } @@ -170,8 +170,8 @@ void lbfgs(float ***grad1, float ***grad2, float ***grad3, float *bfgsscale, flo for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ l++; /*w=(j-1)*Nx*Nz+(i-1)*Nz+k*/ - bfgsgrad[w][l]=grad2[j][i][k]; - grad2[j][i][k]=q[l]; + bfgsgrad[w][l]=grad->vs[j][i][k]; + grad->vs[j][i][k]=q[l]; } } } diff --git a/src/lbfgs_save.c b/src/lbfgs_save.c index 6131fde..bf1254c 100644 --- a/src/lbfgs_save.c +++ b/src/lbfgs_save.c @@ -22,7 +22,7 @@ --------------------------------------------------------------------------------------*/ #include "fd.h" -void lbfgs_savegrad(float ***grad1, float ***grad2, float ***grad3,float **bfgsgrad1){ +void lbfgs_savegrad(st_gradient *grad,float **bfgsgrad1){ int d,i,j,k; extern int NX,NY, NZ, NUMPAR; @@ -33,8 +33,8 @@ void lbfgs_savegrad(float ***grad1, float ***grad2, float ***grad3,float **bfgsg for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ d++; - bfgsgrad1[1][d]=+grad1[j][i][k]; - /*bfgsgrad3[1][d]=+grad3[j][i][k];*/ + bfgsgrad1[1][d]=+grad->vp[j][i][k]; + /*bfgsgrad3[1][d]=+grad->rho[j][i][k];*/ } } @@ -45,7 +45,7 @@ void lbfgs_savegrad(float ***grad1, float ***grad2, float ***grad3,float **bfgsg for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ d++; - bfgsgrad1[1][d]=+grad2[j][i][k]; + bfgsgrad1[1][d]=+grad->vs[j][i][k]; } } } diff --git a/src/matcopy.c b/src/matcopy.c index fff083e..ee7538f 100644 --- a/src/matcopy.c +++ b/src/matcopy.c @@ -28,8 +28,7 @@ #include "fd.h" -void matcopy(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup){ +void matcopy(st_model *mod){ extern int MYID, NX, NY, NZ, INDEX[7],L,VERBOSE; @@ -67,13 +66,13 @@ float *** taus, float *** taup){ for (k=0;k<=NZ+1;k++){ /* storage of top of local volume into buffer */ - buffertop_to_bot[i][k][1] = rho[1][i][k]; - buffertop_to_bot[i][k][2] = pi[1][i][k]; - buffertop_to_bot[i][k][3] = u[1][i][k]; + buffertop_to_bot[i][k][1] = mod->rho[1][i][k]; + buffertop_to_bot[i][k][2] = mod->pi[1][i][k]; + buffertop_to_bot[i][k][3] = mod->u[1][i][k]; if(L){ - buffertop_to_bot[i][k][4] = taus[1][i][k]; - buffertop_to_bot[i][k][5] = taup[1][i][k]; + buffertop_to_bot[i][k][4] = mod->taus[1][i][k]; + buffertop_to_bot[i][k][5] = mod->taup[1][i][k]; } } } @@ -84,13 +83,13 @@ float *** taus, float *** taup){ /* storage of bottom of local volume into buffer */ - bufferbot_to_top[i][k][1] = rho[NY][i][k]; - bufferbot_to_top[i][k][2] = pi[NY][i][k]; - bufferbot_to_top[i][k][3] = u[NY][i][k]; + bufferbot_to_top[i][k][1] = mod->rho[NY][i][k]; + bufferbot_to_top[i][k][2] = mod->pi[NY][i][k]; + bufferbot_to_top[i][k][3] = mod->u[NY][i][k]; if(L){ - bufferbot_to_top[i][k][4] = taus[NY][i][k]; - bufferbot_to_top[i][k][5] = taup[NY][i][k]; + bufferbot_to_top[i][k][4] = mod->taus[NY][i][k]; + bufferbot_to_top[i][k][5] = mod->taup[NY][i][k]; } } @@ -111,12 +110,12 @@ float *** taus, float *** taup){ for (i=0;i<=NX+1;i++){ for (k=0;k<=NZ+1;k++){ - rho[NY+1][i][k] = buffertop_to_bot[i][k][1]; - pi[NY+1][i][k] = buffertop_to_bot[i][k][2]; - u[NY+1][i][k] = buffertop_to_bot[i][k][3]; + mod->rho[NY+1][i][k] = buffertop_to_bot[i][k][1]; + mod->pi[NY+1][i][k] = buffertop_to_bot[i][k][2]; + mod->u[NY+1][i][k] = buffertop_to_bot[i][k][3]; if(L){ - taus[NY+1][i][k] = buffertop_to_bot[i][k][4]; - taup[NY+1][i][k] = buffertop_to_bot[i][k][5]; + mod->taus[NY+1][i][k] = buffertop_to_bot[i][k][4]; + mod->taup[NY+1][i][k] = buffertop_to_bot[i][k][5]; } @@ -126,12 +125,12 @@ float *** taus, float *** taup){ for (i=0;i<=NX+1;i++){ for (k=0;k<=NZ+1;k++){ - rho[0][i][k] = bufferbot_to_top[i][k][1]; - pi[0][i][k] = bufferbot_to_top[i][k][2]; - u[0][i][k] = bufferbot_to_top[i][k][3]; + mod->rho[0][i][k] = bufferbot_to_top[i][k][1]; + mod->pi[0][i][k] = bufferbot_to_top[i][k][2]; + mod->u[0][i][k] = bufferbot_to_top[i][k][3]; if(L){ - taus[0][i][k] = bufferbot_to_top[i][k][4]; - taup[0][i][k] = bufferbot_to_top[i][k][5]; + mod->taus[0][i][k] = bufferbot_to_top[i][k][4]; + mod->taup[0][i][k] = bufferbot_to_top[i][k][5]; } } } @@ -147,12 +146,12 @@ float *** taus, float *** taup){ /* storage of left edge of local volume into buffer */ - bufferlef_to_rig[j][k][1] = rho[j][1][k]; - bufferlef_to_rig[j][k][2] = pi[j][1][k]; - bufferlef_to_rig[j][k][3] = u[j][1][k]; + bufferlef_to_rig[j][k][1] = mod->rho[j][1][k]; + bufferlef_to_rig[j][k][2] = mod->pi[j][1][k]; + bufferlef_to_rig[j][k][3] = mod->u[j][1][k]; if(L){ - bufferlef_to_rig[j][k][4] = taus[j][1][k]; - bufferlef_to_rig[j][k][5] = taup[j][1][k]; + bufferlef_to_rig[j][k][4] = mod->taus[j][1][k]; + bufferlef_to_rig[j][k][5] = mod->taup[j][1][k]; } } @@ -162,12 +161,12 @@ float *** taus, float *** taup){ for (j=0;j<=NY+1;j++){ for (k=0;k<=NZ+1;k++){ /* storage of right edge of local volume into buffer */ - bufferrig_to_lef[j][k][1] = rho[j][NX][k]; - bufferrig_to_lef[j][k][2] = pi[j][NX][k]; - bufferrig_to_lef[j][k][3] = u[j][NX][k]; + bufferrig_to_lef[j][k][1] = mod->rho[j][NX][k]; + bufferrig_to_lef[j][k][2] = mod->pi[j][NX][k]; + bufferrig_to_lef[j][k][3] = mod->u[j][NX][k]; if(L){ - bufferrig_to_lef[j][k][4] = taus[j][NX][k]; - bufferrig_to_lef[j][k][5] = taup[j][NX][k]; + bufferrig_to_lef[j][k][4] = mod->taus[j][NX][k]; + bufferrig_to_lef[j][k][5] = mod->taup[j][NX][k]; } } } @@ -189,24 +188,24 @@ float *** taus, float *** taup){ for (j=0;j<=NY+1;j++){ for (k=0;k<=NZ+1;k++){ - rho[j][NX+1][k] = bufferlef_to_rig[j][k][1]; - pi[j][NX+1][k] = bufferlef_to_rig[j][k][2]; - u[j][NX+1][k] = bufferlef_to_rig[j][k][3]; + mod->rho[j][NX+1][k] = bufferlef_to_rig[j][k][1]; + mod->pi[j][NX+1][k] = bufferlef_to_rig[j][k][2]; + mod->u[j][NX+1][k] = bufferlef_to_rig[j][k][3]; if(L){ - taus[j][NX+1][k] = bufferlef_to_rig[j][k][4]; - taup[j][NX+1][k] = bufferlef_to_rig[j][k][5]; + mod->taus[j][NX+1][k] = bufferlef_to_rig[j][k][4]; + mod->taup[j][NX+1][k] = bufferlef_to_rig[j][k][5]; } } } for (j=0;j<=NY+1;j++){ for (k=0;k<=NZ+1;k++){ - rho[j][0][k] = bufferrig_to_lef[j][k][1]; - pi[j][0][k] = bufferrig_to_lef[j][k][2]; - u[j][0][k] = bufferrig_to_lef[j][k][3]; + mod->rho[j][0][k] = bufferrig_to_lef[j][k][1]; + mod->pi[j][0][k] = bufferrig_to_lef[j][k][2]; + mod->u[j][0][k] = bufferrig_to_lef[j][k][3]; if(L){ - taus[j][0][k] = bufferrig_to_lef[j][k][4]; - taup[j][0][k] = bufferrig_to_lef[j][k][5]; + mod->taus[j][0][k] = bufferrig_to_lef[j][k][4]; + mod->taup[j][0][k] = bufferrig_to_lef[j][k][5]; } } @@ -223,12 +222,12 @@ float *** taus, float *** taup){ /* storage of front side of local volume into buffer */ - bufferfro_to_bac[j][i][1] = rho[j][i][1]; - bufferfro_to_bac[j][i][2] = pi[j][i][1]; - bufferfro_to_bac[j][i][3] = u[j][i][1]; + bufferfro_to_bac[j][i][1] = mod->rho[j][i][1]; + bufferfro_to_bac[j][i][2] = mod->pi[j][i][1]; + bufferfro_to_bac[j][i][3] = mod->u[j][i][1]; if(L){ - bufferfro_to_bac[j][i][4] = taus[j][i][1]; - bufferfro_to_bac[j][i][5] = taup[j][i][1]; + bufferfro_to_bac[j][i][4] = mod->taus[j][i][1]; + bufferfro_to_bac[j][i][5] = mod->taup[j][i][1]; } } @@ -239,12 +238,12 @@ float *** taus, float *** taup){ for (j=0;j<=NY+1;j++){ /* storage of back side of local volume into buffer */ - bufferbac_to_fro[j][i][1] = rho[j][i][NZ]; - bufferbac_to_fro[j][i][2] = pi[j][i][NZ]; - bufferbac_to_fro[j][i][3] = u[j][i][NZ]; + bufferbac_to_fro[j][i][1] = mod->rho[j][i][NZ]; + bufferbac_to_fro[j][i][2] = mod->pi[j][i][NZ]; + bufferbac_to_fro[j][i][3] = mod->u[j][i][NZ]; if(L){ - bufferbac_to_fro[j][i][4] = taus[j][i][NZ]; - bufferbac_to_fro[j][i][5] = taup[j][i][NZ]; + bufferbac_to_fro[j][i][4] = mod->taus[j][i][NZ]; + bufferbac_to_fro[j][i][5] = mod->taup[j][i][NZ]; } } } @@ -263,12 +262,12 @@ float *** taus, float *** taup){ for (i=0;i<=NX+1;i++){ for (j=0;j<=NY+1;j++){ - rho[j][i][NZ+1] = bufferfro_to_bac[j][i][1]; - pi[j][i][NZ+1] = bufferfro_to_bac[j][i][2]; - u[j][i][NZ+1] = bufferfro_to_bac[j][i][3]; + mod->rho[j][i][NZ+1] = bufferfro_to_bac[j][i][1]; + mod->pi[j][i][NZ+1] = bufferfro_to_bac[j][i][2]; + mod->u[j][i][NZ+1] = bufferfro_to_bac[j][i][3]; if(L){ - taus[j][i][NZ+1] = bufferfro_to_bac[j][i][4]; - taup[j][i][NZ+1] = bufferfro_to_bac[j][i][5]; + mod->taus[j][i][NZ+1] = bufferfro_to_bac[j][i][4]; + mod->taup[j][i][NZ+1] = bufferfro_to_bac[j][i][5]; } } @@ -278,12 +277,12 @@ float *** taus, float *** taup){ for (i=0;i<=NX+1;i++){ for (j=0;j<=NY+1;j++){ - rho[j][i][0] = bufferbac_to_fro[j][i][1]; - pi[j][i][0] = bufferbac_to_fro[j][i][2]; - u[j][i][0] = bufferbac_to_fro[j][i][3]; + mod->rho[j][i][0] = bufferbac_to_fro[j][i][1]; + mod->pi[j][i][0] = bufferbac_to_fro[j][i][2]; + mod->u[j][i][0] = bufferbac_to_fro[j][i][3]; if(L){ - taus[j][i][0] = bufferbac_to_fro[j][i][4]; - taup[j][i][0] = bufferbac_to_fro[j][i][5]; + mod->taus[j][i][0] = bufferbac_to_fro[j][i][4]; + mod->taup[j][i][0] = bufferbac_to_fro[j][i][5]; } } diff --git a/src/model2_5D.c b/src/model2_5D.c index 6489b17..d192060 100644 --- a/src/model2_5D.c +++ b/src/model2_5D.c @@ -25,8 +25,7 @@ #include "fd.h" -void model2_5(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup){ +void model2_5(st_model *mod){ /*--------------------------------------------------------------------------*/ /* extern variables */ @@ -42,20 +41,21 @@ float *** taus, float *** taup){ for (j=1;j<=NYG;j++){ for (i=1;i<=NXG;i++){ if(L){ - ts=taus[j][i][100]; - tp=taup[j][i][100]; + ts=mod->taus[j][i][100]; + tp=mod->taup[j][i][100]; } - muv=u[j][i][100]; - Rho=rho[j][i][100]; - piv=pi[j][i][100]; + muv=mod->u[j][i][100]; + Rho=mod->rho[j][i][100]; + piv=mod->pi[j][i][100]; for (k=1;k<=NZG;k++){ if(L){ - taus[j][i][k]=ts; - taup[j][i][k]=tp; + mod->taus[j][i][k]=ts; + mod->taup[j][i][k]=tp; } - u[j][i][k]=muv; - rho[j][i][k]=Rho; - pi[j][i][k]=piv; + + mod->u[j][i][k]=muv; + mod->rho[j][i][k]=Rho; + mod->pi[j][i][k]=piv; } } } diff --git a/src/modelupdate.c b/src/modelupdate.c index 58d5777..dc4fc8c 100644 --- a/src/modelupdate.c +++ b/src/modelupdate.c @@ -23,7 +23,7 @@ * ------------------------------------------------------------------------*/ #include "fd.h" -void modelupdate(int nx, int ny, int nz, float ***gradvp, float ***gradvs, float ***gradrho, float *** rho, float *** pi, float *** u, float **bfgsmod1, float step, float *beta, int it_group){ +void modelupdate(int nx, int ny, int nz, st_gradient *grad, st_model *mod, float **bfgsmod1, float step, float *beta, int it_group){ extern FILE *FP; extern int NX, NY, NZ, LBFGS, BFGSNUM, NUMPAR; @@ -60,12 +60,12 @@ void modelupdate(int nx, int ny, int nz, float ***gradvp, float ***gradvs, float for (k=1;k<=nz;k++){ vp=0.0; vs=0.0; - vp=sqrt(pi[j][i][k]/rho[j][i][k]); - vs=sqrt(u[j][i][k]/rho[j][i][k]); + vp=sqrt(mod->pi[j][i][k]/mod->rho[j][i][k]); + vs=sqrt(mod->u[j][i][k]/mod->rho[j][i][k]); if (vp>max[0]) max[0]=vp; if (vs>max[1]) max[1]=vs; - if (rho[j][i][k]>max[2]) max[2]=rho[j][i][k]; + if (mod->rho[j][i][k]>max[2]) max[2]=mod->rho[j][i][k]; } } } @@ -90,9 +90,9 @@ void modelupdate(int nx, int ny, int nz, float ***gradvp, float ***gradvs, float for (i=1;i<=nx;i++){ for (k=1;k<=nz;k++){ - if (fabs(gradvp[j][i][k])>max1[0]) max1[0]=fabs(gradvp[j][i][k]); - if (fabs(gradvs[j][i][k])>max1[1]) max1[1]=fabs(gradvs[j][i][k]); - if (fabs(gradrho[j][i][k])>max1[2]) max1[2]=fabs(gradrho[j][i][k]); + if (fabs(grad->vp[j][i][k])>max1[0]) max1[0]=fabs(grad->vp[j][i][k]); + if (fabs(grad->vs[j][i][k])>max1[1]) max1[1]=fabs(grad->vs[j][i][k]); + if (fabs(grad->rho[j][i][k])>max1[2]) max1[2]=fabs(grad->rho[j][i][k]); } } @@ -111,9 +111,9 @@ void modelupdate(int nx, int ny, int nz, float ***gradvp, float ***gradvs, float for (j=1;j<=ny;j++){ for (i=1;i<=nx;i++){ for (k=1;k<=nz;k++){ - gradvp[j][i][k]= gradvp[j][i][k]/max1[0]; - gradvs[j][i][k]= gradvs[j][i][k]/max1[1]; - gradrho[j][i][k]=gradrho[j][i][k]/max1[2]; + grad->vp[j][i][k]= grad->vp[j][i][k]/max1[0]; + grad->vs[j][i][k]= grad->vs[j][i][k]/max1[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]/max1[2]; } } } @@ -130,28 +130,28 @@ void modelupdate(int nx, int ny, int nz, float ***gradvp, float ***gradvs, float /*update model*/ vpnew=0.0; - /*vpnew=sqrt(pi[j][i][k]/rho[j][i][k])+max[0]*step*gradconvp[j][i][k];*/ - vpnew=sqrt(pi[j][i][k]/rho[j][i][k])+step*scale1*gradvp[j][i][k]*VP0; + /*vpnew=sqrt(mod->pi[j][i][k]/mod->rho[j][i][k])+max[0]*step*gradconvp[j][i][k];*/ + vpnew=sqrt(mod->pi[j][i][k]/mod->rho[j][i][k])+step*scale1*grad->vp[j][i][k]*VP0; vsnew=0.0; - /*vsnew=sqrt(u[j][i][k]/rho[j][i][k])+max[1]*step*gradconvs[j][i][k];*/ - vsnew=sqrt(u[j][i][k]/rho[j][i][k])+step*scale2*gradvs[j][i][k]*VS0; + /*vsnew=sqrt(mod->u[j][i][k]/mod->rho[j][i][k])+max[1]*step*gradconvs[j][i][k];*/ + vsnew=sqrt(mod->u[j][i][k]/mod->rho[j][i][k])+step*scale2*grad->vs[j][i][k]*VS0; rhonew=0.0; - rhonew=rho[j][i][k]+scale3*step*gradrho[j][i][k]*RHO0; + rhonew=mod->rho[j][i][k]+scale3*step*grad->rho[j][i][k]*RHO0; if(LBFGS){ /*save normalised model differences for LBFGS*/ l++; l1++; - bfgsmod1[w][l]=(vpnew-sqrt(pi[j][i][k]/rho[j][i][k]))/VP0; + bfgsmod1[w][l]=(vpnew-sqrt(mod->pi[j][i][k]/mod->rho[j][i][k]))/VP0; if(NUMPAR>1){ - bfgsmod1[w][l1]=(vsnew-sqrt(u[j][i][k]/rho[j][i][k]))/VS0; + bfgsmod1[w][l1]=(vsnew-sqrt(mod->u[j][i][k]/mod->rho[j][i][k]))/VS0; } } - u[j][i][k]=rhonew*vsnew*vsnew; - pi[j][i][k]=rhonew*vpnew*vpnew; - rho[j][i][k]=rhonew; + mod->u[j][i][k]=rhonew*vsnew*vsnew; + mod->pi[j][i][k]=rhonew*vpnew*vpnew; + mod->rho[j][i][k]=rhonew; } } diff --git a/src/outmod.c b/src/outmod.c index 45c2f80..514e4b4 100644 --- a/src/outmod.c +++ b/src/outmod.c @@ -26,7 +26,7 @@ #include "fd.h" -void outmod(int nx,int ny,int nz,float ***rho, float ***pi,float ***u, int iteration){ +void outmod(int nx,int ny,int nz,st_model *mod, int iteration){ extern int POS[4]; extern char MOD_OUT_FILE[STRING_SIZE]; @@ -51,13 +51,13 @@ void outmod(int nx,int ny,int nz,float ***rho, float ***pi,float ***u, int itera for (i=1;i<=nx;i++){ for (j=1;j<=ny;j++){ - vp=sqrt(pi[j][i][k]/rho[j][i][k]); - vs=sqrt(u[j][i][k]/rho[j][i][k]); + vp=sqrt(mod->pi[j][i][k]/mod->rho[j][i][k]); + vs=sqrt(mod->u[j][i][k]/mod->rho[j][i][k]); fwrite(&vp, sizeof(float), 1,fpmod1); fwrite(&vs, sizeof(float), 1,fpmod2); - fwrite(&rho[j][i][k], sizeof(float), 1,fpmod3); + fwrite(&mod->rho[j][i][k], sizeof(float), 1,fpmod3); } } diff --git a/src/precongrad.c b/src/precongrad.c index e69087f..c4b4ecf 100644 --- a/src/precongrad.c +++ b/src/precongrad.c @@ -25,7 +25,7 @@ #include "fd.h" -void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***grad3, int nsrc, float ** srcpos, int ntr_glob, int **recpos, float finv, int iteration,int cdf){ +void precon_grad(int nx,int ny,int nz, st_gradient *grad, int nsrc, float ** srcpos, int ntr_glob, int **recpos, float finv, int iteration,int cdf){ extern float DX, DY, DZ; extern int POS[4], NXG, NYG, NZG, FW, DAMPTYPE, FREE_SURF; @@ -61,9 +61,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[0]=1/(1+1000*exp(-0.7*r*r)); G[1]=1/(1+1000*exp(-0.7*r*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]; - grad2[j][i][k]=grad2[j][i][k]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[1]; } /*damping CPML-boundary*/ /*damping y-direction*/ @@ -79,9 +79,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping x-direction*/ r=0.0; @@ -94,9 +94,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping z-direction*/ r=0.0; @@ -109,9 +109,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*----------------------------------------------*/ @@ -142,9 +142,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[0]=0.0; G[1]=0.0; G[0]=1/(1+1000*exp(-0.7*r)); G[1]=1/(1+1000*exp(-0.7*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]; - grad2[j][i][k]=grad2[j][i][k]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[1]; } for (n=1;n<=ntr_glob;n++){ @@ -157,9 +157,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[0]=1/(1+1000*exp(-0.7*r*r)); G[1]=1/(1+1000*exp(-0.7*r*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]; - grad2[j][i][k]=grad2[j][i][k]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[1]; } /*damping CPML-boundary*/ /*damping y-direction*/ @@ -175,9 +175,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping x-direction*/ r=0.0; @@ -190,9 +190,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping z-direction*/ r=0.0; @@ -205,9 +205,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*----------------------------------------------*/ } @@ -234,9 +234,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g if(r<0) G[1]=0.0; else G[1]=1/(1+1000*exp(-0.7*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping x-direction*/ r=0.0; @@ -249,9 +249,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g if(r<0) G[1]=0.0; else G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping z-direction*/ r=0.0; @@ -264,9 +264,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g if(r<0) G[1]=0.0; else G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*----------------------------------------------*/ } } @@ -291,9 +291,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping x-direction*/ r=0.0; @@ -306,9 +306,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*damping z-direction*/ r=0.0; @@ -321,9 +321,9 @@ void precon_grad(int nx,int ny,int nz, float ***grad1, float ***grad2,float ***g G[1]=0.0; G[1]=1/(1+2000*exp(-0.6*r)); - grad1[j][i][k]=grad1[j][i][k]*G[0]*G[1]; - grad2[j][i][k]=grad2[j][i][k]*G[0]*G[1]; - grad3[j][i][k]=grad3[j][i][k]*G[0]*G[1]; + grad->vp[j][i][k]=grad->vp[j][i][k]*G[0]*G[1]; + grad->vs[j][i][k]=grad->vs[j][i][k]*G[0]*G[1]; + grad->rho[j][i][k]=grad->rho[j][i][k]*G[0]*G[1]; /*----------------------------------------------*/ } } diff --git a/src/psource.c b/src/psource.c index a1ccbf0..af03055 100644 --- a/src/psource.c +++ b/src/psource.c @@ -23,7 +23,7 @@ #include "fd.h" -void psource(int nt, st_stress *stress, float *** syy, float *** szz, +void psource(int nt, st_stress *stress, float ** srcpos_loc, float ** signals, int nsrc){ @@ -47,8 +47,8 @@ extern int NT; if((nt>1)&&(ntsxx[j][i][k]+=amp; - syy[j][i][k]+=amp; - szz[j][i][k]+=amp; + stress->syy[j][i][k]+=amp; + stress->szz[j][i][k]+=amp; } } } diff --git a/src/readhess.c b/src/readhess.c index 8114eed..906a4b9 100644 --- a/src/readhess.c +++ b/src/readhess.c @@ -23,7 +23,7 @@ #include "fd.h" -void readhess(int nx, int ny, int nz, float *** hess1, float *** hess2, float ***hess3, float finv, int iteration){ +void readhess(int nx, int ny, int nz, st_hessian *hessian, float finv, int iteration){ extern int NX, NY, NZ, NXG, NYG, NZG, POS[4]; extern float VP0, VS0, RHO0; @@ -77,14 +77,14 @@ void readhess(int nx, int ny, int nz, float *** hess1, float *** hess2, float jj=j-POS[2]*NY; kk=k-POS[3]*NZ; - /*hess1[jj][ii][kk]=vp; - hess2[jj][ii][kk]=vs; - hess3[jj][ii][kk]=rhov;*/ + /*hessian->vp[jj][ii][kk]=vp; + hessian->vs[jj][ii][kk]=vs; + hessian->rho[jj][ii][kk]=rhov;*/ - hess1[jj][ii][kk]=vp*pow(VP0,2); - hess2[jj][ii][kk]=vs*pow(VS0,2); - hess3[jj][ii][kk]=rhov*pow(RHO0,2); + hessian->vp[jj][ii][kk]=vp*pow(VP0,2); + hessian->vs[jj][ii][kk]=vs*pow(VS0,2); + hessian->rho[jj][ii][kk]=rhov*pow(RHO0,2); } diff --git a/src/readmod.c b/src/readmod.c index bfaf3df..09d547e 100755 --- a/src/readmod.c +++ b/src/readmod.c @@ -24,8 +24,7 @@ #include "fd.h" -void readmod(float *** rho, float *** pi, float *** u, -float *** taus, float *** taup, float * eta){ +void readmod(st_model *mod){ extern float DT, *FL, TAU; @@ -49,7 +48,7 @@ float *** taus, float *** taup, float * eta){ pts=vector(1,L); for (l=1;l<=L;l++) { pts[l]=1.0/(2.0*PI*FL[l]); - eta[l]=DT/pts[l]; + mod->eta[l]=DT/pts[l]; } ts=TAU; @@ -120,12 +119,12 @@ float *** taus, float *** taup, float * eta){ kk=k-POS[3]*NZ; if(L){ - taus[jj][ii][kk]=ts; - taup[jj][ii][kk]=tp;} + mod->taus[jj][ii][kk]=ts; + mod->taup[jj][ii][kk]=tp;} - u[jj][ii][kk]=muv; - rho[jj][ii][kk]=rhov; - pi[jj][ii][kk]=piv; + mod->u[jj][ii][kk]=muv; + mod->rho[jj][ii][kk]=rhov; + mod->pi[jj][ii][kk]=piv; } diff --git a/src/saveseis.c b/src/saveseis.c index 9ed524b..90ca32f 100644 --- a/src/saveseis.c +++ b/src/saveseis.c @@ -23,9 +23,7 @@ #include "fd.h" -void saveseis(FILE *fp, float **sectionvx, float **sectionvy,float **sectionvz, -float **sectionp, float **sectioncurl, float **sectiondiv, -int **recpos, int **recpos_loc, int ntr, float ** srcpos, int ishot,int ns, int obs, int iteration){ +void saveseis(FILE *fp, st_seismogram *section, st_acquisition *acq, int ntr, int ishot,int ns, int obs, int iteration){ extern int SEISMO, SEIS_FORMAT, MYID, RUN_MULTIPLE_SHOTS,NPROC,METHOD; extern char SEIS_FILE[STRING_SIZE], SEIS_OBS_FILE[STRING_SIZE]; @@ -39,7 +37,7 @@ int **recpos, int **recpos_loc, int ntr, float ** srcpos, int ishot,int ns, in FILE *fin, *fout; srcpos1=fmatrix(1,7,1,1); - for (nt=1;nt<=7;nt++) srcpos1[nt][1]=srcpos[nt][ishot]; + for (nt=1;nt<=7;nt++) srcpos1[nt][1]=acq->srcpos[nt][ishot]; switch (SEIS_FORMAT){ case 0: sprintf(file_ext,"su"); break; @@ -75,41 +73,41 @@ int **recpos, int **recpos_loc, int ntr, float ** srcpos, int ishot,int ns, in case 1 : /* particle velocities only */ fprintf(fp,"\n PE %d is writing %d seismogramtraces (vx) to \t %s \n",MYID,ntr,vxf); - outseis(fp,fopen(vxf,"w"),1,sectionvx,recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(vxf,"w"),1,section->vx,acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (vy) to \t %s \n",MYID,ntr,vyf); - outseis(fp,fopen(vyf,"w"),2,sectionvy,recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(vyf,"w"),2,section->vy,acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (vz) to \t %s \n",MYID,ntr,vzf); - outseis(fp,fopen(vzf,"w"),3,sectionvz,recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(vzf,"w"),3,section->vz,acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); break; case 2 : /* pressure only */ fprintf(fp," PE %d is writing %d seismogramtraces (p) to \t %s \n",MYID,ntr,pf); - outseis(fp,fopen(pf,"w"), 0,sectionp, recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(pf,"w"), 0,section->p, acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); break; case 3 : /* curl and div only */ fprintf(fp," PE %d is writing %d seismogramtraces (div) to \t %s \n",MYID,ntr,divf); - outseis(fp,fopen(divf,"w"),0,sectiondiv,recpos,recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(divf,"w"),0,section->div,acq->recpos,acq->recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (curl) to \t %s \n",MYID,ntr,curlf); - outseis(fp,fopen(curlf,"w"),0,sectioncurl,recpos,recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(curlf,"w"),0,section->curl,acq->recpos,acq->recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); break; case 4 : /* everything */ fprintf(fp,"\n PE %d is writing %d seismogramtraces (vx) to \t %s \n",MYID,ntr,vxf); - outseis(fp,fopen(vxf,"w"),1,sectionvx,recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(vxf,"w"),1,section->vx,acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (vy) to \t %s \n",MYID,ntr,vyf); - outseis(fp,fopen(vyf,"w"),2,sectionvy,recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(vyf,"w"),2,section->vy,acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (vz) to \t %s \n",MYID,ntr,vzf); - outseis(fp,fopen(vzf,"w"),3,sectionvz,recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(vzf,"w"),3,section->vz,acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (p) to \t %s \n",MYID,ntr,pf); - outseis(fp,fopen(pf,"w"), 0,sectionp, recpos,recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(pf,"w"), 0,section->p, acq->recpos,acq->recpos_loc, ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (div) to \t %s \n",MYID,ntr,divf); - outseis(fp,fopen(divf,"w"),0,sectiondiv,recpos,recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(divf,"w"),0,section->div,acq->recpos,acq->recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); fprintf(fp," PE %d is writing %d seismogramtraces (curl) to \t %s \n",MYID,ntr,curlf); - outseis(fp,fopen(curlf,"w"),0,sectioncurl,recpos,recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); + outseis(fp,fopen(curlf,"w"),0,section->curl,acq->recpos,acq->recpos_loc,ntr,srcpos1,nsrc,ns,SEIS_FORMAT); break; } diff --git a/src/seismo_ssg.c b/src/seismo_ssg.c index f6d3d64..fffcc9b 100755 --- a/src/seismo_ssg.c +++ b/src/seismo_ssg.c @@ -24,10 +24,8 @@ #include "fd.h" -void seismo(int lsamp, int ntr, int **recpos, float **sectionvx, float **sectionvy, -float **sectionvz, float **sectiondiv, float **sectioncurl, float **sectionp, -float ***vx, float ***vy, float ***vz, -st_stress *stress, float ***syy, float ***szz, float ***pi, float ***u){ +void seismo(int lsamp, int ntr, int **recpos, st_seismogram *section, +st_velocity *vel, st_stress *stress, st_model *mod){ extern int SEISMO; @@ -45,84 +43,84 @@ st_stress *stress, float ***syy, float ***szz, float ***pi, float ***u){ nxrec=recpos[1][itr]; nyrec=recpos[2][itr]; nzrec=recpos[3][itr]; - sectionvx[itr][ins]=0.0; - sectionvy[itr][ins]=0.0; - sectionvz[itr][ins]=0.0; + section->vx[itr][ins]=0.0; + section->vy[itr][ins]=0.0; + section->vz[itr][ins]=0.0; switch (SEISMO){ - case 1 : sectionvx[itr][ins]=vx[nyrec][nxrec][nzrec]; - sectionvy[itr][ins]=vy[nyrec][nxrec][nzrec]; - sectionvz[itr][ins]=vz[nyrec][nxrec][nzrec]; + case 1 : section->vx[itr][ins]=vel->vx[nyrec][nxrec][nzrec]; + section->vy[itr][ins]=vel->vy[nyrec][nxrec][nzrec]; + section->vz[itr][ins]=vel->vz[nyrec][nxrec][nzrec]; break; - case 2 : sectionp[itr][ins]=-stress->sxx[nyrec][nxrec][nzrec] - -syy[nyrec][nxrec][nzrec] - -szz[nyrec][nxrec][nzrec]; + case 2 : section->p[itr][ins]=-stress->sxx[nyrec][nxrec][nzrec] + -stress->syy[nyrec][nxrec][nzrec] + -stress->szz[nyrec][nxrec][nzrec]; break; case 3 : i=nxrec; j=nyrec; k=nzrec; - /*vxy=(-vx[j+2][i][k]+27.0*(vx[j+1][i][k]-vx[j][i][k])+vx[j-1][i][k])*(24.0*DY); - vxz=(-vx[j][i][k+2]+27.0*(vx[j][i][k+1]-vx[j][i][k])+vx[j][i][k-1])*(24.0*DZ); - vyx=(-vy[j][i+2][k]+27.0*(vy[j][i+1][k]-vy[j][i][k])+vy[j][i-1][k])*(24.0*DX); - vyz=(-vy[j][i][k+2]+27.0*(vy[j][i][k+1]-vy[j][i][k])+vy[j][i][k-1])*(24.0*DZ); - vzx=(-vz[j][i+2][k]+27.0*(vz[j][i+1][k]-vz[j][i][k])+vz[j][i-1][k])*(24.0*DX); - vzy=(-vz[j+2][i][k]+27.0*(vz[j+1][i][k]-vz[j][i][k])+vz[j-1][i][k])*(24.0*DY);*/ + /*vxy=(-vel->vx[j+2][i][k]+27.0*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+vel->vx[j-1][i][k])*(24.0*DY); + vxz=(-vel->vx[j][i][k+2]+27.0*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+vel->vx[j][i][k-1])*(24.0*DZ); + vyx=(-vel->vy[j][i+2][k]+27.0*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+vel->vy[j][i-1][k])*(24.0*DX); + vyz=(-vel->vy[j][i][k+2]+27.0*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+vel->vy[j][i][k-1])*(24.0*DZ); + vzx=(-vel->vz[j][i+2][k]+27.0*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+vel->vz[j][i-1][k])*(24.0*DX); + vzy=(-vel->vz[j+2][i][k]+27.0*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+vel->vz[j-1][i][k])*(24.0*DY);*/ - vxy=(vx[j+1][i][k]-vx[j][i][k])*(dh24y); - vxz=(vx[j][i][k+1]-vx[j][i][k])*(dh24z); - vyx=(vy[j][i+1][k]-vy[j][i][k])*(dh24x); - vyz=(vy[j][i][k+1]-vy[j][i][k])*(dh24z); - vzx=(vz[j][i+1][k]-vz[j][i][k])*(dh24x); - vzy=(vz[j+1][i][k]-vz[j][i][k])*(dh24y); + vxy=(vel->vx[j+1][i][k]-vel->vx[j][i][k])*(dh24y); + vxz=(vel->vx[j][i][k+1]-vel->vx[j][i][k])*(dh24z); + vyx=(vel->vy[j][i+1][k]-vel->vy[j][i][k])*(dh24x); + vyz=(vel->vy[j][i][k+1]-vel->vy[j][i][k])*(dh24z); + vzx=(vel->vz[j][i+1][k]-vel->vz[j][i][k])*(dh24x); + vzy=(vel->vz[j+1][i][k]-vel->vz[j][i][k])*(dh24y); - amp=u[j][i][k]*((vyz-vzy)*fabs(vyz-vzy)+ + amp=mod->u[j][i][k]*((vyz-vzy)*fabs(vyz-vzy)+ (vzx-vxz)*fabs(vzx-vxz)+(vxy-vyx)*fabs(vxy-vyx)); - sectioncurl[itr][ins]=fsign(amp)*sqrt(fabs(amp)); + section->curl[itr][ins]=fsign(amp)*sqrt(fabs(amp)); - /*vxx=(-vx[j][i+1][k]+27.0*(vx[j][i][k]-vx[j][i-1][k])+vx[j][i-2][k])*(24.0*DX); - vyy=(-vy[j+1][i][k]+27.0*(vy[j][i][k]-vy[j-1][i][k])+vy[j-2][i][k])*(24.0*DY); - vzz=(-vz[j][i][k+1]+27.0*(vz[j][i][k]-vz[j][i][k-1])+vz[j][i][k-2])*(24.0*DZ);*/ + /*vxx=(-vel->vx[j][i+1][k]+27.0*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+vel->vx[j][i-2][k])*(24.0*DX); + vyy=(-vel->vy[j+1][i][k]+27.0*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+vel->vy[j-2][i][k])*(24.0*DY); + vzz=(-vel->vz[j][i][k+1]+27.0*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+vel->vz[j][i][k-2])*(24.0*DZ);*/ - vxx=(vx[j][i][k]-vx[j][i-1][k])*(dh24x); - vyy=(vy[j][i][k]-vy[j-1][i][k])*(dh24y); - vzz=(vz[j][i][k]-vz[j][i][k-1])*(dh24z); + vxx=(vel->vx[j][i][k]-vel->vx[j][i-1][k])*(dh24x); + vyy=(vel->vy[j][i][k]-vel->vy[j-1][i][k])*(dh24y); + vzz=(vel->vz[j][i][k]-vel->vz[j][i][k-1])*(dh24z); - sectiondiv[itr][ins]=(vxx+vyy+vzz)*sqrt(pi[j][i][k]); + section->div[itr][ins]=(vxx+vyy+vzz)*sqrt(mod->pi[j][i][k]); break; case 4 : - sectionvx[itr][ins]=vx[nyrec][nxrec][nzrec]; - sectionvy[itr][ins]=vy[nyrec][nxrec][nzrec]; - sectionvz[itr][ins]=vz[nyrec][nxrec][nzrec]; - sectionp[itr][ins]=-stress->sxx[nyrec][nxrec][nzrec]-syy[nyrec][nxrec][nzrec]-szz[nyrec][nxrec][nzrec]; + section->vx[itr][ins]=vel->vx[nyrec][nxrec][nzrec]; + section->vy[itr][ins]=vel->vy[nyrec][nxrec][nzrec]; + section->vz[itr][ins]=vel->vz[nyrec][nxrec][nzrec]; + section->p[itr][ins]=-stress->sxx[nyrec][nxrec][nzrec]-stress->syy[nyrec][nxrec][nzrec]-stress->szz[nyrec][nxrec][nzrec]; i=nxrec; j=nyrec; k=nzrec; - /*vxy=(-vx[j+2][i][k]+27.0*(vx[j+1][i][k]-vx[j][i][k])+vx[j-1][i][k])*(dh24y); - vxz=(-vx[j][i][k+2]+27.0*(vx[j][i][k+1]-vx[j][i][k])+vx[j][i][k-1])*(dh24z); - vyx=(-vy[j][i+2][k]+27.0*(vy[j][i+1][k]-vy[j][i][k])+vy[j][i-1][k])*(dh24x); - vyz=(-vy[j][i][k+2]+27.0*(vy[j][i][k+1]-vy[j][i][k])+vy[j][i][k-1])*(dh24z); - vzx=(-vz[j][i+2][k]+27.0*(vz[j][i+1][k]-vz[j][i][k])+vz[j][i-1][k])*(dh24x); - vzy=(-vz[j+2][i][k]+27.0*(vz[j+1][i][k]-vz[j][i][k])+vz[j-1][i][k])*(dh24y);*/ + /*vxy=(-vel->vx[j+2][i][k]+27.0*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+vel->vx[j-1][i][k])*(dh24y); + vxz=(-vel->vx[j][i][k+2]+27.0*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+vel->vx[j][i][k-1])*(dh24z); + vyx=(-vel->vy[j][i+2][k]+27.0*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+vel->vy[j][i-1][k])*(dh24x); + vyz=(-vel->vy[j][i][k+2]+27.0*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+vel->vy[j][i][k-1])*(dh24z); + vzx=(-vel->vz[j][i+2][k]+27.0*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+vel->vz[j][i-1][k])*(dh24x); + vzy=(-vel->vz[j+2][i][k]+27.0*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+vel->vz[j-1][i][k])*(dh24y);*/ - vxy=(vx[j+1][i][k]-vx[j][i][k])*(dh24y); - vxz=(vx[j][i][k+1]-vx[j][i][k])*(dh24z); - vyx=(vy[j][i+1][k]-vy[j][i][k])*(dh24x); - vyz=(vy[j][i][k+1]-vy[j][i][k])*(dh24z); - vzx=(vz[j][i+1][k]-vz[j][i][k])*(dh24x); - vzy=(vz[j+1][i][k]-vz[j][i][k])*(dh24y); + vxy=(vel->vx[j+1][i][k]-vel->vx[j][i][k])*(dh24y); + vxz=(vel->vx[j][i][k+1]-vel->vx[j][i][k])*(dh24z); + vyx=(vel->vy[j][i+1][k]-vel->vy[j][i][k])*(dh24x); + vyz=(vel->vy[j][i][k+1]-vel->vy[j][i][k])*(dh24z); + vzx=(vel->vz[j][i+1][k]-vel->vz[j][i][k])*(dh24x); + vzy=(vel->vz[j+1][i][k]-vel->vz[j][i][k])*(dh24y); - amp=u[j][i][k]*((vyz-vzy)*fabs(vyz-vzy)+ + amp=mod->u[j][i][k]*((vyz-vzy)*fabs(vyz-vzy)+ (vzx-vxz)*fabs(vzx-vxz)+(vxy-vyx)*fabs(vxy-vyx)); - sectioncurl[itr][ins]=fsign(amp)*sqrt(fabs(amp)); + section->curl[itr][ins]=fsign(amp)*sqrt(fabs(amp)); - /*vxx=(-vx[j][i+1][k]+27.0*(vx[j][i][k]-vx[j][i-1][k])+vx[j][i-2][k])*(dh24x); - vyy=(-vy[j+1][i][k]+27.0*(vy[j][i][k]-vy[j-1][i][k])+vy[j-2][i][k])*(dh24y); - vzz=(-vz[j][i][k+1]+27.0*(vz[j][i][k]-vz[j][i][k-1])+vz[j][i][k-2])*(dh24z);*/ + /*vxx=(-vel->vx[j][i+1][k]+27.0*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+vel->vx[j][i-2][k])*(dh24x); + vyy=(-vel->vy[j+1][i][k]+27.0*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+vel->vy[j-2][i][k])*(dh24y); + vzz=(-vel->vz[j][i][k+1]+27.0*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+vel->vz[j][i][k-2])*(dh24z);*/ - vxx=(vx[j][i][k]-vx[j][i-1][k])*(dh24x); - vyy=(vy[j][i][k]-vy[j-1][i][k])*(dh24y); - vzz=(vz[j][i][k]-vz[j][i][k-1])*(dh24z); + vxx=(vel->vx[j][i][k]-vel->vx[j][i-1][k])*(dh24x); + vyy=(vel->vy[j][i][k]-vel->vy[j-1][i][k])*(dh24y); + vzz=(vel->vz[j][i][k]-vel->vz[j][i][k-1])*(dh24z); - sectiondiv[itr][ins]=(vxx+vyy+vzz)*sqrt(pi[j][i][k]); + section->div[itr][ins]=(vxx+vyy+vzz)*sqrt(mod->pi[j][i][k]); break; } diff --git a/src/snap_ssg.c b/src/snap_ssg.c index 69c8077..3bb6d5f 100755 --- a/src/snap_ssg.c +++ b/src/snap_ssg.c @@ -25,8 +25,7 @@ void snap(FILE *fp, int nt, int nsnap, int format, int type, -float ***vx, float ***vy, float ***vz, st_stress *stress, float ***syy, float ***szz, -float ***u, float ***pi, +st_velocity *vel, st_stress *stress, st_model *mod, int idx, int idy, int idz, int nx1, int ny1, int nz1, int nx2, int ny2, int nz2){ @@ -106,9 +105,9 @@ int ny2, int nz2){ for (j=ny1;j<=ny2;j+=idy){ for (i=nx1;i<=nx2;i+=idx){ for (k=nz1;k<=nz2;k+=idz){ - writedsk(fpx1,vx[j][i][k],format); - writedsk(fpy1,vy[j][i][k],format); - writedsk(fpz1,vz[j][i][k],format); + writedsk(fpx1,vel->vx[j][i][k],format); + writedsk(fpy1,vel->vy[j][i][k],format); + writedsk(fpz1,vel->vz[j][i][k],format); }} } fclose(fpx1); @@ -121,7 +120,7 @@ int ny2, int nz2){ for (k=ny1;k<=ny2;k+=idy) for (i=nx1;i<=nx2;i+=idx) for (j=nz1;j<=nz2;j+=idz){ - amp=-stress->sxx[j][i][k]-syy[j][i][k]-szz[j][i][k]; + amp=-stress->sxx[j][i][k]-stress->syy[j][i][k]-stress->szz[j][i][k]; writedsk(fpx1,amp,format); @@ -141,9 +140,9 @@ int ny2, int nz2){ for (j=nz1;j<=nz2;j+=idz){ - writedsk(fpx1,vx[j][i][k],format); - writedsk(fpy1,vy[j][i][k],format); - writedsk(fpz1,vz[j][i][k],format); + writedsk(fpx1,vel->vx[j][i][k],format); + writedsk(fpy1,vel->vy[j][i][k],format); + writedsk(fpz1,vel->vz[j][i][k],format); } @@ -165,19 +164,19 @@ int ny2, int nz2){ for (k=ny1;k<=ny2;k+=idy) for (i=nx1;i<=nx2;i+=idx) for (j=nz1;j<=nz2;j+=idz){ - /*vxy=(-vx[j+2][i][k]+27.0*(vx[j+1][i][k]-vx[j][i][k])+vx[j-1][i][k])*(dh24); - vxz=(-vx[j][i][k+2]+27.0*(vx[j][i][k+1]-vx[j][i][k])+vx[j][i][k-1])*(dh24); - vyx=(-vy[j][i+2][k]+27.0*(vy[j][i+1][k]-vy[j][i][k])+vy[j][i-1][k])*(dh24); - vyz=(-vy[j][i][k+2]+27.0*(vy[j][i][k+1]-vy[j][i][k])+vy[j][i][k-1])*(dh24); - vzx=(-vz[j][i+2][k]+27.0*(vz[j][i+1][k]-vz[j][i][k])+vz[j][i-1][k])*(dh24); - vzy=(-vz[j+2][i][k]+27.0*(vz[j+1][i][k]-vz[j][i][k])+vz[j-1][i][k])*(dh24);*/ + /*vxy=(-vel->vx[j+2][i][k]+27.0*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+vel->vx[j-1][i][k])*(dh24); + vxz=(-vel->vx[j][i][k+2]+27.0*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+vel->vx[j][i][k-1])*(dh24); + vyx=(-vel->vy[j][i+2][k]+27.0*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+vel->vy[j][i-1][k])*(dh24); + vyz=(-vel->vy[j][i][k+2]+27.0*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+vel->vy[j][i][k-1])*(dh24); + vzx=(-vel->vz[j][i+2][k]+27.0*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+vel->vz[j][i-1][k])*(dh24); + vzy=(-vel->vz[j+2][i][k]+27.0*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+vel->vz[j-1][i][k])*(dh24);*/ - vxy=(vx[j+1][i][k]-vx[j][i][k])*(dh24y); - vxz=(vx[j][i][k+1]-vx[j][i][k])*(dh24z); - vyx=(vy[j][i+1][k]-vy[j][i][k])*(dh24x); - vyz=(vy[j][i][k+1]-vy[j][i][k])*(dh24z); - vzx=(vz[j][i+1][k]-vz[j][i][k])*(dh24x); - vzy=(vz[j+1][i][k]-vz[j][i][k])*(dh24y); + vxy=(vel->vx[j+1][i][k]-vel->vx[j][i][k])*(dh24y); + vxz=(vel->vx[j][i][k+1]-vel->vx[j][i][k])*(dh24z); + vyx=(vel->vy[j][i+1][k]-vel->vy[j][i][k])*(dh24x); + vyz=(vel->vy[j][i][k+1]-vel->vy[j][i][k])*(dh24z); + vzx=(vel->vz[j][i+1][k]-vel->vz[j][i][k])*(dh24x); + vzy=(vel->vz[j+1][i][k]-vel->vz[j][i][k])*(dh24y); /*amp= absolute value of curl(v)), without sqrt!!!*/ amp=((vzy-vyz)*(vzy-vyz)+(vxz-vzx)*(vxz-vzx)+(vyx-vxy)*(vyx-vxy)); @@ -188,31 +187,31 @@ int ny2, int nz2){ switch(SNAP_PLANE){ case 1 : /* energy without sign */ /* sqrt(Es) with Es = u*amp*amp (second amp removed due to missing sqrt in amp*/ - a=sqrt((u[j][i][k])*amp); + a=sqrt((mod->u[j][i][k])*amp); break; case 2 : /* energy with sign true for x-y-plane */ /*sign(rot(v)x * sqrt(Es) with Es = u*amp*amp (second amp removed due to missing sqrt in amp*/ - a=fsign((vxy-vyx))*sqrt((u[j][i][k])*amp); + a=fsign((vxy-vyx))*sqrt((mod->u[j][i][k])*amp); break; case 3 : /* energy with sign true for x-z-plane */ /*sign(rot(v)r * sqrt(Es) with Es = u*amp*amp (second amp removed due to missing sqrt in amp*/ - a=fsign((vxz-vzx))*sqrt((u[j][i][k])*amp); + a=fsign((vxz-vzx))*sqrt((mod->u[j][i][k])*amp); break; case 4 :/* energy with sign true for y-z-plane */ /*sign(rot(v)t * sqrt(Es) with Es = u*amp*amp (second amp removed due to missing sqrt in amp*/ - a=fsign((vzy-vyz))*sqrt((u[j][i][k])*amp); + a=fsign((vzy-vyz))*sqrt((mod->u[j][i][k])*amp); break; case 5 : /*custom force*/ /*not yet working properly*/ /*sign(rot(v)t * sqrt(Es) with Es = u*amp*amp (second amp removed due to missing sqrt in amp*/ - a=fsign((vxz-vzx))*sqrt((u[j][i][k])*amp); + a=fsign((vxz-vzx))*sqrt((mod->u[j][i][k])*amp); break; } /*sign(rot(v)t * sqrt(Es) with Es = u*amp*amp (second amp removed due to missing sqrt in amp*/ - /*a=fsign((vxz-vzx))*sqrt((u[j][i][k])*amp); + /*a=fsign((vxz-vzx))*sqrt((mod->u[j][i][k])*amp); - amp=u[j][i][k]*((vyz-vzy)*fabs(vyz-vzy)+ + amp=mod->u[j][i][k]*((vyz-vzy)*fabs(vyz-vzy)+ (vzx-vxz)*fabs(vzx-vxz)+(vxy-vyx)*fabs(vxy-vyx)); a=fsign(amp)*sqrt(fabs(amp));*/ @@ -228,13 +227,13 @@ int ny2, int nz2){ for (k=ny1;k<=ny2;k+=idy) for (i=nx1;i<=nx2;i+=idx) for (j=nz1;j<=nz2;j+=idz){ - /*vxx=(-vx[j][i+1][k]+27.0*(vx[j][i][k]-vx[j][i-1][k])+vx[j][i-2][k])*(dh24); - vyy=(-vy[j+1][i][k]+27.0*(vy[j][i][k]-vy[j-1][i][k])+vy[j-2][i][k])*(dh24); - vzz=(-vz[j][i][k+1]+27.0*(vz[j][i][k]-vz[j][i][k-1])+vz[j][i][k-2])*(dh24);*/ + /*vxx=(-vel->vx[j][i+1][k]+27.0*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+vel->vx[j][i-2][k])*(dh24); + vyy=(-vel->vy[j+1][i][k]+27.0*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+vel->vy[j-2][i][k])*(dh24); + vzz=(-vel->vz[j][i][k+1]+27.0*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+vel->vz[j][i][k-2])*(dh24);*/ - vxx=(vx[j][i][k]-vx[j][i-1][k])*(dh24x); - vyy=(vy[j][i][k]-vy[j-1][i][k])*(dh24y); - vzz=(vz[j][i][k]-vz[j][i][k-1])*(dh24z); + vxx=(vel->vx[j][i][k]-vel->vx[j][i-1][k])*(dh24x); + vyy=(vel->vy[j][i][k]-vel->vy[j-1][i][k])*(dh24y); + vzz=(vel->vz[j][i][k]-vel->vz[j][i][k-1])*(dh24z); /*amp= div(v))*/ amp=(vxx+vyy+vzz); @@ -242,26 +241,26 @@ int ny2, int nz2){ switch(SNAP_PLANE){ case 1 : /* energy without sign */ /* Ep with Ep=pi*amp*amp */ - a=sqrt((pi[j][i][k])*amp*amp); + a=sqrt((mod->pi[j][i][k])*amp*amp); break; case 2 : /* single force in x */ /*sign of div(v) * Ep with Ep=pi*amp*amp */ - a=fsign(amp)*sqrt((pi[j][i][k])*amp*amp); + a=fsign(amp)*sqrt((mod->pi[j][i][k])*amp*amp); break; case 3 : /* single force in y */ /*sign of div(v) * Ep with Ep=pi*amp*amp */ - a=fsign(amp)*sqrt((pi[j][i][k])*amp*amp); + a=fsign(amp)*sqrt((mod->pi[j][i][k])*amp*amp); break; case 4 : /* single force in z */ /*sign of div(v) * Ep with Ep=pi*amp*amp */ - a=fsign(amp)*sqrt((pi[j][i][k])*amp*amp); + a=fsign(amp)*sqrt((mod->pi[j][i][k])*amp*amp); break; } /*sign of div(v) * Ep with Ep=pi*amp*amp */ - /*a=fsign(amp)*sqrt((pi[j][i][k])*amp*amp); + /*a=fsign(amp)*sqrt((mod->pi[j][i][k])*amp*amp); - a=(vxx+vyy+vzz)*sqrt(pi[j][i][k]);*/ + a=(vxx+vyy+vzz)*sqrt(mod->pi[j][i][k]);*/ writedsk(fpx2,a,format); diff --git a/src/surface_ssg.c b/src/surface_ssg.c index c599892..c790a3b 100755 --- a/src/surface_ssg.c +++ b/src/surface_ssg.c @@ -23,10 +23,8 @@ #include "fd.h" -void surface(int ndepth, float *** u, float *** pi, float ***taus, float *** taup, -float * eta, st_stress *stress, float ***syy, float ***szz, float *** sxy,float *** syz, -float *** rxx, float *** ryy, float ***rzz, float *** vx, float *** vy, -float *** vz){ +void surface(int ndepth, st_model *mod, st_stress *stress, +st_visc_mem *mem, st_velocity *vel){ int i, k ,j, fdoh,m; float vxx, vyy, vzz; @@ -58,13 +56,13 @@ float *** vz){ /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=ryy[j][i][k]=0.0; + stress->syy[j][i][k]=mem->ryy[j][i][k]=0.0; - syy[j-1][i][k]=-syy[j+1][i][k]; - sxy[j-1][i][k]=-sxy[j][i][k]; - sxy[j-2][i][k]=-sxy[j+1][i][k]; - syz[j-1][i][k]=-syz[j][i][k]; - syz[j-2][i][k]=-syz[j+1][i][k]; + stress->syy[j-1][i][k]=-stress->syy[j+1][i][k]; + stress->sxy[j-1][i][k]=-stress->sxy[j][i][k]; + stress->sxy[j-2][i][k]=-stress->sxy[j+1][i][k]; + stress->syz[j-1][i][k]=-stress->syz[j][i][k]; + stress->syz[j-2][i][k]=-stress->syz[j+1][i][k]; /* in the case of using several relaxation mechanisms all @@ -76,33 +74,33 @@ float *** vz){ variables rxx,rzz at the free surface */ /* first calculate spatial derivatives of components of particle velocities */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; - /*vxx=(-vx[j][i+1][k]+27.0*(vx[j][i][k]-vx[j][i-1][k])+vx[j][i-2][k])/(dh24x); - vyy=(-vy[j+1][i][k]+27.0*(vy[j][i][k]-vy[j-1][i][k])+vy[j-2][i][k])/(dh24x); - vzz=(-vz[j][i][k+1]+27.0*(vz[j][i][k]-vz[j][i][k-1])+vz[j][i][k-2])/(dh24x);*/ + /*vxx=(-vel->vx[j][i+1][k]+27.0*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+vel->vx[j][i-2][k])/(dh24x); + vyy=(-vel->vy[j+1][i][k]+27.0*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+vel->vy[j-2][i][k])/(dh24x); + vzz=(-vel->vz[j][i][k+1]+27.0*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+vel->vz[j][i][k-2])/(dh24x);*/ /* partially updating sxx and szz in the same way*/ - f=u[j][i][k]*2.0*(1.0+L*taus[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); + f=mod->u[j][i][k]*2.0*(1.0+L*mod->taus[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); - stress->sxx[j][i][k]+=h-(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=h-(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=h-(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=h-(dthalbe*mem->rzz[j][i][k]); /* updating the memory-variable rxx, rzz at the free surface */ - b=eta[1]/(1.0+(eta[1]*0.5)); - d=2.0*u[j][i][k]*taus[j][i][k]; - e=pi[j][i][k]*taup[j][i][k]; + b=mod->eta[1]/(1.0+(mod->eta[1]*0.5)); + d=2.0*mod->u[j][i][k]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->taup[j][i][k]; h=b*(((d-e)*((f/g)-1.0)*(vxx+vzz))-((d-e)*vyy)); - rxx[j][i][k]+=h; - rzz[j][i][k]+=h; + mem->rxx[j][i][k]+=h; + mem->rzz[j][i][k]+=h; /*completely updating the stresses sxx and szz */ - stress->sxx[j][i][k]+=(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=(dthalbe*mem->rzz[j][i][k]); } @@ -122,12 +120,12 @@ float *** vz){ /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=ryy[j][i][k]=0.0; + stress->syy[j][i][k]=mem->ryy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } @@ -142,28 +140,28 @@ float *** vz){ /* first calculate spatial derivatives of components of particle velocities */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; /* partially updating sxx and szz in the same way*/ - f=u[j][i][k]*2.0*(1.0+L*taus[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); + f=mod->u[j][i][k]*2.0*(1.0+L*mod->taus[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); - stress->sxx[j][i][k]+=h-(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=h-(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=h-(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=h-(dthalbe*mem->rzz[j][i][k]); /* updating the memory-variable rxx, rzz at the free surface */ - b=eta[1]/(1.0+(eta[1]*0.5)); - d=2.0*u[j][i][k]*taus[j][i][k]; - e=pi[j][i][k]*taup[j][i][k]; + b=mod->eta[1]/(1.0+(mod->eta[1]*0.5)); + d=2.0*mod->u[j][i][k]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->taup[j][i][k]; h=b*(((d-e)*((f/g)-1.0)*(vxx+vzz))-((d-e)*vyy)); - rxx[j][i][k]+=h; - rzz[j][i][k]+=h; + mem->rxx[j][i][k]+=h; + mem->rzz[j][i][k]+=h; /*completely updating the stresses sxx and szz */ - stress->sxx[j][i][k]+=(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=(dthalbe*mem->rzz[j][i][k]); } } break; @@ -180,12 +178,12 @@ float *** vz){ /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=ryy[j][i][k]=0.0; + stress->syy[j][i][k]=mem->ryy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } @@ -200,36 +198,36 @@ float *** vz){ /* first calculate spatial derivatives of components of particle velocities */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3]))/DZ; /* partially updating sxx and szz in the same way*/ - f=u[j][i][k]*2.0*(1.0+L*taus[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); + f=mod->u[j][i][k]*2.0*(1.0+L*mod->taus[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); - stress->sxx[j][i][k]+=h-(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=h-(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=h-(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=h-(dthalbe*mem->rzz[j][i][k]); /* updating the memory-variable rxx, rzz at the free surface */ - b=eta[1]/(1.0+(eta[1]*0.5)); - d=2.0*u[j][i][k]*taus[j][i][k]; - e=pi[j][i][k]*taup[j][i][k]; + b=mod->eta[1]/(1.0+(mod->eta[1]*0.5)); + d=2.0*mod->u[j][i][k]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->taup[j][i][k]; h=b*(((d-e)*((f/g)-1.0)*(vxx+vzz))-((d-e)*vyy)); - rxx[j][i][k]+=h; - rzz[j][i][k]+=h; + mem->rxx[j][i][k]+=h; + mem->rzz[j][i][k]+=h; /*completely updating the stresses sxx and szz */ - stress->sxx[j][i][k]+=(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=(dthalbe*mem->rzz[j][i][k]); } } break; @@ -247,12 +245,12 @@ float *** vz){ /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=ryy[j][i][k]=0.0; + stress->syy[j][i][k]=mem->ryy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } @@ -267,39 +265,39 @@ float *** vz){ /* first calculate spatial derivatives of components of particle velocities */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4]))/DZ; /* partially updating sxx and szz in the same way*/ - f=u[j][i][k]*2.0*(1.0+L*taus[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); + f=mod->u[j][i][k]*2.0*(1.0+L*mod->taus[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); - stress->sxx[j][i][k]+=h-(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=h-(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=h-(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=h-(dthalbe*mem->rzz[j][i][k]); /* updating the memory-variable rxx, rzz at the free surface */ - b=eta[1]/(1.0+(eta[1]*0.5)); - d=2.0*u[j][i][k]*taus[j][i][k]; - e=pi[j][i][k]*taup[j][i][k]; + b=mod->eta[1]/(1.0+(mod->eta[1]*0.5)); + d=2.0*mod->u[j][i][k]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->taup[j][i][k]; h=b*(((d-e)*((f/g)-1.0)*(vxx+vzz))-((d-e)*vyy)); - rxx[j][i][k]+=h; - rzz[j][i][k]+=h; + mem->rxx[j][i][k]+=h; + mem->rzz[j][i][k]+=h; /*completely updating the stresses sxx and szz */ - stress->sxx[j][i][k]+=(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=(dthalbe*mem->rzz[j][i][k]); } } break; @@ -317,12 +315,12 @@ float *** vz){ /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=ryy[j][i][k]=0.0; + stress->syy[j][i][k]=mem->ryy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } @@ -337,42 +335,42 @@ float *** vz){ /* first calculate spatial derivatives of components of particle velocities */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5]))/DZ; /* partially updating sxx and szz in the same way*/ - f=u[j][i][k]*2.0*(1.0+L*taus[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); + f=mod->u[j][i][k]*2.0*(1.0+L*mod->taus[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); - stress->sxx[j][i][k]+=h-(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=h-(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=h-(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=h-(dthalbe*mem->rzz[j][i][k]); /* updating the memory-variable rxx, rzz at the free surface */ - b=eta[1]/(1.0+(eta[1]*0.5)); - d=2.0*u[j][i][k]*taus[j][i][k]; - e=pi[j][i][k]*taup[j][i][k]; + b=mod->eta[1]/(1.0+(mod->eta[1]*0.5)); + d=2.0*mod->u[j][i][k]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->taup[j][i][k]; h=b*(((d-e)*((f/g)-1.0)*(vxx+vzz))-((d-e)*vyy)); - rxx[j][i][k]+=h; - rzz[j][i][k]+=h; + mem->rxx[j][i][k]+=h; + mem->rzz[j][i][k]+=h; /*completely updating the stresses sxx and szz */ - stress->sxx[j][i][k]+=(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=(dthalbe*mem->rzz[j][i][k]); } } break; @@ -393,12 +391,12 @@ float *** vz){ /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=ryy[j][i][k]=0.0; + stress->syy[j][i][k]=mem->ryy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } @@ -413,45 +411,45 @@ float *** vz){ /* first calculate spatial derivatives of components of particle velocities */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k])+ - b6*(vx[j][i+5][k]-vx[j][i-6][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k])+ + b6*(vel->vx[j][i+5][k]-vel->vx[j][i-6][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k])+ - b6*(vy[j+5][i][k]-vy[j-6][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k])+ + b6*(vel->vy[j+5][i][k]-vel->vy[j-6][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5])+ - b6*(vz[j][i][k+5]-vz[j][i][k-6]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5])+ + b6*(vel->vz[j][i][k+5]-vel->vz[j][i][k-6]))/DZ; /* partially updating sxx and szz in the same way*/ - f=u[j][i][k]*2.0*(1.0+L*taus[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); + f=mod->u[j][i][k]*2.0*(1.0+L*mod->taus[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); - stress->sxx[j][i][k]+=h-(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=h-(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=h-(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=h-(dthalbe*mem->rzz[j][i][k]); /* updating the memory-variable rxx, rzz at the free surface */ - b=eta[1]/(1.0+(eta[1]*0.5)); - d=2.0*u[j][i][k]*taus[j][i][k]; - e=pi[j][i][k]*taup[j][i][k]; + b=mod->eta[1]/(1.0+(mod->eta[1]*0.5)); + d=2.0*mod->u[j][i][k]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->taup[j][i][k]; h=b*(((d-e)*((f/g)-1.0)*(vxx+vzz))-((d-e)*vyy)); - rxx[j][i][k]+=h; - rzz[j][i][k]+=h; + mem->rxx[j][i][k]+=h; + mem->rzz[j][i][k]+=h; /*completely updating the stresses sxx and szz */ - stress->sxx[j][i][k]+=(dthalbe*rxx[j][i][k]); - szz[j][i][k]+=(dthalbe*rzz[j][i][k]); + stress->sxx[j][i][k]+=(dthalbe*mem->rxx[j][i][k]); + stress->szz[j][i][k]+=(dthalbe*mem->rzz[j][i][k]); } } break; diff --git a/src/surface_ssg_elastic.c b/src/surface_ssg_elastic.c index f31d16e..7c66b30 100644 --- a/src/surface_ssg_elastic.c +++ b/src/surface_ssg_elastic.c @@ -23,9 +23,8 @@ #include "fd.h" -void surface_elastic(int ndepth, float *** u, float *** pi, - st_stress *stress, float ***syy, float ***szz, float *** sxy,float *** syz, - float *** vx, float *** vy, float *** vz){ +void surface_elastic(int ndepth, st_model *mod, + st_stress *stress, st_velocity *vel){ int i, k ,j, fdoh,m; @@ -52,24 +51,24 @@ void surface_elastic(int ndepth, float *** u, float *** pi, /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=0.0; + stress->syy[j][i][k]=0.0; - syy[j-1][i][k]=-syy[j+1][i][k]; - sxy[j-1][i][k]=-sxy[j][i][k]; - sxy[j-2][i][k]=-sxy[j+1][i][k]; - syz[j-1][i][k]=-syz[j][i][k]; - syz[j-2][i][k]=-syz[j+1][i][k]; + stress->syy[j-1][i][k]=-stress->syy[j+1][i][k]; + stress->sxy[j-1][i][k]=-stress->sxy[j][i][k]; + stress->sxy[j-2][i][k]=-stress->sxy[j+1][i][k]; + stress->syz[j-1][i][k]=-stress->syz[j][i][k]; + stress->syz[j-2][i][k]=-stress->syz[j+1][i][k]; - vxx = (vx[j][i][k]-vx[j][i-1][k])/DX; - vyy = (vy[j][i][k]-vy[j-1][i][k])/DY; - vzz = (vz[j][i][k]-vz[j][i][k-1])/DZ; + vxx = (vel->vx[j][i][k]-vel->vx[j][i-1][k])/DX; + vyy = (vel->vy[j][i][k]-vel->vy[j-1][i][k])/DY; + vzz = (vel->vz[j][i][k]-vel->vz[j][i][k-1])/DZ; - f=u[j][i][k]*2.0; - g=pi[j][i][k]; + f=mod->u[j][i][k]*2.0; + g=mod->pi[j][i][k]; h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); stress->sxx[j][i][k]+=h; - szz[j][i][k]+=h; + stress->szz[j][i][k]+=h; } @@ -89,23 +88,23 @@ void surface_elastic(int ndepth, float *** u, float *** pi, /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=0.0; + stress->syy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; - f=u[j][i][k]*2.0; - g=pi[j][i][k]; + f=mod->u[j][i][k]*2.0; + g=mod->pi[j][i][k]; h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); stress->sxx[j][i][k]+=h; - szz[j][i][k]+=h; + stress->szz[j][i][k]+=h; } @@ -124,33 +123,33 @@ void surface_elastic(int ndepth, float *** u, float *** pi, /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=0.0; + stress->syy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3]))/DZ; - f=u[j][i][k]*2.0; - g=pi[j][i][k]; + f=mod->u[j][i][k]*2.0; + g=mod->pi[j][i][k]; h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); stress->sxx[j][i][k]+=h; - szz[j][i][k]+=h; + stress->szz[j][i][k]+=h; } } break; @@ -168,36 +167,36 @@ void surface_elastic(int ndepth, float *** u, float *** pi, /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=0.0; + stress->syy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4]))/DZ; - f=u[j][i][k]*2.0; - g=pi[j][i][k]; + f=mod->u[j][i][k]*2.0; + g=mod->pi[j][i][k]; h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); stress->sxx[j][i][k]+=h; - szz[j][i][k]+=h; + stress->szz[j][i][k]+=h; } @@ -217,38 +216,38 @@ void surface_elastic(int ndepth, float *** u, float *** pi, /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=0.0; + stress->syy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5]))/DZ; - f=u[j][i][k]*2.0; - g=pi[j][i][k]; + f=mod->u[j][i][k]*2.0; + g=mod->pi[j][i][k]; h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); stress->sxx[j][i][k]+=h; - szz[j][i][k]+=h; + stress->szz[j][i][k]+=h; } } break; @@ -269,41 +268,41 @@ void surface_elastic(int ndepth, float *** u, float *** pi, /*Mirroring the components of the stress tensor to make a stress free surface (method of imaging, Levander, 1988)*/ - syy[j][i][k]=0.0; + stress->syy[j][i][k]=0.0; for (m=1; m<=fdoh; m++) { - syy[j-m][i][k]=-syy[j+m][i][k]; - sxy[j-m][i][k]=-sxy[j+m-1][i][k]; - syz[j-m][i][k]=-syz[j+m-1][i][k]; + stress->syy[j-m][i][k]=-stress->syy[j+m][i][k]; + stress->sxy[j-m][i][k]=-stress->sxy[j+m-1][i][k]; + stress->syz[j-m][i][k]=-stress->syz[j+m-1][i][k]; } - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k])+ - b6*(vx[j][i+5][k]-vx[j][i-6][k]))/DX; - - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k])+ - b6*(vy[j+5][i][k]-vy[j-6][i][k]))/DY; - - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5])+ - b6*(vz[j][i][k+5]-vz[j][i][k-6]))/DZ; - - f=u[j][i][k]*2.0; - g=pi[j][i][k]; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k])+ + b6*(vel->vx[j][i+5][k]-vel->vx[j][i-6][k]))/DX; + + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k])+ + b6*(vel->vy[j+5][i][k]-vel->vy[j-6][i][k]))/DY; + + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5])+ + b6*(vel->vz[j][i][k+5]-vel->vz[j][i][k-6]))/DZ; + + f=mod->u[j][i][k]*2.0; + g=mod->pi[j][i][k]; h=-(DT*(g-f)*(g-f)*(vxx+vzz)/g)-(DT*(g-f)*vyy); stress->sxx[j][i][k]+=h; - szz[j][i][k]+=h; + stress->szz[j][i][k]+=h; } } break; diff --git a/src/update_s_ssg.c b/src/update_s_ssg.c index def69ed..fe0d836 100755 --- a/src/update_s_ssg.c +++ b/src/update_s_ssg.c @@ -25,10 +25,8 @@ #include "fd.h" -double update_s(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, -st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rxx, float *** ryy, -float *** rzz, float *** rxy, float *** ryz, float *** rxz, float *** pi, float *** u, float *** uipjp, float *** ujpkp, float *** uipkp, -float *** taus, float *** tausipjp, float *** tausjpkp, float *** tausipkp, float *** taup, float * eta){ +double update_s(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, +st_stress *stress, st_visc_mem *mem, st_model *mod, st_model_av *mod_av){ extern float DT, DX, DY, DZ; @@ -61,34 +59,34 @@ float *** taus, float *** tausipjp, float *** tausjpkp, float *** tausip /* spatial derivatives of the components of the velocities are computed */ - vxx = (vx[j][i][k]-vx[j][i-1][k])/DX; - vxy = (vx[j+1][i][k]-vx[j][i][k])/DY; - vxz = (vx[j][i][k+1]-vx[j][i][k])/DZ; - vyx = (vy[j][i+1][k]-vy[j][i][k])/DX; - vyy = (vy[j][i][k]-vy[j-1][i][k])/DY; - vyz = (vy[j][i][k+1]-vy[j][i][k])/DZ; - vzx = (vz[j][i+1][k]-vz[j][i][k])/DX; - vzy = (vz[j+1][i][k]-vz[j][i][k])/DY; - vzz = (vz[j][i][k]-vz[j][i][k-1])/DZ; + vxx = (vel->vx[j][i][k]-vel->vx[j][i-1][k])/DX; + vxy = (vel->vx[j+1][i][k]-vel->vx[j][i][k])/DY; + vxz = (vel->vx[j][i][k+1]-vel->vx[j][i][k])/DZ; + vyx = (vel->vy[j][i+1][k]-vel->vy[j][i][k])/DX; + vyy = (vel->vy[j][i][k]-vel->vy[j-1][i][k])/DY; + vyz = (vel->vy[j][i][k+1]-vel->vy[j][i][k])/DZ; + vzx = (vel->vz[j][i+1][k]-vel->vz[j][i][k])/DX; + vzy = (vel->vz[j+1][i][k]-vel->vz[j][i][k])/DY; + vzz = (vel->vz[j][i][k]-vel->vz[j][i][k-1])/DZ; /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -98,46 +96,46 @@ float *** taus, float *** tausipjp, float *** tausjpkp, float *** tausip vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); @@ -162,34 +160,34 @@ break; /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -199,46 +197,46 @@ break; vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); @@ -263,60 +261,60 @@ break; /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k]))/DY; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2]))/DZ; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k]))/DX; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2]))/DZ; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k]))/DX; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k]))/DY; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3]))/DZ; /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -326,46 +324,46 @@ break; vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); @@ -390,69 +388,69 @@ break; /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k])+ - b4*(vx[j+4][i][k]-vx[j-3][i][k]))/DY; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k])+ + b4*(vel->vx[j+4][i][k]-vel->vx[j-3][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2])+ - b4*(vx[j][i][k+4]-vx[j][i][k-3]))/DZ; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2])+ + b4*(vel->vx[j][i][k+4]-vel->vx[j][i][k-3]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k])+ - b4*(vy[j][i+4][k]-vy[j][i-3][k]))/DX; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k])+ + b4*(vel->vy[j][i+4][k]-vel->vy[j][i-3][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2])+ - b4*(vy[j][i][k+4]-vy[j][i][k-3]))/DZ; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2])+ + b4*(vel->vy[j][i][k+4]-vel->vy[j][i][k-3]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k])+ - b4*(vz[j][i+4][k]-vz[j][i-3][k]))/DX; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k])+ + b4*(vel->vz[j][i+4][k]-vel->vz[j][i-3][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k])+ - b4*(vz[j+4][i][k]-vz[j-3][i][k]))/DY; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k])+ + b4*(vel->vz[j+4][i][k]-vel->vz[j-3][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4]))/DZ; /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -462,46 +460,46 @@ break; vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); @@ -526,78 +524,78 @@ case 10 : /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k])+ - b4*(vx[j+4][i][k]-vx[j-3][i][k])+ - b5*(vx[j+5][i][k]-vx[j-4][i][k]))/DY; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k])+ + b4*(vel->vx[j+4][i][k]-vel->vx[j-3][i][k])+ + b5*(vel->vx[j+5][i][k]-vel->vx[j-4][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2])+ - b4*(vx[j][i][k+4]-vx[j][i][k-3])+ - b5*(vx[j][i][k+5]-vx[j][i][k-4]))/DZ; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2])+ + b4*(vel->vx[j][i][k+4]-vel->vx[j][i][k-3])+ + b5*(vel->vx[j][i][k+5]-vel->vx[j][i][k-4]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k])+ - b4*(vy[j][i+4][k]-vy[j][i-3][k])+ - b5*(vy[j][i+5][k]-vy[j][i-4][k]))/DX; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k])+ + b4*(vel->vy[j][i+4][k]-vel->vy[j][i-3][k])+ + b5*(vel->vy[j][i+5][k]-vel->vy[j][i-4][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2])+ - b4*(vy[j][i][k+4]-vy[j][i][k-3])+ - b5*(vy[j][i][k+5]-vy[j][i][k-4]))/DZ; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2])+ + b4*(vel->vy[j][i][k+4]-vel->vy[j][i][k-3])+ + b5*(vel->vy[j][i][k+5]-vel->vy[j][i][k-4]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k])+ - b4*(vz[j][i+4][k]-vz[j][i-3][k])+ - b5*(vz[j][i+5][k]-vz[j][i-4][k]))/DX; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k])+ + b4*(vel->vz[j][i+4][k]-vel->vz[j][i-3][k])+ + b5*(vel->vz[j][i+5][k]-vel->vz[j][i-4][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k])+ - b4*(vz[j+4][i][k]-vz[j-3][i][k])+ - b5*(vz[j+5][i][k]-vz[j-4][i][k]))/DY; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k])+ + b4*(vel->vz[j+4][i][k]-vel->vz[j-3][i][k])+ + b5*(vel->vz[j+5][i][k]-vel->vz[j-4][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5]))/DZ; /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -607,46 +605,46 @@ case 10 : vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); @@ -675,87 +673,87 @@ case 12 : /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k])+ - b6*(vx[j][i+5][k]-vx[j][i-6][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k])+ + b6*(vel->vx[j][i+5][k]-vel->vx[j][i-6][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k])+ - b4*(vx[j+4][i][k]-vx[j-3][i][k])+ - b5*(vx[j+5][i][k]-vx[j-4][i][k])+ - b6*(vx[j+6][i][k]-vx[j-5][i][k]))/DY; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k])+ + b4*(vel->vx[j+4][i][k]-vel->vx[j-3][i][k])+ + b5*(vel->vx[j+5][i][k]-vel->vx[j-4][i][k])+ + b6*(vel->vx[j+6][i][k]-vel->vx[j-5][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2])+ - b4*(vx[j][i][k+4]-vx[j][i][k-3])+ - b5*(vx[j][i][k+5]-vx[j][i][k-4])+ - b6*(vx[j][i][k+6]-vx[j][i][k-5]))/DZ; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2])+ + b4*(vel->vx[j][i][k+4]-vel->vx[j][i][k-3])+ + b5*(vel->vx[j][i][k+5]-vel->vx[j][i][k-4])+ + b6*(vel->vx[j][i][k+6]-vel->vx[j][i][k-5]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k])+ - b4*(vy[j][i+4][k]-vy[j][i-3][k])+ - b5*(vy[j][i+5][k]-vy[j][i-4][k])+ - b6*(vy[j][i+6][k]-vy[j][i-5][k]))/DX; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k])+ + b4*(vel->vy[j][i+4][k]-vel->vy[j][i-3][k])+ + b5*(vel->vy[j][i+5][k]-vel->vy[j][i-4][k])+ + b6*(vel->vy[j][i+6][k]-vel->vy[j][i-5][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k])+ - b6*(vy[j+5][i][k]-vy[j-6][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k])+ + b6*(vel->vy[j+5][i][k]-vel->vy[j-6][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2])+ - b4*(vy[j][i][k+4]-vy[j][i][k-3])+ - b5*(vy[j][i][k+5]-vy[j][i][k-4])+ - b6*(vy[j][i][k+6]-vy[j][i][k-5]))/DZ; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2])+ + b4*(vel->vy[j][i][k+4]-vel->vy[j][i][k-3])+ + b5*(vel->vy[j][i][k+5]-vel->vy[j][i][k-4])+ + b6*(vel->vy[j][i][k+6]-vel->vy[j][i][k-5]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k])+ - b4*(vz[j][i+4][k]-vz[j][i-3][k])+ - b5*(vz[j][i+5][k]-vz[j][i-4][k])+ - b6*(vz[j][i+6][k]-vz[j][i-5][k]))/DX; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k])+ + b4*(vel->vz[j][i+4][k]-vel->vz[j][i-3][k])+ + b5*(vel->vz[j][i+5][k]-vel->vz[j][i-4][k])+ + b6*(vel->vz[j][i+6][k]-vel->vz[j][i-5][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k])+ - b4*(vz[j+4][i][k]-vz[j-3][i][k])+ - b5*(vz[j+5][i][k]-vz[j-4][i][k])+ - b6*(vz[j+6][i][k]-vz[j-5][i][k]))/DY; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k])+ + b4*(vel->vz[j+4][i][k]-vel->vz[j-3][i][k])+ + b5*(vel->vz[j+5][i][k]-vel->vz[j-4][i][k])+ + b6*(vel->vz[j+6][i][k]-vel->vz[j-5][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5])+ - b6*(vz[j][i][k+5]-vz[j][i][k-6]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5])+ + b6*(vel->vz[j][i][k+5]-vel->vz[j][i][k-6]))/DZ; /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -765,46 +763,46 @@ case 12 : vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); diff --git a/src/update_s_ssg_CPML.c b/src/update_s_ssg_CPML.c index ae76d87..b90b1a8 100644 --- a/src/update_s_ssg_CPML.c +++ b/src/update_s_ssg_CPML.c @@ -27,14 +27,9 @@ #include "fd.h" -double update_s_CPML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, -st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rxx, float *** ryy, -float *** rzz, float *** rxy, float *** ryz, float *** rxz, float *** pi, float *** u, float *** uipjp, float *** ujpkp, float *** uipkp, -float *** taus, float *** tausipjp, float *** tausjpkp, float *** tausipkp, float *** taup, float * eta, -float * K_x, float * a_x, float * b_x, float * K_x_half, float * a_x_half, float * b_x_half, -float * K_y, float * a_y, float * b_y, float * K_y_half, float * a_y_half, float * b_y_half, -float * K_z, float * a_z, float * b_z, float * K_z_half, float * a_z_half, float * b_z_half, -float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, float *** psi_vyy, float *** psi_vzy, float *** psi_vxz, float *** psi_vyz, float *** psi_vzz){ +double update_s_CPML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, +st_stress *stress, st_visc_mem *mem, st_model *mod, st_model_av *mod_av, +st_pml_coeff *pml_coeff,st_pml_wfd *pml_wfd){ extern float DT, DX, DY, DZ; @@ -67,81 +62,81 @@ float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, floa for (i=1;i<=FW;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; - psi_vxx[j][i][k] = b_x[i] * psi_vxx[j][i][k] + a_x[i] * vxx; - vxx = vxx / K_x[i] + psi_vxx[j][i][k]; - psi_vyx[j][i][k] = b_x_half[i] * psi_vyx[j][i][k] + a_x_half[i] * vyx; - vyx = vyx / K_x_half[i] + psi_vyx[j][i][k]; - psi_vzx[j][i][k] = b_x_half[i] * psi_vzx[j][i][k] + a_x_half[i] * vzx; - vzx = vzx / K_x_half[i] + psi_vzx[j][i][k]; + pml_wfd->psi_vxx[j][i][k] = pml_coeff->b_x[i] * pml_wfd->psi_vxx[j][i][k] + pml_coeff->a_x[i] * vxx; + vxx = vxx / pml_coeff->K_x[i] + pml_wfd->psi_vxx[j][i][k]; + pml_wfd->psi_vyx[j][i][k] = pml_coeff->b_x_half[i] * pml_wfd->psi_vyx[j][i][k] + pml_coeff->a_x_half[i] * vyx; + vyx = vyx / pml_coeff->K_x_half[i] + pml_wfd->psi_vyx[j][i][k]; + pml_wfd->psi_vzx[j][i][k] = pml_coeff->b_x_half[i] * pml_wfd->psi_vzx[j][i][k] + pml_coeff->a_x_half[i] * vzx; + vzx = vzx / pml_coeff->K_x_half[i] + pml_wfd->psi_vzx[j][i][k]; if((POS[2]==0 && FREE_SURF==0) && (j<=FW)){ - psi_vxy[j][i][k] = b_y_half[j] * psi_vxy[j][i][k] + a_y_half[j] * vxy; - vxy = vxy / K_y_half[j] + psi_vxy[j][i][k]; - psi_vyy[j][i][k] = b_y[j] * psi_vyy[j][i][k] + a_y[j] * vyy; - vyy = vyy / K_y[j] + psi_vyy[j][i][k]; - psi_vzy[j][i][k] = b_y_half[j] * psi_vzy[j][i][k] + a_y_half[j] * vzy; - vzy = vzy / K_y_half[j] + psi_vzy[j][i][k]; } + pml_wfd->psi_vxy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vxy[j][i][k] + pml_coeff->a_y_half[j] * vxy; + vxy = vxy / pml_coeff->K_y_half[j] + pml_wfd->psi_vxy[j][i][k]; + pml_wfd->psi_vyy[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_vyy[j][i][k] + pml_coeff->a_y[j] * vyy; + vyy = vyy / pml_coeff->K_y[j] + pml_wfd->psi_vyy[j][i][k]; + pml_wfd->psi_vzy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vzy[j][i][k] + pml_coeff->a_y_half[j] * vzy; + vzy = vzy / pml_coeff->K_y_half[j] + pml_wfd->psi_vzy[j][i][k]; } if((POS[2]==NPROCY-1) && (j>=ny2+1)){ h1 = (j-ny2+FW); - psi_vxy[h1][i][k] = b_y_half[h1] * psi_vxy[h1][i][k] + a_y_half[h1] * vxy; - vxy = vxy / K_y_half[h1] + psi_vxy[h1][i][k]; - psi_vyy[h1][i][k] = b_y[h1] * psi_vyy[h1][i][k] + a_y[h1] * vyy; - vyy = vyy / K_y[h1] + psi_vyy[h1][i][k]; - psi_vzy[h1][i][k] = b_y_half[h1] * psi_vzy[h1][i][k] + a_y_half[h1] * vzy; - vzy = vzy / K_y_half[h1] + psi_vzy[h1][i][k]; } + pml_wfd->psi_vxy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vxy[h1][i][k] + pml_coeff->a_y_half[h1] * vxy; + vxy = vxy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vxy[h1][i][k]; + pml_wfd->psi_vyy[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_vyy[h1][i][k] + pml_coeff->a_y[h1] * vyy; + vyy = vyy / pml_coeff->K_y[h1] + pml_wfd->psi_vyy[h1][i][k]; + pml_wfd->psi_vzy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vzy[h1][i][k] + pml_coeff->a_y_half[h1] * vzy; + vzy = vzy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vzy[h1][i][k]; } if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -151,46 +146,46 @@ float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, floa vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); } } } @@ -201,86 +196,86 @@ if(POS[1]==NPROCX-1){ for (i=nx2+1;i<=nx2+FW;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; h1 = i-nx2+FW; - psi_vxx[j][h1][k] = b_x[h1] * psi_vxx[j][h1][k] + a_x[h1] * vxx; - vxx = vxx /K_x[h1] + psi_vxx[j][h1][k]; - psi_vyx[j][h1][k] = b_x_half[h1] * psi_vyx[j][h1][k] + a_x_half[h1] * vyx; - vyx = vyx /K_x_half[h1] + psi_vyx[j][h1][k]; - psi_vzx[j][h1][k] = b_x_half[h1] * psi_vzx[j][h1][k] + a_x_half[h1] * vzx; - vzx = vzx / K_x_half[h1] +psi_vzx[j][h1][k]; + pml_wfd->psi_vxx[j][h1][k] = pml_coeff->b_x[h1] * pml_wfd->psi_vxx[j][h1][k] + pml_coeff->a_x[h1] * vxx; + vxx = vxx /pml_coeff->K_x[h1] + pml_wfd->psi_vxx[j][h1][k]; + pml_wfd->psi_vyx[j][h1][k] = pml_coeff->b_x_half[h1] * pml_wfd->psi_vyx[j][h1][k] + pml_coeff->a_x_half[h1] * vyx; + vyx = vyx /pml_coeff->K_x_half[h1] + pml_wfd->psi_vyx[j][h1][k]; + pml_wfd->psi_vzx[j][h1][k] = pml_coeff->b_x_half[h1] * pml_wfd->psi_vzx[j][h1][k] + pml_coeff->a_x_half[h1] * vzx; + vzx = vzx / pml_coeff->K_x_half[h1] +pml_wfd->psi_vzx[j][h1][k]; if((POS[2]==0 && FREE_SURF==0) && (j<=FW)){ - psi_vxy[j][i][k] = b_y_half[j] * psi_vxy[j][i][k] + a_y_half[j] * vxy; - vxy = vxy / K_y_half[j] + psi_vxy[j][i][k]; - psi_vyy[j][i][k] = b_y[j] * psi_vyy[j][i][k] + a_y[j] * vyy; - vyy = vyy / K_y[j] + psi_vyy[j][i][k]; - psi_vzy[j][i][k] = b_y_half[j] * psi_vzy[j][i][k] + a_y_half[j] * vzy; - vzy = vzy / K_y_half[j] + psi_vzy[j][i][k]; } + pml_wfd->psi_vxy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vxy[j][i][k] + pml_coeff->a_y_half[j] * vxy; + vxy = vxy / pml_coeff->K_y_half[j] + pml_wfd->psi_vxy[j][i][k]; + pml_wfd->psi_vyy[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_vyy[j][i][k] + pml_coeff->a_y[j] * vyy; + vyy = vyy / pml_coeff->K_y[j] + pml_wfd->psi_vyy[j][i][k]; + pml_wfd->psi_vzy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vzy[j][i][k] + pml_coeff->a_y_half[j] * vzy; + vzy = vzy / pml_coeff->K_y_half[j] + pml_wfd->psi_vzy[j][i][k]; } if((POS[2]==NPROCY-1) && (j>=ny2+1)){ h1 = (j-ny2+FW); - psi_vxy[h1][i][k] = b_y_half[h1] * psi_vxy[h1][i][k] + a_y_half[h1] * vxy; - vxy = vxy / K_y_half[h1] + psi_vxy[h1][i][k]; - psi_vyy[h1][i][k] = b_y[h1] * psi_vyy[h1][i][k] + a_y[h1] * vyy; - vyy = vyy / K_y[h1] + psi_vyy[h1][i][k]; - psi_vzy[h1][i][k] = b_y_half[h1] * psi_vzy[h1][i][k] + a_y_half[h1] * vzy; - vzy = vzy / K_y_half[h1] + psi_vzy[h1][i][k]; } + pml_wfd->psi_vxy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vxy[h1][i][k] + pml_coeff->a_y_half[h1] * vxy; + vxy = vxy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vxy[h1][i][k]; + pml_wfd->psi_vyy[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_vyy[h1][i][k] + pml_coeff->a_y[h1] * vyy; + vyy = vyy / pml_coeff->K_y[h1] + pml_wfd->psi_vyy[h1][i][k]; + pml_wfd->psi_vzy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vzy[h1][i][k] + pml_coeff->a_y_half[h1] * vzy; + vzy = vzy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vzy[h1][i][k]; } if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -290,46 +285,46 @@ if(POS[1]==NPROCX-1){ vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); } } } @@ -340,62 +335,62 @@ if(POS[1]==NPROCX-1){ for (i=nx1;i<=nx2;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; - - psi_vxy[j][i][k] = b_y_half[j] * psi_vxy[j][i][k] + a_y_half[j] * vxy; - vxy = vxy / K_y_half[j] + psi_vxy[j][i][k]; - psi_vyy[j][i][k] = b_y[j] * psi_vyy[j][i][k] + a_y[j] * vyy; - vyy = vyy / K_y[j] + psi_vyy[j][i][k]; - psi_vzy[j][i][k] = b_y_half[j] * psi_vzy[j][i][k] + a_y_half[j] * vzy; - vzy = vzy / K_y_half[j] + psi_vzy[j][i][k]; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; + + pml_wfd->psi_vxy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vxy[j][i][k] + pml_coeff->a_y_half[j] * vxy; + vxy = vxy / pml_coeff->K_y_half[j] + pml_wfd->psi_vxy[j][i][k]; + pml_wfd->psi_vyy[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_vyy[j][i][k] + pml_coeff->a_y[j] * vyy; + vyy = vyy / pml_coeff->K_y[j] + pml_wfd->psi_vyy[j][i][k]; + pml_wfd->psi_vzy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vzy[j][i][k] + pml_coeff->a_y_half[j] * vzy; + vzy = vzy / pml_coeff->K_y_half[j] + pml_wfd->psi_vzy[j][i][k]; if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} /* computing sums of the old memory variables in this version only one mechanism is possi ble */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -405,46 +400,46 @@ if(POS[1]==NPROCX-1){ vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); } } } @@ -455,63 +450,63 @@ if(POS[1]==NPROCX-1){ for (i=nx1;i<=nx2;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; h1 = (j-ny2+FW); - psi_vxy[h1][i][k] = b_y_half[h1] * psi_vxy[h1][i][k] + a_y_half[h1] * vxy; - vxy = vxy / K_y_half[h1] + psi_vxy[h1][i][k]; - psi_vyy[h1][i][k] = b_y[h1] * psi_vyy[h1][i][k] + a_y[h1] * vyy; - vyy = vyy / K_y[h1] + psi_vyy[h1][i][k]; - psi_vzy[h1][i][k] = b_y_half[h1] * psi_vzy[h1][i][k] + a_y_half[h1] * vzy; - vzy = vzy / K_y_half[h1] + psi_vzy[h1][i][k]; + pml_wfd->psi_vxy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vxy[h1][i][k] + pml_coeff->a_y_half[h1] * vxy; + vxy = vxy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vxy[h1][i][k]; + pml_wfd->psi_vyy[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_vyy[h1][i][k] + pml_coeff->a_y[h1] * vyy; + vyy = vyy / pml_coeff->K_y[h1] + pml_wfd->psi_vyy[h1][i][k]; + pml_wfd->psi_vzy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vzy[h1][i][k] + pml_coeff->a_y_half[h1] * vzy; + vzy = vzy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vzy[h1][i][k]; if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} /* computing sums of the old memory variables in this version only one mechanism is possible */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -521,46 +516,46 @@ if(POS[1]==NPROCX-1){ vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); } } @@ -573,41 +568,41 @@ if(POS[1]==NPROCX-1){ for (i=nx1;i<=nx2;i++){ for (k=1;k<=FW;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; - - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k]; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; + + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k]; /* computing sums of the old memory variables in this version only one mechanism is possible */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -617,46 +612,46 @@ if(POS[1]==NPROCX-1){ vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); } } } @@ -668,44 +663,44 @@ if(POS[1]==NPROCX-1){ for (i=nx1;i<=nx2;i++){ for (k=nz2+1;k<=nz2+FW;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1]; + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1]; /* computing sums of the old memory variables in this version only one mechanism is possible */ - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT*(1.0+L*tausipjp[j][i][k]); - fjpkp=ujpkp[j][i][k]*DT*(1.0+L*tausjpkp[j][i][k]); - fipkp=uipkp[j][i][k]*DT*(1.0+L*tausipkp[j][i][k]); - g=pi[j][i][k]*(1.0+L*taup[j][i][k]); - f=2.0*u[j][i][k]*(1.0+L*taus[j][i][k]); + fipjp=mod_av->uipjp[j][i][k]*DT*(1.0+L*mod_av->tausipjp[j][i][k]); + fjpkp=mod_av->ujpkp[j][i][k]*DT*(1.0+L*mod_av->tausjpkp[j][i][k]); + fipkp=mod_av->uipkp[j][i][k]*DT*(1.0+L*mod_av->tausipkp[j][i][k]); + g=mod->pi[j][i][k]*(1.0+L*mod->taup[j][i][k]); + f=2.0*mod->u[j][i][k]*(1.0+L*mod->taus[j][i][k]); vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -715,46 +710,46 @@ if(POS[1]==NPROCX-1){ vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); - syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); - sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(fipjp*vxyyx)+(dthalbe*sumrxy); + stress->syz[j][i][k]+=(fjpkp*vyzzy)+(dthalbe*sumryz); + stress->sxz[j][i][k]+=(fipkp*vxzzx)+(dthalbe*sumrxz); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz))+(dthalbe*sumrxx); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz))+(dthalbe*sumryy); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy))+(dthalbe*sumrzz); /* in the case of L=1 update the memory-variables without suming*/ l=1; - b=1.0/(1.0+(eta[l]*0.5)); - c=1.0-(eta[l]*0.5); - dipjp=uipjp[j][i][k]*eta[l]*tausipjp[j][i][k]; - djpkp=ujpkp[j][i][k]*eta[l]*tausjpkp[j][i][k]; - dipkp=uipkp[j][i][k]*eta[l]*tausipkp[j][i][k]; - d=2.0*u[j][i][k]*eta[l]*taus[j][i][k]; - e=pi[j][i][k]*eta[l]*taup[j][i][k]; - rxy[j][i][k]=b*(rxy[j][i][k]*c-(dipjp*vxyyx)); - ryz[j][i][k]=b*(ryz[j][i][k]*c-(djpkp*vyzzy)); - rxz[j][i][k]=b*(rxz[j][i][k]*c-(dipkp*vxzzx)); - rxx[j][i][k]=b*(rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); - ryy[j][i][k]=b*(ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); - rzz[j][i][k]=b*(rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); - sumrxy=rxy[j][i][k]; - sumryz=ryz[j][i][k]; - sumrxz=rxz[j][i][k]; - sumrxx=rxx[j][i][k]; - sumryy=ryy[j][i][k]; - sumrzz=rzz[j][i][k]; + b=1.0/(1.0+(mod->eta[l]*0.5)); + c=1.0-(mod->eta[l]*0.5); + dipjp=mod_av->uipjp[j][i][k]*mod->eta[l]*mod_av->tausipjp[j][i][k]; + djpkp=mod_av->ujpkp[j][i][k]*mod->eta[l]*mod_av->tausjpkp[j][i][k]; + dipkp=mod_av->uipkp[j][i][k]*mod->eta[l]*mod_av->tausipkp[j][i][k]; + d=2.0*mod->u[j][i][k]*mod->eta[l]*mod->taus[j][i][k]; + e=mod->pi[j][i][k]*mod->eta[l]*mod->taup[j][i][k]; + mem->rxy[j][i][k]=b*(mem->rxy[j][i][k]*c-(dipjp*vxyyx)); + mem->ryz[j][i][k]=b*(mem->ryz[j][i][k]*c-(djpkp*vyzzy)); + mem->rxz[j][i][k]=b*(mem->rxz[j][i][k]*c-(dipkp*vxzzx)); + mem->rxx[j][i][k]=b*(mem->rxx[j][i][k]*c-(e*vxxyyzz)+(d*vyyzz)); + mem->ryy[j][i][k]=b*(mem->ryy[j][i][k]*c-(e*vxxyyzz)+(d*vxxzz)); + mem->rzz[j][i][k]=b*(mem->rzz[j][i][k]*c-(e*vxxyyzz)+(d*vxxyy)); + sumrxy=mem->rxy[j][i][k]; + sumryz=mem->ryz[j][i][k]; + sumrxz=mem->rxz[j][i][k]; + sumrxx=mem->rxx[j][i][k]; + sumryy=mem->ryy[j][i][k]; + sumrzz=mem->rzz[j][i][k]; /* and now the components of the stress tensor are completely updated */ - sxy[j][i][k]+=(dthalbe*sumrxy); - syz[j][i][k]+=(dthalbe*sumryz); - sxz[j][i][k]+=(dthalbe*sumrxz); + stress->sxy[j][i][k]+=(dthalbe*sumrxy); + stress->syz[j][i][k]+=(dthalbe*sumryz); + stress->sxz[j][i][k]+=(dthalbe*sumrxz); stress->sxx[j][i][k]+=(dthalbe*sumrxx); - syy[j][i][k]+=(dthalbe*sumryy); - szz[j][i][k]+=(dthalbe*sumrzz); + stress->syy[j][i][k]+=(dthalbe*sumryy); + stress->szz[j][i][k]+=(dthalbe*sumrzz); } } } diff --git a/src/update_s_ssg_CPML_elastic.c b/src/update_s_ssg_CPML_elastic.c index 791486f..645edca 100644 --- a/src/update_s_ssg_CPML_elastic.c +++ b/src/update_s_ssg_CPML_elastic.c @@ -27,13 +27,9 @@ #include "fd.h" -double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, - st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** pi, float *** u, - float *** uipjp, float *** ujpkp, float *** uipkp, - float * K_x, float * a_x, float * b_x, float * K_x_half, float * a_x_half, float * b_x_half, - float * K_y, float * a_y, float * b_y, float * K_y_half, float * a_y_half, float * b_y_half, - float * K_z, float * a_z, float * b_z, float * K_z_half, float * a_z_half, float * b_z_half, - float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, float *** psi_vyy, float *** psi_vzy, float *** psi_vxz, float *** psi_vyz, float *** psi_vzz){ +double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, + st_stress *stress, st_model *mod, st_model_av *mod_av, + st_pml_coeff *pml_coeff,st_pml_wfd *pml_wfd){ extern float DT, DX, DY, DZ; @@ -61,71 +57,71 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz for (i=1;i<=FW;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; - psi_vxx[j][i][k] = b_x[i] * psi_vxx[j][i][k] + a_x[i] * vxx; - vxx = vxx / K_x[i] + psi_vxx[j][i][k]; - psi_vyx[j][i][k] = b_x_half[i] * psi_vyx[j][i][k] + a_x_half[i] * vyx; - vyx = vyx / K_x_half[i] + psi_vyx[j][i][k]; - psi_vzx[j][i][k] = b_x_half[i] * psi_vzx[j][i][k] + a_x_half[i] * vzx; - vzx = vzx / K_x_half[i] + psi_vzx[j][i][k]; + pml_wfd->psi_vxx[j][i][k] = pml_coeff->b_x[i] * pml_wfd->psi_vxx[j][i][k] + pml_coeff->a_x[i] * vxx; + vxx = vxx / pml_coeff->K_x[i] + pml_wfd->psi_vxx[j][i][k]; + pml_wfd->psi_vyx[j][i][k] = pml_coeff->b_x_half[i] * pml_wfd->psi_vyx[j][i][k] + pml_coeff->a_x_half[i] * vyx; + vyx = vyx / pml_coeff->K_x_half[i] + pml_wfd->psi_vyx[j][i][k]; + pml_wfd->psi_vzx[j][i][k] = pml_coeff->b_x_half[i] * pml_wfd->psi_vzx[j][i][k] + pml_coeff->a_x_half[i] * vzx; + vzx = vzx / pml_coeff->K_x_half[i] + pml_wfd->psi_vzx[j][i][k]; if((POS[2]==0 && FREE_SURF==0) && (j<=FW)){ - psi_vxy[j][i][k] = b_y_half[j] * psi_vxy[j][i][k] + a_y_half[j] * vxy; - vxy = vxy / K_y_half[j] + psi_vxy[j][i][k]; - psi_vyy[j][i][k] = b_y[j] * psi_vyy[j][i][k] + a_y[j] * vyy; - vyy = vyy / K_y[j] + psi_vyy[j][i][k]; - psi_vzy[j][i][k] = b_y_half[j] * psi_vzy[j][i][k] + a_y_half[j] * vzy; - vzy = vzy / K_y_half[j] + psi_vzy[j][i][k]; } + pml_wfd->psi_vxy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vxy[j][i][k] + pml_coeff->a_y_half[j] * vxy; + vxy = vxy / pml_coeff->K_y_half[j] + pml_wfd->psi_vxy[j][i][k]; + pml_wfd->psi_vyy[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_vyy[j][i][k] + pml_coeff->a_y[j] * vyy; + vyy = vyy / pml_coeff->K_y[j] + pml_wfd->psi_vyy[j][i][k]; + pml_wfd->psi_vzy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vzy[j][i][k] + pml_coeff->a_y_half[j] * vzy; + vzy = vzy / pml_coeff->K_y_half[j] + pml_wfd->psi_vzy[j][i][k]; } if((POS[2]==NPROCY-1) && (j>=ny2+1)){ h1 = (j-ny2+FW); - psi_vxy[h1][i][k] = b_y_half[h1] * psi_vxy[h1][i][k] + a_y_half[h1] * vxy; - vxy = vxy / K_y_half[h1] + psi_vxy[h1][i][k]; - psi_vyy[h1][i][k] = b_y[h1] * psi_vyy[h1][i][k] + a_y[h1] * vyy; - vyy = vyy / K_y[h1] + psi_vyy[h1][i][k]; - psi_vzy[h1][i][k] = b_y_half[h1] * psi_vzy[h1][i][k] + a_y_half[h1] * vzy; - vzy = vzy / K_y_half[h1] + psi_vzy[h1][i][k]; } + pml_wfd->psi_vxy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vxy[h1][i][k] + pml_coeff->a_y_half[h1] * vxy; + vxy = vxy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vxy[h1][i][k]; + pml_wfd->psi_vyy[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_vyy[h1][i][k] + pml_coeff->a_y[h1] * vyy; + vyy = vyy / pml_coeff->K_y[h1] + pml_wfd->psi_vyy[h1][i][k]; + pml_wfd->psi_vzy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vzy[h1][i][k] + pml_coeff->a_y_half[h1] * vzy; + vzy = vzy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vzy[h1][i][k]; } if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -135,12 +131,12 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } } @@ -152,75 +148,75 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz for (i=nx2+1;i<=nx2+FW;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; h1 = i-nx2+FW; - psi_vxx[j][h1][k] = b_x[h1] * psi_vxx[j][h1][k] + a_x[h1] * vxx; - vxx = vxx /K_x[h1] + psi_vxx[j][h1][k]; - psi_vyx[j][h1][k] = b_x_half[h1] * psi_vyx[j][h1][k] + a_x_half[h1] * vyx; - vyx = vyx /K_x_half[h1] + psi_vyx[j][h1][k]; - psi_vzx[j][h1][k] = b_x_half[h1] * psi_vzx[j][h1][k] + a_x_half[h1] * vzx; - vzx = vzx / K_x_half[h1] +psi_vzx[j][h1][k]; + pml_wfd->psi_vxx[j][h1][k] = pml_coeff->b_x[h1] * pml_wfd->psi_vxx[j][h1][k] + pml_coeff->a_x[h1] * vxx; + vxx = vxx /pml_coeff->K_x[h1] + pml_wfd->psi_vxx[j][h1][k]; + pml_wfd->psi_vyx[j][h1][k] = pml_coeff->b_x_half[h1] * pml_wfd->psi_vyx[j][h1][k] + pml_coeff->a_x_half[h1] * vyx; + vyx = vyx /pml_coeff->K_x_half[h1] + pml_wfd->psi_vyx[j][h1][k]; + pml_wfd->psi_vzx[j][h1][k] = pml_coeff->b_x_half[h1] * pml_wfd->psi_vzx[j][h1][k] + pml_coeff->a_x_half[h1] * vzx; + vzx = vzx / pml_coeff->K_x_half[h1] +pml_wfd->psi_vzx[j][h1][k]; if((POS[2]==0 && FREE_SURF==0) && (j<=FW)){ - psi_vxy[j][i][k] = b_y_half[j] * psi_vxy[j][i][k] + a_y_half[j] * vxy; - vxy = vxy / K_y_half[j] + psi_vxy[j][i][k]; - psi_vyy[j][i][k] = b_y[j] * psi_vyy[j][i][k] + a_y[j] * vyy; - vyy = vyy / K_y[j] + psi_vyy[j][i][k]; - psi_vzy[j][i][k] = b_y_half[j] * psi_vzy[j][i][k] + a_y_half[j] * vzy; - vzy = vzy / K_y_half[j] + psi_vzy[j][i][k]; } + pml_wfd->psi_vxy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vxy[j][i][k] + pml_coeff->a_y_half[j] * vxy; + vxy = vxy / pml_coeff->K_y_half[j] + pml_wfd->psi_vxy[j][i][k]; + pml_wfd->psi_vyy[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_vyy[j][i][k] + pml_coeff->a_y[j] * vyy; + vyy = vyy / pml_coeff->K_y[j] + pml_wfd->psi_vyy[j][i][k]; + pml_wfd->psi_vzy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vzy[j][i][k] + pml_coeff->a_y_half[j] * vzy; + vzy = vzy / pml_coeff->K_y_half[j] + pml_wfd->psi_vzy[j][i][k]; } if((POS[2]==NPROCY-1) && (j>=ny2+1)){ h1 = (j-ny2+FW); - psi_vxy[h1][i][k] = b_y_half[h1] * psi_vxy[h1][i][k] + a_y_half[h1] * vxy; - vxy = vxy / K_y_half[h1] + psi_vxy[h1][i][k]; - psi_vyy[h1][i][k] = b_y[h1] * psi_vyy[h1][i][k] + a_y[h1] * vyy; - vyy = vyy / K_y[h1] + psi_vyy[h1][i][k]; - psi_vzy[h1][i][k] = b_y_half[h1] * psi_vzy[h1][i][k] + a_y_half[h1] * vzy; - vzy = vzy / K_y_half[h1] + psi_vzy[h1][i][k]; } + pml_wfd->psi_vxy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vxy[h1][i][k] + pml_coeff->a_y_half[h1] * vxy; + vxy = vxy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vxy[h1][i][k]; + pml_wfd->psi_vyy[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_vyy[h1][i][k] + pml_coeff->a_y[h1] * vyy; + vyy = vyy / pml_coeff->K_y[h1] + pml_wfd->psi_vyy[h1][i][k]; + pml_wfd->psi_vzy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vzy[h1][i][k] + pml_coeff->a_y_half[h1] * vzy; + vzy = vzy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vzy[h1][i][k]; } if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -230,12 +226,12 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } @@ -248,50 +244,50 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz for (i=nx1;i<=nx2;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; - - psi_vxy[j][i][k] = b_y_half[j] * psi_vxy[j][i][k] + a_y_half[j] * vxy; - vxy = vxy / K_y_half[j] + psi_vxy[j][i][k]; - psi_vyy[j][i][k] = b_y[j] * psi_vyy[j][i][k] + a_y[j] * vyy; - vyy = vyy / K_y[j] + psi_vyy[j][i][k]; - psi_vzy[j][i][k] = b_y_half[j] * psi_vzy[j][i][k] + a_y_half[j] * vzy; - vzy = vzy / K_y_half[j] + psi_vzy[j][i][k]; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; + + pml_wfd->psi_vxy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vxy[j][i][k] + pml_coeff->a_y_half[j] * vxy; + vxy = vxy / pml_coeff->K_y_half[j] + pml_wfd->psi_vxy[j][i][k]; + pml_wfd->psi_vyy[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_vyy[j][i][k] + pml_coeff->a_y[j] * vyy; + vyy = vyy / pml_coeff->K_y[j] + pml_wfd->psi_vyy[j][i][k]; + pml_wfd->psi_vzy[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_vzy[j][i][k] + pml_coeff->a_y_half[j] * vzy; + vzy = vzy / pml_coeff->K_y_half[j] + pml_wfd->psi_vzy[j][i][k]; if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -301,12 +297,12 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } @@ -319,52 +315,52 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz for (i=nx1;i<=nx2;i++){ for (k=1;k<=NZ;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; h1 = (j-ny2+FW); - psi_vxy[h1][i][k] = b_y_half[h1] * psi_vxy[h1][i][k] + a_y_half[h1] * vxy; - vxy = vxy / K_y_half[h1] + psi_vxy[h1][i][k]; - psi_vyy[h1][i][k] = b_y[h1] * psi_vyy[h1][i][k] + a_y[h1] * vyy; - vyy = vyy / K_y[h1] + psi_vyy[h1][i][k]; - psi_vzy[h1][i][k] = b_y_half[h1] * psi_vzy[h1][i][k] + a_y_half[h1] * vzy; - vzy = vzy / K_y_half[h1] + psi_vzy[h1][i][k]; + pml_wfd->psi_vxy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vxy[h1][i][k] + pml_coeff->a_y_half[h1] * vxy; + vxy = vxy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vxy[h1][i][k]; + pml_wfd->psi_vyy[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_vyy[h1][i][k] + pml_coeff->a_y[h1] * vyy; + vyy = vyy / pml_coeff->K_y[h1] + pml_wfd->psi_vyy[h1][i][k]; + pml_wfd->psi_vzy[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_vzy[h1][i][k] + pml_coeff->a_y_half[h1] * vzy; + vzy = vzy / pml_coeff->K_y_half[h1] + pml_wfd->psi_vzy[h1][i][k]; if((POS[3]==0) && (k<=FW)){ - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k];} + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1];} + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1];} - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -374,12 +370,12 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } @@ -393,30 +389,30 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz for (i=nx1;i<=nx2;i++){ for (k=1;k<=FW;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; - psi_vxz[j][i][k] = b_z_half[k] * psi_vxz[j][i][k] + a_z_half[k] * vxz; - vxz = vxz / K_y_half[k] + psi_vxz[j][i][k]; - psi_vyz[j][i][k] = b_z_half[k] * psi_vyz[j][i][k] + a_z_half[k] * vyz; - vyz = vyz / K_y_half[k] + psi_vyz[j][i][k]; - psi_vzz[j][i][k] = b_z[k] * psi_vzz[j][i][k] + a_z[k] * vzz; - vzz = vzz / K_y[k] + psi_vzz[j][i][k]; + pml_wfd->psi_vxz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vxz[j][i][k] + pml_coeff->a_z_half[k] * vxz; + vxz = vxz / pml_coeff->K_y_half[k] + pml_wfd->psi_vxz[j][i][k]; + pml_wfd->psi_vyz[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_vyz[j][i][k] + pml_coeff->a_z_half[k] * vyz; + vyz = vyz / pml_coeff->K_y_half[k] + pml_wfd->psi_vyz[j][i][k]; + pml_wfd->psi_vzz[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_vzz[j][i][k] + pml_coeff->a_z[k] * vzz; + vzz = vzz / pml_coeff->K_y[k] + pml_wfd->psi_vzz[j][i][k]; - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -426,12 +422,12 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } } @@ -444,34 +440,34 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz for (i=nx1;i<=nx2;i++){ for (k=nz2+1;k<=nz2+FW;k++){ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; h1 = (k-nz2+FW); - psi_vxz[j][i][h1] = b_z_half[h1] * psi_vxz[j][i][h1] + a_z_half[h1] * vxz; - vxz = vxz / K_z_half[h1] + psi_vxz[j][i][h1]; - psi_vyz[j][i][h1] = b_z_half[h1] * psi_vyz[j][i][h1] + a_z_half[h1] * vyz; - vyz = vyz / K_z_half[h1] + psi_vyz[j][i][h1]; - psi_vzz[j][i][h1] = b_z[h1] * psi_vzz[j][i][h1] + a_z[h1] * vzz; - vzz = vzz / K_z[h1] + psi_vzz[j][i][h1]; + pml_wfd->psi_vxz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vxz[j][i][h1] + pml_coeff->a_z_half[h1] * vxz; + vxz = vxz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vxz[j][i][h1]; + pml_wfd->psi_vyz[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_vyz[j][i][h1] + pml_coeff->a_z_half[h1] * vyz; + vyz = vyz / pml_coeff->K_z_half[h1] + pml_wfd->psi_vyz[j][i][h1]; + pml_wfd->psi_vzz[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_vzz[j][i][h1] + pml_coeff->a_z[h1] * vzz; + vzz = vzz / pml_coeff->K_z[h1] + pml_wfd->psi_vzz[j][i][h1]; - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -481,12 +477,12 @@ double update_s_CPML_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } } diff --git a/src/update_s_ssg_elastic.c b/src/update_s_ssg_elastic.c index 7fabd47..c75d25f 100644 --- a/src/update_s_ssg_elastic.c +++ b/src/update_s_ssg_elastic.c @@ -25,8 +25,8 @@ #include "fd.h" -double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, float *** vx, float *** vy, float *** vz, - st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** pi, float *** u, float *** uipjp, float *** ujpkp, float *** uipkp){ +double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, st_velocity *vel, + st_stress *stress, st_model *mod, st_model_av *mod_av){ extern float DT, DX, DY, DZ; @@ -56,21 +56,21 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl /* spatial derivatives of the components of the velocities are computed */ - vxx = (vx[j][i][k]-vx[j][i-1][k])/DX; - vxy = (vx[j+1][i][k]-vx[j][i][k])/DY; - vxz = (vx[j][i][k+1]-vx[j][i][k])/DZ; - vyx = (vy[j][i+1][k]-vy[j][i][k])/DX; - vyy = (vy[j][i][k]-vy[j-1][i][k])/DY; - vyz = (vy[j][i][k+1]-vy[j][i][k])/DZ; - vzx = (vz[j][i+1][k]-vz[j][i][k])/DX; - vzy = (vz[j+1][i][k]-vz[j][i][k])/DY; - vzz = (vz[j][i][k]-vz[j][i][k-1])/DZ; - - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + vxx = (vel->vx[j][i][k]-vel->vx[j][i-1][k])/DX; + vxy = (vel->vx[j+1][i][k]-vel->vx[j][i][k])/DY; + vxz = (vel->vx[j][i][k+1]-vel->vx[j][i][k])/DZ; + vyx = (vel->vy[j][i+1][k]-vel->vy[j][i][k])/DX; + vyy = (vel->vy[j][i][k]-vel->vy[j-1][i][k])/DY; + vyz = (vel->vy[j][i][k+1]-vel->vy[j][i][k])/DZ; + vzx = (vel->vz[j][i+1][k]-vel->vz[j][i][k])/DX; + vzy = (vel->vz[j+1][i][k]-vel->vz[j][i][k])/DY; + vzz = (vel->vz[j][i][k]-vel->vz[j][i][k-1])/DZ; + + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -80,12 +80,12 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } } @@ -105,22 +105,22 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+b2*(vx[j][i+1][k]-vx[j][i-2][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+b2*(vx[j+2][i][k]-vx[j-1][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+b2*(vx[j][i][k+2]-vx[j][i][k-1]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+b2*(vy[j][i+2][k]-vy[j][i-1][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+b2*(vy[j+1][i][k]-vy[j-2][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+b2*(vy[j][i][k+2]-vy[j][i][k-1]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+b2*(vz[j][i+2][k]-vz[j][i-1][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+b2*(vz[j+2][i][k]-vz[j-1][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+b2*(vz[j][i][k+1]-vz[j][i][k-2]))/DZ; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k]))/DX; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k]))/DY; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1]))/DZ; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k]))/DX; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k]))/DY; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1]))/DZ; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k]))/DX; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k]))/DY; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2]))/DZ; - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -130,12 +130,12 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); @@ -159,48 +159,48 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k]))/DY; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2]))/DZ; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k]))/DX; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2]))/DZ; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k]))/DX; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k]))/DY; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3]))/DZ; - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -210,12 +210,12 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); @@ -237,60 +237,60 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k]))/DX; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k]))/DX; - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k])+ - b4*(vx[j+4][i][k]-vx[j-3][i][k]))/DY; + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k])+ + b4*(vel->vx[j+4][i][k]-vel->vx[j-3][i][k]))/DY; - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2])+ - b4*(vx[j][i][k+4]-vx[j][i][k-3]))/DZ; + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2])+ + b4*(vel->vx[j][i][k+4]-vel->vx[j][i][k-3]))/DZ; - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k])+ - b4*(vy[j][i+4][k]-vy[j][i-3][k]))/DX; + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k])+ + b4*(vel->vy[j][i+4][k]-vel->vy[j][i-3][k]))/DX; - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k]))/DY; + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k]))/DY; - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2])+ - b4*(vy[j][i][k+4]-vy[j][i][k-3]))/DZ; + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2])+ + b4*(vel->vy[j][i][k+4]-vel->vy[j][i][k-3]))/DZ; - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k])+ - b4*(vz[j][i+4][k]-vz[j][i-3][k]))/DX; + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k])+ + b4*(vel->vz[j][i+4][k]-vel->vz[j][i-3][k]))/DX; - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k])+ - b4*(vz[j+4][i][k]-vz[j-3][i][k]))/DY; + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k])+ + b4*(vel->vz[j+4][i][k]-vel->vz[j-3][i][k]))/DY; - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4]))/DZ; + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4]))/DZ; /* updating components of the stress tensor, partially */ - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -300,12 +300,12 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } @@ -326,66 +326,66 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k]))/DX; - - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k])+ - b4*(vx[j+4][i][k]-vx[j-3][i][k])+ - b5*(vx[j+5][i][k]-vx[j-4][i][k]))/DY; - - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2])+ - b4*(vx[j][i][k+4]-vx[j][i][k-3])+ - b5*(vx[j][i][k+5]-vx[j][i][k-4]))/DZ; - - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k])+ - b4*(vy[j][i+4][k]-vy[j][i-3][k])+ - b5*(vy[j][i+5][k]-vy[j][i-4][k]))/DX; - - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k]))/DY; - - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2])+ - b4*(vy[j][i][k+4]-vy[j][i][k-3])+ - b5*(vy[j][i][k+5]-vy[j][i][k-4]))/DZ; - - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k])+ - b4*(vz[j][i+4][k]-vz[j][i-3][k])+ - b5*(vz[j][i+5][k]-vz[j][i-4][k]))/DX; - - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k])+ - b4*(vz[j+4][i][k]-vz[j-3][i][k])+ - b5*(vz[j+5][i][k]-vz[j-4][i][k]))/DY; - - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5]))/DZ; - - - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k]))/DX; + + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k])+ + b4*(vel->vx[j+4][i][k]-vel->vx[j-3][i][k])+ + b5*(vel->vx[j+5][i][k]-vel->vx[j-4][i][k]))/DY; + + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2])+ + b4*(vel->vx[j][i][k+4]-vel->vx[j][i][k-3])+ + b5*(vel->vx[j][i][k+5]-vel->vx[j][i][k-4]))/DZ; + + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k])+ + b4*(vel->vy[j][i+4][k]-vel->vy[j][i-3][k])+ + b5*(vel->vy[j][i+5][k]-vel->vy[j][i-4][k]))/DX; + + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k]))/DY; + + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2])+ + b4*(vel->vy[j][i][k+4]-vel->vy[j][i][k-3])+ + b5*(vel->vy[j][i][k+5]-vel->vy[j][i][k-4]))/DZ; + + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k])+ + b4*(vel->vz[j][i+4][k]-vel->vz[j][i-3][k])+ + b5*(vel->vz[j][i+5][k]-vel->vz[j][i-4][k]))/DX; + + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k])+ + b4*(vel->vz[j+4][i][k]-vel->vz[j-3][i][k])+ + b5*(vel->vz[j+5][i][k]-vel->vz[j-4][i][k]))/DY; + + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5]))/DZ; + + + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -395,12 +395,12 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); } @@ -425,75 +425,75 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl /* spatial derivatives of the components of the velocities are computed */ - vxx = (b1*(vx[j][i][k]-vx[j][i-1][k])+ - b2*(vx[j][i+1][k]-vx[j][i-2][k])+ - b3*(vx[j][i+2][k]-vx[j][i-3][k])+ - b4*(vx[j][i+3][k]-vx[j][i-4][k])+ - b5*(vx[j][i+4][k]-vx[j][i-5][k])+ - b6*(vx[j][i+5][k]-vx[j][i-6][k]))/DX; - - vxy = (b1*(vx[j+1][i][k]-vx[j][i][k])+ - b2*(vx[j+2][i][k]-vx[j-1][i][k])+ - b3*(vx[j+3][i][k]-vx[j-2][i][k])+ - b4*(vx[j+4][i][k]-vx[j-3][i][k])+ - b5*(vx[j+5][i][k]-vx[j-4][i][k])+ - b6*(vx[j+6][i][k]-vx[j-5][i][k]))/DY; - - vxz = (b1*(vx[j][i][k+1]-vx[j][i][k])+ - b2*(vx[j][i][k+2]-vx[j][i][k-1])+ - b3*(vx[j][i][k+3]-vx[j][i][k-2])+ - b4*(vx[j][i][k+4]-vx[j][i][k-3])+ - b5*(vx[j][i][k+5]-vx[j][i][k-4])+ - b6*(vx[j][i][k+6]-vx[j][i][k-5]))/DZ; - - vyx = (b1*(vy[j][i+1][k]-vy[j][i][k])+ - b2*(vy[j][i+2][k]-vy[j][i-1][k])+ - b3*(vy[j][i+3][k]-vy[j][i-2][k])+ - b4*(vy[j][i+4][k]-vy[j][i-3][k])+ - b5*(vy[j][i+5][k]-vy[j][i-4][k])+ - b6*(vy[j][i+6][k]-vy[j][i-5][k]))/DX; - - vyy = (b1*(vy[j][i][k]-vy[j-1][i][k])+ - b2*(vy[j+1][i][k]-vy[j-2][i][k])+ - b3*(vy[j+2][i][k]-vy[j-3][i][k])+ - b4*(vy[j+3][i][k]-vy[j-4][i][k])+ - b5*(vy[j+4][i][k]-vy[j-5][i][k])+ - b6*(vy[j+5][i][k]-vy[j-6][i][k]))/DY; - - vyz = (b1*(vy[j][i][k+1]-vy[j][i][k])+ - b2*(vy[j][i][k+2]-vy[j][i][k-1])+ - b3*(vy[j][i][k+3]-vy[j][i][k-2])+ - b4*(vy[j][i][k+4]-vy[j][i][k-3])+ - b5*(vy[j][i][k+5]-vy[j][i][k-4])+ - b6*(vy[j][i][k+6]-vy[j][i][k-5]))/DZ; - - vzx = (b1*(vz[j][i+1][k]-vz[j][i][k])+ - b2*(vz[j][i+2][k]-vz[j][i-1][k])+ - b3*(vz[j][i+3][k]-vz[j][i-2][k])+ - b4*(vz[j][i+4][k]-vz[j][i-3][k])+ - b5*(vz[j][i+5][k]-vz[j][i-4][k])+ - b6*(vz[j][i+6][k]-vz[j][i-5][k]))/DX; - - vzy = (b1*(vz[j+1][i][k]-vz[j][i][k])+ - b2*(vz[j+2][i][k]-vz[j-1][i][k])+ - b3*(vz[j+3][i][k]-vz[j-2][i][k])+ - b4*(vz[j+4][i][k]-vz[j-3][i][k])+ - b5*(vz[j+5][i][k]-vz[j-4][i][k])+ - b6*(vz[j+6][i][k]-vz[j-5][i][k]))/DY; - - vzz = (b1*(vz[j][i][k]-vz[j][i][k-1])+ - b2*(vz[j][i][k+1]-vz[j][i][k-2])+ - b3*(vz[j][i][k+2]-vz[j][i][k-3])+ - b4*(vz[j][i][k+3]-vz[j][i][k-4])+ - b5*(vz[j][i][k+4]-vz[j][i][k-5])+ - b6*(vz[j][i][k+5]-vz[j][i][k-6]))/DZ; - - - fipjp=uipjp[j][i][k]*DT; - fjpkp=ujpkp[j][i][k]*DT; - fipkp=uipkp[j][i][k]*DT; - g=pi[j][i][k]; - f=2.0*u[j][i][k]; + vxx = (b1*(vel->vx[j][i][k]-vel->vx[j][i-1][k])+ + b2*(vel->vx[j][i+1][k]-vel->vx[j][i-2][k])+ + b3*(vel->vx[j][i+2][k]-vel->vx[j][i-3][k])+ + b4*(vel->vx[j][i+3][k]-vel->vx[j][i-4][k])+ + b5*(vel->vx[j][i+4][k]-vel->vx[j][i-5][k])+ + b6*(vel->vx[j][i+5][k]-vel->vx[j][i-6][k]))/DX; + + vxy = (b1*(vel->vx[j+1][i][k]-vel->vx[j][i][k])+ + b2*(vel->vx[j+2][i][k]-vel->vx[j-1][i][k])+ + b3*(vel->vx[j+3][i][k]-vel->vx[j-2][i][k])+ + b4*(vel->vx[j+4][i][k]-vel->vx[j-3][i][k])+ + b5*(vel->vx[j+5][i][k]-vel->vx[j-4][i][k])+ + b6*(vel->vx[j+6][i][k]-vel->vx[j-5][i][k]))/DY; + + vxz = (b1*(vel->vx[j][i][k+1]-vel->vx[j][i][k])+ + b2*(vel->vx[j][i][k+2]-vel->vx[j][i][k-1])+ + b3*(vel->vx[j][i][k+3]-vel->vx[j][i][k-2])+ + b4*(vel->vx[j][i][k+4]-vel->vx[j][i][k-3])+ + b5*(vel->vx[j][i][k+5]-vel->vx[j][i][k-4])+ + b6*(vel->vx[j][i][k+6]-vel->vx[j][i][k-5]))/DZ; + + vyx = (b1*(vel->vy[j][i+1][k]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i+2][k]-vel->vy[j][i-1][k])+ + b3*(vel->vy[j][i+3][k]-vel->vy[j][i-2][k])+ + b4*(vel->vy[j][i+4][k]-vel->vy[j][i-3][k])+ + b5*(vel->vy[j][i+5][k]-vel->vy[j][i-4][k])+ + b6*(vel->vy[j][i+6][k]-vel->vy[j][i-5][k]))/DX; + + vyy = (b1*(vel->vy[j][i][k]-vel->vy[j-1][i][k])+ + b2*(vel->vy[j+1][i][k]-vel->vy[j-2][i][k])+ + b3*(vel->vy[j+2][i][k]-vel->vy[j-3][i][k])+ + b4*(vel->vy[j+3][i][k]-vel->vy[j-4][i][k])+ + b5*(vel->vy[j+4][i][k]-vel->vy[j-5][i][k])+ + b6*(vel->vy[j+5][i][k]-vel->vy[j-6][i][k]))/DY; + + vyz = (b1*(vel->vy[j][i][k+1]-vel->vy[j][i][k])+ + b2*(vel->vy[j][i][k+2]-vel->vy[j][i][k-1])+ + b3*(vel->vy[j][i][k+3]-vel->vy[j][i][k-2])+ + b4*(vel->vy[j][i][k+4]-vel->vy[j][i][k-3])+ + b5*(vel->vy[j][i][k+5]-vel->vy[j][i][k-4])+ + b6*(vel->vy[j][i][k+6]-vel->vy[j][i][k-5]))/DZ; + + vzx = (b1*(vel->vz[j][i+1][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j][i+2][k]-vel->vz[j][i-1][k])+ + b3*(vel->vz[j][i+3][k]-vel->vz[j][i-2][k])+ + b4*(vel->vz[j][i+4][k]-vel->vz[j][i-3][k])+ + b5*(vel->vz[j][i+5][k]-vel->vz[j][i-4][k])+ + b6*(vel->vz[j][i+6][k]-vel->vz[j][i-5][k]))/DX; + + vzy = (b1*(vel->vz[j+1][i][k]-vel->vz[j][i][k])+ + b2*(vel->vz[j+2][i][k]-vel->vz[j-1][i][k])+ + b3*(vel->vz[j+3][i][k]-vel->vz[j-2][i][k])+ + b4*(vel->vz[j+4][i][k]-vel->vz[j-3][i][k])+ + b5*(vel->vz[j+5][i][k]-vel->vz[j-4][i][k])+ + b6*(vel->vz[j+6][i][k]-vel->vz[j-5][i][k]))/DY; + + vzz = (b1*(vel->vz[j][i][k]-vel->vz[j][i][k-1])+ + b2*(vel->vz[j][i][k+1]-vel->vz[j][i][k-2])+ + b3*(vel->vz[j][i][k+2]-vel->vz[j][i][k-3])+ + b4*(vel->vz[j][i][k+3]-vel->vz[j][i][k-4])+ + b5*(vel->vz[j][i][k+4]-vel->vz[j][i][k-5])+ + b6*(vel->vz[j][i][k+5]-vel->vz[j][i][k-6]))/DZ; + + + fipjp=mod_av->uipjp[j][i][k]*DT; + fjpkp=mod_av->ujpkp[j][i][k]*DT; + fipkp=mod_av->uipkp[j][i][k]*DT; + g=mod->pi[j][i][k]; + f=2.0*mod->u[j][i][k]; vxyyx=vxy+vyx; vyzzy=vyz+vzy; @@ -503,12 +503,12 @@ double update_s_elastic(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, fl vxxzz=vxx+vzz; vxxyy=vxx+vyy; - sxy[j][i][k]+=(fipjp*vxyyx); - syz[j][i][k]+=(fjpkp*vyzzy); - sxz[j][i][k]+=(fipkp*vxzzx); + stress->sxy[j][i][k]+=(fipjp*vxyyx); + stress->syz[j][i][k]+=(fjpkp*vyzzy); + stress->sxz[j][i][k]+=(fipkp*vxzzx); stress->sxx[j][i][k]+=DT*((g*vxxyyzz)-(f*vyyzz)); - syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); - szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); + stress->syy[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxzz)); + stress->szz[j][i][k]+=DT*((g*vxxyyzz)-(f*vxxyy)); diff --git a/src/update_v_ssg.c b/src/update_v_ssg.c index e43d846..e0e3406 100644 --- a/src/update_v_ssg.c +++ b/src/update_v_ssg.c @@ -25,10 +25,8 @@ #include "fd.h" double update_v(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -int nt, float *** vx, float *** vy, float *** vz, -st_stress *stress, float *** syy, float *** szz, float *** sxy, -float *** syz, float *** sxz, float *** rho, float *** rjp, float *** rkp, float *** rip, -float ** srcpos_loc, float ** signals, float ** signaly, float ** signalz, int nsrc, float *** absorb_coeff, int back){ +int nt, st_velocity *vel, st_stress *stress, st_model_av *mod_av, +float ** srcpos_loc, st_signals *signals, int nsrc, float *** absorb_coeff, int back){ /*extern FILE *FP;*/ @@ -64,25 +62,25 @@ float ** srcpos_loc, float ** signals, float ** signaly, float ** signalz, int for (k=nz1;k<=nz2;k++){ sxx_x = dx*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k]); - sxy_y = dy*(sxy[j][i][k]-sxy[j-1][i][k]); - sxz_z = dz*(sxz[j][i][k]-sxz[j][i][k-1]); /* R�ckw�rtsoperator */ + sxy_y = dy*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k]); + sxz_z = dz*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1]); /* Backward operator */ /* updating components of particle velocities */ - vx[j][i][k]+= ((sxx_x + sxy_y +sxz_z)/rip[j][i][k]); + vel->vx[j][i][k]+= ((sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]); - syy_y = dy*(syy[j+1][i][k]-syy[j][i][k]); - sxy_x = dx*(sxy[j][i][k]-sxy[j][i-1][k]); - syz_z = dz*(syz[j][i][k]-syz[j][i][k-1]); + syy_y = dy*(stress->syy[j+1][i][k]-stress->syy[j][i][k]); + sxy_x = dx*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k]); + syz_z = dz*(stress->syz[j][i][k]-stress->syz[j][i][k-1]); - vy[j][i][k]+= ((syy_y + sxy_x + syz_z)/rjp[j][i][k]); + vel->vy[j][i][k]+= ((syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]); - szz_z = dz*(szz[j][i][k+1]-szz[j][i][k]); - sxz_x = dx*(sxz[j][i][k]-sxz[j][i-1][k]); - syz_y = dy*(syz[j][i][k]-syz[j-1][i][k]); + szz_z = dz*(stress->szz[j][i][k+1]-stress->szz[j][i][k]); + sxz_x = dx*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k]); + syz_y = dy*(stress->syz[j][i][k]-stress->syz[j-1][i][k]); - vz[j][i][k]+= ((szz_z + sxz_x + syz_y)/rkp[j][i][k]); + vel->vz[j][i][k]+= ((szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]); } } @@ -105,25 +103,25 @@ float ** srcpos_loc, float ** signals, float ** signaly, float ** signalz, int for (k=nz1;k<=nz2;k++){ sxx_x = dx*(b1*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k])+b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+b2*(sxy[j+1][i][k]-sxy[j-2][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+b2*(sxz[j][i][k+1]-sxz[j][i][k-2])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])); /* updating components of particle velocities */ - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+b2*(syy[j+2][i][k]-syy[j-1][i][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+b2*(sxy[j][i+1][k]-sxy[j][i-2][k])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+b2*(syz[j][i][k+1]-syz[j][i][k-2])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])); - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+b2*(szz[j][i][k+2]-szz[j][i][k-1])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+b2*(sxz[j][i+1][k]-sxz[j][i-2][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+b2*(syz[j+1][i][k]-syz[j-2][i][k])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])); - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } } @@ -148,48 +146,48 @@ float ** srcpos_loc, float ** signals, float ** signaly, float ** signalz, int b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])+ b3*(stress->sxx[j][i+3][k]-stress->sxx[j][i-2][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+ - b2*(sxy[j+1][i][k]-sxy[j-2][i][k])+ - b3*(sxy[j+2][i][k]-sxy[j-3][i][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+ + b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])+ + b3*(stress->sxy[j+2][i][k]-stress->sxy[j-3][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+ - b2*(sxz[j][i][k+1]-sxz[j][i][k-2])+ - b3*(sxz[j][i][k+2]-sxz[j][i][k-3])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+ + b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])+ + b3*(stress->sxz[j][i][k+2]-stress->sxz[j][i][k-3])); /* updating components of particle velocities */ - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+ - b2*(syy[j+2][i][k]-syy[j-1][i][k])+ - b3*(syy[j+3][i][k]-syy[j-2][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+ + b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])+ + b3*(stress->syy[j+3][i][k]-stress->syy[j-2][i][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+ - b2*(sxy[j][i+1][k]-sxy[j][i-2][k])+ - b3*(sxy[j][i+2][k]-sxy[j][i-3][k])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+ + b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])+ + b3*(stress->sxy[j][i+2][k]-stress->sxy[j][i-3][k])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+ - b2*(syz[j][i][k+1]-syz[j][i][k-2])+ - b3*(syz[j][i][k+2]-syz[j][i][k-3])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+ + b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])+ + b3*(stress->syz[j][i][k+2]-stress->syz[j][i][k-3])); - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+ - b2*(szz[j][i][k+2]-szz[j][i][k-1])+ - b3*(szz[j][i][k+3]-szz[j][i][k-2])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+ + b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])+ + b3*(stress->szz[j][i][k+3]-stress->szz[j][i][k-2])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+ - b2*(sxz[j][i+1][k]-sxz[j][i-2][k])+ - b3*(sxz[j][i+2][k]-sxz[j][i-3][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+ + b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])+ + b3*(stress->sxz[j][i+2][k]-stress->sxz[j][i-3][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+ - b2*(syz[j+1][i][k]-syz[j-2][i][k])+ - b3*(syz[j+2][i][k]-syz[j-3][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+ + b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])+ + b3*(stress->syz[j+2][i][k]-stress->syz[j-3][i][k])); - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -216,68 +214,58 @@ case 8 : b3*(stress->sxx[j][i+3][k]-stress->sxx[j][i-2][k])+ b4*(stress->sxx[j][i+4][k]-stress->sxx[j][i-3][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+ - b2*(sxy[j+1][i][k]-sxy[j-2][i][k])+ - b3*(sxy[j+2][i][k]-sxy[j-3][i][k])+ - b4*(sxy[j+3][i][k]-sxy[j-4][i][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+ + b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])+ + b3*(stress->sxy[j+2][i][k]-stress->sxy[j-3][i][k])+ + b4*(stress->sxy[j+3][i][k]-stress->sxy[j-4][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+ - b2*(sxz[j][i][k+1]-sxz[j][i][k-2])+ - b3*(sxz[j][i][k+2]-sxz[j][i][k-3])+ - b4*(sxz[j][i][k+3]-sxz[j][i][k-4])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+ + b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])+ + b3*(stress->sxz[j][i][k+2]-stress->sxz[j][i][k-3])+ + b4*(stress->sxz[j][i][k+3]-stress->sxz[j][i][k-4])); /* updating components of particle velocities */ - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+ - b2*(syy[j+2][i][k]-syy[j-1][i][k])+ - b3*(syy[j+3][i][k]-syy[j-2][i][k])+ - b4*(syy[j+4][i][k]-syy[j-3][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+ + b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])+ + b3*(stress->syy[j+3][i][k]-stress->syy[j-2][i][k])+ + b4*(stress->syy[j+4][i][k]-stress->syy[j-3][i][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+ - b2*(sxy[j][i+1][k]-sxy[j][i-2][k])+ - b3*(sxy[j][i+2][k]-sxy[j][i-3][k])+ - b4*(sxy[j][i+3][k]-sxy[j][i-4][k])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+ + b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])+ + b3*(stress->sxy[j][i+2][k]-stress->sxy[j][i-3][k])+ + b4*(stress->sxy[j][i+3][k]-stress->sxy[j][i-4][k])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+ - b2*(syz[j][i][k+1]-syz[j][i][k-2])+ - b3*(syz[j][i][k+2]-syz[j][i][k-3])+ - b4*(syz[j][i][k+3]-syz[j][i][k-4])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+ + b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])+ + b3*(stress->syz[j][i][k+2]-stress->syz[j][i][k-3])+ + b4*(stress->syz[j][i][k+3]-stress->syz[j][i][k-4])); - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; - /*test_float = (unsigned int*) (void*) &vy[j][i][k]; - if(((*test_float & 0x7f800000) == 0x0) && ((*test_float & 0x007fffff) != 0x0))fprintf(FP,"Achtung:ILLEGALER FLOAT %4.2f",vy[1000000][100000][1000000]);*/ + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; + /*test_float = (unsigned int*) (void*) &vel->vy[j][i][k]; + if(((*test_float & 0x7f800000) == 0x0) && ((*test_float & 0x007fffff) != 0x0))fprintf(FP,"Achtung:ILLEGALER FLOAT %4.2f",vel->vy[1000000][100000][1000000]);*/ - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+ - b2*(szz[j][i][k+2]-szz[j][i][k-1])+ - b3*(szz[j][i][k+3]-szz[j][i][k-2])+ - b4*(szz[j][i][k+4]-szz[j][i][k-3])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+ + b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])+ + b3*(stress->szz[j][i][k+3]-stress->szz[j][i][k-2])+ + b4*(stress->szz[j][i][k+4]-stress->szz[j][i][k-3])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+ - b2*(sxz[j][i+1][k]-sxz[j][i-2][k])+ - b3*(sxz[j][i+2][k]-sxz[j][i-3][k])+ - b4*(sxz[j][i+3][k]-sxz[j][i-4][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+ + b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])+ + b3*(stress->sxz[j][i+2][k]-stress->sxz[j][i-3][k])+ + b4*(stress->sxz[j][i+3][k]-stress->sxz[j][i-4][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+ - b2*(syz[j+1][i][k]-syz[j-2][i][k])+ - b3*(syz[j+2][i][k]-syz[j-3][i][k])+ - b4*(syz[j+3][i][k]-syz[j-4][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+ + b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])+ + b3*(stress->syz[j+2][i][k]-stress->syz[j-3][i][k])+ + b4*(stress->syz[j+3][i][k]-stress->syz[j-4][i][k])); - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; -/*if(vy[j][i][k]>0){ - printf("\n vx=%4.2f \n",vx[j][i][k]*1e100);}*/ - - /*for(l=0;lvz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; + } } } @@ -305,64 +293,64 @@ case 10 : b4*(stress->sxx[j][i+4][k]-stress->sxx[j][i-3][k])+ b5*(stress->sxx[j][i+5][k]-stress->sxx[j][i-4][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+ - b2*(sxy[j+1][i][k]-sxy[j-2][i][k])+ - b3*(sxy[j+2][i][k]-sxy[j-3][i][k])+ - b4*(sxy[j+3][i][k]-sxy[j-4][i][k])+ - b5*(sxy[j+4][i][k]-sxy[j-5][i][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+ + b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])+ + b3*(stress->sxy[j+2][i][k]-stress->sxy[j-3][i][k])+ + b4*(stress->sxy[j+3][i][k]-stress->sxy[j-4][i][k])+ + b5*(stress->sxy[j+4][i][k]-stress->sxy[j-5][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+ - b2*(sxz[j][i][k+1]-sxz[j][i][k-2])+ - b3*(sxz[j][i][k+2]-sxz[j][i][k-3])+ - b4*(sxz[j][i][k+3]-sxz[j][i][k-4])+ - b5*(sxz[j][i][k+4]-sxz[j][i][k-5])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+ + b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])+ + b3*(stress->sxz[j][i][k+2]-stress->sxz[j][i][k-3])+ + b4*(stress->sxz[j][i][k+3]-stress->sxz[j][i][k-4])+ + b5*(stress->sxz[j][i][k+4]-stress->sxz[j][i][k-5])); /* updating components of particle velocities */ - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+ - b2*(syy[j+2][i][k]-syy[j-1][i][k])+ - b3*(syy[j+3][i][k]-syy[j-2][i][k])+ - b4*(syy[j+4][i][k]-syy[j-3][i][k])+ - b5*(syy[j+5][i][k]-syy[j-4][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+ + b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])+ + b3*(stress->syy[j+3][i][k]-stress->syy[j-2][i][k])+ + b4*(stress->syy[j+4][i][k]-stress->syy[j-3][i][k])+ + b5*(stress->syy[j+5][i][k]-stress->syy[j-4][i][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+ - b2*(sxy[j][i+1][k]-sxy[j][i-2][k])+ - b3*(sxy[j][i+2][k]-sxy[j][i-3][k])+ - b4*(sxy[j][i+3][k]-sxy[j][i-4][k])+ - b5*(sxy[j][i+4][k]-sxy[j][i-5][k])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+ + b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])+ + b3*(stress->sxy[j][i+2][k]-stress->sxy[j][i-3][k])+ + b4*(stress->sxy[j][i+3][k]-stress->sxy[j][i-4][k])+ + b5*(stress->sxy[j][i+4][k]-stress->sxy[j][i-5][k])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+ - b2*(syz[j][i][k+1]-syz[j][i][k-2])+ - b3*(syz[j][i][k+2]-syz[j][i][k-3])+ - b4*(syz[j][i][k+3]-syz[j][i][k-4])+ - b5*(syz[j][i][k+4]-syz[j][i][k-5])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+ + b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])+ + b3*(stress->syz[j][i][k+2]-stress->syz[j][i][k-3])+ + b4*(stress->syz[j][i][k+3]-stress->syz[j][i][k-4])+ + b5*(stress->syz[j][i][k+4]-stress->syz[j][i][k-5])); - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+ - b2*(szz[j][i][k+2]-szz[j][i][k-1])+ - b3*(szz[j][i][k+3]-szz[j][i][k-2])+ - b4*(szz[j][i][k+4]-szz[j][i][k-3])+ - b5*(szz[j][i][k+5]-szz[j][i][k-4])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+ + b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])+ + b3*(stress->szz[j][i][k+3]-stress->szz[j][i][k-2])+ + b4*(stress->szz[j][i][k+4]-stress->szz[j][i][k-3])+ + b5*(stress->szz[j][i][k+5]-stress->szz[j][i][k-4])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+ - b2*(sxz[j][i+1][k]-sxz[j][i-2][k])+ - b3*(sxz[j][i+2][k]-sxz[j][i-3][k])+ - b4*(sxz[j][i+3][k]-sxz[j][i-4][k])+ - b5*(sxz[j][i+4][k]-sxz[j][i-5][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+ + b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])+ + b3*(stress->sxz[j][i+2][k]-stress->sxz[j][i-3][k])+ + b4*(stress->sxz[j][i+3][k]-stress->sxz[j][i-4][k])+ + b5*(stress->sxz[j][i+4][k]-stress->sxz[j][i-5][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+ - b2*(syz[j+1][i][k]-syz[j-2][i][k])+ - b3*(syz[j+2][i][k]-syz[j-3][i][k])+ - b4*(syz[j+3][i][k]-syz[j-4][i][k])+ - b5*(syz[j+4][i][k]-syz[j-5][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+ + b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])+ + b3*(stress->syz[j+2][i][k]-stress->syz[j-3][i][k])+ + b4*(stress->syz[j+3][i][k]-stress->syz[j-4][i][k])+ + b5*(stress->syz[j+4][i][k]-stress->syz[j-5][i][k])); - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -395,73 +383,73 @@ case 12 : b5*(stress->sxx[j][i+5][k]-stress->sxx[j][i-4][k])+ b6*(stress->sxx[j][i+6][k]-stress->sxx[j][i-5][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+ - b2*(sxy[j+1][i][k]-sxy[j-2][i][k])+ - b3*(sxy[j+2][i][k]-sxy[j-3][i][k])+ - b4*(sxy[j+3][i][k]-sxy[j-4][i][k])+ - b5*(sxy[j+4][i][k]-sxy[j-5][i][k])+ - b6*(sxy[j+5][i][k]-sxy[j-6][i][k])); - - sxz_z = dz*(b1*(sxy[j][i][k]-sxy[j][i][k-1])+ - b2*(sxy[j][i][k+1]-sxy[j][i][k-2])+ - b3*(sxy[j][i][k+2]-sxy[j][i][k-3])+ - b4*(sxy[j][i][k+3]-sxy[j][i][k-4])+ - b5*(sxy[j][i][k+4]-sxy[j][i][k-5])+ - b6*(sxy[j][i][k+5]-sxy[j][i][k-6])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+ + b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])+ + b3*(stress->sxy[j+2][i][k]-stress->sxy[j-3][i][k])+ + b4*(stress->sxy[j+3][i][k]-stress->sxy[j-4][i][k])+ + b5*(stress->sxy[j+4][i][k]-stress->sxy[j-5][i][k])+ + b6*(stress->sxy[j+5][i][k]-stress->sxy[j-6][i][k])); + + sxz_z = dz*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i][k-1])+ + b2*(stress->sxy[j][i][k+1]-stress->sxy[j][i][k-2])+ + b3*(stress->sxy[j][i][k+2]-stress->sxy[j][i][k-3])+ + b4*(stress->sxy[j][i][k+3]-stress->sxy[j][i][k-4])+ + b5*(stress->sxy[j][i][k+4]-stress->sxy[j][i][k-5])+ + b6*(stress->sxy[j][i][k+5]-stress->sxy[j][i][k-6])); /* updating components of particle velocities */ - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+ - b2*(syy[j+2][i][k]-syy[j-1][i][k])+ - b3*(syy[j+3][i][k]-syy[j-2][i][k])+ - b4*(syy[j+4][i][k]-syy[j-3][i][k])+ - b5*(syy[j+5][i][k]-syy[j-4][i][k])+ - b6*(syy[j+6][i][k]-syy[j-5][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+ + b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])+ + b3*(stress->syy[j+3][i][k]-stress->syy[j-2][i][k])+ + b4*(stress->syy[j+4][i][k]-stress->syy[j-3][i][k])+ + b5*(stress->syy[j+5][i][k]-stress->syy[j-4][i][k])+ + b6*(stress->syy[j+6][i][k]-stress->syy[j-5][i][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+ - b2*(sxy[j][i+1][k]-sxy[j][i-2][k])+ - b3*(sxy[j][i+2][k]-sxy[j][i-3][k])+ - b4*(sxy[j][i+3][k]-sxy[j][i-4][k])+ - b5*(sxy[j][i+4][k]-sxy[j][i-5][k])+ - b6*(sxy[j][i+5][k]-sxy[j][i-6][k])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+ + b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])+ + b3*(stress->sxy[j][i+2][k]-stress->sxy[j][i-3][k])+ + b4*(stress->sxy[j][i+3][k]-stress->sxy[j][i-4][k])+ + b5*(stress->sxy[j][i+4][k]-stress->sxy[j][i-5][k])+ + b6*(stress->sxy[j][i+5][k]-stress->sxy[j][i-6][k])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+ - b2*(syz[j][i][k+1]-syz[j][i][k-2])+ - b3*(syz[j][i][k+2]-syz[j][i][k-3])+ - b4*(syz[j][i][k+3]-syz[j][i][k-4])+ - b5*(syz[j][i][k+4]-syz[j][i][k-5])+ - b6*(syz[j][i][k+5]-syz[j][i][k-6])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+ + b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])+ + b3*(stress->syz[j][i][k+2]-stress->syz[j][i][k-3])+ + b4*(stress->syz[j][i][k+3]-stress->syz[j][i][k-4])+ + b5*(stress->syz[j][i][k+4]-stress->syz[j][i][k-5])+ + b6*(stress->syz[j][i][k+5]-stress->syz[j][i][k-6])); - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+ - b2*(szz[j][i][k+2]-szz[j][i][k-1])+ - b3*(szz[j][i][k+3]-szz[j][i][k-2])+ - b4*(szz[j][i][k+4]-szz[j][i][k-3])+ - b5*(szz[j][i][k+5]-szz[j][i][k-4])+ - b6*(szz[j][i][k+6]-szz[j][i][k-5])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+ + b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])+ + b3*(stress->szz[j][i][k+3]-stress->szz[j][i][k-2])+ + b4*(stress->szz[j][i][k+4]-stress->szz[j][i][k-3])+ + b5*(stress->szz[j][i][k+5]-stress->szz[j][i][k-4])+ + b6*(stress->szz[j][i][k+6]-stress->szz[j][i][k-5])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+ - b2*(sxz[j][i+1][k]-sxz[j][i-2][k])+ - b3*(sxz[j][i+2][k]-sxz[j][i-3][k])+ - b4*(sxz[j][i+3][k]-sxz[j][i-4][k])+ - b5*(sxz[j][i+4][k]-sxz[j][i-5][k])+ - b6*(sxz[j][i+5][k]-sxz[j][i-6][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+ + b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])+ + b3*(stress->sxz[j][i+2][k]-stress->sxz[j][i-3][k])+ + b4*(stress->sxz[j][i+3][k]-stress->sxz[j][i-4][k])+ + b5*(stress->sxz[j][i+4][k]-stress->sxz[j][i-5][k])+ + b6*(stress->sxz[j][i+5][k]-stress->sxz[j][i-6][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+ - b2*(syz[j+1][i][k]-syz[j-2][i][k])+ - b3*(syz[j+2][i][k]-syz[j-3][i][k])+ - b4*(syz[j+3][i][k]-syz[j-4][i][k])+ - b5*(syz[j+4][i][k]-syz[j-5][i][k])+ - b6*(syz[j+5][i][k]-syz[j-6][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+ + b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])+ + b3*(stress->syz[j+2][i][k]-stress->syz[j-3][i][k])+ + b4*(stress->syz[j+3][i][k]-stress->syz[j-4][i][k])+ + b5*(stress->syz[j+4][i][k]-stress->syz[j-5][i][k])+ + b6*(stress->syz[j+5][i][k]-stress->syz[j-6][i][k])); - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -477,31 +465,31 @@ case 12 : i=(int)srcpos_loc[1][l]; j=(int)srcpos_loc[2][l]; k=(int)srcpos_loc[3][l]; - amp=DT*signals[l][nt]/(DX*DY*DZ); + amp=DT*signals->fw[l][nt]/(DX*DY*DZ); switch ((int)srcpos_loc[7][l]){ case 2 : - vx[j][i][k]+=amp*rip[j][i][k]; + vel->vx[j][i][k]+=amp*mod_av->rip[j][i][k]; - /*/(rip[j][i][k]); *//* single force in x , DX^3 because of force density*/ + /*/(mod_av->rip[j][i][k]); *//* single force in x , DX^3 because of force density*/ - /*test_float = (unsigned int*) (void*) &vx[j][i][k]; + /*test_float = (unsigned int*) (void*) &vel->vx[j][i][k]; if(((*test_float & 0x7f800000) == 0x0) && ((*test_float & 0x007fffff) != 0x0))fprintf(FP,"Achtung:ILLEGALER FLOAT");*/ break; case 3 : - vz[j][i][k]+=amp*rjp[j][i][k]; /* single force in z */ + vel->vz[j][i][k]+=amp*mod_av->rjp[j][i][k]; /* single force in z */ break; case 4 : - vy[j][i][k]+=amp*rkp[j][i][k]; /* single force in y, vertical direction*/ + vel->vy[j][i][k]+=amp*mod_av->rkp[j][i][k]; /* single force in y, vertical direction*/ break; case 5 : alpha_rad=ALPHA*PI/180; /* custom force */ beta_rad=BETA*PI/180; - vx[j][i][k]+=cos(beta_rad)*cos(alpha_rad)*amp; - vy[j][i][k]+=sin(alpha_rad)*amp; - vz[j][i][k]+=sin(beta_rad)*cos(alpha_rad)*amp; + vel->vx[j][i][k]+=cos(beta_rad)*cos(alpha_rad)*amp; + vel->vy[j][i][k]+=sin(alpha_rad)*amp; + vel->vz[j][i][k]+=sin(beta_rad)*cos(alpha_rad)*amp; break; } } @@ -516,9 +504,9 @@ case 12 : i=(int)srcpos_loc[1][l]; j=(int)srcpos_loc[2][l]; k=(int)srcpos_loc[3][l]; - vx[j][i][k]+=signals[l][nt]; - vz[j][i][k]+=signalz[l][nt]; - vy[j][i][k]+=signaly[l][nt]; + vel->vx[j][i][k]+=signals->sectionvxdiff[l][nt]; + vel->vz[j][i][k]+=signals->sectionvzdiff[l][nt]; + vel->vy[j][i][k]+=signals->sectionvydiff[l][nt]; } } @@ -531,15 +519,15 @@ case 12 : for (j=ny1;j<=ny2;j++){ for (i=nx1;i<=nx2;i++){ for (k=nz1;k<=nz2;k++){ - vx[j][i][k]*=absorb_coeff[j][i][k]; - vy[j][i][k]*=absorb_coeff[j][i][k]; - vz[j][i][k]*=absorb_coeff[j][i][k]; - sxy[j][i][k]*=absorb_coeff[j][i][k]; - syz[j][i][k]*=absorb_coeff[j][i][k]; - sxz[j][i][k]*=absorb_coeff[j][i][k]; + vel->vx[j][i][k]*=absorb_coeff[j][i][k]; + vel->vy[j][i][k]*=absorb_coeff[j][i][k]; + vel->vz[j][i][k]*=absorb_coeff[j][i][k]; + stress->sxy[j][i][k]*=absorb_coeff[j][i][k]; + stress->syz[j][i][k]*=absorb_coeff[j][i][k]; + stress->sxz[j][i][k]*=absorb_coeff[j][i][k]; stress->sxx[j][i][k]*=absorb_coeff[j][i][k]; - syy[j][i][k]*=absorb_coeff[j][i][k]; - szz[j][i][k]*=absorb_coeff[j][i][k]; + stress->syy[j][i][k]*=absorb_coeff[j][i][k]; + stress->szz[j][i][k]*=absorb_coeff[j][i][k]; } } diff --git a/src/update_v_ssg_CPML.c b/src/update_v_ssg_CPML.c index 6586c32..a3ed8f7 100644 --- a/src/update_v_ssg_CPML.c +++ b/src/update_v_ssg_CPML.c @@ -28,15 +28,9 @@ double update_v_CPML(int nx1, int nx2, int ny1, int ny2, int nz1, int nz2, -int nt, float *** vx, float *** vy, float *** vz, -st_stress *stress, float *** syy, float *** szz, float *** sxy, -float *** syz, float *** sxz, float *** rho, float *** rjp, float *** rkp, float *** rip, -float ** srcpos_loc, float ** signals, float ** signaly, float ** signalz,int nsrc, float *** absorb_coeff, int back, -float * K_x, float * a_x, float * b_x, float * K_x_half, float * a_x_half, float * b_x_half, -float * K_y, float * a_y, float * b_y, float * K_y_half, float * a_y_half, float * b_y_half, -float * K_z, float * a_z, float * b_z, float * K_z_half, float * a_z_half, float * b_z_half, -float *** psi_sxx_x, float *** psi_sxy_x, float *** psi_sxz_x, float *** psi_sxy_y, float *** psi_syy_y, -float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz_z ){ +int nt, st_velocity *vel, st_stress *stress, st_model_av *mod_av, +float ** srcpos_loc, st_signals *signals,int nsrc, float *** absorb_coeff, int back, +st_pml_coeff *pml_coeff, st_pml_wfd *pml_wfd){ extern float DT, DX, DY, DZ; @@ -73,66 +67,66 @@ float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz for (k=1;k<=NZ;k++){ sxx_x = dx*(b1*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k])+b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+b2*(sxy[j][i+1][k]-sxy[j][i-2][k])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+b2*(sxz[j][i+1][k]-sxz[j][i-2][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+b2*(sxy[j+1][i][k]-sxy[j-2][i][k])); - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+b2*(syy[j+2][i][k]-syy[j-1][i][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+b2*(syz[j+1][i][k]-syz[j-2][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+b2*(sxz[j][i][k+1]-sxz[j][i][k-2])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+b2*(syz[j][i][k+1]-syz[j][i][k-2])); - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+b2*(szz[j][i][k+2]-szz[j][i][k-1])); - - - psi_sxx_x[j][i][k] = b_x_half[i] * psi_sxx_x[j][i][k] + a_x_half[i] * sxx_x; - sxx_x = sxx_x / K_x_half[i] + psi_sxx_x[j][i][k]; - psi_sxy_x[j][i][k] = b_x[i] * psi_sxy_x[j][i][k] + a_x[i] * sxy_x; - sxy_x = sxy_x / K_x[i] + psi_sxy_x[j][i][k]; - psi_sxz_x[j][i][k] = b_x[i] * psi_sxz_x[j][i][k] + a_x[i] * sxz_x; - sxz_x = sxz_x / K_x[i] + psi_sxz_x[j][i][k]; + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])); + + + pml_wfd->psi_sxx_x[j][i][k] = pml_coeff->b_x_half[i] * pml_wfd->psi_sxx_x[j][i][k] + pml_coeff->a_x_half[i] * sxx_x; + sxx_x = sxx_x / pml_coeff->K_x_half[i] + pml_wfd->psi_sxx_x[j][i][k]; + pml_wfd->psi_sxy_x[j][i][k] = pml_coeff->b_x[i] * pml_wfd->psi_sxy_x[j][i][k] + pml_coeff->a_x[i] * sxy_x; + sxy_x = sxy_x / pml_coeff->K_x[i] + pml_wfd->psi_sxy_x[j][i][k]; + pml_wfd->psi_sxz_x[j][i][k] = pml_coeff->b_x[i] * pml_wfd->psi_sxz_x[j][i][k] + pml_coeff->a_x[i] * sxz_x; + sxz_x = sxz_x / pml_coeff->K_x[i] + pml_wfd->psi_sxz_x[j][i][k]; if((POS[2]==0 && FREE_SURF==0) && (j<=FW)){ - psi_sxy_y[j][i][k] = b_y[j] * psi_sxy_y[j][i][k] + a_y[j] * sxy_y; - sxy_y = sxy_y / K_y[j] + psi_sxy_y[j][i][k]; - psi_syy_y[j][i][k] = b_y_half[j] * psi_syy_y[j][i][k] + a_y_half[j] * syy_y; - syy_y = syy_y / K_y_half[j] + psi_syy_y[j][i][k]; - psi_syz_y[j][i][k] = b_y[j] * psi_syz_y[j][i][k] + a_y[j] * syz_y; - syz_y = syz_y / K_y[j] + psi_syz_y[j][i][k]; } + pml_wfd->psi_sxy_y[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_sxy_y[j][i][k] + pml_coeff->a_y[j] * sxy_y; + sxy_y = sxy_y / pml_coeff->K_y[j] + pml_wfd->psi_sxy_y[j][i][k]; + pml_wfd->psi_syy_y[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_syy_y[j][i][k] + pml_coeff->a_y_half[j] * syy_y; + syy_y = syy_y / pml_coeff->K_y_half[j] + pml_wfd->psi_syy_y[j][i][k]; + pml_wfd->psi_syz_y[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_syz_y[j][i][k] + pml_coeff->a_y[j] * syz_y; + syz_y = syz_y / pml_coeff->K_y[j] + pml_wfd->psi_syz_y[j][i][k]; } if((POS[2]==NPROCY-1) && (j>=ny2+1)){ h1 = (j-ny2+FW); - psi_sxy_y[h1][i][k] = b_y[h1] * psi_sxy_y[h1][i][k] + a_y[h1] * sxy_y; - sxy_y = sxy_y / K_y[h1] + psi_sxy_y[h1][i][k]; - psi_syy_y[h1][i][k] = b_y_half[h1] * psi_syy_y[h1][i][k] + a_y_half[h1] * syy_y; - syy_y = syy_y / K_y_half[h1] + psi_syy_y[h1][i][k]; - psi_syz_y[h1][i][k] = b_y[h1] * psi_syz_y[h1][i][k] + a_y[h1] * syz_y; - syz_y = syz_y / K_y[h1] + psi_syz_y[h1][i][k]; + pml_wfd->psi_sxy_y[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_sxy_y[h1][i][k] + pml_coeff->a_y[h1] * sxy_y; + sxy_y = sxy_y / pml_coeff->K_y[h1] + pml_wfd->psi_sxy_y[h1][i][k]; + pml_wfd->psi_syy_y[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_syy_y[h1][i][k] + pml_coeff->a_y_half[h1] * syy_y; + syy_y = syy_y / pml_coeff->K_y_half[h1] + pml_wfd->psi_syy_y[h1][i][k]; + pml_wfd->psi_syz_y[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_syz_y[h1][i][k] + pml_coeff->a_y[h1] * syz_y; + syz_y = syz_y / pml_coeff->K_y[h1] + pml_wfd->psi_syz_y[h1][i][k]; } if((POS[3]==0) && (k<=FW)){ - psi_sxz_z[j][i][k] = b_z[k] * psi_sxz_z[j][i][k] + a_z[k] * sxz_z; - sxz_z = sxz_z / K_z[k] + psi_sxz_z[j][i][k]; - psi_syz_z[j][i][k] = b_z[k] * psi_syz_z[j][i][k] + a_z[k] * syz_z; - syz_z = syz_z / K_z[k] + psi_syz_z[j][i][k]; - psi_szz_z[j][i][k] = b_z_half[k] * psi_szz_z[j][i][k] + a_z_half[k] * szz_z; - szz_z = szz_z / K_z_half[k] + psi_szz_z[j][i][k];} + pml_wfd->psi_sxz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_sxz_z[j][i][k] + pml_coeff->a_z[k] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[k] + pml_wfd->psi_sxz_z[j][i][k]; + pml_wfd->psi_syz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_syz_z[j][i][k] + pml_coeff->a_z[k] * syz_z; + syz_z = syz_z / pml_coeff->K_z[k] + pml_wfd->psi_syz_z[j][i][k]; + pml_wfd->psi_szz_z[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_szz_z[j][i][k] + pml_coeff->a_z_half[k] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[k] + pml_wfd->psi_szz_z[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_sxz_z[j][i][h1] = b_z[h1] * psi_sxz_z[j][i][h1] + a_z[h1] * sxz_z; - sxz_z = sxz_z / K_z[h1] + psi_sxz_z[j][i][h1]; - psi_syz_z[j][i][h1] = b_z[h1] * psi_syz_z[j][i][h1] + a_z[h1] * syz_z; - syz_z = syz_z / K_z[h1] + psi_syz_z[j][i][h1]; - psi_szz_z[j][i][h1] = b_z_half[h1] * psi_szz_z[j][i][h1] + a_z_half[h1] * szz_z; - szz_z = szz_z / K_z_half[h1] + psi_szz_z[j][i][h1];} + pml_wfd->psi_sxz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_sxz_z[j][i][h1] + pml_coeff->a_z[h1] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[h1] + pml_wfd->psi_sxz_z[j][i][h1]; + pml_wfd->psi_syz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_syz_z[j][i][h1] + pml_coeff->a_z[h1] * syz_z; + syz_z = syz_z / pml_coeff->K_z[h1] + pml_wfd->psi_syz_z[j][i][h1]; + pml_wfd->psi_szz_z[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_szz_z[j][i][h1] + pml_coeff->a_z_half[h1] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[h1] + pml_wfd->psi_szz_z[j][i][h1];} - vx[j][i][k]+= (sxx_x + sxy_y + sxz_z)/rip[j][i][k]; - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y + sxz_z)/mod_av->rip[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -145,67 +139,67 @@ float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz for (k=1;k<=NZ;k++){ sxx_x = dx*(b1*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k])+b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+b2*(sxy[j][i+1][k]-sxy[j][i-2][k])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+b2*(sxz[j][i+1][k]-sxz[j][i-2][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+b2*(sxy[j+1][i][k]-sxy[j-2][i][k])); - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+b2*(syy[j+2][i][k]-syy[j-1][i][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+b2*(syz[j+1][i][k]-syz[j-2][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+b2*(sxz[j][i][k+1]-sxz[j][i][k-2])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+b2*(syz[j][i][k+1]-syz[j][i][k-2])); - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+b2*(szz[j][i][k+2]-szz[j][i][k-1])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])); h1 = (i-nx2+FW); - psi_sxx_x[j][h1][k] = b_x_half[h1] * psi_sxx_x[j][h1][k] + a_x_half[h1] * sxx_x; - sxx_x = sxx_x / K_x_half[h1] + psi_sxx_x[j][h1][k]; - psi_sxy_x[j][h1][k] = b_x[h1] * psi_sxy_x[j][h1][k] + a_x[h1] * sxy_x; - sxy_x = sxy_x / K_x[h1] + psi_sxy_x[j][h1][k]; - psi_sxz_x[j][h1][k] = b_x[h1] * psi_sxz_x[j][h1][k] + a_x[h1] * sxz_x; - sxz_x = sxz_x / K_x[h1] + psi_sxz_x[j][h1][k]; + pml_wfd->psi_sxx_x[j][h1][k] = pml_coeff->b_x_half[h1] * pml_wfd->psi_sxx_x[j][h1][k] + pml_coeff->a_x_half[h1] * sxx_x; + sxx_x = sxx_x / pml_coeff->K_x_half[h1] + pml_wfd->psi_sxx_x[j][h1][k]; + pml_wfd->psi_sxy_x[j][h1][k] = pml_coeff->b_x[h1] * pml_wfd->psi_sxy_x[j][h1][k] + pml_coeff->a_x[h1] * sxy_x; + sxy_x = sxy_x / pml_coeff->K_x[h1] + pml_wfd->psi_sxy_x[j][h1][k]; + pml_wfd->psi_sxz_x[j][h1][k] = pml_coeff->b_x[h1] * pml_wfd->psi_sxz_x[j][h1][k] + pml_coeff->a_x[h1] * sxz_x; + sxz_x = sxz_x / pml_coeff->K_x[h1] + pml_wfd->psi_sxz_x[j][h1][k]; if((POS[2]==0 && FREE_SURF==0) && (j<=FW)){ - psi_sxy_y[j][i][k] = b_y[j] * psi_sxy_y[j][i][k] + a_y[j] * sxy_y; - sxy_y = sxy_y / K_y[j] + psi_sxy_y[j][i][k]; - psi_syy_y[j][i][k] = b_y_half[j] * psi_syy_y[j][i][k] + a_y_half[j] * syy_y; - syy_y = syy_y / K_y_half[j] + psi_syy_y[j][i][k]; - psi_syz_y[j][i][k] = b_y[j] * psi_syz_y[j][i][k] + a_y[j] * syz_y; - syz_y = syz_y / K_y[j] + psi_syz_y[j][i][k]; } + pml_wfd->psi_sxy_y[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_sxy_y[j][i][k] + pml_coeff->a_y[j] * sxy_y; + sxy_y = sxy_y / pml_coeff->K_y[j] + pml_wfd->psi_sxy_y[j][i][k]; + pml_wfd->psi_syy_y[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_syy_y[j][i][k] + pml_coeff->a_y_half[j] * syy_y; + syy_y = syy_y / pml_coeff->K_y_half[j] + pml_wfd->psi_syy_y[j][i][k]; + pml_wfd->psi_syz_y[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_syz_y[j][i][k] + pml_coeff->a_y[j] * syz_y; + syz_y = syz_y / pml_coeff->K_y[j] + pml_wfd->psi_syz_y[j][i][k]; } if((POS[2]==NPROCY-1) && (j>=ny2+1)){ h1 = (j-ny2+FW); - psi_sxy_y[h1][i][k] = b_y[h1] * psi_sxy_y[h1][i][k] + a_y[h1] * sxy_y; - sxy_y = sxy_y / K_y[h1] + psi_sxy_y[h1][i][k]; - psi_syy_y[h1][i][k] = b_y_half[h1] * psi_syy_y[h1][i][k] + a_y_half[h1] * syy_y; - syy_y = syy_y / K_y_half[h1] + psi_syy_y[h1][i][k]; - psi_syz_y[h1][i][k] = b_y[h1] * psi_syz_y[h1][i][k] + a_y[h1] * syz_y; - syz_y = syz_y / K_y[h1] + psi_syz_y[h1][i][k]; + pml_wfd->psi_sxy_y[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_sxy_y[h1][i][k] + pml_coeff->a_y[h1] * sxy_y; + sxy_y = sxy_y / pml_coeff->K_y[h1] + pml_wfd->psi_sxy_y[h1][i][k]; + pml_wfd->psi_syy_y[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_syy_y[h1][i][k] + pml_coeff->a_y_half[h1] * syy_y; + syy_y = syy_y / pml_coeff->K_y_half[h1] + pml_wfd->psi_syy_y[h1][i][k]; + pml_wfd->psi_syz_y[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_syz_y[h1][i][k] + pml_coeff->a_y[h1] * syz_y; + syz_y = syz_y / pml_coeff->K_y[h1] + pml_wfd->psi_syz_y[h1][i][k]; } if((POS[3]==0) && (k<=FW)){ - psi_sxz_z[j][i][k] = b_z[k] * psi_sxz_z[j][i][k] + a_z[k] * sxz_z; - sxz_z = sxz_z / K_z[k] + psi_sxz_z[j][i][k]; - psi_syz_z[j][i][k] = b_z[k] * psi_syz_z[j][i][k] + a_z[k] * syz_z; - syz_z = syz_z / K_z[k] + psi_syz_z[j][i][k]; - psi_szz_z[j][i][k] = b_z_half[k] * psi_szz_z[j][i][k] + a_z_half[k] * szz_z; - szz_z = szz_z / K_z_half[k] + psi_szz_z[j][i][k];} + pml_wfd->psi_sxz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_sxz_z[j][i][k] + pml_coeff->a_z[k] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[k] + pml_wfd->psi_sxz_z[j][i][k]; + pml_wfd->psi_syz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_syz_z[j][i][k] + pml_coeff->a_z[k] * syz_z; + syz_z = syz_z / pml_coeff->K_z[k] + pml_wfd->psi_syz_z[j][i][k]; + pml_wfd->psi_szz_z[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_szz_z[j][i][k] + pml_coeff->a_z_half[k] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[k] + pml_wfd->psi_szz_z[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_sxz_z[j][i][h1] = b_z[h1] * psi_sxz_z[j][i][h1] + a_z[h1] * sxz_z; - sxz_z = sxz_z / K_z[h1] + psi_sxz_z[j][i][h1]; - psi_syz_z[j][i][h1] = b_z[h1] * psi_syz_z[j][i][h1] + a_z[h1] * syz_z; - syz_z = syz_z / K_z[h1] + psi_syz_z[j][i][h1]; - psi_szz_z[j][i][h1] = b_z_half[h1] * psi_szz_z[j][i][h1] + a_z_half[h1] * szz_z; - szz_z = szz_z / K_z_half[h1] + psi_szz_z[j][i][h1];} + pml_wfd->psi_sxz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_sxz_z[j][i][h1] + pml_coeff->a_z[h1] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[h1] + pml_wfd->psi_sxz_z[j][i][h1]; + pml_wfd->psi_syz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_syz_z[j][i][h1] + pml_coeff->a_z[h1] * syz_z; + syz_z = syz_z / pml_coeff->K_z[h1] + pml_wfd->psi_syz_z[j][i][h1]; + pml_wfd->psi_szz_z[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_szz_z[j][i][h1] + pml_coeff->a_z_half[h1] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[h1] + pml_wfd->psi_szz_z[j][i][h1];} - vx[j][i][k]+= (sxx_x + sxy_y + sxz_z)/rip[j][i][k]; - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y + sxz_z)/mod_av->rip[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -218,46 +212,46 @@ float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz for (k=1;k<=NZ;k++){ sxx_x = dx*(b1*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k])+b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+b2*(sxy[j][i+1][k]-sxy[j][i-2][k])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+b2*(sxz[j][i+1][k]-sxz[j][i-2][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+b2*(sxy[j+1][i][k]-sxy[j-2][i][k])); - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+b2*(syy[j+2][i][k]-syy[j-1][i][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+b2*(syz[j+1][i][k]-syz[j-2][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+b2*(sxz[j][i][k+1]-sxz[j][i][k-2])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+b2*(syz[j][i][k+1]-syz[j][i][k-2])); - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+b2*(szz[j][i][k+2]-szz[j][i][k-1])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])); - psi_sxy_y[j][i][k] = b_y[j] * psi_sxy_y[j][i][k] + a_y[j] * sxy_y; - sxy_y = sxy_y / K_y[j] + psi_sxy_y[j][i][k]; + pml_wfd->psi_sxy_y[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_sxy_y[j][i][k] + pml_coeff->a_y[j] * sxy_y; + sxy_y = sxy_y / pml_coeff->K_y[j] + pml_wfd->psi_sxy_y[j][i][k]; - psi_syy_y[j][i][k] = b_y_half[j] * psi_syy_y[j][i][k] + a_y_half[j] * syy_y; - syy_y = syy_y / K_y_half[j] + psi_syy_y[j][i][k]; + pml_wfd->psi_syy_y[j][i][k] = pml_coeff->b_y_half[j] * pml_wfd->psi_syy_y[j][i][k] + pml_coeff->a_y_half[j] * syy_y; + syy_y = syy_y / pml_coeff->K_y_half[j] + pml_wfd->psi_syy_y[j][i][k]; - psi_syz_y[j][i][k] = b_y[j] * psi_syz_y[j][i][k] + a_y[j] * syz_y; - syz_y = syz_y / K_y[j] + psi_syz_y[j][i][k]; + pml_wfd->psi_syz_y[j][i][k] = pml_coeff->b_y[j] * pml_wfd->psi_syz_y[j][i][k] + pml_coeff->a_y[j] * syz_y; + syz_y = syz_y / pml_coeff->K_y[j] + pml_wfd->psi_syz_y[j][i][k]; if((POS[3]==0) && (k<=FW)){ - psi_sxz_z[j][i][k] = b_z[k] * psi_sxz_z[j][i][k] + a_z[k] * sxz_z; - sxz_z = sxz_z / K_z[k] + psi_sxz_z[j][i][k]; - psi_syz_z[j][i][k] = b_z[k] * psi_syz_z[j][i][k] + a_z[k] * syz_z; - syz_z = syz_z / K_z[k] + psi_syz_z[j][i][k]; - psi_szz_z[j][i][k] = b_z_half[k] * psi_szz_z[j][i][k] + a_z_half[k] * szz_z; - szz_z = szz_z / K_z_half[k] + psi_szz_z[j][i][k];} + pml_wfd->psi_sxz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_sxz_z[j][i][k] + pml_coeff->a_z[k] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[k] + pml_wfd->psi_sxz_z[j][i][k]; + pml_wfd->psi_syz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_syz_z[j][i][k] + pml_coeff->a_z[k] * syz_z; + syz_z = syz_z / pml_coeff->K_z[k] + pml_wfd->psi_syz_z[j][i][k]; + pml_wfd->psi_szz_z[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_szz_z[j][i][k] + pml_coeff->a_z_half[k] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[k] + pml_wfd->psi_szz_z[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_sxz_z[j][i][h1] = b_z[h1] * psi_sxz_z[j][i][h1] + a_z[h1] * sxz_z; - sxz_z = sxz_z / K_z[h1] + psi_sxz_z[j][i][h1]; - psi_syz_z[j][i][h1] = b_z[h1] * psi_syz_z[j][i][h1] + a_z[h1] * syz_z; - syz_z = syz_z / K_z[h1] + psi_syz_z[j][i][h1]; - psi_szz_z[j][i][h1] = b_z_half[h1] * psi_szz_z[j][i][h1] + a_z_half[h1] * szz_z; - szz_z = szz_z / K_z_half[h1] + psi_szz_z[j][i][h1];} + pml_wfd->psi_sxz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_sxz_z[j][i][h1] + pml_coeff->a_z[h1] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[h1] + pml_wfd->psi_sxz_z[j][i][h1]; + pml_wfd->psi_syz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_syz_z[j][i][h1] + pml_coeff->a_z[h1] * syz_z; + syz_z = syz_z / pml_coeff->K_z[h1] + pml_wfd->psi_syz_z[j][i][h1]; + pml_wfd->psi_szz_z[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_szz_z[j][i][h1] + pml_coeff->a_z_half[h1] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[h1] + pml_wfd->psi_szz_z[j][i][h1];} - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -270,45 +264,45 @@ float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz for (k=1;k<=NZ;k++){ sxx_x = dx*(b1*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k])+b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+b2*(sxy[j][i+1][k]-sxy[j][i-2][k])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+b2*(sxz[j][i+1][k]-sxz[j][i-2][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+b2*(sxy[j+1][i][k]-sxy[j-2][i][k])); - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+b2*(syy[j+2][i][k]-syy[j-1][i][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+b2*(syz[j+1][i][k]-syz[j-2][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+b2*(sxz[j][i][k+1]-sxz[j][i][k-2])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+b2*(syz[j][i][k+1]-syz[j][i][k-2])); - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+b2*(szz[j][i][k+2]-szz[j][i][k-1])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])); h1 = (j-ny2+FW); - psi_sxy_y[h1][i][k] = b_y[h1] * psi_sxy_y[h1][i][k] + a_y[h1] * sxy_y; - sxy_y = sxy_y / K_y[h1] + psi_sxy_y[h1][i][k]; - psi_syy_y[h1][i][k] = b_y_half[h1] * psi_syy_y[h1][i][k] + a_y_half[h1] * syy_y; - syy_y = syy_y / K_y_half[h1] + psi_syy_y[h1][i][k]; - psi_syz_y[h1][i][k] = b_y[h1] * psi_syz_y[h1][i][k] + a_y[h1] * syz_y; - syz_y = syz_y / K_y[h1] + psi_syz_y[h1][i][k]; + pml_wfd->psi_sxy_y[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_sxy_y[h1][i][k] + pml_coeff->a_y[h1] * sxy_y; + sxy_y = sxy_y / pml_coeff->K_y[h1] + pml_wfd->psi_sxy_y[h1][i][k]; + pml_wfd->psi_syy_y[h1][i][k] = pml_coeff->b_y_half[h1] * pml_wfd->psi_syy_y[h1][i][k] + pml_coeff->a_y_half[h1] * syy_y; + syy_y = syy_y / pml_coeff->K_y_half[h1] + pml_wfd->psi_syy_y[h1][i][k]; + pml_wfd->psi_syz_y[h1][i][k] = pml_coeff->b_y[h1] * pml_wfd->psi_syz_y[h1][i][k] + pml_coeff->a_y[h1] * syz_y; + syz_y = syz_y / pml_coeff->K_y[h1] + pml_wfd->psi_syz_y[h1][i][k]; if((POS[3]==0) && (k<=FW)){ - psi_sxz_z[j][i][k] = b_z[k] * psi_sxz_z[j][i][k] + a_z[k] * sxz_z; - sxz_z = sxz_z / K_z[k] + psi_sxz_z[j][i][k]; - psi_syz_z[j][i][k] = b_z[k] * psi_syz_z[j][i][k] + a_z[k] * syz_z; - syz_z = syz_z / K_z[k] + psi_syz_z[j][i][k]; - psi_szz_z[j][i][k] = b_z_half[k] * psi_szz_z[j][i][k] + a_z_half[k] * szz_z; - szz_z = szz_z / K_z_half[k] + psi_szz_z[j][i][k];} + pml_wfd->psi_sxz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_sxz_z[j][i][k] + pml_coeff->a_z[k] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[k] + pml_wfd->psi_sxz_z[j][i][k]; + pml_wfd->psi_syz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_syz_z[j][i][k] + pml_coeff->a_z[k] * syz_z; + syz_z = syz_z / pml_coeff->K_z[k] + pml_wfd->psi_syz_z[j][i][k]; + pml_wfd->psi_szz_z[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_szz_z[j][i][k] + pml_coeff->a_z_half[k] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[k] + pml_wfd->psi_szz_z[j][i][k];} if((POS[3]==NPROCZ-1) && (k>=nz2+1)){ h1 = (k-nz2+FW); - psi_sxz_z[j][i][h1] = b_z[h1] * psi_sxz_z[j][i][h1] + a_z[h1] * sxz_z; - sxz_z = sxz_z / K_z[h1] + psi_sxz_z[j][i][h1]; - psi_syz_z[j][i][h1] = b_z[h1] * psi_syz_z[j][i][h1] + a_z[h1] * syz_z; - syz_z = syz_z / K_z[h1] + psi_syz_z[j][i][h1]; - psi_szz_z[j][i][h1] = b_z_half[h1] * psi_szz_z[j][i][h1] + a_z_half[h1] * szz_z; - szz_z = szz_z / K_z_half[h1] + psi_szz_z[j][i][h1];} - - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + pml_wfd->psi_sxz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_sxz_z[j][i][h1] + pml_coeff->a_z[h1] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[h1] + pml_wfd->psi_sxz_z[j][i][h1]; + pml_wfd->psi_syz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_syz_z[j][i][h1] + pml_coeff->a_z[h1] * syz_z; + syz_z = syz_z / pml_coeff->K_z[h1] + pml_wfd->psi_syz_z[j][i][h1]; + pml_wfd->psi_szz_z[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_szz_z[j][i][h1] + pml_coeff->a_z_half[h1] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[h1] + pml_wfd->psi_szz_z[j][i][h1];} + + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -323,26 +317,26 @@ float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz for (k=1;k<=FW;k++){ sxx_x = dx*(b1*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k])+b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+b2*(sxy[j][i+1][k]-sxy[j][i-2][k])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+b2*(sxz[j][i+1][k]-sxz[j][i-2][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+b2*(sxy[j+1][i][k]-sxy[j-2][i][k])); - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+b2*(syy[j+2][i][k]-syy[j-1][i][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+b2*(syz[j+1][i][k]-syz[j-2][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+b2*(sxz[j][i][k+1]-sxz[j][i][k-2])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+b2*(syz[j][i][k+1]-syz[j][i][k-2])); - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+b2*(szz[j][i][k+2]-szz[j][i][k-1])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])); - psi_sxz_z[j][i][k] = b_z[k] * psi_sxz_z[j][i][k] + a_z[k] * sxz_z; - sxz_z = sxz_z / K_z[k] + psi_sxz_z[j][i][k]; - psi_syz_z[j][i][k] = b_z[k] * psi_syz_z[j][i][k] + a_z[k] * syz_z; - syz_z = syz_z / K_z[k] + psi_syz_z[j][i][k]; - psi_szz_z[j][i][k] = b_z_half[k] * psi_szz_z[j][i][k] + a_z_half[k] * szz_z; - szz_z = szz_z / K_z_half[k] + psi_szz_z[j][i][k]; + pml_wfd->psi_sxz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_sxz_z[j][i][k] + pml_coeff->a_z[k] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[k] + pml_wfd->psi_sxz_z[j][i][k]; + pml_wfd->psi_syz_z[j][i][k] = pml_coeff->b_z[k] * pml_wfd->psi_syz_z[j][i][k] + pml_coeff->a_z[k] * syz_z; + syz_z = syz_z / pml_coeff->K_z[k] + pml_wfd->psi_syz_z[j][i][k]; + pml_wfd->psi_szz_z[j][i][k] = pml_coeff->b_z_half[k] * pml_wfd->psi_szz_z[j][i][k] + pml_coeff->a_z_half[k] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[k] + pml_wfd->psi_szz_z[j][i][k]; - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -354,27 +348,27 @@ float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz for (i=nx1;i<=nx2;i++){ for (k=nz2+1;k<=nz2+FW;k++){ sxx_x = dx*(b1*(stress->sxx[j][i+1][k]-stress->sxx[j][i][k])+b2*(stress->sxx[j][i+2][k]-stress->sxx[j][i-1][k])); - sxy_x = dx*(b1*(sxy[j][i][k]-sxy[j][i-1][k])+b2*(sxy[j][i+1][k]-sxy[j][i-2][k])); - sxz_x = dx*(b1*(sxz[j][i][k]-sxz[j][i-1][k])+b2*(sxz[j][i+1][k]-sxz[j][i-2][k])); - sxy_y = dy*(b1*(sxy[j][i][k]-sxy[j-1][i][k])+b2*(sxy[j+1][i][k]-sxy[j-2][i][k])); - syy_y = dy*(b1*(syy[j+1][i][k]-syy[j][i][k])+b2*(syy[j+2][i][k]-syy[j-1][i][k])); - syz_y = dy*(b1*(syz[j][i][k]-syz[j-1][i][k])+b2*(syz[j+1][i][k]-syz[j-2][i][k])); - sxz_z = dz*(b1*(sxz[j][i][k]-sxz[j][i][k-1])+b2*(sxz[j][i][k+1]-sxz[j][i][k-2])); - syz_z = dz*(b1*(syz[j][i][k]-syz[j][i][k-1])+b2*(syz[j][i][k+1]-syz[j][i][k-2])); - szz_z = dz*(b1*(szz[j][i][k+1]-szz[j][i][k])+b2*(szz[j][i][k+2]-szz[j][i][k-1])); + sxy_x = dx*(b1*(stress->sxy[j][i][k]-stress->sxy[j][i-1][k])+b2*(stress->sxy[j][i+1][k]-stress->sxy[j][i-2][k])); + sxz_x = dx*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i-1][k])+b2*(stress->sxz[j][i+1][k]-stress->sxz[j][i-2][k])); + sxy_y = dy*(b1*(stress->sxy[j][i][k]-stress->sxy[j-1][i][k])+b2*(stress->sxy[j+1][i][k]-stress->sxy[j-2][i][k])); + syy_y = dy*(b1*(stress->syy[j+1][i][k]-stress->syy[j][i][k])+b2*(stress->syy[j+2][i][k]-stress->syy[j-1][i][k])); + syz_y = dy*(b1*(stress->syz[j][i][k]-stress->syz[j-1][i][k])+b2*(stress->syz[j+1][i][k]-stress->syz[j-2][i][k])); + sxz_z = dz*(b1*(stress->sxz[j][i][k]-stress->sxz[j][i][k-1])+b2*(stress->sxz[j][i][k+1]-stress->sxz[j][i][k-2])); + syz_z = dz*(b1*(stress->syz[j][i][k]-stress->syz[j][i][k-1])+b2*(stress->syz[j][i][k+1]-stress->syz[j][i][k-2])); + szz_z = dz*(b1*(stress->szz[j][i][k+1]-stress->szz[j][i][k])+b2*(stress->szz[j][i][k+2]-stress->szz[j][i][k-1])); h1 = (k-nz2+FW); - psi_sxz_z[j][i][h1] = b_z[h1] * psi_sxz_z[j][i][h1] + a_z[h1] * sxz_z; - sxz_z = sxz_z / K_z[h1] + psi_sxz_z[j][i][h1]; - psi_syz_z[j][i][h1] = b_z[h1] * psi_syz_z[j][i][h1] + a_z[h1] * syz_z; - syz_z = syz_z / K_z[h1] + psi_syz_z[j][i][h1]; - psi_szz_z[j][i][h1] = b_z_half[h1] * psi_szz_z[j][i][h1] + a_z_half[h1] * szz_z; - szz_z = szz_z / K_z_half[h1] + psi_szz_z[j][i][h1]; + pml_wfd->psi_sxz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_sxz_z[j][i][h1] + pml_coeff->a_z[h1] * sxz_z; + sxz_z = sxz_z / pml_coeff->K_z[h1] + pml_wfd->psi_sxz_z[j][i][h1]; + pml_wfd->psi_syz_z[j][i][h1] = pml_coeff->b_z[h1] * pml_wfd->psi_syz_z[j][i][h1] + pml_coeff->a_z[h1] * syz_z; + syz_z = syz_z / pml_coeff->K_z[h1] + pml_wfd->psi_syz_z[j][i][h1]; + pml_wfd->psi_szz_z[j][i][h1] = pml_coeff->b_z_half[h1] * pml_wfd->psi_szz_z[j][i][h1] + pml_coeff->a_z_half[h1] * szz_z; + szz_z = szz_z / pml_coeff->K_z_half[h1] + pml_wfd->psi_szz_z[j][i][h1]; - vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/rip[j][i][k]; - vy[j][i][k]+= (syy_y + sxy_x + syz_z)/rjp[j][i][k]; - vz[j][i][k]+= (szz_z + sxz_x + syz_y)/rkp[j][i][k]; + vel->vx[j][i][k]+= (sxx_x + sxy_y +sxz_z)/mod_av->rip[j][i][k]; + vel->vy[j][i][k]+= (syy_y + sxy_x + syz_z)/mod_av->rjp[j][i][k]; + vel->vz[j][i][k]+= (szz_z + sxz_x + syz_y)/mod_av->rkp[j][i][k]; } } @@ -386,9 +380,9 @@ float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz i=(int)srcpos_loc[1][l]; j=(int)srcpos_loc[2][l]; k=(int)srcpos_loc[3][l]; - vx[j][i][k]+=signals[l][nt]; - vz[j][i][k]+=signalz[l][nt]; - vy[j][i][k]+=signaly[l][nt]; + vel->vx[j][i][k]+=signals->sectionvxdiff[l][nt]; + vel->vz[j][i][k]+=signals->sectionvzdiff[l][nt]; + vel->vy[j][i][k]+=signals->sectionvydiff[l][nt]; } } diff --git a/src/writemod.c b/src/writemod.c index 26de787..09745e7 100644 --- a/src/writemod.c +++ b/src/writemod.c @@ -24,7 +24,7 @@ #include "fd.h" -void writemod(char modfile[STRING_SIZE], float *** rho, int format){ +void writemod(char modfile[STRING_SIZE], st_model *mod, int format){ /* extern variables */ @@ -43,7 +43,7 @@ void writemod(char modfile[STRING_SIZE], float *** rho, int format){ for (k=1;k<=NZ;k+=IDZ) for (i=1;i<=NX;i+=IDX) for (j=1;j<=NY;j+=IDY) - writedsk(fpmod,rho[j][i][k],format); + writedsk(fpmod,mod->rho[j][i][k],format); fclose(fpmod); diff --git a/src/zero_grad.c b/src/zero_grad.c index 8cc1bff..6091cb7 100644 --- a/src/zero_grad.c +++ b/src/zero_grad.c @@ -23,16 +23,16 @@ #include "fd.h" -void zero_grad(int NX, int NY, int NZ, float *** grad1, float *** grad2, float *** grad3){ +void zero_grad(int NX, int NY, int NZ, st_gradient *grad){ int i, j, k; for (j=1;j<=NY;j++){ for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ - grad1[j][i][k]=0.0; - grad2[j][i][k]=0.0; - grad3[j][i][k]=0.0; + grad->vp[j][i][k]=0.0; + grad->vs[j][i][k]=0.0; + grad->rho[j][i][k]=0.0; } } } diff --git a/src/zero_invers.c b/src/zero_invers.c index 58e993f..9c04067 100644 --- a/src/zero_invers.c +++ b/src/zero_invers.c @@ -23,7 +23,7 @@ #include "fd.h" -void zero_invers(int NX, int NY, int NZ, float **** Ffvx, float **** Ffvy, float **** Ffvz, float **** Ffivx, float **** Ffivy, float **** Ffivz, float **** Fbvx, float **** Fbvy, float **** Fbvz, float **** Fbivx, float **** Fbivy, float **** Fbivz,int nfmax, int ntr_hess){ +void zero_invers(int NX, int NY, int NZ, st_freq_velocity *fourier_vel_fw, st_freq_velocity *fourier_vel_back,int nfmax, int ntr_hess){ extern int FDORDER, ABS_TYPE, POS[4]; int nx1, ny1, nz1, nx2, ny2, nz2, a,b,l, i, j, k,m; @@ -52,12 +52,12 @@ void zero_invers(int NX, int NY, int NZ, float **** Ffvx, float **** Ffvy, float for (j=ny1;j<=ny2;j++){ for (i=nx1;i<=nx2;i++){ for (k=nz1;k<=nz2;k++){ - Fbvx[m][j][i][k]=0.0; - Fbvy[m][j][i][k]=0.0; - Fbvz[m][j][i][k]=0.0; - Fbivx[m][j][i][k]=0.0; - Fbivy[m][j][i][k]=0.0; - Fbivz[m][j][i][k]=0.0; + fourier_vel_back->Fvx_re[m][j][i][k]=0.0; + fourier_vel_back->Fvy_re[m][j][i][k]=0.0; + fourier_vel_back->Fvz_re[m][j][i][k]=0.0; + fourier_vel_back->Fvx_im[m][j][i][k]=0.0; + fourier_vel_back->Fvy_im[m][j][i][k]=0.0; + fourier_vel_back->Fvz_im[m][j][i][k]=0.0; } } } @@ -67,12 +67,12 @@ void zero_invers(int NX, int NY, int NZ, float **** Ffvx, float **** Ffvy, float for (j=ny1;j<=ny2;j++){ for (i=nx1;i<=nx2;i++){ for (k=nz1;k<=nz2;k++){ - Ffvx[m][j][i][k]=0.0; - Ffvy[m][j][i][k]=0.0; - Ffvz[m][j][i][k]=0.0; - Ffivx[m][j][i][k]=0.0; - Ffivy[m][j][i][k]=0.0; - Ffivz[m][j][i][k]=0.0; + fourier_vel_fw->Fvx_re[m][j][i][k]=0.0; + fourier_vel_fw->Fvy_re[m][j][i][k]=0.0; + fourier_vel_fw->Fvz_re[m][j][i][k]=0.0; + fourier_vel_fw->Fvx_im[m][j][i][k]=0.0; + fourier_vel_fw->Fvy_im[m][j][i][k]=0.0; + fourier_vel_fw->Fvz_im[m][j][i][k]=0.0; } } } diff --git a/src/zero_wavefield.c b/src/zero_wavefield.c index 439395c..0b9e002 100644 --- a/src/zero_wavefield.c +++ b/src/zero_wavefield.c @@ -22,7 +22,7 @@ -------------------------------------------------------------------------*/ #include "fd.h" -void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float *** vz,st_stress *stress, float *** syy, float *** szz, float *** sxy, float *** syz, float *** sxz, float *** rxx, float *** ryy, float *** rzz, float *** rxy, float *** ryz, float *** rxz, float *** psi_sxx_x, float *** psi_sxy_x, float *** psi_sxz_x, float *** psi_sxy_y, float *** psi_syy_y, float *** psi_syz_y, float *** psi_sxz_z, float *** psi_syz_z, float *** psi_szz_z, float *** psi_vxx, float *** psi_vyx, float *** psi_vzx, float *** psi_vxy, float *** psi_vyy, float *** psi_vzy, float *** psi_vxz, float *** psi_vyz, float *** psi_vzz){ +void zero_wavefield( int NX, int NY, int NZ, st_velocity *vel,st_stress *stress, st_visc_mem *mem, st_pml_wfd *pml_wfd){ extern int FDORDER, ABS_TYPE, FW, POS[4],L; @@ -51,11 +51,11 @@ void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float * for (j=ny1;j<=ny2;j++){ for (i=nx1;i<=nx2;i++){ for (k=nz1;k<=nz2;k++){ - vx[j][i][k]=0.0; - vy[j][i][k]=0.0; - vz[j][i][k]=0.0; - sxy[j][i][k]=0.0; - syz[j][i][k]=0.0; + vel->vx[j][i][k]=0.0; + vel->vy[j][i][k]=0.0; + vel->vz[j][i][k]=0.0; + stress->sxy[j][i][k]=0.0; + stress->syz[j][i][k]=0.0; } } } @@ -66,9 +66,9 @@ void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float * for (i=nx1;i<=nx2;i++){ for (k=nz1;k<=nz2;k++){ stress->sxx[j][i][k]=0.0; - sxz[j][i][k]=0.0; - syy[j][i][k]=0.0; - szz[j][i][k]=0.0; + stress->sxz[j][i][k]=0.0; + stress->syy[j][i][k]=0.0; + stress->szz[j][i][k]=0.0; } } } @@ -80,12 +80,12 @@ void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float * for (j=1;j<=NY;j++){ for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ - rxx[j][i][k]=0.0; - rxy[j][i][k]=0.0; - rxz[j][i][k]=0.0; - ryy[j][i][k]=0.0; - ryz[j][i][k]=0.0; - rzz[j][i][k]=0.0; + mem->rxx[j][i][k]=0.0; + mem->rxy[j][i][k]=0.0; + mem->rxz[j][i][k]=0.0; + mem->ryy[j][i][k]=0.0; + mem->ryz[j][i][k]=0.0; + mem->rzz[j][i][k]=0.0; } } } @@ -95,12 +95,12 @@ void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float * for (j=1;j<=NY;j++){ for (i=1;i<=NX;i++){ for (k=1;k<=2*FW;k++){ - psi_sxz_z[j][i][k]=0.0; - psi_syz_z[j][i][k]=0.0; - psi_szz_z[j][i][k]=0.0; - psi_vxz[j][i][k]=0.0; - psi_vyz[j][i][k]=0.0; - psi_vzz[j][i][k]=0.0; + pml_wfd->psi_sxz_z[j][i][k]=0.0; + pml_wfd->psi_syz_z[j][i][k]=0.0; + pml_wfd->psi_szz_z[j][i][k]=0.0; + pml_wfd->psi_vxz[j][i][k]=0.0; + pml_wfd->psi_vyz[j][i][k]=0.0; + pml_wfd->psi_vzz[j][i][k]=0.0; } } } @@ -108,12 +108,12 @@ void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float * for (j=1;j<=NY;j++){ for (i=1;i<=2*FW;i++){ for (k=1;k<=NZ;k++){ - psi_sxx_x[j][i][k]=0.0; - psi_sxy_x[j][i][k]=0.0; - psi_sxz_x[j][i][k]=0.0; - psi_vxx[j][i][k]=0.0; - psi_vyx[j][i][k]=0.0; - psi_vzx[j][i][k]=0.0; + pml_wfd->psi_sxx_x[j][i][k]=0.0; + pml_wfd->psi_sxy_x[j][i][k]=0.0; + pml_wfd->psi_sxz_x[j][i][k]=0.0; + pml_wfd->psi_vxx[j][i][k]=0.0; + pml_wfd->psi_vyx[j][i][k]=0.0; + pml_wfd->psi_vzx[j][i][k]=0.0; } } } @@ -121,12 +121,12 @@ void zero_wavefield( int NX, int NY, int NZ, float *** vx, float *** vy, float * for (j=1;j<=2*FW;j++){ for (i=1;i<=NX;i++){ for (k=1;k<=NZ;k++){ - psi_sxy_y[j][i][k]=0.0; - psi_syy_y[j][i][k]=0.0; - psi_syz_y[j][i][k]=0.0; - psi_vxy[j][i][k]=0.0; - psi_vyy[j][i][k]=0.0; - psi_vzy[j][i][k]=0.0; + pml_wfd->psi_sxy_y[j][i][k]=0.0; + pml_wfd->psi_syy_y[j][i][k]=0.0; + pml_wfd->psi_syz_y[j][i][k]=0.0; + pml_wfd->psi_vxy[j][i][k]=0.0; + pml_wfd->psi_vyy[j][i][k]=0.0; + pml_wfd->psi_vzy[j][i][k]=0.0; } } } -- GitLab