int main() { double *x_r,*x_i,*y_r,*y_i; int k,n,p,q,r,N = 1; clock_t t1, t2; printf("p,q,r = "); scanf("%d %d %d",&p,&q,&r); for(k = 0 ; k < p ; k++) N*=2; for(k = 0 ; k < q ; k++) N*=3; for(k = 0 ; k < r ; k++) N*=5; printf("N = %d\n",N); x_r = (double *) malloc (N*sizeof(double)); x_i = (double *) malloc (N*sizeof(double)); y_r = (double *) malloc (N*sizeof(double)); y_i = (double *) malloc (N*sizeof(double)); for(k = 0 ; k < N ; k++) { *(x_r+k) = k; *(x_i+k) = 0; //printf("x_%d = %f + %f i\n",k,*(x_r+k),*(x_i+k)); } system("pause"); FFT(x_r,x_i,y_r,y_i,N); for(k = 0 ; k < N ; k++) { *(x_r+k) = y_r[k]; *(x_i+k) = y_i[k]; printf("x_%d = %f + %f i\n",k,*(x_r+k),*(x_i+k)); } iFFT(x_r,x_i,y_r,y_i,N); for(k = 0 ; k < N ; k++) printf("y_%d : %f + %f i\n",k,y_r[k]/N,y_i[k]/N); free(x_r); free(x_i); free(y_r); free(y_i); system("pause"); return 0; }
std::vector<FFTGrid*> State4D::doRockPhysicsInversion(TimeLine & time_line, const std::vector<DistributionsRock *> rock_distributions, TimeEvolution & timeEvolution) { LogKit::WriteHeader("Start 4D rock physics inversion"); bool debug=true; // triggers printouts // inverse transform posterior iFFT(); // Note rockSample contains rock sample for all time steps. int nSim=10000; // NBNB OK 100000->10000 for speed during debug LogKit::LogFormatted(LogKit::Low,"\nSampling rock physics distribution..."); std::vector<std::vector<std::vector<double> > > rockSample = timeEvolution.returnCorrelatedSample(nSim,time_line, rock_distributions); LogKit::LogFormatted(LogKit::Low,"done\n\n"); int nTimeSteps = static_cast<int>(rockSample.size()); //nSim=rockSample[0].size(); int nParam = static_cast<int>(rockSample[0][0].size()); int nM = 3; // number of seismic parameters. int nRockProperties = nParam-nM; // number of rock parameters //write rockSamples to check ok if(debug) { NRLib::Matrix rockSamples(nSim,nParam*nTimeSteps); for(int i = 0;i<nSim;i++) for(int j=0;j < nTimeSteps;j++ ) for(int k=0;k<nParam;k++) { int ind=k+j*nParam; rockSamples(i,ind)=rockSample[j][i][k]; } NRLib::WriteMatrixToFile("rockSample.dat", rockSamples); } std::vector<std::vector<double> > mSamp = makeSeismicParamsFromrockSample(rockSample); //write seismic parameters to check ok if(debug) { NRLib::Matrix seisPar(nSim,6); for(int i = 0;i<nSim;i++) for(int j=0;j < 6;j++ ) { seisPar(i,j)=mSamp[j][i]; } NRLib::WriteMatrixToFile("seisParSample.dat", seisPar); } NRLib::Vector fullPriorMean = timeEvolution.computePriorMeanStaticAndDynamicLastTimeStep(); NRLib::Matrix fullPriorCov = timeEvolution.computePriorCovStaticAndDynamicLastTimeStep(); NRLib::Matrix fullPosteriorCov = GetFullCov(); if(debug) { NRLib::WriteMatrixToFile("priorCov.dat", fullPriorCov ); NRLib::WriteMatrixToFile("posteriorCov.dat", fullPosteriorCov); NRLib::WriteVectorToFile("priorMean.dat",fullPriorMean ); } LogKit::LogFormatted(LogKit::Low,"\nMaking rock-physics lookup tables, table 1 of %d\n",nRockProperties+1); RockPhysicsInversion4D* rockPhysicsInv = new RockPhysicsInversion4D(fullPriorMean,fullPriorCov,fullPosteriorCov,mSamp); //LogKit::LogFormatted(LogKit::Low,"done\n\n"); std::vector<FFTGrid*> prediction(nRockProperties); LogKit::LogFormatted(LogKit::Low,"\nDoing rock-physics predictions..."); for(int i=0;i<nRockProperties;i++) { LogKit::LogFormatted(LogKit::Low,"\nMaking rock-physics lookup tables, table %d of %d\n",i+2,nRockProperties+1); std::vector<double> rSamp = getRockPropertiesFromRockSample(rockSample,i); rockPhysicsInv->makeNewPredictionTable(mSamp,rSamp); prediction[i] = rockPhysicsInv->makePredictions(mu_static_, mu_dynamic_ ); } LogKit::LogFormatted(LogKit::Low,"done\n\n"); delete rockPhysicsInv; return prediction; }