C L

L V

EarthCAREEarthCARE LevelLevel 22 DocumentationDocumentation

ACM-CAPACM-CAP (Version(Version 1.1)1.1) C L

L V

CloudCloud andand PrecipitationPrecipitation BestBest EstimateEstimate

SoftwareSoftware UserUser ManualManual (SUM)(SUM)

VARSYVARSY ProjectProject C L

L V

Code: L2b-ACM-CAP-SUM Issue: 03 Date: 2/02/2014 Reference: University of Reading

Name Function Signature C L

L V

Prepared by Robin Hogan Project Scientists

Reviewed by Pavlos Kollias Project Scientist

Approved by Pavlos Kollias Project Manager Signatures and approvals on original C L

L V C L

L V C L

L V

This page intentionally left blank C L

L V

Document Information

Contract Data

Contract Number: 4000104528/11/NL/CT

Contract Issuer: ESA-ESTEC C L

L V

Internal Distribution Name Unit Copies

Robin Hogan University of Reading 1 Internal Confidentiality Level Unclassified  Restricted  Confidential 

External Distribution C L

L V

Name Organisation Copies

Tobias Wehr ESA-ESTEC 1 Michael Eisinger ESA-ESTEC 1 Dulce Lajas ESA-ESTEC 1 Pavlos Kollias McGill University 1 Julien Delanoë LATMOS 1 Gerd-Jan van Zadelhof KNMI 1 C L

L V

David Donovan KNMI 1 Alessandro Battaglia University of Leicester 1

Archiving

Word Processor: MS Word 2003 File Name: VARSY-L2-ACM-CAP-SUM C L

L V C L

L V

Document Status Log

Issue Change description Date Approved

01 First version 4/07/2013 02 Second version: Software version 1.0 22/08/2013 C L

L V

03 Third version: Software version 1.1 2/02/2014 C L

L V

Table of Contents

1. PURPOSE AND SCOPE______9

2. APPLICABLE AND REFERENCE DOCUMENTS______10

2.1. Applicable Documents______10 C L

L V

2.2. Reference Documents______12

2.3. List of Abbreviations______13

3. INTRODUCTION______14

4. INSTALLATION______16

4.1. Hardware and operating system pre-requisites______16

4.2. Off-the-shelf software requirements______16 C L

L V

4.3. Compiling______17

5. TYPICAL USAGE______18

5.1. Calling convention______18

5.2. Error Messaging______18

6. REFERENCE______20

6.1. Command line arguments______20 C L

L V

6.2. Runtime directory structure______22

6.3. Input data files______24

6.4. Configuration files______24

6.4.1. CFG file format______24

6.4.2. The primary configuration file______27

6.4.3. Scattering configuration files______35 C L

L V

6.4.4. Scattering look-up table files______37

6.4.5. Scattering database index file______40

6.4.6. Infrared gaseous absorption look-up table files______42

6.5. Output data files______43 C L

L V

List of Tables C L

L V

Table 1: Applicable Documents...... 10

Table 2: Reference Documents...... 12

Table 3: List of abbreviations...... 13 C L

L V

List of Figures

No table of figures entries found. C L

L V

1. PURPOSE AND SCOPE

This software user manual (SUM) describes the software and interfaces of version 1.0 of the ACM- CAP algorithm developed during VARSY. Note that the interface control document (ICD) has been merged into it. C L

L V C L

L V

2. APPLICABLE AND REFERENCE DOCUMENTS

2.1. Applicable Documents

Table 1: Applicable Documents C L

L V

Reference Code Title Issue [SOW] EC-SW-ESA-SY-0310 Statement of Work: VARSY - 1-Dimensional 1.0 VARiational Retrieval of SYnergistic EarthCARE Products [CC] Appendix 2 to Draft Contract (attachment to SOW) 1.0 AO/1-6823/11/NL/CT

[AD 1] EC-SW-ESA-SY-0152 EarthCARE Level 2 Processor Development 1.0

General Requirements Baseline C L

L V

Reference Code Title Issue

[AD 2] EC.ICD.ASD.SY.00004 EarthCARE Product Definitions. Vol. 0:

Introduction

[AD 3] EC.ICD.ASD.SY.00005 EarthCARE Product Definitions. Vol. 1: 1.0

Common Product Definitions

[AD 4] EC.ICD.ASD.ATL.00021 EarthCARE Product Definitions. Vol. 2b: 1.0 C L

L V

Reference Code Title Issue

ATLID level 1 C L

L V

Reference Code Title Issue

[AD 5] EC.ICD.ASD.BBR.00022 EarthCARE Product Definitions. Vol. 3b: 1.0

BBR level 1

[AD 6] EC.ICD.ASD.MSI.00023 EarthCARE Product Definitions. Vol. 4b: 1.0

MSI level 1

[AD 7] ECSIM-DMS-TEC-ICD01-R ECSIM Simulator Interface Control Document C L

L V

Reference Code Title Issue

[AD 8] PE-TN-ESA-GS-0001 Ground Segment: File Format Standard 1.0

[AD 9] EC-TN-ESA-GS-0218 Tailoring of the Earth Explorer File Format 2.0 Standard for the EarthCARE Ground Segment C L

L V

2.2. Reference Documents

Table 2: Reference Documents C L

L V

Reference Code Title Issue

[RD1] ECSIM-DMS-TEC-SUM-01- ECSIM System User Manual R

[RD2] ECSIM-KNMI-MAD01-R ECSIM Model and Algorithms Document

[RD3] EE-MA-DMS-GS-0001 Earth Explorer Mission CFI Software:

General Software User Manual C L

L V

Reference Code Title Issue

[RD4] EOP-SM/1567/TW EarthCARE Mission Requirements Document C L

L V

Reference Code Title Issue [ATLAS- EC-FR-KNMI-ATL-027 ATLAS Final report 1.0 FR]

[ATLAS- EC-TN-KNMI-ATL-ACM- 1.2 L2b Classification ATBD ACM-TC] TC-024 13/03/08 C L

L V

Reference Code Title Issue

[ATLAS- EC-TN-KNMI-ATL-ATBD- L2a ATLID Extinction, Backscatter and 1.1 EBD] A-EBD-021 Depolarization algorithm ATBD 27/04/09

[ATLAS- EC-TN-KNMI-ATL-ATBD- L2a ATLID Feature mask ATBD 2.2 FM] A-FM-010

[RATEC- RATEC-FR-READING-1 RATEC Final Report 1.0, April C L

L V

Reference Code Title Issue

FR] 2011 C L

L V

2.3. List of Abbreviations

Table 3: List of abbreviations

Abbreviation Name C L

L V

1D-VAR RS 1-dimensional variational retrieval scheme

ATLID Atmospheric Lidar (The EarthCARE lidar)

CASPER Cloud and Aerosol Synergetic Products from EarthCARE retrievals

CPR Cloud Precipitation Radar (The EarthCARE radar)

EarthCARE The Earth Clouds, Aerosols and Radiation Explorer C L

L V

ECSIM EarthCARE Simulator

HSRL High-Spectral Resolution Lidar

MSI Multi-spectral Imager (The EarthCARE imager ) C L

L V

3. INTRODUCTION

The code and is distributed as a tar.gz file with name of the form optimal_synergy- X.Y.Z.tar.gz, where X.Y.Z is the version number. This unpacks into a directory optimal_synergy-X.Y.Z containing a README file, a Makefile and the following directories:

 bin/: When the software has been compiled, this will contain the executables, not just the retrieval algorithm (unified_retrieval), but also programs to simulate observations from C L

L V

a retrieval (simulate_observations), compute scattering look-up tables (scatter) and produce PNG images from the retrievals (chilncplot).

 conf/: Contains primary configuration files as described in section 6.4.2.

 test/: Contains testing scripts and test data, as described in the Acceptance Test Plan.

 aux/: Contains auxiliary configuration files that are read at runtime, as outlined in section 6.4.3. C L

L V

 src/: Contains the source code, split into the following subdirectories. All code is in C++ except where indicated.

 src/adept/: The Adept automatic differentiation library.

 src/apps/: Top-level code for the applications unified_retrieval, simulate_observations and scatter (the latter written in C).

 src/include/: Header files. C L

L V

 src/lbfgs/: A library implementing the Limited-Memory BFGS quasi-Newton minimization algorithm.

 src/lib/: Where compiled static libraries are placed.

 src/lidort-3.5/: The LIDORT solar radiance model (Fortran).

 src/marvel/: The Matrix and Vector Expression library. C L

L V

 src/multiscatter/: Multiple scattering library (written in C). Note that this version of the library is not used in the retrieval algorithm (rather “multiscatter_adept” is used), but it is used to create an executable “multiscatter” in the bin directory, which runs the multiple scattering code offline. This can be useful for debugging purposes, since if non-finite values are produced by the multiple-scattering forward model within the algorithm, it can produce a file containing the ascii inputs to the offline multiscatter executable, in order that the problem with the inputs can be diagnosed. C L

L V

 src/multiscatter_adept/: Multiple scattering library adapted to be automatically differentiated by the Adept library.

 src/optsyn/: Core “optimal synergy” library implementing the main functionality of the retrieval algorithm.

 src/rplot/: A library for plotting 2D fields from NetCDF files C L

L V

 src/rt_adept/: Infrared radiative transfer library adapted to be automatically differentiated by the Adept library.

 src/scatter/: Various scattering libraries implementing Mie scattering, T-matrix, gaseous absorption etc. (mostly C and Fortran).

 src/tools/: Tools for manipulating NetCDF and CFG files; the latter are described in section 6.4.1. C L

L V

4. INSTALLATION

4.1. Hardware and operating system pre-requisites

The minimum hardware that could reasonably run this algorithm are: C L

L V

o CPU: Intel-compatible CPU at least 1 GHz. The code is currently not parallelized so does not yet take advantage of multi-core CPUs or multiple processors. Note that for exact numerical agreement with the reference output dataset described in the Algorithm Test Plan, it may be necessary for the processor to be a genuine Intel, rather than simply Intel-compatible (e.g. AMD). However, identical tests performed on Intel and AMD platforms ought at least to lead to retrievals that agree within their reported errors. C L

L V

o Disk space: The space required to hold the full compiled code is 120 MB. This excludes test data.

o Memory: A machine with 4 GB at least is required.

The required software is:

o Operating system: Linux; probably any distribution but a kernel in the 2.6.x series or higher is recommended. C L

L V

o Compiler: the GNU Compiler Collection (GCC) version 4.3.2 or above.

4.2. Off-the-shelf software requirements

Before compiling the code you will need to ensure that the following free software is installed on your system: C L

L V

1. The NetCDF development library version 3.6.x. On RPM-based systems, this package is usually called netcdf-devel, or you can obtain the library from www.unidata.ucar.edu/downloads/ and compile it yourself. The important files it provides are a header file /usr/include/netcdf.h and a static library /usr/lib/libnetcdf.a.

2. The PNG development library. The version is unlikely to be critical but testing has been carried out using version 1.2.31 and any version 1.2.x and higher is probably fine. On RPM- C L

L V

based systems, this package is usually called libpng-devel. The important files it provides are a header file /usr/include/png.h and a static library /usr/lib/libpng.a.

3. The GNU Scientific Library. At least version 1.9 is required, but version 1.11 or higher is recommended since that is the version on which the development of the software has been done. On RPM-based systems the two packages required are usually called gsl and gsl-devel. C L

L V

4.3. Compiling

After installing the prerequisites described in section 4.1, compiling the software on a Linux platform is straightforward:

1. Unzip the package: tar xvfz optimal_synergy-X.Y.Z.tar.gz C L

L V

2. Go into the directory: cd optimal_synergy-X.Y.Z

3. Compile the code and create the scattering look-up tables (note that this can take up to 5 minutes depending on your platform): make

If successful, this will create executables unified_retrieval, simulate_observations, chilncplot and scatter in the bin/ directory. It will also create scattering look-up tables as C L

L V

NetCDF files in aux/scattering/. To only compile the code, type instead “make software”, or change directory to the src directory (cd src) and then type “make”.

To remove all compiled objects, binaries and static libraries, and to delete scattering look-up tables, type “make clean” from the top-level directory. C L

L V C L

L V

5. TYPICAL USAGE

5.1. Calling convention

The executable is called unified_retrieval and, assuming it is in your executable path (i.e. in a directory in the PATH environment variable), is invoked as follows C L

L V

unified_retrieval [key1=value1 [key2=value2 ...]] EarthCARE.cfg The last argument provides the name of the primary configuration file, in this case EarthCARE.cfg. As a more specific example, the first test case in the Algorithm Test Plan invokes the retrieval algorithm with the following command-line: ../bin/unified_retrieval append_path=.. log_level=progress \ input=dardar-ceccaldi-v5_2007002162454_03631-rays-700-2099.nc \ output=acm-cap-atrain_2007002162454_03631.nc conf/atrain.cfg \ | tee -i output/acm-cap-atrain_2007002162454_03631.log C L

L V

Specifically, the arguments provided have the effect of (1) specifying that top-level directory list should be appended by “..”, corresponding to the directory one level above the current one; (2) specifying the logging level (see section 5.2), (3) specifying the input file name (in the input/ directory); (4) specifying the output file name (in the output/ directory), and (5) specifying the primary configuration file name. In this example, the standard output from the program is piped (using the “|” character) into the tee command, which saves it to a log file as well as printing it to the terminal. Naturally, command lines like this are easiest embedded in shell scripts or Makefiles. C L

L V

Further details of command-line usage are given in section 6.1. C L

L V

5.2. Error Messaging

The logging level is configurable by invoking the unified_retrieval program with a log_level= command-line argument, where is one of the following (case sensitive):

 error: only display error messages associated with fatal errors that require the program to quite prematurely; C L

L V

 warning: also display warnings;

 info: also display information specifying what the program is doing, e.g. what prior assumptions are being made concerning a particular retrieved atmospheric constituent, or what the cost function is at the final iteration of the retrieval of each ray of data.

 progress: also display the number of the current iteration; C L

L V

 debug: also display any temporary output information inserted in the code to assist with debugging.

All messages are sent to “standard output”. Note that “standard error” is not used, because then would be more difficult to send the output to a single log file. In future the formatting of the messages will be changed to be ECSIM compatible. C L

L V

If the program reaches a fatal error, then it will quit with a message informing the user of the cause of the error, the source code file and line number at which the error occurred. Often to properly track an error that occurs deep in a tree of nested functions requires the line numbers of the source code at which each function in the tree was called. To get this information, a script is provided in the bin/ directory called debug, which may be placed before “unified_retrieval” on the command line in section Error: Reference source not found. This script runs the code in the gdb debugger, and issues a C L

L V

“backtrace” command if the program fails, which can then use the debugging symbols in the executable (provided it was compiled with the –g option) to list the line numbers of each function call.

If the program fails with an error it will have a return code of 1. If it exits normally, the return code will be 0. In future, more error codes will be added to assist in integration into ECSIM. C L

L V C L

L V

6. REFERENCE

In this section, the formats of the various input, output and auxiliary files are described. All files are either in NetCDF (Network Common Data Format) version 3, a widely used self-describing format that is fully described at www.unidata.ucar.edu/software/netcdf/, or “CFG” format, an ASCII format designed for configuration files. Note that version 4 NetCDF (compatible with HDF-5) C L

L V

will be tested in the future. The CFG format is described in section 6.4.1, followed by descriptions of each of the specific data and configuration file types used by the algorithm.

6.1. Command line arguments

The executable is called unified_retrieval and, assuming it is in your executable path (i.e. in a directory in the PATH environment variable), is invoked as follows C L

L V

unified_retrieval [key1=value1 [key2=value2 ...]] EarthCARE.cfg

The last argument provides the name of the primary configuration file, in this case EarthCARE.cfg. Currently this must be in a simple ASCII format called “CFG” designed for generic configuration files, and this format is identified with the suffix “cfg”. In future, the capability to use XML format for the configuration file will be added, as well as utilities for converting between CFG and XML format. CFG format is described in section 6.4.1, and essentially consists of many key-value pairs, one per line. The value associated with a particular key can be overridden on the command line using optional arguments C L

L V

as shown, thereby giving the user the freedom to run the retrieval multiple times from within a script keeping the configuration file constant, but varying some aspect of the algorithm behaviour each time, most obviously the input and output file names. The keys that would typically be altered from the command line are as follows:

 input: The name of the input file. Currently it is assumed that all the observations are held in the same file but in future the capability will be added to access observations from different files, provided all data is on the same grid. If the name provided starts with “/” then it will be C L

L V

interpreted as an absolute file path, otherwise the input/ subdirectories of each member of the top-level directory list (described in section ??) will be searched in turn.

 environment_input: The name of the file containing environmental data such as thermodynamic profiles. If this is omitted from both the command line and the configuration file then it will be assumed that such data are contained in the file indicated by input. The directories searched are as for input. C L

L V

 output: The name of the output file to create where the retrieved variables will be stored. If the name provided starts with “/” then it will be interpreted as an absolute file path, otherwise the file will be written to the output/ subdirectory of the first directory in the top-level directory list (described in section ??).

 prepend_path: Prepend the list of top-level directories to search (described in section 6.2) with the colon-separated directories provided. C L

L V

 append_path: Append the list of top-level directories to search (described in section 6.2) with the colon-separated directories provided.

 start_ray: Specify the ray of the input file at which to start processing (0-based). The default is to start at ray 0.

 end_ray: Specify the ray of the input file after which the program will stop (0-based). The default is to process to the end of the input file.

 log_level: Specify the logging level, as described in section 5.2. C L

L V

 debug: By default, if an error occurs in the algorithm then the program will trap the error and move on to the next ray. If this key is set to 1 (i.e. by putting “debug=1” on the command line) then if an error occurs, the program will stop, and the location of the error can be found by running the program in a debugger (see section 5.2 for a simple way to do this). Note that debug=1 is exactly equivalent to log_level=debug.

 trap_floating_point_exceptions: If this key is set to 1 then any arithmetic that results in not-a-number or infinity (e.g. 0.0/0.0 or 1.0/0.0, respectively) will cause the program C L

L V

to stop and the location of the offending arithmetic can be found by running the program in a debugger.

6.2. Runtime directory structure

Before describing the nature of the input, output and configuration files, it is necessary to describe the directory structure containing them and how the algorithm goes about searching directories for specific C L

L V

configuration files. Each configuration file can be thought to have an absolute file location with three parts of the form: /TOPLEVELDIRECTORY/SUBDIRECTORY/FILENAME.

Upon initialization, the program constructs a list of top-level directories that will be searched whenever a particular data file is requested; these will be used for TOPLEVELDIRECTORY indicated above. To construct this list, the program first looks for the environment variable OPTSYN_PATH, which will be interpreted as a colon-separated list of directories. This variable might contain, for example C L

L V

“/home/robin/optsyn:.”, which indicates that files should first be sought in the directory /home/robin/optsyn, and then in the current directory (denoted “.” in Unix-like operating systems). If this environment variable is not present then the list will contain only the current directory (“.”). The program then checks the configuration data to see if the prepend_path or append_path keys have been defined (see section Error: Reference source not found), and if so, their values will be interpreted as a directory (or list of directories) to prepend or append to the list, respectively. C L

L V

The SUBDIRECTORY can then be one of the following, according to what data is requested (note that these directory names are hard-wired into the parts of the algorithm code where access to particular types of data are needed):

 input/: This directory is where input files containing observations or thermodynamic data will be searched for (NetCDF).

 output/: This directory is where output files are written to (NetCDF). C L

L V

 aux/: This directory contains configuration information and is split into the following subdirectories.

 aux/scattering/: This directory contains particle scattering property files, typically one file per particle type and wavelength (NetCDF), as well as a single database index file (CFG). These files are described in sections 6.4.4 and 6.4.5.

 aux/scattering_input/: This directory contains configuration files in CFG format used by the scatter program to create the particle scattering property files in the C L

L V

aux/scattering/ directory. Note that the retrieval program only looks for files in the aux/scattering/ directory. These files are described in section 6.4.3.

 aux/rt/: This directory contains gaseous absorption data for the infrared radiance forward model, in the form of one file per satellite channel. These files are described in section 6.4.6.

Finally, the name of the file, (indicated “FILENAME” above) is usually taken from the primary configuration file, described in section 6.4.2. C L

L V

As an example, suppose that the list of top-level directories is “/home/robin/optsyn:.”, and the algorithm configuration file indicates that gaseous absorption data for MSI channel 7 is in a file called “msi_7.cfg”. The part of the algorithm code dealing with forward modelling the MSI radiances (in InfraredRadiometer.cpp) will know to look in the subdirectory “aux/rt” for this file. Therefore in this case the program will first look for /home/robin/optsyn/aux/rt/msi_7.cfg, and if that does not exist it will try C L

L V

./aux/rt/msi_7.cfg. Note that if the file requested starts with the “/” character, it will be interpreted as a complete file path, and no attempt will be made to prefix this by a top-level directory from the list. C L

L V

6.3. Input data files

In addition to the various configuration files discussed up to this point, the final operational algorithm will read in the following data files corresponding to the granule (fraction of a particular orbit) being processed:

 An AMB-MO product (ATLID-MSI-BBR Merged Observations)  An ACM-TC product (ATLID-CPR-MSI Target Classification) C L

L V

 A C-FMR product (CPR Feature mask and radar reflectivity factor) which will need to include either the surface return or the computed path-integrated attenuation  A C-CD product (CPR Corrected Doppler)  An X-MET product (meteorological and surface data)

Descriptions of most of these are in various non-finalized Product Definition Documents, and at this stage it does not seem useful to attempt to summarise them. Moreover, since EarthCARE test files are not yet available, the algorithm as of now works on test files generated from the A-Train data (or C L

L V

simulated EarthCARE data generated from A-Train data), consisting of all the information from observations and meteorological analyses within a single file. The capability exists for the meteorological analysis data to be provided in a separate file, but currently all the satellite observations must be stored in the same file. C L

L V

6.4. Configuration files

6.4.1. CFG file format

The main configuration file, plus a number of subsidiary configuration files such as those providing particle scattering properties and gaseous absorption look-up tables, are provided in the ASCII “CFG” format (devised by Robin Hogan for an earlier project). Compared to XML, this format is easier to read and edit by hand, and is also more concise. At the same time it is sufficiently versatile for most C L

L V

configuration needs. This format consists of a list of key-value pairs that can be provided in a number of ways, as illustrated by the following valid CFG file.

# This is a sample CFG file bool1 bool2 0 bool3 true # This is an inline comment a_string This is "a string" another_string "A quoted string with an embedded # character that spans two lines" C L

L V

a 1 b 1 2 3 c 1.0 d 1.0 2.0 3.0e-6 e[2] 10.4 -0.43 f[2][3] { 1.0 2.0 3.0e-6 4.0 5.0 6.0e6 } (height_km temperature_K description) { 0 273.0 ground_level 1 270.3 cumulus 2 269.2 stratocumulus 3 265.9 "boundary layer top" C L

L V

}

Keys are case-sensitive and can be composed of any combination of letters, numbers and underscores. If the same key is provided more than once, the last one will be used. Any whitespace (spaces and tabs) before the key and between the key and the value is ignored. Comment lines are prefixed by #, and can be provided on a line of their own or after a key-value pair. The # character will not be interpreted as a C L

L V

comment character if embedded in a double-quoted string. Double quotes enable strings to span more than one line. Curly brackets can be used to allow vectors or matrices to span multiple lines.

A program uses the C functions provided in readconfig.h and readconfig.c to read the file into memory, where it is stored as a list of keys and the corresponding values; both are stored internally in the form of ASCII strings. The program can then request the value corresponding to a particular key with the appropriate function call. As part of this request, the program specifies the format it is C L

L V

expecting the data to be in, at which point conversion of the ASCII string to a numerical type may be performed. The possible formats are:

o Boolean. In this case, false is returned if the key is not present or if the value is 0 or "false" (e.g. bool2 in the example above). True is returned if the value is anything else, or if key is present but the value is not (bool1 in the example above).

o Integer. The value is interpreted as an integer. If several integers are present on the line then the first one is returned. C L

L V

o Integer vector. The value is interpreted as a vector of integers, so in the example above, the value corresponding to b would be a vector of three integers. The calling function does not need to know the length of the vector in advance. o Floating-point number. The value is interpreted as a floating point number, which can be either in normal fixed point notation (e.g. 1.0) or exponential notation (e.g. 1.0e-6). o Floating-point vector. The value is interpreted as a vector of floating point numbers (d in the example above). Optionally, the length of the vector can be specified in square brackets C L

L V

immediately following the key name (e in the example above). Often it is convenient to provide several vectors in a table, as in the case of height_km, temperature_K and description in the example above, where the three keys are enclosed in parentheses. The subsequent text is enclosed in curly brackets and every third element is interpreted as part of the respective variable. Thus, we could read temperature_K as a floating-point vector with four elements. C L

L V

o Floating-point matrix. The value is interpreted as a matrix of floating point numbers (e in the example above), with dimensions given in square brackets immediately following the key name. The order of dimensions is as in the C convention, with the second index indicating the dimension that varies fastest. o String element. The value is interpreted as a list of strings, and the user specifies in the call which element is wanted. Double quotes are used to encapsulate a string element containing whitespace. In the example above, the second element of a_string is “is” and the third C L

L V

element is “a string”, while the fourth element of description is “boundary layer top”.

An important and useful feature of the CFG format is the ability to put entries in sections, as in the following example observations CPR ATLID \begin CPR type radar C L

L V

wavelength 0.0032 \end CPR \begin ATLID type lidar channels Mie Rayleigh \begin Mie variable_name ATLID_Mie_Backscatter \end Mie \end ATLID ATLID.wavelength 532e-9 ATLID.Rayleigh.variable_name ATLID_Rayleigh_Backscatter C L

L V

The \begin and \end commands open and close a section. A section name can be any combination of numbers, letters and underscores. Internally, the section names are simply added to the beginning of the key with a “.” separator, so keys within a section may be specified within a \begin-\end block, or by providing the full name including the separator. This is illustrated by the two ways that wavelength is defined in the example above. Sections may be nested within other sections. C L

L V

The example above shows one way that sections can be parsed: the calling program might first look at the strings corresponding to the observations key. It interprets each as a section describing a particular observation, and then looks for keys such as type and wavelength in those sections. C L

L V

6.4.2. The primary configuration file

The behaviour of the algorithm is governed by the primary configuration file, which is currently written in CFG format (described in section 6.4.1). The detailed options available for this file are described in the ATBD, so rather than repeat that (which also requires a detailed description of the workings of the algorithm), here we simply provide something close to the configuration file that would be used for EarthCARE. C L

L V

# *** EarthCARE configuration file ***

# MINIMIZER SETTINGS

# Use Limited-memory BFGS method minimizer LBFGS max_iterations 200 wolfe_coefficients 1.0e-4 0.9 # Line-search settings initial_step_size 0.1

# Alternative Levenberg-Marquardt minimizer # (not fully implemented for all constraints) C L

L V

#minimizer levenberg_marquardt #max_iterations 100 #max_step_size 10

# Convergence occurs when the norm of the vector containing the # gradient of the cost function is less than this value converged_gradient_norm 1.0

# DECLARE OBSERVATIONS TO USE AND CONSTITUENTS TO RETRIEVE

# Define the observations and constituents to use, referring to C L

L V

# sections lower in the file observations CPR ATLID MSI constituents LiquidCloud IceCloud Rain MeltingLayer Aerosol

# ENVIRONMENTAL VARIABLES

# The name of required variables in the input file; although # these are defined in the PDD, it is convenient to be able to # easily override them. The algorithm expects all variables to # be in SI units (except dBZ and degrees), so variables can be # scaled when read in. In this example, height is in the file C L

L V

# in km, so is scaled by 1000 to convert it into metres. classification_name Classification time_name Time height_name Height height_scaling 1000.0 altitude_name Spacecraft_Altitude altitude_scaling 1000.0 temperature_name Temperature pressure_name Pressure specific_humidity_name Specific_humidity ozone_mmr_name Ozone surface_temperature_name Skin_temperature C L

L V

# DEFINE RADAR OBSERVATIONS \begin CPR type radar wavelength 3.12e-3 # wavelength in m beam_divergence 0.8e-3 # beam full-width in radians # |Kref|^2 defining calibration convention: reference_dielectric_factor 0.75 coherent_backscatter_enhancement 1.0

# Assimilate radar reflectivity and Doppler velocity C L

L V

variables CPR.Z CPR.v \begin Z type reflectivity_factor name CPR_Z error_name CPR_Z_error detection_name CPR_Z_mask detection_values 1 # Use when CPR_Z_mask=1 \end Z \begin v type doppler_velocity name CPR_v error_name CPR_v_error C L

L V

detection_name CPR_v_mask detection_values 1 \end v \begin PIA type path_integrated_attenuation name CPR_PIA error_name CPR_PIA_error \end PIA \end CPR

# DEFINE LIDAR OBSERVATIONS TO ASSIMILATE C L

L V

\begin ATLID type lidar wavelength 0.355e-6 beam_divergence 0.25e-4 receiver_fov 0.4e-4 status use

# Assimilate the Mie and Rayleigh channels variables ATLID.mie ATLID.rayleigh \begin mie type mie_backscatter name ATLID_bscat_mie C L

L V

error_name ATLID_bscat_mie_error detection_name ATLID_bscat_mie_mask detection_values 1 molecular_values 2 \end mie \begin rayleigh type rayleigh_backscatter name ATLID_bscat_rayleigh error_name ATLID_bscat_rayleigh_error detection_name ATLID_bscat_rayleigh_mask detection_values 1 molecular_values 2 C L

L V

\end rayleigh \end ATLID

# DEFINE MSI OBSERVATIONS TO ASSIMILATE (IR ONLY AT THE MOMENT) \begin MSI type infrared_radiometer variable_type radiance # As opposed to brightness temperature name MSI_radiance # Variable name containing radiances error_name MSI_radiance_error instrument_zenith_angle_name MSI_zenith_angle instrument_azimuth_angle_name MODIS_azimuth_angle C L

L V

solar_zenith_angle_name solar_zenith_angle solar_azimuth_angle_name solar_azimuth_angle channels 5 6 7 # Use these MSI channels indices 0 1 2 # Index in MSI_radiance gas_files msi_5.cfg msi_6.cfg msi_7.cfg wavelengths 8.85e-6 10.85e-6 11.85e-6

# We actually assimilate one radiance directly and # one radiance difference variables MODIS.main MODIS.radiance_difference \begin main type channel C L

L V

channel 5 forward_model_error 0.02 forward_model_error_logarithmic 1 \end main \begin radiance_difference type difference channels 5 7 forward_model_error 0.02 forward_model_error_logarithmic 1 \end radiance_difference \end MSI C L

L V

# DEFINE HOW TO RETRIEVE ICE CLOUD PROPERTIES \begin IceCloud type ice minimum_size 1.0e-7 # Min median vol diameter D0 maximum_size 1.0e-2 # Max median vol diameter D0 num_sizes 50 # No. of D0 in lookup table distribution_shape gamma gamma_order 2.0 mass_size_prefactor 0.0185 # Brown & Francis mass-size mass_size_exponent 1.9 # relationship classification_codes 1 2 # Retrieve ice for these codes C L

L V

minimum_contiguous_gates 2 # Don’t retrieve isolated gate

# Variables to retrieve and those to compute and save state_variables ln_ext ln_number_conc ln_bscat_ext_ratio derived_variables water_content mass_flux effective_radius D0 integrated_variables water_path

# Define state variables \begin ln_ext type extinction # Geometric-optics extinction coefft representation cubic_spline basis_function_spacing 3.0 C L

L V

# Temperature-dependent a priori: prior 1.0e-4 1.0e-4 1.0e-3 1.0e-3 temperature_interp 10 200 273 400 prior_error 10.0 # Large prior error in ln(ext) smoothness_factor 10.0 \end ln_ext \begin ln_number_conc type primed_number_concentration n0_prime_power -0.6 representation cubic_spline basis_function_spacing 16.0 # From Figure 3b of Delanoe and Hogan (2008) C L

L V

prior 1.0e10 1.0e10 1.0e7 1.0e7 temperature_interp 10 220 260 400 prior_error 1.0 prior_decorrelation_length 1000.0 \end ln_number_conc \begin ln_bscat_ext_ratio type lidar_backscatter_extinction_ratio representation layerwise_constant prior 0.054 # 1/18.5 prior_error 0.1 \end ln_bscat_ext_ratio \end IceCloud C L

L V

# DEFINE HOW TO RETRIEVE LIQUID CLOUD PROPERTIES \begin LiquidCloud type liquid minimum_size 1.0e-7 maximum_size 1.0e-4 num_sizes 50 distribution_type gamma gamma_order 2.0 classification_codes 2 3 4 extra_gates_below 0 C L

L V

state_variables ln_lwc ln_number_conc ln_bscat_ext_ratio derived_variables extinction effective_radius D0 integrated_variables optical_depth

\begin ln_lwc type water_content representation direct prior 1.0e-6 # kg m-3 prior_error 2.0 max 3.0e-3 # kg m-3 max_factor 100000000.0 adiabatic_prior_peak 0.05e-3 # kg m-3 C L

L V

adiabatic_prior_slope_scaling 0.5 gradient_factor 100000000.0 smoothness_factor 10.0 \end ln_lwc \begin ln_number_conc type number_concentration representation predefined prior 1.0e8 \end ln_number_conc \begin ln_bscat_ext_ratio type lidar_backscatter_extinction_ratio representation predefined C L

L V

prior 0.0542 # 1/18.5 \end ln_bscat_ext_ratio \end LiquidCloud

# DEFINE HOW TO RETRIEVE AEROSOL \begin Aerosol type aerosol minimum_size 0.02e-6 maximum_size 2.0e-6 num_sizes 50 distribution_type gamma gamma_order 2.0 C L

L V

classification_codes 6 extra_gates_below 5

state_variables ln_D0 ln_number_conc derived_variables mass_content extinction

\begin ln_D0 type median_volume_diameter representation predefined prior 0.5e-6 \end ln_D0 \begin ln_number_conc C L

L V

type number_concentration representation cubic_spline basis_function_spacing 5.0 smoothness_factor 1.0

temporal_smoothing_error 0.2 \end ln_number_conc \end Aerosol

# DEFINE HOW TO RETRIEVE RAIN \begin Rain type rain C L

L V

minimum_size 20.0e-6 maximum_size 8.0e-3 num_sizes 50 distribution_type gamma gamma_order 5.0 classification_codes 5 extra_gates_below 0

# Use different state variables for rain originating from # melting ice and rain (i.e. drizzle) falling from warm clouds state_variables ln_rain_rate ln_number_conc alternative_state_variables ln_drizzle_rate ln_drizzle_n_conc C L

L V

derived_variables water_content D0

\begin ln_rain_rate type precipitation_rate representation cubic_spline #representation constant basis_function_spacing 10.0 prior 2.7778e-6 # 0.01 mm/h prior_error 9.0 smoothness_factor 100.0 flatness_factor 100.0 C L

L V

\end ln_rain_rate \begin ln_number_conc type normalized_number_concentration representation predefined # Marshall-Palmer value of 8000 mm-1 m-3 prior 8.0e6 prior_error 1.0 \end ln_number_conc

\begin ln_drizzle_rate type precipitation_rate representation cubic_spline C L

L V

basis_function_spacing 5.0 prior 2.7778e-7 # 0.001 mm/h prior_error 9.0 smoothness_factor 100.0 \end ln_drizzle_rate \begin ln_drizzle_n_conc type normalized_number_concentration representation predefined # 10 times the Marshall-Palmer value: 80000 mm-1 m-3 prior 8.0e7 \end ln_drizzle_n_conc \end C L

L V

# DEFINE MELTING-LAYER RETRIEVAL # Radar attenuation due to melting ice is only added if there is # IceCloud immediately above Rain. \begin MeltingLayer type simple_melting_layer rain Rain ice_cloud IceCloud flux_difference_factor 0.0 prior_error_ln_scaling_factor 0.0 \end C L

L V

6.4.3. Scattering configuration files

The retrieval algorithm takes as input the precalculated scattering properties of individual particles stored in a scattering library file; the format of these files is outlined in section 6.4.4. This section is concerned with how these particle scattering library files are generated and specifically the format of the configuration files used to create them. Note that typing “make” from the top-level directory will not only compile the code, it will also create the look-up tables needed to perform retrievals using EarthCARE and A-Train instruments. To see how it does this, look at C L

L V

aux/scattering/Makefile. Note that the particle scattering libraries and associated programs used by this algorithm are completely independent of those used in ECSIM.

In the case of ice particles observed by instruments with a wavelength shorter than around 15 microns (e.g. lidar and imager), we use the Baran (2004) database of ice-particle scattering properties. For all other particles, and for ice particles observed at radar wavelengths, scattering libraries for individual particles may be created using the scatter program that is part of the ACM-CAP algorithm package. C L

L V

This program currently uses either Mie theory for spheres (using the freely available BHMIE Fortran back end) or T-matrix for oblate spheroids. Scattering properties may be calculated as a function of wavelength, temperature, size and mixing fraction (the latter for aggregated ice particles that may be treated as a mixture of ice and air). Thus the output variables may be up to four dimensional, although frequently not all these dimensions are required. In addition to electromagnetic scattering, the scatter program also calculates particle terminal fall speeds using the Heymsfield and Westbrook (2010) approach for ice particles and the Beard (1976) approach for liquid droplets and raindrops. The CFG format is used for the configuration files, and these are stored in the aux/scattering_input/ C L

L V

subdirectory of the package. As an example, to create the particle scattering properties for ice at 94 GHz, the input file ice-oblate-aggregates_94-GHz.cfg contains the following:

# Wavelength corresponding to 94-GHz, in m wavelength 0.0031893

# Ice oblate spheroids medium ice axial_ratio 0.6 C L

L V

# Use the T-matrix method engine tmatrix

# Temperatures from -80 degC to 0 degC in 20 degC intervals temperature { 193.15 213.15 233.15 253.15 273.15 }

# Define size in terms of radius (m), with logarithmically-spaced # sizes from 0.5 microns to 2 cm size_variable radius size_start 0.5e-6 size_end 0.02 size_values 100 C L

L V

size_scale logarithmic fraction_start 0.01 fraction_end 1.0 fraction_values 25 fraction_scale logarithmic

# Output format format netcdf

# Output filename output ice-oblate-aggregates_94-GHz_scat.nc C L

L V

Note that for medium ice or liquid-water, the refractive index is computed internally from the temperature and fraction. For all other media, the refractive index real and imaginary parts must be specified explicitly, for example, the following for ammonium sulphate aerosol: refind_r 1.529 refind_i 1.0e-7 C L

L V

For solar radiance calculations, the full phase function will be required. To output this, use the following option to specify how many Legendre polynomials are required to describe the phase function: legendre_polynomial_coefficients 33

If the phase function is also required as a function of angle (for checking, rather than for use by the retrieval algorithm), then the following will output it at a resolution of 0.1 degrees:

output_phase_function 1 C L

L V

To perform the scattering calculations, simply run the scatter program with a single argument, the name of the scattering configuration file. As for the main retrieval algorithm described in section Error: Reference source not found, configuration parameters may be overridden on the command line. The structure of the output file is given in section 6.4.4. C L

L V

6.4.4. Scattering look-up table files

The retrieval algorithm takes as input the precalculated scattering properties of individual particles, located in the aux/scattering/ subdirectory. These files are in NetCDF format, and are generated as described in section 6.4.3. The files contain between 1 and 4 dimensions, each with a corresponding coordinate-variable [units in square brackets]:

 wavelength [m] (optional) C L

L V

 temperature [K] (optional)  fraction (optional; this is the ice fraction in ice-air mixtures)  mean_dimension [m]

Note some of the first three dimensions may be omitted if (1) the file contains only one wavelength, (2) the refractive index of the medium is temperature independent at that wavelength, or (3) “fraction” does not vary (e.g. for liquid drops). An additional two dimensions, phase_function_angle and C L

L V

legendre_coefficient, will be present if the full phase function was requested. The file contains the following particle physical properties (functions of the dimensions specified in brackets):

 area (size) [m2]: the geometric projected area of the particle when viewed from zenith or nadir – this is required, for example, by the multiple scattering forward model.  mass (fraction, size) [kg]  fall_speed (fraction, size) [m s-1]: the terminal fall speed at a reference air density of 1.0 kg m-3 – this is required by the Doppler forward model and to calculate the snow rate.  n_r (wavelength, temperature, fraction): the real part of the refractive index. C L

L V

 n_i (wavelength, temperature, fraction): the imaginary part of the refractive index.

It also contains the following particle scattering properties:

 ext (wavelength, temperature, fraction, size) [m2]: extinction cross-section.  scat (wavelength, temperature, fraction, size) [m2]: scattering cross-section.  bscat (wavelength, temperature, fraction, size) [m2]: backscattering cross- section. C L

L V

 g (wavelength, temperature, fraction, size): asymmetry factor (the mean of the cosine of the scattering angle).

If the phase function was requested then the following two variables may also be output:  phase_function (wavelength, temperature, fraction, size, phase_function_angle).  legendre_coefficients (wavelength, temperature, fraction, size, legendre_coefficient). C L

L V

As an example, the header of the “CDL” (common data language, i.e. human-readable) version of the output NetCDF file ice-oblate-aggreagates_94-GHz_scat.nc from section 6.4.3, would look like the following: netcdf ice-oblate-aggregates_94-GHz_scat { dimensions: fraction = 25 ; size = 100 ; variables: C L

L V

float wavelength ; wavelength:units = "m" ; wavelength:long_name = "Wavelength" ; wavelength:comment = , "The wavelength of the radiation" ; float temperature ; temperature:units = "K" ; temperature:long_name = "Temperature" ; float fraction(fraction) ; fraction:units = "1" ; fraction:long_name = , "Volume fraction of the particle that is ice, the rest being air" ; C L

L V

float mean_dimension(size) ; mean_dimension:units = "m" ; mean_dimension:long_name = "Mean dimension" ; mean_dimension:comment = , "For spheroids this is the equivalent-volume diameter,\n", "the diameter of a sphere with the same volume as the\n", "actual particle. For mixtures of ice with air, it\n", "is a measure of the physical size, not the equivalent\n", "size of a particle with the same mass as solid ice." ; float area(size) ; area:units = "m2" ; area:long_name = "Cross-sectional area" ; C L

L V

area:comment = , "The geometric projected area of the particle\n", "when viewed from zenith or nadir." ; float mass(fraction, size) ; mass:units = "kg" ; mass:long_name = "Mass" ; float fall_speed(fraction, size) ; fall_speed:units = "m s-1" ; fall_speed:long_name = "Terminal fall speed" ; fall_speed:comment = , "The terminal fall speed at a reference air density of\n", "1.0 kg m-3, calculated using the equations of Heymsfield\n", C L

L V

"and Westbrook (J. Atmos. Sci. 2010 p2469-)." ; float n_r(fraction) ; n_r:units = "1" ; n_r:long_name = "Real part of refractive index" ; float n_i(fraction) ; n_i:units = "1" ; n_i:long_name ="Imaginary part of refractive index" ; n_i:comment = , "Note that we adopt the convention of positive imaginary part." ; float ext(fraction, size) ; ext:units = "m2" ; ext:long_name = "Extinction cross-section" ; C L

L V

float scat(fraction, size) ; scat:units = "m2" ; scat:long_name = "Scattering cross-section" ; float bscat(fraction, size) ; bscat:units = "m2 sr-1" ; bscat:long_name = "Backscatter cross-section" ; bscat:comment = , "Note that this variable is defined such that if the particle\n" "with backscatter cross-section B is illuminated by radiation\n" "from a particular direction with intensity F W/m2, then the\n" "power scattered into the backwards direction per steradian will\n" "be F*B W/sterad. Multiply this variable by 4pi to obtain the\n", C L

L V

"radar cross-section." ; float g(fraction, size) ; g:units = "1" ; g:long_name = "Asymmetry factor" ; g:comment = , "The mean of the cosine of the scattering angle." ;

// global attributes: :command_line = , "scatter ../scattering_input/ice-oblate-aggregates_94-GHz.cfg" ; } C L

L V

6.4.5. Scattering database index file

The primary configuration file described in section 6.4.2 declares various observations and their wavelengths, as well as the constituents to be retrieved and their “type”. Each observation-constituent pair needs to be mapped on to a scattering look-up table file (described in section 6.4.4). To do this, the algorithm looks for a file aux/scattering/scattering_database.cfg. To find the properties of type “ice” at a particular wavelength, it loads the floating-point vectors C L

L V

ice.min_wavelength and ice.max_wavelength from the file. It then examines pairs of elements of these two vectors until it finds a pair that bracket the wavelength requested. If this was the ith element of the two vectors, then it will load the ith substring in the string list ice.filename. This will then be interpreted as the name of the look-up table file, which will then be loaded. If the wavelength requested does not lie between any min-max pairs then a warning will be issued and it will be assumed that this particular particle type is completely invisible at that wavelength. An example is aerosols at 94 GHz. C L

L V

An example of the contents of the file is as follows; note that this uses the table feature of CFG format for ease of human readability.

\begin aerosol (wavelength min_wavelength max_wavelength filename) { 0.355e-6 0.3e-6 0.4e-6 ammonium-sulphate_355-nm_scat.nc 0.532e-6 0.5e-6 0.6e-6 ammonium-sulphate_532-nm_scat.nc } \end aerosol

\begin ice C L

L V

(wavelength min_wavelength max_wavelength filename) { 0.355e-6 0.3e-6 0.4e-6 ice-spheres_355-nm_scat.nc 0.532e-6 0.5e-6 0.6e-6 ice-spheres_532-nm_scat.nc 8.55e-6 8.54e-6 8.56e-6 ice-spheres_8550-nm_scat.nc 11.02e-6 11.00e-6 11.04e-6 ice-spheres_11020-nm_scat.nc 12.02e-6 12.00e-6 12.04e-6 ice-spheres_12020-nm_scat.nc 0.0031893 0.0030 0.0032 ice-oblate-aggregates_94-GHz_scat.nc } \end ice

\begin liquid-water (wavelength min_wavelength max_wavelength filename) { 0.355e-6 0.3e-6 0.4e-6 liquid-water_355-nm_scat.nc C L

L V

0.532e-6 0.5e-6 0.6e-6 liquid-water_532-nm_scat.nc 8.55e-6 8.54e-6 8.56e-6 liquid-water_8550-nm_scat.nc 11.02e-6 11.00e-6 11.04e-6 liquid-water_11020-nm_scat.nc 12.02e-6 12.00e-6 12.04e-6 liquid-water_12020-nm_scat.nc 0.0031893 0.0030 0.0032 liquid-water_94-GHz_scat.nc } \end liquid-water

\begin rain (wavelength min_wavelength max_wavelength filename) { 0.355e-6 0.3e-6 0.4e-6 liquid-water_355-nm_scat.nc 0.532e-6 0.5e-6 0.6e-6 liquid-water_532-nm_scat.nc 0.0031893 0.0030 0.0032 liquid-water_94-GHz_scat.nc C L

L V

} \end rain

6.4.6. Infrared gaseous absorption look-up table files

The infrared radiance model is the same as was used by Delanoe and Hogan (2008). Within each radiance channel, the cloud scattering properties are assumed constant, while the variation of the gaseous absorption is treated using a correlated k-distribution model, where “k” is the mass absorption coefficient of the gas (in units of area per unit mass of gas). In this model, the distribution of k for a C L

L V

particular gas across the wavelength range of the channel is represented by a handful of discrete “k terms”. Each one is computed using a look-up table as a function of temperature, pressure and in the case of water vapour, the water-vapour concentration. In the atmospheric window channels, only two of the three gases water vapour, carbon dioxide and ozone, are important. C L

L V

The configuration files for a particular channel are in CFG format and essentially hold the look-up tables for each k term of each active gas. They have been converted from files used in ECSIM and produced originally using code from Seiji Kato. Here is an example:

# EarthCARE multi-spectral imager (MSI) channel 5 wavelength 8.85 # Microns wavelength_range 1.0 # Microns gases h2o o3 # Two active gases in this channel C L

L V

# Information for water vapour h2o_num_k 6 # Number of k terms for water vapour h2o_num_pressure 17 # Num. look-up table elements for pressure h2o_num_temperature 11 # Num. look-up table elements for temp. h2o_num_concentration 13 # Num. look-up table elements for conc. # Each k term is weighted as follows (Gaussian quadrature): h2o_weight { 0.85662246189581E-01 0.18038078652407E+00 0.23395696728634E+00 0.23395696728634E+00 0.18038078652407E+00 0.85662246189581E-01 } # The following are the coordinates of the 3D look-up table h2o_pressure {0.105E+04 0.834E+03 0.662E+03 0.526E+03 0.418E+03 0.332E+03 0.264E+03 0.168E+03 0.106E+03 0.669E+02 C L

L V

0.422E+02 0.266E+02 0.168E+02 0.1060E+02 0.100E+01 0.100E+00 1.000E-02 } h2o_temperature { 0.120E+03 0.140E+03 0.160E+03 0.180E+03 0.200E+03 0.220E+03 0.240E+03 0.260E+03 0.280E+03 0.300E+03 0.320E+03 } h2o_concentration { 0.15E+26 0.47E+25 0.15E+25 0.47E+24 0.15E+24 0.47E+23 0.15E+23 0.47E+22 0.15E+22 0.47E+21 0.15E+21 0.47E+20 0.15E+20 } # The actual mass absorption coefficients are here; the first index # of the matrix refers to the look-up table elements, and the second # to the k term: h2o_k[2431][6] { ... } C L

L V

# Information for ozone o3_num_k 2 # Number of k terms for water vapour o3_num_pressure 17 # Num. look-up table elements for pressure o3_num_temperature 11 # Num. look-up table elements for temp. o3_num_concentration 1 # Num. look-up table elements for conc. o3_weight 0.500E+00 0.500E+00 # Even weighting # The coordinates of the 2D look-up table o3_pressure { 0.105E+04 0.834E+03 0.662E+03 0.526E+03 0.418E+03 0.332E+03 0.264E+03 0.168E+03 0.106E+03 0.669E+02 0.422E+02 0.266E+02 0.168E+02 0.106E+02 0.100E+01 0.100E+00 1.000E-02 } C L

L V

o3_temperature { 0.120E+03 0.140E+03 0.160E+03 0.180E+03 0.200E+03 0.220E+03 0.240E+03 0.260E+03 0.280E+03 0.300E+03 0.320E+03 } # The mass absorption coefficients are here o3_k[187][2] { ... } C L

L V

6.5. Output data files

The output file is in NetCDF format and is described in detail in the ACM-CAP Product Definition Document. Here we show the NetCDF header for an actual retrieval on A-Train data in which ice, liquid, rain and aerosol were retrieved. C L

L V

netcdf sample_atrain_retrieval { dimensions: time = UNLIMITED ; // (2000 currently) height = 436 ; variables: float time(time) ; time:long_name = "Time of the CloudSat footprint in the UTC convention" ; time:units = "s since 1970-0-0 00:00:00.0 0:00" ; float height(height) ; height:long_name = "Height of range bin above reference surface (~ mean sea level)" ; height:units = "m" ; short n_x(time) ; n_x:long_name = "Number of elements in state vector" ; short n_y(time) ; C L

L V

n_y:long_name = "Number of elements in observation vector" ; float cost_function(time) ; cost_function:long_name = "Value of cost function after final iteration" ; cost_function:_FillValue = -999.f ; cost_function:missing_value = -999.f ; short n_iterations(time) ; n_iterations:long_name = "Number of iterations carried out" ; n_iterations:plot_range = 0.f, 200.f ; n_iterations:plot_scale = "linear" ; byte convergence_status(time) ; convergence_status:long_name = "Convergence status" ; convergence_status:definition = "0: Converged successfully\n", "1: Empty state (no retrieval attempted)\n", "2: Maximum iterations reached\n", "3: Maximum sub-iterations reached (implies line search problems)\n", C L

L V

"4: Cost function out of range (less than zero, infinity or not a number)\n", "5: Failed to converge (bad adjoint?)\n", "6: Error occurred during minimization (bug in code)" ; convergence_status:comment = "The valid values for this variable are described in the \"definition\" attribute." ; float norm_gradient(time) ; norm_gradient:long_name = "Norm of the gradient of the cost function at the final iteration" ; norm_gradient:_FillValue = -999.f ; norm_gradient:missing_value = -999.f ; int ice_n_x(time) ; ice_n_x:long_name = "Number of state-vector elements associated with ice" ; float ice_cost_function(time) ; ice_cost_function:long_name = "Contribution to final cost function from ice" ; float ice_cost_function_prior(time) ; C L

L V

ice_cost_function_prior:long_name = "Contribution to final cost function from ice prior constraints" ; float ice_cost_function_regularization(time) ; ice_cost_function_regularization:long_name = "Contribution to final cost function from ice regularization constraints" ; float ice_dof(time) ; ice_dof:long_name = "Number of degrees of freedom in retrieval of ice" ; ice_dof:_FillValue = -999.f ; ice_dof:missing_value = -999.f ; float ice_extinction(time, height) ; ice_extinction:long_name = "Ice geometric extinction coefficient" ; ice_extinction:units = "m-1" ; ice_extinction:_FillValue = -999.f ; ice_extinction:missing_value = -999.f ; ice_extinction:plot_range = 1.e-06f, 0.1f ; C L

L V

ice_extinction:plot_scale = "logarithmic" ; float ice_extinction_error(time, height) ; ice_extinction_error:long_name = "One-sigma error in natural logarithm of ice geometric extinction coefficient" ; ice_extinction_error:units = "1" ; ice_extinction_error:_FillValue = -999.f ; ice_extinction_error:missing_value = -999.f ; ice_extinction_error:plot_range = 0.f, 1.f ; ice_extinction_error:plot_scale = "linear" ; float ice_extinction_error_corr_scale(time, height) ; ice_extinction_error_corr_scale:long_name = "Decorrelation scale in error covariance of ice geometric extinction coefficient" ; ice_extinction_error_corr_scale:units = "m" ; ice_extinction_error_corr_scale:_FillValue = -999.f ; ice_extinction_error_corr_scale:missing_value = -999.f ; C L

L V

ice_extinction_error_corr_scale:plot_range = 0.f, 1000.f ; ice_extinction_error_corr_scale:plot_scale = "linear" ; float ice_extinction_avgkern_sum(time, height) ; ice_extinction_avgkern_sum:long_name = "Row-sum of averaging kernel of ice geometric extinction coefficient" ; ice_extinction_avgkern_sum:units = "1" ; ice_extinction_avgkern_sum:_FillValue = -999.f ; ice_extinction_avgkern_sum:missing_value = -999.f ; ice_extinction_avgkern_sum:plot_range = -0.25f, 1.75f ; ice_extinction_avgkern_sum:plot_scale = "linear" ; float ice_extinction_avgkern_corr_scale(time, height) ; ice_extinction_avgkern_corr_scale:long_name = "Decorrelation scale in averaging kernel of ice geometric extinction coefficient" ; ice_extinction_avgkern_corr_scale:units = "m" ; ice_extinction_avgkern_corr_scale:_FillValue = -999.f ; C L

L V

ice_extinction_avgkern_corr_scale:missing_value = -999.f ; ice_extinction_avgkern_corr_scale:plot_range = 0.f, 1000.f ; ice_extinction_avgkern_corr_scale:plot_scale = "linear" ; float ice_N0prime(time, height) ; ice_N0prime:long_name = "Ice primed number concentration" ; ice_N0prime:units = "m-?" ; ice_N0prime:_FillValue = -999.f ; ice_N0prime:missing_value = -999.f ; ice_N0prime:plot_range = 1.e+07f, 1.e+11f ; ice_N0prime:plot_scale = "logarithmic" ; float ice_N0prime_error(time, height) ; ice_N0prime_error:long_name = "One-sigma error in natural logarithm of ice primed number concentration" ; ice_N0prime_error:units = "1" ; ice_N0prime_error:_FillValue = -999.f ; C L

L V

ice_N0prime_error:missing_value = -999.f ; ice_N0prime_error:plot_range = 0.f, 1.f ; ice_N0prime_error:plot_scale = "linear" ; float ice_N0prime_error_corr_scale(time, height) ; ice_N0prime_error_corr_scale:long_name = "Decorrelation scale in error covariance of ice primed number concentration" ; ice_N0prime_error_corr_scale:units = "m" ; ice_N0prime_error_corr_scale:_FillValue = -999.f ; ice_N0prime_error_corr_scale:missing_value = -999.f ; ice_N0prime_error_corr_scale:plot_range = 0.f, 1000.f ; ice_N0prime_error_corr_scale:plot_scale = "linear" ; float ice_N0prime_avgkern_sum(time, height) ; ice_N0prime_avgkern_sum:long_name = "Row-sum of averaging kernel of ice primed number concentration" ; ice_N0prime_avgkern_sum:units = "1" ; C L

L V

ice_N0prime_avgkern_sum:_FillValue = -999.f ; ice_N0prime_avgkern_sum:missing_value = -999.f ; ice_N0prime_avgkern_sum:plot_range = -0.25f, 1.75f ; ice_N0prime_avgkern_sum:plot_scale = "linear" ; float ice_N0prime_avgkern_corr_scale(time, height) ; ice_N0prime_avgkern_corr_scale:long_name = "Decorrelation scale in averaging kernel of ice primed number concentration" ; ice_N0prime_avgkern_corr_scale:units = "m" ; ice_N0prime_avgkern_corr_scale:_FillValue = -999.f ; ice_N0prime_avgkern_corr_scale:missing_value = -999.f ; ice_N0prime_avgkern_corr_scale:plot_range = 0.f, 1000.f ; ice_N0prime_avgkern_corr_scale:plot_scale = "linear" ; float ice_lidar_bscat_ext_ratio(time, height) ; ice_lidar_bscat_ext_ratio:long_name = "Ice lidar backscatter-to-extinction ratio" ; ice_lidar_bscat_ext_ratio:units = "sr-1" ; C L

L V

ice_lidar_bscat_ext_ratio:_FillValue = -999.f ; ice_lidar_bscat_ext_ratio:missing_value = -999.f ; ice_lidar_bscat_ext_ratio:plot_range = 0.f, 0.1f ; ice_lidar_bscat_ext_ratio:plot_scale = "linear" ; float ice_lidar_bscat_ext_ratio_error(time, height) ; ice_lidar_bscat_ext_ratio_error:long_name = "One-sigma error in natural logarithm of ice lidar backscatter-to-extinction ratio" ; ice_lidar_bscat_ext_ratio_error:units = "1" ; ice_lidar_bscat_ext_ratio_error:_FillValue = -999.f ; ice_lidar_bscat_ext_ratio_error:missing_value = -999.f ; ice_lidar_bscat_ext_ratio_error:plot_range = 0.f, 0.1f ; ice_lidar_bscat_ext_ratio_error:plot_scale = "linear" ; float ice_lidar_bscat_ext_ratio_error_corr_scale(time, height) ; ice_lidar_bscat_ext_ratio_error_corr_scale:long_name = "Decorrelation scale in error covariance of ice lidar backscatter-to-extinction ratio" ; C L

L V

ice_lidar_bscat_ext_ratio_error_corr_scale:units = "m" ; ice_lidar_bscat_ext_ratio_error_corr_scale:_FillValue = -999.f ; ice_lidar_bscat_ext_ratio_error_corr_scale:missing_value = -999.f ; ice_lidar_bscat_ext_ratio_error_corr_scale:plot_range = 0.f, 1000.f ; ice_lidar_bscat_ext_ratio_error_corr_scale:plot_scale = "linear" ; float ice_water_content(time, height) ; ice_water_content:long_name = "Ice water content" ; ice_water_content:units = "kg m-3" ; ice_water_content:_FillValue = -999.f ; ice_water_content:missing_value = -999.f ; ice_water_content:plot_range = 1.e-08f, 0.0005f ; ice_water_content:plot_scale = "logarithmic" ; float ice_water_content_error(time, height) ; ice_water_content_error:long_name = "One-sigma error in natural logarithm of ice water content" ; C L

L V

ice_water_content_error:units = "1" ; ice_water_content_error:_FillValue = -999.f ; ice_water_content_error:missing_value = -999.f ; ice_water_content_error:plot_range = 0.f, 1.f ; ice_water_content_error:plot_scale = "linear" ; float ice_water_content_error_corr_scale(time, height) ; ice_water_content_error_corr_scale:long_name = "Decorrelation scale in error covariance of ice water content" ; ice_water_content_error_corr_scale:units = "m" ; ice_water_content_error_corr_scale:_FillValue = -999.f ; ice_water_content_error_corr_scale:missing_value = -999.f ; ice_water_content_error_corr_scale:plot_range = 0.f, 1000.f ; ice_water_content_error_corr_scale:plot_scale = "linear" ; float ice_mass_flux(time, height) ; ice_mass_flux:long_name = "Ice mass flux" ; C L

L V

ice_mass_flux:units = "kg m-2 s-1" ; ice_mass_flux:_FillValue = -999.f ; ice_mass_flux:missing_value = -999.f ; ice_mass_flux:plot_range = 1.e-07f, 0.01f ; ice_mass_flux:plot_scale = "logarithmic" ; float ice_mass_flux_error(time, height) ; ice_mass_flux_error:long_name = "One-sigma error in natural logarithm of ice mass flux" ; ice_mass_flux_error:units = "1" ; ice_mass_flux_error:_FillValue = -999.f ; ice_mass_flux_error:missing_value = -999.f ; ice_mass_flux_error:plot_range = 0.f, 1.f ; ice_mass_flux_error:plot_scale = "linear" ; float ice_mass_flux_error_corr_scale(time, height) ; C L

L V

ice_mass_flux_error_corr_scale:long_name = "Decorrelation scale in error covariance of ice mass flux" ; ice_mass_flux_error_corr_scale:units = "m" ; ice_mass_flux_error_corr_scale:_FillValue = -999.f ; ice_mass_flux_error_corr_scale:missing_value = -999.f ; ice_mass_flux_error_corr_scale:plot_range = 0.f, 1000.f ; ice_mass_flux_error_corr_scale:plot_scale = "linear" ; float ice_effective_radius(time, height) ; ice_effective_radius:long_name = "Ice effective radius" ; ice_effective_radius:units = "m" ; ice_effective_radius:_FillValue = -999.f ; ice_effective_radius:missing_value = -999.f ; ice_effective_radius:plot_range = 0.f, 0.0001f ; ice_effective_radius:plot_scale = "linear" ; float ice_effective_radius_error(time, height) ; C L

L V

ice_effective_radius_error:long_name = "One-sigma error in natural logarithm of ice effective radius" ; ice_effective_radius_error:units = "1" ; ice_effective_radius_error:_FillValue = -999.f ; ice_effective_radius_error:missing_value = -999.f ; ice_effective_radius_error:plot_range = 0.f, 1.e-05f ; ice_effective_radius_error:plot_scale = "linear" ; float ice_effective_radius_error_corr_scale(time, height) ; ice_effective_radius_error_corr_scale:long_name = "Decorrelation scale in error covariance of ice effective radius" ; ice_effective_radius_error_corr_scale:units = "m" ; ice_effective_radius_error_corr_scale:_FillValue = -999.f ; ice_effective_radius_error_corr_scale:missing_value = -999.f ; ice_effective_radius_error_corr_scale:plot_range = 0.f, 1000.f ; ice_effective_radius_error_corr_scale:plot_scale = "linear" ; C L

L V

float ice_D0(time, height) ; ice_D0:long_name = "Ice median volume diameter" ; ice_D0:units = "m" ; ice_D0:_FillValue = -999.f ; ice_D0:missing_value = -999.f ; ice_D0:plot_range = 0.f, 0.001f ; ice_D0:plot_scale = "linear" ; float ice_D0_error(time, height) ; ice_D0_error:long_name = "One-sigma error in natural logarithm of ice median volume diameter" ; ice_D0_error:units = "1" ; ice_D0_error:_FillValue = -999.f ; ice_D0_error:missing_value = -999.f ; ice_D0_error:plot_range = 0.f, 0.0001f ; ice_D0_error:plot_scale = "linear" ; C L

L V

float ice_D0_error_corr_scale(time, height) ; ice_D0_error_corr_scale:long_name = "Decorrelation scale in error covariance of ice median volume diameter" ; ice_D0_error_corr_scale:units = "m" ; ice_D0_error_corr_scale:_FillValue = -999.f ; ice_D0_error_corr_scale:missing_value = -999.f ; ice_D0_error_corr_scale:plot_range = 0.f, 1000.f ; ice_D0_error_corr_scale:plot_scale = "linear" ; float ice_water_path(time) ; ice_water_path:long_name = "Ice water path" ; ice_water_path:units = "kg m-2" ; ice_water_path:_FillValue = -999.f ; ice_water_path:missing_value = -999.f ; ice_water_path:plot_range = 0.001f, 5000.f ; ice_water_path:plot_scale = "logarithmic" ; C L

L V

float ice_water_path_error(time) ; ice_water_path_error:long_name = "One-sigma error in natural logarithm of ice water path" ; ice_water_path_error:units = "1" ; ice_water_path_error:_FillValue = -999.f ; ice_water_path_error:missing_value = -999.f ; ice_water_path_error:plot_range = 0.f, 1.f ; ice_water_path_error:plot_scale = "linear" ; float ice_extinction_N0prime_error_corr(time, height) ; ice_extinction_N0prime_error_corr:long_name = "Error correlation between natural logs of ice geometric extinction coefficient and primed number concentration" ; ice_extinction_N0prime_error_corr:units = "1" ; ice_extinction_N0prime_error_corr:_FillValue = -999.f ; ice_extinction_N0prime_error_corr:missing_value = -999.f ; ice_extinction_N0prime_error_corr:plot_range = -1.f, 1.f ; C L

L V

ice_extinction_N0prime_error_corr:plot_scale = "linear" ; float ice_extinction_water_content_error_corr(time, height) ; ice_extinction_water_content_error_corr:long_name = "Error correlation between natural logs of ice geometric extinction coefficient and water content" ; ice_extinction_water_content_error_corr:units = "1" ; ice_extinction_water_content_error_corr:_FillValue = -999.f ; ice_extinction_water_content_error_corr:missing_value = -999.f ; ice_extinction_water_content_error_corr:plot_range = -1.f, 1.f ; ice_extinction_water_content_error_corr:plot_scale = "linear" ; float ice_extinction_mass_flux_error_corr(time, height) ; ice_extinction_mass_flux_error_corr:long_name = "Error correlation between natural logs of ice geometric extinction coefficient and mass flux" ; ice_extinction_mass_flux_error_corr:units = "1" ; ice_extinction_mass_flux_error_corr:_FillValue = -999.f ; ice_extinction_mass_flux_error_corr:missing_value = -999.f ; C L

L V

ice_extinction_mass_flux_error_corr:plot_range = -1.f, 1.f ; ice_extinction_mass_flux_error_corr:plot_scale = "linear" ; float ice_extinction_effective_radius_error_corr(time, height) ; ice_extinction_effective_radius_error_corr:long_name = "Error correlation between natural logs of ice geometric extinction coefficient and effective radius" ; ice_extinction_effective_radius_error_corr:units = "1" ; ice_extinction_effective_radius_error_corr:_FillValue = -999.f ; ice_extinction_effective_radius_error_corr:missing_value = -999.f ; ice_extinction_effective_radius_error_corr:plot_range = -1.f, 1.f ; ice_extinction_effective_radius_error_corr:plot_scale = "linear" ; float ice_extinction_D0_error_corr(time, height) ; ice_extinction_D0_error_corr:long_name = "Error correlation between natural logs of ice geometric extinction coefficient and median volume diameter" ; ice_extinction_D0_error_corr:units = "1" ; ice_extinction_D0_error_corr:_FillValue = -999.f ; C L

L V

ice_extinction_D0_error_corr:missing_value = -999.f ; ice_extinction_D0_error_corr:plot_range = -1.f, 1.f ; ice_extinction_D0_error_corr:plot_scale = "linear" ; int liquid_n_x(time) ; liquid_n_x:long_name = "Number of state-vector elements associated with liquid" ; float liquid_cost_function(time) ; liquid_cost_function:long_name = "Contribution to final cost function from liquid" ; float liquid_cost_function_prior(time) ; liquid_cost_function_prior:long_name = "Contribution to final cost function from liquid prior constraints" ; float liquid_cost_function_regularization(time) ; liquid_cost_function_regularization:long_name = "Contribution to final cost function from liquid regularization constraints" ; float liquid_dof(time) ; C L

L V

liquid_dof:long_name = "Number of degrees of freedom in retrieval of liquid" ; liquid_dof:_FillValue = -999.f ; liquid_dof:missing_value = -999.f ; float liquid_water_content(time, height) ; liquid_water_content:long_name = "Liquid water content" ; liquid_water_content:units = "kg m-3" ; liquid_water_content:_FillValue = -999.f ; liquid_water_content:missing_value = -999.f ; liquid_water_content:plot_range = 1.e-08f, 0.0001f ; liquid_water_content:plot_scale = "logarithmic" ; float liquid_water_content_error(time, height) ; liquid_water_content_error:long_name = "One-sigma error in natural logarithm of liquid water content" ; liquid_water_content_error:units = "1" ; liquid_water_content_error:_FillValue = -999.f ; C L

L V

liquid_water_content_error:missing_value = -999.f ; liquid_water_content_error:plot_range = 0.f, 1.f ; liquid_water_content_error:plot_scale = "linear" ; float liquid_water_content_error_corr_scale(time, height) ; liquid_water_content_error_corr_scale:long_name = "Decorrelation scale in error covariance of liquid water content" ; liquid_water_content_error_corr_scale:units = "m" ; liquid_water_content_error_corr_scale:_FillValue = -999.f ; liquid_water_content_error_corr_scale:missing_value = -999.f ; liquid_water_content_error_corr_scale:plot_range = 0.f, 1000.f ; liquid_water_content_error_corr_scale:plot_scale = "linear" ; float liquid_water_content_avgkern_sum(time, height) ; liquid_water_content_avgkern_sum:long_name = "Row-sum of averaging kernel of liquid water content" ; liquid_water_content_avgkern_sum:units = "1" ; C L

L V

liquid_water_content_avgkern_sum:_FillValue = -999.f ; liquid_water_content_avgkern_sum:missing_value = -999.f ; liquid_water_content_avgkern_sum:plot_range = -0.25f, 1.75f ; liquid_water_content_avgkern_sum:plot_scale = "linear" ; float liquid_water_content_avgkern_corr_scale(time, height) ; liquid_water_content_avgkern_corr_scale:long_name = "Decorrelation scale in averaging kernel of liquid water content" ; liquid_water_content_avgkern_corr_scale:units = "m" ; liquid_water_content_avgkern_corr_scale:_FillValue = -999.f ; liquid_water_content_avgkern_corr_scale:missing_value = -999.f ; liquid_water_content_avgkern_corr_scale:plot_range = 0.f, 1000.f ; liquid_water_content_avgkern_corr_scale:plot_scale = "linear" ; float liquid_number_concentration(time, height) ; liquid_number_concentration:long_name = "Liquid total number concentration" ; liquid_number_concentration:units = "m-3" ; C L

L V

liquid_number_concentration:_FillValue = -999.f ; liquid_number_concentration:missing_value = -999.f ; liquid_number_concentration:plot_range = 1.e+07f, 1.e+09f ; liquid_number_concentration:plot_scale = "logarithmic" ; float liquid_number_concentration_error(time, height) ; liquid_number_concentration_error:long_name = "One-sigma error in natural logarithm of liquid total number concentration" ; liquid_number_concentration_error:units = "1" ; liquid_number_concentration_error:_FillValue = -999.f ; liquid_number_concentration_error:missing_value = -999.f ; liquid_number_concentration_error:plot_range = 0.f, 1.f ; liquid_number_concentration_error:plot_scale = "linear" ; float liquid_number_concentration_error_corr_scale(time, height) ; liquid_number_concentration_error_corr_scale:long_name = "Decorrelation scale in error covariance of liquid total number concentration" ; C L

L V

liquid_number_concentration_error_corr_scale:units = "m" ; liquid_number_concentration_error_corr_scale:_FillValue = -999.f ; liquid_number_concentration_error_corr_scale:missing_value = -999.f ; liquid_number_concentration_error_corr_scale:plot_range = 0.f, 1000.f ; liquid_number_concentration_error_corr_scale:plot_scale = "linear" ; float liquid_lidar_bscat_ext_ratio(time, height) ; liquid_lidar_bscat_ext_ratio:long_name = "Liquid lidar backscatter-to-extinction ratio" ; liquid_lidar_bscat_ext_ratio:units = "sr-1" ; liquid_lidar_bscat_ext_ratio:_FillValue = -999.f ; liquid_lidar_bscat_ext_ratio:missing_value = -999.f ; liquid_lidar_bscat_ext_ratio:plot_range = 0.f, 0.1f ; liquid_lidar_bscat_ext_ratio:plot_scale = "linear" ; float liquid_lidar_bscat_ext_ratio_error(time, height) ; C L

L V

liquid_lidar_bscat_ext_ratio_error:long_name = "One-sigma error in natural logarithm of liquid lidar backscatter-to-extinction ratio" ; liquid_lidar_bscat_ext_ratio_error:units = "1" ; liquid_lidar_bscat_ext_ratio_error:_FillValue = -999.f ; liquid_lidar_bscat_ext_ratio_error:missing_value = -999.f ; liquid_lidar_bscat_ext_ratio_error:plot_range = 0.f, 0.1f ; liquid_lidar_bscat_ext_ratio_error:plot_scale = "linear" ; float liquid_lidar_bscat_ext_ratio_error_corr_scale(time, height) ; liquid_lidar_bscat_ext_ratio_error_corr_scale:long_name = "Decorrelation scale in error covariance of liquid lidar backscatter-to-extinction ratio" ; liquid_lidar_bscat_ext_ratio_error_corr_scale:units = "m" ; liquid_lidar_bscat_ext_ratio_error_corr_scale:_FillValue = -999.f ; liquid_lidar_bscat_ext_ratio_error_corr_scale:missing_value = -999.f ; liquid_lidar_bscat_ext_ratio_error_corr_scale:plot_range = 0.f, 1000.f ; liquid_lidar_bscat_ext_ratio_error_corr_scale:plot_scale = "linear" ; C L

L V

float liquid_extinction(time, height) ; liquid_extinction:long_name = "Liquid geometric extinction coefficient" ; liquid_extinction:units = "m-1" ; liquid_extinction:_FillValue = -999.f ; liquid_extinction:missing_value = -999.f ; liquid_extinction:plot_range = 1.e-06f, 0.1f ; liquid_extinction:plot_scale = "logarithmic" ; float liquid_extinction_error(time, height) ; liquid_extinction_error:long_name = "One-sigma error in natural logarithm of liquid geometric extinction coefficient" ; liquid_extinction_error:units = "1" ; liquid_extinction_error:_FillValue = -999.f ; liquid_extinction_error:missing_value = -999.f ; liquid_extinction_error:plot_range = 0.f, 1.f ; liquid_extinction_error:plot_scale = "linear" ; C L

L V

float liquid_extinction_error_corr_scale(time, height) ; liquid_extinction_error_corr_scale:long_name = "Decorrelation scale in error covariance of liquid geometric extinction coefficient" ; liquid_extinction_error_corr_scale:units = "m" ; liquid_extinction_error_corr_scale:_FillValue = -999.f ; liquid_extinction_error_corr_scale:missing_value = -999.f ; liquid_extinction_error_corr_scale:plot_range = 0.f, 1000.f ; liquid_extinction_error_corr_scale:plot_scale = "linear" ; float liquid_effective_radius(time, height) ; liquid_effective_radius:long_name = "Liquid effective radius" ; liquid_effective_radius:units = "m" ; liquid_effective_radius:_FillValue = -999.f ; liquid_effective_radius:missing_value = -999.f ; liquid_effective_radius:plot_range = 0.f, 0.0001f ; liquid_effective_radius:plot_scale = "linear" ; C L

L V

float liquid_effective_radius_error(time, height) ; liquid_effective_radius_error:long_name = "One-sigma error in natural logarithm of liquid effective radius" ; liquid_effective_radius_error:units = "1" ; liquid_effective_radius_error:_FillValue = -999.f ; liquid_effective_radius_error:missing_value = -999.f ; liquid_effective_radius_error:plot_range = 0.f, 1.e-05f ; liquid_effective_radius_error:plot_scale = "linear" ; float liquid_effective_radius_error_corr_scale(time, height) ; liquid_effective_radius_error_corr_scale:long_name = "Decorrelation scale in error covariance of liquid effective radius" ; liquid_effective_radius_error_corr_scale:units = "m" ; liquid_effective_radius_error_corr_scale:_FillValue = -999.f ; liquid_effective_radius_error_corr_scale:missing_value = -999.f ; liquid_effective_radius_error_corr_scale:plot_range = 0.f, 1000.f ; C L

L V

liquid_effective_radius_error_corr_scale:plot_scale = "linear" ; float liquid_D0(time, height) ; liquid_D0:long_name = "Liquid median volume diameter" ; liquid_D0:units = "m" ; liquid_D0:_FillValue = -999.f ; liquid_D0:missing_value = -999.f ; liquid_D0:plot_range = 0.f, 0.001f ; liquid_D0:plot_scale = "linear" ; float liquid_D0_error(time, height) ; liquid_D0_error:long_name = "One-sigma error in natural logarithm of liquid median volume diameter" ; liquid_D0_error:units = "1" ; liquid_D0_error:_FillValue = -999.f ; liquid_D0_error:missing_value = -999.f ; liquid_D0_error:plot_range = 0.f, 0.0001f ; C L

L V

liquid_D0_error:plot_scale = "linear" ; float liquid_D0_error_corr_scale(time, height) ; liquid_D0_error_corr_scale:long_name = "Decorrelation scale in error covariance of liquid median volume diameter" ; liquid_D0_error_corr_scale:units = "m" ; liquid_D0_error_corr_scale:_FillValue = -999.f ; liquid_D0_error_corr_scale:missing_value = -999.f ; liquid_D0_error_corr_scale:plot_range = 0.f, 1000.f ; liquid_D0_error_corr_scale:plot_scale = "linear" ; float liquid_optical_depth(time) ; liquid_optical_depth:long_name = "Liquid geometric optical depth" ; liquid_optical_depth:units = "1" ; liquid_optical_depth:_FillValue = -999.f ; liquid_optical_depth:missing_value = -999.f ; liquid_optical_depth:plot_range = 0.001f, 1000.f ; C L

L V

liquid_optical_depth:plot_scale = "logarithmic" ; float liquid_optical_depth_error(time) ; liquid_optical_depth_error:long_name = "One-sigma error in natural logarithm of liquid geometric optical depth" ; liquid_optical_depth_error:units = "1" ; liquid_optical_depth_error:_FillValue = -999.f ; liquid_optical_depth_error:missing_value = -999.f ; liquid_optical_depth_error:plot_range = 0.f, 1.f ; liquid_optical_depth_error:plot_scale = "linear" ; float liquid_water_content_extinction_error_corr(time, height) ; liquid_water_content_extinction_error_corr:long_name = "Error correlation between natural logs of liquid water content and geometric extinction coefficient" ; liquid_water_content_extinction_error_corr:units = "1" ; liquid_water_content_extinction_error_corr:_FillValue = -999.f ; liquid_water_content_extinction_error_corr:missing_value = -999.f ; C L

L V

liquid_water_content_extinction_error_corr:plot_range = -1.f, 1.f ; liquid_water_content_extinction_error_corr:plot_scale = "linear" ; float liquid_water_content_effective_radius_error_corr(time, height) ; liquid_water_content_effective_radius_error_corr:long_name = "Error correlation between natural logs of liquid water content and effective radius" ; liquid_water_content_effective_radius_error_corr:units = "1" ; liquid_water_content_effective_radius_error_corr:_FillValue = -999.f ; liquid_water_content_effective_radius_error_corr:missing_value = -999.f ; liquid_water_content_effective_radius_error_corr:plot_range = -1.f, 1.f ; liquid_water_content_effective_radius_error_corr:plot_scale = "linear" ; float liquid_water_content_D0_error_corr(time, height) ; liquid_water_content_D0_error_corr:long_name = "Error correlation between natural logs of liquid water content and median volume diameter" ; liquid_water_content_D0_error_corr:units = "1" ; liquid_water_content_D0_error_corr:_FillValue = -999.f ; C L

L V

liquid_water_content_D0_error_corr:missing_value = -999.f ; liquid_water_content_D0_error_corr:plot_range = -1.f, 1.f ; liquid_water_content_D0_error_corr:plot_scale = "linear" ; int rain_n_x(time) ; rain_n_x:long_name = "Number of state-vector elements associated with rain" ; float rain_cost_function(time) ; rain_cost_function:long_name = "Contribution to final cost function from rain" ; float rain_cost_function_prior(time) ; rain_cost_function_prior:long_name = "Contribution to final cost function from rain prior constraints" ; float rain_cost_function_regularization(time) ; rain_cost_function_regularization:long_name = "Contribution to final cost function from rain regularization constraints" ; float rain_dof(time) ; rain_dof:long_name = "Number of degrees of freedom in retrieval of rain" ; C L

L V

rain_dof:_FillValue = -999.f ; rain_dof:missing_value = -999.f ; float rain_rate(time, height) ; rain_rate:long_name = "Rain rate" ; rain_rate:units = "kg m-2 s-1" ; rain_rate:_FillValue = -999.f ; rain_rate:missing_value = -999.f ; rain_rate:plot_range = 1.e-07f, 0.01f ; rain_rate:plot_scale = "logarithmic" ; float rain_rate_error(time, height) ; rain_rate_error:long_name = "One-sigma error in natural logarithm of rain rate" ; rain_rate_error:units = "1" ; rain_rate_error:_FillValue = -999.f ; rain_rate_error:missing_value = -999.f ; rain_rate_error:plot_range = 0.f, 1.f ; C L

L V

rain_rate_error:plot_scale = "linear" ; float rain_rate_error_corr_scale(time, height) ; rain_rate_error_corr_scale:long_name = "Decorrelation scale in error covariance of rain rate" ; rain_rate_error_corr_scale:units = "m" ; rain_rate_error_corr_scale:_FillValue = -999.f ; rain_rate_error_corr_scale:missing_value = -999.f ; rain_rate_error_corr_scale:plot_range = 0.f, 1000.f ; rain_rate_error_corr_scale:plot_scale = "linear" ; float rain_rate_avgkern_sum(time, height) ; rain_rate_avgkern_sum:long_name = "Row-sum of averaging kernel of rain rate" ; rain_rate_avgkern_sum:units = "1" ; rain_rate_avgkern_sum:_FillValue = -999.f ; rain_rate_avgkern_sum:missing_value = -999.f ; rain_rate_avgkern_sum:plot_range = -0.25f, 1.75f ; C L

L V

rain_rate_avgkern_sum:plot_scale = "linear" ; float rain_rate_avgkern_corr_scale(time, height) ; rain_rate_avgkern_corr_scale:long_name = "Decorrelation scale in averaging kernel of rain rate" ; rain_rate_avgkern_corr_scale:units = "m" ; rain_rate_avgkern_corr_scale:_FillValue = -999.f ; rain_rate_avgkern_corr_scale:missing_value = -999.f ; rain_rate_avgkern_corr_scale:plot_range = 0.f, 1000.f ; rain_rate_avgkern_corr_scale:plot_scale = "linear" ; float rain_N0star(time, height) ; rain_N0star:long_name = "Rain normalized number concentration" ; rain_N0star:units = "m-4" ; rain_N0star:_FillValue = -999.f ; rain_N0star:missing_value = -999.f ; rain_N0star:plot_range = 100000.f, 1.e+09f ; C L

L V

rain_N0star:plot_scale = "logarithmic" ; float rain_N0star_error(time, height) ; rain_N0star_error:long_name = "One-sigma error in natural logarithm of rain normalized number concentration" ; rain_N0star_error:units = "1" ; rain_N0star_error:_FillValue = -999.f ; rain_N0star_error:missing_value = -999.f ; rain_N0star_error:plot_range = 0.f, 1.f ; rain_N0star_error:plot_scale = "linear" ; float rain_N0star_error_corr_scale(time, height) ; rain_N0star_error_corr_scale:long_name = "Decorrelation scale in error covariance of rain normalized number concentration" ; rain_N0star_error_corr_scale:units = "m" ; rain_N0star_error_corr_scale:_FillValue = -999.f ; rain_N0star_error_corr_scale:missing_value = -999.f ; C L

L V

rain_N0star_error_corr_scale:plot_range = 0.f, 1000.f ; rain_N0star_error_corr_scale:plot_scale = "linear" ; float rain_water_content(time, height) ; rain_water_content:long_name = "Rain water content" ; rain_water_content:units = "kg m-3" ; rain_water_content:_FillValue = -999.f ; rain_water_content:missing_value = -999.f ; rain_water_content:plot_range = 1.e-08f, 0.0005f ; rain_water_content:plot_scale = "logarithmic" ; float rain_water_content_error(time, height) ; rain_water_content_error:long_name = "One-sigma error in natural logarithm of rain water content" ; rain_water_content_error:units = "1" ; rain_water_content_error:_FillValue = -999.f ; rain_water_content_error:missing_value = -999.f ; C L

L V

rain_water_content_error:plot_range = 0.f, 1.f ; rain_water_content_error:plot_scale = "linear" ; float rain_water_content_error_corr_scale(time, height) ; rain_water_content_error_corr_scale:long_name = "Decorrelation scale in error covariance of rain water content" ; rain_water_content_error_corr_scale:units = "m" ; rain_water_content_error_corr_scale:_FillValue = -999.f ; rain_water_content_error_corr_scale:missing_value = -999.f ; rain_water_content_error_corr_scale:plot_range = 0.f, 1000.f ; rain_water_content_error_corr_scale:plot_scale = "linear" ; float rain_D0(time, height) ; rain_D0:long_name = "Rain median volume diameter" ; rain_D0:units = "m" ; rain_D0:_FillValue = -999.f ; rain_D0:missing_value = -999.f ; C L

L V

rain_D0:plot_range = 0.f, 0.001f ; rain_D0:plot_scale = "linear" ; float rain_D0_error(time, height) ; rain_D0_error:long_name = "One-sigma error in natural logarithm of rain median volume diameter" ; rain_D0_error:units = "1" ; rain_D0_error:_FillValue = -999.f ; rain_D0_error:missing_value = -999.f ; rain_D0_error:plot_range = 0.f, 0.0001f ; rain_D0_error:plot_scale = "linear" ; float rain_D0_error_corr_scale(time, height) ; rain_D0_error_corr_scale:long_name = "Decorrelation scale in error covariance of rain median volume diameter" ; rain_D0_error_corr_scale:units = "m" ; rain_D0_error_corr_scale:_FillValue = -999.f ; C L

L V

rain_D0_error_corr_scale:missing_value = -999.f ; rain_D0_error_corr_scale:plot_range = 0.f, 1000.f ; rain_D0_error_corr_scale:plot_scale = "linear" ; float rain_rate_water_content_error_corr(time, height) ; rain_rate_water_content_error_corr:long_name = "Error correlation between natural logs of rain rate and water content" ; rain_rate_water_content_error_corr:units = "1" ; rain_rate_water_content_error_corr:_FillValue = -999.f ; rain_rate_water_content_error_corr:missing_value = -999.f ; rain_rate_water_content_error_corr:plot_range = -1.f, 1.f ; rain_rate_water_content_error_corr:plot_scale = "linear" ; float rain_rate_D0_error_corr(time, height) ; rain_rate_D0_error_corr:long_name = "Error correlation between natural logs of rain rate and median volume diameter" ; rain_rate_D0_error_corr:units = "1" ; C L

L V

rain_rate_D0_error_corr:_FillValue = -999.f ; rain_rate_D0_error_corr:missing_value = -999.f ; rain_rate_D0_error_corr:plot_range = -1.f, 1.f ; rain_rate_D0_error_corr:plot_scale = "linear" ; int melting_ice_n_x(time) ; melting_ice_n_x:long_name = "Number of state-vector elements associated with melting_ice" ; float melting_ice_cost_function(time) ; melting_ice_cost_function:long_name = "Contribution to final cost function from melting_ice" ; float melting_ice_cost_function_prior(time) ; melting_ice_cost_function_prior:long_name = "Contribution to final cost function from melting_ice prior constraints" ; float melting_ice_cost_function_regularization(time) ; C L

L V

melting_ice_cost_function_regularization:long_name = "Contribution to final cost function from melting_ice regularization constraints" ; float melting_ice_dof(time) ; melting_ice_dof:long_name = "Number of degrees of freedom in retrieval of melting_ice" ; melting_ice_dof:_FillValue = -999.f ; melting_ice_dof:missing_value = -999.f ; float melting_layer_scaling_factor(time) ; melting_layer_scaling_factor:long_name = "Factor by which the radar attenuation by the melting layer has been multiplied" ; melting_layer_scaling_factor:units = "1" ; melting_layer_scaling_factor:_FillValue = -999.f ; melting_layer_scaling_factor:missing_value = -999.f ; melting_layer_scaling_factor:plot_range = 0.1f, 10.f ; melting_layer_scaling_factor:plot_scale = "logarithmic" ; C L

L V

float radar_melting_layer_attenuation(time) ; radar_melting_layer_attenuation:long_name = "Two-way melting-layer attenuation at a wavelength of -1 m" ; radar_melting_layer_attenuation:units = "dB" ; radar_melting_layer_attenuation:_FillValue = -999.f ; radar_melting_layer_attenuation:missing_value = -999.f ; radar_melting_layer_attenuation:plot_range = 0.f, 10.f ; radar_melting_layer_attenuation:plot_scale = "logarithmic" ; int aerosol_n_x(time) ; aerosol_n_x:long_name = "Number of state-vector elements associated with aerosol" ; float aerosol_cost_function(time) ; aerosol_cost_function:long_name = "Contribution to final cost function from aerosol" ; float aerosol_cost_function_prior(time) ; C L

L V

aerosol_cost_function_prior:long_name = "Contribution to final cost function from aerosol prior constraints" ; float aerosol_cost_function_regularization(time) ; aerosol_cost_function_regularization:long_name = "Contribution to final cost function from aerosol regularization constraints" ; float aerosol_dof(time) ; aerosol_dof:long_name = "Number of degrees of freedom in retrieval of aerosol" ; aerosol_dof:_FillValue = -999.f ; aerosol_dof:missing_value = -999.f ; float aerosol_median_volume_diameter(time, height) ; aerosol_median_volume_diameter:long_name = "Aerosol median volume diameter" ; aerosol_median_volume_diameter:units = "m" ; aerosol_median_volume_diameter:_FillValue = -999.f ; aerosol_median_volume_diameter:missing_value = -999.f ; aerosol_median_volume_diameter:plot_range = 1.e-07f, 0.01f ; C L

L V

aerosol_median_volume_diameter:plot_scale = "logarithmic" ; float aerosol_median_volume_diameter_error(time, height) ; aerosol_median_volume_diameter_error:long_name = "One-sigma error in natural logarithm of aerosol median volume diameter" ; aerosol_median_volume_diameter_error:units = "1" ; aerosol_median_volume_diameter_error:_FillValue = -999.f ; aerosol_median_volume_diameter_error:missing_value = -999.f ; aerosol_median_volume_diameter_error:plot_range = 0.f, 1.f ; aerosol_median_volume_diameter_error:plot_scale = "linear" ; float aerosol_median_volume_diameter_error_corr_scale(time, height) ; aerosol_median_volume_diameter_error_corr_scale:long_name = "Decorrelation scale in error covariance of aerosol median volume diameter" ; aerosol_median_volume_diameter_error_corr_scale:units = "m" ; aerosol_median_volume_diameter_error_corr_scale:_FillValue = -999.f ; aerosol_median_volume_diameter_error_corr_scale:missing_value = -999.f ; C L

L V

aerosol_median_volume_diameter_error_corr_scale:plot_range = 0.f, 1000.f ; aerosol_median_volume_diameter_error_corr_scale:plot_scale = "linear" ; float aerosol_number_concentration(time, height) ; aerosol_number_concentration:long_name = "Aerosol total number concentration" ; aerosol_number_concentration:units = "m-3" ; aerosol_number_concentration:_FillValue = -999.f ; aerosol_number_concentration:missing_value = -999.f ; aerosol_number_concentration:plot_range = 1.e+07f, 1.e+09f ; aerosol_number_concentration:plot_scale = "logarithmic" ; float aerosol_number_concentration_error(time, height) ; aerosol_number_concentration_error:long_name = "One-sigma error in natural logarithm of aerosol total number concentration" ; aerosol_number_concentration_error:units = "1" ; aerosol_number_concentration_error:_FillValue = -999.f ; aerosol_number_concentration_error:missing_value = -999.f ; C L

L V

aerosol_number_concentration_error:plot_range = 0.f, 1.f ; aerosol_number_concentration_error:plot_scale = "linear" ; float aerosol_number_concentration_error_corr_scale(time, height) ; aerosol_number_concentration_error_corr_scale:long_name = "Decorrelation scale in error covariance of aerosol total number concentration" ; aerosol_number_concentration_error_corr_scale:units = "m" ; aerosol_number_concentration_error_corr_scale:_FillValue = -999.f ; aerosol_number_concentration_error_corr_scale:missing_value = -999.f ; aerosol_number_concentration_error_corr_scale:plot_range = 0.f, 1000.f ; aerosol_number_concentration_error_corr_scale:plot_scale = "linear" ; float aerosol_number_concentration_avgkern_sum(time, height) ; aerosol_number_concentration_avgkern_sum:long_name = "Row-sum of averaging kernel of aerosol total number concentration" ; aerosol_number_concentration_avgkern_sum:units = "1" ; aerosol_number_concentration_avgkern_sum:_FillValue = -999.f ; C L

L V

aerosol_number_concentration_avgkern_sum:missing_value = -999.f ; aerosol_number_concentration_avgkern_sum:plot_range = -0.25f, 1.75f ; aerosol_number_concentration_avgkern_sum:plot_scale = "linear" ; float aerosol_number_concentration_avgkern_corr_scale(time, height) ; aerosol_number_concentration_avgkern_corr_scale:long_name = "Decorrelation scale in averaging kernel of aerosol total number concentration" ; aerosol_number_concentration_avgkern_corr_scale:units = "m" ; aerosol_number_concentration_avgkern_corr_scale:_FillValue = -999.f ; aerosol_number_concentration_avgkern_corr_scale:missing_value = -999.f ; aerosol_number_concentration_avgkern_corr_scale:plot_range = 0.f, 1000.f ; aerosol_number_concentration_avgkern_corr_scale:plot_scale = "linear" ; float aerosol_mass_content(time, height) ; aerosol_mass_content:long_name = "Aerosol mass content" ; aerosol_mass_content:units = "kg m-3" ; aerosol_mass_content:_FillValue = -999.f ; C L

L V

aerosol_mass_content:missing_value = -999.f ; aerosol_mass_content:plot_range = 1.e-08f, 0.0001f ; aerosol_mass_content:plot_scale = "logarithmic" ; float aerosol_mass_content_error(time, height) ; aerosol_mass_content_error:long_name = "One-sigma error in natural logarithm of aerosol mass content" ; aerosol_mass_content_error:units = "1" ; aerosol_mass_content_error:_FillValue = -999.f ; aerosol_mass_content_error:missing_value = -999.f ; aerosol_mass_content_error:plot_range = 0.f, 1.f ; aerosol_mass_content_error:plot_scale = "linear" ; float aerosol_mass_content_error_corr_scale(time, height) ; aerosol_mass_content_error_corr_scale:long_name = "Decorrelation scale in error covariance of aerosol mass content" ; aerosol_mass_content_error_corr_scale:units = "m" ; C L

L V

aerosol_mass_content_error_corr_scale:_FillValue = -999.f ; aerosol_mass_content_error_corr_scale:missing_value = -999.f ; aerosol_mass_content_error_corr_scale:plot_range = 0.f, 1000.f ; aerosol_mass_content_error_corr_scale:plot_scale = "linear" ; float aerosol_extinction(time, height) ; aerosol_extinction:long_name = "Aerosol geometric extinction coefficient" ; aerosol_extinction:units = "m-1" ; aerosol_extinction:_FillValue = -999.f ; aerosol_extinction:missing_value = -999.f ; aerosol_extinction:plot_range = 1.e-06f, 0.1f ; aerosol_extinction:plot_scale = "logarithmic" ; float aerosol_extinction_error(time, height) ; aerosol_extinction_error:long_name = "One-sigma error in natural logarithm of aerosol geometric extinction coefficient" ; aerosol_extinction_error:units = "1" ; C L

L V

aerosol_extinction_error:_FillValue = -999.f ; aerosol_extinction_error:missing_value = -999.f ; aerosol_extinction_error:plot_range = 0.f, 1.f ; aerosol_extinction_error:plot_scale = "linear" ; float aerosol_extinction_error_corr_scale(time, height) ; aerosol_extinction_error_corr_scale:long_name = "Decorrelation scale in error covariance of aerosol geometric extinction coefficient" ; aerosol_extinction_error_corr_scale:units = "m" ; aerosol_extinction_error_corr_scale:_FillValue = -999.f ; aerosol_extinction_error_corr_scale:missing_value = -999.f ; aerosol_extinction_error_corr_scale:plot_range = 0.f, 1000.f ; aerosol_extinction_error_corr_scale:plot_scale = "linear" ; float aerosol_median_volume_diameter_number_concentration_error_corr(time, height) ; C L

L V

aerosol_median_volume_diameter_number_concentration_error_corr:long_name = "Error correlation between natural logs of aerosol median volume diameter and total number concentration" ; aerosol_median_volume_diameter_number_concentration_error_corr:units = "1" ; aerosol_median_volume_diameter_number_concentration_error_corr:_FillValue = -999.f ; aerosol_median_volume_diameter_number_concentration_error_corr:missing_value = -999.f ; aerosol_median_volume_diameter_number_concentration_error_corr:plot_range = -1.f, 1.f ; aerosol_median_volume_diameter_number_concentration_error_corr:plot_scale = "linear" ; float aerosol_median_volume_diameter_mass_content_error_corr(time, height) ; aerosol_median_volume_diameter_mass_content_error_corr:long_name = "Error correlation between natural logs of aerosol median volume diameter and mass content" ; C L

L V

aerosol_median_volume_diameter_mass_content_error_corr:units = "1" ; aerosol_median_volume_diameter_mass_content_error_corr:_FillValue = -999.f ; aerosol_median_volume_diameter_mass_content_error_corr:missing_value = -999.f ; aerosol_median_volume_diameter_mass_content_error_corr:plot_range = -1.f, 1.f ; aerosol_median_volume_diameter_mass_content_error_corr:plot_scale = "linear" ; float aerosol_median_volume_diameter_extinction_error_corr(time, height) ; aerosol_median_volume_diameter_extinction_error_corr:long_name = "Error correlation between natural logs of aerosol median volume diameter and geometric extinction coefficient" ; aerosol_median_volume_diameter_extinction_error_corr:units = "1" ; aerosol_median_volume_diameter_extinction_error_corr:_FillValue = -999.f ; aerosol_median_volume_diameter_extinction_error_corr:missing_value = -999.f ; aerosol_median_volume_diameter_extinction_error_corr:plot_range = -1.f, 1.f ; aerosol_median_volume_diameter_extinction_error_corr:plot_scale = "linear" ; int CloudSat_n_y(time) ; C L

L V

CloudSat_n_y:long_name = "Number of observation-vector elements associated with CloudSat" ; float CloudSat_cost_function(time) ; CloudSat_cost_function:long_name = "Contribution to final cost function from CloudSat" ; float CloudSat_Z_fwd(time, height) ; CloudSat_Z_fwd:long_name = "Forward modelled radar reflectivity factor" ; CloudSat_Z_fwd:units = "dBZ" ; CloudSat_Z_fwd:_FillValue = -999.f ; CloudSat_Z_fwd:missing_value = -999.f ; CloudSat_Z_fwd:plot_range = -40.f, 20.f ; CloudSat_Z_fwd:plot_scale = "linear" ; float CloudSat_Z(time, height) ; CloudSat_Z:long_name = "Radar reflectivity factor" ; CloudSat_Z:units = "dBZ" ; C L

L V

CloudSat_Z:_FillValue = -999.f ; CloudSat_Z:missing_value = -999.f ; CloudSat_Z:plot_range = -40.f, 20.f ; CloudSat_Z:plot_scale = "linear" ; float CloudSat_optical_depth_fwd(time) ; CloudSat_optical_depth_fwd:long_name = "Forward modelled atmospheric optical depth at the wavelength of CloudSat" ; CloudSat_optical_depth_fwd:units = "1" ; CloudSat_optical_depth_fwd:_FillValue = -999.f ; CloudSat_optical_depth_fwd:missing_value = -999.f ; CloudSat_optical_depth_fwd:plot_range = 0.f, 100.f ; CloudSat_optical_depth_fwd:plot_scale = "logarithmic" ; int Calipso_n_y(time) ; Calipso_n_y:long_name = "Number of observation-vector elements associated with Calipso" ; C L

L V

float Calipso_cost_function(time) ; Calipso_cost_function:long_name = "Contribution to final cost function from Calipso" ; float Calipso_bscat_fwd(time, height) ; Calipso_bscat_fwd:long_name = "Forward modelled apparent backscatter coefficient" ; Calipso_bscat_fwd:units = "m-1 sr-1" ; Calipso_bscat_fwd:_FillValue = -999.f ; Calipso_bscat_fwd:missing_value = -999.f ; Calipso_bscat_fwd:plot_range = 1.e-07f, 0.001f ; Calipso_bscat_fwd:plot_scale = "logarithmic" ; float Calipso_bscat(time, height) ; Calipso_bscat:long_name = "Apparent backscatter coefficient" ; Calipso_bscat:units = "m-1 sr-1" ; Calipso_bscat:_FillValue = -999.f ; Calipso_bscat:missing_value = -999.f ; C L

L V

Calipso_bscat:plot_range = 1.e-07f, 0.001f ; Calipso_bscat:plot_scale = "logarithmic" ; float Calipso_bscat_ext_ratio(time, height) ; Calipso_bscat_ext_ratio:long_name = "Calipso ratio of backscatter to extinction coefficient" ; Calipso_bscat_ext_ratio:units = "sr-1" ; Calipso_bscat_ext_ratio:_FillValue = -999.f ; Calipso_bscat_ext_ratio:missing_value = -999.f ; Calipso_bscat_ext_ratio:plot_range = 0.f, 0.1f ; Calipso_bscat_ext_ratio:plot_scale = "linear" ; float Calipso_optical_depth_fwd(time) ; Calipso_optical_depth_fwd:long_name = "Forward modelled atmospheric optical depth at the wavelength of Calipso" ; Calipso_optical_depth_fwd:units = "1" ; Calipso_optical_depth_fwd:_FillValue = -999.f ; C L

L V

Calipso_optical_depth_fwd:missing_value = -999.f ; Calipso_optical_depth_fwd:plot_range = 0.f, 100.f ; Calipso_optical_depth_fwd:plot_scale = "logarithmic" ;

// global attributes: :config = "..." ; }

Note that for brevity, the “config” global attribute has not been shown; this is simply a copy of the primary configuration file.