INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../src/Graph) # we need this line because this file is not on the header file List of MueLu
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../src/Smoothers)

# first ensure that these cmake boolean variables are defined
ASSERT_DEFINED(
  ${PACKAGE_NAME}_ENABLE_Epetra
  ${PACKAGE_NAME}_ENABLE_EpetraExt
  ${PACKAGE_NAME}_ENABLE_Amesos
  )


IF (${PACKAGE_NAME}_ENABLE_Epetra AND
    ${PACKAGE_NAME}_ENABLE_EpetraExt AND
    ${PACKAGE_NAME}_ENABLE_Ifpack AND
    ${PACKAGE_NAME}_ENABLE_Amesos)

  IF(Trilinos_ENABLE_AztecOO)
    # build only if AztecOO available, too
    TRIBITS_ADD_EXECUTABLE_AND_TEST(
      Navier2D_Epetra
      SOURCES Navier2D_Epetra.cpp
      COMM mpi
      )
    TRIBITS_COPY_FILES_TO_BINARY_DIR(Navier2D_cpdata
      SOURCE_FILES A_re1000_5932.txt b_re1000_5932.txt
      )

    # experimental tests (block operators)
    IF (${PACKAGE_NAME}_ENABLE_Experimental)
      TRIBITS_ADD_EXECUTABLE_AND_TEST(
        Navier2DBlocked_Epetra
        SOURCES Navier2DBlocked_Epetra.cpp
        COMM serial mpi
        )

      ################################# tests for xml framework
      TRIBITS_ADD_EXECUTABLE(
        Navier2DBlocked_xml
        SOURCES Navier2DBlocked_xml.cpp
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_format"
        ARGS "--xml=myXML.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_format2"
        ARGS "--xml=myXMLg.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_blockdirect"
        ARGS "--xml=myXML2.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_bgs1"
        ARGS "--xml=myBGS1.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_bs1"
        ARGS "--xml=myBS1.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_bs2"
        ARGS "--xml=myBS2.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_sim1"
        ARGS "--xml=mySIM1.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_sim2"
        ARGS "--xml=mySIM2.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_uzawa1"
        ARGS "--xml=myUzawa1.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )

      TRIBITS_ADD_TEST(
        Navier2DBlocked_xml
        NAME "Navier2DBlocked_xml_indef1"
        ARGS "--xml=myIndefDiag1.xml"
        NUM_MPI_PROCS 4
        COMM mpi
        )
      ##################################
      TRIBITS_ADD_EXECUTABLE_AND_TEST(
        Navier2DBlocked_BraessSarazinSmoother
        SOURCES Navier2DBlocked_BraessSarazinSmoother.cpp
        COMM serial mpi
        )

      TRIBITS_ADD_EXECUTABLE_AND_TEST(
        Navier2DBlocked_SimpleSmoother
        SOURCES Navier2DBlocked_SimpleSmoother.cpp
        COMM serial mpi
        )

      TRIBITS_ADD_EXECUTABLE_AND_TEST(
        Navier2DBlocked_BraessSarazin
        SOURCES Navier2DBlocked_BraessSarazin.cpp
        COMM serial mpi
        )

      TRIBITS_ADD_EXECUTABLE(
        Navier2DBlocked_rebalancing2
        SOURCES Navier2DBlocked_test2.cpp
        COMM mpi
        )

      # TODO: fix CloneRepartitionInterface
      TRIBITS_ADD_TEST(
        Navier2DBlocked_rebalancing2
        NAME "Navier2DBlockedReuseAggs"
        ARGS "--rebalanceBlocks=0"
        NUM_MPI_PROCS 4
        COMM mpi
        )
      #TRIBITS_ADD_TEST(
      #  Navier2DBlocked_rebalancing2
      #  NAME "Navier2DBlockedReuseAggsReb"
      #  ARGS "--rebalanceBlocks=1"
      #  NUM_MPI_PROCS 4
      #  COMM mpi
      #  )

      TRIBITS_ADD_EXECUTABLE_AND_TEST(
        Navier2DBlocked_Simple
        SOURCES Navier2DBlocked_Simple.cpp
        COMM serial mpi
        )
      TRIBITS_COPY_FILES_TO_BINARY_DIR(Navier2D_cp
        SOURCE_FILES myXML.xml myXMLg.xml myXML2.xml myBS1.xml myBS2.xml myBGS1.xml mySIM1.xml mySIM2.xml myUzawa1.xml myIndefDiag1.xml
        )
    ENDIF() # experimental

  ENDIF()

ENDIF()
