00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00030 #include "agenda_record.h"
00031
00032
00033
00034 #define NAME(x) x
00035 #define DESCRIPTION(x) x
00036 #define OUTPUT MakeArray<String>
00037 #define INPUT MakeArray<String>
00038
00040 Array<AgRecord> agenda_data;
00041
00042
00043 void define_agenda_data()
00044 {
00045
00046 agenda_data.resize(0);
00047
00048
00049
00050
00051
00052
00053
00054 agenda_data.push_back
00055 (AgRecord
00056 ( NAME( "abs_scalar_gas_agenda" ),
00057 DESCRIPTION
00058 (
00059 "Calculate scalar gas absorption.\n"
00060 "\n"
00061 "This agenda should calculate absorption coefficients for all gas\n"
00062 "species as a function of the given atmospheric state for one point\n"
00063 "in the atmosphere. The result is returned in *abs_scalar_gas*, the\n"
00064 "atmospheric state has to be specified by *rte_pressure*,\n"
00065 "*rte_temperature*, and *rte_vmr_list*\n"
00066 "\n"
00067 "A mandatory input parameter is f_index, which is used as follows:\n"
00068 "\n"
00069 "1. f_index < 0 : Return absorption for all frequencies (in f_grid).\n"
00070 "\n"
00071 "2. f_index >= 0 : Return absorption for the frequency indicated by\n"
00072 " f_index. \n"
00073 "\n"
00074 "The methods inside this agenda may require a lot of additional\n"
00075 "input variables, such as *f_grid*, *species*, etc.."
00076 ),
00077 OUTPUT( "abs_scalar_gas" ),
00078 INPUT( "f_index", "rte_pressure", "rte_temperature", "rte_vmr_list" )));
00079
00080 agenda_data.push_back
00081 (AgRecord
00082 ( NAME( "doit_conv_test_agenda" ),
00083 DESCRIPTION
00084 (
00085 "Compute the convergence test.\n"
00086 "\n"
00087 "The method *scat_i_fieldIterate* solves the VRTE iteratively."
00088 "This method requires \n"
00089 "a convergence test. The user can choose different convergence tests\n"
00090 "which are to be defined in this agenda.\n"
00091 "\n"
00092 "Possible workspace methods are:\n"
00093 "*doit_conv_flagAbs*: Calculates the absolute differences \n"
00094 " for each Stokes component separately.\n"
00095 "*doit_conv_flagAbs_BT*: Same as above, but the convergence limit\n"
00096 " can be specified in Kelvin BT (Rayleigh Jeans).\n"
00097 "*doit_conv_flagLsq*: Least square convergence test. Not recommended\n"
00098 " because result can be inaccurate.\n"
00099 "\n"
00100 ),
00101 OUTPUT( "doit_conv_flag", "doit_iteration_counter" ),
00102 INPUT( "doit_conv_flag", "doit_iteration_counter",
00103 "doit_i_field", "doit_i_field_old" )));
00104
00105 agenda_data.push_back
00106 (AgRecord
00107 ( NAME( "doit_scat_field_agenda" ),
00108 DESCRIPTION
00109 (
00110 "Calculation of the scattering integral field (DOIT). \n"
00111 "\n"
00112 "This agenda is called repeatedly in each DOIT iteration.\n"
00113 "The following methods can be used for calculating the \n"
00114 "scattering integral field: \n"
00115 "\n"
00116 "*doit_scat_fieldCalc*: This method calculates the scattering \n"
00117 " integral field by using the angular grids *scat_za_grid* \n"
00118 " and *scat_aa_grid*, which are also used in the update of the \n"
00119 " radiation field (*doit_rte_agenda*).\n"
00120 "\n"
00121 "*doit_scat_fieldCalcLimb*: This method calculates the scattering \n"
00122 " integral field. The difference to the previous method is that \n"
00123 " the data is interpolated on equidistant angular grids. \n"
00124 " Especially for limb, where a very fine zenith angle grid \n"
00125 " resolution is required for the RT transfer part, this method \n"
00126 " is much faster than *doit_scat_fieldCalc*. \n"
00127 "\n"
00128 ),
00129 OUTPUT( "doit_scat_field" ),
00130 INPUT( "doit_scat_field", "doit_i_field")));
00131
00132 agenda_data.push_back
00133 (AgRecord
00134 ( NAME( "doit_mono_agenda" ),
00135 DESCRIPTION
00136 (
00137 "Performs monochromatic DOIT calculation."
00138 "\n"
00139 "This agenda includes for example the following methods:\n"
00140 " 1. *DoitScatteringDataPrepare* \n"
00141 " 2. *doit_i_fieldSetClearsky \n"
00142 " 3. *doit_i_fieldIterate*\n"
00143 " 4. *DoitCloudboxFieldPut*\n"
00144 "\n"
00145 "The result of the agenda is the radiation field inside the \n"
00146 "cloudbox and on the cloudbox boundary, which can be used \n"
00147 "as radiative background for a clearsky radiative transfer \n"
00148 "calculation. \n"
00149 "\n"
00150 "See the ArtsWiki page *UsingArtsDoit* and the online documentation\n"
00151 "for more information about\n"
00152 "the methods.\n"
00153 "\n"
00154 ),
00155 OUTPUT( "doit_i_field", "scat_i_p", "scat_i_lat", "scat_i_lon",
00156 "doit_i_field1D_spectrum"),
00157 INPUT("f_index", "scat_i_p", "scat_i_lat", "scat_i_lon")));
00158
00159 agenda_data.push_back
00160 (AgRecord
00161 ( NAME( "doit_rte_agenda" ),
00162 DESCRIPTION
00163 (
00164 "Radiative transfer calculations in cloudbox.\n"
00165 "\n"
00166 "Agenda for radiative transfer step calculations with \n"
00167 "fixed scattering integral term shoul be specified here.\n"
00168 "Output is the updated radiation field in the cloudbox. \n"
00169 "This agenda is called repeatedly in each DOIT iteration.\n"
00170 "\n"
00171 "Normally one should use \n"
00172 "*doit_i_fieldUpdateSeq{1,3}D*: Seqential update of the"
00173 "radiation field.\n"
00174 " This method is the fastest and most accurate method.\n"
00175 "\n"
00176 "A very similar method in plane parallel approximation is \n"
00177 "*doit_i_fieldUpdate{1,3}DPlaneParallel*: This method also \n"
00178 " incluldes the sequential update, and it is slightly faster than\n"
00179 " *doit_i_fieldUpdateSeq{1,3}D*. The drawback is, that it is less\n"
00180 " accurate, especially for limb geometries and for larger \n"
00181 " off-nadir viewing angles. \n"
00182 "\n"
00183 "The following methods were used before the sequential update\n"
00184 "was invented. They are very slow and should therefore only \n"
00185 "be used for test cases.\n"
00186 "*doit_i_fieldUpdate{1,3}D*: Old function.\n"
00187 "\n"
00188 ),
00189 OUTPUT( "doit_i_field" ),
00190 INPUT( "doit_i_field", "doit_scat_field" )));
00191
00192 agenda_data.push_back
00193 (AgRecord
00194 ( NAME( "emission_agenda" ),
00195 DESCRIPTION
00196 (
00197 "Thermal emission source term.\n"
00198 "\n"
00199 "This agenda shall return the emission at one position along\n"
00200 "the propagation path. The source term equals the Planck function as\n"
00201 "long as thermodynamic equilibrium (LTE) can be assumed, while for\n"
00202 "non-LTE conditions much more complex calculations are required.\n"
00203 "\n"
00204 "The transmission through the atmosphere can be obtained by setting\n"
00205 "*emission* to zeros and *iy_space* to ones, ."
00206 ),
00207 OUTPUT( "emission" ),
00208 INPUT( "rte_temperature" )));
00209
00210 agenda_data.push_back
00211 (AgRecord
00212 ( NAME( "forloop_agenda" ),
00213 DESCRIPTION
00214 (
00215 "The body for a for loop.\n"
00216 "\n"
00217 "This agenda contains the body of the for loop to be execute by the\n"
00218 "method *ForLoop*. \n"
00219 ),
00220 OUTPUT(),
00221 INPUT( "forloop_index" )));
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248 agenda_data.push_back
00249 (AgRecord
00250 ( NAME( "iy_cloudbox_agenda" ),
00251 DESCRIPTION
00252 (
00253 "Intensity at cloudbox boundary or interior.\n"
00254 "\n"
00255 "The task of the agenda is to determine the intensity at some point\n"
00256 "at the boundary of inside the cloudbox. The actual calculations\n"
00257 "inside the agenda differ depending on scattering solution method.\n"
00258 "If DOIT is used, an interpolating of the intensity field should be\n"
00259 "performed. Another option is to start backward Monte Carlos \n"
00260 "calculations from this point.\n"
00261 "\n"
00262 "A function calling this agenda shall set *rte_pos*, *rte_los* and\n"
00263 "*rte_gp* variables to the position and line-of-sight for which the\n"
00264 "scattered radiation shall be determined. \n"
00265 ),
00266 OUTPUT( "iy" ),
00267 INPUT( "ppath", "rte_pos", "rte_los", "rte_gp_p", "rte_gp_lat",
00268 "rte_gp_lon" )));
00269
00270 agenda_data.push_back
00271 (AgRecord
00272 ( NAME( "iy_space_agenda" ),
00273 DESCRIPTION
00274 (
00275 "Downwelling radiation at the top of the atmosphere.\n"
00276 "\n"
00277 "Possible terms to include in this agenda include cosmic background\n"
00278 "radiation and solar radiation.\n"
00279 "\n"
00280 "A function calling this agenda shall set *rte_pos* and *rte_los* to\n"
00281 "the position and line-of-sight for which the entering radiation \n"
00282 "shall be determined. The position and line-of-sight must be known, \n"
00283 "for example, when radiation from the sun is considered. \n"
00284 ),
00285 OUTPUT( "iy" ),
00286 INPUT( "rte_pos", "rte_los" )));
00287
00288 agenda_data.push_back
00289 (AgRecord
00290 ( NAME( "jacobian_agenda" ),
00291 DESCRIPTION
00292 (
00293 "Pure numerical Jacobian calculations.\n"
00294 "\n"
00295 "Parts of the Jacobian matrix can be determined by (semi-)analytical\n"
00296 "expressions, while other parts are calculated in apure numerical\n"
00297 "manner (by perturbations). This agenda describes the calculations to\n"
00298 "be performed in the later case.\n"
00299 "\n"
00300 "This agenda is normally not set directly by the user, but is created\n"
00301 "by calling the the jacobianAdd set of methods.\n"
00302 ),
00303 OUTPUT( "jacobian" ),
00304 INPUT()));
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 agenda_data.push_back
00324 (AgRecord
00325 ( NAME( "jacobian_y_agenda" ),
00326 DESCRIPTION
00327 (
00328 "Agenda providing recalculated *y* after some perturbation.\n"
00329 "\n"
00330 "The purpose of this agenda is to determine some jacobians through\n"
00331 "perturbation calculations. Accordingly, the agenda shall return *y*\n"
00332 "for the perturbed input (without doing any unnecessary operations,\n"
00333 "for efficiency reasons). If unperturbed spectra (and analytical\n"
00334 "jacobians) are calculated with *RteCalc*, the standard choice for\n"
00335 "this agenda should be 'RteCalcNoJacobians*."
00336 ),
00337 OUTPUT( "y" ),
00338 INPUT( "vmr_field", "t_field", "pnd_field", "sensor_los" )));
00339
00340 agenda_data.push_back
00341 (AgRecord
00342 ( NAME( "main_agenda" ),
00343 DESCRIPTION
00344 (
00345 "The agenda corresponding to the entire controlfile. This is\n"
00346 "executed when ARTS is run."
00347 ),
00348 OUTPUT(),
00349 INPUT()));
00350
00351 agenda_data.push_back
00352 (AgRecord
00353 ( NAME( "met_profile_calc_agenda" ),
00354 DESCRIPTION
00355 (
00356 "This agenda is used for metoffice profile calculations.\n"
00357 "\n"
00358 "This agenda is called inside the method *ybatchMetProfiles* which is\n"
00359 "used to make a batch calculation for the metoffice profiles. \n"
00360 "See the documentation of *ybatchMetProfiles* for more information.\n"
00361 "\n"
00362 "This agenda can be, for example, set up like this:\n"
00363 "\n"
00364 "*AtmFieldsCalc*\n"
00365 "*abs_lookupAdapt*\n"
00366 "*ScatteringInit *\n"
00367 "*CloudboxGetIncoming*\n"
00368 "*ScatteringMain*\n"
00369 "*RteCalc*\n"
00370 "*yNoPolarisation*\n"
00371 "\n"
00372 "For example, if you want the output in brightness temperature unit,\n"
00373 "then add the method *VectorToTbByPlanck*. \n"
00374 "\n"
00375 ),
00376 OUTPUT( "y" ),
00377 INPUT("t_field_raw", "vmr_field_raw", "z_field_raw", "pnd_field_raw",
00378 "p_grid", "sensor_los", "cloudbox_on", "cloudbox_limits",
00379 "z_surface")));
00380
00381 agenda_data.push_back
00382 (AgRecord
00383 ( NAME( "opt_prop_gas_agenda" ),
00384 DESCRIPTION
00385 (
00386 "Calculate the optical properties (absorption vector and extinction.\n"
00387 "matrix) of gaseous species at a given grid point.\n"
00388 "\n"
00389 "This agenda, for example, can be defined in the following manner:\n"
00390 "\n"
00391 "*ext_matAddGas* : This method calculates the extinction \n"
00392 " matrix for the gaseous species and adds it to \n"
00393 " the workspace variable *ext_mat*.\n"
00394 "*abs_vecAddGas* : This method calculates the absorption\n"
00395 " vector for the gaseous species and adds it to\n"
00396 " the workspace variables abs_vec.\n"
00397 "If the Zeeman effect should be included the following methods have \n"
00398 "to be added: \n"
00399 "*ext_matAddZeeman* \n"
00400 "*abs_vecAddZeeman* \n"
00401 " \n"
00402 "Note that the initialization of *abs_vec* is not done inside the\n"
00403 "agenda, so *abs_vec* has to be initialize before executing the \n"
00404 "agenda.\n"
00405 "\n"
00406 "Output :\n"
00407 " ext_mat : Extinction matrix.\n"
00408 " abs_vec : Absorption vector.\n"
00409 "\n"
00410 "Input:\n"
00411 " ext_mat : Extinction matrix.\n"
00412 " abs_vec : Absorption vector. \n"
00413 " abs_scalar_gas : Scalar gas absorption. \n"
00414 ),
00415 OUTPUT( "ext_mat", "abs_vec" ),
00416 INPUT( "ext_mat", "abs_vec", "f_index", "abs_scalar_gas" )));
00417
00418
00419 agenda_data.push_back
00420 (AgRecord
00421 ( NAME( "opt_prop_part_agenda" ),
00422 DESCRIPTION
00423 (
00424 "Calculate the optical properties (absorption vector and extinction.\n"
00425 "matrix) for particles at a given atmospheric grid point.\n"
00426 "\n"
00427 "This agenda, for example, can be defined in the following manner:\n"
00428 "\n"
00429 "*ext_matAddPart* : This method calculates the extinction \n"
00430 " matrix for particles and adds it to the \n"
00431 " workspace variable *ext_mat*.\n"
00432 "*abs_vecAddPart* : This method calculates the absorption\n"
00433 " vector for particles and adds it to the\n"
00434 " workspace variables abs_vec.\n"
00435 " \n"
00436 "Note that the initialization of *ext_mat* is not done inside the\n"
00437 "agenda, so *ext_mat* has to be initialize before executing the \n"
00438 "agenda.\n"
00439 "\n"
00440 "Output :\n"
00441 " ext_mat : Extinction matrix.\n"
00442 " abs_vec : Absorption vector. \n"
00443 "\n"
00444 "Input:\n"
00445 " ext_mat : Extinction matrix. \n"
00446 " ext_mat_spt : Extinction matrix for single particle type. \n"
00447 " abs_vec : Absorption vector. \n"
00448 " abs_vec_spt : Absorption vector for single particle type. \n"
00449 " pnd_field : Particle number density field. \n"
00450 " atmosphere_dim: Atmospheric dimension. \n"
00451 " scat_p_index : Position. \n:"
00452 " scat_lat_index : Position. \n"
00453 " scat_lon_index : Position. \n"
00454 ),
00455 OUTPUT( "ext_mat", "abs_vec" ),
00456 INPUT( "ext_mat", "abs_vec",
00457 "ext_mat_spt", "abs_vec_spt",
00458 "scat_p_index", "scat_lat_index",
00459 "scat_lon_index" )));
00460
00461 agenda_data.push_back
00462 (AgRecord
00463 ( NAME( "pha_mat_spt_agenda" ),
00464 DESCRIPTION
00465 (
00466 "Calculates the phase matrix for a single particle type.\n"
00467 "\n"
00468 "Different options are possible for the usage of this agenda: \n"
00469 "*pha_mat_sptFromData* or *pha_mat_sptDOITOpt*. \n"
00470 "\n"
00471 ),
00472 OUTPUT( "pha_mat_spt"),
00473 INPUT( "pha_mat_spt", "scat_za_index", "scat_lat_index", "scat_lon_index",
00474 "scat_p_index", "scat_aa_index", "rte_temperature")));
00475
00476
00477 agenda_data.push_back
00478 (AgRecord
00479 ( NAME( "ppath_step_agenda" ),
00480 DESCRIPTION
00481 (
00482 "Calculation of a propagation path step.\n"
00483 "\n"
00484 "A propagation path step is defined as the path between some point \n"
00485 "to a crossing with either the pressure, latitude or longitude grid,\n"
00486 "and this agenda performs the calculations to determine such a \n"
00487 "partial propagation path. The starting point is normally a grid \n"
00488 "crossing point, but can also be an arbitrary point inside the \n"
00489 "atmosphere, such as the sensor position. Only points inside the \n"
00490 "model atmosphere are handled.\n"
00491 "\n"
00492 "The communication between this agenda and the calling method is \n"
00493 "handled by *ppath_step*. That variable is used both as input and \n"
00494 "output to *ppath_step_agenda*. The agenda gets back *ppath_step* \n"
00495 "as returned to the calling method and the last path point hold by \n"
00496 "the structure is accordingly the starting point for the new \n"
00497 "calculations. If a total propagation path shall be determined, this\n"
00498 "agenda is called repeatedly until the starting point of the \n"
00499 "propagation path is found and *ppath_step* will hold all path \n"
00500 "steps that together make up *ppath*. The starting point is included\n"
00501 "in the returned structure. \n"
00502 "\n"
00503 "The path is determined by starting at the end point and moving \n"
00504 "backwards to the starting point. The calculations are initiated by \n"
00505 "filling *ppath_step* with the practical end point of the path. \n"
00506 "This is either the position of the sensor (true or hypothetical), \n"
00507 "or some point at the top of the atmosphere (determined by\n"
00508 "geometrical calculations starting at the sensor). This \n"
00509 "initialisation is not handled by *ppath_step_agenda*. All fields of\n"
00510 "*ppath_step* are set by *ppath_step_agenda*. If the sensor is above\n"
00511 "the model atmosphere the field *constant* can be initiated by the \n"
00512 "calling method. Otherwise the field shall be set to negative and it\n"
00513 "is set to the correct value by *ppath_step* at the first call. This\n"
00514 "procedure is needed as the path constant changes if refraction is \n"
00515 "considered, or not, when the sensor is placed inside the\n"
00516 "atmosphere.\n"
00517 "\n"
00518 "The *ppath_step_agenda* put in points along the propagation path \n"
00519 "at all crossings with the grids, tangent points and points of \n"
00520 "surface reflection. It is also allowed to make agendas that put in \n"
00521 "additional points to fulfil some criterion, such as a maximum \n"
00522 "distance along the path between the points. Accordingly, the \n"
00523 "number of new points of each step can exceed one.\n"
00524 ),
00525 OUTPUT( "ppath_step" ),
00526 INPUT( "ppath_step", "atmosphere_dim", "p_grid", "lat_grid",
00527 "lon_grid", "z_field", "r_geoid", "z_surface" )));
00528
00529 agenda_data.push_back
00530 (AgRecord
00531 ( NAME( "refr_index_agenda" ),
00532 DESCRIPTION
00533 (
00534 "Calculation of the refractive index of air.\n"
00535 "\n"
00536 "This agenda should calculate the summed refractive index for all\n"
00537 "relevant atmospheric constituients."
00538 ),
00539 OUTPUT( "refr_index" ),
00540 INPUT( "rte_pressure", "rte_temperature", "rte_vmr_list" )));
00541
00542 agenda_data.push_back
00543 (AgRecord
00544 ( NAME( "rte_agenda" ),
00545 DESCRIPTION
00546 (
00547 "Performs monochromatic pencil beam calculations for a single\n"
00548 "propagation path.\n"
00549 "\n"
00550 "When calling the agenda, *iy* shall be set to the radiances, or\n"
00551 "optical thicknesses, at the start of the propagation path described\n"
00552 "by *ppath*. The agenda then solves the radiative transfer equation\n"
00553 "along the propagation path and returns the result in *iy*.\n"
00554 "\n"
00555 "The agenda can further provide the basis for analytical Jacobian\n"
00556 "calculations, by also returning the diy-variables. See *diy_dt* and\n"
00557 "diy_dvmr* and the user guide for details around analytical Jacobians\n"
00558 "calculations.\n"
00559 ),
00560 OUTPUT( "iy", "diy_dvmr", "diy_dt" ),
00561 INPUT( "iy", "diy_dvmr", "diy_dt", "ppath", "ppath_array",
00562 "ppath_array_index", "rte_do_vmr_jacs", "rte_do_t_jacs",
00563 "stokes_dim", "f_grid" )));
00564
00565 agenda_data.push_back
00566 (AgRecord
00567 ( NAME( "spt_calc_agenda" ),
00568 DESCRIPTION
00569 (
00570 "Calculates single particle properties from the amplitude matrix.\n"
00571 "\n"
00572 "This agenda sets up the methods, which should be used to calculate \n"
00573 "the particle properties, i.e. the extinction matrix and the \n"
00574 "absorbtion vector.\n "
00575 "\n"
00576 "Normally you use:\n"
00577 " opt_prop_sptFromMonoData{} \n"
00578 "\n"
00579 ),
00580 OUTPUT( "ext_mat_spt", "abs_vec_spt"),
00581 INPUT( "ext_mat_spt", "abs_vec_spt",
00582 "scat_p_index", "scat_lat_index", "scat_lon_index",
00583 "rte_temperature", "scat_za_index", "scat_aa_index"
00584 )));
00585
00586 agenda_data.push_back
00587 (AgRecord
00588 ( NAME( "surface_prop_agenda" ),
00589 DESCRIPTION
00590 (
00591 "Surface radiative properties. \n"
00592 "\n"
00593 "See the user guide for closer definitions of the variables \n"
00594 "that describe the surface properties. These variables are:\n"
00595 " *surface_emission*, *surface_los* and *surface_rmatrix* \n"
00596 ),
00597 OUTPUT( "surface_emission", "surface_los", "surface_rmatrix" ),
00598 INPUT( "rte_pos", "rte_los", "rte_gp_p", "rte_gp_lat", "rte_gp_lon" )));
00599
00600 agenda_data.push_back
00601 (AgRecord
00602 ( NAME( "ybatch_calc_agenda" ),
00603 DESCRIPTION
00604 (
00605 "Calculations to perform for each batch case.\n"
00606 "\n"
00607 "Must produce a new spectrum vector (y). See further *ybatchCalc*."
00608 ),
00609 OUTPUT( "y" ),
00610 INPUT( "ybatch_index" )));
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644 }