NRC Dairy Cattle Program Computations

You might also like

Download as rtf, pdf, or txt
Download as rtf, pdf, or txt
You are on page 1of 93

1 National Research Council

2 Nutrient Requirements of Dairy Cattle, Seventh Revised Edition


3 Model Computational Code
4
5Below are the computational equations in the computer model accompanying Nutrient
6Requirements of Dairy Cattle (2001). The program was written in Visual Basic, version 6.0 and
7was programmed by Vajesh Durbal. Information on variables can be found in the Glossary in the
8accompanying report as can the rationale used by the subcommittee to develop the model.
9
10The model is divided into submodels to compute requirements for minerals (line 689), reserves
11(line 1901), young calves (line 2151), growth (line 2564), maintenance (line 2659), target weight
12(line 3653), lactation (line 3723) and pregnancy (line 3761). The submodels for calculation of
13nutrient supply are DietEvalOne (line 1663), DietEvalTwo (line 1970), Intake (line 2873),
14Amino Acids (line 3005), Energy and Protein Supply (line 3466), and Energy Values (line 3801).
15Lines 1- 594 include definition of both public and private (those used in computations but not
16shown as output) variables. These line values are approximate because they are affected by the
17margin width and page layout of your word processor.
18
19
20' Program parameters
21Public NumFeeds As Byte ' keeps track of the total number of
22 ' feeds loaded by the user
23
24Public FeedNum As Byte ' keeps track of the current feed
25 ' selected (e.g. for Edit Feed Comp)
26
27
28' Program Settings variables
29Public Metric As Boolean ' True = Metric units, False = English units
30Public DryMatterBasis As Boolean ' True = Dry Matter Basis
31Public Comments As String
32Public Header(1 To 3) As String ' Header(1) = Left, Header(2) = Center, Header(3) = Right
33Public Footer(1 To 3) As String ' Footer(1) = Left, Footer(2) = Center, Footer(3) = Right
34Public SumRes(0 To 9) As String ' Summary Results
35Public DefaultZoom As String
36
37
38' Animal Description variables
39Public AnimalType As String ' Options : "Lactating Cow", "Dry Cow"
40 ' "Replacement Heifer", "Young Calf"
41Public Age As Single ' age (months)
42Public BW As Single ' body weight
43Public DaysPreg As Integer ' days pregnant
44Public CS As Single ' condition score (1 - 5)
45Public DaysInMilk As Integer ' days in milk
46Public LactNum As Byte ' lactation number
47Public FirstCalf As Single ' age at first calving (months)
48Public CalfInt As Single ' calving interval (months)
49Public DesiredADG As Integer ' desired ADG (g/day)
50Public UseTargetADG As Boolean ' if True, indicates that program should
51 ' use Target ADG, instead of Desired ADG to
52 ' determine growth requirements
53
54Public CalfBW As Single ' Calf Body Weight (kg)
55Public CalfTemp As Single ' Calf Temperature (deg C)
56
57
58
59' Animal Production variables
60Public MW As Single ' mature weight
61Public MWFromBreed As Boolean ' indicates if the animal's MW should
62 ' be set as a function of the breed
63Public Breed As String ' Choices : "Ayrshire", "Brown Swiss"
64 ' "Guernsey", "Holstein", "Jersey"
65Public CBW As Single ' calf birth weight
66Public CBWFromMW As Boolean ' to compute CBW from MW
67Public MilkProd As Single ' milk production
68Public MilkFat As Single ' milk fat (%)
69Public ShowMilkTrue As Boolean ' indicates if milk protein should be shown
70 ' on a true or crude basis
71Public MilkTrueProtein As Single ' milk true protein (%)
72Public Lactose As Single ' milk lactose (%)
73
74
75
76' Management and Environment variables
77Public Temp As Single ' current temperature
78Public PrevTemp As Single ' previous temperature
79Public WindSpeed As Single
80Public Grazing As Boolean
81Public Distance As Single ' Distance between Pasture and Milking Center
82Public Topography As String ' "Flat", "Hilly"
83Public Trips As Integer ' Number of one-way trips
84Public CoatCond As String ' Choices : "Clean/Dry", "Some Mud"
85 ' "Wet/Matted", "Covered with Snow/Mud"
86Public HeatStress As String ' "None", "Rapid/Shallow", "Open Mouth"
87Public HairDepth As Single ' depth of hair on coat
88Public NightCooling As Boolean ' True = Night Cooling, False = None
89
90
91
92
93' Feed Components
94Type FeedType
95
96 DMFed As Single ' Quantity of this feed fed to the animal (dry matter basis)
97 Name As String ' name of the feed (e.g. "Corn Silage, mature")
98 ReadOnly As Boolean ' is "True" if the feed is part of the original library
99 Category As String ' feed category (e.g. Forage, Grass, Animal Product,...)
100 IFN As String ' International Reference Number
101 TDN As Single ' total digestible nutrients (%DM) at 1X Maintenance
102 EnergyEqClass As String ' "Forage", "Concentrate" or "Animal"
103 ForageDescrp As String ' "Wet" vs. "Dry"
104 PAF As Single ' processing adjustment factor
105 DE As Single ' digestible energy (Mcal)
106 DM As Single ' dry matter (%AF)
107 NDF As Single ' neutral detergent fiber (%DM)
108 ADF As Single ' acid detergent fiber (%DM)
109 Lignin As Single ' (% DM)
110 CP As Single ' crude protein (%DM)
111 NDFIP As Single ' (%DM)
112 ADFIP As Single ' (%DM)
113 PrtA As Single ' (%CP)
114 PrtB As Single ' (%CP)
115 PrtC As Single ' (%CP)
116 Kd As Single ' Protein Digestion rate (%/hr)
117 RUPDigest As Single ' (%)
118 Fat As Single ' (%DM)
119 Ash As Single ' (%DM)
120 Ca As Single ' (%DM)
121 CaBio As Single ' Bioavailablity of Ca in the feed (%)
122 P As Single ' (%DM)
123 PBio As Single ' Bioavailablity of P in the feed (%)
124 Mg As Single ' (%DM)
125 MgBio As Single ' Bioavailablity of Mg in the feed (%)
126 Cl As Single ' (%DM)
127 ClBio As Single ' Bioavailability of Cl in the feed (%)
128 K As Single ' (%DM)
129 KBio As Single ' Bioavailability of K in the feed (%)
130 Na As Single ' (%DM)
131 NaBio As Single ' Bioavailability of Na in the feed (%)
132 s As Single ' (%DM)
133 SBio As Single ' Bioavailability of S in the feed (%)
134 Co As Single ' (mg/kg)
135 CoBio As Single ' Bioavailability of Co in the feed (%)
136 Cu As Single ' (mg/kg)
137 CuBio As Single ' Bioavailability of Cu in the feed (%)
138 I As Single ' (mg/kg)
139 IBio As Single ' Bioavailability of I in the feed (%)
140 Fe As Single ' (mg/kg)
141 FeBio As Single ' Bioavailability of Fe in the feed (%)
142 Mn As Single ' (mg/kg)
143 MnBio As Single ' Bioavailability of Mn in the feed (%)
144 Se As Single ' (mg/kg)
145 SeBio As Single ' Bioavailability of Se in the feed (%)
146 Zn As Single ' (mg/kg)
147 ZnBio As Single ' Bioavailability of Zn in the feed (%)
148 Met As Single
149 Lys As Single
150 Arg As Single
151 His As Single
152 Ile As Single
153 Leu As Single
154 Cys As Single
155 Phe As Single
156 Thr As Single
157 Trp As Single
158 Val As Single
159 VitA As Single ' (1000 IU/kg)
160 VitD As Single ' (1000 IU/kg)
161 VitE As Single ' (IU/kg)
162 NFCDigest As Single ' NFC Digestibility Coefficient
163 CPDigest As Single ' CP Digestibility Coefficient
164 NDFDigest As Single ' NDF Digestibility Coefficient
165 FatDigest As Single ' Fat Digestibility Coefficient
166
167
168
169 ' The following characteristics apply to Calf Feeds only
170 ' the "c" prefix is given to any characteristics that have
171 ' non-calf counterparts (e.g. "cMEng")
172 cDM As Single ' (%AF)
173 cGE As Single ' (Mcal/kg DM)
174 cDE As Single ' (Mcal/kg DM)
175 cMEng As Single ' (Mcal/kg DM)
176 cNEm As Single ' (Mcal/kg DM)
177 cNEg As Single ' (Mcal/kg DM)
178 cCP As Single ' (%DM)
179 cDCP As Single ' (%DM)
180 cEE As Single ' (%DM)
181 cAsh As Single ' (%DM)
182
183
184 ' Computed compositional values
185 TDN_ActX As Single ' TDN at Intake Over Maintenance
186 DiscDE As Single ' Discounted DE (Mcal/kg)
187 MEforNEg As Single ' efficiency of conversion of ME to NEg
188 MEng As Single ' *** ME - metabolizable energy (Mcal/kg) ***
189 NEl As Single ' *** net energy of lactation (Mcal/kg) ***
190 NEg As Single ' *** net energy of growth (Mcal/kg) ***
191 NEm As Single ' *** net energy for maintenance (Mcal/kg) ***
192End Type
193
194
195
196' Feed/Ration Variables
197Public Feed() As FeedType
198Public TotalDMFed As Single ' Total quantity of dry matter fed (kg/day)
199Public TotalRegDMFed As Single ' Total quantity of regular feed (i.e. non-calf feed) DM Fed
200(kg/day)
201Public PredIntake As Single
202
203
204
205' Mineral Name Constants
206Public Enum Minerals
207 Ca = 1
208 P
209 Mg
210 Cl
211 K
212 Na
213 Su
214 Co
215 Cu
216 Io
217 Fe
218 Mn
219 Se
220 Zn
221 Mo
222 VitA
223 VitD
224 VitE
225End Enum
226
227
228
229
230
231' Output Variables
232
233
234
235' Pregnancy Requirements
236Public Km As Single ' diet NEl/diet NE = efficiency of use of ME for Maintenance
237Public MEPreg As Single ' metabolizable energy requirement for pregnancy (Mcal/day)
238Public NEPreg As Single ' net energy required for pregnancy (Mcal/day)
239Public MPPreg As Single ' metabolizable protein requirement for pregnancy (g/day)
240Public CPPreg As Single ' crude protein requirement for pregnancy (g/day)
241Public CW As Single ' conceptus weight (kg)
242Public ADGPreg As Single ' average daily gain due to conceptus growth (g/day)
243
244
245
246' Lactation Requirements
247Public MilkEn As Single ' energy content of milk (Mcal NEl/kg)
248Public YEn As Single ' daily energy secretion in milk (Mcal NEl/day)
249Public NELact As Single ' net energy requirement for lactation (Mcal/day)
250Public YProtn As Single ' daily milk protein yield at current stage of lactation (kg/day)
251Public YFatn As Single ' daily milk fat yield at current stage of lactation (kg/day)
252Public MPLact As Single ' metabolizable protein requirement for lactation (g/day)
253Public FCM As Single ' fat corrected milk production (kg/day)
254
255
256
257' Target Weights and ADG for Breeding Females
258Public Age1st As Single ' age at first calving = FirstCalf (mon)
259Public Age2nd As Single ' age at second calving (mon)
260Public Age3rd As Single ' age at third calving (mon)
261Public Age1stBred As Single ' age at first breeding (mon)
262Public Wt1st As Single ' target weight at first calving (kg)
263Public Wt2nd As Single ' target weight at second calving (kg)
264Public Wt3rd As Single ' target weight at third calving (kg)
265Public Wt1stBred As Single ' target weight at first breeding (kg)
266Public ADG1st As Single ' average daily gain at first calving (kg/day)
267Public ADG2nd As Single ' average daily gain at second calving (kg/day)
268Public ADG3rd As Single ' average daily gain at third calving (kg/day)
269Public ADG1stBred As Single ' average daily gain at first breeding (kg/day)
270Public ADGNonBred As Single ' average daily gain needed to get to ADG1stBred (kg/day)
271Public ADG As Single ' average daily gain for the cow, given the current characteristics
272(kg/day)
273
274
275
276' Reserves Requirements
277Public CS_F(1 To 9) As Single ' factor for condition score x
278Public CS5EBW As Single ' empty body weight of the animal for condition score 5 (kg)
279Public EBW(1 To 9) As Single ' empty body weight of the animal for condition score x (kg)
280Public AF(1 To 9) As Single ' proportion of fat in the animal at condition score x
281Public TF(1 To 9) As Single ' total weight of fat in the animal at condition score x (kg)
282Public AP(1 To 9) As Single ' proportion of protein in the animal at condition score x
283Public TP(1 To 9) As Single ' total weight of protein in the animal at condition score x (kg)
284Public ER(1 To 9) As Single ' energy reserves of the animal at condition score x (Mcal)
285Public Lose1CS As Single ' energy needed to lose one condition score (Mcal)
286Public Gain1CS As Single ' energy needed to gain one condition score (Mcal)
287Public NElSub As Single ' amount of retained energy that will be substituted for
288 ' dietary NEl in order to lose one condition score (Mcal)
289Public NElReq As Single ' amount of energy dietary NEl will supply in
290 ' order to gain one condition score (Mcal)
291Public deltaER As Single ' change in ER needed to move up or down one condition score
292(Mcal)
293Public DaysToChange As Single ' number of days needed to move up or down one condition
294score
295
296
297
298' Compute Energy Values
299Public DMI_to_DMIMaint As Single ' ratio of DMI to DMI required for maintenance
300
301
302' Energy and Protein Supply
303' N.B. Those variables that are arrays are for specific feeds.
304' For example DMI(2) will be the dry matter intake for Feed(2).
305Public PsgRate() As Single ' predicted passage rate
306Public DMI() As Single ' dry matter intake (kg/day)
307Public TDN() As Single ' total digestible nutrients (g/day)
308Public TDN_Act() As Single ' discounted total digestible nutrients (g/day)
309Public CP() As Single ' crude protein intake (g/day)
310Public MEng() As Single ' metabolizable energy (Mcal/day)
311Public NEl() As Single ' net energy for lactation (Mcal/day)
312Public NEg() As Single ' net energy for growth (Mcal/day)
313Public RUP() As Single ' ruminally undegradable intake protein (g/day)
314Public RDP() As Single ' ruminally degradable intake protein (g/day)
315Public NDF() As Single ' neutral detergent fiber (kg/day)
316Public ADF() As Single ' acid detergent fiber (kg/day)
317Public DMI_Total As Single ' total dry matter intake (kg/day)
318Public TDN_Total As Single ' total 1X-TDN intake (g/day)
319Public TDN_Act_Total As Single ' actual, discounted TDN intake (g/day)
320Public Discount As Single ' discounts energy value to adjust for intake
321Public UndiscDE_Total As Single ' total, undiscounted, DE intake (Mcal/day)
322Public DE_Total As Single ' total DE intake (Mcal/day)
323Public Fat_Total As Single ' total Fat intake (kg/day)
324Public MEng_Total As Single ' total ME intake (Mcal/day)
325Public NEm_Total As Single ' total NEm intake (Mcal/day)
326Public NEl_Total As Single ' total NEl intake (Mcal/day)
327Public NEg_Total As Single ' total NEg intake (Mcal/day)
328Public CP_Total As Single ' total crude protein intake (g/day)
329Public RUP_Total As Single ' total RUP intake (g/day)
330Public TotalDigestedRUP As Single ' total digested RUP (g/day)
331Public DietRUPDigest As Single ' total RUP digestibility for the diet (weighted average)
332Public RDP_Total As Single ' total RDP intake (g/day)
333Public NDF_Total As Single ' total NDF intake (g/day)
334Public ADF_Total As Single ' total ADF intake (g/day)
335Public MCP_Total As Single ' total MCP synthesis (g/day)
336Public DietTDN As Single ' fraction of TDN in the diet
337Public NEgOverMEng As Single ' NEg_Total/MEng_Total
338Public NElOverMEng As Single ' NEl_Total/MEng_Total
339Public NEmOverMEng As Single ' NEm_Total/MEng_Total
340Public DietaryNFC As Single ' total dietary NFC (g/day)
341Public EndCP As Single ' endogenous crude protein (g/day)
342Public MPEndo As Single ' endogenous metabolizable protein (g/day)
343Public MPEndoReq As Single ' MPEndo requirement (g/day)
344
345
346
347' Amino Acid Supply
348Public perEAA As Single ' percent total essential amino acids (%RUP)
349Public TotalEAA As Single ' total essential amino acids (g/day)
350Public Arg_Flow As Single ' flow of arginine to the small intestine (g/day)
351Public His_Flow As Single ' flow of histidine to the small intestine (g/day)
352Public Ile_Flow As Single ' flow of isoleucine to the small intestine (g/day)
353Public Leu_Flow As Single ' flow of leucine to the small intestine (g/day)
354Public Lys_Flow As Single ' flow of lysine to the small intestine (g/day)
355Public Met_Flow As Single ' flow of methionine to the small intestine (g/day)
356Public Phe_Flow As Single ' flow of phenylalanine to the small intestine (g/day)
357Public Thr_Flow As Single ' flow of threonine to the small intestine (g/day)
358Public Val_Flow As Single ' flow of valine to the small intestine (g/day)
359Public Dig_Arg_Flow As Single ' flow of digestible arginine to the small intestine (g/day)
360Public Dig_His_Flow As Single ' flow of digestible histidine to the small intestine (g/day)
361Public Dig_Ile_Flow As Single ' flow of digestible isoleucine to the small intestine (g/day)
362Public Dig_Leu_Flow As Single ' flow of digestible leucine to the small intestine (g/day)
363Public Dig_Lys_Flow As Single ' flow of digestible lysine to the small intestine (g/day)
364Public Dig_Met_Flow As Single ' flow of digestible methionine to the small intestine (g/day)
365Public Dig_Phe_Flow As Single ' flow of digestible phenylalanine to the small intestine
366(g/day)
367Public Dig_Thr_Flow As Single ' flow of digestible threonine to the small intestine (g/day)
368Public Dig_Val_Flow As Single ' flow of digestible valine to the small intestine (g/day)
369Public ArgPctMP As Single ' arginine as a percent of metabolizable protein (%)
370Public HisPctMP As Single ' histidine as a percent of metabolizable protein (%)
371Public IlePctMP As Single ' isoleucine as a percent of metabolizable protein (%)
372Public LeuPctMP As Single ' leucine as a percent of metabolizable protein (%)
373Public LysPctMP As Single ' lysine as a percent of metabolizable protein (%)
374Public MetPctMP As Single ' methionine as a percent of metabolizable protein (%)
375Public PhePctMP As Single ' phenylalanine as a percent of metabolizable protein (%)
376Public ThrPctMP As Single ' threonine as a percent of metabolizable protein (%)
377Public ValPctMP As Single ' valine as a percent of metabolizable protein (%)
378
379
380
381
382' Maintenance Requirements
383Public a1 As Single ' thermal neutral maintenance requirement (Mcal/day/BW^0.75)
384Public CS9 As Single ' condition score on 1-9 scale (1996 NRC)
385Public COMP As Single ' effect of previous plane of nutrition on NEMaint requirement
386Public a2 As Single ' maintenance adjustment for previous ambient temperature
387(Mcal/day/BW^0.75)
388Public Pasture As Single ' percent of the predicted dry matter intake supplied by grazing
389Public NEmact As Single ' activity factor on the NEMaint requirement
390Public NEMaintNS As Single ' net energy requirement for maintenance without stress
391(Mcal/day)
392Public NEDietConc As Single ' concentration of net energy in diet (kg DM/day)
393Public FeedMaint As Single ' feed required for maintenance (kg DM/day)
394Public NEGrowthDietNS As Single ' net energy for growth, with no stress, available in the
395diet (Mcal/day)
396Public NEFP As Single ' net energy for production (Mcal/day)
397Public MEI As Single ' metabolizable energy intake (Mcal/day)
398Public SA As Single ' surface area (m^2)
399Public HP As Single ' heat production (Mcal/m^2/day)
400Public T As Single ' age in days
401Public Coat As Single ' coat condition factor (dependent on CoatCond)
402Public TI As Single ' tissue insulation (Mcal/m^2/deg C/day)
403Public EI As Single ' external insulation (Mcal/m^2/deg C/day)
404Public INS As Single ' total insulation (Mcal/m^2/deg C/day)
405Public LCT As Single ' lower critical temperature (deg C)
406Public MEcs As Single ' metabolizable energy required due to cold stress (Mcal/day)
407Public ColdStr As Single ' cold stress factor for computing the net energy requirement
408 ' for maintenance with stress (Mcal/day/BW^0.75)
409Public HeatStr As Single ' heat stress factor for computing the net energy requirement
410 ' for maintenance which is dependent upon the HeatStress variable
411Public NEMaint As Single ' net energy required for maintenance (Mcal/day)
412Public DMIMaint As Single ' dry matter intake required for maintenance (kg DM/day)
413Public DMIPreg As Single ' dry matter intake requirement for pregnancy
414Public NEGrowthDiet As Single ' net energy for growth available in the diet (Mcal/day)
415Public MPMaint As Single ' metabolizable protein requirement for maintenance (g/day)
416Public MEMaint As Single ' used only for Replacement Heifers
417Public ScurfMP As Single ' scurf MP requirement (g/day)
418Public UrineMP As Single ' urine MP requirement (g/day)
419Public FecalMP As Single ' fecal MP requirement (g/day)
420
421
422
423' Dry Matter Intake
424Public TempFact As Single ' temperature adjustment factor for DMI calculations
425Public CCFact As Single ' coat condition adjustment factor for DMI calculations
426Public SubFact As Single ' factor used in the DMI_RH calculation
427Public DivFact As Single ' factor used in the DMI_RH calculation
428Public DMILact As Single ' DMI of a lactating cow (kg/day)
429Public DMIDry As Single ' DMI of a dry cow (kg/day)
430Public DMI_RH As Single ' DMI of a replacement heifer (kg/day)
431Public DryMatterIntake As Single ' dry matter intake (kg/day)
432
433
434
435' Growth Requirements
436Public SBW As Single ' shrunk body weight (kg)
437Public SRW_to_MSBW As Single ' standard reference weight / mature shrunk body weight
438Public EQSBW As Single ' equivalent shrunk body weight (kg)
439Public SWG As Variant ' shrunk weight gain (kg)
440Public WG As Single ' weight gain (kg/day)
441Public DLWReq As Single ' DLW required (kg/day)
442Public EQEBW As Single ' equivalent empty body weight (kg)
443Public EQEBG As Single ' equivalent empty body gain (kg)
444Public RE As Single ' retained energy (Mcal/day)
445Public NEGrowth As Single ' net energy required for growth (Mcal/day)
446Public NPg As Single ' net protein requirement (g/day)
447Public EffMP_NPg As Single ' efficiency of use of MP for NPg
448Public MPGrowth As Single ' metabolizable protein requirement for growth (g/day)
449Public NEReserves As Single ' net energy required for reserves replenishment
450 ' or provided when reserves are mobilized (Mcal NEl/day)
451Public DMIAvailGrowth As Single ' dry matter available for growth (kg/day)
452Public ADGwoPreg As Single ' average daily gain w/o pregnancy (kg/day)
453Public ADGwPreg As Single ' average daily gain with pregnancy (kg/day)
454Public MEGrowth As Single ' only used for Replacement Heifers
455Public MEAllowGain As Single
456Public MEAllowGainPreg As Single
457
458
459
460
461' Mineral Requirements
462Type MineralType
463 Name As String ' name of mineral
464 Units As String ' units the mineral is reported in
465 Fecal As Single ' fecal endogenous loss component
466 Urine As Single ' urine endogenous loss component
467 Sweat As Single ' sweat loss (temperature) component
468 Misc As Single ' miscellaneous loss component
469 Maint As Single ' sum of the misc, fecal, urine and sweat losses
470 Fetal As Single ' fetal requirement
471 Milk As Single ' milk production requirement
472 Growth As Single ' heifer growth requirement
473 Total As Single ' total quantity of mineral required
474 Supplied As Single ' total quantity of mineral supplied by the animal's diet
475 Absorbable As Single ' total quantity of absorbable mineral supplied by the diet
476 Balance As Single ' difference between the quantity of the mineral required and
477supplied
478 RD As Single ' density of the mineral in the animal's ration
479 RDReq As Single ' ration density required
480End Type
481
482Public Mineral(Ca To VitE) As MineralType
483
484
485
486' Diet Evaluation
487Type EvalType
488 Name As String ' name of evaluation factor (e.g. NE-Diet)
489 Units As String ' units of evaluation factor (e.g. Mcal/day)
490 Total As Single
491 Maint As Single
492 Preg As Single
493 Lact As Single
494 Gain As Single
495 Reserves As Single
496End Type
497
498
499
500Public EvalFactor(1 To 6) As EvalType
501' The upper grid of the diet evaluation screen is represented
502' as these six Evaluation Factors. They correspond to NE-Diet,
503' NE-Req, NE-Diff, MP-Diet, MP-Req, and MP-Diff. It is possible
504' that the first three factors may be given in different energy
505' units, under certain conditions, which is another motivation
506' for this type of variable definition
507
508Public DMIPred As Single ' predicted dry matter intake (kg/day)
509Public DMIActual As Single ' actual dry matter intake (kg/day)
510
511Public RDPReq As Single ' RDP required (g/day)
512Public RDPSup As Single ' RDP supplied (g/day)
513Public RDPBal As Single ' difference between RDPReq and RDPSup (g/day)
514Public RUPReq As Single ' RUP required (g/day)
515Public RUPSup As Single ' RUP supplied (g/day)
516Public RUPBal As Single ' difference between RUPReq and RUPSup (g/day)
517
518Public MPBalance As Single
519Public ProteinInGain As Single
520Public MPAllowGain As Single
521Public MPAllowGainPreg As Single
522
523Public CondMessage As String
524
525Public MPBact As Single ' metabolizable protein supplied by microbial protein (g/day)
526Public MPFeed As Single ' metabolizable protein supplied by animal's ration (g/day)
527
528Public DietCP As Single ' fraction of CP in the diet
529Public CP_RDP As Single ' fraction of CP which is RDP
530Public CP_RUP As Single ' fraction of CP which is RUP
531
532Public DietNDF As Single ' fraction of NDF in animal's ration
533Public DietADF As Single ' fraction of ADF in animal's ration
534Public ForageNDF As Single ' fraction of NDF from Forage in ration
535Public DietME As Single ' quantity of ME in animal's ration (Mcal/kg)
536Public DietNEl As Single ' quantity of NEl in animal's ration (Mcal/kg)
537Public DietNEg As Single ' quantity of NEg in animal's ration (Mcal/kg)
538
539Public EnergyAllowableMilk As Single ' energy allowable milk production (kg/day)
540Public ProteinAllowableMilk As Single ' protein allowable milk production (kg/day)
541Public DailyMilk As Single ' milk production (kg/day)
542
543Public TargetADGwoPreg As Single ' target ADG without pregnancy (kg/day)
544Public TargetADGPreg As Single ' target ADG with pregnancy (kg/day)
545
546Public Reserves_WG As Single ' weight gain due to reserves (kg)
547
548Public MPReqReserves As Single ' MP required for reserves (g/day)
549Public MPProvReserves As Single ' MP provided for reserves (g/day)
550
551Public RUPReqReserves As Single ' RUP required for reserves (g/day)
552Public RUPProvReserves As Single ' RUP provided for reserves (g/day)
553
554Public Energy_TargetDietConc As Single
555Public MP_TargetDietConc As Single
556Public Ca_TargetDietConc As Single
557Public P_TargetDietConc As Single
558Public DCAD As Single
559
560
561
562
563' Young Calf Computation Variables
564Public CalfKm As Single ' Efficiency of use of ME for NEm
565Public CalfKg As Single ' Efficiency of use of ME for NEg
566
567Public MilkDMI As Single ' Milk Dry Matter Intake (kg/day)
568Public StarterDMI As Single ' Starter Dry Matter Intake (kg/day)
569Public NEmCalf As Single ' Net Energy required for maintenance (Mcal/day)
570Public TempFactor As Single
571
572Public CalfFat As Single ' Dietary Fat (kg/day)
573Public DietFatCalf As Single ' Dietary Fat (%)
574Public DietNEmCalf As Single ' Dietary NEm (Mcal/kg)
575Public DietMECalf As Single ' Dietary ME (Mcal/kg)
576Public DietNEgCalf As Single ' Dietary NEg (Mcal/kg)
577Public DietCPCalf As Single ' Dietary CP (%)
578Public DietDCPCalf As Single ' Dietary DCP (%)
579Public DMIForNEmCalf As Single ' Dry Matter Intake required to meet NEm requirement
580(kg/day)
581Public DMIForMECalf As Single ' Dry Matter Intake required to meet ME requirement
582(kg/day)
583Public DMIForGrowth As Single ' Total dry matter intake used for growth (kg/day)
584Public MEFGCalf As Single ' Metabolizable energy available for growth (Mcal/day)
585Public NEFGCalf As Single ' Net Energy available for growth (Mcal/day)
586Public EnergyADGCalf As Single ' Energy allowable Average Daily Gain (kg/day)
587Public ProteinReqCalf As Single ' Protein allowable Average Daily Gain (kg/day)
588Public BV As Single ' Biological value used in ADP calculation
589Public EUN As Single ' endogenous urinary nitrogen losses (g/day) used in ADP
590calculation
591Public MFN As Single ' metabolic fecal nitrogen (g/day), used in ADP calculation
592Public ADPmaint As Single ' apparently digested crude protein for maintenance (g/day)
593Public ADPgrowth As Single ' apparently digested crude protein for gain (g/day)
594Public CPmCalf As Single ' calf maintenance crude protein requirement (g/day)
595Public CPgCalf As Single ' calf growth crude protein required (g/day)
596Public CalfADG As Single ' Calf Average Daily Gain (g/day)
597Public CalfADPBal As Single ' digestible ADP Balance (g/day)
598Public CalfCPBal As Single ' digestible CP Balance (g/day)
599Public ADPAllowGain As Single ' ADP Allowable Gain (g/day)
600
601Public Sub ModelComputations()
602' All of the model's computations are run by calling this procedure.
603' Different output is computed by separate computational routines, but
604' they are all called here.
605
606' Important Note : All calculations in this model are made with metric units
607
608
609
610' Different set of computations are run if the animal
611' type is a Young Calf
612If AnimalType = "Young Calf" Then
613
614 If TotalDMFed = 0 Then
615 Exit Sub
616 End If
617
618 ' Run Calf Computations
619 Call CalfComputations
620
621 ' Mineral Sub-Model Calculations
622 Call MineralComputations
623
624Else
625
626 ' Run Pregnancy Sub-Model Calculations
627 Call PregnancyComputations
628
629 ' Lactation Sub-Model Calculations
630 Call LactationComputations
631
632 ' Target Weights and ADG for Breeding Females
633 Call TargetWeightsComputations
634
635
636 ' All of the remaining sub-models assume that the animal is being fed,
637 ' so if no feeds are selected or the quantity fed is equal to zero,
638 ' the computations finish here.
639
640 If (NumFeeds = 0) Or (TotalDMFed = 0) Then
641 'Don't run any more computations
642 Exit Sub
643
644 Else
645
646 ' Energy and Protein Supply Calculations
647 Call EnergyAndProteinSupplyComputations
648
649 ' Amino Acid Supply Calculations
650 Call AminoAcidComputations
651
652 ' Dry Matter Intake Calculations
653 Call DryMatterIntakeComputations
654
655 ' Maintenance Sub-Model Calculations
656 Call MaintenanceComputations
657
658 ' Growth Sub-Model Calculations
659 Call GrowthComputations
660
661 ' Mineral Sub-Model Calculations
662 Call MineralComputations
663
664 ' Diet Evaluation Calculations - Part I
665 '
666 ' The Diet Evaluation Section is done in two parts. The first
667 ' part is needed to get the EnergyBalance (aka NE-Differ-Gain,
668 ' aka EvalFactor(3).Gain), which is needed for the Reserves
669 ' Calculations, which computes the DaysToChange variable, which
670 ' is displayed in the Diet Evaluation Screen.
671 Call DietEvalOneComputations
672
673 ' Reserves Calculations
674 Call ReservesComputations
675
676 ' Diet Evaluation Calculations - Part II
677 Call DietEvalTwoComputations
678
679 End If
680
681End If
682
683
684End Sub
685
686
687
688
689Private Sub MineralComputations()
690
691Dim C As Integer
692Dim d As Integer
693
694Dim X As Integer
695Dim MilkFeeds As Single
696Dim CalfStarter As Single
697Dim RegFeeds As Single
698Dim m As Single
699Dim n As Single
700Dim o As Single
701
702
703
704
705' Calcium
706
707 With Mineral(1)
708 .Name = "Ca"
709 .Units = "(g/d)"
710
711 If DaysInMilk > 0 Then
712 .Fecal = 3.1 * (BW / 100)
713 Else
714 .Fecal = 1.54 * (BW / 100)
715 End If
716
717 .Urine = 0.08 * (BW / 100)
718 .Misc = 0
719 .Sweat = 0
720
721 If DaysPreg > 190 Then
722 .Fetal = 0.02456 * Exp((0.05581 - (0.00007 * DaysPreg)) * DaysPreg) _
723 - 0.02456 * Exp((0.05581 - (0.00007 * (DaysPreg - 1))) * (DaysPreg - 1))
724 Else
725 .Fetal = 0
726 End If
727
728
729 Select Case DaysInMilk
730 Case 0
731 .Milk = 0
732 Case Else
733 Select Case Breed
734 Case "Holstein", "Milking Shorthorn"
735 .Milk = 1.22 * MilkProd
736 Case "Jersey"
737 .Milk = 1.45 * MilkProd
738 Case Else
739 .Milk = 1.37 * MilkProd
740 End Select
741 End Select
742
743
744 If ((BW > 0) And (WG > 0)) Then
745 .Growth = (9.83 * (MW ^ 0.22) * (BW ^ -0.22)) * (WG / 0.96)
746 Else
747 .Growth = 0
748 End If
749
750
751 End With
752
753
754
755' Phosphorus
756
757 With Mineral(2)
758 .Name = "P"
759 .Units = "(g/d)"
760
761 If InStr(AnimalType, "Cow") > 0 Then
762 .Fecal = 1 * TotalDMFed
763 Else
764 .Fecal = 0.8 * TotalDMFed
765 End If
766
767 .Urine = 0.002 * BW
768 .Misc = 0
769 .Sweat = 0
770
771 If DaysPreg >= 190 Then
772 .Fetal = 0.02743 * Exp(((0.05527 - (0.000075 * DaysPreg)) * DaysPreg)) _
773 - 0.02743 * Exp(((0.05527 - (0.000075 * (DaysPreg - 1))) * (DaysPreg - 1)))
774 Else
775 .Fetal = 0
776 End If
777
778 Select Case DaysInMilk
779 Case 0
780 .Milk = 0
781 Case Else
782 .Milk = 0.9 * MilkProd
783 End Select
784
785
786 If ((BW > 0) And (WG > 0)) Then
787 .Growth = (1.2 + (4.635 * (MW ^ 0.22) * (BW ^ -0.22))) * (WG / 0.96)
788 Else
789 .Growth = 0
790 End If
791
792 End With
793
794
795
796' Magnesium
797
798 With Mineral(3)
799 .Name = "Mg"
800 .Units = "(g/d)"
801
802 .Fecal = 0.003 * BW
803
804 .Urine = 0
805 .Misc = 0
806 .Sweat = 0
807
808 If DaysPreg > 190 Then
809 .Fetal = 0.33
810 Else
811 .Fetal = 0
812 End If
813
814
815 Select Case DaysInMilk
816 Case 0
817 .Milk = 0
818 Case Else
819 .Milk = 0.15 * MilkProd
820 End Select
821
822 .Growth = 0.45 * (WG / 0.96)
823
824 End With
825
826
827
828' Chlorine
829
830 With Mineral(4)
831 .Name = "Cl"
832 .Units = "(g/d)"
833
834 .Fecal = 2.25 * (BW / 100)
835
836 .Urine = 0
837 .Misc = 0
838 .Sweat = 0
839
840 If DaysPreg > 190 Then
841 .Fetal = 1
842 Else
843 .Fetal = 0
844 End If
845
846
847 .Milk = 1.15 * MilkProd
848
849 .Growth = 1 * (WG / 0.96)
850
851
852 End With
853
854
855
856' Potassium
857
858 With Mineral(5)
859 .Name = "K"
860 .Units = "(g/d)"
861
862 If AnimalType = "Lactating Cow" Then
863 .Fecal = 6.1 * TotalDMFed
864 Else
865 .Fecal = 2.6 * TotalDMFed
866 End If
867
868
869 .Urine = 0.038 * BW ' urine loss
870
871
872 Select Case Temp
873 Case Is < 25
874 .Sweat = 0
875 Case 25 To 30
876 .Sweat = 0.04 * (BW / 100)
877 Case Else
878 .Sweat = 0.4 * (BW / 100)
879 End Select
880
881 .Misc = 0
882
883
884 If DaysPreg > 190 Then
885 .Fetal = 1.027
886 Else
887 .Fetal = 0
888 End If
889
890
891 .Milk = 1.5 * MilkProd
892
893 .Growth = 1.6 * (WG / 0.96)
894
895
896 End With
897
898
899
900' Sodium
901
902 With Mineral(6)
903 .Name = "Na"
904 .Units = "(g/d)"
905
906 If AnimalType = "Lactating Cow" Then
907 .Fecal = 0.038 * BW
908 Else
909 .Fecal = 0.015 * BW
910 End If
911
912
913 .Urine = 0
914 .Misc = 0
915
916 Select Case Temp
917 Case Is < 25
918 .Sweat = 0
919 Case 25 To 30
920 .Sweat = 0.1 * (BW / 100)
921 Case Else
922 .Sweat = 0.5 * (BW / 100)
923 End Select
924
925
926 If DaysPreg > 190 Then
927 .Fetal = 1.39
928 Else
929 .Fetal = 0
930 End If
931
932 .Milk = 0.63 * MilkProd
933
934 .Growth = 1.4 * (WG / 0.96)
935
936
937 End With
938
939
940
941' Sulfur
942
943 With Mineral(7)
944 .Name = "S"
945 .Units = "(g/d)"
946
947 ' Non-factorial approach used
948 .Fecal = 0
949 .Misc = 0
950 .Urine = 0
951 .Sweat = 0
952 .Fetal = 0
953 .Milk = 0
954 .Growth = 0
955
956 End With
957
958
959
960' Cobalt
961
962 With Mineral(8)
963
964 .Name = "Co"
965 .Units = "(mg/d)"
966
967 ' Factorial approach not used here
968 .Fecal = 0
969 .Misc = 0
970 .Urine = 0
971 .Sweat = 0
972 .Fetal = 0
973 .Milk = 0
974 .Growth = 0
975
976 End With
977
978
979
980' Copper
981
982 With Mineral(9)
983 .Name = "Cu"
984 .Units = "(mg/d)"
985
986 .Fecal = 0.0071 * BW
987 .Urine = 0
988 .Sweat = 0
989 .Misc = 0
990
991
992 Select Case DaysPreg
993 Case 0
994 .Fetal = 0
995 Case Is < 100
996 .Fetal = 0.5
997 Case 100 To 225
998 .Fetal = 1.5
999 Case Else
1000 .Fetal = 2
1001 End Select
1002
1003
1004
1005 Select Case DaysInMilk
1006 Case 0
1007 .Milk = 0
1008 Case Else
1009 .Milk = 0.15 * MilkProd
1010 End Select
1011
1012 .Growth = 1.15 * (WG / 0.96)
1013
1014 End With
1015
1016
1017
1018' Iodine
1019
1020 With Mineral(10)
1021 .Name = "I"
1022 .Units = "(mg/d)"
1023
1024 .Fecal = 0
1025 .Urine = 0
1026 .Sweat = 0
1027 .Fetal = 0
1028
1029 If DaysInMilk > 0 Then
1030 .Milk = 1.5 * (BW / 100)
1031 .Misc = 0
1032 Else
1033 .Milk = 0
1034 .Misc = 0.6 * (BW / 100)
1035 End If
1036
1037
1038 .Growth = 0
1039
1040 End With
1041
1042
1043
1044' Iron
1045
1046 With Mineral(11)
1047 .Name = "Fe"
1048 .Units = "(mg/d)"
1049
1050 .Fecal = 0
1051 .Urine = 0
1052 .Sweat = 0
1053 .Misc = 0
1054
1055 If DaysPreg > 190 Then
1056 .Fetal = 18
1057 Else
1058 .Fetal = 0
1059 End If
1060
1061 .Milk = 1 * MilkProd
1062
1063 .Growth = 34 * (WG / 0.96) ' Requirement is on a full, not shrunk, basis
1064
1065 End With
1066
1067
1068
1069' Manganese
1070
1071 With Mineral(12)
1072
1073 .Name = "Mn"
1074 .Units = "(mg/d)"
1075
1076 .Fecal = 0.002 * BW
1077 .Urine = 0
1078 .Sweat = 0
1079 .Misc = 0
1080
1081 If DaysPreg > 190 Then
1082 .Fetal = 0.3
1083 Else
1084 .Fetal = 0
1085 End If
1086
1087 Select Case DaysInMilk
1088 Case 0
1089 .Milk = 0
1090 Case Else
1091 .Milk = 0.03 * MilkProd
1092 End Select
1093
1094 .Growth = 0.7 * (WG / 0.96)
1095
1096 End With
1097
1098
1099
1100' Selenium
1101
1102 With Mineral(13)
1103 .Name = "Se"
1104 .Units = "(mg/d)"
1105
1106 ' Factorial approach not used here
1107 .Fecal = 0
1108 .Misc = 0
1109 .Urine = 0
1110 .Sweat = 0
1111 .Fetal = 0
1112 .Milk = 0
1113 .Growth = 0
1114
1115
1116 End With
1117
1118
1119' Zinc
1120
1121 With Mineral(14)
1122 .Name = "Zn"
1123 .Units = "(mg/d)"
1124
1125 .Fecal = 0.033 * BW
1126 .Urine = 0.012 * BW
1127 .Sweat = 0
1128 .Misc = 0
1129
1130 If DaysPreg > 190 Then
1131 .Fetal = 12
1132 Else
1133 .Fetal = 0
1134 End If
1135
1136 .Milk = 4 * MilkProd
1137 .Growth = 24 * (WG / 0.96) ' Requirement is on a full, not shrunk, basis
1138
1139 End With
1140
1141
1142
1143' Vitamin A
1144
1145 With Mineral(16)
1146 .Name = "Vit A"
1147 .Units = "(1000 IU/kg)"
1148
1149 ' Factorial approach not used here
1150 .Fecal = 0
1151 .Urine = 0
1152 .Sweat = 0
1153 .Misc = 0
1154 .Fetal = 0
1155 .Milk = 0
1156 .Growth = 0
1157
1158 End With
1159
1160
1161' Vitamin D
1162
1163 With Mineral(17)
1164 .Name = "Vit D"
1165 .Units = "(1000 IU/kg)"
1166
1167 ' Factorial approach not used here
1168 .Fecal = 0
1169 .Urine = 0
1170 .Sweat = 0
1171 .Misc = 0
1172 .Fetal = 0
1173 .Milk = 0
1174 .Growth = 0
1175
1176 End With
1177
1178
1179' Vitamin E
1180
1181 With Mineral(18)
1182 .Name = "Vit E"
1183 .Units = "(IU/kg)"
1184
1185 ' Factorial approach not used here
1186 .Fecal = 0
1187 .Urine = 0
1188 .Sweat = 0
1189 .Misc = 0
1190 .Fetal = 0
1191 .Milk = 0
1192 .Growth = 0
1193
1194 End With
1195
1196
1197' Calves don't have a factorial mineral requirements system
1198If AnimalType = "Young Calf" Then
1199 For C = 1 To 18
1200 With Mineral(C)
1201 .Fecal = 0
1202 .Urine = 0
1203 .Sweat = 0
1204 .Misc = 0
1205 .Fetal = 0
1206 .Milk = 0
1207 .Growth = 0
1208 End With
1209 Next C
1210End If
1211
1212
1213If AnimalType = "Young Calf" Then
1214 MilkFeeds = 0
1215 CalfStarter = 0
1216 RegFeeds = 0
1217
1218 For X = 1 To NumFeeds
1219 If Feed(X).Name = "Calf Starter" Then
1220 CalfStarter = CalfStarter + Feed(X).DMFed
1221 ElseIf (InStr(Feed(X).Category, "Calf Feed") > 0) Then
1222 MilkFeeds = MilkFeeds + Feed(X).DMFed
1223 Else
1224 RegFeeds = RegFeeds + Feed(X).DMFed
1225 End If
1226 Next X
1227End If
1228
1229
1230
1231For C = 1 To 18
1232
1233 With Mineral(C)
1234
1235 .Maint = .Fecal + .Urine + .Sweat + .Misc
1236
1237
1238 If AnimalType <> "Young Calf" Then
1239
1240 If ((Age < (FirstCalf + CalfInt)) Or (LactNum <= 1)) Then
1241 ' Keep the already computed growth requirement
1242 Else
1243 ' Set the growth requirement to zero
1244 .Growth = 0
1245 End If
1246
1247
1248 If C < VitA Then
1249 .Total = (.Maint + .Fetal + .Milk + .Growth)
1250 Else
1251 Select Case C
1252 Case 16
1253 If (AnimalType = "Replacement Heifer") Then
1254 If DaysPreg > 259 Then
1255 .Total = 0.11 * BW
1256 Else
1257 .Total = 0.08 * BW
1258 End If
1259 Else
1260 .Total = 0.11 * BW
1261 End If
1262 Case 17
1263 .Total = 0.03 * BW
1264 Case 18
1265 If Grazing = True Then
1266 If AnimalType = "Dry Cow" Then
1267 .Total = 0.5 * BW
1268 Else
1269 .Total = 0.26 * BW
1270 End If
1271 Else
1272 If AnimalType = "Dry Cow" Then
1273 .Total = 1.6 * BW
1274 ElseIf AnimalType = "Young Calf" Then
1275 .Total = 50 * TotalDMFed
1276 Else
1277 .Total = 0.8 * BW
1278 End If
1279 End If
1280 End Select
1281 End If
1282
1283
1284 If .Name = "Co" Then
1285 .Total = 0.11 * TotalDMFed
1286 End If
1287
1288 If .Name = "S" Then
1289 .Total = 2 * TotalDMFed
1290 End If
1291
1292 If .Name = "Se" Then
1293 .Total = 0.3 * TotalDMFed
1294 End If
1295
1296
1297
1298 Else
1299
1300 If StarterDMI = 0 Then
1301
1302 Select Case .Name
1303 Case "Ca"
1304 .Total = 10 * TotalDMFed
1305 Case "P"
1306 .Total = (7.5 * TotalDMFed) / 0.9
1307 Case "Mg"
1308 .Total = 0.7 * TotalDMFed
1309 Case "Na"
1310 .Total = 1 * TotalDMFed
1311 Case "K"
1312 .Total = 6.5 * TotalDMFed
1313 Case "Cl"
1314 .Total = 2 * TotalDMFed
1315 Case "S"
1316 .Total = 2.9 * TotalDMFed
1317 Case "Fe"
1318 .Total = 100 * TotalDMFed
1319 Case "Mn"
1320 .Total = 40 * TotalDMFed
1321 Case "Zn"
1322 .Total = 40 * TotalDMFed
1323 Case "Cu"
1324 .Total = 10 * TotalDMFed
1325 Case "I"
1326 .Total = 0.25 * TotalDMFed
1327 Case "Co"
1328 .Total = 0.1 * TotalDMFed
1329 Case "Se"
1330 .Total = 0.3 * TotalDMFed
1331 Case "Vit A"
1332 .Total = 0.11 * CalfBW
1333 Case "Vit D"
1334 .Total = 0.6 * TotalDMFed
1335 Case "Vit E"
1336 .Total = 50 * TotalDMFed
1337 End Select
1338
1339 Else
1340
1341 Select Case .Name
1342 Case "Ca"
1343 .Total = 7 * TotalDMFed
1344 Case "P"
1345 .Total = (4.5 * TotalDMFed) / 0.78
1346 Case "Mg"
1347 .Total = 1 * TotalDMFed
1348 Case "Na"
1349 .Total = 1.5 * TotalDMFed
1350 Case "K"
1351 .Total = 6.5 * TotalDMFed
1352 Case "Cl"
1353 .Total = 2 * TotalDMFed
1354 Case "S"
1355 .Total = 2 * TotalDMFed
1356 Case "Fe"
1357 .Total = 50 * TotalDMFed
1358 Case "Mn"
1359 .Total = 40 * TotalDMFed
1360 Case "Zn"
1361 .Total = 40 * TotalDMFed
1362 Case "Cu"
1363 .Total = 10 * TotalDMFed
1364 Case "I"
1365 .Total = 0.25 * TotalDMFed
1366 Case "Co"
1367 .Total = 0.1 * TotalDMFed
1368 Case "Se"
1369 .Total = 0.3 * TotalDMFed
1370 Case "Vit A"
1371 .Total = 0.11 * CalfBW
1372 Case "Vit D"
1373 .Total = 0.6 * TotalDMFed
1374 Case "Vit E"
1375 .Total = 50 * TotalDMFed
1376 End Select
1377
1378 End If
1379
1380 End If
1381
1382
1383
1384 .Supplied = 0
1385 .Absorbable = 0
1386
1387 If NumFeeds > 0 Then
1388
1389 For d = 1 To NumFeeds
1390
1391 Select Case .Name
1392 Case "Ca"
1393 .Supplied = .Supplied + ((Feed(d).Ca / 100) * Feed(d).DMFed)
1394
1395 If AnimalType <> "Young Calf" Then
1396 .Absorbable = .Absorbable + (((Feed(d).Ca / 100) * Feed(d).DMFed) * (Feed(d).CaBio))
1397 Else
1398 .Absorbable = .Absorbable + ((Feed(d).Ca / 100) * Feed(d).DMFed)
1399 End If
1400
1401 Case "Mg"
1402 .Supplied = .Supplied + ((Feed(d).Mg / 100) * Feed(d).DMFed)
1403
1404 If AnimalType <> "Young Calf" Then
1405 .Absorbable = .Absorbable + (((Feed(d).Mg / 100) * Feed(d).DMFed) *
1406(Feed(d).MgBio))
1407 Else
1408 .Absorbable = .Absorbable + ((Feed(d).Mg / 100) * Feed(d).DMFed)
1409 End If
1410
1411 Case "P"
1412 .Supplied = .Supplied + ((Feed(d).P / 100) * Feed(d).DMFed)
1413
1414 If AnimalType <> "Young Calf" Then
1415 .Absorbable = .Absorbable + (((Feed(d).P / 100) * Feed(d).DMFed) * (Feed(d).PBio))
1416 Else
1417 .Absorbable = .Absorbable + ((Feed(d).P / 100) * Feed(d).DMFed)
1418 End If
1419
1420 Case "K"
1421 .Supplied = .Supplied + ((Feed(d).K / 100) * Feed(d).DMFed)
1422
1423 If AnimalType <> "Young Calf" Then
1424 .Absorbable = .Absorbable + (((Feed(d).K / 100) * Feed(d).DMFed) * (Feed(d).KBio))
1425 Else
1426 .Absorbable = .Absorbable + ((Feed(d).K / 100) * Feed(d).DMFed)
1427 End If
1428
1429 Case "Na"
1430 .Supplied = .Supplied + ((Feed(d).Na / 100) * Feed(d).DMFed)
1431
1432 If AnimalType <> "Young Calf" Then
1433 .Absorbable = .Absorbable + (((Feed(d).Na / 100) * Feed(d).DMFed) * (Feed(d).NaBio))
1434 Else
1435 .Absorbable = .Absorbable + ((Feed(d).Na / 100) * Feed(d).DMFed)
1436 End If
1437
1438 Case "Cl"
1439 .Supplied = .Supplied + ((Feed(d).Cl / 100) * Feed(d).DMFed)
1440
1441 If AnimalType <> "Young Calf" Then
1442 .Absorbable = .Absorbable + (((Feed(d).Cl / 100) * Feed(d).DMFed) * (Feed(d).ClBio))
1443 Else
1444 .Absorbable = .Absorbable + ((Feed(d).Cl / 100) * Feed(d).DMFed)
1445 End If
1446
1447 Case "Zn"
1448 .Supplied = .Supplied + (Feed(d).Zn * Feed(d).DMFed)
1449
1450 If AnimalType <> "Young Calf" Then
1451 .Absorbable = .Absorbable + ((Feed(d).Zn * Feed(d).DMFed) * (Feed(d).ZnBio))
1452 Else
1453 .Absorbable = .Absorbable + (Feed(d).Zn * Feed(d).DMFed)
1454 End If
1455
1456 Case "Cu"
1457 .Supplied = .Supplied + (Feed(d).Cu * Feed(d).DMFed)
1458
1459 If AnimalType <> "Young Calf" Then
1460 .Absorbable = .Absorbable + ((Feed(d).Cu * Feed(d).DMFed) * (Feed(d).CuBio))
1461 Else
1462 .Absorbable = .Absorbable + (Feed(d).Cu * Feed(d).DMFed)
1463 End If
1464
1465 Case "Co"
1466 .Supplied = .Supplied + (Feed(d).Co * Feed(d).DMFed)
1467
1468 If AnimalType <> "Young Calf" Then
1469 .Absorbable = .Absorbable + ((Feed(d).Co * Feed(d).DMFed) * (Feed(d).CoBio))
1470 Else
1471 .Absorbable = .Absorbable + (Feed(d).Co * Feed(d).DMFed)
1472 End If
1473
1474 Case "Mn"
1475 .Supplied = .Supplied + (Feed(d).Mn * Feed(d).DMFed)
1476
1477 If AnimalType <> "Young Calf" Then
1478 .Absorbable = .Absorbable + ((Feed(d).Mn * Feed(d).DMFed) * (Feed(d).MnBio))
1479 Else
1480 .Absorbable = .Absorbable + (Feed(d).Mn * Feed(d).DMFed)
1481 End If
1482
1483 Case "I"
1484 .Supplied = .Supplied + (Feed(d).I * Feed(d).DMFed)
1485
1486 If AnimalType <> "Young Calf" Then
1487 .Absorbable = .Absorbable + ((Feed(d).I * Feed(d).DMFed) * (Feed(d).IBio))
1488 Else
1489 .Absorbable = .Absorbable + (Feed(d).I * Feed(d).DMFed)
1490 End If
1491
1492 Case "Fe"
1493 .Supplied = .Supplied + (Feed(d).Fe * Feed(d).DMFed)
1494
1495 If AnimalType <> "Young Calf" Then
1496 .Absorbable = .Absorbable + ((Feed(d).Fe * Feed(d).DMFed) * (Feed(d).FeBio))
1497 Else
1498 .Absorbable = .Absorbable + (Feed(d).Fe * Feed(d).DMFed)
1499 End If
1500
1501 Case "S"
1502 .Supplied = .Supplied + ((Feed(d).s / 100) * Feed(d).DMFed)
1503
1504 If AnimalType <> "Young Calf" Then
1505 .Absorbable = .Absorbable + (((Feed(d).s / 100) * Feed(d).DMFed) * (Feed(d).SBio))
1506 Else
1507 .Absorbable = .Absorbable + ((Feed(d).s / 100) * Feed(d).DMFed)
1508 End If
1509
1510 Case "Se"
1511 .Supplied = .Supplied + (Feed(d).Se * Feed(d).DMFed)
1512
1513 If AnimalType <> "Young Calf" Then
1514 .Absorbable = .Absorbable + ((Feed(d).Se * Feed(d).DMFed) * (Feed(d).SeBio))
1515 Else
1516 .Absorbable = .Absorbable + (Feed(d).Se * Feed(d).DMFed)
1517 End If
1518
1519 Case "Vit A"
1520 .Supplied = .Supplied + (Feed(d).VitA * Feed(d).DMFed)
1521 .Absorbable = .Absorbable + (Feed(d).VitA * Feed(d).DMFed)
1522
1523 Case "Vit D"
1524 .Supplied = .Supplied + (Feed(d).VitD * Feed(d).DMFed)
1525 .Absorbable = .Absorbable + (Feed(d).VitD * Feed(d).DMFed)
1526
1527 Case "Vit E"
1528 .Supplied = .Supplied + (Feed(d).VitE * Feed(d).DMFed)
1529 .Absorbable = .Absorbable + (Feed(d).VitE * Feed(d).DMFed)
1530
1531 End Select
1532
1533 Next d
1534
1535 End If
1536
1537
1538 'Ration Density Calculation
1539 If TotalDMFed > 0 Then
1540 Select Case .Name
1541 Case "Co", "Cu", "I", "Fe", "Mn", "Se", "Zn"
1542 .RD = .Supplied / TotalDMFed
1543 Case "Vit A", "Vit D", "Vit E"
1544 .RD = .Supplied / TotalDMFed
1545 Case Else
1546 .RD = .Supplied / TotalDMFed
1547 End Select
1548 Else
1549 .RD = 0
1550 End If
1551
1552
1553
1554 ' Balance Calculation - First the .Supplied variable must be converted to
1555 ' the same units as the .Total
1556
1557 Select Case .Units
1558 Case "(g/d)"
1559 .Supplied = .Supplied * 1000
1560 .Absorbable = .Absorbable * 1000
1561 Case "(mg/d)"
1562 Select Case .Name
1563 Case "Co", "Cu", "I", "Fe", "Mn", "Se", "Zn"
1564 ' These minerals are listed as mg/kg, no need to convert them to mg units
1565 Case Else
1566 .Supplied = .Supplied * 1000000
1567 .Absorbable = .Absorbable * 1000000
1568 End Select
1569 End Select
1570
1571 .Balance = .Absorbable - .Total
1572
1573
1574
1575 ' Used to calculate Ration Density requirements for young calves
1576 If AnimalType = "Young Calf" Then
1577 Select Case .Name
1578 Case "Ca"
1579 m=1
1580 n = 0.7
1581 o = 0.6
1582 Case "P"
1583 m = 0.7
1584 n = 0.45
1585 o = 0.4
1586 Case "Mg"
1587 m = 0.07
1588 n = 0.1
1589 o = 0.1
1590 Case "Na"
1591 m = 0.4
1592 n = 0.15
1593 o = 0.14
1594 Case "K"
1595 m = 0.65
1596 n = 0.65
1597 o = 0.65
1598 Case "Cl"
1599 m = 0.25
1600 n = 0.2
1601 o = 0.2
1602 Case "S"
1603 m = 0.29
1604 n = 0.2
1605 o = 0.2
1606 Case "Fe"
1607 m = 100
1608 n = 50
1609 o = 50
1610 Case "Mn", "Zn"
1611 m = 40
1612 n = 40
1613 o = 40
1614 Case "Cu"
1615 m = 10
1616 n = 10
1617 o = 10
1618 Case "I"
1619 m = 0.5
1620 n = 0.25
1621 o = 0.25
1622 Case "Co"
1623 m = 0.11
1624 n = 0.1
1625 o = 0.1
1626 Case "Se"
1627 m = 0.3
1628 n = 0.3
1629 o = 0.3
1630 Case "Vit A"
1631 m=9
1632 n=4
1633 o=4
1634 Case "Vit D"
1635 m = 0.6
1636 n = 0.6
1637 o = 0.6
1638 Case "Vit E"
1639 m = 50
1640 n = 25
1641 o = 25
1642 End Select
1643
1644 If TotalDMFed > 0 Then
1645 .RDReq = ((MilkFeeds * m) + (CalfStarter * n) + (RegFeeds * o)) / TotalDMFed
1646 Else
1647 .RDReq = 0
1648 End If
1649
1650 End If
1651
1652
1653
1654 End With
1655
1656Next C
1657
1658End Sub
1659
1660
1661
1662
1663Private Sub DietEvalOneComputations()
1664
1665Dim X As Integer
1666
1667' The EvalFactors are calculated here as follows :
1668'
1669' NE Diet, NE Required, NE Differ, MP Diet, MP Required, MP Differ
1670' Mcal/d Mcal/d Mcal/d g/d g/d g/d
1671
1672If AnimalType <> "Replacement Heifer" Then
1673 EvalFactor(1).Name = "NE Supplied"
1674 EvalFactor(2).Name = "NE Required"
1675 EvalFactor(3).Name = "NE (Diet - Req.)"
1676 EvalFactor(4).Name = "MP Diet"
1677 EvalFactor(5).Name = "MP Required"
1678 EvalFactor(6).Name = "MP (Diet - Req.)"
1679Else
1680 EvalFactor(1).Name = "ME Supplied"
1681 EvalFactor(2).Name = "ME Required"
1682 EvalFactor(3).Name = "ME (Diet - Req.)"
1683 EvalFactor(4).Name = "MP Diet"
1684 EvalFactor(5).Name = "MP Required"
1685 EvalFactor(6).Name = "MP (Diet - Req.)"
1686End If
1687
1688
1689For X = 1 To 6
1690 If X < 4 Then
1691 EvalFactor(X).Units = "Mcal/day"
1692 Else
1693 EvalFactor(X).Units = "g/day"
1694 End If
1695Next X
1696
1697
1698If AnimalType <> "Replacement Heifer" Then
1699 EvalFactor(1).Total = NEl_Total
1700Else
1701 EvalFactor(1).Total = MEng_Total
1702End If
1703
1704EvalFactor(1).Maint = EvalFactor(1).Total
1705
1706If AnimalType <> "Replacement Heifer" Then
1707 EvalFactor(2).Maint = NEMaint
1708Else
1709 If NEmOverMEng > 0 Then
1710 EvalFactor(2).Maint = NEMaint / NEmOverMEng
1711 Else
1712 EvalFactor(2).Maint = 0
1713 End If
1714End If
1715
1716EvalFactor(3).Maint = EvalFactor(1).Maint - EvalFactor(2).Maint
1717
1718EvalFactor(1).Preg = EvalFactor(3).Maint
1719
1720If AnimalType <> "Replacement Heifer" Then
1721 EvalFactor(2).Preg = NEPreg
1722Else
1723 EvalFactor(2).Preg = MEPreg
1724End If
1725
1726EvalFactor(3).Preg = EvalFactor(1).Preg - EvalFactor(2).Preg
1727
1728EvalFactor(1).Lact = EvalFactor(3).Preg
1729
1730If AnimalType <> "Replacement Heifer" Then
1731 EvalFactor(2).Lact = NELact
1732Else
1733 EvalFactor(2).Lact = 0
1734End If
1735
1736
1737EvalFactor(3).Lact = EvalFactor(1).Lact - EvalFactor(2).Lact
1738
1739
1740EvalFactor(1).Gain = EvalFactor(3).Lact
1741
1742
1743If AnimalType = "Replacement Heifer" Then
1744 EvalFactor(2).Gain = EvalFactor(1).Gain
1745Else
1746 If EQEBG > 0 Then
1747 EvalFactor(2).Gain = NEGrowth
1748 Else
1749 EvalFactor(2).Gain = 0
1750 End If
1751End If
1752
1753EvalFactor(3).Gain = EvalFactor(1).Gain - EvalFactor(2).Gain
1754
1755EvalFactor(1).Reserves = EvalFactor(3).Gain
1756
1757EvalFactor(2).Reserves = NEReserves
1758
1759
1760With EvalFactor(2)
1761 .Total = .Maint + .Preg + .Lact + .Gain + .Reserves
1762End With
1763
1764EvalFactor(3).Total = EvalFactor(1).Total - EvalFactor(2).Total
1765
1766
1767MPBact = MCP_Total * 0.64
1768
1769MPFeed = TotalDigestedRUP
1770
1771
1772EvalFactor(4).Total = MPBact + MPFeed
1773
1774EvalFactor(4).Maint = EvalFactor(4).Total
1775
1776EvalFactor(5).Maint = MPMaint
1777
1778EvalFactor(6).Maint = EvalFactor(4).Maint - EvalFactor(5).Maint
1779
1780EvalFactor(4).Preg = EvalFactor(6).Maint
1781
1782EvalFactor(5).Preg = MPPreg
1783
1784EvalFactor(6).Preg = EvalFactor(4).Preg - EvalFactor(5).Preg
1785
1786EvalFactor(4).Lact = EvalFactor(6).Preg
1787
1788EvalFactor(5).Lact = MPLact
1789
1790EvalFactor(6).Lact = EvalFactor(4).Lact - EvalFactor(5).Lact
1791
1792EvalFactor(4).Gain = EvalFactor(6).Lact
1793
1794
1795If Age > FirstCalf Then
1796 If EQEBG > 0 Then
1797 EvalFactor(5).Gain = MPGrowth
1798 Else
1799 EvalFactor(5).Gain = 0
1800 End If
1801Else
1802 If SWG > 0 Then
1803 If EffMP_NPg > 0 Then
1804 If WG > 0 Then
1805 EvalFactor(5).Gain = (((268 - (29.4 * (RE / WG))) * WG) / EffMP_NPg)
1806 Else
1807 EvalFactor(5).Gain = 0
1808 End If
1809 Else
1810 EvalFactor(5).Gain = 0
1811 End If
1812 Else
1813 EvalFactor(5).Gain = 0
1814 End If
1815End If
1816
1817
1818EvalFactor(6).Gain = EvalFactor(4).Gain - EvalFactor(5).Gain
1819
1820EvalFactor(4).Reserves = EvalFactor(6).Gain
1821
1822With EvalFactor(5)
1823 .Total = .Maint + .Preg + .Lact + .Gain
1824End With
1825
1826EvalFactor(6).Total = EvalFactor(4).Total - EvalFactor(5).Total
1827
1828DMIPred = DryMatterIntake
1829
1830DMIActual = TotalDMFed
1831
1832If TotalDMFed > 0 Then
1833 DietCP = CP_Total / (TotalDMFed * 1000)
1834Else
1835 DietCP = 0
1836End If
1837
1838
1839If CP_Total > 0 Then
1840 CP_RDP = (RDP_Total * 1000) / CP_Total
1841 CP_RUP = (CP_Total - (RDP_Total * 1000)) / CP_Total
1842Else
1843 CP_RDP = 0
1844 CP_RUP = 0
1845End If
1846
1847
1848RDPReq = 0.15294 * TDN_Act_Total
1849
1850RDPSup = TotalDMFed * 1000 * DietCP * CP_RDP
1851
1852RDPBal = RDPSup - RDPReq
1853
1854RUPSup = CP_Total - RDPSup
1855
1856
1857If DietRUPDigest > 0 Then
1858 RUPReq = (EvalFactor(5).Total - (MPBact + MPEndo)) / DietRUPDigest
1859Else
1860 RUPReq = 0
1861End If
1862
1863RUPBal = RUPSup - RUPReq
1864
1865
1866
1867MPBalance = (((MPFeed * 1000) + MPBact + MPEndo) _
1868 - (MPMaint + MPPreg + MPLact + MPGrowth))
1869
1870
1871If SWG > 0 Then
1872 ProteinInGain = (268 - (29.4 * (NEGrowthDiet / SWG)))
1873Else
1874 ProteinInGain = 0
1875End If
1876
1877
1878
1879Dim MPBalwoGrowth As Single
1880
1881MPBalwoGrowth = (((MPFeed * 1000) + MPBact + MPEndo) _
1882 - (MPMaint + MPPreg + MPLact))
1883
1884If ProteinInGain > 0 Then
1885 MPAllowGain = ((MPBalwoGrowth * EffMP_NPg) / ProteinInGain) / 0.96
1886Else
1887 MPAllowGain = 0
1888End If
1889
1890
1891MPAllowGainPreg = MPAllowGain + (ADGPreg / 1000)
1892
1893
1894
1895
1896End Sub
1897
1898
1899
1900
1901Private Sub ReservesComputations()
1902
1903Dim EnergyBal As Single ' Equal to EvalFactor(3).Gain
1904Dim X As Integer
1905
1906EnergyBal = EvalFactor(3).Gain
1907
1908CS_F(1) = 0.726
1909CS_F(2) = 0.794
1910CS_F(3) = 0.863
1911CS_F(4) = 0.931
1912CS_F(5) = 1
1913CS_F(6) = 1.069
1914CS_F(7) = 1.137
1915CS_F(8) = 1.206
1916CS_F(9) = 1.274
1917
1918
1919CS5EBW = (SBW * 0.851) / CS_F(CS9)
1920
1921For X = 1 To 9
1922 EBW(X) = CS_F(X) * CS5EBW
1923 AF(X) = 0.037683 * X
1924 TF(X) = AF(X) * EBW(X)
1925 AP(X) = 0.200886 - (0.0066762 * X)
1926 TP(X) = AP(X) * EBW(X)
1927 ER(X) = (9.4 * TF(X)) + (5.55 * TP(X))
1928Next X
1929
1930If CS9 >= 3 Then
1931 Lose1CS = ER(CS9) - ER(CS9 - 2)
1932Else
1933 Lose1CS = 1000000
1934End If
1935
1936If CS9 <= 7 Then
1937 Gain1CS = ER(CS9 + 2) - ER(CS9)
1938Else
1939 Gain1CS = 1000000
1940End If
1941
1942If CS9 >= 3 Then
1943 NElSub = 0.82 * Lose1CS
1944Else
1945 NElSub = 0.82 * (ER(CS9) - ER(1))
1946End If
1947
1948If CS9 <= 7 Then
1949 NElReq = (0.644 / 0.75) * Gain1CS
1950Else
1951 NElReq = (0.644 / 0.75) * (ER(9) - ER(CS9))
1952End If
1953
1954If EnergyBal > 0 Then
1955 deltaER = NElReq
1956Else
1957 deltaER = NElSub
1958End If
1959
1960If AnimalType = "Replacement Heifer" Then
1961 DaysToChange = 0
1962Else
1963 DaysToChange = deltaER / EnergyBal
1964End If
1965
1966End Sub
1967
1968
1969
1970Private Sub DietEvalTwoComputations()
1971
1972Dim X As Integer
1973
1974If AnimalType = "Replacement Heifer" Then
1975 CondMessage = "No changes in condition score for heifers."
1976Else
1977 If EvalFactor(3).Total >= 0 Then
1978 If Abs(DaysToChange) <= 305 Then
1979 CondMessage = "Days to gain one condition score : " & Str(CInt(Abs(DaysToChange)))
1980 Else
1981 CondMessage = "Days to gain one condition score : > 305"
1982 End If
1983 Else
1984 If Abs(DaysToChange) <= 305 Then
1985 CondMessage = "Days to lose one condition score : " & Str(CInt(Abs(DaysToChange)))
1986 Else
1987 CondMessage = "Days to lose one condition score : > 305"
1988 End If
1989 End If
1990End If
1991
1992
1993If TotalDMFed > 0 Then
1994 DietNDF = NDF_Total / TotalDMFed
1995 DietADF = ADF_Total / TotalDMFed
1996Else
1997 DietNDF = 0
1998 DietADF = 0
1999End If
2000
2001
2002ForageNDF = 0
2003
2004For X = 1 To NumFeeds
2005 If Feed(X).EnergyEqClass = "Forage" Then
2006 ForageNDF = ForageNDF + ((Feed(X).NDF / 100) * Feed(X).DMFed)
2007 End If
2008Next X
2009
2010
2011If TotalDMFed > 0 Then
2012 DietME = MEng_Total / TotalDMFed
2013 DietNEl = NEl_Total / TotalDMFed
2014 DietNEg = NEg_Total / TotalDMFed
2015Else
2016 DietME = 0
2017 DietNEl = 0
2018 DietNEg = 0
2019End If
2020
2021
2022Const kgPerMetricTon = 996.9
2023
2024
2025If AnimalType = "Lactating Cow" Then
2026 DailyMilk = MilkProd
2027Else
2028 DailyMilk = 0
2029End If
2030
2031
2032Dim NEBalance As Single
2033Dim MEBalance As Single
2034Dim EnergyFactor As Single
2035Dim NE_per_kg As Single
2036
2037
2038If AnimalType <> "Replacement Heifer" Then
2039 NEBalance = (NEl_Total - (NEMaint + NEPreg + NELact + NEGrowth))
2040 MEBalance = 0
2041Else
2042 NEBalance = 0
2043 MEBalance = (MEng_Total - (MEMaint + MEPreg + MEGrowth))
2044End If
2045
2046
2047
2048If AnimalType = "Lactating Cow" Then
2049 If NEBalance < 0 Then
2050 Reserves_WG = NEBalance / 4.92
2051 Else
2052 Reserves_WG = NEBalance / 5.12
2053 End If
2054ElseIf AnimalType = "Dry Cow" Then
2055 If NEBalance < 0 Then
2056 Reserves_WG = NEBalance / 4.92
2057 Else
2058 Reserves_WG = NEBalance / 6.4
2059 End If
2060Else
2061 Reserves_WG = 0
2062End If
2063
2064
2065If NEBalance > 0 Then
2066 MPReqReserves = (Reserves_WG * ProteinInGain) / 0.492
2067 MPProvReserves = 0
2068
2069 If DietRUPDigest > 0 Then
2070 RUPReqReserves = MPReqReserves / DietRUPDigest
2071 Else
2072 RUPReqReserves = 0
2073 End If
2074
2075 RUPProvReserves = 0
2076Else
2077 MPReqReserves = 0
2078 MPProvReserves = (-1 * Reserves_WG) * ProteinInGain * 0.67
2079 RUPReqReserves = 0
2080
2081 If DietRUPDigest > 0 Then
2082 RUPProvReserves = MPProvReserves / DietRUPDigest
2083 Else
2084 RUPProvReserves = 0
2085 End If
2086End If
2087
2088
2089TargetADGwoPreg = ADG
2090TargetADGPreg = ADG + (ADGPreg / 1000)
2091
2092
2093If MilkProd > 0 Then
2094 If (NEl_Total - NEMaint - NEPreg) > 0 Then
2095 If NELact > 0 Then
2096 EnergyAllowableMilk = MilkProd * ((NEl_Total - NEMaint - NEPreg - NEGrowth) /
2097NELact)
2098 Else
2099 EnergyAllowableMilk = 0
2100 End If
2101 Else
2102 EnergyAllowableMilk = 0
2103 End If
2104
2105 If (((MPFeed * 1000) + MPBact + MPEndo) - MPMaint - MPPreg) > 0 Then
2106 If MPLact > 0 Then
2107 ProteinAllowableMilk = MilkProd * ((((MPFeed * 1000) + MPBact + MPEndo) - MPMaint -
2108MPPreg - MPGrowth) / MPLact)
2109 Else
2110 ProteinAllowableMilk = 0
2111 End If
2112 Else
2113 ProteinAllowableMilk = 0
2114 End If
2115Else
2116 EnergyAllowableMilk = 0
2117 ProteinAllowableMilk = 0
2118End If
2119
2120
2121
2122If DryMatterIntake > 0 Then
2123 If ((AnimalType <> "Replacement Heifer") Or (DaysPreg > 259)) Then
2124 Energy_TargetDietConc = (NEMaint + NEPreg + NELact + NEGrowth) / DryMatterIntake
2125 Else
2126 Energy_TargetDietConc = (MEMaint + MEPreg + MEGrowth) / DryMatterIntake
2127 End If
2128
2129 MP_TargetDietConc = (MPMaint + MPPreg + MPLact + MPGrowth) / DryMatterIntake
2130
2131 Ca_TargetDietConc = Mineral(1).Total / DryMatterIntake
2132
2133 P_TargetDietConc = Mineral(2).Total / DryMatterIntake
2134Else
2135 Energy_TargetDietConc = 0
2136 MP_TargetDietConc = 0
2137 Ca_TargetDietConc = 0
2138 P_TargetDietConc = 0
2139End If
2140
2141
2142DCAD = (((Mineral(6).RD * 100) * 435) + ((Mineral(5).RD * 100) * 256)) _
2143 - (((Mineral(4).RD * 100) * 282) + ((Mineral(7).RD * 100) * 624))
2144
2145
2146
2147End Sub
2148
2149
2150
2151Public Sub CalfComputations()
2152
2153Dim X As Integer
2154
2155Dim TotalNEm As Single
2156Dim TotalNEg As Single
2157Dim TotalME As Single
2158Dim TotalCP As Single
2159Dim TotalDCP As Single
2160Dim TotalMilkADP As Single
2161Dim TotalStarterADP As Single
2162Dim TotalMilkCP As Single
2163Dim TotalStarterCP As Single
2164Dim TotalADP As Single
2165Dim ADP_to_CP As Single
2166Dim MilkME As Single
2167Dim StarterME As Single
2168Dim Fat As Single
2169
2170
2171' Energy computations
2172MilkDMI = 0
2173StarterDMI = 0
2174TotalNEm = 0
2175TotalNEg = 0
2176TotalME = 0
2177TotalCP = 0
2178TotalDCP = 0
2179
2180TotalMilkADP = 0
2181TotalStarterADP = 0
2182TotalMilkCP = 0
2183TotalStarterCP = 0
2184DietNEmCalf = 0
2185DietNEgCalf = 0
2186DietMECalf = 0
2187
2188MilkME = 0
2189StarterME = 0
2190Fat = 0
2191
2192
2193' If there are no feeds then there can be no ration, so the computations cannot be run
2194If NumFeeds = 0 Then
2195 Exit Sub
2196End If
2197
2198
2199' If the Calf is not fed anything, then the computations cannot be run
2200' NB: Both regular and calf feeds have a .DMFed property, so this is okay as-is
2201TotalDMFed = 0
2202
2203For X = 1 To NumFeeds
2204 TotalDMFed = TotalDMFed + Feed(X).DMFed
2205Next X
2206
2207
2208If TotalDMFed = 0 Then
2209 Exit Sub
2210End If
2211
2212
2213
2214Call ComputeEnergyValues
2215
2216
2217
2218For X = 1 To NumFeeds
2219 With Feed(X)
2220 If (.Category = "Calf Feed - Starter") _
2221 Or (.Category = "Calf Feed - Milk") _
2222 Or (.Category = "Calf Feed - Vitamin/Mineral") Then
2223 ' The feed is a calf feed
2224
2225 TotalNEm = TotalNEm + (.DMFed * .cNEm)
2226 TotalNEg = TotalNEg + (.DMFed * .cNEg)
2227 TotalME = TotalME + (.DMFed * .cMEng)
2228 TotalCP = TotalCP + (.DMFed * (.cCP / 100))
2229 TotalDCP = TotalDCP + (.DMFed * (.cDCP / 100))
2230 Fat = Fat + (.DMFed * (.cEE / 100))
2231
2232 If .Category = "Calf Feed - Milk" Then
2233 MilkDMI = MilkDMI + .DMFed
2234 MilkME = MilkME + (.DMFed * .cMEng)
2235 TotalMilkADP = TotalMilkADP + (.DMFed * (.cDCP / 100))
2236 TotalMilkCP = TotalMilkCP + (.DMFed * (.cCP / 100))
2237 Else
2238 StarterDMI = StarterDMI + .DMFed
2239 StarterME = StarterME + (.DMFed * .cMEng)
2240 TotalStarterADP = TotalStarterADP + (.DMFed * (.cDCP / 100))
2241 TotalStarterCP = TotalStarterCP + (.DMFed * (.cCP / 100))
2242 End If
2243
2244 Else
2245 ' The feed is a regular feed.
2246 ' All regular feeds in a calf diet are considered starter feeds
2247 StarterDMI = StarterDMI + .DMFed
2248
2249 ' Convert regular feed CP values to calf feed CP values
2250 .cCP = .CP
2251
2252 ' Since regular feeds are automatically starter feeds in a calf
2253 ' diet, the DCP must be 0.75 * CP
2254 .cDCP = 0.75 * .cCP
2255
2256 ' Once CP and DCP are determined for these regular feeds,
2257 ' Total values are computed the same way
2258 TotalCP = TotalCP + (.DMFed * (.cCP / 100))
2259 TotalDCP = TotalDCP + (.DMFed * (.cDCP / 100))
2260 TotalStarterADP = TotalStarterADP + (.DMFed * (.cDCP / 100))
2261 TotalStarterCP = TotalStarterCP + (.DMFed * (.cCP / 100))
2262 End If
2263 End With
2264Next X
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274' These values are only used for output, so define them
2275' on a percentage basis (eg 83% instead of 0.83)
2276If TotalDMFed > 0 Then
2277 DietCPCalf = (TotalCP / TotalDMFed) * 100
2278 DietDCPCalf = (TotalDCP / TotalDMFed) * 100
2279Else
2280 DietCPCalf = 0
2281 DietDCPCalf = 0
2282End If
2283
2284
2285' ME requirement for maintenance with no stress
2286NEmCalf = 0.086 * (CalfBW ^ 0.75)
2287
2288
2289
2290' These instruction are used to compute a weighted average of
2291' efficiencies to convert NEm to ME and NEg to ME
2292Dim NonMineralFeeds As Single
2293
2294CalfKm = 0
2295CalfKg = 0
2296NonMineralFeeds = 0
2297NEg_Total = 0
2298NEm_Total = 0
2299
2300
2301
2302For X = 1 To NumFeeds
2303 With Feed(X)
2304 If (.Category = "Calf Feed - Starter") _
2305 Or (.Category = "Calf Feed - Milk") _
2306 Or (.Category = "Calf Feed - Vitamin/Mineral") Then
2307 If .cMEng <> 0 Then
2308 CalfKm = CalfKm + (0.86 * (Feed(X).DMFed * Feed(X).cMEng))
2309 CalfKg = CalfKg + (0.69 * (Feed(X).DMFed * Feed(X).cMEng))
2310 NonMineralFeeds = NonMineralFeeds + (Feed(X).DMFed * Feed(X).cMEng)
2311 End If
2312 Else
2313 If .MEng <> 0 Then
2314 CalfKm = CalfKm + (0.75 * (Feed(X).DMFed * Feed(X).MEng))
2315 CalfKg = CalfKg + (0.57 * (Feed(X).DMFed * Feed(X).MEng))
2316
2317 .NEm = (0.75 * (Feed(X).DMFed * Feed(X).MEng))
2318 .NEg = (0.57 * (Feed(X).DMFed * Feed(X).MEng))
2319
2320 NonMineralFeeds = NonMineralFeeds + (Feed(X).DMFed * Feed(X).MEng)
2321
2322 NEg_Total = NEg_Total + .NEg
2323 NEm_Total = NEm_Total + .NEm
2324 End If
2325 End If
2326 End With
2327Next X
2328
2329If NonMineralFeeds > 0 Then
2330 CalfKm = CalfKm / NonMineralFeeds
2331 CalfKg = CalfKg / NonMineralFeeds
2332Else
2333 CalfKm = 0
2334 CalfKg = 0
2335End If
2336
2337
2338
2339
2340
2341' Note that energy values for regular feeds are computed based on the total diet.
2342' That is, in the ComputeEnergyValues sub-model, NEm, NEg and ME values
2343' are computed for the entire ration, not on a feed-by-feed basis.
2344' These total energy values are added to those computed for the calf feeds.
2345TotalNEm = TotalNEm + NEm_Total
2346TotalNEg = TotalNEg + NEg_Total
2347TotalME = TotalME + MEng_Total
2348
2349
2350
2351' Note that, to get the dietary energy concentrations, the TotalDMFed
2352' value is used. This is correct, because the total energy values
2353' used in these equations are Calf + Regular feed totals
2354If TotalDMFed > 0 Then
2355 DietNEmCalf = TotalNEm / TotalDMFed
2356 DietNEgCalf = TotalNEg / TotalDMFed
2357 DietMECalf = TotalME / TotalDMFed
2358Else
2359 DietNEmCalf = 0
2360 DietNEgCalf = 0
2361 DietMECalf = 0
2362End If
2363
2364
2365' Factor in lower critical temperature stress
2366If Age > 2 Then
2367
2368 Select Case CalfTemp
2369 Case Is > 5
2370 TempFactor = 0
2371 Case Is > 0
2372 TempFactor = 0.13
2373 Case Is > -5
2374 TempFactor = 0.27
2375 Case Is > -10
2376 TempFactor = 0.4
2377 Case Is > -15
2378 TempFactor = 0.54
2379 Case Is > -20
2380 TempFactor = 0.68
2381 Case Is > -25
2382 TempFactor = 0.81
2383 Case Is > -30
2384 TempFactor = 0.94
2385 Case Else
2386 TempFactor = 1.07
2387 End Select
2388
2389Else
2390
2391 Select Case CalfTemp
2392 Case Is > 15
2393 TempFactor = 0
2394 Case Is > 10
2395 TempFactor = 0.13
2396 Case Is > 5
2397 TempFactor = 0.27
2398 Case Is > 0
2399 TempFactor = 0.4
2400 Case Is > -5
2401 TempFactor = 0.54
2402 Case Is > -10
2403 TempFactor = 0.68
2404 Case Is > -15
2405 TempFactor = 0.86
2406 Case Is > -20
2407 TempFactor = 0.94
2408 Case Is > -25
2409 TempFactor = 1.08
2410 Case Is > -30
2411 TempFactor = 1.21
2412 Case Else
2413 TempFactor = 1.34
2414 End Select
2415
2416End If
2417
2418
2419
2420' Apply temperature factor to compute NEm requirement (with stress)
2421NEmCalf = (NEmCalf * (1 + TempFactor))
2422
2423
2424
2425' Recalculate ME for maintenance, since the NEm has been adjusted for temperature effects
2426If CalfKm <> 0 Then
2427 MEMaint = NEmCalf / CalfKm
2428Else
2429 MEMaint = 0
2430End If
2431
2432
2433If DietNEmCalf <> 0 Then
2434 DMIForNEmCalf = NEmCalf / DietNEmCalf
2435Else
2436 DMIForNEmCalf = 0
2437End If
2438
2439
2440DMIForGrowth = (TotalDMFed - DMIForNEmCalf)
2441
2442NEFGCalf = DMIForGrowth * DietNEgCalf
2443
2444
2445If CalfKg <> 0 Then
2446 MEFGCalf = NEFGCalf / CalfKg
2447Else
2448 MEFGCalf = 0
2449End If
2450
2451
2452
2453If NEFGCalf > 0 Then
2454
2455 ' The energy allowable ADG equation was derived from the following equation:
2456 '
2457 ' NEgReq = 0.69 * (0.84 * CalfBW ^.355) * (LWG ^ 1.2)
2458 '
2459 '
2460 ' I can re-write the equation in terms of LWG as follows:
2461 '
2462 ' (LWG ^ 1.2) = NEgReq / (0.69 * (0.84 * CalfBW ^ .355))
2463 ' (LWG ^ 1.2) = (1.45 * NEgReq) / (0.84 * CalfBW ^ .355)
2464 '
2465 '
2466 ' Now take the log of both sides of the equation to get:
2467 ' log ((LWG ^ 1.2)) = log((1.45 * NEgReq) / (0.84 * CalfBW ^ .355))
2468 ' log ((LWG ^ 1.2)) = log((1.73 * NEgReq) / (CalfBW ^ .355))
2469 '
2470 '
2471 ' Since log A^x = x * (log A), the equation can now be re-written as:
2472 '
2473 ' 1.2 * (log LWG) = log((1.73 * NEgReq) / (CalfBW ^ .355))
2474 ' log LWG = 0.8333 * (log((1.73 * NEgReq) / (CalfBW ^ .355)))
2475 '
2476 '
2477 ' Finally, by using the fact that exp(log(A)) = A, we can re-write the original
2478 ' equation as follows:
2479 '
2480 ' LWG = exp(0.8333 * (log((1.73 * NEgReq) / (CalfBW ^ .355))))
2481
2482 EnergyADGCalf = Exp((0.8333 * (Log((1.19 * NEFGCalf) / (0.69 * (CalfBW ^ 0.355))))))
2483Else
2484 EnergyADGCalf = -9999
2485End If
2486
2487
2488If EnergyADGCalf > 0 Then
2489 CalfADG = EnergyADGCalf
2490Else
2491 CalfADG = 0
2492End If
2493
2494
2495' There is 30 g Nitrogen/kg gain ==> (30 g N)(6.25) = 187.5 g Net Protein/kg gain
2496ProteinReqCalf = CalfADG * 0.188
2497
2498
2499
2500' Protein Supply
2501TotalADP = ((TotalMilkCP * 0.93) + (TotalStarterCP * 0.75)) * 1000
2502
2503
2504If (TotalMilkCP + TotalStarterCP) > 0 Then
2505 ADP_to_CP = TotalADP / ((TotalMilkCP + TotalStarterCP) * 1000)
2506Else
2507 ADP_to_CP = 1
2508End If
2509
2510
2511' Protein maintenance requirements
2512EUN = 0.2 * (CalfBW ^ 0.75)
2513MFN = (MilkDMI * 1.9) + (StarterDMI * 3.3)
2514
2515If TotalCP > 0 Then
2516 BV = (0.8 * (TotalMilkCP / TotalCP)) _
2517 + (0.7 * (TotalStarterCP / TotalCP))
2518Else
2519 BV = 1
2520End If
2521
2522
2523If BV <= 0 Then
2524 BV = 1
2525End If
2526
2527ADPmaint = 6.25 * (((1 / BV) * (EUN + MFN)) - MFN)
2528
2529
2530If ADP_to_CP > 0 Then
2531 CPmCalf = ADPmaint / ADP_to_CP
2532Else
2533 CPmCalf = 0
2534End If
2535
2536ADPgrowth = (ProteinReqCalf * 1000) / BV
2537
2538If ADP_to_CP > 0 Then
2539 CPgCalf = ADPgrowth / ADP_to_CP
2540Else
2541 CPgCalf = 0
2542End If
2543
2544
2545CalfADPBal = TotalADP - ADPmaint - ADPgrowth
2546CalfCPBal = (TotalCP * 1000) - CPmCalf - CPgCalf
2547
2548ADPAllowGain = ((TotalADP - ADPmaint) * BV) / 0.188
2549
2550
2551CalfFat = Fat + ((Fat_Total / 100) * TotalRegDMFed)
2552
2553If TotalDMFed > 0 Then
2554 DietFatCalf = CalfFat / TotalDMFed
2555Else
2556 DietFatCalf = 0
2557End If
2558
2559
2560End Sub
2561
2562
2563
2564Private Sub GrowthComputations()
2565
2566If MW > 0 Then
2567 SRW_to_MSBW = 478 / (0.96 * MW)
2568Else
2569 SRW_to_MSBW = 478 / (0.96 * (MW_From_Breed(Breed)))
2570End If
2571
2572EQSBW = (SBW - CW) * SRW_to_MSBW
2573
2574SWG = 13.91 * (NEGrowthDiet ^ 0.9116) * (EQSBW ^ -0.6837)
2575
2576
2577MEAllowGain = (SWG / 0.96)
2578
2579
2580If Age < FirstCalf Then
2581 MEAllowGainPreg = MEAllowGain + (ADGPreg / 1000)
2582Else
2583 MEAllowGainPreg = (EQEBG / 0.956) + (ADGPreg / 1000)
2584End If
2585
2586
2587If UseTargetADG = False Then
2588 WG = 0.96 * (DesiredADG / 1000)
2589 DLWReq = 0
2590Else
2591 WG = 0.96 * ADG
2592 DLWReq = 0
2593End If
2594
2595
2596
2597
2598EQEBW = 0.891 * EQSBW
2599
2600EQEBG = 0.956 * WG
2601
2602RE = 0.0635 * (EQEBW ^ 0.75) * (EQEBG ^ 1.097)
2603
2604If NEg_Total > 0 Then
2605 If AnimalType <> "Replacement Heifer" Then
2606 NEGrowth = (NEm_Total / NEg_Total) * RE
2607 Else
2608 NEGrowth = RE
2609 End If
2610Else
2611 NEGrowth = 0
2612End If
2613
2614If WG = 0 Then
2615 NPg = 0
2616Else
2617 NPg = WG * (268 - (29.4 * (RE / WG)))
2618End If
2619
2620
2621
2622If (EQSBW <= 478) Then
2623 EffMP_NPg = (83.4 - (0.114 * EQSBW)) / 100
2624Else
2625 EffMP_NPg = 0.28908
2626End If
2627
2628
2629MPGrowth = NPg / EffMP_NPg
2630
2631
2632If (DLWReq > 0) Then
2633 NEReserves = DLWReq * 5.12
2634Else
2635 NEReserves = DLWReq * 4.92
2636End If
2637
2638
2639If AnimalType = "Replacement Heifer" Then
2640 DMIAvailGrowth = TotalDMFed - DMIMaint - DMIPreg
2641Else
2642 DMIAvailGrowth = TotalDMFed - DMIMaint - DMIPreg - DMILact
2643End If
2644
2645
2646
2647
2648' This value is used only for Replacement Heifers
2649If NEgOverMEng > 0 Then
2650 MEGrowth = NEGrowth / NEgOverMEng
2651Else
2652 MEGrowth = 0
2653End If
2654
2655
2656End Sub
2657
2658
2659Private Sub MaintenanceComputations()
2660
2661If (AnimalType = "Lactating Cow") Or (AnimalType = "Dry Cow") Then
2662 a1 = 0.08
2663Else
2664 a1 = 0.086
2665End If
2666
2667CS9 = ((CS - 1) * 2) + 1
2668
2669If AnimalType = "Replacement Heifer" Then
2670 COMP = 0.8 + ((CS9 - 1) * 0.05)
2671 a2 = 0.0007 * (20 - PrevTemp)
2672Else
2673 COMP = 1
2674 a2 = 0
2675End If
2676
2677
2678
2679If Grazing = False Then
2680 NEmact = 0
2681Else
2682 If AnimalType = "Replacement Heifer" Then
2683 NEmact = ((0.0009 * BW) + (0.0016 * BW))
2684
2685 If Topography = "Hilly" Then
2686 NEmact = NEmact + (0.006 * BW)
2687 End If
2688
2689 Else
2690
2691 ' These activity equations derived by NRC committee members on
2692 ' a full (not shrunk) body weight basis
2693 NEmact = ((((Distance / 1000) * Trips) * (0.00045 * BW)) + (0.0012 * BW))
2694
2695 If Topography = "Hilly" Then
2696 NEmact = NEmact + (0.006 * BW)
2697 End If
2698
2699 End If
2700End If
2701
2702
2703
2704If AnimalType = "Replacement Heifer" Then
2705 NEMaintNS = (((SBW - CW) ^ 0.75) * ((a1 * COMP) + a2)) + NEmact
2706Else
2707 NEMaintNS = (((BW - CW) ^ 0.75) * (a1 * COMP)) + NEmact
2708End If
2709
2710
2711If TotalDMFed > 0 Then
2712 If AnimalType <> "Replacement Heifer" Then
2713 NEDietConc = NEl_Total / TotalDMFed
2714 Else
2715 NEDietConc = NEm_Total / TotalDMFed
2716 End If
2717Else
2718 NEDietConc = 0
2719End If
2720
2721
2722If NEDietConc > 0 Then
2723 FeedMaint = NEMaintNS / NEDietConc
2724Else
2725 FeedMaint = 0
2726End If
2727
2728
2729If TotalDMFed > 0 Then
2730 NEGrowthDietNS = (TotalDMFed - FeedMaint) * (NEg_Total / TotalDMFed)
2731Else
2732 NEGrowthDietNS = 0
2733End If
2734
2735
2736If AnimalType = "Replacement Heifer" Then
2737 NEFP = NEGrowthDietNS
2738Else
2739 If TotalDMFed > 0 Then
2740 NEFP = (TotalDMFed - FeedMaint) * (NEl_Total / TotalDMFed) * 0.65
2741 Else
2742 NEFP = 0
2743 End If
2744End If
2745
2746
2747MEI = MEng_Total
2748
2749SA = 0.09 * (SBW ^ 0.67)
2750
2751If SA > 0 Then
2752 HP = (MEI - NEFP) / SA
2753Else
2754 HP = 0
2755End If
2756
2757
2758T = Age * 30.4
2759
2760Select Case T
2761 Case Is <= 30
2762 TI = 2.5
2763 Case Is < 183
2764 TI = 6.5
2765 Case Is < 363
2766 TI = 5.1875 + (0.3125 * CS9)
2767 Case Is >= 363
2768 TI = 5.25 + (0.75 * CS9)
2769End Select
2770
2771
2772Select Case CoatCond
2773 Case "Clean/Dry"
2774 Coat = 1
2775 Case "Some Mud"
2776 Coat = 0.8
2777 Case "Wet/Matted"
2778 Coat = 0.5
2779 Case "Covered with Snow/Mud"
2780 Coat = 0.2
2781End Select
2782
2783
2784EI = ((7.36 - (0.296 * WindSpeed) + (2.55 * HairDepth)) * Coat) * 0.8
2785
2786If (EI < 0) Then
2787 EI = 0
2788End If
2789
2790INS = TI + EI
2791
2792LCT = 39 - (INS * HP * 0.85)
2793
2794If (LCT > Temp) Then
2795 MEcs = SA * (LCT - Temp) / INS
2796Else
2797 MEcs = 0
2798End If
2799
2800If ((MEng_Total > 0) And (TotalDMFed > 0)) Then
2801 ColdStr = ((NEDietConc / (MEng_Total / TotalDMFed)) * MEcs)
2802Else
2803 ColdStr = 0
2804End If
2805
2806
2807If ((HeatStress = "None") Or (Temp < 30)) Then
2808 HeatStr = 1
2809ElseIf (HeatStress = "Rapid/Shallow") Then
2810 HeatStr = 1.07
2811ElseIf (HeatStress = "Open Mouth") Then
2812 HeatStr = 1.18
2813End If
2814
2815
2816NEMaint = ((NEMaintNS + ColdStr) * HeatStr) + NEmact
2817
2818
2819If NEDietConc > 0 Then
2820 DMIMaint = NEMaint / NEDietConc
2821Else
2822 DMIMaint = 0
2823End If
2824
2825
2826If DaysPreg > 0 Then
2827 If ((MEng_Total > 0) And (TotalDMFed > 0)) Then
2828 DMIPreg = MEPreg / (MEng_Total / TotalDMFed)
2829 Else
2830 DMIPreg = 0
2831 End If
2832Else
2833 DMIPreg = 0
2834End If
2835
2836
2837If TotalDMFed > 0 Then
2838 NEGrowthDiet = (TotalDMFed - DMIMaint - DMIPreg) * (NEg_Total / TotalDMFed)
2839Else
2840 NEGrowthDiet = 0
2841End If
2842
2843
2844
2845' Net energy for growth available in the diet cannot be negative
2846If NEGrowthDiet < 0 Then
2847 NEGrowthDiet = 0
2848End If
2849
2850
2851
2852MPMaint = (0.3 * ((BW - CW) ^ 0.6)) + (4.1 * ((BW - CW) ^ 0.5)) _
2853 + ((TotalDMFed * 1000 * 0.03) - (0.5 * ((MPBact / 0.8) - (MPBact)))) +
2854MPEndoReq
2855
2856
2857ScurfMP = 0.3 * ((BW - CW) ^ 0.6)
2858UrineMP = 4.1 * ((BW - CW) ^ 0.5)
2859FecalMP = ((TotalDMFed * 1000 * 0.03) - (0.5 * ((MPBact / 0.8) - (MPBact))))
2860
2861
2862
2863' Used only for Replacement Heifers
2864If NEmOverMEng > 0 Then
2865 MEMaint = NEMaint / NEmOverMEng
2866Else
2867 MEMaint = 0
2868End If
2869
2870End Sub
2871
2872
2873Private Sub DryMatterIntakeComputations()
2874
2875Dim WOL As Single ' Week of Lactation = 7 * Days In Milk
2876Dim Lag As Single ' week of lactation correction -
2877 ' used in Default and Roseler equations
2878
2879Select Case CoatCond
2880 Case "Clean/Dry"
2881 CCFact = 1
2882 Case "Some Mud"
2883 CCFact = 1
2884 Case "Wet/Matted"
2885 CCFact = 0.85
2886 Case "Covered with Snow/Mud"
2887 CCFact = 0.7
2888End Select
2889
2890CCFact = 1
2891
2892
2893Select Case Temp
2894 Case Is < -15
2895 TempFact = 1.16
2896 Case Is < -5
2897 TempFact = 1.07
2898 Case Is < 5
2899 TempFact = 1.05
2900 Case Is < 15
2901 TempFact = 1.03
2902 Case Is < 25
2903 TempFact = 1
2904 Case Is < 35
2905 TempFact = 0.9
2906 Case Is > 35
2907 If (NightCooling = False) Then
2908 TempFact = 0.65
2909 Else
2910 TempFact = 0.9
2911 End If
2912End Select
2913
2914
2915If Age > 12 Then
2916 SubFact = 0.0869
2917Else
2918 SubFact = 0.1128
2919End If
2920
2921
2922
2923' These equations really belong in the Maintenance computations section,
2924' but are put here since the DivFact variable requires the NEDietConc
2925If TotalDMFed > 0 Then
2926 If AnimalType <> "Replacement Heifer" Then
2927 NEDietConc = NEl_Total / TotalDMFed
2928 Else
2929 NEDietConc = NEm_Total / TotalDMFed
2930 End If
2931Else
2932 NEDietConc = 0
2933End If
2934
2935
2936If (NEDietConc < 1) Then
2937 DivFact = 0.95
2938Else
2939 DivFact = NEDietConc
2940End If
2941
2942
2943If DaysPreg < 259 Then
2944 If DivFact > 0 Then
2945 DMI_RH = ((BW ^ 0.75) * (((0.2435 * NEDietConc) - (0.0466 _
2946 * (NEDietConc ^ 2)) - SubFact) / DivFact)) _
2947 * TempFact * CCFact
2948 Else
2949 DMI_RH = 0
2950 End If
2951Else
2952 DMI_RH = ((1.71 - (0.69 * Exp(0.35 * (DaysPreg - 280)))) / 100) * BW
2953End If
2954
2955
2956Dim DMIRH_Factor As Single
2957
2958
2959If ((DaysPreg > 210) And (DaysPreg < 259)) Then
2960 DMIRH_Factor = (1 + ((210 - DaysPreg) * 0.0025))
2961Else
2962 DMIRH_Factor = 1
2963End If
2964
2965DMI_RH = DMI_RH * DMIRH_Factor
2966
2967
2968
2969WOL = DaysInMilk / 7
2970Lag = 1 - (Exp(-1 * 0.192 * (WOL + 3.67)))
2971DMILact = (((BW ^ 0.75) * 0.0968) + (0.372 * FCM) - 0.293) * Lag
2972
2973
2974DMIDry = ((1.97 - (0.75 * Exp(0.16 * (DaysPreg - 280)))) / 100) * BW
2975
2976
2977
2978Select Case AnimalType
2979 Case "Lactating Cow"
2980 DryMatterIntake = DMILact
2981 Case "Dry Cow"
2982 DryMatterIntake = DMIDry
2983 Case "Replacement Heifer"
2984 DryMatterIntake = DMI_RH
2985 Case "Young Calf"
2986 DryMatterIntake = DMI_RH
2987End Select
2988
2989
2990If DryMatterIntake <= TotalDMFed Then
2991 Pasture = 0
2992Else
2993 If DryMatterIntake > 0 Then
2994 Pasture = (DryMatterIntake - TotalDMFed) / DryMatterIntake
2995 Else
2996 Pasture = 0
2997 End If
2998End If
2999
3000
3001End Sub
3002
3003
3004
3005Private Sub AminoAcidComputations()
3006
3007Dim DMFed As Single
3008Dim NF As Integer
3009Dim X As Integer
3010
3011
3012
3013If NumFeeds > 0 Then
3014 NF = NumFeeds
3015Else
3016 Exit Sub
3017End If
3018
3019
3020
3021Dim TArg As Single
3022Dim THis As Single
3023Dim TIle As Single
3024Dim TLeu As Single
3025Dim TLys As Single
3026Dim TMet As Single
3027Dim TPhe As Single
3028Dim TThr As Single
3029Dim TTrp As Single
3030Dim TVal As Single
3031
3032Dim Dig_TArg As Single
3033Dim Dig_THis As Single
3034Dim Dig_TIle As Single
3035Dim Dig_TLeu As Single
3036Dim Dig_TLys As Single
3037Dim Dig_TMet As Single
3038Dim Dig_TPhe As Single
3039Dim Dig_TThr As Single
3040Dim Dig_TTrp As Single
3041Dim Dig_TVal As Single
3042
3043
3044TArg = 0
3045THis = 0
3046TIle = 0
3047TLeu = 0
3048TLys = 0
3049TMet = 0
3050TPhe = 0
3051TThr = 0
3052TTrp = 0
3053TVal = 0
3054
3055Dig_TArg = 0
3056Dig_THis = 0
3057Dig_TIle = 0
3058Dig_TLeu = 0
3059Dig_TLys = 0
3060Dig_TMet = 0
3061Dig_TPhe = 0
3062Dig_TThr = 0
3063Dig_TTrp = 0
3064Dig_TVal = 0
3065
3066
3067For X = 1 To NF
3068
3069 With Feed(X)
3070
3071 DMFed = .DMFed
3072
3073 If ((DMFed > 0) And (.CP > 0) And (CP(X) > 0)) Then
3074
3075 TArg = TArg + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3076 * (.Arg / 100) * TotalDMFed) * 1000)
3077
3078 THis = THis + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3079 * (.His / 100) * TotalDMFed) * 1000)
3080
3081 TIle = TIle + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3082 * (.Ile / 100) * TotalDMFed) * 1000)
3083
3084 TLeu = TLeu + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3085 * (.Leu / 100) * TotalDMFed) * 1000)
3086
3087 TLys = TLys + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3088 * (.Lys / 100) * TotalDMFed) * 1000)
3089
3090 TMet = TMet + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3091 * (.Met / 100) * TotalDMFed) * 1000)
3092
3093 TPhe = TPhe + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3094 * (.Phe / 100) * TotalDMFed) * 1000)
3095
3096 TThr = TThr + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3097 * (.Thr / 100) * TotalDMFed) * 1000)
3098
3099 TTrp = TTrp + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3100 * (.Trp / 100) * TotalDMFed) * 1000)
3101
3102 TVal = TVal + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X)) _
3103 * (.Val / 100) * TotalDMFed) * 1000)
3104
3105
3106
3107 Dig_TArg = Dig_TArg + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3108CP(X)) _
3109 * (Feed(X).RUPDigest / 100) * (.Arg / 100) * TotalDMFed) * 1000)
3110
3111 Dig_THis = Dig_THis + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3112CP(X)) _
3113 * (Feed(X).RUPDigest / 100) * (.His / 100) * TotalDMFed) * 1000)
3114
3115 Dig_TIle = Dig_TIle + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) / CP(X))
3116_
3117 * (Feed(X).RUPDigest / 100) * (.Ile / 100) * TotalDMFed) * 1000)
3118
3119 Dig_TLeu = Dig_TLeu + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3120CP(X)) _
3121 * (Feed(X).RUPDigest / 100) * (.Leu / 100) * TotalDMFed) * 1000)
3122
3123 Dig_TLys = Dig_TLys + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3124CP(X)) _
3125 * (Feed(X).RUPDigest / 100) * (.Lys / 100) * TotalDMFed) * 1000)
3126
3127 Dig_TMet = Dig_TMet + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3128CP(X)) _
3129 * (Feed(X).RUPDigest / 100) * (.Met / 100) * TotalDMFed) * 1000)
3130
3131 Dig_TPhe = Dig_TPhe + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3132CP(X)) _
3133 * (Feed(X).RUPDigest / 100) * (.Phe / 100) * TotalDMFed) * 1000)
3134
3135 Dig_TThr = Dig_TThr + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3136CP(X)) _
3137 * (Feed(X).RUPDigest / 100) * (.Thr / 100) * TotalDMFed) * 1000)
3138
3139 Dig_TTrp = Dig_TTrp + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3140CP(X)) _
3141 * (Feed(X).RUPDigest / 100) * (.Trp / 100) * TotalDMFed) * 1000)
3142
3143 Dig_TVal = Dig_TVal + (((DMFed / TotalDMFed) * (.CP / 100) * ((RUP(X) * 1000) /
3144CP(X)) _
3145 * (Feed(X).RUPDigest / 100) * (.Val / 100) * TotalDMFed) * 1000)
3146
3147
3148 End If
3149
3150 End With
3151
3152Next X
3153
3154
3155Dim EAATotalBeforeMP As Single
3156Dim x1 As Single
3157Dim x2 As Single
3158Dim TotalArg As Single
3159Dim TotalHis As Single
3160Dim TotalIle As Single
3161Dim TotalLeu As Single
3162Dim TotalLys As Single
3163Dim TotalMet As Single
3164Dim TotalPhe As Single
3165Dim TotalThr As Single
3166Dim TotalVal As Single
3167
3168
3169EAATotalBeforeMP = (TArg + THis + TIle + TLeu _
3170 + TLys + TMet + TPhe + TThr + TTrp + TVal)
3171
3172If ((RUP_Total * 1000) + EndCP + MCP_Total) > 0 Then
3173 x2 = ((RUP_Total * 1000) / ((RUP_Total * 1000) + EndCP + MCP_Total)) * 100
3174Else
3175 x2 = 0
3176End If
3177
3178If EAATotalBeforeMP > 0 Then
3179 x1 = ((TArg / EAATotalBeforeMP) * 100)
3180Else
3181 x1 = 0
3182End If
3183
3184TotalArg = 7.31 + (0.251 * x1)
3185
3186
3187If EAATotalBeforeMP > 0 Then
3188 x1 = ((THis / EAATotalBeforeMP) * 100)
3189Else
3190 x1 = 0
3191End If
3192
3193TotalHis = 2.07 + (0.393 * x1) + (0.0122 * x2)
3194
3195
3196If EAATotalBeforeMP > 0 Then
3197 x1 = ((TIle / EAATotalBeforeMP) * 100)
3198Else
3199 x1 = 0
3200End If
3201
3202TotalIle = 7.59 + (0.391 * x1) - (0.0123 * x2)
3203
3204
3205If EAATotalBeforeMP > 0 Then
3206 x1 = ((TLeu / EAATotalBeforeMP) * 100)
3207Else
3208 x1 = 0
3209End If
3210
3211TotalLeu = 8.53 + (0.41 * x1) + (0.0746 * x2)
3212
3213
3214If EAATotalBeforeMP > 0 Then
3215 x1 = ((TLys / EAATotalBeforeMP) * 100)
3216Else
3217 x1 = 0
3218End If
3219
3220TotalLys = 13.66 + (0.3276 * x1) - (0.07497 * x2)
3221
3222
3223If EAATotalBeforeMP > 0 Then
3224 x1 = ((TMet / EAATotalBeforeMP) * 100)
3225Else
3226 x1 = 0
3227End If
3228
3229TotalMet = 2.9 + (0.391 * x1) - (0.00742 * x2)
3230
3231
3232If EAATotalBeforeMP > 0 Then
3233 x1 = ((TPhe / EAATotalBeforeMP) * 100)
3234Else
3235 x1 = 0
3236End If
3237
3238TotalPhe = 7.32 + (0.244 * x1) + (0.029 * x2)
3239
3240
3241If EAATotalBeforeMP > 0 Then
3242 x1 = ((TThr / EAATotalBeforeMP) * 100)
3243Else
3244 x1 = 0
3245End If
3246
3247TotalThr = 7.55 + (0.45 * x1) - (0.0212 * x2)
3248
3249
3250If EAATotalBeforeMP > 0 Then
3251 x1 = ((TVal / EAATotalBeforeMP) * 100)
3252Else
3253 x1 = 0
3254End If
3255
3256TotalVal = 8.68 + (0.314 * x1)
3257
3258
3259
3260TotalEAA = 30.9 + (0.863 * EAATotalBeforeMP) + (0.433 * MCP_Total)
3261
3262
3263
3264
3265Dim TotalRUPArgFlow As Single
3266Dim TotalRUPHisFlow As Single
3267Dim TotalRUPIleFlow As Single
3268Dim TotalRUPLeuFlow As Single
3269Dim TotalRUPLysFlow As Single
3270Dim TotalRUPMetFlow As Single
3271Dim TotalRUPPheFlow As Single
3272Dim TotalRUPThrFlow As Single
3273Dim TotalRUPTrpFlow As Single
3274Dim TotalRUPValFlow As Single
3275
3276
3277TotalRUPArgFlow = 0.863 * TArg
3278TotalRUPHisFlow = 0.863 * THis
3279TotalRUPIleFlow = 0.863 * TIle
3280TotalRUPLeuFlow = 0.863 * TLeu
3281TotalRUPLysFlow = 0.863 * TLys
3282TotalRUPMetFlow = 0.863 * TMet
3283TotalRUPPheFlow = 0.863 * TPhe
3284TotalRUPThrFlow = 0.863 * TThr
3285TotalRUPTrpFlow = 0.863 * TTrp
3286TotalRUPValFlow = 0.863 * TVal
3287
3288
3289
3290
3291' Duodenal Flow (g/d)
3292Arg_Flow = (TotalArg / 100) * TotalEAA
3293
3294His_Flow = (TotalHis / 100) * TotalEAA
3295
3296Ile_Flow = (TotalIle / 100) * TotalEAA
3297
3298Leu_Flow = (TotalLeu / 100) * TotalEAA
3299
3300Lys_Flow = (TotalLys / 100) * TotalEAA
3301
3302Met_Flow = (TotalMet / 100) * TotalEAA
3303
3304Phe_Flow = (TotalPhe / 100) * TotalEAA
3305
3306Thr_Flow = (TotalThr / 100) * TotalEAA
3307
3308Val_Flow = (TotalVal / 100) * TotalEAA
3309
3310
3311
3312
3313Dim TotalMCPEndArgFlow As Single
3314Dim TotalMCPEndHisFlow As Single
3315Dim TotalMCPEndIleFlow As Single
3316Dim TotalMCPEndLeuFlow As Single
3317Dim TotalMCPEndLysFlow As Single
3318Dim TotalMCPEndMetFlow As Single
3319Dim TotalMCPEndPheFlow As Single
3320Dim TotalMCPEndThrFlow As Single
3321Dim TotalMCPEndValFlow As Single
3322
3323TotalMCPEndArgFlow = Arg_Flow - TotalRUPArgFlow
3324TotalMCPEndHisFlow = His_Flow - TotalRUPHisFlow
3325TotalMCPEndIleFlow = Ile_Flow - TotalRUPIleFlow
3326TotalMCPEndLeuFlow = Leu_Flow - TotalRUPLeuFlow
3327TotalMCPEndLysFlow = Lys_Flow - TotalRUPLysFlow
3328TotalMCPEndMetFlow = Met_Flow - TotalRUPMetFlow
3329TotalMCPEndPheFlow = Phe_Flow - TotalRUPPheFlow
3330TotalMCPEndThrFlow = Thr_Flow - TotalRUPThrFlow
3331TotalMCPEndValFlow = Val_Flow - TotalRUPValFlow
3332
3333
3334
3335Dim dTotalRUPArg As Single
3336Dim dTotalRUPHis As Single
3337Dim dTotalRUPIle As Single
3338Dim dTotalRUPLeu As Single
3339Dim dTotalRUPLys As Single
3340Dim dTotalRUPMet As Single
3341Dim dTotalRUPPhe As Single
3342Dim dTotalRUPThr As Single
3343Dim dTotalRUPVal As Single
3344
3345Dim dTotalMCPEndArg As Single
3346Dim dTotalMCPEndHis As Single
3347Dim dTotalMCPEndIle As Single
3348Dim dTotalMCPEndLeu As Single
3349Dim dTotalMCPEndLys As Single
3350Dim dTotalMCPEndMet As Single
3351Dim dTotalMCPEndPhe As Single
3352Dim dTotalMCPEndThr As Single
3353Dim dTotalMCPEndVal As Single
3354
3355If TArg > 0 Then
3356 dTotalRUPArg = TotalRUPArgFlow * (Dig_TArg / TArg)
3357Else
3358 dTotalRUPArg = 0
3359End If
3360
3361If THis > 0 Then
3362 dTotalRUPHis = TotalRUPHisFlow * (Dig_THis / THis)
3363Else
3364 dTotalRUPHis = 0
3365End If
3366
3367If TIle > 0 Then
3368 dTotalRUPIle = TotalRUPIleFlow * (Dig_TIle / TIle)
3369Else
3370 dTotalRUPIle = 0
3371End If
3372
3373If TLeu > 0 Then
3374 dTotalRUPLeu = TotalRUPLeuFlow * (Dig_TLeu / TLeu)
3375Else
3376 dTotalRUPLeu = 0
3377End If
3378
3379If TLys > 0 Then
3380 dTotalRUPLys = TotalRUPLysFlow * (Dig_TLys / TLys)
3381Else
3382 dTotalRUPLys = 0
3383End If
3384
3385If TMet > 0 Then
3386 dTotalRUPMet = TotalRUPMetFlow * (Dig_TMet / TMet)
3387Else
3388 dTotalRUPMet = 0
3389End If
3390
3391If TPhe > 0 Then
3392 dTotalRUPPhe = TotalRUPPheFlow * (Dig_TPhe / TPhe)
3393Else
3394 dTotalRUPPhe = 0
3395End If
3396
3397If TThr > 0 Then
3398 dTotalRUPThr = TotalRUPThrFlow * (Dig_TThr / TThr)
3399Else
3400 dTotalRUPThr = 0
3401End If
3402
3403If TVal > 0 Then
3404 dTotalRUPVal = TotalRUPValFlow * (Dig_TVal / TVal)
3405Else
3406 dTotalRUPVal = 0
3407End If
3408
3409
3410dTotalMCPEndArg = 0.8 * TotalMCPEndArgFlow
3411dTotalMCPEndHis = 0.8 * TotalMCPEndHisFlow
3412dTotalMCPEndIle = 0.8 * TotalMCPEndIleFlow
3413dTotalMCPEndLeu = 0.8 * TotalMCPEndLeuFlow
3414dTotalMCPEndLys = 0.8 * TotalMCPEndLysFlow
3415dTotalMCPEndMet = 0.8 * TotalMCPEndMetFlow
3416dTotalMCPEndPhe = 0.8 * TotalMCPEndPheFlow
3417dTotalMCPEndThr = 0.8 * TotalMCPEndThrFlow
3418dTotalMCPEndVal = 0.8 * TotalMCPEndValFlow
3419
3420
3421Dig_Arg_Flow = dTotalRUPArg + dTotalMCPEndArg
3422Dig_His_Flow = dTotalRUPHis + dTotalMCPEndHis
3423Dig_Ile_Flow = dTotalRUPIle + dTotalMCPEndIle
3424Dig_Leu_Flow = dTotalRUPLeu + dTotalMCPEndLeu
3425Dig_Lys_Flow = dTotalRUPLys + dTotalMCPEndLys
3426Dig_Met_Flow = dTotalRUPMet + dTotalMCPEndMet
3427Dig_Phe_Flow = dTotalRUPPhe + dTotalMCPEndPhe
3428Dig_Thr_Flow = dTotalRUPThr + dTotalMCPEndThr
3429Dig_Val_Flow = dTotalRUPVal + dTotalMCPEndVal
3430
3431
3432MPBact = 0.64 * MCP_Total
3433MPFeed = TotalDigestedRUP
3434
3435
3436
3437If (MPBact + (MPFeed * 1000) + MPEndo) > 0 Then
3438 ArgPctMP = 100 * (Dig_Arg_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3439 HisPctMP = 100 * (Dig_His_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3440 IlePctMP = 100 * (Dig_Ile_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3441 LeuPctMP = 100 * (Dig_Leu_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3442 LysPctMP = 100 * (Dig_Lys_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3443 MetPctMP = 100 * (Dig_Met_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3444 PhePctMP = 100 * (Dig_Phe_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3445 ThrPctMP = 100 * (Dig_Thr_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3446 ValPctMP = 100 * (Dig_Val_Flow / (MPBact + (MPFeed * 1000) + MPEndo))
3447Else
3448 ArgPctMP = 0
3449 HisPctMP = 0
3450 IlePctMP = 0
3451 LeuPctMP = 0
3452 LysPctMP = 0
3453 MetPctMP = 0
3454 PhePctMP = 0
3455 ThrPctMP = 0
3456 ValPctMP = 0
3457End If
3458
3459
3460End Sub
3461
3462
3463
3464
3465
3466Private Sub EnergyAndProteinSupplyComputations()
3467
3468Dim DMFed As Single
3469Dim NF As Integer
3470Dim X As Integer
3471
3472Dim Kp As Single
3473Dim BW_DMI As Single
3474Dim ConcSum As Single
3475Dim PercentConc As Single
3476
3477
3478If NumFeeds > 0 Then
3479 NF = NumFeeds
3480Else
3481 Exit Sub
3482End If
3483
3484ReDim DMI(1 To NF) As Single
3485ReDim TDN(1 To NF) As Single
3486ReDim TDN_Act(1 To NF) As Single
3487ReDim CP(1 To NF) As Single
3488ReDim RUP(1 To NF) As Single
3489ReDim RDP(1 To NF) As Single
3490ReDim NDF(1 To NF) As Single
3491ReDim ADF(1 To NF) As Single
3492ReDim PsgRate(1 To NF) As Single
3493
3494
3495Call ComputeEnergyValues
3496
3497
3498If BW > 0 Then
3499 BW_DMI = (TotalDMFed / BW) * 100
3500Else
3501 BW_DMI = 0
3502End If
3503
3504
3505ConcSum = 0
3506
3507For X = 1 To NumFeeds
3508 If Feed(X).ForageDescrp = "Concentrate" Then
3509 ConcSum = ConcSum + Feed(X).DMFed
3510 End If
3511Next X
3512
3513
3514If TotalDMFed > 0 Then
3515 PercentConc = (ConcSum / TotalDMFed) * 100
3516Else
3517 PercentConc = 0
3518End If
3519
3520
3521For X = 1 To NumFeeds
3522
3523 DMFed = Feed(X).DMFed
3524 DMI(X) = DMFed
3525
3526 If Feed(X).Category <> "Vitamin/Mineral" Then
3527 TDN(X) = (Feed(X).TDN / 100) * (DMFed * 1000)
3528 TDN_Act(X) = (Feed(X).TDN_ActX / 100) * (DMFed * 1000)
3529 Else
3530 TDN(X) = 0
3531 TDN_Act(X) = 0
3532 End If
3533
3534
3535 CP(X) = (Feed(X).CP / 100) * (DMFed * 1000)
3536
3537
3538 ' Passage rate equations
3539 Select Case Feed(X).ForageDescrp
3540 Case "Concentrate"
3541 Kp = 2.904 + (1.375 * BW_DMI) - (0.02 * PercentConc)
3542 Case "Dry"
3543 Kp = 3.362 + (0.479 * BW_DMI) - (0.017 * Feed(X).NDF) - (0.007 * PercentConc)
3544 Case "Wet"
3545 Kp = 3.054 + (0.614 * BW_DMI)
3546 Case Else
3547 Kp = 0
3548 End Select
3549
3550
3551 ' Passage rate cannot be negative
3552 If Kp < 0 Then
3553 Kp = 0
3554 End If
3555
3556
3557 PsgRate(X) = Kp
3558
3559
3560 If (Feed(X).Kd + Kp) > 0 Then
3561 RDP(X) = ((Feed(X).Kd / (Feed(X).Kd + Kp)) * _
3562 ((((Feed(X).PrtB / 100) * (Feed(X).CP / 100)) * Feed(X).DMFed))) _
3563 + (((Feed(X).PrtA / 100) * (Feed(X).CP / 100)) * Feed(X).DMFed)
3564 Else
3565 RDP(X) = 0
3566 End If
3567
3568
3569 ' RDP cannot exceed the total CP
3570 If (RDP(X) * 1000) > CP(X) Then
3571 RDP(X) = CP(X) / 1000
3572 End If
3573
3574
3575 RUP(X) = (CP(X) - (RDP(X) * 1000)) / 1000
3576
3577 NDF(X) = (Feed(X).NDF / 100) * DMFed
3578 ADF(X) = (Feed(X).ADF / 100) * DMFed
3579
3580 Next X
3581
3582
3583 DMI_Total = 0
3584 TDN_Total = 0
3585 TDN_Act_Total = 0
3586 CP_Total = 0
3587 RUP_Total = 0
3588 TotalDigestedRUP = 0
3589 RDP_Total = 0
3590 NDF_Total = 0
3591 ADF_Total = 0
3592
3593
3594 For X = 1 To NumFeeds
3595
3596 DMI_Total = DMI_Total + DMI(X)
3597 TDN_Total = TDN_Total + TDN(X)
3598 TDN_Act_Total = TDN_Act_Total + TDN_Act(X)
3599 CP_Total = CP_Total + CP(X)
3600 RUP_Total = RUP_Total + RUP(X)
3601 TotalDigestedRUP = TotalDigestedRUP + (RUP(X) * (Feed(X).RUPDigest / 100))
3602 RDP_Total = RDP_Total + RDP(X)
3603 NDF_Total = NDF_Total + NDF(X)
3604 ADF_Total = ADF_Total + ADF(X)
3605
3606 Next X
3607
3608
3609 If RUP_Total > 0 Then
3610 DietRUPDigest = TotalDigestedRUP / RUP_Total
3611 Else
3612 DietRUPDigest = 0
3613 End If
3614
3615
3616 MCP_Total = 0.13 * TDN_Act_Total
3617
3618
3619
3620 ' This condition assumes that microbial crude protein production cannot
3621 ' exceed 0.85 (efficiency of protein uptake of bacteria) of the ruminal degraded protein
3622 If MCP_Total > (0.85 * (RDP_Total * 1000)) Then
3623 MCP_Total = (0.85 * (RDP_Total * 1000))
3624 End If
3625
3626 If MCP_Total < 0 Then
3627 MCP_Total = 0
3628 End If
3629
3630
3631 DietTDN = (TDN_Total / 1000) / TotalDMFed
3632
3633
3634If MEng_Total > 0 Then
3635 NEgOverMEng = NEg_Total / MEng_Total
3636 NElOverMEng = NEl_Total / MEng_Total
3637 NEmOverMEng = NEm_Total / MEng_Total
3638Else
3639 NEgOverMEng = 0
3640 NElOverMEng = 0
3641 NEmOverMEng = 0
3642End If
3643
3644
3645EndCP = 11.8 * TotalDMFed
3646MPEndo = 0.4 * EndCP
3647MPEndoReq = MPEndo / 0.67
3648
3649
3650End Sub
3651
3652
3653Private Sub TargetWeightsComputations()
3654
3655SBW = 0.96 * BW
3656
3657Age1st = FirstCalf
3658Age2nd = Age1st + CalfInt
3659Age3rd = Age2nd + CalfInt
3660Age1stBred = Age1st - (280 / 30.4)
3661
3662Wt1stBred = MW * 0.55
3663Wt1st = MW * 0.82
3664Wt2nd = MW * 0.92
3665Wt3rd = MW
3666
3667
3668If (Age1stBred - Age) > 0 Then
3669 ADG1stBred = (Wt1stBred - BW) / ((Age1stBred - Age) * 30.4)
3670End If
3671
3672If (Age1st - Age) > 0 Then
3673 ADG1st = (Wt1st - (BW - CW)) / ((Age1st - Age) * 30.4)
3674End If
3675
3676If CalfInt > 0 Then
3677 ADG2nd = (Wt2nd - Wt1st) / (CalfInt * 30.4)
3678 ADG3rd = (Wt3rd - Wt2nd) / (CalfInt * 30.4)
3679End If
3680
3681
3682If AnimalType = "Replacement Heifer" Then
3683 If Age < Age1stBred Then
3684 ADGNonBred = (Wt1stBred - BW) / ((Age1stBred - Age) * 30.4)
3685 Else
3686 ADGNonBred = 0
3687 End If
3688Else
3689 ADGNonBred = 0
3690End If
3691
3692If ADGNonBred < 0 Then
3693 ADGNonBred = 0
3694End If
3695
3696
3697If AnimalType = "Replacement Heifer" Then
3698 If (DaysPreg > 0) Then
3699 ADG = ADG1st
3700 Else
3701 ADG = ADG1stBred
3702 End If
3703Else
3704 If (Age >= Age3rd) Then
3705 ADG = 0
3706 ElseIf ((Age2nd <= Age) And (Age < Age3rd)) Then
3707 ADG = ADG3rd
3708 ElseIf ((Age1st <= Age) And (Age < Age2nd)) Then
3709 ADG = ADG2nd
3710 ElseIf ((Age1stBred <= Age) And (Age < Age1st)) Then
3711 ADG = ADG1st
3712 End If
3713End If
3714
3715If ADG < 0 Then
3716 ADG = 0
3717End If
3718
3719End Sub
3720
3721
3722
3723Private Sub LactationComputations()
3724
3725If MilkProd = 0 Then
3726 MilkEn = 0
3727 NELact = 0
3728 YProtn = 0
3729 YFatn = 0
3730 MPLact = 0
3731 FCM = 0
3732
3733 Exit Sub
3734End If
3735
3736
3737If (Lactose = 0) Then
3738 MilkEn = (0.0929 * MilkFat) + (0.0547 * (MilkTrueProtein / 0.93)) + 0.192
3739Else
3740 MilkEn = (0.0929 * MilkFat) + (0.0547 * (MilkTrueProtein / 0.93)) + (0.0395 * Lactose)
3741End If
3742
3743
3744YEn = MilkEn * MilkProd
3745
3746NELact = YEn
3747
3748YProtn = MilkProd * (MilkTrueProtein / 100)
3749
3750YFatn = MilkProd * (MilkFat / 100)
3751
3752MPLact = (YProtn / 0.67) * 1000
3753
3754FCM = (0.4 * MilkProd) + (15 * (MilkFat / 100) * MilkProd)
3755
3756End Sub
3757
3758
3759
3760
3761Private Sub PregnancyComputations()
3762
3763
3764 Const Km = 0.64 ' Changed from 0.576 (Beef NRC value) on June 5, 2000
3765 Const EffMEPreg = 0.14
3766 Const EffMPPreg = 0.33
3767
3768
3769 If DaysPreg < 190 Then
3770 CW = 0
3771 ADGPreg = 0
3772 MEPreg = 0
3773 MPPreg = 0
3774 Else
3775
3776 If DaysPreg > 279 Then
3777 DaysPreg = 279
3778 End If
3779
3780 CW = (18 + ((DaysPreg - 190) * 0.665)) * (CBW / 45)
3781 ADGPreg = 665 * (CBW / 45)
3782 MEPreg = (((2 * 0.00159 * DaysPreg) - 0.0352) * (CBW / 45)) / EffMEPreg
3783 MPPreg = (((0.69 * DaysPreg) - 69.2) * (CBW / 45)) / EffMPPreg
3784 End If
3785
3786
3787 NEPreg = MEPreg * Km
3788
3789
3790 If DaysPreg = 0 Then
3791 MEPreg = 0
3792 MPPreg = 0
3793 ADGPreg = 0
3794 CW = 0
3795 End If
3796
3797End Sub
3798
3799
3800
3801Public Sub ComputeEnergyValues()
3802
3803Dim tdNFC As Single ' truly digestible NFC
3804Dim tdCP As Single ' truly digestible CP
3805Dim tdFat As Single ' truly digestible Fat
3806Dim dNDF As Single ' digestible NDF
3807Dim DiscountVariable As Single ' used to determine discount
3808
3809
3810Dim C As Byte
3811Dim DMFed As Single
3812Dim NF As Integer
3813Dim X As Integer
3814Dim SBW As Single
3815
3816
3817
3818
3819' Reset total energy values
3820MEng_Total = 0
3821NEl_Total = 0
3822NEg_Total = 0
3823NEm_Total = 0
3824
3825
3826
3827
3828If NumFeeds > 0 Then
3829 NF = NumFeeds
3830Else
3831 Exit Sub
3832End If
3833
3834
3835
3836' Regular (i.e. non-calf) feeds can be used in a calf ration, so it
3837' is necessary to differentitate between the TotalDMFed, which accouts
3838' for all of the dry matter fed to the animal, and the Total Regular DMFed.
3839' It is necessary to do this, since the total energy values computed in this
3840' section are done so by first computing total energy concentration values,
3841' then multiplying them by the total quantity values. Thus there must be
3842' a total regular feed fed value, since multiplying TotalDMFed * concentration
3843' would (if calf feeds were present) over-estimate the computed total energy
3844TotalRegDMFed = 0
3845
3846For X = 1 To NF
3847 If InStr(Feed(X).Category, "Calf Feed") = 0 Then
3848 TotalRegDMFed = TotalRegDMFed + Feed(X).DMFed
3849 End If
3850Next X
3851
3852
3853' If there are no regular feeds, exit the procedure
3854If ((TotalRegDMFed = 0) And (AnimalType = "Young Calf")) Then
3855 Exit Sub
3856End If
3857
3858
3859
3860
3861SBW = 0.96 * BW
3862
3863
3864DietaryNFC = 0
3865
3866
3867
3868
3869
3870
3871
3872' Exit procedure if there are no feeds selected
3873If NumFeeds = 0 Then Exit Sub
3874
3875
3876For C = 1 To NumFeeds
3877 With Feed(C)
3878
3879 If InStr(.Category, "Calf Feed") = 0 Then
3880
3881 .NFCDigest = 0.98
3882
3883 tdNFC = .NFCDigest * (100 - .NDF - .CP - .Fat - .Ash + .NDFIP) * .PAF
3884 DietaryNFC = DietaryNFC + (((100 - .NDF - .CP - .Fat - .Ash + .NDFIP) / 100) * .DMFed)
3885
3886 If .CP > 0 Then
3887 If .EnergyEqClass = "Forage" Then
3888 tdCP = Exp((-1.2 * (.ADFIP / .CP))) * .CP
3889 Else
3890 If .Category = "Animal Protein" Then
3891 tdCP = (.CPDigest * .CP)
3892 Else
3893 tdCP = (1 - (0.4 * (.ADFIP / .CP))) * .CP
3894 End If
3895 End If
3896 Else
3897 tdCP = 0
3898 End If
3899
3900
3901 If .Fat < 1 Then
3902 tdFat = 0
3903 Else
3904 tdFat = (.Fat - 1) * 2.25
3905 End If
3906
3907
3908 If .NDF > .NDFIP Then
3909 dNDF = .NDFDigest * .NDF
3910 Else
3911 dNDF = 0
3912 End If
3913
3914
3915 If .Category = "Fat" Then
3916 If .EnergyEqClass = "Fatty Acid" Then
3917 .TDN = (.Fat * .FatDigest * 2.25)
3918 .DE = 0.094 * .FatDigest * .Fat
3919 Else
3920 .TDN = 10 + ((.Fat - 10) * .FatDigest * 2.25)
3921 .DE = (.FatDigest * (.Fat - 10) * 0.094) + 0.43
3922 End If
3923 Else
3924 If .Category = "Animal Protein" Then
3925 .TDN = (.CPDigest * .CP) + ((.Fat - 1) * 2.25) + ((.NFCDigest * (100 - .CP - .Ash - .Fat))
3926- 7)
3927 .DE = (tdNFC * 0.042) + (tdCP * 0.056) + (0.094 * (tdFat / 2.25)) - 0.3
3928 Else
3929 If dNDF > 0 Then
3930 .TDN = tdNFC + tdCP + tdFat + dNDF - 7
3931 .DE = (tdNFC * 0.042) + (dNDF * 0.042) + (tdCP * 0.056) + (0.094 * (tdFat / 2.25)) -
39320.3
3933 Else
3934 If .CP > 0 Then
3935 .TDN = ((0.98 * .PAF) * (100 - .CP - .Fat - .Ash)) + (.CP * (1 - (0.4 * (.ADFIP / .CP))))
3936+ ((2.25 * (.Fat - 1) - 7))
3937 .DE = (0.98 * .PAF) * (0.042 * (100 - .CP - .Fat - .Ash)) + (.CP * (0.056 * (1 - (0.4 *
3938(.ADFIP / .CP))))) + (0.094 * (.Fat - 1)) - 0.3
3939 Else
3940 .TDN = ((0.98 * .PAF) * (100 - .Fat - .Ash)) + ((2.25 * (.Fat - 1) - 7))
3941 .DE = (0.98 * .PAF) * (0.042 * (100 - .Fat - .Ash)) + (0.094 * (.Fat - 1)) - 0.3
3942 End If
3943 End If
3944 End If
3945 End If
3946
3947
3948
3949 ' Don't generate energy values for vitamin/minerals
3950 If .Category = "Vitamin/Mineral" Then
3951 .TDN = 0
3952 .DE = 0
3953 End If
3954
3955 End If
3956 End With
3957Next C
3958
3959
3960
3961
3962
3963' These variables hold the values of DE and ME before a discount
3964' is applied since the NEg equation used (from the 1996 Beef NRC)
3965' uses an un-discounted ME in its equations
3966Dim UndiscountedME As Single
3967
3968Dim TotalTDN As Single
3969Dim TDNConc As Single
3970
3971
3972TotalTDN = 0
3973
3974For X = 1 To NumFeeds
3975 With Feed(X)
3976 If InStr(.Category, "Calf Feed") = 0 Then
3977 TotalTDN = TotalTDN + ((.TDN / 100) * .DMFed)
3978 End If
3979 End With
3980Next X
3981
3982
3983If AnimalType <> "Young Calf" Then
3984 If AnimalType = "Replacement Heifer" Then
3985 DMI_to_DMIMaint = TotalTDN / (0.035 * (SBW ^ 0.75))
3986 Else
3987 ' Note that this equation uses BW instead of SBW since it
3988 ' is for a mature animal
3989 DMI_to_DMIMaint = TotalTDN / (0.035 * (BW ^ 0.75))
3990 End If
3991Else
3992 ' The DMI for maintenance for a young calf is downstream
3993 ' from the energy computations, which require that the
3994 ' DMI/DMI_Maint value be estimated first. This is a circular
3995 ' path which cannot be resolved, so instead this ratio is
3996 ' estimated using the equation for mature animals, given above.
3997 DMI_to_DMIMaint = TotalTDN / (0.035 * (CalfBW ^ 0.75))
3998End If
3999
4000If TotalRegDMFed > 0 Then
4001 TDNConc = (TotalTDN / TotalRegDMFed) * 100
4002Else
4003 TDNConc = 0
4004End If
4005
4006
4007' Compute total fat in diet
4008Fat_Total = 0
4009
4010For C = 1 To NumFeeds
4011 If InStr(Feed(C).Category, "Calf Feed") = 0 Then
4012 Fat_Total = Fat_Total + ((Feed(C).Fat / 100) * Feed(C).DMFed)
4013 End If
4014Next C
4015
4016Dim TotalFat As Single ' This is the total fat in whole number units (e.g. 5% instead of 0.05)
4017
4018If TotalRegDMFed > 0 Then
4019 TotalFat = (Fat_Total / TotalRegDMFed) * 100
4020Else
4021 TotalFat = 0
4022End If
4023
4024
4025Dim TotalDigestibleFat As Single
4026Dim DigestibleFat As Single
4027
4028TotalDigestibleFat = 0
4029
4030For C = 1 To NumFeeds
4031 With Feed(C)
4032 If .Category = "Fat" Then
4033 If .EnergyEqClass = "Fat" Then
4034 DigestibleFat = 10 + ((.Fat - 10) * .FatDigest)
4035 Else
4036 DigestibleFat = .Fat * .FatDigest
4037 End If
4038 Else
4039 DigestibleFat = .Fat - 1
4040 End If
4041
4042
4043 DigestibleFat = DigestibleFat * .DMFed
4044
4045 TotalDigestibleFat = TotalDigestibleFat + DigestibleFat
4046
4047 End With
4048Next C
4049
4050
4051If TotalDMFed > 0 Then
4052 TotalDigestibleFat = TotalDigestibleFat / TotalDMFed
4053Else
4054 TotalDigestibleFat = 0
4055End If
4056
4057
4058
4059Dim Adj_TDN As Single
4060
4061If TotalRegDMFed > 0 Then
4062 If (Fat_Total / TotalRegDMFed) > 0.03 Then
4063
4064 If TotalFat > 0 Then
4065 Adj_TDN = TDNConc - (((TotalFat) - 3) * (TotalDigestibleFat / TotalFat) * 2.25)
4066 Else
4067 Adj_TDN = 0
4068 End If
4069
4070 TDNConc = Adj_TDN / ((100 - (TotalFat - 3)) / 100)
4071 End If
4072End If
4073
4074
4075DiscountVariable = ((0.18 * TDNConc) - 10.3) * (DMI_to_DMIMaint - 1)
4076
4077If DiscountVariable < 0 Then
4078 DiscountVariable = 0
4079End If
4080
4081
4082If TDNConc < 60 Then
4083 Discount = 1
4084ElseIf ((TDNConc > 60) And ((TDNConc - DiscountVariable) < 60)) Then
4085 Discount = 60 / TDNConc
4086ElseIf TDNConc > 0 Then
4087 Discount = (TDNConc - DiscountVariable) / TDNConc
4088Else
4089 Discount = 1
4090End If
4091
4092
4093' TDN Discount cannot be negative
4094If Discount < 0 Then
4095 Discount = 1
4096End If
4097
4098
4099
4100
4101' Discount the TDN
4102For C = 1 To NumFeeds
4103
4104 With Feed(C)
4105
4106 If InStr(.Category, "Calf Feed") = 0 Then
4107 .TDN_ActX = .TDN * Discount
4108 End If
4109 End With
4110
4111Next C
4112
4113
4114
4115
4116
4117
4118' Note : This value has units of %DM
4119If TotalRegDMFed > 0 Then
4120 Fat_Total = (Fat_Total / TotalRegDMFed) * 100
4121Else
4122 Fat_Total = 0
4123End If
4124
4125
4126
4127
4128
4129For C = 1 To NumFeeds
4130 With Feed(C)
4131 .DiscDE = Discount * .DE
4132
4133 If .Fat >= 3 Then
4134 If (AnimalType <> "Replacement Heifer") Then
4135 .MEng = (1.01 * .DiscDE) - 0.45 + (0.0046 * (.Fat - 3))
4136 Else
4137 .MEng = 0.82 * .DE
4138 End If
4139
4140 .NEl = (0.703 * .MEng) - 0.19 + ((((0.097 * .MEng) + 0.19) / 97) * (.Fat - 3))
4141 Else
4142 If ((AnimalType <> "Young Calf") And (AnimalType <> "Replacement Heifer")) Then
4143 .MEng = (1.01 * .DiscDE) - 0.45
4144 Else
4145 .MEng = 0.82 * .DE
4146 End If
4147
4148 .NEl = (0.703 * .MEng) - 0.19
4149 End If
4150
4151
4152 If .Category <> "Fat" Then
4153 .MEforNEg = 0.82 * .DE
4154
4155 .NEg = ((1.42 * .MEforNEg) - (0.174 * (.MEforNEg ^ 2)) _
4156 + (0.0122 * (.MEforNEg ^ 3)) - 1.65)
4157
4158 If .NEg < 0 Then
4159 .NEg = 0
4160 End If
4161
4162
4163 .NEm = ((1.37 * .MEforNEg) - (0.138 * (.MEforNEg ^ 2)) _
4164 + (0.0105 * (.MEforNEg ^ 3)) - 1.12)
4165 Else
4166 .MEng = .DiscDE
4167 .NEl = 0.8 * .DiscDE
4168 .NEm = 0.8 * .MEng
4169 .NEg = 0.55 * .MEng
4170 End If
4171
4172
4173 ' Non-negativity constraints
4174 If .MEng < 0 Then
4175 .MEng = 0
4176 End If
4177
4178 If .NEl < 0 Then
4179 .NEl = 0
4180 End If
4181
4182 If .NEm < 0 Then
4183 .NEm = 0
4184 End If
4185
4186 If .NEg < 0 Then
4187 .NEg = 0
4188 End If
4189
4190
4191 MEng_Total = MEng_Total + (.MEng * .DMFed)
4192 NEl_Total = NEl_Total + (.NEl * .DMFed)
4193 NEg_Total = NEg_Total + (.NEg * .DMFed)
4194 NEm_Total = NEm_Total + (.NEm * .DMFed)
4195 End With
4196Next C
4197
4198
4199
4200' These variables are total concentration values (Mcal/kg)
4201Dim TotalDEConc As Single
4202Dim TotalMEConc As Single
4203Dim TotalNEmConc As Single
4204Dim TotalNElConc As Single
4205Dim TotalNEgConc As Single
4206
4207
4208If TotalRegDMFed > 0 Then
4209 TotalMEConc = MEng_Total / TotalRegDMFed
4210 TotalNElConc = NEl_Total / TotalRegDMFed
4211 TotalNEgConc = NEg_Total / TotalRegDMFed
4212 TotalNEmConc = NEm_Total / TotalRegDMFed
4213Else
4214 TotalMEConc = 0
4215 TotalNElConc = 0
4216 TotalNEgConc = 0
4217 TotalNEmConc = 0
4218End If
4219
4220
4221If AnimalType <> "Replacement Heifer" Then
4222 If TotalRegDMFed > 0 Then
4223 NEDietConc = NEl_Total / TotalRegDMFed
4224 Else
4225 NEDietConc = 0
4226 End If
4227Else
4228 If TotalRegDMFed > 0 Then
4229 NEDietConc = NEm_Total / TotalRegDMFed
4230 Else
4231 NEDietConc = 0
4232 End If
4233End If
4234
4235
4236
4237End Sub
4238
4239
4240
4241Public Function MW_From_Breed(Br As String) As Integer
4242
4243Select Case Br
4244 Case "Ayrshire"
4245 MW_From_Breed = 545
4246 Case "Brown Swiss"
4247 MW_From_Breed = 682
4248 Case "Guernsey"
4249 MW_From_Breed = 500
4250 Case "Holstein"
4251 MW_From_Breed = 682
4252 Case "Jersey"
4253 MW_From_Breed = 454
4254 Case "Milking Shorthorn"
4255 MW_From_Breed = 568
4256End Select
4257
4258End Function
4259
4260
4261
4262Public Function CBW_From_MW() As Single
4263
4264 CBW_From_MW = 0.06275 * MW
4265
4266End Function
4267

You might also like