function BCG_3D_(X,Y,Z,dx,dy,dz,K2,Omega,p_r,p_i,b,gamma,alpha_,c,errorCG,error_tolerance)
global Psi;
R=p_r*(cos(Omega*X)+cos(Omega*Y))+1i*p_i*(sin(Omega*X)+sin(Omega*Y)); %Omega=Ω
% R=1./(1+(X.^2+Y.^2+Z.^2).^3);
K22=sqrt(K2+(K2==0).*1e-9);
exp1=2/3*pi^2./K22.*(sqrt(3).*exp(K22./2).*sin(K22*sqrt(3)/2)-exp(K22/2).*cos(K22*sqrt(3)/2)+1).*exp(-K22);
u1=real(Psi);u2=imag(Psi);Uerror=1;
ncg=0; nnt=0;
while 1
UU=sum(sum(sum(abs(u1).^2+abs(u2).^2)))*dx*dy*dz;
nnt=nnt+1;
L0u=0.5*ifftn(K2.*fftn(u1))-real(R).*u1+imag(R).*u2-gamma*(abs(u1).^2+abs(u2).^2).*u1+b*u1-alpha_*ifftn(exp1.*fftn((abs(u1).^2+abs(u2).^2))).*u1;
L0v=0.5*ifftn(K2.*fftn(u2))-real(R).*u2-imag(R).*u1-gamma*(abs(u1).^2+abs(u2).^2).*u2+b*u2-alpha_*ifftn(exp1.*fftn((abs(u1).^2+abs(u2).^2))).*u2;
Uerror=max(max(max(abs(L0u)+abs(L0v))));Du=0*X;Dv=Du;
if Uerror
break
end
MinvL0u=ifftn(fftn(L0u)./(0.5*K2+c));
MinvL0v=ifftn(fftn(L0v)./(0.5*K2+c));
Ru=-L0u; MinvRu=ifftn(fftn(Ru)./(0.5*K2+c));gRu=Ru;
Rv=-L0v; MinvRv=ifftn(fftn(Rv)./(0.5*K2+c));gRv=Rv;
R2=sum(sum(sum(gRu.*MinvRu+gRv.*MinvRv))); R20=R2;
Du_=MinvRu;Dv_=MinvRv;gDu_=Du_;gDv_=Dv_;
display(['b:' num2str(b) ' nnt' num2str(nnt) ' ncg:' num2str(ncg) ' error:' num2str(Uerror) ' U:' num2str(UU) ' R20:' num2str(R20) ] );
while (abs(R2)> abs(R20)*errorCG^2)
T1=Du_;
T2=Dv_;
F11= 0.5*ifftn(K2.*fftn(T1))-(real(R)+gamma*(3*u1.^2+u2.^2)-b).*T1-alpha_*ifftn(exp1.*fftn(u1.^2+u2.^2)).*T1-alpha_*2*ifftn(exp1.*fftn(u1.*T1)).*u1;
F12= (imag(R)-gamma*2*u1.*u2).*T2-alpha_*2*ifftn(exp1.*fftn(u2.*T2)).*u1;
F21= -(imag(R)+gamma*2*u1.*u2).*T1-alpha_*2*ifftn(exp1.*fftn(u1.*T1)).*u2;
F22= 0.5*ifftn(K2.*fftn(T2))-(real(R)+gamma*(3*u2.^2+u1.^2)-b).*T2-alpha_*ifftn(exp1.*fftn(u1.^2+u2.^2)).*T2-alpha_*2*ifftn(exp1.*fftn(u2.*T2)).*u2;
L1Du=F11+F12;L1Dv=F21+F22;
T1=gDu_;
T2=gDv_;
F11= 0.5*ifftn(K2.*fftn(T1))-(real(R)+gamma*(3*u1.^2+u2.^2)-b).*T1-alpha_*ifftn(exp1.*fftn(u1.^2+u2.^2)).*T1-alpha_*2*ifftn(exp1.*fftn(u1.*T1)).*u1;
F12= -(imag(R)+gamma*2*u1.*u2).*T2-alpha_*2*ifftn(exp1.*fftn(u2.*T2)).*u1;
F21= (imag(R)-gamma*2*u1.*u2).*T1-alpha_*2*ifftn(exp1.*fftn(u1.*T1)).*u2;
F22= 0.5*ifftn(K2.*fftn(T2))-(real(R)+gamma*(3*u2.^2+u1.^2)-b).*T2-alpha_*ifftn(exp1.*fftn(u1.^2+u2.^2)).*T2-alpha_*2*ifftn(exp1.*fftn(u2.*T2)).*u2;
gL1Du=F11+F12;gL1Dv=F21+F22;
a=R2/sum(sum(sum(gDu_.*L1Du+gDv_.*L1Dv)));
Du=Du+a*Du_;Dv=Dv+a*Dv_;
Ru=Ru-a*L1Du;Rv=Rv-a*L1Dv;
gRu=gRu-a*gL1Du;gRv=gRv-a*gL1Dv;
MinvRu=ifftn(fftn(Ru)./(0.5*K2+c));MinvRv=ifftn(fftn(Rv)./(0.5*K2+c));
gMinvRu=ifftn(fftn(gRu)./(0.5*K2+c));gMinvRv=ifftn(fftn(gRv)./(0.5*K2+c));
R2old=R2;
R2=sum(sum(sum(gRu.*MinvRu+gRv.*MinvRv)));
bb=R2/R2old;
Du_=MinvRu+bb*Du_;Dv_=MinvRv+bb*Dv_;
gDu_=gMinvRu+bb*gDu_;gDv_=gMinvRv+bb*gDv_;
ncg=ncg+1;
display(['b:' num2str(b) ' nnt' num2str(nnt) ' ncg:' num2str(ncg) ' error:' num2str(Uerror) ' U:' num2str(UU) ' R2:' num2str(R2) ] );
end
u1=u1+Du;u2=u2+Dv;
Psi=u1+u2*1i;
end
end
那这个程序的参数也是这样输入吗?还有这个程序是什么意思啊