128 lines
4.6 KiB
Matlab
128 lines
4.6 KiB
Matlab
function export_case()
|
||
%EXPORT_CASE 按 case_config.m 写出 bele3d.json(含 bele 块)
|
||
|
||
[phy, cfg] = case_config();
|
||
root = fileparts(mfilename('fullpath'));
|
||
jsonPath = fullfile(root, cfg.jsonFile);
|
||
|
||
sbcIndex = phy.out(:)';
|
||
|
||
doc = struct();
|
||
doc.FemType = cfg.FemType;
|
||
doc.EletricType = cfg.EletricType;
|
||
doc.lambda = phy.lda0;
|
||
doc.NbrBoundary = cfg.NbrBoundary;
|
||
doc.BoundaryFlag = cfg.BoundaryFlag;
|
||
|
||
doc.sbc = struct( ...
|
||
'Index', sbcIndex, ...
|
||
'SBCType', zeros(1, nSbc), ...
|
||
'E0x', {repmat({'0'}, 1, nSbc)}, ...
|
||
'E0y', {repmat({'0'}, 1, nSbc)}, ...
|
||
'E0z', {repmat({'0'}, 1, nSbc)}, ...
|
||
'kx', zeros(1, nSbc), ...
|
||
'ky', zeros(1, nSbc), ...
|
||
'kz', zeros(1, nSbc));
|
||
|
||
doc.bele = struct( ...
|
||
'index', phy.beleDomains, ...
|
||
'Ebx', 'exp(-2.5*i*pi*(z+0.5))', ...
|
||
'Eby', '0', ...
|
||
'Ebz', '0', ...
|
||
'curlEbx', '0', ...
|
||
'curlEby', '-2.5*i*pi*exp(-2.5*i*pi*(z+0.5))', ...
|
||
'curlEbz', '0');
|
||
|
||
nDom = numel(phy.eps);
|
||
doc.NbrDomain = nDom;
|
||
doc.domainType = repmat(2, 1, nDom);
|
||
doc.domainIndex = 0:(nDom - 1);
|
||
doc.matType = zeros(1, nDom);
|
||
doc.epsilonrR = phy.eps(:)';
|
||
doc.epsilonrI = zeros(1, nDom);
|
||
doc.murR = phy.mur(:)';
|
||
doc.murI = zeros(1, nDom);
|
||
doc.chiheR = zeros(1, nDom);
|
||
doc.chiehR = zeros(1, nDom);
|
||
doc.chiheI = zeros(1, nDom);
|
||
doc.chiehI = zeros(1, nDom);
|
||
doc.sigma = zeros(1, nDom);
|
||
doc.n = ones(1, nDom);
|
||
doc.k = zeros(1, nDom);
|
||
doc.MeshFile = cfg.MeshFile;
|
||
doc.OutFile = cfg.OutFile;
|
||
|
||
txt = write_bele_json(doc);
|
||
fid = fopen(jsonPath, 'w');
|
||
if fid < 0
|
||
error('无法写入: %s', jsonPath);
|
||
end
|
||
fprintf(fid, '%s', txt);
|
||
fclose(fid);
|
||
fprintf('已写出 %s\n', jsonPath);
|
||
end
|
||
|
||
function txt = write_bele_json(doc)
|
||
lines = {};
|
||
lines{end+1} = '{';
|
||
lines{end+1} = sprintf(' "FemType": %d,', doc.FemType);
|
||
lines{end+1} = sprintf(' "EletricType": %d,', doc.EletricType);
|
||
lines{end+1} = sprintf(' "lambda": %g,', doc.lambda);
|
||
lines{end+1} = sprintf(' "NbrBoundary": %d,', doc.NbrBoundary);
|
||
lines{end+1} = sprintf(' "BoundaryFlag": %s,', fmt_int_row(doc.BoundaryFlag));
|
||
lines{end+1} = ' "sbc": {';
|
||
lines{end+1} = sprintf(' "Index": %s,', fmt_int_row(doc.sbc.Index));
|
||
lines{end+1} = sprintf(' "SBCType": %s,', fmt_int_row(doc.sbc.SBCType));
|
||
lines{end+1} = sprintf(' "E0x": %s,', fmt_str_row(doc.sbc.E0x));
|
||
lines{end+1} = sprintf(' "E0y": %s,', fmt_str_row(doc.sbc.E0y));
|
||
lines{end+1} = sprintf(' "E0z": %s,', fmt_str_row(doc.sbc.E0z));
|
||
lines{end+1} = sprintf(' "kx": %s,', fmt_int_row(doc.sbc.kx));
|
||
lines{end+1} = sprintf(' "ky": %s,', fmt_int_row(doc.sbc.ky));
|
||
lines{end+1} = sprintf(' "kz": %s', fmt_int_row(doc.sbc.kz));
|
||
lines{end+1} = ' },';
|
||
lines{end+1} = ' "bele": {';
|
||
lines{end+1} = sprintf(' "index": %s,', fmt_int_row(doc.bele.index));
|
||
lines{end+1} = sprintf(' "Ebx": "%s",', doc.bele.Ebx);
|
||
lines{end+1} = sprintf(' "Eby": "%s",', doc.bele.Eby);
|
||
lines{end+1} = sprintf(' "Ebz": "%s",', doc.bele.Ebz);
|
||
lines{end+1} = sprintf(' "curlEbx": "%s",', doc.bele.curlEbx);
|
||
lines{end+1} = sprintf(' "curlEby": "%s",', doc.bele.curlEby);
|
||
lines{end+1} = sprintf(' "curlEbz": "%s"', doc.bele.curlEbz);
|
||
lines{end+1} = ' },';
|
||
lines{end+1} = sprintf(' "NbrDomain": %d,', doc.NbrDomain);
|
||
lines{end+1} = sprintf(' "domainType": %s,', fmt_int_row(doc.domainType));
|
||
lines{end+1} = sprintf(' "domainIndex": %s,', fmt_int_row(doc.domainIndex));
|
||
lines{end+1} = sprintf(' "matType": %s,', fmt_int_row(doc.matType));
|
||
lines{end+1} = sprintf(' "epsilonrR": %s,', fmt_float_row(doc.epsilonrR));
|
||
lines{end+1} = sprintf(' "epsilonrI": %s,', fmt_float_row(doc.epsilonrI));
|
||
lines{end+1} = sprintf(' "murR": %s,', fmt_float_row(doc.murR));
|
||
lines{end+1} = sprintf(' "murI": %s,', fmt_float_row(doc.murI));
|
||
lines{end+1} = sprintf(' "chiheR": %s,', fmt_float_row(doc.chiheR));
|
||
lines{end+1} = sprintf(' "chiehR": %s,', fmt_float_row(doc.chiehR));
|
||
lines{end+1} = sprintf(' "chiheI": %s,', fmt_float_row(doc.chiheI));
|
||
lines{end+1} = sprintf(' "chiehI": %s,', fmt_float_row(doc.chiehI));
|
||
lines{end+1} = sprintf(' "sigma": %s,', fmt_float_row(doc.sigma));
|
||
lines{end+1} = sprintf(' "n": %s,', fmt_float_row(doc.n));
|
||
lines{end+1} = sprintf(' "k": %s,', fmt_float_row(doc.k));
|
||
lines{end+1} = sprintf(' "MeshFile": "%s",', doc.MeshFile);
|
||
lines{end+1} = sprintf(' "OutFile": "%s"', doc.OutFile);
|
||
lines{end+1} = '}';
|
||
txt = strjoin(lines, newline);
|
||
end
|
||
|
||
function s = fmt_int_row(v)
|
||
s = ['[', strjoin(arrayfun(@num2str, v(:)', 'UniformOutput', false), ', '), ']'];
|
||
end
|
||
|
||
function s = fmt_float_row(v)
|
||
s = ['[', strjoin(arrayfun(@(x) num2str(x, '%.16g'), v(:)', 'UniformOutput', false), ', '), ']'];
|
||
end
|
||
|
||
function s = fmt_str_row(c)
|
||
parts = cell(1, numel(c));
|
||
for i = 1:numel(c)
|
||
parts{i} = ['"', char(c{i}), '"'];
|
||
end
|
||
s = ['[', strjoin(parts, ', '), ']'];
|
||
end
|