Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
| Download
Image: ubuntu2004
#include "mpi.h"1#include "kadath_spheric.hpp"23using namespace Kadath ;45int main(int argc, char** argv) {67int rc = MPI_Init (&argc, &argv) ;8int rank = 0 ;9MPI_Comm_rank (MPI_COMM_WORLD, &rank) ;1011double aa, ome, nhor, vhor ;12FILE* ff = fopen(argv[1], "r") ;13Space_spheric espace (ff) ;14fread_be (&ome, sizeof(double), 1, ff) ;15fread_be (&nhor, sizeof(double), 1, ff) ;16fread_be (&vhor, sizeof(double), 1, ff) ;17Scalar lapse(espace, ff) ;18Vector shift(espace, ff) ;19Metric_tensor gmet(espace, ff) ;20fclose(ff) ;2122int ndom = espace.get_nbr_domains() ;2324// Number of point25Base_tensor basis (shift.get_basis()) ;26Metric_tensor gfixed (espace, COV, basis) ;27for (int i=1 ; i<=3 ; i++)28for (int j=1 ; j<=3 ; j++)29if (i==j)30gfixed.set(i,j) = 1. ;31else32gfixed.set(i,j).annule_hard() ;33gfixed.std_base() ;343536Vector scov (espace, COV, basis) ;37scov = 0 ;38scov.set(1) = 1. ;39scov.std_base() ;4041Vector st (espace, COV, basis) ;42st = 0 ;43st.set(2) = 1. ;44st.std_base() ;454647Vector er (espace, CON, basis) ;48er = 0 ;49er.set(1).set_domain(1) = 1. ;50er.std_base() ;5152Vector mm (espace, CON, basis) ;53for (int i=1 ; i<=3 ; i++)54mm.set(i) = 0. ;55Val_domain xx (espace.get_domain(1)->get_cart(1)) ;56Val_domain yy (espace.get_domain(1)->get_cart(2)) ;57mm.set(3).set_domain(1) = sqrt(xx*xx + yy*yy) ;58mm.std_base() ;5960Scalar one (espace) ;61one = 1 ;62one.std_base() ;6364List_comp used (6,2) ;65used.set(0)->set(0) = 1 ; used.set(0)->set(1) = 1 ;66used.set(1)->set(0) = 1 ; used.set(1)->set(1) = 2 ;67used.set(2)->set(0) = 1 ; used.set(2)->set(1) = 3 ;68used.set(3)->set(0) = 2 ; used.set(3)->set(1) = 2 ;69used.set(4)->set(0) = 2 ; used.set(4)->set(1) = 3 ;70used.set(5)->set(0) = 3 ; used.set(5)->set(1) = 3 ;7172List_comp dege(3,2) ;73dege.set(0)->set(0) = 2 ; dege.set(0)->set(1) = 2 ;74dege.set(1)->set(0) = 2 ; dege.set(1)->set(1) = 3 ;75dege.set(2)->set(0) = 3 ; dege.set(2)->set(1) = 3 ;7677List_comp nondege(2,2) ;78nondege.set(0)->set(0) = 1 ; nondege.set(0)->set(1) = 2 ;79nondege.set(1)->set(0) = 1 ; nondege.set(1)->set(1) = 3 ;8081List_comp rrcomp (1,2) ;82rrcomp.set(0)->set(0) = 1 ; rrcomp.set(0)->set(1) = 1 ;8384List_comp ozers(3,2) ;85ozers.set(0)->set(0) = 1 ; ozers.set(0)->set(1) = 1 ;86ozers.set(1)->set(0) = 1 ; ozers.set(1)->set(1) = 2 ;87ozers.set(2)->set(0) = 1 ; ozers.set(2)->set(1) = 3 ;8889double eightpi = 8.*M_PI ;90Metric_general met (gmet) ;9192// Solve the equation in space outside the nucleus93System_of_eqs syst (espace, 1, ndom-1) ;9495// Unknowns96syst.add_var ("N", lapse) ;97syst.add_var ("B", shift) ;98met.set_system (syst, "g") ;99syst.add_var ("ome", ome) ;100101// User defined constants102syst.add_cst ("s", scov) ;103syst.add_cst ("gf", gfixed) ;104syst.add_cst ("nhor", nhor) ;105syst.add_cst ("vhor", vhor) ;106107syst.add_cst ("mm", mm) ;108syst.add_cst ("er", er) ;109syst.add_cst ("eightpi", eightpi) ;110syst.add_cst ("spin", spintarget) ;111112// For speed113syst.add_def ("DBS_i^j = D_i B^j") ;114syst.add_def ("K_ij = (DBS_ij + DBS_ji) /2./N") ;115116syst.add_def (1, "sn^i = s^i / sqrt(s_i * s^i)") ;117syst.add_def (1, "sigma = sn^i * sn^j * K_ij + D_i sn^i") ;118119// Quantities to compute the spin120syst.add_def (1, "detq = (sn^k * s_k)^2 * determinant(g_ij)") ;121syst.add_def (1, "intS = -sqrt(detq)*K_ij * mm^j *sn^i / eightpi") ;122espace.add_eq_int_hor (syst, "integ(intS) = spin") ;123124syst.add_def ("V^i = g^kl * Gam_kl^i") ;125syst.add_def ("Gauge_ij = 0.5*(D_i V_j + D_j V_i)") ;126syst.add_def ("Ope_ij = R_ij - Gauge_ij") ;127syst.add_def ("Hamilton = g^kl * Ope_kl - K_ij * K^ij") ;128syst.add_def ("Momentum^i = D_j K^ij") ;129syst.add_def ("Evol_ij = N * (Ope_ij-2*K_ik*K_j^k) - D_i D_j N + B^k * D_k K_ij + K_ik * DBS_j^k + K_jk * DBS_i^k ") ;130131// Inner BCs :132syst.add_eq_bc (1, INNER_BC, "N = nhor") ;133syst.add_eq_bc (1, INNER_BC, "B^i = N * sn^i + ome * mm^i") ;134syst.add_eq_bc_exception (1, INNER_BC, "sigma=0", "g_ij * er^i * er^j = vhor") ;135syst.add_eq_bc (1, INNER_BC, "g_ij = gf_ij", nondege) ;136137// Bulk138for (int d=1 ; d<ndom ; d++) {139syst.add_eq_inside (d, "Hamilton=0") ;140syst.add_eq_inside (d, "Momentum^i=0") ;141142if (d==1) {143syst.add_eq_inside (d, "Evol_ij=0", ozers) ;144syst.add_eq_one_side (d, "Evol_ij=0", dege) ;145}146else147syst.add_eq_inside (d, "Evol_ij=0", used) ;148149if (d!=ndom-1) {150syst.add_eq_matching (d, OUTER_BC, "N") ;151syst.add_eq_matching (d, OUTER_BC, "dn(N)") ;152syst.add_eq_matching (d, OUTER_BC, "B^i") ;153syst.add_eq_matching (d, OUTER_BC, "dn(B^i)") ;154syst.add_eq_matching (d, OUTER_BC, "g_ij", used) ;155syst.add_eq_matching (d, OUTER_BC, "dn(g_ij)", used) ;156}157}158159// OUter BC160syst.add_eq_bc (ndom-1, OUTER_BC, "N=1") ;161syst.add_eq_bc (ndom-1, OUTER_BC, "B^i=0") ;162syst.add_eq_bc (ndom-1, OUTER_BC, "g_ij = gf_ij", used) ;163164// Newton-Raphson165double conv ;166bool endloop = false ;167int ite = 1 ;168char name[100] ;169170171while (!endloop) {172endloop = syst.do_newton(1e-8, conv) ;173if (rank==0) {174cout << "Newton iteration " << ite << " " << conv << endl ;175cout << "Omega = " << ome << endl ;176}177ite++ ;178}179180sprintf (name, "kerr_%f_%f_%f_%d.dat", nhor, vhor, ome, espace.get_domain(1)->get_nbr_points()(0)) ;181//sprintf (name, "kerr.dat") ;182// Save183if (rank==0) {184FILE* ff = fopen(name, "w") ;185espace.save(ff) ;186fwrite_be (&ome, sizeof(double), 1, ff) ;187fwrite_be (&nhor, sizeof(double), 1, ff) ;188fwrite_be (&vhor, sizeof(double), 1, ff) ;189lapse.save(ff) ;190shift.save(ff) ;191gmet.save(ff) ;192fclose(ff) ;193}194195MPI_Finalize() ;196197return EXIT_SUCCESS ;198}199200201202203