documents/tutorials/elower_setting.rst
Optimal Elower Maximum
^^^^^^^^^^^^^^^^^^^^^^^^^
PreMODIT make a grid of Elower. When the maximum value of Elower in the
database is large, the use of the device memory might become too large for
your GPU device memory and require additional computation time .
We can use the lines whose Elower are below
user-defined value, by using elower_max option in mdb. But, before that,
we need to know the optimal value of the max Elower. This tutorial
explains how to do that. First use FP64 as usual.
.. code:: ipython3
from jax import config
config.update("jax_enable_x64", True)
Make “mdb”.
.. code:: ipython3
from exojax.utils.grids import wavenumber_grid
from exojax.spec.api import MdbExomol
nu_grid, wav, resolution = wavenumber_grid(2200.,
2300.,
10000,
unit="cm-1",
xsmode="premodit")
mdb = MdbExomol(".database/CO/12C-16O/Li2015", nurange=nu_grid)
.. parsed-literal::
xsmode = premodit
xsmode assumes ESLOG in wavenumber space: mode=premodit
HITRAN exact name= (12C)(16O)
Background atmosphere: H2
.. parsed-literal::
/home/kawahara/exojax/src/exojax/utils/grids.py:126: UserWarning: Resolution may be too small. R=224940.4617885842
warnings.warn('Resolution may be too small. R=' + str(resolution),
.. parsed-literal::
Reading .database/CO/12C-16O/Li2015/12C-16O__Li2015.trans.bz2
.broad is used.
Broadening code level= a0
default broadening parameters are used for 71 J lower states in 152 states
Because the device memory use (and computational cost) is proportional
to the maximum of Elower, we should check what the maximum value of
Elower is.
.. code:: ipython3
import numpy as np
print(np.min(mdb.elower),"-",np.max(mdb.elower),"cm-1")
.. parsed-literal::
522.4751 - 84862.9693 cm-1
We assume we will use < 700K. Then, ~85000 cm-1 is enough high.
spec.optgrid.optelower can recommend the optimal value of Elower that
does not change the cross section within 1 %.
.. code:: ipython3
from exojax.spec.optgrid import optelower
Tmax = 700.0 #K
Pmin = 1.e-8 #bar
Eopt = optelower(mdb, nu_grid, Tmax, Pmin)
print("optimal elower_max=",Eopt)
.. parsed-literal::
Maximum Elower = 84862.9693
OpaPremodit: init w/o params setting
Call self.apply_params() to complete the setting.
OpaPremodit: params manually set.
Tref changed: 296.0K->296.0K
.. parsed-literal::
uniqidx: 0it [00:00, ?it/s]
.. parsed-literal::
Premodit: Twt= 700.0 K Tref= 296.0 K
.. parsed-literal::
opt Emax: 84%|████████▍ | 711/845 [03:56<00:44, 3.01it/s]
.. parsed-literal::
optimal elower_max= 13922.4751
.. parsed-literal::
The optimal value of the maximum Elower is just 13923 cm-1. We can use
elower_max option to set the user-defined Elower max value.
.. code:: ipython3
mdb = MdbExomol(".database/CO/12C-16O/Li2015", nurange=nu_grid, elower_max=13923.)
.. parsed-literal::
HITRAN exact name= (12C)(16O)
Background atmosphere: H2
Reading .database/CO/12C-16O/Li2015/12C-16O__Li2015.trans.bz2
.broad is used.
Broadening code level= a0
.. code:: ipython3
print(np.min(mdb.elower),"-",np.max(mdb.elower),"cm-1")
.. parsed-literal::
522.4751 - 13791.2151 cm-1