def outputs(self, output_func=None): """This function print the coefficients computed in the inprod_analytic module""" if output_func is None: self.values.clear() tfunc = self.save_ip else: tfunc = output_func pars = QgParams() pars.set_atmospheric_channel_fourier_modes(6, 6) pars.set_oceanic_basin_fourier_modes(6, 6) # Setting MAOOAM default parameters pars.set_params({'kd': 0.04, 'kdp': 0.04, 'n': 1.5}) aip = analytic.AtmosphericAnalyticInnerProducts(pars) oip = analytic.OceanicAnalyticInnerProducts(pars) aip.connect_to_ocean(oip) natm = pars.nmod[0] noc = pars.nmod[1] for i in range(natm): for j in range(natm): _ip_string_format(tfunc, "a", [i, j], aip.a(i, j)) _ip_string_format(tfunc, "c", [i, j], aip.c(i, j)) for k in range(natm): _ip_string_format(tfunc, "b", [i, j, k], aip.b(i, j, k)) _ip_string_format(tfunc, "g", [i, j, k], aip.g(i, j, k)) for j in range(noc): _ip_string_format(tfunc, "d", [i, j], aip.d(i, j)) _ip_string_format(tfunc, "s", [i, j], aip.s(i, j)) for i in range(noc): for j in range(noc): _ip_string_format(tfunc, "M", [i, j], oip.M(i, j)) _ip_string_format(tfunc, "N", [i, j], oip.N(i, j)) for k in range(noc): _ip_string_format(tfunc, "O", [i, j, k], oip.O(i, j, k)) _ip_string_format(tfunc, "C", [i, j, k], oip.C(i, j, k)) for j in range(natm): _ip_string_format(tfunc, "K", [i, j], oip.K(i, j)) _ip_string_format(tfunc, "W", [i, j], oip.W(i, j))
def outputs(self, output_func=None): """This function print the coefficients computed in the aotensor module""" if output_func is None: self.values.clear() tfunc = self.save_ip else: tfunc = output_func pars = QgParams({'rr': 287.e0, 'sb': 5.6e-8}) pars.set_atmospheric_channel_fourier_modes(6, 6) pars.set_oceanic_basin_fourier_modes(6, 6) # Setting MAOOAM default parameters pars.set_params({'kd': 0.04, 'kdp': 0.04, 'n': 1.5}) aip = analytic.AtmosphericAnalyticInnerProducts(pars) oip = analytic.OceanicAnalyticInnerProducts(pars) aip.connect_to_ocean(oip) aotensor = QgsTensor(pars, aip, oip) for coo, val in zip(aotensor.tensor.coords.T, aotensor.tensor.data): _ip_string_format(tfunc, 'aotensor', coo, val)
# Time parameters dt = 0.1 # Saving the model state n steps write_steps = 100 # transient time to attractor transient_time = 3.e6 # integration time on the attractor integration_time = 5.e5 # file where to write the output filename = "evol_fields.dat" T = time.process_time() # Setting some model parameters # Model parameters instantiation with default specs model_parameters = QgParams() # Mode truncation at the wavenumber 2 in both x and y spatial coordinate model_parameters.set_atmospheric_channel_fourier_modes(2, 2) # Mode truncation at the wavenumber 2 in the x and at the # wavenumber 4 in the y spatial coordinates for the ocean model_parameters.set_oceanic_basin_fourier_modes(2, 4) # Setting MAOOAM parameters according to the publication linked above model_parameters.set_params({ 'kd': 0.0290, 'kdp': 0.0290, 'n': 1.5, 'r': 1.e-7, 'h': 136.5, 'd': 1.1e-7 })
Keyword arguments to pass to the :mod:`pickle` module method. """ f = open(filename, 'rb') tmp_dict = pickle.load(f, **kwargs) f.close() self.__dict__.clear() self.__dict__.update(tmp_dict) def _kronecker_delta(i, j): if i == j: return 1 else: return 0 if __name__ == '__main__': from qgs.params.params import QgParams from qgs.inner_products.analytic import AtmosphericAnalyticInnerProducts, OceanicAnalyticInnerProducts params = QgParams() params.set_atmospheric_channel_fourier_modes(2, 2) params.set_oceanic_basin_fourier_modes(2, 4) aip = AtmosphericAnalyticInnerProducts(params) oip = OceanicAnalyticInnerProducts(params) aip.connect_to_ocean(oip) agotensor = QgsTensor(params, aip, oip)
-------- Not defined and not used.""" return 0 def W(self, i, j): """Function to compute the short-wave radiative forcing of the ocean: :math:`W_{i,j} = (\phi_i, F_j)`.""" if self.connected_to_atmosphere: if not self.stored: res = self.iip.symbolic_inner_product(self._phi(i), self._F(j)) return float( res.subs(self.subs).subs( self.atmospheric_basis.substitutions).subs( self.ground_basis.substitutions)) else: return self._W[i, j] else: return 0 def _apply(ls): return ls[0], ls[1](*ls[2]) if __name__ == '__main__': from qgs.params.params import QgParams pars = QgParams() pars.set_atmospheric_channel_fourier_modes(2, 2, mode='symbolic') pars.set_oceanic_basin_fourier_modes(2, 4, mode='symbolic') aip = AtmosphericSymbolicInnerProducts(pars) oip = OceanicSymbolicInnerProducts(pars)
else: return 1. def _S1(Pj, Pk, Mj, Hk): return -(Pk * Mj + Pj * Hk) / 2. def _S2(Pj, Pk, Mj, Hk): return (Pk * Mj - Pj * Hk) / 2. def _S3(Pj, Pk, Hj, Hk): return (Pk * Hj + Pj * Hk) / 2. def _S4(Pj, Pk, Hj, Hk): return (Pk * Hj - Pj * Hk) / 2. if __name__ == '__main__': from qgs.params.params import QgParams pars = QgParams() pars._set_atmospheric_analytic_fourier_modes(2, 2) pars._set_oceanic_analytic_fourier_modes(2, 4) aip = AtmosphericAnalyticInnerProducts(pars) oip = OceanicAnalyticInnerProducts(pars) aip.connect_to_ocean(oip)
# Time parameters dt = 0.1 # Saving the model state n steps write_steps = 5 # transient time to attractor transient_time = 1.e5 # integration time on the attractor integration_time = 1.e4 # file where to write the output filename = "evol_fields.dat" T = time.process_time() # Setting some model parameters # Model parameters instantiation with some non-default specs model_parameters = QgParams({'phi0_npi': np.deg2rad(50.)/np.pi, 'hd': 0.1}) # Mode truncation at the wavenumber 2 in both x and y spatial coordinate model_parameters.set_atmospheric_channel_fourier_modes(2, 2) # Changing (increasing) the orography depth and the meridional temperature gradient model_parameters.ground_params.set_orography(0.2, 1) model_parameters.atemperature_params.set_thetas(0.2, 0) if print_parameters: print("") # Printing the model's parameters model_parameters.print_params() # Creating the tendencies functions f, Df = create_tendencies(model_parameters)