123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package com.hb.proj.analysis.service;
- import com.hb.proj.model.WellAnalysisParamPO;
- import com.hb.proj.model.WellMeasurePO;
- import com.hb.proj.model.WellPumpPO;
- public class ProduceParamCalculator {
-
- public static void calcPumpExtra(WellPumpPO pump) {
- /**
- * 泵理论排量=截面积*柱塞冲程*spm*24*60*泵系数*0.000001
- * 理论排量按每分钟1冲次,泵系数为1计算。
- * 新泵时为1,长期使用小于1,用于修正泵理论排量
- * spm 冲次频率(每分钟) 目前固定为1
- */
- if(isNotNull(pump.getBasicDiam(),pump.getStroke(),pump.getPumpCoeff())){
- pump.setSpm(1);
- double tempYield=pump.getPi()*Math.pow(pump.getBasicDiam()/2,2)*pump.getStroke()*pump.getPumpCoeff()*pump.getSpm()*24*60*0.000001;
- pump.setTheoryVolume(tempYield);
- }
- }
- public static WellAnalysisParamPO calc(WellMeasurePO measure,WellPumpPO pump,Double rtFreq) {
-
- WellAnalysisParamPO analyParam=new WellAnalysisParamPO();
- analyParam.setRefMeasureId(measure.getMeasureId());
- analyParam.setRefPumpId(pump.getPumpId());
-
- //含水率原值为百分数,计算时要*0.01
- Double waterRatio=measure.getWaterRatio()!=null?(measure.getWaterRatio().doubleValue()*0.01):null;
-
- /**
- * 计量油量=计量液量*(1-含水率)
- * 计量水量=计量液量*含水率
- */
- if(isNotNull(measure.getMeteredLiquidYield(),waterRatio)) {
- analyParam.setMeteredOilYield(measure.getMeteredLiquidYield()*(1-waterRatio));
- analyParam.setMeteredWaterYield(measure.getMeteredLiquidYield()*waterRatio);
- }
-
-
- /**
- * 测量油量=测量液量*(1-含水率)
- * 测量水量=测量液量*(1-含水率)
- */
- if(isNotNull(measure.getMeasureLiquidYield(),waterRatio)) {
- analyParam.setMeasureOilYield(measure.getMeasureLiquidYield()*(1-waterRatio));
- analyParam.setMeasureWaterYield(measure.getMeasureLiquidYield()*waterRatio);
- }
-
-
-
- /**
- * 泵理论排量=截面积*柱塞冲程*spm*24*60*泵系数*0.000001
- * 理论排量按每分钟1冲次,泵系数为1计算。
- * 新泵时为1,长期使用小于1,用于修正泵理论排量
- * spm 冲次频率(每分钟) 目前固定为1
- */
- if(isNotNull(pump.getBasicDiam(),pump.getStroke(),pump.getPumpCoeff())){
- pump.setSpm(1);
- double tempYield=pump.getPi()*Math.pow(pump.getBasicDiam()/2,2)*pump.getStroke()*pump.getPumpCoeff()*pump.getSpm()*24*60*0.000001;
- pump.setTheoryVolume(tempYield);
- }
-
-
-
- /**
- * 理论液量=泵理论排量*冲次
- */
- if(pump.getTheoryVolume()!=null) {
- analyParam.setTheoryLiquidYield(pump.getTheoryVolume()*rtFreq);
- }
-
-
- /**
- * 测量泵效=测量液量/理论液量
- * 校准泵效=计量液量/理论液量
- * 综合泵效=弹性伸缩*泵充满度*漏失系数*地表体积系数
- */
- if(isNotNull(measure.getMeasureLiquidYield(),measure.getMeteredLiquidYield(),analyParam.getTheoryLiquidYield())) {
- analyParam.setMeasuredPumpEff(measure.getMeasureLiquidYield()/analyParam.getTheoryLiquidYield());
- analyParam.setCorrectPumpEff(measure.getMeteredLiquidYield()/analyParam.getTheoryLiquidYield());
- }
- if(isNotNull(measure.getElasticCoeff(),pump.getFillDegree(),pump.getLeakCoeff(),measure.getSurfaceCompCoe())) {
- analyParam.setComPumpEff(measure.getElasticCoeff()*pump.getFillDegree()*pump.getLeakCoeff()*measure.getSurfaceCompCoe());
- }
-
-
-
- /**
- * 实际液量=校准泵效*理论液量 用于绘制IPR曲线
- * 实际油量=实际液量*(1-含水率),用于绘制IPR曲线
- * 实际水量=实际液量´含水率,用于绘制IPR曲线
- */
- if(isNotNull(analyParam.getCorrectPumpEff(),analyParam.getTheoryLiquidYield(),analyParam.getRealLiquidYield(),waterRatio)) {
- analyParam.setRealLiquidYield(analyParam.getCorrectPumpEff()*analyParam.getTheoryLiquidYield());
- analyParam.setRealOilYield(analyParam.getRealLiquidYield()*(1-waterRatio));
- analyParam.setRealWaterYield(analyParam.getRealLiquidYield()*waterRatio);
- }
-
-
-
- /**
- * 深度压差(m)=折算动液面深度-折算静液面深度
- * 流动压差(Mpa)=油藏压力-井底生产压力=深度压差*混液密度*g/1000
- */
- if(isNotNull(analyParam.getDiffPressDepth(),measure.getMixLiquidDensity(),measure.getGravity())) {
- analyParam.setDiffPressBtmflow(analyParam.getDiffPressDepth()*measure.getMixLiquidDensity()*measure.getGravity()/1000);
- }
-
-
- /**
- * 油指数_J=功图液量/流动压差
- * 油指数_K=功图液量/深度压差
- * 计量指数_J=计量液量/流动压差
- * 计量指数_K=计量液量/深度压差
- */
- if(isNotNull(analyParam.getDiagramLiquidYield(),analyParam.getDiffPressBtmflow(),analyParam.getDiffPressDepth())) {
- analyParam.setProductIndexJ(analyParam.getDiagramLiquidYield()/analyParam.getDiffPressBtmflow());
- analyParam.setProductIndexK(analyParam.getDiagramLiquidYield()/analyParam.getDiffPressDepth());
- }
-
- if(isNotNull(measure.getMeteredLiquidYield(),analyParam.getDiffPressBtmflow(),analyParam.getDiffPressDepth())) {
- analyParam.setMeteredProductIndexJ(measure.getMeteredLiquidYield()/analyParam.getDiffPressBtmflow());
- analyParam.setMeteredProductIndexK(measure.getMeteredLiquidYield()/analyParam.getDiffPressDepth());
- }
-
-
-
- return analyParam;
- }
-
- private static boolean isNotNull(Double... vals) {
- boolean rst=true;
- for(Double val : vals) {
- rst=val!=null && rst;
- }
- return rst;
- }
- }
|