From 5fb7dd777e8e56dab56b41884320c8a9cbac938b Mon Sep 17 00:00:00 2001 From: "Chiu Huai-Hsuan (b07202025@ntu.edu.tw)" Date: Mon, 26 Jul 2021 15:13:35 +0800 Subject: [PATCH 01/59] Check accretion radius --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index c30786d513..254e3ca361 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -192,7 +192,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkNCell ++; } } // if ( Reset ) - + // void region must be completely refined to the max level + else if ( amr->patch[0][lv][PID]->son == -1 ) Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) From ca38b305ab46cbd05ab177261cd60c6c8e1d4695 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 27 Jul 2021 16:17:10 +0800 Subject: [PATCH 02/59] Check accretion radius(fixed) --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 254e3ca361..6dd76d5bd2 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -8,6 +8,7 @@ extern double Bondi_InBC_Rho; extern double Bondi_InBC_R; extern double Bondi_InBC_E; +extern double Bondi_cumMass; extern double Bondi_SinkMass; extern double Bondi_SinkMomX; extern double Bondi_SinkMomY; @@ -112,6 +113,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; + double Bondi_cumMass_local = 0; # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ @@ -179,7 +181,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim { real Ek = (real)0.5*( SQR(fluid_bk[MOMX]) + SQR(fluid_bk[MOMY]) + SQR(fluid_bk[MOMZ]) ) / fluid_bk[DENS]; real Et = fluid_bk[ENGY] - Ek; - + + Bondi_cumMass_local += dv*fluid_bk[DENS]; Bondi_SinkMass += dv*fluid_bk[DENS]; Bondi_SinkMomX += dv*fluid_bk[MOMX]; Bondi_SinkMomY += dv*fluid_bk[MOMY]; @@ -191,12 +194,12 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkEt += dv*Et; Bondi_SinkNCell ++; } + // void region must be completely refined to the max level + else if ( amr->patch[0][lv][PID]->son == -1 ) Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); } // if ( Reset ) - // void region must be completely refined to the max level - else if ( amr->patch[0][lv][PID]->son == -1 ) Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) - + MPI_Allreduce(&Bondi_cumMass,&Bondi_cumMass_local, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); } // FUNCTION : Flu_ResetByUser_API_Bondi From a0a82151dc5e746d729d672c6fd28a6a58e722bb Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 27 Jul 2021 16:55:52 +0800 Subject: [PATCH 03/59] Check accretion radius(fixed) --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 6dd76d5bd2..d6ce09ae82 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -3,12 +3,12 @@ #if ( MODEL == HYDRO && defined GRAVITY ) - +//extern double Bondi_MassBH; extern double Bondi_InBC_Rho; extern double Bondi_InBC_R; extern double Bondi_InBC_E; -extern double Bondi_cumMass; +//extern double Bondi_cumMass; extern double Bondi_SinkMass; extern double Bondi_SinkMomX; extern double Bondi_SinkMomY; @@ -113,7 +113,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; - double Bondi_cumMass_local = 0; + //double Bondi_cumMass_local = 0; # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ @@ -182,7 +182,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim real Ek = (real)0.5*( SQR(fluid_bk[MOMX]) + SQR(fluid_bk[MOMY]) + SQR(fluid_bk[MOMZ]) ) / fluid_bk[DENS]; real Et = fluid_bk[ENGY] - Ek; - Bondi_cumMass_local += dv*fluid_bk[DENS]; + //Bondi_cumMass_local += dv*fluid_bk[DENS]; Bondi_SinkMass += dv*fluid_bk[DENS]; Bondi_SinkMomX += dv*fluid_bk[MOMX]; Bondi_SinkMomY += dv*fluid_bk[MOMY]; @@ -199,7 +199,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) - MPI_Allreduce(&Bondi_cumMass,&Bondi_cumMass_local, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + //MPI_Allreduce(&Bondi_cumMass_local,&Bondi_cumMass, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + //Bondi_MassBH += Bondi_cumMass; } // FUNCTION : Flu_ResetByUser_API_Bondi From f0334713ff83f6cc98f4105ab9f92d6daf5d77cd Mon Sep 17 00:00:00 2001 From: Huai-Hsuan Chiu <43173257+sandy0216@users.noreply.github.com> Date: Tue, 27 Jul 2021 18:10:31 +0800 Subject: [PATCH 04/59] Delete changes not related --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index d6ce09ae82..769831889b 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -3,12 +3,10 @@ #if ( MODEL == HYDRO && defined GRAVITY ) -//extern double Bondi_MassBH; extern double Bondi_InBC_Rho; extern double Bondi_InBC_R; extern double Bondi_InBC_E; -//extern double Bondi_cumMass; extern double Bondi_SinkMass; extern double Bondi_SinkMomX; extern double Bondi_SinkMomY; @@ -113,7 +111,6 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; - //double Bondi_cumMass_local = 0; # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ @@ -182,7 +179,6 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim real Ek = (real)0.5*( SQR(fluid_bk[MOMX]) + SQR(fluid_bk[MOMY]) + SQR(fluid_bk[MOMZ]) ) / fluid_bk[DENS]; real Et = fluid_bk[ENGY] - Ek; - //Bondi_cumMass_local += dv*fluid_bk[DENS]; Bondi_SinkMass += dv*fluid_bk[DENS]; Bondi_SinkMomX += dv*fluid_bk[MOMX]; Bondi_SinkMomY += dv*fluid_bk[MOMY]; @@ -199,8 +195,6 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) - //MPI_Allreduce(&Bondi_cumMass_local,&Bondi_cumMass, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - //Bondi_MassBH += Bondi_cumMass; } // FUNCTION : Flu_ResetByUser_API_Bondi From 9fbd07298c692cdb99f3183e26fd5d85e974c03f Mon Sep 17 00:00:00 2001 From: Huai-Hsuan Chiu <43173257+sandy0216@users.noreply.github.com> Date: Tue, 27 Jul 2021 20:07:11 +0800 Subject: [PATCH 05/59] Replace some tab by space --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 769831889b..fc7cf6d112 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -178,7 +178,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim { real Ek = (real)0.5*( SQR(fluid_bk[MOMX]) + SQR(fluid_bk[MOMY]) + SQR(fluid_bk[MOMZ]) ) / fluid_bk[DENS]; real Et = fluid_bk[ENGY] - Ek; - + Bondi_SinkMass += dv*fluid_bk[DENS]; Bondi_SinkMomX += dv*fluid_bk[MOMX]; Bondi_SinkMomY += dv*fluid_bk[MOMY]; @@ -189,9 +189,10 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkEk += dv*Ek; Bondi_SinkEt += dv*Et; Bondi_SinkNCell ++; - } - // void region must be completely refined to the max level - else if ( amr->patch[0][lv][PID]->son == -1 ) Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); + }else if ( amr->patch[0][lv][PID]->son == -1 ){ + // void region must be completely refined to the max level + Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); + } } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) From af1d6cf64f0d6fc7331bfbac48565e4e88cfe2c5 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 28 Jul 2021 19:34:32 +0800 Subject: [PATCH 06/59] Add BH mass calculation --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 6 ++++-- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 2 +- src/TestProblem/Hydro/Bondi/Record_Bondi.cpp | 8 +++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index fc7cf6d112..1cd842c814 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -17,7 +17,7 @@ extern double Bondi_SinkMomZAbs; extern double Bondi_SinkEk; extern double Bondi_SinkEt; extern int Bondi_SinkNCell; - +extern double Bondi_SinkMass_tot; @@ -108,11 +108,11 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim bool Reset; real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL]; double x, y, z, x0, y0, z0; + double SinkMass = 0; // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; - # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ reduction(+:Bondi_SinkMass, Bondi_SinkMomX, Bondi_SinkMomY, Bondi_SinkMomZ, Bondi_SinkMomXAbs, Bondi_SinkMomYAbs, Bondi_SinkMomZAbs, \ Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell) @@ -189,6 +189,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkEk += dv*Ek; Bondi_SinkEt += dv*Et; Bondi_SinkNCell ++; + SinkMass += dv*fluid_bk[DENS]; }else if ( amr->patch[0][lv][PID]->son == -1 ){ // void region must be completely refined to the max level Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); @@ -196,6 +197,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) + MPI_Allreduce( &SinkMass, &Bondi_SinkMass_tot, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 819c70af56..0a637da3c5 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -28,7 +28,6 @@ static double Bondi_Cs; // background sound speed static double Bondi_RS; // Schwarzschild radius static double Bondi_RB; // Bondi radius static double Bondi_TimeB; // Bondi time - double Bondi_SinkMass; // total mass in the void region removed in one global time-step double Bondi_SinkMomX; // total x-momentum ... double Bondi_SinkMomY; // total y-momentum ... @@ -39,6 +38,7 @@ static double Bondi_TimeB; // Bondi time double Bondi_SinkEk; // total kinematic energy ... double Bondi_SinkEt; // total thermal energy ... int Bondi_SinkNCell; // total number of finest cells within the void region + double Bondi_SinkMass_tot; // external units in cgs const double UnitExt_L = Const_kpc; diff --git a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp index 8dd04bc738..bbd7925b88 100644 --- a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp @@ -16,6 +16,7 @@ extern double Bondi_SinkMomZAbs; extern double Bondi_SinkEk; extern double Bondi_SinkEt; extern int Bondi_SinkNCell; +extern double Bondi_SinkMass_tot; // ======================================================================================= @@ -69,7 +70,7 @@ void Record_Bondi() // get the total amount of sunk variables - double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum; + double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, Mass_add; MPI_Reduce( &Bondi_SinkMass, &Mass_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); MPI_Reduce( &Bondi_SinkMomX, &MomX_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); @@ -90,6 +91,7 @@ void Record_Bondi() MomZAbs_Sum *= UNIT_M*UNIT_L/UNIT_T; Ek_Sum *= UNIT_E; Et_Sum *= UNIT_E; + Mass_add = Bondi_SinkMass_tot/Const_Msun; if ( MPI_Rank == 0 ) { @@ -98,9 +100,9 @@ void Record_Bondi() dTime *= UNIT_T/Const_yr; FILE *File_User = fopen( FileName, "a" ); - fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n", + fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n", Step, Time[0]*UNIT_T/Const_yr, SinkNCell_Sum, Mass_Sum, dTime, Mass_Sum/dTime, - MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum ); + MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum , Mass_add); fclose( File_User ); } } // if ( FirstTime ) ... else ... From 8e9e2c7ec0da0d194573d84f70115197b460dd10 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 28 Jul 2021 20:38:21 +0800 Subject: [PATCH 07/59] update the BH mass --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 3 ++- src/TestProblem/Hydro/Bondi/Record_Bondi.cpp | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 1cd842c814..5a264c7d61 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -2,7 +2,7 @@ #if ( MODEL == HYDRO && defined GRAVITY ) - +extern double Bondi_MassBH; extern double Bondi_InBC_Rho; extern double Bondi_InBC_R; extern double Bondi_InBC_E; @@ -198,6 +198,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) MPI_Allreduce( &SinkMass, &Bondi_SinkMass_tot, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + Bondi_MassBH += Bondi_SinkMass_tot; } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp index bbd7925b88..b135d85a0a 100644 --- a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp @@ -6,6 +6,7 @@ // specific global variables declared in Init_TestProb_Hydro_Bondi.cpp // ======================================================================================= +extern double Bondi_MassBH; extern double Bondi_SinkMass; extern double Bondi_SinkMomX; extern double Bondi_SinkMomY; @@ -70,7 +71,7 @@ void Record_Bondi() // get the total amount of sunk variables - double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, Mass_add; + double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, MassBH; MPI_Reduce( &Bondi_SinkMass, &Mass_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); MPI_Reduce( &Bondi_SinkMomX, &MomX_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); @@ -91,7 +92,7 @@ void Record_Bondi() MomZAbs_Sum *= UNIT_M*UNIT_L/UNIT_T; Ek_Sum *= UNIT_E; Et_Sum *= UNIT_E; - Mass_add = Bondi_SinkMass_tot/Const_Msun; + MassBH = Bondi_MassBH*UNIT_M/Const_Msun; if ( MPI_Rank == 0 ) { @@ -102,7 +103,7 @@ void Record_Bondi() FILE *File_User = fopen( FileName, "a" ); fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n", Step, Time[0]*UNIT_T/Const_yr, SinkNCell_Sum, Mass_Sum, dTime, Mass_Sum/dTime, - MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum , Mass_add); + MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum , MassBH); fclose( File_User ); } } // if ( FirstTime ) ... else ... From a449b670213b98cdece7b25063926570dbac335f Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Thu, 29 Jul 2021 18:59:00 +0800 Subject: [PATCH 08/59] Update BH mass every time step --- src/SelfGravity/Gra_AdvanceDt.cpp | 1 + .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 24 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/SelfGravity/Gra_AdvanceDt.cpp b/src/SelfGravity/Gra_AdvanceDt.cpp index 88858496ed..8ee5c6c326 100644 --- a/src/SelfGravity/Gra_AdvanceDt.cpp +++ b/src/SelfGravity/Gra_AdvanceDt.cpp @@ -110,6 +110,7 @@ void Gra_AdvanceDt( const int lv, const double TimeNew, const double TimeOld, co Timer_Gra_Advance[lv], ( Timing && lv == 0 ) ); + // the base-level Poisson solver is implemented using the FFTW library (with CPUs only) if ( lv == 0 ) { diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 0a637da3c5..5ed5ca0b9b 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -92,7 +92,28 @@ static void HSE_SetDensProfileTable(); extern void (*Flu_ResetByUser_API_Ptr)( const int lv, const int FluSg, const double TTime ); - +void SetExtAccAuxArray_Bondi( double [] ); +#ifdef GRAVITY +//------------------------------------------------------------------------------------------------------- +//// Function : Poi_UserWorkBeforePoisson_Bondi +//// Description : Call the SetExtAccAuxArray_Bondi function to reset the Bondi_MassBH before invoking +//// the Poisson solver +//// +//// Note : 1. Invoked by Gra_AdvanceDt() using the function pointer "Poi_UserWorkBeforePoisson_Ptr" +//// +//// Parameter : Time : Target physical time +//// lv : Target refinement level +//// +//// Return : None +////------------------------------------------------------------------------------------------------------- +void Poi_UserWorkBeforePoisson_Bondi( const double Time, const int lv ) +{ + SetExtAccAuxArray_Bondi( ExtAcc_AuxArray ); +# ifdef GPU + CUAPI_SetConstMemory_ExtAccPot(); +# endif +} // FUNCTION : Poi_UserWorkBeforePoisson_Bondi +#endif // #ifdef GRAVITY //------------------------------------------------------------------------------------------------------- // Function : Validate @@ -641,6 +662,7 @@ void Init_TestProb_Hydro_Bondi() End_User_Ptr = End_Bondi; # ifdef GRAVITY Init_ExtAcc_Ptr = Init_ExtAcc_Bondi; + Poi_UserWorkBeforePoisson_Ptr = Poi_UserWorkBeforePoisson_Bondi; # endif # endif // #if ( MODEL == HYDRO && defined GRAVITY ) From aaf02b7918d11eccc67ffa9c5859c7fea51c87c6 Mon Sep 17 00:00:00 2001 From: Huai-Hsuan Chiu <43173257+sandy0216@users.noreply.github.com> Date: Mon, 2 Aug 2021 18:21:36 +0800 Subject: [PATCH 09/59] Edit the header in Record__BondiAccretionRate --- src/TestProblem/Hydro/Bondi/Record_Bondi.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp index b135d85a0a..1ee9c214be 100644 --- a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp @@ -51,10 +51,10 @@ void Record_Bondi() if ( Aux_CheckFileExist(FileName) ) Aux_Message( stderr, "WARNING : file \"%s\" already exists !!\n", FileName ); FILE *File_User = fopen( FileName, "a" ); - fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n", + fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n", "Step", "Time [yr]", "NVoidCell", "Mass [Msun]", "Time [yr]", "dM/dt [Msun/yr]", "MomX [g*cm/s]", "MomY [g*cm/s]", "MomZ [g*cm/s]", "MomXAbs [g*cm/s]", "MomYAbs [g*cm/s]", "MomZAbs [g*cm/s]", - "Ek [erg]", "Et [erg]" ); + "Ek [erg]", "Et [erg]", "BHMass [Msun]"); fclose( File_User ); } From 2a17289c1694985c8e0fb39ec1c30f9ed6a6d20b Mon Sep 17 00:00:00 2001 From: Huai-Hsuan Chiu <43173257+sandy0216@users.noreply.github.com> Date: Tue, 3 Aug 2021 11:19:40 +0800 Subject: [PATCH 10/59] Update Flu_ResetByUser_Bondi.cpp --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 5a264c7d61..d6969d1dff 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -17,7 +17,7 @@ extern double Bondi_SinkMomZAbs; extern double Bondi_SinkEk; extern double Bondi_SinkEt; extern int Bondi_SinkNCell; -extern double Bondi_SinkMass_tot; + double SinkMass_OneSubStep_AllRank; @@ -108,7 +108,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim bool Reset; real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL]; double x, y, z, x0, y0, z0; - double SinkMass = 0; + double SinkMass_OneSubStep_ThisRank = 0; // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; @@ -189,7 +189,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkEk += dv*Ek; Bondi_SinkEt += dv*Et; Bondi_SinkNCell ++; - SinkMass += dv*fluid_bk[DENS]; + SinkMass_OneSubStep_ThisRank += dv*fluid_bk[DENS]; }else if ( amr->patch[0][lv][PID]->son == -1 ){ // void region must be completely refined to the max level Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); @@ -197,8 +197,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) - MPI_Allreduce( &SinkMass, &Bondi_SinkMass_tot, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - Bondi_MassBH += Bondi_SinkMass_tot; + MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + Bondi_MassBH += SinkMass_OneSubStep_AllRank; } // FUNCTION : Flu_ResetByUser_API_Bondi From 76d448d0f419bfb90632737733614bb063f3a02b Mon Sep 17 00:00:00 2001 From: Huai-Hsuan Chiu <43173257+sandy0216@users.noreply.github.com> Date: Tue, 3 Aug 2021 11:22:18 +0800 Subject: [PATCH 11/59] Update Init_TestProb_Hydro_Bondi.cpp --- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 5ed5ca0b9b..4eb65e7cb6 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -38,7 +38,6 @@ static double Bondi_TimeB; // Bondi time double Bondi_SinkEk; // total kinematic energy ... double Bondi_SinkEt; // total thermal energy ... int Bondi_SinkNCell; // total number of finest cells within the void region - double Bondi_SinkMass_tot; // external units in cgs const double UnitExt_L = Const_kpc; From ce7a8687c6c342656500c17e283256cae60ca962 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 3 Aug 2021 11:53:08 +0800 Subject: [PATCH 12/59] Change some local varible --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index d6969d1dff..2baeec5510 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -17,7 +17,6 @@ extern double Bondi_SinkMomZAbs; extern double Bondi_SinkEk; extern double Bondi_SinkEt; extern int Bondi_SinkNCell; - double SinkMass_OneSubStep_AllRank; @@ -109,13 +108,14 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL]; double x, y, z, x0, y0, z0; double SinkMass_OneSubStep_ThisRank = 0; + double SinkMass_OneSubStep_AllRank; // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ reduction(+:Bondi_SinkMass, Bondi_SinkMomX, Bondi_SinkMomY, Bondi_SinkMomZ, Bondi_SinkMomXAbs, Bondi_SinkMomYAbs, Bondi_SinkMomZAbs, \ - Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell) + Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell,SinkMass_OneSubStep_ThisRank) for (int PID=0; PIDNPatchComma[lv][1]; PID++) { x0 = amr->patch[0][lv][PID]->EdgeL[0] + 0.5*dh; From f5f78fdf49aff75d57cb778b2de3aade574a39b2 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Tue, 3 Aug 2021 13:50:03 +0800 Subject: [PATCH 13/59] Revert "Update BH mass" --- src/SelfGravity/Gra_AdvanceDt.cpp | 1 - .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 11 +++----- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 25 ++----------------- src/TestProblem/Hydro/Bondi/Record_Bondi.cpp | 13 ++++------ 4 files changed, 11 insertions(+), 39 deletions(-) diff --git a/src/SelfGravity/Gra_AdvanceDt.cpp b/src/SelfGravity/Gra_AdvanceDt.cpp index 341807d26d..83e2c38a30 100644 --- a/src/SelfGravity/Gra_AdvanceDt.cpp +++ b/src/SelfGravity/Gra_AdvanceDt.cpp @@ -111,7 +111,6 @@ void Gra_AdvanceDt( const int lv, const double TimeNew, const double TimeOld, co Timer_Gra_Advance[lv], ( Timing && lv == 0 ) ); - // the base-level Poisson solver is implemented using the FFTW library (with CPUs only) if ( lv == 0 ) { diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 2baeec5510..fc7cf6d112 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -2,7 +2,7 @@ #if ( MODEL == HYDRO && defined GRAVITY ) -extern double Bondi_MassBH; + extern double Bondi_InBC_Rho; extern double Bondi_InBC_R; extern double Bondi_InBC_E; @@ -20,6 +20,7 @@ extern int Bondi_SinkNCell; + //------------------------------------------------------------------------------------------------------- // Function : Flu_ResetByUser_Func_Bondi // Description : Function to reset the fluid field in the Bondi accretion problem @@ -107,15 +108,14 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim bool Reset; real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL]; double x, y, z, x0, y0, z0; - double SinkMass_OneSubStep_ThisRank = 0; - double SinkMass_OneSubStep_AllRank; // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; + # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ reduction(+:Bondi_SinkMass, Bondi_SinkMomX, Bondi_SinkMomY, Bondi_SinkMomZ, Bondi_SinkMomXAbs, Bondi_SinkMomYAbs, Bondi_SinkMomZAbs, \ - Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell,SinkMass_OneSubStep_ThisRank) + Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell) for (int PID=0; PIDNPatchComma[lv][1]; PID++) { x0 = amr->patch[0][lv][PID]->EdgeL[0] + 0.5*dh; @@ -189,7 +189,6 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkEk += dv*Ek; Bondi_SinkEt += dv*Et; Bondi_SinkNCell ++; - SinkMass_OneSubStep_ThisRank += dv*fluid_bk[DENS]; }else if ( amr->patch[0][lv][PID]->son == -1 ){ // void region must be completely refined to the max level Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); @@ -197,8 +196,6 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) - MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); - Bondi_MassBH += SinkMass_OneSubStep_AllRank; } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 4eb65e7cb6..819c70af56 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -28,6 +28,7 @@ static double Bondi_Cs; // background sound speed static double Bondi_RS; // Schwarzschild radius static double Bondi_RB; // Bondi radius static double Bondi_TimeB; // Bondi time + double Bondi_SinkMass; // total mass in the void region removed in one global time-step double Bondi_SinkMomX; // total x-momentum ... double Bondi_SinkMomY; // total y-momentum ... @@ -91,28 +92,7 @@ static void HSE_SetDensProfileTable(); extern void (*Flu_ResetByUser_API_Ptr)( const int lv, const int FluSg, const double TTime ); -void SetExtAccAuxArray_Bondi( double [] ); -#ifdef GRAVITY -//------------------------------------------------------------------------------------------------------- -//// Function : Poi_UserWorkBeforePoisson_Bondi -//// Description : Call the SetExtAccAuxArray_Bondi function to reset the Bondi_MassBH before invoking -//// the Poisson solver -//// -//// Note : 1. Invoked by Gra_AdvanceDt() using the function pointer "Poi_UserWorkBeforePoisson_Ptr" -//// -//// Parameter : Time : Target physical time -//// lv : Target refinement level -//// -//// Return : None -////------------------------------------------------------------------------------------------------------- -void Poi_UserWorkBeforePoisson_Bondi( const double Time, const int lv ) -{ - SetExtAccAuxArray_Bondi( ExtAcc_AuxArray ); -# ifdef GPU - CUAPI_SetConstMemory_ExtAccPot(); -# endif -} // FUNCTION : Poi_UserWorkBeforePoisson_Bondi -#endif // #ifdef GRAVITY + //------------------------------------------------------------------------------------------------------- // Function : Validate @@ -661,7 +641,6 @@ void Init_TestProb_Hydro_Bondi() End_User_Ptr = End_Bondi; # ifdef GRAVITY Init_ExtAcc_Ptr = Init_ExtAcc_Bondi; - Poi_UserWorkBeforePoisson_Ptr = Poi_UserWorkBeforePoisson_Bondi; # endif # endif // #if ( MODEL == HYDRO && defined GRAVITY ) diff --git a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp index 1ee9c214be..8dd04bc738 100644 --- a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp @@ -6,7 +6,6 @@ // specific global variables declared in Init_TestProb_Hydro_Bondi.cpp // ======================================================================================= -extern double Bondi_MassBH; extern double Bondi_SinkMass; extern double Bondi_SinkMomX; extern double Bondi_SinkMomY; @@ -17,7 +16,6 @@ extern double Bondi_SinkMomZAbs; extern double Bondi_SinkEk; extern double Bondi_SinkEt; extern int Bondi_SinkNCell; -extern double Bondi_SinkMass_tot; // ======================================================================================= @@ -51,10 +49,10 @@ void Record_Bondi() if ( Aux_CheckFileExist(FileName) ) Aux_Message( stderr, "WARNING : file \"%s\" already exists !!\n", FileName ); FILE *File_User = fopen( FileName, "a" ); - fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n", + fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n", "Step", "Time [yr]", "NVoidCell", "Mass [Msun]", "Time [yr]", "dM/dt [Msun/yr]", "MomX [g*cm/s]", "MomY [g*cm/s]", "MomZ [g*cm/s]", "MomXAbs [g*cm/s]", "MomYAbs [g*cm/s]", "MomZAbs [g*cm/s]", - "Ek [erg]", "Et [erg]", "BHMass [Msun]"); + "Ek [erg]", "Et [erg]" ); fclose( File_User ); } @@ -71,7 +69,7 @@ void Record_Bondi() // get the total amount of sunk variables - double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, MassBH; + double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum; MPI_Reduce( &Bondi_SinkMass, &Mass_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); MPI_Reduce( &Bondi_SinkMomX, &MomX_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); @@ -92,7 +90,6 @@ void Record_Bondi() MomZAbs_Sum *= UNIT_M*UNIT_L/UNIT_T; Ek_Sum *= UNIT_E; Et_Sum *= UNIT_E; - MassBH = Bondi_MassBH*UNIT_M/Const_Msun; if ( MPI_Rank == 0 ) { @@ -101,9 +98,9 @@ void Record_Bondi() dTime *= UNIT_T/Const_yr; FILE *File_User = fopen( FileName, "a" ); - fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n", + fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n", Step, Time[0]*UNIT_T/Const_yr, SinkNCell_Sum, Mass_Sum, dTime, Mass_Sum/dTime, - MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum , MassBH); + MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum ); fclose( File_User ); } } // if ( FirstTime ) ... else ... From 0d776f13fd935c8d3639a5b3439cf590df0ce819 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 3 Aug 2021 14:27:05 +0800 Subject: [PATCH 14/59] Update BH mass --- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 11 ++++++-- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 27 ++++++++++++++++++- src/TestProblem/Hydro/Bondi/Record_Bondi.cpp | 12 +++++---- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index fc7cf6d112..90cf9eaceb 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -2,7 +2,7 @@ #if ( MODEL == HYDRO && defined GRAVITY ) - +extern double Bondi_MassBH; extern double Bondi_InBC_Rho; extern double Bondi_InBC_R; extern double Bondi_InBC_E; @@ -108,6 +108,9 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim bool Reset; real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL]; double x, y, z, x0, y0, z0; +// Define varible to record sink mass at every time step + double SinkMass_OneSubStep_ThisRank = 0; + double SinkMass_OneSubStep_AllRank; // reset to 0 since we only want to record the number of void cells **for one sub-step** Bondi_SinkNCell = 0; @@ -115,7 +118,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ reduction(+:Bondi_SinkMass, Bondi_SinkMomX, Bondi_SinkMomY, Bondi_SinkMomZ, Bondi_SinkMomXAbs, Bondi_SinkMomYAbs, Bondi_SinkMomZAbs, \ - Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell) + Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell,SinkMass_OneSubStep_ThisRank) for (int PID=0; PIDNPatchComma[lv][1]; PID++) { x0 = amr->patch[0][lv][PID]->EdgeL[0] + 0.5*dh; @@ -189,6 +192,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkEk += dv*Ek; Bondi_SinkEt += dv*Et; Bondi_SinkNCell ++; + + SinkMass_OneSubStep_ThisRank += dv*fluid_bk[DENS]; }else if ( amr->patch[0][lv][PID]->son == -1 ){ // void region must be completely refined to the max level Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); @@ -196,6 +201,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) + MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD ); + Bondi_MassBH += SinkMass_OneSubStep_AllRank; } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 819c70af56..e1d41ead95 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -91,6 +91,30 @@ static void HSE_SetDensProfileTable(); // the former is not defined in TestProb.h (because it's rarely required) extern void (*Flu_ResetByUser_API_Ptr)( const int lv, const int FluSg, const double TTime ); +void SetExtAccAuxArray_Bondi( double [] ); +#ifdef GRAVITY +//------------------------------------------------------------------------------------------------------- +////// Function : Poi_UserWorkBeforePoisson_Bondi +////// Description : Call the SetExtAccAuxArray_Bondi function to reset the Bondi_MassBH before invoking +////// the Poisson solver +////// +////// Note : 1. Invoked by Gra_AdvanceDt() using the function pointer "Poi_UserWorkBeforePoisson_Ptr" +////// +////// Parameter : Time : Target physical time +////// lv : Target refinement level +////// +////// Return : None +//////------------------------------------------------------------------------------------------------------- +void Poi_UserWorkBeforePoisson_Bondi( const double Time, const int lv ) +{ + SetExtAccAuxArray_Bondi( ExtAcc_AuxArray ); + +# ifdef GPU + CUAPI_SetConstMemory_ExtAccPot(); +# endif + +} // FUNCTION : Poi_UserWorkBeforePoisson_Bondi +#endif // #ifdef GRAVITY @@ -640,7 +664,8 @@ void Init_TestProb_Hydro_Bondi() Flu_ResetByUser_API_Ptr = Flu_ResetByUser_API_Bondi; End_User_Ptr = End_Bondi; # ifdef GRAVITY - Init_ExtAcc_Ptr = Init_ExtAcc_Bondi; + Init_ExtAcc_Ptr = Init_ExtAcc_Bondi; + Poi_UserWorkBeforePoisson_Ptr = Poi_UserWorkBeforePoisson_Bondi; # endif # endif // #if ( MODEL == HYDRO && defined GRAVITY ) diff --git a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp index 8dd04bc738..284c92a3b6 100644 --- a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp @@ -6,6 +6,7 @@ // specific global variables declared in Init_TestProb_Hydro_Bondi.cpp // ======================================================================================= +extern double Bondi_MassBH; extern double Bondi_SinkMass; extern double Bondi_SinkMomX; extern double Bondi_SinkMomY; @@ -49,10 +50,10 @@ void Record_Bondi() if ( Aux_CheckFileExist(FileName) ) Aux_Message( stderr, "WARNING : file \"%s\" already exists !!\n", FileName ); FILE *File_User = fopen( FileName, "a" ); - fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n", + fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n", "Step", "Time [yr]", "NVoidCell", "Mass [Msun]", "Time [yr]", "dM/dt [Msun/yr]", "MomX [g*cm/s]", "MomY [g*cm/s]", "MomZ [g*cm/s]", "MomXAbs [g*cm/s]", "MomYAbs [g*cm/s]", "MomZAbs [g*cm/s]", - "Ek [erg]", "Et [erg]" ); + "Ek [erg]", "Et [erg]", "BHMass [Msun]" ); fclose( File_User ); } @@ -69,7 +70,7 @@ void Record_Bondi() // get the total amount of sunk variables - double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum; + double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, Mass_BH; MPI_Reduce( &Bondi_SinkMass, &Mass_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); MPI_Reduce( &Bondi_SinkMomX, &MomX_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); @@ -90,6 +91,7 @@ void Record_Bondi() MomZAbs_Sum *= UNIT_M*UNIT_L/UNIT_T; Ek_Sum *= UNIT_E; Et_Sum *= UNIT_E; + Mass_BH = Bondi_MassBH*UNIT_M/Const_Msun; if ( MPI_Rank == 0 ) { @@ -98,9 +100,9 @@ void Record_Bondi() dTime *= UNIT_T/Const_yr; FILE *File_User = fopen( FileName, "a" ); - fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n", + fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n", Step, Time[0]*UNIT_T/Const_yr, SinkNCell_Sum, Mass_Sum, dTime, Mass_Sum/dTime, - MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum ); + MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, Mass_BH ); fclose( File_User ); } } // if ( FirstTime ) ... else ... From 86d301a5b83083f21cb47dc583cac4404e02e00f Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Tue, 3 Aug 2021 16:00:00 +0800 Subject: [PATCH 15/59] Minor update of code formatting --- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 11 ++++-- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 38 ++++++++++--------- src/TestProblem/Hydro/Bondi/Record_Bondi.cpp | 2 +- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 90cf9eaceb..37f4f5ec42 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -118,7 +118,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim # pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \ reduction(+:Bondi_SinkMass, Bondi_SinkMomX, Bondi_SinkMomY, Bondi_SinkMomZ, Bondi_SinkMomXAbs, Bondi_SinkMomYAbs, Bondi_SinkMomZAbs, \ - Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell,SinkMass_OneSubStep_ThisRank) + Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell, SinkMass_OneSubStep_ThisRank ) for (int PID=0; PIDNPatchComma[lv][1]; PID++) { x0 = amr->patch[0][lv][PID]->EdgeL[0] + 0.5*dh; @@ -194,15 +194,20 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTim Bondi_SinkNCell ++; SinkMass_OneSubStep_ThisRank += dv*fluid_bk[DENS]; - }else if ( amr->patch[0][lv][PID]->son == -1 ){ - // void region must be completely refined to the max level + } + + else if ( amr->patch[0][lv][PID]->son == -1 ) + { +// void region must be completely refined to the max level Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); } } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) + MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD ); Bondi_MassBH += SinkMass_OneSubStep_AllRank; + } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index e1d41ead95..a904a79fba 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -92,21 +92,25 @@ static void HSE_SetDensProfileTable(); extern void (*Flu_ResetByUser_API_Ptr)( const int lv, const int FluSg, const double TTime ); void SetExtAccAuxArray_Bondi( double [] ); + + + + #ifdef GRAVITY //------------------------------------------------------------------------------------------------------- -////// Function : Poi_UserWorkBeforePoisson_Bondi -////// Description : Call the SetExtAccAuxArray_Bondi function to reset the Bondi_MassBH before invoking -////// the Poisson solver -////// -////// Note : 1. Invoked by Gra_AdvanceDt() using the function pointer "Poi_UserWorkBeforePoisson_Ptr" -////// -////// Parameter : Time : Target physical time -////// lv : Target refinement level -////// -////// Return : None +// Function : Poi_UserWorkBeforePoisson_Bondi +// Description : Call SetExtAccAuxArray_Bondi() to reset Bondi_MassBH before invoking the Poisson solver +// +// Note : 1. Invoked by Gra_AdvanceDt() using the function pointer "Poi_UserWorkBeforePoisson_Ptr" +// +// Parameter : Time : Target physical time +// lv : Target refinement level +// +// Return : None //////------------------------------------------------------------------------------------------------------- void Poi_UserWorkBeforePoisson_Bondi( const double Time, const int lv ) { + SetExtAccAuxArray_Bondi( ExtAcc_AuxArray ); # ifdef GPU @@ -656,13 +660,13 @@ void Init_TestProb_Hydro_Bondi() // set the function pointers of various problem-specific routines - Init_Function_User_Ptr = SetGridIC; - Flag_User_Ptr = Flag_Bondi; - Aux_Record_User_Ptr = Record_Bondi; - BC_User_Ptr = SetGridIC; - Flu_ResetByUser_Func_Ptr = Flu_ResetByUser_Func_Bondi; - Flu_ResetByUser_API_Ptr = Flu_ResetByUser_API_Bondi; - End_User_Ptr = End_Bondi; + Init_Function_User_Ptr = SetGridIC; + Flag_User_Ptr = Flag_Bondi; + Aux_Record_User_Ptr = Record_Bondi; + BC_User_Ptr = SetGridIC; + Flu_ResetByUser_Func_Ptr = Flu_ResetByUser_Func_Bondi; + Flu_ResetByUser_API_Ptr = Flu_ResetByUser_API_Bondi; + End_User_Ptr = End_Bondi; # ifdef GRAVITY Init_ExtAcc_Ptr = Init_ExtAcc_Bondi; Poi_UserWorkBeforePoisson_Ptr = Poi_UserWorkBeforePoisson_Bondi; diff --git a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp index 284c92a3b6..5795548805 100644 --- a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp @@ -91,7 +91,7 @@ void Record_Bondi() MomZAbs_Sum *= UNIT_M*UNIT_L/UNIT_T; Ek_Sum *= UNIT_E; Et_Sum *= UNIT_E; - Mass_BH = Bondi_MassBH*UNIT_M/Const_Msun; + Mass_BH = Bondi_MassBH*UNIT_M/Const_Msun; if ( MPI_Rank == 0 ) { From 8226e2b41731332560a1280e7df064d9cd62e15a Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 3 Aug 2021 20:15:38 +0800 Subject: [PATCH 16/59] Add varibles --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index e1d41ead95..fd269db115 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -75,6 +75,11 @@ static double Bondi_HSE_Beta_Rcore; // core radius (input parameter) static double Bondi_HSE_Beta_Rho0; // peak density (set by Bondi_HSE_Dens_NormR/D) static double Bondi_HSE_Beta_P1; // P(r) = P1*( 1/x + atan(x) ) + P2 assuming beta=2/3, where x=r/Rcore, static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 currently fixed to -0.5*pi*P1 so that P(inf)=0 + +// parameters for soliton + bool Bondi_SOL; + double Bondi_SOL_m22; + double Bondi_SOL_rc; // ======================================================================================= @@ -235,6 +240,10 @@ void SetParameter() ReadPara->Add( "Bondi_HSE_Pres_NormT", &Bondi_HSE_Pres_NormT, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_HSE_Beta_Rcore", &Bondi_HSE_Beta_Rcore, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_SOL", &Bondi_SOL, false, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_SOL_m22", &Bondi_SOL_m22, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_SOL_rc", &Bondi_SOL_rc, -1.0, NoMin_double, NoMax_double ); + ReadPara->Read( FileName ); delete ReadPara; @@ -351,6 +360,9 @@ void SetParameter() } } // if ( Bondi_HSE ) + if ( Bondi_SOL ){ + Bondi_SOL_rc *= UnitExt_L/UNIT_L; + } // (4) reset other general-purpose parameters // --> a helper macro PRINT_WARNING is defined in TestProb.h @@ -406,6 +418,11 @@ void SetParameter() Aux_Message( stdout, " Bondi_HSE_Beta = %13.7e\n", Bondi_HSE_Beta ); Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D ); Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); } + + Aux_Message( stdout, " Bondi_SOL = %s\n", (Bondi_SOL)?"YES":"NO" ); + if( Bondi_SOL ) { + Aux_Message( stdout, " Bondi_SOL_m22 = %13.7e\n", Bondi_SOL_m22 ); + Aux_Message( stdout, " Bondi_SOL_rc = %13.7e (%13.7e kpc)\n", Bondi_SOL_rc, Bondi_SOL_rc*UNIT_L/Const_kpc );} Aux_Message( stdout, "=============================================================================\n" ); } // if ( MPI_Rank == 0 ) From 3e6ab6b4fce2a277220e8b86b5d1429a95533613 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 4 Aug 2021 16:19:41 +0800 Subject: [PATCH 17/59] Add the initial profile --- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 7 +- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 81 ++++++++++++++++++- 2 files changed, 86 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 90cf9eaceb..223c7a184f 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -18,7 +18,9 @@ extern double Bondi_SinkEk; extern double Bondi_SinkEt; extern int Bondi_SinkNCell; - +extern bool Bondi_SOL; +extern double Bondi_SOL_m22; +extern double Bondi_SOL_rc; //------------------------------------------------------------------------------------------------------- @@ -49,6 +51,9 @@ bool Flu_ResetByUser_Func_Bondi( real fluid[], const double x, const double y, c const int lv, double AuxArray[] ) { + if ( Bondi_SOL ) + return false; + const double Pos[3] = { x, y, z }; const double InBC_R2 = SQR( Bondi_InBC_R ); double dr2[3], r2; diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index fd269db115..f3dc95bbc6 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -1,6 +1,9 @@ #include "GAMER.h" #include "TestProb.h" +#include +#include +#include // problem-specific global variables @@ -80,6 +83,7 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr bool Bondi_SOL; double Bondi_SOL_m22; double Bondi_SOL_rc; +static double *Bondi_SOL_PresProf[2] = { NULL, NULL }; // pressure profile tabke: [0/1] = [radius/density] // ======================================================================================= @@ -91,6 +95,7 @@ bool Flu_ResetByUser_Func_Bondi( real fluid[], const double x, const double y, c const int lv, double AuxArray[] ); void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTime ); static void HSE_SetDensProfileTable(); +static void SOL_SetPresProfileTable(); // this test problem needs to reset both Flu_ResetByUser_API_Ptr and Flu_ResetByUser_Func_Ptr, while // the former is not defined in TestProb.h (because it's rarely required) @@ -361,6 +366,7 @@ void SetParameter() } // if ( Bondi_HSE ) if ( Bondi_SOL ){ + SOL_SetPresProfileTable(); Bondi_SOL_rc *= UnitExt_L/UNIT_L; } @@ -427,7 +433,7 @@ void SetParameter() } // if ( MPI_Rank == 0 ) - if ( MPI_Rank == 0 ) Aux_Message( stdout, " Setting runtime parameters ... done\n" ); + if ( MPI_Rank == 0 ) Aux_Message( stdout, " Setting runtime parameters ... done\n" ); } // FUNCTION : SetParameter @@ -503,6 +509,24 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co Aux_Error( ERROR_INFO, "unsupported Bondi_HSE_Mode (%d) !!\n", Bondi_HSE_Mode ); } // if ( Bondi_HSE ) + else if ( Bondi_SOL ) + { + const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); + Dens = 1.9*pow( Bondi_SOL_m22*1e1, -2.0 )*pow( Bondi_SOL_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+9.1e-2*SQR(r/Bondi_SOL_rc), 8.0 ); + Dens *= Const_Msun/CUBE(Const_pc); + Dens *= UnitExt_D/UNIT_D; + + const double *Table_R = Bondi_SOL_PresProf[0]; + const double *Table_P = Bondi_SOL_PresProf[1]; + Pres = Mis_InterpolateFromTable( 1000, Table_R, Table_P, r ); + if( Pres==NULL_REAL ){ + Aux_Error( ERROR_INFO, "%.3e, %.3e, %.3e\n",Table_R[0],Table_R[1000-1],r); + Aux_Error( ERROR_INFO, "Wrong Table\n"); + } + Pres *= 1/(UNIT_P); + if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); + } + // uniform background else @@ -625,6 +649,59 @@ void HSE_SetDensProfileTable() } // FUNCTION : HSE_SetDensProfileTable +//------------------------------------------------------------------------------------------------------- +// Function : SOL_SetPresProfileTable +// Description : Set up the pressure profile table for SOL +// +// Note : 1. Assume P(r->inf)=0 +// +// Parameter : None +//------------------------------------------------------------------------------------------------------- +int odefunc ( double x, const double y[], double f[], void *params) +{ + double rc = Bondi_SOL_rc*UNIT_L/Const_kpc; + double m22 = Bondi_SOL_m22; + double rho = 1.9*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+9.1e-2*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); + double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); + double M = 4.2e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; + f[0] = -NEWTON_G*M*rho/(x*x*Const_kpc*Const_kpc); + + return GSL_SUCCESS; +} +int * jac; +void SOL_SetPresProfileTable() +{ + +// allocate table --> deallocated by End_Bondi() + const int NBin = 1000; + const double r_min = 0.1*amr->dh[MAX_LEVEL]*UNIT_L/UnitExt_L; + const double r_max = (0.5*sqrt(3.0)*amr->BoxSize[0])*UNIT_L/UnitExt_L; + for (int v=0; v<2; v++) Bondi_SOL_PresProf[v] = new double [NBin]; + + int dim = 1; + gsl_odeiv2_system sys = {odefunc, NULL, dim, NULL}; + + gsl_odeiv2_driver * d = gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rkf45, 1e-6, 1e-6, 0.0); + + double x0 = -r_max, xf = -r_min; + double x = x0; + double y[1] = { 0.0 }; + for( int b=1; b<=NBin; b++) + { + double xi = x0 + b*(xf-x0)/NBin; + int status = gsl_odeiv2_driver_apply (d, &x, xi, y); + if (status != GSL_SUCCESS) + { + Aux_Error( ERROR_INFO, "Error in SOL_SetPresProfileTable, return value=%d\n", status ); + break; + } + Bondi_SOL_PresProf[0][NBin-b] = -x*UnitExt_L/UNIT_L; + Bondi_SOL_PresProf[1][NBin-b] = y[0]; + } + gsl_odeiv2_driver_free (d); +} // void SOL_SetDensProfileTable() + + //------------------------------------------------------------------------------------------------------- // Function : End_Bondi // Description : Free memory before terminating the program @@ -640,6 +717,8 @@ void End_Bondi() { delete [] Bondi_HSE_DensProf[v]; Bondi_HSE_DensProf[v] = NULL; + delete [] Bondi_SOL_PresProf[v]; + Bondi_SOL_PresProf[v] = NULL; } } // FUNCTION : End_Bondi From 5666fcc8ef4bb31442f759dd5ffba3017e931c1d Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 4 Aug 2021 18:21:38 +0800 Subject: [PATCH 18/59] Add initial condition.2 --- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index f3dc95bbc6..022596c2b6 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -524,7 +524,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co Aux_Error( ERROR_INFO, "Wrong Table\n"); } Pres *= 1/(UNIT_P); - if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); + //if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); } @@ -664,7 +664,7 @@ int odefunc ( double x, const double y[], double f[], void *params) double rho = 1.9*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+9.1e-2*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); double M = 4.2e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; - f[0] = -NEWTON_G*M*rho/(x*x*Const_kpc*Const_kpc); + f[0] = -Const_NewtonG*M*rho/(x*x*Const_kpc*Const_kpc); return GSL_SUCCESS; } @@ -681,7 +681,7 @@ void SOL_SetPresProfileTable() int dim = 1; gsl_odeiv2_system sys = {odefunc, NULL, dim, NULL}; - gsl_odeiv2_driver * d = gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rkf45, 1e-6, 1e-6, 0.0); + gsl_odeiv2_driver * d = gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk4, 1e-6, 1e-6, 0.0); double x0 = -r_max, xf = -r_min; double x = x0; From 1d01036030fc32ede895f6a198a2b140288793df Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 4 Aug 2021 20:48:39 +0800 Subject: [PATCH 19/59] add external accretion --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 25 +++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 713e263801..b9f06bfe1f 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -21,6 +21,10 @@ extern double Bondi_MassBH; extern double Bondi_Soften_R; +extern bool Bondi_SOL; +extern double Bondi_SOL_m22; +extern double Bondi_SOL_rc; + //------------------------------------------------------------------------------------------------------- // Function : SetExtAccAuxArray_Bondi @@ -42,6 +46,13 @@ void SetExtAccAuxArray_Bondi( double AuxArray[] ) AuxArray[2] = amr->BoxCenter[2]; AuxArray[3] = NEWTON_G*Bondi_MassBH; // gravitational_constant*point_source_mass AuxArray[4] = Bondi_Soften_R; // soften_length (<=0.0 --> disable) + AuxArray[5] = Bondi_SOL; + if( Bondi_SOL ) + { + AuxArray[6] = Bondi_SOL_m22; + AuxArray[7] = Bondi_SOL_rc; + AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; + } } // FUNCTION : SetExtAccAuxArray_Bondi #endif // #ifndef __CUDACC__ @@ -72,13 +83,25 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub { const double Cen[3] = { UserArray[0], UserArray[1], UserArray[2] }; - const real GM = (real)UserArray[3]; + real GM = (real)UserArray[3]; const real eps = (real)UserArray[4]; + const real SOL = (real)UserArray[5]; const real dx = (real)(x - Cen[0]); const real dy = (real)(y - Cen[1]); const real dz = (real)(z - Cen[2]); const real r = SQRT( dx*dx + dy*dy + dz*dz ); + if( SOL ) + { + const real m22 = (real)UserArray[6]; + const real rc = (real)UserArray[7]; // In code unit or kpc + const real Coeff = (real)UserArray[8]; + + double a = sqrt(pow(2.0,1.0/8.0)-1)*(r/rc); + double M = 4.2e10/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); + GM = M*Coeff; + } + // Plummer # if ( defined SOFTEN_PLUMMER ) const real _r3 = ( eps <= (real)0.0 ) ? (real)1.0/CUBE(r) : POW( SQR(r)+SQR(eps), (real)-1.5 ); From 1e4140c3044e37e66c6ab0dcfa1841f0562f75fb Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 4 Aug 2021 20:52:06 +0800 Subject: [PATCH 20/59] add external accretion(fixed) --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index b9f06bfe1f..6129425db3 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -98,7 +98,7 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub const real Coeff = (real)UserArray[8]; double a = sqrt(pow(2.0,1.0/8.0)-1)*(r/rc); - double M = 4.2e10/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); + double M = 4.2e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); GM = M*Coeff; } From 3d0fb91245cbebe67be7962981f205e0f81cc193 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Fri, 13 Aug 2021 13:47:33 +0800 Subject: [PATCH 21/59] add soliton --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 13 +++++-- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 36 +++++++++++++------ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 6129425db3..32c80a6362 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -52,6 +52,7 @@ void SetExtAccAuxArray_Bondi( double AuxArray[] ) AuxArray[6] = Bondi_SOL_m22; AuxArray[7] = Bondi_SOL_rc; AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; + AuxArray[9] = UNIT_L/Const_kpc; } } // FUNCTION : SetExtAccAuxArray_Bondi @@ -85,7 +86,7 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub const double Cen[3] = { UserArray[0], UserArray[1], UserArray[2] }; real GM = (real)UserArray[3]; const real eps = (real)UserArray[4]; - const real SOL = (real)UserArray[5]; + const bool SOL = (real)UserArray[5]; const real dx = (real)(x - Cen[0]); const real dy = (real)(y - Cen[1]); const real dz = (real)(z - Cen[2]); @@ -96,10 +97,16 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub const real m22 = (real)UserArray[6]; const real rc = (real)UserArray[7]; // In code unit or kpc const real Coeff = (real)UserArray[8]; + const real UNIT_L = (real)UserArray[9]; +#ifdef Plummer + double M = GM*CUBE(r)/pow(SQR(r)+SQR(rc),1.5); +#else double a = sqrt(pow(2.0,1.0/8.0)-1)*(r/rc); - double M = 4.2e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); - GM = M*Coeff; + double M = 4.2e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); + M *= Coeff; +#endif + GM = M; } // Plummer diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 022596c2b6..500dda7720 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -44,7 +44,7 @@ static double Bondi_TimeB; // Bondi time int Bondi_SinkNCell; // total number of finest cells within the void region // external units in cgs -const double UnitExt_L = Const_kpc; +const double UnitExt_L = Const_pc; const double UnitExt_D = 1.0; const double UnitExt_M = Const_Msun; const double UnitExt_E = Const_keV; @@ -89,6 +89,7 @@ static double *Bondi_SOL_PresProf[2] = { NULL, NULL }; // pressure profile tab // problem-specific function prototypes void Init_ExtAcc_Bondi(); +void Init_ExtPot_Bondi(); void Record_Bondi(); bool Flag_Bondi( const int i, const int j, const int k, const int lv, const int PID, const double *Threshold ); bool Flu_ResetByUser_Func_Bondi( real fluid[], const double x, const double y, const double z, const double Time, @@ -366,8 +367,8 @@ void SetParameter() } // if ( Bondi_HSE ) if ( Bondi_SOL ){ - SOL_SetPresProfileTable(); Bondi_SOL_rc *= UnitExt_L/UNIT_L; + SOL_SetPresProfileTable(); } // (4) reset other general-purpose parameters @@ -512,19 +513,28 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co else if ( Bondi_SOL ) { const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); +#ifdef Plummer + Dens = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(Bondi_SOL_rc*UNIT_L))*pow(1+SQR(r/Bondi_SOL_rc),-2.5); +#else Dens = 1.9*pow( Bondi_SOL_m22*1e1, -2.0 )*pow( Bondi_SOL_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+9.1e-2*SQR(r/Bondi_SOL_rc), 8.0 ); Dens *= Const_Msun/CUBE(Const_pc); - Dens *= UnitExt_D/UNIT_D; +#endif + /*double rho0 = 1e-20; + double temp = 1e10; + double A = Const_kB/(0.62/Const_NA*1e3)*temp; + Dens = rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L));*/ + Dens *= 1/UNIT_D; const double *Table_R = Bondi_SOL_PresProf[0]; const double *Table_P = Bondi_SOL_PresProf[1]; - Pres = Mis_InterpolateFromTable( 1000, Table_R, Table_P, r ); + Pres = Mis_InterpolateFromTable( 100000, Table_R, Table_P, r ); if( Pres==NULL_REAL ){ Aux_Error( ERROR_INFO, "%.3e, %.3e, %.3e\n",Table_R[0],Table_R[1000-1],r); Aux_Error( ERROR_INFO, "Wrong Table\n"); } + //Pres = A*rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L)); Pres *= 1/(UNIT_P); - //if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); + //if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); } @@ -659,12 +669,18 @@ void HSE_SetDensProfileTable() //------------------------------------------------------------------------------------------------------- int odefunc ( double x, const double y[], double f[], void *params) { + x /= Const_kpc; double rc = Bondi_SOL_rc*UNIT_L/Const_kpc; double m22 = Bondi_SOL_m22; +#ifdef Plummer + double rho = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(rc*Const_kpc))*pow(1+SQR(x/rc),-2.5); + double M = Bondi_MassBH*UNIT_M*CUBE(x)/pow(SQR(x)+SQR(rc),1.5); +#else double rho = 1.9*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+9.1e-2*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); double M = 4.2e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; - f[0] = -Const_NewtonG*M*rho/(x*x*Const_kpc*Const_kpc); +#endif + f[0] = -Const_NewtonG*M*rho/SQR(x*Const_kpc); return GSL_SUCCESS; } @@ -673,9 +689,9 @@ void SOL_SetPresProfileTable() { // allocate table --> deallocated by End_Bondi() - const int NBin = 1000; - const double r_min = 0.1*amr->dh[MAX_LEVEL]*UNIT_L/UnitExt_L; - const double r_max = (0.5*sqrt(3.0)*amr->BoxSize[0])*UNIT_L/UnitExt_L; + const int NBin = 100000; + const double r_min = 0.1*amr->dh[MAX_LEVEL]*UNIT_L; + const double r_max = (0.5*sqrt(3.0)*amr->BoxSize[0])*UNIT_L; for (int v=0; v<2; v++) Bondi_SOL_PresProf[v] = new double [NBin]; int dim = 1; @@ -695,7 +711,7 @@ void SOL_SetPresProfileTable() Aux_Error( ERROR_INFO, "Error in SOL_SetPresProfileTable, return value=%d\n", status ); break; } - Bondi_SOL_PresProf[0][NBin-b] = -x*UnitExt_L/UNIT_L; + Bondi_SOL_PresProf[0][NBin-b] = -x/UNIT_L; Bondi_SOL_PresProf[1][NBin-b] = y[0]; } gsl_odeiv2_driver_free (d); From b30e39f5879fa34eaaacdf62b3d76354538b5a95 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Sun, 24 Oct 2021 15:14:19 +0800 Subject: [PATCH 22/59] soliton successfully add --- src/Makefile | 88 +++++++++---------- .../Mis_InterpolateFromTable.cpp | 1 - src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 18 ++-- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 6 +- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 84 +++++++++--------- 5 files changed, 98 insertions(+), 99 deletions(-) diff --git a/src/Makefile b/src/Makefile index e7f4854a1d..f44823017d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -36,7 +36,7 @@ COMPILE_VERBOSE := 0 SIMU_OPTION += -DMODEL=HYDRO # enable gravity -#SIMU_OPTION += -DGRAVITY +SIMU_OPTION += -DGRAVITY # enable particles # --> must enable GRAVITY @@ -69,7 +69,7 @@ SIMU_OPTION += -DRSOLVER=ROE # dual energy formalism: DE_ENPY/DE_EINT (evolve entropy or internal energy) # --> DE_EINT is not supported yet; useless for RTVD -#SIMU_OPTION += -DDUAL_ENERGY=DE_ENPY +SIMU_OPTION += -DDUAL_ENERGY=DE_ENPY # number of user-defined passively advected scalars # --> set it to 0 or comment it out if none is required @@ -153,7 +153,7 @@ endif # PARTICLE # ------------------------------------------------------------------------------------ # maximum number of AMR levels including the root level (level id = 0 ... NLEVEL-1) # --> must be set in any cases -SIMU_OPTION += -DNLEVEL=10 +SIMU_OPTION += -DNLEVEL=14 # maximum number of patches on each AMR level # --> must be set in any cases @@ -161,10 +161,10 @@ SIMU_OPTION += -DMAX_PATCH=1000000 # GPU acceleration # --> must set GPU_ARCH as well -#SIMU_OPTION += -DGPU +SIMU_OPTION += -DGPU # GPU architecture: FERMI/KEPLER/MAXWELL/PASCAL/VOLTA/TURING/AMPERE -SIMU_OPTION += -DGPU_ARCH=KEPLER +SIMU_OPTION += -DGPU_ARCH=TURING # debug mode #SIMU_OPTION += -DGAMER_DEBUG @@ -184,11 +184,11 @@ SIMU_OPTION += -DTIMING # serial mode (in which no MPI libraries are required) # --> must disable LOAD_BALANCE -SIMU_OPTION += -DSERIAL +#SIMU_OPTION += -DSERIAL # load-balance parallelization: HILBERT # --> must disable SERIAL -#SIMU_OPTION += -DLOAD_BALANCE=HILBERT +SIMU_OPTION += -DLOAD_BALANCE=HILBERT # overlap MPI communication with computation # --> NOT supported yet; must enable LOAD_BALANCE @@ -201,10 +201,10 @@ SIMU_OPTION += -DOPENMP #SIMU_OPTION += -DLAOHU # support HDF5 format -#SIMU_OPTION += -DSUPPORT_HDF5 +SIMU_OPTION += -DSUPPORT_HDF5 # support GNU scientific library -#SIMU_OPTION += -DSUPPORT_GSL +SIMU_OPTION += -DSUPPORT_GSL # support yt inline analysis #SIMU_OPTION += -DSUPPORT_LIBYT @@ -224,51 +224,51 @@ SIMU_OPTION += -DRANDOM_NUMBER=RNG_GNU_EXT # intel # ------------------------------------------------------------------------------- # CXX = icpc # serial compiler -##CXX = $(MPI_PATH)/bin/mpicxx # MPI compiler +CXX = $(MPI_PATH)/bin/mpicxx # MPI compiler ##CXX = CC # cray wrapper script -# CXXFLAG = -g -O3 # general flags +CXXFLAG = -g -O3 # general flags ##CXXFLAG = -g -O3 -std=c++11 #-gxx-name=YOUR_G++ ##CXXFLAG = -g -fast -# CXXFLAG += -w1 # warning flags -# OPENMPFLAG = -fopenmp # openmp flag -# LIB = -limf # libraries and linker flags +CXXFLAG += -w1 # warning flags +OPENMPFLAG = -fopenmp # openmp flag +LIB = -limf # libraries and linker flags # ## for debug only -#ifeq "$(filter -DGAMER_DEBUG, $(SIMU_OPTION))" "-DGAMER_DEBUG" +ifeq "$(filter -DGAMER_DEBUG, $(SIMU_OPTION))" "-DGAMER_DEBUG" ##CXXFLAG += -fstack-protector-all ##LIB += -lssp -#endif +endif # ## suppress warning when OpenMP is disabled -#ifeq "$(filter -DOPENMP, $(SIMU_OPTION))" "" -# CXXFLAG += -Wno-unknown-pragmas -diag-disable 3180 -#endif +ifeq "$(filter -DOPENMP, $(SIMU_OPTION))" "" + CXXFLAG += -Wno-unknown-pragmas -diag-disable 3180 +endif # gnu # ------------------------------------------------------------------------------- - CXX = g++ # serial compiler +# CXX = g++ # serial compiler #CXX = $(MPI_PATH)/bin/mpicxx # MPI compiler #CXX = CC # cray wrapper script - CXXFLAG = -g -O3 # general flags +# CXXFLAG = -g -O3 # general flags #CXXFLAG = -g -O3 -std=c++11 #CXXFLAG = -g -Ofast - CXXFLAG += -Wall -Wextra # warning flags - CXXFLAG += -Wno-unused-variable -Wno-unused-parameter \ +# CXXFLAG += -Wall -Wextra # warning flags +# CXXFLAG += -Wno-unused-variable -Wno-unused-parameter \ -Wno-maybe-uninitialized -Wno-unused-but-set-variable \ -Wno-unused-result -Wno-unused-function - OPENMPFLAG = -fopenmp # openmp flag - LIB = # libraries and linker flags +# OPENMPFLAG = -fopenmp # openmp flag +# LIB = # libraries and linker flags # for debug only -ifeq "$(filter -DGAMER_DEBUG, $(SIMU_OPTION))" "-DGAMER_DEBUG" +#ifeq "$(filter -DGAMER_DEBUG, $(SIMU_OPTION))" "-DGAMER_DEBUG" #CXXFLAG += -fstack-protector-all -endif +#endif # suppress warning when OpenMP is disabled -ifeq "$(filter -DOPENMP, $(SIMU_OPTION))" "" - CXXFLAG += -Wno-unknown-pragmas -endif +#ifeq "$(filter -DOPENMP, $(SIMU_OPTION))" "" +# CXXFLAG += -Wno-unknown-pragmas +#endif # CUDA @@ -285,13 +285,13 @@ endif ####################################################################################################### # template -CUDA_PATH := -FFTW_PATH := -MPI_PATH := -HDF5_PATH := -GRACKLE_PATH := -GSL_PATH := -LIBYT_PATH := +#CUDA_PATH := +#FFTW_PATH := +#MPI_PATH := +#HDF5_PATH := +#GRACKLE_PATH := +#GSL_PATH := +#LIBYT_PATH := # NCSA-bluewaters (only need to specify the path of user-installed packages) #GRACKLE_PATH := @@ -335,13 +335,13 @@ LIBYT_PATH := #LIBYT_PATH := /home/hyschive/project/libyt/libyt.dev/libyt # NTU-eureka (default: openmpi-intel) -#CUDA_PATH := /software/cuda/default -#FFTW_PATH := /software/fftw/default -#MPI_PATH := /software/openmpi/default -#HDF5_PATH := /software/hdf5/default -#GRACKLE_PATH := -#GSL_PATH := /software/gsl/default -#LIBYT_PATH := +CUDA_PATH := /software/cuda/default +FFTW_PATH := /software/fftw/default +MPI_PATH := /software/openmpi/default +HDF5_PATH := /software/hdf5/default +GRACKLE_PATH := +GSL_PATH := /software/gsl/default +LIBYT_PATH := # NTU-hulk (openmpi-intel-qlc) #CUDA_PATH := /opt/gpu/cuda/4.2 diff --git a/src/Miscellaneous/Mis_InterpolateFromTable.cpp b/src/Miscellaneous/Mis_InterpolateFromTable.cpp index 96427f729c..9e0a2c60c4 100644 --- a/src/Miscellaneous/Mis_InterpolateFromTable.cpp +++ b/src/Miscellaneous/Mis_InterpolateFromTable.cpp @@ -65,7 +65,6 @@ T Mis_InterpolateFromTable( const int N, const T Table_x[], const T Table_y[], c } // FUNCTION : Mis_InterpolateFromTable - // explicit template instantiation template float Mis_InterpolateFromTable ( const int N, const float Table_x[], const float Table_y[], const float x ); template double Mis_InterpolateFromTable ( const int N, const double Table_x[], const double Table_y[], const double x ); diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 32c80a6362..d7acbdc58b 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -21,9 +21,9 @@ extern double Bondi_MassBH; extern double Bondi_Soften_R; -extern bool Bondi_SOL; -extern double Bondi_SOL_m22; -extern double Bondi_SOL_rc; +extern bool Bondi_Soliton; +extern double Bondi_Soliton_m22; +extern double Bondi_Soliton_rc; //------------------------------------------------------------------------------------------------------- @@ -46,11 +46,11 @@ void SetExtAccAuxArray_Bondi( double AuxArray[] ) AuxArray[2] = amr->BoxCenter[2]; AuxArray[3] = NEWTON_G*Bondi_MassBH; // gravitational_constant*point_source_mass AuxArray[4] = Bondi_Soften_R; // soften_length (<=0.0 --> disable) - AuxArray[5] = Bondi_SOL; - if( Bondi_SOL ) + AuxArray[5] = Bondi_Soliton; + if( Bondi_Soliton ) { - AuxArray[6] = Bondi_SOL_m22; - AuxArray[7] = Bondi_SOL_rc; + AuxArray[6] = Bondi_Soliton_m22; + AuxArray[7] = Bondi_Soliton_rc; AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; AuxArray[9] = UNIT_L/Const_kpc; } @@ -103,10 +103,10 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub double M = GM*CUBE(r)/pow(SQR(r)+SQR(rc),1.5); #else double a = sqrt(pow(2.0,1.0/8.0)-1)*(r/rc); - double M = 4.2e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); + double M = 4.17e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); M *= Coeff; #endif - GM = M; + GM += M; } // Plummer diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 223c7a184f..8b1bb5f0b6 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -18,9 +18,7 @@ extern double Bondi_SinkEk; extern double Bondi_SinkEt; extern int Bondi_SinkNCell; -extern bool Bondi_SOL; -extern double Bondi_SOL_m22; -extern double Bondi_SOL_rc; +extern bool Bondi_void; //------------------------------------------------------------------------------------------------------- @@ -51,7 +49,7 @@ bool Flu_ResetByUser_Func_Bondi( real fluid[], const double x, const double y, c const int lv, double AuxArray[] ) { - if ( Bondi_SOL ) + if ( !Bondi_void ) return false; const double Pos[3] = { x, y, z }; diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 500dda7720..f62ea0ce0c 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -44,7 +44,7 @@ static double Bondi_TimeB; // Bondi time int Bondi_SinkNCell; // total number of finest cells within the void region // external units in cgs -const double UnitExt_L = Const_pc; +const double UnitExt_L = Const_kpc; const double UnitExt_D = 1.0; const double UnitExt_M = Const_Msun; const double UnitExt_E = Const_keV; @@ -80,10 +80,11 @@ static double Bondi_HSE_Beta_P1; // P(r) = P1*( 1/x + atan(x) ) + P2 as static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 currently fixed to -0.5*pi*P1 so that P(inf)=0 // parameters for soliton - bool Bondi_SOL; - double Bondi_SOL_m22; - double Bondi_SOL_rc; -static double *Bondi_SOL_PresProf[2] = { NULL, NULL }; // pressure profile tabke: [0/1] = [radius/density] + bool Bondi_void; + bool Bondi_Soliton; + double Bondi_Soliton_m22; + double Bondi_Soliton_rc; +static double *Bondi_Soliton_PresProf[2] = { NULL, NULL }; // pressure profile tabke: [0/1] = [radius/density] // ======================================================================================= @@ -96,7 +97,7 @@ bool Flu_ResetByUser_Func_Bondi( real fluid[], const double x, const double y, c const int lv, double AuxArray[] ); void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double TTime ); static void HSE_SetDensProfileTable(); -static void SOL_SetPresProfileTable(); +static void Soliton_SetPresProfileTable(); // this test problem needs to reset both Flu_ResetByUser_API_Ptr and Flu_ResetByUser_Func_Ptr, while // the former is not defined in TestProb.h (because it's rarely required) @@ -246,9 +247,10 @@ void SetParameter() ReadPara->Add( "Bondi_HSE_Pres_NormT", &Bondi_HSE_Pres_NormT, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_HSE_Beta_Rcore", &Bondi_HSE_Beta_Rcore, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_SOL", &Bondi_SOL, false, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_SOL_m22", &Bondi_SOL_m22, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_SOL_rc", &Bondi_SOL_rc, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_void", &Bondi_void, true, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); ReadPara->Read( FileName ); @@ -366,9 +368,9 @@ void SetParameter() } } // if ( Bondi_HSE ) - if ( Bondi_SOL ){ - Bondi_SOL_rc *= UnitExt_L/UNIT_L; - SOL_SetPresProfileTable(); + if ( Bondi_Soliton ){ + Bondi_Soliton_rc *= UnitExt_L/UNIT_L; + Soliton_SetPresProfileTable(); } // (4) reset other general-purpose parameters @@ -426,10 +428,10 @@ void SetParameter() Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D ); Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); } - Aux_Message( stdout, " Bondi_SOL = %s\n", (Bondi_SOL)?"YES":"NO" ); - if( Bondi_SOL ) { - Aux_Message( stdout, " Bondi_SOL_m22 = %13.7e\n", Bondi_SOL_m22 ); - Aux_Message( stdout, " Bondi_SOL_rc = %13.7e (%13.7e kpc)\n", Bondi_SOL_rc, Bondi_SOL_rc*UNIT_L/Const_kpc );} + Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); + if( Bondi_Soliton ) { + Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); + Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc );} Aux_Message( stdout, "=============================================================================\n" ); } // if ( MPI_Rank == 0 ) @@ -510,23 +512,23 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co Aux_Error( ERROR_INFO, "unsupported Bondi_HSE_Mode (%d) !!\n", Bondi_HSE_Mode ); } // if ( Bondi_HSE ) - else if ( Bondi_SOL ) + /*else if ( Bondi_Soliton ) { const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); #ifdef Plummer - Dens = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(Bondi_SOL_rc*UNIT_L))*pow(1+SQR(r/Bondi_SOL_rc),-2.5); -#else - Dens = 1.9*pow( Bondi_SOL_m22*1e1, -2.0 )*pow( Bondi_SOL_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+9.1e-2*SQR(r/Bondi_SOL_rc), 8.0 ); + Dens = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(Bondi_Soliton_rc*UNIT_L))*pow(1+SQR(r/Bondi_Soliton_rc),-2.5); +#else + Dens = 1.945*pow( Bondi_Soliton_m22*1e1, -2.0 )*pow( Bondi_Soliton_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+(9.1e-2)*SQR(r/Bondi_Soliton_rc), 8.0 ); Dens *= Const_Msun/CUBE(Const_pc); #endif - /*double rho0 = 1e-20; - double temp = 1e10; - double A = Const_kB/(0.62/Const_NA*1e3)*temp; - Dens = rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L));*/ + //double rho0 = 1e-20; + //double temp = 1e10; + //double A = Const_kB/(0.62/Const_NA*1e3)*temp; + //Dens = rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L)); Dens *= 1/UNIT_D; - const double *Table_R = Bondi_SOL_PresProf[0]; - const double *Table_P = Bondi_SOL_PresProf[1]; + const double *Table_R = Bondi_Soliton_PresProf[0]; + const double *Table_P = Bondi_Soliton_PresProf[1]; Pres = Mis_InterpolateFromTable( 100000, Table_R, Table_P, r ); if( Pres==NULL_REAL ){ Aux_Error( ERROR_INFO, "%.3e, %.3e, %.3e\n",Table_R[0],Table_R[1000-1],r); @@ -535,7 +537,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co //Pres = A*rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L)); Pres *= 1/(UNIT_P); //if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); - } + }*/ // uniform background @@ -660,8 +662,8 @@ void HSE_SetDensProfileTable() //------------------------------------------------------------------------------------------------------- -// Function : SOL_SetPresProfileTable -// Description : Set up the pressure profile table for SOL +// Function : Soliton_SetPresProfileTable +// Description : Set up the pressure profile table for Soliton // // Note : 1. Assume P(r->inf)=0 // @@ -670,29 +672,29 @@ void HSE_SetDensProfileTable() int odefunc ( double x, const double y[], double f[], void *params) { x /= Const_kpc; - double rc = Bondi_SOL_rc*UNIT_L/Const_kpc; - double m22 = Bondi_SOL_m22; + double rc = Bondi_Soliton_rc*UNIT_L/Const_kpc; + double m22 = Bondi_Soliton_m22; #ifdef Plummer double rho = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(rc*Const_kpc))*pow(1+SQR(x/rc),-2.5); double M = Bondi_MassBH*UNIT_M*CUBE(x)/pow(SQR(x)+SQR(rc),1.5); #else - double rho = 1.9*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+9.1e-2*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); + double rho = 1.945*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+(9.1e-2)*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); - double M = 4.2e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; + double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; #endif f[0] = -Const_NewtonG*M*rho/SQR(x*Const_kpc); return GSL_SUCCESS; } int * jac; -void SOL_SetPresProfileTable() +void Soliton_SetPresProfileTable() { // allocate table --> deallocated by End_Bondi() const int NBin = 100000; const double r_min = 0.1*amr->dh[MAX_LEVEL]*UNIT_L; const double r_max = (0.5*sqrt(3.0)*amr->BoxSize[0])*UNIT_L; - for (int v=0; v<2; v++) Bondi_SOL_PresProf[v] = new double [NBin]; + for (int v=0; v<2; v++) Bondi_Soliton_PresProf[v] = new double [NBin]; int dim = 1; gsl_odeiv2_system sys = {odefunc, NULL, dim, NULL}; @@ -708,14 +710,14 @@ void SOL_SetPresProfileTable() int status = gsl_odeiv2_driver_apply (d, &x, xi, y); if (status != GSL_SUCCESS) { - Aux_Error( ERROR_INFO, "Error in SOL_SetPresProfileTable, return value=%d\n", status ); + Aux_Error( ERROR_INFO, "Error in Soliton_SetPresProfileTable, return value=%d\n", status ); break; } - Bondi_SOL_PresProf[0][NBin-b] = -x/UNIT_L; - Bondi_SOL_PresProf[1][NBin-b] = y[0]; + Bondi_Soliton_PresProf[0][NBin-b] = -x/UNIT_L; + Bondi_Soliton_PresProf[1][NBin-b] = y[0]; } gsl_odeiv2_driver_free (d); -} // void SOL_SetDensProfileTable() +} // void Soliton_SetDensProfileTable() //------------------------------------------------------------------------------------------------------- @@ -733,8 +735,8 @@ void End_Bondi() { delete [] Bondi_HSE_DensProf[v]; Bondi_HSE_DensProf[v] = NULL; - delete [] Bondi_SOL_PresProf[v]; - Bondi_SOL_PresProf[v] = NULL; + delete [] Bondi_Soliton_PresProf[v]; + Bondi_Soliton_PresProf[v] = NULL; } } // FUNCTION : End_Bondi From c2f36e5427ddac95297bdc778e1fddc5b9605a47 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Mon, 25 Oct 2021 11:53:48 +0800 Subject: [PATCH 23/59] Add bondi initial condition --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 63 ++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 8db7b4e942..bec133af56 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -85,6 +85,14 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr double Bondi_Soliton_m22; double Bondi_Soliton_rc; static double *Bondi_Soliton_PresProf[2] = { NULL, NULL }; // pressure profile tabke: [0/1] = [radius/density] + +// parameters for bondi initial condition + bool Bondi_Init; +static char Bondi_Init_Filename[1000]; +static double *Bondi_Init_Data=NULL; +static int Bondi_Init_bin; + double *Bondi_Init_Prof_r, *Bondi_Init_Prof_d, *Bondi_Init_Prof_v, *Bondi_Init_Prof_p; + // ======================================================================================= @@ -252,6 +260,9 @@ void SetParameter() ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Init", &Bondi_Init, false, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_Init_Filename", Bondi_Init_Filename, Useless_str, Useless_str, Useless_str ); + ReadPara->Read( FileName ); delete ReadPara; @@ -368,11 +379,36 @@ void SetParameter() } } // if ( Bondi_HSE ) - if ( Bondi_Soliton ){ + if ( Bondi_Soliton ) + { Bondi_Soliton_rc *= UnitExt_L/UNIT_L; Soliton_SetPresProfileTable(); } + if ( Bondi_Init ) + { + bool RowMajor_No = false; + const bool AllocMem_Yes = true; + const int NCol = 4;// Radius, Density, Velocity, MachNumber + const int Col[NCol] = {1,3,5,6}; + Bondi_Init_bin = Aux_LoadTable( Bondi_Init_Data, Bondi_Init_Filename, NCol, Col, RowMajor_No, AllocMem_Yes ); + + // Convert to code unit and mach number->pressure + Bondi_Init_Prof_r = Bondi_Init_Data + 0*Bondi_Init_bin; + Bondi_Init_Prof_d = Bondi_Init_Data + 1*Bondi_Init_bin; + Bondi_Init_Prof_v = Bondi_Init_Data + 2*Bondi_Init_bin; + Bondi_Init_Prof_p = Bondi_Init_Data + 3*Bondi_Init_bin; + + for( int b=0; b a helper macro PRINT_WARNING is defined in TestProb.h const long End_Step_Default = __INT_MAX__; @@ -431,7 +467,12 @@ void SetParameter() Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); if( Bondi_Soliton ) { Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); - Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc );} + Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc );} + + Aux_Message( stdout, " Bondi_Init = %s\n", (Bondi_Init)?"YES":"NO" ); + if( Bondi_Init ){ + Aux_Message( stdout, " Bondi_Init_Filename = %s\n", Bondi_Init_Filename );} + Aux_Message( stdout, "=============================================================================\n" ); } // if ( MPI_Rank == 0 ) @@ -511,6 +552,24 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co else Aux_Error( ERROR_INFO, "unsupported Bondi_HSE_Mode (%d) !!\n", Bondi_HSE_Mode ); } // if ( Bondi_HSE ) + else if ( Bondi_Init ) + { + // Set Initial Condition + const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); + Dens = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_d, r )/UNIT_D; + Pres = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_p, r )/UNIT_P; + + const double vmag = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_v, r )/UNIT_V; + //const double dh = amr->dh[lv]; + //const real dv = CUBE(dh); + const double dx = x-amr->BoxCenter[0]; + const double dy = y-amr->BoxCenter[1]; + const double dz = z-amr->BoxCenter[2]; + MomX = -Dens*vmag*dx/r; + MomY = -Dens*vmag*dy/r; + MomZ = -Dens*vmag*dz/r; + //Aux_Message( stdout, "%13.7e %13.7e %13.7e\n", MomX, MomY, MomZ ); + } /*else if ( Bondi_Soliton ) { From 931d50e108b4fde6e30698cd2ee5a7aa617cc60c Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 16 Nov 2021 20:58:49 +0800 Subject: [PATCH 24/59] add bondi initial condition --- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index bec133af56..18fb7b3894 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -404,7 +404,6 @@ void SetParameter() Bondi_Init_Prof_r[b] *= Const_kpc/UNIT_L; Bondi_Init_Prof_d[b] *= 5.0e-25; // in cgs Bondi_Init_Prof_v[b] *= 1000*1e5; // in cm/s - if( b<10 ){ Aux_Message( stdout, " %13.7e\n", Bondi_Init_Prof_v[b]/UNIT_V ); } Bondi_Init_Prof_p[b] = SQR(Bondi_Init_Prof_v[b]/Bondi_Init_Prof_p[b])*Bondi_Init_Prof_d[b]/GAMMA; } } From e644548575eecf2cd2dd52fe6bf2b18030b4259f Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 8 Mar 2022 15:02:37 +0800 Subject: [PATCH 25/59] Saving some change --- src/Auxiliary/Aux_LoadTable.cpp | 9 ++--- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 33 +++++++++++-------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/Auxiliary/Aux_LoadTable.cpp b/src/Auxiliary/Aux_LoadTable.cpp index 9408656ef9..c81f1486bb 100644 --- a/src/Auxiliary/Aux_LoadTable.cpp +++ b/src/Auxiliary/Aux_LoadTable.cpp @@ -1,7 +1,7 @@ #include "GAMER.h" #define COMMENT_SYM '#' // comment symbol -#define DELIMITER " \t" // delimiter characters used by strtok() +#define DELIMITER "\t" // delimiter characters used by strtok() @@ -67,7 +67,6 @@ int Aux_LoadTable( T *&Data, const char *FileName, const int NCol_Target, const // skip empty lines or lines starting with the comment symbol // --> must check NCheck < 0 as well since EOF is negative if ( NCol_Check <= 0 || FirstItem[0] == COMMENT_SYM ) continue; - // loop over all tokens seperated by the delimiter characters NthCol = 0; NCol_Match = 0; @@ -86,8 +85,10 @@ int Aux_LoadTable( T *&Data, const char *FileName, const int NCol_Target, const // check if we find all target columns if ( NCol_Match != NCol_Target ) - Aux_Error( ERROR_INFO, "Number of matched columns (%d) != expect (%d) at row %d !!\n", - NCol_Match, NCol_Target, NthRow-1 ); + { + Aux_Error( ERROR_INFO, "Number of matched columns (%d) != expect (%d) at row %d !!\n %s\n", + NCol_Match, NCol_Target, NthRow-1 , FirstItem); + } NRow_Match ++; } // while ( fgets(Line, MAX_STRING, File) != NULL ) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 18fb7b3894..9429cdc5c6 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -385,7 +385,7 @@ void SetParameter() Soliton_SetPresProfileTable(); } - if ( Bondi_Init ) + /*if ( Bondi_Init ) { bool RowMajor_No = false; const bool AllocMem_Yes = true; @@ -406,7 +406,7 @@ void SetParameter() Bondi_Init_Prof_v[b] *= 1000*1e5; // in cm/s Bondi_Init_Prof_p[b] = SQR(Bondi_Init_Prof_v[b]/Bondi_Init_Prof_p[b])*Bondi_Init_Prof_d[b]/GAMMA; } - } + }*/ // (4) reset other general-purpose parameters // --> a helper macro PRINT_WARNING is defined in TestProb.h @@ -551,7 +551,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co else Aux_Error( ERROR_INFO, "unsupported Bondi_HSE_Mode (%d) !!\n", Bondi_HSE_Mode ); } // if ( Bondi_HSE ) - else if ( Bondi_Init ) + /*else if ( Bondi_Init ) { // Set Initial Condition const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); @@ -568,17 +568,16 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co MomY = -Dens*vmag*dy/r; MomZ = -Dens*vmag*dz/r; //Aux_Message( stdout, "%13.7e %13.7e %13.7e\n", MomX, MomY, MomZ ); - } + }*/ - /*else if ( Bondi_Soliton ) + else if ( Bondi_Init ) { const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); -#ifdef Plummer - Dens = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(Bondi_Soliton_rc*UNIT_L))*pow(1+SQR(r/Bondi_Soliton_rc),-2.5); -#else - Dens = 1.945*pow( Bondi_Soliton_m22*1e1, -2.0 )*pow( Bondi_Soliton_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+(9.1e-2)*SQR(r/Bondi_Soliton_rc), 8.0 ); - Dens *= Const_Msun/CUBE(Const_pc); -#endif + double fit_m = 5.73502480e+07; + double fit_a = 2.46144199e-01; + Dens = 3*fit_m*Const_Msun/(4*3.14159265*CUBE(fit_a*Const_kpc))*pow(1+SQR(r/fit_a),-2.5); + //Dens = 1.945*pow( Bondi_Soliton_m22*1e1, -2.0 )*pow( Bondi_Soliton_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+(9.1e-2)*SQR(r/Bondi_Soliton_rc), 8.0 ); + //Dens *= Const_Msun/CUBE(Const_pc); //double rho0 = 1e-20; //double temp = 1e10; //double A = Const_kB/(0.62/Const_NA*1e3)*temp; @@ -595,7 +594,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co //Pres = A*rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L)); Pres *= 1/(UNIT_P); //if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); - }*/ + } // uniform background @@ -732,14 +731,20 @@ int odefunc ( double x, const double y[], double f[], void *params) x /= Const_kpc; double rc = Bondi_Soliton_rc*UNIT_L/Const_kpc; double m22 = Bondi_Soliton_m22; -#ifdef Plummer + + double fit_m = 5.73502480e+07; + double fit_a = 2.46144199e-01; + double rho = 3*fit_m*Const_Msun/(4*3.14159265*CUBE(fit_a*Const_kpc))*pow(1+SQR(x/fit_a),-2.5); + double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); + double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; +/*#ifdef Plummer double rho = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(rc*Const_kpc))*pow(1+SQR(x/rc),-2.5); double M = Bondi_MassBH*UNIT_M*CUBE(x)/pow(SQR(x)+SQR(rc),1.5); #else double rho = 1.945*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+(9.1e-2)*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; -#endif +#endif*/ f[0] = -Const_NewtonG*M*rho/SQR(x*Const_kpc); return GSL_SUCCESS; From d5f4fe12e17517ee189c5e47f4a4cc42db0210ef Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 20 Apr 2022 10:50:38 +0800 Subject: [PATCH 26/59] Support input Mhalo and z to calculate rc --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 86c9ccc371..ab1246d42e 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -84,6 +84,8 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr bool Bondi_Soliton; double Bondi_Soliton_m22; double Bondi_Soliton_rc; + double Bondi_Soliton_MassHalo; + double Bondi_Soliton_Redshift; static double *Bondi_Soliton_PresProf[2] = { NULL, NULL }; // pressure profile tabke: [0/1] = [radius/density] // parameters for bondi initial condition @@ -259,6 +261,9 @@ void SetParameter() ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_Redshift", &Bondi_Soliton_Redshift, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Init", &Bondi_Init, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Init_Filename", Bondi_Init_Filename, Useless_str, Useless_str, Useless_str ); @@ -381,6 +386,21 @@ void SetParameter() if ( Bondi_Soliton ) { + if( Bondi_Soliton_rc < 0.0 ){ + double z = Bondi_Soliton_Redshift; + double Mh = Bondi_Soliton_MassHalo; + double H0 = 67.66; + double Om0 = 0.3111; + H0 = H0*1e5/(Const_kpc*1e3); + double a0 = Om0*SQR(H0)/(2.47e-5*SQR(1e7/(Const_kpc*1e3))); + double H_H0_z = 1/(1-Om0*(1-pow(1+z,3.0)*(1+z+a0)/a0)); + double Om_z = Om0*pow(1+z,3.0)*H_H0_z; + double Om_0 = Om0/(1-Om0*(1-(1+a0)/a0)); + double kiz_z = (18*SQR(3.14159265)+82*(Om_z-1)-39*SQR(Om_z-1))/Om_z; + double kiz_0 = (18*SQR(3.14159265)+82*(Om_0-1)-39*SQR(Om_0-1))/Om_0; + + Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow(1+z,-1.0/2.0)*pow(kiz_z/kiz_0,-1.0/6.0)*pow(Mh/1e9,-1.0/3.0); + } Bondi_Soliton_rc *= UnitExt_L/UNIT_L; Soliton_SetPresProfileTable(); } @@ -466,7 +486,10 @@ void SetParameter() Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); if( Bondi_Soliton ) { Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); - Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc );} + Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_Soliton_MassHalo = %13.7e Msun\n", Bondi_Soliton_MassHalo ); + Aux_Message( stdout, " Bondi_Soliton_Redshift = %13.7e\n", Bondi_Soliton_Redshift );} + Aux_Message( stdout, " Bondi_Init = %s\n", (Bondi_Init)?"YES":"NO" ); if( Bondi_Init ){ @@ -573,11 +596,13 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co else if ( Bondi_Init ) { const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); - double fit_m = 5.73502480e+07; - double fit_a = 2.46144199e-01; - Dens = 3*fit_m*Const_Msun/(4*3.14159265*CUBE(fit_a*Const_kpc))*pow(1+SQR(r/fit_a),-2.5); - //Dens = 1.945*pow( Bondi_Soliton_m22*1e1, -2.0 )*pow( Bondi_Soliton_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+(9.1e-2)*SQR(r/Bondi_Soliton_rc), 8.0 ); - //Dens *= Const_Msun/CUBE(Const_pc); + //double fit_m = 5.73502480e+07; + //double fit_a = 2.46144199e-01; + //Dens = 3*fit_m*Const_Msun/(4*3.14159265*CUBE(fit_a*Const_kpc))*pow(1+SQR(r/fit_a),-2.5); + + Dens = 1.945*pow( Bondi_Soliton_m22*1e1, -2.0 )*pow( Bondi_Soliton_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+(9.1e-2)*SQR(r/Bondi_Soliton_rc), 8.0 ); + Dens *= Const_Msun/CUBE(Const_pc); + //double rho0 = 1e-20; //double temp = 1e10; //double A = Const_kB/(0.62/Const_NA*1e3)*temp; @@ -732,19 +757,14 @@ int odefunc ( double x, const double y[], double f[], void *params) double rc = Bondi_Soliton_rc*UNIT_L/Const_kpc; double m22 = Bondi_Soliton_m22; - double fit_m = 5.73502480e+07; - double fit_a = 2.46144199e-01; - double rho = 3*fit_m*Const_Msun/(4*3.14159265*CUBE(fit_a*Const_kpc))*pow(1+SQR(x/fit_a),-2.5); - double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); - double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; /*#ifdef Plummer double rho = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(rc*Const_kpc))*pow(1+SQR(x/rc),-2.5); double M = Bondi_MassBH*UNIT_M*CUBE(x)/pow(SQR(x)+SQR(rc),1.5); -#else +#else*/ double rho = 1.945*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+(9.1e-2)*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; -#endif*/ +/*#endif*/ f[0] = -Const_NewtonG*M*rho/SQR(x*Const_kpc); return GSL_SUCCESS; From 7317aa7639e86db2c31dff7f8ae051729469ce9f Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 20 Apr 2022 11:08:45 +0800 Subject: [PATCH 27/59] remove other density profile --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index ab1246d42e..e1c9a338c3 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -596,17 +596,8 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co else if ( Bondi_Init ) { const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); - //double fit_m = 5.73502480e+07; - //double fit_a = 2.46144199e-01; - //Dens = 3*fit_m*Const_Msun/(4*3.14159265*CUBE(fit_a*Const_kpc))*pow(1+SQR(r/fit_a),-2.5); - Dens = 1.945*pow( Bondi_Soliton_m22*1e1, -2.0 )*pow( Bondi_Soliton_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+(9.1e-2)*SQR(r/Bondi_Soliton_rc), 8.0 ); Dens *= Const_Msun/CUBE(Const_pc); - - //double rho0 = 1e-20; - //double temp = 1e10; - //double A = Const_kB/(0.62/Const_NA*1e3)*temp; - //Dens = rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L)); Dens *= 1/UNIT_D; const double *Table_R = Bondi_Soliton_PresProf[0]; @@ -616,9 +607,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co Aux_Error( ERROR_INFO, "%.3e, %.3e, %.3e\n",Table_R[0],Table_R[1000-1],r); Aux_Error( ERROR_INFO, "Wrong Table\n"); } - //Pres = A*rho0/SQR(cosh(sqrt(2*3.14159265*Const_NewtonG*rho0/A)*z*UNIT_L)); Pres *= 1/(UNIT_P); - //if( r<5e-3 ) Aux_Message( stderr, "%.3e, %.3e, %.3e\n", r, Pres, Bondi_P0 ); } @@ -757,14 +746,9 @@ int odefunc ( double x, const double y[], double f[], void *params) double rc = Bondi_Soliton_rc*UNIT_L/Const_kpc; double m22 = Bondi_Soliton_m22; -/*#ifdef Plummer - double rho = 3*Bondi_MassBH*UNIT_M/(4*3.14159265*CUBE(rc*Const_kpc))*pow(1+SQR(x/rc),-2.5); - double M = Bondi_MassBH*UNIT_M*CUBE(x)/pow(SQR(x)+SQR(rc),1.5); -#else*/ double rho = 1.945*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+(9.1e-2)*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; -/*#endif*/ f[0] = -Const_NewtonG*M*rho/SQR(x*Const_kpc); return GSL_SUCCESS; From 76ba6f0ad47d3fef4274df274dc339d3e7434862 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Thu, 23 Jun 2022 10:43:52 +0800 Subject: [PATCH 28/59] Before adding Bondi_Soliton_t --- src/Makefile | 7 +++++-- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Makefile b/src/Makefile index b926b3f1e0..5688f562d7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -55,7 +55,8 @@ ifeq "$(filter -DMODEL=HYDRO, $(SIMU_OPTION))" "-DMODEL=HYDRO" # hydrodynamic scheme: RTVD/MHM/MHM_RP/CTU # --> must be set when MODEL=HYDRO # --> MHD only supports MHM_RP and CTU -SIMU_OPTION += -DFLU_SCHEME=CTU +SIMU_OPTION += -DFLU_SCHEME=MHM +#SIMU_OPTION += -DFLU_SCHEME=CTU # scheme of spatial data reconstruction: PLM/PPM (piecewise-linear/piecewise-parabolic) # --> useless for RTVD @@ -65,7 +66,9 @@ SIMU_OPTION += -DLR_SCHEME=PPM # --> pure hydro: EXACT/ROE/HLLE/HLLC(*); MHD: ROE/HLLE/HLLD(*); # (recommended solvers are highlighted by *) # --> useless for RTVD -SIMU_OPTION += -DRSOLVER=ROE +SIMU_OPTION += -DRSOLVER=HLLC +#SIMU_OPTION += -DRSOLVER=ROE + # dual energy formalism: DE_ENPY/DE_EINT (evolve entropy or internal energy) # --> DE_EINT is not supported yet; useless for RTVD diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index e1c9a338c3..8d4756c461 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -83,6 +83,7 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr bool Bondi_void; bool Bondi_Soliton; double Bondi_Soliton_m22; + double Bondi_Soliton_t; double Bondi_Soliton_rc; double Bondi_Soliton_MassHalo; double Bondi_Soliton_Redshift; @@ -260,6 +261,7 @@ void SetParameter() ReadPara->Add( "Bondi_void", &Bondi_void, true, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_Redshift", &Bondi_Soliton_Redshift, -1.0, NoMin_double, NoMax_double ); @@ -402,6 +404,7 @@ void SetParameter() Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow(1+z,-1.0/2.0)*pow(kiz_z/kiz_0,-1.0/6.0)*pow(Mh/1e9,-1.0/3.0); } Bondi_Soliton_rc *= UnitExt_L/UNIT_L; + Bondi_Soliton_t *= Bondi_TimeB; Soliton_SetPresProfileTable(); } @@ -486,6 +489,7 @@ void SetParameter() Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); if( Bondi_Soliton ) { Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); + Aux_Message( stdout, " Bondi_Soliton_t = %13.7e (%13.7e Myr)\n", Bondi_Soliton_t, Bondi_Soliton_t*UNIT_T/Const_Myr ); Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc ); Aux_Message( stdout, " Bondi_Soliton_MassHalo = %13.7e Msun\n", Bondi_Soliton_MassHalo ); Aux_Message( stdout, " Bondi_Soliton_Redshift = %13.7e\n", Bondi_Soliton_Redshift );} From 845fbae15349ee65e941fc7a7227d09fb8c3f76c Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jun 2022 23:05:15 +0800 Subject: [PATCH 29/59] Pass time to SetExtAccAuxArray_Bondi() --- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index c2b0c5a553..5a978a3e31 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -91,7 +91,7 @@ static void HSE_SetDensProfileTable(); // the former is not defined in TestProb.h (because it's rarely required) extern void (*Flu_ResetByUser_API_Ptr)( const int lv, const int FluSg, const double TimeNew, const double dt ); -void SetExtAccAuxArray_Bondi( double [] ); +void SetExtAccAuxArray_Bondi( double [], const double ); @@ -111,7 +111,7 @@ void SetExtAccAuxArray_Bondi( double [] ); void Poi_UserWorkBeforePoisson_Bondi( const double Time, const int lv ) { - SetExtAccAuxArray_Bondi( ExtAcc_AuxArray ); + SetExtAccAuxArray_Bondi( ExtAcc_AuxArray, Time ); # ifdef GPU CUAPI_SetConstMemory_ExtAccPot(); From 28a2cc2b2697b93c0dab68fca024c5170e34c0e5 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Tue, 28 Jun 2022 23:37:38 +0800 Subject: [PATCH 30/59] save before merge --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index d7acbdc58b..7550ae1609 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -24,7 +24,7 @@ extern double Bondi_Soften_R; extern bool Bondi_Soliton; extern double Bondi_Soliton_m22; extern double Bondi_Soliton_rc; - +extern double Bondi_Soliton_t; //------------------------------------------------------------------------------------------------------- // Function : SetExtAccAuxArray_Bondi @@ -53,6 +53,7 @@ void SetExtAccAuxArray_Bondi( double AuxArray[] ) AuxArray[7] = Bondi_Soliton_rc; AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; AuxArray[9] = UNIT_L/Const_kpc; + AuxArray[10] = Bondi_Soliton_t; } } // FUNCTION : SetExtAccAuxArray_Bondi @@ -98,13 +99,15 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub const real rc = (real)UserArray[7]; // In code unit or kpc const real Coeff = (real)UserArray[8]; const real UNIT_L = (real)UserArray[9]; + const real tc = (real)UserArray[10]; #ifdef Plummer double M = GM*CUBE(r)/pow(SQR(r)+SQR(rc),1.5); #else double a = sqrt(pow(2.0,1.0/8.0)-1)*(r/rc); double M = 4.17e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); - M *= Coeff; + if( tc<0 ){ M *= Coeff; } + else{ M*= Coeff*2/3.14159265*atan(Time/tc); } #endif GM += M; } From 37eacd04e9162f78e1f7dd3df3a8021cc4f0107a Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 29 Jun 2022 09:28:18 +0800 Subject: [PATCH 31/59] change where we place arctan --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 0cdab21a8c..1b3f790150 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -54,7 +54,10 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) AuxArray[7] = Bondi_Soliton_rc; AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; AuxArray[9] = UNIT_L/Const_kpc; - AuxArray[10] = Bondi_Soliton_t; + if( Bondi_Soliton_t > 0 ) + { + AuxArray[8] *= 2/3.14159265*atan(Time/Bondi_Soliton_t); + } } } // FUNCTION : SetExtAccAuxArray_Bondi @@ -100,15 +103,13 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub const real rc = (real)UserArray[7]; // In code unit or kpc const real Coeff = (real)UserArray[8]; const real UNIT_L = (real)UserArray[9]; - const real tc = (real)UserArray[10]; #ifdef Plummer double M = GM*CUBE(r)/pow(SQR(r)+SQR(rc),1.5); #else double a = sqrt(pow(2.0,1.0/8.0)-1)*(r/rc); double M = 4.17e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); - if( tc<0 ){ M *= Coeff; } - else{ M*= Coeff*2/3.14159265*atan(Time/tc); } + M *= Coeff; #endif GM += M; } From c8fc14a4e55eb0a6678badde789de89941eea0c6 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Thu, 30 Jun 2022 14:17:45 +0800 Subject: [PATCH 32/59] revise real/macro functions --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 1b3f790150..c8765dcad1 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -56,7 +56,7 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) AuxArray[9] = UNIT_L/Const_kpc; if( Bondi_Soliton_t > 0 ) { - AuxArray[8] *= 2/3.14159265*atan(Time/Bondi_Soliton_t); + AuxArray[8] *= 2/(real)3.14159265*ATAN(Time/Bondi_Soliton_t); } } @@ -107,8 +107,8 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub #ifdef Plummer double M = GM*CUBE(r)/pow(SQR(r)+SQR(rc),1.5); #else - double a = sqrt(pow(2.0,1.0/8.0)-1)*(r/rc); - double M = 4.17e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a)); + real a = SQRT(POW(2.0,1.0/8.0)-1)*(r/rc); + real M = (real)4.17e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*POW(SQR(a)+1, 7.0))*((real)3465*POW(a,13.0)+(real)23100*POW(a,11.0)+(real)65373*POW(a,9.0)+(real)101376*POW(a,7.0)+(real)92323*POW(a,5.0)+(real)48580*POW(a,3.0)-(real)3465*a+(real)3465*POW(SQR(a)+1, 7.0)*ATAN(a)); M *= Coeff; #endif GM += M; From 33175ec2aa436a1497bded827c7196b3f8658607 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 20 Jul 2022 02:26:01 +0800 Subject: [PATCH 33/59] save before add linear --- src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 5 +++-- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index ca667b6bd4..de388602be 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -19,7 +19,7 @@ extern double Bondi_SinkEt; extern int Bondi_SinkNCell; extern bool Bondi_void; - +extern bool Bondi_dynBH; //------------------------------------------------------------------------------------------------------- // Function : Flu_ResetByUser_Func_Bondi @@ -209,7 +209,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const double Time } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD ); - Bondi_MassBH += SinkMass_OneSubStep_AllRank; + + if( Bondi_dynBH ){ Bondi_MassBH += SinkMass_OneSubStep_AllRank; } } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index f0883ebdbc..f56d01ea42 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -81,6 +81,7 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr // parameters for soliton bool Bondi_void; + bool Bondi_dynBH; bool Bondi_Soliton; double Bondi_Soliton_m22; double Bondi_Soliton_t; @@ -263,6 +264,7 @@ void SetParameter() ReadPara->Add( "Bondi_HSE_Beta_Rcore", &Bondi_HSE_Beta_Rcore, -1.0, Eps_double, NoMax_double ); ReadPara->Add( "Bondi_void", &Bondi_void, true, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_dynBH", &Bondi_dynBH, true, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double ); @@ -489,7 +491,9 @@ void SetParameter() Aux_Message( stdout, " Bondi_HSE_Beta = %13.7e\n", Bondi_HSE_Beta ); Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D ); Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); } - + + Aux_Message( stdout, " Bondi_void = %s\n", (Bondi_void)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_dynBH = %s\n", (Bondi_dynBH)?"YES":"NO" ); Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); if( Bondi_Soliton ) { Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); From 48e3be82ae0776a70ac7405a712384c45363efc7 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Mon, 25 Jul 2022 07:06:31 +0800 Subject: [PATCH 34/59] add linear function --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 14 ++++++++++++-- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index c8765dcad1..f18188211e 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -24,6 +24,7 @@ extern double Bondi_Soften_R; extern bool Bondi_Soliton; extern double Bondi_Soliton_m22; extern double Bondi_Soliton_rc; +extern int Bondi_Soliton_type; extern double Bondi_Soliton_t; //------------------------------------------------------------------------------------------------------- @@ -54,9 +55,18 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) AuxArray[7] = Bondi_Soliton_rc; AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; AuxArray[9] = UNIT_L/Const_kpc; - if( Bondi_Soliton_t > 0 ) + if( Bondi_Soliton_type > 0 ) { - AuxArray[8] *= 2/(real)3.14159265*ATAN(Time/Bondi_Soliton_t); + switch(Bondi_Soliton_type) + { + case 1: + AuxArray[8] *= 2/(real)3.14159265*ATAN(Time/Bondi_Soliton_t); + break; + case 2: + if( Time < Bondi_Soliton_t ) + AuxArray[8] *= Time/Bondi_Soliton_t; + break; + } } } diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index f56d01ea42..ab245660a5 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -84,6 +84,7 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr bool Bondi_dynBH; bool Bondi_Soliton; double Bondi_Soliton_m22; + int Bondi_Soliton_type; double Bondi_Soliton_t; double Bondi_Soliton_rc; double Bondi_Soliton_MassHalo; @@ -267,6 +268,7 @@ void SetParameter() ReadPara->Add( "Bondi_dynBH", &Bondi_dynBH, true, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 0, NoMin_int, NoMax_int ); ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); @@ -497,6 +499,7 @@ void SetParameter() Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); if( Bondi_Soliton ) { Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); + Aux_Message( stdout, " Bondi_Soliton_type = %d\n", Bondi_Soliton_type ); Aux_Message( stdout, " Bondi_Soliton_t = %13.7e (%13.7e Myr)\n", Bondi_Soliton_t, Bondi_Soliton_t*UNIT_T/Const_Myr ); Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc ); Aux_Message( stdout, " Bondi_Soliton_MassHalo = %13.7e Msun\n", Bondi_Soliton_MassHalo ); From 38ddaced58cfb1f58bfb3fc6ec0ac47edc60ed36 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Mon, 25 Jul 2022 11:14:58 +0800 Subject: [PATCH 35/59] add smooth function and sigmoid --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index f18188211e..a814fab746 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -59,13 +59,21 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) { switch(Bondi_Soliton_type) { - case 1: + case 1: // arctan function AuxArray[8] *= 2/(real)3.14159265*ATAN(Time/Bondi_Soliton_t); break; - case 2: + case 2: // linear function if( Time < Bondi_Soliton_t ) AuxArray[8] *= Time/Bondi_Soliton_t; break; + case 3: // smooth step function + if( Time < Bondi_Soliton_t ) + AuxArray[8] *= 3*SQR(Time/Bondi_Soliton_t)-2*CUBE(Time/Bondi_Soliton_t); + break; + case 4: // sigmoid + AuxArray[8] *= 1/(1+exp(-Time+Bondi_Soliton_t/2)); + break; + } } } From e984454647d4ea9817e9aaa6837153a04f5e78d4 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Mon, 25 Jul 2022 20:55:21 +0800 Subject: [PATCH 36/59] modify linear/smooth/sigmoid function --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index a814fab746..9d82619d5a 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -64,14 +64,14 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) break; case 2: // linear function if( Time < Bondi_Soliton_t ) - AuxArray[8] *= Time/Bondi_Soliton_t; + AuxArray[8] *= Time/(2*Bondi_Soliton_t); break; case 3: // smooth step function if( Time < Bondi_Soliton_t ) - AuxArray[8] *= 3*SQR(Time/Bondi_Soliton_t)-2*CUBE(Time/Bondi_Soliton_t); + AuxArray[8] *= 3*SQR(Time/Bondi_Soliton_t/2)-2*CUBE(Time/Bondi_Soliton_t/2); break; case 4: // sigmoid - AuxArray[8] *= 1/(1+exp(-Time+Bondi_Soliton_t/2)); + AuxArray[8] *= 1/(1+exp(-Time*log(3)/Bondi_Soliton_t)); break; } From d4b6515b4a7b29fb0c6aa95a7bdc4fb8757edb44 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 27 Jul 2022 09:57:55 +0800 Subject: [PATCH 37/59] re-check functions --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 9d82619d5a..ee19b98bab 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -71,7 +71,7 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) AuxArray[8] *= 3*SQR(Time/Bondi_Soliton_t/2)-2*CUBE(Time/Bondi_Soliton_t/2); break; case 4: // sigmoid - AuxArray[8] *= 1/(1+exp(-Time*log(3)/Bondi_Soliton_t)); + AuxArray[8] *= 2/(1+exp(-Time*log(3)/Bondi_Soliton_t))-1; break; } From e93a2c099d185582c3719a58cdebfab959c8feb8 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Wed, 3 Aug 2022 03:49:01 +0800 Subject: [PATCH 38/59] add tanh function --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 29cbce0bd9..8f8ab7b011 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -64,15 +64,18 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) break; case 2: // linear function if( Time < Bondi_Soliton_t ) - AuxArray[8] *= Time/(2*Bondi_Soliton_t); + AuxArray[8] *= Time/Bondi_Soliton_t; break; case 3: // smooth step function if( Time < Bondi_Soliton_t ) - AuxArray[8] *= 3*SQR(Time/Bondi_Soliton_t/2)-2*CUBE(Time/Bondi_Soliton_t/2); + AuxArray[8] *= 3*SQR(Time/Bondi_Soliton_t)-2*CUBE(Time/Bondi_Soliton_t); break; case 4: // sigmoid AuxArray[8] *= 2/(1+exp(-Time*log(3)/Bondi_Soliton_t))-1; break; + case 5: // tanh + AuxArray[8] *= tanh(Time/Bondi_Soliton_t); + break; } } From 894e0d5c082f457bac31cd25bbcb441e3c3abd31 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Mon, 8 May 2023 22:15:31 +0800 Subject: [PATCH 39/59] save before merge --- src/Makefile | 20 +++++++------------- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 3 +++ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/Makefile b/src/Makefile index 7b86825b14..e3f4e2e3fa 100644 --- a/src/Makefile +++ b/src/Makefile @@ -72,7 +72,7 @@ SIMU_OPTION += -DRSOLVER=HLLC # dual energy formalism: DE_ENPY/DE_EINT (evolve entropy or internal energy) # --> DE_EINT is not supported yet; useless for RTVD -SIMU_OPTION += -DDUAL_ENERGY=DE_ENPY +#SIMU_OPTION += -DDUAL_ENERGY=DE_ENPY # number of user-defined passively advected scalars # --> set it to 0 or comment it out if none is required @@ -87,11 +87,11 @@ SIMU_OPTION += -DNCOMP_PASSIVE_USER=0 # equation of state: EOS_GAMMA/EOS_ISOTHERMAL/EOS_NUCLEAR/EOS_TABULAR/EOS_USER # --> must be set when MODEL=HYDRO; must also enable BAROTROPIC_EOS for EOS_ISOTHERMAL -SIMU_OPTION += -DEOS=EOS_GAMMA +SIMU_OPTION += -DEOS=EOS_ISOTHERMAL#-DEOS=EOS_GAMMA # whether or not the EOS set above is barotropic # --> mandatory for EOS_ISOTHERMAL; optional for EOS_TABULAR/EOS_USER -#SIMU_OPTION += -DBAROTROPIC_EOS +SIMU_OPTION += -DBAROTROPIC_EOS # (b-2) ELBDM options @@ -170,10 +170,10 @@ SIMU_OPTION += -DPATCH_SIZE=8 # GPU acceleration # --> must set GPU_ARCH as well -SIMU_OPTION += -DGPU +#SIMU_OPTION += -DGPU # GPU architecture: FERMI/KEPLER/MAXWELL/PASCAL/VOLTA/TURING/AMPERE -SIMU_OPTION += -DGPU_ARCH=TURING +#SIMU_OPTION += -DGPU_ARCH=TURING # debug mode #SIMU_OPTION += -DGAMER_DEBUG @@ -189,7 +189,7 @@ SIMU_OPTION += -DTIMING #SIMU_OPTION += -DTIMING_SOLVER # double precision -#SIMU_OPTION += -DFLOAT8 +SIMU_OPTION += -DFLOAT8 # serial mode (in which no MPI libraries are required) # --> must disable LOAD_BALANCE @@ -246,16 +246,10 @@ CXX = $(MPI_PATH)/bin/mpicxx # MPI compiler CXXFLAG = -g -O3 # general flags ##CXXFLAG = -g -O3 -std=c++11 #-gxx-name=YOUR_G++ ##CXXFLAG = -g -fast -<<<<<<< HEAD CXXFLAG += -w1 # warning flags OPENMPFLAG = -fopenmp # openmp flag LIB = -limf # libraries and linker flags -======= -# CXXFLAG += -w1 # warning flags # CXXFLAG += -fp-model precise # disable optimizations that are not value-safe -# OPENMPFLAG = -fopenmp # openmp flag -# LIB = -limf # libraries and linker flags ->>>>>>> 21ddd5e454b54c3fd4b239cfa845588aeec73e4e # ## for debug only ifeq "$(filter -DGAMER_DEBUG, $(SIMU_OPTION))" "-DGAMER_DEBUG" @@ -290,7 +284,7 @@ endif #CXXFLAG += -fstack-protector-all #CXXFLAG += -fsanitize=undefined -fsanitize=address #LIB += -fsanitize=undefined -fsanitize=address -endif +#endif # suppress warning when OpenMP is disabled #ifeq "$(filter -DOPENMP, $(SIMU_OPTION))" "" diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 29cbce0bd9..033cdecaa7 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -73,6 +73,9 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) case 4: // sigmoid AuxArray[8] *= 2/(1+exp(-Time*log(3)/Bondi_Soliton_t))-1; break; + case 5: // tanh + AuxArray[8] *= tanh(Time/Bondi_Soliton_t); + break; } } From 23a13a6f387b61dad0e4034e129e3873321d9de8 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Mon, 8 May 2023 22:39:47 +0800 Subject: [PATCH 40/59] save after merge --- src/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Makefile b/src/Makefile index efedafde44..eb8c931eac 100644 --- a/src/Makefile +++ b/src/Makefile @@ -87,11 +87,11 @@ SIMU_OPTION += -DNCOMP_PASSIVE_USER=0 # equation of state: EOS_GAMMA/EOS_ISOTHERMAL/EOS_NUCLEAR/EOS_TABULAR/EOS_USER # --> must be set when MODEL=HYDRO; must also enable BAROTROPIC_EOS for EOS_ISOTHERMAL -SIMU_OPTION += -DEOS=EOS_ISOTHERMAL#-DEOS=EOS_GAMMA +SIMU_OPTION += -DEOS=EOS_GAMMA # whether or not the EOS set above is barotropic # --> mandatory for EOS_ISOTHERMAL; optional for EOS_TABULAR/EOS_USER -SIMU_OPTION += -DBAROTROPIC_EOS +#SIMU_OPTION += -DBAROTROPIC_EOS # (b-2) ELBDM options @@ -173,10 +173,10 @@ SIMU_OPTION += -DPATCH_SIZE=8 # GPU acceleration # --> must set GPU_ARCH as well -#SIMU_OPTION += -DGPU +SIMU_OPTION += -DGPU # GPU architecture: FERMI/KEPLER/MAXWELL/PASCAL/VOLTA/TURING/AMPERE -#SIMU_OPTION += -DGPU_ARCH=TURING +SIMU_OPTION += -DGPU_ARCH=TURING # debug mode #SIMU_OPTION += -DGAMER_DEBUG @@ -192,7 +192,7 @@ SIMU_OPTION += -DTIMING #SIMU_OPTION += -DTIMING_SOLVER # double precision -SIMU_OPTION += -DFLOAT8 +#SIMU_OPTION += -DFLOAT8 # serial mode (in which no MPI libraries are required) # --> must disable LOAD_BALANCE From da8a1e6ae695eb098cc925ac934f82acb7084a47 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Sun, 13 Oct 2024 22:15:57 +0800 Subject: [PATCH 41/59] change Makefile --- src/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Makefile b/src/Makefile index eb8c931eac..fd92ac937c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -72,7 +72,7 @@ SIMU_OPTION += -DRSOLVER=HLLC # dual energy formalism: DE_ENPY/DE_EINT (evolve entropy or internal energy) # --> DE_EINT is not supported yet; useless for RTVD -#SIMU_OPTION += -DDUAL_ENERGY=DE_ENPY +SIMU_OPTION += -DDUAL_ENERGY=DE_ENPY # number of user-defined passively advected scalars # --> set it to 0 or comment it out if none is required @@ -161,7 +161,7 @@ endif # PARTICLE # ------------------------------------------------------------------------------------ # maximum number of AMR levels including the root level (level id = 0 ... NLEVEL-1) # --> must be set in any cases -SIMU_OPTION += -DNLEVEL=14 +SIMU_OPTION += -DNLEVEL=15 # maximum number of patches on each AMR level # --> must be set in any cases From 1f0f1b189d0aa5b474cf2ee990c8b72eeae1ee12 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Sun, 13 Oct 2024 22:37:24 +0800 Subject: [PATCH 42/59] uncomment Bondi_Init --- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index ede7b654e4..9b97780f88 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -416,7 +416,7 @@ void SetParameter() Soliton_SetPresProfileTable(); } - /*if ( Bondi_Init ) + if ( Bondi_Init ) { bool RowMajor_No = false; const bool AllocMem_Yes = true; @@ -437,7 +437,7 @@ void SetParameter() Bondi_Init_Prof_v[b] *= 1000*1e5; // in cm/s Bondi_Init_Prof_p[b] = SQR(Bondi_Init_Prof_v[b]/Bondi_Init_Prof_p[b])*Bondi_Init_Prof_d[b]/GAMMA; } - }*/ + } // (4) reset other general-purpose parameters // --> a helper macro PRINT_RESET_PARA is defined in Macro.h From c9e4af9c794dddb60d90fe3b25c19896e2d8dfa4 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Sun, 13 Oct 2024 22:39:11 +0800 Subject: [PATCH 43/59] uncomment Bondi_Init II --- src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 9b97780f88..5175391fee 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -589,7 +589,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co else Aux_Error( ERROR_INFO, "unsupported Bondi_HSE_Mode (%d) !!\n", Bondi_HSE_Mode ); } // if ( Bondi_HSE ) - /*else if ( Bondi_Init ) + else if ( Bondi_Init ) { // Set Initial Condition const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); @@ -606,7 +606,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co MomY = -Dens*vmag*dy/r; MomZ = -Dens*vmag*dz/r; //Aux_Message( stdout, "%13.7e %13.7e %13.7e\n", MomX, MomY, MomZ ); - }*/ + } else if ( Bondi_Init ) { From dfd13343e02384e52cb2061bb8e294d52b74cf6c Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Sun, 13 Oct 2024 22:43:38 +0800 Subject: [PATCH 44/59] set other file same for merge --- src/Auxiliary/Aux_LoadTable.cpp | 5 ++--- src/Miscellaneous/Mis_InterpolateFromTable.cpp | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Auxiliary/Aux_LoadTable.cpp b/src/Auxiliary/Aux_LoadTable.cpp index c81f1486bb..18335f3ab7 100644 --- a/src/Auxiliary/Aux_LoadTable.cpp +++ b/src/Auxiliary/Aux_LoadTable.cpp @@ -1,7 +1,7 @@ #include "GAMER.h" #define COMMENT_SYM '#' // comment symbol -#define DELIMITER "\t" // delimiter characters used by strtok() +#define DELIMITER " \t" // delimiter characters used by strtok() @@ -67,6 +67,7 @@ int Aux_LoadTable( T *&Data, const char *FileName, const int NCol_Target, const // skip empty lines or lines starting with the comment symbol // --> must check NCheck < 0 as well since EOF is negative if ( NCol_Check <= 0 || FirstItem[0] == COMMENT_SYM ) continue; + // loop over all tokens seperated by the delimiter characters NthCol = 0; NCol_Match = 0; @@ -85,10 +86,8 @@ int Aux_LoadTable( T *&Data, const char *FileName, const int NCol_Target, const // check if we find all target columns if ( NCol_Match != NCol_Target ) - { Aux_Error( ERROR_INFO, "Number of matched columns (%d) != expect (%d) at row %d !!\n %s\n", NCol_Match, NCol_Target, NthRow-1 , FirstItem); - } NRow_Match ++; } // while ( fgets(Line, MAX_STRING, File) != NULL ) diff --git a/src/Miscellaneous/Mis_InterpolateFromTable.cpp b/src/Miscellaneous/Mis_InterpolateFromTable.cpp index 9e0a2c60c4..96427f729c 100644 --- a/src/Miscellaneous/Mis_InterpolateFromTable.cpp +++ b/src/Miscellaneous/Mis_InterpolateFromTable.cpp @@ -65,6 +65,7 @@ T Mis_InterpolateFromTable( const int N, const T Table_x[], const T Table_y[], c } // FUNCTION : Mis_InterpolateFromTable + // explicit template instantiation template float Mis_InterpolateFromTable ( const int N, const float Table_x[], const float Table_y[], const float x ); template double Mis_InterpolateFromTable ( const int N, const double Table_x[], const double Table_y[], const double x ); From 258f1a811d3fc67a3cc3b9919a40e7acd2e858dd Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Sun, 13 Oct 2024 22:47:24 +0800 Subject: [PATCH 45/59] set other file same for merge II --- src/Auxiliary/Aux_LoadTable.cpp | 4 ++-- src/Makefile_base | 22 ---------------------- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/src/Auxiliary/Aux_LoadTable.cpp b/src/Auxiliary/Aux_LoadTable.cpp index 18335f3ab7..9408656ef9 100644 --- a/src/Auxiliary/Aux_LoadTable.cpp +++ b/src/Auxiliary/Aux_LoadTable.cpp @@ -86,8 +86,8 @@ int Aux_LoadTable( T *&Data, const char *FileName, const int NCol_Target, const // check if we find all target columns if ( NCol_Match != NCol_Target ) - Aux_Error( ERROR_INFO, "Number of matched columns (%d) != expect (%d) at row %d !!\n %s\n", - NCol_Match, NCol_Target, NthRow-1 , FirstItem); + Aux_Error( ERROR_INFO, "Number of matched columns (%d) != expect (%d) at row %d !!\n", + NCol_Match, NCol_Target, NthRow-1 ); NRow_Match ++; } // while ( fgets(Line, MAX_STRING, File) != NULL ) diff --git a/src/Makefile_base b/src/Makefile_base index 94b8ea1148..7fcd2367f7 100644 --- a/src/Makefile_base +++ b/src/Makefile_base @@ -30,7 +30,6 @@ COMPILE_VERBOSE := 0 SIMU_OPTION = @@@SIMU_OPTION@@@ SIMU_OPTION += -DGPU_COMPUTE_CAPABILITY=@@@GPU_COMPUTE_CAPABILITY@@@ -<<<<<<< HEAD:src/Makefile # (a) physical modules # ------------------------------------------------------------------------------- # physical model: HYDRO/ELBDM/PAR_ONLY (ELBDM: wave dark matter; PAR_ONLY: particle-only) @@ -234,13 +233,10 @@ SIMU_OPTION += -DSUPPORT_FFTW=FFTW3 # use patch group as the unit in libyt, this will speed up inline-analysis but increase memory consumption # --> must enable SUPPORT_LIBYT #SIMU_OPTION += -DLIBYT_USE_PATCH_GROUP -======= ->>>>>>> master:src/Makefile_base # compilers and flags ####################################################################################################### -<<<<<<< HEAD:src/Makefile # intel # ------------------------------------------------------------------------------- @@ -303,19 +299,11 @@ endif #NVCC = nvcc -ccbin CC # for the Cray environment -======= -CXX = @@@CXX@@@ -CXXFLAG = @@@CXXFLAG@@@ -LIB = @@@LIBFLAG@@@ -OPENMPFLAG = @@@OPENMPFLAG@@@ -NVCC = $(CUDA_PATH)/bin/nvcc ->>>>>>> master:src/Makefile_base # library paths ####################################################################################################### -<<<<<<< HEAD:src/Makefile # template #CUDA_PATH := @@ -454,16 +442,6 @@ LIBYT_PATH := #GSL_PATH := /usr #LIBYT_PATH := -======= -CUDA_PATH := @@@CUDA_PATH@@@ -FFTW2_PATH := @@@FFTW2_PATH@@@ -FFTW3_PATH := @@@FFTW3_PATH@@@ -MPI_PATH := @@@MPI_PATH@@@ -HDF5_PATH := @@@HDF5_PATH@@@ -GRACKLE_PATH := @@@GRACKLE_PATH@@@ -GSL_PATH := @@@GSL_PATH@@@ -LIBYT_PATH := @@@LIBYT_PATH@@@ ->>>>>>> master:src/Makefile_base From 246001efe3810566eb8e11b822bca47064b872b5 Mon Sep 17 00:00:00 2001 From: sandy0216 Date: Sun, 13 Oct 2024 22:48:59 +0800 Subject: [PATCH 46/59] Make Makefile_base the same --- src/Makefile_base | 416 ++-------------------------------------------- 1 file changed, 13 insertions(+), 403 deletions(-) diff --git a/src/Makefile_base b/src/Makefile_base index 7fcd2367f7..9f152af27f 100644 --- a/src/Makefile_base +++ b/src/Makefile_base @@ -30,418 +30,28 @@ COMPILE_VERBOSE := 0 SIMU_OPTION = @@@SIMU_OPTION@@@ SIMU_OPTION += -DGPU_COMPUTE_CAPABILITY=@@@GPU_COMPUTE_CAPABILITY@@@ -# (a) physical modules -# ------------------------------------------------------------------------------- -# physical model: HYDRO/ELBDM/PAR_ONLY (ELBDM: wave dark matter; PAR_ONLY: particle-only) -# --> must be set in any cases; PAR_ONLY is not supported yet; -# ELBDM is not publicly available yet but will be released soon -SIMU_OPTION += -DMODEL=HYDRO - -# enable gravity -# --> must define SUPPORT_FFTW=FFTW2 or FFTW3 -SIMU_OPTION += -DGRAVITY - -# enable particles -#SIMU_OPTION += -DPARTICLE - -# support Grackle, a chemistry and radiative cooling library -# --> must set NCOMP_PASSIVE_USER according to the primordial chemistry network set by GRACKLE_PRIMORDIAL -# --> please enable OpenMP when compiling Grackle (by "make omp-on") -#SIMU_OPTION += -DSUPPORT_GRACKLE - - -# (b) options of different physical modules -# (b-1) hydro options -# ------------------------------------------------------------------------------------ -ifeq "$(filter -DMODEL=HYDRO, $(SIMU_OPTION))" "-DMODEL=HYDRO" -# hydrodynamic scheme: RTVD/MHM/MHM_RP/CTU -# --> must be set when MODEL=HYDRO -# --> MHD only supports MHM_RP and CTU -SIMU_OPTION += -DFLU_SCHEME=MHM -#SIMU_OPTION += -DFLU_SCHEME=CTU - -# scheme of spatial data reconstruction: PLM/PPM (piecewise-linear/piecewise-parabolic) -# --> useless for RTVD -SIMU_OPTION += -DLR_SCHEME=PPM - -# Riemann solver: EXACT/ROE/HLLE/HLLC/HLLD -# --> pure hydro: EXACT/ROE/HLLE/HLLC(*); MHD: ROE/HLLE/HLLD(*); -# (recommended solvers are highlighted by *) -# --> useless for RTVD -SIMU_OPTION += -DRSOLVER=HLLC -#SIMU_OPTION += -DRSOLVER=ROE - - -# dual energy formalism: DE_ENPY/DE_EINT (evolve entropy or internal energy) -# --> DE_EINT is not supported yet; useless for RTVD -SIMU_OPTION += -DDUAL_ENERGY=DE_ENPY - -# number of user-defined passively advected scalars -# --> set it to 0 or comment it out if none is required -# --> useless for RTVD -SIMU_OPTION += -DNCOMP_PASSIVE_USER=0 - -# magnetohydrodynamics -#SIMU_OPTION += -DMHD - -# cosmic rays (not supported yet) -#SIMU_OPTION += -DCOSMIC_RAY - -# equation of state: EOS_GAMMA/EOS_ISOTHERMAL/EOS_NUCLEAR/EOS_TABULAR/EOS_USER -# --> must be set when MODEL=HYDRO; must also enable BAROTROPIC_EOS for EOS_ISOTHERMAL -SIMU_OPTION += -DEOS=EOS_GAMMA - -# whether or not the EOS set above is barotropic -# --> mandatory for EOS_ISOTHERMAL; optional for EOS_TABULAR/EOS_USER -#SIMU_OPTION += -DBAROTROPIC_EOS - - -# (b-2) ELBDM options -# ------------------------------------------------------------------------------------ -else ifeq "$(filter -DMODEL=ELBDM, $(SIMU_OPTION))" "-DMODEL=ELBDM" -# enforce the mass conservation -SIMU_OPTION += -DCONSERVE_MASS - -# 4-th order Laplacian -SIMU_OPTION += -DLAPLACIAN_4TH - -# include the quartic self-interaction potential -# --> must turn on GRAVITY; does not support COMOVING -#SIMU_OPTION += -DQUARTIC_SELF_INTERACTION - -# number of passively advected scalars -# --> not supported yet and thus can only be used as auxiliary fields -SIMU_OPTION += -DNCOMP_PASSIVE_USER=0 - -endif # MODEL - - -# (b-3) gravity options -# ------------------------------------------------------------------------------- -ifeq "$(filter -DGRAVITY, $(SIMU_OPTION))" "-DGRAVITY" -# Poisson solver: SOR/MG (successive-overrelaxation (recommended)/multigrid) -# --> must be set when GRAVITY is enabled -SIMU_OPTION += -DPOT_SCHEME=SOR - -# store GRA_GHOST_SIZE ghost-zone potential for each patch on each side -# --> recommended when PARTICLE is enabled for improving accuracy for particles around the patch boundaries -# --> must be enabled for STAR_FORMATION + STORE_PAR_ACC -SIMU_OPTION += -DSTORE_POT_GHOST - -# use unsplitting method to couple gravity to the target model (recommended) -# --> for HYDRO only; ELBDM is not supported yet -SIMU_OPTION += -DUNSPLIT_GRAVITY - -# comoving frame for cosmological simulations -#SIMU_OPTION += -DCOMOVING -endif # GRAVITY - - -# (b-4) particle options -# ------------------------------------------------------------------------------------ -ifeq "$(filter -DPARTICLE, $(SIMU_OPTION))" "-DPARTICLE" -# enable tracer particles -#SIMU_OPTION += -DTRACER - -# store particle acceleration (recommended) -SIMU_OPTION += -DSTORE_PAR_ACC - -# allow for creating new particles after initialization -# --> must turn on STORE_POT_GHOST when STORE_PAR_ACC is adopted -#SIMU_OPTION += -DSTAR_FORMATION - -# feedback from particles to grids -#SIMU_OPTION += -DFEEDBACK - -# number of user-defined particle attributes -# --> set it to 0 or comment it out if none is required -SIMU_OPTION += -DPAR_NATT_USER=0 -endif # PARTICLE - - -# (c) miscellaneous options (AMR, GPU, parallelization, optimizations, ...) -# ------------------------------------------------------------------------------------ -# maximum number of AMR levels including the root level (level id = 0 ... NLEVEL-1) -# --> must be set in any cases -SIMU_OPTION += -DNLEVEL=15 - -# maximum number of patches on each AMR level -# --> must be set in any cases -SIMU_OPTION += -DMAX_PATCH=1000000 - -# number of cells along each direction in a single patch -# --> must be an even number greater than or equal to 8 -SIMU_OPTION += -DPATCH_SIZE=8 - -# GPU acceleration -# --> must set GPU_ARCH as well -SIMU_OPTION += -DGPU - -# GPU architecture: FERMI/KEPLER/MAXWELL/PASCAL/VOLTA/TURING/AMPERE -SIMU_OPTION += -DGPU_ARCH=TURING - -# debug mode -#SIMU_OPTION += -DGAMER_DEBUG - -# bitwise reproducibility -#SIMU_OPTION += -DBITWISE_REPRODUCIBILITY - -# measure the wall-clock time of GAMER -SIMU_OPTION += -DTIMING - -# measure the wall-clock time of GPU solvers (will disable CPU/GPU overlapping) -# --> must enable TIMING -#SIMU_OPTION += -DTIMING_SOLVER - -# double precision -#SIMU_OPTION += -DFLOAT8 - -# serial mode (in which no MPI libraries are required) -# --> must disable LOAD_BALANCE -#SIMU_OPTION += -DSERIAL - -# load-balance parallelization: HILBERT -# --> must disable SERIAL -SIMU_OPTION += -DLOAD_BALANCE=HILBERT - -# overlap MPI communication with computation -# --> NOT supported yet; must enable LOAD_BALANCE -#SIMU_OPTION += -DOVERLAP_MPI - -# enable OpenMP parallelization -SIMU_OPTION += -DOPENMP - -# work on the NAOC Laohu GPU cluster -#SIMU_OPTION += -DLAOHU - -# support HDF5 format -SIMU_OPTION += -DSUPPORT_HDF5 - -# support GNU scientific library -SIMU_OPTION += -DSUPPORT_GSL - -# support FFTW library -# --> SUPPORT_FFTW must be defined when GRAVITY is enabled -# --> use FFTW3 for fftw3 support -# use FFTW2 for fftw2 support -SIMU_OPTION += -DSUPPORT_FFTW=FFTW3 - - -# support yt inline analysis -#SIMU_OPTION += -DSUPPORT_LIBYT - -# use patch group as the unit in libyt, this will speed up inline-analysis but increase memory consumption -# --> must enable SUPPORT_LIBYT -#SIMU_OPTION += -DLIBYT_USE_PATCH_GROUP # compilers and flags ####################################################################################################### - -# intel -# ------------------------------------------------------------------------------- -# CXX = icpc # serial compiler -CXX = $(MPI_PATH)/bin/mpicxx # MPI compiler -##CXX = CC # cray wrapper script -CXXFLAG = -g -O3 # general flags -##CXXFLAG = -g -O3 -std=c++11 #-gxx-name=YOUR_G++ -##CXXFLAG = -g -fast -CXXFLAG += -w1 # warning flags -OPENMPFLAG = -fopenmp # openmp flag -LIB = -limf # libraries and linker flags -# CXXFLAG += -fp-model precise # disable optimizations that are not value-safe -# -## for debug only -ifeq "$(filter -DGAMER_DEBUG, $(SIMU_OPTION))" "-DGAMER_DEBUG" -##CXXFLAG += -fstack-protector-all -##LIB += -lssp -endif -# -## suppress warning when OpenMP is disabled -ifeq "$(filter -DOPENMP, $(SIMU_OPTION))" "" - CXXFLAG += -Wno-unknown-pragmas -diag-disable 3180 -endif - - -# gnu -# ------------------------------------------------------------------------------- -# CXX = g++ # serial compiler -#CXX = $(MPI_PATH)/bin/mpicxx # MPI compiler -#CXX = CC # cray wrapper script -# CXXFLAG = -g -O3 # general flags -#CXXFLAG = -g -O3 -std=c++11 -#CXXFLAG = -g -Ofast -# CXXFLAG += -Wall -Wextra # warning flags -# CXXFLAG += -Wno-unused-variable -Wno-unused-parameter \ - -Wno-maybe-uninitialized -Wno-unused-but-set-variable \ - -Wno-unused-result -Wno-unused-function \ - -Wno-implicit-fallthrough -Wno-parentheses -# OPENMPFLAG = -fopenmp # openmp flag -# LIB = # libraries and linker flags - -# for debug only -#ifeq "$(filter -DGAMER_DEBUG, $(SIMU_OPTION))" "-DGAMER_DEBUG" -#CXXFLAG += -fstack-protector-all -#CXXFLAG += -fsanitize=undefined -fsanitize=address -#LIB += -fsanitize=undefined -fsanitize=address -#endif - -# suppress warning when OpenMP is disabled -#ifeq "$(filter -DOPENMP, $(SIMU_OPTION))" "" -# CXXFLAG += -Wno-unknown-pragmas -#endif - - -# CUDA -# ------------------------------------------------------------------------------- - NVCC = $(CUDA_PATH)/bin/nvcc # CUDA compiler -#NVCC = $(CUDA_PATH)/bin/nvcc -ccbin YOUR_G++ # with a specified host compiler -#NVCC = nvcc -ccbin CC # for the Cray environment - - +CXX = @@@CXX@@@ +CXXFLAG = @@@CXXFLAG@@@ +LIB = @@@LIBFLAG@@@ +OPENMPFLAG = @@@OPENMPFLAG@@@ +NVCC = $(CUDA_PATH)/bin/nvcc # library paths ####################################################################################################### - -# template -#CUDA_PATH := -#FFTW2_PATH := -#FFTW3_PATH := -#MPI_PATH := -#HDF5_PATH := -#GRACKLE_PATH := -#GSL_PATH := -#LIBYT_PATH := - -# NCSA-bluewaters (only need to specify the path of user-installed packages) -#GRACKLE_PATH := - -# UIUC-campus (intel-15.0 + openmpi-1.8.4) -#CUDA_PATH := /usr/local/cuda/7.0 -#FFTW2_PATH := /projects/ncsa/grav/softwares/fftw/2.1.5 -#FFTW3_PATH := -#MPI_PATH := /usr/local/mpi/openmpi-1.8.4-intel-15.0 -#HDF5_PATH := /projects/ncsa/grav/softwares/miniconda2 -#GRACKLE_PATH := /home/hyschive/local -#GSL_PATH := /usr/local/gsl/gsl-1.16 - -# UIUC-campus (gcc-4.9.2 + openmpi-1.8.4) -#CUDA_PATH := /usr/local/cuda/7.0 -#FFTW2_PATH := /projects/ncsa/grav/softwares/fftw/2.1.5-openmpi-1.8.4-gcc-4.9.2 -#FFTW3_PATH := -#MPI_PATH := /usr/local/mpi/openmpi-1.8.4-gcc-4.9.2 -#HDF5_PATH := /projects/ncsa/grav/softwares/miniconda2 -#GRACKLE_PATH := /home/hyschive/local -#GSL_PATH := /usr/local/gsl/gsl-1.16 - -# NCSA-hybrid (gcc) -#CUDA_PATH := /usr/local/cuda-8.0 -#MPI_PATH := /home/hyschive/project/software/openmpi/2.0.2 -#FFTW2_PATH := /home/hyschive/project/software/fftw/2.1.5 -#FFTW3_PATH := -#HDF5_PATH := /home/hyschive/project/software/miniconda2 -#GSL_PATH := - -# NCSA-nano (intel 2016) -#CUDA_PATH := /usr/local/cuda -#MPI_PATH := /mnt/lustre/allen/hyschive/software/openmpi/2.0.2 -#FFTW2_PATH := /mnt/lustre/allen/hyschive/software/fftw/2.1.5 -#FFTW3_PATH := -#HDF5_PATH := /mnt/lustre/allen/hyschive/software/miniconda2 -#GSL_PATH := - -# NCSA-dxl (gcc, serial) -#CUDA_PATH := -#FFTW2_PATH := /home/hyschive/software/fftw/2.1.5 -#FFTW3_PATH := -#MPI_PATH := /usr -#HDF5_PATH := /home/hyschive/software/miniconda2 -#GSL_PATH := /usr/lib -#LIBYT_PATH := /home/hyschive/project/libyt/libyt.dev/libyt - -# NTU-eureka (default: openmpi-intel) -CUDA_PATH := /software/cuda/default -FFTW2_PATH := /software/fftw/default -FFTW3_PATH := /software/fftw/3.3.10-intel-2022.0.1-openmpi-4.1.1-ucx_mt -MPI_PATH := /software/openmpi/default -HDF5_PATH := /software/hdf5/default -GRACKLE_PATH := -GSL_PATH := /software/gsl/default -LIBYT_PATH := - -# NTU-hulk (openmpi-intel-qlc) -#CUDA_PATH := /opt/gpu/cuda/4.2 -#FFTW2_PATH := /opt/math/fftw/2.1.5-intel-openmpi-1.4.3-qlc -#FFTW3_PATH := -#MPI_PATH := /usr/mpi/intel/openmpi-1.4.3-qlc -#HDF5_PATH := /opt/hdf5/1.8.20 -#GRACKLE_PATH := /work1/fish/Software/grackle -#GSL_PATH := /opt/math/gsl/2.5 -#LIBYT_PATH := /project/fish/libyt/libyt -#FFTW2_PATH := /opt/math/fftw/2.1.5-intel-openmpi-1.6.0-qlc -#MPI_PATH := /opt/mpi/openmpi/1.6.0-intel-qlc -#FFTW2_PATH := /opt/math/fftw/2.1.5-intel-openmpi-2.1.5-qlc -#MPI_PATH := /opt/mpi/openmpi/2.1.5-intel-qlc -#CUDA_PATH := /usr/local/cuda-7.5 - -# NTU-hulk (openmpi-gcc-qlc) -#CUDA_PATH := /opt/gpu/cuda/4.2 -#FFTW2_PATH := /opt/math/fftw/2.1.5-gcc-qlc -#FFTW3_PATH := -#MPI_PATH := /usr/mpi/gcc/openmpi-1.4.3-qlc -#HDF5_PATH := /opt/hdf5/1.8.9 -#GRACKLE_PATH := /work1/fish/Software/grackle -#GSL_PATH := /opt/math/gsl -#LIBYT_PATH := /project/fish/libyt/libyt -#MPI_PATH := /opt/mpi/openmpi/1.8.1-gcc-qlc -#CUDA_PATH := /usr/local/cuda-7.5 - -# NTHU-fomalhaut (openmpi-gnu) -#CUDA_PATH := /usr/local/cuda-10.0 -#FFTW2_PATH := /home/hyschive/software/fftw/2.1.5-openmpi-gnu -#FFTW3_PATH := -#MPI_PATH := /storage/app/gnu/openmpi-3.1.3-gcc8 -#HDF5_PATH := /storage/app/gnu/hdf5-1.8.21-gcc8 -#GRACKLE_PATH := -#GSL_PATH := - -# NAOC-laohu (OpenMPI-1.3.2-intel) -#CUDA_PATH := $(CUDA_INSTALL_PATH) -#FFTW2_PATH := /ifs/data/hsiyu/Software/fftw/2.1.5-openmpi-1.3.2-intel -#FFTW3_PATH := -#MPI_PATH := /usr/mpi/intel/openmpi-1.3.2-qlc -#GPUID_PATH := /ifs/data/hsiyu/Software/gpudevmgr - -# A "typical" macOS installation without GPU -#CUDA_PATH := -#FFTW2_PATH := /usr/local/fftw-2.1.5 -#FFTW3_PATH := -#MPI_PATH := /usr/local/mpich-3.2 -#HDF5_PATH := ${HOME}/miniconda3 -#GRACKLE_PATH := -#GSL_PATH := /usr/local/gsl-1.16 - -# NASA Pleiades (intel compilers and SGI MPI) -#CUDA_PATH := /nasa/cuda/9.0/ -#FFTW2_PATH := /u/jzuhone/opt/fftw-2.1.5 -#FFTW3_PATH := -#MPI_PATH := /nasa/sgi/mpt/2.14r19 -#HDF5_PATH := /nasa/hdf5/1.8.18_serial -#GRACKLE_PATH := -#GSL_PATH := - -# NCTS (default: openmpi-intel) -#CUDA_PATH := /cluster/cuda-11.6 -#FFTW2_PATH := /cluster/intel-2022.1/fftw-2.1.5_openmpi4 -#FFTW3_PATH := -#MPI_PATH := /cluster/intel-2022.1/openmpi-4.1.2 -#HDF5_PATH := /cluster/intel-2022.1/hdf5-1.10.8_openmpi4 -#GRACKLE_PATH := -#GSL_PATH := /usr -#LIBYT_PATH := - +CUDA_PATH := @@@CUDA_PATH@@@ +FFTW2_PATH := @@@FFTW2_PATH@@@ +FFTW3_PATH := @@@FFTW3_PATH@@@ +MPI_PATH := @@@MPI_PATH@@@ +HDF5_PATH := @@@HDF5_PATH@@@ +GRACKLE_PATH := @@@GRACKLE_PATH@@@ +GSL_PATH := @@@GSL_PATH@@@ +LIBYT_PATH := @@@LIBYT_PATH@@@ From 2c27272264c8e350d1f6d44cb9f3123f1a412017 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 20:48:06 +0800 Subject: [PATCH 47/59] Remove tabs and trailing spaces --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 3 +-- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 4 ++-- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 14 +++++++------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 8f8ab7b011..f4abfe09b8 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -76,9 +76,8 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) case 5: // tanh AuxArray[8] *= tanh(Time/Bondi_Soliton_t); break; - } - } + } } } // FUNCTION : SetExtAccAuxArray_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 13a7c42ead..fc80f1aaf7 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -51,7 +51,7 @@ int Flu_ResetByUser_Func_Bondi( real fluid[], const double Emag, const double x, const double dt, const int lv, double AuxArray[] ) { - if ( !Bondi_void ) + if ( !Bondi_void ) return false; const double Pos[3] = { x, y, z }; @@ -206,7 +206,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg, { // void region must be completely refined to the max level Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" ); - } + } } // if ( Reset ) }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 5175391fee..99800112d2 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -408,7 +408,7 @@ void SetParameter() double Om_0 = Om0/(1-Om0*(1-(1+a0)/a0)); double kiz_z = (18*SQR(3.14159265)+82*(Om_z-1)-39*SQR(Om_z-1))/Om_z; double kiz_0 = (18*SQR(3.14159265)+82*(Om_0-1)-39*SQR(Om_0-1))/Om_0; - + Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow(1+z,-1.0/2.0)*pow(kiz_z/kiz_0,-1.0/6.0)*pow(Mh/1e9,-1.0/3.0); } Bondi_Soliton_rc *= UnitExt_L/UNIT_L; @@ -429,7 +429,7 @@ void SetParameter() Bondi_Init_Prof_d = Bondi_Init_Data + 1*Bondi_Init_bin; Bondi_Init_Prof_v = Bondi_Init_Data + 2*Bondi_Init_bin; Bondi_Init_Prof_p = Bondi_Init_Data + 3*Bondi_Init_bin; - + for( int b=0; bBoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); Dens = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_d, r )/UNIT_D; Pres = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_p, r )/UNIT_P; - + const double vmag = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_v, r )/UNIT_V; //const double dh = amr->dh[lv]; //const real dv = CUBE(dh); @@ -623,7 +623,7 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co Aux_Error( ERROR_INFO, "Wrong Table\n"); } Pres *= 1/(UNIT_P); - } + } // uniform background @@ -760,7 +760,7 @@ int odefunc ( double x, const double y[], double f[], void *params) x /= Const_kpc; double rc = Bondi_Soliton_rc*UNIT_L/Const_kpc; double m22 = Bondi_Soliton_m22; - + double rho = 1.945*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+(9.1e-2)*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; @@ -777,7 +777,7 @@ void Soliton_SetPresProfileTable() const double r_min = 0.1*amr->dh[MAX_LEVEL]*UNIT_L; const double r_max = (0.5*sqrt(3.0)*amr->BoxSize[0])*UNIT_L; for (int v=0; v<2; v++) Bondi_Soliton_PresProf[v] = new double [NBin]; - + int dim = 1; gsl_odeiv2_system sys = {odefunc, NULL, dim, NULL}; @@ -800,7 +800,7 @@ void Soliton_SetPresProfileTable() } gsl_odeiv2_driver_free (d); } // void Soliton_SetDensProfileTable() - + //------------------------------------------------------------------------------------------------------- // Function : End_Bondi From a0d9c044d666a69a77823dfe26fe8e9741ad2d9f Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 21:02:02 +0800 Subject: [PATCH 48/59] Compile without GSL --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 99800112d2..e3b41ac917 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -1,8 +1,9 @@ #include "GAMER.h" +#ifdef SUPPORT_GSL #include -#include #include +#endif // problem-specific global variables @@ -108,6 +109,9 @@ bool Flag_Bondi( const int i, const int j, const int k, const int lv, const int int Flu_ResetByUser_Func_Bondi( real fluid[], const double Emag, const double x, const double y, const double z, const double Time, const double dt, const int lv, double AuxArray[] ); void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg, const double TimeNew, const double dt ); +#ifdef SUPPORT_GSL +static void Soliton_SetPresProfileTable(); +#endif static void HSE_SetDensProfileTable(); static void BondiBC( real Array[], const int ArraySize[], real fluid[], const int NVar_Flu, const int GhostSize, const int idx[], const double pos[], const double Time, @@ -413,7 +417,9 @@ void SetParameter() } Bondi_Soliton_rc *= UnitExt_L/UNIT_L; Bondi_Soliton_t *= Bondi_TimeB; +# ifdef SUPPORT_GSL Soliton_SetPresProfileTable(); +# endif } if ( Bondi_Init ) @@ -747,6 +753,8 @@ void HSE_SetDensProfileTable() } // FUNCTION : HSE_SetDensProfileTable + +#ifdef SUPPORT_GSL //------------------------------------------------------------------------------------------------------- // Function : Soliton_SetPresProfileTable // Description : Set up the pressure profile table for Soliton @@ -755,8 +763,9 @@ void HSE_SetDensProfileTable() // // Parameter : None //------------------------------------------------------------------------------------------------------- -int odefunc ( double x, const double y[], double f[], void *params) +int odefunc( double x, const double y[], double f[], void *params ) { + x /= Const_kpc; double rc = Bondi_Soliton_rc*UNIT_L/Const_kpc; double m22 = Bondi_Soliton_m22; @@ -767,7 +776,11 @@ int odefunc ( double x, const double y[], double f[], void *params) f[0] = -Const_NewtonG*M*rho/SQR(x*Const_kpc); return GSL_SUCCESS; -} + +} // FUNCTION : odefunc + + + int * jac; void Soliton_SetPresProfileTable() { @@ -799,7 +812,10 @@ void Soliton_SetPresProfileTable() Bondi_Soliton_PresProf[1][NBin-b] = y[0]; } gsl_odeiv2_driver_free (d); -} // void Soliton_SetDensProfileTable() + +} // FUNCTION : Soliton_SetPresProfileTable +#endif // #ifdef SUPPORT_GSL + //------------------------------------------------------------------------------------------------------- From 2703181b4fa9a424452bd6b7f39c3c59fca56c99 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 22:08:53 +0800 Subject: [PATCH 49/59] Address reviewer's comments --- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 66 ++++---- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 9 +- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 153 +++++++++--------- 3 files changed, 119 insertions(+), 109 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index f4abfe09b8..73ade16f02 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -49,36 +49,42 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) AuxArray[3] = NEWTON_G*Bondi_MassBH; // gravitational_constant*point_source_mass AuxArray[4] = Bondi_Soften_R; // soften_length (<=0.0 --> disable) AuxArray[5] = Bondi_Soliton; - if( Bondi_Soliton ) + + if ( Bondi_Soliton ) { AuxArray[6] = Bondi_Soliton_m22; AuxArray[7] = Bondi_Soliton_rc; AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; AuxArray[9] = UNIT_L/Const_kpc; - if( Bondi_Soliton_type > 0 ) + + switch ( Bondi_Soliton_type ) { - switch(Bondi_Soliton_type) - { - case 1: // arctan function - AuxArray[8] *= 2/(real)3.14159265*ATAN(Time/Bondi_Soliton_t); - break; - case 2: // linear function - if( Time < Bondi_Soliton_t ) - AuxArray[8] *= Time/Bondi_Soliton_t; - break; - case 3: // smooth step function - if( Time < Bondi_Soliton_t ) - AuxArray[8] *= 3*SQR(Time/Bondi_Soliton_t)-2*CUBE(Time/Bondi_Soliton_t); - break; - case 4: // sigmoid - AuxArray[8] *= 2/(1+exp(-Time*log(3)/Bondi_Soliton_t))-1; - break; - case 5: // tanh - AuxArray[8] *= tanh(Time/Bondi_Soliton_t); - break; - } - } - } + case 1: // arctan function + AuxArray[8] *= 2.0/M_PI*atan( Time/Bondi_Soliton_t ); + break; + + case 2: // linear function + if ( Time < Bondi_Soliton_t ) + AuxArray[8] *= Time/Bondi_Soliton_t; + break; + + case 3: // smooth step function + if ( Time < Bondi_Soliton_t ) + AuxArray[8] *= 3.0*SQR( Time/Bondi_Soliton_t ) - 2.0*CUBE( Time/Bondi_Soliton_t ); + break; + + case 4: // sigmoid + AuxArray[8] *= 2.0 / ( 1.0 + exp( -Time*log(3.0)/Bondi_Soliton_t ) ) - 1.0; + break; + + case 5: // tanh + AuxArray[8] *= tanh( Time/Bondi_Soliton_t ); + break; + + default: + Aux_Error( ERROR_INFO, "unsupported Bondi_Soliton_type (%d) !!\n", Bondi_Soliton_type ); + } // switch ( Bondi_Soliton_type ) + } // if ( Bondi_Soliton ) } // FUNCTION : SetExtAccAuxArray_Bondi #endif // #ifndef __CUDACC__ @@ -111,18 +117,18 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub const double Cen[3] = { UserArray[0], UserArray[1], UserArray[2] }; real GM = (real)UserArray[3]; const real eps = (real)UserArray[4]; - const bool SOL = (real)UserArray[5]; + const bool Soliton = (real)UserArray[5]; const real dx = (real)(x - Cen[0]); const real dy = (real)(y - Cen[1]); const real dz = (real)(z - Cen[2]); const real r = SQRT( dx*dx + dy*dy + dz*dz ); - if( SOL ) + if ( Soliton ) { - const real m22 = (real)UserArray[6]; - const real rc = (real)UserArray[7]; // In code unit or kpc - const real Coeff = (real)UserArray[8]; - const real UNIT_L = (real)UserArray[9]; + const real m22 = (real)UserArray[6]; + const real rc = (real)UserArray[7]; // In code unit or kpc + const real Coeff = (real)UserArray[8]; + const real UNIT_L = (real)UserArray[9]; #ifdef Plummer double M = GM*CUBE(r)/pow(SQR(r)+SQR(rc),1.5); diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index fc80f1aaf7..c755f2ca03 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -21,6 +21,9 @@ extern int Bondi_SinkNCell; extern bool Bondi_void; extern bool Bondi_dynBH; + + + //------------------------------------------------------------------------------------------------------- // Function : Flu_ResetByUser_Func_Bondi // Description : Function to reset the fluid field in the Bondi accretion problem @@ -51,8 +54,8 @@ int Flu_ResetByUser_Func_Bondi( real fluid[], const double Emag, const double x, const double dt, const int lv, double AuxArray[] ) { - if ( !Bondi_void ) - return false; + if ( !Bondi_void ) return false; + const double Pos[3] = { x, y, z }; const double InBC_R2 = SQR( Bondi_InBC_R ); @@ -213,7 +216,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg, MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD ); - if( Bondi_dynBH ){ Bondi_MassBH += SinkMass_OneSubStep_AllRank; } + if ( Bondi_dynBH ) Bondi_MassBH += SinkMass_OneSubStep_AllRank; } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index e3b41ac917..04a9c1a690 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -8,96 +8,97 @@ // problem-specific global variables // ======================================================================================= - double Bondi_MassBH; // black hole mass -static double Bondi_Rho0; // background density -static double Bondi_T0; // background temperature - double Bondi_RefineRadius0; // refinement radius at the base level - // NOTE: refinement radius at Lv is set to Bondi_RefineRadius0*2^(-Lv) - // --> all refinement shells have roughly the same number of cells at its level - // (except Lv=MAX_LEVEL, which will have twice the number of cells along the radius - // unless Bondi_HalfMaxLvRefR is on) - bool Bondi_HalfMaxLvRefR; // halve the refinement radius at the maximum level - double Bondi_InBC_Rho; // density inside the void region -static double Bondi_InBC_T; // temperature inside the void region -static double Bondi_InBC_NCell; // number of finest cells for the radius of the void region -static double Bondi_Soften_NCell; // number of finest cells for the soften length (<=0.0 ==> disable) - - double Bondi_InBC_R; // radius of the void region (=Bondi_InBC_NCell*dh[MAX_LEVEL]) - double Bondi_InBC_P; // pressure inside the void region - double Bondi_InBC_E; // energy inside the void region - double Bondi_Soften_R; // soften length (=Bondi_Soften_NCell*dh[MAX_LEVEL]) -static double Bondi_P0; // background pressure -static double Bondi_Cs; // background sound speed -static double Bondi_RS; // Schwarzschild radius -static double Bondi_RB; // Bondi radius -static double Bondi_TimeB; // Bondi time - - double Bondi_SinkMass; // total mass in the void region removed in one global time-step - double Bondi_SinkMomX; // total x-momentum ... - double Bondi_SinkMomY; // total y-momentum ... - double Bondi_SinkMomZ; // total z-momentum ... - double Bondi_SinkMomXAbs; // total |x-momentum| ... - double Bondi_SinkMomYAbs; // total |y-momentum| ... - double Bondi_SinkMomZAbs; // total |z-momentum| ... - double Bondi_SinkEk; // total kinematic energy ... - double Bondi_SinkEt; // total thermal energy ... - int Bondi_SinkNCell; // total number of finest cells within the void region + double Bondi_MassBH; // black hole mass +static double Bondi_Rho0; // background density +static double Bondi_T0; // background temperature + double Bondi_RefineRadius0; // refinement radius at the base level + // NOTE: refinement radius at Lv is set to Bondi_RefineRadius0*2^(-Lv) + // --> all refinement shells have roughly the same number of cells at its level + // (except Lv=MAX_LEVEL, which will have twice the number of cells along the radius + // unless Bondi_HalfMaxLvRefR is on) + bool Bondi_HalfMaxLvRefR; // halve the refinement radius at the maximum level + double Bondi_InBC_Rho; // density inside the void region +static double Bondi_InBC_T; // temperature inside the void region +static double Bondi_InBC_NCell; // number of finest cells for the radius of the void region +static double Bondi_Soften_NCell; // number of finest cells for the soften length (<=0.0 ==> disable) + + double Bondi_InBC_R; // radius of the void region (=Bondi_InBC_NCell*dh[MAX_LEVEL]) + double Bondi_InBC_P; // pressure inside the void region + double Bondi_InBC_E; // energy inside the void region + double Bondi_Soften_R; // soften length (=Bondi_Soften_NCell*dh[MAX_LEVEL]) +static double Bondi_P0; // background pressure +static double Bondi_Cs; // background sound speed +static double Bondi_RS; // Schwarzschild radius +static double Bondi_RB; // Bondi radius +static double Bondi_TimeB; // Bondi time + + double Bondi_SinkMass; // total mass in the void region removed in one global time-step + double Bondi_SinkMomX; // total x-momentum ... + double Bondi_SinkMomY; // total y-momentum ... + double Bondi_SinkMomZ; // total z-momentum ... + double Bondi_SinkMomXAbs; // total |x-momentum| ... + double Bondi_SinkMomYAbs; // total |y-momentum| ... + double Bondi_SinkMomZAbs; // total |z-momentum| ... + double Bondi_SinkEk; // total kinematic energy ... + double Bondi_SinkEt; // total thermal energy ... + int Bondi_SinkNCell; // total number of finest cells within the void region // external units in cgs -const double UnitExt_L = Const_kpc; -const double UnitExt_D = 1.0; -const double UnitExt_M = Const_Msun; -const double UnitExt_E = Const_keV; +const double UnitExt_L = Const_kpc; +const double UnitExt_D = 1.0; +const double UnitExt_M = Const_Msun; +const double UnitExt_E = Const_keV; // hydrostatic equilibrium (HSE) -static bool Bondi_HSE; // enable HSE -static int Bondi_HSE_Mode; // initial configuration (1:T=Bondi_T0, 2:rho~1/r, 3:beta model) -static double Bondi_HSE_Dens_NormR; // normalize the density profile to density(r=NormR)=NormD -static double Bondi_HSE_Dens_NormD; // see Bondi_HSE_Dens_NormR +static bool Bondi_HSE; // enable HSE +static int Bondi_HSE_Mode; // initial configuration (1:T=Bondi_T0, 2:rho~1/r, 3:beta model) +static double Bondi_HSE_Dens_NormR; // normalize the density profile to density(r=NormR)=NormD +static double Bondi_HSE_Dens_NormD; // see Bondi_HSE_Dens_NormR // parameters for Bondi_HSE_Mode=1 -static int Bondi_HSE_Dens_NBin; // number of bins in the density profile table -static double Bondi_HSE_Dens_MinR; // minimum radius in the density profile -static double Bondi_HSE_Dens_MaxR; // maximum ... -static bool Bondi_HSE_Truncate; // truncate density within r adjust P2 in the pressure profile such that T(r=NormR)=Bondi_T0 -static double Bondi_HSE_Pres_NormP1; // P=P1*r^-2+P2 (P2=0 when Bondi_HSE_Pres_NormT=false) -static double Bondi_HSE_Pres_NormP2; +static bool Bondi_HSE_Pres_NormT; // true --> adjust P2 in the pressure profile such that T(r=NormR)=Bondi_T0 +static double Bondi_HSE_Pres_NormP1; // P=P1*r^-2+P2 (P2=0 when Bondi_HSE_Pres_NormT=false) +static double Bondi_HSE_Pres_NormP2; // parameters for Bondi_HSE_Mode=3 (beta model) -const double Bondi_HSE_Beta = 2.0/3.0; // beta (must be 2/3 for now) -static double Bondi_HSE_Beta_Rcore; // core radius (input parameter) -static double Bondi_HSE_Beta_Rho0; // peak density (set by Bondi_HSE_Dens_NormR/D) -static double Bondi_HSE_Beta_P1; // P(r) = P1*( 1/x + atan(x) ) + P2 assuming beta=2/3, where x=r/Rcore, -static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 currently fixed to -0.5*pi*P1 so that P(inf)=0 +const double Bondi_HSE_Beta = 2.0/3.0; // beta (must be 2/3 for now) +static double Bondi_HSE_Beta_Rcore; // core radius (input parameter) +static double Bondi_HSE_Beta_Rho0; // peak density (set by Bondi_HSE_Dens_NormR/D) +static double Bondi_HSE_Beta_P1; // P(r) = P1*( 1/x + atan(x) ) + P2 assuming beta=2/3, where x=r/Rcore, +static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 currently fixed to -0.5*pi*P1 so that P(inf)=0 // parameters for soliton - bool Bondi_void; - bool Bondi_dynBH; - bool Bondi_Soliton; - double Bondi_Soliton_m22; - int Bondi_Soliton_type; - double Bondi_Soliton_t; - double Bondi_Soliton_rc; - double Bondi_Soliton_MassHalo; - double Bondi_Soliton_Redshift; -static double *Bondi_Soliton_PresProf[2] = { NULL, NULL }; // pressure profile tabke: [0/1] = [radius/density] - -// parameters for bondi initial condition - bool Bondi_Init; -static char Bondi_Init_Filename[1000]; + bool Bondi_void; // enable the void region + bool Bondi_dynBH; // dynamically increase BH mass + bool Bondi_Soliton; // add soliton external potential + double Bondi_Soliton_m22; // FDM particle mass for Bondi_Soliton + int Bondi_Soliton_type; // functional form for gradually introducing the soliton potential + // (1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) + double Bondi_Soliton_t; // characteristic time normalized to Bondi_TimeB for adding the soliton potential + double Bondi_Soliton_rc; // soliton radius for Bondi_Soliton + // (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) + double Bondi_Soliton_MassHalo; // halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 + double Bondi_Soliton_Redshift; // redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 +static double *Bondi_Soliton_PresProf[2] = { NULL, NULL }; // pressure profile table: [0/1] = [radius/density] + +// parameters for Bondi initial condition + bool Bondi_Init; +static char Bondi_Init_Filename[MAX_STRING]; static double *Bondi_Init_Data=NULL; -static int Bondi_Init_bin; +static int Bondi_Init_bin; double *Bondi_Init_Prof_r, *Bondi_Init_Prof_d, *Bondi_Init_Prof_v, *Bondi_Init_Prof_p; - // ======================================================================================= @@ -272,7 +273,7 @@ void SetParameter() ReadPara->Add( "Bondi_dynBH", &Bondi_dynBH, true, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 0, NoMin_int, NoMax_int ); + ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 5, 1, 5 ); ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); @@ -400,7 +401,7 @@ void SetParameter() if ( Bondi_Soliton ) { - if( Bondi_Soliton_rc < 0.0 ){ + if ( Bondi_Soliton_rc < 0.0 ) { double z = Bondi_Soliton_Redshift; double Mh = Bondi_Soliton_MassHalo; double H0 = 67.66; @@ -757,7 +758,7 @@ void HSE_SetDensProfileTable() #ifdef SUPPORT_GSL //------------------------------------------------------------------------------------------------------- // Function : Soliton_SetPresProfileTable -// Description : Set up the pressure profile table for Soliton +// Description : Set up the pressure profile table for the soliton // // Note : 1. Assume P(r->inf)=0 // From 136c7ef98ab225a618c4b89754ed0f9ba761ecc6 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 22:11:16 +0800 Subject: [PATCH 50/59] Remove Bondi_Init since it's only for testing purposes --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 75 ------------------- 1 file changed, 75 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 04a9c1a690..d3164cc7bc 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -92,13 +92,6 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr double Bondi_Soliton_MassHalo; // halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 double Bondi_Soliton_Redshift; // redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 static double *Bondi_Soliton_PresProf[2] = { NULL, NULL }; // pressure profile table: [0/1] = [radius/density] - -// parameters for Bondi initial condition - bool Bondi_Init; -static char Bondi_Init_Filename[MAX_STRING]; -static double *Bondi_Init_Data=NULL; -static int Bondi_Init_bin; - double *Bondi_Init_Prof_r, *Bondi_Init_Prof_d, *Bondi_Init_Prof_v, *Bondi_Init_Prof_p; // ======================================================================================= @@ -279,10 +272,6 @@ void SetParameter() ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_Redshift", &Bondi_Soliton_Redshift, -1.0, NoMin_double, NoMax_double ); - - ReadPara->Add( "Bondi_Init", &Bondi_Init, false, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_Init_Filename", Bondi_Init_Filename, Useless_str, Useless_str, Useless_str ); - ReadPara->Read( FileName ); delete ReadPara; @@ -423,28 +412,6 @@ void SetParameter() # endif } - if ( Bondi_Init ) - { - bool RowMajor_No = false; - const bool AllocMem_Yes = true; - const int NCol = 4;// Radius, Density, Velocity, MachNumber - const int Col[NCol] = {1,3,5,6}; - Bondi_Init_bin = Aux_LoadTable( Bondi_Init_Data, Bondi_Init_Filename, NCol, Col, RowMajor_No, AllocMem_Yes ); - - // Convert to code unit and mach number->pressure - Bondi_Init_Prof_r = Bondi_Init_Data + 0*Bondi_Init_bin; - Bondi_Init_Prof_d = Bondi_Init_Data + 1*Bondi_Init_bin; - Bondi_Init_Prof_v = Bondi_Init_Data + 2*Bondi_Init_bin; - Bondi_Init_Prof_p = Bondi_Init_Data + 3*Bondi_Init_bin; - - for( int b=0; b a helper macro PRINT_RESET_PARA is defined in Macro.h @@ -511,12 +478,6 @@ void SetParameter() Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc ); Aux_Message( stdout, " Bondi_Soliton_MassHalo = %13.7e Msun\n", Bondi_Soliton_MassHalo ); Aux_Message( stdout, " Bondi_Soliton_Redshift = %13.7e\n", Bondi_Soliton_Redshift );} - - - Aux_Message( stdout, " Bondi_Init = %s\n", (Bondi_Init)?"YES":"NO" ); - if( Bondi_Init ){ - Aux_Message( stdout, " Bondi_Init_Filename = %s\n", Bondi_Init_Filename );} - Aux_Message( stdout, "=============================================================================\n" ); } // if ( MPI_Rank == 0 ) @@ -596,42 +557,6 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co else Aux_Error( ERROR_INFO, "unsupported Bondi_HSE_Mode (%d) !!\n", Bondi_HSE_Mode ); } // if ( Bondi_HSE ) - else if ( Bondi_Init ) - { - // Set Initial Condition - const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); - Dens = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_d, r )/UNIT_D; - Pres = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_p, r )/UNIT_P; - - const double vmag = Mis_InterpolateFromTable( Bondi_Init_bin, Bondi_Init_Prof_r, Bondi_Init_Prof_v, r )/UNIT_V; - //const double dh = amr->dh[lv]; - //const real dv = CUBE(dh); - const double dx = x-amr->BoxCenter[0]; - const double dy = y-amr->BoxCenter[1]; - const double dz = z-amr->BoxCenter[2]; - MomX = -Dens*vmag*dx/r; - MomY = -Dens*vmag*dy/r; - MomZ = -Dens*vmag*dz/r; - //Aux_Message( stdout, "%13.7e %13.7e %13.7e\n", MomX, MomY, MomZ ); - } - - else if ( Bondi_Init ) - { - const double r = sqrt( SQR(x-amr->BoxCenter[0]) + SQR(y-amr->BoxCenter[1]) + SQR(z-amr->BoxCenter[2]) ); - Dens = 1.945*pow( Bondi_Soliton_m22*1e1, -2.0 )*pow( Bondi_Soliton_rc*UNIT_L/Const_pc, -4.0 )*1e12/pow( 1+(9.1e-2)*SQR(r/Bondi_Soliton_rc), 8.0 ); - Dens *= Const_Msun/CUBE(Const_pc); - Dens *= 1/UNIT_D; - - const double *Table_R = Bondi_Soliton_PresProf[0]; - const double *Table_P = Bondi_Soliton_PresProf[1]; - Pres = Mis_InterpolateFromTable( 100000, Table_R, Table_P, r ); - if( Pres==NULL_REAL ){ - Aux_Error( ERROR_INFO, "%.3e, %.3e, %.3e\n",Table_R[0],Table_R[1000-1],r); - Aux_Error( ERROR_INFO, "Wrong Table\n"); - } - Pres *= 1/(UNIT_P); - } - // uniform background else From bc94cc1234d125f9b1048125e3aaee4d04215b08 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 22:15:38 +0800 Subject: [PATCH 51/59] Remove Bondi_Soliton_PresProf and GSL since they are only used for Bondi_Init --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 77 ------------------- 1 file changed, 77 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index d3164cc7bc..3dbd7893e1 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -1,9 +1,5 @@ #include "GAMER.h" -#ifdef SUPPORT_GSL -#include -#include -#endif // problem-specific global variables @@ -91,7 +87,6 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr // (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) double Bondi_Soliton_MassHalo; // halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 double Bondi_Soliton_Redshift; // redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 -static double *Bondi_Soliton_PresProf[2] = { NULL, NULL }; // pressure profile table: [0/1] = [radius/density] // ======================================================================================= @@ -103,9 +98,6 @@ bool Flag_Bondi( const int i, const int j, const int k, const int lv, const int int Flu_ResetByUser_Func_Bondi( real fluid[], const double Emag, const double x, const double y, const double z, const double Time, const double dt, const int lv, double AuxArray[] ); void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg, const double TimeNew, const double dt ); -#ifdef SUPPORT_GSL -static void Soliton_SetPresProfileTable(); -#endif static void HSE_SetDensProfileTable(); static void BondiBC( real Array[], const int ArraySize[], real fluid[], const int NVar_Flu, const int GhostSize, const int idx[], const double pos[], const double Time, @@ -407,9 +399,6 @@ void SetParameter() } Bondi_Soliton_rc *= UnitExt_L/UNIT_L; Bondi_Soliton_t *= Bondi_TimeB; -# ifdef SUPPORT_GSL - Soliton_SetPresProfileTable(); -# endif } @@ -680,70 +669,6 @@ void HSE_SetDensProfileTable() -#ifdef SUPPORT_GSL -//------------------------------------------------------------------------------------------------------- -// Function : Soliton_SetPresProfileTable -// Description : Set up the pressure profile table for the soliton -// -// Note : 1. Assume P(r->inf)=0 -// -// Parameter : None -//------------------------------------------------------------------------------------------------------- -int odefunc( double x, const double y[], double f[], void *params ) -{ - - x /= Const_kpc; - double rc = Bondi_Soliton_rc*UNIT_L/Const_kpc; - double m22 = Bondi_Soliton_m22; - - double rho = 1.945*pow(m22/1e-1, -2.0)*pow(rc*1e3, -4.0)*1e12/pow(1+(9.1e-2)*SQR(x/rc), 8.0)*Const_Msun/pow(Const_pc, 3.0); - double a = sqrt(pow(2.0,1.0/8.0)-1)*(x/rc); - double M = 4.17e9/(SQR(m22/1e-1)*(rc*1e3)*pow(SQR(a)+1, 7.0))*(3465*pow(a,13.0)+23100*pow(a,11.0)+65373*pow(a,9.0)+101376*pow(a,7.0)+92323*pow(a,5.0)+48580*pow(a,3.0)-3465*a+3465*pow(SQR(a)+1, 7.0)*atan(a))*Const_Msun; - f[0] = -Const_NewtonG*M*rho/SQR(x*Const_kpc); - - return GSL_SUCCESS; - -} // FUNCTION : odefunc - - - -int * jac; -void Soliton_SetPresProfileTable() -{ - -// allocate table --> deallocated by End_Bondi() - const int NBin = 100000; - const double r_min = 0.1*amr->dh[MAX_LEVEL]*UNIT_L; - const double r_max = (0.5*sqrt(3.0)*amr->BoxSize[0])*UNIT_L; - for (int v=0; v<2; v++) Bondi_Soliton_PresProf[v] = new double [NBin]; - - int dim = 1; - gsl_odeiv2_system sys = {odefunc, NULL, dim, NULL}; - - gsl_odeiv2_driver * d = gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk4, 1e-6, 1e-6, 0.0); - - double x0 = -r_max, xf = -r_min; - double x = x0; - double y[1] = { 0.0 }; - for( int b=1; b<=NBin; b++) - { - double xi = x0 + b*(xf-x0)/NBin; - int status = gsl_odeiv2_driver_apply (d, &x, xi, y); - if (status != GSL_SUCCESS) - { - Aux_Error( ERROR_INFO, "Error in Soliton_SetPresProfileTable, return value=%d\n", status ); - break; - } - Bondi_Soliton_PresProf[0][NBin-b] = -x/UNIT_L; - Bondi_Soliton_PresProf[1][NBin-b] = y[0]; - } - gsl_odeiv2_driver_free (d); - -} // FUNCTION : Soliton_SetPresProfileTable -#endif // #ifdef SUPPORT_GSL - - - //------------------------------------------------------------------------------------------------------- // Function : End_Bondi // Description : Free memory before terminating the program @@ -759,8 +684,6 @@ void End_Bondi() { delete [] Bondi_HSE_DensProf[v]; Bondi_HSE_DensProf[v] = NULL; - delete [] Bondi_Soliton_PresProf[v]; - Bondi_Soliton_PresProf[v] = NULL; } } // FUNCTION : End_Bondi From 2bcce2f81783c892c24f04c2180021a562215e0f Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 22:48:06 +0800 Subject: [PATCH 52/59] Add new parameters to Input__TestProb --- example/test_problem/Hydro/Bondi/Input__TestProb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/example/test_problem/Hydro/Bondi/Input__TestProb b/example/test_problem/Hydro/Bondi/Input__TestProb index 60fce18c23..dd2c747f6b 100644 --- a/example/test_problem/Hydro/Bondi/Input__TestProb +++ b/example/test_problem/Hydro/Bondi/Input__TestProb @@ -8,6 +8,8 @@ Bondi_InBC_Rho 1.0e-32 # density inside the void region (in Bondi_InBC_T 1.0e-7 # temperature inside the void region (in keV) Bondi_InBC_NCell 2.0 # number of finest cells (can be a fractional number) for the inner BC Bondi_Soften_NCell 0.0 # number of finest cells (can be a fractional number) for the soften length (<=0.0 -> disable) +Bondi_void 1 # enable the void region [1] +Bondi_dynBH 0 # dynamically increase BH mass [0] Bondi_HSE 0 # enable HSE [0] Bondi_HSE_Mode 1 # initial configuration (1:T=Bondi_T0, 2:rho~1/r, 3:beta model) [1] @@ -22,3 +24,13 @@ Bondi_HSE_TrunD 1.6735328e-24 # see Bondi_HSE_Truncate (in g/cm^3) Bondi_HSE_TrunSmoothR 5.0e-2 # smooth out density within TrunR-SmoothRoff) [-1.0] Bondi_HSE_Pres_NormT 0 # normalize pressure profile such that T(r=Dens_NormR)=Bondi_T0 [0] Bondi_HSE_Beta_Rcore 1.0e-1 # core radius in the beta model (in kpc) + +Bondi_Soliton 0 # add soliton external potential [0] +Bondi_Soliton_m22 -1.0 # FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton [-1.0] +Bondi_Soliton_type 5 # functional form for gradually introducing the soliton potential + # (1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) [5] +Bondi_Soliton_t -1.0 # characteristic time normalized to Bondi_TimeB for adding the soliton potential [-1.0] +Bondi_Soliton_rc -1.0 # soliton radius for Bondi_Soliton (in kpc) + # (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) [-1.0] +Bondi_Soliton_MassHalo -1.0 # halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 (in Msun) [-1.0] +Bondi_Soliton_Redshift -1.0 # redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 [-1.0] From abdf5e9a7e68b4bf9a22af3e9064b579bdf04b18 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 23:40:05 +0800 Subject: [PATCH 53/59] Disable Bondi_dynBH by default; convert units --- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 9 +- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 109 ++++++++++-------- 2 files changed, 67 insertions(+), 51 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index c755f2ca03..2a4c7339f3 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -119,7 +119,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg, real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL]; double x, y, z, x0, y0, z0; // Define varible to record sink mass at every time step - double SinkMass_OneSubStep_ThisRank = 0; + double SinkMass_OneSubStep_ThisRank = 0.0; double SinkMass_OneSubStep_AllRank; // reset to 0 since we only want to record the number of void cells **for one sub-step** @@ -214,9 +214,12 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg, }}} // i,j,k } // for (int PID=0; PIDNPatchComma[lv][1]; PID++) - MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD ); + if ( Bondi_dynBH ) + { + MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD ); - if ( Bondi_dynBH ) Bondi_MassBH += SinkMass_OneSubStep_AllRank; + Bondi_MassBH += SinkMass_OneSubStep_AllRank; + } } // FUNCTION : Flu_ResetByUser_API_Bondi diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 3dbd7893e1..0c15979293 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -17,6 +17,8 @@ static double Bondi_T0; // background temperature static double Bondi_InBC_T; // temperature inside the void region static double Bondi_InBC_NCell; // number of finest cells for the radius of the void region static double Bondi_Soften_NCell; // number of finest cells for the soften length (<=0.0 ==> disable) + bool Bondi_void; // enable the void region + bool Bondi_dynBH; // dynamically increase BH mass double Bondi_InBC_R; // radius of the void region (=Bondi_InBC_NCell*dh[MAX_LEVEL]) double Bondi_InBC_P; // pressure inside the void region @@ -76,17 +78,15 @@ static double Bondi_HSE_Beta_P1; // P(r) = P1*( 1/x + atan(x) ) + P2 as static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 currently fixed to -0.5*pi*P1 so that P(inf)=0 // parameters for soliton - bool Bondi_void; // enable the void region - bool Bondi_dynBH; // dynamically increase BH mass bool Bondi_Soliton; // add soliton external potential - double Bondi_Soliton_m22; // FDM particle mass for Bondi_Soliton + double Bondi_Soliton_m22; // FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton int Bondi_Soliton_type; // functional form for gradually introducing the soliton potential - // (1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) + // (1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) double Bondi_Soliton_t; // characteristic time normalized to Bondi_TimeB for adding the soliton potential double Bondi_Soliton_rc; // soliton radius for Bondi_Soliton - // (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) - double Bondi_Soliton_MassHalo; // halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 - double Bondi_Soliton_Redshift; // redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 + // (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) +static double Bondi_Soliton_MassHalo; // halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 +static double Bondi_Soliton_Redshift; // redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 // ======================================================================================= @@ -228,41 +228,41 @@ void SetParameter() // --> note that VARIABLE, DEFAULT, MIN, and MAX must have the same data type // --> some handy constants (e.g., NoMin_int, Eps_float, ...) are defined in "include/ReadPara.h" // ******************************************************************************************************************************** -// ReadPara->Add( "KEY_IN_THE_FILE", &VARIABLE, DEFAULT, MIN, MAX ); +// ReadPara->Add( "KEY_IN_THE_FILE", &VARIABLE, DEFAULT, MIN, MAX ); // ******************************************************************************************************************************** - ReadPara->Add( "Bondi_MassBH", &Bondi_MassBH, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_Rho0", &Bondi_Rho0, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_T0", &Bondi_T0, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_RefineRadius0", &Bondi_RefineRadius0, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_HalfMaxLvRefR", &Bondi_HalfMaxLvRefR, true, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_InBC_Rho", &Bondi_InBC_Rho, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_InBC_T", &Bondi_InBC_T, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_InBC_NCell", &Bondi_InBC_NCell, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_Soften_NCell", &Bondi_Soften_NCell, -1.0, NoMin_double, NoMax_double ); - - ReadPara->Add( "Bondi_HSE", &Bondi_HSE, false, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_HSE_Mode", &Bondi_HSE_Mode, 1, 1, 3 ); - ReadPara->Add( "Bondi_HSE_Dens_NBin", &Bondi_HSE_Dens_NBin, 10000, 2, NoMax_int ); - ReadPara->Add( "Bondi_HSE_Dens_MinR", &Bondi_HSE_Dens_MinR, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_HSE_Dens_MaxR", &Bondi_HSE_Dens_MaxR, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_HSE_Dens_NormR", &Bondi_HSE_Dens_NormR, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_HSE_Dens_NormD", &Bondi_HSE_Dens_NormD, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_HSE_Truncate", &Bondi_HSE_Truncate, true, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_HSE_TrunR", &Bondi_HSE_TrunR, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_HSE_TrunD", &Bondi_HSE_TrunD, -1.0, Eps_double, NoMax_double ); - ReadPara->Add( "Bondi_HSE_TrunSmoothR",&Bondi_HSE_TrunSmoothR, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_HSE_Pres_NormT", &Bondi_HSE_Pres_NormT, false, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_HSE_Beta_Rcore", &Bondi_HSE_Beta_Rcore, -1.0, Eps_double, NoMax_double ); - - ReadPara->Add( "Bondi_void", &Bondi_void, true, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_dynBH", &Bondi_dynBH, true, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); - ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 5, 1, 5 ); - ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_Soliton_Redshift", &Bondi_Soliton_Redshift, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_MassBH", &Bondi_MassBH, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_Rho0", &Bondi_Rho0, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_T0", &Bondi_T0, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_RefineRadius0", &Bondi_RefineRadius0, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_HalfMaxLvRefR", &Bondi_HalfMaxLvRefR, true, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_InBC_Rho", &Bondi_InBC_Rho, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_InBC_T", &Bondi_InBC_T, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_InBC_NCell", &Bondi_InBC_NCell, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_Soften_NCell", &Bondi_Soften_NCell, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_void", &Bondi_void, true, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_dynBH", &Bondi_dynBH, false, Useless_bool, Useless_bool ); + + ReadPara->Add( "Bondi_HSE", &Bondi_HSE, false, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_HSE_Mode", &Bondi_HSE_Mode, 1, 1, 3 ); + ReadPara->Add( "Bondi_HSE_Dens_NBin", &Bondi_HSE_Dens_NBin, 10000, 2, NoMax_int ); + ReadPara->Add( "Bondi_HSE_Dens_MinR", &Bondi_HSE_Dens_MinR, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_HSE_Dens_MaxR", &Bondi_HSE_Dens_MaxR, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_HSE_Dens_NormR", &Bondi_HSE_Dens_NormR, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_HSE_Dens_NormD", &Bondi_HSE_Dens_NormD, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_HSE_Truncate", &Bondi_HSE_Truncate, true, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_HSE_TrunR", &Bondi_HSE_TrunR, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_HSE_TrunD", &Bondi_HSE_TrunD, -1.0, Eps_double, NoMax_double ); + ReadPara->Add( "Bondi_HSE_TrunSmoothR", &Bondi_HSE_TrunSmoothR, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_HSE_Pres_NormT", &Bondi_HSE_Pres_NormT, false, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_HSE_Beta_Rcore", &Bondi_HSE_Beta_Rcore, -1.0, Eps_double, NoMax_double ); + + ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); + ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 5, 1, 5 ); + ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); + ReadPara->Add( "Bondi_Soliton_Redshift", &Bondi_Soliton_Redshift, -1.0, NoMin_double, NoMax_double ); ReadPara->Read( FileName ); @@ -293,6 +293,14 @@ void SetParameter() Aux_Message( stderr, "WARNING : OPT__BC_FLU[%d] != BC_FLU_OUTFLOW for non-HSE setup !?\n", s ); } + if ( Bondi_Soliton ) + { + if ( Bondi_Soliton_m22 <= 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_m22 (%14.7e) <= 0.0 !!\n", Bondi_Soliton_m22 ); + if ( Bondi_Soliton_t < 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_t (%14.7e) < 0.0 !!\n", Bondi_Soliton_t ); + if ( Bondi_Soliton_MassHalo <= 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_MassHalo (%14.7e) <= 0.0 !!\n", Bondi_Soliton_MassHalo ); + if ( Bondi_Soliton_Redshift < 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_Redshift (%14.7e) < 0.0 !!\n", Bondi_Soliton_Redshift ); + } + // (2) set the problem-specific derived parameters // must initialize EoS first @@ -380,11 +388,14 @@ void SetParameter() } } // if ( Bondi_HSE ) + +// (4) initialize the soliton setup if ( Bondi_Soliton ) { - if ( Bondi_Soliton_rc < 0.0 ) { + if ( Bondi_Soliton_rc < 0.0 ) + { double z = Bondi_Soliton_Redshift; - double Mh = Bondi_Soliton_MassHalo; + double Mh = Bondi_Soliton_MassHalo*UnitExt_M/Const_Msun; // convert to Msun double H0 = 67.66; double Om0 = 0.3111; H0 = H0*1e5/(Const_kpc*1e3); @@ -395,14 +406,16 @@ void SetParameter() double kiz_z = (18*SQR(3.14159265)+82*(Om_z-1)-39*SQR(Om_z-1))/Om_z; double kiz_0 = (18*SQR(3.14159265)+82*(Om_0-1)-39*SQR(Om_0-1))/Om_0; - Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow(1+z,-1.0/2.0)*pow(kiz_z/kiz_0,-1.0/6.0)*pow(Mh/1e9,-1.0/3.0); + Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow(1+z,-1.0/2.0)*pow(kiz_z/kiz_0,-1.0/6.0)*pow(Mh/1e9,-1.0/3.0); // in kpc + Bondi_Soliton_rc *= Const_kpc/UnitExt_L; // convert to external units to match the manually input value } - Bondi_Soliton_rc *= UnitExt_L/UNIT_L; - Bondi_Soliton_t *= Bondi_TimeB; - } + + Bondi_Soliton_rc *= UnitExt_L/UNIT_L; // convert to internal units + Bondi_Soliton_t *= Bondi_TimeB; // input Bondi_Soliton_t is normalized to the Bondi time + } // if ( Bondi_Soliton ) -// (4) reset other general-purpose parameters +// (5) reset other general-purpose parameters // --> a helper macro PRINT_RESET_PARA is defined in Macro.h const long End_Step_Default = __INT_MAX__; const double End_T_Default = 1.0e1*Bondi_TimeB; // 10 Bondi time From 8e2447956474286d131e8905cfe900428e925a07 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sat, 25 Jan 2025 23:52:50 +0800 Subject: [PATCH 54/59] Style --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 0c15979293..d030199425 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -92,7 +92,6 @@ static double Bondi_Soliton_Redshift; // redshift for Bondi_Soliton when Bon // problem-specific function prototypes void Init_ExtAcc_Bondi(); -void Init_ExtPot_Bondi(); void Record_Bondi(); bool Flag_Bondi( const int i, const int j, const int k, const int lv, const int PID, const double *Threshold ); int Flu_ResetByUser_Func_Bondi( real fluid[], const double Emag, const double x, const double y, const double z, const double Time, @@ -111,7 +110,8 @@ void SetExtAccAuxArray_Bondi( double [], const double ); #ifdef GRAVITY //------------------------------------------------------------------------------------------------------- // Function : Poi_UserWorkBeforePoisson_Bondi -// Description : Call SetExtAccAuxArray_Bondi() to reset Bondi_MassBH before invoking the Poisson solver +// Description : Call SetExtAccAuxArray_Bondi() to reset Bondi_MassBH and soliton parameters before +// invoking the Poisson solver // // Note : 1. Invoked by Gra_AdvanceDt() using the function pointer "Poi_UserWorkBeforePoisson_Ptr" // @@ -394,19 +394,18 @@ void SetParameter() { if ( Bondi_Soliton_rc < 0.0 ) { - double z = Bondi_Soliton_Redshift; - double Mh = Bondi_Soliton_MassHalo*UnitExt_M/Const_Msun; // convert to Msun - double H0 = 67.66; - double Om0 = 0.3111; - H0 = H0*1e5/(Const_kpc*1e3); - double a0 = Om0*SQR(H0)/(2.47e-5*SQR(1e7/(Const_kpc*1e3))); - double H_H0_z = 1/(1-Om0*(1-pow(1+z,3.0)*(1+z+a0)/a0)); - double Om_z = Om0*pow(1+z,3.0)*H_H0_z; - double Om_0 = Om0/(1-Om0*(1-(1+a0)/a0)); - double kiz_z = (18*SQR(3.14159265)+82*(Om_z-1)-39*SQR(Om_z-1))/Om_z; - double kiz_0 = (18*SQR(3.14159265)+82*(Om_0-1)-39*SQR(Om_0-1))/Om_0; - - Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow(1+z,-1.0/2.0)*pow(kiz_z/kiz_0,-1.0/6.0)*pow(Mh/1e9,-1.0/3.0); // in kpc + const double z = Bondi_Soliton_Redshift; + const double Mh = Bondi_Soliton_MassHalo*UnitExt_M/Const_Msun; // convert to Msun + const double H0 = 67.66*1e5/( Const_kpc*1e3 ); // hard-coded for now + const double Om0 = 0.3111; // hard-coded for now + const double a0 = Om0*SQR(H0)/( 2.47e-5*SQR( 1e7/(Const_kpc*1e3) ) ); + const double H_H0_z = 1.0/( 1.0-Om0*( 1.0-pow(1.0+z,3.0)*(1.0+z+a0)/a0 ) ); + const double Om_z = Om0*pow(1.0+z,3.0)*H_H0_z; + const double Om_0 = Om0/( 1.0-Om0*( 1.0-(1.0+a0)/a0 ) ); + const double kiz_z = ( 18.0*SQR(M_PI) + 82.0*(Om_z-1.0) - 39.0*SQR(Om_z-1.0) )/Om_z; + const double kiz_0 = ( 18.0*SQR(M_PI) + 82.0*(Om_0-1.0) - 39.0*SQR(Om_0-1.0) )/Om_0; + + Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow( 1.0+z, -1.0/2.0 )*pow( kiz_z/kiz_0, -1.0/6.0 )*pow( Mh/1e9, -1.0/3.0 ); // in kpc Bondi_Soliton_rc *= Const_kpc/UnitExt_L; // convert to external units to match the manually input value } From fd82597708229460fec18397cb7aa1f802a04a01 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sun, 26 Jan 2025 10:29:22 +0800 Subject: [PATCH 55/59] Minor --- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 111 +++++++++--------- 1 file changed, 56 insertions(+), 55 deletions(-) diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index d030199425..1191ab50f1 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -392,20 +392,21 @@ void SetParameter() // (4) initialize the soliton setup if ( Bondi_Soliton ) { +// compute the soliton radius using the core-halo relation from Eq. 7 in Schive et al., PRL 113, 261302 (2014) if ( Bondi_Soliton_rc < 0.0 ) { const double z = Bondi_Soliton_Redshift; const double Mh = Bondi_Soliton_MassHalo*UnitExt_M/Const_Msun; // convert to Msun - const double H0 = 67.66*1e5/( Const_kpc*1e3 ); // hard-coded for now + const double H0 = 67.66*Const_km/Const_Mpc; // hard-coded for now const double Om0 = 0.3111; // hard-coded for now const double a0 = Om0*SQR(H0)/( 2.47e-5*SQR( 1e7/(Const_kpc*1e3) ) ); const double H_H0_z = 1.0/( 1.0-Om0*( 1.0-pow(1.0+z,3.0)*(1.0+z+a0)/a0 ) ); const double Om_z = Om0*pow(1.0+z,3.0)*H_H0_z; const double Om_0 = Om0/( 1.0-Om0*( 1.0-(1.0+a0)/a0 ) ); - const double kiz_z = ( 18.0*SQR(M_PI) + 82.0*(Om_z-1.0) - 39.0*SQR(Om_z-1.0) )/Om_z; - const double kiz_0 = ( 18.0*SQR(M_PI) + 82.0*(Om_0-1.0) - 39.0*SQR(Om_0-1.0) )/Om_0; + const double zeta_z = ( 18.0*SQR(M_PI) + 82.0*(Om_z-1.0) - 39.0*SQR(Om_z-1.0) )/Om_z; + const double zeta_0 = ( 18.0*SQR(M_PI) + 82.0*(Om_0-1.0) - 39.0*SQR(Om_0-1.0) )/Om_0; - Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow( 1.0+z, -1.0/2.0 )*pow( kiz_z/kiz_0, -1.0/6.0 )*pow( Mh/1e9, -1.0/3.0 ); // in kpc + Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow( 1.0+z, -1.0/2.0 )*pow( zeta_z/zeta_0, -1.0/6.0 )*pow( Mh/1e9, -1.0/3.0 ); // in kpc Bondi_Soliton_rc *= Const_kpc/UnitExt_L; // convert to external units to match the manually input value } @@ -434,56 +435,56 @@ void SetParameter() if ( MPI_Rank == 0 ) { Aux_Message( stdout, "=============================================================================\n" ); - Aux_Message( stdout, " test problem ID = %d\n", TESTPROB_ID ); - Aux_Message( stdout, " Bondi_MassBH = %13.7e (%13.7e Msun)\n", Bondi_MassBH, Bondi_MassBH*UNIT_M/Const_Msun ); - Aux_Message( stdout, " Bondi_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_Rho0, Bondi_Rho0*UNIT_D ); - Aux_Message( stdout, " Bondi_T0 = %13.7e (%13.7e keV)\n", Bondi_T0, Bondi_T0*UNIT_E/Const_keV ); - Aux_Message( stdout, " Bondi_RefineRadius0 = %13.7e (%13.7e kpc)\n", Bondi_RefineRadius0, Bondi_RefineRadius0*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_HalfMaxLvRefR = %s\n", (Bondi_HalfMaxLvRefR)?"YES":"NO" ); - Aux_Message( stdout, " Bondi_InBC_Rho = %13.7e (%13.7e g/cm^3)\n", Bondi_InBC_Rho, Bondi_InBC_Rho*UNIT_D ); - Aux_Message( stdout, " Bondi_InBC_T = %13.7e (%13.7e keV)\n", Bondi_InBC_T, Bondi_InBC_T*UNIT_E/Const_keV ); - Aux_Message( stdout, " Bondi_InBC_NCell = %13.7e\n", Bondi_InBC_NCell ); - Aux_Message( stdout, " Bondi_InBC_R = %13.7e (%13.7e kpc)\n", Bondi_InBC_R, Bondi_InBC_R*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_InBC_E = %13.7e\n", Bondi_InBC_E ); - Aux_Message( stdout, " Bondi_Soften_NCell = %13.7e\n", Bondi_Soften_NCell ); - Aux_Message( stdout, " Bondi_Soften_R = %13.7e (%13.7e kpc)\n", Bondi_Soften_R, Bondi_Soften_R*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_Cs = %13.7e (%13.7e km/s)\n", Bondi_Cs, Bondi_Cs*UNIT_V/Const_km ); - Aux_Message( stdout, " Schwarzschild radius = %13.7e (%13.7e kpc)\n", Bondi_RS, Bondi_RS*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi radius = %13.7e (%13.7e kpc)\n", Bondi_RB, Bondi_RB*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi time = %13.7e (%13.7e Myr)\n", Bondi_TimeB, Bondi_TimeB*UNIT_T/Const_Myr ); - - Aux_Message( stdout, " Bondi_HSE = %s\n", (Bondi_HSE)?"YES":"NO" ); + Aux_Message( stdout, " test problem ID = %d\n", TESTPROB_ID ); + Aux_Message( stdout, " Bondi_MassBH = %13.7e (%13.7e Msun)\n", Bondi_MassBH, Bondi_MassBH*UNIT_M/Const_Msun ); + Aux_Message( stdout, " Bondi_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_Rho0, Bondi_Rho0*UNIT_D ); + Aux_Message( stdout, " Bondi_T0 = %13.7e (%13.7e keV)\n", Bondi_T0, Bondi_T0*UNIT_E/Const_keV ); + Aux_Message( stdout, " Bondi_RefineRadius0 = %13.7e (%13.7e kpc)\n", Bondi_RefineRadius0, Bondi_RefineRadius0*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_HalfMaxLvRefR = %s\n", (Bondi_HalfMaxLvRefR)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_InBC_Rho = %13.7e (%13.7e g/cm^3)\n", Bondi_InBC_Rho, Bondi_InBC_Rho*UNIT_D ); + Aux_Message( stdout, " Bondi_InBC_T = %13.7e (%13.7e keV)\n", Bondi_InBC_T, Bondi_InBC_T*UNIT_E/Const_keV ); + Aux_Message( stdout, " Bondi_InBC_NCell = %13.7e\n", Bondi_InBC_NCell ); + Aux_Message( stdout, " Bondi_InBC_R = %13.7e (%13.7e kpc)\n", Bondi_InBC_R, Bondi_InBC_R*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_InBC_E = %13.7e\n", Bondi_InBC_E ); + Aux_Message( stdout, " Bondi_Soften_NCell = %13.7e\n", Bondi_Soften_NCell ); + Aux_Message( stdout, " Bondi_Soften_R = %13.7e (%13.7e kpc)\n", Bondi_Soften_R, Bondi_Soften_R*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_Cs = %13.7e (%13.7e km/s)\n", Bondi_Cs, Bondi_Cs*UNIT_V/Const_km ); + Aux_Message( stdout, " Schwarzschild radius = %13.7e (%13.7e kpc)\n", Bondi_RS, Bondi_RS*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi radius = %13.7e (%13.7e kpc)\n", Bondi_RB, Bondi_RB*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi time = %13.7e (%13.7e Myr)\n", Bondi_TimeB, Bondi_TimeB*UNIT_T/Const_Myr ); + + Aux_Message( stdout, " Bondi_HSE = %s\n", (Bondi_HSE)?"YES":"NO" ); if ( Bondi_HSE ) { - Aux_Message( stdout, " Bondi_HSE_Mode = %d\n", Bondi_HSE_Mode ); - Aux_Message( stdout, " Bondi_HSE_Dens_NBin = %d\n", Bondi_HSE_Dens_NBin ); - Aux_Message( stdout, " Bondi_HSE_Dens_MinR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MinR, Bondi_HSE_Dens_MinR*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_HSE_Dens_MaxR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MaxR, Bondi_HSE_Dens_MaxR*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_HSE_Dens_NormR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_NormR, Bondi_HSE_Dens_NormR*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_HSE_Dens_NormD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Dens_NormD, Bondi_HSE_Dens_NormD*UNIT_D ); - Aux_Message( stdout, " Bondi_HSE_Truncate = %s\n", (Bondi_HSE_Truncate)?"YES":"NO" ); - Aux_Message( stdout, " Bondi_HSE_TrunR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunR, Bondi_HSE_TrunR*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_HSE_TrunD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_TrunD, Bondi_HSE_TrunD*UNIT_D ); - Aux_Message( stdout, " Bondi_HSE_TrunSmoothR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunSmoothR, Bondi_HSE_TrunSmoothR*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_HSE_Pres_NormT = %s\n", (Bondi_HSE_Pres_NormT)?"YES":"NO" ); - Aux_Message( stdout, " Bondi_HSE_Beta = %13.7e\n", Bondi_HSE_Beta ); - Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D ); - Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); } - - Aux_Message( stdout, " Bondi_void = %s\n", (Bondi_void)?"YES":"NO" ); - Aux_Message( stdout, " Bondi_dynBH = %s\n", (Bondi_dynBH)?"YES":"NO" ); - Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_HSE_Mode = %d\n", Bondi_HSE_Mode ); + Aux_Message( stdout, " Bondi_HSE_Dens_NBin = %d\n", Bondi_HSE_Dens_NBin ); + Aux_Message( stdout, " Bondi_HSE_Dens_MinR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MinR, Bondi_HSE_Dens_MinR*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_HSE_Dens_MaxR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MaxR, Bondi_HSE_Dens_MaxR*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_HSE_Dens_NormR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_NormR, Bondi_HSE_Dens_NormR*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_HSE_Dens_NormD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Dens_NormD, Bondi_HSE_Dens_NormD*UNIT_D ); + Aux_Message( stdout, " Bondi_HSE_Truncate = %s\n", (Bondi_HSE_Truncate)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_HSE_TrunR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunR, Bondi_HSE_TrunR*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_HSE_TrunD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_TrunD, Bondi_HSE_TrunD*UNIT_D ); + Aux_Message( stdout, " Bondi_HSE_TrunSmoothR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunSmoothR, Bondi_HSE_TrunSmoothR*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_HSE_Pres_NormT = %s\n", (Bondi_HSE_Pres_NormT)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_HSE_Beta = %13.7e\n", Bondi_HSE_Beta ); + Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D ); + Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); } + + Aux_Message( stdout, " Bondi_void = %s\n", (Bondi_void)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_dynBH = %s\n", (Bondi_dynBH)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); if( Bondi_Soliton ) { - Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); - Aux_Message( stdout, " Bondi_Soliton_type = %d\n", Bondi_Soliton_type ); - Aux_Message( stdout, " Bondi_Soliton_t = %13.7e (%13.7e Myr)\n", Bondi_Soliton_t, Bondi_Soliton_t*UNIT_T/Const_Myr ); - Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc ); - Aux_Message( stdout, " Bondi_Soliton_MassHalo = %13.7e Msun\n", Bondi_Soliton_MassHalo ); - Aux_Message( stdout, " Bondi_Soliton_Redshift = %13.7e\n", Bondi_Soliton_Redshift );} + Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); + Aux_Message( stdout, " Bondi_Soliton_type = %d\n", Bondi_Soliton_type ); + Aux_Message( stdout, " Bondi_Soliton_t = %13.7e (%13.7e Myr)\n", Bondi_Soliton_t, Bondi_Soliton_t*UNIT_T/Const_Myr ); + Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc ); + Aux_Message( stdout, " Bondi_Soliton_MassHalo = %13.7e Msun\n", Bondi_Soliton_MassHalo*UnitExt_M/Const_Msun ); + Aux_Message( stdout, " Bondi_Soliton_Redshift = %13.7e\n", Bondi_Soliton_Redshift ); } Aux_Message( stdout, "=============================================================================\n" ); } // if ( MPI_Rank == 0 ) - if ( MPI_Rank == 0 ) Aux_Message( stdout, " Setting runtime parameters ... done\n" ); + if ( MPI_Rank == 0 ) Aux_Message( stdout, " Setting runtime parameters ... done\n" ); } // FUNCTION : SetParameter @@ -761,13 +762,13 @@ void Init_TestProb_Hydro_Bondi() // set the function pointers of various problem-specific routines - Init_Function_User_Ptr = SetGridIC; - Flag_User_Ptr = Flag_Bondi; - Aux_Record_User_Ptr = Record_Bondi; - BC_User_Ptr = BondiBC; - Flu_ResetByUser_Func_Ptr = Flu_ResetByUser_Func_Bondi; - Flu_ResetByUser_API_Ptr = Flu_ResetByUser_API_Bondi; - End_User_Ptr = End_Bondi; + Init_Function_User_Ptr = SetGridIC; + Flag_User_Ptr = Flag_Bondi; + Aux_Record_User_Ptr = Record_Bondi; + BC_User_Ptr = BondiBC; + Flu_ResetByUser_Func_Ptr = Flu_ResetByUser_Func_Bondi; + Flu_ResetByUser_API_Ptr = Flu_ResetByUser_API_Bondi; + End_User_Ptr = End_Bondi; # ifdef GRAVITY Init_ExtAcc_Ptr = Init_ExtAcc_Bondi; Poi_UserWorkBeforePoisson_Ptr = Poi_UserWorkBeforePoisson_Bondi; From d42930f9baefdb0ddb2962bef52d0afc59bae55d Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sun, 26 Jan 2025 12:35:50 +0800 Subject: [PATCH 56/59] Simplify the expression of soliton external potential --- .../test_problem/Hydro/Bondi/Input__TestProb | 2 +- src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp | 126 ++++++++++-------- .../Hydro/Bondi/Flu_ResetByUser_Bondi.cpp | 3 +- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 4 +- 4 files changed, 71 insertions(+), 64 deletions(-) diff --git a/example/test_problem/Hydro/Bondi/Input__TestProb b/example/test_problem/Hydro/Bondi/Input__TestProb index dd2c747f6b..d20990c1c5 100644 --- a/example/test_problem/Hydro/Bondi/Input__TestProb +++ b/example/test_problem/Hydro/Bondi/Input__TestProb @@ -28,7 +28,7 @@ Bondi_HSE_Beta_Rcore 1.0e-1 # core radius in the beta model (in kpc) Bondi_Soliton 0 # add soliton external potential [0] Bondi_Soliton_m22 -1.0 # FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton [-1.0] Bondi_Soliton_type 5 # functional form for gradually introducing the soliton potential - # (1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) [5] + # (0:unity, 1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) [5] Bondi_Soliton_t -1.0 # characteristic time normalized to Bondi_TimeB for adding the soliton potential [-1.0] Bondi_Soliton_rc -1.0 # soliton radius for Bondi_Soliton (in kpc) # (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) [-1.0] diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp index 73ade16f02..913058f677 100644 --- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp @@ -46,45 +46,54 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time ) AuxArray[0] = amr->BoxCenter[0]; AuxArray[1] = amr->BoxCenter[1]; AuxArray[2] = amr->BoxCenter[2]; - AuxArray[3] = NEWTON_G*Bondi_MassBH; // gravitational_constant*point_source_mass + AuxArray[3] = NEWTON_G*Bondi_MassBH; // gravitational_constant*black_hole_mass (in code units) AuxArray[4] = Bondi_Soften_R; // soften_length (<=0.0 --> disable) - AuxArray[5] = Bondi_Soliton; + + double Coeff_t; + switch ( Bondi_Soliton_type ) + { +// unity + case 0: Coeff_t = 1.0; + break; + +// arctan function + case 1: Coeff_t = 2.0/M_PI*atan( Time/Bondi_Soliton_t ); + break; + +// linear function + case 2: Coeff_t = ( Time < Bondi_Soliton_t ) ? Time/Bondi_Soliton_t + : 1.0; + break; + +// smooth step function + case 3: Coeff_t = ( Time < Bondi_Soliton_t ) ? 3.0*SQR( Time/Bondi_Soliton_t ) - 2.0*CUBE( Time/Bondi_Soliton_t ) + : 1.0; + break; + +// sigmoid + case 4: Coeff_t = 2.0 / ( 1.0 + exp( -Time*log(3.0)/Bondi_Soliton_t ) ) - 1.0; + break; + +// tanh + case 5: Coeff_t = tanh( Time/Bondi_Soliton_t ); + break; + + default: + Aux_Error( ERROR_INFO, "unsupported Bondi_Soliton_type (%d) !!\n", Bondi_Soliton_type ); + } // switch ( Bondi_Soliton_type ) if ( Bondi_Soliton ) { - AuxArray[6] = Bondi_Soliton_m22; - AuxArray[7] = Bondi_Soliton_rc; - AuxArray[8] = NEWTON_G*Const_Msun/UNIT_M; - AuxArray[9] = UNIT_L/Const_kpc; - - switch ( Bondi_Soliton_type ) - { - case 1: // arctan function - AuxArray[8] *= 2.0/M_PI*atan( Time/Bondi_Soliton_t ); - break; - - case 2: // linear function - if ( Time < Bondi_Soliton_t ) - AuxArray[8] *= Time/Bondi_Soliton_t; - break; - - case 3: // smooth step function - if ( Time < Bondi_Soliton_t ) - AuxArray[8] *= 3.0*SQR( Time/Bondi_Soliton_t ) - 2.0*CUBE( Time/Bondi_Soliton_t ); - break; - - case 4: // sigmoid - AuxArray[8] *= 2.0 / ( 1.0 + exp( -Time*log(3.0)/Bondi_Soliton_t ) ) - 1.0; - break; - - case 5: // tanh - AuxArray[8] *= tanh( Time/Bondi_Soliton_t ); - break; - - default: - Aux_Error( ERROR_INFO, "unsupported Bondi_Soliton_type (%d) !!\n", Bondi_Soliton_type ); - } // switch ( Bondi_Soliton_type ) - } // if ( Bondi_Soliton ) + AuxArray[5] = Coeff_t*NEWTON_G*( 4.17e9*Const_Msun/UNIT_M )/ + ( SQR( Bondi_Soliton_m22*(real)10.0 )*( Bondi_Soliton_rc*UNIT_L/Const_pc ) ); + AuxArray[6] = Bondi_Soliton_rc; + } + + else + { + AuxArray[5] = -1.0; + AuxArray[6] = -1.0; + } } // FUNCTION : SetExtAccAuxArray_Bondi #endif // #ifndef __CUDACC__ @@ -114,31 +123,30 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub const double UserArray[] ) { - const double Cen[3] = { UserArray[0], UserArray[1], UserArray[2] }; - real GM = (real)UserArray[3]; - const real eps = (real)UserArray[4]; - const bool Soliton = (real)UserArray[5]; - const real dx = (real)(x - Cen[0]); - const real dy = (real)(y - Cen[1]); - const real dz = (real)(z - Cen[2]); - const real r = SQRT( dx*dx + dy*dy + dz*dz ); - - if ( Soliton ) + const double Cen[3] = { UserArray[0], UserArray[1], UserArray[2] }; + real GM = (real)UserArray[3]; + const real eps = (real)UserArray[4]; + const real GM0_sol = (real)UserArray[5]; + const real rc = (real)UserArray[6]; + const real dx = (real)(x - Cen[0]); + const real dy = (real)(y - Cen[1]); + const real dz = (real)(z - Cen[2]); + const real r = SQRT( dx*dx + dy*dy + dz*dz ); + + if ( GM0_sol > (real)0.0 && rc > (real)0.0 ) { - const real m22 = (real)UserArray[6]; - const real rc = (real)UserArray[7]; // In code unit or kpc - const real Coeff = (real)UserArray[8]; - const real UNIT_L = (real)UserArray[9]; - -#ifdef Plummer - double M = GM*CUBE(r)/pow(SQR(r)+SQR(rc),1.5); -#else - real a = SQRT(POW(2.0,1.0/8.0)-1)*(r/rc); - real M = (real)4.17e9/(SQR(m22/1e-1)*(rc*UNIT_L*1e3)*POW(SQR(a)+1, 7.0))*((real)3465*POW(a,13.0)+(real)23100*POW(a,11.0)+(real)65373*POW(a,9.0)+(real)101376*POW(a,7.0)+(real)92323*POW(a,5.0)+(real)48580*POW(a,3.0)-(real)3465*a+(real)3465*POW(SQR(a)+1, 7.0)*ATAN(a)); - M *= Coeff; -#endif - GM += M; - } + const real a = SQRT( POW( (real)2.0, (real)1.0/(real)8.0 ) - (real)1.0 )*(r/rc); + const real GM_sol = (real)GM0_sol/( POW( SQR(a)+(real)1.0, (real)7.0 ) )* + ( (real) 3465*POW( a, (real)13.0 ) + +(real) 23100*POW( a, (real)11.0 ) + +(real) 65373*POW( a, (real) 9.0 ) + +(real)101376*POW( a, (real) 7.0 ) + +(real) 92323*POW( a, (real) 5.0 ) + +(real) 48580*POW( a, (real) 3.0 ) + -(real) 3465*a + +(real) 3465*POW( SQR(a)+(real)1.0, (real)7.0 )*ATAN(a) ); + GM += GM_sol; + } // if ( GM0_sol > 0.0 && rc > 0.0 ) // Plummer # if ( defined SOFTEN_PLUMMER ) diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp index 2a4c7339f3..c8a6a2bb32 100644 --- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp @@ -118,8 +118,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg, int Reset; real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL]; double x, y, z, x0, y0, z0; -// Define varible to record sink mass at every time step - double SinkMass_OneSubStep_ThisRank = 0.0; + double SinkMass_OneSubStep_ThisRank = 0.0; // variables to record sink mass at every time step double SinkMass_OneSubStep_AllRank; // reset to 0 since we only want to record the number of void cells **for one sub-step** diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 1191ab50f1..4fe6b4fe1a 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -81,7 +81,7 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr bool Bondi_Soliton; // add soliton external potential double Bondi_Soliton_m22; // FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton int Bondi_Soliton_type; // functional form for gradually introducing the soliton potential - // (1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) + // (0:unity, 1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) double Bondi_Soliton_t; // characteristic time normalized to Bondi_TimeB for adding the soliton potential double Bondi_Soliton_rc; // soliton radius for Bondi_Soliton // (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) @@ -258,7 +258,7 @@ void SetParameter() ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool ); ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double ); - ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 5, 1, 5 ); + ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 5, 0, 5 ); ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double ); ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double ); From 51125343d123f849661356abfe406733b5d0a3f1 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sun, 26 Jan 2025 15:03:51 +0800 Subject: [PATCH 57/59] Minor --- example/test_problem/Hydro/Bondi/Input__TestProb | 4 ++-- .../Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/example/test_problem/Hydro/Bondi/Input__TestProb b/example/test_problem/Hydro/Bondi/Input__TestProb index d20990c1c5..a42129b261 100644 --- a/example/test_problem/Hydro/Bondi/Input__TestProb +++ b/example/test_problem/Hydro/Bondi/Input__TestProb @@ -32,5 +32,5 @@ Bondi_Soliton_type 5 # functional form for gradually introduci Bondi_Soliton_t -1.0 # characteristic time normalized to Bondi_TimeB for adding the soliton potential [-1.0] Bondi_Soliton_rc -1.0 # soliton radius for Bondi_Soliton (in kpc) # (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) [-1.0] -Bondi_Soliton_MassHalo -1.0 # halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 (in Msun) [-1.0] -Bondi_Soliton_Redshift -1.0 # redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 [-1.0] +Bondi_Soliton_MassHalo -1.0 # halo mass for determining Bondi_Soliton_rc (in Msun) [-1.0] +Bondi_Soliton_Redshift -1.0 # redshift for determining Bondi_Soliton_rc [-1.0] diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp index 4fe6b4fe1a..ab63b7f307 100644 --- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp +++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp @@ -85,8 +85,8 @@ static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 curr double Bondi_Soliton_t; // characteristic time normalized to Bondi_TimeB for adding the soliton potential double Bondi_Soliton_rc; // soliton radius for Bondi_Soliton // (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) -static double Bondi_Soliton_MassHalo; // halo mass for Bondi_Soliton when Bondi_Soliton_rc<0.0 -static double Bondi_Soliton_Redshift; // redshift for Bondi_Soliton when Bondi_Soliton_rc<0.0 +static double Bondi_Soliton_MassHalo; // halo mass for determining Bondi_Soliton_rc +static double Bondi_Soliton_Redshift; // redshift for determining Bondi_Soliton_rc // ======================================================================================= @@ -119,7 +119,7 @@ void SetExtAccAuxArray_Bondi( double [], const double ); // lv : Target refinement level // // Return : None -//////------------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------------- void Poi_UserWorkBeforePoisson_Bondi( const double Time, const int lv ) { @@ -452,6 +452,8 @@ void SetParameter() Aux_Message( stdout, " Schwarzschild radius = %13.7e (%13.7e kpc)\n", Bondi_RS, Bondi_RS*UNIT_L/Const_kpc ); Aux_Message( stdout, " Bondi radius = %13.7e (%13.7e kpc)\n", Bondi_RB, Bondi_RB*UNIT_L/Const_kpc ); Aux_Message( stdout, " Bondi time = %13.7e (%13.7e Myr)\n", Bondi_TimeB, Bondi_TimeB*UNIT_T/Const_Myr ); + Aux_Message( stdout, " Bondi_void = %s\n", (Bondi_void)?"YES":"NO" ); + Aux_Message( stdout, " Bondi_dynBH = %s\n", (Bondi_dynBH)?"YES":"NO" ); Aux_Message( stdout, " Bondi_HSE = %s\n", (Bondi_HSE)?"YES":"NO" ); if ( Bondi_HSE ) { @@ -470,8 +472,6 @@ void SetParameter() Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D ); Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); } - Aux_Message( stdout, " Bondi_void = %s\n", (Bondi_void)?"YES":"NO" ); - Aux_Message( stdout, " Bondi_dynBH = %s\n", (Bondi_dynBH)?"YES":"NO" ); Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" ); if( Bondi_Soliton ) { Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 ); From f4619f29f96d12ef7d84384167d31ae97727f489 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sun, 26 Jan 2025 15:44:36 +0800 Subject: [PATCH 58/59] Set soliton parameters in Input__TestProb --- example/test_problem/Hydro/Bondi/Input__TestProb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/example/test_problem/Hydro/Bondi/Input__TestProb b/example/test_problem/Hydro/Bondi/Input__TestProb index a42129b261..df4e5c2059 100644 --- a/example/test_problem/Hydro/Bondi/Input__TestProb +++ b/example/test_problem/Hydro/Bondi/Input__TestProb @@ -26,11 +26,11 @@ Bondi_HSE_Pres_NormT 0 # normalize pressure profile such that T( Bondi_HSE_Beta_Rcore 1.0e-1 # core radius in the beta model (in kpc) Bondi_Soliton 0 # add soliton external potential [0] -Bondi_Soliton_m22 -1.0 # FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton [-1.0] +Bondi_Soliton_m22 1.0 # FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton [-1.0] Bondi_Soliton_type 5 # functional form for gradually introducing the soliton potential # (0:unity, 1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) [5] -Bondi_Soliton_t -1.0 # characteristic time normalized to Bondi_TimeB for adding the soliton potential [-1.0] +Bondi_Soliton_t 4.0e3 # characteristic time normalized to Bondi_TimeB for adding the soliton potential [-1.0] Bondi_Soliton_rc -1.0 # soliton radius for Bondi_Soliton (in kpc) # (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) [-1.0] -Bondi_Soliton_MassHalo -1.0 # halo mass for determining Bondi_Soliton_rc (in Msun) [-1.0] -Bondi_Soliton_Redshift -1.0 # redshift for determining Bondi_Soliton_rc [-1.0] +Bondi_Soliton_MassHalo 1.0e11 # halo mass for determining Bondi_Soliton_rc (in Msun) [-1.0] +Bondi_Soliton_Redshift 7.0 # redshift for determining Bondi_Soliton_rc [-1.0] From b1af04e917f01eb16c216010625979b7390a81d7 Mon Sep 17 00:00:00 2001 From: Hsi-Yu Schive Date: Sun, 26 Jan 2025 16:26:24 +0800 Subject: [PATCH 59/59] Correct indices in Bondi/plot_diagonal.gpt --- example/test_problem/Hydro/Bondi/plot_diagonal.gpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/test_problem/Hydro/Bondi/plot_diagonal.gpt b/example/test_problem/Hydro/Bondi/plot_diagonal.gpt index 54e94c8526..a4872a825f 100644 --- a/example/test_problem/Hydro/Bondi/plot_diagonal.gpt +++ b/example/test_problem/Hydro/Bondi/plot_diagonal.gpt @@ -69,7 +69,7 @@ do for [ID=ID_START:ID_END:ID_DELTA] { set yrange [1.0e-3:2.0e1] plot sprintf( '%s/Diag_%06d', FILE_SIMU, ID ) \ - u (abs($4-CENTER)*3**0.5):16 w p pt 6 lc 6 tit 'Simulation' \ + u (abs($4-CENTER)*3**0.5):17 w p pt 6 lc 6 tit 'Simulation' \ ,FILE_BONDI u 2:7 w l lc -1 tit 'Analytical' @@ -79,7 +79,7 @@ do for [ID=ID_START:ID_END:ID_DELTA] { set yrange [1.0e-2:1.0e3] plot sprintf( '%s/Diag_%06d', FILE_SIMU, ID ) \ - u (abs($4-CENTER)*3**0.5):13 w p pt 6 lc 6 tit 'Simulation' \ + u (abs($4-CENTER)*3**0.5):14 w p pt 6 lc 6 tit 'Simulation' \ ,FILE_BONDI u 2:( ($6/$7)**2.0*$4/GAMMA ) w l lc -1 tit 'Analytical'