RELEASE_NOTES 31 Jan 2001 =============================================================================== Released this year, but not last year: + Scripts to build and run on SGI Workstations and Windows NT PC's No changes from last release: + BCON + DYNMEM (dynamic memory library) - used for parallel model applications + IOAPI + LUPROC + MECH (mechanism reader) - generate your own gas chem mech reactions files + MCIP Changed codes (release notes follow): + BUILD + CCTM + ECIP + ICON + JPROC + PARIO (parallel I/O library) - used for parallel model applications + PDM (Plume Dynamics Model) - necessary to run P-in-G + PROCAN (Process Analysis/IRR processor) - customize your process analysis + STENEX (STencil EXchange library) - for parallel model applications, but no-operation version necessary for serial applications All scripts: Moved from Fortran-77 (f77) and made strict use of the Fortran-90 compiler, although most of the code can still be compiled with f77. =============================================================================== BUILD RELEASE NOTES Changes have been made to m3bld, the program that reads a configuration file and creates a model executable: 1) m3bld will not now exit with an error message while trying to extract a file from the archive with the same name as one previously extracted. Instead it will give a warning and skip trying to retrieve the file a second time. This behavior enables the multiple use of the same files in different modules within the archive. 2) m3bld was modified to enable parsing of configuration files generated by Windows NT scripts. =============================================================================== CCTM RELEASE NOTES ------------------------------------------------------------------------------- Horizontal diffusion 1) A new horizontal diffusion module was added to the CCTM. The current unif hdiff module becomes too diffusive when applied to a resolution higher than 4 Km. The new module (called "multiscale") overcomes the difficulty by combining eddy diffusion components that counteract the numerical diffusivity and contribution from the wind shear component (For details of the algorithm, refer to: Byun, D.W., A. Lacer, P. Zannetti, R. Yamartino (20001), Eulerian Dispersion Modeling. Chapter 10 of Air Pollution Modeling (New Edition under development). Modules/Subroutines Affected: Class/Module(alias) Program Unit hdiff/multiscale hdiff.F hdiff/multiscale hcdiff3d.F hdiff/multiscale deform.F ------------------------------------------------------------------------------- Chemistry: mechanisms and solvers 2) A new gas-phase chemistry solver, the Modified Euler Backward Iterative (MEBI) has been added to CCTM. The MEBI solver originally developed by Hertel et al. and subsequently modified by Huang and Chang has been added as a new module under the CCTM class chem. Tests with the MEBI solver have shown it to be comparable in accuracy with SMVGEAR and faster than both the SMVGEAR and QSSA solvers, with the speed-ups being dependent on the computer platform. However, this version of the MEBI solver can be used only with the CB4_AE_AQ or CB4_AE2_AQ chemical mechanisms. Also, for accuracy reasons the solver has not been instrumented to perform integrated reaction rate analysis (IRR). To do IRR analysis, either SMVGEAR or QSSA must be used. However, the MEBI solver can be used to perform integrated process rate (IPR) analysis. Modules/Subroutines Affected: Class/Module(alias) Program Unit chem/mebi_cb4_1 hrc2o3.F chem/mebi_cb4_1 hrcalcks.F chem/mebi_cb4_1 hrconstgp1.F chem/mebi_cb4_1 hrconstgp2.F chem/mebi_cb4_1 hrdriver.F chem/mebi_cb4_1 hrhoxnr.F chem/mebi_cb4_1 hrinit.F chem/mebi_cb4_1 hrkernel.F chem/mebi_cb4_1 hrlubksub.F chem/mebi_cb4_1 hrludcmp.F chem/mebi_cb4_1 hrno3.F chem/mebi_cb4_1 hrnoxnr.F chem/mebi_cb4_1 hro1d.F chem/mebi_cb4_1 hrprodloss.F chem/mebi_cb4_1 hrrates.F chem/mebi_cb4_1 hrvargp1.F chem/mebi_cb4_1 hrvargp2.F Note that all mechanisms were updated to include a mechansim name variable in order that the MEBI solver can check if it's got the correct mechansim. ------------------------------------------------------------------------------- P-in-G 3) A P-in-G version of the mebi_cb4_1 solver was created so that P-in-G can be used consistently when the mebi_cb4_1 solver is used in the main model. The mebi_cb4_1 solver is sufficiently modular that only the driver needed to be modified for use in P-in-G. The other subroutines are symlinked from the mebi_cb4_1 module in the CVS archive. The ping_mebi_cb4_1 module is really comprised of two CVS sub_modules (aliases): _ping_mebi_cb4_1 and _ping_base, as are the other two P-in-G chem solver modules we have currently. ** Important caveat: this solver has not been sufficiently tested for the chemical regimes found in NOx rich plumes. There may be further modifications to control chemical timestep and or iteration convergence tolerances. For now, this has been installed to be a counterpart for the main model solver. See the text file HOW_TO_RUN_PING included in this distribution. Modules/Subroutines Affected: Class/Module(alias) Program Unit ping/ping_mebi_cb4_1 ping_hrdriver.F ------------------------------------------------------------------------------- Aerosols 4) Problems have been fixed in aero_subs.f, as listed below, which will result in Aitken and accumulation mode number and surface area concentrations improvements because of the contibution of additional primary species not previously treated. a) Change in subroutine EQL3: A branch was put in to skip the thermodynamics calculation if the relative humidity was less than 0.01 (one percent). The Aitken mode and accumulation mode water concentrations are set to 1.0e-30 micrograms per cubic meter. b) Change in subroutine NEWPART: The branch for relative humidity less than 0.89 has been eliminated. This corresponds to a change in the CSU nucleation routine cn21 where irhp(i) is limited to be no greater than 9. The original branch was put in to prevent an out of range subscript value for irhp(i) without altering the CSU code. c) Change in subroutine VSNdist5: Dpmin is set to a constant 0.01 for plotting the size distributions. Note: VSNdist5 is not currently called. d) Changes to subroutine AEROSTEP: The emission rates for the third moments in the Aitken and accumulation modes are defined as variables ( EMISM3AT, EMISM3AC ) and used in the calculation of the contribution of primary emissions to modal number and surface area production rates. This fixes a problem in the previous version which omitted these contributions of primary sulfate and nitrate from the new emissions files. Two new variables ( OMEGA_AT, OMEGA_AC ) are defined for the partitioning of secondary material to the Aitken and accumulation modes. This makes the code more readable. Previously FCONCAT(2) and FCONCAC(2) were redefined in the code to perform the partitioning, which was confusing. ------------------------------------------------------------------------------- 5) Changes in cloud processing: In the subroutine RESCLD, in module cloud_radm, code was added to read cloud ice (QI) and snow (QS) from the met files, and the method for allocating precipation to model layers was changed. This change originated during model testing for a January 1990 scenario. Sulfate wet deposition was being overpredicted. One possible cause for this overprediction was that only resolved cloud water (QC) and resolved rainfall (QR) were being passed from MM5 to the CCTM, however, the total accumulated precipitation (RN) included both liquid and frozen precipitation. This inconsistency was corrected by passing resolved cloud ice (QI) and resolved snow (QS) to the CCTM. The resolved cloud subroutine now attempts to read both QI and QS. If these parameters are not available in the met files, then they are set to zero. Both QI and QS are added to QC and QR to calculate the total water content. This change will affect the amount of material deposited because the aqueous chemistry routine weights the wet dep by the liquid water over total water. Additionally, the method for allocating the amount of water removed from each model layer was changed. Previously, this amount was based precipation rate (RN) weighted by the fraction of liquid water (QC+QR) in the layer over the total vertically integrated liquid water. This has been revised to where the precip rate (RN) is weighted by the layer total precip content (QR+QS) over the vertically integrated precip content. In addition, in the AQ_PARAMS.EXT include file, the molecular weight for nitrate aerosol species was changed to 62.0 g/mole. This corrects an error in the include file where the molecular weight from ammonium are copied for nitrate species. This change will make no impact on the current or previous CMAQ simulations. The only time the molecular weight is used is if any of the nitrate species are not found in CGRID, thereby invoking the background value which gets converted from ug/m3 to mole/mole using the molecular weight in the include file. However, the current background value for the nitrate species is zero, therefore this change will have no impact since it gets multiplied by zero. The change was made to correct any confusion in the include file. ------------------------------------------------------------------------------- 6) Modifications were made to enable the CCTM to append timestep data to the end of existing output files. If a crash occurs, it's easy to restart or users can write multiple days in one file. Modules/Subroutines Affected: Class/Module(alias) Program Unit procan/pa pa_mkhdr.F procan/pa pa_init.F init/init initscen.F init/init flcheck.F init/init grdcheck.F chem/smvgear grdriver.F cloud/cloud_radm cldproc.F vdiff/eddy opddep.F vdiff/eddy opemis.F aero/aero1 opvis.F chem/qssa vgaschem.F driver/ctm wr_conc.F ping/_ping_base ping_io.F ping/_ping_base ping_update.F ------------------------------------------------------------------------------- 7) The aero module was split into aero1 and aero2, reflecting the June 99 release (aero1) and the new variable standard deviation version with explicit tracking of aerosol surface area (aero2). Similarly, the aero_depv module was split into aero_depv1 and aero_depv2. Modules/Subroutines Affected: Class/Module(alias) Program Unit aero/aero1 opvis.F aero/aero1 AEROSTUFF.EXT aero/aero1 AERO_internal.EXT aero/aero1 aero_driver.F aero/aero1 aeroproc.f aero/aero1 aerostep.f aero/aero1 coagrate.f aero/aero1 csucom.inc aero/aero1 eql3.f aero/aero1 getvisby.f aero/aero1 getvsed.f aero/aero1 modpar.f aero/aero1 nuclcond.f aero/aero2 opvis.F aero/aero2 AEROSTUFF.EXT aero/aero2 AERO_internal.EXT aero/aero2 aero_driver.F aero/aero2 aero_subs.f aero/aero2 csucom.inc aero/aero2 opdiam.F aero_depv/aero_depv1 aero_depv.F aero_depv/aero_depv2 aero_depv.F ------------------------------------------------------------------------------- 8) To make the code more manageable and readable, the CGRID species definition was moved into a Fortran-90 module (in CGRID_SPCS.F), which also contains the "method" (CGRID_MAP) to get the starting indices in the CGRID array for each of the species groups. This update eliminates the need for the CGRID_DECL.EXT include file. The codes listed below all need to contain "USE CGRID_SPCS" to access the Fortran-90 use-associated module. Modules/Subroutines Affected: Class/Module(alias) Program Unit driver/ctm CGRID_SPCS.F driver/ctm PCGRID_DEFN.F init/init initscen.F init/init load_cgrid.F init/init opconc.F driver/ctm driver.F driver/ctm wr_conc.F adjcon/denrate adjadv.F aero_depv/aero_depv2 aero_depv.F aero_depv/aero_depv1 aero_depv.F aero/aero2 aero_driver.F aero/aero1 aero_driver.F util/util cksummer.F couple/gencoor couple.F hdiff/unif hdiff.F hdiff/multiscale hdiff.F ping/_ping_qssa ping_vgaschem.F cloud/cloud_radm cldproc.F cloud/cloud_radm aq_map.F cloud/cloud_radm radmcld.F cloud/cloud_radm rescld.F cloud/cloud_radm scavwdep.F vdiff/eddy vdiff_map.F chem/qssa vgaschem.F hadv/hbot xadvbot.F hadv/hbot yadvbot.F hadv/hppm xadvppm.F hadv/hppm yadvppm.F vadv/vbot zadvbot.F vadv/vppm zadvppm.F ------------------------------------------------------------------------------- 9) To make the code more manageable and readable, the two functional blocks dealing with initializing the CGRID array and setting up the output conc file header were put into separate subroutines in files load_cgrid.F and opconc.F, respectively.. Modules/Subroutines Affected: Class/Module(alias) Program Unit init/init initscen.F init/init opconc.F init/init load_cgrid.F ------------------------------------------------------------------------------- 10) The ping_qssa and ping_smvgear modules were modified to split out the common code into a new module named _ping_base. The effect is to alleviate maintenance and is transparent to model-building using m3bld with the configuration file. Modules/Subroutines Affected: Class/Module(alias) Program Unit ping/_ping_base PING_GLOBDIM.F ping/_ping_base PLUME_BG.F ping/_ping_base PLUME_DYN.F ping/_ping_base PLUME_ETA.F ping/_ping_base PLUME_LOC.F ping/_ping_base PLUME_MET.F ping/_ping_base PLUME_PARM.F ping/_ping_base PLUME_STATE.F ping/_ping_base ping_dsprsn.F ping/_ping_base ping_handover.F ping/_ping_base ping_io.F ping/_ping_base ping_main.F ping/_ping_base ping_surface.F ping/_ping_base ping_update.F ping/_ping_base ping_util.F ping/_ping_qssa ping_calcks.F ping/_ping_qssa ping_prodloss.F ping/_ping_qssa ping_vgaschem.F ping/_ping_qssa ping_vqssa.F ping/_ping_smvgear PING_CELLORDER.F ping/_ping_smvgear PING_GRPARMS.EXT ping/_ping_smvgear PING_GRVARS1.EXT ping/_ping_smvgear PING_GRVARS2.EXT ping/_ping_smvgear PING_GRVARS3.EXT ping/_ping_smvgear ping_grbacksub.F ping/_ping_smvgear ping_grcalcks.F ping/_ping_smvgear ping_grdecomp.F ping/_ping_smvgear ping_grdriver.F ping/_ping_smvgear ping_grinit.F ping/_ping_smvgear ping_grpderiv.F ping/_ping_smvgear ping_grsmvgear.F ping/_ping_smvgear ping_grsprse.F ping/_ping_smvgear ping_grsubfun.F Also, note that: a) Issuing a cvs command: cvs co ping_smvgear, for example, will result in bringing in two subdirectories into your working directory: _ping_base/ _ping_smvgear b) Compiling using m3bld and a standard config file will work as previously. No changes are necessary to current config files or scripts. ------------------------------------------------------------------------------- 11) CCTM code was modified so that all calls to data array-specific stencil exchange (stenex) procedures refer to the generic (Fortran-90 "overloaded") procedures. This makes the programmer's job easier by eliminating the un- necessary arguments for the specific array dimensions. This update eliminates the need for the former stencil echange libraries se and se_noop. Nore that ICON and ECIP are also monocodes that use the new stenex libraries. They never used the former stenex (se or se_noop). In addition, the colums/rows arguments in driver's call to PAR_INIT was reordered, reflecting changes made in stenex. This change will have no effect for the no-op (workstation) version, since the parallel version of PAR_INIT is not called. Modules/Subroutines Affected: Class/Module(alias) Program Unit driver/ctm advstep.F driver/ctm hcontvel.F par/par par_init.F hadv/hbot hbot.F hadv/hbot xadvbot.F hadv/hbot yadvbot.F hadv/hppm hppm.F hadv/hppm xadvppm.F hadv/hppm yadvppm.F vadv/vbot zadvbot.F vadv/vppm zadvppm.F hdiff/unif hcontdiff.F hdiff/unif hdiff.F hdiff/multiscale hdiff.F hdiff/multiscale hcdiff3d.F hdiff/multiscale deform.F vdiff/eddy edyintb.F vdiff/eddy vdiffim.F phot/phot phot.F ping/base PLUME_LOC.F ping/base ping_io.F ping/base ping_main.F ping/base ping_update.F util/util cksummer.F procan/pa pa_init.F procan/pa pa_output.F procan/pa pa_update.F driver/ctm driver.F =============================================================================== ECIP RELEASE NOTES 1) Some general, fairly minor improvements to ECIP code were made. * ECIP/driver/ecip/ecip.F: beautify, rename variables to be more mnemonic, line up with Common Blocks * ECIP/par/par_init.F: reorder column/row in se_init * ECIP/par/setup_print.F: add IMPLICIT NONE =============================================================================== ICON RELEASE NOTES 1) Apart from some general code improvements, the main change involves reference to a stencil exchange library (stenex) upgrade that combines two functions, dealing with the conversion from coarse resolution to fine resolution, se_csg_index and se_fsg_index, respectively, into one, se_subgrid_index. * ICON/input/m3conc/m3_driver.F: initialize number of PinG files * ICON/input/m3conc/m3_ping.F: unification of csg_info and fsg_info modules * ICON/par/par/mapping_init.F: improve numerics for machine precision * ICON/par/par/par_init.F: reorder column/row * ICON/par/par/reconfig_domain.F: reorder column/row in se_init * ICON/par/par/shift_map.F: unification of csg_info and fsg_info modules * ICON/par/par_noop/mapping_init_noop.F: improve numerics for machine precision =============================================================================== JPROC RELEASE NOTES 1) On certain systems, a problem could occur in JPROC where zero values are produced for photorates for O3=O3P. In subroutine subgrid.F, a SAVE statement was added for variable SRO1D to correct the problem. * JPROC/driver/jproc_table/subgrid.F: corrected problem that could occur on some systems with an unsaved variable; save SRO1D added =============================================================================== PARIO RELEASE NOTES 1) Some relatively minor changes in PARIO: * PARIO/pclose3.f: change logical "and" in MPI_ALLREDUCE to logical "or" * PARIO/popen3.f: add FSRDWR3 to check for IO_GRP 1 * PARIO/prdfgrd.f: fix potential hang situation at the ALLREDUCE call when ALL_PE_MODE is false * PARIO/pclose3.f: all PE's in I/O group close; reinstitute interprocessor synchronization * PARIO/pinterp3.f: check if variable on file * PARIO/: prdfgrd.f, prdgrdd.f, pxtract3.f, readbndy.f, readfgv.f, readhdv.f: rename MPI_ALLREDUCE receive buffer different than send buffer =============================================================================== PDM RELEASE NOTES 1) Some relatively minor changes in PDM: * PDM/driver/pdm/: locatn1.F, pdmmain.F: Reduce printout to log and revise logic for plumes * PDM/trans/trans/diffspd.F: Logic inserted to deal with ILOWX=IHI =============================================================================== PROCAN RELEASE NOTES 1) A problem was corrected in the portion of the Process Analysis Control Program that generates a compressed mechanism. An incorrect variable was being passed to the IO/API function TRIMLEN. This did not cause a problem on the Sun workstations because the result of TRIMLEN was subsequently overridden in the code. On Linux platforms, however, the program aborted because the argument was of the wrong type. * PROCAN/driver/pa/pa_compmech.F: fixed problem with getting character length of species 2) When the bldit.procan... script is exercised, a procan executable is generated that requires an input file to control how the three created include files (PA_CTL.EXT, PA_CMN.EXT, PA_DAT.EXT) are configured. Thus, to facilitate this process, the bldit script will also extract sample input files from the archive which may be modified or used as is in the run script. =============================================================================== STENEX RELEASE NOTES 1) Added features and functionality to deal with the CCTM changeover to the Fortran-90 modules version of stenex.