sandbox/ecipriano/src/custom-cmaps.h

    Additional colormaps for bview

    • seismic: blue-to-red diverging map extracted from matplotlib, good for plotting vorticity field.
    • black_body: sequential black-to-yellow colormap, useful for the temperature field in combustion simulations (from rt.c)
    void seismic (double cmap[NCMAP][3])
    {
      static double basemap[33][3] = {
        {0.000000, 0.000000, 0.300000},
        {0.000000, 0.000000, 0.387843},
        {0.000000, 0.000000, 0.475686},
        {0.000000, 0.000000, 0.563529},
        {0.000000, 0.000000, 0.651373},
        {0.000000, 0.000000, 0.739216},
        {0.000000, 0.000000, 0.827059},
        {0.000000, 0.000000, 0.914902},
        {0.003922, 0.003922, 1.000000},
        {0.129412, 0.129412, 1.000000},
        {0.254902, 0.254902, 1.000000},
        {0.380392, 0.380392, 1.000000},
        {0.505882, 0.505882, 1.000000},
        {0.631373, 0.631373, 1.000000},
        {0.756863, 0.756863, 1.000000},
        {0.882353, 0.882353, 1.000000},
        {1.000000, 0.992157, 0.992157},
        {1.000000, 0.866667, 0.866667},
        {1.000000, 0.741176, 0.741176},
        {1.000000, 0.615686, 0.615686},
        {1.000000, 0.490196, 0.490196},
        {1.000000, 0.364706, 0.364706},
        {1.000000, 0.239216, 0.239216},
        {1.000000, 0.113725, 0.113725},
        {0.994118, 0.000000, 0.000000},
        {0.931373, 0.000000, 0.000000},
        {0.868627, 0.000000, 0.000000},
        {0.805882, 0.000000, 0.000000},
        {0.743137, 0.000000, 0.000000},
        {0.680392, 0.000000, 0.000000},
        {0.617647, 0.000000, 0.000000},
        {0.554902, 0.000000, 0.000000},
        {0.500000, 0.000000, 0.000000},
      };
    
      for (int i = 0; i < NCMAP; i++) {
        double x = i*(32 - 1e-10)/(NCMAP - 1);
        int j = x; x -= j;
        for (int k = 0; k < 3; k++)
          cmap[i][k] = (1. - x)*basemap[j][k] + x*basemap[j+1][k];
      }
    }
    
    void black_body (double cmap[NCMAP][3])
    {
      static double basemap[33][3] = {
        {0.000000, 0.000000, 0.000000},
        {0.085791, 0.030987, 0.017333},
        {0.133175, 0.058869, 0.034680},
        {0.180002, 0.073069, 0.051539},
        {0.229816, 0.084060, 0.064781},
        {0.281398, 0.093913, 0.075409},
        {0.334522, 0.102639, 0.084245},
        {0.388958, 0.110254, 0.092799},
        {0.444612, 0.116733, 0.101403},
        {0.501422, 0.122026, 0.110058},
        {0.559331, 0.126068, 0.118768},
        {0.618286, 0.128768, 0.127532},
        {0.678238, 0.130007, 0.136351},
        {0.712850, 0.181722, 0.130817},
        {0.743632, 0.232650, 0.120992},
        {0.774325, 0.279316, 0.108090},
        {0.804936, 0.323627, 0.090796},
        {0.835473, 0.366525, 0.066236},
        {0.865943, 0.408541, 0.026029},
        {0.876634, 0.464020, 0.017307},
        {0.883455, 0.518984, 0.014963},
        {0.889052, 0.572164, 0.013500},
        {0.893376, 0.624109, 0.013033},
        {0.896370, 0.675180, 0.013680},
        {0.897974, 0.725631, 0.015556},
        {0.898117, 0.775643, 0.018777},
        {0.896720, 0.825351, 0.023459},
        {0.927670, 0.859991, 0.319086},
        {0.956159, 0.893933, 0.503317},
        {0.978271, 0.928565, 0.671307},
        {0.993196, 0.963913, 0.835609},
        {1.000000, 1.000000, 1.000000},
      };
    
      for (int i = 0; i < NCMAP; i++) {
        double x = i*(31 - 1e-10)/(NCMAP - 1);
        int j = x; x -= j;
        for (int k = 0; k < 3; k++)
          cmap[i][k] = (1. - x)*basemap[j][k] + x*basemap[j+1][k];
      }
    }
    
    void RdBu (double cmap[NCMAP][3])
    {
      static double basemap[33][3] = {
        {0.403922, 0.000000, 0.121569},
        {0.496194, 0.029527, 0.136332},
        {0.588466, 0.059054, 0.151096},
        {0.680738, 0.088581, 0.165859},
        {0.734025, 0.166090, 0.202614},
        {0.778316, 0.254671, 0.244444},
        {0.822607, 0.343253, 0.286275},
        {0.862284, 0.429527, 0.342714},
        {0.899193, 0.514418, 0.407920},
        {0.936101, 0.599308, 0.473126},
        {0.961707, 0.676125, 0.546943},
        {0.972780, 0.742561, 0.631834},
        {0.983852, 0.808997, 0.716724},
        {0.990311, 0.867436, 0.795156},
        {0.982930, 0.901884, 0.854210},
        {0.975548, 0.936332, 0.913264},
        {0.965705, 0.967243, 0.968089},
        {0.918954, 0.945098, 0.959477},
        {0.872203, 0.922953, 0.950865},
        {0.825452, 0.900807, 0.942253},
        {0.751788, 0.863591, 0.921799},
        {0.674279, 0.824221, 0.899654},
        {0.596770, 0.784852, 0.877509},
        {0.505729, 0.730258, 0.847751},
        {0.408535, 0.668743, 0.814533},
        {0.311342, 0.607228, 0.781315},
        {0.241830, 0.548789, 0.750557},
        {0.200000, 0.493426, 0.722261},
        {0.158170, 0.438062, 0.693964},
        {0.118647, 0.379239, 0.645675},
        {0.084198, 0.312803, 0.553403},
        {0.049750, 0.246367, 0.461130},
        {0.019608, 0.188235, 0.380392},
      };
    
      for (int i = 0; i < NCMAP; i++) {
        double x = (NCMAP - 1 - i)*(32 - 1e-10)/(NCMAP - 1);
        int j = x; x -= j;
        for (int k = 0; k < 3; k++)
          cmap[i][k] = (1. - x)*basemap[j][k] + x*basemap[j+1][k];
      }
    }