程序如下:(之前误删除了这个代码帖)
for i=1:n_fluid
file_name_pair1_i=sprintf('pair1_i%d',i); %加载第i个粒子的相关坐标文件
pair1_i=file_load(file_name_pair1_i); %从以上的文件中取回坐标值,file_load为子函数
for j=1:n_fluid
r_ij=sqrt((fluid_x(i)-fluid_x(j))*(fluid_x(i)-fluid_x(j))+...
(fluid_y(i)-fluid_y(j))*(fluid_y(i)-fluid_y(j)));
hij=( h_fluid(i)+ h_fluid(j))/2;
r=r_ij/hij;
ad=7/478/pi/hij/hij;
%求梯度所需要的量
if i==j
r_x=0;
r_y=0;
r_z=0;
else
r_x=(fluid_x(i)-fluid_x(j))/r_ij;
r_y=(fluid_y(i)-fluid_y(j))/r_ij;
end
if pair1_i(j)~=0 %即该粒子在第i个粒子的领域内,那么
if 0<=r<1
w1_i(j)=ad*((3-r).^5-6*(2-r).^5+15*(1-r).^5);
dw1_x_i(j)=r_x*ad*(-5*(3-r).^4+30*(2-r).^4-75*(1-r).^4);
dw1_y_i(j)=r_y*ad*(-5*(3-r).^4+30*(2-r).^4-75*(1-r).^4);
ddw1_i(j)=0;
elseif 1<=r<2
w1_i(j)=ad*((3-r).^5-6*(2-r).^5);
dw1_x_i(j)=r_x*ad*(-5*(3-r).^4+30*(2-r).^4);
dw1_y_i(j)=r_y*ad*(-5*(3-r).^4+30*(2-r).^4);
ddw1_i(j)=0;
elseif 2<=r<3
w1_i(j)=ad*((3-r).^5);
dw1_x_i(j)=r_x*ad*(-5*(3-r).^4);
dw1_y_i(j)=r_y*ad*(-5*(3-r).^4);
ddw1_i(j)=0;
else
w1_i(j)=0;
dw1_x_i(j)=0;
dw1_y_i(j)=0;
ddw1_i(j)=0;
end
else %如果粒子不在这个领域内即 pair1_i(j)=0
w1_i(j)=0;
dw1_x_i(j)=0;
dw1_y_i(j)=0;
ddw1_i(j)=0;
end
end
%在这里存下第i个粒子光滑函数的所有变量值
file_name_w1_i=sprintf('w1_i%d',i); %利用sprintf连接字符串,文件名后面的数字为i
file_name_dw1_x_i=sprintf('dw1_x_i%d',i);
file_name_dw1_y_i=sprintf('dw1_y_i%d',i);
file_name_ddw1_i=sprintf('ddw1_i%d',i);
file_save(file_name_w1_i,w1_i); %调用下面的文件保存子函数,参数是字符串变量和要被保存的变量
file_save( file_name_dw1_x_i,dw1_x_i);
file_save( file_name_dw1_y_i,dw1_y_i);
file_save( file_name_ddw1_i,ddw1_i);
clear ddw1_i; %从内存中清除这个循环步下的产生的变量,节省内存空间
clear dw1_x_i;
clear dw1_y_i;
clear w1_i;
clear file_name_w1_i;
clear file_name_dw1_x_i;
clear file_name_dw1_y_i;
clear file_name_ddw1_i;
clear file_name_pair1_i;
end
%文件加载模块
function get_back=file_load(filename)
load(filename);
get_back=med_variable;
%文件保存模块
function file_save(filename,variable)
med_variable=variable;
save(filename,'med_variable');
当外层循环循环到i=2094时,出现了上述错误
Unable to write file ddw2094_i1.mat: permission denied
许多可能的错误的考察过了;想请大家想想办法
[ 本帖最后由 eight 于 2007-10-11 20:06 编辑 ] |