MATLABで学ぶ振動工学 メタマテリアル・周期構造 4.0(内部自由度の縮約なし)

 

注意:以前公開した”縮約ありのメタマテリアル”の下記記事には間違いがありました。(make_AR_AL.mに間違いあり)

MATLABで学ぶ振動工学 メタマテリアル・周期構造 3.0
D&D2019で発表された「周期構造の弾性波バンドギャップに基づくシェル構造の振動低減」を参考にメタマテリアルについて解説したいと思います。FEMモデルやMK行列など必要なものがすべて載せています。

大変申し訳ありません。(気が向いたら修正します。)

 

はじめに

前回の記事で初コメントを頂きました。ありがとうございます。

コメント
①縮約有り無しで計算時間が変わってくるのでしょうか?
②縮約無しで分散関係を計算してみたいです

①に関して、「計算時間は変わらないと思う」と回答してしまいましたが、おそらく変わります。文頭で記載したように、もともとのプログラムが間違っていたので、そこを修正すると、縮退した方が計算時間が早いというのが想像できます。ごめんなさい。

②に関しては、本記事で回答させていただきます。

メタマテリアルの構造・モデル

以前の記事の繰り返しになりますが、モデルについて紹介します。なお詳細な説明については、前回の記事(文頭のリンク)をご確認ください。

この記事で使用するユニットセルのモデルは下記です。このユニットセルが連続して並んでいる平板がメタマテリアルだと思ってください。ただし、メタマテリアルの性能はユニットセルで決まるので、下記モデルだけを扱います。

FEMモデルが欲しい方・確認したい方は下記を参照ください。

MATLABで学ぶ振動工学 メタマテリアル・周期構造 3.1 (ユニットセルのFEMモデル)
メタマテリアルの解説用に使用するFEMモデルです。

・重要
ちなみに、このユニットセルのノードID(節点番号)は下図のように外周部が1~24となりように割り振っています。(ここら辺の理由もちゃんと説明した方が理解してもらえそうですが、深夜になってしまったので本日は割愛します。解説してほしい方はコメント頂けると幸いです。)

バンドギャップの計算方法

”内部自由度を縮約しない”で計算するのに必要な式についてまとめます。

メタマテリアルや周期構造は下記の定理・条件を前提としています。

  • 周期境界条件(ボルン=フォン・カルマン境界条件)
  • シュレディンガー方程式
  • シュレディンガー方程式の並進対称性
  • ハミルトニアン演算子
  • ブロッホの定理
    などなど

上記については後日詳細をまとめたいと思います。(たぶん)

ざっくりブロッホの定理までを説明すると、メタマテリアルや周期構造は”1つのユニットセルだけを考えればOKです”ってことです。

分散特性の導出方法

1つだけのユニットセル(単位ユニットセル)の運動方程式は下記で表せます。

$$
[K-ω^2 M]q =f \tag{1}
$$

Mは質量行列、Kは剛性行列、qは一般化変位、fは一般化内力です。
ユニットセルにブロッホの定理を適用するために、下記のように自由度を分類します。

\(q= \left[
\begin{array}{ccccccccc}
q_{LB}^T & q_{RB}^T & q_{LT}^T & q_{RT}^T & q_{L}^T & q_{B}^T & q_{R}^T & q_{T}^T & q_{I}^T
\end{array}
\right]^T\)

\(f= \left[
\begin{array}{ccccccccc}
f_{LB}^T & f_{RB}^T & f_{LT}^T & f_{RT}^T & f_{L}^T & f_{B}^T & f_{R}^T & f_{T}^T & f_{I}^T
\end{array}
\right]^T\)

さらに、上図のqI、fI以外を境界自由度、qI、fIを内部自由度に再分類して、下記の表現を用います。

\(q= \left[
\begin{array}{cc}
q_{Bd}^T & q_{I}^T
\end{array}
\right]^T\)

\(f= \left[
\begin{array}{cc}
f_{Bd}^T & 0
\end{array}
\right]^T\)

そうすると、境界自由度と内部自由度を分けて運動方程式を再構築することができます。

\[
(\left[ \begin{array}{cc} K_{Bd,Bd} & K_{Bd,I} \\ K_{I,Bd} & K_{I,I} \end{array} \right]
-ω^2 \left[ \begin{array}{cc} M_{Bd,Bd} & M_{Bd,I} \\ M_{I,Bd} & M_{I,I} \end{array} \right])
\left[ \begin{array}{c} q_{Bd} \\ q_{I} \end{array} \right]
=\left[ \begin{array}{c} f_{Bd} \\ 0 \end{array} \right]
\]

そして、ブロッホの定理を適用すると一般化変位は下式で表すことができます。

ここからが前回と違う

\(
\left[ \begin{array}{c} q_{Bd}  \\ q_{I} \end{array} \right
=AR
\left[ \begin{array}{c} q_{LB}  \\ q_{L}  \\ q_{B} \\ q_{I} \end{array} \right]
=\left[ \begin{array}{cccc}
I & 0 & 0 & 0 \\
λ_xI & 0 & 0 & 0 \\
λ_yI & 0 & 0 & 0 \\
λ_xλ_yI & 0 & 0 \\
0 & I & 0 & 0  \\
0 & 0 & I & 0 \\
0 & λ_xI & 0 & 0  \\
0 & 0 & λ_yI & 0  \\
0 & 0 & 0 & I  \\
\end{array} \right]
\left[ \begin{array}{c} q_{LB}  \\ q_{L}  \\ q_{B} \\ q_{I} \end{array} \right]
\)

一般化内力は下記のように表すことができます。

\(
AL f=
\left[ \begin{array}{cccc}
I & 0 & 0 & 0  \\
λ_xI^-1 & 0 & 0 & 0  \\
λ_yI^-1 & 0 & 0 & 0  \\
λ_x^-1λ_y^-1I & 0 & 0 & 0  \\
0 & I & 0 & 0  \\
0 & 0 & I  & 0 \\
0 & λ_x^-1I & 0 & 0  \\
0 & 0 & λ_y^-1I & 0  \\
0 & 0 & 0 & I  \\
\end{array} \right]^T
f=0
\)

ここで、λx、λyは波数kxおよび波数ky、ユニットセルの長さLxおよびLyを用いて下記となります。

$$
λ_x =e^{jk_x L_x}, λ_y =e^{jk_y L_y},
$$

さらに、質量行列と剛性行列の自由度を縮約することができます。

$$
MM=AL M AR, KK=AL M AR
$$

このMM行列とKK行列の固有値(共振周波数)が分散曲線となります。

MATLABでの検証結果

まず、検証結果を下記に示します。なんとなく参考文献に載っているような図になりました。下図の赤点線で示すように330~380Hzあたりと600~700Hzあたりにバンドギャップがありますね~。

参考文献ではこのユニットのパラメータースタディをしており、どんな感じにするとバンドギャップが拡大できるのかを考察しています。

MATLABコード

実行ファイル

clear all
clc

[M]=get_m;
[K]=get_k;
% % LとRの節点数
nL=5; nR=5;
% % TとBの節点数
nT=5; nB=5;

nAll=nL+nR+nT+nB+4;


Kbd=K(1:6*nAll,1:6*nAll);
KIbd=K(6*nAll+1:end,1:6*nAll);
KII=K(6*nAll+1:end,6*nAll+1:end);
nI6=length(KII); %内部自由度(内部節点×6)
LengMatrix=size(K,1);


Lx=150; Ly=150;
ux=linspace(0,pi,10); uy=linspace(0,pi,10); 

fn=cell(length(ux),length(uy));
j=sqrt(-1);
for ii1=1:length(ux)
    for ii2=1:length(uy)
        lamdax=exp(-j*ux(ii1));
        lamday=exp(-j*uy(ii2));
                 
        [AR,AL]=make_AR_AL_part2(nL,nB,length(KII),size(K,1),lamdax,lamday);
        
        KK=AL*K*AR;
        MM=AL*M*AR;
        
        [V, D]=eig(KK,MM);
        fn{ii1,ii2}=sqrt(diag(D))/(2*pi);
    end
end
%%
figure
plot(0*ones(1,length(fn{1,1})),abs(fn{1,1}),'o')
text(0,0,'Node1')
hold on
for ii1=2:10
    plot((ii1-1)*ones(1,length(fn{1,1})),abs(fn{ii1,1}),'o')
end
text(9,0,'Node13')
for ii1=1:10
    plot((ii1+10-1)*ones(1,length(fn{1,1})),abs(fn{10,ii1}),'o')
end
text(19,0,'Node14')

for ii1=1:10
    plot((ii1-1+20)*ones(1,length(fn{1,1})),abs(fn{10+1-ii1,10+1-ii1}),'o')
end
text(29,0,'Node17')
plot([9 9],[0 1500],'k--')
plot([19 19],[0 1500],'k--')
plot([29 29],[0 1500],'k--')
plot([0 29],[323 323],'r--')
plot([0 29],[380 380],'r--')
plot([0 29],[605 605],'r--')
plot([0 29],[697 697],'r--')
ylim([0 1000])
xlabel('境界の位置')
ylabel('Freq. [Hz]')

 

functionファイル

function [AR,AL]=make_AR_AL_part2(nL,nB,nI6,LengMatrix,lamdax,lamday)

AR=zeros(LengMatrix,6 + nL*6 + nB*6 + nI6);
AR(6*0+1:6*1,1:6)=eye(6);
AR(6*1+1:6*2,1:6)=lamdax*eye(6);
AR(6*2+1:6*3,1:6)=lamday*eye(6);
AR(6*3+1:6*4,1:6)=lamdax*lamday*eye(6);
        
AR(1:LengMatrix-nI6, 6+1:6+nL*6)=[AR(1:6*4,6+1:6+nL*6)
    eye(nL*6)
    zeros(nL*6)
    lamdax*eye(nL*6)
    zeros(nL*6)
    ];
        
AR(1:LengMatrix-nI6,6+nL*6+1:6 + nL*6 + nB*6)=[AR(1:6*4,6+nL*6+1:6 + nL*6 + nB*6)
    zeros(nB*6)
    eye(nB*6)
    zeros(nB*6)
    lamday*eye(nB*6)
    ];

AR(LengMatrix-nI6+1:end,6 + nL*6 + nB*6+1:6 + nL*6 + nB*6 + nI6)=eye(size(AR(LengMatrix-nI6+1:end,6 + nL*6 + nB*6+1:6 + nL*6 + nB*6 + nI6)));

AL=zeros(LengMatrix,6 + nL*6 + nB*6);
AL(1:6,1:6)=eye(6);
AL(6+1:6*2,1:6)=lamdax^-1*eye(6);
AL(6*2+1:6*3,1:6)=lamday^-1*eye(6);
AL(6*3+1:6*4,1:6)=lamdax^-1*lamday^-1*eye(6);
        
AL(1:LengMatrix-nI6, 6+1:6+nL*6)=[AL(1:6*4,6+1:6+nL*6)
    eye(nL*6)
    zeros(nL*6)
    lamdax^-1*eye(nL*6)
    zeros(nL*6)
    ];
        
AL(1:LengMatrix-nI6,6+nL*6+1:6 + nL*6 + nB*6)=[AL(1:6*4,6+nL*6+1:6 + nL*6 + nB*6)
    zeros(nB*6)
    eye(nB*6)
    zeros(nB*6)
    lamday^-1*eye(nB*6)
    ];

AL(LengMatrix-nI6+1:end,6 + nL*6 + nB*6+1:6 + nL*6 + nB*6 + nI6)=eye(size(AR(LengMatrix-nI6+1:end,6 + nL*6 + nB*6+1:6 + nL*6 + nB*6 + nI6)));


AL=AL.';

end

M行列

MATLABで学ぶ振動工学 メタマテリアル・周期構造 3.2 (質量行列)
メタマテリアルの解説用のユニットセルのM行列です。

K行列

MATLABで学ぶ振動工学 メタマテリアル・周期構造 3.3 (剛性行列)
メタマテリアルの解説用のユニットセルのK行列です。

コメント