Overlap with volume: fully incapsulated

Something I noticed in 11.02 but not in 10.
Geant throws this kind of Warning

*** G4Exception : GeomVol1002
issued by : G4PVPlacement::CheckOverlaps()
Overlap with volume already placed !
Overlap is detected for volume physSI1:0 (G4SubtractionSolid)
apparently fully encapsulating volume physNitrogen:0 (G4Tubs) at the same level!
NOTE: Reached maximum fixed number -1- of overlaps reports for this volume !
*** This is just a warning message. ***```

when I indeed enclose a volume in another (basically I subtract the small volume in the enclosing one)

  // Liquid Nitrogen
  G4VSolid* solidNitrogen = new G4Tubs("solidNitrogen", 137*mm, 398*mm, 1181.1/2*mm, 0.0*deg, 360.0*deg);
  G4LogicalVolume *logicNitrogen = new G4LogicalVolume(solidNitrogen, liquidNitrogen, "logicNitrogen");
  G4VPhysicalVolume *physNitrogen = new G4PVPlacement(0, G4ThreeVector(0.,0.*mm,869.95*mm), logicNitrogen, "physNitrogen", logicWorld, false, 0, true);

  // #4: Superinsulation in vacuum (between Dewar and Wall of the insulation, with space for the LN)
  G4SubtractionSolid *solidSI1_1 = new G4SubtractionSolid("solidSI1_1", solidIntDewar, solidExtInsulation);
  G4SubtractionSolid *solidSI1 = new G4SubtractionSolid("solidSI1", solidSI1_1, solidNitrogen, 0, G4ThreeVector(0.,0.*mm,869.95*mm)); // subtract LN where the physNitrogen is actully traslated
  G4LogicalVolume *logicSI1 = new G4LogicalVolume(solidSI1_1, SI, "logicSI1");
  G4VPhysicalVolume *physSI1 = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), logicSI1, "physSI1", logicWorld, false, 0, true);

Is this a problem? Is there any other way of dealing with volumes inside volumes? Thanks

At first glance, the second subtraction can be avoided. Construct a logical volume from solidSI1_1 and insert logicNitrogen as a daughter volume there.

But for better understanding, it would be nice to see the definition of solidIntDewar and solidExtInsulation.

  // #3: Dewar
  G4double rExtDewar[6] =  {0.*mm, 412.75*mm, 412.75*mm, 152.75*mm, 152.75*mm, 0*mm};
  G4double zExtDewar[6] =  {1725*mm, 1725*mm, -667*mm, -667*mm, -1785*mm, -1785*mm};
  G4double rinDewar[6] = {0.*mm,0.*mm,0.*mm,0.*mm,0.*mm,0.*mm};
  G4Polycone *solidExtDewar = new G4Polycone("solidExtDewar",0., 360.*deg, 6, zExtDewar, rinDewar, rExtDewar);
  G4double thickness =  0.19*2.54*cm;  // side thickness
  G4double thickness_bottom = 1.00*2.54*cm;  // bottom thickness
  G4double rIntDewar[6] = {rExtDewar[0],rExtDewar[1]-thickness,rExtDewar[2]-thickness,rExtDewar[3]-thickness,rExtDewar[4]-thickness,rExtDewar[5]};
  G4double zIntDewar[6] = {zExtDewar[0]-thickness,zExtDewar[1]-thickness,zExtDewar[2]+thickness,zExtDewar[3]+thickness,zExtDewar[4]+thickness_bottom,zExtDewar[5]+thicknes\
s_bottom};
  G4Polycone *solidIntDewar = new G4Polycone("solidIntDewar", 0., 360. * deg, 6, zIntDewar, rinDewar, rIntDewar);
  G4SubtractionSolid *solidDewar = new G4SubtractionSolid("solidDewar", solidExtDewar, solidIntDewar);
  G4LogicalVolume *logicDewar = new G4LogicalVolume(solidDewar, Al6061, "logicDewar");
  G4VPhysicalVolume *physDewar = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), logicDewar, "physDewar", logicWorld, false, 0, true);
  // #5: Wall of the insulation
  G4double rExtInsulation[8] = {0*mm, 137*mm, 137*mm, 398*mm, 398*mm, 137*mm, 137*mm, 0*mm};
  G4double zExtInsulation[8] = {1460*mm, 1460*mm, 279*mm, 279*mm, -628*mm, -628*mm, -1664*mm, -1664*mm};
  G4double rinInsulation[8] = {0.*mm,0.*mm,0.*mm,0.*mm,0.*mm,0.*mm, 0.*mm,0.*mm};
  G4Polycone *solidExtInsulation = new G4Polycone("solidExtInsulation",0., 360.*deg, 8, zExtInsulation, rinInsulation, rExtInsulation);
  thickness =  0.125*2.54*cm;  // side thickness
  thickness_bottom = 0.500*2.54*cm;  // bottom thickness
  G4double rIntInsulation[8] = {rExtInsulation[0],rExtInsulation[1]-thickness,rExtInsulation[2]-thickness,rExtInsulation[3]-thickness,rExtInsulation[4]-thickness,rExtInsu\
lation[5]-thickness,rExtInsulation[6]-thickness,rExtInsulation[7]};
  G4double zIntInsulation[8] = {zExtInsulation[0]-thickness,zExtInsulation[1]-thickness,zExtInsulation[2]-thickness,zExtInsulation[3]-thickness,zExtInsulation[4]+thicknes\
s,zExtInsulation[5]+thickness,zExtInsulation[6]+thickness_bottom,zExtInsulation[7]+thickness_bottom};
  G4Polycone *solidIntInsulation = new G4Polycone("solidIntInsulation", 0., 360. * deg, 8, zIntInsulation, rinInsulation, rIntInsulation);
  G4SubtractionSolid *solidInsulation = new G4SubtractionSolid("solidInsulation", solidExtInsulation, solidIntInsulation);
  G4LogicalVolume *logicInsulation = new G4LogicalVolume(solidInsulation, Al6061, "logicInsulation");
  G4VPhysicalVolume *physInsulation = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), logicInsulation, "physInsulation", logicWorld, false, 0, true);
  1. It seems that there is a mistake in the code, logicSI1 should be constructed from solidSI1 instead of solidSI1_1
  2. Version 10 had less advanced overlap detection algorithm than version 11.02. This explains why there was no warning.
  3. It should be noted that the geometry could have been constructed in more optimal way without using subtractions. Instead of placing all volumes in the World, the following structure could be constructed:
logicExtDewar, which contains
    logicIntDewar, which contains
        logicNitrogen and logicExtInsulation, the second volume contains
            logicIntInsulation

well spotted thanks. I am now refactoring the code to use the mother/daughter system in the G4PVPlacement