Changes between Initial Version and Version 1 of DevelopmentActivities/MergeHydro/flag_couple_note


Ignore:
Timestamp:
2011-10-13T13:53:38+02:00 (11 years ago)
Author:
nvuilsce
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DevelopmentActivities/MergeHydro/flag_couple_note

    v1 v1  
     1= Fiche : flag couplé = 
     2 
     3== Description == 
     4Plusieurs formulations (humrel, drysoil_frac, rsol, albedo) avaient été modifiées pour des applications en mode couplé afin de compenser des biais du modèle. Ces formulations proposées par Nathalie et Frédéric ne sont pas présentes dans la version LMD, version qui conserve donc les formulations originelles.  
     5 
     6== Choix == 
     7On décide de rajouter un flag spécifique pour le couplé (flag non actif par défaut) permettant d'activer les formulations proposées par Nathalie et Frédéric. Les modules impactées sont condveg.f90 pour alb_bare et hydrolc.f90 pour rsol, drysoilfrac, throughfall et humrel 
     8 
     9== Mise en oeuvre == 
     10La version à modifier est la version d'origine (1.9 ou 1.9.4) 
     11 
     12 * dans condveg.f90  
     13  * Traitement de alb_bare_model 
     14   * On remplace  
     15{{{ 
     16      alb_bare_model=.FALSE. 
     17       CALL getin_p('ALB_BARE_MODEL', alb_bare_model) 
     18}}} 
     19   par 
     20   {{{ 
     21      ! Declaration d'une variable du module en tete de module 
     22      LOGICAL, SAVE                         :: couple = .FALSE. 
     23 
     24+ 
     25 
     26      alb_bare_model = .TRUE. 
     27      CALL getin_p('COUPLE', couple)     
     28      IF(couple) THEN 
     29             alb_bare_model = .FALSE. 
     30       ENDIF 
     31       CALL getin_p('ALB_BARE_MODEL', alb_bare_model) 
     32   }}} 
     33 
     34 * dans hydrolc.f90  
     35  * Traitement de rsol 
     36 
     37   * On remplace dans hydrolc_var_init 
     38{{{ 
     39    ! 
     40    ! Compute the resistance to bare soil evaporation 
     41    ! 
     42    rsol(:) = -un 
     43    DO ji = 1, kjpindex 
     44       IF (veget(ji,1) .GE. min_sechiba) THEN 
     45          ! 
     46          ! Correction Nathalie - le 28 mars 2006 - sur conseils Fred Hourdin 
     47          ! on modifie le rsol pour que la resistance croisse subitement si on s'approche 
     48          ! du fond. En gros, rsol=hdry*rsol_cste pour hdry < 1m70 
     49          !Ancienne formulation 
     50          rsol(ji) = dss(ji,1) * rsol_cste 
     51          !Nouvelle formulation Nath           
     52          !rsol(ji) =  ( drysoil_frac(ji) + 1./(10.*(dpu_cste - drysoil_frac(ji))+1.e-10)**2 ) * rsol_cste 
     53       ENDIF 
     54    ENDDO 
     55}}} 
     56par 
     57{{{ 
     58    ! Declaration d'une variable du module en tete de module 
     59    LOGICAL, SAVE                                     ::  couple = .FALSE. 
     60 
     61+ 
     62 
     63    ! Nouvelle Declaration locale 
     64    REAL(r_std), DIMENSION (kjpindex) :: frsoil  
     65 
     66 
     67 
     68    ! 
     69    ! Compute the resistance to bare soil evaporation 
     70    ! 
     71    CALL getin_p('COUPLE', couple)       
     72    IF(couple) THEN 
     73       frsoil(:)=( drysoil_frac(:) + 1./(10.*(dpu_cste – drysoil_frac(:))+1.e-10)**2 )  
     74    ELSE 
     75       frsoil(:)=dss(:,1)  
     76    ENDIF 
     77    rsol(:) = -un 
     78    DO ji = 1, kjpindex 
     79       IF (veget(ji,1) .GE. min_sechiba) THEN 
     80         rsol(ji) = dss(ji,1) * rsol_cste 
     81       ENDIF    
     82    ENDDO 
     83}}} 
     84 
     85 
     86   * On remplace dans hydrolc_soil 
     87{{{ 
     88    ! The fraction of visibly dry soil (dry when dss(:,1) = 0.1 m) 
     89    ! Correction Nathalie - le 28 Mars 2006 - re-ecriture drysoil_frac/hdry - Fred Hourdin 
     90    !drysoil_frac(:) = MIN(MAX(dss(:,1),0.)*10._r_std, un) 
     91    drysoil_frac(:) = a_subgrd(:,1)*dss(:,1) + (1.-a_subgrd(:,1))*dsp(:,1) 
     92    ! 
     93    ! Compute the resistance to bare soil evaporation. 
     94    ! 
     95    rsol(:) = -un 
     96    DO ji = 1, kjpindex 
     97       IF (veget(ji,1) .GE. min_sechiba) THEN 
     98          ! 
     99          ! Correction Nathalie - le 28 mars 2006 - sur conseils Fred Hourdin 
     100          ! on modifie le rsol pour que la resistance croisse subitement si on s'approche 
     101          ! du fond. En gros, rsol=hdry*rsol_cste pour hdry < 1m70 
     102          !rsol(ji) = dss(ji,1) * rsol_cste 
     103          rsol(ji) =  ( drysoil_frac(ji) + 1./(10.*(dpu_cste - drysoil_frac(ji))+1.e-10)**2 ) * rsol_cste 
     104       ENDIF 
     105    ENDDO 
     106}}} 
     107par 
     108{{{ 
     109    ! Nouvelle Declaration locale 
     110    REAL(r_std), DIMENSION (kjpindex) :: frsoil  
     111 
     112    ! The fraction of visibly dry soil (dry when dss(:,1) = 0.1 m) 
     113    IF (couple) THEN 
     114       ! Correction Nathalie - le 28 Mars 2006 - re-ecriture drysoil_frac/hdry - Fred Hourdin     
     115       ! on modifie le rsol pour que la resistance croisse subitement si on s'approche 
     116       ! du fond. En gros, rsol=hdry*rsol_cste pour hdry < 1m70 
     117       drysoil_frac(:) = a_subgrd(:,1)*dss(:,1) + (1.-a_subgrd(:,1))*dsp(:,1) 
     118       frsoil(:)=( drysoil_frac(:) + 1./(10.*(dpu_cste – drysoil_frac(:))+1.e-10)**2 )  
     119    ELSE 
     120       drysoil_frac(:) = MIN(MAX(dss(:,1),0.)*10._r_std, un) 
     121       frsoil(:)=dss(:,1) 
     122    ENDIF 
     123    ! 
     124    ! Compute the resistance to bare soil evaporation. 
     125    ! 
     126    rsol(:) = -un 
     127    DO ji = 1, kjpindex 
     128       IF (veget(ji,1) .GE. min_sechiba) THEN 
     129          rsol(ji) = frsoil(ji) * rsol_cste 
     130       ENDIF 
     131    ENDDO 
     132}}} 
     133 
     134  * Traitement de throughfall (pour calcul de precisol et qsintveg) 
     135 
     136   * On remplace dans hydrolc_canop 
     137{{{ 
     138    IF ( firstcall ) THEN 
     139       !Config  Key  = PERCENT_THROUGHFALL_PFT 
     140       !Config  Desc = Percent by PFT of precip that is not intercepted by the canopy 
     141       !Config  Def  = 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 
     142       !Config  Help = During one rainfall event, PERCENT_THROUGHFALL_PFT% of the incident rainfall 
     143       !Config         will get directly to the ground without being intercepted, for each PFT. 
     144        
     145       throughfall_by_pft = (/ 30., 30., 30., 30., 30., 30., 30., 30., 30., 30., 30., 30., 30. /) 
     146       CALL getin_p('PERCENT_THROUGHFALL_PFT',throughfall_by_pft) 
     147       throughfall_by_pft = throughfall_by_pft / 100. 
     148 
     149       firstcall=.FALSE. 
     150    ENDIF 
     151}}} 
     152   par  
     153{{{ 
     154    IF ( firstcall ) THEN 
     155       !Config  Key  = PERCENT_THROUGHFALL_PFT 
     156       !Config  Desc = Percent by PFT of precip that is not intercepted by the canopy 
     157       !Config  Def  = 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 
     158       !Config  Help = During one rainfall event, PERCENT_THROUGHFALL_PFT% of the incident rainfall 
     159       !Config         will get directly to the ground without being intercepted, for each PFT. 
     160        
     161       throughfall_by_pft = (/ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0. /) 
     162 
     163       IF (couple) THEN 
     164        throughfall_by_pft = (/ 30., 30., 30., 30., 30., 30., 30., 30., 30., 30., 30., 30., 30. /) 
     165       ENDIF 
     166       CALL getin_p('PERCENT_THROUGHFALL_PFT',throughfall_by_pft) 
     167  
     168      throughfall_by_pft = throughfall_by_pft / 100. 
     169 
     170       firstcall=.FALSE. 
     171    ENDIF 
     172}}} 
     173 
     174  * Traitement de humrel 
     175 
     176   * On remplace dans hydrolc_soil 
     177{{{ 
     178            ELSE 
     179               ! Corrections Nathalie - le 28 Mars 2006 - sur conseils Fred Hourdin 
     180               !zhumrel_lo(ji) = EXP( - humcste(jv) * dpu_cste * (dsp(ji,jv)/dpu_cste) ) 
     181               !zhumrel_up(ji) = EXP( - humcste(jv) * dpu_cste * (dss(ji,jv)/dsg(ji,jv)) ) 
     182               !humrel(ji,jv) = MAX(zhumrel_lo(ji),zhumrel_up(ji)) 
     183               ! 
     184               ! As we need a slower variable for vegetation growth the stress is computed 
     185               ! differently than in humrel. 
     186               ! 
     187               zhumrel_lo(ji) = EXP( - humcste(jv) * dsp(ji,jv)) 
     188               zhumrel_up(ji) = EXP( - humcste(jv) * dss(ji,jv)) 
     189               ! Ajouts Nathalie - Fred - le 28 Mars 2006 
     190               a_subgrd(ji,jv)=MIN(MAX(dsg(ji,jv)-dss(ji,jv),0.)/dsg_min,1.) 
     191               humrel(ji,jv)=a_subgrd(ji,jv)*zhumrel_up(ji)+(1.-a_subgrd(ji,jv))*zhumrel_lo(ji) 
     192               ! 
     193               vegstress(ji,jv) = zhumrel_lo(ji) + zhumrel_up(ji) - EXP( - humcste(jv) * dsg(ji,jv) )  
     194               ! 
     195            ENDIF 
     196}}} 
     197par 
     198{{{  
     199           ELSE 
     200           IF(couple) 
     201               ! Ajouts Nathalie - Fred - le 28 Mars 2006 
     202                     zhumrel_lo(ji) = EXP( - humcste(jv) * dsp(ji,jv)) 
     203                     zhumrel_up(ji) = EXP( - humcste(jv) * dss(ji,jv)) 
     204                    a_subgrd(ji,jv)=MIN(MAX(dsg(ji,jv)-dss(ji,jv),0.)/dsg_min,1.) 
     205                    humrel(ji,jv)=a_subgrd(ji,jv)*zhumrel_up(ji)+(1.-a_subgrd(ji,jv))*zhumrel_lo(ji) 
     206           ELSE 
     207                    zhumrel_lo(ji) = EXP( - humcste(jv) * dpu_cste * (dsp(ji,jv)/dpu_cste) ) 
     208                    zhumrel_up(ji) = EXP( - humcste(jv) * dpu_cste * (dss(ji,jv)/dsg(ji,jv)) ) 
     209                    humrel(ji,jv) = MAX(zhumrel_lo(ji),zhumrel_up(ji)) 
     210           ENDIF 
     211             ENDIF 
     212}}} 
     213 
     214 
     215== Tests ==