This commit is contained in:
xinxiao
2026-03-13 11:24:41 +08:00
commit 04e2bb29c7
238 changed files with 29102 additions and 0 deletions
+230
View File
@@ -0,0 +1,230 @@
function r = GridProp_new(modelflag, r, kx, ky, kz, f, frac_information, fellip, Kf, Wf, pori, prpor, cpor, Porf, prporf, cporf, cf, ca, valid_grids)
tic;
%%
nx = r.nx;
ny = r.ny;
nz = r.nz;
dx = r.dx;
dy = r.dy;
dz = r.dz;
NTG = r.NTG;
coordinates = r.coordinates;
nodes = r.nodes;
nP = r.nP;
nmc = r.nmc;
dxv = r.dxv;
dyv = r.dyv;
dzv = r.dzv;
zm = r.zm;
vm = r.vm;
xrao = r.xrao;
yrao = r.yrao;
zrao = r.zrao;
cell_mid_coords = r.cell_mid_coords;
%
kx(valid_grids==0)=1e-12;
ky(valid_grids==0)=1e-12;
kz(valid_grids==0)=1e-12;
%
r.modelflag=modelflag;
r.kx = kx;
r.ky = ky;
r.kz = kz;
r.Kf = Kf;%
r.Wf = Wf;%
r.cf = cf;
r.ca = ca;
% r.co=co;
r.cpor=cpor;
r.cporf=cporf;
r.frac_information = frac_information;
% % % [coordinates, nodes, nP, nE, dxv, dyv,dzv,zm,vm,xrao,yrao,zrao,cell_mid_coordinates] = GenerateNode_final(dx, dy,dz ,nx,ny,nz,NTG);
% % % r.coordinates = coordinates;
% % % r.nodes = nodes;
% % % nmc=nE;
% % % r.nmc =nmc;
% % % r.dxv = dxv;
% % % r.dyv = dyv;
% % % r.dzv = dzv;
% % % r.vm=vm;
% % % r.cell_mid_coordinates=cell_mid_coordinates;
%%
%%
m=size(f,1);
n=size(fellip,1);
nfr=m/5;%
nfir=n/5;%
r.nfr=nfr; r.nfir=nfir;
nf=nfr+nfir;
r.nf=nf;
if (nfir~=0) && (nfr~=0)
f=[f;fellip];
else if nfr~=0
f=f;
else if nfir~=0
f=fellip;
else error('Dr Rao reminds you that there is no information about fractures');
end
end
end
%d3intersection=-1000*ones(1000,3);%-1000
raopoint=cell(nfr+nfir,2);%线
%d3intersection
%anothersection
pointvsregion=cell(nfr+nfir,3);%interarea函数的结果numofmesh, numvspoint,numofregion
fracrossfra=cell(nfr+nfir,nfr+nfir-1);%
fratmaxfra=zeros(nfr+nfir,nfr+nfir-1);%线
fratminfra=zeros(nfr+nfir,nfr+nfir-1);%线
fracturemesh=cell(nf,1);%
%%
for i=1:nfr
raopoint{i,1}= intersectionsolve_new_modified_r(f((5*i-4):(5*i),:),dx,dy,dz,nx,ny,nz,xrao,yrao,zrao );
raopoint{i,2}= anosection( f((5*i-4):(5*i),:),raopoint{i,1} );
[ pointvsregion{i,1},pointvsregion{i,2} ,pointvsregion{i,3}] = interarea( raopoint{i,1},dx,dy,dz,nx,ny,nz,xrao,yrao,zrao );
end
%
if nfir>0
for i=1:nfir
raopoint{nfr+i,1}= intersectionsolve_new_modified_irr(fellip((5*i-4):(5*i),:),dx,dy,dz,nx,ny,nz,xrao,yrao,zrao );
raopoint{nfr+i,2}= anosection( f((5*(nfr+i)-4):(5*(nfr+i)),:),raopoint{nfr+i,1} );
[ pointvsregion{nfr+i,1},pointvsregion{nfr+i,2} ,pointvsregion{nfr+i,3}] = interarea( raopoint{nfr+i,1},dx,dy,dz,nx,ny,nz,xrao,yrao,zrao );
end
end
%% 线
for i=1:nf
for j=1:nf
if i>nfr || j>nfr cross=zeros(2,3);tmax=0;tmin=0;
else
% [ cross,tmax,tmin ]=frac_cross_frac( f((5*i-4):(5*i),:),f((5*j-4):(5*j),:) );
cross=zeros(2,3);tmax=0;tmin=0;
end
fracrossfra{i,j}=cross;fratmaxfra(i,j)=tmax;fratminfra(i,j)=tmin;
end
end
%% ,
% figure('color','w');
addflag=zeros(nf,1);%2
for i=1:nf
d3intersection=raopoint{i,1};anothersection=raopoint{i,2};
[ mesh ] = frac_mat_mesh( d3intersection,anothersection,pointvsregion{i,2},pointvsregion{i,1} );
% for j=1:nf
% [ mesh,d3intersection,anothersection,add_flag ]= frac_frac_mesh_modified(xrao,yrao,zrao,mesh,f(5*i-4,:),f(5*i-3,:),f(5*i-2,:),fracrossfra{i,j},fratmaxfra(i,j),fratminfra(i,j),d3intersection,anothersection,pointvsregion{i,2},pointvsregion{i,1} );
% addflag(j,1)=addflag(j,1)+add_flag;
% end
raopoint{i,1} = d3intersection; raopoint{i,2} = anothersection;%
fracturemesh{i,1}=mesh;
% subplot(nf,1,i);color_fill={'y','r','b','g'};
% plotmesh2D(mesh,raopoint{i,2},color_fill{1,mod(i,4)+1});
end
%%
%figure(2)
%network3D(dx,dy,dz,nx,ny,nz );
%hold on;
figure('color','w');
% plot_reservoir_3D(max(xrao),max(yrao),dz(1),1,1,nz);
% plot_reservoir_3D(dx(1),dy(1),dz(1),nx,ny,nz);
network3D(dx(1),dy(1),dz(1),nx,ny,nz);
% network3D(1000,700,10,1,1,1);
% network3D(800,300,10,1,1,1);
hold on;
% network3D_arbitrary(dx,dy,dz,nx,ny,nz);
% refine;
% hold on;
for i=1:nf
% color_fill={'y','r','b','g','c','m'};
% color_fill={'y','r','b','g'};
% plotmesh3D( fracturemesh{i,1},raopoint{i,1},color_fill{1,mod(i,4)+1});hold on;
if i <= 100
color_fill='b'; %
% elseif i <=19
% color_fill='b'; %
% if i == 2 || i == 9
% color_fill='r';
% end
else
color_fill='k'; %
end
% plotmesh3D( fracturemesh{i,1},raopoint{i,1},color_fill{1,mod(i,4)+1});hold on;
plotmesh3D( fracturemesh{i,1},raopoint{i,1},color_fill);hold on;
end
% % % basic_node_coord = [0,0,0];
% % % x_length = 700;
% % % y_length = 800;
% % % z_length = 10;
% % % nodes_domain = [basic_node_coord;]
% % % fill3(x,y,z,'w');
% refine1;
% refine_chengjiepaper;
% refine;
% plot_reservoir_3D(max(xrao),max(yrao),dz(1),1,1,nz);
% plot_reservoir_3D(dx(1),dy(1),dz(1),nx,ny,nz);
xlabel('x, m','FontSize',14);
ylabel('y, m','FontSize',14);
zlabel('z, m','FontSize',14);
ax = gca;
ax.FontSize = 14;
%
% zticks([0, 5]);
% yticks(-1:0.5:1);
% x轴和y轴的刻度标签
% zticklabels({'-2005', '-2000'});
% yticklabels({'-1', '-0.5', '0', '0.5', '1'});
%
% xticklabels('Rotation', 0);
% yticklabels('Rotation', 0);
% axis equal;
% refine;
% hold on
% network3D(dx(1),dy(1),dz(1),nx,ny,nz);
% network3D(max(xrao),max(yrao),max(zrao),1,1,1 );
% network3D(10,10,10,2,1,1 );
% network3D(10,10,10,6,1,2 );
alpha(1)
view(3)
% axis([min(xrao),max(xrao),min(yrao),max(yrao),min(zrao),max(zrao)]);
% axis equal
% % hold off;
%%
if modelflag==1 %2014, Monifar
[ matrixvsfra,connectmf,fracnumber,fracstart,corevsfra,connect_infrac, N,T,zf,fcinff,vf,porf,fcff,T_convection,mat_frac,cell_divided_by_fracture_flag, flowArea, perm, matrixflag, T_diff ] = connections_2014( fracturemesh,pointvsregion,raopoint,f,nf,nx,ny,nz,kx,ky,kz,pori,Kf,Wf,Porf,dxv,dyv,dzv,coordinates,nodes,NTG,addflag,valid_grids );
nfc=size(fracnumber,1);
nex=size(T,1);
r.nfc=nfc;
nc=nfc+nmc;
r.nc=nc;%
r.nex=nex;%
kf=Kf(fcinff);
wf=Wf(fcinff);
r.kf=kf;%
r.wf=wf;%
r.N=N;
r.T=T;
r.T_convection=T_convection;
r.T_diff = T_diff;
r.vf=vf;
r.V=[vm;vf];
r.porf=porf;
r.fcff=fcff;
r.mat_frac=mat_frac;
r.cell_divided_by_fracture_flag = cell_divided_by_fracture_flag;
r.flowArea=flowArea;
r.perm=perm;
r.matrixflag=matrixflag;
end
%%
z=[zm;zf];
r.z=z;
rpt = [ones(nmc, 1); zeros(nfc, 1)];
r.rpt = rpt;
r.Porf = Porf;
pori = [pori; porf];
r.pori = pori;
r.por = @(p)por(p, prpor, pori, cpor, prporf, cporf, r.rpt);
tpre=toc;
r.tpre=tpre;