1 | !> Module of vernalisation or chilling requirements |
---|
2 | !> - Stics book paragraphe 2.3.4, page 33-36 |
---|
3 | !> |
---|
4 | !! Winter crops and perennial crops in temperate climate zones have vernalisation or chilling requirements. The formalisations classically applied and used |
---|
5 | !! in STICS differ for herbaceous plants (vernalisation) and woody plants (dormancy). For herbaceous plants, the resting state is considered not to be total, |
---|
6 | !! and the "vernalisation" formalisation which applies to herbaceous plants allows a partial accumulation of development units during winter rest. |
---|
7 | !! For woody plants the "dormancy" formalisations are much severe, and development units are only active when all chilling requirements have been met. |
---|
8 | !! Consequently, non-compliance with vernalisation requirements slows (rfvi <1 for herbaceous plants) or stops (rfvi = 0 for ligneous plants) the development of crops. |
---|
9 | !! For woody plants the post-dormancy period is characterized by the phasic course between dormancy break (ifindorm) and budding (ILEV), i.e. stdordebour. |
---|
10 | !> - Vernalisation (achieved by function "Vernalisation" in this module) |
---|
11 | !! Vernalisation requirements are defined by the genotype-dependent number of vernalising days (jvc) and the vernalising value of a given day (jvi) depends on |
---|
12 | !! crop temperature. Vernalising days are counted from germination (IGER) for annual crops because an active metabolism is required to initiate the process, |
---|
13 | !! or from the julvernal day for perennial crops. A minimum number of vernalising days, jvcmini is required. The progress in crop vernalisation, rfvi, |
---|
14 | !! gradually increases until it reaches the value of 1. |
---|
15 | !! tfroid (optimum vernalisation temperature) and ampfroid (thermal semi-amplitude of the vernalising effect) are parameters which provide the range of |
---|
16 | !! vernalising activity of temperatures. ampfroid indicates the sensitivity of the species to vernalisation: if it is low, the range of vernalising temperatures |
---|
17 | !! is narrow and a long period will be necessary to meet the requirements; if it is high, the temperature range is broader and results in more rapid vernalisation. |
---|
18 | !> - Dormancy (achieved by functions "Dormancy_Richardson" and "Dormancy_Bidabe" in this module) |
---|
19 | !! This module deals with the perennial dormancy and not with the dormancy break of annual crop grains such as wheat, barley or pea that can lead to germination |
---|
20 | !! of the grain on the plants before harvest. |
---|
21 | !! The aim is to calculate the day of break of dormancy (IFINDORM), which makes it possible to change the rfvi variable from 0 to 1, bearing in mind that it is |
---|
22 | !! always possible to impose this date and ignore the following dormancy calculations. Two options are available to calculate the break of dormancy, relying on |
---|
23 | !! well known formulae used for fruit trees for both vegetative or reproductive buds, and minimal and maximal values of the air temperature (tmin and tmax). |
---|
24 | !> - The first dormancy calculation included in STICS (see function "Dormancy_Richardson") is the one by Richardson et al. (1974), developed for peach trees. |
---|
25 | !! It is based on accumulated chilling hourly units (cuh) effective to ensure break of dormancy. The relationship between cuh and hourly temperature |
---|
26 | !! is a "stepped" function. |
---|
27 | !! In order to be able to use bibliographic references to chilling requirements, we reconstitute hourly temperatures in accordance with Richardson's proposals |
---|
28 | !! (Richardson et al., 1974): min at 0 hour, tmax at 12 hours and linear interpolation between the two. The active sum of cuh starts in the autumn as soon |
---|
29 | !! as the cuh are positive, defining idebdorm. The instability which may be generated by alternating positive and negative cuh has no effect on the final |
---|
30 | !! result for dormancy break. |
---|
31 | !> - The second dormancy calculation (see function "Dormancy_Bidabe") is derived from the formulation proposed by Bidabe in 1965 to calculate dormancy and |
---|
32 | !! post-dormancy durations for apple trees, based on the Q10 notion which corresponds to exponential type responses to temperature. |
---|
33 | !! In STICS, we just use what concerns the dormancy period, since the post-dormancy period (i.e. from IFINDORM to ILEV) |
---|
34 | !! is accounted for by the positive responses to temperature. The daily responses are accumulated (cu) until the current day (I) from a starting date (idebdorm) |
---|
35 | !! generally taken to be during the autumn or the summer (Garcia de Cortazar, 2006). It has little effect on the calculation. The genetic-dependent parameter |
---|
36 | !! for the amount of chilling requirement is jvc. |
---|
37 | !*-----------------------------------------------------------------------------------------------------------------------------------------------------------* c!! |
---|
38 | module Besoins_en_froid |
---|
39 | |
---|
40 | USE Stics |
---|
41 | |
---|
42 | IMPLICIT NONE |
---|
43 | PRIVATE |
---|
44 | PUBLIC Vernalisation |
---|
45 | |
---|
46 | contains |
---|
47 | |
---|
48 | |
---|
49 | !> *************************************************** ! |
---|
50 | !! * Calcul des besoins en froid (sortie de develop) * ! |
---|
51 | !< *************************************************** ! |
---|
52 | |
---|
53 | !> I comment the subroutine broid----xcwu |
---|
54 | |
---|
55 | |
---|
56 | !subroutine bfroid(tdev,P_codebfroid,caljvc,P_jvc,P_jvcmini,rfvi,etatvernal,P_codeperenne,P_culturean,P_codeinitprec,maxwth, & |
---|
57 | !! nbjanrec,nrecbutoir,P_tfroid,P_ampfroid,jjul,P_codedormance,thor,cu_min,cu_veille,cu,ndebdorm,n,P_q10,tmin,tmax) |
---|
58 | !! DR 20/07/2012 on a plus besoin de jjul |
---|
59 | ! nbjanrec,nrecbutoir,P_tfroid,P_ampfroid,P_codedormance, & |
---|
60 | ! ! thor,cu_min,cu_veille,cu,ndebdorm,n,P_q10,tmin,tmax) |
---|
61 | ! !-- apparemment, en trop, inutile ,numcult) |
---|
62 | ! |
---|
63 | !implicit none |
---|
64 | ! |
---|
65 | !!: les ARGUMENTS |
---|
66 | ! real, intent(IN) :: tdev |
---|
67 | ! integer, intent(IN) :: P_codebfroid !> // PARAMETER // option of calculation of chilling requirements // code 1/2 // PARPLT // 0 |
---|
68 | ! real, intent(INOUT) :: caljvc |
---|
69 | ! real, intent(IN) :: P_jvc !> // PARAMETER // Number of vernalizing days // day // PARPLT // 1 |
---|
70 | ! real, intent(IN) :: P_jvcmini !> // PARAMETER // Minimum number of vernalising days // day // PARPLT // 1 |
---|
71 | ! real, intent(OUT) :: rfvi !> // OUTPUT // Slowing effect of the vernalization on plant development // 0-1 |
---|
72 | ! logical, intent(INOUT) :: etatvernal |
---|
73 | ! integer, intent(IN) :: P_codeperenne !> // PARAMETER // option defining the annual (1) or perenial (2) character of the plant // code 1/2 // PARPLT // 0 |
---|
74 | ! integer, intent(IN) :: P_culturean !> // PARAMETER // crop status 1 = over 1 calendar year ,other than 1 = on two calendar years (winter crop in northern hemisphere) // code 0/1 // P_USM/USMXML // 0 |
---|
75 | ! integer, intent(IN) :: P_codeinitprec !> // PARAMETER // reinitializing initial status in case of chaining simulations : yes (1), no (2) // code 1/2 // PARAM // 0 |
---|
76 | ! integer, intent(INOUT) :: maxwth |
---|
77 | ! integer, intent(IN) :: nbjanrec |
---|
78 | ! integer, intent(OUT) :: nrecbutoir |
---|
79 | ! real, intent(IN) :: P_tfroid !> // PARAMETER // optimal temperature for vernalisation // degree C // PARPLT // 1 |
---|
80 | ! real, intent(IN) :: P_ampfroid !> // PARAMETER // semi thermal amplitude thermique for vernalising effect // degree C // PARPLT // 1 |
---|
81 | !! DR 20/07/2012 on a plus besoin de jjul |
---|
82 | !! integer, intent(IN) :: jjul |
---|
83 | ! integer, intent(IN) :: P_codedormance !> // PARAMETER // option of calculation of dormancy and chilling requirement // code 1/2 // PARPLT // 0 |
---|
84 | ! real, intent(IN) :: thor(24) |
---|
85 | ! real, intent(IN) :: cu_min |
---|
86 | ! real, intent(IN) :: cu_veille |
---|
87 | ! real, intent(INOUT) :: cu |
---|
88 | ! integer, intent(INOUT) :: ndebdorm |
---|
89 | ! integer, intent(IN) :: n |
---|
90 | ! real, intent(IN) :: P_q10 !> // PARAMETER // P_Q10 used for the dormancy break calculation // SD // PARPLT // 1 |
---|
91 | ! real, intent(IN) :: tmin !> // OUTPUT // Minimum active temperature of air // degree C |
---|
92 | ! real, intent(IN) :: tmax !> // OUTPUT // Maximum active temperature of air // degree C |
---|
93 | ! !--integer, intent(IN) :: numcult |
---|
94 | ! |
---|
95 | ! |
---|
96 | ! !: Cas des cultures vernalisantes NB le 13/3 |
---|
97 | ! if (P_codebfroid == 2) then |
---|
98 | ! call Vernalisation(tdev,P_jvc,P_jvcmini,P_codeperenne,P_culturean, & ! IN |
---|
99 | ! P_codeinitprec,nbjanrec,P_tfroid,P_ampfroid,n, & ! IN !!DR 20/07/2012 pas besoin de jjul |
---|
100 | ! rfvi,nrecbutoir,maxwth,caljvc,etatvernal) ! OUT & INOUT |
---|
101 | ! endif |
---|
102 | ! |
---|
103 | ! !: Cas des cultures dormantes NB le 13/3 |
---|
104 | ! !- calcul des Chill Units (Richardson, 1974) |
---|
105 | ! ! dr et igc 28/08/2012 test s'applique seulement à Richardson |
---|
106 | ! !if (P_codebfroid == 3 .and. P_codedormance <= 2) then |
---|
107 | ! if (P_codebfroid == 3 .and. P_codedormance == 2) then |
---|
108 | ! call Dormancy_Richardson(thor,n,cu_min,cu_veille,ndebdorm,cu) |
---|
109 | ! endif |
---|
110 | ! |
---|
111 | ! !: calcul des besoins en froid selon Bidabe |
---|
112 | ! if (P_codebfroid == 3 .and. P_codedormance == 3) then |
---|
113 | ! call Dormancy_Bidabe(n,ndebdorm,P_q10,tmin,tmax,cu_veille,cu) |
---|
114 | ! endif |
---|
115 | ! |
---|
116 | !return |
---|
117 | !end subroutine bfroid |
---|
118 | |
---|
119 | |
---|
120 | |
---|
121 | |
---|
122 | |
---|
123 | !DR et IGC 28/08/2012 on a renommé Stics_Bfroid2 Vernalisation |
---|
124 | !DR 20/07/2012 pas besoin de jjul |
---|
125 | !subroutine Vernalisation(tdev,P_jvc,P_jvcmini,P_codeperenne,P_culturean,P_codeinitprec,nbjanrec,P_tfroid,P_ampfroid,jjul,n, & !IN |
---|
126 | |
---|
127 | subroutine Vernalisation(tdev, & ! IN |
---|
128 | !P_jvc, |
---|
129 | !P_jvcmini, |
---|
130 | !P_codeperenne, |
---|
131 | !P_culturean, |
---|
132 | !P_codeinitprec, |
---|
133 | !nbjanrec, |
---|
134 | !P_tfroid, |
---|
135 | !P_ampfroid, |
---|
136 | !n, & !IN |
---|
137 | rfvi, & ! OUT |
---|
138 | !nrecbutoir, |
---|
139 | !maxwth, |
---|
140 | caljvc, & ! INOUT |
---|
141 | etatvernal) ! OUT |
---|
142 | |
---|
143 | !USE Messages |
---|
144 | |
---|
145 | !: ARGUMENTS |
---|
146 | ! 0.1 INPUT |
---|
147 | real, intent(IN) :: tdev |
---|
148 | ! real, intent(IN) :: P_jvc !> // PARAMETER // Number of vernalizing days // day // PARPLT // 1 |
---|
149 | ! real, intent(IN) :: P_jvcmini !> // PARAMETER // Minimum number of vernalising days // day // PARPLT // 1 |
---|
150 | ! integer, intent(IN) :: P_codeperenne !> // PARAMETER // option defining the annual (1) or perenial (2) character of the plant // code 1/2 // PARPLT // 0 |
---|
151 | ! integer, intent(IN) :: P_culturean !> // PARAMETER // crop status 1 = over 1 calendar year ,other than 1 = on two calendar years (winter crop in northern hemisphere) // code 0/1 // |
---|
152 | ! integer, intent(IN) :: P_codeinitprec !> // PARAMETER // reinitializing initial status in case of chaining simulations : yes (1), no (2) // code 1/2 // PARAM // 0 |
---|
153 | ! integer, intent(IN) :: nbjanrec |
---|
154 | ! real, intent(IN) :: P_tfroid !> // PARAMETER // optimal temperature for vernalisation // degree C // PARPLT // 1 |
---|
155 | ! real, intent(IN) :: P_ampfroid !> // PARAMETER // semi thermal amplitude thermique for vernalising effect // degree C // PARPLT // 1 |
---|
156 | !! integer, intent(IN) :: jjul |
---|
157 | ! integer, intent(IN) :: n |
---|
158 | |
---|
159 | |
---|
160 | ! 0.2 INOUT |
---|
161 | ! integer, intent(INOUT) :: maxwth |
---|
162 | real, intent(INOUT) :: caljvc |
---|
163 | logical, intent(INOUT) :: etatvernal |
---|
164 | |
---|
165 | ! 0.3 OUTPUT |
---|
166 | ! integer, intent(OUT) :: nrecbutoir |
---|
167 | real, intent(OUT) :: rfvi !> // OUTPUT // Slowing effect of the vernalization on plant development // 0-1 |
---|
168 | |
---|
169 | |
---|
170 | ! 0.4 VARIABLES LOCALES |
---|
171 | real :: jvi |
---|
172 | |
---|
173 | |
---|
174 | if (caljvc >= P_jvc) then |
---|
175 | rfvi = 1.0 |
---|
176 | etatvernal = .TRUE. |
---|
177 | caljvc = 0.0 |
---|
178 | !if (P_codeperenne == 2 .and. P_culturean /= 1 .and. P_codeinitprec == 2) then |
---|
179 | ! DR! !!!!! 19/02/08 on fait un test pour la prairie ca merde!!!!!!! |
---|
180 | ! maxwth = n |
---|
181 | ! dr! 19/02/08 test |
---|
182 | ! if (nbjanrec == 366)then |
---|
183 | ! maxwth = 366 |
---|
184 | ! else |
---|
185 | ! maxwth = 365 |
---|
186 | ! endif |
---|
187 | ! nrecbutoir = maxwth |
---|
188 | !endif |
---|
189 | else |
---|
190 | jvi = 1 - ((P_tfroid - tdev) / P_ampfroid)**2 |
---|
191 | jvi = amax1(jvi,0.) |
---|
192 | caljvc = caljvc + jvi |
---|
193 | if (caljvc >= P_jvc) then |
---|
194 | rfvi = 1 |
---|
195 | else |
---|
196 | rfvi = (caljvc - P_jvcmini) / (P_jvc - P_jvcmini) |
---|
197 | rfvi = amax1(rfvi,0.0) |
---|
198 | endif |
---|
199 | !: PB - 27/12/2004 |
---|
200 | !- si l'on est pendant la vernalisation et que l'on enchaine les années, |
---|
201 | !- alors on repousse la date d'enchainement jusqu'à la fin de la vernalisation. |
---|
202 | !if (n == maxwth) then |
---|
203 | ! if (P_codeperenne == 2 .and. P_codeinitprec == 2) then |
---|
204 | ! maxwth = maxwth + 1 |
---|
205 | ! nrecbutoir = maxwth |
---|
206 | ! call EnvoyerMsgHistorique(431) |
---|
207 | ! endif |
---|
208 | !endif |
---|
209 | endif |
---|
210 | |
---|
211 | |
---|
212 | return |
---|
213 | end subroutine Vernalisation |
---|
214 | |
---|
215 | |
---|
216 | |
---|
217 | !======================================================================================! |
---|
218 | !======================================================================================! |
---|
219 | !======================================================================================! |
---|
220 | |
---|
221 | |
---|
222 | !!DR et IGC 28/08/2012 on a renommé Stics_Bfroid3_Dorm12 Dormancy_Richardson |
---|
223 | !subroutine Dormancy_Richardson(thor,n,cu_min,cu_veille,ndebdorm,cu) |
---|
224 | ! |
---|
225 | !!: ARGUMENTS |
---|
226 | !! IN |
---|
227 | ! real, intent(IN) :: thor(24) |
---|
228 | ! integer, intent(IN) :: n |
---|
229 | ! real, intent(IN) :: cu_min |
---|
230 | ! real, intent(IN) :: cu_veille |
---|
231 | !! INOUT |
---|
232 | ! integer, intent(INOUT) :: ndebdorm |
---|
233 | ! real, intent(INOUT) :: cu |
---|
234 | ! |
---|
235 | !!: VARIABLES LOCALES |
---|
236 | ! real :: cuj !> |
---|
237 | ! real :: cuh |
---|
238 | ! integer :: ih |
---|
239 | ! |
---|
240 | !!: thor en argument |
---|
241 | !!-- ** 1/ reconstitution des températures horaires |
---|
242 | !!-- do ih = 1,12 |
---|
243 | !!-- thor(ih) = tmin(n)+ih*(tmax(n)-tmin(n))/12.0 |
---|
244 | !!-- end do |
---|
245 | !!-- do ih = 13,24 |
---|
246 | !!-- thor(ih) = tmax(n)-(ih-12)*(tmax(n)-tmin(n+1))/12.0 |
---|
247 | !!-- end do |
---|
248 | ! |
---|
249 | ! !: Calcul des C(hill) U(nits) |
---|
250 | ! cuj = 0.0 |
---|
251 | ! cuh = 0.0 |
---|
252 | ! do ih = 1,24 |
---|
253 | ! if (thor(ih) <= 1.4) cuh = 0.0 |
---|
254 | ! if (thor(ih) > 1.4 .and. thor(ih) <= 2.4) cuh = 0.5 |
---|
255 | ! if (thor(ih) > 2.4 .and. thor(ih) <= 9.1) cuh = 1.0 |
---|
256 | ! if (thor(ih) > 9.1 .and. thor(ih) <= 12.4) cuh = 0.5 |
---|
257 | ! if (thor(ih) > 12.4 .and. thor(ih) <= 15.9) cuh = 0.0 |
---|
258 | ! if (thor(ih) > 15.9 .and. thor(ih) <= 17.5) cuh = -0.5 |
---|
259 | ! if (thor(ih) > 17.5) cuh = -1 |
---|
260 | ! ! Cumul horaire |
---|
261 | ! cuj = cuj+cuh |
---|
262 | ! end do |
---|
263 | ! |
---|
264 | ! ! Cumul journalier |
---|
265 | ! cu = cu_veille + cuj |
---|
266 | ! |
---|
267 | ! !: Rectification erreur dans l'entrée en dormance |
---|
268 | ! !- si températures faibles occasionnelles |
---|
269 | ! if (cu < 0) ndebdorm = 0 |
---|
270 | ! |
---|
271 | ! !: Détermination de l'entrée en dormance |
---|
272 | ! if (cu > cu_min .and. ndebdorm == 0) then |
---|
273 | ! ndebdorm = n |
---|
274 | ! cu = 0. |
---|
275 | ! endif |
---|
276 | ! |
---|
277 | !return |
---|
278 | !end subroutine Dormancy_Richardson |
---|
279 | ! |
---|
280 | ! |
---|
281 | !!======================================================================================! |
---|
282 | !!======================================================================================! |
---|
283 | !!======================================================================================! |
---|
284 | ! |
---|
285 | !!DR et IGC 28/08/2012 on a renommé Stics_Bfroid3_Dorm3 Dormancy_Bidabe |
---|
286 | !subroutine Dormancy_Bidabe(n,ndebdorm,P_q10,tmin,tmax,cu_veille,cu) |
---|
287 | ! |
---|
288 | !!: ARGUMENTS |
---|
289 | !! IN |
---|
290 | ! integer, intent(IN) :: n |
---|
291 | ! integer, intent(IN) :: ndebdorm |
---|
292 | ! real, intent(IN) :: P_q10 !> // PARAMETER // P_Q10 used for the dormancy break calculation // SD // PARPLT // 1 |
---|
293 | ! real, intent(IN) :: tmin !> // OUTPUT // Minimum active temperature of air // degree C |
---|
294 | ! real, intent(IN) :: tmax !> // OUTPUT // Maximum active temperature of air // degree C |
---|
295 | ! real, intent(IN) :: cu_veille |
---|
296 | ! |
---|
297 | !! INOUT |
---|
298 | ! real, intent(INOUT) :: cu |
---|
299 | ! |
---|
300 | ! |
---|
301 | !! ** début du cumul imposé à ndebdorm (cd initial) |
---|
302 | ! if (n < ndebdorm) then |
---|
303 | ! cu = 0. |
---|
304 | ! else |
---|
305 | ! cu = cu_veille + P_q10**(-tmin/10.) + P_q10**(-tmax/10.) |
---|
306 | ! endif |
---|
307 | ! |
---|
308 | !return |
---|
309 | !end subroutine Dormancy_Bidabe |
---|
310 | ! |
---|
311 | |
---|
312 | |
---|
313 | end module Besoins_en_froid |
---|