#!/usr/bin/perl
#
#  <ABOUT THIS SCRIPT>
#
#   2 次精度差分 <-> 4 次精度差分の切替え perl スクリプト
#   音波計算に関連する項は 4 次精度に変換しない.
#
#  <USAGE>
#  
#   * 2 次精度中心差分 -> 4 次精度中心差分
#     $ ./switch_differentiate.pl center2:center4
#
#   * 4 次精度中心差分 -> 2 次精度中心差分
#     $ ./switch_differentiate.pl center4:center2
#

# 引数読み込み

$dir = "./src/share";
@filelist = ("advectscalar",
             "advectvelx",
             "advectvelz",
             "turbulencescalar",
             "turbulencevelx",
             "turbulencevelz",
             "numdiffusionscalar",
             "numdiffusionvelx",
             "numdiffusionvelz",
             "subgridshear",
             "subgriddiff",
             "subgriddisp",
             "buoyancy"
	     );

foreach $routine (@filelist) {

$file = "${dir}/${routine}.f90";

if ($ARGV[0] eq "center2:center4") {

    print "$file : center2 -> center4.\n";

    $regrep = "use differentiate";
    $replace = "use differentiate_center4";

} elsif ($ARGV[0] eq "center4:center2") {

    print "$file : center4 -> center2.\n";

    $regrep = "use differentiate_center4";
    $replace = "use differentiate";

} else {
    die "no argument. (ex. center2:center4)";
}

# 読み込み, 書き出しファイルオープン

open(REGREP, "$file") || die "${file} not found.";
open(REPLACE, ">>TMP");

# ファイルを読み込む, 置換処理をした文字列を仮ファイルへ書き出し

while (<REGREP>) {
    $_ =~ s/$regrep/$replace/g;
    print REPLACE $_;
}

# ファイルを入れ換えて終わり

unlink("$file");

rename("TMP", "$file");

}
