File size: 1,815 Bytes
64ab846 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | import numpy as np
from ..entities.soilProfile import SoilProfile
from typing import TYPE_CHECKING
if TYPE_CHECKING:
# Important: classes are only imported when types are checked, not in production.
from aquacrop.entities.paramStruct import ParamStruct
def create_soil_profile(param_struct: "ParamStruct") -> "ParamStruct":
"""
funciton to create soil profile namedTuple to store soil info.
Its much faster to access the info when its in a namedTuple
compared to a dataframe
Arguments:
param_struct (ParamStruct): Contains model crop and soil paramaters
Returns:
param_struct (ParamStruct): updated with soil profile
"""
profile = SoilProfile(int(param_struct.Soil.profile.shape[0]))
pdf = param_struct.Soil.profile.astype("float64")
profile.dz = pdf.dz.values
profile.dzsum = pdf.dzsum.values
profile.zBot = pdf.zBot.values
profile.z_top = pdf.z_top.values
profile.zMid = pdf.zMid.values
profile.Comp = np.int64(pdf.Comp.values)
profile.Layer = np.int64(pdf.Layer.values)
# profile.Layer_dz = pdf.Layer_dz.values
profile.th_wp = pdf.th_wp.values
profile.th_fc = pdf.th_fc.values
profile.th_s = pdf.th_s.values
profile.Ksat = pdf.Ksat.values
profile.Penetrability = pdf.penetrability.values
profile.th_dry = pdf.th_dry.values
profile.tau = pdf.tau.values
profile.th_fc_Adj = pdf.th_fc_Adj.values
if param_struct.water_table == 1:
profile.aCR = pdf.aCR.values
profile.bCR = pdf.bCR.values
else:
profile.aCR = pdf.dz.values * 0.0
profile.bCR = pdf.dz.values * 0.0
# param_struct.Soil.profile = profile
param_struct.Soil.Profile = profile
return param_struct
|