表面部分のデータの抽出

(pickup_surface_data.pl)


$MASKTOP_Y = 10 ;
$SIDEWALLLEFT_X = 59 ;
$SIDEWALLRIGHT_X = 244 ;
$BOTTOM_Y = 378 ;
$DOMAINEND_X = 303 ;
↑の部分の値がわからない場合は、
#if($z[$i_x + $N_X * $i_y] > 0)
のコメントを外す


#!/usr/bin/perl

#== ./pickup_surface_data.pl

#== gnuplot 用の3次元プロットのファイルから
# 基板表面部分のデータのみを取り出す

# triplet2manyZ.pl と同様に全データを
# まず読み込み、その中から指定されたセルのみ
# pickup していく

# ここでは、X Y Z tripletのデータではなく
# 一行に1つの値を持つものとする

open(IN, $ARGV[0]);

$i_x = 0 ; # x座標用のindex
$i_y = 0 ; # y座標用のindex
$N_X = 1000 ;

while ($_ = )
{
# 数字を含んでいるか?
if($_ =~ /\d/)
{
$tmp = $_ ;
chomp $tmp ;
$z[$i_x + $N_X * $i_y] = $tmp ;

# セルのindexがわかったら下記のifはコメントアウトする
#if($z[$i_x + $N_X * $i_y] > 0)
#{
# print "i_x: " . $i_x . "\ti_y: " . $i_y .
#"\tz: " .$z[$i_x + $N_X * $i_y] . "\n" ;
#}
$i_x++ ;
}
else
{
$i_x = 0 ;
$i_y++ ;
}
}

#== 表面部分のデータをとっていく ==
# == セルのindexを用意
$MASKTOP_Y = 10 ;
$SIDEWALLLEFT_X = 59 ;
$SIDEWALLRIGHT_X = 244 ;
$BOTTOM_Y = 378 ;
$DOMAINEND_X = 303 ;

for($tmp_x = 0 ; $tmp_x < $SIDEWALLLEFT_X ; $tmp_x++)
{
print $z[$tmp_x + $N_X * $MASKTOP_Y] . "\n" ;
}
for($tmp_y = $MASKTOP_Y ; $tmp_y < $BOTTOM_Y ; $tmp_y++)
{
print $z[$SIDEWALLLEFT_X + $N_X * $tmp_y] . "\n" ;
}
for($tmp_x = $SIDEWALLLEFT_X ; $tmp_x < $SIDEWALLRIGHT_X ; $tmp_x++)
{
print $z[$tmp_x + $N_X * $BOTTOM_Y] . "\n" ;
}
for($tmp_y = $BOTTOM_Y ; $tmp_y > $MASKTOP_Y ; $tmp_y--)
{
print $z[$SIDEWALLRIGHT_X + $N_X * $tmp_y] . "\n" ;
}
for($tmp_x = $SIDEWALLRIGHT_X ; $tmp_x < $DOMAINEND_X ; $tmp_x++)
{
print $z[$tmp_x + $N_X * $MASKTOP_Y] . "\n" ;
}