ResForm宏程序岩性抽稀(相同岩性合并)

合集下载

ResForm宏程序岩性抽稀

ResForm宏程序岩性抽稀
lithoBottom = dataGridViewNewLitho[1,i].Value;
lithoname1 = dataGridViewNewLitho[2,i].Value;
new_LithoTrace.Add(lithotop ,lithoBottom ).Litho = lithoname1 ;
Form mainForm = (Form)buttonExecute.Parent;
GroupBox groupBox1 = (GroupBox)mainForm.Controls["groupBox1"];
ComboBox comboBoxLitho = (ComboBox)groupBox1.Controls["comboBoxLitho"];
void buttonHelp_Click(object sender, EventArgs e)
{
string strReadme = "此程序实现岩性抽稀功能,将厚度小于指定数值的岩性合并为上一个岩性";
MessageBox.Show(strReadme);
}
void comboBoxLitho_SelectedIndexChanged(object sender, EventArgs e)
{
if(flat_small == 1)
{
strRow[1] = ss.Bottom;
strRow[2] = ss.Litho;
dataGridViewNewLitho.Rows.Add(strRow);
flat_small = 0;
System.Windows.Forms.DataGridViewTextBoxColumn BottomDepth;

resform宏程序测录井分析批量统计含砂率

resform宏程序测录井分析批量统计含砂率

resform宏程序测录井分析批量统计含砂率//本程序是批量计算含砂率,可以全井段计算也可根据层段(地层、砂层或者油层组)计算;//浏览ResForm数据库并输入指定岩性进行统计void main(){CreateForm();}void CreateForm(){System.Windows.Forms.Form mainFrm;System.Windows.Forms.GroupBox groupBox1;System.Windows.Forms.Button buttonInputDataAccess;System.Windows.Forms.TextBox textBoxLithoName;System.Windows.Forms.GroupBox groupBox2; bel label1;boBox comboBoxArea;System.Windows.Forms.GroupBox groupBox3;System.Windows.Forms.Button buttonAllSel;System.Windows.Forms.CheckedListBox checkedListBoxWellName;System.Windows.Forms.GroupBox groupBox4;System.Windows.Forms.Button buttonAllCan;bel label2;boBox comboBoxDBC;bel label3;System.Windows.Forms.Button buttonOutPut;System.Windows.Forms.TextBox textBoxOutput;System.Windows.Forms.Button buttonOK;System.Windows.Forms.TextBox textBoxInPutDataAccess;System.Windows.Forms.Button buttonCancel;System.Windows.Forms.GroupBox groupBox5;System.Windows.Forms.RadioButton radioButtonDbc;System.Windows.Forms.RadioButton radioButtonAll;mainFrm = new System.Windows.Forms.Form(); groupBox1 = new System.Windows.Forms.GroupBox(); textBoxInPutDataAccess = new System.Windows.Forms.TextBox();buttonInputDataAccess = new System.Windows.Forms.Button();textBoxLithoName = new System.Windows.Forms.TextBox();groupBox2 = new System.Windows.Forms.GroupBox();label1 = new bel();comboBoxArea = new boBox(); groupBox3 = new System.Windows.Forms.GroupBox(); buttonAllCan = newSystem.Windows.Forms.Button();buttonAllSel = new System.Windows.Forms.Button();checkedListBoxWellName = new System.Windows.Forms.CheckedListBox();groupBox4 = new System.Windows.Forms.GroupBox();label2 = new bel(); comboBoxDBC = new boBox();label3 = new bel();buttonOutPut = new System.Windows.Forms.Button();textBoxOutput = new System.Windows.Forms.TextBox(); buttonOK = new System.Windows.Forms.Button();buttonCancel = new System.Windows.Forms.Button();groupBox5 = new System.Windows.Forms.GroupBox();radioButtonDbc = new System.Windows.Forms.RadioButton();radioButtonAll = new System.Windows.Forms.RadioButton();//// groupBox1//groupBox1.Controls.Add(textBoxInPutDataAccess);groupBox1.Controls.Add(buttonInputDataAccess); groupBox1.Location = new System.Drawing.Point(12, 11); = "groupBox1";groupBox1.Size = new System.Drawing.Size(192, 81);groupBox1.TabIndex = 0;groupBox1.TabStop = false;groupBox1.Text = "浏览数据库";//// textBoxInPutDataAccess//textBoxInPutDataAccess.Location = new System.Drawing.Point(11, 49); = "textBoxInPutDataAccess";textBoxInPutDataAccess.Size = new System.Drawing.Size(174, 21);textBoxInPutDataAccess.TabIndex = 1;//// buttonInputDataAccess//buttonInputDataAccess.Location = new System.Drawing.Point(12, 20); = "buttonInputDataAccess";buttonInputDataAccess.Size = new System.Drawing.Size(51, 23);buttonInputDataAccess.TabIndex = 0;buttonInputDataAccess.Text = "加载";eVisualStyleBackColor = true; //// textBoxLithoName//textBoxLithoName.Location = new System.Drawing.Point(64, 353); = "textBoxLithoName"; textBoxLithoName.Size = new System.Drawing.Size(320, 21);textBoxLithoName.TabIndex = 1;textBoxLithoName.Text = "砂岩,泥岩,灰岩,粉砂岩";//// groupBox2//groupBox2.Controls.Add(label1);groupBox2.Controls.Add(comboBoxArea);groupBox2.Location = new System.Drawing.Point(12, 99); = "groupBox2";groupBox2.Size = new System.Drawing.Size(192, 52);groupBox2.TabIndex = 1;groupBox2.TabStop = false;groupBox2.Text = "选择工区";//// label1//label1.AutoSize = true;label1.Location = new System.Drawing.Point(10, 23); = "label1";label1.Size = new System.Drawing.Size(41, 12);label1.TabIndex = 1;label1.Text = "区块";//// comboBoxArea//comboBoxArea.FormattingEnabled = true; comboBoxArea.Location = new System.Drawing.Point(65, 20); = "comboBoxArea";comboBoxArea.Size = new System.Drawing.Size(121, 20);comboBoxArea.TabIndex = 0;//// groupBox3//groupBox3.Controls.Add(buttonAllCan);groupBox3.Controls.Add(buttonAllSel);groupBox3.Controls.Add(checkedListBoxWellName); groupBox3.Location = new System.Drawing.Point(209, 11); = "groupBox3";groupBox3.Size = new System.Drawing.Size(175, 336);groupBox3.TabIndex = 2;groupBox3.TabStop = false;groupBox3.Text = "井名";//// buttonAllCan//buttonAllCan.Location = new System.Drawing.Point(105, 307); = "buttonAllCan";buttonAllCan.Size = new System.Drawing.Size(39, 23);buttonAllCan.TabIndex = 1;buttonAllCan.Text = "取消";eVisualStyleBackColor = true;//// buttonAllSel//buttonAllSel.Location = new System.Drawing.Point(25, 307); = "buttonAllSel";buttonAllSel.Size = new System.Drawing.Size(39, 23);buttonAllSel.TabIndex = 1;buttonAllSel.Text = "全选";eVisualStyleBackColor = true;//// checkedListBoxWellName//checkedListBoxWellName.CheckOnClick = true;checkedListBoxWellName.FormattingEnabled = true;checkedListBoxWellName.Location = new System.Drawing.Point(14, 19); = "checkedListBoxWellName"; checkedListBoxWellName.Size = new System.Drawing.Size(148, 276);checkedListBoxWellName.TabIndex = 0;//// groupBox4//groupBox4.Controls.Add(label2);groupBox4.Controls.Add(comboBoxDBC);groupBox4.Location = new System.Drawing.Point(11, 157); = "groupBox4";groupBox4.Size = new System.Drawing.Size(192, 52);groupBox4.TabIndex = 1;groupBox4.TabStop = false;groupBox4.Text = "选择对比槽";//// label2//label2.AutoSize = true;label2.Location = new System.Drawing.Point(10, 23); = "label2";label2.Size = new System.Drawing.Size(41, 12);label2.TabIndex = 1;label2.Text = "对比槽";//// comboBoxDBC//comboBoxDBC.FormattingEnabled = true; comboBoxDBC.Location = new System.Drawing.Point(65, 20); = "comboBoxDBC";comboBoxDBC.Size = new System.Drawing.Size(121, 20);comboBoxDBC.TabIndex = 0;comboBoxDBC.Items.AddRange(new string[]{"地层对比槽","砂层组对比槽","油层组对比槽"});comboBoxDBC.Enabled = false;//// label3//label3.AutoSize = true;label3.Location = new System.Drawing.Point(21, 356); = "label3";label3.Size = new System.Drawing.Size(35, 12);label3.TabIndex = 5;label3.Text = "岩性:";//// buttonOutPut//buttonOutPut.Location = new System.Drawing.Point(44, 381); = "buttonOutPut";buttonOutPut.Size = new System.Drawing.Size(75, 23);buttonOutPut.TabIndex = 4;buttonOutPut.Text = "输出";eVisualStyleBackColor = true; //// textBoxOutput//textBoxOutput.Location = new System.Drawing.Point(145, 381); = "textBoxOutput";textBoxOutput.Size = new System.Drawing.Size(239, 21); textBoxOutput.TabIndex = 1;textBoxOutput.Text = "C:\\ResForm";//// buttonOK//buttonOK.Location = new System.Drawing.Point(44, 421); = "buttonOK";buttonOK.Size = new System.Drawing.Size(75, 23);buttonOK.TabIndex = 4;buttonOK.Text = "统计";eVisualStyleBackColor = true;//// buttonCancel//buttonCancel.DialogResult =System.Windows.Forms.DialogResult.Cancel;buttonCancel.Location = new System.Drawing.Point(259, 421); = "buttonCancel";buttonCancel.Size = new System.Drawing.Size(75, 23);buttonCancel.TabIndex = 4;buttonCancel.Text = "退出";eVisualStyleBackColor = true;//// groupBox5//groupBox5.Controls.Add(radioButtonDbc);groupBox5.Controls.Add(radioButtonAll); groupBox5.Location = new System.Drawing.Point(11, 215); = "groupBox5";groupBox5.Size = new System.Drawing.Size(192, 91);groupBox5.TabIndex = 1;groupBox5.TabStop = false;groupBox5.Text = "统计方式";//// radioButtonDbc//radioButtonDbc.AutoSize = true;// radioButtonDbc.Checked = true;radioButtonDbc.Location = new System.Drawing.Point(33, 60); = "radioButtonDbc";radioButtonDbc.Size = new System.Drawing.Size(83, 16);radioButtonDbc.TabIndex = 2;radioButtonDbc.TabStop = true;radioButtonDbc.Text = "对比槽统计";eVisualStyleBackColor = true;//// radioButtonAll//radioButtonAll.AutoSize = true;radioButtonAll.Location = new System.Drawing.Point(33, 29); = "radioButtonAll"; radioButtonAll.Size = new System.Drawing.Size(83, 16);radioButtonAll.TabIndex = 2;radioButtonAll.TabStop = true;radioButtonAll.Text = "全井段统计";eVisualStyleBackColor = true;radioButtonAll.Checked = true;//// Form1//mainFrm.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);mainFrm.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;mainFrm.ClientSize = new System.Drawing.Size(396, 456);mainFrm.Controls.Add(textBoxOutput);mainFrm.Controls.Add(textBoxLithoName);mainFrm.Controls.Add(label3);mainFrm.Controls.Add(buttonCancel);mainFrm.Controls.Add(buttonOK);mainFrm.Controls.Add(buttonOutPut);mainFrm.Controls.Add(groupBox3);mainFrm.Controls.Add(groupBox5);mainFrm.Controls.Add(groupBox4);mainFrm.Controls.Add(groupBox2);mainFrm.Controls.Add(groupBox1);mainFrm.FormBorderStyle =System.Windows.Forms.FormBorderStyle.FixedSingle; = "Form1";mainFrm.StartPosition =System.Windows.Forms.FormStartPosition.CenterScreen;mainFrm.Text = "RF批量统计含砂率";//------------------------------------------------------------------------------------buttonInputDataAccess.Click += newEventHandler(this.buttonInputDataAccess_Click);comboBoxArea.SelectedIndexChanged += newEventHandler(boBoxArea_SelectedIndexChanged);buttonAllSel.Click += new EventHandler(this.buttonAllSel_Click);buttonAllCan.Click += new EventHandler(this.buttonAllCan_Click); buttonOutPut.Click += new EventHandler(this.buttonOutPut_Click);buttonOK.Click += new EventHandler(this.buttonOK_Click);radioButtonAll.CheckedChanged += newEventHandler(this.radioButtonAll_CheckedChanged);radioButtonDbc.CheckedChanged +=new EventHandler(this.radioButtonDbc_CheckedChanged); //------------------------------------------------------------------------------------mainFrm.ShowDialog();}void DBCLithoOutput(Form mainFrm ){GroupBox groupBox1 = (GroupBox)mainFrm.Controls["groupBox1"];TextBox textBoxInPutDataAccess =(TextBox)groupBox1.Controls["textBoxInPutDataAccess"];GroupBox groupBox2 = (GroupBox)mainFrm.Controls["groupBox2"]; ComboBox comboBoxArea= (ComboBox)groupBox2.Controls["comboBoxArea"];GroupBox groupBox3 = (GroupBox)mainFrm.Controls["groupBox3"];CheckedListBox checkedListBoxWellName= (CheckedListBox)groupBox3.Controls["checkedListBoxWellName"];TextBox textBoxLithoName= (TextBox)mainFrm.Controls["textBoxLithoName"];TextBox textBoxOutput = (TextBox)mainFrm.Controls["textBoxOutput"];GroupBox groupBox4 = (GroupBox)mainFrm.Controls["groupBox4"];ComboBox comboBoxDBC =(ComboBox)groupBox4.Controls["comboBoxDBC"];string strWellName1 ;string strFilePath = textBoxOutput.Text;DirectoryInfo temp = new DirectoryInfo(strFilePath);string FileExcelName ;string strMessage;string StrFile_Path_txt;System.Data.OleDb.OleDbConnection ole_con; string strLayerType = (string)comboBoxDBC.SelectedItem;string strLithoName = textBoxLithoName.Text;if(!temp.Exists)//判断文件目录是否存在{temp.Create();}int well_index = 0;string strFieldUnitName1 = comboBoxArea.SelectedItem.ToString();//查询Access数据库string strCon = "provider=microsoft.jet.oledb.4.0;";strCon += @"data source = ";strCon += textBoxInPutDataAccess.Text;= new System.Data.OleDb.OleDbConnection(strCon); ole_conole_con.Open();for(int i = 0 ; i < checkedListBoxWellName.CheckedIndices.Count ;i++) {well_index = checkedListBoxWellName.CheckedIndices[i];strWellName1 = checkedListBoxWellName.Items[well_index].ToString();StrFile_Path_txt = strFilePath +"\\"+ strWellName1;//获取某口井所有数据类型System.Data.OleDb.OleDbCommand ole_command1 = newSystem.Data.OleDb.OleDbCommand();string strSQL_Name = "SELECT TRACENAME from LOGTRACE_DATA_TABLE WHERE FIELDUNITNAME= '";strSQL_Name += strFieldUnitName1 ;strSQL_Name += "' AND WELLNAME = '";strSQL_Name += strWellName1 ;strSQL_Name += "'";ArrayList well_TraceName = new ArrayList();well_TraceName.Clear();ole_mandText = strSQL_Name ;ole_command1.Connection = ole_con ;ole_mandType = CommandType.Text;System.Data.OleDb.OleDbDataReader reader1 = ole_command1.ExecuteReader();while (reader1.Read()){well_TraceName.Add(reader1["TRACENAME"].ToString());}reader1.Close();if(well_TraceName.Count == 0)//如果数据库中某口井的数据为空跳出直接执行下一口井{continue;}///------------------------------------------------string strSQL = "SELECTFIELDUNITNAME,TRACENAME,TOPDEPTH,BOTTOMDEPTH,TRACEDATA,TRACETYPEfrom LOGTRACE_DATA_TABLE WHERE FIELDUNITNAME= '";string strTraceName1 ;strSQL += strFieldUnitName1 ;strSQL += "' AND WELLNAME = '";strSQL += strWellName1 ;strSQL += "'AND TRACENAME = '";int select_index ;System.Data.OleDb.OleDbCommand ole_command = newSystem.Data.OleDb.OleDbCommand();string[] strTraceNames = new string[well_TraceName.Count];int flat = 0;ArrayList list_layerTrace = new ArrayList();//保存对比槽list_layerTrace.Clear();ArrayList list_Litho = new ArrayList();//保存岩性道(岩性道有多个时) list_Litho.Clear();for(int i = 0 ; i < well_TraceName.Count; i++ ) {strSQL = "SELECTFIELDUNITNAME,TRACENAME,TOPDEPTH,BOTTOMDEPTH,TRACEDATA,TRACETYPEfrom LOGTRACE_DATA_TABLE WHERE FIELDUNITNAME= '";strSQL += strFieldUnitName1 ;strSQL += "' AND WELLNAME = '";strSQL += strWellName1 ;strSQL += "'AND TRACENAME = '";strTraceName1 = well_TraceName[i].ToString();strSQL += strTraceName1 ;strSQL += "'";ole_mandText = strSQL ;ole_command.Connection = ole_con ;ole_mandType = CommandType.Text;System.Data.OleDb.OleDbDataReader reader =ole_command.ExecuteReader();string strCurveName;byte[] data1;float top;float bottom;string strTraceType;string strfiledUnitName;while (reader.Read()){try{strfiledUnitName =reader["FIELDUNITNAME"].ToString();strCurveName =reader["TRACENAME"].ToString();op = (float)reader["TOPDEPTH"]; tbottom = (float)reader["BOTTOMDEPTH"];object obj;data1 = (obj = reader["TRACEDATA"]) is DBNull ? null : (byte[])obj;strTraceType = reader["TRACETYPE"].ToString();flat = 0;}catch{reader.Close();strSQL = "SELECTFIELDUNITNAME,TRACENAME,TOPDEPTH,BOTTOMDEPTH,TRACEDATA,TRACETYPEfrom LOGTRACE_DATA_TABLE WHERE FIELDUNITNAME= '";strSQL += strFieldUnitName1 ;strSQL += "' AND WELLNAME = '"; strSQL += strWellName1 ; strSQL+= "'AND TRACENAME = '";}}WellName well_name;LogTraceStream log_stream;if(data1.Length > 0){well_name =new WellName(strfiledUnitName ,strWellName1 );log_stream = newLogTraceStream(well_name,strCurveName,strTraceType ,top,bottom,data1 ); }if(strTraceType == "StratiUnitTrace" && top != bottom && strLayerType == "地层对比槽"){StratiUnitTrace log_trace = log_stream.Restore();; list_layerTrace.Add(log_trace )}if(strTraceType == "SandSetTrace" && top != bottom && strLayerType == "砂层组对比槽")//砂层{SandSetTrace sandset_trace = log_stream.Restore();list_layerTrace.Add(sandset_trace ); }if(strTraceType == "ReservoirGroupTrace" && top != bottom && strLayerType == "油层组对比槽")//油层组{ReservoirGroupTrace reservoirgroup_trace = log_stream.Restore();list_layerTrace.Add(reservoirgroup_trace );}if(strTraceType == "LithoTrace" && top != bottom)//岩性{LithoTrace litho_trace = log_stream.Restore();list_Litho.Add(litho_trace );}if(i == (well_TraceName.Count - 1) && list_layerTrace.Count > 0 && list_Litho.Count > 0 ){if(strLayerType == "地层对比槽" ){DBC_Litho_Output1(list_layerTrace,list_Litho,StrFile_Path_txt ,strLi thoName );}elseif(strLayerType == "砂层组对比槽"){ SandSetTrace log_trace;LithoTrace log_litho;ArrayList lithoList = new ArrayList(); string strLitho;float ThicknessL = 0;float totalThickness = 0;string strValue;string strLayerName;LithoLayer lithoL;float Thickness_ = 0;float lithoPercent;string strOilGas;ArrayList list = new ArrayList();list.Clear();strLithoName = strLithoName.Replace(",",",");strLithoName = strLithoName.Replace(" ",",");strLithoName = strLithoName.TrimStart(",");strLithoName = strLithoName.TrimEnd(",");int startD = 0;int lengthD = 0;while(strLithoName.IndexOf(",") > 0){lengthD = strLithoName.IndexOf(",",0);strLitho =strLithoName.Substring(0,lengthD );list.Add(strLitho );strLithoName =strLithoName.Substring(lengthD );strLithoName =strLithoName.TrimStart(",");}list.Add(strLithoName );list = LithoPaiXu(list);string strFileOutputPath = StrFile_Path_txt;StreamWriter sw;for(int i = 0 ; i < list_layerTrace.Count ; i++){ log_trace = (SandSetTrace)list_layerTrace[i];if(log_trace.Count == 0){ continue;}StrFile_Path_txt += "_"+log_ ;for(int j = 0 ; j < list_Litho.Count; j++){lithoList.Clear();log_litho = (LithoTrace)list_Litho[j];if(log_litho.Count == 0){continue;}StrFile_Path_txt +="_"+log_+".txt";sw = newStreamWriter(StrFile_Path_txt ,false,System.Text.Encoding.Default); sw.WriteLine("层段\t岩性\t厚度\t厚度百分比");foreach(LithoLayer layer in log_litho ){lithoList.Add(layer);}foreach(SandSet layer1 in log_trace ){if(.Length == 0 && layer1.Text.Length != 0){strLayerName = layer1.Text;}elseif(.Length == 0 && layer1.Text.Length == 0){strLayerName = "未定";}else{strLayerName = ;}for(int i = 0,j = 0; i < list.Count ; i++){strOilGas = list[i].ToString();for(; j < lithoList.Count ; j++){lithoL = (LithoLayer)lithoList[j];strLitho = lithoL.Litho.ToString();if(layer1.Top <= lithoL.Top && layer1.Bottom >= lithoL.Bottom){ if(strLitho.IndexOf(strOilGas ,0) >= 0){ThicknessL += lithoL.Thickness;lithoList.RemoveAt(j);j--;}}else if(layer1.Top > lithoL.Top && layer1.Top < lithoL.Bottom){ if(strLitho.IndexOf(strOilGas ,0) >= 0){ThicknessL += (lithoL.Bottom - layer1.Top);lithoList.RemoveAt(j);j--;}}else if(layer1.Bottom > lithoL.Top && layer1.Bottom <lithoL.Bottom){if(strLitho.IndexOf(strOilGas ,0) >= 0){ThicknessL += (layer1.Bottom - lithoL.Top);lithoList.RemoveAt(j);j--;}}else{continue;}}Thickness_ += ThicknessL ;lithoPercent = ThicknessL /layer1.Thickness;lithoPercent = lithoPercent * 100;strValue = string.Format("{0:f2}",ThicknessL);if(lithoPercent.ToString("#.##").Length == 0){ strOilGas += "(m)\t"+ strValue +"\t"+"0%";}else{strOilGas += "(m)\t"+ strValue +"\t"+lithoPercent.ToString("#.##")+"%";}strOilGas = strLayerName +"\t"+ strOilGas ;sw.WriteLine(strOilGas );ThicknessL = 0;j = 0;}totalThickness = layer1.Thickness - Thickness_ ;if(totalThickness == 0){sw.WriteLine(strLayerName +"\t其它岩性(m)\t" + "0\t"+"0%");}else{sw.WriteLine(strLayerName +"\t其它岩性(m)\t" +totalThickness.ToString("#.##") +"\t"+ ((totalThickness/layer1.Thickness) *100).ToString("#.##")+"%");}strValue =string.Format("{0:f2}",layer1.Thickness);strOilGas = "总厚度(m)\t"+ strValue;sw.WriteLine(strOilGas ); totalThickness = 0;Thickness_ = 0;}sw.Flush();sw.Close();StrFile_Path_txt = StrFile_Path_txt += "_"+log_;}StrFile_Path_txt = strFileOutputPath;}}if(strLayerType == "油层组对比槽"){DBC_Litho_Output3(list_layerTrace,list_Litho,StrFile_Path_txt ,strLi thoName );}}reader.Close();strSQL ="SELECTFIELDUNITNAME,TRACENAME,TOPDEPTH,BOTTOMDEPTH,TRACEDATA,TRACETYPE from LOGTRACE_DATA_TABLE WHERE FIELDUNITNAME= '";strSQL += strFieldUnitName1 ;strSQL += "' AND WELLNAME = '";strSQL += strWellName1 ;strSQL += "'AND TRACENAME = '";}}MessageBox.Show("数据输出完成!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);ole_con.Close();}void DBC_Litho_Output3(ArrayList list_layerTrace,ArrayListlist_Litho,stringStrFile_Path_txt,string strLithoName){ReservoirGroupTrace log_trace;LithoTrace log_litho;ArrayList lithoList = new ArrayList();string strLitho;float ThicknessL = 0;float totalThickness = 0;string strValue;string strLayerName;LithoLayer lithoL;float Thickness_ = 0;float lithoPercent;string strOilGas;ArrayList list = new ArrayList();list.Clear();strLithoName = strLithoName.Replace(",",",");strLithoName = strLithoName.Replace(" ",","); strLithoName = strLithoName.TrimStart(","); strLithoName = strLithoName.TrimEnd(",");int startD = 0;int lengthD = 0;while(strLithoName.IndexOf(",") > 0){lengthD = strLithoName.IndexOf(",",0); strLitho =strLithoName.Substring(0,lengthD );list.Add(strLitho );strLithoName = strLithoName.Substring(lengthD );strLithoName = strLithoName.TrimStart(",");}list.Add(strLithoName );list = LithoPaiXu(list);string strFileOutputPath = StrFile_Path_txt; StreamWriter sw;for(int i = 0 ; i < list_layerTrace.Count ; i++){log_trace = (ReservoirGroupTrace)list_layerTrace[i];if(log_trace.Count == 0){continue;}StrFile_Path_txt += "_"+log_ ;for(int j = 0 ; j < list_Litho.Count; j++){ lithoList.Clear();log_litho = (LithoTrace)list_Litho[j];if(log_litho.Count == 0){continue;}StrFile_Path_txt += "_"+log_+".txt";sw = newStreamWriter(StrFile_Path_txt ,false,System.Text.Encoding.Default);sw.WriteLine("层段\t岩性\t厚度\t厚度百分比"); foreach(LithoLayer layer in log_litho ){lithoList.Add(layer);}foreach(ReservoirGroup layer1 in log_trace ){if(.Length == 0 && layer1.Text.Length != 0){strLayerName = layer1.Text;}else if(.Length == 0 && layer1.Text.Length == 0) {strLayerName = "未定";}else{strLayerName = ;}for(int i = 0,j = 0; i < list.Count ; i++) {strOilGas = list[i].ToString();for(; j < lithoList.Count ; j++){lithoL = (LithoLayer)lithoList[j];strLitho = lithoL.Litho.ToString();if(layer1.Top <= lithoL.Top && layer1.Bottom >= lithoL.Bottom){if(strLitho.IndexOf(strOilGas ,0) >= 0){ThicknessL += lithoL.Thickness;lithoList.RemoveAt(j); j--;}}else if(layer1.Top > lithoL.Top && layer1.Top < lithoL.Bottom){ if(strLitho.IndexOf(strOilGas ,0) >= 0){ThicknessL += (lithoL.Bottom - layer1.Top);lithoList.RemoveAt(j);j--;}}else if(layer1.Bottom > lithoL.Top && layer1.Bottom <lithoL.Bottom){if(strLitho.IndexOf(strOilGas ,0) >= 0){ThicknessL += (layer1.Bottom - lithoL.Top);lithoList.RemoveAt(j);j--;}}else{continue;}}Thickness_ += ThicknessL ; lithoPercent = ThicknessL/layer1.Thickness;lithoPercent = lithoPercent * 100;strValue = string.Format("{0:f2}",ThicknessL);if(lithoPercent.ToString("#.##").Length == 0){ strOilGas += "(m)\t"+ strValue +"\t"+"0%";}else{strOilGas += "(m)\t"+ strValue +"\t"+lithoPercent.ToString("#.##")+"%";}strOilGas = strLayerName +"\t"+ strOilGas ;sw.WriteLine(strOilGas );ThicknessL = 0;j = 0;}totalThickness = layer1.Thickness - Thickness_ ;if(totalThickness == 0){sw.WriteLine(strLayerName +"\t其它岩性(m)\t" + "0\t"+"0%");}else{sw.WriteLine(strLayerName +"\t其它岩性(m)\t" +totalThickness.ToString("#.##") +"\t"+ ((totalThickness/layer1.Thickness)*100).ToString("#.##")+"%");}strValue = string.Format("{0:f2}",layer1.Thickness);strOilGas = "总厚度(m)\t"+ strValue;sw.WriteLine(strOilGas );totalThickness = 0;Thickness_ = 0;}sw.Flush();sw.Close();StrFile_Path_txt = StrFile_Path_txt += "_"+log_;}StrFile_Path_txt = strFileOutputPath;}}void DBC_Litho_Output1(ArrayList list_layerTrace,ArrayList list_Litho,stringStrFile_Path_txt,string strLithoName){StratiUnitTrace log_trace;LithoTrace log_litho;ArrayList lithoList = new ArrayList(); string strLitho;float ThicknessL = 0;float totalThickness = 0;string strValue;string strLayerName;LithoLayer lithoL;float Thickness_ = 0;float lithoPercent;string strOilGas;ArrayList list = new ArrayList();list.Clear();strLithoName = strLithoName.Replace(",",","); strLithoName = strLithoName.Replace(" ",",");strLithoName = strLithoName.TrimStart(",");strLithoName = strLithoName.TrimEnd(","); int startD = 0;int lengthD = 0;while(strLithoName.IndexOf(",") > 0){lengthD = strLithoName.IndexOf(",",0);strLitho = strLithoName.Substring(0,lengthD );list.Add(strLitho );strLithoName = strLithoName.Substring(lengthD ); strLithoName = strLithoName.TrimStart(",");}list.Add(strLithoName );list = LithoPaiXu(list);string strFileOutputPath = StrFile_Path_txt;StreamWriter sw;for(int i = 0 ; i < list_layerTrace.Count ; i++){log_trace = (StratiUnitTrace )list_layerTrace[i];if(log_trace.Count == 0){continue;}StrFile_Path_txt += "_"+log_ ;for(int j = 0 ; j < list_Litho.Count; j++){lithoList.Clear();log_litho = (LithoTrace)list_Litho[j];if(log_litho.Count == 0){continue;}StrFile_Path_txt += "_"+log_+".txt";sw = newStreamWriter(StrFile_Path_txt ,false,System.Text.Encoding.Default); sw.WriteLine("层段\t岩性\t厚度\t厚度百分比");foreach(LithoLayer layer in log_litho ){lithoList.Add(layer);}foreach(StratiUnit layer1 in log_trace ){if(.Length == 0 && layer1.Text.Length != 0){strLayerName = layer1.Text;}else if(.Length == 0 && layer1.Text.Length == 0){strLayerName = "未定";。

ResForm GeoOffice v3.0补充操作手册

ResForm GeoOffice v3.0补充操作手册

基于ResForm构架的《地质研究工作室v3.0版》功能补充说明西安海卓石油信息技术有限公司2012年8月目录1用户资源配置 (1)1.1工区配置 (1)1.2文档资源配置 (3)1.2.1打开文档配置管理器 (3)1.2.2文档内部数据配置 (3)2地层对比图 (4)2.1设置井柱断开显示 (4)3剖面图 (5)3.1同步海拔和深度比例尺 (5)3.2绘制剖面基准线 (6)3.3绘制剖面井号 (7)4自选图形 (8)4.1三维直方图 (8)4.2三维饼图 (11)4.3三维井身轨迹 (13)5石油地质 (16)5.1工型标记 (16)5.2图表符号 (17)5.3剖面水平线 (18)1用户资源配置用户资源配置是通用的绘图资源配置,包括各种画笔、画刷、图表、图例、录井、岩性等通用符号,各种属性定义等基本内容。

系统在初始化时已提供了默认的符号和常数配置,用户实际运用时也可自定义配置保存使用,灵活方便。

接下来我们分别就工区和单文档两种模式来具体介绍配置管理。

1.1工区配置工区配置指建立工区后,在工区中设置各类文档的公用属性。

当前工区内的公共配置,它对工区内部所有文件都有效。

工区配置包括绘图工具、绘图符号、分层定义和属性定义等四大类属性设置,见图1-1。

我们以“录井符号”为例,详细介绍工区配置的一般步骤:1.展开主窗口右侧任务窗格中的“配置”下的“绘图符号”项,双击“录井符号”将其编辑窗口打开,见图1-2;2.在该窗口中,我们便可以编辑或者添加各种录井符号。

工区配置图1-1图1-2ResForm GeoOffice v3.0在配置中灵活定义地层、产层段、油层组、砂层组、储量单元层名称字体、文字尺寸、颜色、上下标等的功能,见图1-3。

图1-31.2文档资源配置文档配置是支撑单文档方式工作的一个重要的组成部分。

单文档模式下的配置内容主要包括以下三个方面:1.符号和常数:可调用基础的绘图资源配置;2.用户资源管理:管理图片等用户数据;3.井数据服务:与数据源进行连接,支持图件与数据源中各种数据的交互。

ResForm宏程序岩性对应曲线数据输出-精确查找

ResForm宏程序岩性对应曲线数据输出-精确查找
}
}
sw.WriteLine(strData);
}
}
}
sw.Flush();
sw.Close();
MessageBox.Show("数据输出完成!!");
}
}
void OnOK(DlgBuilder dlg)
{
string strLitho = dlg.GetItemValue(0);//输入岩性名称
SCurveTrace[] allCurve = this.Channels.GetCurveTraces();
SLithoTrace litho1 = (SLithoTrace)dlg.GetItemValue(1);//选择岩性道
str = str.Substring(str.IndexOf("色",0)+1);
if(str.IndexOf(strLitho ,0) == 0){
strData = strLitho +":\t"+layer.Top.ToString("#.###") +","+layer.Bottom.ToString("#.###");
string strFilePath = (string)dlg.GetItemValue(2);
string str;
string strCurveName = "深度";
SCurveTrace curve1;
string strData;
StreamWriter sw = new StreamWriter(strFilePath,false,System.Text.Encoding.Default);

resform的使用

resform的使用
ResForm的使用方法
报告人:张强
2014年4月
主要内容
1、数据管理 2、单井图编辑 3、地层对比图编辑 4、油层栅状图编辑 5、平面图编辑 6、综合图表的绘制 7、高级应用-宏编辑 8、常犯的错误与建议
一、数据管理
1.1 连接油田现有数据源 提供了通用性的数据存储和访问控制接口,通过数据服务的建立,可
1.3配置井位数据 (1)新建油田区块。 (2)使用复制粘贴的方法加载井位数据。 (3)使用导入文件的方法加载井位数据。 (4)使用添加的方法加载井位数据。 (5)显示井位图。
1.4 井数据的导入 (1)批量导入多井数据 (2)复制粘贴导入单井数据 (3)使用文件导入单井数据 (4)导入分层数据,岩性分层数据 (5)浏览数据及其曲线变化 (6)提交编辑结果
六、综合图表的绘制
(1)文件-新建文档-综合图表。 (2)自选图形-嵌入文档-添加平面图, 剖面图,单井柱状图。 (3)调整图片大小,对齐方式,添加 图框,标题
七、高级应用-宏编辑
1.标准宏与裸体宏
标准宏是完整的宏代码,它拥有main 主函数, 在不同的单井图文档中都可使用已有的标准宏代码 处理数据。裸体宏仅对某个单井图中的某个图道进 行处理,比较简单、灵活。
6.AddTrace:为Channels 类所具有的一个方法,意为“添加图道”。
7.对象定义之后就可以使用了,por.Title = "计算孔隙度"意为将por 对象(por曲线道)定义道头显示内 容设置为“计算孔隙度”。
8.SetLoopRange:为单文档类下的一个方法,表示设置循环的起止深度范围,小括号内传递两个参数, 分别是顶深和底深。
二、单井图编辑
1.点击文件-新建文档-单井分析图 2.新建单个图道和新建多个图道 3.调整起始深度,图长,了解三种预览模式 4.修改线型,颜色,调整曲线为合适的范围, 合并多道曲线 5.学会保存和应用模板 6.使用现有测井图快速成图 7.了解从图道数据提交到数据源和从数据源 加载数据更新图道功能

ResForm宏程序曲线--多条件选择生成岩性剖面(岩性间无间隔)

ResForm宏程序曲线--多条件选择生成岩性剖面(岩性间无间隔)
void buttonOK_Click(object sender, EventArgs e)
{
Button buttonOK = (Button)sender;
Form mainForm = (Form)buttonOK.Parent;
GroupBox groupBox3 = (GroupBox)mainForm.Controls["groupBox3"];
theDGV.Rows.Clear();
string[] Litho_Name = new string[5];
Litho_Name[0] = textBox5LessLitho1.Text;
Litho_Name[1] = textBox5LessLitho2.Text;
Litho_Name[2] = textBox5LessLitho3.Text;
DataGridView dataGridViewShowCurveValue = (DataGridView)groupBox4.Controls["dataGridViewShowCurveValue"];
GroupBox groupBox6 = (GroupBox)mainForm.Controls["groupBox6"];
}
}
void CreateLithoData5(Form mainForm)
{
CheckBox checkBoxCurveTopBottomDepth = (CheckBox)mainForm.Controls["checkBoxCurveTopBottomDepth"];
GroupBox groupBox4 = (GroupBox)mainForm.Controls["groupBox4"];

ResForm宏程序根据岩性输出最值

ResForm宏程序根据岩性输出最值
checkBox1.Text = "默认深度";
eVisualStyleBackColor = true;
//
// groupBox2
//
groupBox2.Controls.Add(comboBoxLitho);
groupBox2.Controls.Add(comboBoxSand);
System.Windows.Forms.TextBox textBoxStartTop;
bel label1;
System.Windows.Forms.CheckBox checkBox1;
System.Windows.Forms.GroupBox groupBox2;
//
label3.AutoSize = true;
label3.Location = new System.Drawing.Point(6, 19);
= "label3";
label3.Size = new System.Drawing.Size(53, 12);
buttonFileOutput = new System.Windows.Forms.Button();
groupBox4 = new System.Windows.Forms.GroupBox();
checkedListBoxCurve = new System.Windows.Forms.CheckedListBox();
groupBox2.Controls.Add(label5);
groupBox2.Controls.Add(comboBoxLayer);
groupBox2.Controls.Add(label4);

利用VBA简化录井资料处理过程的两个实例

利用VBA简化录井资料处理过程的两个实例

Visual Basic for Application (简称V BA)是内置于O f f ic e系列产品中的一套开发平台,与O f f ic e产品高度集成。

V BA 是非常流行的应用程序开发语言V i s u a l Basic (VB)的子集,具有V B语言的大多数特征和易用性,可以利用简单的语法和规则,通过简易快速的编程手法来实现软件的高级功能,将一些重复的输入和操作过程进行简化,以提高工作效率。

而且V BA可以直接应用Office 套装软件的各项功能,如Excel具有打印、文件处理和文本编辑功能;具有大量可供选择的内置函数;且可连接到多种格式的数据库,等等。

1 岩屑描述代码转换如图所示,在目前新生代软件录入的资料数据库中,岩屑描述记录中岩性和颜色是用代码来表示的,对不熟悉代码的人来说不易利用(如图1)。

把这样的内容转换成汉字表述是经常要进行的操作。

因此,利用宏对平时经常要进行的操作进行合理的录制,并与代码的含义结合,编制了一个包含可以对颜色、岩性、含油级别栏从代码到汉字的转换的宏。

在打开包含这个宏的一个空工作表后,选中岩屑描述记录要转换的列,运行宏(图2),即可自动转换为(图3)所示的汉字表示。

下面我们来分析一下这个宏的代码(图4):Sub颜色代码转换()‘宏1 Macro‘Lenovo Us er 记录的宏 2008-5-14'S e l e c t i o n .R e p l a c e W h a t :=”0”, R e p l a c e m e n t :=”白色”, L o o k A t :=x l W h o l e , S e a r c h O r d e r :=x l B y C o l u m n s , M a t c h C a s e :=F a l s e , MatchBy te:=False _……S e l e c t i o n.R e p l a c e W h a t:=”-9.8”,R e p l a c e m e n t :=”浅棕黑色”,L o o k A t :=x l W h o l e , S e a r c h O r d e r :=x l B y C o l u m n s ,利用VBA简化录井资料处理过程的两个实例冯蓓华 巩文林(中油测井青海事业部地质评价中心 甘肃敦煌 736202)摘 要:当前在录井资料处理过程中,使用最多的软件仍然是微软Office组件中的Excel、Word和Access,其中经常要进行的大量机械和重复性的信息、数据处理工作,为了提高工作效率,我们可以利用Office自带的Visual Basic for Application (简称VBA)来实现操作自动化,为录井技术人员节约时间和精力,为更出色的完成地质录井工作提供保障。

《Resform数据标准格式-2009-12-7》

《Resform数据标准格式-2009-12-7》

《Resform数据标准格式-xx-12-7》第一篇:resform数据标准格式-xx-12-7resformgeooffice数据类型及数据格式所有数据在导入数据库的时候,软件可以自动识别文本格式和excel格式的文件。

包括以下各类数据:一、井位数据1.数据格式:井名(原名)(井别)纵坐标横坐标补心海拔完钻井深2.备注:括号中的项可填可不填;采用横坐标8位、纵坐标7位。

二、测井曲线数据(对应“测井曲线道”)1.数据格式:深度曲线名1曲线名2······2.备注:测井曲线数据除了文本格式和excel格式,还能够识别多种716格式、wis格式、las格式、forword格式等;多种716、wis、las、forword等格式的测井曲线数据支持批量加载。

三、离散数据(对应“离散曲线道”,包括录井数据,分析化验数据如:孔隙度分析值、渗透率分析值等)1.数据格式:深度数据名称1数据名称2······四、文本层段数据(对应“文本道”)1.数据格式:井名(层名)顶深底深文本2.备注:井名可不同,可多口井批量加载。

五、岩性数据(对应“岩性道”)1.数据格式:支持两种格式,分别是:a.顶深底深岩性(颜色、含油性、岩石名称)b.顶深底深岩性(颜色)(含油性)(层号)(井号)2.备注:括号中的项可填可不填;也可将“岩性”项中的内容写成颜色-含油性-岩性的样子,如蓝灰色含砾砂岩。

六、分层数据(对应“解释结论道”)1.数据格式:井名层名顶深底深类型2.备注:井名可不同,可多口井批量加载。

七、地层数据(对应“地层单位道”)1.数据格式:井名层名顶深底深2.备注:井名可不同,可多口井批量加载。

八、砂层数据(对应“砂层组道”)1.数据格式:井名层名顶深底深2.备注:井名可不同,可多口井批量加载。

九、油层组数据(对应“油层组道”)1.数据格式:井名层名顶深底深2.备注:井名可不同,可多口井批量加载。

ResForm 高级应用-宏编辑

ResForm 高级应用-宏编辑

ResForm 高级应用——宏编辑ResForm脚本语言是专门为基于ResForm构架下的地质研究、油藏工程、油藏描述等系列软件产品配置的编程语言。

利用该脚本语言,可以轻松实现现有功能的特定扩展,提高工作的质量和效率。

本文以一些常用的例子为主线介绍如何使用ResForm脚本语言。

旨在通过短小精炼的内容编排以及浅显的实例,抛砖引玉,将复杂难懂的计算机语言变成用一门可以快速掌握的工具。

用一个下午,或者临睡前时间,甚至在飞机上、上下班途中,您就有可能一口气把它读完。

是不是有点兴趣了呢?下面就让我们一起来开始吧!1三个术语在这里,我们先简单介绍一下这样3个术语:1.ResForm脚本语言:一种计算机语言;2.宏:用于实现特定功能的代码段;3.宏脚本语言编辑器:编写或编辑宏的工具(或工作界面)。

2宏脚本语言编辑针对不同工作需求,软件提供了标准宏、裸体宏两种宏语言编辑、应用模式。

标准宏是完整的宏代码,它拥有main主函数,在不同的单井图文档中都可使用已有的标准宏代码处理数据。

裸体宏仅对某个单井图中的某个图道进行处理,比较简单、灵活。

2.1标准宏编辑器打开单井图后,在不选择任何图道的情况下,单击主窗口工具条上的【编辑并执行宏】按钮,即可打开标准宏编辑器,见图1:1.单击按钮新建一个宏;2.单击打开一个已有的宏;3.单击保存当前编辑的宏;4.单击执行宏。

2.2裸体宏编辑器图1 选中单井图上一个图道后,点击工具条中的工具按钮,或者单击右键,选择【编辑/执行宏】命令即可将其打开,见图2;:图2在图2所示的对话框中,上方可以设置循环范围以及是否为“自动循环”,中间代码编辑区域直接输入代码即可,不需要写main 主函数。

3第一个宏首先,我们需要打开宏脚本语言编辑器:打开任意一张单井图,单击【编辑并执行宏】功能按钮,在代码编辑区域内键入代码(图3):void main() {}宏脚本编辑器非常聪明,在输入过程中,它将自动提示您要输入的内容。

resform使用说明书

resform使用说明书
那么,我们还是从建立单井柱状图开始,全面了解ResForm《地质研究工作室》吧。
在《地质研究工作室》中建立单井分析图,有三种方法,都非常简单:
第一种方法,转换卡奔单井软件的老文档,到ResForm《地质研究工作室》中形成新的单井分析图;
第二种方法,使用ResForm《地质研究工作室》直接做单井分析图;
图3333增加图道resform地质研究工作室与卡奔单井软件相比新增加了海拔道地层单位道砂层组道油层组道和产层段道等5个新图道另外卡奔多井对比软件中试油数据道射孔数据道在新地质研究工作室中也设置成了统一的图道类型这样在新地质研究工作室中共有深度道海拔道地层单位道砂层组道油层组道产层段道测井曲线道离散曲线道文本道岩性道解释分层道符号道取芯数据道试油数据道射孔数据道图片道和岩样道等17个图道类型
(3)地层对比图:在单井图基础上生成的对比成果图都存放在这个目录下。由地层对比图可以生成油藏剖面图、油层栅状图和平面等值线图。
(Байду номын сангаас)剖面图:由单井直接生成,或者由地层对比图生成的剖面图的存放处。
(5)平面图:存放平面图,平面图可以由地层对比图直接生成,也可以重新加载井位坐标等数据,编制各种平面图。
(6)油层栅状图:由地层对比图生成,可以在3维显示。
第三种方法,导入已有的ResForm单井图。
下面就给您介绍一下如何生成单井柱状图。
第二章 转换卡奔单井
卡奔单井软件用了很多年了,每个用户手里都有大量成果图,都非常宝贵,不用就太可惜了。别担心,ResForm《地质研究工作室》兼容原卡奔软件形成的老文档,原文件转换到ResForm《地质研究工作室》后,图形格式、显示属性以及原图数据,均能保持一致,基本上不需要任何修改,就可以继续使用。

ResForm脚本语言基础及应用初步要点

ResForm脚本语言基础及应用初步要点

R e s F o r m技术资料汇编R e s F o r m脚本语言基础及其应用(一)西安海卓石油信息技术有限公司前言R e s F o r m脚本语言是由西安海卓石油信息技术有限公司研制开发,专门为该公司所发布的基于R e s F o r m构架的地质工作室软件产品(以下简称G e o O f f i c e)配置的编程语言。

利用R e s F o r m脚本语言,可以通过编程方式实现对《G e o O f f i c e》软件产品常规功能的高度自动化操作,包括各种格式的地质成果图模板的自动生成、各种地质参数的获取和分析、《G e o O f f i c e》软件产品与其他流行办公软件的交互操作等等。

R e s F o r m脚本语言面向该公司《G e o O f f i c e》软件产品的中高级用户,为他们提供了一个通过编程方式实现对《G e o O f f i c e》软件产品功能扩展的有效手段。

《G e o O f f i c e》软件产品具有灵活实用、功能丰富、易于掌握的特点,更为重要的是该软件产品充分考虑了地质人员的工作习惯。

实际上,该软件产品的作者本身就是石油地质方面的专家,所以研制开发出的产品符合地质人员的工作习惯是非常自然的。

因为有了上述的特点,《G e o O f f i c e》软件产品一经推出,就在全国各大油田的相关行业中产生了较大的影响。

目前,该软件的用户群正在不断扩大,并由此带来了相关领域油田工作效率的明显提升。

与此同时在这个用户群中还涌现出不少这样的用户,他们对计算机的了解比较深入,大都有过用某种计算机语言编程的经验,同时这些用户对于《G e o O f f i c e》软件产品功能的掌握比一般用户更为全面和深入,因此在他们希望能够更多更好地掌握R e s F o r m脚本语言,以解决地质研究工作中更多更繁杂的问题。

鉴于这种情况,公司决定除了在《G e o O f f i c e》软件产品的说明书中向用户提供有关R e s F o r m脚本语言基础知识外,再面向《G e o O f f i c e》软件产品的中高级用户提供一套更为详尽的R e s F o r m脚本语言应用方面的教材。

测井岩相软件使用说明手册

测井岩相软件使用说明手册

岩石物理相分析软件使用说明书二零零九年七月一、软件介绍及运行环境测井相解释软件系统是在微机上利用VC和FORTRAN语言环境编写的软件系统。

该系统软件运行环境:1)硬件环境:PII或以上处理器的微机,64M或更大的内存空间,800×600或更高分辨率的彩色显示器。

2)软件环境:Windows 9X、2000、XP等微软的操作系统,具备Visual C++编程环境。

二、软件的功能2.1数据转换1)实现LA(80)、Forward(文本)和自定义文本三种文件格式之间的互相转换:首先打开文件,通过数据文件的不同后缀确定读入的是哪类测井数据格式:(LA(80)格式——*.la、Forward(文本)格式——*.txt、自定义文本格式——*.dat);然后保存为目标格式的数据文件即可,文件类型同样根据文件名后缀确定。

LA(80)为80条标准测井LA格式;Forward(文本)为Forward软件标准文本格式;自定义文本数据格式如下:(geng18.dat,/* */内的是注释)geng18 /*井名*/3 /*曲线条数*/2040.0000,2325.0000 /*起止深度*/0.1250 /*采样间隔*/END /*间隔字符*/#DEPTH GR CAL AC2040.000 83.46900 27.41300 250.867002040.125 88.47100 27.60300 247.289002040.250 95.17619 27.60300 239.789792040.375 101.45760 27.53900 238.608602040.500 107.49319 27.43500 241.652392040.625 112.64719 27.36700 249.787802040.750 116.48000 27.31000 260.840612040.875 118.53200 27.35800 270.811222041.000 118.70020 27.47900 276.277402041.125 117.40440 27.51400 275.683012041.250 115.06059 27.49000 269.69260……………2)将地质相等数据插入井数据中:首先点击文件—>打开,打开原始井数据文件,可选择将岩性类型插为单条和多条两种情况,点击插入新曲线—>单条曲线,选择岩心曲线或解释岩性曲线,可分别将岩心分析岩性资料输入为一条曲线;点击插入新曲线—>多条曲线可将岩心分析岩性资料输入为多条曲线,每一类岩性输入为一条曲线,这样可便于成果图输出,最后点击文件—>保存即可。

ECLIPSE讲义-有限元试井中心

ECLIPSE讲义-有限元试井中心

ECLIPSE培训讲义地质开发Petro ECLIPSE建模数据一、前期知识准备1.1 油藏数值模拟软件简介油藏数值模拟软件通常分为主模型,数模前处理和数模后处理。

主模型是数模的模拟器,即计算部分。

这部分是最重要的部分也是最难掌握的部分。

它可以细分为黑油模拟器,组分模拟气,热采模拟器,流线法模拟器等。

数模前处理是一些为主模拟器做数据准备的模块。

比如准备油田的构造模型,属性模型,流体的PVT 参数,岩石的相渗曲线和毛管压力参数,油田的生产数据等。

数模后处理是显示模拟计算结果以及进行结果分析。

以ECLIPSE 软件为例,ECLIPSE100,ECLIPSE300 和FrontSim 是主模拟器。

ECLISPE100是对黑油模型进行计算,ECLISPE300 是对组分模型和热采模拟进行计算,FrontSim 是流线法模拟器。

前处理模块有Flogrid, PVTi, SCAL, Schedule, VFPi 等。

Flogrid 用于为数值模拟建立模拟模型,包括油田构造模型和属性模型;PVTi 用于为模拟准备流体的PVT 参数,对于黑油模型,主要是流体的属性随地层压力的变化关系表,对于组分模型是状态方程;SCAL 为模型准备岩石的相渗曲线和毛管压力输入参数;Schedule 处理油田的生产数据,输出ECLIPSE 需要的数据格式(关键字);VFPi 是生成井的垂直管流曲线表,用于模拟井筒管流。

ECLIPSE OFFICE 和FLOVIZ 是后处理模块,进行计算曲线和三维场数据显示和分析,ECLIPSE OFFICE 同时也是ECLIPSE 的集成平台。

1.2 做油藏数值模拟需要准备的参数1.2.1 模拟工作的基本信息:设定是进行黑油模拟(BlackOil),还是热采(Thermal)或组分模拟(Compositional);模拟采用的单位制(米制或英制);模拟模型大小Generay(你的模型在X,Y,Z 三方向的网格数);模拟模型网格类型Reservior(角点网格,矩形网格,径向网格或非结构性网格);模拟油藏的流体信息PVT(是油,气,水三相还是油水或气水两相,还可以是油或气或水单相,有没有溶解气和挥发油等);模拟油田投入开发的时间;模拟有没有应用到一些特殊功能(局部网格加密,三次采油,端点标定,多段井等);模拟计算的解法(全隐式,隐压显饱或自适应)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档