资源简介

一个 地震数据全波形反演FWI软件包,可以直接运行查看结果,由于受文件大小限制,把所有的地震记录删除了,需要先模拟地震记录,雷克子波主频在反演代码里面可以找到。

资源截图

代码片段和文件信息

%% This script is used to perform calculation on the gradient
function [gradienterr] = calculateGradient(dimssourcetrueRecmodelunextuuprev)
    recording = zeros(dims.ntlength(dims.recPos)‘single‘);
    gradient  = zeros(dims.nydims.nx‘single‘);
    forwardField = zeros(dims.mydims.mxdims.nt‘single‘); 
    adjointField = zeros(dims.mydims.mxdims.nt‘single‘);
    err = 0;
    for s = 1:dims.ds:length(dims.srcPos)
        %% Run forward simulation on background model
        uprev(:)=0; u(:)=0; unext(:)=0;
        for t = 1:dims.nt
            % Solve wave equation
            unext = solveWaveEqn(modeldimsdims.srcPos(s)sourcetunextuuprev);
            % Update u(xt)
            uprev = u; u = unext;
            % Check wave equation stability
            r = model*dims.dt/dims.dx + model*dims.dt/dims.dy;
            if r>1
                break
            end
            % Record traces
            recording(t:) = u(dims.recPos);
            % Save forward field for use in correlation
            forwardField(::t) = u(dims.modelydims.modelx);
        end
        %% Calculate difference and error
        chi = recording-trueRec(::s);
        % Time reversal
        chi = flipud(chi);
        % Error calculation
        err = err + norm(chi);
        %% Run adjoint simulation
        uprev(:)=0; u(:)=0; unext(:)=0;
        for t = 1:dims.nt
            % Solve wave equation using the difference (chi) as sources
            unext = solveWaveEqn(modeldimsdims.recPoschitunextuuprev);
            % Update u(xt)
            uprev = u; u = unext;
            % Check wave equation stability
            r = model*dims.dt/dims.dx + model*dims.dt/dims.dy;
            if r>1
                break
            end
            % Save adjoint field for use in correlation
            adjointField(::dims.nt-t+1) = u(dims.modelydims.modelx);
        end
        %% Correlate
        for t = 2:dims.nt-1
            % Calculate the time derivative of the displacement to gradient.
            dadt=(adjointField(::t+1) - adjointField(::t))/dims.dt;
            dfdt=(forwardField(::t+1) - forwardField(::t-1))/dims.dt;
            gradient(dims.modelydims.modelx)=gradient(dims.modelydims.modelx)+dadt.*dfdt;                  
        end
    end
end


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2315  2018-11-11 22:39  FWI-MATLAB\calculateGradient.m

     文件       1304  2018-11-11 22:39  FWI-MATLAB\calculateStepLength.m

     文件       4633  2018-11-11 22:39  FWI-MATLAB\calculateStepLengthGoldenRatio.m

     文件      17435  2018-11-11 22:39  FWI-MATLAB\Model result - 4 hz - grid distance 5-10022-10024.mat

     文件      17315  2018-11-11 22:39  FWI-MATLAB\Model result - 4681012 hz - grid distance 1-10022-10024.mat

     文件      17320  2018-11-11 22:39  FWI-MATLAB\Model result - 4681012 hz - grid distance 5-10022-10024.mat

     文件      17353  2018-11-11 22:39  FWI-MATLAB\Model result - 4681012101210121012 hz grid distance 10-10022-10024.mat

     文件        196  2018-11-11 22:39  FWI-MATLAB\README.md

     文件        305  2018-11-11 22:39  FWI-MATLAB\rickerWave.m

     文件       2596  2018-11-11 22:39  FWI-MATLAB\runFWI.m

     文件       2673  2018-11-11 22:39  FWI-MATLAB\runFWIGoldenRatio.m

     文件       1018  2018-11-11 22:39  FWI-MATLAB\solveWaveEqn.m

     文件        307  2018-11-11 22:39  FWI-MATLAB\taperGradient.m

     目录          0  2020-04-19 21:01  FWI-MATLAB

----------- ---------  ---------- -----  ----

                84770                    14


评论

共有 条评论