From 0451a89ee7bb3e64a544232f024521a5e24f73be Mon Sep 17 00:00:00 2001 From: Wen Meng Date: Thu, 30 Mar 2023 17:03:11 +0000 Subject: [PATCH 01/11] update upp revision to ce35e5f --- upp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upp b/upp index 22cfb88de..ce35e5f8d 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit 22cfb88dee0afa74bb753bdf85596b4ceff5e913 +Subproject commit ce35e5f8d2f44a95b71b6d142cd854f73188d074 From 5d75ad0fa220689f3237206b1e1b651591beba7e Mon Sep 17 00:00:00 2001 From: Wen Meng Date: Thu, 30 Mar 2023 17:08:32 +0000 Subject: [PATCH 02/11] Update read interface for RRFS --- io/post_fv3.F90 | 407 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 398 insertions(+), 9 deletions(-) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 33f098ab9..56555c006 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -86,7 +86,8 @@ subroutine post_run_fv3(wrt_int_state,grid_id,mype,mpicomp,lead_write, & grib = "grib2" gridtype = "A" - nsoil = 4 + !nsoil = 4 + nsoil = wrt_int_state%nsoil nwtpg = wrt_int_state%petcount jts = wrt_int_state%out_grid_info(grid_id)%j_start !<-- Starting J of this write task's subsection jte = wrt_int_state%out_grid_info(grid_id)%j_end !<-- Ending J of this write task's subsection @@ -493,17 +494,19 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) ! Jul 2019 J. Wang Initial code ! Apr 2022 W. Meng Unify set_postvars_gfs and ! set_postvars_regional to set_postvars_fv3 +! Apr 2023 W. Meng Sync RRFS changes from off-line post ! !----------------------------------------------------------------------- !*** set up post fields from nmint_state !----------------------------------------------------------------------- ! use esmf + use vrbls4d, only: dust, smoke, fv3dust, coarsepm use vrbls3d, only: t, q, uh, vh, wh, alpint, dpres, zint, zmid, o3, & qqr, qqs, cwm, qqi, qqw, qqg, omga, cfr, pmid, & q2, rlwtt, rswtt, tcucn, tcucns, train, el_pbl, & pint, exch_h, ref_10cm, qqni, qqnr, qqnwfa, & - qqnifa + qqnifa, effri, effrl, effrs, aextc55, taod5503d use vrbls2d, only: f, pd, sigt4, fis, pblh, ustar, z0, ths, qs, twbs,& qwbs, avgcprate, cprate, avgprec, prec, lspa, sno,& cldefi, th10, q10, tshltr, pshltr, albase, & @@ -520,7 +523,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) acsnow, acsnom, sst, thz0, qz0, uz0, vz0, ptop, & htop, pbot, hbot, ptopl, pbotl, ttopl, ptopm, & pbotm, ttopm, ptoph, pboth, pblcfr, ttoph, runoff,& - tecan, tetran, tedir, twa, & + tecan, tetran, tedir, twa, sndepac, & maxtshltr, mintshltr, maxrhshltr, minrhshltr, & dzice, smcwlt, suntime, fieldcapa, htopd, hbotd, & htops, hbots, aswintoa, maxqshltr, minqshltr, & @@ -536,8 +539,8 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) sfcvxi, t10m, t10avg, psfcavg, akhsavg, akmsavg, & albedo, tg, prate_max, pwat, snow_acm, snow_bkt, & acgraup, graup_bucket, acfrain, frzrn_bucket, & - ltg1_max, ltg2_max, ltg3_max - use soil, only: sldpth, sh2o, smc, stc + ltg1_max, ltg2_max, ltg3_max, aodtot, ebb, hwp + use soil, only: sldpth, sh2o, smc, stc, sllevel use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice use ctlblk_mod, only: im, jm, lm, lp1, jsta, jend, jsta_2l, jend_2u, jsta_m,jend_m, & ista, iend, ista_2l, iend_2u, ista_m,iend_m, & @@ -545,7 +548,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) tprec, tclod, trdlw, trdsw, tsrfc, tmaxmin, theat, & ardlw, ardsw, asrfc, avrain, avcnvc, iSF_SURFACE_PHYSICS,& td3d, idat, sdat, ifhr, ifmin, dt, nphs, dtq2, pt_tbl, & - alsl, spl, ihrst, modelname + alsl, spl, ihrst, modelname, nsoil use params_mod, only: erad, dtr, capa, p1000, small use gridspec_mod,only: latstart, latlast, lonstart, lonlast, cenlon, cenlat, & dxval, dyval, truelat2, truelat1, psmapf, cenlat, & @@ -590,7 +593,8 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) real,dimension(:), allocatable :: slat,qstl real,external::FPVSNEW real,dimension(:,:),allocatable :: dummy, p2d, t2d, q2d, qs2d, & - cw2d, cfr2d + cw2d, cfr2d, buf, buf2 + real,dimension(:,:,:),allocatable :: extsmoke, extdust character(len=80) :: fieldname, wrtFBName, flatlon type(ESMF_Grid) :: wrtGrid type(ESMF_Field) :: theField @@ -679,6 +683,12 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) dtq2 = wrt_int_state%dtp nphs = 2. dt = dtq2/nphs + + allocate(extsmoke(ista:iend,jsta:jend,lm)) + allocate(extdust(ista:iend,jsta:jend,lm)) + allocate(buf(ista:iend,jsta:jend)) + allocate(buf2(ista:iend,jsta:jend)) + ! ! GFS does not have convective cloud efficiency ! similated precip @@ -799,9 +809,9 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) !$omp& shared(smstav,sfcevp,acsnow,acsnom,qz0,uz0,vz0,maxrhshltr,minrhshltr) do j=jsta_2l,jend_2u do i=ista_2l,iend_2u - smstav(i,j) = spval + !smstav(i,j) = spval sfcevp(i,j) = spval - acsnow(i,j) = spval + !acsnow(i,j) = spval acsnom(i,j) = spval qz0(i,j) = spval uz0(i,j) = spval @@ -1089,6 +1099,39 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + ! total aod + if(trim(fieldname)=='aodtot') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,aodtot,arrayr42d,fillValue,spval) + do j=jsta,jend + do i=ista, iend + aodtot(i,j)=arrayr42d(i,j) + if(abs(arrayr42d(i,j)-fillValue) < small) aodtot(i,j)=spval + enddo + enddo + endif + + ! biomass burning emissions + if(trim(fieldname)=='ebb_smoke_hr') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,ebb,arrayr42d,fillValue,spval) + do j=jsta,jend + do i=ista, iend + ebb(i,j)=arrayr42d(i,j) + if(abs(arrayr42d(i,j)-fillValue) < small) ebb(i,j)=spval + enddo + enddo + endif + + ! wildfire potential + if(trim(fieldname)=='hwp') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,hwp,arrayr42d,fillValue,spval) + do j=jsta,jend + do i=ista, iend + hwp(i,j)=arrayr42d(i,j) + if(abs(arrayr42d(i,j)-fillValue) < small) hwp(i,j)=spval + enddo + enddo + endif + ! frictional velocity if(trim(fieldname)=='fricv') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,ustar,arrayr42d,fillValue,spval) @@ -1616,6 +1659,20 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + !assign soil depths for RUC LSM, hard wire 9 soil depths here + !so they aren't missing. + if (nsoil==9) then + sllevel(1) = 0.0 + sllevel(2) = 0.01 + sllevel(3) = 0.04 + sllevel(4) = 0.1 + sllevel(5) = 0.3 + sllevel(6) = 0.6 + sllevel(7) = 1.0 + sllevel(8) = 1.6 + sllevel(9) = 3.0 + endif + ! liquid volumetric soil mpisture in fraction if(trim(fieldname)=='soill1') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,sh2o,arrayr42d,sm,fillValue) @@ -1712,6 +1769,65 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + if(nsoil==9) then + ! volumetric soil moisture + if(trim(fieldname)=='soilw5') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,smc,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + smc(i,j,5) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) smc(i,j,5) = spval + if (sm(i,j) /= 0.0) smc(i,j,5) = spval + enddo + enddo + endif + + if(trim(fieldname)=='soilw6') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,smc,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + smc(i,j,6) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) smc(i,j,6) = spval + if (sm(i,j) /= 0.0) smc(i,j,6) = spval + enddo + enddo + endif + + if(trim(fieldname)=='soilw7') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,smc,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + smc(i,j,7) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) smc(i,j,7) = spval + if (sm(i,j) /= 0.0) smc(i,j,7) = spval + enddo + enddo + endif + + if(trim(fieldname)=='soilw8') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,smc,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + smc(i,j,8) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) smc(i,j,8) = spval + if (sm(i,j) /= 0.0) smc(i,j,8) = spval + enddo + enddo + endif + + if(trim(fieldname)=='soilw9') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,smc,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + smc(i,j,9) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) smc(i,j,9) = spval + if (sm(i,j) /= 0.0) smc(i,j,9) = spval + enddo + enddo + endif + + endif !nsoil + ! soil temperature if(trim(fieldname)=='soilt1') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,stc,arrayr42d,sm,sice,fillValue) @@ -1764,6 +1880,75 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + if(nsoil==9) then + + ! soil temperature + if(trim(fieldname)=='soilt5') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,stc,arrayr42d,sm,sice,fillValue) + do j=jsta,jend + do i=ista, iend + stc(i,j,5) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) stc(i,j,5) = spval + !mask open water areas, combine with sea ice tmp + if (sm(i,j) /= 0.0 .and. sice(i,j) ==0.) stc(i,j,5) = spval + enddo + enddo + endif + + ! soil temperature + if(trim(fieldname)=='soilt6') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,stc,arrayr42d,sm,sice,fillValue) + do j=jsta,jend + do i=ista, iend + stc(i,j,6) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) stc(i,j,6) = spval + !mask open water areas, combine with sea ice tmp + if (sm(i,j) /= 0.0 .and. sice(i,j) ==0.) stc(i,j,6) = spval + enddo + enddo + endif + + ! soil temperature + if(trim(fieldname)=='soilt7') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,stc,arrayr42d,sm,sice,fillValue) + do j=jsta,jend + do i=ista, iend + stc(i,j,7) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) stc(i,j,7) = spval + !mask open water areas, combine with sea ice tmp + if (sm(i,j) /= 0.0 .and. sice(i,j) ==0.) stc(i,j,7) = spval + enddo + enddo + endif + + ! soil temperature + if(trim(fieldname)=='soilt8') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,stc,arrayr42d,sm,sice,fillValue) + do j=jsta,jend + do i=ista, iend + stc(i,j,8) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) stc(i,j,8) = spval + !mask open water areas, combine with sea ice tmp + if (sm(i,j) /= 0.0 .and. sice(i,j) ==0.) stc(i,j,8) = spval + enddo + enddo + endif + + ! soil temperature + if(trim(fieldname)=='soilt9') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,stc,arrayr42d,sm,sice,fillValue) + do j=jsta,jend + do i=ista, iend + stc(i,j,9) = arrayr42d(i,j) + if( abs(arrayr42d(i,j)-fillValue) < small) stc(i,j,9) = spval + !mask open water areas, combine with sea ice tmp + if (sm(i,j) /= 0.0 .and. sice(i,j) ==0.) stc(i,j,9) = spval + enddo + enddo + endif + + endif !nsoil + ! time averaged incoming sfc longwave if(trim(fieldname)=='dlwrf_ave') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,alwin,arrayr42d,fillValue,spval) @@ -2138,6 +2323,77 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + ! wetness + if(trim(fieldname)=='wetness') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,smstav,arrayr42d,fillvalue,spval) + do j=jsta,jend + do i=ista, iend + smstav(i,j) = arrayr42d(i,j) + if(abs(arrayr42d(i,j)-fillvalue) Date: Wed, 5 Apr 2023 00:11:58 +0000 Subject: [PATCH 03/11] Read MERRA2 aerosol --- io/post_fv3.F90 | 72 +++++++++++++++++++++++++++++++++++++-- io/post_nems_routines.F90 | 9 +++-- 2 files changed, 75 insertions(+), 6 deletions(-) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 56555c006..155f3aa1c 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -494,7 +494,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) ! Jul 2019 J. Wang Initial code ! Apr 2022 W. Meng Unify set_postvars_gfs and ! set_postvars_regional to set_postvars_fv3 -! Apr 2023 W. Meng Sync RRFS changes from off-line post +! Apr 2023 W. Meng Sync RRFS and GFS changes from off-line post ! !----------------------------------------------------------------------- !*** set up post fields from nmint_state @@ -539,7 +539,9 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) sfcvxi, t10m, t10avg, psfcavg, akhsavg, akmsavg, & albedo, tg, prate_max, pwat, snow_acm, snow_bkt, & acgraup, graup_bucket, acfrain, frzrn_bucket, & - ltg1_max, ltg2_max, ltg3_max, aodtot, ebb, hwp + ltg1_max, ltg2_max, ltg3_max, aodtot, ebb, hwp, & + aod550,du_aod550,ss_aod550,su_aod550,oc_aod550, & + bc_aod550 use soil, only: sldpth, sh2o, smc, stc, sllevel use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice use ctlblk_mod, only: im, jm, lm, lp1, jsta, jend, jsta_2l, jend_2u, jsta_m,jend_m, & @@ -548,7 +550,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) tprec, tclod, trdlw, trdsw, tsrfc, tmaxmin, theat, & ardlw, ardsw, asrfc, avrain, avcnvc, iSF_SURFACE_PHYSICS,& td3d, idat, sdat, ifhr, ifmin, dt, nphs, dtq2, pt_tbl, & - alsl, spl, ihrst, modelname, nsoil + alsl, spl, ihrst, modelname, nsoil, rdaod use params_mod, only: erad, dtr, capa, p1000, small use gridspec_mod,only: latstart, latlast, lonstart, lonlast, cenlon, cenlat, & dxval, dyval, truelat2, truelat1, psmapf, cenlat, & @@ -2394,6 +2396,70 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo enddo + if(rdaod) then + ! MERRA2 aerosols + if(trim(fieldname)=='aod550') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,aod550,arrayr42d,fillValue) + do j=jsta,jend + do i=ista, iend + aod550(i,j) = arrayr42d(i,j) + if(abs(arrayr42d(i,j)-fillvalue) Date: Wed, 12 Apr 2023 19:43:28 +0000 Subject: [PATCH 06/11] Update based on Dusan's comment --- io/post_fv3.F90 | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index e98b30ed2..1e6bb4266 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -86,7 +86,6 @@ subroutine post_run_fv3(wrt_int_state,grid_id,mype,mpicomp,lead_write, & grib = "grib2" gridtype = "A" - !nsoil = 4 nsoil = wrt_int_state%nsoil nwtpg = wrt_int_state%petcount jts = wrt_int_state%out_grid_info(grid_id)%j_start !<-- Starting J of this write task's subsection @@ -818,12 +817,10 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) ! shelter rh max, maxrhshltr ! shelter rh min, minrhshltr !$omp parallel do default(none),private(i,j),shared(jsta_2l,jend_2u,im,spval,ista_2l,iend_2u), & -!$omp& shared(smstav,sfcevp,acsnow,acsnom,qz0,uz0,vz0,maxrhshltr,minrhshltr) +!$omp& shared(sfcevp,acsnom,qz0,uz0,vz0,maxrhshltr,minrhshltr) do j=jsta_2l,jend_2u do i=ista_2l,iend_2u - !smstav(i,j) = spval sfcevp(i,j) = spval - !acsnow(i,j) = spval acsnom(i,j) = spval qz0(i,j) = spval uz0(i,j) = spval @@ -2472,11 +2469,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) if ((gocart_on .or. gccpp_on) .and. d2d_chem) then do K = 1, nbin_du - if ( K == 1) VarName='duem001' - if ( K == 2) VarName='duem002' - if ( K == 3) VarName='duem003' - if ( K == 4) VarName='duem004' - if ( K == 5) VarName='duem005' + write(VarName, '(A,I3.3)') 'duem', k if(trim(fieldname)==VarName) then !$omp parallel do default(none) private(i,j,K) shared(jsta,jend,ista,iend,spval,duem,arrayr42d,fillvalue) From 2951068995663ebd95b2ca1d2f5e653648ffcf2b Mon Sep 17 00:00:00 2001 From: Wen Meng Date: Thu, 13 Apr 2023 14:19:34 +0000 Subject: [PATCH 07/11] Limit new local variable allocation for RRFS. --- io/post_fv3.F90 | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 1e6bb4266..f8864e305 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -695,10 +695,13 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) nphs = 2. dt = dtq2/nphs - allocate(extsmoke(ista:iend,jsta:jend,lm)) - allocate(extdust(ista:iend,jsta:jend,lm)) - allocate(buf(ista:iend,jsta:jend)) - allocate(buf2(ista:iend,jsta:jend)) + !Allocate for regional models only + if(modelname=='FV3R') then + allocate(extsmoke(ista:iend,jsta:jend,lm)) + allocate(extdust(ista:iend,jsta:jend,lm)) + allocate(buf(ista:iend,jsta:jend)) + allocate(buf2(ista:iend,jsta:jend)) + endif ! ! GFS does not have convective cloud efficiency @@ -2343,6 +2346,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + if(modelname=='FV3R')then !acsnow if(trim(fieldname)=='accswe_land') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,buf,arrayr42d,fillvalue,spval) @@ -2372,6 +2376,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif enddo enddo + endif !FV3R !sndepac if(trim(fieldname)=='snacc_land') then @@ -3881,6 +3886,8 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + if(modelname=='FV3R') then + ! model level smoke_ext if(trim(fieldname)=='smoke_ext') then !$omp parallel do default(none) private(i,j,l) shared(lm,jsta,jend,ista,iend,extsmoke,arrayr43d,spval,fillvalue) @@ -3907,6 +3914,8 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + endif !end FV3R + ! model level coarse dust if(trim(fieldname)=='coarsepm') then !$omp parallel do default(none) private(i,j,l) shared(lm,jsta,jend,ista,iend,coarsepm,arrayr43d,spval,fillvalue) @@ -4632,6 +4641,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) end do end do + if(modelname=='FV3R') then ! smoke and dust extinction !$omp parallel do default(none) private(i,j,l) shared(lm,jsta,jend,ista,iend,zint,taod5503d,aextc55,extsmoke,extdust,spval) do l=1,lm @@ -4644,11 +4654,14 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo enddo enddo + deallocate(extsmoke) deallocate(extdust) deallocate(buf) deallocate(buf2) + endif !end FV3R + ! generate look up table for lifted parcel calculations thl = 210. plq = 70000. From 78cfb352b3b6955f29e7975fb4fbdecf13adf348 Mon Sep 17 00:00:00 2001 From: Wen Meng Date: Thu, 13 Apr 2023 17:22:29 +0000 Subject: [PATCH 08/11] Modify accsnow and sndepac calculation location based on Dusan's comment. --- io/post_fv3.F90 | 100 ++++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 46 deletions(-) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index f8864e305..672ff3388 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -603,7 +603,8 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) real,dimension(:), allocatable :: slat,qstl real,external::FPVSNEW real,dimension(:,:),allocatable :: dummy, p2d, t2d, q2d, qs2d, & - cw2d, cfr2d, buf, buf2 + cw2d, cfr2d, accswe_ice, accswe_land, & + snacc_land, snacc_ice real,dimension(:,:,:),allocatable :: extsmoke, extdust character(len=80) :: fieldname, wrtFBName, flatlon, & VarName @@ -699,8 +700,10 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) if(modelname=='FV3R') then allocate(extsmoke(ista:iend,jsta:jend,lm)) allocate(extdust(ista:iend,jsta:jend,lm)) - allocate(buf(ista:iend,jsta:jend)) - allocate(buf2(ista:iend,jsta:jend)) + allocate(accswe_ice(ista:iend,jsta:jend)) + allocate(accswe_land(ista:iend,jsta:jend)) + allocate(snacc_ice(ista:iend,jsta:jend)) + allocate(snacc_land(ista:iend,jsta:jend)) endif ! @@ -2349,64 +2352,45 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) if(modelname=='FV3R')then !acsnow if(trim(fieldname)=='accswe_land') then - !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,buf,arrayr42d,fillvalue,spval) + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,accswe_land,arrayr42d,fillvalue,spval) do j=jsta,jend do i=ista, iend - buf(i,j) = arrayr42d(i,j) - if(abs(arrayr42d(i,j)-fillvalue) Date: Thu, 13 Apr 2023 18:06:30 +0000 Subject: [PATCH 09/11] Bug fix --- io/post_fv3.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 672ff3388..2f2409328 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -4663,10 +4663,10 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) deallocate(extsmoke) deallocate(extdust) - deallocate(buf) - deallocate(buf2) - deallocate(buf3) - deallocate(buf4) + deallocate(accswe_ice) + deallocate(accswe_land) + deallocate(snacc_ice) + deallocate(snacc_land) endif !end FV3R From 246acf25b8b3b34f2dadca7d3066f243439d22d5 Mon Sep 17 00:00:00 2001 From: Wen Meng Date: Thu, 13 Apr 2023 19:44:15 +0000 Subject: [PATCH 10/11] 1)pick up minor change from Jun Wang; 2)Changes based on Jun and Dusan's comments. --- io/module_wrt_grid_comp.F90 | 2 +- io/post_fv3.F90 | 76 +++++++++++++++++++------------------ 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/io/module_wrt_grid_comp.F90 b/io/module_wrt_grid_comp.F90 index 8d6c44b17..6a3b8ee01 100644 --- a/io/module_wrt_grid_comp.F90 +++ b/io/module_wrt_grid_comp.F90 @@ -2295,7 +2295,7 @@ subroutine wrt_run(wrt_comp, imp_state_write, exp_state_write,clock,rc) !** write out log file ! if (mype == lead_write_task) then - open(newunit=nolog,file='atm.logf'//trim(cfhour),form='FORMATTED') + open(newunit=nolog,file='log.atm.f'//trim(cfhour),form='FORMATTED') write(nolog,100)nfhour,idate(1:6) 100 format(' completed fv3gfs fhour=',f10.3,2x,6(i4,2x)) close(nolog) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 2f2409328..9734817ed 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -4353,8 +4353,8 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) do j=jsta,jend do i=ista,iend - TV = T(I,J,L) * (H1+D608*MAX(Q(I,J,L),QMIN)) - RHOMID(I,J,L) = PMID(I,J,L) / (RD*TV) + TV = T(I,J,L) * (H1+D608*MAX(Q(I,J,L),QMIN)) + RHOMID(I,J,L) = PMID(I,J,L) / (RD*TV) dustcb(i,j) = MAX(dustcb(i,j), 0.0) dustallcb(i,j) = MAX(dustallcb(i,j), 0.0) @@ -4378,36 +4378,35 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) 0.83*salt(i,j,l,3))*RHOMID(i,j,l) !ug/m3 if (gocart_on .or. gccpp_on) then -! Surface PM10 concentration - dusmass(i,j)=(dust(i,j,l,1)+dust(i,j,l,2)+dust(i,j,l,3)+ & - 0.74*dust(i,j,l,4)+salt(i,j,l,1)+salt(i,j,l,2)+salt(i,j,l,3)+ & - salt(i,j,l,4) + soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & - waso(i,j,l,2) +suso(i,j,l,1)+pp25(i,j,l,1)+pp10(i,j,l,1)) & - *RHOMID(i,j,l) !ug/m3 -! Surface PM25 concentration - dusmass25(i,j)=(dust(i,j,l,1)+0.38*dust(i,j,l,2)+ & - salt(i,j,l,1)+salt(i,j,l,2)+0.83*salt(i,j,l,3) + & - soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & - waso(i,j,l,2) +suso(i,j,l,1)+pp25(i,j,l,1))*RHOMID(i,j,l) !ug/m3 - -! PM10 column - ducmass(i,j)=dustallcb(i,j)+ssallcb(i,j)+bccb(i,j)+ & - occb(i,j)+sulfcb(i,j)+pp25cb(i,j)+pp10cb(i,j) -! PM25 column - ducmass25(i,j)=dustcb(i,j)+sscb(i,j)+bccb(i,j)+occb(i,j) & - +sulfcb(i,j)+pp25cb(i,j) - endif !gocart_on or gccpp_on - - if (nasa_on) then -! Surface PM10 concentration - dusmass(i,j)=pp10(i,j,l,1)*RHOMID(i,j,l) !ug/m3 -! Surface PM25 concentration - dusmass25(i,j)=pp25(i,j,l,1)*RHOMID(i,j,l) !ug/m3 - -! PM10 column - ducmass(i,j)=pp10cb(i,j) -! PM25 column - ducmass25(i,j)=pp25cb(i,j) + !Surface PM10 concentration + dusmass(i,j)=(dust(i,j,l,1)+dust(i,j,l,2)+dust(i,j,l,3)+ & + 0.74*dust(i,j,l,4)+salt(i,j,l,1)+salt(i,j,l,2)+salt(i,j,l,3)+ & + salt(i,j,l,4) + soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & + waso(i,j,l,2) +suso(i,j,l,1)+pp25(i,j,l,1)+pp10(i,j,l,1)) & + *RHOMID(i,j,l) !ug/m3 + !Surface PM25 concentration + dusmass25(i,j)=(dust(i,j,l,1)+0.38*dust(i,j,l,2)+ & + salt(i,j,l,1)+salt(i,j,l,2)+0.83*salt(i,j,l,3) + & + soot(i,j,l,1)+soot(i,j,l,2)+waso(i,j,l,1)+ & + waso(i,j,l,2) +suso(i,j,l,1)+pp25(i,j,l,1))*RHOMID(i,j,l) !ug/m3 + + !PM10 column + ducmass(i,j)=dustallcb(i,j)+ssallcb(i,j)+bccb(i,j)+ & + occb(i,j)+sulfcb(i,j)+pp25cb(i,j)+pp10cb(i,j) + !PM25 column + ducmass25(i,j)=dustcb(i,j)+sscb(i,j)+bccb(i,j)+occb(i,j) & + +sulfcb(i,j)+pp25cb(i,j) + + elseif (nasa_on) then + !Surface PM10 concentration + dusmass(i,j)=pp10(i,j,l,1)*RHOMID(i,j,l) !ug/m3 + !Surface PM25 concentration + dusmass25(i,j)=pp25(i,j,l,1)*RHOMID(i,j,l) !ug/m3 + + !PM10 column + ducmass(i,j)=pp10cb(i,j) + !PM25 column + ducmass25(i,j)=pp25cb(i,j) endif !nasa_on end do @@ -4415,6 +4414,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif !end gocart_on, nasa_on + !3d fields endif @@ -4642,8 +4642,10 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,accswe_ice,accswe_land,acsnow) do j=jsta,jend do i=ista, iend - if(accswe_ice(i,j) Date: Thu, 13 Apr 2023 20:02:51 +0000 Subject: [PATCH 11/11] modify acsnow and sndepac calculation based on Jun's comment --- io/post_fv3.F90 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 9734817ed..7cc6ab45e 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -4642,10 +4642,10 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,accswe_ice,accswe_land,acsnow) do j=jsta,jend do i=ista, iend - if(accswe_ice(i,j)