#DEFINITIONS: -*-sh-*- # This is a test doing simulations for MSG-ICI instrument. # # So far, it's doing clearsky-pencilbeam simulations from and for (planned) ICI # orbit and observation geometry considering planned radiometer band # characteristics. # # Author: Jana Mendrok Arts2 { INCLUDE "general/general.arts" INCLUDE "general/continua.arts" INCLUDE "general/agendas.arts" INCLUDE "general/planet_earth.arts" # Agenda for scalar gas absorption calculation Copy(abs_xsec_agenda, abs_xsec_agenda__noCIA) # Basic settings (already needed in sensor part) # --- AtmosphereSet1D IndexSet( stokes_dim, 1 ) # 1. General #----------- output_file_formatSetZippedAscii # AMSU uses Planck brightness temperatures # --- StringSet( iy_unit, "PlanckBT" ) # AMSU uses Planck brightness temperatures # --- StringSet( iy_unit, "PlanckBT" ) # (standard) emission calculation Copy( iy_main_agenda, iy_main_agenda__Emission ) # cosmic background radiation Copy( iy_space_agenda, iy_space_agenda__CosmicBackground ) # standard surface agenda (i.e., make use of surface_rtprop_agenda) Copy( iy_surface_agenda, iy_surface_agenda__UseSurfaceRtprop ) # sensor-only path Copy( ppath_agenda, ppath_agenda__FollowSensorLosPath ) # no refraction Copy( ppath_step_agenda, ppath_step_agenda__GeometricPath ) # # modifiy the maximum propagation step, from the default to 250 m : # NumericSet( ppath_lmax, 250 ) # Surface Copy( surface_rtprop_agenda, surface_rtprop_agenda__Specular_NoPol_ReflFix_SurfTFromt_surface ) # 2. Spectroscopy #---------------- # We take a smaller cutoff, since the line-by-line calculation is # only for O3, where only the local lines matter. # Could be speed-optimized further by selecting only the relevant # lines from the line list. ArrayOfLineshapeSpecCreate( abs_lineshapeDefine ) abs_lineshapeDefine( abs_lineshapeDefine, "Voigt_Kuntz6", "VVH", 5e9 ) abs_speciesSet( species=[ "H2O-PWR98", # "O3", "O2-PWR93", "N2-SelfContStandardType" ] ) # Read HITRAN catalog (needed for O3): #abs_linesReadFromHitran( abs_lines, # "/storage3/data/catalogue/hitran/hitran2012/HITRAN2012.par", # 150e9, # 700e9 ) #WriteXML( "ascii", abs_lines, "ici.hitran12_lines.xml" ) #ReadXML( abs_lines, "ici.hitran12_lines.xml" ) #abs_lines_per_speciesCreateFromLines abs_lines_per_speciesSetEmpty # WARNING: If you redefine abs_species, and want to do a line-by-line # calculation, you also have to call # abs_lines_per_speciesCreateFromLines again. # 3. Sensor: #----------- INCLUDE "instruments/ici/ici_fast.arts" # 4. Atmosphere #-------------- # Atmospheric profiles are stored in an ArrayOfGriddedField4. # It contains one GriddedField4 for each atmospheric state. # ReadXML( batch_atm_fields_compact, "../amsu/chevallierl91_clear_q_extract.xml" ) # add constant profiles for O2 and N2 batch_atm_fields_compactAddConstant( name="abs_species-O2", value=0.2095 ) batch_atm_fields_compactAddConstant( name="abs_species-N2", value=0.7808 ) # Set parameters for lookup table # --- # Arguments omitted for better maintainability of this test file. #abs_lookupSetupWide abs_lookupSetupBatch # Create the lookup table # --- abs_xsec_agenda_checkedCalc jacobianOff abs_lookupCalc # Set propmat_clearsky_agenda to use lookup table # --- Copy( propmat_clearsky_agenda, propmat_clearsky_agenda__LookUpTable ) # Set up RT calculation # ===================== # Set surface reflectivity # --- # Here we take a value representative for the sea surface. # NumericSet( surface_emissivity, 0.6 ) <--- Old, replaced by: VectorSetConstant( surface_scalar_reflectivity, 1, 0.4 ) # Set the agenda for batch calculations: # --- # AgendaSet( ybatch_calc_agenda ){ # Extract the atmospheric profiles for this case: Extract( atm_fields_compact, batch_atm_fields_compact, ybatch_index ) # Split up *atm_fields_compact* to # generate p_grid, t_field, z_field, vmr_field: AtmFieldsFromCompact # Optionally set Jacobian parameters. # uncomment this for NO jacobian calculations jacobianOff # Uncomment this block if you want Jacobians. Attention, it slows down the # computation a lot. # Also, you can add other Jacobians here, for example for temperature. # jacobianInit # jacobianAddAbsSpecies( jacobian_quantities, jacobian_agenda, # atmosphere_dim, # p_grid, lat_grid, lon_grid, # p_grid, lat_grid, lon_grid, # "H2O-PWR98", # "analytical", # "rel", # 0.01 ) # jacobianClose # No scattering cloudboxOff # get some surface properties from corresponding atmospheric fields Extract( z_surface, z_field, 0 ) Extract( t_surface, t_field, 0 ) # Perform RT calculations # --- atmfields_checkedCalc atmgeom_checkedCalc cloudbox_checkedCalc sensor_checkedCalc yCalc } # Set number of batch cases: nelemGet( ybatch_n, batch_atm_fields_compact ) #IndexSet(ybatch_start, 2) #IndexSet(ybatch_n, 2) # Execute the batch calculations: # --- propmat_clearsky_agenda_checkedCalc ybatchCalc # Store result matrix: # --- WriteXML( "ascii", ybatch ) #WriteXML( "ascii", ybatch_jacobians ) ArrayOfVectorCreate( ybatch_ref ) ReadXML( ybatch_ref, "TestICI_fast.ybatch.ref.xml" ) Compare( ybatch, ybatch_ref, 0.2, "Total radiance should be close to the reference values" ) }