diff --git a/phigrape.cpp b/phigrape.cpp index c747a9e..33c243f 100644 --- a/phigrape.cpp +++ b/phigrape.cpp @@ -58,19 +58,19 @@ Last redaction : 2019.04.16 12:55 //#define ADD_BH1 // add the Single BH -// #define ADD_BH2 // add the Binary BH's -// #define ADD_N_BH // eps_BH = 0.0, but added only the Newtonian forces -// #define ADD_PN_BH // extra - added also the Post-Newton forces -// #define ADD_SPIN_BH // extra - added the SPIN for the BH's - DEFAULT !!! +//#define ADD_BH2 // add the Binary BH's +//#define ADD_N_BH // eps_BH = 0.0, but added only the Newtonian forces +//#define ADD_PN_BH // extra - added also the Post-Newton forces +//#define ADD_SPIN_BH // extra - added the SPIN for the BH's - DEFAULT !!! -// #define BH_OUT // extra output for BH's (live) -// #define BH_OUT_NB // extra output for the BH's neighbours (live) +//#define BH_OUT // extra output for BH's (live) +//#define BH_OUT_NB // extra output for the BH's neighbours (live) -// #define BBH_INF // BBH influence sphere... -// #define R_INF 10.0 // Factor for the influence sphere... if ( R < R_INF * DR_BBH ) -// #define R_INF2 (R_INF*R_INF) +//#define BBH_INF // BBH influence sphere... +//#define R_INF 10.0 // Factor for the influence sphere... if ( R < R_INF * DR_BBH ) +//#define R_INF2 (R_INF*R_INF) -// #define DT_MIN_WARNING // dt < dt_min warning !!! +//#define DT_MIN_WARNING // dt < dt_min warning !!! //#define BH_OUT_NB_EXT // extra output for the BH's neighbours (external) @@ -137,7 +137,7 @@ Last redaction : 2019.04.16 12:55 //#define AMD -// #define ACT_DEF_LL +//#define ACT_DEF_LL #if defined(ACT_DEF_LL) && defined(ACT_DEF_GRAPITE) #error "Contradicting preprocessor flags!" @@ -310,7 +310,6 @@ FILE *inp, *out, *tmp_file, *dbg; double CPU_time_real0, CPU_time_user0, CPU_time_syst0; double CPU_time_real, CPU_time_user, CPU_time_syst; - #ifdef TIMING double CPU_tmp_real0, CPU_tmp_user0, CPU_tmp_syst0; @@ -404,12 +403,10 @@ double r_sc[M_SC_DIM], m_sc[M_SC_DIM], p_sc[M_SC_DIM]; double M_R, pot_out_R; #endif - double pot_ext[N_MAX], pot_act_ext[N_MAX]; // for all EXTPOT #endif - int i_bh, i_bh1, i_bh2, num_bh = 0, num_bh1 = 0, num_bh2 = 0; @@ -418,7 +415,6 @@ double m_bh, m_bh1, m_bh2, b_bh, x_ij, y_ij, z_ij, vx_ij, vy_ij, vz_ij, rv_ij; - #ifdef BBH_INF int inf_event[N_MAX]; double x_bbhc[3], v_bbhc[3], DR2, tmp_r2; @@ -581,7 +577,6 @@ struct rusage xxx; double sec_u, microsec_u, sec_s, microsec_s; struct timeval tv; - getrusage(RUSAGE_SELF,&xxx); sec_u = xxx.ru_utime.tv_sec; @@ -666,7 +661,6 @@ fclose(out); } /****************************************************************************/ - /****************************************************************************/ void write_bh_data() { @@ -764,7 +758,6 @@ fprintf(out,"%.16E \t %.8E \t % .16E % .16E % .16E \t %.16E \t % .16E % .16E % . #endif // ADD_N_BH - /* 2nd BH */ // i=N-1; @@ -860,7 +853,6 @@ fclose(out); #else - #ifdef ADD_BH1 out = fopen("bh.dat","a"); @@ -1111,8 +1103,6 @@ fclose(out); #endif /****************************************************************************/ - - /****************************************************************************/ void calc_self_grav_zero() { @@ -1198,7 +1188,6 @@ for (i=0; i r) ) @@ -1327,7 +1313,6 @@ for (i=0; i R_LIMITS_ALL) && (tmp_rv > 0.0) ) - { - - for (k=0;k<3;k++) - { - v[i][k] *= 1.0E-01; - } /* k */ + /* possible coordinate & velocity limits for ALL particles !!! */ +#ifdef LIMITS_ALL_BEG + for (i=0; i R_LIMITS_ALL) && (tmp_rv > 0.0) ) { + for (k=0;k<3;k++) { + v[i][k] *= 1.0E-01; + } /* k */ } /* if */ - } /* i */ +#endif - #endif - - - #ifdef CMCORR - +#ifdef CMCORR /* possible CM correction of the initial datafile... */ - if ( (diskstep == 0) && (time_cur == 0.0) ) cm_corr(); - - #endif - - +#endif printf("\n"); printf("Begin the calculation of phi-GRAPE program on %03d processors\n", n_proc); printf("\n"); @@ -2466,212 +2358,189 @@ int main(int argc, char *argv[]) printf("eta = %.6E \n", eta); printf("\n"); - #ifdef NORM +#ifdef NORM printf("Normalization: \n"); printf("\n"); printf("m_norm = %.4E [Msol] r_norm = %.4E [pc] \n", m_norm/Msol, r_norm/pc); printf("v_morm = %.4E [km/s] t_morm = %.4E [Myr] \n", v_norm/km, t_norm/Myr); printf("\n"); - #endif +#endif - #ifdef EXTPOT +#ifdef EXTPOT printf("External Potential: \n"); printf("\n"); - #ifdef EXTPOT_GAL +#ifdef EXTPOT_GAL printf("m_bulge = %.4E [Msol] a_bulge = %.4E b_bulge = %.4E [kpc] \n", m_bulge*m_norm/Msol, a_bulge*r_norm/kpc, b_bulge*r_norm/kpc); printf("m_disk = %.4E [Msol] a_disk = %.4E b_disk = %.4E [kpc] \n", m_disk*m_norm/Msol, a_disk*r_norm/kpc, b_disk*r_norm/kpc); printf("m_halo = %.4E [Msol] a_halo = %.4E b_halo = %.4E [kpc] \n", m_halo*m_norm/Msol, a_halo*r_norm/kpc, b_halo*r_norm/kpc); - #endif +#endif - #ifdef EXTPOT_BH +#ifdef EXTPOT_BH printf("m_bh = %.4E b_bh = %.4E \n", m_bh, b_bh); - #endif +#endif - #ifdef EXTPOT_GAL_DEH +#ifdef EXTPOT_GAL_DEH printf("m_ext = %.6E r_ext = %.6E \t g_ext = %.3E \n", m_ext, r_ext, g_ext); - #endif +#endif - #ifdef EXTPOT_GAL_LOG +#ifdef EXTPOT_GAL_LOG printf("v_halo = %.6E r_halo = %.6E \n", v_halo, r_halo); - #endif +#endif - #ifdef EXTPOT_SC +#ifdef EXTPOT_SC read_SC_mass(); - printf("EXTPOT_SC: # of points %06d \t M_SC_TOT = %.6E \n", M_SC_DIM-1, m_sc[M_SC_DIM-1]); - #endif + printf("EXTPOT_SC:# of points %06d \t M_SC_TOT = %.6E \n", M_SC_DIM-1, m_sc[M_SC_DIM-1]); +#endif printf("\n"); - #endif - - +#endif fflush(stdout); + if ( (diskstep == 0) && (time_cur == 0.0) ) { + out = fopen("contr.dat","w"); + fclose(out); - if ( (diskstep == 0) && (time_cur == 0.0) ) - { +#ifdef TIMING + out = fopen("timing.dat","w"); + fclose(out); +#endif - out = fopen("contr.dat","w"); - fclose(out); +#ifdef ADD_BH2 - #ifdef TIMING - out = fopen("timing.dat","w"); - fclose(out); - #endif +#ifdef BH_OUT + out = fopen("bh.dat","w"); + fclose(out); +#endif - #ifdef ADD_BH2 +#ifdef BH_OUT_NB + out = fopen("bh_nb.dat","w"); + fclose(out); +#endif - #ifdef BH_OUT - out = fopen("bh.dat","w"); - fclose(out); - #endif +#else - #ifdef BH_OUT_NB - out = fopen("bh_nb.dat","w"); - fclose(out); - #endif +#ifdef ADD_BH1 - #else +#ifdef BH_OUT + out = fopen("bh.dat","w"); + fclose(out); +#endif - #ifdef ADD_BH1 +#ifdef BH_OUT_NB + out = fopen("bh_nb.dat","w"); + fclose(out); +#endif - #ifdef BH_OUT - out = fopen("bh.dat","w"); - fclose(out); - #endif +#endif // ADD_BH1 - #ifdef BH_OUT_NB - out = fopen("bh_nb.dat","w"); - fclose(out); - #endif +#endif // ADD_BH2 - #endif // ADD_BH1 +#ifdef STARDESTR - #endif // ADD_BH2 +#ifdef ADD_BH2 + out = fopen("mass-bh.dat","w"); + m_bh1 = m[0]; + m_bh2 = m[1]; + num_bh1 = 0; + num_bh2 = 0; + fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", + time_cur, m_bh1, num_bh1, m_bh2, num_bh2); + fclose(out); + out = fopen("mass-bh.con","w"); + m_bh1 = m[0]; + m_bh2 = m[1]; + num_bh1 = 0; + num_bh2 = 0; + fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", + time_cur, m_bh1, num_bh1, m_bh2, num_bh2); + fclose(out); +#else - #ifdef STARDESTR +#ifdef ADD_BH1 - #ifdef ADD_BH2 + out = fopen("mass-bh.dat","w"); + m_bh1 = m[0]; + num_bh1 = 0; + fprintf(out,"%.8E \t %.8E %06d \n", + time_cur, m_bh1, num_bh1); + fclose(out); - out = fopen("mass-bh.dat","w"); - m_bh1 = m[0]; - m_bh2 = m[1]; - num_bh1 = 0; - num_bh2 = 0; - fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", - time_cur, m_bh1, num_bh1, m_bh2, num_bh2); - fclose(out); + out = fopen("mass-bh.con","w"); + m_bh1 = m[0]; + num_bh1 = 0; + fprintf(out,"%.8E \t %.8E %06d \n", + time_cur, m_bh1, num_bh1); + fclose(out); - out = fopen("mass-bh.con","w"); - m_bh1 = m[0]; - m_bh2 = m[1]; - num_bh1 = 0; - num_bh2 = 0; - fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", - time_cur, m_bh1, num_bh1, m_bh2, num_bh2); - fclose(out); +#endif // ADD_BH1 - #else +#endif // ADD_BH2 - #ifdef ADD_BH1 +#endif // STARDESTR - out = fopen("mass-bh.dat","w"); - m_bh1 = m[0]; - num_bh1 = 0; - fprintf(out,"%.8E \t %.8E %06d \n", - time_cur, m_bh1, num_bh1); - fclose(out); +#ifdef STARDESTR_EXT + num_bh = 0; + out = fopen("mass-bh.dat","w"); + fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); + fclose(out); - out = fopen("mass-bh.con","w"); - m_bh1 = m[0]; - num_bh1 = 0; - fprintf(out,"%.8E \t %.8E %06d \n", - time_cur, m_bh1, num_bh1); - fclose(out); + num_bh = 0; + out = fopen("mass-bh.con","w"); + fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); + fclose(out); - #endif // ADD_BH1 +#ifdef BH_OUT_NB_EXT + out = fopen("bh_nb.dat","w"); + fclose(out); +#endif - #endif // ADD_BH2 +#endif // STARDESTR_EXT - #endif // STARDESTR +#ifdef BBH_INF + out = fopen("bbh.inf","w"); + fclose(out); +#endif + } else { // if (diskstep == 0) +#ifdef STARDESTR - #ifdef STARDESTR_EXT +#ifdef ADD_BH2 + inp = fopen("mass-bh.con","r"); + fscanf(inp,"%lE %lE %d %lE %d", &tmp, &m_bh1, &num_bh1, &m_bh2, &num_bh2); + fclose(inp); + printf("%.8E \t %.8E %06d \t %.8E %06d \n", tmp, m_bh1, num_bh1, m_bh2, num_bh2); + fflush(stdout); +#else - num_bh = 0; - out = fopen("mass-bh.dat","w"); - fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); - fclose(out); +#ifdef ADD_BH1 + inp = fopen("mass-bh.con","r"); + fscanf(inp,"%lE %lE %d", &tmp, &m_bh1, &num_bh1); + fclose(inp); + printf("%.8E \t %.8E \t %06d \n", tmp, m_bh1, num_bh1); + fflush(stdout); +#endif // ADD_BH1 - num_bh = 0; - out = fopen("mass-bh.con","w"); - fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); - fclose(out); +#endif // ADD_BH2 - #ifdef BH_OUT_NB_EXT - out = fopen("bh_nb.dat","w"); - fclose(out); - #endif - - #endif // STARDESTR_EXT - - #ifdef BBH_INF - out = fopen("bbh.inf","w"); - fclose(out); - #endif - - - } - else // if (diskstep == 0) - { - - #ifdef STARDESTR - - #ifdef ADD_BH2 - - inp = fopen("mass-bh.con","r"); - fscanf(inp,"%lE %lE %d %lE %d", &tmp, &m_bh1, &num_bh1, &m_bh2, &num_bh2); - fclose(inp); - printf("%.8E \t %.8E %06d \t %.8E %06d \n", tmp, m_bh1, num_bh1, m_bh2, num_bh2); - fflush(stdout); - - #else - - #ifdef ADD_BH1 - - inp = fopen("mass-bh.con","r"); - fscanf(inp,"%lE %lE %d", &tmp, &m_bh1, &num_bh1); - fclose(inp); - printf("%.8E \t %.8E \t %06d \n", tmp, m_bh1, num_bh1); - fflush(stdout); - - #endif // ADD_BH1 - - #endif // ADD_BH2 - - #endif // STARDESTR - - - #ifdef STARDESTR_EXT - - inp = fopen("mass-bh.con","r"); - fscanf(inp,"%lE %lE %d", &tmp, &m_bh, &num_bh); - fclose(inp); - printf("%.8E \t %.8E \t %06d \n", tmp, m_bh, num_bh); - fflush(stdout); - - #endif // STARDESTR_EXT +#endif // STARDESTR +#ifdef STARDESTR_EXT + inp = fopen("mass-bh.con","r"); + fscanf(inp,"%lE %lE %d", &tmp, &m_bh, &num_bh); + fclose(inp); + printf("%.8E \t %.8E \t %06d \n", tmp, m_bh, num_bh); + fflush(stdout); +#endif // STARDESTR_EXT } // if (diskstep == 0) - get_CPU_time(&CPU_time_real0, &CPU_time_user0, &CPU_time_syst0); - } /* if (myRank == rootRank) */ + } /* if (myRank == rootRank) */ /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); @@ -2686,16 +2555,16 @@ int main(int argc, char *argv[]) MPI_Bcast(&dt_bh, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&time_cur, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); - #ifdef NORM +#ifdef NORM MPI_Bcast(&m_norm, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&r_norm, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&v_norm, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&t_norm, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); - #endif // NORM +#endif // NORM - #ifdef EXTPOT +#ifdef EXTPOT - #ifdef EXTPOT_GAL +#ifdef EXTPOT_GAL MPI_Bcast(&m_bulge, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&a_bulge, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&b_bulge, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); @@ -2708,49 +2577,44 @@ int main(int argc, char *argv[]) MPI_Bcast(&a_halo, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&b_halo, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); - #endif +#endif - #ifdef EXTPOT_BH +#ifdef EXTPOT_BH MPI_Bcast(&m_bh, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&b_bh, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); - #endif +#endif - #ifdef EXTPOT_GAL_DEH +#ifdef EXTPOT_GAL_DEH MPI_Bcast(&m_ext, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&r_ext, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&g_ext, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); - #endif +#endif - #ifdef EXTPOT_GAL_LOG +#ifdef EXTPOT_GAL_LOG MPI_Bcast(&v_halo, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&r_halo, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&v2_halo, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&r2_halo, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); - #endif +#endif - #endif // EXTPOT +#endif // EXTPOT - - #ifdef STARDESTR +#ifdef STARDESTR MPI_Bcast(&m_bh1, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&num_bh1, 1, MPI_INT, rootRank, MPI_COMM_WORLD); MPI_Bcast(&m_bh2, 1, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Bcast(&num_bh2, 1, MPI_INT, rootRank, MPI_COMM_WORLD); - #endif // STARDESTR +#endif // STARDESTR - - #ifdef STARDESTR_EXT +#ifdef STARDESTR_EXT MPI_Bcast(&num_bh, 1, MPI_INT, rootRank, MPI_COMM_WORLD); - #endif // STARDESTR_EXT - +#endif // STARDESTR_EXT /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); - - eta_s = eta/ETA_S_CORR; eta_bh = eta/ETA_BH_CORR; @@ -2770,24 +2634,19 @@ int main(int argc, char *argv[]) t_contr = dt_contr*(1.0+floor(time_cur/dt_contr)); t_bh = dt_bh*(1.0+floor(time_cur/dt_bh)); - - if (myRank == rootRank) - { - printf("t_disk = %.6E t_contr = %.6E t_bh = %.6E \n", t_disk, t_contr, t_bh); - printf("\n"); - fflush(stdout); + if (myRank == rootRank) { + printf("t_disk = %.6E t_contr = %.6E t_bh = %.6E \n", t_disk, t_contr, t_bh); + printf("\n"); + fflush(stdout); } /* if (myRank == rootRank) */ - for (i=0; i BH _softened_ pot, acc & jerk @@ -2987,14 +2831,13 @@ int main(int argc, char *argv[]) pot[i_bh1] -= pot_bh1; pot[i_bh2] -= pot_bh2; - for (k=0;k<3;k++) - { + for (k=0;k<3;k++) { a[i_bh1][k] -= a_bh1[k]; a[i_bh2][k] -= a_bh2[k]; adot[i_bh1][k] -= adot_bh1[k]; adot[i_bh2][k] -= adot_bh2[k]; - } + } // calculate and "plus" the new BH <-> BH _unsoftened_ pot, acc, jerk @@ -3007,58 +2850,51 @@ int main(int argc, char *argv[]) pot[i_bh1] += pot_bh1; pot[i_bh2] += pot_bh2; - for (k=0;k<3;k++) - { + for (k=0;k<3;k++) { a[i_bh1][k] += a_bh1[k]; a[i_bh2][k] += a_bh2[k]; adot[i_bh1][k] += adot_bh1[k]; adot[i_bh2][k] += adot_bh2[k]; - } + } - #endif // ADD_N_BH +#endif // ADD_N_BH - - #ifdef ADD_PN_BH +#ifdef ADD_PN_BH // calculate and "plus" the new BH <-> BH : PN1, PN2, PN2.5, PN3, PN3.5 : acc, jerk dt_bh_tmp = dt[0]; tmp_i = calc_force_pn_BH(m_bh1, x_bh1, v_bh1, s_bh1, - m_bh2, x_bh2, v_bh2, s_bh2, - C_NB, dt_bh_tmp, usedOrNot, - a_pn1, adot_pn1, - a_pn2, adot_pn2); + m_bh2, x_bh2, v_bh2, s_bh2, + C_NB, dt_bh_tmp, usedOrNot, + a_pn1, adot_pn1, + a_pn2, adot_pn2); - for (k=0;k<3;k++) - { + for (k=0;k<3;k++) { a[i_bh1][k] += a_pn1[1][k] + a_pn1[2][k] + a_pn1[3][k] + a_pn1[4][k] + a_pn1[5][k] + a_pn1[6][k]; a[i_bh2][k] += a_pn2[1][k] + a_pn2[2][k] + a_pn2[3][k] + a_pn2[4][k] + a_pn2[5][k] + a_pn2[6][k]; adot[i_bh1][k] += adot_pn1[1][k] + adot_pn1[2][k] + adot_pn1[3][k] + adot_pn1[4][k] + adot_pn1[5][k] + adot_pn1[6][k]; adot[i_bh2][k] += adot_pn2[1][k] + adot_pn2[2][k] + adot_pn2[3][k] + adot_pn2[4][k] + adot_pn2[5][k] + adot_pn2[6][k]; + } + + if (myRank == rootRank) { + if (tmp_i == 505) { + printf("PN RSDIST: %.8E \t %.8E \n", Timesteps, time_cur); + fflush(stdout); + exit(-1); } + } - if (myRank == rootRank) - { - if (tmp_i == 505) - { - printf("PN RSDIST: %.8E \t %.8E \n", Timesteps, time_cur); - fflush(stdout); - exit(-1); - } - } +#endif // ADD_PN_BH - #endif // ADD_PN_BH +#endif // ADD_BH2 - #endif // ADD_BH2 - - - - #ifdef EXTPOT +#ifdef EXTPOT calc_ext_grav_zero(); - #endif +#endif /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); @@ -3066,22 +2902,17 @@ int main(int argc, char *argv[]) /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); - /* Energy control... */ - if (myRank == rootRank) - { - + if (myRank == rootRank) { energy_contr(); + } /* if (myRank == rootRank) */ - } /* if (myRank == rootRank) */ - - #ifdef ETICS_DUMP - if (diskstep==0) { +#ifdef ETICS_DUMP + if (diskstep==0) { sprintf(out_fname, "coeffs.%06d.%02d.dat", 0, myRank); grapite_dump(out_fname, 2); - } - #endif - + } +#endif /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); @@ -3091,7 +2922,7 @@ int main(int argc, char *argv[]) MPI_Scatter(a, 3*n_loc, MPI_DOUBLE, a_loc, 3*n_loc, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); MPI_Scatter(adot, 3*n_loc, MPI_DOUBLE, adot_loc, 3*n_loc, MPI_DOUBLE, rootRank, MPI_COMM_WORLD); - #ifdef ETICS_CEP +#ifdef ETICS_CEP // First calculate the DC grapite_calc_center(N, m, x, v, xcm, vcm, xdc, vdc); @@ -3106,26 +2937,21 @@ int main(int argc, char *argv[]) } grapite_update_cep(time_cur, xdc, vdc, a[grapite_cep_index], adot[grapite_cep_index]); - #endif +#endif /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); - - - - /* Define initial timestep for all particles on all nodes */ - for (i=0; i dt_max) dt_tmp = dt_max; - - #ifdef STARDESTR +#ifdef STARDESTR if (m[i] == 0.0) dt_tmp = dt_max; - #endif +#endif - #ifdef STARDESTR_EXT +#ifdef STARDESTR_EXT if (m[i] == 0.0) dt_tmp = dt_max; - #endif +#endif dt[i] = dt_tmp; - - #ifdef DT_MIN_WARNING - if (myRank == 0) - { - if (dt[i] == dt_min) - { - printf("!!! Warning0: dt = dt_min = %.6E \t ind = %07d \n", dt[i], ind[i]); - fflush(stdout); +#ifdef DT_MIN_WARNING + if (myRank == 0) { + if (dt[i] == dt_min) { + printf("!!! Warning0: dt = dt_min = %.6E \t ind = %07d \n", dt[i], ind[i]); + fflush(stdout); } } - #endif +#endif - } /* i */ + } /* i */ - - - - #ifdef ADD_BH2 +#ifdef ADD_BH2 /* define the min. dt over all the part. and set it also for the BH... */ - min_dt = dt[0]; + min_dt = dt[0]; - for (i=1; i 0) - for (int i=0; i 0) + for (int i=0; i BH softened pot, acc & jerk - - tmp_i = calc_force_n_BH(m_bh1, x_bh1, v_bh1, - m_bh2, x_bh2, v_bh2, - eps, - &pot_bh1, a_bh1, adot_bh1, - &pot_bh2, a_bh2, adot_bh2); - - pot_act_new[i_bh1] -= pot_bh1; - pot_act_new[i_bh2] -= pot_bh2; - - for (k=0;k<3;k++) - { - a_act_new[i_bh1][k] -= a_bh1[k]; - a_act_new[i_bh2][k] -= a_bh2[k]; - - adot_act_new[i_bh1][k] -= adot_bh1[k]; - adot_act_new[i_bh2][k] -= adot_bh2[k]; - } - - // calculate and "plus" the new BH <-> BH unsoftened pot, acc, jerk - - tmp_i = calc_force_n_BH(m_bh1, x_bh1, v_bh1, - m_bh2, x_bh2, v_bh2, - eps_BH, - &pot_bh1, a_bh1, adot_bh1, - &pot_bh2, a_bh2, adot_bh2); - - pot_act_new[i_bh1] += pot_bh1; - pot_act_new[i_bh2] += pot_bh2; - - for (k=0;k<3;k++) - { - a_act_new[i_bh1][k] += a_bh1[k]; - a_act_new[i_bh2][k] += a_bh2[k]; - - adot_act_new[i_bh1][k] += adot_bh1[k]; - adot_act_new[i_bh2][k] += adot_bh2[k]; - } - - #endif // ADD_N_BH - - - #ifdef ADD_PN_BH - - // calculate and "plus" the new BH <-> BH : PN1, PN2, PN2.5, PN3, PN3.5 : acc, jerk - - dt_bh_tmp = dt[0]; - - tmp_i = calc_force_pn_BH(m_bh1, x_bh1, v_bh1, s_bh1, - m_bh2, x_bh2, v_bh2, s_bh2, - C_NB, dt_bh_tmp, usedOrNot, - a_pn1, adot_pn1, - a_pn2, adot_pn2); - - for (k=0;k<3;k++) - { - a_act_new[i_bh1][k] += a_pn1[1][k] + a_pn1[2][k] + a_pn1[3][k] + a_pn1[4][k] + a_pn1[5][k] + a_pn1[6][k]; - a_act_new[i_bh2][k] += a_pn2[1][k] + a_pn2[2][k] + a_pn2[3][k] + a_pn2[4][k] + a_pn2[5][k] + a_pn2[6][k]; - - adot_act_new[i_bh1][k] += adot_pn1[1][k] + adot_pn1[2][k] + adot_pn1[3][k] + adot_pn1[4][k] + adot_pn1[5][k] + adot_pn1[6][k]; - adot_act_new[i_bh2][k] += adot_pn2[1][k] + adot_pn2[2][k] + adot_pn2[3][k] + adot_pn2[4][k] + adot_pn2[5][k] + adot_pn2[6][k]; - } - - if (myRank == rootRank) - { - if (tmp_i == 505) - { - printf("PN RSDIST: TS = %.8E \t t = %.8E \n", Timesteps, time_cur); - fflush(stdout); - exit(-1); - } - } - - #endif // ADD_PN_BH - - #endif // ADD_BH2 - - #ifdef EXTPOT - calc_ext_grav(); - #endif - - /* correct the active particles positions etc... on all the nodes */ - - #ifdef TIMING - get_CPU_time(&CPU_tmp_real0, &CPU_tmp_user0, &CPU_tmp_syst0); - #endif - - for (i=0; i dt_min) ) - { - power = log(dt_new)/log(2.0) - 1; - - dt_tmp = pow(2.0, (double)power); - } - - if ( (dt_new > 2.0*dt_tmp) && - (fmod(min_t, 2.0*dt_tmp) == 0.0) && - (2.0*dt_tmp <= dt_max) ) - { - dt_tmp *= 2.0; - } - - dt_act[i] = dt_tmp; - - t_act[i] = min_t; - - pot_act[i] = pot_act_new[i]; - - for (k=0; k<3; k++) - { - x_act[i][k] = x_act_new[i][k]; - v_act[i][k] = v_act_new[i][k]; - a_act[i][k] = a_act_new[i][k]; - adot_act[i][k] = adot_act_new[i][k]; - } /* k */ - - - #ifdef DT_MIN_WARNING - if (myRank == 0) - { - if (dt_act[i] == dt_min) - { - printf("!!! Warning1: dt_act = dt_min = %.6E \t ind_act = %07d \n", dt[i], ind_act[i]); - fflush(stdout); - } - } - #endif - - - - } /* i */ - - - - - /* define the min. dt over all the act. part. and set it also for the BH... */ - - #ifdef ADD_BH2 - - min_dt = dt_act[0]; - - for (i=1; i BH softened pot, acc & jerk + + tmp_i = calc_force_n_BH(m_bh1, x_bh1, v_bh1, + m_bh2, x_bh2, v_bh2, + eps, + &pot_bh1, a_bh1, adot_bh1, + &pot_bh2, a_bh2, adot_bh2); + + pot_act_new[i_bh1] -= pot_bh1; + pot_act_new[i_bh2] -= pot_bh2; + + for (k=0;k<3;k++) { + a_act_new[i_bh1][k] -= a_bh1[k]; + a_act_new[i_bh2][k] -= a_bh2[k]; + + adot_act_new[i_bh1][k] -= adot_bh1[k]; + adot_act_new[i_bh2][k] -= adot_bh2[k]; } - DR2 = SQR(x_bh1[0] - x_bh2[0]) + SQR(x_bh1[1] - x_bh2[1]) + SQR(x_bh1[2] - x_bh2[2]); - DV2 = SQR(v_bh1[0] - v_bh2[0]) + SQR(v_bh1[1] - v_bh2[1]) + SQR(v_bh1[2] - v_bh2[2]); + // calculate and "plus" the new BH <-> BH unsoftened pot, acc, jerk - EB = -(m_bh1 + m_bh2) / sqrt(DR2) + 0.5 * DV2; + tmp_i = calc_force_n_BH(m_bh1, x_bh1, v_bh1, + m_bh2, x_bh2, v_bh2, + eps_BH, + &pot_bh1, a_bh1, adot_bh1, + &pot_bh2, a_bh2, adot_bh2); - SEMI_a = -0.5 * (m_bh1 + m_bh2)/EB; - SEMI_a2 = SQR(SEMI_a); + pot_act_new[i_bh1] += pot_bh1; + pot_act_new[i_bh2] += pot_bh2; - for (i=2; i BH : PN1, PN2, PN2.5, PN3, PN3.5 : acc, jerk - fprintf(out,"INF1 %.6E %.16E %07d %07d %.6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E % .6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E % .6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E %.6E % .6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E \n", - Timesteps, time_cur, i, ind_act[i], - sqrt(DR2), x_bbhc[0], x_bbhc[1], x_bbhc[2], v_bbhc[0], v_bbhc[1], v_bbhc[2], - m_bh1, x_bh1[0], x_bh1[1], x_bh1[2], v_bh1[0], v_bh1[1], v_bh1[2], pot_act[0], - m_bh2, x_bh2[0], x_bh2[1], x_bh2[2], v_bh2[0], v_bh2[1], v_bh2[2], pot_act[1], - sqrt(tmp_r2), - m_act[i], x_act[i][0], x_act[i][1], x_act[i][2], v_act[i][0], v_act[i][1], v_act[i][2], pot_act[i], - dt_act[i]); + dt_bh_tmp = dt[0]; - inf_event[iii] = 1; + tmp_i = calc_force_pn_BH(m_bh1, x_bh1, v_bh1, s_bh1, + m_bh2, x_bh2, v_bh2, s_bh2, + C_NB, dt_bh_tmp, usedOrNot, + a_pn1, adot_pn1, + a_pn2, adot_pn2); + + for (k=0;k<3;k++) { + a_act_new[i_bh1][k] += a_pn1[1][k] + a_pn1[2][k] + a_pn1[3][k] + a_pn1[4][k] + a_pn1[5][k] + a_pn1[6][k]; + a_act_new[i_bh2][k] += a_pn2[1][k] + a_pn2[2][k] + a_pn2[3][k] + a_pn2[4][k] + a_pn2[5][k] + a_pn2[6][k]; + + adot_act_new[i_bh1][k] += adot_pn1[1][k] + adot_pn1[2][k] + adot_pn1[3][k] + adot_pn1[4][k] + adot_pn1[5][k] + adot_pn1[6][k]; + adot_act_new[i_bh2][k] += adot_pn2[1][k] + adot_pn2[2][k] + adot_pn2[3][k] + adot_pn2[4][k] + adot_pn2[5][k] + adot_pn2[6][k]; + } + + if (myRank == rootRank) { + if (tmp_i == 505) { + printf("PN RSDIST: TS = %.8E \t t = %.8E \n", Timesteps, time_cur); + fflush(stdout); + exit(-1); } - - } - else - { - - if ( (inf_event[iii] == 1) ) - { - - fprintf(out,"INF2 %.6E %.16E %07d %07d %.6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E % .6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E % .6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E %.6E % .6E % .6E % .6E % .6E % .6E % .6E % .6E %.6E \n", - Timesteps, time_cur, i, ind_act[i], - sqrt(DR2), x_bbhc[0], x_bbhc[1], x_bbhc[2], v_bbhc[0], v_bbhc[1], v_bbhc[2], - m_bh1, x_bh1[0], x_bh1[1], x_bh1[2], v_bh1[0], v_bh1[1], v_bh1[2], pot_act[0], - m_bh2, x_bh2[0], x_bh2[1], x_bh2[2], v_bh2[0], v_bh2[1], v_bh2[2], pot_act[1], - sqrt(tmp_r2), - m_act[i], x_act[i][0], x_act[i][1], x_act[i][2], v_act[i][0], v_act[i][1], v_act[i][2], pot_act[i], - dt_act[i]); - } - - inf_event[iii] = 0; - - } /* if (tmp_r2 < DR2*R_INF2) */ - - } /* i */ - - fclose(out); - - } /* if (myRank == rootRank) */ - #endif - - - - - /* Return back the new coordinates + etc... of active part. to the global data... */ - - for (i=0; i= t_bh) - { + if ( (dt_new < dt_tmp) && (dt_new > dt_min) ) { + power = log(dt_new)/log(2.0) - 1; - if (myRank == rootRank) - { + dt_tmp = pow(2.0, (double)power); + } - #ifdef BH_OUT - /* Write BH data... */ - write_bh_data(); - #endif + if ((dt_new > 2.0*dt_tmp) && (fmod(min_t, 2.0*dt_tmp) == 0.0) && (2.0*dt_tmp <= dt_max)) { + dt_tmp *= 2.0; + } - #ifdef BH_OUT_NB - /* Write BH NB data... */ - write_bh_nb_data(); - #endif + dt_act[i] = dt_tmp; - #ifdef BH_OUT_NB_EXT - /* Write BH NB data... */ - write_bh_nb_data_ext(); - #endif + t_act[i] = min_t; - } /* if (myRank == rootRank) */ + pot_act[i] = pot_act_new[i]; - t_bh += dt_bh; - } /* if (time_cur >= t_bh) */ - - - - - - if (time_cur >= t_contr) - { - - if (myRank == rootRank) - { - - #ifdef STARDESTR - - #ifdef ADD_BH2 - - out = fopen("mass-bh.dat","a"); - fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", - time_cur, m_bh1, num_bh1, m_bh2, num_bh2); - fclose(out); - - out = fopen("mass-bh.con","w"); - fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", - time_cur, m_bh1, num_bh1, m_bh2, num_bh2); - fclose(out); - - #else - - #ifdef ADD_BH1 - - out = fopen("mass-bh.dat","a"); - fprintf(out,"%.8E \t %.8E %06d \n", - time_cur, m_bh1, num_bh1); - fclose(out); - - out = fopen("mass-bh.con","w"); - fprintf(out,"%.8E \t %.8E %06d \n", - time_cur, m_bh1, num_bh1); - fclose(out); - - #endif // ADD_BH1 - - #endif // ADD_BH2 - - #endif // STARDESTR - - #ifdef STARDESTR_EXT - - out = fopen("phi-GRAPE.ext","w"); - fprintf(out,"%.8E \t %.8E \n", m_bh, b_bh); - fclose(out); - - out = fopen("mass-bh.dat","a"); - fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); - fclose(out); - - out = fopen("mass-bh.con","w"); - fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); - fclose(out); - - #endif // STARDESTR_EXT - - energy_contr(); - - #ifdef CMCORR111 - for (i=0; i R_LIMITS_ALL) && (tmp_rv > 0.0) ) - { - - #ifdef EXTPOT - #endif - - for (k=0;k<3;k++) - { - v[i][k] *= 1.0E-01; + for (k=0;k<3;k++) { + x[iii][k] = x_act[i][k]; + v[iii][k] = v_act[i][k]; } /* k */ - } /* if */ + t[iii] = t_act[i]; + dt[iii] = dt_act[i]; + pot[iii] = pot_act[i]; + +#ifdef EXTPOT + pot_ext[iii] = pot_act_ext[i]; +#endif + + for (k=0;k<3;k++) { + a[iii][k] = a_act[i][k]; + adot[iii][k] = adot_act[i][k]; + } /* k */ } /* i */ +#ifdef TIMING + get_CPU_time(&CPU_tmp_real, &CPU_tmp_user, &CPU_tmp_syst); + DT_ACT_CORR += (CPU_tmp_user - CPU_tmp_user0); +#endif + /* STARDESTR routine on all the nodes */ - for (j=0; j= t_contr) */ - - - - - - - - - if (time_cur >= t_disk) - { - - - if (myRank == rootRank) - { - - diskstep++; - - write_snap_data(); - - } /* if (myRank == rootRank) */ - - #ifdef ETICS_DUMP - sprintf(out_fname, "coeffs.%06d.%02d.dat", diskstep, myRank); - grapite_dump(out_fname, 2); - #endif - - - - - #ifdef LIMITS_NEW - - for (i=0; i 900.0 ) +#ifdef LIMITS + for (i=0; i= t_bh) { + if (myRank == rootRank) { +#ifdef BH_OUT + /* Write BH data... */ + write_bh_data(); +#endif + +#ifdef BH_OUT_NB + /* Write BH NB data... */ + write_bh_nb_data(); +#endif + +#ifdef BH_OUT_NB_EXT + /* Write BH NB data... */ + write_bh_nb_data_ext(); +#endif + } /* if (myRank == rootRank) */ + + t_bh += dt_bh; + } /* if (time_cur >= t_bh) */ + + if (time_cur >= t_contr) { + if (myRank == rootRank) { +#ifdef STARDESTR + +#ifdef ADD_BH2 + + out = fopen("mass-bh.dat","a"); + fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", + time_cur, m_bh1, num_bh1, m_bh2, num_bh2); + fclose(out); + + out = fopen("mass-bh.con","w"); + fprintf(out,"%.8E \t %.8E %06d \t %.8E %06d \n", + time_cur, m_bh1, num_bh1, m_bh2, num_bh2); + fclose(out); + +#else + +#ifdef ADD_BH1 + + out = fopen("mass-bh.dat","a"); + fprintf(out,"%.8E \t %.8E %06d \n", + time_cur, m_bh1, num_bh1); + fclose(out); + + out = fopen("mass-bh.con","w"); + fprintf(out,"%.8E \t %.8E %06d \n", + time_cur, m_bh1, num_bh1); + fclose(out); + +#endif // ADD_BH1 + +#endif // ADD_BH2 + +#endif // STARDESTR + +#ifdef STARDESTR_EXT + + out = fopen("phi-GRAPE.ext","w"); + fprintf(out,"%.8E \t %.8E \n", m_bh, b_bh); + fclose(out); + + out = fopen("mass-bh.dat","a"); + fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); + fclose(out); + + out = fopen("mass-bh.con","w"); + fprintf(out,"%.8E \t %.8E \t %06d \n", time_cur, m_bh, num_bh); + fclose(out); + +#endif // STARDESTR_EXT + + energy_contr(); + +#ifdef CMCORR111 + for (i=0; i R_LIMITS_ALL) && (tmp_rv > 0.0) ) { + for (k=0;k<3;k++) { + v[i][k] *= 1.0E-01; + } /* k */ + } /* if */ + } /* i */ + + for (j=0; j= t_contr) */ + + if (time_cur >= t_disk) { + if (myRank == rootRank) { + diskstep++; + write_snap_data(); + } /* if (myRank == rootRank) */ + +#ifdef ETICS_DUMP + sprintf(out_fname, "coeffs.%06d.%02d.dat", diskstep, myRank); + grapite_dump(out_fname, 2); +#endif + +#ifdef LIMITS_NEW + + for (i=0; i 900.0 ) + { + + m[i] = 0.0; + + pot[i] = 0.0; + +#ifdef EXTPOT + pot_ext[i] = 0.0; +#endif + + for (k=0;k<3;k++) + { + x[i][k] = 1000.0 + 1.0*my_rand2(); + v[i][k] = 1.0E-06*my_rand2(); + a[i][k] = 1.0E-06*my_rand2(); + adot[i][k] = 1.0E-06*my_rand2(); + } /* k */ + + t[i] = 2.0*t_end; + + dt[i] = 0.125; + + } /* if */ + + } /* i */ + + for (j=0; j= t_disk) */ - - - #ifdef CPU_TIMELIMIT - if (myRank == rootRank) - { - get_CPU_time(&CPU_time_real, &CPU_time_user, &CPU_time_syst); - tmp_cpu = CPU_time_real-CPU_time_real0; +#ifdef CPU_TIMELIMIT + if (myRank == rootRank) { + get_CPU_time(&CPU_time_real, &CPU_time_user, &CPU_time_syst); + tmp_cpu = CPU_time_real-CPU_time_real0; } /* if (myRank == rootRank) */ - #endif - - - #ifdef ACT_DEF_LL - ModifyLinkList(); - - #endif +#endif +#ifdef ACT_DEF_LL + ModifyLinkList(); +#endif } /* while (time_cur < t_end) */ - - /* close the local GRAPE's */ - #ifdef SAPPORO +#ifdef SAPPORO g6_close_(&clusterid); - #else +#else g6_close(clusterid); - #endif - +#endif /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); @@ -4471,9 +4087,7 @@ int main(int argc, char *argv[]) /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); - - if (myRank == rootRank) - { + if (myRank == rootRank) { /* Write some output for the timestep annalize... */ @@ -4485,18 +4099,12 @@ int main(int argc, char *argv[]) } /* if (myRank == rootRank) */ - - /* Wait to all processors to finish his works... */ MPI_Barrier(MPI_COMM_WORLD); /* Finalize the MPI work */ MPI_Finalize(); - return(0); + return 0; } - -/****************************************************************************/ -/****************************************************************************/ -/****************************************************************************/