Skip to content

CCPP Framework Meeting Minutes 2022 01 04

Dom Heinzeller edited this page Jan 4, 2022 · 8 revisions

Agenda


capgen unification

CCPP Visioning Workshop

  • ...

Dictionary of standard names

  • Convenience units, etc (all triggered by https://github.com/ufs-community/ufs-weather-model/pull/907 and associated PRs)
    • If we do want to pass log(pressure) or pressure**kappa, then is there a way to know whether we need to do unit conversions
      • For example, if only diffs of log are used, or ratios of Pa**kappa are used --> no need to do conversions
      • Could use unit ln(Pa) if it matters, and 1 if it doesn't
      • Use case pressure**kappa in UFS (NCAR ccpp-physics physics/gfdl_fv_sat_adj.{F90,meta}):
### physics/gfdl_fv_sat_adj.meta
[pkz]
  standard_name = finite_volume_mean_edge_pressure_raised_to_the_power_of_kappa
  long_name = finite-volume mean edge pressure in Pa raised to the power of kappa
  units = 1
  dimensions = (starting_x_direction_index:ending_x_direction_index,starting_y_direction_index:ending_y_direction_index,1:vertical_dimension_for_fast_physics)
  type = real
  kind = kind_dyn
  intent = inout

### physics/gfdl_fv_sat_adj.F90
#ifdef MOIST_CAPPA
               pkz(i,j,k) = exp(cappa(i,j,k)*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k)))
#else
#ifdef MULTI_GASES
               pkz(i,j,k) = exp(akap*(virqd(q(i,j,k,1:num_gas))/vicpqd(q(i,j,k,1:num_gas))*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k)))
#else
               pkz(i,j,k) = exp(akap*log(rrg*delp(i,j,k)/delz(i,j,k)*pt(i,j,k)))
#endif
#endif
  • Use case log(pressure) in UFS (NCAR ccpp-physics physics/ozphys_2015.{F90,meta}):
### physics/ozphys_2015.meta
[po3]
  standard_name = natural_log_of_ozone_forcing_data_pressure_levels
  long_name = natural log of ozone forcing data pressure levels
  units = 1
  dimensions = (vertical_dimension_of_ozone_forcing_data)
  type = real
  kind = kind_phys
  intent = in

### physics/ozphys_2015.f
        do i=1,im
          wk1(i) = log(prsl(i,l))
          pmin   = min(wk1(i), pmin)
          pmax   = max(wk1(i), pmax)
          prod(i,:) = 0.0
        enddo
        kmax = 1
        kmin = 1
        do k=1,ko3-1
          if (pmin < po3(k)) kmax = k
          if (pmax < po3(k)) kmin = k
        enddo
!
        do k=kmin,kmax
          temp = 1.0 / (po3(k) - po3(k+1))
          do i=1,im
            flg(i) = .false.
            if (wk1(i) < po3(k) .and. wk1(i) >= po3(k+1)) then
              flg(i) = .true.
              wk2(i) = (wk1(i) - po3(k+1)) * temp
              wk3(i) = 1.0 - wk2(i)
            endif
          enddo
  • In ccpp_prebuild, there is no syntax checker - it checks if the units are the same and if not, if there is a conversion registered

  • In capgen, there is a syntax checker - but we need to know what exceptions/extensions to udunits are acceptable/should be ignored

    • Solution: extend syntax checker to allow for a log of a unit and an exponential of a unit (need to create issue to do this)
  • Is specific humidity the mass mixing ratio of vapor with respect to moist air or with respect to total mass (rule 5)?

    • Correct would be w.r.t. total mass, but UFS / ccpp-physics are using it incorrectly as w.r.t. moist air
    • AMS glossary says specific humidity is w.r.t. total mass, but there are other definitions in the literature
    • Outlow use of specific humidity, and always use mixing_ratio_of_vapor_wrt_xyz?
    • UFS: Fanglin ok with always using mixing_ratio_of_vapor_wrt_moist_air
    • Need to create an issue in ccpp-physics and the dictionary of standard names
  • Is there a standard name for "pi"?

  • Move gravitational_acceleration to the "constants" section? Currently in "dimensions"

CCPP requirements document

  • Historical document created?

Other business

  • ...
Clone this wiki locally