case1-5 success.

This commit is contained in:
xinxiao
2026-03-17 13:29:57 +08:00
parent 9276c1ef32
commit 8e28f9b68d
11 changed files with 445 additions and 1 deletions
+3 -1
View File
@@ -14,7 +14,9 @@ classdef EDFMAppController < handle
end
function startup(obj)
obj.setDropDownItems('TemplateDropDown', {'case01'}, 'case01');
obj.setDropDownItems('TemplateDropDown', ...
{'case01', 'case02', 'case03', 'case04', 'case05', 'case06', 'case07'}, ...
'case01');
obj.setDropDownItems('ResultTypeDropDown', {'Time Steps', 'Newtons vs Time'}, 'Time Steps');
obj.setDropDownItems('ModelFlagDropDown', {'1'}, '1');
obj.setDropDownItems('ModelGridModelDropDown', {'1', '2'}, '1');
Binary file not shown.
+12
View File
@@ -97,6 +97,18 @@ case_id = lower(string(meta_config.case_id));
switch case_id
case "case01"
source_case_folder = find_case_folder_by_index(project_root, 1);
case "case02"
source_case_folder = find_case_folder_by_index(project_root, 2);
case "case03"
source_case_folder = find_case_folder_by_index(project_root, 3);
case "case04"
source_case_folder = find_case_folder_by_index(project_root, 4);
case "case05"
source_case_folder = find_case_folder_by_index(project_root, 5);
case "case06"
source_case_folder = find_case_folder_by_index(project_root, 6);
case "case07"
source_case_folder = find_case_folder_by_index(project_root, 7);
otherwise
if isempty(source_case_folder) || startsWith(string(source_case_folder), "CASE")
source_case_folder = '';
@@ -0,0 +1,54 @@
function config = build_basic_case_template(case_id, case_name, description, model, grid, fracture, initial, wells, schedule, solver)
%BUILD_BASIC_CASE_TEMPLATE Create a config template for legacy case migration.
config = create_empty_config();
case_num = sscanf(char(case_id), 'case%d');
config.meta.case_name = case_name;
config.meta.case_id = case_id;
config.meta.description = description;
config.meta.source_case_folder = sprintf('CASE%02d_FOLDER', case_num);
config.meta.created_from_template = case_id;
config.model.modelflag = model.modelflag;
config.model.grid_model = model.grid_model;
config.model.flow_model = model.flow_model;
config.grid.dx = grid.dx;
config.grid.dy = grid.dy;
config.grid.dz = grid.dz;
config.grid.nx = numel(config.grid.dx);
config.grid.ny = numel(config.grid.dy);
config.grid.nz = numel(config.grid.dz);
config.grid.NTG = ones(config.grid.nx * config.grid.ny * config.grid.nz, 1);
config.fracture.input_style = 1;
config.fracture.input_content = fracture.input_content;
config.fracture.flowBarrierFlags = [];
config.initial.pressure = initial.pressure;
config.initial.sw = initial.sw;
config.initial.cs = initial.cs;
config.initial.cb = initial.cb;
config.wells.well1 = wells.well1;
config.wells.num_fracture_wells = numel(wells.welloc);
config.wells.welloc = wells.welloc;
config.wells.well2 = wells.well2;
config.schedule.number_phases = numel(schedule.time);
config.schedule.time = schedule.time;
config.schedule.dtmax = schedule.dtmax;
config.schedule.dtmin = schedule.dtmin;
config.schedule.well_schedules = schedule.well_schedules;
config.solver.yitap = solver.yitap;
config.solver.yitas = solver.yitas;
config.solver.omega = solver.omega;
config.solver.Nmax = solver.Nmax;
config.solver.epsave = solver.epsave;
config.solver.epsmax = solver.epsmax;
config.output.result_name = sprintf('%s_default_run', case_id);
end
@@ -10,6 +10,18 @@ case_key = normalize_case_id(case_id);
switch case_key
case "case01"
config = load_case_template_case01();
case "case02"
config = load_case_template_case02();
case "case03"
config = load_case_template_case03();
case "case04"
config = load_case_template_case04();
case "case05"
config = load_case_template_case05();
case "case06"
config = load_case_template_case06();
case "case07"
config = load_case_template_case07();
otherwise
error('load_case_template:UnsupportedCase', ...
'Unsupported case template: %s', string(case_key));
@@ -0,0 +1,56 @@
function config = load_case_template_case02()
%LOAD_CASE_TEMPLATE_CASE02 Build config for case 2.
config = build_basic_case_template( ...
'case02', ...
'case02_multicomponent_invalid_grid', ...
'Multicomponent flow with invalid-grid geometry', ...
struct('modelflag', 1, 'grid_model', 1, 'flow_model', 3), ...
struct( ...
'dx', 50 * ones(1, 20), ...
'dy', 50 * ones(1, 20), ...
'dz', 10 * ones(1, 3)), ...
struct('input_content', { ...
{
[255,255,5],90,90,0,200,10,1;
[305,255,5],90,90,0,200,10,1;
[355,255,5],90,90,0,200,10,1;
[405,255,5],90,90,0,200,10,1;
[455,255,5],90,90,0,200,10,1;
[505,255,5],90,90,0,200,10,1;
[555,255,25],90,90,0,200,10,1;
[605,255,25],90,90,0,200,10,1;
[655,255,25],90,90,0,200,10,1;
[705,255,25],90,90,0,200,10,1;
[755,255,25],90,90,0,200,10,1
}}), ...
struct('pressure', 20, 'sw', 0.2, 'cs', 0.0, 'cb', 50.0), ...
struct( ...
'well1', {{}}, ...
'welloc', {{[
255,255,5;
305,255,5;
355,255,5;
405,255,5;
455,255,5;
505,255,5;
555,255,25;
605,255,25;
655,255,25;
705,255,25;
755,255,25
]}}, ...
'well2', {{
'w1', 0, [], 0.178/2, 0, 4
}}), ...
struct( ...
'time', [10; 30; 200], ...
'dtmax', [0.1; 0.5; 0.5], ...
'dtmin', [0.001; 0.001; 0.001], ...
'well_schedules', {{
{'w1','open','inj','const_pwf',40,40,'Cs_inj',0.5,'Cb_inj',1};
{'w1','open','pro','const_q',0,0};
{'w1','open','pro','const_pwf',10,10}
}}), ...
struct('yitap', 5, 'yitas', 0.04, 'omega', 0.5, 'Nmax', 50, 'epsave', 1e-6, 'epsmax', 1e-6));
end
@@ -0,0 +1,56 @@
function config = load_case_template_case03()
%LOAD_CASE_TEMPLATE_CASE03 Build config for case 3.
config = build_basic_case_template( ...
'case03', ...
'case03_multicomponent_dp_model', ...
'Multicomponent flow with mixed single/double porosity discretization', ...
struct('modelflag', 1, 'grid_model', 2, 'flow_model', 3), ...
struct( ...
'dx', 50 * ones(1, 20), ...
'dy', 50 * ones(1, 10), ...
'dz', 10 * ones(1, 1)), ...
struct('input_content', { ...
{
[255,255,5],90,90,0,200,10,1;
[305,255,5],90,90,0,200,10,1;
[355,255,5],90,90,0,200,10,1;
[405,255,5],90,90,0,200,10,1;
[455,255,5],90,90,0,200,10,1;
[505,255,5],90,90,0,200,10,1;
[555,255,5],90,90,0,200,10,1;
[605,255,5],90,90,0,200,10,1;
[655,255,5],90,90,0,200,10,1;
[705,255,5],90,90,0,200,10,1;
[755,255,5],90,90,0,200,10,1
}}), ...
struct('pressure', 20, 'sw', 0.2, 'cs', 0.0, 'cb', 50.0), ...
struct( ...
'well1', {{}}, ...
'welloc', {{[
255,255,5;
305,255,5;
355,255,5;
405,255,5;
455,255,5;
505,255,5;
555,255,5;
605,255,5;
655,255,5;
705,255,5;
755,255,5
]}}, ...
'well2', {{
'w1', 0, [], 0.178/2, 0, 4
}}), ...
struct( ...
'time', [10; 30; 200], ...
'dtmax', [0.1; 0.5; 5], ...
'dtmin', [0.001; 0.001; 0.001], ...
'well_schedules', {{
{'w1','open','inj','const_pwf',40,40,'Cs_inj',0.5,'Cb_inj',1};
{'w1','open','pro','const_q',0,0};
{'w1','open','pro','const_pwf',10,10}
}}), ...
struct('yitap', 5, 'yitas', 0.04, 'omega', 0.5, 'Nmax', 50, 'epsave', 1e-6, 'epsmax', 1e-6));
end
@@ -0,0 +1,58 @@
function config = load_case_template_case04()
%LOAD_CASE_TEMPLATE_CASE04 Build config for case 4.
config = build_basic_case_template( ...
'case04', ...
'case04_gas_water_pressure_derivative', ...
'Gas-water flow with pressure derivative curve schedule', ...
struct('modelflag', 1, 'grid_model', 1, 'flow_model', 1), ...
struct( ...
'dx', 50 * ones(1, 20), ...
'dy', 50 * ones(1, 10), ...
'dz', 10 * ones(1, 1)), ...
struct('input_content', { ...
{
[255,255,5],90,90,0,200,10,1;
[305,255,5],90,90,0,200,10,1;
[355,255,5],90,90,0,200,10,1;
[405,255,5],90,90,0,200,10,1;
[455,255,5],90,90,0,200,10,1;
[505,255,5],90,90,0,200,10,1;
[555,255,5],90,90,0,200,10,1;
[605,255,5],90,90,0,200,10,1;
[655,255,5],90,90,0,200,10,1;
[705,255,5],90,90,0,200,10,1;
[755,255,5],90,90,0,200,10,1
}}), ...
struct('pressure', 20, 'sw', 0.2, 'cs', 0.0, 'cb', 0.0), ...
struct( ...
'well1', {{}}, ...
'welloc', {{[
255,255,5;
305,255,5;
355,255,5;
405,255,5;
455,255,5;
505,255,5;
555,255,5;
605,255,5;
655,255,5;
705,255,5;
755,255,5
]}}, ...
'well2', {{
'w1', 0, [], 0.178/2, 0, 4
}}), ...
struct( ...
'time', [1e-3; 99e-3; 0.9; 100; 900], ...
'dtmax', [2e-5; 2e-4; 2e-3; 2; 10], ...
'dtmin', [1e-5; 1e-4; 1e-3; 1e-2; 1e-2], ...
'well_schedules', {{
{'w1','open','pro','const_q',10000,10000};
{'w1','open','pro','const_q',10000,10000};
{'w1','open','pro','const_q',10000,10000};
{'w1','open','pro','const_q',10000,10000};
{'w1','open','pro','const_q',10000,10000}
}}), ...
struct('yitap', 5, 'yitas', 0.04, 'omega', 0.5, 'Nmax', 50, 'epsave', 1e-6, 'epsmax', 1e-6));
end
@@ -0,0 +1,56 @@
function config = load_case_template_case05()
%LOAD_CASE_TEMPLATE_CASE05 Build config for case 5.
config = build_basic_case_template( ...
'case05', ...
'case05_oil_water_huff_and_puff', ...
'Oil-water flow with huff-and-puff schedule', ...
struct('modelflag', 1, 'grid_model', 1, 'flow_model', 2), ...
struct( ...
'dx', 50 * ones(1, 20), ...
'dy', 50 * ones(1, 10), ...
'dz', 10 * ones(1, 1)), ...
struct('input_content', { ...
{
[255,255,5],90,90,0,200,10,1;
[305,255,5],90,90,0,200,10,1;
[355,255,5],90,90,0,200,10,1;
[405,255,5],90,90,0,200,10,1;
[455,255,5],90,90,0,200,10,1;
[505,255,5],90,90,0,200,10,1;
[555,255,5],90,90,0,200,10,1;
[605,255,5],90,90,0,200,10,1;
[655,255,5],90,90,0,200,10,1;
[705,255,5],90,90,0,200,10,1;
[755,255,5],90,90,0,200,10,1
}}), ...
struct('pressure', 20, 'sw', 0.2, 'cs', 0.0, 'cb', 0.0), ...
struct( ...
'well1', {{}}, ...
'welloc', {{[
255,255,5;
305,255,5;
355,255,5;
405,255,5;
455,255,5;
505,255,5;
555,255,5;
605,255,5;
655,255,5;
705,255,5;
755,255,5
]}}, ...
'well2', {{
'w1', 0, [], 0.178/2, 0, 4
}}), ...
struct( ...
'time', [10; 30; 200], ...
'dtmax', [0.5; 1; 5], ...
'dtmin', [0.001; 0.001; 0.001], ...
'well_schedules', {{
{'w1','open','inj','const_pwf',40,40};
{'w1','open','pro','const_q',0,0};
{'w1','open','pro','const_pwf',10,10}
}}), ...
struct('yitap', 5, 'yitas', 0.04, 'omega', 0.5, 'Nmax', 50, 'epsave', 1e-6, 'epsmax', 1e-6));
end
@@ -0,0 +1,65 @@
function config = load_case_template_case06()
%LOAD_CASE_TEMPLATE_CASE06 Build config for case 6.
config = build_basic_case_template( ...
'case06', ...
'case06_oil_water_vertical_injector_frac_horizontal_producer', ...
'Oil-water flow with vertical injectors and fractured horizontal producer', ...
struct('modelflag', 1, 'grid_model', 1, 'flow_model', 2), ...
struct( ...
'dx', 50 * ones(1, 20), ...
'dy', 50 * ones(1, 10), ...
'dz', 10 * ones(1, 2)), ...
struct('input_content', { ...
{
[255,255,5],90,90,0,200,10,1;
[305,255,5],90,90,0,200,10,1;
[355,255,5],90,90,0,200,10,1;
[405,255,5],90,90,0,200,10,1;
[455,255,5],90,90,0,200,10,1;
[505,255,5],90,90,0,200,10,1;
[555,255,15],90,90,0,200,10,1;
[605,255,15],90,90,0,200,10,1;
[655,255,15],90,90,0,200,10,1;
[705,255,15],90,90,0,200,10,1;
[755,255,15],90,90,0,200,10,1
}}), ...
struct('pressure', 20, 'sw', 0.2, 'cs', 0.0, 'cb', 0.0), ...
struct( ...
'well1', {{
'w1', 2, [20 10 1;20 10 2], 0.178/2, 0, 1;
'w2', 2, [80 10 1;80 10 2], 0.178/2, 0, 1;
'w3', 1, [20 40 1], 0.178/2, 0, 1;
'w4', 1, [80 40 1], 0.178/2, 0, 1
}}, ...
'welloc', {{[
255,255,5;
305,255,5;
355,255,5;
405,255,5;
455,255,5;
505,255,5;
555,255,15;
605,255,15;
655,255,15;
705,255,15;
755,255,15
]}}, ...
'well2', {{
'w5', 0, [], 0.178/2, 0, 4
}}), ...
struct( ...
'time', 200, ...
'dtmax', 2, ...
'dtmin', 0.001, ...
'well_schedules', {{
{
'w1','open','inj','const_pwf',35,35;
'w2','open','inj','const_pwf',35,35;
'w3','open','inj','const_pwf',35,35;
'w4','open','inj','const_pwf',35,35;
'w5','open','pro','const_pwf',10,10
}
}}), ...
struct('yitap', 5, 'yitas', 0.04, 'omega', 0.5, 'Nmax', 50, 'epsave', 1e-6, 'epsmax', 1e-6));
end
@@ -0,0 +1,73 @@
function config = load_case_template_case07()
%LOAD_CASE_TEMPLATE_CASE07 Build config for case 7.
config = build_basic_case_template( ...
'case07', ...
'case07_oil_water_multiple_fracture_regimes', ...
'Oil-water flow with different fracture operating regimes', ...
struct('modelflag', 1, 'grid_model', 1, 'flow_model', 2), ...
struct( ...
'dx', 50 * ones(1, 20), ...
'dy', 50 * ones(1, 10), ...
'dz', 10 * ones(1, 1)), ...
struct('input_content', { ...
{
[255,255,5],90,90,0,200,10,1;
[355,255,5],90,90,0,200,10,1;
[455,255,5],90,90,0,200,10,1;
[555,255,5],90,90,0,200,10,1;
[655,255,5],90,90,0,200,10,1;
[755,255,5],90,90,0,200,10,1
}}), ...
struct('pressure', 20, 'sw', 0.2, 'cs', 0.0, 'cb', 0.0), ...
struct( ...
'well1', {{}}, ...
'welloc', {{[255,255,5]}, {[355,255,5]}, {[455,255,5]}, {[555,255,5]}, {[655,255,5]}, {[755,255,5]}}, ...
'well2', {{
'w1_f1', 0, [], 0.178/2, 0, 4;
'w1_f2', 0, [], 0.178/2, 0, 4;
'w1_f3', 0, [], 0.178/2, 0, 4;
'w1_f4', 0, [], 0.178/2, 0, 4;
'w1_f5', 0, [], 0.178/2, 0, 4;
'w1_f6', 0, [], 0.178/2, 0, 4
}}), ...
struct( ...
'time', [10; 10; 10; 200], ...
'dtmax', [0.5; 0.5; 0.5; 1], ...
'dtmin', [0.001; 0.001; 0.001; 0.001], ...
'well_schedules', {{
{
'w1_f1','open','inj','const_pwf',40,40;
'w1_f2','open','inj','const_pwf',40,40;
'w1_f3','open','inj','const_pwf',40,40;
'w1_f4','open','inj','const_pwf',40,40;
'w1_f5','open','inj','const_pwf',40,40;
'w1_f6','open','inj','const_pwf',40,40
};
{
'w1_f1','open','pro','const_q',0,0;
'w1_f2','open','inj','const_pwf',40,40;
'w1_f3','open','pro','const_q',0,0;
'w1_f4','open','inj','const_pwf',40,40;
'w1_f5','open','pro','const_q',0,0;
'w1_f6','open','inj','const_pwf',40,40
};
{
'w1_f1','open','pro','const_pwf',10,10;
'w1_f2','open','pro','const_q',0,0;
'w1_f3','open','pro','const_pwf',10,10;
'w1_f4','open','pro','const_q',0,0;
'w1_f5','open','pro','const_pwf',10,10;
'w1_f6','open','pro','const_q',0,0
};
{
'w1_f1','open','pro','const_pwf',10,10;
'w1_f2','open','pro','const_pwf',10,10;
'w1_f3','open','pro','const_pwf',10,10;
'w1_f4','open','pro','const_pwf',10,10;
'w1_f5','open','pro','const_pwf',10,10;
'w1_f6','open','pro','const_pwf',10,10
}
}}), ...
struct('yitap', 5, 'yitas', 0.04, 'omega', 0.5, 'Nmax', 50, 'epsave', 1e-6, 'epsmax', 1e-6));
end