Source code for pygbe.class_initialization
"""
It contains the necessary functions to set up the surface to be solved.
"""
from pygbe.util.read_data import read_fields, read_surface
from pygbe.classes import Field, Surface
[docs]def initialize_surface(field_array, filename, param):
"""
Initialize the surface of the molecule.
Arguments
---------
field_array: array, contains the Field classes of each region on the surface.
filename : name of the file that contains the surface information.
param : class, parameters related to the surface.
Returns
-------
surf_array : array, contains the surface classes of each region on the
surface.
"""
surf_array = []
# Read filenames for surfaces
files, surf_type, phi0_file = read_surface(filename)
Nsurf = len(files)
for i in range(Nsurf):
print('\nReading surface {} from file {}'.format(i, files[i]))
s = Surface(Nsurf, surf_type[i], phi0_file[i])
s.define_surface(files[i], param)
s.define_regions(field_array, i)
surf_array.append(s)
return surf_array
[docs]def initialize_field(filename, param, field=None):
"""
Initialize all the regions in the surface to be solved.
Arguments
---------
filename : name of the file that contains the surface information.
param : class, parameters related to the surface.
field : dictionary with preloaded field values for programmatic
interaction with PyGBe
Returns
-------
field_array: array, contains the Field classes of each region on the surface.
"""
if not field:
field = read_fields(filename)
for key in ['E', 'kappa']:
for i, e in enumerate(field[key]):
if not isinstance(e, complex) and not isinstance(e, str):
field[key][i] = param.REAL(field[key][i])
Nfield = len(field['LorY'])
field_array = []
Nchild_aux = 0
for i in range(Nfield):
field_aux = Field(field['LorY'][i], field['kappa'][i], field['E'][i],
field['coulomb'][i], field['pot'][i])
if int(field['charges'][i]) == 1: # if there are charges
field_aux.load_charges(field['qfile'][i], param.REAL)
if int(field['Nparent'][i]) == 1: # if it is an enclosed region
field_aux.parent.append(int(field['parent'][i]))
# pointer to parent surface (enclosing surface)
if int(field['Nchild'][i]) > 0: # if there are enclosed regions inside
for j in range(int(field['Nchild'][i])):
field_aux.child.append(int(field['child'][Nchild_aux + j])
) # Loop over children to get pointers
Nchild_aux += int(field['Nchild'][i]) # Point to child for next surface
if field['pot'][i] == 1:
param.E_field.append(i) # Field where surface energy is calculated
field_array.append(field_aux)
return field_array