Skip to content

Commit 4425a2b

Browse files
committed
Merge branch 'Noah-MP_v8.2.0/fix_2meter_diagnostics' into hotfix-v8.2.3 (PR #1242)
This merge corrects the calculation of the 2-meter diagnostics (T2M, TH2M, and Q2) when using the Noah-MP land surface scheme. While the computation of 2-meter diagnostics is the same for Noah and Noah-MP over oceans, it is different between the two land surface schemes over land. In Noah-MP, the 2-meter diagnostics are weighted as functions of their respective diagnostics over bare soil and over vegetation. The updated diagnostics for Noah and Noah-MP are now computed in the new file mpas_atmphys_sfc_diagnostics.F.
2 parents a30ff38 + d3473ec commit 4425a2b

12 files changed

+333
-106
lines changed

src/core_atmosphere/physics/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ OBJS = \
4848
mpas_atmphys_packages.o \
4949
mpas_atmphys_rrtmg_lwinit.o \
5050
mpas_atmphys_rrtmg_swinit.o \
51+
mpas_atmphys_sfc_diagnostics.o \
5152
mpas_atmphys_todynamics.o \
5253
mpas_atmphys_update_surface.o \
5354
mpas_atmphys_update.o \
@@ -103,6 +104,7 @@ mpas_atmphys_driver.o: \
103104
mpas_atmphys_driver_oml.o \
104105
mpas_atmphys_constants.o \
105106
mpas_atmphys_interface.o \
107+
mpas_atmphys_sfc_diagnostics.o \
106108
mpas_atmphys_update.o \
107109
mpas_atmphys_vars.o
108110

@@ -223,6 +225,10 @@ mpas_atmphys_rrtmg_swinit.o: \
223225
mpas_atmphys_constants.o \
224226
mpas_atmphys_utilities.o
225227

228+
mpas_atmphys_sfc_diagnostics.o: \
229+
mpas_atmphys_constants.o \
230+
mpas_atmphys_vars.o
231+
226232
mpas_atmphys_todynamics.o: \
227233
mpas_atmphys_constants.o \
228234
mpas_atmphys_vars.o

src/core_atmosphere/physics/Registry_noahmp.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,12 +360,18 @@
360360
<var name="t2mbxy" type="real" dimensions="nCells Time" units="K"
361361
description="2-meter temperature over bare ground" missing_value="-9999.0"/>
362362

363+
<var name="t2mxy" type="real" dimensions="nCells Time" units="K"
364+
description="grid-mean 2-meter temperature" missing_value="-9999.0"/>
365+
363366
<var name="q2mvxy" type="real" dimensions="nCells Time" units="kg kg^{-1}"
364367
description="2-meter water vapor mixing ratio over canopy" missing_value="-9999.0"/>
365368

366369
<var name="q2mbxy" type="real" dimensions="nCells Time" units="kg kg^{-1}"
367370
description="2-meter water vapor mixing ratio over bare ground" missing_value="-9999.0"/>
368371

372+
<var name="q2mxy" type="real" dimensions="nCells Time" units="kg kg^{-1}"
373+
description="grid-mean 2-meter water vapor mixing ratio" missing_value="-9999.0"/>
374+
369375
<var name="tradxy" type="real" dimensions="nCells Time" units="K"
370376
description="surface radiative temperature" missing_value="-9999.0"/>
371377

src/core_atmosphere/physics/mpas_atmphys_driver.F

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module mpas_atmphys_driver
2323
use mpas_atmphys_driver_oml
2424
use mpas_atmphys_constants
2525
use mpas_atmphys_interface
26+
use mpas_atmphys_sfc_diagnostics,only: atmphys_sfc_diagnostics
2627
use mpas_atmphys_update
2728
use mpas_atmphys_vars, only: l_camlw,l_conv,l_radtlw,l_radtsw
2829
use mpas_timer
@@ -296,14 +297,21 @@ subroutine physics_driver(domain,itimestep,xtime_s)
296297
enddo
297298
endif
298299

299-
call allocate_seaice
300+
call allocate_seaice(block%configs)
300301
!$OMP PARALLEL DO
301302
do thread=1,nThreads
302303
call driver_seaice(block%configs,diag_physics,sfc_input, &
303304
cellSolveThreadStart(thread),cellSolveThreadEnd(thread))
304305
enddo
305306
!$OMP END PARALLEL DO
306-
call deallocate_seaice
307+
call deallocate_seaice(block%configs)
308+
309+
!$OMP PARALLEL DO
310+
do thread=1,nThreads
311+
call atmphys_sfc_diagnostics(block%configs,mesh,diag,diag_physics,sfc_input,output_noahmp, &
312+
cellSolveThreadStart(thread),cellSolveThreadEnd(thread))
313+
enddo
314+
!$OMP END PARALLEL DO
307315
endif
308316

309317
!call to pbl schemes:

src/core_atmosphere/physics/mpas_atmphys_driver_lsm_noahmp.F

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ subroutine lsm_noahmp_fromMPAS(configs,mesh,diag,diag_physics,diag_physics_noahm
8484

8585

8686
!--- local OUT pointers (with no Noah LSM equivalent as defined in WRF):
87-
real(kind=RKIND),dimension(:),pointer:: t2mvxy,t2mbxy,q2mvxy,q2mbxy,tradxy,neexy,gppxy,nppxy,fvegxy,runsfxy, &
88-
runsbxy,ecanxy,edirxy,etranxy,fsaxy,firaxy,aparxy,psnxy,savxy,sagxy, &
89-
rssunxy,rsshaxy,bgapxy,wgapxy,tgvxy,tgbxy,chvxy,chbxy,shgxy,shcxy, &
90-
shbxy,evgxy,evbxy,ghvxy,ghbxy,irgxy,ircxy,irbxy,trxy,evcxy,chleafxy, &
91-
chucxy,chv2xy,chb2xy,rs,qtdrain
87+
real(kind=RKIND),dimension(:),pointer:: tradxy,neexy,gppxy,nppxy,fvegxy,runsfxy,runsbxy,ecanxy,edirxy, &
88+
etranxy,fsaxy,firaxy,aparxy,psnxy,savxy,sagxy,rssunxy,rsshaxy, &
89+
bgapxy,wgapxy,tgvxy,tgbxy,chvxy,chbxy,shgxy,shcxy,shbxy,evgxy, &
90+
evbxy,ghvxy,ghbxy,irgxy,ircxy,irbxy,trxy,evcxy,chleafxy,chucxy, &
91+
chv2xy,chb2xy,rs,qtdrain
9292

9393

9494
!--- local OUT additional variables:
@@ -375,10 +375,6 @@ subroutine lsm_noahmp_fromMPAS(configs,mesh,diag,diag_physics,diag_physics_noahm
375375

376376
!--- initialization of OUT (with no Noah LSM equivalent as defined in WRF), i.e.
377377
! see lines 242-290 in module NoahmpIOVarType.F90):
378-
call mpas_pool_get_array(output_noahmp,'t2mvxy' ,t2mvxy )
379-
call mpas_pool_get_array(output_noahmp,'t2mbxy' ,t2mbxy )
380-
call mpas_pool_get_array(output_noahmp,'q2mvxy' ,q2mvxy )
381-
call mpas_pool_get_array(output_noahmp,'q2mbxy' ,q2mbxy )
382378
call mpas_pool_get_array(output_noahmp,'tradxy' ,tradxy )
383379
call mpas_pool_get_array(output_noahmp,'neexy' ,neexy )
384380
call mpas_pool_get_array(output_noahmp,'gppxy' ,gppxy )
@@ -423,10 +419,6 @@ subroutine lsm_noahmp_fromMPAS(configs,mesh,diag,diag_physics,diag_physics_noahm
423419
call mpas_pool_get_array(output_noahmp,'qtdrain',qtdrain )
424420

425421
do i = its,ite
426-
mpas_noahmp%t2mvxy(i) = t2mvxy(i)
427-
mpas_noahmp%t2mbxy(i) = t2mbxy(i)
428-
mpas_noahmp%q2mvxy(i) = q2mvxy(i)
429-
mpas_noahmp%q2mbxy(i) = q2mbxy(i)
430422
mpas_noahmp%tradxy(i) = tradxy(i)
431423
mpas_noahmp%neexy(i) = neexy(i)
432424
mpas_noahmp%gppxy(i) = gppxy(i)
@@ -685,11 +677,11 @@ subroutine lsm_noahmp_toMPAS(diag_physics,diag_physics_noahmp,output_noahmp,sfc_
685677

686678

687679
!--- local OUT pointers (with no Noah LSM equivalent as defined in WRF):
688-
real(kind=RKIND),dimension(:),pointer:: t2mvxy,t2mbxy,q2mvxy,q2mbxy,tradxy,neexy,gppxy,nppxy,fvegxy,runsfxy, &
689-
runsbxy,ecanxy,edirxy,etranxy,fsaxy,firaxy,aparxy,psnxy,savxy,sagxy, &
690-
rssunxy,rsshaxy,bgapxy,wgapxy,tgvxy,tgbxy,chvxy,chbxy,shgxy,shcxy, &
691-
shbxy,evgxy,evbxy,ghvxy,ghbxy,irgxy,ircxy,irbxy,trxy,evcxy,chleafxy, &
692-
chucxy,chv2xy,chb2xy,rs,qtdrain
680+
real(kind=RKIND),dimension(:),pointer:: t2mvxy,t2mbxy,t2mxy,q2mvxy,q2mbxy,q2mxy,tradxy,neexy,gppxy,nppxy, &
681+
fvegxy,runsfxy,runsbxy,ecanxy,edirxy,etranxy,fsaxy,firaxy,aparxy, &
682+
psnxy,savxy,sagxy,rssunxy,rsshaxy,bgapxy,wgapxy,tgvxy,tgbxy,chvxy, &
683+
chbxy,shgxy,shcxy,shbxy,evgxy,evbxy,ghvxy,ghbxy,irgxy,ircxy,irbxy, &
684+
trxy,evcxy,chleafxy,chucxy,chv2xy,chb2xy,rs,qtdrain
693685

694686

695687
!--- local OUT additional variables:
@@ -865,8 +857,10 @@ subroutine lsm_noahmp_toMPAS(diag_physics,diag_physics_noahmp,output_noahmp,sfc_
865857
! lines 242-290 in module NoahmpIOVarType.F90:
866858
call mpas_pool_get_array(output_noahmp,'t2mvxy' ,t2mvxy )
867859
call mpas_pool_get_array(output_noahmp,'t2mbxy' ,t2mbxy )
860+
call mpas_pool_get_array(output_noahmp,'t2mxy' ,t2mxy )
868861
call mpas_pool_get_array(output_noahmp,'q2mvxy' ,q2mvxy )
869862
call mpas_pool_get_array(output_noahmp,'q2mbxy' ,q2mbxy )
863+
call mpas_pool_get_array(output_noahmp,'q2mxy' ,q2mxy )
870864
call mpas_pool_get_array(output_noahmp,'tradxy' ,tradxy )
871865
call mpas_pool_get_array(output_noahmp,'neexy' ,neexy )
872866
call mpas_pool_get_array(output_noahmp,'gppxy' ,gppxy )
@@ -913,8 +907,10 @@ subroutine lsm_noahmp_toMPAS(diag_physics,diag_physics_noahmp,output_noahmp,sfc_
913907
do i = its,ite
914908
t2mvxy(i) = mpas_noahmp%t2mvxy(i)
915909
t2mbxy(i) = mpas_noahmp%t2mbxy(i)
910+
t2mxy(i) = mpas_noahmp%t2mxy(i)
916911
q2mvxy(i) = mpas_noahmp%q2mvxy(i)
917912
q2mbxy(i) = mpas_noahmp%q2mbxy(i)
913+
q2mxy(i) = mpas_noahmp%q2mxy(i)
918914
tradxy(i) = mpas_noahmp%tradxy(i)
919915
neexy(i) = mpas_noahmp%neexy(i)
920916
gppxy(i) = mpas_noahmp%gppxy(i)

0 commit comments

Comments
 (0)