⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbc_solve.m

📁 FEM tools for caculation of nonlinear problems
💻 M
字号:
function [u] = DBC_solve (K,L,force,in_data)


dim    = size(K,1);
un = setdiff([1:dim],L);

un = setdiff(un,in_data.DBC.dofs);
DBC_dofs  = [in_data.DBC.dofs' ; un'];
DBC_displ = [in_data.DBC.displ' ; zeros(length(un),1)];

clear un
unknowns = setdiff([1:dim],DBC_dofs);

if  isfield(in_data,'slaves') 
    [T,slaves_yes] = MFC_ (K,L,force,in_data.slaves,in_data.master);
    K=T'*K*T;            
    force=T'*force';     
    [cc,idx] = setdiff(unknowns,slaves_yes);
    clear cc
    unknowns = unknowns(sort(idx));
    counter = 1;
    for i=unknowns unknowns(counter)=find(T(i,:)); counter=counter+1; end
    [cc,idx] = setdiff(DBC_dofs,slaves_yes);
    clear cc
    DBC_dofs=DBC_dofs(sort(idx)); 
    counter = 1;
    for i=DBC_dofs' DBC_dofs(counter)=find(T(i,:)); counter=counter+1; end
    m = length(DBC_dofs);
    n = length(unknowns);
    u = [ K(unknowns,unknowns)  spalloc(n,m,1); spalloc(m,n,1) speye(m,m) ]\...
        [force(unknowns)-K(unknowns,DBC_dofs)*DBC_displ; DBC_displ];
    u([unknowns' ; DBC_dofs]) = u;
    u = T*u;
else
    m = length(DBC_dofs);
    n = length(unknowns);

    u = [ K(unknowns,unknowns)  spalloc(n,m,1); spalloc(m,n,1) speye(m,m) ]\...
        [force(unknowns)'-K(unknowns,DBC_dofs)*DBC_displ; DBC_displ];
    u([unknowns' ; DBC_dofs]) = u;
end



function [T,slaves_yes] = MFC_ (K,L,force,slaves,master)

dim    = size(K,1);
T      = speye(dim);
not_slaves  = [1:dim];

for i=1:size(slaves,2)
    T(slaves(i).a,master(i).a)=1;
    not_slaves = setdiff(not_slaves,slaves(i).a);
end
slaves_yes = setdiff([1:dim],not_slaves);
T=T(:,not_slaves);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -