1 | ! **************************************************************** |
---|
2 | ! 1) entre P_tdebgel (0 degrees C) et tgel10 : GEL varie de 1.0 à 0.9 |
---|
3 | ! 2) entre tgel10 et tgel90 : GEL varie de 0.9 à 0.1 |
---|
4 | ! 3) entre tgel90 et P_tletale : GEL varie de 0.1 à 0.0 |
---|
5 | ! **************************************************************** |
---|
6 | ! ml_com ! |
---|
7 | ! *-----------------------------------------------------------------------------------------------------------------------------------------------------------* c! |
---|
8 | !! This function calculates the frost index according to the temperatures |
---|
9 | !> - tdebgel, corresponding to the beginning of frost damage |
---|
10 | !> - tgel10, corresponding to 10 % of frost damages |
---|
11 | !> - tgel90, corresponding to 90 % of frost damages |
---|
12 | !> - tletale, corresponding to the lethal temperature for the plant |
---|
13 | ! *-----------------------------------------------------------------------------------------------------------------------------------------------------------* c! |
---|
14 | |
---|
15 | |
---|
16 | module Divers_gel |
---|
17 | |
---|
18 | USE Stics |
---|
19 | |
---|
20 | IMPLICIT NONE |
---|
21 | PRIVATE |
---|
22 | PUBLIC GEL |
---|
23 | |
---|
24 | contains |
---|
25 | |
---|
26 | real function GEL(codegel,t,tgel90,tgel10) |
---|
27 | |
---|
28 | implicit none |
---|
29 | |
---|
30 | !: Arguments |
---|
31 | integer, intent(IN) :: codegel |
---|
32 | real, intent(IN) :: t |
---|
33 | !real, intent(IN) :: P_tletale !> // PARAMETER // lethal temperature for the plant // degree C // PARPLT // 1 |
---|
34 | !real, intent(IN) :: P_tdebgel !> // PARAMETER // temperature of frost beginning // degree C // PARPLT // 1 |
---|
35 | real, intent(IN) :: tgel10 |
---|
36 | real, intent(IN) :: tgel90 |
---|
37 | |
---|
38 | !: Variables locales |
---|
39 | real :: a !> |
---|
40 | real :: b |
---|
41 | |
---|
42 | !: Pas de stress si codegel = 1 |
---|
43 | if (codegel == 1) then |
---|
44 | GEL = 1. |
---|
45 | return |
---|
46 | endif |
---|
47 | |
---|
48 | !: Si t > P_tdebgel : pas de GEL |
---|
49 | if (t >= P_tdebgel) then |
---|
50 | GEL = 1. |
---|
51 | return |
---|
52 | endif |
---|
53 | |
---|
54 | !: De P_tdebgel à tgel10 |
---|
55 | if (t < P_tdebgel .and. t >= tgel10 .and. tgel10 < P_tdebgel) then |
---|
56 | a = (0.9 - 1.0) / (tgel10 - P_tdebgel) |
---|
57 | b = 1.0 - (a * P_tdebgel) |
---|
58 | GEL = (a * t) + b |
---|
59 | return |
---|
60 | endif |
---|
61 | |
---|
62 | !: De tgel10 à tgel90 |
---|
63 | if (t < tgel10 .and. t >= tgel90 .and. tgel90 < tgel10) then |
---|
64 | a = (0.9 - 0.1) / (tgel10 - tgel90) |
---|
65 | b = 0.9 - (a * tgel10) |
---|
66 | GEL = (a * t) + b |
---|
67 | return |
---|
68 | endif |
---|
69 | |
---|
70 | !: De tgel90 à P_tletale |
---|
71 | if (t < tgel90 .and. t >= P_tletale .and. P_tletale < tgel90) then |
---|
72 | a = (0. - 0.1) / (P_tletale - tgel90) |
---|
73 | b = 0. - (a * P_tletale) |
---|
74 | GEL = (a * t) + b |
---|
75 | return |
---|
76 | endif |
---|
77 | |
---|
78 | !: En dessous de P_tletale |
---|
79 | if (t < P_tletale) then |
---|
80 | GEL = 0. |
---|
81 | return |
---|
82 | endif |
---|
83 | |
---|
84 | return |
---|
85 | end function GEL |
---|
86 | end module Divers_gel |
---|