% QARTS_ADD_VENUS_PLANETTBOX Includes planet toolbox study data for Venus % % This function works as an interface to the data for the planet Venus % gathered during the ESA study, where ARTS was extended to cover other % planets. % % Q.ATMOSPHERE_DIM must be set and determines if a 1D or 3D atmosphere is % created (2D is not handled). % % The following fields are mandatory: % A.atmo % A.basespecies % A.h2ospecies % A.hdospecies % A.Necase % These variables and possible settings are described in the file % arts/controlfiles/planetary_toolbox/DemoVenusAtmo1D.arts. % % All "zeropadding" variables are hard-coded to 1. % % Wind fields are included by setting A.wind_u and A.wind_v to true, % respectively. Default is false. Vertical winds are not handled. % % The atmospheric grids can be cropped by the following (also mandatory) % fields: % A.pmin % A.latmin (not needed for 1D) % A.latmax (not needed for 1D) % A.lonmin (not needed for 1D) % A.lonmax (not needed for 1D) % Grid points outside these values are removed (pmax hard-coded to a very % high value). Longitude limits can be inside [-360,360]. % % FORMAT Q = qarts_add_venus_planettbox( A, Q, workfolder ) % % OUT Q Modified Q % IN A Atmosphere structure, see above. % Q Original Q % workfolder Path to workfolder (not used, but an input is demanded) % 2013-10-03 Created by Patrick Eriksson. function Q = qarts_add_venus_planettbox( A, Q, workfolder ) % rqre_datatype( A, { @isstruct } ); rqre_datatype( Q, { @isstruct, @ischar } ); rqre_datatype( workfolder, { @ischar,@isempty } ); arts_xmldata_path = atmlab( 'ARTS_XMLDATA_PATH' ); if isnan( arts_xmldata_path ) error('You need to set ARTS_XMLDATA_PATH to use this function.'); end % Create the variables used by getatmo_venus.arts % Q.WSMS_BEFORE_ATMSURF{end+1} = 'IndexCreate( atmo )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexCreate( basespecies )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexCreate( h2ospecies )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexCreate( hdospecies )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexCreate( Necase )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexCreate( NSwind )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexCreate( EWwind )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'NumericCreate( latmin )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'NumericCreate( latmax )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'NumericCreate( lonmin )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'NumericCreate( lonmax )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'IndexCreate( auxfield_zeropad )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'IndexCreate( vmr_zeropad )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'IndexCreate( interp_order )'; % Set the variables above % Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'IndexSet( atmo, %d )', A.atmo ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'IndexSet( auxfield_zeropad, %d )', 1 ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'IndexSet( vmr_zeropad, %d )', 1 ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'IndexSet( interp_order, %d )', ... A.interp_order ); % % Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( ... 'ArrayOfIndexSet( basespecies, [%s] )', vector2commalist( A.basespecies ) ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( ... 'ArrayOfIndexSet( h2ospecies, [%s] )', vector2commalist( A.h2ospecies ) ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( ... 'ArrayOfIndexSet( hdospecies, [%s] )', vector2commalist( A.hdospecies ) ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( ... 'ArrayOfIndexSet( Necase, [%s] )', vector2commalist( A.Necase ) ); Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/createvars.arts"'; Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/venus/atmo_venus.arts"'; Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/venus/getatmo_venus.arts"'; % Set pmin and pmax Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'NumericSet( pmin, %d )', A.pmin ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'NumericSet( pmax, %d )', 1e99 ); if Q.ATMOSPHERE_DIM == 1 Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/getgrids_1D.arts"'; Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/makeatmo1D.arts"'; elseif Q.ATMOSPHERE_DIM == 3 Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'NumericSet( latmin, %d )', ... A.latmin ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'NumericSet( latmax, %d )', ... A.latmax ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'NumericSet( lonmin, %d )', ... A.lonmin ); Q.WSMS_BEFORE_ATMSURF{end+1} = sprintf( 'NumericSet( lonmax, %d )', ... A.lonmax ); Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/getgrids_3D.arts"'; Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/makeatmo3D.arts"'; else error( 'Only 1D and 3D atmosphere can be generated.' ); end Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexSet( EWwind, [0] )'; Q.WSMS_BEFORE_ATMSURF{end+1} = 'ArrayOfIndexSet( NSwind, [0] )'; u_wind = safegetfield( A, 'wind_u', 0 ); v_wind = safegetfield( A, 'wind_v', 0 ); if u_wind | v_wind Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/venus/getwind_venus.arts"'; if u_wind Q.WSMS_BEFORE_ATMSURF{end+1} = 'Copy( rawfield, wind_u_raw )'; if Q.ATMOSPHERE_DIM == 1 Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/makefield1D.arts"'; else Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/makefield3D.arts"'; end Q.WSMS_BEFORE_ATMSURF{end+1} = 'Copy( wind_u_field, finalfield )'; end if v_wind Q.WSMS_BEFORE_ATMSURF{end+1} = 'Copy( rawfield, wind_v_raw )'; if Q.ATMOSPHERE_DIM == 1 Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/makefield1D.arts"'; else Q.WSMS_BEFORE_ATMSURF{end+1} = ... 'INCLUDE "planetary_toolbox/includes/common/makefield3D.arts"'; end Q.WSMS_BEFORE_ATMSURF{end+1} = 'Copy( wind_v_field, finalfield )'; end end