optics[-1]['origin'] = (0., 0., 0.) optics[-1]['euler angles'] = (0., 0., 0.) optics[-1]['density function'] = str(c0) + '+' + str(c2) + '*r2+' + str( c4) + '*r2*r2' optics[-1]['density lambda'] = lambda x, y, z, r2: c0 + c2 * r2 + c4 * r2 * r2 optics[-1]['dt'] = Lch / 1000 # Use enough steps to make sure rays reach end of box. # Too many steps is OK, SeaRay can adjust down automatically. # Too few steps is not OK. optics[-1]['steps'] = 1200 optics[-1]['subcycles'] = 10 optics.append({}) optics[-1]['object'] = surface.CylindricalProfiler('det') optics[-1]['frequency band'] = band optics[-1]['size'] = (.6 / mm, .6 / mm, 2 / mm) optics[-1]['wave grid'] = (64, 1024, 4, 8) optics[-1]['distance to caustic'] = eik_to_caustic optics[-1]['origin'] = (0., 0., f - eik_to_caustic) optics.append({}) optics[-1]['object'] = surface.EikonalProfiler('terminus') optics[-1]['size'] = (3 / mm, 3 / mm) optics[-1]['euler angles'] = (0.0, 0.0, 0.0) optics[-1]['origin'] = (0., 0., 20 / mm) diagnostics['suppress details'] = False diagnostics['clean old files'] = True diagnostics['orbit rays'] = (4, 4, 4, 1) diagnostics['base filename'] = 'out/test'
optics[-1][-1]['focal length'] = 90 / cm optics[-1][-1]['origin'] = (0., 0., -90 / cm) optics[-1][-1]['euler angles'] = (0., 0., 0.) optics[-1].append({}) optics[-1][-1]['object'] = surface.IdealHarmonicGenerator('SHG') optics[-1][-1]['harmonic delay'] = 20 / fs optics[-1][-1]['harmonic number'] = 2.0 optics[-1][-1]['frequency band'] = (0.9, 1.1) optics[-1][-1]['efficiency'] = 0.05 optics[-1][-1]['radius'] = 0.5 / inch optics[-1][-1]['origin'] = (0.0, 0.0, -80 / cm) optics[-1][-1]['euler angles'] = (0., 0., 0.) optics[-1].append({}) optics[-1][-1]['object'] = surface.EikonalProfiler('start') optics[-1][-1]['frequency band'] = (0, 3) optics[-1][-1]['size'] = (10 * r00, 10 * r00) optics[-1][-1]['origin'] = (0., 0., prop_range[0] - 1 / mm) optics[-1][-1]['euler angles'] = (0., 0., 0.) optics[-1].append({}) optics[-1][-1]['object'] = volume.AnalyticBox('air') optics[-1][-1]['propagator'] = 'uppe' optics[-1][-1]['ionizer'] = ionizer optics[-1][-1]['wave coordinates'] = 'cylindrical' optics[-1][-1]['wave grid'] = (2049, 256, 1, 21) optics[-1][-1]['radial modes'] = 128 optics[-1][-1]['density reference'] = ngas optics[-1][-1]['density function'] = '1.0' optics[-1][-1]['density lambda'] = lambda x, y, z, r2: np.ones(r2.shape)
optics.append([{ 'object': surface.Paraboloid('mirror'), 'reflective': True, 'focal length': par_f, 'acceptance angle': np.pi / 1.8, 'off axis angle': 0., 'euler angles': (0., np.pi, 0.) }, { 'object': surface.FullWaveProfiler('det'), 'size': (.0004 / mks_length, .0004 / mks_length, 200e-6 / mks_length), 'wave grid': (2048, 2048, 1), 'distance to caustic': .00125 / mks_length, 'origin': (0., 0.00125 / mks_length, 0.), 'euler angles': (0., np.pi / 2, 0.) }, { 'object': surface.EikonalProfiler('terminus'), 'size': (0.3 / mks_length, 0.3 / mks_length), 'origin': (0., -par_f, 0.), 'euler angles': (0., np.pi / 2, 0.) }]) diagnostics.append({ 'suppress details': False, 'clean old files': True, 'orbit rays': (2, 32, 1), 'base filename': 'out/test' })
'supergaussian exponent': 2 }) ray.append({ 'number': (64, 128, 8, 1), 'bundle radius': (.001 * r00, .001 * r00, .001 * r00, .001 * r00), 'loading coordinates': 'cylindrical', # Ray box is always put at the origin # It will be transformed appropriately by SeaRay to start in the wave 'box': band + (0.0, 3 * r00, 0.0, 2 * np.pi, -2 * t00, 2 * t00) }) optics.append([{ 'object': surface.EikonalProfiler('start'), 'size': (f / 8, f / 8), 'origin': (0., 0., 0.), 'euler angles': (0., 0., 0.) }, { 'object': volume.AnalyticBox('vacuum'), 'density function': '1.0', 'density lambda': lambda x, y, z, r2: np.ones(x.shape), 'density multiplier': 1.0, 'frequency band': band, 'wave grid': (64, 256, 256, 9), 'wave coordinates': 'cartesian', 'dispersion inside': dispersion.Vacuum(), 'dispersion outside': dispersion.Vacuum(), 'size': (36 * waist, 36 * waist, 8 * zR), 'origin': (0., 0., f),
'k0' : (w00,0.0,0.0,w00) , # 0-component of focus is time at which pulse reaches focal point. # If time=0 use paraxial wave, otherwise use spherical wave. # Thus in the paraxial case the pulse always starts at the waist. 'focus' : (1.001*f,0.0,0.0,f), 'supergaussian exponent' : 2}) ray.append({ 'number' : (64,64,64,1), 'bundle radius' : (.001*r00,.001*r00,.001*r00,.001*r00), 'loading coordinates' : 'cylindrical', # Ray box is always put at the origin # It will be transformed appropriately by SeaRay to start in the wave 'box' : band + (0.0,4*r00,0.0,2*np.pi,-2*t00,2*t00)}) optics.append([ { 'object' : surface.EikonalProfiler('init'), 'frequency band' : (1-1e-7,1+1e-7), 'size' : (f/8,f/8), 'origin' : (0.,0.,0.), 'euler angles' : (0.,0.,0.)}, { 'object' : volume.TestGrid('vacuum'), 'radial coefficients' : (0.0,0.0,0.0,0.0), 'frequency band' : band, 'mesh points' : (2,2,2), 'wave grid' : (64,64,64,9), 'wave coordinates' : 'cartesian', 'density multiplier' : 1.0, 'dispersion inside' : dispersion.Vacuum(), 'dispersion outside' : dispersion.Vacuum(), 'size' : (36*waist,36*waist,8*zR),
) # EM 4-potential (eA/mc^2) , component 0 not used wave[-1]['r0'] = (t00, r00, r00, t00 ) # 4-vector of pulse metrics: duration,x,y,z 1/e spot sizes wave[-1]['k0'] = (2 * w00, 2 * w00 * np.sin(theta), 0.0, 2 * w00 * np.cos(theta)) # 4-wavenumber: omega,kx,ky,kz # 0-component of focus is time at which pulse reaches focal point. # If time=0 use paraxial wave, otherwise use spherical wave. # Thus in the paraxial case the pulse always starts at the waist. wave[-1]['focus'] = (0.0, 0.0, 0.0, -31 / mm) wave[-1]['supergaussian exponent'] = 2 optics.append({}) optics[-1]['object'] = volume.PellinBroca('P1') optics[-1]['dispersion outside'] = dispersion.Vacuum() optics[-1]['dispersion inside'] = material optics[-1]['size'] = prism_box optics[-1]['angle'] = refraction_angle optics[-1]['origin'] = (-10 / mm, 0., 0.) optics[-1]['euler angles'] = helper.rot_zx(incidence_angle) optics.append({}) optics[-1]['object'] = surface.EikonalProfiler('det') optics[-1]['size'] = (1 / inch, 1 / inch) optics[-1]['origin'] = (100 / mm, 0.0, 10 / mm) optics[-1]['euler angles'] = helper.rot_zx(-90 / deg) diagnostics['suppress details'] = False diagnostics['clean old files'] = True diagnostics['orbit rays'] = (16, 1, 4, 1) diagnostics['base filename'] = 'out/test'
ray.append({ 'number': (64, 1, 4, 1), 'bundle radius': (rb, rb, rb, rb), 'loading coordinates': 'cylindrical', # Ray box is always put at the origin # It will be transformed appropriately by SeaRay to start in the wave 'box': band + (0.0, 3 * r00, 0.0, 2 * np.pi, -2 * t00, 2 * t00) }) optics.append([{ 'object': volume.PellinBroca('P1'), 'dispersion outside': dispersion.Vacuum(), 'dispersion inside': material, 'size': prism_box, 'angle': refraction_angle, 'origin': (-0.01 / mks_length, 0., 0.), 'euler angles': helper.rot_zx(incidence_angle) }, { 'object': surface.EikonalProfiler('det'), 'size': (1 / inch, 1 / inch), 'origin': (.1 / mks_length, 0.0, .01 / mks_length), 'euler angles': helper.rot_zx(-np.pi / 2) }]) diagnostics.append({ 'suppress details': False, 'clean old files': True, 'orbit rays': (16, 1, 4, 1), 'base filename': 'out/test' })
'supergaussian exponent': 8 }) ray.append({ 'number': (16, 16, 1), 'bundle radius': (.001 * r00, .001 * r00, .001 * r00, .001 * r00), 'loading coordinates': 'cylindrical', # Ray box is always put at the origin # It will be transformed appropriately by SeaRay to start in the wave 'box': (0, 1.5 * r00, 0.0, 2 * np.pi, -2 * t00, 2 * t00) }) optics.append([ { 'object': surface.EikonalProfiler('init'), 'size': (inch, inch), 'euler angles': (0, 0, 0), 'origin': (SHG[0], SHG[1], SHG[2] + 1 * cm) }, { 'object': surface.disc('M1'), 'radius': 0.5 * inch, 'origin': (SHG[0], SHG[1], SHG[2] + 10 * cm), 'euler angles': (0, -np.pi / 4, 0), 'reflective': True }, { 'object': surface.disc('M2'), 'radius': 0.5 * inch, 'origin': (SHG[0], SHG[1] - 10.5 * cm, SHG[2] + 10 * cm),