• adelmann's avatar
    In OPAL several different TRACK's can performed within one simulation (does... · 06df9215
    adelmann authored
    In OPAL several different TRACK's can performed within one simulation (does not hold for OPAL-cycl yet) this together with 
    the restart capabilities calls for a delicate logic.
    
    Different tracks, looks like: 
    
    .....
    
    TRACK, LINE= Injector, BEAM=beam1, MAXSTEPS=100, DT=1.0e-12, ZSTOP=0.14;  
     RUN, METHOD = "PARALLEL-T", BEAM = beam1, FIELDSOLVER = Fs1, DISTRIBUTION = Dist1;
    ENDTRACK;
    
    TRACK,LINE= Injector, BEAM=beam1, MAXSTEPS=50, DT=1.0e-11, ZSTOP=0.20;
     RUN, METHOD = "PARALLEL-T", BEAM=beam1, FIELDSOLVER=Fs1;
    ENDTRACK;
    STOP;
    
    A run with the arguments -restart -1 will continue a track from the last dump in the h5 file. Other the from the last track will
    at the moment certainly fail in the general case. 
    
    Changes: 
    
    - The h5 attribute TrackStep is not longer available anymore. Two new attributes: LocalTrackStep and GlobalTrackStep are introduced instead.
    
    - LocalTrackStep refers to the track step in a track command (0 ... 99 and 0... 49 in teh above example), where the GlobalTrackStep is the 
    accumulated number of steps i.e. 0 ... 149, shown in OPAL's screen output. Both local and global track steps are also written into the h5 file 
    in order to properly restart the simulation.
    
    - The PartBunch object has get/set and increment functions:
    
        inline void setGlobalTrackStep(long long n) {globalTrackStep_m = n;}
        inline long long getGlobalTrackStep() const {return globalTrackStep_m;}
    
        inline void setLocalTrackStep(long long n) {localTrackStep_m = n;}
        inline long long getLocalTrackStep() const {return localTrackStep_m;}
        inline void incLocalTrackStep() {localTrackStep_m++; globalTrackStep_m++;)
    
            
    - In OPAL-cyc getTrackStep is replace by getLocalTrackStep assuming we only have one TRACK in the simulation.
    
    - In the ParallelTTracker at the end of the main loop (in execute()) obsolet code is removed (cleanup monitors etc.)
      
    For details see the diff :-)
    
    Still some work todo: 
    
    a) Need to remove: setLastStep in ParallelTTracker.cpp and in general
    
        getInstance()->getLastStep()
        getInstance()->getRestartStep() maybe not!
    
    b) The get/set and increment functions could very well be in an other class!
    
    c) ParallelPlate tests are broken but maybe also because of other changes need to fix this 
       together with Chuang and Achim
    
    d) Make sure the restart works in OPAL-cycl we do not have yet a regression test for that.
    
    06df9215
ParallelTTracker.h 26.7 KB