1

我目前正在开发一个插件,我需要在其中获取 petrel 中的当前单位系统(即在现场或公制系统中)。如何得到它?

4

2 回答 2

1

获取不变单位(单位数据存储在):

var invUnit = PetrelUnitSystem.GetInvariantUnit(someTemplate);

要获取系统/项目当前正在使用的单元:

var dispUnit = PetrelUnitSystem.GetDisplayUnit(someTemplate);

在它们之间转换的转换器。

var convInvDisp = PetrelUnitSystem.GetConverter(invUnit, dispUnit);

var fahrenheit=convInvDisp.Convert(100);
于 2014-04-15T11:02:10.807 回答
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();
 }
于 2014-04-23T13:34:51.877 回答