/*
* This file is part of MAMMULT: Metrics And Models for Multilayer Networks
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include
#include
#include
#include "utils.h"
int main(int argc, char *argv[]){
if (argc < 6){
printf("Usage: %s \n", argv[0]);
exit(1);
}
/*dichiarazioni enzo*/
FILE *filein0,*filein1, *filein, *fileout;
unsigned int N0, K0,N1, K1, N, K;
unsigned int *J_slap0, *r_slap0, *J_slap1, *r_slap1, *J_slap, *r_slap;
double *w_slap;
/*dichiarazioni mie*/
/*r_slap e' lungo N+1, da 0 a N compresi*/
int i, j;
double f_j, f_j_2;
double alpha = (atof(argv[5]));
double beta = (atof(argv[6]));
/*il bias*/
int ov;
int deg0, deg1;
double degM, prodM, part, intM;
double degMrid, maxdegM = 200.0;
int number_nodes=(atoi(argv[4]));
double M=2.0;
filein0 = openfile_or_exit(argv[1], "r", 2);
read_slap(filein0, &K0, &N0, &J_slap0, &r_slap0);
filein1 = openfile_or_exit(argv[2], "r", 2);
read_slap(filein1, &K1, &N1, &J_slap1, &r_slap1);
filein = openfile_or_exit(argv[3], "r", 2);
read_slap_w(filein, &K, &N, &J_slap, &r_slap,&w_slap);
int r_slap0_n[N+1],r_slap1_n[N+1];
for (i=0; i<=N; i++) {
if (i<=N0) {
r_slap0_n[i]=r_slap0[i];
}
else {
r_slap0_n[i]=r_slap0[N0];
}
if (i<=N1) {
r_slap1_n[i]=r_slap1[i];
}
else {
r_slap1_n[i]=r_slap1[N1];
}
}
double cf_i_vec_add[N];
double cf_i_vec_mult[N];
double cf_i_vec_part[N];
double cf_i_vec_int[N];
double tot_add=0, tot_mult=0, tot_part=0, tot_int=0;
double c_i_add, c_i_mult, c_i_part, c_i_int;
double f_add, f_mult, f_int;
/*ciclo sui nodi dell'aggregato*/
for (i=0; i0.0000000001) {
f_j = pow (deg0, alpha);
}
else {
f_j = 0;
}
if (deg1>0.0000000001) {
f_j_2 = pow (deg1, beta);
}
else {
f_j_2=0;
}
c_i_add+=ov*(f_j+f_j_2);
if (deg0>0.0000000001) {
f_j = pow (deg0, alpha);
}
else {
f_j = 0;
}
if (deg1>0.0000000001) {
f_j_2 = pow (deg1, beta);
}
else {
f_j_2=0;
}
c_i_mult+=ov*(f_j*f_j_2);
//c_i_part+=ov*part;
part = (M/(M-1))* (1-(pow((deg0/degM),2))-(pow((deg1/degM),2)) );
if (part>0.0000000001) {
f_j = pow (part, alpha);
}
else {
f_j = 0;
}
f_j_2 = pow (degM, beta);
c_i_int+=ov*(f_j*f_j_2);
/*chiudo il for*/
}
deg0=r_slap0_n[i+1]-r_slap0_n[i];
deg1=r_slap1_n[i+1]-r_slap1_n[i];
degM=(deg0+deg1)*1.0;
prodM=(deg0*deg1)*1.0;
part = (M/(M-1))* (1-(pow((deg0/degM),2))-(pow((deg1/degM),2)) );
intM=degM*part;
if (deg0>0.0000000001) {
f_j = pow (deg0, alpha);
}
else {
f_j = 0;
}
if (deg1>0.0000000001) {
f_j_2 = pow (deg1, beta);
}
else {
f_j_2=0;
}
cf_i_vec_add[i]=c_i_add*(f_j+f_j_2);
if (deg0>0.0000000001) {
f_j = pow (deg0, alpha);
}
else {
f_j = 0;
}
if (deg1>0.0000000001) {
f_j_2 = pow (deg1, beta);
}
else {
f_j_2=0;
}
cf_i_vec_mult[i]=c_i_mult*(f_j*f_j_2);
//cf_i_vec_part[i]=c_i_part*part;
if (part>0.0000000001) {
f_j = pow (part, alpha);
}
else {
f_j = 0;
}
f_j_2 = pow (degM, beta);
cf_i_vec_int[i]=c_i_int*(f_j*f_j_2);
tot_add+=cf_i_vec_add[i];
tot_mult+=cf_i_vec_mult[i];
tot_part+=cf_i_vec_part[i];
tot_int+=cf_i_vec_int[i];
}
double vec_add[N];
double vec_mult[N];
double vec_part[N];
double vec_int[N];
double tot_add_rid=0, tot_mult_rid=0, tot_part_rid=0, tot_int_rid=0;
for (i=0; i