Source code for galmag.B_generators.B_generator

# -*- coding: utf-8 -*-
# Copyright (C) 2017, 2018  Luiz Felippe S. Rodrigues <luiz.rodrigues@ncl.ac.uk>
#
# This file is part of GalMag.
#
# GalMag is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GalMag is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GalMag.  If not, see <http://www.gnu.org/licenses/>.
#
import numpy as np
from galmag.Grid import Grid


[docs]class B_generator(object): """ Base class for B-field generators Note ---- This class does not work on its own. """ def __init__(self, grid=None, box=None, resolution=None, grid_type='cartesian', default_parameters={}, dtype=np.float): self.dtype = dtype self._init_default_parameters(default_parameters) if grid is not None: self.grid = grid self.box = grid.box self.resolution = grid.resolution self.grid_type = grid.grid_type elif box is not None and resolution is not None: self.box = np.empty((3, 2), dtype=self.dtype) self.resolution = np.empty((3,), dtype=np.int) # use numpy upcasting of scalars and dtype conversion self.grid_type = grid_type self.box[:] = box self.resolution[:] = resolution self.grid = Grid(box=self.box, resolution=self.resolution, grid_type=self.grid_type) else: raise ValueError, 'Must specify either a valid Grid object or its properties (box and resolution).' @property def _builtin_parameter_defaults(self): return {} def _init_default_parameters(self, parameters): default_parameters = {} for [key, value] in self._builtin_parameter_defaults.iteritems(): default_parameters[key] = parameters.get(key, value) self.default_parameters = default_parameters def _parse_parameters(self, parameters): parsed_parameters = {} for [key, value] in self.default_parameters.iteritems(): parsed_parameters[key] = parameters.get(key, value) return parsed_parameters
[docs] def get_B_field(self): raise NotImplementedError