diff --git a/gui_support/app/EDFMAppController.m b/gui_support/app/EDFMAppController.m index b3b99f8..54e1ce2 100644 --- a/gui_support/app/EDFMAppController.m +++ b/gui_support/app/EDFMAppController.m @@ -4,6 +4,7 @@ classdef EDFMAppController < handle Config struct = struct() Results struct = struct() ProjectRoot char + CurrentPlotAction string = "" end methods @@ -48,6 +49,9 @@ classdef EDFMAppController < handle obj.Config = load_case_template(caseId); obj.refreshUIFromConfig(); obj.refreshResults(); + if strlength(obj.CurrentPlotAction) ~= 0 + obj.refreshCasePlotControls(obj.CurrentPlotAction); + end obj.appendLog(sprintf('Loaded template: %s', string(caseId))); obj.setStatus(sprintf('Template %s loaded', string(caseId))); end @@ -95,6 +99,9 @@ classdef EDFMAppController < handle obj.appendLog(logText); end obj.refreshResults(); + if strlength(obj.CurrentPlotAction) ~= 0 + obj.refreshCasePlotControls(obj.CurrentPlotAction); + end obj.setRunProgress('Completed'); obj.setStatus('Run completed'); catch ME @@ -117,6 +124,9 @@ classdef EDFMAppController < handle end obj.Results = load_results_mat(fullfile(folder, fileName)); obj.refreshResults(); + if strlength(obj.CurrentPlotAction) ~= 0 + obj.refreshCasePlotControls(obj.CurrentPlotAction); + end obj.appendLog(sprintf('Imported results: %s', fullfile(folder, fileName))); obj.setStatus('Results imported'); end @@ -135,6 +145,63 @@ classdef EDFMAppController < handle obj.setStatus('Results exported'); end + function actions = getCasePlotActions(obj) + obj.pushUIToConfig(); + actions = get_case_plot_actions(obj.Config); + end + + function activateCasePlot(obj, actionId) + obj.pushUIToConfig(); + obj.CurrentPlotAction = string(actionId); + obj.refreshCasePlotControls(actionId); + if ~isempty(fieldnames(obj.Results)) + obj.runCasePlot(actionId); + end + end + + function onPlotOptionChanged(obj) + if strlength(obj.CurrentPlotAction) == 0 + return; + end + if ~isempty(fieldnames(obj.Results)) + obj.runCasePlot(obj.CurrentPlotAction); + end + end + + function refreshCasePlotControls(obj, actionId) + obj.pushUIToConfig(); + obj.configurePlotControls(actionId); + end + + function runCasePlot(obj, actionId) + if isempty(fieldnames(obj.Results)) + uialert(obj.App.UIFigure, 'Run or import results before plotting.', 'Plot'); + return; + end + + obj.pushUIToConfig(); + try + obj.CurrentPlotAction = string(actionId); + obj.configurePlotControls(actionId); + if isprop(obj.App, 'ResultAxes') && ~isempty(obj.App.ResultAxes) + options = obj.getCurrentPlotOptions(actionId); + render_case_plot_in_axes(obj.App.ResultAxes, obj.Config, obj.Results, actionId, options); + else + run_case_plot(obj.Config, obj.Results, actionId); + end + obj.appendLog(sprintf('Executed plot action: %s', string(actionId))); + obj.setStatus(sprintf('Plot: %s', string(actionId))); + catch ME + errorReport = getReport(ME, 'extended', 'hyperlinks', 'off'); + errorSummary = obj.formatExceptionSummary(ME); + obj.publishExceptionToBase(ME, errorReport); + fprintf(2, '\n[EDFM GUI Plot Error]\n%s\n', errorReport); + obj.appendLog(errorSummary); + obj.appendLog(errorReport); + uialert(obj.App.UIFigure, errorSummary, 'Plot Failed', 'Interpreter', 'none'); + end + end + function plotResults(obj) if isempty(fieldnames(obj.Results)) obj.refreshResults(); @@ -596,6 +663,51 @@ classdef EDFMAppController < handle end end + function configurePlotControls(obj, actionId) + actionId = lower(string(actionId)); + + layerItems = obj.buildLayerItems(); + wellItems = obj.buildWellItems(); + metricItems = obj.buildMetricItems(); + propertyItems = obj.buildPropertyItems(actionId); + [stepMin, stepMax, stepValue] = obj.buildTimeStepRange(actionId); + + obj.setControlVisible('PlotLayerDropDown', ismember(actionId, ["plot_2d_layer", "plot_sp_dp", "plot_perm"])); + obj.setControlVisible('PlotLayerDropDownLabel', ismember(actionId, ["plot_2d_layer", "plot_sp_dp", "plot_perm"])); + obj.setControlVisible('PlotTimeStepSlider', ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"])); + obj.setControlVisible('PlotTimeStepSliderLabel', ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"])); + obj.setControlVisible('PlotTimeStepValueLabel', ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"])); + obj.setControlVisible('PlotPropertyDropDown', ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"])); + obj.setControlVisible('PlotPropertyDropDownLabel', ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"])); + obj.setControlVisible('PlotWellDropDown', actionId == "plot_well_response"); + obj.setControlVisible('PlotWellDropDownLabel', actionId == "plot_well_response"); + obj.setControlVisible('PlotMetricDropDown', actionId == "plot_well_response"); + obj.setControlVisible('PlotMetricDropDownLabel', actionId == "plot_well_response"); + + obj.setDropDownItems('PlotLayerDropDown', layerItems, layerItems{1}); + obj.setDropDownItems('PlotWellDropDown', wellItems, wellItems{1}); + obj.setDropDownItems('PlotMetricDropDown', metricItems, metricItems{1}); + obj.setDropDownItems('PlotPropertyDropDown', propertyItems, propertyItems{1}); + obj.configureTimeStepControl(stepMin, stepMax, stepValue); + end + + function options = getCurrentPlotOptions(obj, actionId) + options = struct(); + actionId = lower(string(actionId)); + + if ismember(actionId, ["plot_2d_layer", "plot_sp_dp", "plot_perm"]) + options.layer_index = obj.getNumericDropDownValue('PlotLayerDropDown', 1); + end + if ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"]) + options.time_step = obj.getTimeStepControlValue(); + options.property_id = obj.getDropDownValue('PlotPropertyDropDown', 'pressure'); + end + if actionId == "plot_well_response" + options.well_index = obj.getNumericDropDownValue('PlotWellDropDown', 1); + options.metric = obj.getDropDownValue('PlotMetricDropDown', 'BHP'); + end + end + function setDropDownValue(obj, propName, value) if ~isprop(obj.App, propName) return; @@ -629,6 +741,30 @@ classdef EDFMAppController < handle end end + function configureTimeStepControl(obj, minValue, maxValue, currentValue) + if isprop(obj.App, 'PlotTimeStepSlider') + slider = obj.App.PlotTimeStepSlider; + slider.Limits = [minValue, maxValue]; + slider.MajorTicks = minValue:maxValue; + slider.MinorTicks = []; + slider.Value = currentValue; + end + if isprop(obj.App, 'PlotTimeStepValueLabel') + obj.App.PlotTimeStepValueLabel.Text = sprintf('Step: %d', currentValue); + end + end + + function value = getTimeStepControlValue(obj) + value = 1; + if isprop(obj.App, 'PlotTimeStepSlider') + value = max(1, round(obj.App.PlotTimeStepSlider.Value)); + obj.App.PlotTimeStepSlider.Value = value; + end + if isprop(obj.App, 'PlotTimeStepValueLabel') + obj.App.PlotTimeStepValueLabel.Text = sprintf('Step: %d', value); + end + end + function setNumericFieldValue(obj, propName, value) if ~isprop(obj.App, propName) return; @@ -738,6 +874,99 @@ classdef EDFMAppController < handle end end + function setControlVisible(obj, propName, isVisible) + if ~isprop(obj.App, propName) + return; + end + component = obj.App.(propName); + if isprop(component, 'Visible') + if isVisible + component.Visible = 'on'; + else + component.Visible = 'off'; + end + end + end + + function items = buildLayerItems(obj) + layerCount = 1; + if isfield(obj.Config, 'grid') && isfield(obj.Config.grid, 'dz') && ~isempty(obj.Config.grid.dz) + layerCount = numel(obj.Config.grid.dz); + elseif ~isempty(fieldnames(obj.Results)) && isfield(obj.Results, 'r') && isfield(obj.Results.r, 'nz') + layerCount = obj.Results.r.nz; + end + items = cellstr(string(1:layerCount)); + end + + function items = buildWellItems(obj) + wellCount = 1; + if ~isempty(fieldnames(obj.Results)) && isfield(obj.Results, 'Wellpara') && ~isempty(obj.Results.Wellpara) + wellCount = size(obj.Results.Wellpara{1}, 2); + else + wellCount = size(obj.Config.wells.well1, 1) + size(obj.Config.wells.well2, 1); + wellCount = max(wellCount, 1); + end + items = cellstr(string(1:wellCount)); + end + + function items = buildMetricItems(obj) + metricList = ["BHP", "dPWF"]; + if ~isempty(fieldnames(obj.Results)) && isfield(obj.Results, 'Wellpara') && ~isempty(obj.Results.Wellpara) + sampleWell = obj.Results.Wellpara{1}{1, 1}; + metricList = "BHP"; + if isfield(sampleWell, 'qg') + metricList(end + 1) = "GPR"; %#ok + end + if isfield(sampleWell, 'qo') + metricList(end + 1) = "OPR"; %#ok + end + if isfield(sampleWell, 'qw') + metricList(end + 1) = "WPR"; %#ok + end + if isfield(sampleWell, 'pwf') + metricList(end + 1) = "dPWF"; %#ok + end + end + items = cellstr(unique(metricList, 'stable')); + end + + function items = buildPropertyItems(obj, actionId) + if ~isfield(obj.Results, 'OutputRs') || isempty(obj.Results.OutputRs) + items = {'pressure', 'water_saturation'}; + return; + end + output = obj.Results.OutputRs{end}; + propertyList = "pressure"; + if isfield(output, 'sw') + propertyList(end + 1) = "water_saturation"; %#ok + if obj.Config.model.flow_model == 2 + propertyList(end + 1) = "oil_saturation"; %#ok + end + end + if isfield(output, 'sg') + propertyList(end + 1) = "gas_saturation"; %#ok + elseif obj.Config.model.flow_model == 1 && isfield(output, 'sw') + propertyList(end + 1) = "gas_saturation"; %#ok + end + + if ~ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"]) + items = {'pressure'}; + else + items = cellstr(unique(propertyList, 'stable')); + end + end + + function [minValue, maxValue, currentValue] = buildTimeStepRange(obj, actionId) + minValue = 1; + maxValue = 1; + currentValue = 1; + if ismember(actionId, ["plot_2d_layer", "plot_3d_distribution"]) ... + && isfield(obj.Results, 'OutputRs') && ~isempty(obj.Results.OutputRs) + maxValue = numel(obj.Results.OutputRs); + currentValue = maxValue; + end + end + function textValue = formatExceptionSummary(~, ME) lines = { sprintf('Error: %s', ME.message) diff --git a/gui_support/app/EDFM_Simulator_App.mlapp b/gui_support/app/EDFM_Simulator_App.mlapp index f84b6f4..def7b0b 100644 Binary files a/gui_support/app/EDFM_Simulator_App.mlapp and b/gui_support/app/EDFM_Simulator_App.mlapp differ diff --git a/gui_support/app/config1.mat b/gui_support/app/config1.mat new file mode 100644 index 0000000..4e29293 Binary files /dev/null and b/gui_support/app/config1.mat differ diff --git a/gui_support/app/edfm_simulator_app.txt b/gui_support/app/edfm_simulator_app.txt index 0b8a277..4dc4b49 100644 --- a/gui_support/app/edfm_simulator_app.txt +++ b/gui_support/app/edfm_simulator_app.txt @@ -5,121 +5,43 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase UIFigure matlab.ui.Figure NewConfigButton matlab.ui.control.Button TabGroup matlab.ui.container.TabGroup - ModelTab matlab.ui.container.Tab - ModelFlowModelDropDown matlab.ui.control.DropDown - FlowModelDropDownLabel matlab.ui.control.Label - ModelGridModelDropDown matlab.ui.control.DropDown - GridModelDropDownLabel matlab.ui.control.Label - ModelFlagDropDown matlab.ui.control.DropDown - ModelFlagDropDownLabel matlab.ui.control.Label - GridTab matlab.ui.container.Tab - GridNTGTextArea matlab.ui.control.TextArea - NTGTextAreaLabel matlab.ui.control.Label - GridDzTextArea matlab.ui.control.TextArea - DzTextAreaLabel matlab.ui.control.Label - GridDyTextArea matlab.ui.control.TextArea - DyTextAreaLabel matlab.ui.control.Label - GridDxTextArea matlab.ui.control.TextArea - DxTextAreaLabel matlab.ui.control.Label - FractureTab matlab.ui.container.Tab - FractureFlowBarrierFlagsTextArea matlab.ui.control.TextArea - FlowBarrierFlagsTextAreaLabel matlab.ui.control.Label - FractureHeightsTextArea matlab.ui.control.TextArea - FractureHeightsTextAreaLabel matlab.ui.control.Label - FractureLinesTextArea matlab.ui.control.TextArea - FractureLinesTextAreaLabel matlab.ui.control.Label - FractureInputTextArea matlab.ui.control.TextArea - FractureInputTextAreaLabel matlab.ui.control.Label - FractureInputStyleDropDown matlab.ui.control.DropDown - FractureInputStyleDropDownLabel matlab.ui.control.Label - DiscretizationTab matlab.ui.container.Tab - TabGroup3 matlab.ui.container.TabGroup - SPTab matlab.ui.container.Tab - SPcaEditField matlab.ui.control.NumericEditField - caEditFieldLabel matlab.ui.control.Label - SPcfEditField matlab.ui.control.NumericEditField - cfEditFieldLabel matlab.ui.control.Label - SPRptEditField matlab.ui.control.NumericEditField - RptEditFieldLabel matlab.ui.control.Label - SPStressRefPressureEditField matlab.ui.control.NumericEditField - StressRefPressureEditFieldLabel matlab.ui.control.Label - SPStressMatrixEditField matlab.ui.control.NumericEditField - StressMatrixEditFieldLabel matlab.ui.control.Label - SPStressFractureEditField matlab.ui.control.NumericEditField - StressFractureEditFieldLabel matlab.ui.control.Label - SPFracturePrporEditField matlab.ui.control.NumericEditField - FracturePrporEditFieldLabel matlab.ui.control.Label - SPFractureCporfEditField matlab.ui.control.NumericEditField - FractureCporfEditFieldLabel matlab.ui.control.Label - SPFracturePorfTextArea matlab.ui.control.TextArea - FracturePorfTextAreaLabel matlab.ui.control.Label - SPFractureWfTextArea matlab.ui.control.TextArea - FractureWfTextAreaLabel matlab.ui.control.Label - SPFractureKfTextArea matlab.ui.control.TextArea - FractureKfTextAreaLabel matlab.ui.control.Label - SPRockDensityEditField matlab.ui.control.NumericEditField - RockDensityEditFieldLabel matlab.ui.control.Label - SPMatrixCporEditField matlab.ui.control.NumericEditField - MatrixCporEditFieldLabel matlab.ui.control.Label - SPMatrixPrporEditField matlab.ui.control.NumericEditField - MatrixPrporEditFieldLabel matlab.ui.control.Label - SPMatrixPoriTextArea matlab.ui.control.TextArea - MatrixPoriTextAreaLabel matlab.ui.control.Label - SPMatrixKzTextArea matlab.ui.control.TextArea - MatrixKzTextAreaLabel matlab.ui.control.Label - SPMatrixKyTextArea matlab.ui.control.TextArea - MatrixKyTextAreaLabel matlab.ui.control.Label - SPMatrixKxTextArea matlab.ui.control.TextArea - MatrixKxTextAreaLabel matlab.ui.control.Label - SPInvalidLayerTextArea matlab.ui.control.TextArea - InvalidLayerTextAreaLabel matlab.ui.control.Label - SPBoundaryTextArea matlab.ui.control.TextArea - BoundaryTextAreaLabel matlab.ui.control.Label - DPTab matlab.ui.container.Tab - DPcaEditField matlab.ui.control.NumericEditField - caEditFieldLabel_2 matlab.ui.control.Label - DPcffEditField matlab.ui.control.NumericEditField - cffEditFieldLabel matlab.ui.control.Label - DPRptEditField matlab.ui.control.NumericEditField - RptEditFieldLabel_2 matlab.ui.control.Label - DPstress_factor_ref_pressureEditField matlab.ui.control.NumericEditField - stress_factor_ref_pressureEditFieldLabel matlab.ui.control.Label - DPstress_factor_matrixEditField matlab.ui.control.NumericEditField - stress_factor_matrixEditFieldLabel matlab.ui.control.Label - DPstress_factor_fractureEditField matlab.ui.control.NumericEditField - stress_factor_fractureEditFieldLabel matlab.ui.control.Label - DPcporfEditField matlab.ui.control.NumericEditField - cporfEditFieldLabel matlab.ui.control.Label - DPprporfEditField matlab.ui.control.NumericEditField - prporfEditFieldLabel matlab.ui.control.Label - DPPorfTextArea matlab.ui.control.TextArea - PorfTextAreaLabel matlab.ui.control.Label - DPWfTextArea matlab.ui.control.TextArea - WfTextAreaLabel matlab.ui.control.Label - DPKfTextArea matlab.ui.control.TextArea - KfTextAreaLabel matlab.ui.control.Label - DPcporEditField matlab.ui.control.NumericEditField - cporLabel matlab.ui.control.Label - DPprporEditField matlab.ui.control.NumericEditField - prporEditFieldLabel matlab.ui.control.Label - DPNTGTextArea matlab.ui.control.TextArea - NTGTextArea_2Label matlab.ui.control.Label - DPsigmaTextArea matlab.ui.control.TextArea - sigmaTextAreaLabel matlab.ui.control.Label - DPpori_matrixLayerTextArea matlab.ui.control.TextArea - pori_matrixLayerTextAreaLabel matlab.ui.control.Label - DPkz_matrixLayerTextArea matlab.ui.control.TextArea - kz_matrixLayerTextAreaLabel matlab.ui.control.Label - DPky_matrixLayerTextArea matlab.ui.control.TextArea - ky_matrixLayerTextAreaLabel matlab.ui.control.Label - DPkx_matrixLayerTextArea matlab.ui.control.TextArea - kx_matrixLayerTextAreaLabel matlab.ui.control.Label - DPkzTextArea matlab.ui.control.TextArea - kzTextAreaLabel matlab.ui.control.Label - DPkyTextArea matlab.ui.control.TextArea - kyTextAreaLabel matlab.ui.control.Label - DPkxTextArea matlab.ui.control.TextArea - kxTextAreaLabel matlab.ui.control.Label + ResultsTab matlab.ui.container.Tab + ResultTab matlab.ui.control.Table + PlotResultButton matlab.ui.control.Button + ResultTypeDropDown matlab.ui.control.DropDown + ResultTypeDropDownLabel matlab.ui.control.Label + ResultSummaryTextArea matlab.ui.control.TextArea + ResultSummaryTextAreaLabel matlab.ui.control.Label + ResultAxes matlab.ui.control.UIAxes + RunTab matlab.ui.container.Tab + RunProgressLabel matlab.ui.control.Label + RunLogTextArea matlab.ui.control.TextArea + RunLogTextAreaLabel matlab.ui.control.Label + RunCurrentConfigButton matlab.ui.control.Button + SoloverTab matlab.ui.container.Tab + EpsMaxEditField matlab.ui.control.NumericEditField + EpsMaxEditFieldLabel matlab.ui.control.Label + EpsAveEditField matlab.ui.control.NumericEditField + EpsAveEditFieldLabel matlab.ui.control.Label + NmaxEditField matlab.ui.control.NumericEditField + NmaxEditFieldLabel matlab.ui.control.Label + OmegaEditField matlab.ui.control.NumericEditField + OmegaEditFieldLabel matlab.ui.control.Label + YitaSEditField matlab.ui.control.NumericEditField + YitaSEditFieldLabel matlab.ui.control.Label + YitaPEditField matlab.ui.control.NumericEditField + YitaPEditFieldLabel matlab.ui.control.Label + WellsTab matlab.ui.container.Tab + DtMaxTextArea matlab.ui.control.TextArea + DtMaxTextAreaLabel matlab.ui.control.Label + DtMinTextArea matlab.ui.control.TextArea + DtMinTextAreaLabel matlab.ui.control.Label + TimeTextArea matlab.ui.control.TextArea + TimeTextAreaLabel matlab.ui.control.Label + ScheduleTable matlab.ui.control.Table + Well2Table matlab.ui.control.Table + FractureWellLocationTable matlab.ui.control.Table + Well1Table matlab.ui.control.Table FlowTab matlab.ui.container.Tab InitialCbEditField matlab.ui.control.NumericEditField InitialCbEditFieldLabel matlab.ui.control.Label @@ -131,98 +53,6 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase InitialPressureEditFieldLabel matlab.ui.control.Label InitStatusLabel matlab.ui.control.Label TabGroup2 matlab.ui.container.TabGroup - GasWaterTab matlab.ui.container.Tab - GWPRFTextArea matlab.ui.control.TextArea - PRFTextAreaLabel matlab.ui.control.Label - GWRPGWTextArea matlab.ui.control.TextArea - RPGWTextAreaLabel matlab.ui.control.Label - GWifpcglEditField matlab.ui.control.NumericEditField - ifpcglEditFieldLabel matlab.ui.control.Label - GWcvwEditField matlab.ui.control.NumericEditField - cvwEditFieldLabel matlab.ui.control.Label - GWvwiEditField matlab.ui.control.NumericEditField - vwiEditFieldLabel matlab.ui.control.Label - GWcwEditField matlab.ui.control.NumericEditField - cwEditFieldLabel matlab.ui.control.Label - GWBwiEditField matlab.ui.control.NumericEditField - BwiEditFieldLabel matlab.ui.control.Label - GWprwEditField matlab.ui.control.NumericEditField - prwEditFieldLabel matlab.ui.control.Label - GWMUGTextArea matlab.ui.control.TextArea - MUGTextAreaLabel matlab.ui.control.Label - GWBGTextArea matlab.ui.control.TextArea - BGTextAreaLabel matlab.ui.control.Label - GWPprTextArea matlab.ui.control.TextArea - PprTextAreaLabel matlab.ui.control.Label - GWcvgEditField matlab.ui.control.NumericEditField - cvgEditFieldLabel matlab.ui.control.Label - GWvgiEditField matlab.ui.control.NumericEditField - vgiEditFieldLabel matlab.ui.control.Label - GWcgEditField matlab.ui.control.NumericEditField - cgEditFieldLabel matlab.ui.control.Label - GWBgiEditField matlab.ui.control.NumericEditField - BgiEditFieldLabel matlab.ui.control.Label - GWprgEditField matlab.ui.control.NumericEditField - prgEditFieldLabel matlab.ui.control.Label - GWgas_modelDropDown matlab.ui.control.DropDown - gas_modelDropDownLabel matlab.ui.control.Label - GWdensity_w_scEditField matlab.ui.control.NumericEditField - density_w_scEditFieldLabel matlab.ui.control.Label - GWdensity_g_scEditField matlab.ui.control.NumericEditField - density_g_scEditFieldLabel matlab.ui.control.Label - GWp_grad_thresholdEditField matlab.ui.control.NumericEditField - p_grad_thresholdEditFieldLabel matlab.ui.control.Label - GWbeta_non_darcy_flowEditField matlab.ui.control.NumericEditField - beta_non_darcy_flowEditFieldLabel matlab.ui.control.Label - GWgas_propKnEditField matlab.ui.control.NumericEditField - gas_propKnEditFieldLabel matlab.ui.control.Label - GWgas_propPLEditField matlab.ui.control.NumericEditField - gas_propPLEditFieldLabel matlab.ui.control.Label - GWgas_propVLEditField matlab.ui.control.NumericEditField - gas_propVLEditFieldLabel matlab.ui.control.Label - OilWaterTab matlab.ui.container.Tab - OWp_grad_thresholdEditField matlab.ui.control.NumericEditField - p_grad_thresholdEditFieldLabel_2 matlab.ui.control.Label - OWbeta_non_Darcy_flowEditField matlab.ui.control.NumericEditField - beta_non_Darcy_flowEditFieldLabel matlab.ui.control.Label - OWPRFTextArea matlab.ui.control.TextArea - PRFTextAreaLabel_2 matlab.ui.control.Label - OWPRMTextArea matlab.ui.control.TextArea - PRMTextAreaLabel matlab.ui.control.Label - OWifpcowEditField matlab.ui.control.NumericEditField - ifpcowEditFieldLabel matlab.ui.control.Label - OWcvwEditField matlab.ui.control.NumericEditField - cvwEditFieldLabel_2 matlab.ui.control.Label - OWvwiEditField matlab.ui.control.NumericEditField - vwiEditFieldLabel_2 matlab.ui.control.Label - OWcwEditField matlab.ui.control.NumericEditField - cwEditFieldLabel_2 matlab.ui.control.Label - OWBwiEditField matlab.ui.control.NumericEditField - BwiEditFieldLabel_2 matlab.ui.control.Label - OWprwEditField matlab.ui.control.NumericEditField - prwEditFieldLabel_2 matlab.ui.control.Label - OWMUOTextArea matlab.ui.control.TextArea - MUOTextAreaLabel matlab.ui.control.Label - OWBOTextArea matlab.ui.control.TextArea - BOTextAreaLabel matlab.ui.control.Label - OWPprTextArea matlab.ui.control.TextArea - PprTextAreaLabel_2 matlab.ui.control.Label - OWcvoEditField matlab.ui.control.NumericEditField - cvoEditFieldLabel matlab.ui.control.Label - OWvoiEditField matlab.ui.control.NumericEditField - voiEditFieldLabel matlab.ui.control.Label - OWcoEditField matlab.ui.control.NumericEditField - coEditFieldLabel matlab.ui.control.Label - OWBoiEditField matlab.ui.control.NumericEditField - BoiEditFieldLabel matlab.ui.control.Label - OWproEditField matlab.ui.control.NumericEditField - proEditFieldLabel matlab.ui.control.Label - OWoil_modelDropDown matlab.ui.control.DropDown - oil_modelDropDownLabel matlab.ui.control.Label - OWdensity_w_scEditField matlab.ui.control.NumericEditField - density_w_scEditFieldLabel_2 matlab.ui.control.Label - OWdensity_o_scEditField matlab.ui.control.NumericEditField - density_o_scEditFieldLabel matlab.ui.control.Label MultiComponentTab matlab.ui.container.Tab MCcvwEditField matlab.ui.control.NumericEditField cvwEditFieldLabel_3 matlab.ui.control.Label @@ -302,43 +132,213 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase DbEditFieldLabel matlab.ui.control.Label MCDsEditField matlab.ui.control.NumericEditField DsEditFieldLabel matlab.ui.control.Label - WellsTab matlab.ui.container.Tab - DtMaxTextArea matlab.ui.control.TextArea - DtMaxTextAreaLabel matlab.ui.control.Label - DtMinTextArea matlab.ui.control.TextArea - DtMinTextAreaLabel matlab.ui.control.Label - TimeTextArea matlab.ui.control.TextArea - TimeTextAreaLabel matlab.ui.control.Label - ScheduleTable matlab.ui.control.Table - Well2Table matlab.ui.control.Table - FractureWellLocationTable matlab.ui.control.Table - Well1Table matlab.ui.control.Table - SoloverTab matlab.ui.container.Tab - EpsMaxEditField matlab.ui.control.NumericEditField - EpsMaxEditFieldLabel matlab.ui.control.Label - EpsAveEditField matlab.ui.control.NumericEditField - EpsAveEditFieldLabel matlab.ui.control.Label - NmaxEditField matlab.ui.control.NumericEditField - NmaxEditFieldLabel matlab.ui.control.Label - OmegaEditField matlab.ui.control.NumericEditField - OmegaEditFieldLabel matlab.ui.control.Label - YitaSEditField matlab.ui.control.NumericEditField - YitaSEditFieldLabel matlab.ui.control.Label - YitaPEditField matlab.ui.control.NumericEditField - YitaPEditFieldLabel matlab.ui.control.Label - RunTab matlab.ui.container.Tab - RunProgressLabel matlab.ui.control.Label - RunLogTextArea matlab.ui.control.TextArea - RunLogTextAreaLabel matlab.ui.control.Label - RunCurrentConfigButton matlab.ui.control.Button - ResultsTab matlab.ui.container.Tab - ResultTab matlab.ui.control.Table - PlotResultButton matlab.ui.control.Button - ResultTypeDropDown matlab.ui.control.DropDown - ResultTypeDropDownLabel matlab.ui.control.Label - ResultSummaryTextArea matlab.ui.control.TextArea - ResultSummaryTextAreaLabel matlab.ui.control.Label - ResultAxes matlab.ui.control.UIAxes + OilWaterTab matlab.ui.container.Tab + OWp_grad_thresholdEditField matlab.ui.control.NumericEditField + p_grad_thresholdEditFieldLabel_2 matlab.ui.control.Label + OWbeta_non_Darcy_flowEditField matlab.ui.control.NumericEditField + beta_non_Darcy_flowEditFieldLabel matlab.ui.control.Label + OWPRFTextArea matlab.ui.control.TextArea + PRFTextAreaLabel_2 matlab.ui.control.Label + OWPRMTextArea matlab.ui.control.TextArea + PRMTextAreaLabel matlab.ui.control.Label + OWifpcowEditField matlab.ui.control.NumericEditField + ifpcowEditFieldLabel matlab.ui.control.Label + OWcvwEditField matlab.ui.control.NumericEditField + cvwEditFieldLabel_2 matlab.ui.control.Label + OWvwiEditField matlab.ui.control.NumericEditField + vwiEditFieldLabel_2 matlab.ui.control.Label + OWcwEditField matlab.ui.control.NumericEditField + cwEditFieldLabel_2 matlab.ui.control.Label + OWBwiEditField matlab.ui.control.NumericEditField + BwiEditFieldLabel_2 matlab.ui.control.Label + OWprwEditField matlab.ui.control.NumericEditField + prwEditFieldLabel_2 matlab.ui.control.Label + OWMUOTextArea matlab.ui.control.TextArea + MUOTextAreaLabel matlab.ui.control.Label + OWBOTextArea matlab.ui.control.TextArea + BOTextAreaLabel matlab.ui.control.Label + OWPprTextArea matlab.ui.control.TextArea + PprTextAreaLabel_2 matlab.ui.control.Label + OWcvoEditField matlab.ui.control.NumericEditField + cvoEditFieldLabel matlab.ui.control.Label + OWvoiEditField matlab.ui.control.NumericEditField + voiEditFieldLabel matlab.ui.control.Label + OWcoEditField matlab.ui.control.NumericEditField + coEditFieldLabel matlab.ui.control.Label + OWBoiEditField matlab.ui.control.NumericEditField + BoiEditFieldLabel matlab.ui.control.Label + OWproEditField matlab.ui.control.NumericEditField + proEditFieldLabel matlab.ui.control.Label + OWoil_modelDropDown matlab.ui.control.DropDown + oil_modelDropDownLabel matlab.ui.control.Label + OWdensity_w_scEditField matlab.ui.control.NumericEditField + density_w_scEditFieldLabel_2 matlab.ui.control.Label + OWdensity_o_scEditField matlab.ui.control.NumericEditField + density_o_scEditFieldLabel matlab.ui.control.Label + GasWaterTab matlab.ui.container.Tab + GWPRFTextArea matlab.ui.control.TextArea + PRFTextAreaLabel matlab.ui.control.Label + GWRPGWTextArea matlab.ui.control.TextArea + RPGWTextAreaLabel matlab.ui.control.Label + GWifpcglEditField matlab.ui.control.NumericEditField + ifpcglEditFieldLabel matlab.ui.control.Label + GWcvwEditField matlab.ui.control.NumericEditField + cvwEditFieldLabel matlab.ui.control.Label + GWvwiEditField matlab.ui.control.NumericEditField + vwiEditFieldLabel matlab.ui.control.Label + GWcwEditField matlab.ui.control.NumericEditField + cwEditFieldLabel matlab.ui.control.Label + GWBwiEditField matlab.ui.control.NumericEditField + BwiEditFieldLabel matlab.ui.control.Label + GWprwEditField matlab.ui.control.NumericEditField + prwEditFieldLabel matlab.ui.control.Label + GWMUGTextArea matlab.ui.control.TextArea + MUGTextAreaLabel matlab.ui.control.Label + GWBGTextArea matlab.ui.control.TextArea + BGTextAreaLabel matlab.ui.control.Label + GWPprTextArea matlab.ui.control.TextArea + PprTextAreaLabel matlab.ui.control.Label + GWcvgEditField matlab.ui.control.NumericEditField + cvgEditFieldLabel matlab.ui.control.Label + GWvgiEditField matlab.ui.control.NumericEditField + vgiEditFieldLabel matlab.ui.control.Label + GWcgEditField matlab.ui.control.NumericEditField + cgEditFieldLabel matlab.ui.control.Label + GWBgiEditField matlab.ui.control.NumericEditField + BgiEditFieldLabel matlab.ui.control.Label + GWprgEditField matlab.ui.control.NumericEditField + prgEditFieldLabel matlab.ui.control.Label + GWgas_modelDropDown matlab.ui.control.DropDown + gas_modelDropDownLabel matlab.ui.control.Label + GWdensity_w_scEditField matlab.ui.control.NumericEditField + density_w_scEditFieldLabel matlab.ui.control.Label + GWdensity_g_scEditField matlab.ui.control.NumericEditField + density_g_scEditFieldLabel matlab.ui.control.Label + GWp_grad_thresholdEditField matlab.ui.control.NumericEditField + p_grad_thresholdEditFieldLabel matlab.ui.control.Label + GWbeta_non_darcy_flowEditField matlab.ui.control.NumericEditField + beta_non_darcy_flowEditFieldLabel matlab.ui.control.Label + GWgas_propKnEditField matlab.ui.control.NumericEditField + gas_propKnEditFieldLabel matlab.ui.control.Label + GWgas_propPLEditField matlab.ui.control.NumericEditField + gas_propPLEditFieldLabel matlab.ui.control.Label + GWgas_propVLEditField matlab.ui.control.NumericEditField + gas_propVLEditFieldLabel matlab.ui.control.Label + DiscretizationTab matlab.ui.container.Tab + TabGroup3 matlab.ui.container.TabGroup + DPTab matlab.ui.container.Tab + DPcaEditField matlab.ui.control.NumericEditField + caEditFieldLabel_2 matlab.ui.control.Label + DPcffEditField matlab.ui.control.NumericEditField + cffEditFieldLabel matlab.ui.control.Label + DPRptEditField matlab.ui.control.NumericEditField + RptEditFieldLabel_2 matlab.ui.control.Label + DPstress_factor_ref_pressureEditField matlab.ui.control.NumericEditField + stress_factor_ref_pressureEditFieldLabel matlab.ui.control.Label + DPstress_factor_matrixEditField matlab.ui.control.NumericEditField + stress_factor_matrixEditFieldLabel matlab.ui.control.Label + DPstress_factor_fractureEditField matlab.ui.control.NumericEditField + stress_factor_fractureEditFieldLabel matlab.ui.control.Label + DPcporfEditField matlab.ui.control.NumericEditField + cporfEditFieldLabel matlab.ui.control.Label + DPprporfEditField matlab.ui.control.NumericEditField + prporfEditFieldLabel matlab.ui.control.Label + DPPorfTextArea matlab.ui.control.TextArea + PorfTextAreaLabel matlab.ui.control.Label + DPWfTextArea matlab.ui.control.TextArea + WfTextAreaLabel matlab.ui.control.Label + DPKfTextArea matlab.ui.control.TextArea + KfTextAreaLabel matlab.ui.control.Label + DPcporEditField matlab.ui.control.NumericEditField + cporLabel matlab.ui.control.Label + DPprporEditField matlab.ui.control.NumericEditField + prporEditFieldLabel matlab.ui.control.Label + DPNTGTextArea matlab.ui.control.TextArea + NTGTextArea_2Label matlab.ui.control.Label + DPsigmaTextArea matlab.ui.control.TextArea + sigmaTextAreaLabel matlab.ui.control.Label + DPpori_matrixLayerTextArea matlab.ui.control.TextArea + pori_matrixLayerTextAreaLabel matlab.ui.control.Label + DPkz_matrixLayerTextArea matlab.ui.control.TextArea + kz_matrixLayerTextAreaLabel matlab.ui.control.Label + DPky_matrixLayerTextArea matlab.ui.control.TextArea + ky_matrixLayerTextAreaLabel matlab.ui.control.Label + DPkx_matrixLayerTextArea matlab.ui.control.TextArea + kx_matrixLayerTextAreaLabel matlab.ui.control.Label + DPkzTextArea matlab.ui.control.TextArea + kzTextAreaLabel matlab.ui.control.Label + DPkyTextArea matlab.ui.control.TextArea + kyTextAreaLabel matlab.ui.control.Label + DPkxTextArea matlab.ui.control.TextArea + kxTextAreaLabel matlab.ui.control.Label + SPTab matlab.ui.container.Tab + SPcaEditField matlab.ui.control.NumericEditField + caEditFieldLabel matlab.ui.control.Label + SPcfEditField matlab.ui.control.NumericEditField + cfEditFieldLabel matlab.ui.control.Label + SPRptEditField matlab.ui.control.NumericEditField + RptEditFieldLabel matlab.ui.control.Label + SPStressRefPressureEditField matlab.ui.control.NumericEditField + StressRefPressureEditFieldLabel matlab.ui.control.Label + SPStressMatrixEditField matlab.ui.control.NumericEditField + StressMatrixEditFieldLabel matlab.ui.control.Label + SPStressFractureEditField matlab.ui.control.NumericEditField + StressFractureEditFieldLabel matlab.ui.control.Label + SPFracturePrporEditField matlab.ui.control.NumericEditField + FracturePrporEditFieldLabel matlab.ui.control.Label + SPFractureCporfEditField matlab.ui.control.NumericEditField + FractureCporfEditFieldLabel matlab.ui.control.Label + SPFracturePorfTextArea matlab.ui.control.TextArea + FracturePorfTextAreaLabel matlab.ui.control.Label + SPFractureWfTextArea matlab.ui.control.TextArea + FractureWfTextAreaLabel matlab.ui.control.Label + SPFractureKfTextArea matlab.ui.control.TextArea + FractureKfTextAreaLabel matlab.ui.control.Label + SPRockDensityEditField matlab.ui.control.NumericEditField + RockDensityEditFieldLabel matlab.ui.control.Label + SPMatrixCporEditField matlab.ui.control.NumericEditField + MatrixCporEditFieldLabel matlab.ui.control.Label + SPMatrixPrporEditField matlab.ui.control.NumericEditField + MatrixPrporEditFieldLabel matlab.ui.control.Label + SPMatrixPoriTextArea matlab.ui.control.TextArea + MatrixPoriTextAreaLabel matlab.ui.control.Label + SPMatrixKzTextArea matlab.ui.control.TextArea + MatrixKzTextAreaLabel matlab.ui.control.Label + SPMatrixKyTextArea matlab.ui.control.TextArea + MatrixKyTextAreaLabel matlab.ui.control.Label + SPMatrixKxTextArea matlab.ui.control.TextArea + MatrixKxTextAreaLabel matlab.ui.control.Label + SPInvalidLayerTextArea matlab.ui.control.TextArea + InvalidLayerTextAreaLabel matlab.ui.control.Label + SPBoundaryTextArea matlab.ui.control.TextArea + BoundaryTextAreaLabel matlab.ui.control.Label + FractureTab matlab.ui.container.Tab + FractureFlowBarrierFlagsTextArea matlab.ui.control.TextArea + FlowBarrierFlagsTextAreaLabel matlab.ui.control.Label + FractureHeightsTextArea matlab.ui.control.TextArea + FractureHeightsTextAreaLabel matlab.ui.control.Label + FractureLinesTextArea matlab.ui.control.TextArea + FractureLinesTextAreaLabel matlab.ui.control.Label + FractureInputTextArea matlab.ui.control.TextArea + FractureInputTextAreaLabel matlab.ui.control.Label + FractureInputStyleDropDown matlab.ui.control.DropDown + FractureInputStyleDropDownLabel matlab.ui.control.Label + GridTab matlab.ui.container.Tab + GridNTGTextArea matlab.ui.control.TextArea + NTGTextAreaLabel matlab.ui.control.Label + GridDzTextArea matlab.ui.control.TextArea + DzTextAreaLabel matlab.ui.control.Label + GridDyTextArea matlab.ui.control.TextArea + DyTextAreaLabel matlab.ui.control.Label + GridDxTextArea matlab.ui.control.TextArea + DxTextAreaLabel matlab.ui.control.Label + ModelTab matlab.ui.container.Tab + ModelFlowModelDropDown matlab.ui.control.DropDown + FlowModelDropDownLabel matlab.ui.control.Label + ModelGridModelDropDown matlab.ui.control.DropDown + GridModelDropDownLabel matlab.ui.control.Label + ModelFlagDropDown matlab.ui.control.DropDown + ModelFlagDropDownLabel matlab.ui.control.Label StatusLabel matlab.ui.control.Label ExportResultButton matlab.ui.control.Button ImportResultButton matlab.ui.control.Button @@ -439,36 +439,36 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create ImportConfigButton app.ImportConfigButton = uibutton(app.UIFigure, 'push'); app.ImportConfigButton.ButtonPushedFcn = createCallbackFcn(app, @onImportConfig, true); - app.ImportConfigButton.Position = [399 774 87 23]; + app.ImportConfigButton.Position = [405 774 87 23]; app.ImportConfigButton.Text = 'Import Config'; % Create ExportConfigButton app.ExportConfigButton = uibutton(app.UIFigure, 'push'); app.ExportConfigButton.ButtonPushedFcn = createCallbackFcn(app, @onExportConfig, true); - app.ExportConfigButton.Position = [532 774 88 23]; + app.ExportConfigButton.Position = [524 774 88 23]; app.ExportConfigButton.Text = 'Export Config'; % Create RunButton app.RunButton = uibutton(app.UIFigure, 'push'); app.RunButton.ButtonPushedFcn = createCallbackFcn(app, @onRun, true); - app.RunButton.Position = [648 774 70 23]; + app.RunButton.Position = [642 774 70 23]; app.RunButton.Text = 'Run'; % Create ImportResultButton app.ImportResultButton = uibutton(app.UIFigure, 'push'); app.ImportResultButton.ButtonPushedFcn = createCallbackFcn(app, @onImportResult, true); - app.ImportResultButton.Position = [761 774 86 23]; + app.ImportResultButton.Position = [754 774 86 23]; app.ImportResultButton.Text = 'Import Result'; % Create ExportResultButton app.ExportResultButton = uibutton(app.UIFigure, 'push'); app.ExportResultButton.ButtonPushedFcn = createCallbackFcn(app, @onExportResult, true); - app.ExportResultButton.Position = [883 774 87 23]; + app.ExportResultButton.Position = [875 774 87 23]; app.ExportResultButton.Text = 'Export Result'; % Create StatusLabel app.StatusLabel = uilabel(app.UIFigure); - app.StatusLabel.Position = [1196 774 39 22]; + app.StatusLabel.Position = [1089 774 146 22]; app.StatusLabel.Text = 'Status'; % Create TabGroup @@ -482,37 +482,37 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create ModelFlagDropDownLabel app.ModelFlagDropDownLabel = uilabel(app.ModelTab); app.ModelFlagDropDownLabel.HorizontalAlignment = 'right'; - app.ModelFlagDropDownLabel.Position = [30 609 61 22]; + app.ModelFlagDropDownLabel.Position = [66 614 61 22]; app.ModelFlagDropDownLabel.Text = 'ModelFlag'; % Create ModelFlagDropDown app.ModelFlagDropDown = uidropdown(app.ModelTab); app.ModelFlagDropDown.Items = {'1', '', '', ''}; - app.ModelFlagDropDown.Position = [106 609 100 22]; + app.ModelFlagDropDown.Position = [142 614 100 22]; app.ModelFlagDropDown.Value = ''; % Create GridModelDropDownLabel app.GridModelDropDownLabel = uilabel(app.ModelTab); app.GridModelDropDownLabel.HorizontalAlignment = 'right'; - app.GridModelDropDownLabel.Position = [31 558 60 22]; + app.GridModelDropDownLabel.Position = [67 552 60 22]; app.GridModelDropDownLabel.Text = 'GridModel'; % Create ModelGridModelDropDown app.ModelGridModelDropDown = uidropdown(app.ModelTab); app.ModelGridModelDropDown.Items = {'1', '2', '', ''}; - app.ModelGridModelDropDown.Position = [106 558 100 22]; + app.ModelGridModelDropDown.Position = [142 552 100 22]; app.ModelGridModelDropDown.Value = ''; % Create FlowModelDropDownLabel app.FlowModelDropDownLabel = uilabel(app.ModelTab); app.FlowModelDropDownLabel.HorizontalAlignment = 'right'; - app.FlowModelDropDownLabel.Position = [31 507 63 22]; + app.FlowModelDropDownLabel.Position = [66 488 63 22]; app.FlowModelDropDownLabel.Text = 'FlowModel'; % Create ModelFlowModelDropDown app.ModelFlowModelDropDown = uidropdown(app.ModelTab); app.ModelFlowModelDropDown.Items = {'1', '2', '3'}; - app.ModelFlowModelDropDown.Position = [109 507 100 22]; + app.ModelFlowModelDropDown.Position = [144 488 100 22]; app.ModelFlowModelDropDown.Value = '1'; % Create GridTab @@ -527,37 +527,37 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GridDxTextArea app.GridDxTextArea = uitextarea(app.GridTab); - app.GridDxTextArea.Position = [89 607 263 60]; + app.GridDxTextArea.Position = [89 566 263 101]; % Create DyTextAreaLabel app.DyTextAreaLabel = uilabel(app.GridTab); app.DyTextAreaLabel.HorizontalAlignment = 'right'; - app.DyTextAreaLabel.Position = [49 543 25 22]; + app.DyTextAreaLabel.Position = [49 529 25 22]; app.DyTextAreaLabel.Text = 'Dy'; % Create GridDyTextArea app.GridDyTextArea = uitextarea(app.GridTab); - app.GridDyTextArea.Position = [89 507 263 60]; + app.GridDyTextArea.Position = [89 455 263 98]; % Create DzTextAreaLabel app.DzTextAreaLabel = uilabel(app.GridTab); app.DzTextAreaLabel.HorizontalAlignment = 'right'; - app.DzTextAreaLabel.Position = [49 449 25 22]; + app.DzTextAreaLabel.Position = [52 400 25 22]; app.DzTextAreaLabel.Text = 'Dz'; % Create GridDzTextArea app.GridDzTextArea = uitextarea(app.GridTab); - app.GridDzTextArea.Position = [89 401 263 72]; + app.GridDzTextArea.Position = [92 300 263 124]; % Create NTGTextAreaLabel app.NTGTextAreaLabel = uilabel(app.GridTab); app.NTGTextAreaLabel.HorizontalAlignment = 'right'; - app.NTGTextAreaLabel.Position = [49 347 30 22]; + app.NTGTextAreaLabel.Position = [48 231 30 22]; app.NTGTextAreaLabel.Text = 'NTG'; % Create GridNTGTextArea app.GridNTGTextArea = uitextarea(app.GridTab); - app.GridNTGTextArea.Position = [94 311 267 60]; + app.GridNTGTextArea.Position = [93 147 267 108]; % Create FractureTab app.FractureTab = uitab(app.TabGroup); @@ -566,54 +566,54 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create FractureInputStyleDropDownLabel app.FractureInputStyleDropDownLabel = uilabel(app.FractureTab); app.FractureInputStyleDropDownLabel.HorizontalAlignment = 'right'; - app.FractureInputStyleDropDownLabel.Position = [57 622 103 22]; + app.FractureInputStyleDropDownLabel.Position = [48 622 103 22]; app.FractureInputStyleDropDownLabel.Text = 'FractureInputStyle'; % Create FractureInputStyleDropDown app.FractureInputStyleDropDown = uidropdown(app.FractureTab); app.FractureInputStyleDropDown.Items = {''}; - app.FractureInputStyleDropDown.Position = [175 622 147 22]; + app.FractureInputStyleDropDown.Position = [166 622 218 22]; app.FractureInputStyleDropDown.Value = ''; % Create FractureInputTextAreaLabel app.FractureInputTextAreaLabel = uilabel(app.FractureTab); app.FractureInputTextAreaLabel.HorizontalAlignment = 'right'; - app.FractureInputTextAreaLabel.Position = [74 560 76 22]; + app.FractureInputTextAreaLabel.Position = [59 571 76 22]; app.FractureInputTextAreaLabel.Text = 'FractureInput'; % Create FractureInputTextArea app.FractureInputTextArea = uitextarea(app.FractureTab); - app.FractureInputTextArea.Position = [165 524 150 60]; + app.FractureInputTextArea.Position = [150 497 241 98]; % Create FractureLinesTextAreaLabel app.FractureLinesTextAreaLabel = uilabel(app.FractureTab); app.FractureLinesTextAreaLabel.HorizontalAlignment = 'right'; - app.FractureLinesTextAreaLabel.Position = [72 466 78 22]; + app.FractureLinesTextAreaLabel.Position = [62 448 78 22]; app.FractureLinesTextAreaLabel.Text = 'FractureLines'; % Create FractureLinesTextArea app.FractureLinesTextArea = uitextarea(app.FractureTab); - app.FractureLinesTextArea.Position = [165 430 150 60]; + app.FractureLinesTextArea.Position = [155 353 237 119]; % Create FractureHeightsTextAreaLabel app.FractureHeightsTextAreaLabel = uilabel(app.FractureTab); app.FractureHeightsTextAreaLabel.HorizontalAlignment = 'right'; - app.FractureHeightsTextAreaLabel.Position = [54 378 90 22]; + app.FractureHeightsTextAreaLabel.Position = [52 316 90 22]; app.FractureHeightsTextAreaLabel.Text = 'FractureHeights'; % Create FractureHeightsTextArea app.FractureHeightsTextArea = uitextarea(app.FractureTab); - app.FractureHeightsTextArea.Position = [159 342 150 60]; + app.FractureHeightsTextArea.Position = [157 254 234 86]; % Create FlowBarrierFlagsTextAreaLabel app.FlowBarrierFlagsTextAreaLabel = uilabel(app.FractureTab); app.FlowBarrierFlagsTextAreaLabel.HorizontalAlignment = 'right'; - app.FlowBarrierFlagsTextAreaLabel.Position = [48 278 96 22]; + app.FlowBarrierFlagsTextAreaLabel.Position = [50 215 96 22]; app.FlowBarrierFlagsTextAreaLabel.Text = 'FlowBarrierFlags'; % Create FractureFlowBarrierFlagsTextArea app.FractureFlowBarrierFlagsTextArea = uitextarea(app.FractureTab); - app.FractureFlowBarrierFlagsTextArea.Position = [159 242 150 60]; + app.FractureFlowBarrierFlagsTextArea.Position = [161 158 234 81]; % Create DiscretizationTab app.DiscretizationTab = uitab(app.TabGroup); @@ -630,202 +630,202 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create BoundaryTextAreaLabel app.BoundaryTextAreaLabel = uilabel(app.SPTab); app.BoundaryTextAreaLabel.HorizontalAlignment = 'right'; - app.BoundaryTextAreaLabel.Position = [12 541 56 22]; + app.BoundaryTextAreaLabel.Position = [30 553 56 22]; app.BoundaryTextAreaLabel.Text = 'Boundary'; % Create SPBoundaryTextArea app.SPBoundaryTextArea = uitextarea(app.SPTab); - app.SPBoundaryTextArea.Position = [83 505 150 60]; + app.SPBoundaryTextArea.Position = [101 500 150 77]; % Create InvalidLayerTextAreaLabel app.InvalidLayerTextAreaLabel = uilabel(app.SPTab); app.InvalidLayerTextAreaLabel.HorizontalAlignment = 'right'; - app.InvalidLayerTextAreaLabel.Position = [12 458 70 22]; + app.InvalidLayerTextAreaLabel.Position = [19 458 70 22]; app.InvalidLayerTextAreaLabel.Text = 'InvalidLayer'; % Create SPInvalidLayerTextArea app.SPInvalidLayerTextArea = uitextarea(app.SPTab); - app.SPInvalidLayerTextArea.Position = [97 422 150 60]; + app.SPInvalidLayerTextArea.Position = [104 404 150 78]; % Create MatrixKxTextAreaLabel app.MatrixKxTextAreaLabel = uilabel(app.SPTab); app.MatrixKxTextAreaLabel.HorizontalAlignment = 'right'; - app.MatrixKxTextAreaLabel.Position = [266 401 52 22]; + app.MatrixKxTextAreaLabel.Position = [301 548 52 22]; app.MatrixKxTextAreaLabel.Text = 'MatrixKx'; % Create SPMatrixKxTextArea app.SPMatrixKxTextArea = uitextarea(app.SPTab); - app.SPMatrixKxTextArea.Position = [333 365 150 60]; + app.SPMatrixKxTextArea.Position = [368 512 150 60]; % Create MatrixKyTextAreaLabel app.MatrixKyTextAreaLabel = uilabel(app.SPTab); app.MatrixKyTextAreaLabel.HorizontalAlignment = 'right'; - app.MatrixKyTextAreaLabel.Position = [263 323 52 22]; + app.MatrixKyTextAreaLabel.Position = [302 452 52 22]; app.MatrixKyTextAreaLabel.Text = 'MatrixKy'; % Create SPMatrixKyTextArea app.SPMatrixKyTextArea = uitextarea(app.SPTab); - app.SPMatrixKyTextArea.Position = [330 287 150 60]; + app.SPMatrixKyTextArea.Position = [369 416 150 60]; % Create MatrixKzTextAreaLabel app.MatrixKzTextAreaLabel = uilabel(app.SPTab); app.MatrixKzTextAreaLabel.HorizontalAlignment = 'right'; - app.MatrixKzTextAreaLabel.Position = [260 228 52 22]; + app.MatrixKzTextAreaLabel.Position = [301 350 52 22]; app.MatrixKzTextAreaLabel.Text = 'MatrixKz'; % Create SPMatrixKzTextArea app.SPMatrixKzTextArea = uitextarea(app.SPTab); - app.SPMatrixKzTextArea.Position = [327 192 150 60]; + app.SPMatrixKzTextArea.Position = [368 314 150 60]; % Create MatrixPoriTextAreaLabel app.MatrixPoriTextAreaLabel = uilabel(app.SPTab); app.MatrixPoriTextAreaLabel.HorizontalAlignment = 'right'; - app.MatrixPoriTextAreaLabel.Position = [256 128 59 22]; + app.MatrixPoriTextAreaLabel.Position = [294 244 59 22]; app.MatrixPoriTextAreaLabel.Text = 'MatrixPori'; % Create SPMatrixPoriTextArea app.SPMatrixPoriTextArea = uitextarea(app.SPTab); - app.SPMatrixPoriTextArea.Position = [330 92 150 60]; + app.SPMatrixPoriTextArea.Position = [368 208 150 60]; % Create MatrixPrporEditFieldLabel app.MatrixPrporEditFieldLabel = uilabel(app.SPTab); app.MatrixPrporEditFieldLabel.HorizontalAlignment = 'right'; - app.MatrixPrporEditFieldLabel.Position = [289 543 67 22]; + app.MatrixPrporEditFieldLabel.Position = [17 310 67 22]; app.MatrixPrporEditFieldLabel.Text = 'MatrixPrpor'; % Create SPMatrixPrporEditField app.SPMatrixPrporEditField = uieditfield(app.SPTab, 'numeric'); - app.SPMatrixPrporEditField.Position = [371 543 100 22]; + app.SPMatrixPrporEditField.Position = [99 310 148 22]; % Create MatrixCporEditFieldLabel app.MatrixCporEditFieldLabel = uilabel(app.SPTab); app.MatrixCporEditFieldLabel.HorizontalAlignment = 'right'; - app.MatrixCporEditFieldLabel.Position = [292 479 64 22]; + app.MatrixCporEditFieldLabel.Position = [18 263 64 22]; app.MatrixCporEditFieldLabel.Text = 'MatrixCpor'; % Create SPMatrixCporEditField app.SPMatrixCporEditField = uieditfield(app.SPTab, 'numeric'); - app.SPMatrixCporEditField.Position = [371 479 100 22]; + app.SPMatrixCporEditField.Position = [97 263 150 22]; % Create RockDensityEditFieldLabel app.RockDensityEditFieldLabel = uilabel(app.SPTab); app.RockDensityEditFieldLabel.HorizontalAlignment = 'right'; - app.RockDensityEditFieldLabel.Position = [24 360 72 22]; + app.RockDensityEditFieldLabel.Position = [16 358 72 22]; app.RockDensityEditFieldLabel.Text = 'RockDensity'; % Create SPRockDensityEditField app.SPRockDensityEditField = uieditfield(app.SPTab, 'numeric'); - app.SPRockDensityEditField.Position = [111 360 100 22]; + app.SPRockDensityEditField.Position = [103 358 144 22]; % Create FractureKfTextAreaLabel app.FractureKfTextAreaLabel = uilabel(app.SPTab); app.FractureKfTextAreaLabel.HorizontalAlignment = 'right'; - app.FractureKfTextAreaLabel.Position = [540 316 61 22]; + app.FractureKfTextAreaLabel.Position = [289 146 61 22]; app.FractureKfTextAreaLabel.Text = 'FractureKf'; % Create SPFractureKfTextArea app.SPFractureKfTextArea = uitextarea(app.SPTab); - app.SPFractureKfTextArea.Position = [616 280 150 60]; + app.SPFractureKfTextArea.Position = [365 110 150 60]; % Create FractureWfTextAreaLabel app.FractureWfTextAreaLabel = uilabel(app.SPTab); app.FractureWfTextAreaLabel.HorizontalAlignment = 'right'; - app.FractureWfTextAreaLabel.Position = [530 226 64 22]; + app.FractureWfTextAreaLabel.Position = [601 549 64 22]; app.FractureWfTextAreaLabel.Text = 'FractureWf'; % Create SPFractureWfTextArea app.SPFractureWfTextArea = uitextarea(app.SPTab); - app.SPFractureWfTextArea.Position = [609 190 150 60]; + app.SPFractureWfTextArea.Position = [680 513 150 60]; % Create FracturePorfTextAreaLabel app.FracturePorfTextAreaLabel = uilabel(app.SPTab); app.FracturePorfTextAreaLabel.HorizontalAlignment = 'right'; - app.FracturePorfTextAreaLabel.Position = [522 131 72 22]; + app.FracturePorfTextAreaLabel.Position = [601 452 72 22]; app.FracturePorfTextAreaLabel.Text = 'FracturePorf'; % Create SPFracturePorfTextArea app.SPFracturePorfTextArea = uitextarea(app.SPTab); - app.SPFracturePorfTextArea.Position = [609 95 150 60]; + app.SPFracturePorfTextArea.Position = [688 416 150 60]; % Create FractureCporfEditFieldLabel app.FractureCporfEditFieldLabel = uilabel(app.SPTab); app.FractureCporfEditFieldLabel.HorizontalAlignment = 'right'; - app.FractureCporfEditFieldLabel.Position = [523 479 79 22]; + app.FractureCporfEditFieldLabel.Position = [11 213 79 22]; app.FractureCporfEditFieldLabel.Text = 'FractureCporf'; % Create SPFractureCporfEditField app.SPFractureCporfEditField = uieditfield(app.SPTab, 'numeric'); - app.SPFractureCporfEditField.Position = [617 479 100 22]; + app.SPFractureCporfEditField.Position = [105 213 142 22]; % Create FracturePrporEditFieldLabel app.FracturePrporEditFieldLabel = uilabel(app.SPTab); app.FracturePrporEditFieldLabel.HorizontalAlignment = 'right'; - app.FracturePrporEditFieldLabel.Position = [516 422 79 22]; + app.FracturePrporEditFieldLabel.Position = [12 171 79 22]; app.FracturePrporEditFieldLabel.Text = 'FracturePrpor'; % Create SPFracturePrporEditField app.SPFracturePrporEditField = uieditfield(app.SPTab, 'numeric'); - app.SPFracturePrporEditField.Position = [610 422 100 22]; + app.SPFracturePrporEditField.Position = [106 171 140 22]; % Create StressFractureEditFieldLabel app.StressFractureEditFieldLabel = uilabel(app.SPTab); app.StressFractureEditFieldLabel.HorizontalAlignment = 'right'; - app.StressFractureEditFieldLabel.Position = [849 541 84 22]; + app.StressFractureEditFieldLabel.Position = [10 123 84 22]; app.StressFractureEditFieldLabel.Text = 'StressFracture'; % Create SPStressFractureEditField app.SPStressFractureEditField = uieditfield(app.SPTab, 'numeric'); - app.SPStressFractureEditField.Position = [948 541 100 22]; + app.SPStressFractureEditField.Position = [109 123 138 22]; % Create StressMatrixEditFieldLabel app.StressMatrixEditFieldLabel = uilabel(app.SPTab); app.StressMatrixEditFieldLabel.HorizontalAlignment = 'right'; - app.StressMatrixEditFieldLabel.Position = [855 500 72 22]; + app.StressMatrixEditFieldLabel.Position = [17 81 72 22]; app.StressMatrixEditFieldLabel.Text = 'StressMatrix'; % Create SPStressMatrixEditField app.SPStressMatrixEditField = uieditfield(app.SPTab, 'numeric'); - app.SPStressMatrixEditField.Position = [942 500 100 22]; + app.SPStressMatrixEditField.Position = [104 81 142 22]; % Create StressRefPressureEditFieldLabel app.StressRefPressureEditFieldLabel = uilabel(app.SPTab); app.StressRefPressureEditFieldLabel.HorizontalAlignment = 'right'; - app.StressRefPressureEditFieldLabel.Position = [813 445 106 22]; + app.StressRefPressureEditFieldLabel.Position = [-5 41 106 22]; app.StressRefPressureEditFieldLabel.Text = 'StressRefPressure'; % Create SPStressRefPressureEditField app.SPStressRefPressureEditField = uieditfield(app.SPTab, 'numeric'); - app.SPStressRefPressureEditField.Position = [934 445 100 22]; + app.SPStressRefPressureEditField.Position = [116 41 129 22]; % Create RptEditFieldLabel app.RptEditFieldLabel = uilabel(app.SPTab); app.RptEditFieldLabel.HorizontalAlignment = 'right'; - app.RptEditFieldLabel.Position = [879 352 25 22]; + app.RptEditFieldLabel.Position = [621 354 25 22]; app.RptEditFieldLabel.Text = 'Rpt'; % Create SPRptEditField app.SPRptEditField = uieditfield(app.SPTab, 'numeric'); - app.SPRptEditField.Position = [919 352 100 22]; + app.SPRptEditField.Position = [661 354 170 22]; % Create cfEditFieldLabel app.cfEditFieldLabel = uilabel(app.SPTab); app.cfEditFieldLabel.HorizontalAlignment = 'right'; - app.cfEditFieldLabel.Position = [894 302 25 22]; + app.cfEditFieldLabel.Position = [619 303 25 22]; app.cfEditFieldLabel.Text = 'cf'; % Create SPcfEditField app.SPcfEditField = uieditfield(app.SPTab, 'numeric'); - app.SPcfEditField.Position = [934 302 100 22]; + app.SPcfEditField.Position = [659 303 172 22]; % Create caEditFieldLabel app.caEditFieldLabel = uilabel(app.SPTab); app.caEditFieldLabel.HorizontalAlignment = 'right'; - app.caEditFieldLabel.Position = [902 251 25 22]; + app.caEditFieldLabel.Position = [621 244 25 22]; app.caEditFieldLabel.Text = 'ca'; % Create SPcaEditField app.SPcaEditField = uieditfield(app.SPTab, 'numeric'); - app.SPcaEditField.Position = [942 251 100 22]; + app.SPcaEditField.Position = [661 244 165 22]; % Create DPTab app.DPTab = uitab(app.TabGroup3); @@ -1066,12 +1066,12 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create gas_propVLEditFieldLabel app.gas_propVLEditFieldLabel = uilabel(app.GasWaterTab); app.gas_propVLEditFieldLabel.HorizontalAlignment = 'right'; - app.gas_propVLEditFieldLabel.Position = [61 448 73 22]; + app.gas_propVLEditFieldLabel.Position = [39 448 73 22]; app.gas_propVLEditFieldLabel.Text = 'gas_prop.VL'; % Create GWgas_propVLEditField app.GWgas_propVLEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWgas_propVLEditField.Position = [149 448 100 22]; + app.GWgas_propVLEditField.Position = [127 448 122 22]; % Create gas_propPLEditFieldLabel app.gas_propPLEditFieldLabel = uilabel(app.GasWaterTab); @@ -1081,7 +1081,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GWgas_propPLEditField app.GWgas_propPLEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWgas_propPLEditField.Position = [129 407 100 22]; + app.GWgas_propPLEditField.Position = [129 407 119 22]; % Create gas_propKnEditFieldLabel app.gas_propKnEditFieldLabel = uilabel(app.GasWaterTab); @@ -1091,7 +1091,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GWgas_propKnEditField app.GWgas_propKnEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWgas_propKnEditField.Position = [130 364 100 22]; + app.GWgas_propKnEditField.Position = [130 364 118 22]; % Create beta_non_darcy_flowEditFieldLabel app.beta_non_darcy_flowEditFieldLabel = uilabel(app.GasWaterTab); @@ -1111,7 +1111,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GWp_grad_thresholdEditField app.GWp_grad_thresholdEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWp_grad_thresholdEditField.Position = [132 279 100 22]; + app.GWp_grad_thresholdEditField.Position = [132 279 112 22]; % Create density_g_scEditFieldLabel app.density_g_scEditFieldLabel = uilabel(app.GasWaterTab); @@ -1121,7 +1121,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GWdensity_g_scEditField app.GWdensity_g_scEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWdensity_g_scEditField.Position = [126 237 100 22]; + app.GWdensity_g_scEditField.Position = [126 237 119 22]; % Create density_w_scEditFieldLabel app.density_w_scEditFieldLabel = uilabel(app.GasWaterTab); @@ -1131,49 +1131,49 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GWdensity_w_scEditField app.GWdensity_w_scEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWdensity_w_scEditField.Position = [117 200 100 22]; + app.GWdensity_w_scEditField.Position = [117 200 128 22]; % Create gas_modelDropDownLabel app.gas_modelDropDownLabel = uilabel(app.GasWaterTab); app.gas_modelDropDownLabel.HorizontalAlignment = 'right'; - app.gas_modelDropDownLabel.Position = [41 132 64 22]; + app.gas_modelDropDownLabel.Position = [41 156 64 22]; app.gas_modelDropDownLabel.Text = 'gas_model'; % Create GWgas_modelDropDown app.GWgas_modelDropDown = uidropdown(app.GasWaterTab); app.GWgas_modelDropDown.Items = {''}; - app.GWgas_modelDropDown.Position = [120 132 100 22]; + app.GWgas_modelDropDown.Position = [120 156 125 22]; app.GWgas_modelDropDown.Value = ''; % Create prgEditFieldLabel app.prgEditFieldLabel = uilabel(app.GasWaterTab); app.prgEditFieldLabel.HorizontalAlignment = 'right'; - app.prgEditFieldLabel.Position = [332 448 25 22]; + app.prgEditFieldLabel.Position = [68 99 25 22]; app.prgEditFieldLabel.Text = 'prg'; % Create GWprgEditField app.GWprgEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWprgEditField.Position = [372 448 100 22]; + app.GWprgEditField.Position = [108 99 137 22]; % Create BgiEditFieldLabel app.BgiEditFieldLabel = uilabel(app.GasWaterTab); app.BgiEditFieldLabel.HorizontalAlignment = 'right'; - app.BgiEditFieldLabel.Position = [339 407 25 22]; + app.BgiEditFieldLabel.Position = [67 57 25 22]; app.BgiEditFieldLabel.Text = 'Bgi'; % Create GWBgiEditField app.GWBgiEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWBgiEditField.Position = [379 407 100 22]; + app.GWBgiEditField.Position = [107 57 134 22]; % Create cgEditFieldLabel app.cgEditFieldLabel = uilabel(app.GasWaterTab); app.cgEditFieldLabel.HorizontalAlignment = 'right'; - app.cgEditFieldLabel.Position = [338 364 25 22]; + app.cgEditFieldLabel.Position = [66 10 25 22]; app.cgEditFieldLabel.Text = 'cg'; % Create GWcgEditField app.GWcgEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWcgEditField.Position = [378 364 100 22]; + app.GWcgEditField.Position = [106 10 137 22]; % Create vgiEditFieldLabel app.vgiEditFieldLabel = uilabel(app.GasWaterTab); @@ -1183,7 +1183,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GWvgiEditField app.GWvgiEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWvgiEditField.Position = [385 320 100 22]; + app.GWvgiEditField.Position = [385 320 134 22]; % Create cvgEditFieldLabel app.cvgEditFieldLabel = uilabel(app.GasWaterTab); @@ -1193,7 +1193,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create GWcvgEditField app.GWcvgEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWcvgEditField.Position = [379 280 100 22]; + app.GWcvgEditField.Position = [379 280 141 22]; % Create PprTextAreaLabel app.PprTextAreaLabel = uilabel(app.GasWaterTab); @@ -1218,92 +1218,92 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create MUGTextAreaLabel app.MUGTextAreaLabel = uilabel(app.GasWaterTab); app.MUGTextAreaLabel.HorizontalAlignment = 'right'; - app.MUGTextAreaLabel.Position = [329 71 33 22]; + app.MUGTextAreaLabel.Position = [323 66 33 22]; app.MUGTextAreaLabel.Text = 'MUG'; % Create GWMUGTextArea app.GWMUGTextArea = uitextarea(app.GasWaterTab); - app.GWMUGTextArea.Position = [377 35 150 60]; + app.GWMUGTextArea.Position = [371 30 150 60]; % Create prwEditFieldLabel app.prwEditFieldLabel = uilabel(app.GasWaterTab); app.prwEditFieldLabel.HorizontalAlignment = 'right'; - app.prwEditFieldLabel.Position = [598 463 25 22]; + app.prwEditFieldLabel.Position = [344 444 25 22]; app.prwEditFieldLabel.Text = 'prw'; % Create GWprwEditField app.GWprwEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWprwEditField.Position = [638 463 100 22]; + app.GWprwEditField.Position = [384 444 135 22]; % Create BwiEditFieldLabel app.BwiEditFieldLabel = uilabel(app.GasWaterTab); app.BwiEditFieldLabel.HorizontalAlignment = 'right'; - app.BwiEditFieldLabel.Position = [607 424 25 22]; + app.BwiEditFieldLabel.Position = [348 403 25 22]; app.BwiEditFieldLabel.Text = 'Bwi'; % Create GWBwiEditField app.GWBwiEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWBwiEditField.Position = [647 424 100 22]; + app.GWBwiEditField.Position = [388 403 136 22]; % Create cwEditFieldLabel app.cwEditFieldLabel = uilabel(app.GasWaterTab); app.cwEditFieldLabel.HorizontalAlignment = 'right'; - app.cwEditFieldLabel.Position = [599 388 25 22]; + app.cwEditFieldLabel.Position = [349 363 25 22]; app.cwEditFieldLabel.Text = 'cw'; % Create GWcwEditField app.GWcwEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWcwEditField.Position = [639 388 100 22]; + app.GWcwEditField.Position = [389 363 130 22]; % Create vwiEditFieldLabel app.vwiEditFieldLabel = uilabel(app.GasWaterTab); app.vwiEditFieldLabel.HorizontalAlignment = 'right'; - app.vwiEditFieldLabel.Position = [610 353 25 22]; + app.vwiEditFieldLabel.Position = [605 448 25 22]; app.vwiEditFieldLabel.Text = 'vwi'; % Create GWvwiEditField app.GWvwiEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWvwiEditField.Position = [650 353 100 22]; + app.GWvwiEditField.Position = [645 448 100 22]; % Create cvwEditFieldLabel app.cvwEditFieldLabel = uilabel(app.GasWaterTab); app.cvwEditFieldLabel.HorizontalAlignment = 'right'; - app.cvwEditFieldLabel.Position = [619 313 26 22]; + app.cvwEditFieldLabel.Position = [603 399 26 22]; app.cvwEditFieldLabel.Text = 'cvw'; % Create GWcvwEditField app.GWcvwEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWcvwEditField.Position = [660 313 100 22]; + app.GWcvwEditField.Position = [644 399 100 22]; % Create ifpcglEditFieldLabel app.ifpcglEditFieldLabel = uilabel(app.GasWaterTab); app.ifpcglEditFieldLabel.HorizontalAlignment = 'right'; - app.ifpcglEditFieldLabel.Position = [614 273 33 22]; + app.ifpcglEditFieldLabel.Position = [596 353 33 22]; app.ifpcglEditFieldLabel.Text = 'ifpcgl'; % Create GWifpcglEditField app.GWifpcglEditField = uieditfield(app.GasWaterTab, 'numeric'); - app.GWifpcglEditField.Position = [662 273 100 22]; + app.GWifpcglEditField.Position = [644 353 100 22]; % Create RPGWTextAreaLabel app.RPGWTextAreaLabel = uilabel(app.GasWaterTab); app.RPGWTextAreaLabel.HorizontalAlignment = 'right'; - app.RPGWTextAreaLabel.Position = [586 234 42 22]; + app.RPGWTextAreaLabel.Position = [590 304 42 22]; app.RPGWTextAreaLabel.Text = 'RPGW'; % Create GWRPGWTextArea app.GWRPGWTextArea = uitextarea(app.GasWaterTab); - app.GWRPGWTextArea.Position = [643 198 150 60]; + app.GWRPGWTextArea.Position = [647 268 150 60]; % Create PRFTextAreaLabel app.PRFTextAreaLabel = uilabel(app.GasWaterTab); app.PRFTextAreaLabel.HorizontalAlignment = 'right'; - app.PRFTextAreaLabel.Position = [597 158 29 22]; + app.PRFTextAreaLabel.Position = [603 223 29 22]; app.PRFTextAreaLabel.Text = 'PRF'; % Create GWPRFTextArea app.GWPRFTextArea = uitextarea(app.GasWaterTab); - app.GWPRFTextArea.Position = [641 122 150 60]; + app.GWPRFTextArea.Position = [647 187 150 60]; % Create OilWaterTab app.OilWaterTab = uitab(app.TabGroup2); @@ -1344,12 +1344,12 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create proEditFieldLabel app.proEditFieldLabel = uilabel(app.OilWaterTab); app.proEditFieldLabel.HorizontalAlignment = 'right'; - app.proEditFieldLabel.Position = [67 332 25 22]; + app.proEditFieldLabel.Position = [69 330 25 22]; app.proEditFieldLabel.Text = 'pro'; % Create OWproEditField app.OWproEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWproEditField.Position = [107 332 100 22]; + app.OWproEditField.Position = [109 330 100 22]; % Create BoiEditFieldLabel app.BoiEditFieldLabel = uilabel(app.OilWaterTab); @@ -1359,7 +1359,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create OWBoiEditField app.OWBoiEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWBoiEditField.Position = [100 294 100 22]; + app.OWBoiEditField.Position = [100 294 112 22]; % Create coEditFieldLabel app.coEditFieldLabel = uilabel(app.OilWaterTab); @@ -1369,7 +1369,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create OWcoEditField app.OWcoEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWcoEditField.Position = [101 258 100 22]; + app.OWcoEditField.Position = [101 258 111 22]; % Create voiEditFieldLabel app.voiEditFieldLabel = uilabel(app.OilWaterTab); @@ -1379,7 +1379,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create OWvoiEditField app.OWvoiEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWvoiEditField.Position = [100 219 100 22]; + app.OWvoiEditField.Position = [100 219 110 22]; % Create cvoEditFieldLabel app.cvoEditFieldLabel = uilabel(app.OilWaterTab); @@ -1389,117 +1389,117 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create OWcvoEditField app.OWcvoEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWcvoEditField.Position = [96 183 100 22]; + app.OWcvoEditField.Position = [96 183 112 22]; % Create PprTextAreaLabel_2 app.PprTextAreaLabel_2 = uilabel(app.OilWaterTab); app.PprTextAreaLabel_2.HorizontalAlignment = 'right'; - app.PprTextAreaLabel_2.Position = [44 144 25 22]; + app.PprTextAreaLabel_2.Position = [20 143 25 22]; app.PprTextAreaLabel_2.Text = 'Ppr'; % Create OWPprTextArea app.OWPprTextArea = uitextarea(app.OilWaterTab); - app.OWPprTextArea.Position = [84 108 150 60]; + app.OWPprTextArea.Position = [60 107 150 60]; % Create BOTextAreaLabel app.BOTextAreaLabel = uilabel(app.OilWaterTab); app.BOTextAreaLabel.HorizontalAlignment = 'right'; - app.BOTextAreaLabel.Position = [60 68 25 22]; + app.BOTextAreaLabel.Position = [20 57 25 22]; app.BOTextAreaLabel.Text = 'BO'; % Create OWBOTextArea app.OWBOTextArea = uitextarea(app.OilWaterTab); - app.OWBOTextArea.Position = [100 32 150 60]; + app.OWBOTextArea.Position = [60 21 150 60]; % Create MUOTextAreaLabel app.MUOTextAreaLabel = uilabel(app.OilWaterTab); app.MUOTextAreaLabel.HorizontalAlignment = 'right'; - app.MUOTextAreaLabel.Position = [352 464 33 22]; + app.MUOTextAreaLabel.Position = [303 464 33 22]; app.MUOTextAreaLabel.Text = 'MUO'; % Create OWMUOTextArea app.OWMUOTextArea = uitextarea(app.OilWaterTab); - app.OWMUOTextArea.Position = [400 428 150 60]; + app.OWMUOTextArea.Position = [351 428 150 60]; % Create prwEditFieldLabel_2 app.prwEditFieldLabel_2 = uilabel(app.OilWaterTab); app.prwEditFieldLabel_2.HorizontalAlignment = 'right'; - app.prwEditFieldLabel_2.Position = [321 338 25 22]; + app.prwEditFieldLabel_2.Position = [325 383 25 22]; app.prwEditFieldLabel_2.Text = 'prw'; % Create OWprwEditField app.OWprwEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWprwEditField.Position = [361 338 100 22]; + app.OWprwEditField.Position = [365 383 136 22]; % Create BwiEditFieldLabel_2 app.BwiEditFieldLabel_2 = uilabel(app.OilWaterTab); app.BwiEditFieldLabel_2.HorizontalAlignment = 'right'; - app.BwiEditFieldLabel_2.Position = [325 290 25 22]; + app.BwiEditFieldLabel_2.Position = [328 336 25 22]; app.BwiEditFieldLabel_2.Text = 'Bwi'; % Create OWBwiEditField app.OWBwiEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWBwiEditField.Position = [365 290 100 22]; + app.OWBwiEditField.Position = [368 336 133 22]; % Create cwEditFieldLabel_2 app.cwEditFieldLabel_2 = uilabel(app.OilWaterTab); app.cwEditFieldLabel_2.HorizontalAlignment = 'right'; - app.cwEditFieldLabel_2.Position = [336 237 25 22]; + app.cwEditFieldLabel_2.Position = [325 286 25 22]; app.cwEditFieldLabel_2.Text = 'cw'; % Create OWcwEditField app.OWcwEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWcwEditField.Position = [376 237 100 22]; + app.OWcwEditField.Position = [365 286 133 22]; % Create vwiEditFieldLabel_2 app.vwiEditFieldLabel_2 = uilabel(app.OilWaterTab); app.vwiEditFieldLabel_2.HorizontalAlignment = 'right'; - app.vwiEditFieldLabel_2.Position = [332 179 25 22]; + app.vwiEditFieldLabel_2.Position = [325 236 25 22]; app.vwiEditFieldLabel_2.Text = 'vwi'; % Create OWvwiEditField app.OWvwiEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWvwiEditField.Position = [372 179 100 22]; + app.OWvwiEditField.Position = [365 236 132 22]; % Create cvwEditFieldLabel_2 app.cvwEditFieldLabel_2 = uilabel(app.OilWaterTab); app.cvwEditFieldLabel_2.HorizontalAlignment = 'right'; - app.cvwEditFieldLabel_2.Position = [335 141 26 22]; + app.cvwEditFieldLabel_2.Position = [325 187 26 22]; app.cvwEditFieldLabel_2.Text = 'cvw'; % Create OWcvwEditField app.OWcvwEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWcvwEditField.Position = [376 141 100 22]; + app.OWcvwEditField.Position = [366 187 129 22]; % Create ifpcowEditFieldLabel app.ifpcowEditFieldLabel = uilabel(app.OilWaterTab); app.ifpcowEditFieldLabel.HorizontalAlignment = 'right'; - app.ifpcowEditFieldLabel.Position = [329 94 39 22]; + app.ifpcowEditFieldLabel.Position = [324 139 39 22]; app.ifpcowEditFieldLabel.Text = 'ifpcow'; % Create OWifpcowEditField app.OWifpcowEditField = uieditfield(app.OilWaterTab, 'numeric'); - app.OWifpcowEditField.Position = [383 94 100 22]; + app.OWifpcowEditField.Position = [378 139 120 22]; % Create PRMTextAreaLabel app.PRMTextAreaLabel = uilabel(app.OilWaterTab); app.PRMTextAreaLabel.HorizontalAlignment = 'right'; - app.PRMTextAreaLabel.Position = [376 48 32 22]; + app.PRMTextAreaLabel.Position = [305 76 32 22]; app.PRMTextAreaLabel.Text = 'PRM'; % Create OWPRMTextArea app.OWPRMTextArea = uitextarea(app.OilWaterTab); - app.OWPRMTextArea.Position = [423 12 150 60]; + app.OWPRMTextArea.Position = [352 40 150 60]; % Create PRFTextAreaLabel_2 app.PRFTextAreaLabel_2 = uilabel(app.OilWaterTab); app.PRFTextAreaLabel_2.HorizontalAlignment = 'right'; - app.PRFTextAreaLabel_2.Position = [674 463 29 22]; + app.PRFTextAreaLabel_2.Position = [603 469 29 22]; app.PRFTextAreaLabel_2.Text = 'PRF'; % Create OWPRFTextArea app.OWPRFTextArea = uitextarea(app.OilWaterTab); - app.OWPRFTextArea.Position = [718 427 150 60]; + app.OWPRFTextArea.Position = [647 433 150 60]; % Create beta_non_Darcy_flowEditFieldLabel app.beta_non_Darcy_flowEditFieldLabel = uilabel(app.OilWaterTab); @@ -1533,47 +1533,47 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create MCDsEditField app.MCDsEditField = uieditfield(app.MultiComponentTab, 'numeric'); - app.MCDsEditField.Position = [94 470 100 22]; + app.MCDsEditField.Position = [94 470 136 22]; % Create DbEditFieldLabel app.DbEditFieldLabel = uilabel(app.MultiComponentTab); app.DbEditFieldLabel.HorizontalAlignment = 'right'; - app.DbEditFieldLabel.Position = [67 430 25 22]; + app.DbEditFieldLabel.Position = [48 430 25 22]; app.DbEditFieldLabel.Text = 'Db'; % Create MCDbEditField app.MCDbEditField = uieditfield(app.MultiComponentTab, 'numeric'); - app.MCDbEditField.Position = [107 430 100 22]; + app.MCDbEditField.Position = [88 430 138 22]; % Create c_ca_tableTextAreaLabel app.c_ca_tableTextAreaLabel = uilabel(app.MultiComponentTab); app.c_ca_tableTextAreaLabel.HorizontalAlignment = 'right'; - app.c_ca_tableTextAreaLabel.Position = [24 389 63 22]; + app.c_ca_tableTextAreaLabel.Position = [-2 386 63 22]; app.c_ca_tableTextAreaLabel.Text = 'c_ca_table'; % Create MCc_ca_tableTextArea app.MCc_ca_tableTextArea = uitextarea(app.MultiComponentTab); - app.MCc_ca_tableTextArea.Position = [102 353 150 60]; + app.MCc_ca_tableTextArea.Position = [76 350 150 60]; % Create REditFieldLabel app.REditFieldLabel = uilabel(app.MultiComponentTab); app.REditFieldLabel.HorizontalAlignment = 'right'; - app.REditFieldLabel.Position = [74 319 25 22]; + app.REditFieldLabel.Position = [44 312 25 22]; app.REditFieldLabel.Text = 'R'; % Create MCREditField app.MCREditField = uieditfield(app.MultiComponentTab, 'numeric'); - app.MCREditField.Position = [114 319 100 22]; + app.MCREditField.Position = [84 312 139 22]; % Create VmEditFieldLabel app.VmEditFieldLabel = uilabel(app.MultiComponentTab); app.VmEditFieldLabel.HorizontalAlignment = 'right'; - app.VmEditFieldLabel.Position = [72 277 25 22]; + app.VmEditFieldLabel.Position = [45 277 25 22]; app.VmEditFieldLabel.Text = 'Vm'; % Create MCVmEditField app.MCVmEditField = uieditfield(app.MultiComponentTab, 'numeric'); - app.MCVmEditField.Position = [112 277 100 22]; + app.MCVmEditField.Position = [85 277 138 22]; % Create TemperatureEditFieldLabel app.TemperatureEditFieldLabel = uilabel(app.MultiComponentTab); @@ -1588,82 +1588,82 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create cs_NcTextAreaLabel app.cs_NcTextAreaLabel = uilabel(app.MultiComponentTab); app.cs_NcTextAreaLabel.HorizontalAlignment = 'right'; - app.cs_NcTextAreaLabel.Position = [39 198 38 22]; + app.cs_NcTextAreaLabel.Position = [16 198 38 22]; app.cs_NcTextAreaLabel.Text = 'cs_Nc'; % Create MCcs_NcTextArea app.MCcs_NcTextArea = uitextarea(app.MultiComponentTab); - app.MCcs_NcTextArea.Position = [92 162 150 60]; + app.MCcs_NcTextArea.Position = [69 162 150 60]; % Create kr_nosurfTextAreaLabel app.kr_nosurfTextAreaLabel = uilabel(app.MultiComponentTab); app.kr_nosurfTextAreaLabel.HorizontalAlignment = 'right'; - app.kr_nosurfTextAreaLabel.Position = [20 128 55 22]; + app.kr_nosurfTextAreaLabel.Position = [2 127 55 22]; app.kr_nosurfTextAreaLabel.Text = 'kr_nosurf'; % Create MCkr_nosurfTextArea app.MCkr_nosurfTextArea = uitextarea(app.MultiComponentTab); - app.MCkr_nosurfTextArea.Position = [90 92 150 60]; + app.MCkr_nosurfTextArea.Position = [72 91 150 60]; % Create kr_surfTextAreaLabel app.kr_surfTextAreaLabel = uilabel(app.MultiComponentTab); app.kr_surfTextAreaLabel.HorizontalAlignment = 'right'; - app.kr_surfTextAreaLabel.Position = [36 57 42 22]; + app.kr_surfTextAreaLabel.Position = [16 55 42 22]; app.kr_surfTextAreaLabel.Text = 'kr_surf'; % Create MCkr_surfTextArea app.MCkr_surfTextArea = uitextarea(app.MultiComponentTab); - app.MCkr_surfTextArea.Position = [93 21 150 60]; + app.MCkr_surfTextArea.Position = [73 19 150 60]; % Create PCTextAreaLabel app.PCTextAreaLabel = uilabel(app.MultiComponentTab); app.PCTextAreaLabel.HorizontalAlignment = 'right'; - app.PCTextAreaLabel.Position = [323 468 25 22]; + app.PCTextAreaLabel.Position = [304 468 25 22]; app.PCTextAreaLabel.Text = 'PC'; % Create MCPCTextArea app.MCPCTextArea = uitextarea(app.MultiComponentTab); - app.MCPCTextArea.Position = [363 432 150 60]; + app.MCPCTextArea.Position = [344 432 150 60]; % Create cs_Nc_fractureTextAreaLabel app.cs_Nc_fractureTextAreaLabel = uilabel(app.MultiComponentTab); app.cs_Nc_fractureTextAreaLabel.HorizontalAlignment = 'right'; - app.cs_Nc_fractureTextAreaLabel.Position = [257 400 86 22]; + app.cs_Nc_fractureTextAreaLabel.Position = [244 400 86 22]; app.cs_Nc_fractureTextAreaLabel.Text = 'cs_Nc_fracture'; % Create MCcs_Nc_fractureTextArea app.MCcs_Nc_fractureTextArea = uitextarea(app.MultiComponentTab); - app.MCcs_Nc_fractureTextArea.Position = [358 364 150 60]; + app.MCcs_Nc_fractureTextArea.Position = [345 370 150 54]; % Create kr_nosurf_fractureTextAreaLabel app.kr_nosurf_fractureTextAreaLabel = uilabel(app.MultiComponentTab); app.kr_nosurf_fractureTextAreaLabel.HorizontalAlignment = 'right'; - app.kr_nosurf_fractureTextAreaLabel.Position = [238 334 102 22]; + app.kr_nosurf_fractureTextAreaLabel.Position = [229 336 102 22]; app.kr_nosurf_fractureTextAreaLabel.Text = 'kr_nosurf_fracture'; % Create MCkr_nosurf_fractureTextArea app.MCkr_nosurf_fractureTextArea = uitextarea(app.MultiComponentTab); - app.MCkr_nosurf_fractureTextArea.Position = [355 298 150 60]; + app.MCkr_nosurf_fractureTextArea.Position = [346 305 150 55]; % Create kr_surf_fractureTextAreaLabel app.kr_surf_fractureTextAreaLabel = uilabel(app.MultiComponentTab); app.kr_surf_fractureTextAreaLabel.HorizontalAlignment = 'right'; - app.kr_surf_fractureTextAreaLabel.Position = [249 267 89 22]; + app.kr_surf_fractureTextAreaLabel.Position = [241 270 89 22]; app.kr_surf_fractureTextAreaLabel.Text = 'kr_surf_fracture'; % Create MCkr_surf_fractureTextArea app.MCkr_surf_fractureTextArea = uitextarea(app.MultiComponentTab); - app.MCkr_surf_fractureTextArea.Position = [353 231 150 60]; + app.MCkr_surf_fractureTextArea.Position = [345 242 150 52]; % Create PC_fractureTextAreaLabel app.PC_fractureTextAreaLabel = uilabel(app.MultiComponentTab); app.PC_fractureTextAreaLabel.HorizontalAlignment = 'right'; - app.PC_fractureTextAreaLabel.Position = [265 198 69 22]; + app.PC_fractureTextAreaLabel.Position = [260 204 69 22]; app.PC_fractureTextAreaLabel.Text = 'PC_fracture'; % Create MCPC_fractureTextArea app.MCPC_fractureTextArea = uitextarea(app.MultiComponentTab); - app.MCPC_fractureTextArea.Position = [349 162 150 60]; + app.MCPC_fractureTextArea.Position = [344 176 150 52]; % Create ifpcglEditFieldLabel_2 app.ifpcglEditFieldLabel_2 = uilabel(app.MultiComponentTab); @@ -1830,22 +1830,22 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create PprTextAreaLabel_3 app.PprTextAreaLabel_3 = uilabel(app.MultiComponentTab); app.PprTextAreaLabel_3.HorizontalAlignment = 'right'; - app.PprTextAreaLabel_3.Position = [560 114 25 22]; + app.PprTextAreaLabel_3.Position = [565 109 25 22]; app.PprTextAreaLabel_3.Text = 'Ppr'; % Create MCPprTextArea app.MCPprTextArea = uitextarea(app.MultiComponentTab); - app.MCPprTextArea.Position = [600 78 150 60]; + app.MCPprTextArea.Position = [605 73 150 60]; % Create BGTextAreaLabel_2 app.BGTextAreaLabel_2 = uilabel(app.MultiComponentTab); app.BGTextAreaLabel_2.HorizontalAlignment = 'right'; - app.BGTextAreaLabel_2.Position = [559 46 25 22]; + app.BGTextAreaLabel_2.Position = [569 42 25 22]; app.BGTextAreaLabel_2.Text = 'BG'; % Create MCBGTextArea app.MCBGTextArea = uitextarea(app.MultiComponentTab); - app.MCBGTextArea.Position = [599 10 150 60]; + app.MCBGTextArea.Position = [609 6 150 60]; % Create MUGTextAreaLabel_2 app.MUGTextAreaLabel_2 = uilabel(app.MultiComponentTab); @@ -1919,7 +1919,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create InitStatusLabel app.InitStatusLabel = uilabel(app.FlowTab); - app.InitStatusLabel.Position = [87 645 79 22]; + app.InitStatusLabel.Position = [87 645 167 22]; app.InitStatusLabel.Text = 'InitStatus'; % Create InitialPressureEditFieldLabel @@ -1976,19 +1976,19 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase app.FractureWellLocationTable = uitable(app.WellsTab); app.FractureWellLocationTable.ColumnName = {'FractureWellLocation'}; app.FractureWellLocationTable.RowName = {}; - app.FractureWellLocationTable.Position = [42 255 302 185]; + app.FractureWellLocationTable.Position = [42 255 366 185]; % Create Well2Table app.Well2Table = uitable(app.WellsTab); app.Well2Table.ColumnName = {'Well2'}; app.Well2Table.RowName = {}; - app.Well2Table.Position = [567 470 302 185]; + app.Well2Table.Position = [516 470 353 185]; % Create ScheduleTable app.ScheduleTable = uitable(app.WellsTab); app.ScheduleTable.ColumnName = {'Schedule'}; app.ScheduleTable.RowName = {}; - app.ScheduleTable.Position = [567 243 302 185]; + app.ScheduleTable.Position = [516 243 362 185]; % Create TimeTextAreaLabel app.TimeTextAreaLabel = uilabel(app.WellsTab); @@ -2096,16 +2096,16 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create RunLogTextAreaLabel app.RunLogTextAreaLabel = uilabel(app.RunTab); app.RunLogTextAreaLabel.HorizontalAlignment = 'right'; - app.RunLogTextAreaLabel.Position = [137 324 47 22]; + app.RunLogTextAreaLabel.Position = [16 530 47 22]; app.RunLogTextAreaLabel.Text = 'RunLog'; % Create RunLogTextArea app.RunLogTextArea = uitextarea(app.RunTab); - app.RunLogTextArea.Position = [199 288 150 60]; + app.RunLogTextArea.Position = [78 109 899 445]; % Create RunProgressLabel app.RunProgressLabel = uilabel(app.RunTab); - app.RunProgressLabel.Position = [135 167 75 22]; + app.RunProgressLabel.Position = [309 600 209 22]; app.RunProgressLabel.Text = 'RunProgress'; % Create ResultsTab @@ -2118,7 +2118,7 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase xlabel(app.ResultAxes, 'X') ylabel(app.ResultAxes, 'Y') zlabel(app.ResultAxes, 'Z') - app.ResultAxes.Position = [99 342 300 185]; + app.ResultAxes.Position = [83 262 300 185]; % Create ResultSummaryTextAreaLabel app.ResultSummaryTextAreaLabel = uilabel(app.ResultsTab); @@ -2128,34 +2128,34 @@ classdef EDFM_Simulator_App < matlab.apps.AppBase % Create ResultSummaryTextArea app.ResultSummaryTextArea = uitextarea(app.ResultsTab); - app.ResultSummaryTextArea.Position = [133 590 150 60]; + app.ResultSummaryTextArea.Position = [133 542 260 108]; % Create ResultTypeDropDownLabel app.ResultTypeDropDownLabel = uilabel(app.ResultsTab); app.ResultTypeDropDownLabel.HorizontalAlignment = 'right'; - app.ResultTypeDropDownLabel.Position = [444 609 65 22]; + app.ResultTypeDropDownLabel.Position = [838 638 65 22]; app.ResultTypeDropDownLabel.Text = 'ResultType'; % Create ResultTypeDropDown app.ResultTypeDropDown = uidropdown(app.ResultsTab); - app.ResultTypeDropDown.Position = [524 609 100 22]; + app.ResultTypeDropDown.Position = [918 638 100 22]; % Create PlotResultButton app.PlotResultButton = uibutton(app.ResultsTab, 'push'); app.PlotResultButton.ButtonPushedFcn = createCallbackFcn(app, @onPlotResult, true); - app.PlotResultButton.Position = [477 559 100 23]; + app.PlotResultButton.Position = [920 575 100 23]; app.PlotResultButton.Text = 'PlotResult'; % Create ResultTab app.ResultTab = uitable(app.ResultsTab); app.ResultTab.ColumnName = {'Result'}; app.ResultTab.RowName = {}; - app.ResultTab.Position = [524 275 302 185]; + app.ResultTab.Position = [469 265 302 185]; % Create NewConfigButton app.NewConfigButton = uibutton(app.UIFigure, 'push'); app.NewConfigButton.ButtonPushedFcn = createCallbackFcn(app, @onNewConfig, true); - app.NewConfigButton.Position = [284 774 94 23]; + app.NewConfigButton.Position = [292 773 94 23]; app.NewConfigButton.Text = 'New Config'; % Show the figure after all components are created diff --git a/gui_support/app/111results.mat b/gui_support/app/results1.mat similarity index 100% rename from gui_support/app/111results.mat rename to gui_support/app/results1.mat diff --git a/gui_support/results/get_case_plot_actions.m b/gui_support/results/get_case_plot_actions.m new file mode 100644 index 0000000..6edac3f --- /dev/null +++ b/gui_support/results/get_case_plot_actions.m @@ -0,0 +1,46 @@ +function actions = get_case_plot_actions(config) +%GET_CASE_PLOT_ACTIONS Return available legacy plot actions for a case. + +case_id = lower(string(config.meta.case_id)); + +base_actions = struct( ... + 'id', "plot_well_response", ... + 'label', "Well Response", ... + 'script', "plotWellResponse", ... + 'description', "Plot the legacy well response figure."); + +actions = base_actions; + +switch case_id + case "case01" + actions(end + 1) = make_action("plot_2d_layer", "2D Layer", "plot_2D_layer", "Plot the default 2D layer pressure map."); %#ok + actions(end + 1) = make_action("plot_3d_distribution", "3D Distribution", "plot_3D_dis", "Plot the default 3D distribution map."); %#ok + actions(end + 1) = make_action("plot_perm", "Permeability", "plot_perm", "Plot the permeability layer map."); %#ok + case "case02" + actions(end + 1) = make_action("plot_2d_layer", "2D Layer", "plot_2D_layer", "Plot the default 2D layer pressure map."); %#ok + actions(end + 1) = make_action("plot_3d_distribution", "3D Distribution", "plot_3D_dis", "Plot the default 3D distribution map."); %#ok + case "case03" + actions(end + 1) = make_action("plot_2d_layer", "2D Layer", "plot_2D_layer", "Plot the default 2D layer pressure map."); %#ok + actions(end + 1) = make_action("plot_3d_distribution", "3D Distribution", "plot_3D_dis", "Plot the default 3D distribution map."); %#ok + actions(end + 1) = make_action("plot_sp_dp", "SP/DP Map", "plot_SP_DP", "Plot the SP/DP shape-factor map."); %#ok + case "case04" + % well response only + case "case05" + % well response only + case "case06" + actions(end + 1) = make_action("plot_2d_layer", "2D Layer", "plot_2D_layer", "Plot the default 2D layer pressure map."); %#ok + actions(end + 1) = make_action("plot_3d_distribution", "3D Distribution", "plot_3D_dis", "Plot the default 3D distribution map."); %#ok + case "case07" + % well response only + otherwise + % no additional actions +end +end + +function action = make_action(id, label, script, description) +action = struct( ... + 'id', string(id), ... + 'label', string(label), ... + 'script', string(script), ... + 'description', string(description)); +end diff --git a/gui_support/results/render_case_plot_in_axes.m b/gui_support/results/render_case_plot_in_axes.m new file mode 100644 index 0000000..a32aa4f --- /dev/null +++ b/gui_support/results/render_case_plot_in_axes.m @@ -0,0 +1,261 @@ +function render_case_plot_in_axes(ax, config, results, action_id, options) +%RENDER_CASE_PLOT_IN_AXES Render a legacy plot directly into UIAxes. + +arguments + ax + config (1,1) struct + results (1,1) struct + action_id + options struct = struct() +end + +action_id = lower(string(action_id)); +cla(ax); + +switch action_id + case "plot_well_response" + render_well_response(ax, results, options); + case "plot_2d_layer" + render_2d_layer(ax, config, results, options); + case "plot_3d_distribution" + render_3d_distribution(ax, config, results, options); + case "plot_sp_dp" + render_sp_dp(ax, results, options); + case "plot_perm" + render_perm(ax, results, options); + otherwise + error('render_case_plot_in_axes:UnsupportedAction', ... + 'Unsupported plot action: %s', string(action_id)); +end +end + +function render_well_response(ax, results, options) +times = results.Times(:); +wellpara = results.Wellpara; +well_index = get_option(options, 'well_index', 1); +metric = upper(string(get_option(options, 'metric', "BHP"))); + +set(ax, 'XScale', 'linear', 'YScale', 'linear'); + +if isempty(wellpara) + error('render_case_plot_in_axes:NoWellpara', 'Well response data is empty.'); +end + +n = numel(times); +data = zeros(n, 1); +switch metric + case "GPR" + field_name = 'qg'; + y_label = 'Gas production rate, m^3/d'; + for i = 1:n, data(i) = wellpara{i}{1, well_index}.(field_name); end + plot(ax, times, data, 'k^-', 'LineWidth', 1.2); + case "OPR" + field_name = 'qo'; + y_label = 'Oil production rate, m^3/d'; + for i = 1:n, data(i) = wellpara{i}{1, well_index}.(field_name); end + plot(ax, times, data, 'k^-', 'LineWidth', 1.2); + case "WPR" + field_name = 'qw'; + y_label = 'Water production rate, m^3/d'; + for i = 1:n, data(i) = wellpara{i}{1, well_index}.(field_name); end + plot(ax, times, data, 'k^-', 'LineWidth', 1.2); + case "DPWF" + y_label = 'Pressure derivative, MPa'; + for i = 1:n + if i == 1 + data(i) = (wellpara{i + 1}{1, well_index}.pwf - wellpara{i}{1, well_index}.pwf) / ... + (log(times(i + 1)) - log(times(i))); + elseif i == n + data(i) = (wellpara{i}{1, well_index}.pwf - wellpara{i - 1}{1, well_index}.pwf) / ... + (log(times(i)) - log(times(i - 1))); + else + data(i) = (wellpara{i + 1}{1, well_index}.pwf - wellpara{i - 1}{1, well_index}.pwf) / ... + (log(times(i + 1)) - log(times(i - 1))); + end + end + plot(ax, times, data, 'k^-', 'LineWidth', 1.2); + set(ax, 'XScale', 'log', 'YScale', 'log'); + otherwise + field_name = 'pwf'; + y_label = 'BHP, MPa'; + for i = 1:n, data(i) = wellpara{i}{1, well_index}.(field_name); end + plot(ax, times, data, 'k^-', 'LineWidth', 1.2); +end + +grid(ax, 'on'); +xlabel(ax, 'Time, day'); +ylabel(ax, y_label); +title(ax, sprintf('Well Response: well %d, %s', well_index, metric)); +end + +function render_2d_layer(ax, config, results, options) +r = results.r; +output = results.OutputRs{get_option(options, 'time_step', numel(results.OutputRs))}; +layer_index = get_option(options, 'layer_index', 1); +property_id = string(get_option(options, 'property_id', "pressure")); +values = extract_plot_values(config, output, property_id); + +coordinate = r.coordinates; +nodes = r.nodes; +nz = r.nz; +nx = r.nx; +ny = r.ny; +nel = 4; + +dis = zeros(nel, nx * ny); +x = zeros(nel, nx * ny); +y = zeros(nel, nx * ny); +for i = 1:nx * ny + grid_numbering = i + (nz - layer_index) * nx * ny; + for j = 1:nel + x(j, i) = coordinate(nodes(grid_numbering, j), 1); + y(j, i) = coordinate(nodes(grid_numbering, j), 2); + if j == 3 + x(j, i) = coordinate(nodes(grid_numbering, 4), 1); + y(j, i) = coordinate(nodes(grid_numbering, 4), 2); + elseif j == 4 + x(j, i) = coordinate(nodes(grid_numbering, 3), 1); + y(j, i) = coordinate(nodes(grid_numbering, 3), 2); + end + dis(j, i) = values(grid_numbering); + end +end + +fill(ax, x, y, dis, 'EdgeColor', 'interp'); +axis(ax, 'equal'); +axis(ax, 'tight'); +colormap(ax, jet); +colorbar(ax); +xlabel(ax, 'x, m'); +ylabel(ax, 'y, m'); +title(ax, sprintf('2D Layer: layer %d, %s', layer_index, char(property_id))); +end + +function render_3d_distribution(ax, config, results, options) +r = results.r; +output = results.OutputRs{get_option(options, 'time_step', numel(results.OutputRs))}; +property_id = string(get_option(options, 'property_id', "pressure")); +v = extract_plot_values(config, output, property_id); + +[downgrid, frontgrid, leftgrid, rightgrid, backgrid, upgrid] = preplot_dis(r); +coordinate = r.coordinates; +nodes = r.nodes; + +hold(ax, 'on'); +draw_surface(ax, downgrid, [1,2,4,3,1], coordinate, nodes, v); +draw_surface(ax, leftgrid, [1,5,7,3,1], coordinate, nodes, v); +draw_surface(ax, rightgrid, [2,4,8,6,2], coordinate, nodes, v); +draw_surface(ax, frontgrid, [1,2,6,5,1], coordinate, nodes, v); +draw_surface(ax, backgrid, [3,4,8,7,3], coordinate, nodes, v); +draw_surface(ax, upgrid, [5,6,8,7,5], coordinate, nodes, v); +hold(ax, 'off'); + +colormap(ax, jet); +colorbar(ax); +xlabel(ax, 'x, m'); +ylabel(ax, 'y, m'); +zlabel(ax, 'z, m'); +title(ax, sprintf('3D Distribution: %s', char(property_id))); +view(ax, 3); +grid(ax, 'on'); +axis(ax, 'tight'); +end + +function render_sp_dp(ax, results, options) +r = results.r; +layer_index = get_option(options, 'layer_index', 1); +render_static_layer_map(ax, r, r.sigma, layer_index, 'SP/DP Sigma'); +end + +function render_perm(ax, results, options) +r = results.r; +layer_index = get_option(options, 'layer_index', 1); +render_static_layer_map(ax, r, r.kx, layer_index, 'Permeability'); +end + +function render_static_layer_map(ax, r, values, layer_index, title_text) +coordinate = r.coordinates; +nodes = r.nodes; +nz = r.nz; +nx = r.nx; +ny = r.ny; +nel = 4; + +dis = zeros(nel, nx * ny); +x = zeros(nel, nx * ny); +y = zeros(nel, nx * ny); +for i = 1:nx * ny + grid_numbering = i + (nz - layer_index) * nx * ny; + for j = 1:nel + x(j, i) = coordinate(nodes(grid_numbering, j), 1); + y(j, i) = coordinate(nodes(grid_numbering, j), 2); + if j == 3 + x(j, i) = coordinate(nodes(grid_numbering, 4), 1); + y(j, i) = coordinate(nodes(grid_numbering, 4), 2); + elseif j == 4 + x(j, i) = coordinate(nodes(grid_numbering, 3), 1); + y(j, i) = coordinate(nodes(grid_numbering, 3), 2); + end + dis(j, i) = values(grid_numbering); + end +end + +fill(ax, x, y, dis, 'EdgeColor', 'interp'); +axis(ax, 'equal'); +axis(ax, 'tight'); +colormap(ax, jet); +colorbar(ax); +xlabel(ax, 'x, m'); +ylabel(ax, 'y, m'); +title(ax, sprintf('%s: layer %d', title_text, layer_index)); +end + +function draw_surface(ax, grid_indices, order, coordinate, nodes, values) +nel = numel(order); +nmc = size(grid_indices, 2); +dis = zeros(nel, nmc); +x = zeros(nel, nmc); +y = zeros(nel, nmc); +z = zeros(nel, nmc); +z_shift = max(coordinate(:, 3)) + 2000; + +for i = 1:nmc + for j = 1:nel + x(j, i) = coordinate(nodes(grid_indices(i), order(j)), 1); + y(j, i) = coordinate(nodes(grid_indices(i), order(j)), 2); + z(j, i) = coordinate(nodes(grid_indices(i), order(j)), 3) - z_shift; + dis(j, i) = values(grid_indices(i)); + end +end + +fill3(ax, x, y, z, dis, 'EdgeColor', 'interp'); +end + +function values = extract_plot_values(config, output, property_id) +property_id = lower(string(property_id)); +switch property_id + case "pressure" + values = output.p; + case "water_saturation" + values = output.sw; + case "oil_saturation" + values = 1 - output.sw; + case "gas_saturation" + if isfield(output, 'sg') + values = output.sg; + else + values = 1 - output.sw; + end + otherwise + error('render_case_plot_in_axes:UnsupportedProperty', ... + 'Unsupported plot property: %s', char(property_id)); +end +end + +function value = get_option(options, field_name, fallback) +if isfield(options, field_name) && ~isempty(options.(field_name)) + value = options.(field_name); +else + value = fallback; +end +end diff --git a/gui_support/results/run_case_plot.m b/gui_support/results/run_case_plot.m new file mode 100644 index 0000000..8f27f96 --- /dev/null +++ b/gui_support/results/run_case_plot.m @@ -0,0 +1,104 @@ +function run_case_plot(config, results, action_id) +%RUN_CASE_PLOT Run a legacy plot script for the current case/results. + +arguments + config (1,1) struct + results (1,1) struct + action_id +end + +if isempty(fieldnames(results)) + error('run_case_plot:NoResults', 'No results are available for plotting.'); +end + +project_root = fileparts(fileparts(fileparts(mfilename('fullpath')))); +source_case_folder = resolve_source_case_folder(project_root, config.meta); +if isempty(source_case_folder) || ~isfolder(source_case_folder) + error('run_case_plot:MissingCaseFolder', ... + 'Cannot resolve source case folder for case %s.', string(config.meta.case_id)); +end + +old_dir = pwd; +cleanup_obj = onCleanup(@() cd(old_dir)); %#ok +addpath(genpath(project_root)); +cd(source_case_folder); + +action_id = lower(string(action_id)); + +switch action_id + case "plot_well_response" + plotWellResponse(results.Times, results.Wellpara); + case "plot_2d_layer" + assert_plot_function_exists('plot_2D_layer'); + plot_2D_layer(default_time_step(results), default_layer(results.r), results.r, results.OutputRs, default_plot_type(config)); + case "plot_3d_distribution" + assert_plot_function_exists('plot_3D_dis'); + plot_3D_dis(default_time_step(results), results.r, results.OutputRs, default_plot_type(config)); + case "plot_sp_dp" + assert_plot_function_exists('plot_SP_DP'); + plot_SP_DP(default_layer(results.r), results.r); + case "plot_perm" + assert_plot_function_exists('plot_perm'); + plot_perm(default_layer(results.r), results.r); + otherwise + error('run_case_plot:UnsupportedAction', ... + 'Unsupported plot action: %s', string(action_id)); +end +end + +function source_case_folder = resolve_source_case_folder(project_root, meta_config) +source_case_folder = meta_config.source_case_folder; +if isfolder(source_case_folder) + return; +end + +case_id = lower(string(meta_config.case_id)); +case_num = sscanf(char(case_id), 'case%d'); +if isempty(case_num) + source_case_folder = ''; + return; +end + +folder_candidates = dir(fullfile(project_root, sprintf('*%d-*', case_num))); +folder_candidates = folder_candidates([folder_candidates.isdir]); +if isempty(folder_candidates) + source_case_folder = ''; +else + source_case_folder = fullfile(project_root, folder_candidates(1).name); +end +end + +function idx = default_time_step(results) +if isfield(results, 'OutputRs') && ~isempty(results.OutputRs) + idx = numel(results.OutputRs); +else + idx = 1; +end +end + +function k = default_layer(r) +k = 1; +if isfield(r, 'nz') && ~isempty(r.nz) + k = min(1, r.nz); +end +end + +function type = default_plot_type(config) +switch config.model.flow_model + case 1 + type = 1; + case 2 + type = 1; + case 3 + type = 1; + otherwise + type = 1; +end +end + +function assert_plot_function_exists(function_name) +if exist(function_name, 'file') ~= 2 + error('run_case_plot:MissingPlotFunction', ... + 'Plot function not found in current case folder: %s', function_name); +end +end