int EO_rIG_tExp::agg_dyn(long double dt, long double t) // E' il cuore della classe ogni batterio implementa questo in modo diverso. { if (salto_==1) { long double sigma_x=f_sigma(); long double lambda_star=lambda_r+dt*f_lambda()+sigma_x*deltaW_ec(dt); bool condition_salto = (exp(-2*(barriera_r-lambda_r)*(barriera_r-lambda_star)/(dt*pow(sigma_x,2)))>=unifRand()) || (lambda_r>barriera_r) ; if (condition_salto) { { barriera_r=reset_barrier(); lambda_r=0.0; return salto_=0; } } else{ lambda_r=lambda_star; } }else if(salto_==-1){ lambda_t+=dt/tau_t; if (lambda_t>=barriera_t) { // barriera_t=min(Exp_dist(),1.5); barriera_t=reset_barrier_t(); lambda_t=0.0; return salto_=2; } } return salto_; }
EO_rIG_tExp::EO_rIG_tExp(const EO_rIG_tExp& modello):EO_rExp_tExp(modello){ Tipo_batterio = modello.Tipo_batterio; codice_batterio=modello.codice_batterio; barriera_r=reset_barrier(); tipo_sigma=modello.tipo_sigma; B_0=modello.B_0; B_1=modello.B_1; B_2=modello.B_2; }
void EO_rIG_tExp::reset_par(){ EO_rExp_tExp::reset_par(); Tipo_batterio = "EO-rIG-tExp"; barriera_r=reset_barrier(); B_0=1.6; }
void CV_rIG_tExp::reset_par(){ CV_rExp_tExp::reset_par(); Tipo_batterio = "CV-rIG-tExp"; barriera_r=reset_barrier(); B_0=1.6; }
// primitive barrier function. all cores call this. void waiton_barrier(barrier_t* barrier) { uint8_t local_ready = barrier->ready; spin_lock_irqsave(&barrier->lock); barrier->current_count--; if (barrier->current_count) { spin_unlock_irqsave(&barrier->lock); while (barrier->ready == local_ready) cpu_relax(); } else { spin_unlock_irqsave(&barrier->lock); reset_barrier(barrier); wmb(); barrier->ready++; } }
EO_rIG_tExp::EO_rIG_tExp():EO_rExp_tExp(){ Tipo_batterio = "EO-rIG-tExp"; codice_batterio = EcoliType::EO_REXP_RIG_TEXP; barriera_r=reset_barrier(); B_0=1.6; }
int CV_rIG_tExp::agg_dyn(long double dt, long double t) // E' il cuore della classe ogni batterio implementa questo in modo diverso. { // cout << "Q_max(CV_rIG_tExp::agg_dyn) = "<< s_lambda_r.Q_max << endl; // cout << "m = " << m[0] << "," << m[1] << "," << m[2] << endl; // cout << "Q = " << Q << endl; if (salto_==1) { long double sigma_x=f_sigma(); long double lambda_star=lambda_r+dt*f_lambda()+sigma_x*deltaW_ec(dt); // if (lambda_r>barriera_r) { // cout << "t = " << t << endl; // cout << "l_r = " << lambda_r << endl; // cout << "b_r = " << barriera_r << endl; // // } bool condition_salto = (exp(-2*(barriera_r-lambda_r)*(barriera_r-lambda_star)/(dt*pow(sigma_x,2)))>=unifRand_ec()) || (lambda_r>barriera_r) ; // || (exp(-2*(barriera_r_inf-lambda_r)*(barriera_r_inf-lambda_star)/(dt*pow(sigma_x,2)))>=unifRand()) // || (lambda_r<barriera_r_inf); if (condition_salto) { // if ((t-t_r<t_min)) { // // cout << "*******************************\n"; // cout << "t = " << t << endl; // cout << "t-t_r = " << t-t_r << endl; // // if (Q>=0) { // if (unifRand()<probIG_t_minQp) // { // barriera_r=1; // lambda_r=0.0; // return salto_=0; // }else{ lambda_r=0.0; } // }else{ // if (unifRand()<probIG_t_minQn) // { // barriera_r=1; // lambda_r=0.0; // return salto_=0; // }else { lambda_r=0.0; } // } // // } // else { barriera_r=reset_barrier(); lambda_r=0.0; return salto_=0; } } else{ lambda_r=lambda_star; } }else if(salto_==-1){ lambda_t+=dt/tau_t; if (lambda_t>=barriera_t) { // barriera_t=min(Exp_dist(),1.5); barriera_t=reset_barrier_t(); lambda_t=0.0; return salto_=2; } } return salto_; }
CV_rIG_tExp::CV_rIG_tExp():CV_rExp_tExp(){ Tipo_batterio = "CV-rIG-tExp"; codice_batterio = EcoliType::CV_RIG_TEXP; barriera_r=reset_barrier(); B_0=1.6; }