[发布] GT-Grid 1.15 版 (080908发布) ★

GT-Grid1.15版更新包括修复bug及新增功能,如grid.query方法,允许用户通过JSON对象传递查询条件。此外,支持与Ext.Panel结合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GT-Grid 1.15版 说明文档.

这篇文档主要说明一些这个版本的变化(新增功能 新特性)


========================================
这个版本照例修正了一些bug 同时增加了一些小功能
这些小功能主要是通过api方面的改造,让大家用起来更顺手一些.
另外尝试了一下 与 ext的结合

========================================

下面结合示例来做一下说明.

我们在围绕列表开发时 常常有这样的需求.

一个页面, 上方是查询表单, 下面是列表. 初始情况下,表单是空的.
在表单中输入一些查询条件后,点击查询按钮,然后列表才出现响应的信息.

示例 mydemo_for_1.15.html 就演示了这样的场景.

大家需要注意的是如下内容:

首先 "初始情况下,表单是空的" 这个需求通过 grid的 autoLoad属性来实现.
当该属性为false时, 列表第一次显示时 不会出现数据.

其次, 在这个版本里增加了 grid.query 方法. 用法如下:


grid.query(params)


其中 params 是一个json对象, 用来作为查询条件的.
它将以 name1=value1&name2=value2&name3=value3... 的形式将参数传递给后台.
后台可以通过传统的 request.gerParameter("name") 方式来取得这些参数.
这样大家就可以灵活的来做查询操作了.
例如

grid.query( {
name : "abc",
age : 27 ,
others : [ 1,2,3 ]
})

那么 传递到后台的 queryString 将为
name=abc&age=27&others=1&others=2&others=3

注意: mydemo_for_1.15.html 这个示例由于只是前台的一个代码示例,
所以页面中的查询并不会真的起到查询的作用, 而只是载入一些随机生成的数据.

==============================

与 ext的结合:

这个版本可以和简单的 Ext.Panel进行结合.
也就是说 GT-Grid可以放入 Ext.Panel 的panel里了
具体的例子见
\_demo\for_ext.html

注意for_ext.html文件中下面的部分:

<!-- 请根据你机器内ext存放的位置来自行修改下面3行的内容 -->
<link rel="stylesheet" type="text/css" href="file:/d:/mydev/ext-2.2/resources/css/ext-all.css" />
<script type="text/javascript" src="file:/d:/mydev/ext-2.2/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="file:/d:/mydev/ext-2.2/ext-all.js"></script>


这个与ext的融合 目前还只是一个开始, 还有很多问题, 例如不能放到window里等等.
不过 以后会努力加强这方面的兼容性的.


==============================


以上的说明不是很详细, 建议大家结合 mydemo_for_1.15.html 这个示例来看一下.


==============================


关于GT的更多介绍可以参加下面两个地址

具体文档请参见下面地址:
[url="http://fins.iteye.com/blog/214290"]列表组件 GT-Grid 最新版本 & 教程[/url]

与服务端结合的例子(8月3日版本)
[url="http://fins.iteye.com/blog/219217"]与服务端结合的例子[/url]
========================================
将上述修改应用到下述代码里,将修改后的完整代码发给我。%% 海底管道水合物堵塞风险综合分析模型 % 集成多相流动力学、热力学传递、水合物相变动力学和概率分析 tic; clc; clear; close all; % 设置中文字体避免乱码 set(groot, 'defaultAxesFontName', 'SimHei'); set(groot, 'defaultTextFontName', 'SimHei'); set(groot, 'defaultAxesFontSize', 10); %% 模型参数设置 L = 5000; % 管道长度(m) D = 0.3; % 管道直径(m) Pin = 15e6; % 入口压力(Pa) - 定值 T_in = 300; % 入口温度(K) - 定值 N = 150; % 空间离散点数 dx = L/(N-1); x = linspace(0, L, N); % 工况定义 (1=稳定生产, 2=停输, 3=再启动) operational_mode = 1; % 默认稳定生产 t_end = 1*3600; % 仿真时间(s) dt = 1; % 时间步长 CFL = 0.4; % CFL数 % 预分配结果矩阵 max_steps = ceil(t_end/dt) + 100; % 最大可能时间步数 results = zeros(max_steps, N, 10); % 时间×位置×变量矩阵 step_count = 0; % 实际时间步计数 time_vector = []; % 时间向量 %% 多相流物性参数 rho_o = 820; mu_o = 0.0085; % 油相 rho_w = 1040; mu_w = 0.0012; % 水相 rho_g = 1.15; mu_g = 1.5e-5; % 气相 rho_h = 910; % 水合物 % 初始相分数 (概率分布) alpha_o = truncate_distribution(@normrnd, 0.35, 0.05, [1,N], 0.2, 0.5); alpha_w = truncate_distribution(@normrnd, 0.55, 0.07, [1,N], 0.4, 0.7); alpha_g = 1 - alpha_o - alpha_w; alpha_h = zeros(1, N); % 水合物体积分数 %% 热力学参数 T_sea = 277; % 海水温度(K) ≈4°C U = 12; % 总传热系数(W/m²·K) c_o = 1900; c_w = 4180; c_g = 1040; c_h = 2200; % 比热容(J/kg·K) H_latent = 480e3; % 水合物生成潜热(J/kg) k_cond = 0.52; % 流体导热系数(W/m·K) % 水合物相平衡参数 (van der Waals-Platteeuw模型) A_hyd = -12.8; B_hyd = 2950; C_hyd = 0.012; k_kinetic = 1.2e-5; % 生成动力学常数 Ea = 48e3; % 活化能(J/mol) R_gas = 8.314; % 气体常数 %% 抑制剂参数 (甲醇/乙二醇) inhibitor_type = 1; % 1=甲醇, 2=乙二醇 C_inhibitor = 0.15; % 初始抑制剂浓度(质量分数) k_MeOH = 0.25; % 甲醇抑制系数 k_MEG = 0.18; % 乙二醇抑制系数 %% 概率模型参数 n_mc_samples = 500; % 蒙特卡洛样本数 risk_threshold = 0.7; % 堵塞风险阈值 prior_risk = 0.3; % 先验堵塞概率 %% 初始化变量 P = linspace(Pin, 1e5, N); % 压力分布 T = linspace(T_in, T_sea+5, N); % 温度分布 u = 2.5*ones(1, N); % 流速(m/s) D_eff = D*ones(1, N); % 有效管径 risk_prob = prior_risk*ones(1, N); % 堵塞概率 % 创建贝叶斯更新函数 bayesian_update = @(prior, likelihood) (prior .* likelihood) ./ ... (prior .* likelihood + (1-prior).*(1-likelihood)); %% 主仿真循环 for t = 0:dt:t_end step_count = step_count + 1; time_vector(step_count) = t; % 动态调整时间步长 (CFL条件) u_max = max(abs(u)); dt = min(dt, CFL*dx/(u_max + 1e-3)); % 根据工况更新边界条件 switch operational_mode case 1 % 稳定生产 P(1) = Pin; % 固定入口压力 T(1) = T_in; % 固定入口温度 u(1) = 2.5; % 固定入口流速 case 2 % 停输工况 if t < 100 u = u * exp(-0.05*t); % 流速指数衰减 else u = zeros(1, N); % 完全停输 end T(1) = T_sea + (T(1)-T_sea)*exp(-0.001*t); % 温度衰减 case 3 % 再启动工况 if t < 50 u(1) = 1.0 * (1 - exp(-0.1*t)); % 流速逐渐增加 P(1) = 1.5*Pin; % 初始高压 else u(1) = 3.0; % 稳定流速 P(1) = Pin; end % 油嘴节流效应 choke_position = max(0.2, 0.8*exp(-0.02*t)); P(end) = P(end-1)*choke_position; end % 计算相平衡压力 (考虑抑制剂) P_eq = hydrate_equilibrium(T, A_hyd, B_hyd, C_hyd); if inhibitor_type == 1 P_eq = P_eq .* (1 - k_MeOH*C_inhibitor); % 甲醇抑制效应 else P_eq = P_eq .* (1 - k_MEG*C_inhibitor); % 乙二醇抑制效应 end % === 多相流计算 === rho_mix = alpha_o.*rho_o + alpha_w.*rho_w + alpha_g.*rho_g + alpha_h.*rho_h; cp_mix = (alpha_o.*rho_o*c_o + alpha_w.*rho_w*c_w + ... alpha_g.*rho_g*c_g + alpha_h.*rho_h*c_h) ./ rho_mix; % 粘度模型 (Einstein-Roscoe) mu_mix = mu_o.*(1 + 2.5*alpha_h + 10.05*alpha_h.^2); % 雷诺数和摩擦系数 Re = rho_mix .* abs(u) * D ./ mu_mix; f = 0.0014 + 0.125 * Re.^(-0.32); f(Re < 2300) = 64./max(Re(Re<2300), 1e-3); % === 相分数方程 (迎风格式) === for i = 2:N-1 dir = sign(u(i)); % 油相连续性 dalpha_o_dx = (alpha_o(i) - alpha_o(i-1))/dx; alpha_o(i) = alpha_o(i) - dt*u(i)*dalpha_o_dx; % 水相连续性 dalpha_w_dx = (alpha_w(i) - alpha_w(i-1))/dx; alpha_w(i) = alpha_w(i) - dt*u(i)*dalpha_w_dx; % 气相连续性 (考虑压缩性) dalpha_g_dx = (alpha_g(i) - alpha_g(i-1))/dx; div_u = (u(i+1) - u(i-1))/(2*dx); alpha_g(i) = alpha_g(i) - dt*(u(i)*dalpha_g_dx + alpha_g(i)*div_u); end % 相分数归一化 alpha_sum = alpha_o + alpha_w + alpha_g + alpha_h; alpha_o = alpha_o ./ alpha_sum; alpha_w = alpha_w ./ alpha_sum; alpha_g = alpha_g ./ alpha_sum; alpha_h = alpha_h ./ alpha_sum; % === 水合物生成动力学 === dalpha_h_dt = zeros(1, N); for i = 2:N-1 % 生成条件: 过冷度+水气存在 subcooling = max(0, (P_eq(i) - P(i))/1e6); % MPa过冷度 if subcooling &gt; 0.1 && alpha_w(i) &gt; 0.05 && alpha_g(i) &gt; 0.05 % Englezos动力学模型 dalpha_h_dt(i) = k_kinetic * exp(-Ea/(R_gas*T(i))) * ... subcooling * alpha_g(i) * alpha_w(i); % 限制最大生成速率 max_rate = min(alpha_g(i), alpha_w(i))/(5*dt); dalpha_h_dt(i) = min(dalpha_h_dt(i), max_rate); alpha_h(i) = alpha_h(i) + dt * dalpha_h_dt(i); alpha_g(i) = alpha_g(i) - dt * dalpha_h_dt(i); alpha_w(i) = alpha_w(i) - dt * dalpha_h_dt(i); end end % === 热力学模型 === dTdt = zeros(1, N); q_hyd = rho_h * H_latent .* dalpha_h_dt; % 水合物生成热源 % 立管膨胀放热效应 if operational_mode == 3 && t < 100 expansion_heat = 150*(1 - exp(-0.1*t)); % 膨胀放热模型 else expansion_heat = 0; end for i = 2:N-1 % 热对流项 if u(i) &gt;= 0 dTdx = (T(i) - T(i-1)) / dx; else dTdx = (T(i+1) - T(i)) / dx; end % 热传导项 d2Tdx2 = (T(i-1) - 2*T(i) + T(i+1)) / dx^2; % 管壁热交换 + 立管膨胀放热 q_wall = (4*U/D) * (T_sea - T(i)) + expansion_heat; % 能量方程 dTdt(i) = -u(i)*dTdx + (k_cond/(rho_mix(i)*cp_mix(i)))*d2Tdx2 ... + q_wall/(rho_mix(i)*cp_mix(i)) ... + q_hyd(i)/(rho_mix(i)*cp_mix(i)); end % 油嘴节流效应 (再启动工况) if operational_mode == 3 && t < 300 JT_coeff = -0.3; % Joule-Thomson系数(K/MPa) deltaP = (P(end-1) - P(end))/1e6; % 压降(MPa) T(end) = T(end-1) + JT_coeff * deltaP; % 节流温降 end % 时间积分 T(2:N-1) = T(2:N-1) + dt * dTdt(2:N-1); % 温度边界条件 T(end) = T(end-1); % 出口绝热 % === 概率风险评估 === % 计算堵塞风险指标 subcooling = max(0, (P_eq - P)./1e6); risk_indicator = alpha_h .* subcooling .* (1 - C_inhibitor); % 贝叶斯风险更新 likelihood = 1 - exp(-0.5*risk_indicator); % 风险似然函数 risk_prob = bayesian_update(risk_prob, likelihood); % === 存储结果到矩阵 === % 变量索引: % 1:alpha_o, 2:alpha_w, 3:alpha_g, 4:alpha_h, % 5:P, 6:T, 7:u, 8:risk_prob, 9:subcooling, 10:D_eff results(step_count, :, 1) = alpha_o; results(step_count, :, 2) = alpha_w; results(step_count, :, 3) = alpha_g; results(step_count, :, 4) = alpha_h; results(step_count, :, 5) = P; results(step_count, :, 6) = T; results(step_count, :, 7) = u; results(step_count, :, 8) = risk_prob; results(step_count, :, 9) = subcooling; results(step_count, :, 10) = D_eff; % === 可视化更新 === if mod(t, 100) == 0 visualize_system(x, alpha_o, alpha_w, alpha_g, alpha_h, P, T, u, ... risk_prob, D_eff, operational_mode, t); end end % 截取实际使用的矩阵部分 results = results(1:step_count, :, :); %% 保存结果到结构体 simulationResults = struct(); simulationResults.time = time_vector; % 时间向量 (1×step_count) simulationResults.position = x; % 位置向量 (1×N) simulationResults.alpha_o = squeeze(results(:, :, 1)); % 油相分数 (step_count×N) simulationResults.alpha_w = squeeze(results(:, :, 2)); % 水相分数 (step_count×N) simulationResults.alpha_g = squeeze(results(:, :, 3)); % 气相分数 (step_count×N) simulationResults.alpha_h = squeeze(results(:, :, 4)); % 水合物分数 (step_count×N) simulationResults.pressure = squeeze(results(:, :, 5));% 压力 (step_count×N) simulationResults.temperature = squeeze(results(:, :, 6));% 温度 (step_count×N) simulationResults.velocity = squeeze(results(:, :, 7));% 流速 (step_count×N) simulationResults.risk_prob = squeeze(results(:, :, 8));% 风险概率 (step_count×N) simulationResults.subcooling = squeeze(results(:, :, 9));% 过冷度 (step_count×N) simulationResults.diameter = squeeze(results(:, :, 10));% 有效管径 (step_count×N) % 保存到工作空间 assignin('base', 'simulationResults', simulationResults); % 保存到文件 save('pipeline_simulation_results.mat', 'simulationResults'); fprintf('\n模拟完成! 结果已保存到结构体 simulationResults\n'); fprintf('矩阵维度: 时间步数 × 空间位置\n'); fprintf('时间步数: %d, 空间位置数: %d\n', step_count, N); toc; %% 可视化存储结果 figure('Position', [100, 100, 1200, 800]) % 1. 风险概率等高线图 subplot(2,2,1) contourf(x, time_vector, simulationResults.risk_prob, 20, 'LineColor', 'none') colorbar xlabel('管长位置 (m)') ylabel('时间 (s)') title('堵塞风险概率分布') colormap(jet) % 2. 温度等高线图 subplot(2,2,2) contourf(x, time_vector, simulationResults.temperature, 20, 'LineColor', 'none') colorbar xlabel('管长位置 (m)') ylabel('时间 (s)') title('温度分布 (K)') colormap(jet) % 3. 水合物体积分数变化 subplot(2,2,3) plot(x, simulationResults.alpha_h(end, :), 'LineWidth', 2) xlabel('管长位置 (m)') ylabel('水合物体积分数') title('最终水合物分布') grid on % 4. 风险概率变化 subplot(2,2,4) plot(x, simulationResults.risk_prob(end, :), 'LineWidth', 2) xlabel('管长位置 (m)') ylabel('堵塞风险概率') title('最终风险概率分布') grid on %% 辅助函数 function P_eq = hydrate_equilibrium(T, A, B, C) % van der Waals-Platteeuw水合物相平衡模型 P_eq = exp(A + B./T + C*T); % 单位: Pa end function samples = truncate_distribution(dist_func, mean, std, size, lb, ub) % 生成截断分布样本 samples = dist_func(mean, std, size); samples(samples < lb) = lb; samples(samples &gt; ub) = ub; end function visualize_system(x, alpha_o, alpha_w, alpha_g, alpha_h, P, T, u, ... risk_prob, D_eff, mode, t) % 系统状态可视化 persistent fig; if isempty(fig) || ~isvalid(fig) fig = figure('Position', [100, 100, 1400, 900]); end % 工况名称 mode_names = {'稳定生产', '停输', '再启动'}; subplot(3,2,1); plot(x, alpha_o, 'b', x, alpha_w, 'g', x, alpha_g, 'r', x, alpha_h, 'm'); title(['各相体积分数 (工况: ', mode_names{mode}, ')']); xlabel('管道位置 (m)'); ylabel('体积分数'); legend('油相', '水相', '气相', '水合物'); grid on; subplot(3,2,2); [ax, h1, h2] = plotyy(x, P/1e6, x, T-273); title('压力与温度分布'); xlabel('管道位置 (m)'); ylabel(ax(1), '压力 (MPa)'); ylabel(ax(2), '温度 (°C)'); grid on; subplot(3,2,3); plot(x, u); title('流速分布'); xlabel('管道位置 (m)'); ylabel('流速 (m/s)'); grid on; subplot(3,2,4); plot(x, risk_prob); title('堵塞风险概率'); xlabel('管道位置 (m)'); ylabel('概率'); ylim([0, 1]); grid on; subplot(3,2,5); plot(x, D_eff); title('有效管径变化'); xlabel('管道位置 (m)'); ylabel('管径 (m)'); grid on; subplot(3,2,6); text(0.05, 0.7, ['时间: ', num2str(t), ' s'], 'FontSize', 12); text(0.05, 0.5, ['工况: ', mode_names{mode}], 'FontSize', 12); text(0.05, 0.3, ['最大风险概率: ', num2str(max(risk_prob))], 'FontSize', 12); axis off; drawnow; end
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值