Beispiel #1
0
 def Propagate(self, xp, eikonal, vg, orb):
     self.RaysGlobalToLocal(xp, eikonal, vg)
     self.Transition(xp, eikonal, vg, orb)
     ray_kernel.SyncSatellites(xp, vg)
     ray_kernel.track(self.queue, self.symplectic_k, xp, eikonal,
                      self.vol_dict, orb)
     vg[...] = self.disp_in.vg(xp)
     self.Transition(xp, eikonal, vg, orb)
     self.RaysLocalToGlobal(xp, eikonal, vg)
     self.OrbitsLocalToGlobal(orb)
Beispiel #2
0
 def Propagate(self,xp,eikonal,vg,orb,dens=None):
     self.RaysGlobalToLocal(xp,eikonal,vg)
     self.Transition(xp,eikonal,vg,orb)
     if self.propagator=='paraxial':
         self.paraxial_wave,self.paraxial_source,self.paraxial_plasma,self.dom4d = paraxial_kernel.track(self.cl,xp,eikonal,vg,self.vol_dict)
         self.UpdateOrbits(xp,eikonal,orb)
     if self.propagator=='uppe':
         self.uppe_wave,self.uppe_source,self.uppe_plasma,self.dom4d = uppe_kernel.track(self.cl,xp,eikonal,vg,self.vol_dict)
         self.UpdateOrbits(xp,eikonal,orb)
     if self.propagator=='eikonal':
         ray_kernel.SyncSatellites(xp,vg)
         if np.any(dens==None):
             ray_kernel.track(self.cl,xp,eikonal,self.vol_dict,orb)
         else:
             ray_kernel.track_RIC(self.cl,xp,eikonal,dens,self.vol_dict,orb)
         vg[...] = self.disp_in.vg(xp)
         self.Transition(xp,eikonal,vg,orb)
     self.RaysLocalToGlobal(xp,eikonal,vg)
     self.OrbitsLocalToGlobal(orb)
Beispiel #3
0
 def Propagate(self, xp, eikonal, vg, orb):
     self.RaysGlobalToLocal(xp, eikonal, vg)
     self.Transition(xp, eikonal, vg, orb)
     if self.propagator == 'paraxial':
         self.paraxial_wave, self.dom4d = paraxial_kernel.track(
             xp, eikonal, vg, self.vol_dict)
         ray_kernel.relaunch_rays(xp, eikonal, vg, self.paraxial_wave,
                                  self.vol_dict)
     if self.propagator == 'uppe':
         self.uppe_wave, self.uppe_source, self.uppe_plasma, self.dom4d = uppe_kernel.track(
             xp, eikonal, vg, self.vol_dict)
         ray_kernel.relaunch_rays(xp, eikonal, vg, self.uppe_wave,
                                  self.vol_dict)
     if self.propagator == 'eikonal':
         ray_kernel.SyncSatellites(xp, vg)
         ray_kernel.track_RIC(self.queue, self.symplectic_k, xp, eikonal,
                              self.ne, self.vol_dict, orb)
         vg[...] = self.disp_in.vg(xp)
     self.Transition(xp, eikonal, vg, orb)
     self.RaysLocalToGlobal(xp, eikonal, vg)
     self.OrbitsLocalToGlobal(orb)
Beispiel #4
0
                                         inputs.optics[irun])
    micro_action_0 = ray_kernel.GetMicroAction(xp, eikonal, vg)
    xp0 = np.copy(xp)
    eikonal0 = np.copy(eikonal)

    print('\nStart propagation...\n')
    print('Initial micro-action = {:.3g}\n'.format(micro_action_0))

    for opt_dict in inputs.optics[irun]:
        opt_dict['object'].Propagate(xp, eikonal, vg, orb=orbit_dict)

    print('\nStart diagnostic reports...\n')

    if len(inputs.sim) > 1:
        basename = inputs.diagnostics[irun]['base filename'] + '_' + str(i)
    else:
        basename = inputs.diagnostics[irun]['base filename']

    if not inputs.diagnostics[irun]['suppress details']:
        ray_kernel.SyncSatellites(xp, vg)
        np.save(basename + '_xp0', xp0)
        np.save(basename + '_xp', xp)
        np.save(basename + '_eikonal', eikonal)
        np.save(basename + '_orbits', orbit_dict['data'])

    for opt_dict in inputs.optics[irun]:
        opt_dict['object'].Report(basename, inputs.sim[irun]['mks_length'])

    time2 = time()
    print('Completed in {:.1f} seconds'.format(time2 - time1))