⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 afdmc++.cc

📁 国外免费地震资料处理软件包
💻 CC
字号:
// time-domain acoustic FD modeling#include <valarray>#include <iostream>#include <rsf.hh>#include <cub.hh>#include <vai.hh>using namespace std;int main(int argc, char* argv[]){    // Laplacian coefficients    float c0=-30./12.,c1=+16./12.,c2=- 1./12.;    sf_init(argc,argv);// init RSF    bool verb;         // vebose flag    if(! sf_getbool("verb",&verb)) verb=0;    // setup I/O files    CUB Fw("in", "i"); Fw.headin(); //Fw.report();    CUB Fv("vel","i"); Fv.headin(); //Fv.report();    CUB Fr("ref","i"); Fr.headin(); //Fr.report();    CUB Fo("out","o"); Fo.setup(3,Fv.esize());     // Read/Write axes    sf_axis at = Fw.getax(0); int nt = sf_n(at); float dt = sf_d(at);    sf_axis az = Fv.getax(0); int nz = sf_n(az); float dz = sf_d(az);    sf_axis ax = Fv.getax(1); int nx = sf_n(ax); float dx = sf_d(ax);    Fo.putax(0,az);     Fo.putax(1,ax);     Fo.putax(2,at);    Fo.headou();    float dt2 =    dt*dt;    float idz = 1/(dz*dz);    float idx = 1/(dx*dx);    // read wavelet, velocity and reflectivity    valarray<float> ww( nt    ); ww=0; Fw >> ww;    valarray<float> vv( nz*nx ); vv=0; Fv >> vv;    valarray<float> rr( nz*nx ); rr=0; Fr >> rr;       // allocate temporary arrays    valarray<float> um(nz*nx); um=0;    valarray<float> uo(nz*nx); uo=0;    valarray<float> up(nz*nx); up=0;    valarray<float> ud(nz*nx); ud=0;    // init ValArray Index counter    VAI k(nz,nx);    // MAIN LOOP    if(verb) cerr << endl;    for (int it=0; it<nt; it++) {	if(verb) cerr << "\b\b\b\b\b" << it;	// 4th order laplacian	for (int iz=2; iz<nz-2; iz++) {	    for (int ix=2; ix<nx-2; ix++) {		ud[k(iz,ix)] = 		    c0* uo[ k(iz  ,ix  )] * (idx+idz) +		    c1*(uo[ k(iz  ,ix-1)]+uo[ k(iz  ,ix+1)]) * idx + 		    c1*(uo[ k(iz-1,ix  )]+uo[ k(iz+1,ix  )]) * idz + 		    c2*(uo[ k(iz  ,ix-2)]+uo[ k(iz  ,ix+2)]) * idx + 		    c2*(uo[ k(iz-2,ix  )]+uo[ k(iz+2,ix  )]) * idz;	    }	}	// inject wavelet	ud -= ww[it] * rr;		// scale by velocity	ud *= vv*vv;		// time step	up=(float)2 * uo - um + ud * dt2;	um =   uo;	uo =   up;		// write wavefield to output output	Fo << uo;    }    if(verb) cerr << endl;    exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -