# If time=0 use paraxial wave, otherwise use spherical wave. # Thus in the paraxial case the pulse always starts at the waist. 'focus' : (0.0,0.0,0.0,-.006/mks_length), 'supergaussian exponent' : 2}) ray.append({ 'number' : (512,4,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,2*r00,0.0,2*np.pi,-2*t00,2*t00)}) optics.append([ { 'object' : volume.AnalyticCylinder('plasma'), 'dispersion inside' : dispersion.ColdPlasma(), 'dispersion outside' : dispersion.Vacuum(), 'radius' : Rlens, 'length' : Lch, 'origin' : (0.,0.,0.), 'euler angles' : (0.,0.,0.), 'density function' : str(c0)+'+'+str(c2)+'*r2+'+str(c4)+'*r2*r2', 'density lambda' : lambda x,y,z,r2 : c0 + c2*r2 + c4*r2*r2, '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. 'steps' : 1200, 'subcycles' : 10}, { 'object' : surface.CylindricalProfiler('det'), 'integrator' : 'transform',
wave[-1]['a0'] = (0.0, a00 * np.cos(theta), 0.0, -a00 * np.sin(theta) ) # 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'] = (w00, w00 * np.sin(theta), 0.0, 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, -6 / mm) wave[-1]['supergaussian exponent'] = 2 optics.append({}) optics[-1]['object'] = volume.AnalyticCylinder('plasma') optics[-1]['dispersion inside'] = dispersion.ColdPlasma() optics[-1]['dispersion outside'] = dispersion.Vacuum() optics[-1]['radius'] = Rlens optics[-1]['length'] = Lch 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({})
ray = [] optics = [] diagnostics = [] mess = 'Processing input file...\n' # Preprocessing calculations helper = input_tools.InputHelper(mks_length) prop_range = (-0.1 / mks_length, 0.0 / mks_length) L = prop_range[1] - prop_range[0] # air = dispersion.HumidAir(mks_length,0.4,1e-3) # air.add_opacity_region(40.0,0.05e-6,0.25e-6) # air.add_opacity_region(5.0,13e-6,17e-6) # air.add_opacity_region(40.0,100e-6,.001) air = dispersion.Vacuum() ionizer = ionization.ADK(0.5, 1.0, 2.7e25, mks_length, terms=4) w00 = 1.0 r00 = 0.005 / mks_length P0_mks = 7e-3 / 80e-15 I0_mks = 2 * P0_mks / (np.pi * r00**2 * mks_length**2) a800 = helper.Wcm2_to_a0(I0_mks * 1e-4, 0.8e-6) a400 = helper.Wcm2_to_a0(0.1 * I0_mks * 1e-4, 0.4e-6) chi3 = 0.0 #helper.mks_n2_to_chi3(1.0,5e-19*1e-4) mess = mess + ' a800 = ' + str(a800) + '\n' mess = mess + ' a400 = ' + str(a400) + '\n' mess = mess + ' chi3 = ' + str(chi3) + '\n' # Setting the lower frequency bound to zero triggers carrier resolved treatment band = (0.0, 4.5) t00, pulse_band = helper.TransformLimitedBandwidth(w00, '80 fs', 1.0)