Commit a4e4c70a authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Merge branch 'master' into mesh

Conflicts:
	.cproject
	CMakeLists.txt
	install
parents fb883467 6b2db9e9
Loading
Loading
Loading
Loading

.cproject

deleted100644 → 0
+0 −1489

File deleted.

Preview size limit exceeded, changes collapsed.

+6 −37
Original line number Diff line number Diff line

# /
/build
/missing
/Makefile.in
/ltmain.sh
/install-sh
/depcomp
/configure
/config.*
/aclocal.m4
/m4
/autom4te.cache
.settings
/nbproject
/Debug
/Release

# /src/
/src/Makefile.in

# /src/core/
/src/core/Makefile.in

# /src/debug/
/src/debug/Makefile.in

# /src/diff/
/src/diff/Makefile.in

# /src/matrix/
/src/matrix/*.in

# /tools/
/tools/Makefile.in

# /tools/share/
/tools/share/Makefile.in

# /tools/src/
/tools/src/Makefile.in
/Testing
/CMakeLists.txt.user
/doc/_build
/Build
+6 −0
Original line number Diff line number Diff line
Oberhuber Tomas <tomas.oberhuber@fjfi.cvut.cz>
Zabka Vitezslav <zabkavit@fjfi.cvut.cz>
Vladimir Klement
Tomáš Sobotík
Ondřej Székely
Jiří Kafka
Libor Bakajsa
Jakub Klinkovský
Vacata Jan
Heller Martin
Novotny Matej
+167 −103
Original line number Diff line number Diff line
###############################################################################
#                      Cmake project script for TNL
#                             -------------------
#    begin               : Dec 8, 2010
#    copyright           : (C) 2010 by Tomas Oberhuber et al.
#    email               : tomas.oberhuber@fjfi.cvut.cz
#
###############################################################################
#
# Authors:
# Tomas Oberhuber
# Vladimir Klement
# Jakub Klinkovsky

cmake_minimum_required( VERSION 2.8.10 )

project( tnl )
@@ -15,60 +29,85 @@ include( UseCodeCoverage )
if( CMAKE_BUILD_TYPE STREQUAL "Debug")
    set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Debug/src )
    set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Debug/tests )
    set( PROJECT_TOOLS_PATH ${PROJECT_SOURCE_DIR}/Debug/tools )
    set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/lib )
    set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Debug/bin )
    set( debugExt -dbg )
    AddCompilerFlag( "-g" )
    set( CXX_FLAGS "${CXXFLAGS} -g ")
    #AddCompilerFlag( "-g" )
else()
    set( PROJECT_BUILD_PATH ${PROJECT_SOURCE_DIR}/Release/src )
    set( PROJECT_TESTS_PATH ${PROJECT_SOURCE_DIR}/Release/tests )
    set( PROJECT_TOOLS_PATH ${PROJECT_SOURCE_DIR}/Release/tools )
    set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/lib)
    set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Release/bin)
    OptimizeForArchitecture()
    AddCompilerFlag( "-O3 -DNDEBUG " )
endif()

if( WITH_PROFILING STREQUAL "yes" )
   AddCompilerFlag( "-pg" )
endif()   

if( WITH_TEMPLATE_EXPLICIT_INSTANTIATION STREQUAL "yes" )
   AddCompilerFlag( "-DTEMPLATE_EXPLICIT_INSTANTIATION " )
endif()   

if( WITH_CUDA STREQUAL "yes" )
   AddCompilerFlag( "-DHAVE_NOT_CXX11 -U_GLIBCXX_ATOMIC_BUILTINS -U_GLIBCXX_USE_INT128" )
else()
   AddCompilerFlag( "-std=gnu++0x" )
    #OptimizeForArchitecture()
    AddCompilerFlag( "-O3 -march=native -DNDEBUG" )
endif()

#####
# Check for CUDA
#
if( NOT WITH_CUDA STREQUAL "no" )
if( WITH_CUDA STREQUAL "yes" )
    find_package( CUDA )
    if( CUDA_FOUND )
        set( BUILD_CUDA TRUE)
        set(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE OFF)
        set(BUILD_SHARED_LIBS ON)
        set(CUDA_SEPARABLE_COMPILATION ON)
        
        set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; -DHAVE_CUDA )
        if( CUDA_ARCHITECTURE STREQUAL "2.0" )
            set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-DCUDA_ARCH=20)            
        endif()    
        if( CUDA_ARCHITECTURE STREQUAL "2.1" )
            set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-arch=compute_20;-code=sm_21;-DCUDA_ARCH=21)
        endif()    
        if( CUDA_ARCHITECTURE STREQUAL "2.2" )
            set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-arch=sm_22;-DCUDA_ARCH=22)
        AddCompilerFlag( "-DHAVE_NOT_CXX11" ) # -U_GLIBCXX_ATOMIC_BUILTINS -U_GLIBCXX_USE_INT128 " )
        set( ALL_CUDA_ARCHS -gencode arch=compute_20,code=sm_20
                            -gencode arch=compute_30,code=sm_30
                            -gencode arch=compute_32,code=sm_32 
                            -gencode arch=compute_35,code=sm_35 
                            -gencode arch=compute_37,code=sm_37 
                            -gencode arch=compute_50,code=sm_50 
                            -gencode arch=compute_52,code=sm_52 )
        if( WITH_CUDA_ARCH STREQUAL "all" )
           set( CUDA_ARCH ${ALL_CUDA_ARCHS} )   
        else()
            if( WITH_CUDA_ARCH STREQUAL "auto")
                ####
                # Select GPU architecture
                #
                set( CUDA_ARCH_EXECUTABLE ${EXECUTABLE_OUTPUT_PATH}/tnl-cuda-arch)
                set( CUDA_ARCH_SOURCE ${PROJECT_SOURCE_DIR}/tools/src/tnl-cuda-arch.cu)
                message( "Compiling tnl-cuda-arch ..." )
                file( MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} )
                execute_process( COMMAND nvcc ${CUDA_ARCH_SOURCE} -o ${CUDA_ARCH_EXECUTABLE}
                                 RESULT_VARIABLE CUDA_ARCH_RESULT
                                 OUTPUT_VARIABLE CUDA_ARCH_OUTPUT
                                 ERROR_VARIABLE CUDA_ARCH_OUTPUT )
                execute_process( COMMAND ${CUDA_ARCH_EXECUTABLE}
                                 OUTPUT_VARIABLE CUDA_ARCH )
                if( NOT CUDA_ARCH_RESULT )
                    # strip linebreaks and convert to list delimited with ';'
                    string( REGEX REPLACE "[\n ]" ";" CUDA_ARCH ${CUDA_ARCH} )
                    # cache the result
                    set( CUDA_ARCH ${CUDA_ARCH} CACHE LIST "GPU architecture options" )
                else()
                    message( "Failed to detect GPU architecture:\n${CUDA_ARCH_OUTPUT}" )
                    message( "Using (almost) all GPU architectures as fallback." )
                    set( CUDA_ARCH ${ALL_CUDA_ARCHS} )
                endif()
        if( CUDA_ARCHITECTURE STREQUAL "2.3" )
            set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-arch=sm_23;-DCUDA_ARCH=23)
                message( "GPU architecture options:  ${CUDA_ARCH}" )
            else()
                set( CUDA_ARCH -gencode arch=compute_${WITH_CUDA_ARCH},code=sm_${WITH_CUDA_ARCH} )
            endif()
        if( CUDA_ARCHITECTURE STREQUAL "3.0" )
            set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-arch=compute_30;-code=sm_30;-DCUDA_ARCH=30)
        endif()
        set( CUDA_ADD_EXECUTABLE_OPTIONS ${CUDA_ARCH} )
        set( CUDA_ADD_LIBRARY_OPTIONS ${CUDA_ARCH} -shared )
        set( CUDA_LINKER_OPTIONS "-arch sm_20 -shared" )

        ####
        # Check for cuBLAS
        #
        if( WITH_CUBLAS STREQUAL "yes" ) 
            message( "Enabling CUBLAS." )
            set( HAVE_CUBLAS TRUE)
            set( HAVE_CUBLAS "#define HAVE_CUBLAS" )
        endif( WITH_CUBLAS STREQUAL "yes" )       

        ####
        # Check for CUSP
@@ -88,6 +127,7 @@ if( NOT WITH_CUDA STREQUAL "no" )
        # Check for CUSPARSE
        #
        if( NOT WITH_CUSPARSE STREQUAL "no" )
        
           find_path( CUSPARSE_INCLUDE_DIR cusparse.h
                      /usr/local/cuda/include                   
                      ${CUDA_INCLUDE_DIR}  
@@ -99,39 +139,35 @@ if( NOT WITH_CUDA STREQUAL "no" )
               message( "CUSPARSE found. -- ${CUSPARSE_INCLUDE_DIR}" )
               set( HAVE_CUSPARSE "#define HAVE_CUSPARSE" )
               cuda_include_directories( ${CUSPARSE_INCLUDE_DIR} )
               set( CUSPARSE_LIBRARY "${CUDA_cusparse_LIBRARY}" )
           endif()            
           
           string( REPLACE "/include" "" CUSPARSE_LINK_DIR_HINT ${CUSPARSE_INCLUDE_DIR} )           
           find_library( CUSPARSE_LIBRARY
                         NAME cusparse 
                         HINTS ${CUSPARSE_LINK_DIR_HINT}/lib
                         DOC "CUSPARSE library" )                                                                  
           if( ${CUSPARSE_LIBRARY} STREQUAL "CUSPARSE_LIBRARY-NOTFOUND" )
               message( "Cannot find CUSPARSE library." )
           endif()    
           string( REPLACE "/libcusparse.so" "" CUSPARSE_LINK_DIRECTORY ${CUSPARSE_LIBRARY} )
           link_directories( ${CUSPARSE_LINK_DIRECTORY} )
        endif( NOT WITH_CUSPARSE STREQUAL "no" )
   
    else( CUDA_FOUND )
      AddCompilerFlag( "-std=gnu++0x" )         
    endif( CUDA_FOUND )
endif( NOT WITH_CUDA STREQUAL "no" )    
else( WITH_CUDA STREQUAL "yes" )
   #AddCompilerFlag( "-std=gnu++0x -ftree-vectorizer-verbose=1" )       
   AddCompilerFlag( "-std=gnu++0x" )       
endif( WITH_CUDA STREQUAL "yes" )    

####
# Check for OpenMP
#
find_package( OpenMP ) 
if( OPENMP_FOUND )
# TODO: finish this
   message( "Compiler supports OpenMP." )
   set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENMP -fopenmp")
endif()

####
# Check for MPI
#
find_package( MPI )
if( MPI_CXX_FOUND )
    set( BUILD_MPI TRUE )
    message( "MPI headers found -- ${MPI_CXX_INCLUDE_PATH}")
endif()
#find_package( MPI )
#if( MPI_CXX_FOUND )
#    set( BUILD_MPI TRUE )
#    message( "MPI headers found -- ${MPI_CXX_INCLUDE_PATH}")
#endif()

####
# Check for some system header
@@ -160,12 +196,10 @@ else()
    set( HAVE_SYS_RESOURCE_H "#define HAVE_SYS_RESOURCE_H" )
endif()

  


####
# Check for cppunit
#
if( WITH_TESTS STREQUAL "yes" )
    FIND_PATH(CPPUNIT_INCLUDE_DIR cppunit/TestCase.h
      /usr/local/include
      /usr/include
@@ -211,6 +245,9 @@ else( ${CPPUNIT_INCLUDE_DIR} STREQUAL "CPPUNIT_INCLUDE_DIR-NOTFOUND" )
       set( HAVE_CPPUNIT "#define HAVE_CPPUNIT" )
      endif(CPPUNIT_LIBRARY)
    endif( ${CPPUNIT_INCLUDE_DIR} STREQUAL "CPPUNIT_INCLUDE_DIR-NOTFOUND" )
    ENABLE_TESTING()
    INCLUDE( Dart )
endif( WITH_TESTS STREQUAL "yes" )

#if( BUILD_MPI )
#   FIND_PATH( PETSC_INCLUDE_DIR petsc.h
@@ -237,9 +274,35 @@ endif( ${CPPUNIT_INCLUDE_DIR} STREQUAL "CPPUNIT_INCLUDE_DIR-NOTFOUND" )
#   endif()
#endif()

####
# Explicit template instantiation
#
if( WITH_TEMPLATE_INSTANTIATION STREQUAL "yes" )
   AddCompilerFlag( "-DTEMPLATE_EXPLICIT_INSTANTIATION " )
endif()   

if( INSTANTIATE_INT STREQUAL "yes" )
   AddCompilerFlag( "-DINSTANTIATE_INT " )
endif()   

ENABLE_TESTING()
INCLUDE( Dart )
if( INSTANTIATE_LONG_INT STREQUAL "yes" )
   AddCompilerFlag( "-DINSTANTIATE_LONG_INT " )
endif()   

if( INSTANTIATE_FLOAT STREQUAL "yes" )
   AddCompilerFlag( "-DINSTANTIATE_FLOAT " )
endif()   

if( INSTANTIATE_DOUBLE STREQUAL "yes" )
   AddCompilerFlag( "-DINSTANTIATE_DOUBLE " )
endif()   

if( INSTANTIATE_LONG_DOUBLE STREQUAL "yes" )
   AddCompilerFlag( "-DINSTANTIATE_LONG_DOUBLE " )
endif()   

set( CXX_TEST_FLAGS "-fprofile-arcs -ftest-coverage" )
set( LD_TEST_FLAGS "-lgcov -coverage" )

set( configDirectory \"${CMAKE_INSTALL_PREFIX}/share/tnl-${tnlVersion}/\")
set( sourceDirectory \"${PROJECT_SOURCE_DIR}/\" )
@@ -249,6 +312,7 @@ INSTALL( FILES ${PROJECT_BUILD_PATH}/tnlConfig.h DESTINATION include/tnl-${tnlVe

#Nastavime cesty k hlavickovym souborum a knihovnam
INCLUDE_DIRECTORIES( src )
INCLUDE_DIRECTORIES( tests )
INCLUDE_DIRECTORIES( ${PROJECT_BUILD_PATH} )
LINK_DIRECTORIES( ${LIBRARY_OUTPUT_PATH} )

+17 −29
Original line number Diff line number Diff line
TODO: implementovat tridu tnlFileName pro generovani jmen souboru

TODO: metodu pro tnlString pro nahrazeni napr. podretezce XXXXX indexem 00001 tj. uXXXXX.bin -> u00001.bin
      to by melo byt robustnejsi, nez doposavadni pristup 

TODO: implementovat tridu tnlParabolicSolver pro odvozovani resicu k casove promennym uloham
TODO: v tnlMeshResolver se provadi preklad pro vsechny mozne sablonove parametry => prorezat

TODO: napsat FunctionDiscretizer pro jednotne rozhrani RightHandSide

TODO: objekt pro osetreni chyb - zavedeni funkce tnlGetError
      - mozna dat do tnlObject priznak, zda je objekt ok nebo 
        v nefunkcnim stavu   
TODO: doplnit mesh travelsals pro jine mesh entity nez cell
TODO: implementace maticovych resicu
      * Gaussova eliminace
      * SOR metoda
      * Jacobiho metoda
      * TFQMR metoda
      * IDR metody 

TODO: implementovat casovace merici jen cas resicu
TODO: Nahradit sablonovy parametr dimenze sitove entity za typ entity. V pripade hran gridu, by ty v sobe mohly mit i orientaci.
      Asi by to bylo vyhodne i pro site se smisenym typem entit. 

TODO: implementovat tridu tnlFileName pro generovani jmen souboru

TODO: implementovat maticovy format COO - mimo jine by se dal vyuzit k rychlejsimu parsovani mtx souboru

TODO: implementovat metodu tnlObject passToDevice, ktera vytvori obraz daneho objektu na GPU.
      Vrati ukazatel na tridu, ktetou lze pouzivat v kernelech. To by melo zjednodusti psani kernelu a
      priblizit je kodu pro CPU.

TODO: Zkusit z tnlExplicitSolver udelat tnlTimeSolver, od nej odvodit tnlEulerSolver, tnlMersonSolver a
      tnlParabolicSolver. Objekt by obsahoval i metodu pro ukladani stavu v prubehu vypoctu. 
TODO: metodu pro tnlString pro nahrazeni napr. podretezce XXXXX indexem 00001 tj. uXXXXX.bin -> u00001.bin
      to by melo byt robustnejsi, nez doposavadni pristup 

TODO: - odvodit tnlArray primo z tnlArrayManager
      - tnlGrid prejmenovat na tnlGridOfNodes
      - zavest tnlGrid podle tnlMesh - tj. bude to pouze popis site bez sitove fce.
      - po prepsani vsech schemat se tnlGridOfNodes zrusi
      - zavest tnlObjectArray pro pole objektu - rozdil je v tom, ze treba save a load bude volat pro kazdy element
        jeho metodu save a load apod.           
TODO: vyjimky 

DONE: Nahradit mGrid2D, mGrid3D za mGrid obecne dimenze 
TODO: prubezne ukladani vysledku behem vypoctu 
                 
 No newline at end of file
DONE: trida tnlArray - misto tnlLongVector a tnlField (nebo postavenou na tnlLongVector)
      template< typename REAL, int DIM, tnlDevice >
DONE: do tnlGrid pridat metodu pro osetreni Dirichletovych a Neumannovych o.p.           
 No newline at end of file
Loading