the Jacobians for O3 and temperature at 50 km. e double peak near the O2 line center (±15 MHz) is due to saturation eects because the atmosphere is opaque above the tangent height. In AMATERASU-TF, the Jacobian is computed by evaluating the dierence between y(x+dx) and y(x) where dx is a small perturbation on the FM parameter x. e results are consistent with the analytical computation used in AMATERASU-V1 [1][12].e preamble of the calculation is the denition of the atmosphere. We need the proles of temperature, pressure, wind, molecular volume mixing ratios and the magnetic eld vector. e latter is dened with spherical coordinates in the frame shows in Fig. 5. Table 3 shows the way to create AMATERASU inputs between 20 and 130 km with 150 intermediate levels. e frequencies and LOS tangent heights considered in the calculations are also dened. We consider 10000 frequencies over 6 GHz bandwidth centered on the O2 transition frequency and 50 tangent heights between 30 and 120 km. Table 4 shows the AMATERASU-v1 commands to compute the radiation spectra. e absorption coecients and radiances are stored in 3d NumPy arrays, the third dimension is used when the Jacobian matrix is computed. e same calculation with AMATERASU-TF is shown in Table 5. It is run on a GPU. e LOSs are divided into 250 ranges between the tangent point and the top of the atmo-sphere which corresponds to ds=3 km (4 km) for the tangent height of 87 km (52 km). Table 6 shows how to TabT6 Commands for Jacobian computations. The Jacobian matrix size is (5e5 x 600)V1 / commands set before ama.setCout (Tab. 3)TF / commands replacing atf.setAbs & atf.rad (Tab. 4)ama.inCwf["flag"]=1w = ZRT.Wf(atf, zbin=2, epsz=1.e-9) #75 altitudesama.inCwf["atm_z"]=np.linspace(20,130,76)#Initialize for 6 species, temperature and wind (93)ama.inCwf["atm_zup"]=Nones0 = w.scan0(ama.outCfr["f"], ama.outCscan["tanh"], atags=["t", 93]) Tags = [1,3,4,5,7,33,99,93]Tags = s0.AbsTag.keys() #8 atmospheric parametersama.inCwf["atm"] = [ [tag, 0., 0., 0.] for tag in Tags ] K= [w.jac(s0, tag, batch=10)["j"] for tag in Tags] …#Tensor [8,75,ntanh,nfre]K =ama.outArd["rad"][:,:,1:] #Array [ntanh,nfre,75*8]TabT5 Same as Tab. 4 but with AMATERASU-TF%env AMADEVICE=gpu:0import amaterasu.p3d.zrt as ZRTatf = ZRT.Scan(dicAtm [“z”]) #Layer altitudes (km) above the geoid.atf.Surfacekm = 6370. #Geoid radius (km) below the tangent pointatf.setAtm(dicAtm, dicAtm [“p”], dicAtm [“t”], B=B);[atf.setLine(ama, mol) for ama, mol in hitranZip ] #See Tab. 2atf.setAbs(ama.outCfr[“f”]) #Absorption coefficient (m^-1), atf.tf_abs_m [nalt,nF]rad = atf.setTanh(ama.outCscan[“tanh”], nranges=250).rad() #Tensor [nTanh, nF]import pylab as P #Plot AMA-V1 and -TF spectra at tangent height 52 km (Fig. 6)P.plot( (ama.outCfr[“f”]-773.8397)*1.e3, ama.outArd[“rad”][12,:,0]) #freq. are MHzP.plot( (ama.outCfr[“f”]-773.8397)*1.e3, rad.numpy()[12,:]); P.xlim(-25,120)TabT7Same as Table 5 but with Zeeman O2 lines (use the same atmosphere and LOS heights).atf.new() # Initialize the TF model used in the previous calculation fghz = np.linspace(dicama_o2[“FRE”][0]-150, dicama_o2[“FRE”][0]+150, 1000)*1.e-3#Spectroscopic data for all the lines but O2. Use of the Line object. [atf.setLine( lines,mol ) for lines,mol in hitranZip if mol[“name”] != “O2” ] atf.setAbs(fghz) #Compute the absorption coefficient [nalt,nF] for all species but O2 #Set the O2 transition and magnetic field for Zeeman calculation[atf.setZline( lines,mol ) for lines,mol in hitranZip if mol[“name”] == “O2” ] atf.Atm[“B”] = B #Magnetic field vector profile created in Tab. 3.atf.setZabs(fghz) # atf.tf_zabs_m[7,nalt,nF] (m^{-1})Stokes = atf.zrad() #TensorFlow tensor [nTanh, nF, 4] containing the 4 Stokes radiances1134-5 AMATERASU(テラヘルツ大気放射伝達モデル)の新機能 : SIWとSMILES-2ミッションのためのGPUによる多偏波放射伝達計算の高速化
元のページ ../index.html#117