SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

Python3で鉄筋コンクリートの中性化速度を計算する/Pythonサンプル

f:id:arakan_no_boku:20200624164258p:plain

目次

Pythonで鉄筋コンクリートの中性化速度を計算する

コンクリート造住宅(マンションとか)の寿命という話で、よくでてくる「コンクリートの中性化」を調べて、Pythonで「中性化速度計算」のプログラムを書いてみました。

 

コンクリートの中性化とはどういうことか

マンションのような建物(鉄筋コンクリート造)だと、上記図のように、コンクリートの中で鉄筋がはいってます。

コンクリートは性質上、上からの圧力(重さ)には強いのですが、ひっぱる力に弱くてひび割れやすい弱点があるので、それを補うためということです。

コンクリートの中の鉄筋は、コンクリートが強いアルカリ性を保っている限りは「不動態被膜」というものに守られるので、錆びたり腐食したりしません。

でも、コンクリートは空気中の二酸化炭素によって、少しずつ中性化していきますので、その中性化が鉄筋の埋まっているところに達すると、「不動態被膜」が壊れて、鉄筋がさびたり・腐食することで、建物が強度を失い寿命をむかえてしまう・・というわけです。

そのへんのことが「こちらの資料」に分かりやすく書いてありました。

f:id:arakan_no_boku:20200624165456p:plain

 

 中性化の進行度合いを計算する式

 上記資料に、経過年数によって中性化が進行する度合いを計算する式がありました。

f:id:arakan_no_boku:20200624165753p:plain

ふむふむ。

どうも、中性化速度係数というものがわかれば、比較的簡単に計算できそうです。

中性化速度係数は「こちらの資料」に参考になりそうな表がありました。

f:id:arakan_no_boku:20200624170029p:plain

意外だったのは、屋外と屋内で比べると、屋内のほうが中性化の進行係数が大きいことです。

直観的には、雨ざらしになる屋外のほうが、劣化がすすみそうですからね。

でも。

中性化は二酸化炭素によって発生するので、人が居住していて、呼吸によって二酸化炭素を大量に発生させる屋内のほうが中性化がすすむ・・と説明されれば、「なるほどな」と思います。

f:id:arakan_no_boku:20200624170423p:plain

Pythonでシュミレーションする

知ったついでに、Pythonでプログラムでも作ってシュミレーションしてみます。

上記の計算式と、コンクリート打ち放し、モルタルモルタル20mm以上の3つの係数をつかって、鉄筋が外からも中からも同じ深さに埋まっていると仮定した場合、どれぐらいの年数で中性化が鉄筋に到達するのかを、計算します。

ソースコードはこんな感じ。

'''
 コンクリートの中性化進行計算
 ・中性化係数
 ・鉄筋深さ
 上記から中性化が進行し、鉄骨に到達する経過年数を求める
 
'''
import math


class Neutral:
    '''
        経過年数ごとの中性化深さを計算し、鉄骨の深さ(depth)に到達したらブレイクする
    '''
    def __init__(self):
        self.result_list = []
        self.result_list_in = []
        self.break_year = 0
        self.dic_paint_kind = ["モルタル20mm以上", "モルタル20mm未満", "コンクリート打ち放し"]

    def calc_result(self, depth, index=0, start_year=1, span=1):
        coefficient_list = [1.51, 1.92, 2.06]
        coefficient_list_in = [3.25, 4.43, 6.35]
        if not 0 <= index <= 2:
            index = 2
        break_year_max = 200
        self.break_year = break_year_max
        self.result_list = []
        self.result_list_in = []
        for y in range(start_year, break_year_max, span):
            r = self.calc(coefficient_list[index], y)
            self.result_list.append(r)
            rin = self.calc(coefficient_list_in[index], y)
            self.result_list_in.append(rin)
            self.break_year = y
            if (r >= depth or rin >= depth):
                print(self.dic_paint_kind[index] + "の場合の寿命=" + str(y) + "年経過時")
                break
        return self.break_year

    '''
        単年の中性化した深さを計算する
    '''

    def calc(self, coefficient, year):
        return coefficient * math.sqrt(year)
    
    # 外側からの中性化深さのリスト
    def get_result_list(self):
        return self.result_list

    # 内側からの中性化深さのリスト
    def get_result_list_in(self):
        return self.result_list_in

    # 内側からの中性化深さのリスト
    def get_break_year(self):
        return self.break_year

補足するほどのことはありませんが。 

外側からと、内側からで経過年数ごとの中性化到達度を計算して、鉄筋の深さ(depth)に到達したらブレイクする・・というものです。

動作確認用はこんな感じ。

n = Neutral()
print(n.calc(1.51, 10))
a = n.calc_result(40.0)
a = n.calc_result(40.0, index=1)
a = n.calc_result(40.0, index=2)

外からも、内からも40mm(4センチ)にしてみました。

なんかの資料で、商業ビルの中性化の資料を読んだとき、その深さが40mmだったので、単純にそれを使わせてもらっただけです。

結果は以下のように表示されました。

モルタル20mm以上の場合の寿命=152年経過時
モルタル20mm未満の場合の寿命=82年経過時
コンクリート打ち放しの場合の寿命=40年経過時 

ふーーん・・ですね。

とりあえず、外壁塗装ってのの大切さだけはよくわかりました(笑)。

今回は、こんなところで。

ではでは。