function run_fea_job(param,model) clear functions nmod=0; param.onflight=1; sizeim=param.roi([2,4])-param.roi([1,3])+1; model.nscale=1; LoadParameters(param); LoadParameters(model,nmod); save(fullfile('TMP','sample0_0.mat'),'sizeim') save(fullfile('TMP','sample0.mat'),'sizeim') LoadMask(nmod); LoadMeshes(nmod); filres=param.result_file; %% load(fullfile('TMP','0_mesh_0.mat'),'xo','yo','Nnodes') extract=0; selected=[]; load(strrep(param.result_file,'.res','.dat'),'-mat','selected') if isempty(selected) Fo=zeros(2*prod(Nnodes),1); fromdic=0; indi=[];Up=[]; for iz=1:size(model.zone,2) zone=model.zone(:,iz); switch zone{4} case 6 loads=zone{7}; nodes=zone{6}; for ii=1:2 Fo(nodes+(ii-1)*prod(Nnodes))=loads(ii,2)/length(nodes); up=loads(ii,1); if ~isnan(up) indi=[indi;nodes+(ii-1)*prod(Nnodes)]; Up(end+(1:length(nodes)))=up; end end case 5 if (zone{8}>0) extract=1; end end end Up=Up(:); else fromdic=1; load(strrep(param.result_file,'.res','.dat'),'-mat','U') indi=find(~selected); indi=[indi(:);indi(:)+prod(Nnodes)]; Up=U(indi,:); Fo=zeros(2*prod(Nnodes),size(Up,2)); clear U end C=sparse(indi,1:length(indi),1,2*prod(Nnodes),length(indi)); L=1; Nddl=2*prod(Nnodes); tips=zeros(size(model.zone,2),2); cracks=[]; if extract roi=param.roi; freenodes=ones(length(xo),1); xo=xo+roi(1)-1; yo=yo+roi(3)-1; L=zeros(prod(Nnodes),1); modes=1:2; harms=0:7; nu=model.material_parameters.nu; kappa=(3-4*nu); zo=xo+1i*yo; nwi=length(modes)*length(harms); nw=0; ntip=0; for iz=1:size(model.zone,2) zone=model.zone(:,iz); if zone{4}==5 if (zone{8}>0) tips(iz,1)=ntip+1; indc=zone{10}; cnodes=indc{1}; ztip=zo(cnodes(1,1)); tt=-diff(zo(cnodes(1:2,1))); tt=tt/abs(tt); rtip=mean(abs(zo(indc{2})-ztip)); in=abs(zo-ztip)<=rtip; in(indc{2})=1; freenodes(in)=0; zzone=(zo(in)-ztip)*tt'; idin=1:prod(Nnodes); idin=idin(in); for ip=1:length(zzone) if any(cnodes(:,1)==idin(ip)) zzone(ip)=abs(zzone(ip))*exp(1i*pi); end if any(cnodes(:,2)==idin(ip)) zzone(ip)=abs(zzone(ip))*exp(-1i*pi); end end phi=Williams(zzone,modes,harms,kappa); phi=phi*tt; L(in,nw+(1:size(phi,2)))=phi; ntip=ntip+1; nw=nw+nwi; if (zone{9}>0) tips(iz,2)=ntip+1; ztip=zo(cnodes(end,1)); tt=diff(zo(cnodes(end+(-1:0),1))); tt=tt/abs(tt); rtip=mean(abs(zo(indc{3})-ztip)); in=abs(zo-ztip)<=rtip; in(indc{3})=1; freenodes(in)=0; zzone=(zo(in)-ztip)*tt'; idin=1:prod(Nnodes); idin=idin(in); for ip=1:length(zzone) if any(cnodes(:,1)==idin(ip)) zzone(ip)=abs(zzone(ip))*exp(-1i*pi); end if any(cnodes(:,2)==idin(ip)) zzone(ip)=abs(zzone(ip))*exp(1i*pi); end end phi=Williams(zzone,modes,harms,kappa); phi=phi*tt; L(in,nw+(1:size(phi,2)))=phi; nw=nw+size(phi,2); ntip=ntip+1; end end end end nfree=sum(freenodes); indK=2*nfree+(1:size(L,2)); Ln=sparse(find(freenodes),1:nfree,1,prod(Nnodes),nfree); L=[real(L);imag(L)]; L=[blkdiag(Ln,Ln),L]; Nddl=size(L,2); end %% LoadMat(nmod); CreateGradBasisFunction(1,nmod); K=AssembleStiffnessMatrix(1,nmod); Kc=[L'*(K*L),L'*C;C'*L,sparse(size(C,2),size(C,2))]; Fc=[L'*Fo;Up]; X=Kc\Fc; U=L*X(1:Nddl,:); Fl=K*U; if extract Ks=X(indK,:); else Ks=[]; end %% for iim=1:size(U,2) UpdateInternalState(nmod,U(:,iim),iim); end load(fullfile('TMP',sprintf('%d_params',nmod)),'param'); model=param; %% for iz=1:size(model.zone,2) uu=zeros(2,size(U,2)); ff=zeros(2,size(U,2)); zone=model.zone(:,iz); switch zone{4} case 6 nodes=zone{6}; for ii=1:2 indo=nodes+(ii-1)*prod(Nnodes); ff(ii,:)=sum(Fl(indo,:),1); uu(ii,:)=mean(U(indo,:),1); end model.zone{7,iz}=[uu;ff]; end end load(fullfile('TMP','params'),'param'); load(fullfile('TMP','0_mesh_0'),'Nnodes','Nelems','xo','yo','conn','elt','ng','rflag','rint'); try tips(~(cell2mat(model.zone(4,:))==5),:)=[]; model.zone(:,~((cell2mat(model.zone(4,:))==5)|(cell2mat(model.zone(4,:))==6)))=[]; cracks=find(cell2mat(model.zone(4,:))==5); catch end save(filres,'U','Fl','Ks','tips','cracks','Nnodes','Nelems','xo','yo','param','model','nmod','conn','elt','rint','ng','rflag','-v7.3'); if fromdic ReferenceImage(nmod); param.iter_max=2; param.analysis='correlation'; LoadParameters(param) [U1]=Solve2D(U,1,nmod); copyfile(fullfile('TMP','0_error_0.mat'),strrep(filres,'.res','-error.res')); save(filres,'param','-append') postproVTK([filres,''],0); else postproVTK([filres,''],0,0); end end