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
Worldche contiene tutti gli oggetti - puoi aggiungere oggetti a questo mondo come
Particle,DipoleeQuadrupole - 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 nellaWorldgenera (fortunatamente l'elettromagnetismo è lineare) . - ogni
Particlesi 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?