├── .gitignore ├── 2D_elastic_RTM ├── elastic_2D_kernel_2.cu ├── elastic_2D_kernel_3.cu ├── viscoelastic_equation.cu └── zzzzz ├── 3D_elastic_RTM ├── 3D_elastic_modeling_parameter ├── 3D_elastic_modeling_parameter_sh ├── 3D_elastic_modeling_typedef_struct ├── 3D_forward_or_back_together.cu ├── 3D_output_file.cu ├── 3D_zzzzz ├── log_old.txt ├── makefile ├── smooth_3d └── zzzzz └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.i 2 | *.ii 3 | *.gpu 4 | *.ptx 5 | *.cubin 6 | *.fatbin 7 | -------------------------------------------------------------------------------- /2D_elastic_RTM/elastic_2D_kernel_3.cu: -------------------------------------------------------------------------------- 1 | __constant__ const int BDIMX3=32; 2 | __constant__ const int BDIMY3=16; 3 | __constant__ const int radius3=6; 4 | __constant__ const float pai1=3.1415926; 5 | 6 | __global__ void caculate_ex_amp_time(float *p_d,float *ex_amp_d,float *ex_time_d,int it,int dimx,int dimz) 7 | { 8 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 9 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 10 | int in_idx; 11 | 12 | if(ix>>(tp1_d,ex_amp_tp_d,ex_tp_time_d,it-wavelet_half,nx_append_radius,nz_append_radius); 52 | { 53 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 54 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 55 | int in_idx; 56 | 57 | if(ix0) ex_angle1_d[in_idx]=int(angle_pp_d[in_idx]+0.5); 127 | if(angle_pp_d[in_idx]<=0) ex_angle1_d[in_idx]=int(angle_pp_d[in_idx]-0.5); 128 | }*/ 129 | } 130 | } 131 | 132 | __global__ void caculate_ex_angle_pp_only_RTM(float *angle_pp_d,float *poyn_px_d,float *poyn_pz_d,float *ex_time_d,int it,int dimx,int dimz) 133 | { 134 | __shared__ float s_data1[BDIMY3+2*radius3][BDIMX3+2*radius3]; 135 | __shared__ float s_data2[BDIMY3+2*radius3][BDIMX3+2*radius3]; 136 | 137 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 138 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 139 | int in_idx; 140 | double sumx=0.0,sumz=0.0; 141 | int m,n; 142 | 143 | int tx = threadIdx.x+radius3; 144 | int tz = threadIdx.y+radius3; 145 | s_data1[tz][tx]=0.0; 146 | s_data1[threadIdx.y][threadIdx.x]=0.0; 147 | s_data1[BDIMY3+2*radius3-1-threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 148 | s_data1[threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 149 | s_data1[BDIMY3+2*radius3-1-threadIdx.y][threadIdx.x]=0.0; 150 | 151 | s_data2[tz][tx]=0.0; 152 | s_data2[threadIdx.y][threadIdx.x]=0.0; 153 | s_data2[BDIMY3+2*radius3-1-threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 154 | s_data2[threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 155 | s_data2[BDIMY3+2*radius3-1-threadIdx.y][threadIdx.x]=0.0; 156 | 157 | if(ix>>(ex_angle_rpp_d,poyn_rpx_d,poyn_rpz_d,ex_time_d,it,nx_append_radius,nz_append_radius); 211 | { 212 | __shared__ float s_data1[BDIMY3+2*radius3][BDIMX3+2*radius3]; 213 | __shared__ float s_data2[BDIMY3+2*radius3][BDIMX3+2*radius3]; 214 | 215 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 216 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 217 | int in_idx; 218 | double sumx=0.0,sumz=0.0; 219 | int m=0,n=0; 220 | 221 | int tx = threadIdx.x+radius3; 222 | int tz = threadIdx.y+radius3; 223 | s_data1[tz][tx]=0.0; 224 | s_data1[threadIdx.y][threadIdx.x]=0.0; 225 | s_data1[BDIMY3+2*radius3-1-threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 226 | s_data1[threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 227 | s_data1[BDIMY3+2*radius3-1-threadIdx.y][threadIdx.x]=0.0; 228 | 229 | s_data2[tz][tx]=0.0; 230 | s_data2[threadIdx.y][threadIdx.x]=0.0; 231 | s_data2[BDIMY3+2*radius3-1-threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 232 | s_data2[threadIdx.y][BDIMX3+2*radius3-1-threadIdx.x]=0.0; 233 | s_data2[BDIMY3+2*radius3-1-threadIdx.y][threadIdx.x]=0.0; 234 | 235 | if(ix50) 388 | if(ix50&&iz>0.8*(ix-source_x_cord)&&iz>0.8*(source_x_cord-ix)) 389 | { 390 | in_idx=(ix+boundary_left)*dimz+iz+boundary_up; 391 | if(ex_amp_d[in_idx]<0) sign=-1; 392 | 393 | if(it==ex_time_d[in_idx]) 394 | { 395 | if(fabs(ex_amp_d[in_idx])>average) rimageup1_d[ix*nz+iz]=(rvxp1_d[in_idx]+rvzp1_d[in_idx])*1.0/ex_amp_d[in_idx]; 396 | 397 | if(fabs(ex_amp_d[in_idx])<=average) rimageup1_d[ix*nz+iz]=(rvxp1_d[in_idx]+rvzp1_d[in_idx])*1.0/average*sign; 398 | } 399 | } 400 | } 401 | 402 | __global__ void imaging_ex_new(float *rimageup1_d,float *ex_amp_d,float *ex_time_d,float *rp_d,int it,int source_x_cord,int nx,int nz,int dimx,int dimz,int boundary_up,int boundary_left) 403 | { 404 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 405 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 406 | int in_idx; 407 | 408 | //if(ix50) 409 | if(ix50&&iz>1.2*(ix-source_x_cord)&&iz>1.2*(source_x_cord-ix)) 410 | { 411 | in_idx=(ix+boundary_left)*dimz+iz+boundary_up; 412 | if(it==ex_time_d[in_idx]) 413 | rimageup1_d[ix*nz+iz]=rp_d[in_idx]*1.0/fabs(ex_amp_d[in_idx]); 414 | } 415 | } 416 | 417 | __global__ void imaging_ex_new_average(float *rimageup1_d,float *ex_amp_d,float *ex_time_d,float *rp_d,int it,int source_x_cord,int nx,int nz,int dimx,int dimz,int boundary_up,int boundary_left,float average) 418 | { 419 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 420 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 421 | int in_idx; 422 | int sign=1; 423 | 424 | //if(ix50) 425 | if(ix50&&iz>1.2*(ix-source_x_cord)&&iz>1.2*(source_x_cord-ix)) 426 | { 427 | in_idx=(ix+boundary_left)*dimz+iz+boundary_up; 428 | if(ex_amp_d[in_idx]<0) sign=-1; 429 | 430 | if(it==ex_time_d[in_idx]) 431 | { 432 | if(fabs(ex_amp_d[in_idx])>average) rimageup1_d[ix*nz+iz]=rp_d[in_idx]*1.0/ex_amp_d[in_idx]; 433 | 434 | if(fabs(ex_amp_d[in_idx])<=average) rimageup1_d[ix*nz+iz]=rp_d[in_idx]*1.0/average*sign; 435 | } 436 | } 437 | } 438 | 439 | __global__ void imaging_ex_correlation(float *rimageup1_d,float *ex_amp_d,float *ex_time_d,float *rp_d,int it,int source_x_cord,int nx,int nz,int dimx,int dimz,int boundary_up,int boundary_left) 440 | //image_npp_xx_d,ex_amp1_x_d,ex_time1_d,rvxp1_d,it,source_x_cord[ishot]-receiver_x_cord[ishot],imaging_size[0],nz,nx_append,nz_append,boundary_up,boundary_left 441 | { 442 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 443 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 444 | int in_idx; 445 | 446 | //if(ix50) 447 | if(ix50&&iz>1.2*(ix-source_x_cord)&&iz>1.2*(source_x_cord-ix)) 448 | { 449 | in_idx=(ix+boundary_left)*dimz+iz+boundary_up; 450 | 451 | if(it==ex_time_d[in_idx]) 452 | { 453 | rimageup1_d[ix*nz+iz]=rp_d[in_idx]*1.0*ex_amp_d[in_idx]; 454 | } 455 | } 456 | } 457 | 458 | __global__ void imaging_ex_ps(float *rimageup1_d,float *ex_amp_d,float *ex_time_d,float *rs_d,float *ex_angle_d,int it,int nx,int nz,int dimx,int dimz,int boundary_up,int boundary_left) 459 | { 460 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 461 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 462 | int in_idx; 463 | 464 | if(ix0) rimageup1_d[ix*nz+iz]=1.0*rs_d[in_idx]/fabs(ex_amp_d[in_idx]); 470 | if(ex_angle_d[in_idx]<=0) rimageup1_d[ix*nz+iz]=-1.0*rs_d[in_idx]/fabs(ex_amp_d[in_idx]); 471 | } 472 | } 473 | } 474 | 475 | __global__ void imageing_after_correcting(float *rimageup1_d,float *ex_angle_d,int nx,int nz,int dimx,int dimz,int boundary_up,int boundary_left) 476 | { 477 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 478 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 479 | int in_idx; 480 | 481 | if(ix50) 499 | if(ix50&&iz>1.2*(ix-source_x_cord)&&iz>1.2*(source_x_cord-ix)) 500 | { 501 | in_idx=(ix+boundary_left)*dimz+iz+boundary_up; 502 | 503 | r_angle=int((fabs(ex_angle_d[in_idx])+0.5)/dangle); 504 | 505 | set=r_angle*nx*nz+ix*nz+iz; 506 | 507 | if(r_angle=0) r_adcigs_pp_d[angle_num*nx*nz+set]+=image_d[ix*nz+iz];//*exp(-(fabs(ex_angle_d[in_idx])-r_angle*dangle)*(fabs(ex_angle_d[in_idx])-r_angle*dangle)/8); 508 | if(r_angle>>(ex_result_tp_d,ex_amp_tp_d,ex_tp_time_d,rtp2_d,nx_size,nz,nz_append,boundary_up,boundary_left,¶_max_d[0],it); 544 | { 545 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 546 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 547 | int in_idx; 548 | 549 | if(ix>>(ex_vresultpp_d,ex_amp_d,ex_amp_x_d,ex_amp_z_d,ex_time_d,rvxp2_d,rvzp2_d,nx_size,nz,nz_append,boundary_up,boundary_left,¶_max_d[1],it); 561 | { 562 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 563 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 564 | int idx; 565 | 566 | if(ix>>(ex_vresultpp_d,ex_amp_d,ex_amp_x_d,ex_amp_z_d,ex_time_d,rvxp2_d,rvzp2_d,nx_size,nz,nz_append,boundary_up,boundary_left,¶_max_d[1],it); 584 | { 585 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 586 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 587 | int idx; 588 | 589 | if(ix>>(vxp1_d,vxs1_d,rvxp1_d,rvxs1_d,resultxx_d,nx_size,nz,nz_append,boundary_up,boundary_left); 609 | { 610 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 611 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 612 | int in_idx; 613 | 614 | if(ix>>(ex_angle_pp_d,ex_angle_rpp_d,com_ex_vresultpp_d,ex_vresultpp_d,ex_time_d,nx_size,nz,nz_append,boundary_up,boundary_left,it); 624 | { 625 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 626 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 627 | int idx; 628 | float com=0.0; 629 | float denominrator=0.0; 630 | 631 | if(ix=87.5&&fabs(com)<=92.5) denominrator=0.1; 639 | 640 | else denominrator=float(cos(1.0*com*pai1/180.0)); 641 | 642 | com_ex_vresultpp_d[ix*nz+iz]=ex_vresultpp_d[ix*nz+iz]/(1.0*denominrator+0.0001); 643 | 644 | //ex_angle_rpp_d[idx]=com; 645 | ex_angle_rpp_d[idx]=ex_angle_pp_d[idx]-ex_angle_rpp_d[idx]; 646 | } 647 | } 648 | } 649 | 650 | __global__ void imaging_ps_compensate_dependent_angle_2D(float *ex_angle_pp_d,float *ex_angle_rpp_d,float *com_ex_vresultpp_d,float *ex_vresultpp_d,float *ex_time_d,int nx,int nz,int dimz,int boundary_up,int boundary_left,int it) 651 | { 652 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 653 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 654 | int idx; 655 | float com=0.0; 656 | float denominrator=0.0; 657 | 658 | if(ix>>(ex_open_pp_d,ex_angle_pp_d,ex_angle_rpp_d,nx_size,nz,nx_append,nz_append,boundary_up,boundary_left,it,ex_time_d); 680 | { 681 | 682 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 683 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 684 | int in_idx; 685 | 686 | if(ix>>(ex_com_pp_sign_d,ex_open_pp1_d,nx_size,nz,nx_append,nz_append,0); 700 | { 701 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 702 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 703 | int in_idx; 704 | 705 | if(ix>>(ex_open_pp1_d,ex_com_pp_sign_d,com_ex_vresultpp_d,ex_vresultpp_d,ex_time_d,nx_size,nz,nz_append,boundary_up,boundary_left); 719 | { 720 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 721 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 722 | int idx; 723 | float denominrator=0.0; 724 | 725 | if(ix=87.5&&fabs(ex_open_ps1_d[idx])<=92.5) denominrator=0.001; 730 | 731 | denominrator=ex_com_pp_sign_d[idx];//+0.01; 732 | 733 | //if(denominrator!=0) com_ex_vresultpp_d[ix*nz+iz]=1.0*ex_vresultpp_d[ix*nz+iz]/denominrator; 734 | 735 | if(denominrator<=0) com_ex_vresultpp_d[ix*nz+iz]=-1.0*ex_vresultpp_d[ix*nz+iz]; 736 | 737 | if(denominrator>0) com_ex_vresultpp_d[ix*nz+iz]=1.0*ex_vresultpp_d[ix*nz+iz]; 738 | 739 | com_ex_vresultpp_d[ix*nz+iz]=-1.0*com_ex_vresultpp_d[ix*nz+iz]/(fabs(denominrator)+0.03); 740 | } 741 | } 742 | 743 | __global__ void imaging_ps_compensate_dependent_angle_2D_new(float *ex_open_ps1_d,float *ex_com_ps_sign_d,float *com_ex_vresultps_d,float *ex_vresultps_d,float *ex_time_d,int nx,int nz,int dimz,int boundary_up,int boundary_left) 744 | //imaging_ps_compensate_dependent_angle_2D_new<<>>(ex_open_pp1_d,ex_com_ps_sign_d,com_ex_vresultps_d,ex_vresultps_d,ex_time_d,nx_size,nz,nz_append,boundary_up,boundary_left); 745 | { 746 | int ix = blockIdx.x*blockDim.x+threadIdx.x; 747 | int iz = blockIdx.y*blockDim.y+threadIdx.y; 748 | int idx; 749 | float denominrator=0.0; 750 | 751 | if(ix>> 273 | void make_attenuation_new(float *attenuation,int nx,int nz,int boundary_up,int boundary_down,int boundary_left,int boundary_right,float coe_attenuation) 274 | { 275 | float *att_up,*att_down,*att_left,*att_right; 276 | if(boundary_up!=0) 277 | { 278 | att_up=alloc1float(boundary_up); 279 | memset((void *) (att_up), 0, boundary_up* sizeof (float)); 280 | } 281 | att_down=alloc1float(boundary_down); 282 | att_left=alloc1float(boundary_left); 283 | att_right=alloc1float(boundary_right); 284 | memset((void *) (att_down), 0, boundary_down* sizeof (float)); 285 | memset((void *) (att_left), 0, boundary_left* sizeof (float)); 286 | memset((void *) (att_right), 0, boundary_right* sizeof (float)); 287 | 288 | float xxx; 289 | 290 | if(boundary_up!=0) 291 | { 292 | for(int iz=0;izmax) max=shotgather[in_idx]; 846 | } 847 | 848 | return(max); 849 | } 850 | 851 | float cpu_caculate_min(float *shotgather,int nx,int nz) 852 | { 853 | float min; 854 | int ix,iz; 855 | int in_idx; 856 | min=0; 857 | for(ix=0;ix>>(mgdevice[choose_ns].txx1_d,mgdevice[choose_ns].wavelet_d,nnx,nny,nnz_device_append,nnz_device,it,sx_real,sy_real,sz_real,bl,bb,bu); 37 | add_source_3D<<<1,1,0,mgdevice[choose_ns].stream>>>(mgdevice[choose_ns].tyy1_d,mgdevice[choose_ns].wavelet_d,nnx,nny,nnz_device_append,nnz_device,it,sx_real,sy_real,sz_real,bl,bb,bu); 38 | add_source_3D<<<1,1,0,mgdevice[choose_ns].stream>>>(mgdevice[choose_ns].tzz1_d,mgdevice[choose_ns].wavelet_d,nnx,nny,nnz_device_append,nnz_device,it,sx_real,sy_real,sz_real,bl,bb,bu); 39 | } 40 | 41 | checkCudaErrors(cudaDeviceSynchronize()); 42 | //if(fmod(it+1.0,1000.0)==1) warn("add_source_3D is passing"); 43 | 44 | exchange_device_nz_kernel_txxyyzz(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 45 | 46 | checkCudaErrors(cudaDeviceSynchronize()); 47 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_txxyyzz is passing"); 48 | 49 | 50 | if((fmod(it+1.0,wavefield_interval)==0)&&join_wavefield!=0) 51 | //if((it==500)&&join_wavefield!=0) 52 | { 53 | system("mkdir wavefield"); 54 | output_3d_wavefiled_tao(mgdevice,it+1); 55 | checkCudaErrors(cudaDeviceSynchronize()); 56 | 57 | output_3d_wavefiled_vx(mgdevice,it+1); 58 | checkCudaErrors(cudaDeviceSynchronize()); 59 | 60 | output_3d_wavefiled_vz(mgdevice,it+1); 61 | checkCudaErrors(cudaDeviceSynchronize()); 62 | 63 | output_3d_wavefiled_vzp(mgdevice,it+1); 64 | checkCudaErrors(cudaDeviceSynchronize()); 65 | 66 | output_3d_wavefiled_vzs(mgdevice,it+1); 67 | checkCudaErrors(cudaDeviceSynchronize()); 68 | 69 | if(((it+1.0)/wavefield_interval)==(lt/wavefield_interval)) 70 | { 71 | system("rm -r wavefield1"); 72 | system("mv wavefield wavefield1"); 73 | } 74 | } 75 | 76 | checkCudaErrors(cudaDeviceSynchronize()); 77 | //if(fmod(it+1.0,1000.0)==1) warn("output_3d_wavefiled is passing"); 78 | 79 | for(int i=0;i>>(mgdevice[i].tp2_d,mgdevice[i].tp1_d,mgdevice[i].txx2_d,mgdevice[i].txx1_d,mgdevice[i].tyy2_d,mgdevice[i].tyy1_d,mgdevice[i].tzz2_d,mgdevice[i].tzz1_d,mgdevice[i].txy2_d,mgdevice[i].txy1_d,mgdevice[i].txz2_d,mgdevice[i].txz1_d,mgdevice[i].tyz2_d,mgdevice[i].tyz1_d,mgdevice[i].vx1_d,mgdevice[i].vy1_d,mgdevice[i].vz1_d,mgdevice[i].velocity_d,mgdevice[i].velocity1_d,mgdevice[i].density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 84 | } 85 | 86 | checkCudaErrors(cudaDeviceSynchronize()); 87 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_txxzzxzpp_3D is passing"); 88 | 89 | exchange_device_nz_kernel_tao2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 90 | 91 | exchange_device_nz_kernel_taop2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 92 | 93 | checkCudaErrors(cudaDeviceSynchronize()); 94 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_tao2 taop2 is passing"); 95 | 96 | for(int i=0;i>>(mgdevice[i].vx2_d,mgdevice[i].vx1_d,mgdevice[i].txx2_d,mgdevice[i].txy2_d,mgdevice[i].txz2_d,mgdevice[i].velocity_d,mgdevice[i].velocity1_d,mgdevice[i].density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 101 | 102 | fwd_vy_3D<<>>(mgdevice[i].vy2_d,mgdevice[i].vy1_d,mgdevice[i].txy2_d,mgdevice[i].tyy2_d,mgdevice[i].tyz2_d,mgdevice[i].velocity_d,mgdevice[i].velocity1_d,mgdevice[i].density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 103 | 104 | fwd_vz_3D<<>>(mgdevice[i].vz2_d,mgdevice[i].vz1_d,mgdevice[i].txz2_d,mgdevice[i].tyz2_d,mgdevice[i].tzz2_d,mgdevice[i].velocity_d,mgdevice[i].velocity1_d,mgdevice[i].density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 105 | } 106 | 107 | checkCudaErrors(cudaDeviceSynchronize()); 108 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_vx_3D fwd_vy_3D fwd_vz_3D is passing"); 109 | 110 | exchange_device_nz_kernel_vx_vy_vz2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 111 | checkCudaErrors(cudaDeviceSynchronize()); 112 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_vx_vy_vz2 is passing"); 113 | 114 | for(int i=0;i>>(mgdevice[i].vxp2_d,mgdevice[i].vxp1_d,mgdevice[i].vyp2_d,mgdevice[i].vyp1_d,mgdevice[i].vzp2_d,mgdevice[i].vzp1_d,mgdevice[i].tp2_d,mgdevice[i].vxs2_d,mgdevice[i].vys2_d,mgdevice[i].vzs2_d,mgdevice[i].vx2_d,mgdevice[i].vy2_d,mgdevice[i].vz2_d,mgdevice[i].velocity_d,mgdevice[i].velocity1_d,mgdevice[i].density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 119 | } 120 | 121 | checkCudaErrors(cudaDeviceSynchronize()); 122 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_vxp_vzp_3D is passing"); 123 | 124 | { 125 | checkCudaErrors(cudaSetDevice(gpuid[choose_re])); 126 | 127 | write_or_add_shot_3D_surface_three<<>>(mgdevice[choose_re].obs_shot_x_d,mgdevice[choose_re].obs_shot_y_d,mgdevice[choose_re].obs_shot_z_d,mgdevice[choose_re].vx2_d,mgdevice[choose_re].vy2_d,mgdevice[choose_re].vz2_d,nnx,nny,nnz_device_append,nnz_device,bl,bb,bu,receiver_start_x,receiver_num_x,receiver_interval_x,receiver_start_y,receiver_num_y,receiver_interval_y,receiver_start_z,receiver_num_z,receiver_interval_z,0); 128 | 129 | checkCudaErrors(cudaDeviceSynchronize()); 130 | //if(fmod(it+1.0,1000.0)==1) warn("write_or_add_shot_3D_surface_three is passing"); 131 | 132 | if(vsp==0) 133 | { 134 | //cut_direct_shot_3D_surface_three<<>>(mgdevice[choose_re].obs_shot_x_d,mgdevice[choose_re].obs_shot_y_d,mgdevice[choose_re].obs_shot_z_d,mgdevice[choose_re].velocity_d,nnx,nny,nnz_device,bl,bb,bu,receiver_start_x,receiver_num_x,receiver_interval_x,receiver_start_y,receiver_num_y,receiver_interval_y,receiver_start_z,receiver_num_z,receiver_interval_z,sx_real,sy_real,sz_real,it,wavelet_length,dx,dy,dz,dt); 135 | cut_direct_shot_3D_surface_three_new<<>>(mgdevice[choose_re].obs_shot_x_d,mgdevice[choose_re].obs_shot_y_d,mgdevice[choose_re].obs_shot_z_d,mgdevice[choose_re].velocity_d,nnx,nny,nnz_device,bl,bb,bu,receiver_start_x,receiver_num_x,receiver_interval_x,receiver_start_y,receiver_num_y,receiver_interval_y,receiver_start_z,receiver_num_z,receiver_interval_z,sx_real,sy_real,sz_real,it,wavelet_length,dx,dy,dz,dt,cut_direct_wave); 136 | } 137 | checkCudaErrors(cudaDeviceSynchronize()); 138 | //if(fmod(it+1.0,1000.0)==1) warn("cut_direct_shot_3D_surface is passing"); 139 | 140 | transfer_gpu_to_cpu_multicomponent_seismic(mgdevice,it,0); 141 | 142 | checkCudaErrors(cudaDeviceSynchronize()); 143 | //if(fmod(it+1.0,1000.0)==1) warn("transfer_gpu_to_cpu_multicomponent_seismic is passing"); 144 | } 145 | 146 | checkCudaErrors(cudaDeviceSynchronize()); 147 | //if(fmod(it+1.0,1000.0)==1) warn("write_shot is passing"); 148 | 149 | exchange_wavefiled_new(mgdevice);//////////////////change wavefield_new 150 | //exchange_wavefiled_old(mgdevice);//////////////////change wavefield_old 151 | 152 | checkCudaErrors(cudaDeviceSynchronize()); 153 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_wavefiled is passing"); 154 | } 155 | } 156 | 157 | ///////////////////////////////////////////////////////////////////////**********************************************/////////////////////////////////////////////////////// 158 | ///////////////////////////////////////////////////////////////////////**********************************************////////////////////////////////////////////////////// 159 | ///////////////////////////////////////////////////////////////////////**********************************************/////////////////////////////////////////////////////// 160 | ///////////////////////////////////////////////////////////////////////**********************************************////////////////////////////////////////////////////// 161 | void forward_together_using_smoothed_model(GPUdevice *mgdevice) 162 | { 163 | dim3 dimBlock(32,16); 164 | 165 | dim3 dimGridwf_append((nnx+dimBlock.x-1)/dimBlock.x,(nny+dimBlock.y-1)/dimBlock.y,nnz_device_append);//////单块卡的整个空间 166 | 167 | dim3 dimGridwf_radius((nnx_radius+dimBlock.x-1)/dimBlock.x,(nny_radius+dimBlock.y-1)/dimBlock.y,nnz_radius);///单块卡的整个空间减去半径 168 | 169 | dim3 dimGrid_rec_lt_x_y((receiver_num_x+dimBlock.x-1)/dimBlock.x,(receiver_num_y+dimBlock.y-1)/dimBlock.y); 170 | 171 | dim3 dimGrid_rec_lt_x_z((receiver_num_x+dimBlock.x-1)/dimBlock.x,(receiver_num_z+dimBlock.y-1)/dimBlock.y);///seismic process and receive 172 | 173 | for(it=0;it<2*lt/3;it++) 174 | { 175 | if(fmod(it+1.0,1000.0)==1) 176 | { 177 | warn("forward for Elastic RTM,isx=%d,isy=%d,isz=%d,it=%d",isx+1,isy+1,isz+1,it); 178 | } 179 | 180 | if(it>>(mgdevice[choose_ns].txx1_d,mgdevice[choose_ns].wavelet_d,nnx,nny,nnz_device_append,nnz_device,it,sx_real,sy_real,sz_real,bl,bb,bu); 185 | add_source_3D<<<1,1,0,mgdevice[choose_ns].stream>>>(mgdevice[choose_ns].tyy1_d,mgdevice[choose_ns].wavelet_d,nnx,nny,nnz_device_append,nnz_device,it,sx_real,sy_real,sz_real,bl,bb,bu); 186 | add_source_3D<<<1,1,0,mgdevice[choose_ns].stream>>>(mgdevice[choose_ns].tzz1_d,mgdevice[choose_ns].wavelet_d,nnx,nny,nnz_device_append,nnz_device,it,sx_real,sy_real,sz_real,bl,bb,bu); 187 | } 188 | 189 | checkCudaErrors(cudaDeviceSynchronize()); 190 | //if(fmod(it+1.0,1000.0)==1) warn("add_source_3D is passing"); 191 | 192 | exchange_device_nz_kernel_txxyyzz(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 193 | 194 | checkCudaErrors(cudaDeviceSynchronize()); 195 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_txxyyzz is passing"); 196 | 197 | 198 | if((fmod(it+1.0,wavefield_interval)==0)&&join_wavefield!=0) 199 | //if((it==500)&&join_wavefield!=0) 200 | { 201 | system("mkdir wavefield"); 202 | output_3d_wavefiled_tao(mgdevice,it+1); 203 | checkCudaErrors(cudaDeviceSynchronize()); 204 | 205 | output_3d_wavefiled_vx(mgdevice,it+1); 206 | checkCudaErrors(cudaDeviceSynchronize()); 207 | 208 | output_3d_wavefiled_vz(mgdevice,it+1); 209 | checkCudaErrors(cudaDeviceSynchronize()); 210 | 211 | output_3d_wavefiled_vzp(mgdevice,it+1); 212 | checkCudaErrors(cudaDeviceSynchronize()); 213 | 214 | output_3d_wavefiled_vzs(mgdevice,it+1); 215 | checkCudaErrors(cudaDeviceSynchronize()); 216 | 217 | if(((it+1.0)/wavefield_interval)==((2*lt/3)/wavefield_interval)) 218 | { 219 | system("rm -r wavefield2"); 220 | system("mv wavefield wavefield2"); 221 | } 222 | } 223 | 224 | checkCudaErrors(cudaDeviceSynchronize()); 225 | //if(fmod(it+1.0,1000.0)==1) warn("output_3d_wavefiled is passing"); 226 | 227 | for(int i=0;i>>(mgdevice[i].tp2_d,mgdevice[i].tp1_d,mgdevice[i].txx2_d,mgdevice[i].txx1_d,mgdevice[i].tyy2_d,mgdevice[i].tyy1_d,mgdevice[i].tzz2_d,mgdevice[i].tzz1_d,mgdevice[i].txy2_d,mgdevice[i].txy1_d,mgdevice[i].txz2_d,mgdevice[i].txz1_d,mgdevice[i].tyz2_d,mgdevice[i].tyz1_d,mgdevice[i].vx1_d,mgdevice[i].vy1_d,mgdevice[i].vz1_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 232 | } 233 | 234 | checkCudaErrors(cudaDeviceSynchronize()); 235 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_txxzzxzpp_3D is passing"); 236 | 237 | exchange_device_nz_kernel_tao2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 238 | 239 | exchange_device_nz_kernel_taop2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 240 | 241 | checkCudaErrors(cudaDeviceSynchronize()); 242 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_tao2 taop2 is passing"); 243 | 244 | for(int i=0;i>>(mgdevice[i].vx2_d,mgdevice[i].vx1_d,mgdevice[i].txx2_d,mgdevice[i].txy2_d,mgdevice[i].txz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 249 | 250 | fwd_vy_3D<<>>(mgdevice[i].vy2_d,mgdevice[i].vy1_d,mgdevice[i].txy2_d,mgdevice[i].tyy2_d,mgdevice[i].tyz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 251 | 252 | fwd_vz_3D<<>>(mgdevice[i].vz2_d,mgdevice[i].vz1_d,mgdevice[i].txz2_d,mgdevice[i].tyz2_d,mgdevice[i].tzz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 253 | } 254 | 255 | checkCudaErrors(cudaDeviceSynchronize()); 256 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_vx_3D fwd_vy_3D fwd_vz_3D is passing"); 257 | 258 | exchange_device_nz_kernel_vx_vy_vz2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 259 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_vx_vy_vz2 is passing"); 260 | 261 | for(int i=0;i>>(mgdevice[i].vxp2_d,mgdevice[i].vxp1_d,mgdevice[i].vyp2_d,mgdevice[i].vyp1_d,mgdevice[i].vzp2_d,mgdevice[i].vzp1_d,mgdevice[i].tp2_d,mgdevice[i].vxs2_d,mgdevice[i].vys2_d,mgdevice[i].vzs2_d,mgdevice[i].vx2_d,mgdevice[i].vy2_d,mgdevice[i].vz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 266 | } 267 | 268 | checkCudaErrors(cudaDeviceSynchronize()); 269 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_vxp_vzp_3D is passing"); 270 | 271 | exchange_wavefiled_new(mgdevice);//////////////////change wavefield_new 272 | //exchange_wavefiled_old(mgdevice);//////////////////change wavefield_old 273 | 274 | checkCudaErrors(cudaDeviceSynchronize()); 275 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_wavefiled_new is passing"); 276 | 277 | for(int i=0;i>>(mgdevice[i].ex_time_d,mgdevice[i].ex_tp_d,mgdevice[i].tp2_d,mgdevice[i].ex_vxp_d,mgdevice[i].vxp2_d,mgdevice[i].ex_vyp_d,mgdevice[i].vyp2_d,mgdevice[i].ex_vzp_d,mgdevice[i].vzp2_d,nnx,nny,nnz_device_append,it); 282 | cuda_cal_excitation_amp_time_new<<>>(mgdevice[i].ex_time_d,mgdevice[i].ex_amp_d,mgdevice[i].ex_tp_d,mgdevice[i].tp2_d,mgdevice[i].ex_vxp_d,mgdevice[i].vxp2_d,mgdevice[i].ex_vyp_d,mgdevice[i].vyp2_d,mgdevice[i].ex_vzp_d,mgdevice[i].vzp2_d,nnx,nny,nnz_device_append,it); 283 | //cuda_cal_source_poyn_3D<<>>(mgdevice[i].poyn_px_d,mgdevice[i].poyn_py_d,mgdevice[i].poyn_pz_d,mgdevice[i].ex_time_d,mgdevice[i].vxp2_d,mgdevice[i].vyp2_d,mgdevice[i].vzp2_d,mgdevice[i].tp2_d,nnx,nny,nnz_device_append,it); 284 | } 285 | 286 | checkCudaErrors(cudaDeviceSynchronize()); 287 | //if(fmod(it+1.0,1000.0)==1) warn("cuda_cal_excitation_amp_time_new is passing"); 288 | 289 | } 290 | } 291 | 292 | ///////////////////////////////////////////////////////////////////////**********************************************/////////////////////////////////////////////////////// 293 | ///////////////////////////////////////////////////////////////////////**********************************************////////////////////////////////////////////////////// 294 | ///////////////////////////////////////////////////////////////////////**********************************************/////////////////////////////////////////////////////// 295 | ///////////////////////////////////////////////////////////////////////**********************************************////////////////////////////////////////////////////// 296 | void backward_together_using_smoothed_model(GPUdevice *mgdevice) 297 | { 298 | 299 | dim3 dimBlock(32,16); 300 | 301 | dim3 dimGridwf_append((nnx+dimBlock.x-1)/dimBlock.x,(nny+dimBlock.y-1)/dimBlock.y,nnz_device_append);//////单块卡的整个空间 302 | 303 | dim3 dimGridwf_radius((nnx_radius+dimBlock.x-1)/dimBlock.x,(nny_radius+dimBlock.y-1)/dimBlock.y,nnz_radius);///单块卡的整个空间减去半径 304 | 305 | dim3 dimGrid_rec_lt_x_y((receiver_num_x+dimBlock.x-1)/dimBlock.x,(receiver_num_y+dimBlock.y-1)/dimBlock.y); 306 | 307 | dim3 dimGrid_rec_lt_x_z((receiver_num_x+dimBlock.x-1)/dimBlock.x,(receiver_num_z+dimBlock.y-1)/dimBlock.y);///seismic process and receive 308 | 309 | 310 | for(it=lt-1;it>=0;it--) 311 | { 312 | if(fmod(it+1.0,1000.0)==1) 313 | { 314 | warn("backward for Elastic RTM,isx=%d,isy=%d,isz=%d,it=%d",isx+1,isy+1,isz+1,it); 315 | } 316 | 317 | { 318 | transfer_gpu_to_cpu_multicomponent_seismic(mgdevice,it,1); 319 | 320 | checkCudaErrors(cudaDeviceSynchronize()); 321 | //if(fmod(it+1.0,1000.0)==1) warn("transfer_gpu_to_cpu_multicomponent_seismic is passing"); 322 | } 323 | 324 | 325 | { 326 | checkCudaErrors(cudaSetDevice(gpuid[choose_re])); 327 | 328 | write_or_add_shot_3D_surface_three<<>>(mgdevice[choose_re].obs_shot_x_d,mgdevice[choose_re].obs_shot_y_d,mgdevice[choose_re].obs_shot_z_d,mgdevice[choose_re].vx1_d,mgdevice[choose_re].vy1_d,mgdevice[choose_re].vz1_d,nnx,nny,nnz_device_append,nnz_device,bl,bb,bu,receiver_start_x,receiver_num_x,receiver_interval_x,receiver_start_y,receiver_num_y,receiver_interval_y,receiver_start_z,receiver_num_z,receiver_interval_z,add_receiver_bool); 329 | 330 | checkCudaErrors(cudaDeviceSynchronize()); 331 | //if(fmod(it+1.0,1000.0)==1) warn("write_or_add_shot_3D_surface_three is passing"); 332 | } 333 | 334 | { 335 | exchange_device_nz_kernel_vx_vy_vz1(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 336 | 337 | checkCudaErrors(cudaDeviceSynchronize()); 338 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_vx_vy_vz1 is passing"); 339 | } 340 | 341 | if((fmod(it+1.0,wavefield_interval)==0)&&join_wavefield!=0) 342 | //if((it==500)&&join_wavefield!=0) 343 | { 344 | system("mkdir wavefield"); 345 | output_3d_wavefiled_tao(mgdevice,it+1); 346 | checkCudaErrors(cudaDeviceSynchronize()); 347 | 348 | output_3d_wavefiled_vx(mgdevice,it+1); 349 | checkCudaErrors(cudaDeviceSynchronize()); 350 | 351 | output_3d_wavefiled_vz(mgdevice,it+1); 352 | checkCudaErrors(cudaDeviceSynchronize()); 353 | 354 | output_3d_wavefiled_vzp(mgdevice,it+1); 355 | checkCudaErrors(cudaDeviceSynchronize()); 356 | 357 | output_3d_wavefiled_vzs(mgdevice,it+1); 358 | checkCudaErrors(cudaDeviceSynchronize()); 359 | 360 | if(((it+1.0)/wavefield_interval)==(lt/wavefield_interval)) 361 | { 362 | system("rm -r wavefield3"); 363 | system("mv wavefield wavefield3"); 364 | } 365 | } 366 | 367 | checkCudaErrors(cudaDeviceSynchronize()); 368 | //if(fmod(it+1.0,1000.0)==1) warn("output_3d_wavefiled is passing"); 369 | 370 | for(int i=0;i>>(mgdevice[i].tp2_d,mgdevice[i].tp1_d,mgdevice[i].txx2_d,mgdevice[i].txx1_d,mgdevice[i].tyy2_d,mgdevice[i].tyy1_d,mgdevice[i].tzz2_d,mgdevice[i].tzz1_d,mgdevice[i].txy2_d,mgdevice[i].txy1_d,mgdevice[i].txz2_d,mgdevice[i].txz1_d,mgdevice[i].tyz2_d,mgdevice[i].tyz1_d,mgdevice[i].vx1_d,mgdevice[i].vy1_d,mgdevice[i].vz1_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 375 | } 376 | 377 | checkCudaErrors(cudaDeviceSynchronize()); 378 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_txxzzxzpp_3D is passing"); 379 | 380 | { 381 | exchange_device_nz_kernel_tao2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 382 | 383 | exchange_device_nz_kernel_taop2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 384 | 385 | checkCudaErrors(cudaDeviceSynchronize()); 386 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_tao2 taop2 is passing"); 387 | } 388 | 389 | for(int i=0;i>>(mgdevice[i].vx2_d,mgdevice[i].vx1_d,mgdevice[i].txx2_d,mgdevice[i].txy2_d,mgdevice[i].txz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 394 | 395 | fwd_vy_3D<<>>(mgdevice[i].vy2_d,mgdevice[i].vy1_d,mgdevice[i].txy2_d,mgdevice[i].tyy2_d,mgdevice[i].tyz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 396 | 397 | fwd_vz_3D<<>>(mgdevice[i].vz2_d,mgdevice[i].vz1_d,mgdevice[i].txz2_d,mgdevice[i].tyz2_d,mgdevice[i].tzz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 398 | } 399 | 400 | checkCudaErrors(cudaDeviceSynchronize()); 401 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_vx_3D fwd_vy_3D fwd_vz_3D is passing"); 402 | 403 | { 404 | exchange_device_nz_kernel_vx_vy_vz2(mgdevice,exchange_device_bool);//////////////gpu_i exchange gpu_i+1;/// 405 | 406 | checkCudaErrors(cudaDeviceSynchronize()); 407 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_device_nz_kernel_vx_vy_vz2 is passing"); 408 | } 409 | 410 | for(int i=0;i>>(mgdevice[i].vxp2_d,mgdevice[i].vxp1_d,mgdevice[i].vyp2_d,mgdevice[i].vyp1_d,mgdevice[i].vzp2_d,mgdevice[i].vzp1_d,mgdevice[i].tp2_d,mgdevice[i].vxs2_d,mgdevice[i].vys2_d,mgdevice[i].vzs2_d,mgdevice[i].vx2_d,mgdevice[i].vy2_d,mgdevice[i].vz2_d,mgdevice[i].s_velocity_d,mgdevice[i].s_velocity1_d,mgdevice[i].s_density_d,mgdevice[i].att_d,mgdevice[i].coe_d,nnx,nny,nnz_device_append,dt,coe_x,coe_y,coe_z); 415 | } 416 | 417 | checkCudaErrors(cudaDeviceSynchronize()); 418 | //if(fmod(it+1.0,1000.0)==1) warn("fwd_vxp_vzp_3D is passing"); 419 | 420 | { 421 | exchange_wavefiled_new(mgdevice);//////////////////change wavefield_new 422 | //exchange_wavefiled_old(mgdevice);//////////////////change wavefield_old 423 | 424 | checkCudaErrors(cudaDeviceSynchronize()); 425 | //if(fmod(it+1.0,1000.0)==1) warn("exchange_wavefiled_new is passing"); 426 | } 427 | 428 | for(int i=0;i>>(mgdevice[i].poyn_rpx_d,mgdevice[i].poyn_rpy_d,mgdevice[i].poyn_rpz_d,mgdevice[i].poyn_rsx_d,mgdevice[i].poyn_rsy_d,mgdevice[i].poyn_rsz_d,mgdevice[i].ex_time_d,mgdevice[i].vxp2_d,mgdevice[i].vyp2_d,mgdevice[i].vzp2_d,mgdevice[i].vxs2_d,mgdevice[i].vys2_d,mgdevice[i].vzs2_d,mgdevice[i].tp2_d,mgdevice[i].txx2_d,mgdevice[i].tyy2_d,mgdevice[i].tzz2_d,mgdevice[i].txy2_d,mgdevice[i].txz2_d,mgdevice[i].tyz2_d,nnx,nny,nnz_device_append,it); 433 | } 434 | 435 | checkCudaErrors(cudaDeviceSynchronize()); 436 | //if(fmod(it+1.0,1000.0)==1) warn("cuda_cal_receiver_poyn_3D is passing"); 437 | 438 | for(int i=0;i>>(mgdevice[i].ex_time_d,mgdevice[i].ex_tp_d,mgdevice[i].tp2_d,mgdevice[i].vresult_tp_d,nnx,nny,nnz_device_append,it,amp_max,precon_z1); 443 | 444 | imaging_inner_product_ex<<>>(mgdevice[i].ex_time_d,mgdevice[i].ex_vxp_d,mgdevice[i].ex_vyp_d,mgdevice[i].ex_vzp_d,mgdevice[i].vxp2_d,mgdevice[i].vyp2_d,mgdevice[i].vzp2_d,mgdevice[i].vresult_pp_d,nnx,nny,nnz_device_append,it,tp_max,precon_z1); 445 | 446 | imaging_inner_product_ex<<>>(mgdevice[i].ex_time_d,mgdevice[i].ex_vxp_d,mgdevice[i].ex_vyp_d,mgdevice[i].ex_vzp_d,mgdevice[i].vxs2_d,mgdevice[i].vys2_d,mgdevice[i].vzs2_d,mgdevice[i].vresult_ps_d,nnx,nny,nnz_device_append,it,tp_max,precon_z1); 447 | } 448 | 449 | checkCudaErrors(cudaDeviceSynchronize()); 450 | //if(fmod(it+1.0,1000.0)==1) warn("imaging_inner_product_ex is passing"); 451 | 452 | } 453 | } 454 | -------------------------------------------------------------------------------- /3D_elastic_RTM/3D_output_file.cu: -------------------------------------------------------------------------------- 1 | 2 | void output_3d_wavefiled_tao(GPUdevice *mgdevice,int it) 3 | { 4 | for(int i=0;i./someoutput/s_den.bin 3 | -------------------------------------------------------------------------------- /3D_elastic_RTM/zzzzz: -------------------------------------------------------------------------------- 1 | void set_zero_1d(float *matrix,int nx) 2 | { 3 | int ix; 4 | for(ix=0;ix>> 238 | void make_attenuation_new(float *attenuation,int nx,int nz,int boundary_up,int boundary_down,int boundary_left,int boundary_right,float coe_attenuation) 239 | { 240 | float *att_up,*att_down,*att_left,*att_right; 241 | if(boundary_up!=0) 242 | { 243 | att_up=alloc1float(boundary_up); 244 | memset((void *) (att_up), 0, boundary_up* sizeof (float)); 245 | } 246 | att_down=alloc1float(boundary_down); 247 | att_left=alloc1float(boundary_left); 248 | att_right=alloc1float(boundary_right); 249 | memset((void *) (att_down), 0, boundary_down* sizeof (float)); 250 | memset((void *) (att_left), 0, boundary_left* sizeof (float)); 251 | memset((void *) (att_right), 0, boundary_right* sizeof (float)); 252 | 253 | float xxx; 254 | 255 | if(boundary_up!=0) 256 | { 257 | for(int iz=0;izmax) max=shotgather[in_idx]; 803 | } 804 | 805 | return(max); 806 | } 807 | 808 | float cpu_caculate_min(float *shotgather,int nx,int nz) 809 | { 810 | float min; 811 | int ix,iz; 812 | int in_idx; 813 | min=0; 814 | for(ix=0;ix