Skip to content
Snippets Groups Projects
Commit 96760f74 authored by Ashwin Vishnu's avatar Ashwin Vishnu
Browse files

Bugs and enhancements init_fft_from, paths_files

parent 959f6e68
No related branches found
No related tags found
No related merge requests found
......@@ -128,7 +128,8 @@
if mpi.rank == 0:
Fa_fft = self.forcingc_raw_each_time()
self.fstate_coarse.init_fft_from({self.key_forced: Fa_fft})
kwargs = {self.key_forced: Fa_fft}
self.fstate_coarse.init_fft_from(**kwargs)
self.put_forcingc_in_forcing()
......@@ -274,7 +275,8 @@
if mpi.rank == 0:
Fa_fft = self.forcingc_raw_each_time()
Fa_fft = self.normalize_forcingc(Fa_fft, a_fft)
self.fstate_coarse.init_fft_from({self.key_forced: Fa_fft})
kwargs = {self.key_forced: Fa_fft}
self.fstate_coarse.init_fft_from(**kwargs)
self.put_forcingc_in_forcing()
......
......@@ -192,26 +192,10 @@
'path_run =\n' + self.path_run + '\n' +
'init_fields.type: ' + sim.params.init_fields.type)
if mpi.rank == 0 and self.has_to_save and sim.params.NEW_DIR_RESULTS:
# save info on the run
self.sim.info.solver._save_as_xml(
path_file=self.path_run+'/info_solver.xml',
comment=(
'This file has been created by'
' the Python program FluidDyn ' + fluiddyn.__version__ +
'.\n\nIt should not be modified '
'(except for adding xml comments).'))
self.sim.params._save_as_xml(
path_file=self.path_run+'/params_simul.xml',
comment=(
'This file has been created by'
' the Python program FluidDyn ' + fluiddyn.__version__ +
'.\n\nIt should not be modified '
'(except for adding xml comments).'))
self.save_info_solver_params_xml()
if mpi.rank == 0:
plt.ion()
if self.sim.state.is_initialized:
self.init_with_initialized_state()
......@@ -213,8 +197,30 @@
if mpi.rank == 0:
plt.ion()
if self.sim.state.is_initialized:
self.init_with_initialized_state()
def save_info_solver_params_xml(self, replace=False):
comment = ('This file has been created by'
' the Python program FluidDyn ' + fluiddyn.__version__ +
'.\n\nIt should not be modified '
'(except for adding xml comments).')
info_solver_xml_path = self.path_run+'/info_solver.xml'
params_xml_path = self.path_run+'/params_simul.xml'
if mpi.rank == 0 and self.has_to_save and self.sim.params.NEW_DIR_RESULTS:
# save info on the run
if replace:
os.remove(info_solver_xml_path)
os.remove(params_xml_path)
self.sim.info.solver._save_as_xml(
path_file=info_solver_xml_path,
comment=comment)
self.sim.params._save_as_xml(
path_file=params_xml_path,
comment=comment)
def init_with_initialized_state(self):
......@@ -302,7 +308,7 @@
print('move result directory in directory:\n'+new_path_run)
shutil.move(self.path_run, FLUIDSIM_PATH)
self.path_run = new_path_run
def compute_energy(self):
return 0.
......@@ -330,7 +336,23 @@
# self.rotfft_from_vecfft = oper.rotfft_from_vecfft
super(OutputBasePseudoSpectral, self).init_with_oper_and_state()
def end_of_simul(self, total_time):
super(OutputBasePseudoSpectral, self).end_of_simul(total_time)
path = self.path_run
if mpi.rank == 0:
try:
self.spatial_means.path_file = path + '/spatial_means.txt'
self.spectra.path_file1D = path + '/spectra1D.h5'
self.spectra.path_file2D = path + '/spectra2D.h5'
self.spect_energy_budg.path_file = path + '/spectral_energy_budget.h5'
self.pdf.path_file = path + '/pdf.h5'
self.increments.path_file = path + '/increments.h5'
self.time_signals_fft.path_file = path + '/time_sigK.h5'
except AttributeError:
pass
class SpecificOutput(object):
"""Small class for features useful for specific outputs"""
......
......@@ -19,7 +19,6 @@
def __call__(self):
if self.params.enable:
print("Preprocessing...")
self.normalize_init_fields()
self.set_viscosity()
self.set_forcing_rate()
......@@ -23,6 +22,7 @@
self.normalize_init_fields()
self.set_viscosity()
self.set_forcing_rate()
self.sim.output.save_info_solver_params_xml(replace=True)
def normalize_init_fields(self):
"""
......@@ -45,9 +45,12 @@
try:
self.sim.state.init_from_uxuyfft(ux_fft, uy_fft)
except AttributeError:
#self.sim.state.init_fft_from(ux_fft=ux_fft, uy_fft=uy_fft)
self.sim.state.init_fft_from({'ux_fft':ux_fft,
'uy_fft':uy_fft})
rot_fft = self.oper.rotfft_from_vecfft(ux_fft, uy_fft)
self.sim.state.init_fft_from(ux_fft=ux_fft,
uy_fft=uy_fft,
rot_fft=rot_fft)
#self.sim.state.init_fft_from({'ux_fft':ux_fft,
# 'uy_fft':uy_fft})
def set_viscosity(self):
"""
......
......@@ -169,8 +169,6 @@
return (key in self.keys_state_phys or
key in self.keys_computable or
key in self.keys_state_fft)
def init_fft_from(self, args):
"""
.. TODO: use **args and **kwargs
def init_fft_from(self, **kwargs):
"""
......@@ -176,7 +174,10 @@
"""
if len(args) > 1:
raise ValueError(
'Do not know how to initialize with keys "{}".'.format(
repr(args.keys())))
Examples
--------
kwargs = {'ux_fft': u_fft}
init_fft_from(**kwargs)
ux_fft, uy_fft, eta_fft = oper.uxuyetafft_from_qfft(q_fft)
init_fft_from(ux_fft=ux_fft, uy_fft=uy_fft, eta_fft=eta_fft)
"""
keys_state_fft = copy(self.keys_state_fft)
......@@ -182,8 +183,2 @@
keys_state_fft = copy(self.keys_state_fft)
key, value = args.popitem()
if key not in keys_state_fft:
raise ValueError(
'Do not know how to initialize with key "{}".'.format(key))
self.state_fft[:] = 0.
......@@ -189,2 +184,8 @@
self.state_fft[:] = 0.
self.state_fft.set_var(key, value)
for key, value in kwargs.iteritems():
if key not in keys_state_fft:
raise ValueError(
'Do not know how to initialize with key "{}".'.format(key))
self.state_fft.set_var(key, value)
......@@ -88,8 +88,8 @@
params.init_fields._set_child(cls.tag, attribs={
'omega_max': 1.,
'n_vort': 8,
'sd': 0.})
'sd': None})
def __call__(self):
rot = self.vortex_grid_shape()
rot_fft = self.sim.oper.fft2(rot)
......@@ -92,8 +92,8 @@
def __call__(self):
rot = self.vortex_grid_shape()
rot_fft = self.sim.oper.fft2(rot)
self.sim.init_from_rotfft(rot_fft)
self.sim.state.init_from_rotfft(rot_fft)
def vortex_grid_shape(self):
oper = self.sim.oper
......@@ -97,6 +97,7 @@
def vortex_grid_shape(self):
oper = self.sim.oper
params = self.sim.params.init_fields.vortex_grid
def wz_gaussian(XX, YY, sign, Amp=1., sigma=10.):
return (sign * Amp * np.exp(- (XX**2 + YY**2) / (2 * sigma**2)))
......@@ -106,8 +107,8 @@
XX = oper.XX
YY = oper.YY
shape = oper.shapeX
N_vort = self.params.init_fields.vortex_grid.n_vort
SD = self.params.init_fields.vortex_grid.sd
N_vort = params.n_vort
SD = params.sd
if N_vort % 2 != 0:
raise ValueError("Cannot initialize a net circulation free field." +
......@@ -119,5 +120,5 @@
y_vort = np.linspace(0, Ly, N_vort + 1) + dy_vort / 2.
sign_list = self._random_plus_minus_list()
if SD == 0.:
if SD is None:
SD = min(dx_vort, dy_vort) / 2. / 6.
......@@ -123,3 +124,3 @@
SD = min(dx_vort, dy_vort) / 2. / 6.
self.params.init_fields.vortex_grid.sd = SD
params.sd = SD
......@@ -125,7 +126,5 @@
amp = self.params.init_fields.vortex_grid.omega_max
if mpi.rank is 0:
print 'Initializing vortex grid with SD = ', SD, 'amp = ',amp
amp = params.omega_max
omega = np.zeros(shape)
for i in xrange(0, N_vort):
......@@ -143,7 +142,7 @@
"""
from random import choice, shuffle
N = self.params.init_fields.n_vort
N = self.sim.params.init_fields.vortex_grid.n_vort
plus_or_minus = (+1., -1.)
pm = list()
......
......@@ -142,10 +142,12 @@
state_phys.set_var('rot', ifft2(rot_fft))
return state_phys
def init_fft_from(self, args):
if len(args) == 1 and 'q_fft' in args:
self.init_from_qfft(args['q_fft'])
elif len(args) == 1 and 'a_fft' in args:
self.init_from_afft(args['a_fft'])
def init_fft_from(self, **kwargs):
""".. TODO: Delete comments if the function works """
if len(kwargs) == 1:
if 'q_fft' in kwargs:
self.init_from_qfft(kwargs['q_fft'])
if 'a_fft' in kwargs:
self.init_from_afft(kwargs['a_fft'])
else:
......@@ -151,6 +153,6 @@
else:
super(StateSW1L, self).init_fft_from(args)
super(StateSW1L, self).init_fft_from(**kwargs)
def init_from_etafft(self, eta_fft):
state_fft = self.state_fft
state_fft.set_var('ux_fft', np.zeros_like(eta_fft))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment