admin管理员组文章数量:1394148
I am working on a Modelica model where I want to dynamically assign materials and insulation based on parameters set in a .mos script. I define materials as parameters using a function that depends on a String input:
parameter String insulationType annotation (Evaluate=false);
parameter String materialType annotation (Evaluate=false);
function selectMaterial
input String materialType;
output IDEAS.Buildings.Data.Interfaces.Material selectedMaterial;
algorithm
if materialType == "Brick"
then selectedMaterial := IDEAS.Buildings.Data.Interfaces.Material( d=0.08, k=0.89, c=800, rho=1920, epsLw=0.88, epsSw=0.55);
else selectedMaterial := IDEAS.Buildings.Data.Interfaces.Material( d=0.15, k=1.4, c=900, rho=2240, epsLw=0.88, epsSw=0.55);
end if;
end selectMaterial;
parameter IDEAS.Buildings.Data.Interfaces.Material selectedMaterial = selectMaterial(materialType);
Problem: When I try to use selectedMaterial and selectedInsulation in a wall construction like this:
conTypA(mats={selectedMaterial, selectedInsulation, IDEAS.Buildings.Data.Materials.BrickHollow(d=0.14), IDEAS.Buildings.Data.Materials.Gypsum(d=0.015)})
I get the following error:
Current version of the Modelica translator can only handle conditional components with fixed condition. But component zone.outA.layMul.monLay[1].monLayDyn had non-fixed condition if isDynamic.
However, when I use hardcoded materials, I don’t get an error. It seems Modelica struggles with selectedMaterial as a parameter.
My questions:
How can I correctly pass selectedMaterial and selectedInsulation without this error? Do I need to force fixed=true, and if so, how? Is there an alternative approach to implementing this in Modelica?
I am working on a Modelica model where I want to dynamically assign materials and insulation based on parameters set in a .mos script. I define materials as parameters using a function that depends on a String input:
parameter String insulationType annotation (Evaluate=false);
parameter String materialType annotation (Evaluate=false);
function selectMaterial
input String materialType;
output IDEAS.Buildings.Data.Interfaces.Material selectedMaterial;
algorithm
if materialType == "Brick"
then selectedMaterial := IDEAS.Buildings.Data.Interfaces.Material( d=0.08, k=0.89, c=800, rho=1920, epsLw=0.88, epsSw=0.55);
else selectedMaterial := IDEAS.Buildings.Data.Interfaces.Material( d=0.15, k=1.4, c=900, rho=2240, epsLw=0.88, epsSw=0.55);
end if;
end selectMaterial;
parameter IDEAS.Buildings.Data.Interfaces.Material selectedMaterial = selectMaterial(materialType);
Problem: When I try to use selectedMaterial and selectedInsulation in a wall construction like this:
conTypA(mats={selectedMaterial, selectedInsulation, IDEAS.Buildings.Data.Materials.BrickHollow(d=0.14), IDEAS.Buildings.Data.Materials.Gypsum(d=0.015)})
I get the following error:
Current version of the Modelica translator can only handle conditional components with fixed condition. But component zone.outA.layMul.monLay[1].monLayDyn had non-fixed condition if isDynamic.
However, when I use hardcoded materials, I don’t get an error. It seems Modelica struggles with selectedMaterial as a parameter.
My questions:
How can I correctly pass selectedMaterial and selectedInsulation without this error? Do I need to force fixed=true, and if so, how? Is there an alternative approach to implementing this in Modelica?
Share Improve this question edited Mar 14 at 6:34 DarkBee 15.5k8 gold badges72 silver badges118 bronze badges asked Mar 14 at 6:15 StanStan 133 bronze badges 7 | Show 2 more comments1 Answer
Reset to default 0As indicated in mail the current solution is:
constant IDEAS.Buildings.Data.Interfaces.Material selectedMaterial =
IDEAS.Buildings.Data.Interfaces.Material(
d=if materialType == "Brick" then 0.08 else 0.15,
k=if materialType == "Brick" then 0.89 else 1.4,
c=if materialType == "Brick" then 800 else 900,
rho=if materialType == "Brick" then 1920 else 2240,
epsLw=if materialType == "Brick" then 0.88 else 0.88,
epsSw=if materialType == "Brick" then 0.55 else 0.55);
本文标签:
版权声明:本文标题:simulation - How to correctly pass externally defined material and insulation without "non-fixed condition" er 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744671777a2618869.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
annotation (Evaluate=false)
in the definition of the parameter? – Markus A. Commented Mar 18 at 7:44annotation(Evaluate=false)
to see if that fixes the error. Should be a pretty quick test. – Markus A. Commented Mar 24 at 8:41