示例#1
0
    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))
示例#2
0
    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)
示例#3
0
# 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
})
示例#4
0
            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)
示例#5
0
        --------
        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)
示例#6
0
    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)
示例#7
0
文件: qgs_rp.py 项目: Climdyn/qgs
# 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)