Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
e53e09b
Con2PrimFactory: add code for RePrimAnd C2P
jaykalinani Oct 15, 2025
ab9698a
Con2PrimFactory: Bug fixes in RPA, clang-format
jaykalinani Jan 30, 2026
4e78afe
Con2PrimFactory: clean up
jaykalinani Feb 4, 2026
1657f28
AsterX: add more grid functions for subycycling purposes
lwJi Oct 27, 2025
121ce0c
AsterX: declare STORAGE for subcycling gfs
lwJi Oct 27, 2025
4ba05f3
AsterX: use par use_subcycling_wip
lwJi Oct 27, 2025
c4a794d
AsterX: turn off restriction of Fluxes, E and G when subcycle
lwJi Oct 27, 2025
ed5865e
AsterX: add unit test magTOV_Z4c_AMR_SC
lwJi Oct 29, 2025
64937ca
scripts: use development branch of SpacetimeX
lwJi Oct 29, 2025
881866e
AsterX: set dt=0.25 for unit test magTOV_Z4c_AMR_SC
lwJi Oct 29, 2025
ea52da3
EOSX: communicate EOS table across host memory, then copy to device
acwen11 Jan 21, 2026
3735d70
AsterX: restore tensor parities
acwen11 Jan 27, 2026
bf833f0
EOSX: clean up communication code
acwen11 Jan 27, 2026
33b5cbd
AsterX: Add limiters for magnetisation
Jan 19, 2026
533ec9c
AsterX: Add helpers, minor clean-up
Jan 19, 2026
92ffc42
AsterSeeds: new features for RNS: new external dipole, set initial pl…
acwen11 Jan 30, 2026
47f4595
AsterSeeds: enforce beta floor above set density cutoff instead of at…
acwen11 Jan 31, 2026
fc8165d
AsterSeeds: add debugging option to reset magnetic fields to 0 after …
acwen11 Feb 2, 2026
6e6c857
Con2PrimFactory: add mag limiters to RPA
acwen11 Feb 3, 2026
46531de
AsterX: hack low order flag to only trigger on density cutoff
acwen11 Feb 3, 2026
9fbe85e
AsterX: fix schedule to work with subcycling
acwen11 Feb 4, 2026
0c17175
AsterX: add parities for dBstag
acwen11 Feb 4, 2026
d5964e0
AsterX: add function to apply outer BC on cons, unused for now
acwen11 Feb 5, 2026
156152e
AsterX: add parities to k's
acwen11 Feb 6, 2026
86ab006
Con2PrimFactory: turn on beta/sigma limit after a delay
acwen11 Feb 11, 2026
af529cd
Con2PrimFactory: adjust temperature when setting inv_beta floor inste…
acwen11 Feb 23, 2026
78f4378
AsterX: rebase fixes
acwen11 Feb 24, 2026
15c92bb
AsterX: rename subcycling gridfunctions
acwen11 Feb 24, 2026
9bf8e85
AsterX: set prolongation parameters for olds and k's. Add hack to pro…
acwen11 Mar 26, 2026
f6e7975
AsterX: revert experimental features from RNS
acwen11 Mar 26, 2026
010e0a8
AsterSeeds: WIP add parameters for inspiral seeding
acwen11 Mar 31, 2026
4291543
AsterSeeds: WIP add parameters for inspiral seeding
acwen11 Mar 31, 2026
08e856e
AsterSeeds: add option to seed Avec during inspiral, with pulsar like…
acwen11 Apr 1, 2026
41cc35e
AsterSeeds: add option to seed based on separation distance
acwen11 Apr 5, 2026
63ab943
AsterSeeds: save seeding flags in checkpoints
acwen11 Apr 7, 2026
6d925f7
AsterSeeds: clean up dynamic seeding
acwen11 Apr 7, 2026
7bfa659
AsterX: update test data to be consistent with developmentSC
acwen11 Apr 7, 2026
4a3647c
Merge remote-tracking branch 'origin/developmentSC' into seed_Avec_in…
acwen11 Apr 7, 2026
571a17d
AsterX: clean up comments
acwen11 Apr 7, 2026
79237d0
AsterX: save volform in diagnostics
acwen11 Apr 8, 2026
1a2161c
AsterSeeds: add warnings about coorbiting velocity feature
acwen11 Apr 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion AsterSeeds/interface.ccl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Interface definition for thorn AsterSeeds

IMPLEMENTS: AsterSeeds
INHERITS: HydroBaseX AsterX
INHERITS: HydroBaseX AsterX VolumeIntegrals_GRMHDX

USES INCLUDE HEADER: loop_device.hxx
USES INCLUDE HEADER: setup_eos.hxx
Expand All @@ -14,3 +14,31 @@ CCTK_REAL Avec_cent TYPE=gf CENTERING={ccc} TAGS='checkpoint="no"'
Avec_z_cent
} "Cell-centered vector potential components"

CCTK_REAL vel_NS1 TYPE=ARRAY DISTRIB=CONSTANT DIM=1 SIZE=3
{
vel_NS1
} "Helper for dynamic seeding of external dipole field. Records velocity of NS CoM"

CCTK_REAL vel_NS2 TYPE=ARRAY DISTRIB=CONSTANT DIM=1 SIZE=3
{
vel_NS2
} "Helper for dynamic seeding of external dipole field. Records velocity of NS CoM"

CCTK_INT SeedNow type=SCALAR tags='checkpoint="yes"'
CCTK_INT DoneSeeding type=SCALAR tags='checkpoint="yes"'

CCTK_INT FUNCTION DriverInterpolate(
CCTK_POINTER_TO_CONST IN cctkGH,
CCTK_INT IN N_dims,
CCTK_INT IN local_interp_handle,
CCTK_INT IN param_table_handle,
CCTK_INT IN coord_system_handle,
CCTK_INT IN N_interp_points,
CCTK_INT IN interp_coords_type,
CCTK_POINTER_TO_CONST ARRAY IN interp_coords,
CCTK_INT IN N_input_arrays,
CCTK_INT ARRAY IN input_array_indices,
CCTK_INT IN N_output_arrays,
CCTK_INT ARRAY IN output_array_types,
CCTK_POINTER ARRAY IN output_arrays)
REQUIRES FUNCTION DriverInterpolate
64 changes: 64 additions & 0 deletions AsterSeeds/param.ccl
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ KEYWORD Afield_config "Definition of the initial vector potential"
"none" :: "Nothing set here"
"internal dipole" :: "Dipole field according to Ciolfi+2017"
"external dipole" :: "Dipole field according to Moesta+2020"
"external dipole UIUC" :: "Dipole field according to Paschalidis+2013"
} "none"

# parameters for internal dipolar magnetic field
Expand Down Expand Up @@ -218,6 +219,65 @@ REAL dipole_z[2] "z-coordinate of the dipole center" STEERABLE=ALWAYS
*:* :: "Anything"
} 0.0

# Initial low density magnetosphere parameters

BOOLEAN initial_beta "Pad pressure to set initial plasma beta floor?" STEERABLE=ALWAYS
{
} "no"

REAL initial_beta_min "Initial plasma beta floor" STEERABLE=ALWAYS
{
0:* :: "Positive"
} 0.0

REAL initial_beta_rhocut "Pad pressure below this density" STEERABLE=ALWAYS
{
0:* :: "Positive"
} 0.0

BOOLEAN set_coorbiting_vel "After padding pressure, set coorbiting velocity? This feature is not well tested, use with caution." STEERABLE=ALWAYS
{
} "no"

REAL radius_NS1 "Approximate radius of initial left NS, used only for tapering coorbiting vel." STEERABLE=ALWAYS
{
0:* :: "Positive"
} 9.0

REAL radius_NS2 "Approximate radius of initial right NS, used only for tapering coorbiting vel." STEERABLE=ALWAYS
{
0:* :: "Positive"
} 9.0

REAL vtol "Overwrite velocity with coorbiting velocity if all |v^i| are below tolerance" STEERABLE=ALWAYS
{
0:* :: "Positive"
} 0.0

# BNS inspiral initialization parameters

BOOLEAN use_separation "Seeding time determined by separation of stars from VolumeIntegrals_GRMHDX" STEERABLE=ALWAYS
{
} "yes"

BOOLEAN use_time "Seeding time determined by evolution time" STEERABLE=ALWAYS
{
} "no"

REAL seeding_separation "Coordinate separation of stars below which magnetic field is seeded" STEERABLE=ALWAYS
{
(0.0:*) :: ""
} 5.0

REAL seeding_time "Time [Cactus units] after which magnetic field is seeded" STEERABLE=ALWAYS
{
[0.0:*) :: ""
} 0.0

INT seed_every "Check if conditions for seeding are met every <seed_every> iterations" STEERABLE=ALWAYS
{
0:* :: "0 means dont seed in CCTK_POSTSTEP"
} 0

# ---------------------------------------

Expand Down Expand Up @@ -311,3 +371,7 @@ USES KEYWORD evolution_eos

SHARES: Con2PrimFactory
USES CCTK_REAL Ye_atmo
USES CCTK_REAL rho_abs_min
USES CCTK_REAL atmo_tol
USES CCTK_REAL r_atmo
USES CCTK_REAL n_rho_atmo
150 changes: 138 additions & 12 deletions AsterSeeds/schedule.ccl
Original file line number Diff line number Diff line change
Expand Up @@ -87,22 +87,148 @@ if (CCTK_Equals(test_type, "3DTest")) {
if (CCTK_Equals(test_case, "magBNS")) {

STORAGE: Avec_cent
SCHEDULE AsterSeeds_InitializeCenteredAvec_BNS AT initial IN ODESolvers_Initial AFTER HydroBaseX_PostInitial BEFORE AsterX_InitialGroup {
LANG: C
READS: HydroBaseX::press(everywhere)
WRITES: Avec_x_cent(everywhere) Avec_y_cent(everywhere) Avec_z_cent(everywhere)
SCHEDULE AsterSeeds_Initialize_Seeding_Flags AT CCTK_INITIAL
{
LANG: C
OPTIONS: GLOBAL
WRITES: SeedNow(everywhere), DoneSeeding(everywhere)
WRITES: vel_NS1(everywhere) vel_NS2(everywhere)
} "Initialize seeding variables."

if (seed_every != 0) {
SCHEDULE AsterSeeds_InitializeAvectoZero AT initial IN ODESolvers_Initial BEFORE AsterX_InitialGroup
{
LANG: C
WRITES: AsterX::Avec_x(everywhere) AsterX::Avec_y(everywhere) AsterX::Avec_z(everywhere)
} "Set up zero vector potential"

SCHEDULE GROUP Seed_During_Evolution at CCTK_POSTSTEP
{
} "Routines for seeding magnetic field during evolution."

SCHEDULE AsterSeeds_Set_Seeding_Flags in Seed_During_Evolution
{
LANG: C
OPTIONS: GLOBAL
READS: VolumeIntegrals_GRMHDX::CoM1(everywhere) VolumeIntegrals_GRMHDX::CoM2(everywhere)
READS: DoneSeeding(everywhere)
WRITES: SeedNow(everywhere)
} "Evaluate whether to seed now or not."

SCHEDULE GROUP Seeding_Tasks IN Seed_During_Evolution IF AsterSeeds::SeedNow AFTER AsterSeeds_Set_Seeding_Flags
{
} "If conditions are met, seed magnetic field."

SCHEDULE AsterSeeds_InitializeCenteredAvec_BNS IN Seeding_Tasks
{
LANG: C
READS: HydroBaseX::press(everywhere)
READS: VolumeIntegrals_GRMHDX::CoM1(everywhere) VolumeIntegrals_GRMHDX::CoM2(everywhere)
WRITES: Avec_x_cent(everywhere) Avec_y_cent(everywhere) Avec_z_cent(everywhere)
WRITES: SeedNow(everywhere), DoneSeeding(everywhere)
} "Set up initial conditions for the cell-centered vector potential"

SCHEDULE AsterSeeds_InitializeStagAvec_BNS IN Seeding_Tasks AFTER AsterSeeds_InitializeCenteredAvec_BNS BEFORE AsterX_InitialGroup
{
LANG: C
READS: Avec_x_cent(everywhere) Avec_y_cent(everywhere) Avec_z_cent(everywhere)
WRITES: AsterX::Avec_x(interior) AsterX::Avec_y(interior) AsterX::Avec_z(interior)
SYNC: AsterX::Avec_x AsterX::Avec_y AsterX::Avec_z
} "Set up initial conditions for the vector potential"

SCHEDULE GROUP AsterX_Con2PrimGroup IN Seeding_Tasks AFTER AsterSeeds_InitializeStagAvec_BNS
{
} "Calc B from A, run Con2Prim."

if (initial_beta) {
if (set_coorbiting_vel) {
SCHEDULE AsterSeeds_InterpolateNSVelocity IN Seeding_Tasks BEFORE AsterSeeds_SetInitialBetaFloor
{
LANG: C
OPTIONS: GLOBAL
READS: HydroBaseX::vel(everywhere)
READS: VolumeIntegrals_GRMHDX::CoM1(everywhere) VolumeIntegrals_GRMHDX::CoM2(everywhere)
WRITES: vel_NS1(everywhere) vel_NS2(everywhere)
} "Get velocity of NS CoMs"
}

SCHEDULE AsterSeeds_SetInitialBetaFloor IN Seeding_Tasks AFTER AsterX_Con2PrimGroup
{
LANG: C
READS: HydroBaseX::vel(everywhere) HydroBaseX::Bvec(everywhere) HydroBaseX::press(everywhere) HydroBaseX::temperature(everywhere) HydroBaseX::Ye(everywhere)
READS: VolumeIntegrals_GRMHDX::CoM1(everywhere) VolumeIntegrals_GRMHDX::CoM2(everywhere)
READS: ADMBaseX::metric(everywhere)
READS: vel_NS1(everywhere) vel_NS2(everywhere)
WRITES: HydrobaseX::rho(everywhere) HydroBaseX::press(everywhere) HydroBaseX::eps(everywhere) HydroBaseX::entropy(everywhere) HydrobaseX::vel(everywhere)
} "Enforce initial minimum plasma beta"

SCHEDULE AsterX_Prim2Con_Initial IN Seeding_Tasks AFTER AsterSeeds_SetInitialBetaFloor
{
LANG: C
READS: ADMBaseX::metric(interior)
READS: HydroBaseX::rho(interior) HydroBaseX::vel(interior) HydroBaseX::eps(interior) HydroBaseX::press(interior) HydroBaseX::Bvec(interior)
READS: HydroBaseX::entropy(interior) HydroBaseX::Ye(interior)
WRITES: AsterX::cons_vector(interior) AsterX::dB(interior)
SYNC: AsterX::cons_vector AsterX::dB
} "Update cons after setting initial beta"
}

SCHEDULE AsterX_Tmunu IN Seeding_Tasks AFTER AsterX_Con2PrimGroup AFTER AsterX_ApplyOuterBCOnPrim
{
LANG: C
READS: ADMBaseX::metric(everywhere) ADMBaseX::lapse(everywhere) ADMBaseX::shift(everywhere)
READS: HydroBaseX::rho(everywhere) HydroBaseX::press(everywhere) HydroBaseX::eps(everywhere)
READS: HydroBaseX::vel(everywhere)
READS: AsterX::zvec_x(everywhere), AsterX::zvec_y(everywhere), AsterX::zvec_z(everywhere)
READS: AsterX::svec_x(everywhere), AsterX::svec_y(everywhere), AsterX::svec_z(everywhere)
READS: HydroBaseX::Bvec(everywhere)
READS: TmunuBaseX::eTtt(interior) TmunuBaseX::eTti(interior) TmunuBaseX::eTij(interior)
WRITES: TmunuBaseX::eTtt(interior) TmunuBaseX::eTti(interior) TmunuBaseX::eTij(interior)
SYNC: TmunuBaseX::eTtt TmunuBaseX::eTti TmunuBaseX::eTij
} "Compute the energy-momentum tensor"

}
"Set up initial conditions for the cell-centered vector potential"
else {
SCHEDULE AsterSeeds_InitializeCenteredAvec_BNS AT initial IN ODESolvers_Initial AFTER HydroBaseX_PostInitial BEFORE AsterX_InitialGroup {
LANG: C
READS: HydroBaseX::press(everywhere)
READS: VolumeIntegrals_GRMHDX::CoM1(everywhere) VolumeIntegrals_GRMHDX::CoM2(everywhere)
WRITES: Avec_x_cent(everywhere) Avec_y_cent(everywhere) Avec_z_cent(everywhere)
WRITES: SeedNow(everywhere), DoneSeeding(everywhere)
} "Set up initial conditions for the cell-centered vector potential"

SCHEDULE AsterSeeds_InitializeStagAvec_BNS AT initial IN ODESolvers_Initial AFTER AsterSeeds_InitializeCenteredAvec_BNS BEFORE AsterX_InitialGroup {
LANG: C
READS: Avec_x_cent(everywhere) Avec_y_cent(everywhere) Avec_z_cent(everywhere)
WRITES: AsterX::Avec_x(interior) AsterX::Avec_y(interior) AsterX::Avec_z(interior)
SYNC: AsterX::Avec_x AsterX::Avec_y AsterX::Avec_z
SCHEDULE AsterSeeds_InitializeStagAvec_BNS AT initial IN ODESolvers_Initial AFTER AsterSeeds_InitializeCenteredAvec_BNS BEFORE AsterX_InitialGroup
{
LANG: C
READS: Avec_x_cent(everywhere) Avec_y_cent(everywhere) Avec_z_cent(everywhere)
WRITES: AsterX::Avec_x(interior) AsterX::Avec_y(interior) AsterX::Avec_z(interior)
SYNC: AsterX::Avec_x AsterX::Avec_y AsterX::Avec_z
} "Set up initial conditions for the vector potential"

if (initial_beta) {
if (set_coorbiting_vel) {
SCHEDULE AsterSeeds_InterpolateNSVelocity IN Seeding_Tasks BEFORE AsterSeeds_SetInitialBetaFloor
{
LANG: C
OPTIONS: GLOBAL
READS: HydroBaseX::vel(everywhere)
READS: VolumeIntegrals_GRMHDX::CoM1(everywhere) VolumeIntegrals_GRMHDX::CoM2(everywhere)
WRITES: vel_NS1(everywhere) vel_NS2(everywhere)
} "Get velocity of NS CoMs"
}

SCHEDULE AsterSeeds_SetInitialBetaFloor AT initial IN AsterX_InitialGroup AFTER AsterX_ComputeBFromdB BEFORE AsterX_CheckPrims
{
LANG: C
READS: HydroBaseX::vel(everywhere) HydroBaseX::Bvec(everywhere) HydroBaseX::press(everywhere) HydroBaseX::temperature(everywhere) HydroBaseX::Ye(everywhere)
READS: ADMBaseX::metric(everywhere)
READS: VolumeIntegrals_GRMHDX::CoM1(everywhere) VolumeIntegrals_GRMHDX::CoM2(everywhere)
READS: vel_NS1(everywhere) vel_NS2(everywhere)
WRITES: HydrobaseX::rho(everywhere) HydroBaseX::press(everywhere) HydroBaseX::eps(everywhere) HydroBaseX::entropy(everywhere) HydrobaseX::vel(everywhere)
} "Enforce initial minimum plasma beta"
}
}
"Set up initial conditions for the vector potential"
}

}

#Initial conditions for TabEOS tests
Expand Down
Loading
Loading