72    const Index&                       stokes_dim,
    74    const Index&                       atmosphere_dim,
    88    const Vector&                      refellipsoid,
    90    const Index&                       cloudbox_on,
    93    const Index&                       use_mean_scat_data,
    95    const Matrix&                      particle_masses,
    97    const Index&                       jacobian_do,
    98    const Agenda&                      ppath_agenda,
    99    const Agenda&                      ppath_step_agenda,
   100    const Agenda&                      propmat_clearsky_agenda,
   101    const Agenda&                      iy_transmitter_agenda,
   102    const Index&                       iy_agenda_call1,
   103    const Tensor3&                     iy_transmission,
   108    const Numeric&                     ppath_lraytrace,
   109    const Index&                       defocus_method,
   114   if( !iy_agenda_call1 )
   116                   "Recursive usage not possible (iy_agenda_call1 must be 1)" );
   117   if( iy_transmission.
ncols() )
   118     throw runtime_error( 
"*iy_transmission* must be empty" );
   120     throw runtime_error( 
"This method does not provide any jacobians and "   121                          "*jacobian_do* must be 0." );
   122   if( defocus_method < 1 || defocus_method > 2 )
   123     throw runtime_error( 
"Allowed choices for *defocus_method* is 1 and 2." );
   129                        rte_pos2, cloudbox_on, 0, t_field, z_field, vmr_field, 
   130                        f_grid, ppath_agenda );
   135   if( radback == 0  || radback == 2 )
   160   Index auxPressure        = -1,
   165         auxFreeSpaceLoss   = -1,
   166         auxFreeSpaceAtte   = -1,
   167         auxAtmosphericLoss = -1,
   168         auxDefocusingLoss  = -1,
   171         auxExtraPathDelay  = -1,
   172         auxBendingAngle    = -1;
   179   iy_aux.resize( naux );
   181   for( 
Index i=0; i<naux; i++ )
   183       if( iy_aux_vars[i] == 
"Pressure" )
   184         { auxPressure = i;      iy_aux[i].resize( 1, 1, 1, np ); }
   185       else if( iy_aux_vars[i] == 
"Temperature" )
   186         { auxTemperature = i;   iy_aux[i].resize( 1, 1, 1, np ); }
   187       else if( iy_aux_vars[i].substr(0,13) == 
"VMR, species " )
   190           istringstream is(iy_aux_vars[i].substr(13,2));
   192           if( ispecies < 0  ||  ispecies>=abs_species.
nelem() )
   195               os << 
"You have selected VMR of species with index "   196                  << ispecies << 
".\nThis species does not exist!";
   197               throw runtime_error( os.str() );
   199           auxVmrSpecies.push_back(i);
   200           auxVmrIsp.push_back(ispecies);
   201           iy_aux[i].resize( 1, 1, 1, np );               
   203       else if( iy_aux_vars[i] == 
"Absorption, summed" )
   204         { auxAbsSum = i;   iy_aux[i].resize( nf, ns, ns, np ); }
   205       else if( iy_aux_vars[i] == 
"Particle extinction, summed" )
   208           iy_aux[i].resize( nf, ns, ns, np ); 
   211       else if( iy_aux_vars[i].substr(0,20) == 
"Absorption, species " )
   214           istringstream is(iy_aux_vars[i].substr(20,2));
   216           if( ispecies < 0  ||  ispecies>=abs_species.
nelem() )
   219               os << 
"You have selected absorption species with index "   220                  << ispecies << 
".\nThis species does not exist!";
   221               throw runtime_error( os.str() );
   223           auxAbsSpecies.push_back(i);
   226             { auxAbsIsp.push_back( ihit ); }
   229               iaps.push_back(ispecies); 
   230               auxAbsIsp.push_back( iaps.
nelem()-1 ); 
   232           iy_aux[i].resize( nf, ns, ns, np );               
   234       else if( iy_aux_vars[i].substr(0,14) == 
"Mass content, " )
   237           istringstream is(iy_aux_vars[i].substr(14,2));
   239           if( icont < 0  ||  icont>=particle_masses.
ncols() )
   242               os << 
"You have selected particle mass content category with "   243                  << 
"index " << icont << 
".\nThis category is not defined!";
   244               throw runtime_error( os.str() );
   246           auxPartCont.push_back(i);
   247           auxPartContI.push_back(icont);
   248           iy_aux[i].resize( 1, 1, 1, np );
   250       else if( iy_aux_vars[i].substr(0,10) == 
"PND, type " )
   253           istringstream is(iy_aux_vars[i].substr(10,2));
   255           if( ip < 0  ||  ip>=pnd_field.
nbooks() )
   258               os << 
"You have selected particle number density field with "   259                  << 
"index " << ip << 
".\nThis field is not defined!";
   260               throw runtime_error( os.str() );
   262           auxPartField.push_back(i);
   263           auxPartFieldI.push_back(ip);
   264           iy_aux[i].resize( 1, 1, 1, np );
   266       else if( iy_aux_vars[i] == 
"Impact parameter" )
   267         { auxImpactParam = i;       iy_aux[i].resize( 1, 1, 1, 1 ); }
   268       else if( iy_aux_vars[i] == 
"Free space loss" )
   269         { auxFreeSpaceLoss = i;     iy_aux[i].resize( 1, 1, 1, 1 ); }
   270       else if( iy_aux_vars[i] == 
"Free space attenuation" )
   271         { auxFreeSpaceAtte = i;     iy_aux[i].resize( 1, 1, 1, np ); }
   272       else if( iy_aux_vars[i] == 
"Atmospheric loss" )
   273         { auxAtmosphericLoss = i;   iy_aux[i].resize( nf, 1, 1, 1 ); } 
   274       else if( iy_aux_vars[i] == 
"Defocusing loss" )
   275         { auxDefocusingLoss = i;    iy_aux[i].resize( 1, 1, 1, 1 ); }
   276       else if( iy_aux_vars[i] == 
"Faraday rotation" )
   277         { auxFarRotTotal = i; iy_aux[i].resize( nf, 1, 1, 1 ); iy_aux[i] = 0; }
   278       else if( iy_aux_vars[i] == 
"Faraday speed" )
   279         { auxFarRotSpeed = i; iy_aux[i].resize( nf, 1, 1, np ); iy_aux[i] = 0; }
   280       else if( iy_aux_vars[i] == 
"Extra path delay" )
   281         { auxExtraPathDelay = i; iy_aux[i].resize( 1, 1, 1, 1 ); }
   282       else if( iy_aux_vars[i] == 
"Bending angle" )
   283         { auxBendingAngle = i;      iy_aux[i].resize( 1, 1, 1, 1 ); } 
   287           os << 
"In *iy_aux_vars* you have included: \"" << iy_aux_vars[i]
   288              << 
"\"\nThis choice is not recognised.";
   289           throw runtime_error( os.str() );
   295   if( auxFarRotTotal>=0  ||  auxFarRotSpeed>=0 )  
   299                  "To include Faraday rotation, stokes_dim >= 3 is required." );
   302       for( 
Index sp = 0; sp < abs_species.
nelem() && ife < 0; sp++ )
   321               ife = iaps.
nelem() - 1;
   329   if( radback == 0  || radback == 2 )
   335       iy.
resize( nf, stokes_dim );
   338       for( 
Index i=0; i<naux; i++ )
   339         { iy_aux[i] = fillvalue; }
   348                                 ppath.
pos(np-1,
Range(0,atmosphere_dim)),
   349                                 ppath.
los(np-1,
joker), iy_transmitter_agenda );
   350   if( iy.
ncols() != stokes_dim  ||  iy.
nrows() != nf )
   351     { 
throw runtime_error( 
"The size of *iy* returned from "   352                                  "*iy_transmitter_agenda* is not correct." ); }
   358   Matrix       ppath_vmr, ppath_pnd, ppath_mag, ppath_wind, ppath_f;
   360   Tensor4      ppath_abs, trans_partial, trans_cumulat, pnd_ext_mat;
   367                          ppath_wind, ppath_mag, 
   368                          ppath, atmosphere_dim, p_grid, t_field, vmr_field,
   369                          wind_u_field, wind_v_field, wind_w_field,
   370                          mag_u_field, mag_v_field, mag_w_field );      
   371       get_ppath_f(       ppath_f, ppath, f_grid,  atmosphere_dim, 
   372                          rte_alonglos_v, ppath_wind );
   374                          propmat_clearsky_agenda, ppath, 
   375                          ppath_p, ppath_t, ppath_vmr, ppath_f, 
   376                          ppath_mag, f_grid, stokes_dim, iaps );
   381                             scalar_tau, ppath, ppath_abs, f_grid, stokes_dim );
   390                             scat_data, ppath_pnd, ppath, ppath_t, stokes_dim, 
   391                             ppath_f, atmosphere_dim, cloudbox_limits, pnd_field,
   392                             use_mean_scat_data, scat_data_array, verbosity );
   394                             scalar_tau, ppath, ppath_abs, f_grid, stokes_dim, 
   395                             clear2cloudbox, pnd_ext_mat );
   414       if( auxPressure >= 0 ) 
   415         { iy_aux[auxPressure](0,0,0,np-1) = ppath_p[np-1]; }
   417       if( auxTemperature >= 0 ) 
   418         { iy_aux[auxTemperature](0,0,0,np-1) = ppath_t[np-1]; }
   420       for( 
Index j=0; j<auxVmrSpecies.nelem(); j++ )
   421         { iy_aux[auxVmrSpecies[j]](0,0,0,np-1) = ppath_vmr(auxVmrIsp[j],np-1);}
   424         { 
for( 
Index iv=0; iv<nf; iv++ ) {
   425             for( 
Index is1=0; is1<
ns; is1++ ){
   426               for( 
Index is2=0; is2<
ns; is2++ ){
   427                 iy_aux[auxAbsSum](iv,is1,is2,np-1) = 
   428                                             ppath_abs(iv,is1,is2,np-1); } } } }
   429       for( 
Index j=0; j<auxAbsSpecies.nelem(); j++ )
   430         { 
for( 
Index iv=0; iv<nf; iv++ ) {
   431             for( 
Index is1=0; is1<stokes_dim; is1++ ){
   432               for( 
Index is2=0; is2<stokes_dim; is2++ ){
   433                 iy_aux[auxAbsSpecies[j]](iv,is1,is2,np-1) = 
   434                          abs_per_species(auxAbsIsp[j],iv,is1,is2,np-1); } } } }
   439           if( auxPartExt >= 0  && clear2cloudbox[np-1] >= 0 ) 
   441               const Index ic = clear2cloudbox[np-1];
   442               for( 
Index iv=0; iv<nf; iv++ ) {
   443                 for( 
Index is1=0; is1<
ns; is1++ ){
   444                   for( 
Index is2=0; is2<
ns; is2++ ){
   445                     iy_aux[auxPartExt](iv,is1,is2,np-1) = 
   446                                               pnd_ext_mat(iv,is1,is2,ic); } } } 
   449           for( 
Index j=0; j<auxPartCont.nelem(); j++ )
   450             { iy_aux[auxPartCont[j]](0,0,0,np-1) = ppath_pnd(
joker,np-1) *
   451                                       particle_masses(
joker,auxPartContI[j]); }
   453           for( 
Index j=0; j<auxPartField.nelem(); j++ )
   454             { iy_aux[auxPartField[j]](0,0,0,np-1) = 
   455                                             ppath_pnd(auxPartFieldI[j],np-1); }
   458       if( auxFreeSpaceAtte >= 0 )
   459         { iy_aux[auxFreeSpaceAtte](
joker,0,0,np-1) = 2/lbg; }
   461       if( auxFarRotSpeed >= 0 )
   462         { 
for( 
Index iv=0; iv<nf; iv++ ) {
   463             iy_aux[auxFarRotSpeed](iv,0,0,np-1) = 0.5 *
   464                                           abs_per_species(ife,iv,1,2,np-1); } }
   468       for( 
Index ip=np-2; ip>=0; ip-- )
   471           lbg += ppath.
lstep[ip];
   475           if( stokes_dim == 1 )
   477               for( 
Index iv=0; iv<nf; iv++ )  
   478                 { iy(iv,0) = iy(iv,0) * trans_partial(iv,0,0,ip); }
   482               for( 
Index iv=0; iv<nf; iv++ )  
   488                         { iy(iv,is) = iy(iv,is) * trans_partial(iv,is,is,ip); }
   502           if( auxPressure >= 0 ) 
   503             { iy_aux[auxPressure](0,0,0,ip) = ppath_p[ip]; }
   505           if( auxTemperature >= 0 ) 
   506             { iy_aux[auxTemperature](0,0,0,ip) = ppath_t[ip]; }
   508           for( 
Index j=0; j<auxVmrSpecies.nelem(); j++ )
   509             { iy_aux[auxVmrSpecies[j]](0,0,0,ip) =  ppath_vmr(auxVmrIsp[j],ip);}
   512             { 
for( 
Index iv=0; iv<nf; iv++ ) {
   513                 for( 
Index is1=0; is1<
ns; is1++ ){
   514                   for( 
Index is2=0; is2<
ns; is2++ ){
   515                     iy_aux[auxAbsSum](iv,is1,is2,ip) = 
   516                                                ppath_abs(iv,is1,is2,ip); } } } }
   517           for( 
Index j=0; j<auxAbsSpecies.nelem(); j++ )
   518             { 
for( 
Index iv=0; iv<nf; iv++ ) {
   519                 for( 
Index is1=0; is1<stokes_dim; is1++ ){
   520                   for( 
Index is2=0; is2<stokes_dim; is2++ ){
   521                     iy_aux[auxAbsSpecies[j]](iv,is1,is2,ip) = 
   522                             abs_per_species(auxAbsIsp[j],iv,is1,is2,ip); } } } }
   527               if( auxPartExt >= 0  &&  clear2cloudbox[ip] >= 0 ) 
   529                   const Index ic = clear2cloudbox[ip];
   530                   for( 
Index iv=0; iv<nf; iv++ ) {
   531                     for( 
Index is1=0; is1<
ns; is1++ ){
   532                       for( 
Index is2=0; is2<
ns; is2++ ){
   533                         iy_aux[auxPartExt](iv,is1,is2,ip) = 
   534                                               pnd_ext_mat(iv,is1,is2,ic); } } }
   537               for( 
Index j=0; j<auxPartCont.nelem(); j++ )
   538                 { iy_aux[auxPartCont[j]](0,0,0,ip) = ppath_pnd(
joker,ip) *
   539                                       particle_masses(
joker,auxPartContI[j]); }
   541               for( 
Index j=0; j<auxPartField.nelem(); j++ )
   542                 { iy_aux[auxPartField[j]](0,0,0,ip) = 
   543                                               ppath_pnd(auxPartFieldI[j],ip); }
   546           if( auxFreeSpaceAtte >= 0 )
   547             { iy_aux[auxFreeSpaceAtte](
joker,0,0,ip) = 2/lbg; }
   549           if( auxFarRotTotal >= 0 )
   550             { 
for( 
Index iv=0; iv<nf; iv++ ) {
   551                 iy_aux[auxFarRotTotal](iv,0,0,0) += 
RAD2DEG * ppath.
lstep[ip] *
   552                   0.25 * ( abs_per_species(ife,iv,1,2,ip)+
   553                            abs_per_species(ife,iv,1,2,ip+1)); } }
   555           if( auxFarRotSpeed >= 0 )
   556             { 
for( 
Index iv=0; iv<nf; iv++ ) {  
   557                 iy_aux[auxFarRotSpeed](iv,0,0,ip) = 0.5 *
   558                                             abs_per_species(ife,iv,1,2,ip); } }
   564       if( auxAtmosphericLoss >= 0 )
   565         { iy_aux[auxAtmosphericLoss](
joker,0,0,0) = iy(joker,0); }      
   566       if( auxImpactParam >= 0 )
   582       if( auxFreeSpaceLoss >= 0 )
   583         { iy_aux[auxFreeSpaceLoss] = fspl; }
   588       if( defocus_method == 1 )
   591                               p_grid, lat_grid, lon_grid, t_field, z_field, 
   592                               vmr_field, f_grid, refellipsoid, 
   593                               z_surface, ppath, ppath_lraytrace,
   594                               defocus_shift, verbosity );
   596       else if( defocus_method == 2 )
   598                               p_grid, lat_grid, lon_grid, t_field, z_field, 
   599                               vmr_field, f_grid, refellipsoid, 
   600                               z_surface, ppath, ppath_lraytrace, 
   601                               defocus_shift, verbosity ); 
   603       if( auxDefocusingLoss >= 0 )
   604         { iy_aux[auxDefocusingLoss] = dfl; }
   613       if( auxExtraPathDelay >= 0 )
   618                                            lat_grid, lon_grid, ppath.
end_pos );
   625           if( atmosphere_dim <= 2 )
   636       if( auxBendingAngle >= 0 )
   641           iy_aux[auxBendingAngle] = ba;
   657    const Index&                       stokes_dim,
   659    const Index&                       atmosphere_dim,
   671    const Index&                       cloudbox_on,
   674    const Index&                       use_mean_scat_data,
   676    const Matrix&                      particle_masses,
   678    const Index&                       jacobian_do,
   681    const Agenda&                      ppath_agenda,
   682    const Agenda&                      propmat_clearsky_agenda,
   683    const Agenda&                      iy_transmitter_agenda,
   684    const Index&                       iy_agenda_call1,
   685    const Tensor3&                     iy_transmission,
   690    const Numeric&                     ppath_lraytrace,      
   694   if( !iy_agenda_call1 )
   696                   "Recursive usage not possible (iy_agenda_call1 must be 1)" );
   697   if( iy_transmission.
ncols() )
   698     throw runtime_error( 
"*iy_transmission* must be empty" );
   704                        0, 0, t_field, z_field, vmr_field, f_grid, 
   717                                 ppath.
pos(np-1,
Range(0,atmosphere_dim)),
   718                                 ppath.
los(np-1,
joker), iy_transmitter_agenda );
   719   if( iy.
ncols() != stokes_dim  ||  iy.
nrows() != nf )
   722       os << 
"The size of *iy* returned from *iy_transmitter_agenda* is\n"   724          << 
"  expected size = [" << nf << 
"," << stokes_dim << 
"]\n"   725          << 
"  size of iy    = [" << iy.
nrows() << 
"," << iy.
ncols()<< 
"]\n";
   726       throw runtime_error( os.str() );      
   733   Index j_analytical_do = 0;
   735   ArrayOfIndex    jac_species_i(0), jac_is_t(0), jac_wind_i(0); 
   739   if( !j_analytical_do )
   740     { diy_dx.resize( 0 ); }
   743       diy_dpath.resize( nq ); 
   744       jac_species_i.resize( nq ); 
   745       jac_is_t.resize( nq ); 
   746       jac_wind_i.resize( nq ); 
   749         diy_dpath[iq].resize( np, nf, ns ); 
   753                               jac_wind_i, jacobian_quantities, abs_species );
   754       if( iy_agenda_call1 )
   759                   jacobian_indices[iq][1]-jacobian_indices[iq][0]+1, nf, ns ); 
   772   for( 
Index i=0; i<jac_species_i.nelem(); i++ )
   774       if( jac_species_i[i] >= 0 )
   775         { iaps.push_back( jac_species_i[i] ); }
   780   Index auxPressure    = -1,
   795   iy_aux.resize( naux );
   797   for( 
Index i=0; i<naux; i++ )
   799       if( iy_aux_vars[i] == 
"Pressure" )
   800         { auxPressure = i;      iy_aux[i].resize( 1, 1, 1, np ); }
   801       else if( iy_aux_vars[i] == 
"Temperature" )
   802         { auxTemperature = i;   iy_aux[i].resize( 1, 1, 1, np ); }
   803       else if( iy_aux_vars[i].substr(0,13) == 
"VMR, species " )
   806           istringstream is(iy_aux_vars[i].substr(13,2));
   808           if( ispecies < 0  ||  ispecies>=abs_species.
nelem() )
   811               os << 
"You have selected VMR of species with index "   812                  << ispecies << 
".\nThis species does not exist!";
   813               throw runtime_error( os.str() );
   815           auxVmrSpecies.push_back(i);
   816           auxVmrIsp.push_back(ispecies);
   817           iy_aux[i].resize( 1, 1, 1, np );               
   819       else if( iy_aux_vars[i] == 
"Absorption, summed" )
   820         { auxAbsSum = i;   iy_aux[i].resize( nf, ns, ns, np ); }
   821       else if( iy_aux_vars[i] == 
"Particle extinction, summed" )
   824           iy_aux[i].resize( nf, ns, ns, np ); 
   827       else if( iy_aux_vars[i].substr(0,20) == 
"Absorption, species " )
   830           istringstream is(iy_aux_vars[i].substr(20,2));
   832           if( ispecies < 0  ||  ispecies>=abs_species.
nelem() )
   835               os << 
"You have selected absorption species with index "   836                  << ispecies << 
".\nThis species does not exist!";
   837               throw runtime_error( os.str() );
   839           auxAbsSpecies.push_back(i);
   842             { auxAbsIsp.push_back( ihit ); }
   845               iaps.push_back(ispecies); 
   846               auxAbsIsp.push_back( iaps.nelem()-1 ); 
   848           iy_aux[i].resize( nf, ns, ns, np );               
   850       else if( iy_aux_vars[i].substr(0,14) == 
"Mass content, " )
   853           istringstream is(iy_aux_vars[i].substr(14,2));
   855           if( icont < 0  ||  icont>=particle_masses.
ncols() )
   858               os << 
"You have selected particle mass content category with "   859                  << 
"index " << icont << 
".\nThis category is not defined!";
   860               throw runtime_error( os.str() );
   862           auxPartCont.push_back(i);
   863           auxPartContI.push_back(icont);
   864           iy_aux[i].resize( 1, 1, 1, np );
   866       else if( iy_aux_vars[i].substr(0,10) == 
"PND, type " )
   869           istringstream is(iy_aux_vars[i].substr(10,2));
   871           if( ip < 0  ||  ip>=pnd_field.
nbooks() )
   874               os << 
"You have selected particle number density field with "   875                  << 
"index " << ip << 
".\nThis field is not defined!";
   876               throw runtime_error( os.str() );
   878           auxPartField.push_back(i);
   879           auxPartFieldI.push_back(ip);
   880           iy_aux[i].resize( 1, 1, 1, np );
   882       else if( iy_aux_vars[i] == 
"iy"   &&  auxIy < 0 )
   883         { auxIy = i;           iy_aux[i].resize( nf, ns, 1, np ); }
   884       else if( iy_aux_vars[i] == 
"Transmission"   &&  auxTrans < 0 )
   885         { auxTrans = i;        iy_aux[i].resize( nf, ns, ns, np ); }
   886       else if( iy_aux_vars[i] == 
"Optical depth" )
   887         { auxOptDepth = i;     iy_aux[i].resize( nf, 1, 1, 1 ); }
   888       else if( iy_aux_vars[i] == 
"Faraday rotation" )
   889         { auxFarRotTotal = i; iy_aux[i].resize( nf, 1, 1, 1 ); iy_aux[i] = 0; }
   890       else if( iy_aux_vars[i] == 
"Faraday speed" )
   891         { auxFarRotSpeed = i; iy_aux[i].resize( nf, 1, 1, np ); iy_aux[i] = 0; }
   895           os << 
"In *iy_aux_vars* you have included: \"" << iy_aux_vars[i]
   896              << 
"\"\nThis choice is not recognised.";
   897           throw runtime_error( os.str() );
   903   if( auxFarRotTotal>=0  ||  auxFarRotSpeed>=0 )  
   907                  "To include Faraday rotation, stokes_dim >= 3 is required." );
   910       for( 
Index sp = 0; sp < abs_species.
nelem() && ife < 0; sp++ )
   929               ife = iaps.nelem() - 1; 
   939   Matrix              ppath_vmr, ppath_pnd, ppath_wind, ppath_mag, ppath_f;
   941   Tensor4             ppath_abs, trans_partial, trans_cumulat, pnd_ext_mat;
   949                          ppath_wind, ppath_mag, 
   950                          ppath, atmosphere_dim, p_grid, t_field, vmr_field,
   951                          wind_u_field, wind_v_field, wind_w_field,
   952                          mag_u_field, mag_v_field, mag_w_field );      
   953       get_ppath_f(       ppath_f, ppath, f_grid,  atmosphere_dim, 
   954                          rte_alonglos_v, ppath_wind );
   956                          propmat_clearsky_agenda, ppath, 
   957                          ppath_p, ppath_t, ppath_vmr, ppath_f, 
   958                          ppath_mag, f_grid, stokes_dim, iaps );
   962                            scalar_tau, ppath, ppath_abs, f_grid, stokes_dim );
   969           get_ppath_ext(    clear2cloudbox, pnd_abs_vec, pnd_ext_mat, scat_data,
   970                             ppath_pnd, ppath, ppath_t, stokes_dim, ppath_f, 
   971                             atmosphere_dim, cloudbox_limits, pnd_field, 
   972                             use_mean_scat_data, scat_data_array, verbosity );
   974                             scalar_tau, ppath, ppath_abs, f_grid, stokes_dim, 
   975                             clear2cloudbox, pnd_ext_mat );
   985   if( auxOptDepth >= 0 ) 
   988         { iy_aux[auxOptDepth] = 0; }
   990         { iy_aux[auxOptDepth](
joker,0,0,0) = scalar_tau; }
   995         { 
for( 
Index iv=0; iv<nf; iv++ ) {
   998         { iy_aux[auxTrans] = trans_cumulat; }
  1001   if( auxFarRotTotal >= 0 )
  1002     { 
for( 
Index iv=0; iv<nf; iv++ ) {
  1003         iy_aux[auxFarRotTotal](iv,0,0,0) = 0; } }
  1018             Tensor4   ppath_at2, ppath_awu, ppath_awv, ppath_aww;
  1020       if( j_analytical_do )
  1025           for( 
Index iq=0; iq<jac_is_t.nelem(); iq++ )
  1029                   Tensor5 dummy_abs_per_species;
  1030                   Vector t2 = ppath_t;   t2 += dt;
  1032                                  propmat_clearsky_agenda, ppath, ppath_p,
  1033                                  t2, ppath_vmr, ppath_f, ppath_mag, f_grid, 
  1036               else if( jac_wind_i[iq] )
  1038                   if( jac_wind_i[iq] == 1 )
  1040                       Tensor5 dummy_abs_per_species;
  1043                                      rte_alonglos_v, w2 );
  1045                                      propmat_clearsky_agenda, ppath, ppath_p, 
  1046                                      ppath_t, ppath_vmr, f2, ppath_mag, f_grid,
  1049                   else if( jac_wind_i[iq] == 2 )
  1051                       Tensor5 dummy_abs_per_species;
  1054                                      rte_alonglos_v, w2 );
  1056                                      propmat_clearsky_agenda, ppath, ppath_p, 
  1057                                      ppath_t, ppath_vmr, f2, ppath_mag, f_grid,
  1060                   else if( jac_wind_i[iq] == 3 )
  1062                       Tensor5 dummy_abs_per_species;
  1065                                      rte_alonglos_v, w2 );
  1067                                      propmat_clearsky_agenda, ppath, ppath_p, 
  1068                                      ppath_t, ppath_vmr, f2, ppath_mag, f_grid,
  1079       if( auxPressure >= 0 ) 
  1080         { iy_aux[auxPressure](0,0,0,np-1) = ppath_p[np-1]; }
  1082       if( auxTemperature >= 0 ) 
  1083         { iy_aux[auxTemperature](0,0,0,np-1) = ppath_t[np-1]; }
  1085       for( 
Index j=0; j<auxVmrSpecies.nelem(); j++ )
  1086         { iy_aux[auxVmrSpecies[j]](0,0,0,np-1) = ppath_vmr(auxVmrIsp[j],np-1); }
  1088       if( auxAbsSum >= 0 ) 
  1089         { 
for( 
Index iv=0; iv<nf; iv++ ) {
  1090             for( 
Index is1=0; is1<
ns; is1++ ){
  1091               for( 
Index is2=0; is2<
ns; is2++ ){
  1092                 iy_aux[auxAbsSum](iv,is1,is2,np-1) = 
  1093                                              ppath_abs(iv,is1,is2,np-1); } } } }
  1094       for( 
Index j=0; j<auxAbsSpecies.nelem(); j++ )
  1095         { 
for( 
Index iv=0; iv<nf; iv++ ) {
  1096             for( 
Index is1=0; is1<stokes_dim; is1++ ){
  1097               for( 
Index is2=0; is2<stokes_dim; is2++ ){
  1098                 iy_aux[auxAbsSpecies[j]](iv,is1,is2,np-1) = 
  1099                          abs_per_species(auxAbsIsp[j],iv,is1,is2,np-1); } } } }
  1104           if( auxPartExt >= 0  && clear2cloudbox[np-1] >= 0 ) 
  1106               const Index ic = clear2cloudbox[np-1];
  1107               for( 
Index iv=0; iv<nf; iv++ ) {
  1108                 for( 
Index is1=0; is1<
ns; is1++ ){
  1109                   for( 
Index is2=0; is2<
ns; is2++ ){
  1110                     iy_aux[auxPartExt](iv,is1,is2,np-1) = 
  1111                                               pnd_ext_mat(iv,is1,is2,ic); } } } 
  1114           for( 
Index j=0; j<auxPartCont.nelem(); j++ )
  1115             { iy_aux[auxPartCont[j]](0,0,0,np-1) = ppath_pnd(
joker,np-1) *
  1116                                       particle_masses(
joker,auxPartContI[j]); }
  1118           for( 
Index j=0; j<auxPartField.nelem(); j++ )
  1119             { iy_aux[auxPartField[j]](0,0,0,np-1) = 
  1120                                             ppath_pnd(auxPartFieldI[j],np-1); }
  1124       if( auxFarRotSpeed >= 0 )
  1125         { 
for( 
Index iv=0; iv<nf; iv++ ) {
  1126             iy_aux[auxFarRotSpeed](iv,0,0,np-1) = 0.5 *
  1127                                           abs_per_species(ife,iv,1,2,np-1); } }
  1132       for( 
Index ip=np-2; ip>=0; ip-- )
  1135           if( j_analytical_do )
  1141               for( 
Index iq=0; iq<nq; iq++ ) 
  1143                   if( jacobian_quantities[iq].Analytical() )
  1146                       if( jac_species_i[iq] >= 0 )
  1150                           const Index isp = jac_species_i[iq];
  1155                                       jacobian_quantities[iq].Mode(), 
  1156                                       ppath_vmr(isp,ip), ppath_p[ip], 
  1159                                       jacobian_quantities[iq].Mode(), 
  1160                                       ppath_vmr(isp,ip+1), ppath_p[ip+1], 
  1163                           for( 
Index iv=0; iv<nf; iv++ )
  1166                               if( extmat_case[ip][iv] == 1 )
  1169                                                     trans_cumulat(iv,0,0,ip+1);
  1170                                   for( 
Index is=0; is<
ns; is++ )
  1172                                       const Numeric z = x * iy(iv,is); 
  1173                                       diy_dpath[iq](ip  ,iv,is) += z * unitscf1*
  1174                                              abs_per_species(iiaps,iv,0,0,ip  );
  1175                                       diy_dpath[iq](ip+1,iv,is) += z * unitscf2*
  1176                                              abs_per_species(iiaps,iv,0,0,ip+1);
  1186                                   Matrix ext_mat(ns,ns), dtdx(ns,ns);
  1188                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1189                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1190                                       ext_mat(is1,is2) = 0.5 * ( dd *
  1191                                        abs_per_species(iiaps,iv,is1,is2,ip  ) +
  1192                                                   ppath_abs(iv,is1,is2,ip) +
  1193                                                   ppath_abs(iv,is1,is2,ip+1) );
  1196                                              ext_mat, ppath.
lstep[ip] ); 
  1197                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1198                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1199                                       dtdx(is1,is2) = (unitscf1/dd) * 
  1201                                                 trans_partial(iv,is1,is2,ip) );
  1207                                   diy_dpath[iq](ip,iv,
joker) += y;
  1210                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1211                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1212                                       ext_mat(is1,is2) = 0.5 * ( dd *
  1213                                        abs_per_species(iiaps,iv,is1,is2,ip+1) +
  1214                                                   ppath_abs(iv,is1,is2,ip) +
  1215                                                   ppath_abs(iv,is1,is2,ip+1) );
  1218                                              ext_mat, ppath.
lstep[ip] ); 
  1219                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1220                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1221                                       dtdx(is1,is2) = (unitscf2/dd) * 
  1223                                                 trans_partial(iv,is1,is2,ip) );
  1228                                   diy_dpath[iq](ip+1,iv,
joker) += y;
  1234                       else if( jac_wind_i[iq] )
  1236                           for( 
Index iv=0; iv<nf; iv++ )
  1240                               Tensor4* ppath_awx = &ppath_awv;
  1241                               if( jac_wind_i[iq] == 1 )
  1242                                 { ppath_awx = &ppath_awu; }
  1243                               else if( jac_wind_i[iq] == 3 )
  1244                                 { ppath_awx = &ppath_aww; }
  1247                               if( extmat_case[ip][iv] == 1 )
  1249                                   const Numeric dkdx1 = (1/dw) * ( 
  1250                                                    (*ppath_awx)(iv,0,0,ip  ) -
  1251                                                       ppath_abs(iv,0,0,ip  ) );
  1252                                   const Numeric dkdx2 = (1/dw) * ( 
  1253                                                    (*ppath_awx)(iv,0,0,ip+1) -
  1254                                                       ppath_abs(iv,0,0,ip+1) );
  1256                                                  trans_cumulat(iv,0,0,ip+1);
  1257                                   for( 
Index is=0; is<
ns; is++ )
  1259                                       const Numeric z = x * iy(iv,is); 
  1260                                       diy_dpath[iq](ip  ,iv,is) += z * dkdx1;
  1261                                       diy_dpath[iq](ip+1,iv,is) += z * dkdx2;
  1269                                   Matrix ext_mat(ns,ns), dtdx(ns,ns);
  1271                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1272                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1273                                       ext_mat(is1,is2) = 0.5 * (
  1274                                                (*ppath_awx)(iv,is1,is2,ip  ) +
  1275                                                   ppath_abs(iv,is1,is2,ip+1) );
  1278                                              ext_mat, ppath.
lstep[ip] ); 
  1279                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1280                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1281                                       dtdx(is1,is2) = (1/dw) * 
  1283                                                 trans_partial(iv,is1,is2,ip) );
  1289                                   diy_dpath[iq](ip,iv,
joker) += y;
  1292                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1293                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1294                                       ext_mat(is1,is2) = 0.5 * (
  1295                                                   ppath_abs(iv,is1,is2,ip  ) +
  1296                                                (*ppath_awx)(iv,is1,is2,ip+1) );
  1299                                              ext_mat, ppath.
lstep[ip] ); 
  1300                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1301                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1302                                       dtdx(is1,is2) = (1/dw) * 
  1304                                                 trans_partial(iv,is1,is2,ip) );
  1309                                   diy_dpath[iq](ip+1,iv,
joker) += y;
  1315                       else if( jac_is_t[iq] )
  1317                           for( 
Index iv=0; iv<nf; iv++ )
  1320                               if( extmat_case[ip][iv] == 1 )
  1322                                   const Numeric dkdt1 = 1/dt * (
  1323                                                       ppath_at2(iv,0,0,ip  ) -
  1324                                                       ppath_abs(iv,0,0,ip  ) );
  1325                                   const Numeric dkdt2 = 1/dt * (
  1326                                                       ppath_at2(iv,0,0,ip+1) - 
  1327                                                       ppath_abs(iv,0,0,ip+1) );
  1329                                                  trans_cumulat(iv,0,0,ip+1);
  1330                                   for( 
Index is=0; is<
ns; is++ )
  1332                                       const Numeric z = x * iy(iv,is);
  1333                                       diy_dpath[iq](ip  ,iv,is) += z * dkdt1;
  1334                                       diy_dpath[iq](ip+1,iv,is) += z * dkdt2;
  1338                                   if( jacobian_quantities[iq].Subtag() == 
  1342                                                       ppath_abs(iv,0,0,ip  ) +
  1343                                                       ppath_abs(iv,0,0,ip+1) );
  1344                                       for( 
Index is=0; is<
ns; is++ )
  1346                                           const Numeric z = x * iy(iv,is);
  1347                                           diy_dpath[iq](ip  ,iv,is) += 
  1348                                                       z * kbar / ppath_t[ip];
  1349                                           diy_dpath[iq](ip+1,iv,is) += 
  1350                                                       z * kbar / ppath_t[ip+1];
  1358                                   Matrix ext_mat(ns,ns), dtdx(ns,ns);
  1360                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1361                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1362                                       ext_mat(is1,is2) = 0.5 * (
  1363                                                   ppath_at2(iv,is1,is2,ip  ) +
  1364                                                   ppath_abs(iv,is1,is2,ip+1) );
  1367                                              ext_mat, ppath.
lstep[ip] ); 
  1368                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1369                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1370                                       dtdx(is1,is2) = (1/dt) * 
  1372                                                 trans_partial(iv,is1,is2,ip) );
  1378                                   diy_dpath[iq](ip,iv,
joker) += y;
  1381                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1382                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1383                                       ext_mat(is1,is2) = 0.5 * (
  1384                                                   ppath_abs(iv,is1,is2,ip  ) +
  1385                                                   ppath_at2(iv,is1,is2,ip+1) );
  1388                                              ext_mat, ppath.
lstep[ip] ); 
  1389                                   for( 
Index is1=0; is1<
ns; is1++ ) {
  1390                                     for( 
Index is2=0; is2<
ns; is2++ ) {
  1391                                       dtdx(is1,is2) = (1/dt) * 
  1393                                                 trans_partial(iv,is1,is2,ip) );
  1398                                   diy_dpath[iq](ip+1,iv,
joker) += y; 
  1401                                   if( jacobian_quantities[iq].Subtag() == 
  1404                                       for( 
Index is1=0; is1<
ns; is1++ ) {
  1405                                         for( 
Index is2=0; is2<
ns; is2++ ) {
  1406                                           ext_mat(is1,is2) = 0.5 * (
  1407                                                    ppath_abs(iv,is1,is2,ip  ) +
  1408                                                    ppath_abs(iv,is1,is2,ip+1) );
  1412                                                   ppath_t[ip] + ppath_t[ip+1] );
  1417                                       for( 
Index is1=0; is1<
ns; is1++ ) {
  1418                                         for( 
Index is2=0; is2<
ns; is2++ ) {
  1419                                           dtdx(is1,is2) = (1/dt) * 
  1421                                                 trans_partial(iv,is1,is2,ip) );
  1429                                       for( 
Index is=0; is<
ns; is++ ) 
  1431                                           diy_dpath[iq](ip  ,iv,is) += y[is] *
  1432                                                     0.5 * tbar / ppath_t[ip];
  1433                                           diy_dpath[iq](ip+1,iv,is) += y[is] *
  1434                                                     0.5 * tbar / ppath_t[ip+1];
  1447           if( stokes_dim == 1 )
  1449               for( 
Index iv=0; iv<nf; iv++ )  
  1450                 { iy(iv,0) = iy(iv,0) * trans_partial(iv,0,0,ip); }
  1454               for( 
Index iv=0; iv<nf; iv++ )  
  1459                       for( 
Index is=0; is<
ns; is++ )
  1460                         { iy(iv,is) = iy(iv,is) * trans_partial(iv,is,is,ip); }
  1475           if( auxPressure >= 0 ) 
  1476             { iy_aux[auxPressure](0,0,0,ip) = ppath_p[ip]; }
  1478           if( auxTemperature >= 0 ) 
  1479             { iy_aux[auxTemperature](0,0,0,ip) = ppath_t[ip]; }
  1481           for( 
Index j=0; j<auxVmrSpecies.nelem(); j++ )
  1482             { iy_aux[auxVmrSpecies[j]](0,0,0,ip) =  ppath_vmr(auxVmrIsp[j],ip);}
  1484           if( auxAbsSum >= 0 ) 
  1485             { 
for( 
Index iv=0; iv<nf; iv++ ) {
  1486                 for( 
Index is1=0; is1<
ns; is1++ ){
  1487                   for( 
Index is2=0; is2<
ns; is2++ ){
  1488                     iy_aux[auxAbsSum](iv,is1,is2,ip) = 
  1489                                                ppath_abs(iv,is1,is2,ip); } } } }
  1490           for( 
Index j=0; j<auxAbsSpecies.nelem(); j++ )
  1491             { 
for( 
Index iv=0; iv<nf; iv++ ) {
  1492                 for( 
Index is1=0; is1<stokes_dim; is1++ ){
  1493                   for( 
Index is2=0; is2<stokes_dim; is2++ ){
  1494                     iy_aux[auxAbsSpecies[j]](iv,is1,is2,ip) = 
  1495                             abs_per_species(auxAbsIsp[j],iv,is1,is2,ip); } } } }
  1500               if( auxPartExt >= 0  &&  clear2cloudbox[ip] >= 0 ) 
  1502                   const Index ic = clear2cloudbox[ip];
  1503                   for( 
Index iv=0; iv<nf; iv++ ) {
  1504                     for( 
Index is1=0; is1<
ns; is1++ ){
  1505                       for( 
Index is2=0; is2<
ns; is2++ ){
  1506                         iy_aux[auxPartExt](iv,is1,is2,ip) = 
  1507                                               pnd_ext_mat(iv,is1,is2,ic); } } }
  1510               for( 
Index j=0; j<auxPartCont.nelem(); j++ )
  1511                 { iy_aux[auxPartCont[j]](0,0,0,ip) = ppath_pnd(
joker,ip) *
  1512                                       particle_masses(
joker,auxPartContI[j]); }
  1514               for( 
Index j=0; j<auxPartField.nelem(); j++ )
  1515                 { iy_aux[auxPartField[j]](0,0,0,ip) = 
  1516                                               ppath_pnd(auxPartFieldI[j],ip); }
  1522           if( auxFarRotTotal >= 0 )
  1523             { 
for( 
Index iv=0; iv<nf; iv++ ) {
  1524                 iy_aux[auxFarRotTotal](iv,0,0,0) += 
RAD2DEG * ppath.
lstep[ip] *
  1525                                 0.25 * ( abs_per_species(ife,iv,1,2,ip  ) +
  1526                                          abs_per_species(ife,iv,1,2,ip+1)); } }
  1528           if( auxFarRotSpeed >= 0 )
  1529             { 
for( 
Index iv=0; iv<nf; iv++ ) {  
  1530                 iy_aux[auxFarRotSpeed](iv,0,0,ip) = 0.5 *
  1531                                             abs_per_species(ife,iv,1,2,ip); } }
  1538       if( j_analytical_do )
  1542                                diy_dpath[iq], atmosphere_dim, ppath, ppath_p );
  1556   const Index&         stokes_dim,
  1563   if( sensor_pol.
nelem() != nf )
  1564     throw runtime_error( 
"The length of *f_grid* and the number of elements "  1565                          "in *sensor_pol* must be equal." );
  1567   iy.
resize( nf, stokes_dim );
  1573   for( 
Index i=0; i<nf; i++ )
  1575       for( 
Index j=0; j<s2p[sensor_pol[i]-1].
nelem(); j++ )
  1577           iy(i,j) = s2p[sensor_pol[i]-1][j];
  1587   const Index&         stokes_dim,
  1594   if( sensor_pol.
nelem() != 1 )
  1595     throw runtime_error( 
"The number of elements in *sensor_pol* must be 1." );
  1597   iy.
resize( nf, stokes_dim );
  1603   for( 
Index j=0; j<s2p[sensor_pol[0]-1].
nelem(); j++ )
  1605       iy(0,j) = s2p[sensor_pol[0]-1][j];
  1606       for( 
Index i=1; i<nf; i++ )
 INDEX Index
The type to use for all integer numbers and indices. 
void ppath_agendaExecute(Workspace &ws, Ppath &ppath, const Numeric ppath_lraytrace, const Vector &rte_pos, const Vector &rte_los, const Vector &rte_pos2, const Index cloudbox_on, const Index ppath_inside_cloudbox_do, const Tensor3 &t_field, const Tensor3 &z_field, const Tensor4 &vmr_field, const Vector &f_grid, const Agenda &input_agenda)
Index find_first(const Array< base > &x, const base &w)
Find first occurance. 
void distance2D(Numeric &l, const Numeric &r1, const Numeric &lat1, const Numeric &r2, const Numeric &lat2)
distance2D 
void get_ppath_f(Matrix &ppath_f, const Ppath &ppath, ConstVectorView f_grid, const Index &atmosphere_dim, const Numeric &rte_alonglos_v, ConstMatrixView ppath_wind)
get_ppath_f 
A class implementing complex numbers for ARTS. 
Index nelem() const
Number of elements. 
Declarations having to do with the four output streams. 
Declarations required for the calculation of jacobians. 
Linear algebra functions. 
void defocusing_general(Workspace &ws, Numeric &dlf, const Agenda &ppath_step_agenda, const Index &atmosphere_dim, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View t_field, ConstTensor3View z_field, ConstTensor4View vmr_field, ConstVectorView f_grid, ConstVectorView refellipsoid, ConstMatrixView z_surface, const Ppath &ppath, const Numeric &ppath_lraytrace, const Numeric &dza, const Verbosity &verbosity)
defocusing_general 
void get_ppath_abs(Workspace &ws, Tensor4 &ppath_abs, Tensor5 &abs_per_species, const Agenda &propmat_clearsky_agenda, const Ppath &ppath, ConstVectorView ppath_p, ConstVectorView ppath_t, ConstMatrixView ppath_vmr, ConstMatrixView ppath_f, ConstMatrixView ppath_mag, ConstVectorView f_grid, const Index &stokes_dim, const ArrayOfIndex &ispecies)
get_ppath_abs 
void iy_transmitterSinglePol(Matrix &iy, const Index &stokes_dim, const Vector &f_grid, const ArrayOfIndex &sensor_pol, const Verbosity &)
WORKSPACE METHOD: iy_transmitterSinglePol. 
void bending_angle1d(Numeric &alpha, const Ppath &ppath)
bending_angle1d 
#define FOR_ANALYTICAL_JACOBIANS_DO(what_to_do)
Index nelem() const
Returns the number of elements. 
Array< Index > ArrayOfIndex
An array of Index. 
Index ppath_what_background(const Ppath &ppath)
ppath_what_background 
void get_ppath_atmvars(Vector &ppath_p, Vector &ppath_t, Matrix &ppath_vmr, Matrix &ppath_wind, Matrix &ppath_mag, const Ppath &ppath, const Index &atmosphere_dim, ConstVectorView p_grid, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstTensor3View wind_u_field, ConstTensor3View wind_v_field, ConstTensor3View wind_w_field, ConstTensor3View mag_u_field, ConstTensor3View mag_v_field, ConstTensor3View mag_w_field)
get_ppath_atmvars 
void mult(VectorView y, const ConstMatrixView &M, const ConstVectorView &x)
Matrix Vector multiplication. 
Sensor modelling functions. 
Index ncols() const
Returns the number of columns. 
void get_pointers_for_analytical_jacobians(ArrayOfIndex &abs_species_i, ArrayOfIndex &is_t, ArrayOfIndex &wind_i, const ArrayOfRetrievalQuantity &jacobian_quantities, const ArrayOfArrayOfSpeciesTag &abs_species)
Help function for analytical jacobian calculations. 
The global header file for ARTS. 
void iy_transmitterMultiplePol(Matrix &iy, const Index &stokes_dim, const Vector &f_grid, const ArrayOfIndex &sensor_pol, const Verbosity &)
WORKSPACE METHOD: iy_transmitterMultiplePol. 
void vmrunitscf(Numeric &x, const String &unit, const Numeric &vmr, const Numeric &p, const Numeric &t)
vmrunitscf 
Index ncols() const
Returns the number of columns. 
bool is_diagonal(ConstMatrixView A)
Checks if a square matrix is diagonal. 
NUMERIC Numeric
The type to use for all floating point numbers. 
void distance3D(Numeric &l, const Numeric &r1, const Numeric &lat1, const Numeric &lon1, const Numeric &r2, const Numeric &lat2, const Numeric &lon2)
distance3D 
Header file for logic.cc. 
This can be used to make arrays out of anything. 
const Numeric SPEED_OF_LIGHT
void iyTransmissionStandard(Workspace &ws, Matrix &iy, ArrayOfTensor4 &iy_aux, Ppath &ppath, ArrayOfTensor3 &diy_dx, const Index &stokes_dim, const Vector &f_grid, const Index &atmosphere_dim, const Vector &p_grid, const Tensor3 &z_field, const Tensor3 &t_field, const Tensor4 &vmr_field, const ArrayOfArrayOfSpeciesTag &abs_species, const Tensor3 &wind_u_field, const Tensor3 &wind_v_field, const Tensor3 &wind_w_field, const Tensor3 &mag_u_field, const Tensor3 &mag_v_field, const Tensor3 &mag_w_field, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Tensor4 &pnd_field, const Index &use_mean_scat_data, const ArrayOfSingleScatteringData &scat_data_array, const Matrix &particle_masses, const ArrayOfString &iy_aux_vars, const Index &jacobian_do, const ArrayOfRetrievalQuantity &jacobian_quantities, const ArrayOfArrayOfIndex &jacobian_indices, const Agenda &ppath_agenda, const Agenda &propmat_clearsky_agenda, const Agenda &iy_transmitter_agenda, const Index &iy_agenda_call1, const Tensor3 &iy_transmission, const Vector &rte_pos, const Vector &rte_los, const Vector &rte_pos2, const Numeric &rte_alonglos_v, const Numeric &ppath_lraytrace, const Verbosity &verbosity)
WORKSPACE METHOD: iyTransmissionStandard. 
void diy_from_path_to_rgrids(Tensor3View diy_dx, const RetrievalQuantity &jacobian_quantity, ConstTensor3View diy_dpath, const Index &atmosphere_dim, const Ppath &ppath, ConstVectorView ppath_p)
Index nbooks() const
Returns the number of books. 
void get_ppath_ext(ArrayOfIndex &clear2cloudbox, Tensor3 &pnd_abs_vec, Tensor4 &pnd_ext_mat, Array< ArrayOfSingleScatteringData > &scat_data, Matrix &ppath_pnd, const Ppath &ppath, ConstVectorView ppath_t, const Index &stokes_dim, ConstMatrixView ppath_f, const Index &atmosphere_dim, const ArrayOfIndex &cloudbox_limits, const Tensor4 &pnd_field, const Index &use_mean_scat_data, const ArrayOfSingleScatteringData &scat_data_array, const Verbosity &verbosity)
get_ppath_ext 
void iyRadioLink(Workspace &ws, Matrix &iy, ArrayOfTensor4 &iy_aux, Ppath &ppath, ArrayOfTensor3 &diy_dx, const Index &stokes_dim, const Vector &f_grid, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Tensor3 &z_field, const Tensor3 &t_field, const Tensor4 &vmr_field, const ArrayOfArrayOfSpeciesTag &abs_species, const Tensor3 &wind_u_field, const Tensor3 &wind_v_field, const Tensor3 &wind_w_field, const Tensor3 &mag_u_field, const Tensor3 &mag_v_field, const Tensor3 &mag_w_field, const Vector &refellipsoid, const Matrix &z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const Tensor4 &pnd_field, const Index &use_mean_scat_data, const ArrayOfSingleScatteringData &scat_data_array, const Matrix &particle_masses, const ArrayOfString &iy_aux_vars, const Index &jacobian_do, const Agenda &ppath_agenda, const Agenda &ppath_step_agenda, const Agenda &propmat_clearsky_agenda, const Agenda &iy_transmitter_agenda, const Index &iy_agenda_call1, const Tensor3 &iy_transmission, const Vector &rte_pos, const Vector &rte_los, const Vector &rte_pos2, const Numeric &rte_alonglos_v, const Numeric &ppath_lraytrace, const Index &defocus_method, const Numeric &defocus_shift, const Verbosity &verbosity)
WORKSPACE METHOD: iyRadioLink. 
void get_ppath_trans2(Tensor4 &trans_partial, ArrayOfArrayOfIndex &extmat_case, Tensor4 &trans_cumulat, Vector &scalar_tau, const Ppath &ppath, ConstTensor4View &ppath_abs, ConstVectorView f_grid, const Index &stokes_dim, const ArrayOfIndex &clear2cloudbox, ConstTensor4View pnd_ext_mat)
get_ppath_trans2 
void id_mat(MatrixView I)
Identity Matrix. 
The structure to describe a propagation path and releated quantities. 
void get_ppath_trans(Tensor4 &trans_partial, ArrayOfArrayOfIndex &extmat_case, Tensor4 &trans_cumulat, Vector &scalar_tau, const Ppath &ppath, ConstTensor4View &ppath_abs, ConstVectorView f_grid, const Index &stokes_dim)
get_ppath_trans 
void iy_transmitter_agendaExecute(Workspace &ws, Matrix &iy, const Vector &f_grid, const Vector &rtp_pos, const Vector &rtp_los, const Agenda &input_agenda)
void stokes2pol(ArrayOfVector &s2p, const Numeric &nv)
stokes2pol 
Index nrows() const
Returns the number of rows. 
void defocusing_sat2sat(Workspace &ws, Numeric &dlf, const Agenda &ppath_step_agenda, const Index &atmosphere_dim, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View t_field, ConstTensor3View z_field, ConstTensor4View vmr_field, ConstVectorView f_grid, ConstVectorView refellipsoid, ConstMatrixView z_surface, const Ppath &ppath, const Numeric &ppath_lraytrace, const Numeric &dza, const Verbosity &verbosity)
defocusing_sat2sat 
void ext2trans(MatrixView trans_mat, Index &icase, ConstMatrixView ext_mat, const Numeric &lstep)
Declaration of functions in rte.cc. 
void resize(Index r, Index c)
Resize function. 
Numeric pos2refell_r(const Index &atmosphere_dim, ConstVectorView refellipsoid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstVectorView rte_pos)
pos2refell_r