我目前正在开发一个插件,我需要在petrel中获取当前的单元系统(即在现场或公制系统中)。如何获得它?
答案 0 :(得分:1)
获取不变单位(单位数据存储在其中):
var invUnit = PetrelUnitSystem.GetInvariantUnit(someTemplate);
获取系统/项目当前正在使用的单位:
var dispUnit = PetrelUnitSystem.GetDisplayUnit(someTemplate);
转换它们之间的转换器。
var convInvDisp = PetrelUnitSystem.GetConverter(invUnit, dispUnit);
var fahrenheit=convInvDisp.Convert(100);
答案 1 :(得分:1)
您是指模拟案例的单位制(可以是字段还是公制)?
我担心“模拟单位”不会通过Ocean API公开。
然而,您可以通过检查ECLIPSE卡片中是否存在FIELD或METRIC关键字来测试每个(导出的)模拟案例是否为FIELD或METRIC。
以下代码段将贯穿案例并输出,无论它们是FIELD还是METRIC。
using (ITransaction trans = DataManager.NewTransaction())
{
SimulationRoot SimRoot = SimulationRoot.Get(PetrelProject.PrimaryProject);
foreach (Case Case in SimRoot.Cases)
{
EclipseKeywordEditor editor = SimulationSystem.CreateEclipseKeywordEditor(Case);
trans.Lock(editor);
foreach (EclipseKeyword keyword in editor.Sections.RunSpec.GetAll("FIELD"))
{
// found FIELD keyword
PetrelLogger.InfoOutputWindow(String.Format("### Case {0} is FIELD", Case.Name));
}
foreach (EclipseKeyword keyword in editor.Sections.RunSpec.GetAll("METRIC"))
{
// found METRIC keyword
PetrelLogger.InfoOutputWindow(String.Format("### Case {0} is METRIC", Case.Name));
}
}
trans.Commit();
}