long_flt_type Schechter_like_functor::operator()( const long_flt_type & in_param) const
{
	const flt_type & mag_jump_limit = 23.;

	const long_flt_type x = std::pow(10,0.4*(m_star()-in_param));
	long_flt_type result = 0.4*std::log(10.)*N_scale()*std::pow(x,alpha()+1)*
			std::exp(-std::pow(x,mag_lower_lim_sharpness()));

	if(in_param>=mag_jump_limit) result += mag23_jump();

	const long_flt_type xh = std::pow(10,0.4*(in_param-mag_upper_lim()));

	result *= std::exp(-std::pow(xh,mag_upper_lim_sharpness()));

	return result;
}
Example #2
0
int main(int argc,char** argv)
{
    Graph g=read_graph(argv[1]);
    int length=g.len();
    float* betweenness=new float[length];
    float** distances=new float*[length];
    int** sigmas=new int*[length];
    for(int i=0;i<length;i++)
    {
        distances[i]=new float[length];
        sigmas[i]=new int[length];
    }    
    tablistlist predecs;
    unordered_map<int,tablist > DAG;
    clock_t begin=clock();
    betweenness_centrality1(g,betweenness,distances,sigmas,predecs,DAG);
    clock_t end=clock();
    cout<<"Time for Brandes first up:"<<(end-begin+0.0)/(CLOCKS_PER_SEC+0.0)<<endl;
    int l=g.len();
    int m=g.edges();
    cout<<"Edges (m):"<<m<<endl;
    cout<<"Vertices (n):"<<(l-1)<<endl;
    cout<<"m/n :"<<(float)m/(l-1)<<endl;
    int mstar=m_star(DAG);
    cout<<"m* :"<<mstar<<endl;
    cout<<"m*/n :"<<(float)mstar/(l-1)<<endl;
    
   // cout<<"Time for Brandes first up:"<<(end-begin+0.0)/(CLOCKS_PER_SEC+0.0)<<endl;
	/*
    int u,v;
    float newweight;
    cout<<"Enter u,v, new weight"<<endl;
    cin>>u>>v>>newweight;
    vector<Edge> vector_u=g.adj_list[u];
    for(vector<Edge>::iterator it=vector_u.begin();it!=vector_u.end();it++)
    {
        if((it->vertex==v)&&(it->weight<newweight))
        {
            cout<<"Non-incremental change"<<endl;
            exit(-1);
        }
   }
   */
    delete[] betweenness;
	int* a=new int[40];
	int* b=new int[40];
	float* c=new float[40];
	read_in_triples(a,b,c,argv[2]);
	int successes=0;
	clock_t total_time=0;
	//read in the edge updates
	for(int j=0;j<40&&successes<20;j++)
	{
    	      vector<Edge> vector_u=g.adj_list[a[j]];
	      int exit_flag=0;
    	      for(vector<Edge>::iterator it=vector_u.begin();it!=vector_u.end();it++)
    	      {
        	   if((it->vertex==b[j])&&(it->weight<c[j]))
       		   {
            	       cout<<"Non-incremental change"<<endl;
            	       exit_flag=1;
		       break;
        	    }
              }
	      if(exit_flag==1)
	      {
		  continue;
	      }
	      successes+=1;
    	      float* BCprime=new float[length];
    	      float** distancesprime=new float*[length];
    	      int** sigmasprime=new int*[length];
    	      for(int i=0;i<length;i++)
    	      {
        	    distancesprime[i]=new float[length];
        	    sigmasprime[i]=new int[length];
              }        
 	      tablistlist predecs_new;
    	      unordered_map<int,tablist > dagprime;
    	      begin=clock();  
    	         incremental_BC( a[j], b[j], c[j],distances,sigmas,
                                DAG,g,BCprime,distancesprime,
                                sigmasprime,predecs_new,dagprime);
    	      end=clock();
    	      cout<<"Time for incremental :"<<(end-begin+0.0)/(CLOCKS_PER_SEC+0.0)<<endl<<endl;;
	      total_time+=end-begin;
    	//Recomputing Betweenness Centrality after addition
    	      float** distances_new=new float*[length];
    	      int** sigmas_new=new int*[length];
    	      for(int i=0;i<length;i++)
    	      {
        	 distances_new[i]=new float[length];
        	 sigmas_new[i]=new int[length];
    	      }    
    	      tablistlist predecsnew;
    	      unordered_map<int,tablist > dagnew;
    	      float* betweenness_new=new float[length];
    	      g.add_edge(a[j],b[j],c[j]);
   
    	      betweenness_centrality1(g,betweenness_new,distances_new,sigmas_new,predecsnew,dagnew);
    	      for(int i=0;i<length;i++)
    	       {
     		        if(abs(BCprime[i]-betweenness_new[i])>EPSILON)
			{
      			cout<<"There is a mismatch at "<<i<<":"<<(BCprime[i]-betweenness_new[i])<<endl;   
      		         }
    	       }
		
		for(int alpha=0;alpha<length;alpha++)
		{
			for(int beta=0;beta<length;beta++)
			{
				distances[alpha][beta]=distancesprime[alpha][beta];
				sigmas[alpha][beta]=sigmasprime[alpha][beta];
			}
		}
		//std::copy(dagnew.begin(), dagnew.end(), std::inserter(DAG, DAG.end()) );
		DAG=dagnew;
 		for(int i=0;i<length;i++)
    	        {
			delete[] distancesprime[i];
			delete[] sigmasprime[i];
			delete[] distances_new[i];
			delete[] sigmas_new[i];	
    	        }
		delete[] distancesprime;
		delete[] sigmasprime;
		delete[] distances_new;
		delete[] sigmas_new;
		delete[] betweenness_new;
		delete[] BCprime;

	  }
	  for(int i=0;i<length;i++)
	  {
		delete[] distances[i];
		delete[] sigmas[i];
	  }		
	   delete[] distances;
	   delete[] sigmas;
	   cout<<"\n(Average)Time for incremental :"<<(total_time+0.0)/((CLOCKS_PER_SEC+0.0)*successes)<<endl;       
           return 0;
}