Opened 4 years ago

Closed 4 years ago

#389 closed defect (fixed)

Negative snownobio values

Reported by: maignan Owned by: somebody
Priority: major Milestone: IPSLCM6.v1
Component: Physical processes Version: trunc
Keywords: Cc:

Description

JG has observed that for very small nobio fractions (<~0.002), snownobio may become negative.
This can be seen in the monitoring here:
https://vesg.ipsl.upmc.fr/thredds/fileServer/IPSLFS/igcmg/interMonitoring/set60211/index.html
The problem is observed both in forced and coupled modes. See for example:

On top some pixels in Asia/Himalaya (problems with small nobio fractions), on bottom some pixels in South America (no problem, nobio fractions are higher). Outputs are here:
/ccc/store/cont003/gencmip6/p86ghatt/IGCM_OUT/LMDZOR/PROD/ref4438/CL4.4438.L6010.ref/SRF/Analyse/TS_MO
The problem originates from this part of the code in explicitsnow.f90:

       IF ( snow(ji) > snowcri ) THEN
          subsnownobio(ji,iice) = frac_nobio(ji,iice)*vevapsno(ji)
          subsnowveg(ji) = vevapsno(ji) - subsnownobio(ji,iice)
       ELSE
          IF ( frac_nobio(ji,iice) .GT. min_sechiba) THEN
             subsnownobio(ji,iice) = vevapsno(ji)
             subsnowveg(ji) = zero
          ELSE
             subsnownobio(ji,iice) = zero
             subsnowveg(ji) = vevapsno(ji)
          ENDIF
       ENDIF
...
       !! 3.2. Sublimation - was calculated before it can give us negative snow_nobio but that is OK
       !!      Once it goes below a certain values (-maxmass_snow for instance) we should kill
       !!      the frac_nobio(ji,iice) !

       snow_nobio(ji,iice) = snow_nobio(ji,iice) - subsnownobio(ji,iice)

FM and CO have analysed the code and propose the following modified code, keeping the present structure with improved comments and adding two tests to prevent negative snownobio values:

       IF ( snow(ji) > snowcri ) THEN
!There is enough snow to split the sublimation demand between the nobio and vegetation parts.
             IF (snow_nobio(ji,iice) .GE. vevapsno(ji)) THEN
!There is enough snow on the ice fraction to sustain the sublimation demand.
          	subsnownobio(ji,iice) = frac_nobio(ji,iice)*vevapsno(ji)
	     ELSE
!There is not enough snow on the ice fraction to sustain the sublimation demand.
!We take all the nobio snow and set the remaining sublimation demand on the vegetation fraction.
!We do this because the nobio snow cannot deal with a too high sublimation demand, whereas the vegetation fraction can, through the subsinksoil variable (see below 2.8.1), which is taken into account in the water budget (see TWBR in hydrol.f90).
             	subsnownobio(ji,iice) = snow_nobio(ji,iice)
	     ENDIF
             subsnowveg(ji) = vevapsno(ji) - subsnownobio(ji,iice)
       ELSE
!There is a small amount of snow.
          IF ( frac_nobio(ji,iice) .GT. min_sechiba) THEN
!The ice fraction is not too small. In this case, we make the hypothesis that the snow is mainly on the ice fraction.
             IF (snow_nobio(ji,iice) .GE. vevapsno(ji)) THEN
!There is enough snow on the ice fraction to sustain the sublimation demand.
             	subsnownobio(ji,iice) = vevapsno(ji)
             	subsnowveg(ji) = zero
	     ELSE
!There is not enough snow on the ice fraction to sustain the sublimation demand.
!We take all the nobio snow and set the remaining sublimation demand on the vegetation fraction.
!We do this beacuse the nobio snow cannot deal with a too high sublimation demand, whereas the vegetation fraction can, through the subsinksoil variable (see below 2.8.1), which is taken into account in the water budget (see TWBR in hydrol.f90).
             	subsnownobio(ji,iice) = snow_nobio(ji,iice)
		subsnowveg(ji) = vevapsno(ji) - subsnownobio(ji,iice)
	     ENDIF
          ELSE
!The nobio snow fraction is too small, the vegetation fraction deals with the whole sublimation demand.
             subsnownobio(ji,iice) = zero
             subsnowveg(ji) = vevapsno(ji)
          ENDIF
       ENDIF      
...      
       !! 3.2. Sublimation - was calculated before, it cannot give us negative snow_nobio (see 2.9).
       
       snow_nobio(ji,iice) = snow_nobio(ji,iice) - subsnownobio(ji,iice)

The modified code has been tested with a global run (two-degree spatial resolution, daily outputs).
initial version (snownobio in kg/m2):
MEAN(snownobio)= -0.00553174 MAX(snownobio)= 2.52271 MIN(snownobio)= -8.49522
modified version:
MEAN(snownobio)= 0.000346666 MAX(snownobio)= 2.31415 MIN(snownobio)= 0.00000
Corresponding statistics of TWBR do not change.

Attachments (1)

snownobio.png (25.1 KB) - added by maignan 4 years ago.

Download all attachments as: .zip

Change History (2)

Changed 4 years ago by maignan

comment:1 Changed 4 years ago by jgipsl

  • Resolution set to fixed
  • Status changed from new to closed

Commit done in the trunk rev [4575]

Note: See TracTickets for help on using tickets.