#include "cstd.h" #include "utils.h" #include //FLT_MIN #include //malloc // Update 2D stresses when iv==1 // OUTPUT: szz, sxx, sxz void esg_sstep2d(ireal ** restrict c11, ireal ** restrict c33, ireal ** restrict c13, ireal ** restrict c55, ireal ** restrict vx, ireal ** restrict vz, IPNT gsc_szz, IPNT gec_szz, IPNT gsc_sxz, IPNT gec_sxz, IPNT lbc, IPNT rbc, int radius, ireal ** restrict coeff, ireal ** restrict sxx, ireal ** restrict szz, ireal ** restrict sxz, int eflag, int effective_media ){ //int effective_media = 1; //============================================= // Approach1: using effective media parameters if(effective_media) { // Update szz, sxx for(int i1 = gsc_szz[1]; i1 <= gec_szz[1]; i1++) for(int ir = 0; ir < radius; ir++){ for(int i0 = gsc_szz[0]; i0 <= gec_szz[0]; i0++){ // Update szz szz[i1][i0] += 2*c13[i1][i0]*c13[i1+1][i0]/(c13[i1][i0]+c13[i1+1][i0]) *coeff[1][ir]*(vx[i1+ir+1][i0]-vx[i1-ir][i0]) +2*c33[i1][i0]*c33[i1+1][i0]/(c33[i1][i0]+c33[i1+1][i0]) *coeff[0][ir]*(vz[i1][i0+ir]-vz[i1][i0-ir-1]); // Update sxx sxx[i1][i0] += 2*c11[i1][i0]*c11[i1+1][i0]/(c11[i1][i0]+c11[i1+1][i0]) *coeff[1][ir]*(vx[i1+ir+1][i0]-vx[i1-ir][i0]) +2*c13[i1][i0]*c13[i1+1][i0]/(c13[i1][i0]+c13[i1+1][i0]) *coeff[0][ir]*(vz[i1][i0+ir]-vz[i1][i0-ir-1]); } } // Update sxz ireal *c55_tmp = (ireal*)malloc((gec_sxz[0]-gsc_sxz[0]+1)*sizeof(ireal)); for(int i1 = gsc_sxz[1]; i1 <= gec_sxz[1]; i1++) for(int ir = 0; ir < radius; ir++) { //precompute effective media parameters for(int i0 = gsc_sxz[0]; i0 <= gec_sxz[0]; i0++) { if(c55[i1][i0]