matlab索引必须为正整数或逻辑值,MATLAB编程求解湍流k-e方程时,总是遇见‘下标索引必须为正整数类型或逻辑类型’错误...
%%%%%%%%%%%%%%%参数设置%%%%%%%%%%%%%
tic
clear
clc
%1.模型参数
LD=1;H=0.04;
mu=0.01; %动力粘度
rou=1100; %密度
alpha=1e5; %罚函数
alph1=1e11;
sgmk=1.0;
sgms=1.22;
Csgm1=1.44;
Csgm2=1.92;
Cmu=0.09;
%2.边界参数
ul=1;vl=0; %左边界速度
ub=0;vb=0; %下边界
ur=0;vr=0; %右边界
ut=0;vt=0; %上边界
Re=rou*ul*H/mu; %雷诺数
l=0.07*H; %湍流尺度
I=0.16*Re^(-1/8); %湍流强度
k=1.5*(ul*I)^2; %入口湍动能
s=(Cmu^(3/4))*(k^1.5)/l; %湍流耗散率
%%%%%%%%%%%%%%输入节点数据%%%%%%%%%%%
ndivlq=20;ndivwq=20;
[x,conn1,conn2,numnod]=mesh3(LD,H,ndivlq,ndivwq);
ndivlq=20;ndivwq=20; %划背景网格
[xc,conn,numcell,numq]=mesh2(LD,H,ndivlq,ndivwq);
dmax=1.4; %放大系数
xspac=LD/ndivlq; %网格的宽度
yspac=H/ndivwq; %网格的高度
dm(1,1:numnod)=dmax*xspac*ones(1,numnod); %x方向节点影响域大小
dm(2,1:numnod)=dmax*yspac*ones(1,numnod); %y方向节点影响域大小
%%%%%%%%%%%%设置高斯点%%%%%%
%1.湍流场的高斯点
quado=4; %一维方向上采用的高斯积分点的个数
[gauss]=gauss2(quado); %函数调用:生成一维方向上的规格化的高斯点
numq2=numcell*quado^2; %numq2为高斯点总数
gs=zeros(4,numq2);
[gs]=egauss(xc,conn,gauss,numcell);
% plot(gs(1,
,gs(2,
,'.b');
% hold on
% plot(x(1,
,x(2,
,'ro') ;
%%%%%%%%%%%%%%%%%%%%%%%%定义边界节点%%%%%%%%%%%%
ind1=0;ind2=0;ind3=0;ind4=0;
for j=1:numnod
if(x(1,j)==0.0)
ind1=ind1+1;
nl(1,ind1)=x(1,j); %%%左边界
nl(2,ind1)=x(2,j);
end
if(x(1,j)==LD)
ind2=ind2+1;
nr(1,ind2)=x(1,j); %%%右边界
nr(2,ind2)=x(2,j);
end
if(x(2,j)==0)
ind3=ind3+1;
nb(1,ind3)=x(1,j); %%%下边界
nb(2,ind3)=x(2,j);
end
if(x(2,j)==H)
ind4=ind4+1; %%%上边界
nt(1,ind4)=x(1,j);
nt(2,ind4)=x(2,j);
end
end
%%===各个边界上节点的个数===%%
lthl=length(nl); %左边界上节点的个数
lthb=length(nb); %下边界上节点的个数
ltht=length(nt); %上边界上节点的个数
lthr=length(nr); %右边界上节点的个数
%%对各边界上的元素进行排序
nl(2,
=bubble(nl(2,
);
nr(2,
=bubble(nr(2,
);
nt(1,
=bubble(nt(1,
);
nb(1,
=bubble(nb(1,
);
%这里还是要进行节点的重新排布,否则高斯点排布就会出错
%设置边界上高斯点的坐标
quado=4;
ind=0;
gauss=gauss2(quado);
for i=1
lthl-1)
ycen=(nl(2,i+1)+nl(2,i))/2;
jcob=abs((nl(2,i+1)-nl(2,i))/2);
for j=1:quado
mark(j)=ycen-gauss(1,j)*jcob;
ind=ind+1;
gsl(1,ind)=nl(1,i);
gsl(2,ind)=mark(j);
gsl(3,ind)=gauss(2,j);
gsl(4,ind)=jcob;
end
end
quado=4;
ind=0; %r边界上的高斯点
gauss=gauss2(quado);
for i=1
lthr-1)
ycen=(nr(2,i+1)+nr(2,i))/2;
jcob=abs((nr(2,i+1)-nr(2,i))/2);
for j=1:quado
mark(j)=ycen-gauss(1,j)*jcob;
ind=ind+1;
gsr(1,ind)=nr(1,i);
gsr(2,ind)=mark(j);
gsr(3,ind)=gauss(2,j);
gsr(4,ind)=jcob;
end
end
quado=4;
ind=0; %b边界上的高斯点
gauss=gauss2(quado);
for i=1
lthb-1)
ycen=(nb(1,i+1)+nb(1,i))/2;
jcob=abs((nb(1,i+1)-nb(1,i))/2);
for j=1:quado
mark(j)=ycen-gauss(1,j)*jcob;
ind=ind+1;
gsb(1,ind)=mark(j);
gsb(2,ind)=nb(2,i);
gsb(3,ind)=gauss(2,j);
gsb(4,ind)=jcob;
end
end
quado=4;
ind=0; %t边界上的高斯点
gauss=gauss2(quado);
for i=1
ltht-1)
ycen=(nt(1,i+1)+nt(1,i))/2;
jcob=abs((nt(1,i+1)-nt(1,i))/2);
for j=1:quado
mark(j)=ycen-gauss(1,j)*jcob;
ind=ind+1;
gst(1,ind)=mark(j);
gst(2,ind)=nt(2,i);
gst(3,ind)=gauss(2,j);
gst(4,ind)=jcob;
end
end
%%%%%%%%%%%%%%%边界积分%%%%%%%%%%%%%%%%%
%1.湍流边界积分
fks=zeros(numnod*2,1);fkspm=zeros(numnod*2,1);
%沿左边界L积分
klk=sparse(numnod,numnod);kls=sparse(numnod,numnod);
ind=0;
for gkl=gsl
ind=ind+1;
gpos=gkl(1:2);
weight=gkl(3);
jac=gkl(4);
v=domain(gpos,x,dm,numnod);
L=length(v);
en=zeros(1,L);vn=zeros(1,L);
flk=zeros(1,L);fls=zeros(1,L);
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,v,dm);
for i=1:L
en(i)=v(i);vn(i)=v(i);
flk(i)=k*phi(i);
fls(i)=s*phi(i);
end
klk(en,en)=klk(en,en)+sparse((weight*jac)*(phi'*phi));
kls(en,en)=kls(en,en)+sparse((weight*jac)*(phi'*phi));
fkspm(en)=fkspm(en)+jac*weight*flk';
fkspm(en+numnod)=fkspm(en+numnod)+jac*weight*fls';
end
%沿下边界B积分
for gksb=gsb
gpos=gksb(1:2);
weight=gksb(3);
jac=gksb(4);
v=domain(gpos,x,dm,numnod);
L=length(v);
en=zeros(1,L);
fkb=zeros(1,L);fsb=zeros(1,L);
Kb=0;Sb=0;
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,v,dm);
for i=1:L
en(i)=v(i);
fkb(i)=Kb*phi(i);
fsb(i)=Sb*phi(i);
end
fks(en)=fks(en)+jac*weight*fkb';
fks(en+numnod)=fks(en+numnod)+jac*weight*fsb';
end
%沿上边界T积分
for gkst=gst
gpos=gkst(1:2);
weight=gkst(3);
jac=gkst(4);
v=domain(gpos,x,dm,numnod);
L=length(v);
en=zeros(1,L);
fkt=zeros(1,L);fst=zeros(1,L);
Kt=0;St=0;
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,v,dm);
for i=1:L
en(i)=v(i);
fkb(i)=Kt*phi(i);
fsb(i)=St*phi(i);
end
fks(en)=fks(en)+jac*weight*fkt';
fks(en+numnod)=fks(en+numnod)+jac*weight*fst';
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 非牛顿迭代 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1、计算初始黏度(viscosity)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 迭代 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.进行初始赋值
load ('result_of.mat'); %调用相同边界条件下NS方程解速度分布结果ux,uy
kkk=ones(1,numnod); %湍动能初始值
kks=ones(1,numnod); %耗散率初始值
vis=ones(1,numnod);
vis_k_1=vis;
kkk_k_1=kkk;
kks_k_1=kks;
%%%%%%%%%%%%%% 主程序迭代开始 %%%%%%%%%%%%%%%%
%1.迭代初始条件
norm_vis=1;
norm_k=1;
norm_s=1;
times=0;
fprintf(' 现在开始计算,请耐心等待 \n')
while ((norm_vis>1e-3||norm_vis>1e-3||norm_k>1e-3||norm_s>1e-3)&×<1000)
%迭代赋值:将k+1时的结果赋值给k时的值
kkk_k=kkk_k_1;
kks_k=kks_k_1;
vis_k=vis_k_1;
%%%%%%%%%%%%%%%%%%%%% 对高斯点循环,组装K矩阵 %%%%%%%%%%%%%%%%%%%%%%%%%%
% 1、更新对流项子块
% !!开始前需计算温度场上节点速度,本程序速度场与温度场节点重合,所以不需重新计算,直接利用速度场上节点的速度!
%%%%%%%%%%%%%%%%%%%%%%%%%%%计算k-e方程%%%%%%%%%%%%%%%%%%
%1.计算湍流方程扩散项K矩阵
kcl=sparse(numnod,numnod);
kcs=sparse(numnod,numnod);
for ggk=gs
gpos=ggk(1:2);
weight=ggk(3);
jac=ggk(4);
vk=domain(gpos,x,dm,numnod);
Lk=length(vk);
en=zeros(1,Lk);vn=zeros(1,Lk);
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,vk,dm);
for i=1:Lk
en(i)=vk(i);
end
kcl(en,en)=kcl(en,en)+sparse((vis_k(1,i)/sgmk)*(weight*jac)*(dphix'*dphix+dphiy'*dphiy));
kcs(en,en)=kcs(en,en)+sparse((vis_k(1,i)/sgmk)*(weight*jac)*(dphix'*dphix+dphiy'*dphiy));
end
%2.计算湍流方程对流项K矩阵,
%开始前需计算湍流场上节点速度,本程序速度场与湍流场节点重合,所以不需重新计算,直接利用速度场上节点的速度!
kdl=sparse(numnod,numnod);
kds=sparse(numnod,numnod);
for ggs=gs
gpos=ggs(1:2);
weight=ggs(3);
jac=ggs(4);
v=domain(gpos,x,dm,numnod);
L=length(v);
en=zeros(1,L);
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,v,dm);
for i=L
en(i)=v(i);
end
kdl(en,en)=kdl(en,en)+sparse((weight*jac)*(phi*phi'*ux_k_1*dphix'+phi*phi'*uy_k_1*dphiy'));
kds(en,en)=kds(en,en)+sparse((weight*jac)*(phi*phi'*ux_k_1*dphix'+phi*phi'*uy_k_1*dphiy'));
end
%3.计算耗散项K矩阵
%开始前需计算湍流场上节点速度,本程序速度场与湍流场节点重合,所以不需重新计算,直接利用速度场上节点的速度!
krk=sqarse(numnod,numnod);
krs=sqarse(numnod,numnod);
for ggu=gs
gpos=ggu(1:2);
weight=ggu(3);
jac=ggu(4);
v=domain(gpos,x,dm,numnod);
L=length(v);
en=zeros(1,L);
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,v,dm);
for i=L
en(i)=v(i);
end
krk(en,en)=krk(en,en)+sparse((weight*jac)*vis_k(1,i)*phi*(2*(dphix'*ux_k_1*dphix'*ux_k_1)+2*(dphiy'*uy_k_1*dphiy'*uy_k_1)+(dphiy'*ux_k_1*dphiy'*ux_k_1+2*dphiy'*ux_k_1*dphix'*uy_k_1+dphix'*uy_k_1*dphix'*uy_k_1)));
krs(en,en)=krs(en,en)+sparse((weight*jac)*Csgm1*yinzi_k(1,i)*vis_k(1,i)*phi*(2*(dphix'*ux_k_1*dphix'*ux_k_1)+2*(dphiy'*uy_k_1*dphiy'*uy_k_1)+(dphiy'*ux_k_1*dphiy'*ux_k_1+2*dphiy'*ux_k_1*dphix'*uy_k_1+dphix'*uy_k_1*dphix'*uy_k_1)));
end
%4.计算湍流M矩阵
Mks=sparse(numnod,numnod);
Msk=sparse(numnod,numnod);
for ggu=gs
gpos=ggu(1:2);
weight=ggu(3);
jac=ggu(4);
v=domain(gpos,x,dm,numnod);
L=length(v);
en=zeros(1,L);
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,v,dm);
for i=L
en(i)=v(i);
end
Mks(en,en)=Mks(en,en)+sparse((weight*jac)*(phi'*phi));
Msk(en,en)=Msk(en,en)+sparse((weight*jac)*Csgm2*yinzi_k(1,i)*(phi'*phi));
end
%5.构建k-e总体方程
k_ks=[kdl-kcl,Mks;zeros(numnod,numnod),kds-kcs+Msk];
k_s=[krk;krs];
k_b=[klk;kls];
f_ks=fks+k_s+k_b+aplh*fkspm;
s=k_ks\f_ks;
ks=d(1:numnod*2);
for i=1:numnod
K(i)=ks(i);
E(i)=ks(i+numnod);
end
%6.更新粘度
vis_k_1=zeros(1,numnod); % 初始化vis
yinzi_k_1=zeros(1,numnod);
for gg=gs
gpos=gg(1:2);
weight=gg(3);
jac=gg(4);
v=domain(gpos,x,dm,numnod);
L=length(v);
en=zeros(1,L);
kk=zeros(1,L);
ks=zeros(1,L);
[phi,dphix,dphiy]=shape_1(gpos,dmax,x,v,dm);
for i=1:L
en(i)=v(i);
ke=phi(i)*K(i);
kk=(phi(i)'*phi(i))*(K(i))^2;
ks=(phi(i))*E(i);
end
vis_k_1(en)=vis_k_1(en)+(kk/ks);
yinzi_k_1(en)=yinzi_k_1(en)+(ks/ke);
end
if norm(kkk_k_1-kkk_k)<1e-3
norm_kkk=0;
else
norm_kkk=norm(kkk_k_1-kkk_k)/norm(kkk_k);
end
if norm(kks_k_1-kks_k)<1e-3
norm_kks=0;
else
norm_kks=norm(kks_k_1-kks_k)/norm(kks_k);
end
if norm(vis_k_1-vis_k)<1e-3
norm_vis=0;
else
norm_vis=norm(vis_k_1-vis_k)/norm(vis_k);
end
if norm(yinzi_k_1-yinzi_k)<1e-3
norm_yinzi=0;
else
norm_yinzi=norm(yinzi_k_1-yinzi_k)/norm(yinzi_k);
end
clear k ku11 ku12 ku21 ku22 kp11 kp12 kp21 kp22
% 7.输出迭代结果
times=times+1;
fprintf('time= %d && norm_kkk= %6.9f && norm_kks= %6.9f && norm_vis= %6.9f && norm_yinzi= %6.9f \n',times,norm_kkk,norm_kks,norm_vis,norm_yinzi)
end
前面的NS方程检查过没有问题,但是在解k-e方程的时候,在kdl矩阵那出现了“下标索引必须为正整数类型或逻辑类型”错误,我觉得是调用ux-k-1速度错了,不知道是不是,求大神解惑?
后面应该还有很多问题,先把这个给解决再说
matlab索引必须为正整数或逻辑值,MATLAB编程求解湍流k-e方程时,总是遇见‘下标索引必须为正整数类型或逻辑类型’错误...相关推荐
- matlab提示“下标索引必须为正整数类型或逻辑类型”或“索引超出矩阵维度”
data = [1 2 3;1 3 2;2 4 1;3 4 1;4 5 2;6 2 1]; F=zeros(6);%矩阵的大小为M %生成邻接矩阵 ss=length(data(:,1)); for ...
- MATLAB-索引超出矩阵维度下标索引必须为正整数类型或逻辑类型 max()函数,一种解决办法
在使用matlab的max( )函数时,报错:下标索引必须为正整数类型或逻辑类型. 我检查了一遍数组Ldb,索引是没有问题的.matlab的索引是从1开始的,这一点没有用错. 再检查后发现程序里有这样 ...
- 下标索引必须为正整数类型或逻辑类型_Python3 基本数据类型
Python中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在Python中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类 ...
- matlab问题记录:索引超出矩阵维度与下标索引必须为正整数类型或逻辑类型。
sum函数在索引矩阵A时,索引到下标为0或负数了.(虽然理论上并没有)可能是受到你之前空间变量的影响了,你在这些语句之前加上"clear"语句,清除一下工作空间变量试试.
- 下标索引必须为正整数类型或逻辑类型_python量化基础 | 变量和简单的数据类型,零基础都可以看懂...
编辑 | Cowboy 校对 | 李明 来源 | 牛角财经 目的 | python量化基础 | 变量和简单的数据类型,零基础都可以看懂!!! python教程 从入门到高级(免费) 特点:案例基于金融 ...
- python中索引和下标_Series下标索引、标签索引、切片索引、布尔索引
Series的values属性可以获取值,Series的索引也可以获取值且更加灵活.Series是dict-like类型,也是list-like类型,可以模仿字典和列表获取数据,比如可以用get方法获 ...
- Pandas-数据结构-Series(二):Series的索引【下标索引、标签索引、切片索引、布尔型索引】
一.下标索引 位置下标,类似序列 位置下标从0开始 输出结果为numpy.float格式, 可以通过float()函数转换为python float格式 numpy.float与float占用字节不同 ...
- Matlab报错——数组索引必须为正整数或逻辑值
使用min函数时报错数组索引必须为正整数或逻辑值 解决方法:重启matlab,或clear all
- matlab 数组索引必须为正整数或逻辑值
在做毕业设计,遇到一些问题,所以就把问题和解决方法记录下来. 源代码: feat = FADE(n_image); %提取特征 index=round(rand(1,N)*length(feat)); ...
最新文章
- Mirosoft Office自动化问题
- 评价算法的性能从利用计算机资源角度,计算机专业数据结构课后练习题汇编
- java enum枚举的使用详情(实例与原理分析)
- Differential Geometry之第九章常平均曲率曲面
- 战地一自定义服务器怎么搜索,战地1怎么快速加入服务器?多种加入方法一览...
- U盘启动盘安装win10系统
- 网站安全检测:8款非常有用的免费 Web 安全测试工具
- 电脑网络问题——IPv4无Internet访问权限
- 【经典】非你莫属名句一
- Mac下载软件的网站
- 监督学习、无监督学习、半监督学习和强化学习
- 搭建微信小程序HTTPS服务器
- 题目 1224: 整除的尾数
- CTF--2016中国西安西电华山杯网络安全技能大赛之crackme6
- 将一元人民币兑换成1分、2分、5分,有几种兑换办法?
- MBA-day30 算术 绝对值题型
- 知名软件ADSafe暗藏恶意代码 从众多网站劫持流量
- 一体化伺服电机在全自动模板缝纫机上的应用
- PS 自定义面板 工作区
- iOS 内购StoreKit 框架介绍
热门文章
- 污水处理厂的常见工艺3D展示--1
- 2015年第六届蓝桥杯C/C++B组省赛题目解析
- Windows Server群集感知更新(CAU)-下
- 对凯立德2013秋季旗舰版的再认识(含3D核心文件的下载)
- 用友软件输出U6文件如何恢复
- 铁路“12306”的架构太牛了!
- bootstrap 导航条居中
- Optimus: An Efficient Dynamic Resource Scheduler for Deep Learning Clusters(论文笔记)
- 论实习、暑期实习、秋招、春招之间的关系
- Oriented FAST and Rotated BRIEF