Replicate Logical Volumes

I’m new to using Geant4, and am trying to model a fiber optic plate. I’d like to simulate the internal reflection of optical photons inside an array of fibers.

I can build a fiber optic plate as a single slab, and see internal reflection setting the material as quartz, and placing it in air. In this case I use a single logical volume, and single physical volume.

The real geometry is an array of fibers, which I can build using a single logical volume, and defining a set of physical volumes by using a nested for loop, using the instance defined in the G4PVPlacement constructor. In this case, I would like to use a skin surface (specifically a SurfaceType(coated), and define the refractive index of the coating/cladding). In this case, I don’t see internal reflection within a single fiber, still just within the whole logical volume.

I read the documentation for skin surfaces, and it does appear to apply this to the logical volume, not my arrayed physical volumes. Is there a way to handle this without defining what could be a large number of logical volumes, explicitly in my code?

A skin surface is the surface entirely surrounding a logical volume. This is useful where a volume is coated with a reflector and placed into many different mother volumes. A limitation is that the skin surface can only have one and the same optical property for all of the enclosed volume’s sides. An optical surface is created and defined using G4OpticalSurface. This surface is assigned to a logical volume using the class G4LogicalSkinSurface.

1 Like

If you attach the skin surface (G4LogicalSkinSurface) to the single fiber as LV, and then create the bundle/array by placing that LV repeatedly, then it should work. For total internal reflection, you do need to have RINDEX defined for both the fibers and for the mother volume they’re placed in (so it can compute the critical angle at the boundary).