[{"content":"問題設定 重力を受ける1次元棒の有限変形域における準静的問題を考える。 入力パラメータは以下の通りである。なお、今回はポアソン比 $\\nu=0$ として1次元問題を考える。\n長さ $L$ 初期密度 $\\rho_{0}$ ヤング率 $E$ ポアソン比 $\\nu = 0$ 支配方程式 変形勾配 基準配置を $\\bm{X}$、変形後の現在配置を $\\bm{x}$ とし、1次元棒の軸方向変位を $\\bm{u}(\\bm{X}) = \\bm{x}(\\bm{X}) - \\bm{X}$ とする。変形勾配テンソルは $\\bm{F} = \\partial \\bm{x} / \\partial \\bm{X}$ で定義される。\n今、1次元問題を考えるため、$x$方向にのみ変位が生じるとすると、変形勾配テンソルの表現行列は以下のように表される。 $$ [\\bm{F}] = \\begin{bmatrix} 1 + \\frac{\\partial u}{\\partial X} \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 1 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 1 \\end{bmatrix} $$ 変形勾配テンソルを左極分解すると $\\bm{F} = \\bm{VR}$ となるが、いま回転テンソル $\\bm{R}$ は単位テンソル $\\bm{I}$ となるため、左ストレッチテンソルは変形勾配テンソルと一致する（ $\\bm{V} = \\bm{F}$ ）。\nつまり、1次元問題における左ストレッチテンソルの表現行列は以下のように表される。 $$ [\\bm{V}] = \\begin{bmatrix} 1 + \\frac{\\partial u}{\\partial X} \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 1 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 1 \\end{bmatrix} = \\begin{bmatrix} \\lambda \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 1 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 1 \\end{bmatrix} $$ ここで、$\\lambda = 1 + \\frac{\\partial u}{\\partial X} = \\frac{\\partial x}{\\partial X}$ は軸方向の伸び（主ストレッチ）を表す。\n構成則 応力ひずみ関係として Hencky 超弾性構成則を用いる。 ひずみ測度として、左ストレッチテンソルの対数をとった $\\bm{\\varepsilon} = \\ln\\bm{V}$ を用いる。 対数ひずみテンソルの表現行列は以下のように表される。 $$ [\\bm{\\varepsilon}] = \\begin{bmatrix} \\ln \\lambda \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 0 \\end{bmatrix} $$ Hencky 超弾性構成則に基づく Kirchhoff 応力テンソル $\\bm{\\tau}$ は以下のように表される。 $$ \\bm{\\tau} = \\left(K+\\frac23 \\mu \\right) \\text{tr}(\\bm{\\varepsilon}) \\bm{I} + 2 \\mu \\bm{\\varepsilon} $$ ここで、$K$ は体積弾性係数、$G$ はせん断剛性係数である。ポアソン比 $\\nu = 0$ の場合、これらの弾性係数は以下のように表される。 $$ \\lambda = \\frac{E\\nu}{(1+\\nu)(1-2\\nu)} = 0, \\quad \\mu = \\frac{E}{2(1+\\nu)} = \\frac{E}{2} $$ よって、Kirchhoff 応力テンソルは $\\bm{\\tau} = E \\bm{\\varepsilon}$ と表され、表現行列は次式で与えられる。 $$ [\\bm{\\tau}] = \\begin{bmatrix} E \\ln \\lambda \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 0 \\end{bmatrix} $$\n強形式 基準配置における準静的問題の力のつり合い式は次式で与えられる。 $$ \\frac{\\partial}{\\partial X_{J}} \\left( P_{iJ} \\right) + \\rho_{0} g_{i} = 0 $$ ここで、$P_{iJ}$ は第一 Piola\u0026ndash;Kirchhoff 応力テンソルの成分、$\\rho_{0}$ は基準配置における密度、$g_{i}$ は重力加速度ベクトルの成分である。 第一 Piola\u0026ndash;Kirchhoff 応力テンソルと Kirchhoff 応力テンソルとの間には $\\bm{P} = \\bm{\\tau} \\bm{F}^{-\\rm T}$ が成立するので、第一 Piola\u0026ndash;Kirchhoff 応力テンソル の表現行列は次式で与えられる。 $$ [P] = [\\bm{\\tau}] [\\bm{F}]^{-1} = \\begin{bmatrix} \\frac{E \\ln \\lambda}{\\lambda} \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 0 \\\\ 0 \u0026amp; 0 \u0026amp; 0 \\end{bmatrix} $$ したがって、$i=1$（$x$方向）のみを考慮する1次元問題に帰着できるので、力のつり合い式は以下のように簡略化される。 $$ \\frac{d}{d X} \\left( \\frac{E \\ln \\lambda}{\\lambda} \\right) + \\rho_{0} g = 0 $$ ここで、$g$ は $x$ 方向の重力加速度成分である。\n境界条件は以下の通りである。 $$ \\begin{align*} \u0026amp;u(X=0) = 0 \u0026amp; \u0026amp; \\text{(左端固定)} \\\\ \u0026amp;\\lambda(X=L) = 1 \u0026amp; \u0026amp; \\text{(右端自由)} \\end{align*} $$ 右端自由の条件は、第一 Piola\u0026ndash;Kirchhoff 応力テンソルの $x$ 方向成分がゼロであること、すなわち $(E \\ln \\lambda)/\\lambda = 0$ から導かれる。\n理論解の導出 力のつり合い式を初期位置 $X$ に関して積分する。 $$ \\begin{align*} \u0026amp;\\int \\frac{d}{d X} \\left( \\frac{E \\ln \\lambda}{\\lambda} \\right) \\mathrm{d}X + \\int \\rho_{0} g \\mathrm{d}X = 0 \\\\ \u0026amp;\\rightarrow \\frac{E \\ln \\lambda}{\\lambda} + \\rho_{0} g X = C \\end{align*} $$ 境界条件 $\\lambda(X=L) = 1$ を用いると、積分定数 $C$ は $C = \\rho_{0} g L$ と求まる。 したがって、以下の非線形方程式を主ストレッチに関して解くことで、任意の位置 $X$ における伸び $\\lambda$ を求めることができる。 $$ \\begin{align} \\frac{\\ln \\lambda}{\\lambda} = \\frac{\\rho_{0} g}{E} (L - X) \\end{align} $$ ちなみにこの問題においては、$(E\\ln\\lambda)/\\lambda$ は 第一 Piola\u0026ndash;Kirchhoff 応力テンソルの $P_{11}$ 成分および Cauchy 応力テンソルの $\\sigma_{11}$ 成分に相当する。\n現在位置 $x$ は、伸び $\\lambda = \\partial x / \\partial X$ を $X$ で積分することで求められる。 $$ x(X) = \\int \\lambda(X) \\mathrm{d}X $$ 右辺の積分は $X$ を $\\lambda$ の関数に変換して計算する。 $$ \\begin{align*} \u0026amp;X = L - \\frac{E}{\\rho_{0} g} \\frac{\\ln \\lambda}{\\lambda} \\\\ \u0026amp;\\rightarrow \\mathrm{d}X = - \\frac{E}{\\rho_{0} g} \\frac{1 - \\ln \\lambda}{\\lambda^{2}} \\mathrm{d}\\lambda \\end{align*} $$ したがって、現在位置 $x$ は以下のように表される。 $$ \\begin{align*} x(\\lambda) \u0026amp;= -\\frac{E}{\\rho_{0} g} \\int \\frac{1 - \\ln \\lambda}{\\lambda} \\mathrm{d}\\lambda \\\\ \u0026amp;= -\\frac{E}{\\rho_{0} g} \\left( \\ln \\lambda - \\frac{(\\ln \\lambda)^{2}}{2} \\right) + C' \\end{align*} $$ 境界条件 $x(X=0) = 0$ を用いると、積分定数 $C\u0026rsquo;$ は $C\u0026rsquo; = \\frac{E}{\\rho_{0} g} \\left( \\ln \\lambda(0) - \\frac{(\\ln \\lambda(0))^{2}}{2} \\right)$ と求まる。 ここで、$\\lambda(0)$ は $X=0$ における伸びであり、非線形方程式 $\\frac{\\ln \\lambda(0)}{\\lambda(0)} = \\frac{\\rho_{0} g}{E} L$ を解くことで求められる。 以上より、現在位置 $x(X)$ は以下のように表される。 $$ \\begin{align*} x(X) \u0026amp;= -\\frac{E}{\\rho_{0} g} \\left( \\ln \\lambda - \\frac{(\\ln \\lambda)^{2}}{2} \\right) + \\frac{E}{\\rho_{0} g} \\left( \\ln \\lambda_{0} - \\frac{(\\ln \\lambda_{0})^{2}}{2} \\right) \\\\ \u0026amp;= -\\frac{E}{\\rho_{0} g} \\left( \\ln \\frac{\\lambda(X)}{\\lambda(0)} - \\frac12 (\\ln \\lambda(X) \\lambda(0)) \\ln \\frac{\\lambda(X)}{\\lambda(0)} \\right) \\\\ \u0026amp;= -\\frac{E}{\\rho_{0} g} \\left(\\ln \\frac{\\lambda(X)}{\\lambda(0)} \\right) \\left( 1 - \\frac12 \\ln (\\lambda(X) \\lambda(0)) \\right) \\end{align*} $$\n主ストレッチの解 まず、重力加速度 $g$ の符号により場合分けする。 $k={\\rho_{0} |g| (L-X) }/ E$ とすると、主ストレッチに関する非線形方程式 (1) は以下のように表される。 $$ \\begin{align} \\frac{\\ln \\lambda}{\\lambda} = \\begin{cases} k \u0026amp; (g \\ge 0) \\ -k \u0026amp; (g \u0026lt; 0) \\end{cases} \\end{align} $$ はじめに $g\u0026gt;0$ のとき、左辺 $\\ln\\lambda / \\lambda$ は $\\lambda = e$ のとき最大値 $1/e$ を取るので、 $$ \\begin{align} k = \\frac{\\rho_0 |g|}{E} (L - X) \\le \\frac{\\rho_0 |g| L}{E} \\le \\frac{1}{e} \\end{align} $$ を満足するパラメータを入力する必要がある。主ストレッチに関する非線形方程式 (2) を変形することで、以下の式が得られる。 $$ \\begin{align*} \u0026amp;\\lambda = e^{\\lambda k} \\\\ \u0026amp;\\rightarrow -k \\lambda e^{-k \\lambda} = -k \\\\ \u0026amp;\\rightarrow W(z) e^{W(z)} = z \\end{align*} $$ ここで、$z = -k$、$W(z) = z \\lambda$ とおくと、上式は Lambert の W 関数 の定義式となる。 いま $z = -k \\le 0$ であるため、実数解をもつ $z$ の範囲は $-1/e \\le z \u0026lt; 0$ となるが、これは式 (3) に整合している。 対応する Lambert の W 関数の値は主枝 $W_{0}(z)$ と分枝 $W_{-1}(z)$ の2通りが存在するが、今回は主枝 $W_{0}(z)$ を対象とする。\n一方で、 $g\u0026lt;0$ のときは任意の入力パラメータに対して解を持ち、上と同様の式変形により次式を得る。 $$ \\begin{align*} \u0026amp;\\lambda = e^{-\\lambda k} \\\\ \u0026amp;\\rightarrow k \\lambda e^{k \\lambda} = k \\\\ \u0026amp;\\rightarrow W(z) e^{W(z)} = z \\end{align*} $$\n以上を整理すると、主ストレッチは次式で与えられる。 $$ \\lambda = \\frac{W(z)}{z}, \\quad z = \\begin{cases} -k \u0026amp;= -\\frac{\\rho_{0} |g|}{E} (L - X) \u0026amp; (g \\ge 0) \\\\ k \u0026amp;= \\frac{\\rho_{0} |g|}{E} (L - X) \u0026amp; (g \u0026lt; 0) \\end{cases} $$\n具体例 具体的な数値解析例として、以下の入力データを用いる。\n長さ $L = 1$ m 初期密度 $\\rho_{0} = 1$ kg/m³ ヤング率 $E = 1$ Pa ポアソン比 $\\nu = 0$ 重力加速度 $g = -1$ m/s² このとき、主ストレッチに関する非線形方程式 $\\frac{\\ln \\lambda}{\\lambda} = \\frac{\\rho_{0} g}{E} (L - X)$ をもとに、 $X = 0$ における主ストレッチの値を数値的に求めると次の値が得られる。 $$\\lambda(X=0) \\approx 0.567$$ この値を代入して、現在位置 $x(X)$ と応力分布 $\\sigma(X)$ をプロットしたものを以下に示す。 解析モデルとして、長さ $L$ の1次元棒を一辺 0.02 m の立方体でメッシュ分割し、長手方向以外は1要素でメッシュ分割した有限要素法（FEM）により実施した。 FEMQ1は線形基底関数を、FEMQ2は2次B-spline基底関数を使用した。\n線形基底関数のFEMでは、基底関数勾配が要素間で不連続になるため、応力値は要素内一定となり、要素内平均値が理論解と一致するような分布となっている。一方、2次B-spline基底関数のFEMでは、基底関数勾配が要素間で連続になるため、応力分布が滑らかに表現されていることがわかる。\n初期位置に対する変位分布 初期位置に対する圧力分布 理論解の計算方法 理論解は以下のpythonコードにより計算した。\nコード詳細 import numpy as np import mpmath from scipy.special import lambertw import matplotlib.pyplot as plt import pandas as pd def solve_for_lam(X_array, coeff, L): \u0026#34;\u0026#34;\u0026#34; Solves the equation (ln(lam))/lam - coeff * (L - X) = 0 for lam for each value in X_array. \u0026#34;\u0026#34;\u0026#34; z = np.real(-coeff * (L - X_array)) W = np.real(lambertw(z, k=0, tol=1e-8)) # Create an array of ones as a base lam_solutions = np.ones_like(z, dtype=float) # Perform division only where C is not zero np.divide(W, z, out=lam_solutions, where=(z != 0.0)) return lam_solutions def solve_for_x(lam, coeff): lam0 = lam[0] print(\u0026#34;lambda at X=0:\u0026#34;, lam0) x_sol = -1.0/coeff * np.log(lam / lam0) * (1.0 - 0.5*np.log(lam*lam0)) return np.array(x_sol) # Main execution if __name__ == \u0026#34;__main__\u0026#34;: # Input data (Poisson\u0026#39;s ratio = 0.0) E = 20.0e0 # Young\u0026#39;s modulus rho = 1.0 # Initial density g = -1.0 # Gravitational acceleration L = 1.0 # Initial length of the bar coeff = rho * g / E # Consider only the main branch for Lambert W function if -np.exp(-1.0) \u0026gt; -coeff*L: print(\u0026#34;No solution exists for the given parameters.\u0026#34;) exit() # Define array X Xinit = np.linspace(0.0, L, 100) # Calculate lam for each X lam_array = solve_for_lam(Xinit, coeff, L) # Stress in x direction stress = E * np.log(lam_array) / lam_array # Calculate current x(X) x_sol = solve_for_x(lam_array, coeff) displ = x_sol - Xinit # Plot lam(X) distribution plt.figure(figsize=(10, 6)) plt.plot(Xinit, lam_array, marker=\u0026#39;.\u0026#39;, linestyle=\u0026#39;-\u0026#39;) plt.xlabel(r\u0026#34;$X$\u0026#34;) plt.ylabel(r\u0026#34;$\\lambda$\u0026#34;) plt.title(r\u0026#34;$\\lambda$ s.t. $(\\ln\\lambda)/\\lambda + (\\rho*g/E)*(L-X) = 0$\u0026#34;) plt.grid(True) plt.savefig(\u0026#34;figs/X_vs_lambda.jpg\u0026#34;) # Plot displacement(X) distribution plt.figure(figsize=(10, 6)) plt.plot(Xinit, displ, marker=\u0026#39;.\u0026#39;, linestyle=\u0026#39;-\u0026#39;) plt.xlabel(r\u0026#34;$X$\u0026#34;) plt.ylabel(r\u0026#34;$u(X)$\u0026#34;) plt.title(r\u0026#34;Displacement $u(X)$\u0026#34;) plt.grid(True) plt.savefig(\u0026#34;figs/X_vs_displacement.jpg\u0026#34;) # Plot stress distribution plt.figure(figsize=(10, 6)) plt.plot(Xinit, stress, marker=\u0026#39;.\u0026#39;, linestyle=\u0026#39;-\u0026#39;) plt.xlabel(r\u0026#34;$X$\u0026#34;) plt.ylabel(r\u0026#34;$\\sigma(X)$\u0026#34;) plt.title(r\u0026#34;Stress $\\sigma(X)$\u0026#34;) plt.grid(True) plt.savefig(\u0026#34;figs/X_vs_stress.jpg\u0026#34;) # Plot stress-strain curve plt.figure(figsize=(10, 6)) plt.plot(np.log(lam_array)/lam_array, stress, marker=\u0026#39;.\u0026#39;, linestyle=\u0026#39;-\u0026#39;) plt.xlabel(r\u0026#34;$\\ln\\lambda/\\lambda$\u0026#34;) plt.ylabel(r\u0026#34;$\\sigma(X)$\u0026#34;) plt.title(r\u0026#34;Stress-strain\u0026#34;) plt.grid(True) plt.savefig(\u0026#34;figs/ss_curve.jpg\u0026#34;) plt.show() df = pd.DataFrame({ \u0026#39;X\u0026#39;: Xinit, \u0026#39;displacement\u0026#39;: displ, \u0026#39;lambda\u0026#39;: lam_array, \u0026#39;stress\u0026#39;: stress }) df.to_csv(\u0026#34;results_1D_bar_finite_deformation.csv\u0026#34;, index=False) ","permalink":"https://riichisugai.github.io/ja/blog/02-1dbar-finitestrain/","summary":"重力下における1次元棒の変形を、Hencky 超弾性構成則に基づいて理論解を導出しました。その結果をもとに、有限要素法（FEM）で実施した数値解析結果と比較しました。","title":"02: 重力をうける1次元棒の有限変形準静的問題"},{"content":"はじめての Web サイト作成を、 Hugo を利用して行いました。 以下では、その手順を残しておきます。\n静的サイトジェネレーター 特徴 plain HTML Jekyll Hugo 言語基盤 HTML/CSS/JS Ruby Go セットアップ なし 中程度 やや難 GitHub Pages対応 ◎（直接OK） ◎（公式サポート） ○（ビルド後にpush） ビルド速度 – 遅め 超高速 多言語対応 手動 一部可能 ◎（標準機能） テンプレート/テーマ 手動 多い 非常に多い 向き 小規模・自由設計 中規模・ブログ型 中〜大規模・多言語型 今回は Hugo (ヒューゴ) を利用することにしました。 選択のポイントは以下の通り。\nブログや研究記録のようにページが増えるサイトの場合には、Jekyll、Hugo が向いている 日本語と英語の両方に対応させたい Github Actions で自動化することで、 Github Pages への対応 ◎ 環境構築 Hugo のインストール macOS の場合\nbrew install hugo Linux の場合（ apt だとバージョンが古く、 hugo.toml が読みとれません）\nsudo snap install hugo --channel=extended Windows の場合（詳細はこちら から）\nwinget install Hugo.Hugo.Extended hugo version でバージョンが確認できればOK。\n新規サイトの作成 作成したい場所で、以下のコマンドを入力（ my-website には任意の名前をいれる）\nhugo new site my-website cd my-website Web サイトのテーマを選定 テーマ名 特徴 hugo-coder シンプル＆軽量。プロフィールサイトに最適。 PaperMod 見やすい＆ブログ形式。学術用途にも人気。 Academic (Wowchemy) 研究者向け最強。論文リストやプロジェクト紹介に対応。やや重め。 PaperMod を選択。\n上で作成した web サイト用のディレクトリに移動したあと、以下のコマンドによりテーマをクローン。\ngit init git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod 既存のリポジトリをクローンする場合には、以下のコマンドでサブモジュールを読み取る必要があります。\ngit submodule update --init --recursive 以上で環境構築は終了。\nHugo での Web ページ作成方法 Web ページのコンテンツ作成は、基本的にマークダウン形式のファイルを編集することで行います。作成したmdファイルをもとに、Hugo が静的サイトとして HTML を出力します。\nファイル構造 . ├── .github/ │ └── workflows/ │ └── deploy.yml # Github Actions による自動化スクリプト ├── archetypes/ │ └── default.md # マークダウンファイルのテンプレを記入 ├── assets/ ├── content/ # サイトの内容を作成 │ ├── en/ # 英語用 │ │ │── _index.md # 各セクションのトップページの説明 │ │ └── blog/ │ │ │── _index.md # 各セクションのトップページの説明 │ │ └── 01-first-post.md # そのページのコンテンツ │ └── ja/ # 日本語用 │ ├── _index.md │ └── blog/ │ │── _index.md # 各セクションのトップページの説明 │ └── 01-first-post.md # そのページのコンテンツ ├── data/ ├── hugo.toml # サイトの設定を記入 ├── i18n/ ├── layouts/ ├── public/ # Hugo によりビルドされたファイル群 ├── static/ └── themes/ └── PaperMod/ ├── ... (テーマのファイル) archetypes/default.md の設定 これを設定することで、hugo new \u0026lt;file-name\u0026gt;.md で作成するコンテンツ用の md ファイルのテンプレートを作成できます。\n--- date: \u0026#39;{{ .Date }}\u0026#39; draft: true title: \u0026#39;{{ replace .File.ContentBaseName \u0026#34;-\u0026#34; \u0026#34; \u0026#34; | title }}\u0026#39; type: \u0026#39;{{ .Section }}\u0026#39; tags: [] categories: [] --- hugo.toml の設定 Hugo サイト全体の設定を管理する中心的なファイル。 これによりサイトの見た目、機能、構造を決定します。\nbaseURL = \u0026#39;https://riichisugai.github.io/\u0026#39; # サイトの公開URL languageCode = \u0026#39;en-us\u0026#39; # サイトの主要言語 theme = \u0026#34;PaperMod\u0026#34; # 使用するテーマデザイン title = \u0026#39;Riichi Sugai\u0026#39; # サイトのタイトル relativeURLs = false # 相対URLを無効化 canonifyURLs = true # 絶対URLを使用 # デフォルト言語を明示 defaultContentLanguage = \u0026#34;en\u0026#34; defaultContentLanguageInSubdir = true # 多言語対応の設定 [languages] # 英語ページの設定 [languages.en] weight = 1 languageName = \u0026#34;English\u0026#34; contentDir = \u0026#34;content/en\u0026#34; # サイトのコンテンツが置かれているディレクトリを指定 mainSections = [\u0026#34;blog\u0026#34;] # 英語ページのヘッダーメニュー設定 [[languages.en.menu.main]] identifier = \u0026#34;blog\u0026#34; name = \u0026#34;Blog\u0026#34; # サイトに表示するヘッダー名 url = \u0026#34;/blog/\u0026#34; # サイトのディレクトリ weight = 1 # 表示順序の優先度 # 日本語ページの設定 [languages.ja] weight = 2 languageName = \u0026#34;日本語\u0026#34; contentDir = \u0026#34;content/ja\u0026#34; mainSections = [\u0026#34;blog\u0026#34;] # 日本語ページのヘッダーメニュー設定 [[languages.ja.menu.main]] identifier = \u0026#34;blog\u0026#34; name = \u0026#34;Blog\u0026#34; url = \u0026#34;/blog/\u0026#34; weight = 1 [params] # ページ内のコードブロックにコピーボタンを表示 ShowCodeCopyButtons = true author = \u0026#34;Riichi Sugai\u0026#34; ## プロフィールモードの設定 #[params.profileMode] # enabled = true # プロフィールモードを有効化 # ホームページ情報の設定 [params.homeInfoParams] ShowRecentPosts = true # 最近の投稿を表示 RecentPostsCount = 3 # 表示する件数を3に設定 # Validate Top page [outputs] home = [\u0026#34;HTML\u0026#34;, \u0026#34;RSS\u0026#34;, \u0026#34;JSON\u0026#34;] トップページの作成 content/en/ と content/ja/ の直下にトップページを作成します。\nhugo new content/en/_index.md hugo new content/ja/_index.md _index.md はトップページとして機能するもので、各セクションに用意するものです。そのフォルダ自身にコンテンツと設定を与えるための重要な役割を持ちます。\n※ 注意\nコンテンツファイルを作成する際には必ず hugo new コマンドを使用してください。Web ページの設定や表示に不具合が生じます。\nコンテンツの作成 作成するコンテンツの例として blog を作ります。\nトップページと同じ階層にディレクトリ blog を作成して、そのディレクトリに移動します。\n/content/ja/blog/ にトップページ _index.md を作成 hugo new /content/ja/blog/_index.md そして以下の内容のファイルを作成します。\n--- date: \u0026#39;2025-11-01T02:14:44+09:00\u0026#39; draft: false title: \u0026#39;Blog\u0026#39; type: \u0026#39;blog\u0026#39; tags: [] categories: [] --- ここで、draft: false は公開設定になります。一方で、 draft: true でウェブに表示しない下書きの状態にできます。\n/content/ja/blog/ にコンテンツ 01-first-post.md を作成 hugo new /content/ja/blog/01-first-post.md そしてファイルの冒頭には以下を記入します。\n--- date: \u0026#39;2025-11-01T02:14:44+09:00\u0026#39; draft: false title: \u0026#39;\u0026lt;Title of blog\u0026gt;\u0026#39; type: \u0026#39;blog\u0026#39; tags: [] categories: [] --- トップページと同様の冒頭にすることで、トップページ内に各コンテンツがカード形式で表示されるようになります。 コンテンツの中身はこれに続くように記入していきます。記入方法は通常の markdown の記法に倣います。\nサーバーの起動 Webページの確認のために以下のコマンドを実行します。\nhugo server -D オプション -D をつけることで draft: true のページも出力されます。\nGithub.io での公開 Webページを公開するのに Github が提供する静的なサイトを無料で公開できるホスティングサービスである Github Pages を利用します。\nはじめに \u0026lt;username\u0026gt;.github.io という Github のリポジトリをpublic で作成 [Settings] から Default branch を gh-pages とする（任意） [Settings] \u0026gt; [Pages] で Source は Deploy from a branch として、2. で設定した branch を指定 次に公開するWebページの情報を push する手順を示します。\nhugo を実行して web サイトをビルド cd public git init git remote add origin https://github.com/riichisugai/riichisugai.github.io.git git add . git commit -m \u0026quot;Initial Commit\u0026quot; git push -u origin gh-pages github.io のページで [Settings] \u0026gt; [Pages] の Branch を gh-pages に設定 これで公開可能。2回目以降は　1 → 2 → 5 → 6 → 7 を実行します。\nGithub Actions での自動作成 目標 ソースコード用リポジトリ（ hugo-source ）の main ブランチにプッシュするだけで、以下のサイト公開までの処理を全自動で実行することを目指します。\nGitHub のサーバー上でサイトをビルド（hugo コマンドを実行） 生成された public ディレクトリの中身を抽出 公開用リポジトリ（ riichisugai.github.io ）の gh-pages ブランチにプッシュ 準備するもの ソースコード用リポジトリ: riichisugai/hugo-source 公開用リポジトリ: riichisugai/riichisugai.github.io パーソナルアクセストークン (PAT): 公開用リポジトリに書き込む権限 (repo スコープ) を持ったトークン これは、GitHub Actions がユーザーの代わりに riichisugai.github.io へプッシュする際のパスワードとして機能 GitHub Secret: 上記で作成した PAT を、ソースコード用リポジトリ（hugo-source）に安全に保管するための場所 今回は GH_PAT という名前で登録 導入手順 ステップ1: パーソナルアクセストークン (PAT) の準備\nGitHub の [Settings] \u0026gt; [Developer settings] \u0026gt; [Personal access tokens] \u0026gt; [Tokens (classic)] に移動 [Generate new token] をクリック Note に「Hugo Deploy」など分かりやすい名前を記入 Expiration（有効期限）を選択（セキュリティのため、無期限は非推奨）。 Select scopes で repo にチェック Generate token をクリックし、表示されたトークンを必ずコピーして安全な場所に一時保管（この画面を閉じると二度と表示されない）。 ステップ2: GitHub Secret の登録\nソースコード用リポジトリ（ riichisugai/hugo-source ）の [Settings] タブに移動 左側メニューの [Secrets and variables] \u0026gt; [Actions] を選択 New repository secret ボタンをクリック Name に GH_PAT と入力 Secret の欄に、ステップ1でコピーしたPATを貼り付け Add secret をクリックして保存 ステップ3: ワークフローファイルの作成\nソースコード用リポジトリ（hugo-source）のルートに、.github/workflows というディレクトリを作成 その中に deploy.yml という名前のファイルを作成し、以下の内容を貼り付け # ワークフローの名前 name: Deploy Hugo site to GitHub Pages # ワークフローが実行されるタイミング on: push: branches: - main # hugo-source の main ブランチにプッシュされた時のみ実行 # 実行される一連のジョブ jobs: build-and-deploy: # ジョブを実行する仮想環境の種類: 自分の OS によらず以下でOK runs-on: ubuntu-latest # ジョブの各ステップ steps: # 1️⃣ ソースコードをチェックアウト - name: Checkout source code uses: actions/checkout@v4 with: submodules: true # PaperModテーマのようなサブモジュールも取得 fetch-depth: 0 # Gitの履歴をすべて取得 persist-credentials: false # checkout 後の credentials を無効化 # 2️⃣ Hugoの環境をセットアップ - name: Setup Hugo uses: peaceiris/actions-hugo@v3 with: hugo-version: \u0026#39;latest\u0026#39; # 最新版のHugoを使用 # 3️⃣ コミットメッセージ作成 - name: Generate commit message id: commitmsg run: | # 直前のコミットとの差分を取得 CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD content 2\u0026gt;/dev/null) if [ -z \u0026#34;$CHANGED_FILES\u0026#34; ]; then echo \u0026#34;MESSAGE=Deploy site on $(date \u0026#39;+%Y-%m-%d %H:%M:%S\u0026#39;)\u0026#34; \u0026gt;\u0026gt; $GITHUB_ENV else TITLES=$(echo \u0026#34;$CHANGED_FILES\u0026#34; \\ | sed \u0026#39;s|content/||g\u0026#39; \\ | sed \u0026#39;s|/_index.md||g\u0026#39; \\ | sed \u0026#39;s|.md||g\u0026#39; \\ | tr \u0026#39;\\n\u0026#39; \u0026#39;, \u0026#39;) echo \u0026#34;MESSAGE=Update: ${TITLES} ($(date \u0026#39;+%Y-%m-%d %H:%M:%S\u0026#39;))\u0026#34; \u0026gt;\u0026gt; $GITHUB_ENV fi echo \u0026#34;Commit message: $MESSAGE\u0026#34; # 4️⃣ Hugoサイトをビルド - name: Build Hugo site run: hugo --cleanDestinationDir --minify # hugoコマンドでサイトをビルドし、ファイルを圧縮 # 5️⃣ 公開用リポジトリにプッシュ - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: # ステップ1,2で設定したPATと公開先リポジトリを指定 personal_token: ${{ secrets.GH_PAT }} external_repository: riichisugai/riichisugai.github.io # ソース用リポジトリと公開用リポジトリが別の場合は external_repository: \u0026#34;ユーザー名/リポジトリ名\u0026#34; が必要 # 公開するディレクトリとブランチを指定 publish_dir: ./public publish_branch: gh-pages # riichisugai.github.io の gh-pages ブランチに公開 # コミットメッセージとコミッター情報を設定 commit_message: \u0026#34;Deploy: ${{ github.event.head_commit.message }}\u0026#34; user_name: \u0026#39;github-actions[bot]\u0026#39; user_email: \u0026#39;github-actions[bot]@users.noreply.github.com\u0026#39; Checkout source; with: submodules: true がないと submodule であるテーマを取得を反映できないので注意が必要 ステップ4: ワークフローの実行と確認\n作成した deploy.yml ファイルを hugo-source リポジトリの main ブランチにプッシュ プッシュが完了すると、自動的に GitHub Actions が起動 hugo-source リポジトリの Actions タブで、ワークフローが実行されている様子を確認 ワークフローが緑色のチェックマークで正常に完了すれば、自動デプロイは成功 サイトが正しく表示されているか確認 以上が Hugo による Web サイト作成と、 Github Pages を利用した公開の手順になります。\n","permalink":"https://riichisugai.github.io/ja/blog/01-first-post/","summary":"Hugo を利用して、web サイトを作成し、GitHub Pages で公開する手順をまとめました。","title":"01: Hugo による Web サイト作成"},{"content":"2025年9月2日から5日にかけて、スペインのバルセロナで開催された COMPLAS2025 に参加しました。\n本会では、VMS-Stabilized Mixed Implicit Material Point Method for Finite Deformation Elastoplastic Analysis of the Modified Cam-Clay Model というタイトルで発表を行い、陰解法 Material Point Method (MPM) における弾塑性材料の圧力安定化手法について議論しました。\n","permalink":"https://riichisugai.github.io/ja/news/complas2025/","summary":"2025年9月2日から5日にかけて、スペインのバルセロナで開催された COMPLAS2025 に参加しました。","title":"COMPLAS2025 に参加しました"}]