void P::factor() { returnAST = RefBasicAST(ANTLR_USE_NAMESPACE(antlr)nullAST); ANTLR_USE_NAMESPACE(antlr)ASTPair currentAST; RefBasicAST factor_AST = RefBasicAST(ANTLR_USE_NAMESPACE(antlr)nullAST); try { // for error handling factor2(); astFactory->addASTChild(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(returnAST)); { // ( ... )* for (;;) { if ((LA(1) == MOD || LA(1) == EXP)) { { switch ( LA(1)) { case EXP: { RefBinaryCompArithOpAST tmp11_AST = RefBinaryCompArithOpAST(RefBasicAST(ANTLR_USE_NAMESPACE(antlr)nullAST)); tmp11_AST = astFactory->create(LT(1)); astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp11_AST)); match(EXP); break; } case MOD: { RefBinaryCompArithOpAST tmp12_AST = RefBinaryCompArithOpAST(RefBasicAST(ANTLR_USE_NAMESPACE(antlr)nullAST)); tmp12_AST = astFactory->create(LT(1)); astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp12_AST)); match(MOD); break; } default: { throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); } } } factor2(); astFactory->addASTChild(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(returnAST)); } else { goto _loop14; } } _loop14:; } // ( ... )* factor_AST = RefBasicAST(currentAST.root); } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { reportError(ex); recover(ex,_tokenSet_3); } returnAST = factor_AST; }
void sLinsys::factor(Data *prob_, Variables *vars) { #ifdef TIMING double tTot=MPI_Wtime(); #endif // the call to the the parent's method takes care of all necessary updates // to the KKT system (updating diagonals mainly). This is done reccursevely, // we don't have to worry about it anymore. NlpGenLinsys::factorNoMatChange(prob_, vars, NULL); // now DO THE LINEAR ALGEBRA! sData* prob = dynamic_cast<sData*>(prob_); // in order to avoid a call to NlpGenLinsys::factor, call factor2 method. factor2(prob, vars); #ifdef TIMING tTot = MPI_Wtime()-tTot; MPI_Barrier(MPI_COMM_WORLD); int myRank; MPI_Comm_rank(MPI_COMM_WORLD, &myRank); //if(128*(myRank/128)==0) if(0==myRank) cout << "Outer fact. total time " << tTot << endl; #endif }
/** * \brief main function for the convolve program */ int main(int argc, char *argv[]) { // parse command line int c; int longindex; while (EOF != (c = getopt_long(argc, argv, "dh?", longopts, &longindex))) switch (c) { case 'd': debuglevel = LOG_DEBUG; break; case 'h': case '?': usage(argv[0]); return EXIT_SUCCESS; default: throw std::runtime_error("unknown option"); } // next two arguments must be filenames if ((argc - optind) != 3) { std::cerr << "need exactly three file name arguments" << std::endl; return EXIT_FAILURE; } const char *in1filename = argv[optind++]; const char *in2filename = argv[optind++]; const char *outfilename = argv[optind++]; // read the image from the file FITSin in1file(in1filename); ImagePtr image1 = in1file.read(); Image<double> *img1 = dynamic_cast<Image<double> *>(&*image1); if (NULL == img1) { debug(LOG_ERR, DEBUG_LOG, 0, "can only convolve double images"); } ConvolutionResult factor1(*img1, ImagePoint(0, 0)); FITSin in2file(in2filename); ImagePtr image2 = in2file.read(); Image<double> *img2 = dynamic_cast<Image<double> *>(&*image2); if (NULL == img2) { debug(LOG_ERR, DEBUG_LOG, 0, "can only convolve double images"); } ConvolutionResult factor2(*img2, ImagePoint(0, 0)); // compute the convolution ConvolutionResultPtr result = factor1 * factor2; // write the result image FITSout outfile(outfilename); outfile.setPrecious(false); outfile.write(result->image()); // that's it return EXIT_SUCCESS; }
/* calculate the scaliung factor to pull spectra to measurement */ double spectrum_generator_cpu::get_factor_to_scale_spectra_to_measurement(){ //weighted squared errors std::vector<double> factor1(this->mes_nspecsteps); std::vector<double> factor2(this->mes_nspecsteps); //loop over wavelenghts for( int wave=0 ; wave<this->mes_nspecsteps;wave++){ //counting the factor with err if ( this->mes_spec_mask[wave] == 0 && this->mes_spec_err[wave]!=0 ){ factor1[wave]= (this->mes_spec[wave] * this->result[wave]) / (this->mes_spec_err[wave] * this->mes_spec_err[wave] ); factor2[wave]= (this->result[wave] * this->result[wave] ) / (this->mes_spec_err[wave] * this->mes_spec_err[wave]); } else { //problems in mes factor1[wave]=0; factor2[wave]=0; } } //temp1, temp2 are sums of vectors factor1,factor2 //they are use to calculate the "factor" that pulls together observed //and model spectra double temp_1,temp_2,scale_factor; //get factors //summing factors, to pull spectra together //summing is sequential on CPU paralell summing would an overkill for 3-4000 numbers i guess temp_1=0; temp_2=0; for(int i=0;i<this->mes_nspecsteps;i++){ temp_1+=factor1[i]; temp_2+=factor2[i]; } scale_factor=temp_1/temp_2; return scale_factor; }
int jacobi(int a, int b) { int a1, a2; if (a >= b) /* 4 */ a %= b; if (a == 0) /* 0 */ return 0; if (a == 1) /* 1 */ return 1; if (a == 2) /* 3 */ if (((b*b-1) / 8) % 2 == 0) return 1; else return -1; /* 5' */ if (a & b & 1) /* both a and b are odd */ if (((a-1)*(b-1)/4) % 2 == 0) return +jacobi(b, a); else return -jacobi(b, a); /* 5 */ /* is the if-case correct? If so remove these comment markers... if (gcd(a, b) == 1) if (((a-1)*(b-1)/4) % 2 == 0) return +jacobi(b, a); else return -jacobi(b, a); */ /* 2 */ factor2(a, &a1, &a2); return jacobi(a1, b) * jacobi(a2, b); }
void sLinsys::factor(Data *prob_, Variables *vars_in,RegularizationAlg *RegInfo) { sData* prob = dynamic_cast<sData*>(prob_); sVars* vars = dynamic_cast<sVars*>(vars_in); bool skipUpdateReg=false; long long Num_NegEVal=-1; double priReg=0.0,dualReg=0.0; #ifdef TIMING double tTot=MPI_Wtime(); #endif // DoEvalReg = 1 -> when factorizing the matrix, add regularizations to correct inertia and singularity // (we ONLY calling this routine once in IBR) // 2 -> when factorizing the matrix, add regularizations to correct singularity only // (this is always the 1st call of this routine when IFR is used) // 0 -> when factorizing the matrix, force to use primal regularizaion. called iff xWx tests fail // (the other calls of this routine when IFR is used, now matrix is nonsingular for sure) if(RegInfo->DoEvalReg >= 1){ RegInfo->newLinearSystem(); if(RegInfo->ForceReg) NlpGenLinsys::factorNoMatChange(prob_, vars, RegInfo); else NlpGenLinsys::factorNoMatChange(prob_, vars, NULL); // now DO THE LINEAR ALGEBRA! // in order to avoid a call to NlpGenLinsys::factor, call factor2 method. Num_NegEVal = factor2(prob, vars); long long gbMy = prob->getGlobalMy(); long long gbMz = prob->getGlobalMz(); // check if matrix is singular if(Num_NegEVal < 0 || (Num_NegEVal < gbMy + gbMz && RegInfo->DoEvalReg == 1) ) RegInfo->MatrixSingular = 1; else RegInfo->MatrixSingular = 0; // skip update regularizaion if: 1) have correct inertia and mat is nonsingular // OR 2) mat is nonsingular and we will do inertia-free test later if( (RegInfo->DoEvalReg==1 && Num_NegEVal == gbMy + gbMz) || (RegInfo->DoEvalReg == 2 && Num_NegEVal != -1)){ skipUpdateReg=true; } } // update regularization while( !skipUpdateReg ){ RegInfo->computeRegularization(priReg,dualReg,prob->currMu); NlpGenLinsys::factorNoMatChange(prob_, vars, RegInfo); Num_NegEVal=(long long)factor2(prob, vars); // check if matrix is singular if(Num_NegEVal < 0) RegInfo->MatrixSingular = 1; else RegInfo->MatrixSingular = 0; // skip update regularizaion if: 1) have correct inertia and mat is nonsingular // OR 2) mat is nonsingular and we will do inertia-free test later // OR 3) we are doing inertia-free test now (mat is defenitly nonsingular) if( (RegInfo->DoEvalReg == 1 && Num_NegEVal == prob->getGlobalMy() + prob->getGlobalMz()) || (RegInfo->DoEvalReg == 2 && Num_NegEVal != -1) || RegInfo->DoEvalReg == 0 ) { skipUpdateReg = true; } } #ifdef TIMING tTot = MPI_Wtime()-tTot; MPI_Barrier(MPI_COMM_WORLD); int myRank; MPI_Comm_rank(MPI_COMM_WORLD, &myRank); if(0==myRank) cout << "Outer fact. total time " << tTot << endl; #endif }