function mesh = load_case_mesh(cfg, root)
%LOAD_CASE_MESH  Load mesh from .mat or .dat for periodic scatter cases.

if nargin < 2 || isempty(root)
    root = fileparts(mfilename('fullpath'));
end

meshMat = fullfile(root, cfg.meshMatFile);
meshDat = fullfile(root, cfg.MeshFile);

if isfile(meshMat)
    S = load(meshMat, 'mesh');
    mesh = S.mesh;
    fprintf('已加载 %s\n', meshMat);
elseif isfile(meshDat)
    sbcDir = fullfile(root, '..', 'matlab 3D一阶基+散射边界条件');
    if isfolder(sbcDir)
        addpath(sbcDir);
    end
    if exist('load_SBCmesh_dat', 'file') ~= 2
        error('load_case_mesh:NoLoader', '找不到 load_SBCmesh_dat，请提供 %s 或 %s。', cfg.meshMatFile, cfg.MeshFile);
    end
    mesh = load_SBCmesh_dat(meshDat);
    fprintf('已加载 %s\n', meshDat);
else
    error('load_case_mesh:NoMesh', '找不到 %s 或 %s。', cfg.meshMatFile, cfg.MeshFile);
end

end
