No, the get_emis_vol in pyCloudy is actually doing the numerical integration over the grid. In case of a CloudyModel object, it is done on the cloudy radial mesh and the result should be very close to the cloudy integration. In the case of a 3D object, the integration is performed on the 3D grid, which may leads to inaccurate results in case of a coarse grid and/or lines emitted in a thin region.
import pyCloudy as pc
In = pc.CloudyInput('test1')
In.set_cste_density(2)
In.set_radius(17)
In.set_BB(Teff = 50000, lumi_unit = 'q(H)', lumi_value = 47)
In.set_line_file('lines.dat') # Line intensities
In.read_emis_file('lines.dat') # Line emissivities zone by zone
In.print_input()
In.run_cloudy(dir_='.')
Out = pc.CloudyModel('test1', read_lin=True) # Line emissivities are not read by default
for label in Out.line_labels:
cloudy_intensity = Out.get_line(label)
pyCloudy_intensity = Out.get_emis_vol(label)/ Out.get_emis_vol('H__1__4861A')
diff = (cloudy_intensity - pyCloudy_intensity) / pyCloudy_intensity * 100
print('{0} Cloudy intensity: {1:6.4f} pyCloudy integration: {2:6.4f}, difference: {3:6.4f}%'.format(label, cloudy_intensity, pyCloudy_intensity, diff))