root / UCalcSimulT.pas
Historique | Voir | Annoter | Télécharger (37,434 ko)
1 |
unit UCalcSimulT ;
|
---|---|
2 |
|
3 |
interface
|
4 |
|
5 |
uses
|
6 |
UVariables ; |
7 |
|
8 |
procedure CalcSimulT (Simulation : integer ;
|
9 |
Variable : integer ; Variation : double ; |
10 |
CycleInitVar, CycleFinVar, StadeVar : integer ; |
11 |
PResSimulT : PTabResSimulT) ; |
12 |
// Simulation = N? de la simulation
|
13 |
// Variable = N? de la variable ? moduler
|
14 |
// Variation = Coefficient de variation
|
15 |
// CycleInitVar = Port?e de d?but de variation
|
16 |
// CycleFinVar = Port?e de fin de variation
|
17 |
// StadeVar = Stade sur lequel s'applique la variation
|
18 |
// PResSimulT = Tableau de r?sultats
|
19 |
|
20 |
implementation
|
21 |
|
22 |
uses
|
23 |
Math, UFindRec, UCalcul ; |
24 |
|
25 |
procedure CalcSimulT (Simulation : integer ;
|
26 |
Variable : integer ; Variation : double ; |
27 |
CycleInitVar, CycleFinVar, StadeVar : integer ; |
28 |
PResSimulT : PTabResSimulT) ; |
29 |
var
|
30 |
i, j : integer ; |
31 |
ok : boolean ; |
32 |
Stade, StadeInit, StadeFin, TypeStade, Cycle : integer ; |
33 |
Jour, Duree, Age, Ecart : integer ; |
34 |
RuleSeqAli : array[1..MAX_RULE] of RecRuleSeqAliT ; |
35 |
RuleRation : array[1..MAX_RULE] of RecRuleRationT ; |
36 |
RuleLoge : array[1..MAX_RULE] of RecRuleLogeT ; |
37 |
Unite : integer ; |
38 |
NumRuleLoge, NumRuleSeqAli, NumRuleRation : integer ; |
39 |
RuleSeqAliInit, RuleRationInit, RuleLogeInit : integer ; |
40 |
RecCC1, RecCC2 : CompositionChimique ; |
41 |
TabAAtotal1, TabAAtotal2, TabCUDAA1, TabCUDAA2 : array[0..12] of double ; |
42 |
PctAli1, PctAli2, Quantite, Ingere, IngereSec, IngSec1, IngSec2 : double ; |
43 |
TabAAdig : array[0..12] of double ; |
44 |
NRAA : array[0..14] of double ; |
45 |
EqLysd : double ; |
46 |
Temperature, Activite : integer ; |
47 |
PVTot, PVVTot, PVNet, PVVNet, P2, P2Var : double ; |
48 |
p, l, PDNet, PDTot, LD, R1, R2, RA : double ; |
49 |
NesTotaux, Sevres, PdsNais, PdsSev, PdsPt, GMQPt, GainLact, GainProfil, GainSimul : double ; |
50 |
CorrPP, CorrCU, CorrJ, CorrNR, TeneurLysPot : double ; // Facteur de correction (poids port?e, contenus ut?rins, jour, r?tention azot?e)
|
51 |
CoeffEntGest, CoeffNR, CoeffEntLact, RatioLP : double ; |
52 |
EMIng, EMEnt, EMEntInit, EMThe, EMAct, EMProd, EMProt, EMLip, EMRes : double ; |
53 |
ENProd, ENProdCum, ENProdTot, ENProt, ENLip, ENRes, ENResCum : double ; |
54 |
NRPotAA, NRPot, NR, NRProd, NRProdCum, NRProdTot, NRRes : double ; |
55 |
PProd, PProdCum, PProdTot : double ; |
56 |
NExcF, NExcU : double ; // Azote excr?t? f?c?s, urine
|
57 |
Chaleur : double ; |
58 |
MATIng, MATdIng : double ; |
59 |
begin
|
60 |
// Initialisation du tableau de r?sultat
|
61 |
for i := 1 to NB_COL_TRUIE do |
62 |
for j := 1 to MAX_LIG_TRUIE do |
63 |
PResSimulT.TabResult[i, j] := 0 ;
|
64 |
// Initialisation de la simulation
|
65 |
PResSimulT.NbJSim := 0 ;
|
66 |
if Simulation = -1 |
67 |
then // Profil |
68 |
begin
|
69 |
// D?but et fin de simulation
|
70 |
StadeInit := 0 ;
|
71 |
StadeFin := 23 ;
|
72 |
// Age initial
|
73 |
Age := PProfilT.Truies[1].AgeSail ;
|
74 |
end
|
75 |
else // Simulation |
76 |
begin
|
77 |
// Initialisation des param?tres de simulation
|
78 |
PSimulT := ListSimulT[FindIdxSimulT (FindNomSimulT (Simulation))] ; |
79 |
// Initialisation du profil animal
|
80 |
PProfilT := ListProfilT[FindIdxProfilT (FindNomProfilT (PSimulT.Profil))] ; |
81 |
// D?but et fin de simulation
|
82 |
StadeInit := PSimulT.StadeInit ; |
83 |
StadeFin := PSimulT.StadeFin ; |
84 |
// Age initial
|
85 |
if StadeInit mod 3 = 0 |
86 |
then // Gestation : age saillie |
87 |
Age := PProfilT.Truies[StadeInit div 3 + 1].AgeSail |
88 |
else // Lactation : age mise-bas |
89 |
Age := PProfilT.Truies[StadeInit div 3 + 1].AgeSail + DureeGest ; |
90 |
// Sensibilit? (Age initial)
|
91 |
if (Variable = 0) |
92 |
then
|
93 |
Age := Round (Age * Variation) ; |
94 |
end ;
|
95 |
// Coefficients de calibrage
|
96 |
CoeffEntGest := PProfilT.CoefEntretienGest ; |
97 |
CoeffEntLact := PProfilT.CoefEntretienLact ; |
98 |
RatioLP := PProfilT.RatioLipProt ; |
99 |
// Boucle stades
|
100 |
for Stade := StadeInit to StadeFin - 1 do |
101 |
begin
|
102 |
Cycle := Stade div 3 + 1 ; |
103 |
TypeStade := Stade mod 3 ; |
104 |
if (Stade = StadeInit) or ((Simulation <> -1) and ((PSimulT.OptInit = 0) or ((PSimulT.OptInit = 1) and (TypeStade = 0)))) |
105 |
then // Initialisation PV et P2 |
106 |
begin
|
107 |
// Initialisation du poids vif
|
108 |
case TypeStade of |
109 |
0 : // Gestation |
110 |
PVTot := PProfilT.Truies[Cycle].PdsSail ; |
111 |
1 : // Lactation |
112 |
PVTot := PProfilT.Truies[Cycle].PdsApMB ; |
113 |
end ;
|
114 |
// Sensibilit? (Poids vif initial)
|
115 |
if (Variable = 1) and (Stade = StadeInit) |
116 |
then
|
117 |
PVTot := PVTot * Variation ; |
118 |
// Initialisation de l'?paisseur de lard
|
119 |
case TypeStade of |
120 |
0 : // Gestation |
121 |
P2 := PProfilT.Truies[Cycle].P2Sail ; |
122 |
1 : // Lactation |
123 |
P2 := PProfilT.Truies[Cycle].P2MB ; |
124 |
end ;
|
125 |
// Sensibilit? (Epaisseur de lard initiale)
|
126 |
if (Variable = 2) and (Stade = StadeInit) |
127 |
then
|
128 |
P2 := P2 * Variation ; |
129 |
PVVTot := PVTot * PV2PVV ; |
130 |
p := 2.28 + (0.178 * PVVTot) - (0.333 * P2) ; |
131 |
l := -26.4 + (0.221 * PVVTot) + (1.331 * P2) ; |
132 |
ENResCum := -1024 + (13.66 * PVVTot) + (45.94 * P2) ; |
133 |
end ;
|
134 |
// Initialisation de la s?quence alimentaire
|
135 |
if (Simulation = -1) or (PSimulT.SeqAli[Cycle] = -1) |
136 |
then // Profil |
137 |
PSeqAliT := ListSeqAliT[FindIdxSeqAliT (FindNomSeqAliT (PProfilT.SeqAli))] |
138 |
else // Simulation |
139 |
PSeqAliT := ListSeqAliT[FindIdxSeqAliT (FindNomSeqAliT (PSimulT.SeqAli[Cycle]))] ; |
140 |
case TypeStade of |
141 |
0 : // Gestation |
142 |
for i := 1 to PSeqAliT.NbRuleGest do |
143 |
RuleSeqAli[i] := PSeqAliT.RuleGest[i] ; |
144 |
1 : // Lactation |
145 |
for i := 1 to PSeqAliT.NbRuleLact do |
146 |
RuleSeqAli[i] := PSeqAliT.RuleLact[i] ; |
147 |
else // ISSF |
148 |
for i := 1 to PSeqAliT.NbRuleISSF do |
149 |
RuleSeqAli[i] := PSeqAliT.RuleISSF[i] ; |
150 |
end ;
|
151 |
NumRuleSeqAli := 1 ;
|
152 |
RuleSeqAliInit := 1 ;
|
153 |
// Initialisation du plan de rationnement
|
154 |
if (Simulation = -1) or (PSimulT.Ration[Cycle] = -1) |
155 |
then // Profil |
156 |
begin
|
157 |
with RuleRation[1] do |
158 |
begin
|
159 |
ModeFin := -1 ;
|
160 |
if TypeStade = 1 |
161 |
then // Lactation |
162 |
begin
|
163 |
Equation := 3 ; // Curvilin?aire |
164 |
a := PProfilT.Lact[Cycle] / 2 ; // Initial |
165 |
c := PProfilT.Lact[Cycle] ; // Moyenne
|
166 |
d := PProfilT.DureeLact ; // Dur?e
|
167 |
end
|
168 |
else // Gestation (ou ISSF) |
169 |
begin
|
170 |
Equation := 0 ; // Constant |
171 |
a := PProfilT.Gest[Cycle] ; |
172 |
end ;
|
173 |
end ;
|
174 |
Unite := PProfilT.Unite ; |
175 |
end
|
176 |
else // Simulation |
177 |
begin
|
178 |
PRationT := ListRationT[FindIdxRationT (FindNomRationT (PSimulT.Ration[Cycle]))] ; |
179 |
case TypeStade of |
180 |
0 : // Gestation |
181 |
for i := 1 to PRationT.NbRuleGest do |
182 |
RuleRation[i] := PRationT.RuleGest[i] ; |
183 |
1 : // Lactation |
184 |
for i := 1 to PRationT.NbRuleLact do |
185 |
RuleRation[i] := PRationT.RuleLact[i] ; |
186 |
else // ISSF |
187 |
for i := 1 to PRationT.NbRuleISSF do |
188 |
RuleRation[i] := PRationT.RuleISSF[i] ; |
189 |
end ;
|
190 |
case TypeStade of |
191 |
0 : // Gestation |
192 |
Unite := PRationT.UniteGest ; |
193 |
1 : // Lactation |
194 |
Unite := PRationT.UniteLact ; |
195 |
else // ISSF |
196 |
Unite := PRationT.UniteISSF ; |
197 |
end ;
|
198 |
end ;
|
199 |
NumRuleRation := 1 ;
|
200 |
RuleRationInit := 1 ;
|
201 |
// Initialisation du logement
|
202 |
if Simulation = -1 |
203 |
then // Profil |
204 |
PLogeT := ListLogeT[FindIdxLogeT (FindNomLogeT (PProfilT.Loge))] |
205 |
else // Simulation |
206 |
PLogeT := ListLogeT[FindIdxLogeT (FindNomLogeT (PSimulT.Logement))] ; |
207 |
case TypeStade of |
208 |
0 : // Gestation |
209 |
for i := 1 to PLogeT.NbRuleGest do |
210 |
RuleLoge[i] := PLogeT.RuleGest[i] ; |
211 |
1 : // Lactation |
212 |
for i := 1 to PLogeT.NbRuleLact do |
213 |
RuleLoge[i] := PLogeT.RuleLact[i] ; |
214 |
else // ISSF |
215 |
for i := 1 to PLogeT.NbRuleISSF do |
216 |
RuleLoge[i] := PLogeT.RuleISSF[i] ; |
217 |
end ;
|
218 |
NumRuleLoge := 1 ;
|
219 |
RuleLogeInit := 1 ;
|
220 |
// Dur?e du stade
|
221 |
case TypeStade of |
222 |
0 : // Gestation |
223 |
Duree := DureeGest ; |
224 |
1 : // Lactation |
225 |
if Simulation = -1 |
226 |
then // Profil |
227 |
Duree := PProfilT.DureeLact |
228 |
else // Simulation |
229 |
Duree := PSimulT.DureeLact ; |
230 |
else // ISSF |
231 |
Duree := PProfilT.Truies[Cycle + 1].AgeSail - PProfilT.Truies[Cycle].AgeSail - DureeGest - PProfilT.DureeLact ;
|
232 |
end ;
|
233 |
// Coefficients de calibrage
|
234 |
CoeffNR := Max (PProfilT.CoefNR[Cycle], 0) ;
|
235 |
// Initialisation du stade
|
236 |
PVNet := PVTot ; |
237 |
case TypeStade of |
238 |
0 : // Gestation |
239 |
begin
|
240 |
NesTotaux := PProfilT.Porcelets[Cycle].NesTotaux ; |
241 |
PdsNais := PProfilT.Porcelets[Cycle].PdsNais ; |
242 |
PdsPt := NesTotaux * PdsNais ; |
243 |
CorrPP := PdsPt * 1000 / Exp (9.095 - 17.69 * Exp (-0.0305 * DureeGest) + 0.0878 * NesTotaux) ; |
244 |
CorrCU := (0.3 + (1.329 * PdsPt)) * 1000 / Exp (8.621 - 21.02 * Exp (-0.05302 * DureeGest) + 0.1114 * NesTotaux) ; |
245 |
ENProdTot := Exp (11.72 - 8.62 * Exp (-0.01382 * 0) + 0.0932 * NesTotaux) / 1000 ; |
246 |
ENProdTot := ENProdTot * CorrPP ; // Correction
|
247 |
ENProdCum := ENProdTot ; |
248 |
PProdTot := Exp (8.621 - 21.02 * Exp (-0.05302 * 0) + 0.1114 * NesTotaux) ; |
249 |
PProdTot := PProdTot * CorrCu ; // Correction
|
250 |
PProdCum := PProdTot ; |
251 |
NRProdCum := 0 ;
|
252 |
NRProdTot := Exp (8.09 - 8.71 * Exp (-0.01494 * 0) + 0.0872 * NesTotaux) / 6.25 ; |
253 |
NRProdTot := NRProdTot * CorrPP ; // Correction
|
254 |
NRProdCum := NRProdTot ; |
255 |
EMEntInit := Power (PVVTot, 0.75) * EEGest * CoeffEntGest ;
|
256 |
end ;
|
257 |
1 : // Lactation |
258 |
begin
|
259 |
NesTotaux := PProfilT.Porcelets[Cycle].NesTotaux ; |
260 |
PdsNais := PProfilT.Porcelets[Cycle].PdsNais ; |
261 |
Sevres := PProfilT.Porcelets[Cycle].Sevres ; |
262 |
PdsSev := PProfilT.Porcelets[Cycle].PdsSev ; |
263 |
if Simulation <> -1 |
264 |
then // Ajustement du poids de sevrage ? la dur?e de lactation |
265 |
begin
|
266 |
GainProfil := (273 * PProfilT.DureeLact + (289 / 0.38) * Exp (-0.38 * PProfilT.DureeLact) - 289 / 0.38) / 1000 ; |
267 |
GainSimul := (273 * PSimulT.DureeLact + (289 / 0.38) * Exp (-0.38 * PSimulT.DureeLact) - 289 / 0.38) / 1000 ; |
268 |
PdsSev := PdsNais + GainSimul * (PdsSev - PdsNais) / GainProfil ; |
269 |
end ;
|
270 |
ENProdCum := 0 ;
|
271 |
NRProdCum := 0 ;
|
272 |
PProdCum := 0 ;
|
273 |
// Gain de poids de la port?e
|
274 |
GMQPt := (PdsSev - PdsNais) * Sevres / Duree ; |
275 |
end ;
|
276 |
else // ISSF |
277 |
begin
|
278 |
NesTotaux := 0 ;
|
279 |
PdsNais := 0 ;
|
280 |
EMEntInit := Power (PVVTot, 0.75) * EEGest * CoeffEntGest ;
|
281 |
end ;
|
282 |
end ;
|
283 |
// Eviter le d?bordement du tableau de r?sultats
|
284 |
if PResSimulT.NbJSim + Duree > MAX_LIG_TRUIE
|
285 |
then
|
286 |
Duree := MAX_LIG_TRUIE - PResSimulT.NbJSim ; |
287 |
// Boucle jours
|
288 |
for Jour := 1 to Duree do |
289 |
begin
|
290 |
Inc (PResSimulT.NbJSim) ; |
291 |
PResSimulT.TabResult[78, PResSimulT.NbJSim] := Jour ;
|
292 |
PResSimulT.TabResult[1, PResSimulT.NbJSim] := Age ;
|
293 |
PResSimulT.TabResult[2, PResSimulT.NbJSim] := Cycle ;
|
294 |
PResSimulT.TabResult[3, PResSimulT.NbJSim] := TypeStade ;
|
295 |
PResSimulT.TabResult[58, PResSimulT.NbJSim] := PVTot ;
|
296 |
PResSimulT.TabResult[60, PResSimulT.NbJSim] := PVNet ;
|
297 |
PResSimulT.TabResult[67, PResSimulT.NbJSim] := P2 ;
|
298 |
PResSimulT.TabResult[62, PResSimulT.NbJSim] := p ;
|
299 |
PResSimulT.TabResult[65, PResSimulT.NbJSim] := l ;
|
300 |
PVVNet := PVNet * PV2PVV ; |
301 |
/////////////////////////
|
302 |
// Apports journaliers //
|
303 |
/////////////////////////
|
304 |
// Aliment(s) distribu?(s)
|
305 |
repeat
|
306 |
ok := TRUE ; |
307 |
with RuleSeqAli[NumRuleSeqAli] do |
308 |
if ModeFin = 0 |
309 |
then // Dur?e |
310 |
if Jour - RuleSeqAliInit >= ValFin then ok := FALSE ; |
311 |
if not (ok) |
312 |
then // Changement de r?gle |
313 |
begin
|
314 |
Inc (NumRuleSeqAli) ; |
315 |
RuleSeqAliInit := Jour ; |
316 |
end ;
|
317 |
until ok ;
|
318 |
PResSimulT.TabResult[4, PResSimulT.NbJSim] := NumRuleSeqAli ;
|
319 |
with RuleSeqAli[NumRuleSeqAli] do |
320 |
begin
|
321 |
PResSimulT.TabResult[7, PResSimulT.NbJSim] := NumAli1 ;
|
322 |
PResSimulT.TabResult[8, PResSimulT.NbJSim] := NumAli2 ;
|
323 |
// Composition aliment 1
|
324 |
if NumAli1 = -1 |
325 |
then
|
326 |
begin
|
327 |
RecCC1 := CCVide ; |
328 |
for i := 0 to 12 do |
329 |
TabAAtotal1[i] := 0 ;
|
330 |
for i := 0 to 12 do |
331 |
TabCUDAA1[i] := 0 ;
|
332 |
end
|
333 |
else
|
334 |
begin
|
335 |
PAliment := ListAliment[FindIdxAliment (FindNomAliment (NumAli1))] ; |
336 |
RecCC1 := PAliment.CC ; |
337 |
for i := 0 to 12 do |
338 |
TabAAtotal1[i] := PAliment.AAtotal[i] ; |
339 |
for i := 0 to 12 do |
340 |
TabCUDAA1[i] := PAliment.CUDAA[i] ; |
341 |
end ;
|
342 |
// Composition aliment 2
|
343 |
if NumAli2 = -1 |
344 |
then
|
345 |
begin
|
346 |
RecCC2 := CCVide ; |
347 |
for i := 0 to 12 do |
348 |
TabAAtotal2[i] := 0 ;
|
349 |
for i := 0 to 12 do |
350 |
TabCUDAA2[i] := 0 ;
|
351 |
end
|
352 |
else
|
353 |
begin
|
354 |
PAliment := ListAliment[FindIdxAliment (FindNomAliment (NumAli2))] ; |
355 |
RecCC2 := PAliment.CC ; |
356 |
for i := 0 to 12 do |
357 |
TabAAtotal2[i] := PAliment.AAtotal[i] ; |
358 |
for i := 0 to 12 do |
359 |
TabCUDAA2[i] := PAliment.CUDAA[i] ; |
360 |
end ;
|
361 |
// Calcul des % aliments
|
362 |
if PctAli1Init = PctAli1Fin
|
363 |
then
|
364 |
PctAli1 := PctAli1Init |
365 |
else // Transition |
366 |
begin
|
367 |
Ecart := PctAli1Fin - PctAli1Init ; |
368 |
if ModeFin = 0 |
369 |
then // Dur?e |
370 |
PctAli1 := PctAli1Init + (Jour - RuleSeqAliInit) * Ecart / (ValFin - 1)
|
371 |
else // Fin |
372 |
PctAli1 := PctAli1Init + (Jour - RuleSeqAliInit) * Ecart / (Duree - RuleSeqAliInit) ; |
373 |
end ;
|
374 |
end ;
|
375 |
PResSimulT.TabResult[9, PResSimulT.NbJSim] := PctAli1 ;
|
376 |
PctAli2 := 100 - PctAli1 ;
|
377 |
PResSimulT.TabResult[10, PResSimulT.NbJSim] := PctAli2 ;
|
378 |
// Quantit?(s) distribu?e(s)
|
379 |
repeat
|
380 |
ok := TRUE ; |
381 |
with RuleRation[NumRuleRation] do |
382 |
if ModeFin = 0 |
383 |
then // Dur?e |
384 |
if Jour - RuleRationInit >= ValFin then ok := FALSE ; |
385 |
if not (ok) |
386 |
then // Changement de r?gle |
387 |
begin
|
388 |
Inc (NumRuleRation) ; |
389 |
RuleRationInit := Jour ; |
390 |
end ;
|
391 |
until ok ;
|
392 |
PResSimulT.TabResult[5, PResSimulT.NbJSim] := NumRuleRation ;
|
393 |
with RuleRation[NumRuleRation] do |
394 |
begin
|
395 |
// Calcul des quantit?s
|
396 |
case Equation of |
397 |
0 : // Constant |
398 |
Quantite := a ; |
399 |
1 : // Lin?aire |
400 |
Quantite := a + b * (Jour - RuleRationInit) ; |
401 |
2 : // Lin?aire-plateau |
402 |
Quantite := LPvaleur (a, b, c, Jour - RuleRationInit + 1, d) ;
|
403 |
3 : // Curvilin?aire |
404 |
Quantite := CLvaleur (a, c, Jour - RuleRationInit + 1, d) ;
|
405 |
else
|
406 |
Quantite := 0 ;
|
407 |
end ;
|
408 |
// Convertion de ED, EM, EN en quantit? si besoin
|
409 |
case Unite of |
410 |
1 : // ED (MJ/j) |
411 |
Ingere := Quantite |
412 |
/ (PctAli1 / 100 * RecCC1.ED_T * RecCC1.MS / 1000 |
413 |
+ PctAli2 / 100 * RecCC2.ED_T * RecCC2.MS / 1000) ; |
414 |
2 : // EM (MJ/j) |
415 |
Ingere := Quantite |
416 |
/ (PctAli1 / 100 * RecCC1.EM_T * RecCC1.MS / 1000 |
417 |
+ PctAli2 / 100 * RecCC2.EM_T * RecCC2.MS / 1000) ; |
418 |
3 : // EN (MJ/j) |
419 |
Ingere := Quantite |
420 |
/ (PctAli1 / 100 * RecCC1.EN_T * RecCC1.MS / 1000 |
421 |
+ PctAli2 / 100 * RecCC2.EN_T * RecCC2.MS / 1000) ; |
422 |
4 : // MS (kg/j) |
423 |
Ingere := Quantite |
424 |
/ (PctAli1 / 100 * RecCC1.MS / 1000 |
425 |
+ PctAli2 / 100 * RecCC2.MS / 1000) ; |
426 |
else // Quantit? (kg/j) |
427 |
Ingere := Quantite ; |
428 |
end ;
|
429 |
end ;
|
430 |
// Sensibilit? (Quantit? d'aliment)
|
431 |
if (Variable = 5) |
432 |
and ((Cycle >= CycleInitVar) and (Cycle <= CycleFinVar)) |
433 |
and ((StadeVar = 2) or (TypeStade = StadeVar)) |
434 |
then
|
435 |
Ingere := Ingere * Variation ; |
436 |
PResSimulT.TabResult[11, PResSimulT.NbJSim] := Ingere ;
|
437 |
// Calcul des apports journaliers
|
438 |
IngSec1 := Ingere * PctAli1 / 100 * RecCC1.MS / 1000 ; |
439 |
IngSec2 := Ingere * PctAli2 / 100 * RecCC2.MS / 1000 ; |
440 |
IngereSec := IngSec1 + IngSec2 ; |
441 |
PResSimulT.TabResult[12, PResSimulT.NbJSim] := IngereSec ;
|
442 |
// Energie brute ing?r?e
|
443 |
PResSimulT.TabResult[13, PResSimulT.NbJSim] := IngSec1 * RecCC1.EB
|
444 |
+ IngSec2 * RecCC2.EB ; |
445 |
// Energie digestible ing?r?e
|
446 |
PResSimulT.TabResult[71, PResSimulT.NbJSim] := IngSec1 * RecCC1.ED_T
|
447 |
+ IngSec2 * RecCC2.ED_T ; |
448 |
// Energie m?tabolisable ing?r?e
|
449 |
EMIng := IngSec1 * RecCC1.EM_T + IngSec2 * RecCC2.EM_T ; |
450 |
PResSimulT.TabResult[72, PResSimulT.NbJSim] := EMIng ;
|
451 |
// Energie nette ing?r?e
|
452 |
PResSimulT.TabResult[73, PResSimulT.NbJSim] := IngSec1 * RecCC1.EN_T
|
453 |
+ IngSec2 * RecCC2.EN_T ; |
454 |
// Sensibilit? (Acides amin?s)
|
455 |
if (Variable > 5) |
456 |
and ((Cycle >= CycleInitVar) and (Cycle <= CycleFinVar)) |
457 |
and ((StadeVar = 2) or (TypeStade = StadeVar)) |
458 |
then
|
459 |
begin
|
460 |
TabAAtotal1[Variable - 5] := TabAAtotal1[Variable - 5] * Variation ; |
461 |
TabAAtotal2[Variable - 5] := TabAAtotal2[Variable - 5] * Variation ; |
462 |
if (Variable = 8) or (Variable = 12) |
463 |
then // met+cys ou phe+tyr |
464 |
begin
|
465 |
TabAAtotal1[Variable - 6] := TabAAtotal1[Variable - 6] * Variation ; |
466 |
TabAAtotal2[Variable - 6] := TabAAtotal2[Variable - 6] * Variation ; |
467 |
end ;
|
468 |
end ;
|
469 |
// Acides amin?s totaux ing?r?s
|
470 |
for i:= 0 to 12 do |
471 |
PResSimulT.TabResult[14 + i, PResSimulT.NbJSim] := IngSec1 * TabAAtotal1[i]
|
472 |
+ IngSec2 * TabAAtotal2[i] ; |
473 |
// Acides amin?s digestibles ing?r?s
|
474 |
for i := 0 to 12 do |
475 |
TabAAdig[i] := IngSec1 * TabAAtotal1[i] * TabCUDAA1[i] / 100
|
476 |
+ IngSec2 * TabAAtotal2[i] * TabCUDAA2[i] / 100 ;
|
477 |
for i := 0 to 12 do |
478 |
PResSimulT.TabResult[27 + i, PResSimulT.NbJSim] := TabAAdig[i] ;
|
479 |
////////////////
|
480 |
// Simulation //
|
481 |
////////////////
|
482 |
// Logement
|
483 |
repeat
|
484 |
ok := TRUE ; |
485 |
with RuleLoge[NumRuleLoge] do |
486 |
if ModeFin = 0 |
487 |
then // Dur?e |
488 |
if Jour - RuleLogeInit >= ValFin then ok := FALSE ; |
489 |
if not (ok) |
490 |
then // Changement de r?gle |
491 |
begin
|
492 |
Inc (NumRuleLoge) ; |
493 |
RuleLogeInit := Jour ; |
494 |
end ;
|
495 |
until ok ;
|
496 |
PResSimulT.TabResult[6, PResSimulT.NbJSim] := NumRuleLoge ;
|
497 |
with RuleLoge[NumRuleLoge] do |
498 |
begin
|
499 |
if (Sol = 1) |
500 |
then // Paill? |
501 |
Temperature := Temp + 3
|
502 |
else
|
503 |
Temperature := Temp ; |
504 |
// Sensibilit? (Temp?rature ambiante)
|
505 |
if (Variable = 3) |
506 |
and ((Cycle >= CycleInitVar) and (Cycle <= CycleFinVar)) |
507 |
and ((StadeVar = 2) or (TypeStade = StadeVar)) |
508 |
then
|
509 |
Temperature := Round (Temperature * Variation) ; |
510 |
Activite := Act ; |
511 |
// Sensibilit? (Temps debout)
|
512 |
if (Variable = 4) |
513 |
and ((Cycle >= CycleInitVar) and (Cycle <= CycleFinVar)) |
514 |
and ((StadeVar = 2) or (TypeStade = StadeVar)) |
515 |
then
|
516 |
Activite := Round (Activite * Variation) ; |
517 |
end ;
|
518 |
PResSimulT.TabResult[56, PResSimulT.NbJSim] := Temperature ;
|
519 |
PResSimulT.TabResult[57, PResSimulT.NbJSim] := Activite ;
|
520 |
case TypeStade of |
521 |
0 : // Gestation |
522 |
begin
|
523 |
// Energie m?tabolisable entretien
|
524 |
EMEnt := Power (PVVTot, 0.75) * EEGest * CoeffEntGest ;
|
525 |
PResSimulT.TabResult[74, PResSimulT.NbJSim] := EMEnt ;
|
526 |
// Energie m?tabolisable thermor?gulation
|
527 |
if (RuleLoge[NumRuleLoge].Typ = 1) |
528 |
then // Collectif |
529 |
if Temperature < TCICol
|
530 |
then
|
531 |
EMThe := (TCICol - Temperature) * Power (PVVTot, 0.75) * EThCol / 1000 |
532 |
else
|
533 |
EMThe := 0
|
534 |
else
|
535 |
if Temperature < TCIInd
|
536 |
then
|
537 |
EMThe := (TCIInd - Temperature) * Power (PVVTot, 0.75) * EThInd / 1000 |
538 |
else
|
539 |
EMThe := 0 ;
|
540 |
PResSimulT.TabResult[75, PResSimulT.NbJSim] := EMThe ;
|
541 |
// Energie m?tabolisable activit?
|
542 |
EMAct := 0.3 * Power (PVVTot, 0.75) * (Activite - 240) / 1000 ; |
543 |
PResSimulT.TabResult[76, PResSimulT.NbJSim] := EMAct ;
|
544 |
// Energie contenus ut?rins
|
545 |
ENProdTot := Exp (11.72 - 8.62 * Exp (-0.01382 * Jour) + 0.0932 * NesTotaux) / 1000 ; |
546 |
ENProdTot := ENProdTot * CorrPP ; // Correction
|
547 |
ENProd := ENProdTot - ENProdCum ; |
548 |
ENProdCum := ENProdTot ; |
549 |
EMProd := ENProd / KU ; |
550 |
PResSimulT.TabResult[77, PResSimulT.NbJSim] := EMProd ;
|
551 |
// Poids contenus ut?rins
|
552 |
PProdTot := Exp (8.621 - 21.02 * Exp (-0.05302 * Jour) + 0.1114 * NesTotaux) ; |
553 |
PProdTot := PProdTot * CorrCu ; // Correction
|
554 |
PProd := PProdTot - PProdCum ; |
555 |
PProdCum := PProdTot ; |
556 |
// Azote contenus ut?rins
|
557 |
NRProdTot := Exp (8.09 - 8.71 * Exp (-0.01494 * Jour) + 0.0872 * NesTotaux) / 6.25 ; |
558 |
NRProdTot := NRProdTot * CorrPP ; // Correction
|
559 |
NRProd := NRProdTot - NRProdCum ; |
560 |
NRProdCum := NRProdTot ; |
561 |
// R?tention azot?e potentielle
|
562 |
Case Cycle of |
563 |
1 : // Port?e 1 |
564 |
CorrNR := 0.5708 ;
|
565 |
2 : // Port?e 2 |
566 |
CorrNR := 0.4345 ;
|
567 |
else
|
568 |
CorrNR := 0.3664 ;
|
569 |
end ;
|
570 |
if (Jour < 98) |
571 |
then
|
572 |
CorrJ := Jour |
573 |
else
|
574 |
CorrJ := Jour - 6 / 16 * (Jour - 98) ; |
575 |
NRPot := NRProd + CoeffNR * (-0.43 + 45.92 * (CorrJ / 100) - 105.35 * Power ((CorrJ / 100), 2) + 64.388 * Power ((CorrJ / 100), 3) + CorrNR * (EMIng - EMThe - EMEntInit)) * 0.85 ; |
576 |
PResSimulT.TabResult[40, PResSimulT.NbJSim] := NRPot * 6.25 ; |
577 |
// R?tention possible par les apports d'acides amin?s
|
578 |
TeneurLysPot := (0.060 * NRProd + 0.070 * (NRPot - NRProd)) / NRPot ; |
579 |
NRAA[0] := (TabAAdig[0] - (AAm75[0] * Power (PVTot, 0.75) + IngereSec * AAendogene[0])) * kAA[0] / AAbody[0] / 6.25 ; |
580 |
NRAA[1] := (TabAAdig[1] - (AAm75[1] * Power (PVTot, 0.75) + IngereSec * AAendogene[1])) * KLysGest / TeneurLysPot / 6.25 ; |
581 |
for i := 2 to 12 do |
582 |
begin
|
583 |
if ProtIdGest[i] = 0 |
584 |
then
|
585 |
EqLysd := 0
|
586 |
else
|
587 |
EqLysd := TabAAdig[i] * 100 / ProtIdGest[i] ;
|
588 |
NRAA[i] := (EqLysd - (AAm75[i] * Power (PVTot, 0.75) + IngereSec * AAendogene[i])) * KLysGest / TeneurLysPot / 6.25 ; |
589 |
end ;
|
590 |
// met+cys
|
591 |
if ProtIdGest[2] + ProtIdGest[3] = 0 |
592 |
then
|
593 |
EqLysd := 0
|
594 |
else
|
595 |
EqLysd := (TabAAdig[2] + TabAAdig[3]) * 100 / (ProtIdGest[2] + ProtIdGest[3]) ; |
596 |
NRAA[13] := (EqLysd - ((AAm75[2] + AAm75[3]) * Power (PVTot, 0.75) + IngereSec * (AAendogene[2] + AAendogene[3]))) * KLysGest / TeneurLysPot / 6.25 ; |
597 |
// phe+tyr
|
598 |
if ProtIdGest[6] + ProtIdGest[7] = 0 |
599 |
then
|
600 |
EqLysd := 0
|
601 |
else
|
602 |
EqLysd := (TabAAdig[6] + TabAAdig[7]) * 100 / (ProtIdGest[6] + ProtIdGest[7]) ; |
603 |
NRAA[14] := (EqLysd - ((AAm75[6] + AAm75[7]) * Power (PVTot, 0.75) + IngereSec * (AAendogene[6] + AAendogene[7]))) * KLysGest / TeneurLysPot / 6.25 ; |
604 |
for i := 0 to 14 do |
605 |
if NRAA[i] > 0 |
606 |
then
|
607 |
PResSimulT.TabResult[41 + i, PResSimulT.NbJSim] := NRAA[i] * 6.25 ; |
608 |
// Premier facteur limitant le d?pot de prot?ines
|
609 |
NRPotAA := NRAA[0] ;
|
610 |
for i := 1 to 14 do |
611 |
if (i <> 3) and (i <> 7) // Ignorer 'cys' et 'tyr' |
612 |
then
|
613 |
if (NRAA[i] > 0) and (NRAA[i] < NRPotAA) |
614 |
then
|
615 |
NRPotAA := NRAA[i] ; |
616 |
// R?tention azot?e
|
617 |
NR := Min (NRPot, NRPotAA) ; |
618 |
// R?tention azot?e maternelle
|
619 |
NRRes := NR - NRProd ; |
620 |
// Energie retenue dans les tissus maternels et production de chaleur
|
621 |
ENProt := NRRes * 6.25 * 23.8 / 1000 ; |
622 |
EMProt := ENProt / KProt ; |
623 |
EMLip := EMIng - EMEnt - EMThe - EMAct - EMProd - EMProt ; |
624 |
if EMLip > 0 |
625 |
then // D?p?t |
626 |
begin
|
627 |
ENLip := EMLip * KLip ; |
628 |
Chaleur := EMEnt + EMThe + EMAct + EMProd * (1 - KU) + EMProt * (1 - KProt) + EMLip * (1 - KLip) ; |
629 |
end
|
630 |
else // Mobilisation |
631 |
begin
|
632 |
ENLip := (EMIng - EMEnt - EMThe - EMAct - EMProd - EMProt) / KResGest ; |
633 |
Chaleur := EMEnt + EMThe + EMAct + EMProd * (1 - KU) + EMProt * (1 - KProt) - EMLip * (1 - KResGest); |
634 |
end;
|
635 |
PResSimulT.TabResult[70, PResSimulT.NbJSim] := Chaleur ;
|
636 |
ENRes := ENProt + ENLip ; |
637 |
ENResCum := ENResCum + ENRes ; |
638 |
// Excr?tion azot?e
|
639 |
NExcF := (MATIng - MATdIng) / 6.25 ;
|
640 |
NExcU := (MATdIng / 6.25) - NR ;
|
641 |
// D?p?ts de prot?ines et lipides
|
642 |
PDNet := NRRes * 6.25 ;
|
643 |
PResSimulT.TabResult[63, PResSimulT.NbJSim] := PDNet ;
|
644 |
PDTot := NR * 6.25 ;
|
645 |
PResSimulT.TabResult[64, PResSimulT.NbJSim] := PDTot ;
|
646 |
LD := ENLip / 39.7 * 1000 ; |
647 |
PResSimulT.TabResult[66, PResSimulT.NbJSim] := LD ;
|
648 |
p := p + PDNet / 1000 ;
|
649 |
l := l + LD / 1000 ;
|
650 |
// Poids vif
|
651 |
R1 := -((p - 2.28) * 45.94 + (ENResCum + 1024) * 0.333) / APN ; |
652 |
R2 := -((p - 2.28) * 1.3311 + (l + 24.5) * 0.333) / BPN ; |
653 |
PVVNet := (R1 + R2) / 2 ;
|
654 |
PVVTot := PVVNet + PProdTot / 1000 ;
|
655 |
PVTot := PVVTot / PV2PVV ; |
656 |
PResSimulT.TabResult[59, PResSimulT.NbJSim] := PVTot
|
657 |
- PResSimulT.TabResult[58, PResSimulT.NbJSim] ;
|
658 |
PVNet := PVVNet / PV2PVV ; |
659 |
PResSimulT.TabResult[61, PResSimulT.NbJSim] := PVNet
|
660 |
- PResSimulT.TabResult[60, PResSimulT.NbJSim] ;
|
661 |
// Epaisseur de lard dorsale
|
662 |
R1 := ((p - 2.28) * 13.66 - (ENResCum + 1024) * 0.178) / APN ; |
663 |
R2 := ((p - 2.28) * 0.221 - (l + 26.4) * 0.178) / BPN ; |
664 |
P2 := (R1 + R2) / 2 ;
|
665 |
PResSimulT.TabResult[68, PResSimulT.NbJSim] := P2
|
666 |
- PResSimulT.TabResult[67, PResSimulT.NbJSim] ;
|
667 |
end ;
|
668 |
1 : // Lactation |
669 |
begin
|
670 |
// Energie m?tabolisable entretien
|
671 |
EMEnt := Power (PVVNet, 0.75) * EELact * CoeffEntLact ;
|
672 |
PResSimulT.TabResult[74, PResSimulT.NbJSim] := EMEnt ;
|
673 |
// Energie m?tabolisable thermor?gulation
|
674 |
EMThe := 0 ;
|
675 |
PResSimulT.TabResult[75, PResSimulT.NbJSim] := EMThe ;
|
676 |
// Energie m?tabolisable activit?
|
677 |
EMAct := 0 ;
|
678 |
PResSimulT.TabResult[76, PResSimulT.NbJSim] := EMAct ;
|
679 |
// Production d'?nergie dans le lait
|
680 |
RA := 0.0000023096 * Power (Duree, 4) - 0.00027619 * Power (Duree, 3) + 0.012889 * Power (Duree, 2) - 0.28116 * Duree + 4.799 ; |
681 |
ENProd := (20.6 * GMQPt * 1000 - 376 * Sevres) * RA * Exp (-0.025 * Jour) * Exp (-Exp (0.5 - 0.1 * Jour)) / 1000 ; |
682 |
ENProdCum := ENPRodCum + ENProd ; |
683 |
EMProd := ENProd / KL ; |
684 |
PResSimulT.TabResult[77, PResSimulT.NbJSim] := EMProd ;
|
685 |
// Production d'azote dans le lait
|
686 |
NRProd := (0.0257 * GMQPt * 1000 + 0.42 * Sevres) * RA * Exp (-0.025 * Jour) * Exp (- Exp (0.5 - 0.1 * Jour)) ; |
687 |
NRProdCum := NRProdCum + NRProd ; |
688 |
PProd := NRProd * 6.38 / 50 ; |
689 |
PResSimulT.TabResult[69, PResSimulT.NbJSim] := PProd ;
|
690 |
PProdCum := PProdCum + PProd ; |
691 |
PResSimulT.TabResult[40, PResSimulT.NbJSim] := NRProd * 6.38 ; |
692 |
// R?tention possible par les apports d'acides amin?s
|
693 |
PResSimulT.TabResult[41, PResSimulT.NbJSim] := (TabAAdig[0] - (AAm75[0] * Power (PVVTot, 0.75) + IngereSec * AAendogene[0])) * kAA[0] / AAbody[0] ; |
694 |
NRAA[1] := -14.2 + 1.335 * TabAAdig[1] - 0.629 * NRProd ; |
695 |
PResSimulT.TabResult[42, PResSimulT.NbJSim] := (-14.2 + 1.335 * TabAAdig[1]) / 0.629 * 6.25 ; |
696 |
for i := 2 to 12 do |
697 |
begin
|
698 |
EqLysd := TabAAdig[i] * 100 / ProtIdLact[i] ;
|
699 |
NRAA[i] := -14.2 + 1.335 * EqLysd - 0.629 * NRProd ; |
700 |
if EqLysd > 0 |
701 |
then
|
702 |
PResSimulT.TabResult[41 + i, PResSimulT.NbJSim] := (-14.2 + 1.335 * EqLysd) / 0.629 * 6.25 ; |
703 |
end ;
|
704 |
// met+cys
|
705 |
EqLysd := (TabAAdig[2] + TabAAdig[3]) * 100 / (ProtIdLact[2] + ProtIdLact[3]) ; |
706 |
NRAA[13] := -14.2 + 1.335 * EqLysd - 0.629 * NRProd ; |
707 |
if EqLysd > 0 |
708 |
then
|
709 |
PResSimulT.TabResult[54, PResSimulT.NbJSim] := (-14.2 + 1.335 * EqLysd) / 0.629 * 6.25 ; |
710 |
// phe+tyr
|
711 |
EqLysd := (TabAAdig[6] + TabAAdig[7]) * 100 / (ProtIdLact[6] + ProtIdLact[7]) ; |
712 |
NRAA[14] := -14.2 + 1.335 * EqLysd - 0.629 * NRProd ; |
713 |
if EqLysd > 0 |
714 |
then
|
715 |
PResSimulT.TabResult[55, PResSimulT.NbJSim] := (-14.2 + 1.335 * EqLysd) / 0.629 * 6.25 ; |
716 |
// Premier facteur limitant le d?pot de prot?ines
|
717 |
NR := NRAA[1] ;
|
718 |
for i := 2 to 14 do |
719 |
if (i <> 3) and (i <> 7) // Ignorer 'cys' et 'tyr' |
720 |
then
|
721 |
if NRAA[i] < NR
|
722 |
then
|
723 |
NR := NRAA[i] ; |
724 |
// R?tention azot?e maternelle
|
725 |
if NR > 0 |
726 |
then
|
727 |
NR := 0 ;
|
728 |
// Mobilisation des r?serves ?nerg?tiques
|
729 |
EMRes := EMIng - EMEnt - EMThe - EMAct - EMProd ; |
730 |
if EMRes > 0 |
731 |
then // D?p?t |
732 |
begin
|
733 |
ENRes := EMRes * KLip ; |
734 |
ENProt := 0 ;
|
735 |
ENLip := ENRes ; |
736 |
Chaleur := EMEnt + EMThe + EMAct + EMProd * (1 - KL) + EMRes * (1 - KLip) |
737 |
end
|
738 |
else // Mobilisation |
739 |
begin
|
740 |
ENRes := EMRes * KL / KResL ; |
741 |
ENProt := Min (NR * 6.25 * 23.8 / 1000, ENRes * (1 - RatioLP)) ; |
742 |
ENLip := ENRes - ENProt ; |
743 |
Chaleur := EMEnt + EMThe + EMAct + (EMProd + EMRes) * (1 - KL) - EMRes * KL / KResL * (1 - KResL) ; |
744 |
end ;
|
745 |
ENResCum := ENResCum + ENRes ; |
746 |
PResSimulT.TabResult[70, PResSimulT.NbJSim] := Chaleur ;
|
747 |
NRRes := ENProt / 6.25 / 23.8 * 1000 ; |
748 |
// Excr?tion azot?e
|
749 |
NExcF := (MATIng - MATdIng) / 6.25 ;
|
750 |
NExcU := (MATdIng / 6.25) - NR - NRProd ;
|
751 |
// D?p?ts de prot?ines et lipides
|
752 |
PDNet := NRRes * 6.25 ;
|
753 |
PResSimulT.TabResult[63, PResSimulT.NbJSim] := PDNet ;
|
754 |
PDTot := NR * 6.25 ;
|
755 |
PResSimulT.TabResult[64, PResSimulT.NbJSim] := PDTot ;
|
756 |
LD := ENLip / 39.7 * 1000 ; |
757 |
PResSimulT.TabResult[66, PResSimulT.NbJSim] := LD ;
|
758 |
p := p + PDNet / 1000 ;
|
759 |
l := l + LD / 1000 ;
|
760 |
// Poids vif
|
761 |
R1 := -((p - 2.28) * 45.94 + (ENResCum + 1024) * 0.333) / APN ; |
762 |
R2 := -((p - 2.28) * 1.3311 + (l + 24.5) * 0.333) / BPN ; |
763 |
PVVNet := (R1 + R2) / 2 ;
|
764 |
PVVTot := PVVNet ; |
765 |
PVTot := PVVTot / PV2PVV ; |
766 |
PResSimulT.TabResult[59, PResSimulT.NbJSim] := PVTot
|
767 |
- PResSimulT.TabResult[58, PResSimulT.NbJSim] ;
|
768 |
PVNet := PVVNet / PV2PVV ; |
769 |
PResSimulT.TabResult[61, PResSimulT.NbJSim] := PVNet
|
770 |
- PResSimulT.TabResult[60, PResSimulT.NbJSim] ;
|
771 |
// Epaisseur de lard dorsale
|
772 |
R1 := ((p - 2.28) * 13.66 - (ENResCum + 1024) * 0.178) / APN ; |
773 |
R2 := ((p - 2.28) * 0.221 - (l + 26.4) * 0.178) / BPN ; |
774 |
P2 := (R1 + R2) / 2 ;
|
775 |
PResSimulT.TabResult[68, PResSimulT.NbJSim] := P2
|
776 |
- PResSimulT.TabResult[67, PResSimulT.NbJSim] ;
|
777 |
end ;
|
778 |
else // ISSF |
779 |
begin
|
780 |
// Energie m?tabolisable entretien
|
781 |
EMEnt := Power (PVVTot, 0.75) * EEGest * CoeffEntGest ;
|
782 |
PResSimulT.TabResult[74, PResSimulT.NbJSim] := EMEnt ;
|
783 |
// Energie m?tabolisable thermor?gulation
|
784 |
case RuleLoge[NumRuleLoge].Typ of |
785 |
0 : // Logement individuel |
786 |
if Temperature < TCIInd
|
787 |
then
|
788 |
EMThe := (TCIInd - Temperature) * Power (PVVTot, 0.75) * EThInd / 1000 |
789 |
else
|
790 |
EMThe := 0 ;
|
791 |
1 : // Logement Collectif |
792 |
if Temperature < TCICol
|
793 |
then
|
794 |
EMThe := (TCICol - Temperature) * Power (PVVTot, 0.75) * EThCol / 1000 |
795 |
else
|
796 |
EMThe := 0 ;
|
797 |
else
|
798 |
EMThe := 0 ;
|
799 |
end ;
|
800 |
PResSimulT.TabResult[75, PResSimulT.NbJSim] := EMThe ;
|
801 |
// Energie m?tabolisable acivit?
|
802 |
EMAct := 0.3 * Power (PVVTot, 0.75) * (Activite - 240) / 1000 ; |
803 |
PResSimulT.TabResult[76, PResSimulT.NbJSim] := EMAct ;
|
804 |
// R?tention azot?e potentielle
|
805 |
Case Cycle of |
806 |
1 : // Port?e 1 |
807 |
CorrNR := 0.5708 ;
|
808 |
2 : // Port?e 2 |
809 |
CorrNR := 0.4345 ;
|
810 |
else
|
811 |
CorrNR := 0.3664 ;
|
812 |
end;
|
813 |
if (Jour < 98) |
814 |
then
|
815 |
CorrJ := Jour |
816 |
else
|
817 |
CorrJ := Jour - 6 / 16 * (Jour - 98) ; |
818 |
NRPot := (-0.43 + 45.92 * (CorrJ / 100) - 105.35 * Power ((CorrJ / 100), 2) + 64.388 * Power ((CorrJ / 100), 3) + CorrNR * (EMIng - EMThe - EMEntInit)) * 0.85 ; |
819 |
PResSimulT.TabResult[40, PResSimulT.NbJSim] := NRPot * 6.25 ; |
820 |
// R?tention possible par les apports d'acides amin?s
|
821 |
NRAA[0] := (TabAAdig[0] - (AAm75[0] * Power (PVVTot, 0.75) + IngereSec * AAendogene[0])) * kAA[0] / AAbody[0] / 6.25 ; |
822 |
NRAA[1] := (TabAAdig[1] - 0.036 * Power (PVVTot, 0.75)) * KLysGest / 0.065 / 6.25 ; |
823 |
for i := 2 to 12 do |
824 |
begin
|
825 |
if ProtIdGest[i] = 0 |
826 |
then
|
827 |
EqLysd := 0
|
828 |
else
|
829 |
EqLysd := TabAAdig[i] * 100 / ProtIdGest[i] ;
|
830 |
NRAA[i] := (EqLysd - 0.036 * Power (PVVTot, 0.75)) * KLysGest / 0.065 / 6.25 ; |
831 |
end ;
|
832 |
// met+cys
|
833 |
if ProtIdGest[2] + ProtIdGest[3] = 0 |
834 |
then
|
835 |
EqLysd := 0
|
836 |
else
|
837 |
EqLysd := (TabAAdig[2] + TabAAdig[3]) * 100 / (ProtIdGest[2] + ProtIdGest[3]) ; |
838 |
NRAA[13] := (EqLysd - 0.036 * Power (PVVTot, 0.75)) * KLysGest / 0.065 / 6.25 ; |
839 |
// phe+tyr
|
840 |
if ProtIdGest[6] + ProtIdGest[7] = 0 |
841 |
then
|
842 |
EqLysd := 0
|
843 |
else
|
844 |
EqLysd := (TabAAdig[6] + TabAAdig[7]) * 100 / (ProtIdGest[6] + ProtIdGest[7]) ; |
845 |
NRAA[14] := (EqLysd - 0.036 * Power (PVVTot, 0.75)) * KLysGest / 0.065 / 6.25 ; |
846 |
for i := 0 to 14 do |
847 |
if NRAA[i] > 0 |
848 |
then
|
849 |
PResSimulT.TabResult[41 + i, PResSimulT.NbJSim] := NRAA[i] * 6.25 ; |
850 |
// Premier facteur limitant le d?pot de prot?ines
|
851 |
NRPotAA := NRAA[0] ;
|
852 |
for i := 1 to 14 do |
853 |
if (i <> 3) and (i <> 7) // Ignorer 'cys' et 'tyr' |
854 |
then
|
855 |
if (NRAA[i] > 0) and (NRAA[i] < NRPotAA) |
856 |
then
|
857 |
NRPotAA := NRAA[i] ; |
858 |
// R?tention azot?e
|
859 |
NR := Min (NRPot, NRPotAA) ; |
860 |
// R?tention azot?e maternelle
|
861 |
NRRes := NR ; |
862 |
// Energie retenue dans les tissus maternels et production de chaleur
|
863 |
ENProt := NRRes * 6.25 * 23.8 / 1000 ; |
864 |
EMProt := ENProt / KProt ; |
865 |
EMLip := EMIng - EMEnt - EMThe - EMAct - EMProt ; |
866 |
if EMLip > 0 |
867 |
then
|
868 |
begin
|
869 |
ENLip := EMLip * KLip ; |
870 |
Chaleur := EMEnt + EMThe + EMAct + EMProt * (1 - KProt) + EMLip * (1 - KLip) ; |
871 |
end
|
872 |
else
|
873 |
begin
|
874 |
ENLip := (EMIng - EMEnt - EMThe - EMAct - EMProt) / KResGest ; |
875 |
Chaleur := EMEnt + EMThe + EMAct + EMProt * (1 - KProt) - EMLip * (1 - KResGest); |
876 |
end;
|
877 |
PResSimulT.TabResult[70, PResSimulT.NbJSim] := Chaleur ;
|
878 |
ENRes := ENProt + ENLip ; |
879 |
ENResCum := ENResCum + ENRes ; |
880 |
// Excr?tion azot?e
|
881 |
NExcF := (MATIng - MATdIng) / 6.25 ;
|
882 |
NExcU := (MATdIng / 6.25) - NR ;
|
883 |
// D?p?ts de prot?ines et lipides
|
884 |
PDNet := NRRes * 6.25 ;
|
885 |
PResSimulT.TabResult[63, PResSimulT.NbJSim] := PDNet ;
|
886 |
PDTot := NR * 6.25 ;
|
887 |
PResSimulT.TabResult[64, PResSimulT.NbJSim] := PDTot ;
|
888 |
LD := ENLip / 39.7 * 1000 ; |
889 |
PResSimulT.TabResult[66, PResSimulT.NbJSim] := LD ;
|
890 |
p := p + PDNet / 1000 ;
|
891 |
l := l + LD / 1000 ;
|
892 |
// Poids vif
|
893 |
R1 := -((p - 2.28) * 45.94 + (ENResCum + 1024) * 0.333) / APN ; |
894 |
R2 := -((p - 2.28) * 1.3311 + (l + 24.5) * 0.333) / BPN ; |
895 |
PVVNet := (R1 + R2) / 2 ;
|
896 |
PVVTot := PVVNet ; |
897 |
PVTot := PVVTot / PV2PVV ; |
898 |
PResSimulT.TabResult[59, PResSimulT.NbJSim] := PVTot
|
899 |
- PResSimulT.TabResult[58, PResSimulT.NbJSim] ;
|
900 |
PVNet := PVVNet / PV2PVV ; |
901 |
PResSimulT.TabResult[61, PResSimulT.NbJSim] := PVNet
|
902 |
- PResSimulT.TabResult[60, PResSimulT.NbJSim] ;
|
903 |
// Epaisseur de lard dorsale
|
904 |
R1 := ((p - 2.28) * 13.66 - (ENResCum + 1024) * 0.178) / APN ; |
905 |
R2 := ((p - 2.28) * 0.221 - (l + 26.4) * 0.178) / BPN ; |
906 |
P2 := (R1 + R2) / 2 ;
|
907 |
PResSimulT.TabResult[68, PResSimulT.NbJSim] := P2
|
908 |
- PResSimulT.TabResult[67, PResSimulT.NbJSim] ;
|
909 |
end ;
|
910 |
end ;
|
911 |
Inc (Age) ; |
912 |
end ; // Fin boucle jours |
913 |
if TypeStade = 0 |
914 |
then // Gestation |
915 |
PVTot := PVNet ; // Mise bas
|
916 |
end ; // Fin boucle stades |
917 |
end ;
|
918 |
|
919 |
end.
|