📄 dotest.pl
字号:
#!/usr/bin/perl# -- so option ##$f="10 + 1/(1+ 100**(sin(x*3)-y)) ";$f = "10 + sin(x/10)*cos(y/3)";$err=0.001;$errg=0.05;$nbiteration=3;$bamg="../../bamg-g";$quadoption="";$bamgoption=" -AbsError -NbJacobi 3 -ratio 2 -anisomax 30";$quadoption=" -2q -thetaquad 30 -coef 2";# --- change x in $x and y in $y $_=$f;s/x/\$x/g;s/y/\$y/g;$f="$_;";print "The function = f(x,y) = $f \n";#--------------------------$suffixe=".mesh";$iteration=0;$GH="Gh$suffixe";$TH="Th$iteration$suffixe";$, = ' '; # set output field separator$\ = "\n"; # set output record separator## -------------------------------------------------------------## --- construction the Geometry file Gh.mesh ## a naca0012 wing in a big circle radius 5 ## 20 points on the up wing ## 20 points on the down wing ## 8 points on circle of radius r open(GH,">$GH") || die "Can't redirect stdout";$Pi = 3.14159265358979;$i20 = 20;$i8 = 8;$r = 5;$c0x = 1;$c0y = 0;print GH 'Dimension', 2;print GH 'MaximalAngleOfCorner 46';print GH 'Vertices';print GH $i20 + $i20 + $i8;# the vertex on naca012 wing ( clock wise)for ($i = -$i20; $i < $i20; $i++) { $X = $i / $i20; $X = $X ** 4; $t = 1.008930411365 * $X; $Y = 5 * .12 * (0.2969 * sqrt($t) - 0.126 * $t - 0.3516 * $t ** 2 + 0.2843 * $t ** 3 - 0.1015 * $t ** 4); if ($i < 0) { $Y = -$Y; } print GH $X, $Y, 3;}# vertex on circle (counter clock wise)for ($i = 0; $i < $i8; $i++) { $t = $i * $Pi * 2 / $i8; print GH $c0x + $r * (cos($t)), $c0y + $r * sin($t), 5;}print GH 'Edges', $i20 + $i20 + $i8;# edge on wing $k = 1;$j = $i20 + $i20 - 1;# previous pointsfor ($i = 0; $i < $i20 + $i20; $j = $i++) { print GH $j + $k, $i + $k, 3;}# previous, current vertex# edge on circle $k = $i20 + $i20 + 1;$j = $i8 - 1;# previous pointsfor ($i = 0; $i < $i8; $j = $i++) { print GH $k + $j, $k + $i, 5;}# previous, current vertex# one subdomain, region on left side of the wing# because clock wise sens.print GH 'SubDomain', 1;print GH 2, 1, 1, 0;close GH;## -------------- END construct of the geom ## # -- make the DATA file for the mesh to also save the arguments open(BAMG,">DATA_bamg") || die "Can't open DATA_bamg";print BAMG "$quadoption $bamgoption -g $GH -o $TH -v 9";close(BAMG);## constructio the inital mesh !system($bamg) || die "Error in bamg construction of initial mesh $Th";## the adpatation loop while ($iteration<$nbiteration) { $BB="$iteration.bb"; ## construction of the solution $errsol=0; open (TH,"<$TH") || die "Can't open $TH"; open (BB,">$BB") || die "Can't open $BB"; open (PLOT,">PLOT") || die "Can't open PLOT"; while (<TH>) { if(/^Vertices$/) { $nbv=<TH>; chop($nbv); print BB "2 1 $nbv 2"; for ($i=1;$i<=$nbv;$i++) { ($x,$y,$ref)=split(/[\ \t\n]+/, <TH>); $fxy=eval $f; $xx[$i]=$x; $yy[$i]=$y; $ff[$i]=$fxy; print BB $fxy; }; }; if(/^Triangles$/) { print " Nb of Triangles = $nbt \n"; $nbt=<TH>; chop($nbt); for ($i=1;$i<=$nbt;$i++) { ($i0,$i1,$i2,$ref)=split(/[\ \t\n]+/, <TH>); print PLOT "$xx[$i0] $yy[$i0] $ff[$i0]"; print PLOT "$xx[$i1] $yy[$i1] $ff[$i1]"; print PLOT "$xx[$i2] $yy[$i2] $ff[$i2]"; print PLOT "$xx[$i0] $yy[$i0] $ff[$i0]"; print PLOT ""; $x = ($xx[$i0]+$xx[$i1]+$xx[$i2])/3; $y = ($yy[$i0]+$yy[$i1]+$yy[$i2])/3; $fm = ($ff[$i0]+$ff[$i1]+$ff[$i2])/3; $fxy = eval $f; $vv=($fm-$fxy); $vv= ($vv<0)?-$vv:$vv; # print " $i0 $i1 $i2 $xx[$i0] $xx[$i1] $xx[$i2] "; # print " $i $x $y $fm $fxy err= $errsol diff=$vv"; $errsol = ($errsol>$vv) ? $errsol : $vv; }; }; }; close TH; close BB; close PLOT; print " ---------------------------------------------\n"; print "\n\n Iteration $iteration\n Erreur L_infini = $errsol \n\n"; print " ---------------------------------------------\n";## ----------------------- $iteration++; $BTH=$TH; $TH="Th$iteration$suffixe"; open(BAMG,">DATA_bamg") || die "Can't open DATA_bamg"; print BAMG "$quadoption $bamgoption -Mbb $BB -errg $errg -err $err -b $BTH -o $TH -v 9"; close(BAMG); !system($bamg) || die "Error in bamg construction of adapted $iteration mesh $Th";}print "Normal End\n";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -