Sto lavorando a un progetto (per il college) in C ++. L'obiettivo è scrivere un programma che può più o meno simulare un raggio di particelle che volano attraverso il sincrotrone LHC.
Non volendo precipitarsi nelle cose, io e il mio team stiamo pensando a come implementarlo e mi stavo chiedendo se ci sono schemi di progettazione generali che sono usati per risolvere questo tipo di problema.
L'approccio generale che abbiamo sviluppato finora è il seguente:
- c'è un
World
che contiene tutti gli oggetti - puoi aggiungere oggetti a questo mondo come
Particle
,Dipole
eQuadrupole
- il tempo viene tagliato in passi discreti e in ogni momento, per ogni
Particle
, vengono calcolate e sommate le forze magnetiche ed elettriche che ciascun oggetto nellaWorld
genera (fortunatamente l'elettromagnetismo è lineare) . - ogni
Particle
si sposta di conseguenza (usando un semplice approccio di stima per risolvere le equazioni del movimento differenziale) - salva le posizioni
Particle
- ripetizione
Questo sembra un buon approccio ma, ad esempio, è difficile prendere in considerazione le simmetrie che potrebbero essere presenti (come il campo magnetico di ogni Quadrupole
) ed è quindi non ottimale.
Per tenere conto di tali simmetri come quelle del campo Quadrupole
, sarebbe molto più facile (anche) rendere lo spazio discreto e in qualche modo memorizzare la forma del campo Quadrupole
da qualche parte. (Dal momento che il 2532 circa Quadrupole
s viene memorizzato, ciò dovrebbe comportare un enorme guadagno di prestazioni, senza dover ricalcolare ogni campo Quadrupole
)
Quindi, ci sono schemi di design? Il World
-approach è fattibile o è vecchio stile, cattiva programmazione? Che dire della simmetria, come viene generalmente presa in considerazione?