Opened 5 years ago

Closed 4 years ago

#248 closed enhancement (fixed)

keywords inter_lin and netrad_cons in dim2driver

Reported by: aducharne Owned by: aducharne
Priority: trivial Milestone: IPSLCM6.v1
Component: Driver files Version: trunc
Keywords: Cc:


By default, dim2driver assumes the following keyword values:
inter_lin = .false.
netrad_cons = .false.

Then, in readdim2.f90, we find (L1574-1578, for daily_interpol=F):

IF ( netrad_cons ) THEN
    lwdown(:,:) = lwdown_n(:,:)
    lwdown(:,:) = (lwdown_n(:,:)-lwdown_nm1(:,:))*rw + lwdown_nm1(:,:)

This reveals several inconsistencies:
1) inter_lin=F leads to linearly interpolate the downwelling LW flux
2) linearly interpolating the forcing fluxes between two successives records does not conserve mass or energy, so its illogical to associate netrad_cons = .false. to inter_lin = .false.

The explanation to the fact that linearly interpolation a flux does not conserve it with respect to value in the forcing is explained in
Summary for LW : in dim2driver, the value read at t0+dt is the mean value over [t0,t0+dt]; if we linearly interpolate LW between t0 and t0+dt, the mean value becomes (LW(t0)+LW(t0+dt))/2, which is usually different from LW(t0+dt). So if we do a linear interpolation, we change the amount of energy that is received by the surface compared to what is defined in the forcing file.

Proposed solution:
For conservation, we need that netrad_cons = .true. by default
For clarity, we need that inter_lin = .false. when netrad_cons = .true.
This can be coded in dim2driver like below:

611	  inter_lin = .FALSE.
666	  IF (inter_lin) THEN
667	     !Config Key   = NETRAD_CONS
668	     !Config Desc  = Conserve net radiation in the forcing
669	     !Config Def   = y
670	     !Config If    = INTER_LIN
671	     !Config Help  = When the interpolation is used the net radiation
672	     !Config         provided by the forcing is not conserved anymore.
673	     !Config         This should be avoided and thus this option should
674	     !Config         be TRUE (y).
675	     !Config         This option is not used for short-wave if the
676	     !Config         time-step of the forcing is longer than an hour.
677	     !Config         It does not make sense to try and reconstruct
678	     !Config         a diurnal cycle and at the same time conserve the
679	     !Config         incoming solar radiation.
680	     !Config Units = [FLAG]
681	     !-
682	     netrad_cons = .FALSE.
683	     CALL getin_p('NETRAD_CONS', netrad_cons)
684	  ELSE
685	     netrad_cons = .TRUE.
686	  ENDIF


Change History (5)

comment:1 Changed 5 years ago by aducharne

  • Component changed from Anthropogenic processes to Driver files
  • Milestone set to IPSLCM6.v1
  • Owner changed from somebody to aducharne
  • Priority changed from major to trivial
  • Status changed from new to accepted
  • Type changed from defect to enhancement
  • Version set to trunc

comment:2 Changed 5 years ago by jpolcher

NETRAD_CONS is a badly names flag as net radiation cannot be conserved anyway. We can propose to conserve incoming radiative energy, that is all.

In orchideedriver the flag LWDOWN_CONS was added (revision 3567) so that the user can select to conserve this flux as well. The impact of conserving LWdown is small compared to other issues in the forcing data, but it is a legitimate condition to put onto the temporal interpolation and the user needs to have this choice.

So I have no preference as to the default value of LWDOWN_CONS !

comment:3 Changed 4 years ago by jpolcher

In the new driver the following choice was made :

! Read the configuration options for the time interpolations.
!Config Key = LWDOWN_CONS
!Config Desc = Conserve the longwave downward radiation of the forcing
!Config Def = n
!Config Help = This flag allows to conserve the downward longwave radiation
! provided in the forcing. It will do this by taking the closest
! neighbour in time from the forcing. This assumes that the forcing
! contains average fluxes. The default setting (LWDOWN_CONS=n) will
! force the model to perform a linear interpolation of the fluxes.
!Config Units = [FLAG]
lwdown_cons = .FALSE.
CALL getin('LWDOWN_CONS', lwdown_cons)

It is probably to specify that LWdown is conserved as SWdown is treated independently.

comment:4 Changed 4 years ago by aducharne

La proposition faite dans le corps du ticket ne convient pas, car elle amène à changer le comportement par défaut du modèle.

Mais en regardant le code dim2driver plus attentivement, il semble que le keywork inter_lin ne sert à rien si ce n'est:

  • à définir no_inter, qui lui même ne sert qu'à définir inter_lin
  • à modifier la définition par défaut de netrad_cons

Si je suis bien ce qui est fait dans dim2driver:
a) keywords par défaut:
b) netrad_cons en concerne que la conservation du LWdown, comme indiqué par Jan
c) dim2driver se sert de l'info inter_lin pour modifier le comportement par défaut associé netrad_cons: comme inter_lin=F, alors netrad=F contrairement à ce qui est suggéré par le keyword
d) ce comportement est identique au comportement par défaut du nouveau driver, contrôlé par LWDOWN_CONS=n

Si cette analyse est correcte, une solution simple et conservative serait de faire les modifs suivantes dans dim2driver :

  • supprimer les keywords INTER_LIN et NO_INTER,
  • remplacer le keywork NETRAD_CONS par celui de LWDOWN_CONS, avec une valeur par défaut de n/false
  • faire en sorte dans dim2driver que si LWDOWN_CONS=n, alors netrad_cons=F

On garde donc pour dim2driver le même comportement par défaut qu'avant, qui est aussi le même que pour orchideedriver, mais on l'obtient cette fois avec un keyword qui nous les bonnes indications (il s'agit de l'interpolation du LWDOWN et on ne le conserve pas). En plus, on en profite pour supprimer deux keywords inutiles, ce qui est toujours agréable !

comment:5 Changed 4 years ago by aducharne

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

Nous avons:

  • supprimé INTER_LIN et NO_INTER

Leur valeur par défaut est FALSE, ce qui donne le meme comportement que celui par defaut avant les changements.
On a aussi nettoyé un peu : suppresion d'un else où on n'allait jamais.
Codé et testé par Agnès Josefine
Committé dans r4629

Note: See TracTickets for help on using tickets.