Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add muon-catalyzed fusion physics #1508

Open
11 tasks
stognini opened this issue Nov 15, 2024 · 1 comment
Open
11 tasks

Add muon-catalyzed fusion physics #1508

stognini opened this issue Nov 15, 2024 · 1 comment
Assignees
Labels
enhancement New feature or request

Comments

@stognini
Copy link
Member

stognini commented Nov 15, 2024

Physical processes

Most processes have been at least partially implemented by NK Labs. The following list separates necessary and second order processes, along with their implementation availability (either in the standard Geant4 source code or externally added by NKLabs).

Necessary for a proof-of-principle

  • Muonic atom capture (G4/NK)
    • Formation of $$d_\mu$$ and $$t_\mu$$
  • MuCF (NK)
    • Fusion of dd, dt, and tt
  • Muon decay (G4)
  • Muon, alpha, neutron (G4)
    • Energy-loss
    • Ionization
    • Scattering

Good to have

  • Isotopic transfer (NK)
    • Muon tends to be transferred to higher Z atoms
  • Muon atom stripping (NK)
    • Muon in a $$d_\mu$$ or $$t_\mu$$ atom can be transferred to a H in the gas.
  • Alpha deexcitation cascade
  • Spin flip
@stognini
Copy link
Member Author

stognini commented Nov 15, 2024

Implementation of processes/models

Muon atomic capture

  • At rest process
  • Uses G4GenericMuonicAtom, a particle definition based on G4GenericIon, but must properties are meaningless, so it can't be used for tracking
  • May need more separate models: EM capture cascade + capture
  • Requirements
classDiagram

MuonMinusAtomicCapture <|-- G4ElementSelector
MuonMinusAtomicCapture <|-- G4EmCaptureCascade
MuonMinusAtomicCapture <|-- G4HadProjectile
MuonMinusAtomicCapture <|-- G4MuonMinusBoundDecay

class G4MuonMinusBoundDecay {
    Does not seem to be called anywhere
}
Loading
  • MuonMinusAtomicCapture::AtRestDotIt sequence
flowchart LR
a["select nucleus"] --> b["EM cascade (generate secondaries)"]
b --> c["check if d or t"] --> d["if H mu atom, set spin"]
d --> e["generate mu atom secondary"]
Loading

Muon-catalyzed fusion

  • At rest process

  • All have the same sequence (calculate cycle time, sample sticking, sample secondaries)

    • Calculate cycle time may or may not be a single helper class
    • Sample sticking can be a direct rejection sampler
    • Sample secondaries: one class vs. multiple (i.e. one large kernel with
      branches vs small individual kernels)
  • MuonCatalyzedFusion::AtRestDotIt sequence

---
title: DD
---
flowchart LR
a["calculate cycle time"] --> b["sample sticking"] --> d["sample secondaries"]
d --> he3["He-3"]
d --> h["H-3"]
he3 --> he3s["(He-3)mu + n"]
he3 --> he3ns["He-3 + mu + n"]
h -. not implemented .-> hs["(H-3)mu + p"]
h --> hns["H-3 + mu + p"]
Loading
---
title: DT
---
flowchart LR
a["calculate cycle time"] --> b["sample sticking"] --> d["sample secondaries"]
d --> e
d --> f
e["(alpha)mu + n"]
f["alpha + mu + n"]
Loading
---
title: TT
---
flowchart LR
a["calculate cycle time"] --> b["sample sticking"] --> d["sample secondaries"]
d --> e
d --> f
e["(alpha)mu + n + n"]
f["alpha + mu + n + n"]
Loading
  • Celeritas Interactor flowchart
flowchart LR

%% Main flowchart
a[muonic atom formation]
b[select channel]
c[kill primary]
d[calculate cycle time]
e[sample sticking]
f[sample secondaries]

a --> b
ddhe3s & ddhe3ns & ddhs & ddhns & dts & dtns & tts & ttns --> sampler

subgraph sampler[muCF sampler]
    c --> d --> e --> f
end

subgraph selection[muCF channel selection]
    direction LR
    b --> dd & dt & tt

    %% DD fusion
    dd[DD]
    he3[He-3]
    h[H]
    ddhe3s["(He-3)mu + n"]
    ddhe3ns["He-3 + mu + n"]
    ddhs["(H-3)mu + p"]
    ddhns["H-3 + mu + p"]
    dd --> he3 & h
    he3 --> ddhe3s & ddhe3ns
    h -.not implemented.-> ddhs
    h --> ddhns

    %% DT fusion
    dt[DT]
    dtns["(alpha)mu + n"]
    dts["alpha + mu + n"]
    dt --> dts & dtns

    %% TT fusion
    tt[TT]
    tts["(alpha)mu + n + n"]
    ttns["alpha + mu + n + n"]
    tt --> tts & ttns
end
Loading
  • Celeritas implementation: single-step, at-rest, large kernel
classDiagram
MuonCatalyzedFusionInteractor <-- DDMuonCatalyzedFusionSampler
MuonCatalyzedFusionInteractor <-- DTMuonCatalyzedFusionSampler
MuonCatalyzedFusionInteractor <-- TTMuonCatalyzedFusionSampler
MuonCatalyzedFusionInteractor <-- DTMuonicAtomFormationSampler

DTMuonicAtomFormationSampler <-- StopElementSelector
DTMuonicAtomFormationSampler <-- EmCaptureCascade
DTMuonicAtomFormationSampler <-- HydrogenSpinSelector
DTMuonicAtomFormationSampler <-- MolarFractionCalculator

class MuonCatalyzedFusionInteractor {
    Large at rest kernel: mu atom formation + muCF
    +MuonCatalyzedFusionInteractor(...)
    +Interaction operator(Engine& rng)
}

%%---------------------------------------------------------------------------%%
%% At rest samplers; act as interactors, but return a state change result
namespace muCF {
    class DDMuonCatalyzedFusionSampler {
        Execute DD muCF
        +DDMuonCatalyzedFusionSampler(...)
        +Result operator(Engine& rng)
    }

    class DTMuonCatalyzedFusionSampler {
        Execute DT muCF
        +DTMuonCatalyzedFusionSampler(...)
        +Result operator(Engine& rng)
    }

    class TTMuonCatalyzedFusionSampler {
        Execute TT muCF
        +TTMuonCatalyzedFusionSampler(...)
        +Result operator(Engine& rng)
    }
}

class DTMuonicAtomFormationSampler {
    Execute d or t muonic atom formation
    +DTMuonicAtomCapture(...)
    +Result operator(Engine& rng)
}

%%---------------------------------------------------------------------------%%
%% Purpose-specific helper classes
class StopElementSelector {
    Select element for particle capture
    +StopElementSelector(MaterialId matid)
    +ElementId operator(Engine& rng)
}

class EmCaptureCascade {
    Cascade emmitting photons or Auger electrons
    +EmCaptureCascade(ParticleId pid, ElementId eid)
    +Result operator(Engine& rng)
}

class HydrogenSpinSelector {
    Return sampled spin
    +HydrogenSpinSelector(ParticleId pid)
    +real_type operator(Engine& rng)
}

class MolarFractionCalculator {
    Return molar fraction for given element id
    +MolarFractionCalculator(MaterialId matid, ElementId eid)
    +real_type operator()
}
Loading

@stognini stognini self-assigned this Nov 15, 2024
@stognini stognini added the enhancement New feature or request label Nov 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant