Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • feature/add-fft-interface
  • feature/expose-rnumber-from-simulations
  • feature/particle_state_generation_with_variable_box_size
  • feature/forcing-unit-test
  • feature/dealias-check2
  • bugfix/check_field_exists
  • feature/dealias-check
  • v3.x
  • feature/particles-vectorization
  • 6.2.4
  • 6.2.3
  • 6.2.2
  • 6.2.1
  • 6.2.0
  • 6.1.0
  • 6.0.0
  • 5.8.1
  • 5.8.0
  • 5.7.2
  • 5.7.1
  • 5.7.0
  • 5.6.0
  • 5.5.1
  • 5.5.0
  • 5.4.7
  • 5.4.6
  • 5.4.5
  • 5.4.4
  • 5.4.3
30 results

transp.cpp

Blame
  • user avatar
    Chichi Lalescu authored
    c7648627
    History
    transp.cpp 1.65 KiB
    #include "field_descriptor.hpp"
    
    int myrank, nprocs;
    
    int main(int argc, char *argv[])
    {
        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
        MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
    
        int n[3];
        field_descriptor f0, f1;
    
        switch(argc)
        {
            case 3:
                if (myrank == 0)
                    printf("transposing 2D array from \"data0\" into \"data1\" with %d processes.\n", nprocs);
                // dimensions
                n[0] = atoi(argv[1]);
                n[1] = atoi(argv[2]);
                f0.initialize(2, n, MPI_FLOAT);
                n[0] = atoi(argv[2]);
                n[1] = atoi(argv[1]);
                f1.initialize(2, n, MPI_FLOAT);
                break;
            case 4:
                if (myrank == 0)
                    printf("transposing 3D array from \"data0\" into \"data1\" with %d processes.\n", nprocs);
                // dimensions
                n[0] = atoi(argv[1]);
                n[1] = atoi(argv[2]);
                n[2] = atoi(argv[3]);
                f0.initialize(3, n, MPI_FLOAT);
                n[0] = atoi(argv[3]);
                n[1] = atoi(argv[2]);
                n[2] = atoi(argv[1]);
                f1.initialize(3, n, MPI_FLOAT);
                break;
            default:
                printf("you messed up the parameters, I'm not doing anything.\n");
                f0.finalize();
                f1.finalize();
                MPI_Finalize();
                break;
        }
    
        float *a0, *a1;
        a0 = (float*)malloc(f0.local_size*sizeof(float));
        a1 = (float*)malloc(f1.local_size*sizeof(float));
        f0.read("data0", (void*)a0);
        f0.transpose(a0, a1);
        f1.write("data1", (void*)a1);
        free(a0);
        free(a1);
    
        MPI_Finalize();
        return EXIT_SUCCESS;
    }