$Header: /fs/cgd/csm/models/CVS.REPOS/atm/ccm_crm/doc/Attic/FAQ,v 1.1.2.4 1999/01/23 17:11:16 zender Exp $ -*-text-*-

This is the Frequently Asked Questions (FAQ) list for the NCAR CCM
Column Radiation Model, hereafter CRM. Please read this file before
sending questions to the CRM maintainers. So that others may benefit
from your experience with the CRM, send corrections and additions to
this material to zender@ncar.ucar.edu. 

Questions:
Section 1: Background
1.1 Where can I get further information on the CRM?

Section 2: Building the CRM
2.1 Does the CRM work in single precision?

Section 3: Running the CRM
3.1 How does one run the CRM?
3.2 Do older versions of CRM work with the current input files?
3.3 How do I correctly specify longitude and calendar day?
3.4 Does the CRM handle the equation of time correctly?
3.5 Why is the CRM printing an IEEE floating-point warning message?

Section 4: Interpreting the results
4.1 Why is the cloud forcing non-zero for clear sky simulations?
4.2 How do I easily compare the results of multiple CRM runs?
4.3 Is the "tauvis" input parameter the Aerosol Optical Depth? 

Section 5: Modifying the CRM
5.1 How do I change the number of vertical levels?

Answers:
1.1 Where can I get further information on the CRM

The CRM homepage at http://www.cgd.ucar.edu/cms/crm is the central
repository for CRM information.

The physical parameterizations used in the CRM, and the correct usage
of the control parameters (e.g., tokens in params.h and misc.h) are
fully described in the documentation accompanying the CCM3
(http://www.cgd.ucar.edu/cms/ccm3). 

2.1 Does the CRM work in single precision?
As of CRM 3.6, the CRM is only supported in double precision (meaning
floats are stored internally as real*8, which is actually single
precision on Cray machines). This decision was made in order to
maintain CRM compabability with the CCM build environment,
specifically to take advantage of the CCM NCPREC token in
misc.h. Everything in the CRM should still work in single precision,
except the netCDF output routines netcdf.F. If these are not important
to you, then go ahead and compile and run the CRM in single
precision. In order to fix netCDF.F for single precision, you will
need to change the nf_put_var_double() calls to nf_put_var_real()
calls. 

3.1 How does one run the CRM?
Sample input and output data files are included in the data
directory. A mid-latittude clear sky profile 'mls_clr.in', and
a cloudy sky profile 'mls_cld.in'. These are text files containing
pressures, temperatures, cloud information, etc. required for input
(for more information, see comments at end of these files). These
sample input files show the format the CRM requires. Running the CRM
with a different resolution than the default (currently 18) requires 
additional rows of data at the appropriate places in the input file.

The CRM reads/writes text I/O standard input and output, Fortran unit 
numbers 5 and 6, respectively. Thus, the correct command to run the
CRM is of the form
crm < input_file > output_file

The sample output files are called 'mls_clr.out' and 'mls_cld.out';
these result from running the CCM3 CRM compiled on a Sun workstation
with the corresponding input data files, i.e., from the command 
crm < mls_clr.in >! mls_clr.out 

3.2 Do older versions of CRM work with the current input files?
Yes and no: CRM versions 1.x will run with current input files because
the current input files were designed to be backwards compatible with
CRM 1.x. However, CRM 1.x does not read or use any information beyond
the CO2 volume mixing ratio line. For example, CRM 1.x will not use
any user supplied information about CH4 abundance or longitude or
year. CRM 1.x can be made to simulate radiation profiles at a given
longitude only if the Julian day of year (calendar day) is specified
in Local Mean Time (LMT) in the input file. Note however, that doing
this will confuse CRM 2.x if it reads the same input file with a
non-zero longitude. CRM 1.x is no longer supported and it highly
recommended that users upgrad to CRM 2.x to avoid this confusion.

3.3 How do I correctly specify the longitude and time?
The Julian day of year, also known as the calendar day (calday in the
code), is always specified in Greenwich Mean Time (GMT).  For example,
1.5 is Greenwich noon on January 1st, 2.0 is Greenwich midnight of
January 2nd. 31.5 and 32.5 are GMT noontimes for January 31st and
February 1st, respectively. Longitude is specified in degrees east of
Greenwich.  The CRM uses the specified year, latitude, longitude and
GMT to compute the correct Sun-Earth distance and solar zenith angle. 
Note, however, that the CRM does not (yet) implement the equation of
time (see below). 

3.4 Does the CRM handle the equation of time correctly?

The CRM does not adjust zenith angles to account for the equation of
time (EOT). Thus, given a (lat,lon,GMT) triplet, the CRM returns the
zenith angle assuming EOT=0.0. This can lead to instantaneous biases
of up to 17 minutes of time, or 4 degrees in angle, or 50 W m-2 in TOA
insolation. However, the diurnal average of this error is 0.0 W m-2.
In other words, a given (lat,lon,GMT) may receive too much sunlight in
the morning, but that afternoon it will receive too little
sunlight. The diurnal bias is very very very small, and, I believe,
averages to exactly 0.0 W m-2 globally (at TOA).

In the future the CRM will offer the ability to specify the exact
zenith angle, or, alternatively, enable table lookups of zenith angles
given (lat,lon,GMT). This mode of operation will not reproduce CCM
answers, but will make CRM more useful at analyzing field experiments
and in intercomparison studies. Whether the CCM will change to include
the equation of time is unknown.

Here is an interim workaround to use exact zenith angles in the
current CRM:
If you know the EOT then you can set the CRM longitude to 0.0 
and specify the local true solar time (TST=LMT-EOT) at the your
(lat,lon) site instead of GMT for the calendar day input
variable. This is somewhat confusing, but it does work.

3.5 Why is the CRM printing an IEEE floating-point warning message?
An IEEE floating-point warning looks something like this:

 Note: IEEE floating-point exception flags raised: 
    Inexact;  Underflow; 
 See the Numerical Computation Guide, ieee_flags(3M) 

This simply means the CRM has performed numerical operations which
were ill-conditioned, given the precision of the code and the actual
numbers involved. This can occur, for example, at very large zenith
angles. The Sun Fortran compiler is known to erroneously print this
message whether or not the indicated flags were set. 

4.1 Why is the cloud forcing non-zero for clear sky simulations?
Even when the cloud fraction is 0.0 the clear sky routines are still
invoked to compute the "clear sky" flux profile, even though the full,
all sky routines have actually just computed a "cloudy sky" flux
profile (albeit with 0% cloud). The cloud forcing is the difference of
these "clear" and "cloudy" profiles. Since the clear sky routines
(e.g. radclr.F) contain different (cruder but more efficient) physics 
parameterizations, they do not give the same answers as the full,
all sky routines run with 0.0% cloud. Thus their difference, the
diagnosed cloud forcing, is non-zero for 0% cloud. It is important to
note that these approximations never affect the CCM physics because
the "clear sky" fluxes are only used for diagnostic purposes (i.e.,
computing cloud forcing).

This was a design decision made for CCM2. For diagnostic purposes it
is less desirable to have a step function jump in the cloud forcing as
the sky approaches 0% cloud cover, than to have a slightly incorrect
but smooth asymptotic limit (~2 W/m2 instead of 0 W/m2).

4.2 How do I easily compare the results of multiple CRM runs?
If all the text output files are named `*.out' then you can summarize
specific fields in the printed output by using a one line Perl
commmand. This example prints the TOA SW cloud forcing from all the
files: 

/contrib/bin/perl -n -e 'if(/SW cloud forcing TOA/){print $ARGV.": ".$_;}' *.out

4.3 Is the "tauvis" input parameter the Aerosol Optical Depth? 

The short answer is, currently, no. See the file AEROSOL for details. 

5.1 How do I change the number of vertical levels?
The number of levels for the CRM is easily changed by editing the
preprocessor tokens PLEV and PLEVR in params.h to whatever number of
vertical levels are desired.  PLEV and PLEVR must be identical---the
CRM will behave unpredictably if they differ. The input data file must
specify values for all levels of data. If the CRM is unable to read
your input file, check to make sure that the input file specifies
exactly the same number of levels of data as the CRM expects to find,
based on params.h. 

End of CRM FAQ
