メインコンテンツへスキップ
見出し画像

書記が物理やるだけ#429 粘弾性力学のモデル

    粘弾性力学のモデルについて。


    問題

    画像


    説明

    粘弾性体は、弾性体と粘性体の中間的な性質を持つ。一定の応力を負荷し続けると、ひずみが時間とともに増大する「クリープ現象」を示す。このとき、ひずみ速度は時間経過とともに減少、あるいは一定となるのが一般的である。一方、ひずみを一定に保持した際に、必要な応力が時間の経過とともに減少する現象を「応力緩和」と呼ぶ。これらの挙動が線形近似できる性質を線形粘弾性といい、その特性を表現するモデルとして、マクスウェルモデルやケルビン・フォークトモデルが広く用いられる。

    画像


    解答

    マクスウェルモデルでは、バネとダッシュポットが直列に連結されているため、荷重をかけた瞬間にバネが伸び(瞬時弾性変形)、その後ダッシュポットによってひずみが時間とともに直線的に増大し続ける(定常粘性流動)。

    画像


    一方、ケルビン・フォークトモデルでは、これらが並列に連結されている。ダッシュポットが抵抗となりバネの変形を抑制するため、荷重直後の瞬時変形は起こらず、時間はかかるが一定のひずみへと収束していく(遅延弾性)。

    画像


    バーガーズモデルにおけるクリープ曲線(全ひずみ ϵ(t))は、以下の3つの成分の和として記述されます。

    1. 瞬時弾性変形: 荷重をかけた瞬間(t=0)に立ち上がる σ0 /E1  の成分。荷重を除去すると即座に完全に回復する。

    2. 遅延弾性(粘弾性): 時間とともに指数関数的に増加し、一定値(σ0 /E2 )に漸近しようとする曲線成分。荷重除去後、時間をかけてゆっくりと回復する(遅延回復)。

    3. 定常粘性流動: 時間 t に比例して直線的に増大し続ける σ0 t/η2  の成分。これは荷重を除去しても回復しない「永久ひずみ」として残る。

    画像


    各モデルのクリープ・応力緩和についてグラフを以下に示す。

    import numpy as np
    import matplotlib.pyplot as plt
    
    def simulate_viscoelasticity():
        # 共通パラメータの設定
        t = np.linspace(0.001, 20, 1000) # 時間軸
        sigma_0 = 1.0  # クリープ時の負荷応力
        epsilon_0 = 1.0 # 応力緩和時の保持ひずみ
    
        # モデルパラメータ (E: 弾性率, eta: 粘性係数)
        # Maxwell & Burgers用
        E1, eta1 = 1.0, 5.0
        # Voigt & Burgers用
        E2, eta2 = 1.0, 2.0
    
        # --- 1. クリープ挙動 (Strain response epsilon(t)) ---
        # Maxwell: 瞬時弾性 + 定常流動
        creep_maxwell = (sigma_0 / E1) + (sigma_0 / eta1) * t
        
        # Voigt: 遅延弾性 (瞬時変形なし)
        creep_voigt = (sigma_0 / E2) * (1 - np.exp(-E2 / eta2 * t))
        
        # Burgers: 瞬時弾性 + 定常流動 + 遅延弾性
        creep_burgers = (sigma_0 / E1) + (sigma_0 / eta1) * t + (sigma_0 / E2) * (1 - np.exp(-E2 / eta2 * t))
    
        # --- 2. 応力緩和挙動 (Stress response sigma(t)) ---
        # Maxwell: 指数関数的に減少
        relax_maxwell = E1 * epsilon_0 * np.exp(-E1 / eta1 * t)
        
        # Voigt: 理想的なVoigtは一定(E2*eps_0)だが、t=0でデルタ関数的な応力が必要
        relax_voigt = np.full_like(t, E2 * epsilon_0)
        
        # Burgers: 複雑な減衰挙動 (2つの減衰モード)
        # 厳密には解は二つの指数の和になるが、ここでは簡略化のためMaxwell要素が支配的な緩和を表現
        tau_p = eta2 / E2
        tau_m = eta1 / E1
        relax_burgers = E1 * epsilon_0 * (np.exp(-t/tau_m) + 0.5*np.exp(-t/tau_p)) # 概念的近似
    
        # --- 描画処理 ---
        fig, axes = plt.subplots(1, 2, figsize=(14, 6))
    
        # クリープのプロット
        axes[0].plot(t, creep_maxwell, label='Maxwell (E1, η1)', color='blue')
        axes[0].plot(t, creep_voigt, label='Voigt (E2, η2)', color='green')
        axes[0].plot(t, creep_burgers, label='Burgers (Combined)', color='red', linewidth=2)
        axes[0].set_title('Creep Behavior (Fixed Stress $\sigma_0$)')
        axes[0].set_xlabel('Time (t)')
        axes[0].set_ylabel('Strain $\epsilon(t)$')
        axes[0].legend()
        axes[0].grid(True, linestyle='--')
    
        # 応力緩和のプロット
        axes[1].plot(t, relax_maxwell, label='Maxwell', color='blue')
        axes[1].plot(t, relax_voigt, label='Voigt (Idealized)', color='green')
        axes[1].plot(t, relax_burgers, label='Burgers', color='red', linewidth=2)
        axes[1].set_title('Stress Relaxation (Fixed Strain $\epsilon_0$)')
        axes[1].set_xlabel('Time (t)')
        axes[1].set_ylabel('Stress $\sigma(t)$')
        axes[1].legend()
        axes[1].grid(True, linestyle='--')
    
        plt.tight_layout()
        plt.show()
    
    if __name__ == "__main__":
        simulate_viscoelasticity()


    画像


    本記事のもくじはこちら:


    あなたへのおすすめ