Skip to content

CCPP Framework Meeting Minutes 2020 05 14

Dom Heinzeller edited this page May 14, 2020 · 7 revisions

Agenda

  • How to start testing the feature/capgen branch?
  • Update on working with NRL
  • How to detect out-of-bound errors with auto-generated code
  • Related: How to handle conditionally allocated arrays with cap_gen.py?

Out of bounds with auto-generated code

  • Example: ccpp_FV3_GFS_v15p2_physics_cap.F90
      write(0,'(a,2e16.7)') 'DH DEBUG:', minval(GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,13)), maxval(GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,13))
      call gfdl_cloud_microphys_run(levs=GFS_Control%levs,im=GFS_Control%blksz(cdata%blk_no),con_g=con_g,con_fvirt=con_fvirt, &
                  con_rd=con_rd,frland=GFS_Interstitial(cdata%thrd_no)%frland,garea=GFS_Data(cdata%blk_no)%Grid%area, &
                  islmsk=GFS_Interstitial(cdata%thrd_no)%islmsk,gq0=GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,GFS_Control%ntqv), &
                  gq0_ntcw=GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,GFS_Control%ntcw),gq0_ntrw=GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,GFS_Control%ntrw), &
                  gq0_ntiw=GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,GFS_Control%ntiw),gq0_ntsw=GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,GFS_Control%ntsw), &
                  gq0_ntgl=GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,GFS_Control%ntgl),gq0_ntclamt=GFS_Data(cdata%blk_no)%Stateout%gq0(:,:,13), &
                  gt0=GFS_Data(cdata%blk_no)%Stateout%gt0,gu0=GFS_Data(cdata%blk_no)%Stateout%gu0, &
                  gv0=GFS_Data(cdata%blk_no)%Stateout%gv0,vvl=GFS_Data(cdata%blk_no)%Statein%vvl, &
                  prsl=GFS_Data(cdata%blk_no)%Statein%prsl,phii=GFS_Data(cdata%blk_no)%Statein%phii, &
                  del=GFS_Interstitial(cdata%thrd_no)%del,rain0=GFS_Interstitial(cdata%thrd_no)%rainmp, &
                  ice0=GFS_Interstitial(cdata%thrd_no)%icemp,snow0=GFS_Interstitial(cdata%thrd_no)%snowmp, &
                  graupel0=GFS_Interstitial(cdata%thrd_no)%graupelmp,prcp0=GFS_Interstitial(cdata%thrd_no)%prcpmp, &
                  sr=GFS_Data(cdata%blk_no)%Intdiag%sr,dtp=GFS_Control%dtp,hydrostatic=GFS_Control%hydrostatic, &
                  phys_hydrostatic=GFS_Interstitial(cdata%thrd_no)%phys_hydrostatic,lradar=GFS_Control%lradar, &
                  refl_10cm=GFS_Data(cdata%blk_no)%Intdiag%refl_10cm,reset=GFS_Interstitial(cdata%thrd_no)%reset, &
                  effr_in=GFS_Control%effr_in,rew=GFS_Data(cdata%blk_no)%Tbd%phy_f3d(:,:,GFS_Control%nleffr), &
                  rei=GFS_Data(cdata%blk_no)%Tbd%phy_f3d(:,:,GFS_Control%nieffr),rer=GFS_Data(cdata%blk_no)%Tbd%phy_f3d(:,:,GFS_Control%nreffr), &
                  res=GFS_Data(cdata%blk_no)%Tbd%phy_f3d(:,:,GFS_Control%nseffr),reg=GFS_Data(cdata%blk_no)%Tbd%phy_f3d(:,:,GFS_Control%ngeffr), &
                  errmsg=cdata%errmsg,errflg=cdata%errflg)

and gfdl_cloud_microphys.F90:

   subroutine gfdl_cloud_microphys_run(                                       &
      levs, im, con_g, con_fvirt, con_rd, frland, garea, islmsk,              &
      gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, gq0_ntsw, gq0_ntgl, gq0_ntclamt,     &
      gt0, gu0, gv0, vvl, prsl, phii, del,                                    &
      rain0, ice0, snow0, graupel0, prcp0, sr,                                &
      dtp, hydrostatic, phys_hydrostatic, lradar, refl_10cm,                  &
      reset, effr_in, rew, rei, rer, res, reg, errmsg, errflg)

      ...
      real(kind=kind_phys), intent(inout), dimension(1:im,1:levs)   :: gq0, gq0_ntcw, gq0_ntrw, gq0_ntiw, &
                                                                       gq0_ntsw, gq0_ntgl, gq0_ntclamt
  • Dom will create an issue to add a metadata entry like debug_check = ... where the default value is true, but can be a conditional expressed in terms of standard names. The debug check will check the bounds, if an array is allocated or not, etc. - see https://github.com/NCAR/ccpp-framework/issues/294

(Re-)start testing the feature/capgen branch

  • Julie identified some errors in the capgen unit tests
  • need better test coverage in particular for parsing Fortran code and comparing to metadata files
  • also for checking suites and producing code
  • this goes beyond basic unit tests, but will be useful

Recent changes to ccpp-framework

  • ccpp_prebuild.py: if --suites argument is not present, compile all suites in SUITES_DIR (in ccpp_prebuild_config.py)
Clone this wiki locally