获取Petrel中的当前单位系统

时间:2014-04-15 10:24:04

标签: ocean petrel

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

2 个答案:

答案 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();
 }