Source code for params_maooam

"""
    Parameters module
    ======================

    This module defines the parameters for the model.

    .. note :: The python code is available here : \
    `params_maooam.py <../_modules/params_maooam.html>`_ .

    :Example:

    >>> from params_maooam import ndim,natm,noc
    >>> from params_maooam import oms,nboc,ams,nbatm
    >>> from params_maooam import *

    There are three types of parameters :

    * integration parameters : simulation time (transient and effective), \
    time step, writeout and write step time
    * dimensional parameters : dimensions of the truncation of fourier \
    for the atmosphere and the ocean
    * physical parameters : they are used in the tensor for the integration

    Integration parameters
    ----------------------

    .. warning:: Time is adimensional. If t_real is in seconds,
                then t_model = t_real * f_0 where f_0 is the Coriolis
                parameter at 45 degrees latitude ( 1.032e-4 )

    * **t_trans** : the transient simulation time of the model to be on the attractor. The states vectors are not written on evol_field.dat.
    * **t_run** : the running simulation time of the model. The states vectors are written on evol_field.dat every tw.
    * **dt** : the step time.
    * **writeout** : boolean value to decide if the module produces evol_field.dat.
    * **tw** : the step time to write on evol_field.
    * **f2py** : boolean to activate the f2py optimization.

    Dimensional parameters
    ----------------------

    * **oms** and **ams** : the matrices that gives the possible values of the modes Nx and Ny.
    * **nboc** and **natm** : the numbers of oceanic and atmospheric blocs.
    * **natm** and **noc** : the numbers of functions available.
    * **ndim** : the total dimension.


    :Example:

    >>> oms =get_modes(2,4)# ocean mode selection
    >>> ams =get_modes(2,2)# atmosphere mode selection
    >>> nboc,nbatm = 2*4,2*2      # number of blocks
    >>> (natm,noc,ndim)=init_params(nboc,nbatm)
    >>>
    >>> # Oceanic blocs
    >>> #( x block number accounts for half-integer wavenumber e.g 1\
    => 1/2 , 2 => 1, etc...)
    >>> OMS[0,:] = 1,1
    >>> OMS[1,:] = 1,2
    >>> OMS[2,:] = 1,3
    >>> OMS[3,:] = 1,4
    >>> OMS[4,:] = 2,1
    >>> OMS[5,:] = 2,2
    >>> OMS[6,:] = 2,3
    >>> OMS[7,:] = 2,4
    >>> #Atmospheric blocs
    >>> AMS[0,:] = 1,1
    >>> AMS[1,:] = 1,2
    >>> AMS[2,:] = 2,1
    >>> AMS[3,:] = 2,2

    :Typical dimensional parameters:

    * atmosphere 2x,2y ; ocean 2x,4y ; ndim = 36
    * atmosphere 2x,2y ; ocean 4x,4y ; ndim = 52
    * atmosphere 2x,4y ; ocean 2x,4y ; ndim = 56

    Physical parameters
    -------------------

    Some defaut parameters are presented below.
    Some parameters files related to already published article are available in the params folder.

    Scale parameters
    ^^^^^^^^^^^^^^^^

    * **scale = 5.e6**  : characteristic space scale, L*pi
    * **f0 = 1.032e-4**  : Coriolis parameter at 45 degrees latitude
    * **n = 1.5e0**  : aspect ratio (n = 2Ly/Lx ; Lx = 2*pi*L/n; Ly = pi*L)
    * **rra = 6370.e3**  : earth radius
    * **phi0_npi = 0.25e0**  : latitude exprimed in fraction of pi

    Parameters for the ocean
    ^^^^^^^^^^^^^^^^^^^^^^^^^^

    * **gp = 3.1e-2**  : reduced gravity
    * **r = 1.e-8**  : frictional coefficient at the bottom of the ocean
    * **h = 5.e2**  : depth of the water layer of the ocean
    * **d = 1.e-8**  : the coupling parameter (should be divided by f0 to be adim)

    Parameters for the atmosphere
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    * **k = 0.02**  : atmosphere bottom friction coefficient
    * **kp = 0.04**  : atmosphere internal friction coefficient
    * **sig0 = 0.1e0**  : static stability of the atmosphere

    Temperature-related parameters for the ocean
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    * **Go = 2.e8**  : Specific heat capacity of the ocean (50m layer)
    * **Co = 350**  : Constant short-wave radiation of the ocean
    * **To0 = 285.0**  : Stationary solution for the 0-th order ocean temperature

    Temperature-related parameters for the atmosphere
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    * **Ga = 1.e7**  : Specific heat capacity of the atmosphere
    * **Ca = 100.e0**  ; Constant short-wave radiation of the atmosphere
    * **epsa = 0.76e0**  : Emissivity coefficient for the grey-body atmosphere
    * **Ta0 = 270.0**  : Stationary solution for the 0-th order atmospheric temperature

    Other temperature-related parameters/constants
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    * **sc = 1.**  : Ratio of surface to atmosphere temperature
    * **lambda = 20.00**  : Sensible+turbulent heat exchange between oc and atm
    * **rr = 287.e0**  : Gas constant of dry air
    * **sb = 5.6e-8**  : Stefan-Boltzmann constant

    Key values
    ^^^^^^^^^^
    * **k** is the friction coefficient at the bottom of the atmosphere. Typical values are 0.01 or 0.0145 for chaotic regimes.
    * **kp** is the internal friction between the atmosphere layers. kp=2*k
    * **d** is the friction coefficient between the ocean and the atmosphere. Typical values are 6*10^{-8} s^{-1} or 9*10^{-8} s^{-1}.
    * **lambda** is the heat exchange between the ocean and the atmosphere. Typical values are 10 W m^{-2} K^{-1} or 15.06 W m ^{-2} K^{-1}.

    Dependencies
    -------------------

    >>> import numpy as np

    Fonctions
    ---------

    Here are the functions to generate the parameters.
"""
import numpy as np


# -----------------------------------------------------------
# Integration parameters
# -----------------------------------------------------------

t_trans = 10  # transient period (e.g. 1.e7)
t_run = 10  # length of trajectory on the attractor (e.g. 5.e8)
dt = 1.e-2  # the time step
writeout = True  # write out all variables every tw time units
tw = 10.0  # the time step of writing
f2py = False # activate the f2py optimization

# -----------------------------------------------------------
# Number of blocks
# -----------------------------------------------------------

# generate the mode blocks for either ocean or atmosphere
# up to given wavenumbers
# nxmax and nymax are the maximum


[docs]def get_modes(nxmax, nymax): """ Computes the matrix oms and ams with nxmax and nymax""" res = np.zeros((nxmax * nymax, 2)) i = 0 for Nx in range(1, nxmax+1): for Ny in range(1, nymax+1): res[i] = [Nx, Ny] i += 1 return res
[docs]def init_params(nboc, nbatm): """ Computes the dimensions of the system""" natmres = 0 for i in range(0, nbatm): if (ams[i, 0] == 1): natmres = natmres + 3 else: natmres = natmres + 2 s = np.shape(oms) nocres = s[0] return (natmres, nocres, 2 * (natmres + nocres))
# select (.,.) the maximum value admitted for Nx and Ny # don't forget to delete ic.py, it will regenerates oms = get_modes(2, 4) # ocean mode selection ams = get_modes(2, 2) # atmosphere mode selection nboc, nbatm = 2 * 4, 2 * 2 # number of blocks (natm, noc, ndim) = init_params(nboc, nbatm) # noc,natm=8,1 # number of basis functions # ndim=36 # number of variables # ----------------------------------------------------------- # Scale parameters for the ocean and the atmosphere # ----------------------------------------------------------- scale = 5.e6 # the characteristic space scale, L*pi f0 = 1.032e-4 # Coriolis parameter at 45 degrees latitude n = 1.5e0 # aspect ratio (n = 2Ly/Lx ; Lx = 2*pi*L/n; Ly = pi*L) rra = 6370.e3 # earth radius phi0_npi = 0.25e0 # latitude exprimed in fraction of pi # Parameters for the ocean gp = 3.1e-2 # reduced gravity r = 1.e-8 # frictional coefficient at the bottom of the ocean h = 5.e2 # depth of the water layer of the ocean d = 1.e-8 # the coupling parameter (should be divided by f0 to be adim) # Parameters for the atmosphere k = 0.02 # atmosphere bottom friction coefficient kp = 0.04 # atmosphere internal friction coefficient sig0 = 0.1e0 # static stability of the atmosphere # Temperature-related parameters for the ocean Go = 2.e8 # Specific heat capacity of the ocean (50m layer) Co = 350 # Constant short-wave radiation of the ocean To0 = 285.0 # Stationary solution for the 0-th order ocean temperature # Temperature-related parameters for the atmosphere Ga = 1.e7 # Specific heat capacity of the atmosphere Ca = 100.e0 # Constant short-wave radiation of the atmosphere epsa = 0.76e0 # Emissivity coefficient for the grey-body atmosphere Ta0 = 270.0 # Stationary solution for the 0-th order atmospheric temperature # Other temperature-related parameters/constants sc = 1. # Ratio of surface to atmosphere temperature lambdaa = 20.00 # Sensible+turbulent heat exchange between oc and atm rr = 287.e0 # Gas constant of dry air sb = 5.6e-8 # Stefan-Boltzmann constant # ----------------------------------------------------------- # Some general parameters (Domain, beta, gamma, coupling # ----------------------------------------------------------- pi = np.arccos(-1.e0) L = scale / pi phi0 = phi0_npi * pi LR = np.sqrt(gp * h) / f0 G = -L**2 / LR**2 betp = L / rra * np.cos(phi0) / np.sin(phi0) rp = r / f0 dp = d / f0 kd = k * 2 kdp = kp # ----------------------------------------------------------- # Derived Quantities # ----------------------------------------------------------- Cpo = Co / (Go * f0) * rr / (f0**2 * L**2) Lpo = lambdaa / (Go * f0) # Cpa acts on psi1-psi3, not on theta : Cpa = Ca / (Ga * f0) * rr / (f0**2 * L**2) / 2 Lpa = lambdaa / (Ga * f0) # long wave radiation lost by ocean to atmosphere space : sbpo = 4 * sb * To0**3 / (Go * f0) # long wave radiation from atmosphere absorbed by ocean sbpa = 8 * epsa * sb * Ta0**3 / (Go * f0) # long wave radiation from ocean absorbed by atmosphere LSBpo = 2 * epsa * sb * To0**3 / (Ga * f0) # long wave radiation lost by atmosphere to space & ocean LSBpa = 8 * epsa * sb * Ta0**3 / (Ga * f0)