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

icloud=0 over ocean only (WRF V4.3.3)

HragN

New member
icloud is treated as a scalar in WRF, but I'd like to make it a 2-d vector that depends on LANDMASK.
In short, I'd like to turn icloud off (=0) over ocean, and leave icloud on (=1) over land.

I would appreciate any input on how to successfully and efficiently execute this task.

My current strategy is to:
1. Add a new variable inside phys/module_radiation_drive.F: INTEGER, ALLOCATABLE :: icloud_local:),:)
2. Allocate the new variable it: ALLOCATE(icloud_local(ims:ime,jms:jme))
3. Then populate it based on landmask:
DO j = jts, jte
DO i = its, ite
IF (xlmask(i,j) >= 0.5) THEN
icloud_local(i,j) = 1 ! Turn off cloud radiative effects over land
ELSE
icloud_local(i,j) = 0 ! Keep normal cloud radiative effects over ocean
END IF
END DO
END DO
4. Call icloud_local into the calls to RRTMG radiation routines (i.e., module_ra_rrtmg_lw and module_ra_rrtmg_sw)

But this is where I get into some trouble.

The RRTMG radiation routines call icloud to start loops since it is natively a scaler. Since I want icloud to be a 2-d vector, I would need to loop through the 2-d icloud_local variable before starting the loops, which I could imagine being computationally expensive.

Let me know what you all think.
 

Attachments

  • namelist.input.txt
    4 KB · Views: 1
I am thinking that it is better to keep icould as a scalar and pass its value to radiation based on landmask.

Once it is changed to a 2D array, you probably will have to handle domain decomposition and parallel issue, making it too complicated.
 
I am thinking that it is better to keep icould as a scalar and pass its value to radiation based on landmask.

Once it is changed to a 2D array, you probably will have to handle domain decomposition and parallel issue, making it too complicated.
Thank you for your response Ming,

I think I follow. For example, in the module_ra_rrtmg_lw & sw, as it loops through latitude and longitude, instead of the "IF (ICLOUD .ne. 0) THEN" statement, make it dependent on if over land or ocean with an edit like "IF (XLAND(i,j) .le. 0.5) THEN"?
 
I believe that xland has been passed onto radiation driver and from the driver to specific radiation scheme. In this case, yes you are right that you can use the condition "IF (XLAND(i,j) .le. 0.5) THEN" to specify icloud =0 over water points.
 
Top