Beispiel #1
0
  public x16(String[] args) {
    int i, j;
    double x, y, argx, argy, distort, r, t, zmin, zmax;
    double[] px = new double[PERIMETERPTS];
    double[] py = new double[PERIMETERPTS];
    double[][] xg0 = new double[XPTS][YPTS];
    double[][] yg0 = new double[XPTS][YPTS];
    double[][] xg1 = new double[XPTS][YPTS];
    double[][] yg1 = new double[XPTS][YPTS];
    double[][] z = new double[XPTS][YPTS];
    double[][] w = new double[XPTS][YPTS];
    double[][] xg2 = new double[XPTS][YPTS];
    double[][] yg2 = new double[XPTS][YPTS];
    double[] clevel = new double[NSHADES];
    double[] shedge = new double[NSHADES + 1];
    final int cont_color = 0;
    final double fill_width = 2., cont_width = 0.;
    double[] colorbar_width = new double[1];
    double[] colorbar_height = new double[1];

    int[] num_values = new int[NUM_AXES];
    double[][] values = new double[NUM_AXES][NSHADES + 1];
    String axis_opts[] = {"bcvtm"};
    double axis_ticks[] = {0.0};
    int axis_subticks[] = {0};

    int label_opts[] = {PL_COLORBAR_LABEL_BOTTOM};
    String labels[] = {"Magnitude"};

    // Parse and process command line arguments.
    pls.parseopts(args, PL_PARSE_FULL | PL_PARSE_NOPROGRAM);

    // Load colour palettes
    pls.spal0("cmap0_black_on_white.pal");
    pls.spal1("cmap1_gray.pal", true);
    // Reduce colors in cmap 0 so that cmap 1 is useful on a
    // 16-color display
    pls.scmap0n(3);

    // Initialize plplot

    pls.init();
    // Set up data array

    for (i = 0; i < XPTS; i++) {
      x = (double) (i - (XPTS / 2)) / (double) (XPTS / 2);
      for (j = 0; j < YPTS; j++) {
        y = (double) (j - (YPTS / 2)) / (double) (YPTS / 2) - 1.0;

        z[i][j] = -Math.sin(7. * x) * Math.cos(7. * y) + x * x - y * y;
        w[i][j] = -Math.cos(7. * x) * Math.sin(7. * y) + 2 * x * y;
      }
    }

    f2mnmx(z, XPTS, YPTS);
    zmin = fmin;
    zmax = fmax;

    for (i = 0; i < NSHADES; i++) clevel[i] = zmin + (zmax - zmin) * (i + 0.5) / NSHADES;

    for (i = 0; i < NSHADES + 1; i++) shedge[i] = zmin + (zmax - zmin) * i / NSHADES;

    for (i = 0; i < XPTS; i++) {
      for (j = 0; j < YPTS; j++) {
        // Replacement for mypltr of x16c.c
        x = tr[0] * i + tr[1] * j + tr[2];
        y = tr[3] * i + tr[4] * j + tr[5];

        argx = x * Math.PI / 2;
        argy = y * Math.PI / 2;
        distort = 0.4;

        // Note xg0 ==> yg1 are one-dimensional because of arrangement of
        // zeros in the final tr definition above.  However, for now
        // we are using raw interface here so must nominally treat them
        // as two-dimensional.
        xg0[i][j] = x;
        yg0[i][j] = y;

        xg1[i][j] = x + distort * Math.cos(argx);
        yg1[i][j] = y - distort * Math.cos(argy);

        xg2[i][j] = x + distort * Math.cos(argx) * Math.cos(argy);
        yg2[i][j] = y - distort * Math.cos(argx) * Math.cos(argy);
      }
    }

    // Plot using identity transform

    pls.adv(0);
    pls.vpor(0.1, 0.9, 0.1, 0.9);
    pls.wind(-1.0, 1.0, -1.0, 1.0);

    pls.psty(0);

    pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, true, xg0, yg0);

    // Smaller text
    pls.schr(0.0, 0.75);
    // Small ticks on the vertical axis
    pls.smaj(0.0, 0.5);
    pls.smin(0.0, 0.5);

    num_values[0] = NSHADES + 1;
    for (i = 0; i < NSHADES + 1; i++) {
      values[0][i] = shedge[i];
    }
    pls.colorbar(
        colorbar_width,
        colorbar_height,
        PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL,
        0,
        0.005,
        0.0,
        0.0375,
        0.875,
        0,
        1,
        1,
        0.0,
        0.0,
        cont_color,
        cont_width,
        label_opts,
        labels,
        axis_opts,
        axis_ticks,
        axis_subticks,
        num_values,
        values);

    // Reset text and tick sizes
    pls.schr(0.0, 1.0);
    pls.smaj(0.0, 1.0);
    pls.smin(0.0, 1.0);

    pls.col0(1);
    pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0);
    pls.col0(2);
    pls.lab("distance", "altitude", "Bogon density");

    // Plot using 1d coordinate transform

    // Load colour palettes
    pls.spal0("cmap0_black_on_white.pal");
    pls.spal1("cmap1_blue_yellow.pal", true);
    // Reduce colors in cmap 0 so that cmap 1 is useful on a
    // 16-color display
    pls.scmap0n(3);

    pls.adv(0);
    pls.vpor(0.1, 0.9, 0.1, 0.9);
    pls.wind(-1.0, 1.0, -1.0, 1.0);

    pls.psty(0);

    pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, true, xg1, yg1);

    // Smaller text
    pls.schr(0.0, 0.75);
    // Small ticks on the vertical axis
    pls.smaj(0.0, 0.5);
    pls.smin(0.0, 0.5);

    num_values[0] = NSHADES + 1;
    for (i = 0; i < NSHADES + 1; i++) {
      values[0][i] = shedge[i];
    }
    pls.colorbar(
        colorbar_width,
        colorbar_height,
        PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL,
        0,
        0.005,
        0.0,
        0.0375,
        0.875,
        0,
        1,
        1,
        0.0,
        0.0,
        cont_color,
        cont_width,
        label_opts,
        labels,
        axis_opts,
        axis_ticks,
        axis_subticks,
        num_values,
        values);

    // Reset text and tick sizes
    pls.schr(0.0, 1.0);
    pls.smaj(0.0, 1.0);
    pls.smin(0.0, 1.0);

    pls.col0(1);
    pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0);
    pls.col0(2);

    pls.lab("distance", "altitude", "Bogon density");

    // Plot using 2d coordinate transform

    // Load colour palettes
    pls.spal0("cmap0_black_on_white.pal");
    pls.spal1("cmap1_blue_red.pal", true);
    // Reduce colors in cmap 0 so that cmap 1 is useful on a
    // 16-color display
    pls.scmap0n(3);

    pls.adv(0);
    pls.vpor(0.1, 0.9, 0.1, 0.9);
    pls.wind(-1.0, 1.0, -1.0, 1.0);

    pls.psty(0);

    pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, false, xg2, yg2);

    // Smaller text
    pls.schr(0.0, 0.75);
    // Small ticks on the vertical axis
    pls.smaj(0.0, 0.5);
    pls.smin(0.0, 0.5);

    num_values[0] = NSHADES + 1;
    for (i = 0; i < NSHADES + 1; i++) {
      values[0][i] = shedge[i];
    }
    pls.colorbar(
        colorbar_width,
        colorbar_height,
        PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL,
        0,
        0.005,
        0.0,
        0.0375,
        0.875,
        0,
        1,
        1,
        0.0,
        0.0,
        cont_color,
        cont_width,
        label_opts,
        labels,
        axis_opts,
        axis_ticks,
        axis_subticks,
        num_values,
        values);

    // Reset text and tick sizes
    pls.schr(0.0, 1.0);
    pls.smaj(0.0, 1.0);
    pls.smin(0.0, 1.0);

    pls.col0(1);
    pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0);
    pls.col0(2);
    pls.cont(w, 1, XPTS, 1, YPTS, clevel, xg2, yg2);

    pls.lab("distance", "altitude", "Bogon density, with streamlines");

    // Plot using 2d coordinate transform

    // Load colour palettes
    pls.spal0("");
    pls.spal1("", true);
    // Reduce colors in cmap 0 so that cmap 1 is useful on a
    // 16-color display
    pls.scmap0n(3);

    pls.adv(0);
    pls.vpor(0.1, 0.9, 0.1, 0.9);
    pls.wind(-1.0, 1.0, -1.0, 1.0);

    pls.psty(0);

    pls.shades(z, -1., 1., -1., 1., shedge, fill_width, 2, 3., false, xg2, yg2);

    // Smaller text
    pls.schr(0.0, 0.75);
    // Small ticks on the vertical axis
    pls.smaj(0.0, 0.5);
    pls.smin(0.0, 0.5);

    num_values[0] = NSHADES + 1;
    for (i = 0; i < NSHADES + 1; i++) {
      values[0][i] = shedge[i];
    }
    pls.colorbar(
        colorbar_width,
        colorbar_height,
        PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL,
        0,
        0.005,
        0.0,
        0.0375,
        0.875,
        0,
        1,
        1,
        0.0,
        0.0,
        2,
        3.0,
        label_opts,
        labels,
        axis_opts,
        axis_ticks,
        axis_subticks,
        num_values,
        values);

    // Reset text and tick sizes
    pls.schr(0.0, 1.0);
    pls.smaj(0.0, 1.0);
    pls.smin(0.0, 1.0);

    pls.col0(1);
    pls.box("bcnst", 0.0, 0, "bcnstv", 0.0, 0);
    pls.col0(2);

    pls.lab("distance", "altitude", "Bogon density");

    // Note this exclusion API will probably change so don't bother
    // with it for x16.java example.

    // Example with polar coordinates.

    // Load colour palettes
    pls.spal0("cmap0_black_on_white.pal");
    pls.spal1("cmap1_gray.pal", true);
    // Reduce colors in cmap 0 so that cmap 1 is useful on a
    // 16-color display
    pls.scmap0n(3);

    pls.adv(0);
    pls.vpor(.1, .9, .1, .9);
    pls.wind(-1., 1., -1., 1.);

    pls.psty(0);

    // Build new coordinate matrices.

    for (i = 0; i < XPTS; i++) {
      r = ((double) i) / (XPTS - 1);
      for (j = 0; j < YPTS; j++) {
        t = (2. * Math.PI / (YPTS - 1.)) * j;
        xg2[i][j] = r * Math.cos(t);
        yg2[i][j] = r * Math.sin(t);
        z[i][j] = Math.exp(-r * r) * Math.cos(5. * Math.PI * r) * Math.cos(5. * t);
      }
    }

    // Need a new shedge to go along with the new data set.

    f2mnmx(z, XPTS, YPTS);
    zmin = fmin;
    zmax = fmax;

    for (i = 0; i < NSHADES + 1; i++) shedge[i] = zmin + (zmax - zmin) * i / NSHADES;

    pls.shades(z, -1., 1., -1., 1., shedge, fill_width, cont_color, cont_width, false, xg2, yg2);

    // Smaller text
    pls.schr(0.0, 0.75);
    // Small ticks on the vertical axis
    pls.smaj(0.0, 0.5);
    pls.smin(0.0, 0.5);

    num_values[0] = NSHADES + 1;
    for (i = 0; i < NSHADES + 1; i++) {
      values[0][i] = shedge[i];
    }
    pls.colorbar(
        colorbar_width,
        colorbar_height,
        PL_COLORBAR_SHADE | PL_COLORBAR_SHADE_LABEL,
        0,
        0.005,
        0.0,
        0.0375,
        0.875,
        0,
        1,
        1,
        0.0,
        0.0,
        cont_color,
        cont_width,
        label_opts,
        labels,
        axis_opts,
        axis_ticks,
        axis_subticks,
        num_values,
        values);

    // Reset text and tick sizes
    pls.schr(0.0, 1.0);
    pls.smaj(0.0, 1.0);
    pls.smin(0.0, 1.0);

    // Now we can draw the perimeter.  (If do before, shade stuff may overlap.)
    for (i = 0; i < PERIMETERPTS; i++) {
      t = (2. * Math.PI / (PERIMETERPTS - 1)) * i;
      px[i] = Math.cos(t);
      py[i] = Math.sin(t);
    }
    pls.col0(1);
    pls.line(px, py);

    // And label the plot.

    pls.col0(2);
    pls.lab("", "", "Tokamak Bogon Instability");

    // Clean up

    pls.end();
  }
Beispiel #2
0
  public x11(String[] args) {
    int i, j, k;

    double[] x = new double[XPTS];
    double[] y = new double[YPTS];
    double[][] z = new double[XPTS][YPTS];
    double zmin = Double.MAX_VALUE, zmax = Double.MIN_VALUE;

    double xx, yy;
    int nlevel = LEVELS;
    double[] clevel = new double[LEVELS];
    double step;

    // Parse and process command line arguments.

    pls.parseopts(args, PL_PARSE_FULL | PL_PARSE_NOPROGRAM);

    // Initialize plplot.

    pls.init();

    for (i = 0; i < XPTS; i++) x[i] = 3. * (i - (XPTS / 2)) / (XPTS / 2);

    for (j = 0; j < YPTS; j++) y[j] = 3. * (j - (YPTS / 2)) / (YPTS / 2);

    for (i = 0; i < XPTS; i++) {
      xx = x[i];
      for (j = 0; j < YPTS; j++) {
        yy = y[j];
        z[i][j] =
            3. * (1. - xx) * (1. - xx) * Math.exp(-(xx * xx) - (yy + 1.) * (yy + 1.))
                - 10.
                    * (xx / 5. - Math.pow(xx, 3.) - Math.pow(yy, 5.))
                    * Math.exp(-xx * xx - yy * yy)
                - 1. / 3. * Math.exp(-(xx + 1) * (xx + 1) - (yy * yy));
        // if ( false ) // Jungfraujoch/Interlaken
        // {
        //    if ( z[i][j] < -1. )
        //        z[i][j] = -1.;
        // }
        if (zmin > z[i][j]) zmin = z[i][j];
        if (zmax < z[i][j]) zmax = z[i][j];
      }
    }

    step = (zmax - zmin) / (nlevel + 1);
    for (i = 0; i < nlevel; i++) clevel[i] = zmin + step + step * i;

    cmap1_init();
    for (k = 0; k < 2; k++) {
      for (i = 0; i < 4; i++) {
        pls.adv(0);
        pls.col0(1);
        pls.vpor(0.0, 1.0, 0.0, 0.9);
        pls.wind(-1.0, 1.0, -1.0, 1.5);

        pls.w3d(1.0, 1.0, 1.2, -3.0, 3.0, -3.0, 3.0, zmin, zmax, alt[k], az[k]);
        pls.box3(
            "bnstu", "x axis", 0.0, 0, "bnstu", "y axis", 0.0, 0, "bcdmnstuv", "z axis", 0.0, 4);

        pls.col0(2);

        // wireframe plot
        if (i == 0) pls.mesh(x, y, z, opt[k]);

        // magnitude colored wireframe plot
        else if (i == 1) pls.mesh(x, y, z, opt[k] | MAG_COLOR);

        // magnitude colored wireframe plot with sides
        else if (i == 2) pls.plot3d(x, y, z, opt[k] | MAG_COLOR, true);

        // magnitude colored wireframe plot with base contour
        else if (i == 3) pls.meshc(x, y, z, opt[k] | MAG_COLOR | BASE_CONT, clevel);

        pls.col0(3);
        pls.mtex("t", 1.0, 0.5, 0.5, title[k]);
      }
    }

    pls.end();
  }