Giter Club home page Giter Club logo

forcolormap's People

Contributors

aslozada avatar gha3mi avatar jchristopherson avatar vmagnin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

forcolormap's Issues

Wrong number of levels for the categorical colormaps

  • In the Colormaps_info class: the categorical colormaps of the Scientific colour maps collection (name terminated by a S) should not have 256 levels, but 100.
  • The PDF guide will have to be regenerated (at least before the 0.9 release).

ForImage dependency

Dear @vmagnin,

Thank you for this project and for mentioning ForImage in the Discourse forum.

I forked ForColormap to add and test ForImage functionality in your project. The PNM functionality of ForImage enables the import and export of PNM files in both binary and ASCII encodings. I have provided an example for your reference.

To review the modifications, kindly visit the GitHub repository at: https://github.com/gha3mi/forcolormap

Best regards,
Ali

Using ForColormap as a shared library fails

@jchristopherson @gha3mi

The issue

I am trying to use ForColormap as a shared library (.so under Linux). I have written a toy.f90 minimalist program:

use forcolormap, only: Colormap, wp
type(Colormap) :: cmap

call cmap%set("cubehelix", 0.0_wp, 1.0_wp, 1024)
end

but the shared library libforimage.so is not found at runtime:

$ gfortran toy.f90 -Xlinker -rpath=/usr/local/lib $(pkg-config --cflags --libs forimage forcolormap)
$ ./a.out
./a.out: error while loading shared libraries: libforimage.so.0: cannot open shared object file: No such file or directory

More information

System: Ubuntu 23.10
Compiler: GFortran 13.2.0

The -Xlinker -rpath=/usr/local/lib option allows the compiler to pass to the linker the runtime library search path.

The ForColormap project was built with the command cmake -D BUILD_SHARED_LIBS=true .., then make, and installed in the system with:

$ sudo make install
[ 46%] Built target forimage
[100%] Built target forcolormap
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/lib/libforimage.so.0.3.0
-- Installing: /usr/local/lib/libforimage.so.0
-- Installing: /usr/local/lib/libforimage.so
-- Up-to-date: /usr/local/include
-- Installing: /usr/local/include/lut.mod
-- Installing: /usr/local/include/pnm.mod
-- Installing: /usr/local/include/forimage_parameters.mod
-- Installing: /usr/local/include/forcolor.mod
-- Installing: /usr/local/include/forimage.mod
-- Installing: /usr/local/lib/cmake/forimage/forimageTargets.cmake
-- Installing: /usr/local/lib/cmake/forimage/forimageTargets-release.cmake
-- Installing: /usr/local/lib/cmake/forimage/forimageConfig.cmake
-- Installing: /usr/local/lib/cmake/forimage/forimageConfigVersion.cmake
-- Installing: /usr/local/lib/pkgconfig/forimage.pc
-- Installing: /usr/local/lib/libforcolormap.so.0.8.0
-- Installing: /usr/local/lib/libforcolormap.so.0
-- Set runtime path of "/usr/local/lib/libforcolormap.so.0.8.0" to ""
-- Installing: /usr/local/lib/libforcolormap.so
-- Up-to-date: /usr/local/include
-- Installing: /usr/local/include/miscellaneous_colormaps.mod
-- Installing: /usr/local/include/matplotlib_colormaps.mod
-- Installing: /usr/local/include/colormap_parameters.mod
-- Installing: /usr/local/include/forcolormap.mod
-- Installing: /usr/local/include/forcolormap_info.mod
-- Installing: /usr/local/include/scientific_colour_maps.mod
-- Installing: /usr/local/lib/cmake/forcolormap/forcolormapTargets.cmake
-- Installing: /usr/local/lib/cmake/forcolormap/forcolormapTargets-release.cmake
-- Installing: /usr/local/lib/cmake/forcolormap/forcolormapConfig.cmake
-- Installing: /usr/local/lib/cmake/forcolormap/forcolormapConfigVersion.cmake
-- Installing: /usr/local/lib/pkgconfig/forcolormap.pc

We can see that the libforimage.so and libforcolormap.so shared libraries are installed.

But we can notice a difference between ForImage and ForColormap, the following line is present only for ForColormap:

-- Set runtime path of "/usr/local/lib/libforcolormap.so.0.8.0" to ""

Files in the libraries directory:

$ ls -thor /usr/local/lib/libfor*
-rw-r--r-- 1 root 145K janv. 11 14:12 /usr/local/lib/libforimage.a
-rw-r--r-- 1 root 116K janv. 24 11:08 /usr/local/lib/libforimage.so.0.3.0
-rw-r--r-- 1 root 509K janv. 24 11:08 /usr/local/lib/libforcolormap.so.0.8.0
lrwxrwxrwx 1 root   20 janv. 24 11:08 /usr/local/lib/libforimage.so.0 -> libforimage.so.0.3.0
lrwxrwxrwx 1 root   16 janv. 24 11:08 /usr/local/lib/libforimage.so -> libforimage.so.0
lrwxrwxrwx 1 root   23 janv. 24 11:08 /usr/local/lib/libforcolormap.so.0 -> libforcolormap.so.0.8.0
lrwxrwxrwx 1 root   19 janv. 24 11:08 /usr/local/lib/libforcolormap.so -> libforcolormap.so.0

We can also see that the system knows the path to ForImage:

$ whereis libforimage.so.0
libforimage.so.0: /usr/local/lib/libforimage.so.0

But if we used the command ldd to print shared object dependencies:

$ ldd ./a.out
        linux-vdso.so.1 (0x00007ffc20faa000)
        libforcolormap.so.0 => /usr/local/lib/libforcolormap.so.0 (0x00007f4a2ef85000)
        libgfortran.so.5 => /lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f4a2ec00000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4a2eb15000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4a2ef37000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4a2e800000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f4a2f006000)
        libforimage.so.0 => not found

we see that ForImage is not found.

$ pkg-config --cflags --libs forimage forcolormap
-I/usr/local/include -L/usr/local/lib -lforimage -lforcolormap 

access='append' is a GNU extension

When compiling with GFortran -std=f2018 options, access='append' is not accepted.

$ fpm build --flag "-Ofast -march=native -mtune=native -Wall -Wextra -std=f2018"
...
colormaps_info.f90                     failed.
[ 39%] Compiling...
build/dependencies/forcolormap/src/colormaps_info.f90:319:61:

  319 |             open(newunit=nunit, file=trim(file_name), access='append', status='unknown', action='write')
	  |                                                             1
Error: GNU Extension: ACCESS specifier in OPEN statement at (1) has value ‘APPEND’
build/dependencies/forcolormap/src/colormaps_info.f90:338:61:

  338 |             open(newunit=nunit, file=trim(file_name), access='append', status='unknown', action='write')
	  |                                                             1
Error: GNU Extension: ACCESS specifier in OPEN statement at (1) has value ‘APPEND’
...

Indeed, access should be sequential (default), direct or stream. We should use instead the specifier position='append':

open(newunit=nunit, file=trim(file_name), position='append', status='unknown', action='write')

Ideia for the logo

The figure resembling a marble (canica in spanish). The colors inside the marble can be chosen from the Scientific color maps. If there is any interest, I can convert it to an SVG file. (fcm 😉 fpm )

fcm_ideia

In MSYS2/Windows, CMake encounters problems with the ForImage dependency

Ìn MSYS2/Windows 10, CMake 3.28.3 has problems with ForImage:

$ cmake -G "MSYS Makefiles" -D BUILD_SHARED_LIBS=true ..
-- The Fortran compiler identification is GNU 13.2.0
-- Detecting Fortran compiler ABI info
-- Detecting Fortran compiler ABI info - done
-- Check for working Fortran compiler: D:/Logiciels/MSYS2/ucrt64/bin/gfortran.exe - skipped
-- Setting build type to 'Release' as none was specified.
-- Build FORIMAGE tests: OFF
-- Build FORIMAGE examples: OFF
CMake Error at cmake/dependencies/forimage/CMakeLists.txt:15 (add_custom_command):
  No TARGET 'forcolormap' has been created in this directory.


-- Build FORCOLORMAP tests: OFF
-- Build FORCOLORMAP examples: OFF
-- Configuring incomplete, errors occurred!

Note: no problem with fpm.

Unused dummy argument ‘check_zmax’

$ fpm build --verbose
...
[ 41%]             colormap_class.f90
 + gfortran -c ././src/colormap_class.f90   -Wall -Wextra -fPIC -fmax-errors=1 -g -fcheck=bounds -fcheck=array-temps -fbacktrace -fcoarray=single -fimplicit-none -Werror=implicit-interface -ffree-form -J build/gfortran_87E2AE0597D39913 -Ibuild/gfortran_87E2AE0597D39913 -o build/gfortran_87E2AE0597D39913/forcolormap/src_colormap_class.f90.o
././src/colormap_class.f90:1109:65:

 1109 |     pure subroutine check(self,check_name, check_zmin, check_zmax, check_levels)
      |                                                                 1
Warning: Unused dummy argument ‘check_zmax’ at (1) [-Wunused-dummy-argument]
[ 44%]             colormap_class.f90  done.
...
        if (present(check_zmin)) then
            if (check_zmin) then

                ! Check validity of zmin and zmax
                if (self%zmin > self%zmax) status(2) = .false.

                ! Fix zmin and zmax if they are not valid
                if (status(2) .eqv. .false.) then
                    temp = self%zmin
                    self%zmin = self%zmax
                    self%zmax = temp
                end if

            end if
        end if

Should we write something like:

        if (present(check_zmin).or.present(check_zmax)) then
            if (check_zmin.or.check_zmax) then

?

Or replace check_zmin and check_zmax by only one optional argument check_bounds? Because if both are present but check_zmin=.true. and check_zmax=.false., what would it mean?

Suggestion: demo

  • Move all test results to the demo folder to keep the main directory clean.
  • Add the write_ppm_file_colorbar subroutine as a type-bound procedure for the Colormap type. Move write_ppm_file_test to demo.f90 since it's a specific subroutine for the demo.

Add Support lut File Format

I noticed the idea of lut files in the TODO list. I have added support for the lut file format in ForImage. Examples of this functionality can be found at the following links: example15 and example16.

If you believe ForColormap is the appropriate place for this functionality, I can move it there.

Now, it is possible to import and export lut files. We can implement support for importing and exporting lut files in ForColormap by adding two type-bound procedures. What's your opinion?

Error in the pkg-config libdir variable (CMake)

After installing ForColormap in Ubuntu 23.04:

$ pkg-config --cflags --libs forcolormap
-I/usr/local/include -L/usr/local/usr/local/lib -lforcolormap 

The path /usr/local/usr/local/lib should be /usr/local/lib instead.

In the install/template.pc file we have:

prefix = @CMAKE_INSTALL_PREFIX@
libdir = ${prefix}/@CMAKE_INSTALL_FULL_LIBDIR@
includedir = ${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
...
Libs: -L${libdir} -l@PROJECT_NAME@
Cflags: -I${includedir}

We can write libdir = ${prefix}/@CMAKE_INSTALL_LIBDIR@
but we could also delete the prefix variable and use the CMAKE_INSTALL_FULL_ version for both directories.
What solution should we use? @jchristopherson

https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html

Using ForColormap as a static library fails

@jchristopherson @gha3mi

System: Ubuntu 23.10, FreeBSD 14.0
Compiler: GFortran 13.2.0

I am now trying to use ForColormap as a static library (.a under Linux). I have written a toy.f90 minimalist program:

use forcolormap, only: Colormap, wp
type(Colormap) :: cmap

call cmap%set("cubehelix", 0.0_wp, 1.0_wp, 1024)
print *, "test"
end

ForColormap was configured with cmake -D BUILD_SHARED_LIBS=false .. before building and installing.
The .mod files are all in /usr/local/include/ and the two .a are in /usr/local/lib/.

But I can not compile my toy program with the -static option:

$ gfortran -static toy.f90 $(pkg-config --cflags --libs forcolormap)
/usr/local/bin/ld: /usr/local/lib/libforcolormap.a(colormap_class.f90.o): in function `__forcolormap_MOD_write_ppm_colorbar':
colormap_class.f90:(.text+0xc10): undefined reference to `__pnm_MOD___vtab_pnm_Format_pnm'
/usr/local/bin/ld: colormap_class.f90:(.text+0xf38): undefined reference to `__pnm_MOD_set_format'
/usr/local/bin/ld: colormap_class.f90:(.text+0xf90): undefined reference to `__pnm_MOD_set_pnm'
/usr/local/bin/ld: colormap_class.f90:(.text+0xfbe): undefined reference to `__pnm_MOD_export_pnm'
/usr/local/bin/ld: colormap_class.f90:(.text+0x10a7): undefined reference to `__pnm_MOD_set_format'
collect2: error: ld returned 1 exit status

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.