The ISCCP simulator is a FORTRAN77 code that can be used to take cloud and atmosphere
information from atmospheric models and convert it into something that is
comparable to data from the ISCCP. It was written by Steve Klein ( sak@gfdl.gov ) and Mark
Webb (mark.webb@metoffice.com) and is available for download from the GCSS
dime site http://gcss-dime.giss.nasa.gov/simulator.html .
There are two options for producing the ISCCP diagnostics from your model.
Running offline - the first is to save instantaneous 'history' output of the relevant cloud, humidity and temperature
variables (plus a lit points mask) from your model, and to run the simulator 'offline' on these. The results can be
averaged and submitted along with the other more standard averaged quantities. This is the way the the simulator is
usually run at first.
Running in line - calling the code directly from the model can take a while to get working, but once in place makes
producing the ISCCP diagnostics for a range of integrations much easier. The simulator is now running in models
at the Hadley Centre, NCAR, BMRC and CSU.
The code takes inputs the following inputs:
| INTEGER npoints |
! number of model points in the horizontal |
| INTEGER npoints |
! number of model points in the horizontal |
| INTEGER nlev |
! number of model levels in column |
| INTEGER ncol |
! number of subcolumns |
| INTEGER sunlit(npoints) |
! 1 for day points, 0 for night time |
| INTEGER seed(npoints) |
! seed value for random number generator ( see Numerical Recipes Chapter 7) |
| REAL pfull(npoints,nlev) |
! pressure of full model levels (Pascals) (pfull(npoints,1) is top level of model; pfull(npoints,nlev) is bottom
level of model) |
| REAL phalf(npoints,nlev+1) |
! pressure of half model levels (Pascals) (phalf(npoints,1) is top of model; phalf(npoints,nlev+1) is the
surface pressure) |
| REAL qv(npoints,nlev) |
! water vapor specific humidity (kg vapor/ kg air) on full model
levels |
| REAL cc(npoints,nlev) |
! input total cloud cover in
each model level (fraction) (Note: This is the horizonatal area of each grid box
covered by clouds) |
| REAL conv(npoints,nlev) |
! input convective cloud cover
in each model level (fraction) (Note: This is the horizontal area of each grid
box covered by convective clouds) |
| REAL dtau_s(npoints,nlev) |
! mean 0.67 micron optical
depth of stratiform clouds in each model level (Note: this the cloud optical
depth of only the cloudy part of the grid box, it is not weighted with the 0
cloud optical depth of the clear part of the grid box) |
| REAL dtau_c(npoints,nlev) |
! mean 0.67 micron optical depth of convective clouds in each model
level. Same note applies as in dtau_s. |
| INTEGER overlap |
! overlap type (1=max, 2=rand, 3=max/rand) |
| INTEGER top_height |
! 1 = adjust top height using
both a computed infrared brightness temperature and the visible optical depth to
adjust cloud top pressure. (Note that this calculation is most appropriate to
compare to ISCCP data during sunlit hours.) |
| REAL tautab(0:255) |
! ISCCP table for converting count value to optical thickness ( Note
not required for CFMIP ) |
| INTEGER invtau(-20:45000) |
! ISCCP table for converting optical thickness to count value ( Note
not required for CFMIP ) |
| REAL skt(npoints) |
! skin Temperature (K) |
| REAL emsfc_lw |
! 10.5 micron emissivity of surface (fraction) |
| REAL at(npoints,nlev) |
! temperature in each model level (K) |
| REAL dem_s(npoints,nlev) |
! 10.5 micron longwave emissivity of stratiform clouds in each model
level. Same note applies as in dtau_s. |
| REAL dem_c(npoints,nlev) |
! 10.5 micron longwave emissivity of convective clouds in each model
level. Same note applies as in dtau_s. |
If you do not have separate convective clouds in your model, the convective cloud inputs can be set to zero values.
Outputs required for CFMIP - the 49 fields in the FQ_ISCCP array.
Also, for CFMIP, the tautab and invtau tables input tables are not required - these inputs can be commented
out along with the calculation of the the output variables totalcldarea, meanptop, meantaucld, boxtau,
boxptop which are not required for CFMIP.
Points to be aware of when using the code
1) Are you running a correct version? CFMIP requires the latest version (3.4). This
version has been optimised for vector architectures but should run reasonably efficiently
on other architectures.
NCOL sets the sample size within the gridbox and should be set bearing in mind the amount of
averaging you will be doing on your outputs and the frequency with which you run the simulator
on your model's instantaneous cloud data.
The rule of thumb is NCOL=100*calling freq in hours / averaging period in days. For instance:
| Averaging period |
I.S. calling frequency |
NCOL |
| Monthly |
3 hourly |
10= 100*3/30 |
| Monthly |
every 15 hrs |
50 = 100*15/30 |
| Daily |
3 hourly |
300 = 100*3/1 |
*WARNING* Running with NCOL < 10 is not recommended!
Please note that the README file at version 3.4 is slightly out of date in this regard.
2) Set top_height=1 for best comparisons with ISCCP IR-VIS.
3) Setting the seed correctly - the simulator requires a seed for
the random number generator - it is important to set this correctly
( see the README for details )
4) You are strongly advised to check the results against your total cloud amount. This can be done
by adding up all of the elements of the fq_isccp array and comparing with your model's diagnosis of
total cloud amount. If you do not understand the reasons for any
discrepancies ( e.g. all vs sunlit points ) your ISCCP diagnostics may not be valid.
5) Averaging of outputs from the ISCCP simulator.
It is important to be careful when averaging the outputs from the IS as some variables are output
only on sunlit points. The way that I do this is to average the outputs as they come out, and also
to average the values of the sunlit variable ( 0 = night, 1 = day ) ( note that the average needs
to be a REAL although sunlit is an INTEGER.) The true average of the variables output on sunlit
points can later be calculated by dividing the variable average by the average of the sunlit
indicator. An alternative approach is to set the nighttime points in the daytime only diagnostics
to some sort of missing data indicator (not 0 though!) and average using some code that understands this.
Naming convention for ISCCP variables.
An extra naming convention will be required for the ISCCP diagnostics - it has been proposed that it should be:
pc1tau0
pc1tau1
pc1tau2
pc1tau3
....
pc7tau6
pc7tau6
where pc1tau0 = pc<180; 0<tau<taumin
pc1tau1 = pc<180;taumin<tau<1.3
pc1tau2 = pc<180; 1.3<tau<3.6
....
pc7tau5 = 800<pc ; 23<tau<60
pc7tau6 = 800<pc ; 60<tau
|