# tests.tcl proc Ng_TestMeshing { infile outfile logfile} { if { ![file exists $infile]} { puts $logfile "error: file $infile does not exist" } else { puts -nonewline $logfile " loading geometry: "; ngtic; Ng_LoadGeometry "$infile"; ngtoc $logfile puts -nonewline $logfile " parsing geometry: "; ngtic; Ng_ParseGeometry; ngtoc $logfile puts -nonewline $logfile " generating mesh: "; ngtic; Ng_GenerateMesh; ngtoc $logfile puts -nonewline $logfile " saving mesh: "; ngtic; Ng_SaveMesh "$outfile"; ngtoc $logfile flush $logfile } } # tests.tcl proc Ngs_TestPDE { infile {nsolves 1} logfile } { if { ![file exists $infile]} { puts $logfile "error: file $infile does not exist" } else { puts -nonewline $logfile " loading PDE file: "; ngtic; ngsloadpde "$infile"; ngtoc $logfile for {set i 1} {$i<=$nsolves} {incr i 1} { puts -nonewline $logfile " solve PDE level $i: "; ngtic; ngssolvepde; ngtoc $logfile } flush $logfile } } proc ngtest { {t all} {f ""}} { ngset printmsg 0 if {$f == "" } { set logfile stdout } else { set logfile [open $f "w"] } global options.parthread set options.parthread 0 Ng_SetMeshingParameters if {$t == "all"} { ngtest in2d $f ngtest geo $f ngtest stl $f ngtest pde $f return } elseif {$t == "in2d"} { puts "\n*** performing in2d file tests ***" puts " ** writing results to $f" puts "\n ** testing in2d files in examples/ **" set testdir "$::ngdir/../examples" set in2dfiles { beam2d hyperbolic piezo2dround rectangle squareincl squareinsquare } foreach {tfile} $in2dfiles { if {$f != ""} { puts " * meshing file examples/$tfile.in2d..." } puts $logfile "\n * meshing file examples/$tfile.in2d..."; flush $logfile Ng_TestMeshing "$testdir/$tfile.in2d" "$testdir/$tfile.vol" $logfile } puts "\n ** testing in2d files in tutorials/ **" set testdir "$::ngdir/../tutorials" set in2dfiles { demo2d newin2d square v2in2d } foreach {tfile} $in2dfiles { if {$f != ""} { puts " * meshing file tutorials/$tfile.in2d..." } puts $logfile "\n * meshing file tutorials/$tfile.in2d..."; flush $logfile Ng_TestMeshing "$testdir/$tfile.in2d" "$testdir/$tfile.vol" $logfile } puts "*** in2d tests complete" } elseif {$t == "geo"} { puts "\n*** performing geo file tests ***" puts " ** writing results to $f" puts "\n ** testing geo files in examples/ **" set testdir "$::ngdir/../examples" set geofiles { beam cylsphere rboxcyl thinc boxcyl fichera period saw_3d thinplate coilshield gamm3d plate shaft tripelpendel cube halfsphere poly shell twocubes cylinder kaese quarter3d skew_prisms } foreach {tfile} $geofiles { if {$f != ""} { puts " * meshing file examples/$tfile.geo..."; flush $logfile } puts $logfile "\n * meshing file examples/$tfile.geo..."; flush $logfile Ng_TestMeshing "$testdir/$tfile.geo" "$testdir/$tfile.vol" $logfile } puts "\n ** testing geo files in tutorials/ **" set testdir "$::ngdir/../tutorials" set geofiles { boxcyl cubemcyl extrusion revolution trafo circle_on_cube cubemsphere fichera sculpture twobricks cone cylinder lshape3d shaft twocubes cubeandring cylsphere manyholes sphere twocyl cubeandspheres ellipsoid matrix sphereincube cube ellipticcyl period torus } foreach {tfile} $geofiles { if {$f != ""} { puts " * meshing file $tfile.geo..." } puts $logfile "\n * meshing file $tfile.geo..."; flush $logfile Ng_TestMeshing "$testdir/$tfile.geo" "$testdir/$tfile.vol" $logfile } } elseif {$t == "stl"} { puts "\n*** performing stl file tests ***" # set logfile [open stltest.log "w"] puts " ** writing results to $f" puts "\n ** testing stl files in examples/ **" set testdir "$::ngdir/../examples" set stlfiles { crankshaft hinge1 } foreach {tfile} $stlfiles { if {$f != ""} { puts " * meshing file examples/$tfile.stl..." } puts $logfile "\n * meshing file examples/$tfile.stl..."; flush $logfile Ng_TestMeshing "$testdir/$tfile.stl" "$testdir/$tfile.vol" $logfile } puts "\n ** testing stl files in tutorials/ **" set testdir "$::ngdir/../tutorials" set stlfiles { hinge part1 } foreach {tfile} $stlfiles { if {$f != ""} { puts " * meshing file tutorials/$tfile.stl..." } puts $logfile "\n * meshing file tutorials/$tfile.stl..."; flush $logfile Ng_TestMeshing "$testdir/$tfile.stl" "$testdir/$tfile.vol" $logfile } puts "*** stl tests complete" } elseif {$t == "pde"} { puts "\n*** preforming pde tests ***" # set logfile [open pdetest.log "w"] puts " ** writing results to $f" puts "\n ** testing pde files in ngsolve/pde_tutorial/ **" set testdir "$::ngdir/../ngsolve/pde_tutorial" set pdefiles { d1_square.pde d2_chip.pde d3_helmholtz.pde d4_cube.pde d5_beam.pde d6_shaft.pde d7_coil.pde d8_coilshield.pde } foreach {tfile} $pdefiles { if {$f != ""} { puts " * testing ngsolve/pde_tutorial/$tfile..." } puts $logfile "\n * testing ngsolve/pde_tutorial/$tfile..."; flush $logfile Ngs_TestPDE "$testdir/$tfile" 1 $logfile } puts "*** pde tests complete" } else { puts $logfile "error: unkown test program '$t'"; flush $logfile } puts "" } Ng_RegisterCmd "ngtest" "netgen" "ngtest" "perform ng standard tests: all in2d geo stl"