Scheduled Downtime
On Friday 21 April 2023 @ 5pm MT, this website will be down for maintenance and expected to return online the morning of 24 April 2023 at the latest

Turn off Surface Sensible Heating (HFX) from the WRF Simulation

Shak

New member
Dear WRF Community,

I am trying to run a case by turning off Surface Sensible Heating (HFX) from the simulation. I use the Revised MM5 for the surface layer physics (option 1 in namelist.input). I got some ideas from this previous thread.
I modify module_sf_sfclay.F file
I changed the line:
HFX(I)=FLHC(I)*(THGB(I)-THX(I))
to
HFX=0
I am not sure if I need to modify the line: HFX(I)=AMAX1(HFX(I),-250.)
I re-compiled it and ran the simulation.
But the modeling results didn't change at all after this.

Is my modification correct? Did I do anything wrong?

It would be highly appreciated If someone could help me.
Thanks in advance.

Warmly
Shak
 
Shak,
I believe your approach is correct. However, you need to modify the code module_sf_sfclayrev.F.
Please try again and let me know how it works.
Remember to recompile WRF after code modification.
 
Shak,
I believe your approach is correct. However, you need to modify the code module_sf_sfclayrev.F.
Please try again and let me know how it works.
Remember to recompile WRF after code modification.
Thank you, Ms. Chen. It worked. I appreciate your insight and help.
 
hello,why I modify the code module_sf_sfclayrev.F.and module_sf_sfclay.F.,make :LH=0.0,HFX=0.0;he modeling results didn't change at all after this.
 
390 CONTINUE
DO 400 I=its,ite
IF(XLAND(I)-1.5.GT.0.)THEN
HFX(I)=0.0
! IF ( PRESENT(ISFTCFLX) ) THEN
! IF ( ISFTCFLX.NE.0 ) THEN
! AHW: add dissipative heating term (commented out in 3.6.1)
! HFX(I)=0.0
! ENDIF
! ENDIF
ELSEIF(XLAND(I)-1.5.LT.0.)THEN
HFX(I)=0.0
HFX(I)=0.0
from module_sf_sfclay.f、module_sf_sfclayrev.F;

RLOW=PLOW/(R_D*TLOW)
CHS=AKHS
CHS2=AKHS02
CQS2=AKHS02
HFX=0.0
QFX=-RLOW*HLFLX*WETM
from module_sf_myjsfc.f
! print *,'QSFC =',QSFC(170,20)
hfx(i,j) = 0.0
qfx(i,j) = ( qfx(i,j) * XICE(i,j) ) + ( (1.0-XICE(i,j)) * qfx_sea(i,j) )
lh(i,j) = ( lh(i,j) * XICE(i,j) ) + ( (1.0-XICE(i,j)) * lh_sea(i,j) )
from module_surface_driver.F;
HFX has decreased, but it is not equal to 0. What else should I modify?Thank you
 
I believe the piece of code you posted is from module_sf_sfclay.F. Let me know if I am wrong.

Did you modify module_sf_sfclayrev.F ?
 
If you want to have HFX = 0 everywhere, a simple way to do so is to add the lines below at the end of module_surface_driver.F, right before

END SUBROUTINE surface_driver.

Code:
       !$OMP PARALLEL DO   &

       !$OMP PRIVATE ( ij, i, j, k )

       DO ij = 1, num_tiles

         DO j = j_start(ij), j_end(ij)

         DO i = i_start(ij), i_end(ij)

           HFX(i, j) = HFX(i, j) + ahe(i, ihour, j)

         END DO

         END DO

       END DO

       !$OMP END PARALLEL DO

Le me know whether it works for you.
 
If you want to have HFX = 0 everywhere, a simple way to do so is to add the lines below at the end of module_surface_driver.F, right before

END SUBROUTINE surface_driver.

Code:
       !$OMP PARALLEL DO   &

       !$OMP PRIVATE ( ij, i, j, k )

       DO ij = 1, num_tiles

         DO j = j_start(ij), j_end(ij)

         DO i = i_start(ij), i_end(ij)

           HFX(i, j) = HFX(i, j) + ahe(i, ihour, j)

         END DO

         END DO

       END DO

       !$OMP END PARALLEL DO

Le me know whether it works for you.
module_sf_sfclayrev.F and module_sf_sfclay.F need to modify??only modify module_surface_driver.F, ??Thank you
 
hello,your code makes HFX=0, but this seems to mean marine and terrestrial HFX=0, what should I do if I want terrestrial HFX=0 only?Thank you very much
 
If you want to have HFX = 0 everywhere, a simple way to do so is to add the lines below at the end of module_surface_driver.F, right before

END SUBROUTINE surface_driver.

Code:
       !$OMP PARALLEL DO   &

       !$OMP PRIVATE ( ij, i, j, k )

       DO ij = 1, num_tiles

         DO j = j_start(ij), j_end(ij)

         DO i = i_start(ij), i_end(ij)

           HFX(i, j) = HFX(i, j) + ahe(i, ihour, j)

         END DO

         END DO

       END DO

       !$OMP END PARALLEL DO

Le me know whether it works for you.
how can I make HFX = HFX at sea level?thank you or make HFX=0 in Specify the location??thank you
 
To specify hfx=0 over land points, you can add a conditional control using xland or landmask.
!$OMP PARALLEL DO PRIVATE(ij, i, j)

DO ij = 1, num_tiles

DO j = j_start(ij), j_end(ij)

DO i = i_start(ij), i_end(ij)

IF (XLAND(i,j) > 1.5) THEN ! Ocean or sea ice

HFX = 0

ENDIF

END DO

END DO

END DO ;like this?add in surface_driver??Thank you very much
 
XLAND is always 1 over land and 2 over ocean.

What is your integration period? And does your model domain cover high-latitude ocean?

I ask this because some points with seaice can be changed from land to ocean or from ocean to land, depending on SST. In this situation, HFX may not be zero, as you have seen in your result. Other than this, I don't see any other reasons that the "IF (XLAND(i,j) < 1.5" won't give the expected result.

Please keep me updated about this issue. Thanks.
 
XLAND is always 1 over land and 2 over ocean.

What is your integration period? And does your model domain cover high-latitude ocean?

I ask this because some points with seaice can be changed from land to ocean or from ocean to land, depending on SST. In this situation, HFX may not be zero, as you have seen in your result. Other than this, I don't see any other reasons that the "IF (XLAND(i,j) < 1.5" won't give the expected result.

Please keep me updated about this issue. Thanks.
model domain only cover low-latitude ocean,maybe its lake?
 
Top