I am solving a system of 3 PDE on a domain and I managed to do it successfully when my coefficient are the same on the whole domain. Now I am having a problem that the C coefficients are changing on the domain based on the solution. So I am gonna have two subdomains, and on each of them I have different c matrices. My code for C is as follows
function cmatrix = ccoefPsiPrincipalRev1(region,state)% global Ineg Ipos
n1 = 36; nr = numel(region.x);state.u region.xif ~isnan(state.u)variable=state;save ('v1' , 'variable') dpsixdy=state.uy(1,:) ; dpsixdx=state.ux(1,:) ; dpsiydy=state.uy(2,:) ; dpsiydx=state.ux(2,:) ;sigma1=(dpsixdy-dpsiydx)/2+sqrt(((dpsixdy+dpsiydx)/2).^2+dpsixdx.^2) ;sigma2=(dpsixdy-dpsiydx)/2-sqrt(((dpsixdy+dpsiydx)/2).^2+dpsixdx.^2) ;sign=sigma1.*sigma2 ;indp=find(sign>0) ;indn=find(sign<=0) ;cmatrix = zeros(n1,nr);normrev= (sqrt(10^-12+ (state.uy(1,indn)+state.ux(2,indn)).^2+4*(state.ux(1,indn)).^2 ) ) ;cmatrix(1,indn) = 4./normrev;cmatrix(4,indn) = 1./normrev;cmatrix(7,indn) = 1./normrev;cmatrix(10,indn) = -region.y(indn);cmatrix(11,indn) = region.y(indn);cmatrix(14,indn) = 1./normrev;cmatrix(17,indn) = 1./normrev;cmatrix(22,indn) = region.x(indn);cmatrix(23,indn) = -region.x(indn);cmatrix(26,indn) = -region.y(indn);cmatrix(27,indn) = region.y(indn);cmatrix(30,indn) = region.x(indn);cmatrix(31,indn) = -region.x(indn);normrev= (sqrt(10^-12+ (state.uy(1,indp)+state.ux(2,indp)).^2+4*(state.ux(1,indp)).^2 ) );cmatrix(10,indp) = region.y(indp);cmatrix(11,indp) = -region.y(indp);cmatrix(22,indp) = -region.x(indp);cmatrix(23,indp) = region.x(indp);cmatrix(26,indp) = -region.y(indp);cmatrix(27,indp) = region.y(indp);cmatrix(30,indp) = region.x(indp);cmatrix(31,indp) = -region.x(indp);else cmatrix = NaN(n1,nr); end
I think so many thing are wrong with it , I get this error
Error using pde.EquationModel/solveStationaryNonlinear (line 99) Nonlinear solution failed due to singular Jacobian matrix.
How can I do this?
Best Answer