00001 
00008 #include <cstdio>
00009 #include <iostream>
00010 #include <cassert>
00011 
00012 namespace ot {
00013 
00014   int readRmatType1Stencil(double *****&lut) {
00015     typedef double**** double4Ptr;
00016     typedef double*** double3Ptr;
00017     typedef double** double2Ptr;
00018     typedef double* doublePtr;
00019     FILE* infile;
00020     char fname[100];
00021     sprintf(fname,"RmatType1Stencils.inp");
00022     infile = fopen(fname,"r");
00023     if(!infile) {
00024       std::cout<<"The file "<<fname<<" is not good for reading."<<std::endl;
00025       assert(false);
00026     }
00027     lut = new double4Ptr[8];
00028     for(int i=0;i<8;i++) {
00029       lut[i] = new double3Ptr[8];
00030       for(int j=0;j<8;j++) {
00031         lut[i][j] = new double2Ptr[18];
00032         for(int k=0;k<18;k++) {
00033           lut[i][j][k] = new doublePtr[8];
00034           for(int l=0;l<8;l++) {
00035             lut[i][j][k][l] = new double[8];
00036             for(int m=0;m<8;m++) {
00037               fscanf(infile,"%lf",&(lut[i][j][k][l][m]));
00038             }
00039           }
00040         }
00041       }
00042     }
00043 
00044     fclose(infile);
00045     return 1;
00046   }
00047 
00048   int IreadRmatType1Stencil(double *****&lut, int rank) {
00049     typedef double**** double4Ptr;
00050     typedef double*** double3Ptr;
00051     typedef double** double2Ptr;
00052     typedef double* doublePtr;
00053     FILE* infile;
00054     char fname[250];
00055     sprintf(fname,"RmatType1Stencils_%d.inp",rank);
00056     infile = fopen(fname,"r");
00057     if(!infile) {
00058       std::cout<<"The file "<<fname<<" is not good for reading."<<std::endl;
00059       assert(false);
00060     }
00061     lut = new double4Ptr[8];
00062     for(int i=0;i<8;i++) {
00063       lut[i] = new double3Ptr[8];
00064       for(int j=0;j<8;j++) {
00065         lut[i][j] = new double2Ptr[18];
00066         for(int k=0;k<18;k++) {
00067           lut[i][j][k] = new doublePtr[8];
00068           for(int l=0;l<8;l++) {
00069             lut[i][j][k][l] = new double[8];
00070             for(int m=0;m<8;m++) {
00071               fscanf(infile,"%lf",&(lut[i][j][k][l][m]));
00072             }
00073           }
00074         }
00075       }
00076     }
00077 
00078     fclose(infile);
00079     return 1;
00080   }
00081 
00082 
00083   int destroyRmatType1Stencil(double *****&lut) {
00084     for(int i=0;i<8;i++) {
00085       for(int j=0;j<8;j++) {
00086         for(int k=0;k<18;k++) {
00087           for(int l=0;l<8;l++) {
00088             delete [] lut[i][j][k][l];
00089             lut[i][j][k][l] = NULL;
00090           }
00091           delete [] lut[i][j][k];
00092           lut[i][j][k] = NULL;
00093         }
00094         delete [] lut[i][j];
00095         lut[i][j] = NULL;
00096       }
00097       delete [] lut[i]; 
00098       lut[i] = NULL;
00099     }
00100     delete [] lut;
00101     lut = NULL;
00102     return 1;
00103   }
00104 
00105 }
00106 
00107