OK, I’ve just re-researched my own research! I’ve also attached a very realistic (though “fake”) forecast (as an Excel file as it wouldn’t let me upload a .csv). In this, I made all soil layers clay loam, with neutral on the rock/organic admixture scale, and 30% initial soil moisture (29 cb tension). I let it be sunny for two days, then 27 mm of rain over the course of about a day, then sunny again. The changes in moisture, both as % and as tension, look quite realistic, corresponding to the sun and the rain.
My previous research (about 4 years ago?) had suggested that about the highest tension one would ever talk about is 1500, and over 1000 all plants wilt. I knew that 300 or 400 was quite high and dry. I now look at see that many tensiometers won’t even read over 100, and they are often not reliable over 200, and by then you’ve often got dying plants/crops anyway. It seems I’ve seen 400 reported in Davis WeatherLink files, but I’m not sure about that.
The relationship is extremely complex! It’s far from linear. I struggled to come up with an equation to relate soil moisture and tension, and was actually quite successful, with values mostly with 5% (I forget which direction that’s in … % to cb or cb to %) of the available data, which looks a lot like the link a couple of posts above. I’ll go ahead and “publicize” my algorithm here (below), but I don’t see that there’s any use for that in the scripts, because WXSIM is not outputting the 16 soil types and percent rock or organic admixture, which are needed for the variable “scod”.
A major issue could be import of the soil moisture data, as bad values could be in there from the start. The soil type choice is also important, and I am NOT an except at identifying soil types!. Well, here’s my code for the function and its inverse, for going back and forth between % and cb. By the way, maximum percetage soil moisture also varies with soil type. Often it’s about 50%. There’s no such thing as 100% by volume soil moisture, because that would be water!
Function socod(snum, sadm)
scod = 105
If snum = 2 Then scod = 79
If snum = 3 Then scod = 153
If snum = 4 Then scod = 98
If snum = 5 Then scod = 90
If snum = 6 Then scod = 153
If snum = 7 Then scod = 136
If snum = 8 Then scod = 106
If snum = 9 Then scod = 135
If snum = 10 Then scod = 236
If snum = 11 Then scod = 223
If snum = 12 Then scod = 195
If snum = 13 Then scod = 159
If snum = 14 Then scod = 127
If snum = 15 Then scod = 57
If sadm > 0 Then scod = scod - sadm * 0.35
If sadm < 0 Then scod = scod - sadm * 0.7
socod = scod
End Function
Function temo(scod, tens)
If tens < 0 Then tens = 0
pctmo = 4157 / scod ^ 0.4 / (tens ^ 0.57 + 14.2) - (scod - 120) ^ 2 / 1350 + 2.5
If pctmo < 0 Then pctmo = 0
If pctmo > 80 Then pctmo = 80
temo = pctmo
End Function
Function mote(scod, pctmo)
pmote = (4157 / scod ^ 0.4 / (pctmo + (scod - 120) ^ 2 / 1350 - 2.5) - 14.2)
If pmote > 0 Then
tens = pmote ^ (1 / 0.57)
Else
tens = 0
If pctmo < temo(scod, 0) Then tens = 9999
End If
If tens > 9999 Then tens = 9999
mote = tens
End Function