text: # ----------------------------------------------------------------------------
  #  CLASSES: nightly
  #
  #  Test Case:  samrai.py 
  #
  #  Tests:      presence of HDF5
  #              default plot 
  #              sil changing with time
  #              nested ghosting
  #              zbuffer contention
  #              2d ale data
  #              operators - slice
  #              selection - by level
  #
  #  Programmer: Mark C. Miller 
  #  Date:       November 12, 2003 
  #
  #  Modifications:
  #    Brad Whitlock, Thu Mar 25 14:05:32 PST 2004
  #    Added a check to see if plots at later time steps get the right metadata.
  #
  #    Jeremy Meredith, Thu Jun 24 12:58:06 PDT 2004
  #    Set the vector origin explicitly for some cases because I changed the
  #    default to Tail.
  #
  #    Mark C. Miller, Thu Aug 19 16:22:49 PDT 2004
  #    Turned off database info flag so future changes to samrai db plugin
  #    are less likely to result in a need to update the baselines
  #
  #    Hank Childs, Wed Feb 16 07:34:07 PST 2005
  #    Rename variables that have unsupported characters.
  #
  #    Mark C. Miller, Thu Feb 17 09:00:41 PST 2005
  #    Added tests for variables defined on only some patches
  #
  #    Brad Whitlock, Wed Mar 9 09:15:30 PDT 2005
  #    Removed deprecated functions.
  #
  #    Jeremy Meredith, Wed Sep  7 12:06:04 PDT 2005
  #    Allowed spaces in variable names.
  #
  #    Mark C. Miller, Mon Nov  5 20:15:05 PST 2007
  #    Added tests for sparse materials, expressions
  #
  #    Jeremy Meredith, Tue Jul 15 10:43:58 EDT 2008
  #    Changed number of vectors in vector plot to match the old behavior.
  #    (We now account for how many domains there are.)
  #
  #    Brad Whitlock, Thu Feb 4 10:18:23 PDT 2010
  #    Turn off sets by name instead of index since that can change.
  #
  #    Kathleen Biagas, Mon Dec 19 15:45:38 PST 2016
  #    Use Subset plot for levels instead of FilledBoundary.
  #
  # ----------------------------------------------------------------------------
  
  LevelZero = 4 # set id for level 0
  
  # Turn off sets by name
  def TurnOffSetsByName(silr, cat, names):
      sets = silr.SetsInCategory(cat)
      for s in sets:
          setname = silr.SetName(s)
          try:
              if setname in names:
                  silr.TurnOffSet(s)
          except:
              if setname == names:
                  silr.TurnOffSet(s)
  
  OpenDatabase(data_path("samrai_test_data/sil_changes/dumps.visit"))
  
  
  #
  # just tests that default plot comes up automatically 
  #
  Test("samrai_01")
  
  #
  # test exterenal face overlap
  #
  AddPlot("Pseudocolor","Primitive Var _number_0")
  DrawPlots()
  
  v=GetView3D()
  v.viewNormal=(0,0,-1)
  SetView3D(v)
  Test("samrai_02")
  
  v.viewNormal=(0.34202, 0, -0.939693)
  SetView3D(v)
  Test("samrai_03")
  
  #
  # test level selection
  #
  silr=SILRestriction()
  silr.TurnOffSet(LevelZero)
  SetPlotSILRestriction(silr)
  v.viewNormal=(0,0,1)
  SetView3D(v)
  Test("samrai_04")
  
  #
  # test changing time steps (and sil)
  #
  TimeSliderNextState()
  Test("samrai_05")
  
  # go back to begnning of time
  SetTimeSliderState(0)
  
  #
  # turn on level 0 so we can check that
  # nested ghosting is working correctly when we slice
  #
  silr.TurnOnSet(LevelZero)
  SetPlotSILRestriction(silr)
  
  #
  # this test is here to remind us we have many internal faces 
  #
  v.viewNormal=(-0.537631, 0.372794, -0.756292)
  v.focus=(15, 10, 10)
  v.viewUp=(0.262569, 0.926375, 0.269976)
  v.parallelScale=30
  v.nearPlane=-10
  v.farPlane=90
  SetView3D(v)
  Test("samrai_06")
  
  #
  # add a mesh plot and slice operator
  #
  AddPlot("Mesh","amr_mesh")
  sliceAtts=SliceAttributes()
  sliceAtts.originType=sliceAtts.Percent
  sliceAtts.originPercent=20
  sliceAtts.axisType=sliceAtts.ZAxis
  sliceAtts.project2d=1
  SetDefaultOperatorOptions(sliceAtts)
  AddOperator("Slice",1)
  DrawPlots()
  Test("samrai_07")
  
  #
  # Animate forward 1 frame
  #
  TimeSliderNextState()
  Test("samrai_08")
  
  #
  # Now, go back 1 frame
  #
  SetTimeSliderState(0)
  Test("samrai_09")
  
  #
  # Tests for data from a 2d ale calculation.
  #
  DeleteAllPlots()
  
  OpenDatabase(data_path("samrai_test_data/ale2d/dumps.visit"))
  
  ResetView()
  
  #
  # Test the default plot.
  #
  Test("samrai_10")
  
  #
  # Check the last frame.
  #
  TimeSliderNextState()
  Test("samrai_11")
  
  #
  # Test a vector plot.
  #
  AddPlot("Vector", "Velocity")
  vectorAtts=VectorAttributes()
  vectorAtts.scale = 0.02
  vectorAtts.vectorOrigin = vectorAtts.Middle
  vectorAtts.nVectors = 400*47
  SetPlotOptions(vectorAtts)
  DrawPlots()
  
  v = View2DAttributes()
  v.windowCoords = (0.31, 0.58, 0.15, 0.36)
  SetView2D(v)
  Test("samrai_12")
  
  #
  # Tests for material/species data 
  #
  DeleteAllPlots()
  
  OpenDatabase(data_path("samrai_test_data/mats-par3/dumps.visit"))
  
  ResetView()
  
  #
  # test a material plot
  #
  AddPlot("FilledBoundary","materials")
  DrawPlots()
  Test("samrai_13")
  
  #
  # test material plot with some patches off
  #
  silr=SILRestriction()
  TurnOffSetsByName(silr, "patches", ("level0,patch0", "level0,patch1","level0,patch2","level0,patch3"))
  SetPlotSILRestriction(silr)
  Test("samrai_14")
  
  #
  # now, turn off a material, too
  #
  silr.TurnOnAll()
  TurnOffSetsByName(silr, "materials", "Copper")
  SetPlotSILRestriction(silr)
  Test("samrai_15")
  
  silr.TurnOnAll()
  SetPlotSILRestriction(silr)
  DeleteAllPlots()
  
  #
  # add a species plot
  #
  AddPlot("Pseudocolor","species")
  DrawPlots()
  
  #
  # Selectively turn off each species
  #
  silr.TurnOffSet(24)
  SetPlotSILRestriction(silr)
  Test("samrai_16")
  
  silr.TurnOffSet(25)
  SetPlotSILRestriction(silr)
  Test("samrai_17")
  
  silr.TurnOffSet(26)
  SetPlotSILRestriction(silr)
  Test("samrai_18")
  
  silr.TurnOffSet(27)
  SetPlotSILRestriction(silr)
  Test("samrai_19")
  
  silr.TurnOffSet(28)
  SetPlotSILRestriction(silr)
  Test("samrai_20")
  
  DeleteAllPlots()
  
  # test matvf exprs
  DefineScalarExpression("copper_vf",'matvf(materials,"Copper")')
  AddPlot("Pseudocolor","copper_vf")
  DrawPlots()
  patts = PseudocolorAttributes()
  Test("samrai_copper_matvf_01")
  patts.centering = patts.Nodal  # Natural, Nodal, Zonal
  SetPlotOptions(patts)
  Test("samrai_copper_matvf_02")
  patts.centering = patts.Zonal # Natural, Nodal, Zonal
  SetPlotOptions(patts)
  Test("samrai_copper_matvf_03")
  patts.centering = patts.Natural # Natural, Nodal, Zonal
  SetPlotOptions(patts)
  Test("samrai_copper_matvf_04")
  
  DeleteAllPlots()
  
  DefineScalarExpression("gold_den",'val4mat(Density,"Gold")')
  AddPlot("Pseudocolor","gold_den")
  DrawPlots()
  patts = PseudocolorAttributes()
  Test("samrai_gold_val4mat_01")
  patts.centering = patts.Nodal  # Natural, Nodal, Zonal
  SetPlotOptions(patts)
  Test("samrai_gold_val4mat_02")
  patts.centering = patts.Zonal # Natural, Nodal, Zonal
  SetPlotOptions(patts)
  Test("samrai_gold_val4mat_03")
  patts.centering = patts.Natural # Natural, Nodal, Zonal
  SetPlotOptions(patts)
  Test("samrai_gold_val4mat_04")
  
  DeleteAllPlots()
  
  #
  # Open a new database that has levels that change over time so we can test
  # that plots get the right metadata and SIL as time advances.
  #
  OpenDatabase(data_path("samrai_test_data/front/dumps.visit"))
  
  # Get rid of the default plot
  DeleteAllPlots()
  AddPlot("Subset", "levels")
  DrawPlots()
  ResetView()
  Test("samrai_21")
  
  # Go to the next time state. This used to cause an InvalidIndexException.
  TimeSliderNextState()
  Test("samrai_22")
  
  #
  # Test a database where some variables are not defined on all patches
  #
  DeleteAllPlots()
  OpenDatabase(data_path("samrai_test_data/viz_2d/dumps.visit"))
  
  AddPlot("Pseudocolor", "Function_0") # only defined on some patches
  AddPlot("Pseudocolor", "Function_1") # only defined on some other patches
  DrawPlots()
  Test("samrai_23")
  
  #
  # Test a samrai database with sparse material representation
  #
  DeleteAllPlots()
  OpenDatabase(data_path("samrai_test_data/sparse_mats/summary.samrai"))
  
  AddPlot("Pseudocolor", "energy")
  DrawPlots()
  Test("samrai_24")
  
  #
  #  Zoom into a region where there is mixing
  #
  v=GetView2D()
  v.windowCoords=(-0.296975, -0.223086, 0.0437891, 0.120943)
  SetView2D(v)
  DrawPlots()
  Test("samrai_25")
  
  #
  # Turn off different materials and see what we get for the PC plot
  # and zone picks
  #
  silr = SILRestriction()
  j = 0
  for k1 in silr.SetsInCategory("materials"):
      i = 1
      for k2 in silr.SetsInCategory("materials"):
          if silr.SetName(k2) == "material_%d"%(j+1):
              silr.TurnOffSet(k2)
          else:
              silr.TurnOnSet(k2)
          i = i + 1
      SetPlotSILRestriction(silr)
      DrawPlots()
      Test("samrai_%d"%(26+2*j))
      PickByZone(247,15)
      TestText("samrai_%d"%(26+2*j+1),GetPickOutput())
      j = j + 1
  
  #
  # Test some expressions from the samrai database 
  #
  silr.TurnOnAll()
  SetPlotSILRestriction(silr)
  DeleteAllPlots()
  AddPlot("Pseudocolor","von_mises_stress")
  DrawPlots()
  Test("samrai_33")
  DeleteAllPlots()
  AddPlot("Pseudocolor","speed")
  DrawPlots()
  Test("samrai_34")
  
  
  DeleteAllPlots()
  CloseDatabase(data_path("samrai_test_data/sparse_mats/summary.samrai"))
  OpenDatabase(data_path("samrai_test_data/curv_bnd_ghost/dumps.visit"))
  s = GetPlotOptions()
  s.colorType = s.ColorBySingleColor
  s.singleColor = (100,100,100,255)
  SetPlotOptions(s)
  AddPlot("Pseudocolor","Y_01")
  DrawPlots()
  Test("samrai_35")
  
  silr = SILRestriction()
  for i in range(silr.NumSets()):
      if silr.SetName(i) == "level0,patch7":
          silr.TurnOffSet(i)
          break
  SetPlotSILRestriction(silr)
  Test("samrai_36")
  
  DeleteAllPlots()
  CloseDatabase(data_path("samrai_test_data/curv_bnd_ghost/dumps.visit"))
  OpenDatabase(data_path("samrai_test_data/matghosts_fullzonal/dumps.visit"))
  s = GetPlotOptions()
  s.colorType = s.ColorBySingleColor
  s.singleColor = (100,100,100,255)
  SetPlotOptions(s)
  AddPlot("FilledBoundary", "materials")
  DrawPlots()
  silr = SILRestriction()
  silr.TurnOffSet(30)
  SetPlotSILRestriction(silr)
  Test("samrai_37")
  
  Exit()
  