WRF 5th Order Positive Tracer Advection and Diffusion

    John Michalakes
    michalak@ucar.edu
    Feb. 24, 2009

To compile:
        Edit makefile for your system
        make
        (make clean also works)

        Makes 2 execs: rk_scalar_tend_driver_vanilla (host cpu) and
                       rk_scalar_tend_driver_chocolate (gpu)

To run:
        Download the input dataset for this case from: 

          http://www.mmm.ucar.edu/WG2bench/rk_scalar_tend_in_007001081.gz

        Place in run directory and unzip. Download size about 283 MB. 
        Unzips to about 0.5 GB.

        CD to run and type runit or run the driver codes individually you
        will be prompted for step number (use 7).  The number of scalars
        to avect is hard-coded to 81, from the WRF-Chem run that produced
        the input.

        When the individual driver codes run, they produce a run time in
        microseconds and a global mean diagnostic for each level of 81 
        scalar arrays.

        The runit script will output the times for both driver codes
        and a single-number diagnostic, the sum of the variances, expressed
        as a percent.  This should be small, less than 0.1% .  

        See the SAMPLE_SESSION file for a log of a compile and build.

Contents:

This directory:

  README                        this file
  SAMPLE_SESSION                sample compile and run
  makefile                      make and make clean supported
  advect_scalar_pd_00.inc       original pos. def 5th ord advection
  advect_scalar.inc             original 5th ord advection
  update_vanilla.inc            original code for scalar update
  hdiff_vanilla.inc             original code for horz. diffusion
  vdiff_vanilla.inc             original code for vert. diffusion
  cublas.h                      empty file, maybe not needed anymore
  cutil.h                       some redefinitions of macros
  debug.m4                      some debug macros
  libmassv.F                    massv compat library
  microclock.c                  microsecond timer based on gettimeofday
  module_advect_em.F            just includes to advect_scalar*.inc
  module_em.F                   test driver
  diffusion.inc                 CUDA diffusion code
  rk_scalar_tend.cu             CUDA host program
  update_scalar.inc             CUDA code for scalar update
  part1.inc                     CUDA advection part
  part3.inc                     CUDA pos definite limiter and tend update
  parts.inc                     Macro trickery needed to have separate versions 
                                of same routine for double buffery

  spt.h                         macros (not used much here)
  spt.pl*                       macro translator (not used much here)

Subdirectory: run

  runit*                        script
  rk_scalar_tend_in_007001081   input data (Big! must download separately)

