初级的测井模型可以分级为世界-World,地层空间-Formation_physical,在地层空间中打的井筒-Borehole-physical(井筒内部可能没有任何支撑结构(裸眼井筒),也可能有套管和水泥环(套管井筒)),可以加套管也可以不加套管,主要用于稳定井壁、隔离不同地层的流体、防止井壁坍塌以及保护生产管柱等。然后就是仪器tool,仪器又分层为仪器壁tool_solid,仪器空间tool_space,空间中有源(粒子枪)和探测器detector。每个模型的建立大概分为三个部分:
(1)三维几何结构
具体的三维几何结构可以调用相应的类,G4提供了许多结构,例如#include "G4Tubs.hh" #include "G4Box.hh",管状和长方体状。例如创建世界的语句:
G4Box* world_solid = new G4Box("world_solid", 2000 * mm, 2000 * mm, 2000 * mm);
需要注意的是,在创建箱体尺寸的时候,需要带上单位,同时传入的参数为实际参数的1/2,涉及到圆时,参数传入半径即可。
(2)物体的填充材料
首先是材料,在设置填充物前,需要先查表,调用g4提供的或者自己定义的材料。如果使用G4提供的,那么可以如下表示:
G4NistManager* nist_manager = G4NistManager::Instance();
//通过查G4开发手册,知道空气的名称为G4_AIR
G4Material* air = nist_manager->FindOrBuildMaterial("G4_AIR");
材料确定之后,则通过 G4LogicalVolume类创建类对象,进行连接,例如:
G4LogicalVolume* world_logical = new G4LogicalVolume(world_solid, air, "World",
0, 0, 0 );
第一个参数是物体名称,第二个参数是材料名称,第三个参数则为本次创建指针对象名称(需要双引号引用)。后面三个000不填写也不影响。
(3)物体的位置
位置的设置则通过,G4PhysicalVolume创建类指针对象进行赋值,例如:
G4VPhysicalVolume* Borehole_physical = new G4PVPlacement(
0
, G4ThreeVector(0, 0, 0)
, Borehole_logical
, "Borehole_physical"
, formation_logical
, false
, 0
, true
);
一共八个参数,第一个参数为旋转矩阵,第二个参数为相对于母物体的偏移位置,第三个为本次物体的材料对象名称,第四个是本次创建的指针类对象名称(引号),第五个是母级物体的材料对象名称,第六个参数为是否创建副本,第七个是副本编号,第八个是检查重叠。
通过这三个步骤则可以完整的创建一个几何体。