################################################################################ # # # This is a (plug&play-type) include file. The USER is NOT supposed to MODIFY # # it, but choose another include file to suit his/her needs. # # # ################################################################################ # # # This INCLUDE file is for # # - considering refraction of "air" # # - 3D calculations # # - several viewing angles (incl. tangent altitudes) from constant observer # # position # # - for use with iyCalc (not yCalc) # # - for receiver-only setups (no receiver-transmitter paths!) # # # # It performs the following actions: # # - sets ppath_agenda: receiver-viewingangle determined path (no transmitter) # # - sets ppath_step_agenda: refracted ppath calculation # # - sets refr_index_air_agenda: refr_index_airMicrowavesGeneral for air # # - calculates viewing angles from given vector of tangent altitudes # # - with given tangent altitudes referring to the ones the receiver is # # pointing at. actual refracted rays will have their true tangent point at # # lower altitudes than set by the user # # - considering the (possibly) viewing direction dependent curvature of the # # planetary ellipsoid # # - creates a common vector from (given) viewing angle vector and the viewing # # angles associated with the tangent altitudes # # - sets sensor positions: constant receiver position, empty transmitter # # # # It requires the following input: # # viewang_zen Vector; the zenith viewing angles # # viewang_azi Vector; the corresponding azimuth viewing angles # # tanh Vector; the tangent altitudes # # tanh_azi Vector; the tanh corresponding azimuth viewing angles # # obsh Numeric; the receiver altitude # # obslat/lon Numeric; the receiver geographic position # # refellipsoid as the WSV # # atmosphere_dim as the WSV # # It also uses (OVERWRITES!) sensor_pos # # # # It provides following output: # # allzang_zen Vector; merged zenith viewing angles resulting from # # viewang_zen and calculated viewing angles resulting from # # tanh # # allzang_azi Vector; merged azimuth viewing angles resulting from # # viewang_azi and tanh_azi # # # # The file shall NOT be modified by the USER. # # # # This template creates (and makes internal use of) the following non-WSV: # # (These are created here, i.e., they can not be used by earlier parts of the # # script or created again (it also implies, this include can only be included # # once in an ARTS run!). They can be used in later parts of the script, # # though.) # # zang Vector # # tzang Vector # # szang Numeric # # azimuth Numeric # # ntanh Index # # forloop_agenda_tanh Agenda # # # ################################################################################ Arts2 { # receiver-viewingangle-path Copy( ppath_agenda, ppath_agenda__FollowSensorLosPath ) # refracted path Copy( ppath_step_agenda, ppath_step_agenda__RefractedPath ) # refraction from "air" # (using general planet applicable method refr_index_airMicrowavesGeneral) Copy( refr_index_air_agenda, refr_index_air_agenda__GasMicrowavesGeneral ) # DO NOT MODIFY # preprocessing of viewing geometry parameters VectorCreate( allang_zen ) VectorCreate( allang_azi ) # Copy( allang_zen, viewang_zen ) Copy( allang_azi, viewang_azi ) # ArrayOfIndexCreate( itanh ) Touch( itanh ) NumericCreate( azimuth ) VectorCreate( tzang ) VectorCreate( zang ) Touch( zang ) # StringSet( tmpformat, "ascii" ) #StringSet( tmpformat, "binary" ) StringSet( strtmp, "tmp1.xml" ) WriteXML( output_file_format=tmpformat, in=zang, filename=strtmp ) # AgendaCreate( forloop_agenda_tanh ) AgendaSet( forloop_agenda_tanh ) { ReadXML( out=zang, filename=strtmp ) Extract( azimuth, tanh_azi, forloop_index ) Append( itanh, forloop_index ) Select( tanh, tanh, itanh ) refellipsoidForAzimuth( refellipsoid, obslat, azimuth ) VectorZtanToZa1D( tzang, sensor_pos, refellipsoid, 1, tanh ) Append( zang, tzang ) WriteXML( output_file_format=tmpformat, in=zang, filename=strtmp ) } # MatrixSetConstant( sensor_pos, 1, 1, obsh ) IndexCreate( ntanh ) nelemGet( ntanh, tanh ) IndexStepDown( ntanh, ntanh ) Copy( forloop_agenda, forloop_agenda_tanh ) ForLoop( forloop_agenda, 0, ntanh, 1 ) # ReadXML( out=zang, filename=strtmp ) Append( allang_zen, zang ) Append( allang_azi, tanh_azi ) #WriteXML( in=allang_zen ) #Print( allang_zen ) # for use with yCalc (not updated for 3D) #Matrix1ColFromVector( sensor_los, allzang ) #nrowsGet( itmp, sensor_los ) #MatrixSetConstant( sensor_pos, itmp, 1, obsh ) # for use with looped iyCalc, i.e., we have to set rte_pos, not sensor_pos VectorSetConstant( rte_pos, 1, obsh ) VectorSetConstant( zang, 1, obslat ) Append( rte_pos, zang ) VectorSetConstant( zang, 1, obslon ) Append( rte_pos, zang ) VectorSet( rte_pos2, [] ) }