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.

from jax.config import config
config.update("jax_enable_x64", True)

Make “mdb”.

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)
xsmode =  premodit
xsmode assumes ESLOG in wavenumber space: mode=premodit
HITRAN exact name= (12C)(16O)
Background atmosphere:  H2
/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),
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.

import numpy as np
print(np.min(mdb.elower),"-",np.max(mdb.elower),"cm-1")
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 %.

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)
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
uniqidx: 0it [00:00, ?it/s]
Premodit: Twt= 700.0 K Tref= 296.0 K
opt Emax:  84%|████████▍ | 711/845 [03:56<00:44,  3.01it/s]
optimal elower_max= 13922.4751

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.

mdb = MdbExomol(".database/CO/12C-16O/Li2015", nurange=nu_grid, elower_max=13923.)
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
print(np.min(mdb.elower),"-",np.max(mdb.elower),"cm-1")
522.4751 - 13791.2151 cm-1